zark-design 2.0.0 → 3.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.
@@ -0,0 +1,202 @@
1
+ /* ============================================================
2
+ {{NAME}} DESIGN SYSTEM — TOKENS
3
+ v3 · Sistemas/Apps · {{date}}
4
+ Importe este arquivo no entry-point do projeto antes de
5
+ components.css.
6
+
7
+ Gerado por: npx zark-design init{{#if preset}} --preset {{preset}}{{/if}}
8
+ ============================================================ */
9
+
10
+ :root {
11
+ /* ---------- BRAND ({{name}}) ---------- */
12
+ --brand-50: {{brand.50}};
13
+ --brand-100: {{brand.100}};
14
+ --brand-200: {{brand.200}};
15
+ --brand-300: {{brand.300}};
16
+ --brand-400: {{brand.400}};
17
+ --brand-500: {{brand.500}}; /* primary */
18
+ --brand-600: {{brand.600}};
19
+ --brand-700: {{brand.700}};
20
+ --brand-800: {{brand.800}};
21
+ --brand-900: {{brand.900}};
22
+ --brand: var(--brand-500); /* alias semântico */
23
+
24
+ /* ---------- NEUTRALS (warm paper → ink) ---------- */
25
+ --paper: #fafaf8;
26
+ --canvas: #f5f4f1;
27
+ --surface: #ffffff;
28
+ --line-100: #f0eeea;
29
+ --line-200: #e8e6e1;
30
+ --line-300: #d8d5cf;
31
+
32
+ --ink-50: #f4f3f0;
33
+ --ink-100: #e8e6e1;
34
+ --ink-200: #c8c5bf;
35
+ --ink-300: #a09c95;
36
+ --ink-400: #6f6b64;
37
+ --ink-500: #4a4741;
38
+ --ink-600: #2e2c28;
39
+ --ink-700: #1a1916;
40
+ --ink-800: #111110;
41
+ --ink-900: #0a0a09;
42
+
43
+ /* fundos dark — usados pelo tema dark */
44
+ --bg-void: #151419;
45
+ --bg-glucon: #1b1a1e;
46
+
47
+ /* ---------- SEMANTIC ---------- */
48
+ --success-50: #ecfdf3;
49
+ --success-500: #10a960;
50
+ --success-700: #067a44;
51
+
52
+ --warning-50: #fff8e6;
53
+ --warning-500: #d99000;
54
+ --warning-700: #9a6500;
55
+
56
+ --danger-50: #fef1f1;
57
+ --danger-500: #dc3545;
58
+ --danger-700: #a52833;
59
+
60
+ --info-50: #eef5ff;
61
+ --info-500: #2f7adc;
62
+ --info-700: #1f5ba8;
63
+
64
+ --tag-bg: var(--brand-50);
65
+ --tag-fg: var(--brand-700);
66
+ --code-bg: var(--brand-50);
67
+ --code-fg: var(--brand-700);
68
+
69
+ /* ---------- TYPOGRAPHY ---------- */
70
+ --font-sans: "{{fonts.ui}}", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
71
+ --font-mono: "{{fonts.mono}}", "SF Mono", Menlo, Consolas, monospace;
72
+ --font-display: "{{fonts.display}}", "{{fonts.ui}}", sans-serif;
73
+ --font-ui: "{{fonts.ui}}", -apple-system, sans-serif;
74
+
75
+ /* type scale */
76
+ --fs-2xs: 10px; --fs-xs: 11px; --fs-sm: 12px; --fs-md: 13px;
77
+ --fs-base: 14px; --fs-lg: 16px; --fs-xl: 18px;
78
+ --fs-2xl: 22px; --fs-3xl: 28px; --fs-4xl: 36px;
79
+ --fs-5xl: 48px; --fs-6xl: 64px; --fs-display: 88px;
80
+
81
+ --lh-tight: 1.1; --lh-snug: 1.25; --lh-base: 1.45; --lh-loose: 1.6;
82
+ --ls-tight: -0.02em; --ls-snug: -0.01em; --ls-normal: 0;
83
+ --ls-wide: 0.04em; --ls-wider: 0.08em; --ls-widest: 0.14em;
84
+
85
+ --fw-regular: 400; --fw-medium: 500; --fw-semibold: 600; --fw-bold: 700;
86
+
87
+ /* ---------- SPACING (4px base) ---------- */
88
+ --sp-0: 0; --sp-1: 2px; --sp-2: 4px; --sp-3: 6px; --sp-4: 8px;
89
+ --sp-5: 10px; --sp-6: 12px; --sp-7: 14px; --sp-8: 16px;
90
+ --sp-10: 20px; --sp-12: 24px; --sp-14: 28px; --sp-16: 32px;
91
+ --sp-20: 40px; --sp-24: 48px; --sp-32: 64px; --sp-40: 80px; --sp-48: 96px;
92
+
93
+ /* ---------- RADII (sem pill — design choice) ---------- */
94
+ --r-xs: 3px; --r-sm: 4px; --r-md: 6px; --r-lg: 8px;
95
+ --r-xl: 12px; --r-2xl: 16px; --r-3xl: 20px;
96
+
97
+ /* ---------- SHADOWS (warm, não frias) ---------- */
98
+ --shadow-xs: 0 1px 0 rgba(20, 17, 12, 0.04);
99
+ --shadow-sm: 0 1px 2px rgba(20, 17, 12, 0.05), 0 0 0 1px rgba(20, 17, 12, 0.04);
100
+ --shadow-md: 0 4px 12px rgba(20, 17, 12, 0.06), 0 1px 2px rgba(20, 17, 12, 0.05);
101
+ --shadow-lg: 0 12px 32px rgba(20, 17, 12, 0.08), 0 2px 6px rgba(20, 17, 12, 0.04);
102
+ --shadow-xl: 0 24px 64px rgba(20, 17, 12, 0.12), 0 4px 12px rgba(20, 17, 12, 0.05);
103
+ --shadow-modal: 0 32px 96px rgba(20, 17, 12, 0.18), 0 8px 24px rgba(20, 17, 12, 0.08);
104
+ --shadow-inset: inset 0 1px 0 rgba(255, 255, 255, 0.08);
105
+
106
+ --ring-focus: 0 0 0 3px {{brand.ring}};
107
+ --ring-focus-soft: 0 0 0 3px {{brand.ringSoft}};
108
+
109
+ /* ---------- MOTION ---------- */
110
+ --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
111
+ --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
112
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
113
+ --t-fast: 120ms; --t-base: 180ms; --t-slow: 280ms; --t-slower: 420ms;
114
+
115
+ /* ---------- LAYOUT ---------- */
116
+ --sidebar-w: 240px; --topbar-h: 56px; --container-max: 1280px;
117
+ }
118
+
119
+ /* ============================================================ BASE */
120
+ * { box-sizing: border-box; }
121
+ html, body {
122
+ margin: 0; padding: 0;
123
+ font-family: var(--font-sans);
124
+ font-size: var(--fs-base);
125
+ line-height: var(--lh-base);
126
+ color: var(--ink-700);
127
+ background: var(--paper);
128
+ -webkit-font-smoothing: antialiased;
129
+ text-rendering: optimizeLegibility;
130
+ }
131
+ ::selection { background: var(--brand-200); color: var(--ink-700); }
132
+ a { color: inherit; }
133
+ button { font-family: inherit; }
134
+
135
+ /* ============================================================
136
+ DARK THEME — opt-in via [data-theme="dark"] OU auto via prefers-color-scheme
137
+ ============================================================
138
+ Filosofia: a brand color MANTÉM os mesmos valores no dark — é assinatura.
139
+ O que muda são neutros, semânticos suaves, sombras e ring-focus.
140
+ ============================================================ */
141
+
142
+ [data-theme="dark"] {
143
+ --paper: #0e0d11;
144
+ --canvas: var(--bg-void);
145
+ --surface: var(--bg-glucon);
146
+ --line-100: #232227;
147
+ --line-200: #2c2b32;
148
+ --line-300: #3a383f;
149
+
150
+ --ink-50: #1a1916;
151
+ --ink-100: #2c2b27;
152
+ --ink-200: #4a4741;
153
+ --ink-300: #6f6b64;
154
+ --ink-400: #a09c95;
155
+ --ink-500: #c8c5bf;
156
+ --ink-600: #e0ddd6;
157
+ --ink-700: #f0ede5;
158
+ --ink-800: #f7f5ef;
159
+ --ink-900: #fafaf8;
160
+
161
+ --success-50: #0f2419;
162
+ --warning-50: #2a1f08;
163
+ --danger-50: #2a1010;
164
+ --info-50: #0e1a2c;
165
+
166
+ --tag-bg: var(--brand-800);
167
+ --tag-fg: var(--brand-200);
168
+ --code-bg: var(--brand-900);
169
+ --code-fg: var(--brand-300);
170
+
171
+ --shadow-xs: 0 1px 0 rgba(0, 0, 0, 0.5);
172
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.04);
173
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4), 0 1px 2px rgba(0, 0, 0, 0.3);
174
+ --shadow-lg: 0 12px 32px rgba(0, 0, 0, 0.5), 0 2px 6px rgba(0, 0, 0, 0.3);
175
+ --shadow-xl: 0 24px 64px rgba(0, 0, 0, 0.6), 0 4px 12px rgba(0, 0, 0, 0.3);
176
+ --shadow-modal: 0 32px 96px rgba(0, 0, 0, 0.7), 0 8px 24px rgba(0, 0, 0, 0.4);
177
+ --shadow-inset: inset 0 1px 0 rgba(255, 255, 255, 0.04);
178
+
179
+ --ring-focus: 0 0 0 3px {{brand.ringDark}};
180
+ --ring-focus-soft: 0 0 0 3px {{brand.ringSoftDark}};
181
+ }
182
+
183
+ @media (prefers-color-scheme: dark) {
184
+ :root:not([data-theme="light"]) {
185
+ --paper: #0e0d11;
186
+ --canvas: var(--bg-void);
187
+ --surface: var(--bg-glucon);
188
+ --line-100: #232227;
189
+ --line-200: #2c2b32;
190
+ --line-300: #3a383f;
191
+
192
+ --ink-50: #1a1916; --ink-100: #2c2b27; --ink-200: #4a4741;
193
+ --ink-300: #6f6b64; --ink-400: #a09c95; --ink-500: #c8c5bf;
194
+ --ink-600: #e0ddd6; --ink-700: #f0ede5; --ink-800: #f7f5ef; --ink-900: #fafaf8;
195
+
196
+ --success-50: #0f2419; --warning-50: #2a1f08;
197
+ --danger-50: #2a1010; --info-50: #0e1a2c;
198
+
199
+ --tag-bg: var(--brand-800); --tag-fg: var(--brand-200);
200
+ --code-bg: var(--brand-900); --code-fg: var(--brand-300);
201
+ }
202
+ }
@@ -0,0 +1,34 @@
1
+ // Tokens em JS — para casos onde você precisa do valor em runtime
2
+ // (animações, charts, inline styles dinâmicos). Para CSS, use tokens.css.
3
+
4
+ export const tokens = {
5
+ brand: {
6
+ 50: '{{brand.50}}', 100: '{{brand.100}}', 200: '{{brand.200}}',
7
+ 300: '{{brand.300}}', 400: '{{brand.400}}', 500: '{{brand.500}}',
8
+ 600: '{{brand.600}}', 700: '{{brand.700}}', 800: '{{brand.800}}',
9
+ 900: '{{brand.900}}',
10
+ primary: '{{brand.500}}',
11
+ },
12
+ neutral: {
13
+ paper: '#fafaf8', canvas: '#f5f4f1', surface: '#ffffff',
14
+ line: { 100: '#f0eeea', 200: '#e8e6e1', 300: '#d8d5cf' },
15
+ ink: {
16
+ 50: '#f4f3f0', 100: '#e8e6e1', 200: '#c8c5bf', 300: '#a09c95',
17
+ 400: '#6f6b64', 500: '#4a4741', 600: '#2e2c28', 700: '#1a1916',
18
+ 800: '#111110', 900: '#0a0a09',
19
+ },
20
+ },
21
+ semantic: {
22
+ success: { 50: '#ecfdf3', 500: '#10a960', 700: '#067a44' },
23
+ warning: { 50: '#fff8e6', 500: '#d99000', 700: '#9a6500' },
24
+ danger: { 50: '#fef1f1', 500: '#dc3545', 700: '#a52833' },
25
+ info: { 50: '#eef5ff', 500: '#2f7adc', 700: '#1f5ba8' },
26
+ },
27
+ fonts: {
28
+ ui: '"{{fonts.ui}}"',
29
+ mono: '"{{fonts.mono}}"',
30
+ display: '"{{fonts.display}}"',
31
+ },
32
+ };
33
+
34
+ export default tokens;
@@ -33,18 +33,18 @@
33
33
  .btn-full { width: 100%; }
34
34
 
35
35
  .btn-primary {
36
- background: var(--ember-600); color: #fff;
36
+ background: var(--brand-600); color: #fff;
37
37
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.18), 0 1px 2px rgba(168, 53, 8, 0.18);
38
38
  }
39
- .btn-primary:hover { background: var(--ember-700); }
39
+ .btn-primary:hover { background: var(--brand-700); }
40
40
  .btn-secondary {
41
41
  background: var(--surface); color: var(--ink-700);
42
42
  border-color: var(--line-300);
43
43
  box-shadow: var(--shadow-xs);
44
44
  }
45
45
  .btn-secondary:hover { background: var(--paper); }
46
- .btn-soft { background: var(--ember-50); color: var(--ember-700); }
47
- .btn-soft:hover { background: var(--ember-100); }
46
+ .btn-soft { background: var(--brand-50); color: var(--brand-700); }
47
+ .btn-soft:hover { background: var(--brand-100); }
48
48
  .btn-ghost { background: transparent; color: var(--ink-600); }
49
49
  .btn-ghost:hover{ background: var(--ink-50); }
50
50
  .btn-danger { background: var(--surface); color: var(--danger-700); border-color: var(--line-300); }
@@ -72,7 +72,7 @@
72
72
  width: 100%;
73
73
  transition: box-shadow var(--t-fast), border-color var(--t-fast);
74
74
  }
75
- .input:focus-within { box-shadow: var(--ring-focus); border-color: var(--ember-400); }
75
+ .input:focus-within { box-shadow: var(--ring-focus); border-color: var(--brand-400); }
76
76
  .input.invalid { border-color: var(--danger-500); }
77
77
  .input.invalid:focus-within { box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.18); }
78
78
  .input-sm { height: 28px; padding: 0 8px; font-size: var(--fs-sm); }
@@ -123,7 +123,7 @@
123
123
  .tag-sm { height: 22px; padding: 0 8px; font-size: var(--fs-xs); }
124
124
  .tag-md { height: 26px; padding: 0 10px; font-size: var(--fs-sm); }
125
125
  .tag-square { border-radius: var(--r-xs); }
126
- .tag-ember { background: var(--ember-50); color: var(--ember-700); }
126
+ .tag-ember { background: var(--brand-50); color: var(--brand-700); }
127
127
  .tag-mono { background: var(--tag-bg); color: var(--tag-fg); }
128
128
  .tag-success { background: var(--success-50); color: var(--success-700); }
129
129
  .tag-warning { background: var(--warning-50); color: var(--warning-700); }
@@ -150,14 +150,14 @@
150
150
 
151
151
  /* Status — 5 estados base */
152
152
  .s-todo { background: #fff8e6; color: #9a6500; }
153
- .s-progress { background: var(--ember-50); color: var(--ember-700); }
153
+ .s-progress { background: var(--brand-50); color: var(--brand-700); }
154
154
  .s-review { background: var(--info-50); color: var(--info-700); }
155
155
  .s-done { background: var(--success-50); color: var(--success-700); }
156
156
  .s-canceled { background: var(--ink-50); color: var(--ink-500); }
157
157
  /* Modificadores */
158
158
  .s-overdue { background: var(--danger-50); color: var(--danger-700); }
159
159
  .s-paused { background: var(--warning-50); color: var(--warning-700); }
160
- .s-followup { background: var(--ember-50); color: var(--ember-700); }
160
+ .s-followup { background: var(--brand-50); color: var(--brand-700); }
161
161
 
162
162
  /* Prioridade */
163
163
  .p-urgent { background: var(--danger-50); color: var(--danger-700); }
@@ -179,7 +179,7 @@
179
179
  .badge {
180
180
  display: inline-flex; align-items: center; justify-content: center;
181
181
  min-width: 18px; height: 18px; padding: 0 5px;
182
- background: var(--ember-500); color: #fff;
182
+ background: var(--brand-500); color: #fff;
183
183
  font-size: var(--fs-2xs); font-weight: 600;
184
184
  border-radius: var(--r-sm);
185
185
  }
@@ -193,7 +193,7 @@
193
193
  border: none; cursor: pointer; position: relative;
194
194
  transition: background var(--t-base) var(--ease-out);
195
195
  }
196
- .toggle.on { background: var(--ember-500); }
196
+ .toggle.on { background: var(--brand-500); }
197
197
  .toggle .knob {
198
198
  position: absolute; top: 2px; left: 2px;
199
199
  width: 16px; height: 16px; border-radius: var(--r-xs);
@@ -246,13 +246,13 @@
246
246
  transition: all var(--t-fast);
247
247
  }
248
248
  .chip:hover { background: var(--ink-50); color: var(--ink-700); }
249
- .chip.active { background: var(--ember-50); color: var(--ember-700); border-color: var(--ember-200); }
249
+ .chip.active { background: var(--brand-50); color: var(--brand-700); border-color: var(--brand-200); }
250
250
  .chip .count { font-family: var(--font-mono); font-size: var(--fs-2xs); color: inherit; opacity: 0.7; }
251
251
 
252
252
  /* ---------- AVATAR ---------- */
253
253
  .avatar {
254
254
  width: 24px; height: 24px;
255
- background: var(--ember-500); color: #fff;
255
+ background: var(--brand-500); color: #fff;
256
256
  border-radius: 50%;
257
257
  display: inline-flex; align-items: center; justify-content: center;
258
258
  font-size: 11px; font-weight: 600;
@@ -328,7 +328,7 @@
328
328
  font-size: var(--fs-xs);
329
329
  letter-spacing: var(--ls-widest);
330
330
  text-transform: uppercase;
331
- color: var(--ember-600);
331
+ color: var(--brand-600);
332
332
  margin-bottom: 14px;
333
333
  }
334
334
  .section h2 {
@@ -394,7 +394,7 @@
394
394
  color: #fff;
395
395
  }
396
396
  .stat-icon.green { background: var(--success-500); }
397
- .stat-icon.orange { background: var(--ember-500); }
397
+ .stat-icon.orange { background: var(--brand-500); }
398
398
  .stat-icon.blue { background: var(--info-500); }
399
399
  .stat-icon.purple { background: #7c3aed; }
400
400
  .stat-icon.red { background: var(--danger-500); }
@@ -518,7 +518,7 @@
518
518
  cursor: pointer;
519
519
  transition: all var(--t-fast);
520
520
  }
521
- .k-add:hover { color: var(--ember-700); border-color: var(--ember-300); background: var(--ember-50); }
521
+ .k-add:hover { color: var(--brand-700); border-color: var(--brand-300); background: var(--brand-50); }
522
522
 
523
523
  /* ---------- LEAD CARD ---------- */
524
524
  .lead-card {
@@ -536,7 +536,7 @@
536
536
  .lead-card.is-overdue { border-left: 3px solid var(--danger-500); }
537
537
  .lead-card-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
538
538
  .lead-card-name { display: inline-flex; align-items: center; gap: 6px; font-size: var(--fs-md); font-weight: 600; color: var(--ink-700); }
539
- .lead-card-name .flame { color: var(--ember-500); }
539
+ .lead-card-name .flame { color: var(--brand-500); }
540
540
  .lead-card-sub { font-size: var(--fs-xs); color: var(--ink-400); }
541
541
  .lead-card-meta { display: flex; align-items: center; justify-content: space-between; font-size: var(--fs-xs); color: var(--ink-400); }
542
542
  .lead-card-meta .icons { display: inline-flex; gap: 6px; color: var(--ink-300); }
@@ -548,7 +548,7 @@
548
548
  }
549
549
  .lead-card-followup {
550
550
  display: inline-flex; align-items: center; gap: 4px;
551
- font-size: var(--fs-xs); color: var(--ember-700); font-weight: 500;
551
+ font-size: var(--fs-xs); color: var(--brand-700); font-weight: 500;
552
552
  }
553
553
 
554
554
  /* ---------- EMPTY STATE ---------- */
@@ -620,8 +620,8 @@
620
620
  }
621
621
  .zk-sidebar-link:hover { background: var(--ink-50); color: var(--ink-700); }
622
622
  .zk-sidebar-link.active {
623
- color: var(--ember-700);
624
- background: var(--ember-50);
623
+ color: var(--brand-700);
624
+ background: var(--brand-50);
625
625
  font-weight: 500;
626
626
  }
627
627
 
@@ -686,7 +686,7 @@
686
686
  text-align: center;
687
687
  font-size: var(--fs-md); color: var(--ink-600);
688
688
  }
689
- .announce a { color: var(--ember-700); text-decoration: underline; }
689
+ .announce a { color: var(--brand-700); text-decoration: underline; }
690
690
  .tip {
691
691
  display: flex; gap: 12px; padding: 14px;
692
692
  background: var(--surface);
@@ -695,7 +695,7 @@
695
695
  max-width: 320px;
696
696
  box-shadow: var(--shadow-md);
697
697
  }
698
- .tip .ico { color: var(--ember-500); margin-top: 2px; }
698
+ .tip .ico { color: var(--brand-500); margin-top: 2px; }
699
699
  .tip .what {
700
700
  font-size: var(--fs-xs); font-family: var(--font-mono);
701
701
  letter-spacing: var(--ls-wider);