zark-design 1.0.0 → 2.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/bin/cli.js +7 -6
- package/package.json +2 -2
- package/templates/README.md +264 -0
- package/templates/html/components.css +740 -0
- package/templates/html/index.html +135 -0
- package/templates/html/showcase.html +3550 -0
- package/templates/{tokens.css → html/tokens.css} +89 -112
- package/templates/jsx/App.example.jsx +229 -0
- package/templates/jsx/components/AlertCritical.jsx +43 -0
- package/templates/jsx/components/Avatar.jsx +41 -0
- package/templates/jsx/components/Badge.jsx +12 -0
- package/templates/jsx/components/Banner.jsx +42 -0
- package/templates/jsx/components/Button.jsx +43 -0
- package/templates/jsx/components/Chip.jsx +28 -0
- package/templates/jsx/components/CodeBlock.jsx +42 -0
- package/templates/jsx/components/EmptyState.jsx +27 -0
- package/templates/jsx/components/Funnel.jsx +55 -0
- package/templates/jsx/components/Input.jsx +53 -0
- package/templates/jsx/components/KanbanColumn.jsx +51 -0
- package/templates/jsx/components/Kbd.jsx +11 -0
- package/templates/jsx/components/LeadCard.jsx +79 -0
- package/templates/jsx/components/Modal.jsx +57 -0
- package/templates/jsx/components/Panel.jsx +25 -0
- package/templates/jsx/components/Section.jsx +28 -0
- package/templates/jsx/components/Segmented.jsx +26 -0
- package/templates/jsx/components/Sidebar.jsx +49 -0
- package/templates/jsx/components/Spec.jsx +19 -0
- package/templates/jsx/components/StatCard.jsx +44 -0
- package/templates/jsx/components/TableActions.jsx +34 -0
- package/templates/jsx/components/Tag.jsx +21 -0
- package/templates/jsx/components/TagDot.jsx +26 -0
- package/templates/jsx/components/Toast.jsx +25 -0
- package/templates/jsx/components/Toggle.jsx +29 -0
- package/templates/jsx/components.css +740 -0
- package/templates/{icons.jsx → jsx/icons.jsx} +20 -9
- package/templates/jsx/index.js +31 -0
- package/templates/jsx/tokens.css +283 -0
- package/templates/jsx/tokens.js +62 -0
- package/templates/REFERENCE.md +0 -376
- package/templates/SHOWCASE.html +0 -254
- package/templates/brand.jsx +0 -89
- package/templates/components.jsx +0 -385
- package/templates/design-canvas.jsx +0 -789
- package/templates/foundations.jsx +0 -363
- package/templates/layouts.jsx +0 -232
- package/templates/patterns.jsx +0 -268
- package/templates/primitives.jsx +0 -306
- package/templates/visual-references/pasted-1777605750385-0.png +0 -0
- package/templates/visual-references/pasted-1777605766298-0.png +0 -0
- package/templates/visual-references/pasted-1777605775820-0.png +0 -0
- package/templates/visual-references/pasted-1777605789833-0.png +0 -0
- package/templates/visual-references/pasted-1777605802420-0.png +0 -0
- package/templates/visual-references/pasted-1777605812470-0.png +0 -0
- package/templates/visual-references/pasted-1777605817688-0.png +0 -0
- package/templates/visual-references/pasted-1777605828485-0.png +0 -0
- package/templates/visual-references/pasted-1777605837137-0.png +0 -0
- package/templates/visual-references/pasted-1777605849789-0.png +0 -0
- package/templates/visual-references/pasted-1777605864942-0.png +0 -0
- package/templates/visual-references/pasted-1777605877920-0.png +0 -0
- package/templates/visual-references/pasted-1777605897353-0.png +0 -0
- /package/templates/{assets/zark-logo.png → html/assets/logo-zark-laranja.png} +0 -0
- /package/templates/{assets → html/assets}/zark-icon.png +0 -0
- /package/templates/{visual-references/logo-zark-principal.png → jsx/assets/logo-zark-laranja.png} +0 -0
- /package/templates/{visual-references/icon-zark.png → jsx/assets/zark-icon.png} +0 -0
package/templates/REFERENCE.md
DELETED
|
@@ -1,376 +0,0 @@
|
|
|
1
|
-
# ZARK Design System — Referência para IA
|
|
2
|
-
|
|
3
|
-
> **Para a IA**: este documento é a fonte de verdade do design system ZARK.
|
|
4
|
-
> Os arquivos `.jsx` deste diretório são **REFERÊNCIA visual e estrutural**, não código pra rodar.
|
|
5
|
-
> Adapte os componentes pra stack atual do projeto — React, Vue, Svelte, Solid, Qwik, Blade (Laravel), Django templates, ERB (Rails), HTML puro com Tailwind, CSS modules, styled-components — qualquer uma.
|
|
6
|
-
> Os PNGs em `visual-references/` são **ground truth visual** — quando dúvida sobre aparência, abra e olhe.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 1. Filosofia visual
|
|
11
|
-
|
|
12
|
-
ZARK é um sistema **warm, neutral, ember-on-paper**. Pense em:
|
|
13
|
-
- **Paper** (fundo cremoso quente, não branco puro) com **ink** (texto preto-quente, não preto puro)
|
|
14
|
-
- **Liquid Lava** (`#F56F10`, ember-500) é a única cor de marca — usar **com moderação** em CTAs primários, focus rings, brand moments. Nunca como background dominante de telas inteiras.
|
|
15
|
-
- **Hairlines** finas (1px) em `--line-200` para separação de superfícies — não usar `border` grosso ou caixas duras
|
|
16
|
-
- **Shadows curtas e quentes**, não shadows azuis frios — sombras são `rgba(20, 17, 12, ...)` (warm-black), não `rgba(0,0,0,...)`
|
|
17
|
-
- **Sem gradient** salvo casos pontuais (botão primário ember pode ter mini-gradient interno; nada de big hero gradients)
|
|
18
|
-
- **Tipografia editorial**: Inter pra UI, JetBrains Mono pra código, Darker Grotesque pra moments de display (hero numbers, eyebrows de marketing) — usar com parcimônia
|
|
19
|
-
|
|
20
|
-
A vibe-alvo: **Linear meets Vercel meets Things 3** — superfície limpa, densidade alta de informação por unidade de tela, hierarquia tipográfica clara, microinterações rápidas (120-180ms ease-out).
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## 2. Tokens (`tokens.css`)
|
|
25
|
-
|
|
26
|
-
Importe `tokens.css` no entry-point do projeto. Todos os componentes referenciam variáveis CSS.
|
|
27
|
-
|
|
28
|
-
### 2.1 Brand / Ember
|
|
29
|
-
|
|
30
|
-
| Token | Valor light | Uso |
|
|
31
|
-
|-------|------|-----|
|
|
32
|
-
| `--ember-500` (`--liquid-lava`) | `#f56f10` | Cor de marca. CTAs primários, focus, brand. **Inalterado no dark mode.** |
|
|
33
|
-
| `--ember-600` (`--liquid-lava-dark`) | `#d45e0d` | Hover/active de CTA primário (no light) |
|
|
34
|
-
| `--ember-50/100/200` | tons claros | Bg de tag, code, success-states leves |
|
|
35
|
-
| `--ember-700/800/900` | tons escuros | Texto sobre fundos ember claros |
|
|
36
|
-
| `--dark-void` | `#151419` | Fundo dark mode (canvas) |
|
|
37
|
-
| `--glucon-grey` | `#1b1a1e` | Surface dark mode |
|
|
38
|
-
|
|
39
|
-
### 2.2 Neutros (paper → ink)
|
|
40
|
-
|
|
41
|
-
| Token | Light | Dark | Uso |
|
|
42
|
-
|-------|-------|------|-----|
|
|
43
|
-
| `--paper` | `#fafaf8` | `#0e0d11` | App background |
|
|
44
|
-
| `--canvas` | `#f5f4f1` | `#151419` | Sidebar, painel secundário |
|
|
45
|
-
| `--surface` | `#ffffff` | `#1b1a1e` | Cards, modais, dropdown |
|
|
46
|
-
| `--line-100` | `#f0eeea` | `#232227` | Hairlines em fundos tintados |
|
|
47
|
-
| `--line-200` | `#e8e6e1` | `#2c2b32` | Border padrão |
|
|
48
|
-
| `--line-300` | `#d8d5cf` | `#3a383f` | Divider mais forte |
|
|
49
|
-
| `--ink-700` | `#1a1916` | `#f0ede5` | Texto primary |
|
|
50
|
-
| `--ink-500` | `#4a4741` | `#c8c5bf` | Texto body |
|
|
51
|
-
| `--ink-400` | `#6f6b64` | `#a09c95` | Texto secondary, labels |
|
|
52
|
-
| `--ink-300` | `#a09c95` | `#6f6b64` | Texto disabled, placeholder |
|
|
53
|
-
|
|
54
|
-
### 2.3 Semânticos
|
|
55
|
-
|
|
56
|
-
| Token | Valor | Uso |
|
|
57
|
-
|-------|-------|-----|
|
|
58
|
-
| `--success-500` | `#10a960` | Ícones, badges OK. NUNCA texto sobre fundo claro sem contraste |
|
|
59
|
-
| `--warning-500` | `#d99000` | Avisos não-críticos |
|
|
60
|
-
| `--danger-500` | `#dc3545` | Erros, destrutivo. Em botões: bg + white text |
|
|
61
|
-
| `--info-500` | `#2f7adc` | Info neutra |
|
|
62
|
-
|
|
63
|
-
Sempre acompanha um par `*-50` (bg suave) e `*-700` (texto sobre `*-50`).
|
|
64
|
-
|
|
65
|
-
### 2.4 Tipografia
|
|
66
|
-
|
|
67
|
-
| Token | Valor | Uso |
|
|
68
|
-
|-------|-------|-----|
|
|
69
|
-
| `--font-sans` (`--font-ui`) | Inter | UI texto, botões, labels |
|
|
70
|
-
| `--font-mono` | JetBrains Mono | Código, keyboard shortcuts (`<kbd>`), specs |
|
|
71
|
-
| `--font-display` | Darker Grotesque | Hero numbers, marketing display, eyebrows raros |
|
|
72
|
-
|
|
73
|
-
Escala (px): 10, 11, 12, 13, **14 (base UI)**, 16, 18, 22, 28, 36, 48, 64, 88. Use `--fs-base` (14) como padrão de UI; `--fs-md` (13) pra denso; `--fs-2xl+` pra display.
|
|
74
|
-
|
|
75
|
-
Line-heights: `--lh-tight` (1.1, hero/display), `--lh-snug` (1.25, headings), `--lh-base` (1.45, body), `--lh-loose` (1.6, longform).
|
|
76
|
-
|
|
77
|
-
Letter-spacing: use `--ls-tight` (-0.02em) em headings grandes; `--ls-widest` (0.14em uppercase) em eyebrows e tags.
|
|
78
|
-
|
|
79
|
-
Pesos: 400 regular, 500 medium (UI label/btn), 600 semibold (heading médio), 700 bold (display, ênfase).
|
|
80
|
-
|
|
81
|
-
### 2.5 Espaçamento (4px base)
|
|
82
|
-
|
|
83
|
-
`--sp-1` (2px) → `--sp-48` (96px). Default de stack vertical: `--sp-12` (24px). Default de gap em flex: `--sp-8` (16px). Padding interno de card: `--sp-16` ou `--sp-20`.
|
|
84
|
-
|
|
85
|
-
### 2.6 Raios
|
|
86
|
-
|
|
87
|
-
`--r-xs` (3px) inputs/tags densos · `--r-sm` (4px) inputs/buttons · `--r-md` (6px) padrão · `--r-lg` (8px) cards · `--r-xl` (12px) modals · `--r-2xl` (16px) hero panels · `--r-pill` (999px) avatars/pills.
|
|
88
|
-
|
|
89
|
-
### 2.7 Sombras
|
|
90
|
-
|
|
91
|
-
`--shadow-xs` hairline · `--shadow-sm` card neutro · `--shadow-md` card elevated/hover · `--shadow-lg` popover · `--shadow-xl` modal/sheet · `--shadow-modal` modal full · `--shadow-inset` highlight no topo de elementos.
|
|
92
|
-
|
|
93
|
-
Focus ring: sempre `--ring-focus` em qualquer elemento interativo recebendo foco via teclado.
|
|
94
|
-
|
|
95
|
-
### 2.8 Motion
|
|
96
|
-
|
|
97
|
-
`--t-fast` (120ms) hover de botão · `--t-base` (180ms) padrão · `--t-slow` (280ms) sheets/modals abrindo · `--t-slower` (420ms) transições maiores.
|
|
98
|
-
|
|
99
|
-
Easings: `--ease-out` (saída natural, default), `--ease-in-out` (transitions complexas), `--ease-spring` (microinteractions playful, evite em UI sério).
|
|
100
|
-
|
|
101
|
-
### 2.9 Layout
|
|
102
|
-
|
|
103
|
-
`--sidebar-w` 240px · `--topbar-h` 56px · `--container-max` 1280px.
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
## 3. Tema dark/light
|
|
108
|
-
|
|
109
|
-
`tokens.css` define light por padrão. Dark mode ativado de duas formas:
|
|
110
|
-
|
|
111
|
-
1. **Manual / opt-in:** `<html data-theme="dark">` — controla via JS/setting do user
|
|
112
|
-
2. **Automático via OS:** `@media (prefers-color-scheme: dark)` aplica se `data-theme` não estiver setado pra `light`
|
|
113
|
-
|
|
114
|
-
**Implemente sempre o toggle**. Recomendação UX: salvar preferência em `localStorage` + respeitar OS por padrão.
|
|
115
|
-
|
|
116
|
-
```js
|
|
117
|
-
// Exemplo de toggle (adapte pra stack)
|
|
118
|
-
const setTheme = (mode) => {
|
|
119
|
-
document.documentElement.dataset.theme = mode;
|
|
120
|
-
localStorage.setItem('zark-theme', mode);
|
|
121
|
-
};
|
|
122
|
-
const initTheme = () => {
|
|
123
|
-
const saved = localStorage.getItem('zark-theme');
|
|
124
|
-
if (saved) setTheme(saved);
|
|
125
|
-
// sem saved → respeita OS via @media query (não precisa setar)
|
|
126
|
-
};
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
**Brand:** `--ember-500` (`#f56f10`) é **inalterado** no dark — é assinatura ZARK. Os tons claros `--ember-50/100/200/300` invertem (viram escuros) pra servir de bg suave em cards dark.
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## 4. Primitivos (`primitives.jsx`)
|
|
134
|
-
|
|
135
|
-
Componentes atômicos. Adapte pra stack atual.
|
|
136
|
-
|
|
137
|
-
### 4.1 `Section` — bloco temático com eyebrow + título + descrição
|
|
138
|
-
Props: `eyebrow` (uppercase tracking-wide, font-display), `title`, `description`, `columns` (grid columns).
|
|
139
|
-
Padding vertical generoso (`--sp-32` top, `--sp-16` bottom).
|
|
140
|
-
|
|
141
|
-
### 4.2 `Panel` — card padrão
|
|
142
|
-
Props: `title`, `kicker` (uppercase pequena), `padded` (default true), `children`. Surface bg, hairline border, raio `--r-lg`, sombra `--shadow-sm`. Hover (em variante interativa): eleva pra `--shadow-md`.
|
|
143
|
-
|
|
144
|
-
### 4.3 `Spec` — linha label/value
|
|
145
|
-
Display flex space-between. Label em `--ink-400` `--fs-sm`. Value em `--ink-700` `--fw-medium`. Quando `mono` true, value usa `--font-mono` `--fs-md`. Use em painéis técnicos (config, specs, metadata).
|
|
146
|
-
|
|
147
|
-
### 4.4 `Button`
|
|
148
|
-
**Variantes:**
|
|
149
|
-
- `primary` — bg `--ember-500`, texto `--surface`, sombra leve. Hover: `--ember-600`.
|
|
150
|
-
- `secondary` (default) — bg `--surface`, texto `--ink-700`, border `--line-200`. Hover: bg `--canvas`.
|
|
151
|
-
- `ghost` — sem bg, sem border, texto `--ink-500`. Hover: bg `--canvas`.
|
|
152
|
-
- `danger` — bg `--danger-500`, texto white. Hover escurece.
|
|
153
|
-
- `link` — texto-only, ember underline no hover.
|
|
154
|
-
|
|
155
|
-
**Sizes:** `sm` (h 28px, px 10px, fs 12px) · `md` (h 32px, padrão) · `lg` (h 40px).
|
|
156
|
-
|
|
157
|
-
**Props extras:** `icon` (esquerda), `iconRight`, `full` (width 100%), `disabled` (opacity 0.5, cursor not-allowed).
|
|
158
|
-
|
|
159
|
-
**Focus:** sempre `--ring-focus` no foco via teclado. Nunca remover outline sem oferecer ring custom.
|
|
160
|
-
|
|
161
|
-
### 4.5 `Input`
|
|
162
|
-
Container com `icon` (esquerda) e `suffix` (direita opcional). Border `--line-200`, raio `--r-sm`, padding interno `--sp-8 --sp-10`. Focus: border `--ember-400` + `--ring-focus`. State `invalid`: border `--danger-500` + `--ring` em rgba danger. Mono via prop `mono` (font-mono).
|
|
163
|
-
|
|
164
|
-
### 4.6 `Tag`
|
|
165
|
-
Pill compacto. Tons: `default` (canvas/ink-500), `ember` (ember-100/ember-700), `success`, `warning`, `danger`, `info` (todos usando `--*-50` bg + `--*-700` fg). Sizes `sm`/`md`. Prop `square` muda raio pra `--r-xs`.
|
|
166
|
-
|
|
167
|
-
### 4.7 `Badge`
|
|
168
|
-
Contador pequeno (notificação). Pill, fs `--fs-2xs`, bg `--ember-500`, fg white. Variants tonais via `tone`.
|
|
169
|
-
|
|
170
|
-
### 4.8 `Toggle` (switch)
|
|
171
|
-
Container 40×24 (md), 32×20 (sm). Off: bg `--ink-200`. On: bg `--ember-500`. Knob bg white com sombra-xs. Animação: `--t-base ease-out` no knob translateX.
|
|
172
|
-
|
|
173
|
-
### 4.9 `Segmented`
|
|
174
|
-
Grupo de botões em pill (radio horizontal). Bg `--canvas`, item ativo: bg `--surface` + sombra-xs. Item inativo: text `--ink-400`. Transição `--t-fast`.
|
|
175
|
-
|
|
176
|
-
### 4.10 `Avatar`
|
|
177
|
-
Quadrado/círculo com inicial. Default 24px, bg `--ember-500`, fg white, fw 600. Prop `square` true → `--r-sm`, false → `--r-pill`.
|
|
178
|
-
|
|
179
|
-
### 4.11 `Kbd`
|
|
180
|
-
Tecla. `<kbd>` styled: bg `--canvas`, border `--line-200`, raio `--r-xs`, font-mono, fs `--fs-2xs`, padding `2px 6px`, sombra-inset.
|
|
181
|
-
|
|
182
|
-
---
|
|
183
|
-
|
|
184
|
-
## 5. Componentes (`components.jsx`)
|
|
185
|
-
|
|
186
|
-
Mais complexos, compostos de primitivos.
|
|
187
|
-
|
|
188
|
-
### 5.1 Cards / Endpoint cards
|
|
189
|
-
Layout: ícone à esquerda, label heading + tag à direita, descrição abaixo. Use em listagens (API endpoints, integrações, plans).
|
|
190
|
-
|
|
191
|
-
### 5.2 Showcases (Buttons / Inputs / Tags)
|
|
192
|
-
Padrão de organização visual: linha (`ComponentRow`) com label sticky à esquerda + variantes lado a lado à direita. Use pra documentação interna do design system.
|
|
193
|
-
|
|
194
|
-
### 5.3 Sidebar item
|
|
195
|
-
Linha com ícone (16px), label, opcional `sub` (descrição menor cinza), opcional `kbd` (atalho). Estado active: bg `--canvas` + barra `--ember-500` à esquerda (3px width). Hover: bg `--line-100`.
|
|
196
|
-
|
|
197
|
-
### 5.4 Nav showcase
|
|
198
|
-
Demo de top nav: brand logo à esquerda, items centrais, ações à direita (search, avatar). Altura `--topbar-h`, border-bottom `--line-200`.
|
|
199
|
-
|
|
200
|
-
---
|
|
201
|
-
|
|
202
|
-
## 6. Layouts (`layouts.jsx`)
|
|
203
|
-
|
|
204
|
-
### 6.1 `HeaderBar`
|
|
205
|
-
Topo fixo, altura 56px, bg `--surface`, border-bottom `--line-200`. Contém: brand (esquerda), nav (centro), search + avatar (direita).
|
|
206
|
-
|
|
207
|
-
### 6.2 `Sidebar`
|
|
208
|
-
Lateral 240px, bg `--canvas`, border-right `--line-200`. Contém: brand, search input, list de items agrupados por section (uppercase eyebrow `--ink-400` `--fs-2xs` tracking-wider).
|
|
209
|
-
|
|
210
|
-
### 6.3 `DashboardLayout`
|
|
211
|
-
Composição: HeaderBar + Sidebar + main content area. Main: padding `--sp-24`, max-width opcional `--container-max`.
|
|
212
|
-
|
|
213
|
-
### 6.4 `HeroLayout`
|
|
214
|
-
Marketing/landing. Centered text (max-width 720px), título font-display `--fs-5xl/6xl`, kicker em ember pequeno uppercase, CTA primary + secondary side-by-side abaixo.
|
|
215
|
-
|
|
216
|
-
### 6.5 `PlaygroundLayout`
|
|
217
|
-
Demo interativo. Painel esquerdo (controls/inputs), painel direito (preview). Divisor vertical hairline.
|
|
218
|
-
|
|
219
|
-
### 6.6 `FooterShowcase`
|
|
220
|
-
Footer mínimo: 4 colunas de links com headings + brand+copy à esquerda. bg `--canvas`, border-top `--line-200`.
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
|
-
## 7. Patterns (`patterns.jsx`)
|
|
225
|
-
|
|
226
|
-
### 7.1 Modal
|
|
227
|
-
Overlay `rgba(20,17,12,0.6)` (light) ou `rgba(0,0,0,0.7)` (dark). Modal: max-width 480px, raio `--r-xl`, sombra `--shadow-modal`. Header: título + close icon. Body. Footer: botões à direita.
|
|
228
|
-
|
|
229
|
-
### 7.2 CodeBlock
|
|
230
|
-
Bg `--code-bg`, fg `--code-fg`, raio `--r-md`, padding `--sp-12`, font-mono `--fs-md`. Copy button no canto top-right (ghost size sm). Use `<pre><code>`.
|
|
231
|
-
|
|
232
|
-
### 7.3 DataTable
|
|
233
|
-
Header: bg `--canvas`, fs `--fs-sm`, fw `--fw-medium`, uppercase letter-spacing-wide, padding `--sp-8 --sp-12`. Row: hover bg `--line-100`. Cell: fs `--fs-md`, padding `--sp-10 --sp-12`. Border-bottom `--line-200` em todas as rows. Selected row: bg `--ember-50` + border-left 2px `--ember-500`.
|
|
234
|
-
|
|
235
|
-
### 7.4 DatePicker
|
|
236
|
-
Calendar grid 7×6, dias 32px square. Today: dot ember abaixo. Selected: bg `--ember-500` text white. Hover: bg `--canvas`. Range: bg `--ember-50` (entre datas), endpoints bg `--ember-500`.
|
|
237
|
-
|
|
238
|
-
### 7.5 Banner
|
|
239
|
-
Tons: `info` (info-50 bg, info-700 fg), `success`, `warning`, `danger`. Layout: ícone + texto + close X opcional + CTA opcional à direita. Padding `--sp-12 --sp-16`. Border-left 3px na cor do tom.
|
|
240
|
-
|
|
241
|
-
---
|
|
242
|
-
|
|
243
|
-
## 8. Brand (`brand.jsx`)
|
|
244
|
-
|
|
245
|
-
### 8.1 ZarkLogo
|
|
246
|
-
Variants: `full` (icon + wordmark) · `mark` (só ícone) · `wordmark` (só texto). Default size 28px. Usa font-display Darker Grotesque para wordmark.
|
|
247
|
-
|
|
248
|
-
### 8.2 AsciiBackdrop / AsciiCurve
|
|
249
|
-
Background decorativo retro. ASCII chars em `--ink-200` opacity 0.55 num grid. Use em hero sections, login screens, brand moments. Não usar em UI funcional.
|
|
250
|
-
|
|
251
|
-
---
|
|
252
|
-
|
|
253
|
-
## 9. Iconografia (`icons.jsx`)
|
|
254
|
-
|
|
255
|
-
**Padrão**: outline, stroke 1.5px, viewBox 18×18, `currentColor`. Tamanhos: 14 (denso), 16 (default), 18 (botão), 20 (header), 24 (display).
|
|
256
|
-
|
|
257
|
-
Evite ícones preenchidos (filled) salvo em badge/notificação. Mantenha consistência: se um ícone é outline, todos os outros na mesma linha visual também são.
|
|
258
|
-
|
|
259
|
-
Quando precisar de ícone que não existe: criar seguindo as mesmas regras (1.5px stroke, 18 viewBox), ou usar lucide-icons (que segue padrão similar).
|
|
260
|
-
|
|
261
|
-
---
|
|
262
|
-
|
|
263
|
-
## 10. Como aplicar em qualquer stack
|
|
264
|
-
|
|
265
|
-
### Workflow recomendado pra IA
|
|
266
|
-
|
|
267
|
-
1. **Importar tokens.css** no entry-point do projeto (ex: `src/styles/global.css` em Next, `app.css` em Laravel, `static/css/zark.css` em Django).
|
|
268
|
-
2. **Identificar a unidade equivalente na stack alvo** — em React: componente .jsx; em Vue: .vue; em Blade: partial `.blade.php`; em Django: `{% include %}` template; em HTML/Tailwind: classe utility.
|
|
269
|
-
3. **Reler a definição do primitivo no JSX** + olhar o PNG correspondente em `visual-references/`.
|
|
270
|
-
4. **Implementar usando vars CSS** — `var(--ember-500)`, `var(--paper)` etc. Nunca hardcode `#f56f10` no código stack-side.
|
|
271
|
-
5. **Variantes via prop ou data-attribute** (`data-variant="primary"`), nunca via classe utility crua sem semântica.
|
|
272
|
-
6. **Testar light + dark** com `<html data-theme="dark">`.
|
|
273
|
-
7. **Ajustar tipografia/spacing** seguindo escala dos tokens (`--sp-*`, `--fs-*`).
|
|
274
|
-
|
|
275
|
-
### Exemplos de tradução
|
|
276
|
-
|
|
277
|
-
**JSX (referência)**:
|
|
278
|
-
```jsx
|
|
279
|
-
<button style={{
|
|
280
|
-
background: 'var(--ember-500)',
|
|
281
|
-
color: 'var(--surface)',
|
|
282
|
-
height: 32, padding: '0 14px',
|
|
283
|
-
borderRadius: 'var(--r-sm)',
|
|
284
|
-
fontWeight: 500
|
|
285
|
-
}}>Save</button>
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
**Tailwind + CSS vars** (recomendado):
|
|
289
|
-
```html
|
|
290
|
-
<button class="h-8 px-3.5 rounded font-medium" style="background: var(--ember-500); color: var(--surface);">Save</button>
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
**Vue 3**:
|
|
294
|
-
```vue
|
|
295
|
-
<template>
|
|
296
|
-
<button :class="['btn', `btn-${variant}`]"><slot /></button>
|
|
297
|
-
</template>
|
|
298
|
-
<style scoped>
|
|
299
|
-
.btn-primary { background: var(--ember-500); color: var(--surface); }
|
|
300
|
-
</style>
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
**Laravel Blade**:
|
|
304
|
-
```php
|
|
305
|
-
<button {{ $attributes->merge(['class' => 'zk-btn zk-btn-primary']) }}>
|
|
306
|
-
{{ $slot }}
|
|
307
|
-
</button>
|
|
308
|
-
```
|
|
309
|
-
+ `zk-btn-primary` no CSS global usando vars.
|
|
310
|
-
|
|
311
|
-
**Django template**:
|
|
312
|
-
```django
|
|
313
|
-
{% include "components/button.html" with variant="primary" label="Save" %}
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
**HTML puro**:
|
|
317
|
-
```html
|
|
318
|
-
<button style="background: var(--ember-500); color: var(--surface); height: 32px; padding: 0 14px; border-radius: var(--r-sm); font-weight: 500;">
|
|
319
|
-
Save
|
|
320
|
-
</button>
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
### Checklist quando implementar uma tela
|
|
324
|
-
|
|
325
|
-
- [ ] `tokens.css` importado no entry-point
|
|
326
|
-
- [ ] Toggle de tema (light/dark) implementado
|
|
327
|
-
- [ ] Tipografia: Inter carregado (Google Fonts ou self-hosted), fallback `-apple-system`
|
|
328
|
-
- [ ] Cores: nenhum hex hardcoded — tudo via `var(--...)`
|
|
329
|
-
- [ ] Spacing: usando escala `--sp-*`, sem números mágicos
|
|
330
|
-
- [ ] Hairlines (1px) em vez de borders grossos
|
|
331
|
-
- [ ] Focus visível em todo elemento interativo (`--ring-focus`)
|
|
332
|
-
- [ ] Microinterações em `--t-fast` (120ms) ou `--t-base` (180ms)
|
|
333
|
-
- [ ] Brand `--ember-500` usado com moderação (CTAs, focus, brand moments)
|
|
334
|
-
- [ ] Conferiu visualmente contra `visual-references/*.png` correspondente
|
|
335
|
-
|
|
336
|
-
---
|
|
337
|
-
|
|
338
|
-
## 11. O que NÃO fazer
|
|
339
|
-
|
|
340
|
-
- ❌ Trocar a cor de marca por outra. Ember `#f56f10` é assinatura.
|
|
341
|
-
- ❌ Usar `border: 1px solid black` quando o token é `--line-200`.
|
|
342
|
-
- ❌ Hardcode de cor (`#fafaf8` etc) — sempre use vars.
|
|
343
|
-
- ❌ Sombras frias `rgba(0,0,0,...)` — use as warm `rgba(20,17,12,...)`.
|
|
344
|
-
- ❌ Border-radius inconsistente — use a escala (`--r-sm` em forms, `--r-lg` em cards).
|
|
345
|
-
- ❌ Tipografia fora da escala (`13.5px` etc).
|
|
346
|
-
- ❌ Display font (Darker Grotesque) em UI texto — só hero/marketing.
|
|
347
|
-
- ❌ Animação > 280ms em microinterações.
|
|
348
|
-
- ❌ Brand color como bg dominante de tela inteira.
|
|
349
|
-
- ❌ Substituir Inter por outra fonte sans sem justificativa documentada.
|
|
350
|
-
|
|
351
|
-
---
|
|
352
|
-
|
|
353
|
-
## 12. Arquivos neste diretório
|
|
354
|
-
|
|
355
|
-
| Arquivo | Conteúdo |
|
|
356
|
-
|---|---|
|
|
357
|
-
| `REFERENCE.md` | Este documento (cérebro do sistema) |
|
|
358
|
-
| `tokens.css` | Todas as variáveis CSS (light + dark) |
|
|
359
|
-
| `primitives.jsx` | Section, Panel, Spec, Button, Input, Tag, Badge, Toggle, Segmented, Avatar, Kbd |
|
|
360
|
-
| `components.jsx` | Cards, Showcases, SidebarItem, NavShowcase |
|
|
361
|
-
| `layouts.jsx` | HeaderBar, Sidebar, DashboardLayout, HeroLayout, PlaygroundLayout, FooterShowcase |
|
|
362
|
-
| `patterns.jsx` | Modal, CodeBlock, DataTable, DatePicker, Banner |
|
|
363
|
-
| `brand.jsx` | ZarkLogo, AsciiBackdrop, AsciiCurve |
|
|
364
|
-
| `foundations.jsx` | Tipografia/escala/cores em formato visual |
|
|
365
|
-
| `icons.jsx` | Set de ícones outline 18px |
|
|
366
|
-
| `design-canvas.jsx` | Figma-like canvas wrapper (referência de organização interna do design) |
|
|
367
|
-
| `SHOWCASE.html` | Renderização offline do design system (abra no browser) |
|
|
368
|
-
| `visual-references/*.png` | Screenshots originais da composição — ground truth visual |
|
|
369
|
-
| `assets/` | Logo + ícone ZARK |
|
|
370
|
-
|
|
371
|
-
**Quando dúvida sobre aparência exata** → abra `SHOWCASE.html` no browser ou os PNGs em `visual-references/`.
|
|
372
|
-
**Quando dúvida sobre comportamento** → reler o componente correspondente em `.jsx` (estrutura) + esta referência (semântica).
|
|
373
|
-
|
|
374
|
-
---
|
|
375
|
-
|
|
376
|
-
*Versão deste documento: 1.0 — gerado por `npx zark-design init`. Mantido em <https://github.com/mayconjordanr/zark-design>.*
|
package/templates/SHOWCASE.html
DELETED
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8"/>
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
|
6
|
-
<title>Zark — Design System</title>
|
|
7
|
-
<link rel="preconnect" href="https://fonts.googleapis.com"/>
|
|
8
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
|
|
9
|
-
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Darker+Grotesque:wght@500;600;700;800;900&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"/>
|
|
10
|
-
<link rel="stylesheet" href="tokens.css"/>
|
|
11
|
-
<style>
|
|
12
|
-
@keyframes zark-spin { to { transform: rotate(360deg); } }
|
|
13
|
-
|
|
14
|
-
/* sticky side nav */
|
|
15
|
-
.zark-sidenav {
|
|
16
|
-
position: fixed;
|
|
17
|
-
top: 50%;
|
|
18
|
-
transform: translateY(-50%);
|
|
19
|
-
left: 24px;
|
|
20
|
-
z-index: 50;
|
|
21
|
-
display: flex;
|
|
22
|
-
flex-direction: column;
|
|
23
|
-
gap: 4px;
|
|
24
|
-
padding: 10px 8px;
|
|
25
|
-
background: rgba(255,255,255,0.85);
|
|
26
|
-
border: 1px solid var(--line-200);
|
|
27
|
-
border-radius: var(--r-pill);
|
|
28
|
-
backdrop-filter: blur(8px);
|
|
29
|
-
box-shadow: var(--shadow-md);
|
|
30
|
-
}
|
|
31
|
-
.zark-sidenav a {
|
|
32
|
-
width: 32px;
|
|
33
|
-
height: 32px;
|
|
34
|
-
display: inline-flex; align-items: center; justify-content: center;
|
|
35
|
-
border-radius: 50%;
|
|
36
|
-
color: var(--ink-400);
|
|
37
|
-
font-size: 11px;
|
|
38
|
-
font-family: var(--font-mono);
|
|
39
|
-
text-decoration: none;
|
|
40
|
-
transition: all var(--t-fast);
|
|
41
|
-
}
|
|
42
|
-
.zark-sidenav a:hover { background: var(--ink-50); color: var(--ink-700); }
|
|
43
|
-
|
|
44
|
-
html { scroll-behavior: smooth; }
|
|
45
|
-
</style>
|
|
46
|
-
</head>
|
|
47
|
-
<body>
|
|
48
|
-
<div id="root"></div>
|
|
49
|
-
|
|
50
|
-
<script src="https://unpkg.com/react@18.3.1/umd/react.development.js" integrity="sha384-hD6/rw4ppMLGNu3tX5cjIb+uRZ7UkRJ6BPkLpg4hAu/6onKUg4lLsHAs9EBPT82L" crossorigin="anonymous"></script>
|
|
51
|
-
<script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js" integrity="sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm" crossorigin="anonymous"></script>
|
|
52
|
-
<script src="https://unpkg.com/@babel/standalone@7.29.0/babel.min.js" integrity="sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y" crossorigin="anonymous"></script>
|
|
53
|
-
|
|
54
|
-
<script type="text/babel" src="icons.jsx"></script>
|
|
55
|
-
<script type="text/babel" src="brand.jsx"></script>
|
|
56
|
-
<script type="text/babel" src="primitives.jsx"></script>
|
|
57
|
-
<script type="text/babel" src="foundations.jsx"></script>
|
|
58
|
-
<script type="text/babel" src="components.jsx"></script>
|
|
59
|
-
<script type="text/babel" src="patterns.jsx"></script>
|
|
60
|
-
<script type="text/babel" src="layouts.jsx"></script>
|
|
61
|
-
|
|
62
|
-
<script type="text/babel">
|
|
63
|
-
const { useState, useEffect } = React;
|
|
64
|
-
|
|
65
|
-
// ---------- HERO ----------
|
|
66
|
-
const Hero = () => (
|
|
67
|
-
<header style={{
|
|
68
|
-
position: 'relative',
|
|
69
|
-
padding: '96px 64px 80px',
|
|
70
|
-
background: 'var(--paper)',
|
|
71
|
-
borderBottom: '1px solid var(--line-200)',
|
|
72
|
-
overflow: 'hidden',
|
|
73
|
-
}}>
|
|
74
|
-
<div style={{
|
|
75
|
-
position:'absolute', inset:0, opacity: 0.55, pointerEvents:'none',
|
|
76
|
-
display:'flex', justifyContent:'space-between', padding: 32,
|
|
77
|
-
}}>
|
|
78
|
-
<AsciiBackdrop width={48} height={32} density={0.16} seed={5}/>
|
|
79
|
-
<AsciiBackdrop width={48} height={32} density={0.16} seed={42}/>
|
|
80
|
-
</div>
|
|
81
|
-
|
|
82
|
-
<div style={{ position:'relative', maxWidth: 1200, margin:'0 auto' }}>
|
|
83
|
-
<div style={{ display:'flex', justifyContent:'space-between', alignItems:'center', marginBottom: 80 }}>
|
|
84
|
-
<ZarkLogo size={42}/>
|
|
85
|
-
<div style={{ display:'flex', gap: 6, alignItems:'center', fontSize: 12, fontFamily:'var(--font-mono)', color:'var(--ink-400)' }}>
|
|
86
|
-
<span style={{ color: 'var(--ember-600)' }}>v1.1.0 · saas</span>
|
|
87
|
-
<span>·</span>
|
|
88
|
-
<span>liquid lava palette</span>
|
|
89
|
-
</div>
|
|
90
|
-
</div>
|
|
91
|
-
|
|
92
|
-
<div style={{ maxWidth: 920 }}>
|
|
93
|
-
<div style={{
|
|
94
|
-
fontFamily:'var(--font-mono)', fontSize: 12,
|
|
95
|
-
letterSpacing:'var(--ls-widest)', textTransform:'uppercase',
|
|
96
|
-
color:'var(--ember-600)', marginBottom: 20,
|
|
97
|
-
}}>
|
|
98
|
-
ZARK · SaaS Design System · #F56F10
|
|
99
|
-
</div>
|
|
100
|
-
<h1 style={{
|
|
101
|
-
margin: 0,
|
|
102
|
-
fontFamily:'var(--font-display)',
|
|
103
|
-
fontSize: 88, fontWeight: 700,
|
|
104
|
-
letterSpacing:'-0.028em', lineHeight: 0.98,
|
|
105
|
-
color:'var(--ink-700)',
|
|
106
|
-
}}>
|
|
107
|
-
A warm, technical<br/>
|
|
108
|
-
system for tools that<br/>
|
|
109
|
-
turn the web into <span style={{ color:'var(--ember-500)' }}>data</span>.
|
|
110
|
-
</h1>
|
|
111
|
-
<p style={{
|
|
112
|
-
margin:'32px 0 0', maxWidth: 640,
|
|
113
|
-
fontSize: 18, lineHeight: 1.55, color:'var(--ink-400)',
|
|
114
|
-
}}>
|
|
115
|
-
Tokens, primitives, components, patterns and full layouts — fully mapped from foundations
|
|
116
|
-
to composed surfaces. Inspired by the ember-on-paper aesthetic of modern developer tools,
|
|
117
|
-
but original in execution and made to scale.
|
|
118
|
-
</p>
|
|
119
|
-
|
|
120
|
-
<div style={{ marginTop: 44, display:'flex', gap: 28, flexWrap:'wrap' }}>
|
|
121
|
-
{[
|
|
122
|
-
['10', 'Color steps × 2 ramps'],
|
|
123
|
-
['11', 'Type sizes'],
|
|
124
|
-
['17', 'Spacing tokens'],
|
|
125
|
-
['36', 'Icons'],
|
|
126
|
-
['7', 'Component groups'],
|
|
127
|
-
['3', 'Composed layouts'],
|
|
128
|
-
].map(([n, l]) => (
|
|
129
|
-
<div key={l}>
|
|
130
|
-
<div style={{ fontFamily:'var(--font-display)', fontSize: 36, fontWeight: 600, color:'var(--ink-700)', letterSpacing:'-0.018em', lineHeight: 1 }}>{n}</div>
|
|
131
|
-
<div style={{ fontSize: 11, color:'var(--ink-400)', marginTop: 6, fontFamily:'var(--font-mono)', letterSpacing:'var(--ls-wide)', textTransform:'uppercase' }}>{l}</div>
|
|
132
|
-
</div>
|
|
133
|
-
))}
|
|
134
|
-
</div>
|
|
135
|
-
</div>
|
|
136
|
-
</div>
|
|
137
|
-
</header>
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
// ---------- COMPONENTS SECTION (composes individual showcases) ----------
|
|
141
|
-
const ComponentsSection = () => (
|
|
142
|
-
<Section
|
|
143
|
-
id="components"
|
|
144
|
-
eyebrow="05 — Components"
|
|
145
|
-
title="Composable parts, opinionated defaults"
|
|
146
|
-
description="Every component is a frozen contract. Sizes, paddings, and corner radii are picked from the token scale; states (hover, active, disabled, loading) are encoded in the component itself rather than left to consumers. Five button variants, three input sizes, segmented controls instead of radios, pill tags for status and square mono tags for data labels."
|
|
147
|
-
>
|
|
148
|
-
<ButtonsShowcase/>
|
|
149
|
-
<InputsShowcase/>
|
|
150
|
-
<TagsShowcase/>
|
|
151
|
-
<CardsShowcase/>
|
|
152
|
-
<NavShowcase/>
|
|
153
|
-
</Section>
|
|
154
|
-
);
|
|
155
|
-
|
|
156
|
-
// ---------- SIDE NAV ----------
|
|
157
|
-
const SideNav = () => (
|
|
158
|
-
<nav className="zark-sidenav">
|
|
159
|
-
{[
|
|
160
|
-
['#colors', '01'],
|
|
161
|
-
['#type', '02'],
|
|
162
|
-
['#space', '03'],
|
|
163
|
-
['#icons', '04'],
|
|
164
|
-
['#components', '05'],
|
|
165
|
-
['#patterns', '06'],
|
|
166
|
-
['#layouts', '07'],
|
|
167
|
-
].map(([href, n]) => <a key={href} href={href}>{n}</a>)}
|
|
168
|
-
</nav>
|
|
169
|
-
);
|
|
170
|
-
|
|
171
|
-
// ---------- TOC overview ----------
|
|
172
|
-
const TableOfContents = () => (
|
|
173
|
-
<section style={{ background:'var(--canvas)', borderTop:'1px solid var(--line-200)', borderBottom:'1px solid var(--line-200)', padding:'32px 64px' }}>
|
|
174
|
-
<div style={{ maxWidth: 1200, margin:'0 auto', display:'grid', gridTemplateColumns:'repeat(7, 1fr)', gap: 0 }}>
|
|
175
|
-
{[
|
|
176
|
-
['01','Colors','10 ember + 10 ink + 4 semantic'],
|
|
177
|
-
['02','Type','Inter Tight · Inter · JetBrains'],
|
|
178
|
-
['03','Space','4px atom, 17 stops'],
|
|
179
|
-
['04','Icons','36 outline glyphs'],
|
|
180
|
-
['05','Components','30+ primitives'],
|
|
181
|
-
['06','Patterns','Modal, code, table, picker'],
|
|
182
|
-
['07','Layouts','Dashboard, playground, hero'],
|
|
183
|
-
].map(([n, t, d], i) => (
|
|
184
|
-
<a key={n} href={`#${['colors','type','space','icons','components','patterns','layouts'][i]}`}
|
|
185
|
-
style={{
|
|
186
|
-
padding:'16px 12px',
|
|
187
|
-
borderRight: i < 6 ? '1px solid var(--line-200)' : 'none',
|
|
188
|
-
textDecoration:'none', color:'inherit',
|
|
189
|
-
display:'flex', flexDirection:'column', gap: 4,
|
|
190
|
-
transition:'background var(--t-fast)',
|
|
191
|
-
}}
|
|
192
|
-
onMouseEnter={e=>e.currentTarget.style.background='rgba(255,255,255,0.6)'}
|
|
193
|
-
onMouseLeave={e=>e.currentTarget.style.background='transparent'}>
|
|
194
|
-
<div style={{ fontFamily:'var(--font-mono)', fontSize: 10, color:'var(--ember-600)', letterSpacing:'var(--ls-wide)' }}>{n}</div>
|
|
195
|
-
<div style={{ fontSize: 14, fontWeight: 600, color:'var(--ink-700)' }}>{t}</div>
|
|
196
|
-
<div style={{ fontSize: 11, color:'var(--ink-400)' }}>{d}</div>
|
|
197
|
-
</a>
|
|
198
|
-
))}
|
|
199
|
-
</div>
|
|
200
|
-
</section>
|
|
201
|
-
);
|
|
202
|
-
|
|
203
|
-
// ---------- FOOTER ----------
|
|
204
|
-
const SiteFooter = () => (
|
|
205
|
-
<footer style={{
|
|
206
|
-
background:'var(--ink-800)', color:'#fff',
|
|
207
|
-
padding:'48px 64px 32px',
|
|
208
|
-
marginTop: 0,
|
|
209
|
-
}}>
|
|
210
|
-
<div style={{ maxWidth: 1200, margin:'0 auto' }}>
|
|
211
|
-
<div style={{ display:'flex', justifyContent:'space-between', alignItems:'flex-end', marginBottom: 32 }}>
|
|
212
|
-
<div>
|
|
213
|
-
<div style={{ display:'flex', alignItems:'center', gap: 14, marginBottom: 12 }}>
|
|
214
|
-
<img src="assets/zark-icon.png" alt="ZARK" style={{ height: 44, width: 44, objectFit:'contain', filter:'brightness(0) invert(1)' }}/>
|
|
215
|
-
<span style={{ fontFamily:'var(--font-display)', fontSize: 44, fontWeight: 800, letterSpacing:'-0.02em' }}>ZARK</span>
|
|
216
|
-
</div>
|
|
217
|
-
<div style={{ fontSize: 13, color:'rgba(255,255,255,0.55)', maxWidth: 380, lineHeight: 1.5 }}>
|
|
218
|
-
SaaS Design System · v1.1.0 · Liquid lava palette · Built for technical product surfaces.
|
|
219
|
-
</div>
|
|
220
|
-
</div>
|
|
221
|
-
<div style={{ fontSize: 12, fontFamily:'var(--font-mono)', color:'rgba(255,255,255,0.45)', textAlign:'right', letterSpacing:'var(--ls-wide)' }}>
|
|
222
|
-
ZARK / DS / 2026<br/>
|
|
223
|
-
MAINTAINED BY THE PLATFORM TEAM
|
|
224
|
-
</div>
|
|
225
|
-
</div>
|
|
226
|
-
<div style={{ borderTop:'1px solid rgba(255,255,255,0.08)', paddingTop: 20, display:'flex', justifyContent:'space-between', fontSize: 11, color:'rgba(255,255,255,0.4)', fontFamily:'var(--font-mono)' }}>
|
|
227
|
-
<span>tokens.css · 7 component files · 1 main</span>
|
|
228
|
-
<span>last updated may 1, 2026</span>
|
|
229
|
-
</div>
|
|
230
|
-
</div>
|
|
231
|
-
</footer>
|
|
232
|
-
);
|
|
233
|
-
|
|
234
|
-
// ---------- APP ----------
|
|
235
|
-
const App = () => (
|
|
236
|
-
<div data-screen-label="Zark Design System" style={{ background:'var(--paper)' }}>
|
|
237
|
-
<SideNav/>
|
|
238
|
-
<Hero/>
|
|
239
|
-
<TableOfContents/>
|
|
240
|
-
<ColorsSection/>
|
|
241
|
-
<TypographySection/>
|
|
242
|
-
<SpacingSection/>
|
|
243
|
-
<IconsSection/>
|
|
244
|
-
<ComponentsSection/>
|
|
245
|
-
<PatternsSection/>
|
|
246
|
-
<LayoutsSection/>
|
|
247
|
-
<SiteFooter/>
|
|
248
|
-
</div>
|
|
249
|
-
);
|
|
250
|
-
|
|
251
|
-
ReactDOM.createRoot(document.getElementById('root')).render(<App/>);
|
|
252
|
-
</script>
|
|
253
|
-
</body>
|
|
254
|
-
</html>
|