zark-design 1.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.
Files changed (66) hide show
  1. package/bin/cli.js +364 -90
  2. package/package.json +2 -2
  3. package/templates/README.md.hbs +264 -0
  4. package/templates/_shared/ASSETS-README.md.hbs +39 -0
  5. package/templates/_shared/tokens.css.hbs +202 -0
  6. package/templates/_shared/tokens.js.hbs +34 -0
  7. package/templates/html/components.css +740 -0
  8. package/templates/html/index.html +135 -0
  9. package/templates/html/showcase.html +3550 -0
  10. package/templates/jsx/App.example.jsx +229 -0
  11. package/templates/jsx/components/AlertCritical.jsx +43 -0
  12. package/templates/jsx/components/Avatar.jsx +41 -0
  13. package/templates/jsx/components/Badge.jsx +12 -0
  14. package/templates/jsx/components/Banner.jsx +42 -0
  15. package/templates/jsx/components/Button.jsx +43 -0
  16. package/templates/jsx/components/Chip.jsx +28 -0
  17. package/templates/jsx/components/CodeBlock.jsx +42 -0
  18. package/templates/jsx/components/EmptyState.jsx +27 -0
  19. package/templates/jsx/components/Funnel.jsx +55 -0
  20. package/templates/jsx/components/Input.jsx +53 -0
  21. package/templates/jsx/components/KanbanColumn.jsx +51 -0
  22. package/templates/jsx/components/Kbd.jsx +11 -0
  23. package/templates/jsx/components/LeadCard.jsx +79 -0
  24. package/templates/jsx/components/Modal.jsx +57 -0
  25. package/templates/jsx/components/Panel.jsx +25 -0
  26. package/templates/jsx/components/Section.jsx +28 -0
  27. package/templates/jsx/components/Segmented.jsx +26 -0
  28. package/templates/jsx/components/Sidebar.jsx +49 -0
  29. package/templates/jsx/components/Spec.jsx +19 -0
  30. package/templates/jsx/components/StatCard.jsx +44 -0
  31. package/templates/jsx/components/TableActions.jsx +34 -0
  32. package/templates/jsx/components/Tag.jsx +21 -0
  33. package/templates/jsx/components/TagDot.jsx +26 -0
  34. package/templates/jsx/components/Toast.jsx +25 -0
  35. package/templates/jsx/components/Toggle.jsx +29 -0
  36. package/templates/jsx/components.css +740 -0
  37. package/templates/{icons.jsx → jsx/icons.jsx} +20 -9
  38. package/templates/jsx/index.js +31 -0
  39. package/templates/presets/zark/preset.json +26 -0
  40. package/templates/REFERENCE.md +0 -376
  41. package/templates/SHOWCASE.html +0 -254
  42. package/templates/brand.jsx +0 -89
  43. package/templates/components.jsx +0 -385
  44. package/templates/design-canvas.jsx +0 -789
  45. package/templates/foundations.jsx +0 -363
  46. package/templates/layouts.jsx +0 -232
  47. package/templates/patterns.jsx +0 -268
  48. package/templates/primitives.jsx +0 -306
  49. package/templates/tokens.css +0 -306
  50. package/templates/visual-references/icon-zark.png +0 -0
  51. package/templates/visual-references/logo-zark-principal.png +0 -0
  52. package/templates/visual-references/pasted-1777605750385-0.png +0 -0
  53. package/templates/visual-references/pasted-1777605766298-0.png +0 -0
  54. package/templates/visual-references/pasted-1777605775820-0.png +0 -0
  55. package/templates/visual-references/pasted-1777605789833-0.png +0 -0
  56. package/templates/visual-references/pasted-1777605802420-0.png +0 -0
  57. package/templates/visual-references/pasted-1777605812470-0.png +0 -0
  58. package/templates/visual-references/pasted-1777605817688-0.png +0 -0
  59. package/templates/visual-references/pasted-1777605828485-0.png +0 -0
  60. package/templates/visual-references/pasted-1777605837137-0.png +0 -0
  61. package/templates/visual-references/pasted-1777605849789-0.png +0 -0
  62. package/templates/visual-references/pasted-1777605864942-0.png +0 -0
  63. package/templates/visual-references/pasted-1777605877920-0.png +0 -0
  64. package/templates/visual-references/pasted-1777605897353-0.png +0 -0
  65. /package/templates/{assets/zark-logo.png → presets/zark/assets/logo-zark-laranja.png} +0 -0
  66. /package/templates/{assets → presets/zark/assets}/zark-icon.png +0 -0
@@ -0,0 +1,740 @@
1
+ /* ============================================================
2
+ ZARK DESIGN SYSTEM — COMPONENTS
3
+ v3 · Sistemas/Apps · 2026
4
+ Importe APÓS tokens.css.
5
+ ============================================================ */
6
+
7
+ /* ============================================================
8
+ PRIMITIVES
9
+ ============================================================ */
10
+
11
+ /* ---------- BUTTON ---------- */
12
+ .btn {
13
+ display: inline-flex; align-items: center; justify-content: center;
14
+ gap: 6px;
15
+ height: 32px; padding: 0 12px;
16
+ font-size: var(--fs-md); font-weight: 500;
17
+ font-family: var(--font-sans);
18
+ border: 1px solid transparent;
19
+ border-radius: var(--r-md);
20
+ cursor: pointer;
21
+ white-space: nowrap;
22
+ transition: background var(--t-fast) var(--ease-out),
23
+ color var(--t-fast) var(--ease-out),
24
+ box-shadow var(--t-fast);
25
+ }
26
+ .btn:focus-visible { outline: none; box-shadow: var(--ring-focus); }
27
+ .btn[disabled] { opacity: 0.5; cursor: not-allowed; }
28
+
29
+ .btn-xs { height: 22px; padding: 0 8px; font-size: var(--fs-xs); border-radius: var(--r-sm); gap: 4px; }
30
+ .btn-sm { height: 28px; padding: 0 10px; font-size: var(--fs-sm); border-radius: var(--r-md); }
31
+ .btn-md { height: 32px; padding: 0 12px; font-size: var(--fs-md); border-radius: var(--r-md); }
32
+ .btn-lg { height: 40px; padding: 0 16px; font-size: var(--fs-base); border-radius: var(--r-lg); gap: 8px; }
33
+ .btn-full { width: 100%; }
34
+
35
+ .btn-primary {
36
+ background: var(--brand-600); color: #fff;
37
+ box-shadow: inset 0 1px 0 rgba(255,255,255,0.18), 0 1px 2px rgba(168, 53, 8, 0.18);
38
+ }
39
+ .btn-primary:hover { background: var(--brand-700); }
40
+ .btn-secondary {
41
+ background: var(--surface); color: var(--ink-700);
42
+ border-color: var(--line-300);
43
+ box-shadow: var(--shadow-xs);
44
+ }
45
+ .btn-secondary:hover { background: var(--paper); }
46
+ .btn-soft { background: var(--brand-50); color: var(--brand-700); }
47
+ .btn-soft:hover { background: var(--brand-100); }
48
+ .btn-ghost { background: transparent; color: var(--ink-600); }
49
+ .btn-ghost:hover{ background: var(--ink-50); }
50
+ .btn-danger { background: var(--surface); color: var(--danger-700); border-color: var(--line-300); }
51
+ .btn-danger:hover{ background: var(--danger-50); }
52
+
53
+ .btn-icon-only { padding: 0; width: 32px; }
54
+ .btn-icon-only.btn-sm { width: 28px; }
55
+ .btn-icon-only.btn-xs { width: 22px; }
56
+
57
+ .spinner {
58
+ width: 14px; height: 14px;
59
+ border: 1.5px solid rgba(255,255,255,0.4);
60
+ border-top-color: #fff;
61
+ border-radius: 50%;
62
+ animation: zk-spin 0.8s linear infinite;
63
+ }
64
+
65
+ /* ---------- INPUT ---------- */
66
+ .input {
67
+ display: inline-flex; align-items: center; gap: 6px;
68
+ height: 36px; padding: 0 12px;
69
+ background: var(--surface);
70
+ border: 1px solid var(--line-300);
71
+ border-radius: var(--r-lg);
72
+ width: 100%;
73
+ transition: box-shadow var(--t-fast), border-color var(--t-fast);
74
+ }
75
+ .input:focus-within { box-shadow: var(--ring-focus); border-color: var(--brand-400); }
76
+ .input.invalid { border-color: var(--danger-500); }
77
+ .input.invalid:focus-within { box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.18); }
78
+ .input-sm { height: 28px; padding: 0 8px; font-size: var(--fs-sm); }
79
+ .input-md { height: 36px; }
80
+ .input-lg { height: 44px; padding: 0 14px; font-size: var(--fs-base); }
81
+ .input input {
82
+ flex: 1; border: none; outline: none; background: transparent;
83
+ font-size: var(--fs-md); color: var(--ink-700);
84
+ font-family: var(--font-sans); min-width: 0;
85
+ }
86
+ .input.mono input { font-family: var(--font-mono); }
87
+ .input .ico { color: var(--ink-300); display: inline-flex; }
88
+ .input .suffix { color: var(--ink-300); display: inline-flex; align-items: center; gap: 4px; }
89
+
90
+ /* ---------- URL INPUT FULL (search-style, full width) ---------- */
91
+ .url-input-full {
92
+ display: flex; align-items: center; width: 100%; max-width: 520px; height: 44px;
93
+ background: var(--surface);
94
+ border: 1px solid var(--line-300);
95
+ border-radius: var(--r-md);
96
+ box-shadow: var(--shadow-sm);
97
+ overflow: hidden;
98
+ }
99
+ .url-input-full .scheme {
100
+ display: inline-flex; align-items: center; gap: 6px;
101
+ padding: 0 14px; height: 100%;
102
+ color: var(--ink-400); font-family: var(--font-mono); font-size: var(--fs-sm);
103
+ border-right: 1px solid var(--line-200);
104
+ }
105
+ .url-input-full input {
106
+ flex: 1; border: none; outline: none; background: transparent;
107
+ padding: 0 16px; font-size: var(--fs-md); color: var(--ink-700);
108
+ font-family: var(--font-mono);
109
+ }
110
+
111
+ /* ---------- TAG (tone variants) ---------- */
112
+ .tag {
113
+ display: inline-flex; align-items: center; gap: 4px;
114
+ height: 22px; padding: 0 8px;
115
+ font-size: var(--fs-xs); font-weight: 500;
116
+ font-family: var(--font-mono);
117
+ letter-spacing: var(--ls-wide);
118
+ text-transform: uppercase;
119
+ border-radius: var(--r-sm);
120
+ background: var(--ink-50); color: var(--ink-500);
121
+ }
122
+ .tag-xs { height: 18px; padding: 0 6px; font-size: var(--fs-2xs); }
123
+ .tag-sm { height: 22px; padding: 0 8px; font-size: var(--fs-xs); }
124
+ .tag-md { height: 26px; padding: 0 10px; font-size: var(--fs-sm); }
125
+ .tag-square { border-radius: var(--r-xs); }
126
+ .tag-ember { background: var(--brand-50); color: var(--brand-700); }
127
+ .tag-mono { background: var(--tag-bg); color: var(--tag-fg); }
128
+ .tag-success { background: var(--success-50); color: var(--success-700); }
129
+ .tag-warning { background: var(--warning-50); color: var(--warning-700); }
130
+ .tag-danger { background: var(--danger-50); color: var(--danger-700); }
131
+ .tag-info { background: var(--info-50); color: var(--info-700); }
132
+
133
+ /* ---------- TAG-DOT (status / priority / space, with leading dot) ---------- */
134
+ .tag-dot {
135
+ display: inline-flex; align-items: center; gap: 4px;
136
+ height: 22px; padding: 0 8px;
137
+ font-family: var(--font-mono);
138
+ font-size: var(--fs-xs);
139
+ font-weight: 500;
140
+ letter-spacing: var(--ls-wide);
141
+ text-transform: uppercase;
142
+ border-radius: var(--r-sm);
143
+ white-space: nowrap;
144
+ }
145
+ .tag-dot::before {
146
+ content: '';
147
+ width: 6px; height: 6px; border-radius: var(--r-xs);
148
+ background: currentColor; opacity: 0.85;
149
+ }
150
+
151
+ /* Status — 5 estados base */
152
+ .s-todo { background: #fff8e6; color: #9a6500; }
153
+ .s-progress { background: var(--brand-50); color: var(--brand-700); }
154
+ .s-review { background: var(--info-50); color: var(--info-700); }
155
+ .s-done { background: var(--success-50); color: var(--success-700); }
156
+ .s-canceled { background: var(--ink-50); color: var(--ink-500); }
157
+ /* Modificadores */
158
+ .s-overdue { background: var(--danger-50); color: var(--danger-700); }
159
+ .s-paused { background: var(--warning-50); color: var(--warning-700); }
160
+ .s-followup { background: var(--brand-50); color: var(--brand-700); }
161
+
162
+ /* Prioridade */
163
+ .p-urgent { background: var(--danger-50); color: var(--danger-700); }
164
+ .p-high { background: var(--warning-50); color: var(--warning-700); }
165
+ .p-med { background: #fff8e6; color: #9a6500; }
166
+ .p-low { background: var(--ink-50); color: var(--ink-500); }
167
+
168
+ /* Space/Cliente */
169
+ .sp { font-weight: 600; }
170
+ .sp-zark { background: var(--space-zark-soft); color: var(--space-zark); }
171
+ .sp-allsec { background: var(--space-allsec-soft); color: var(--space-allsec); }
172
+ .sp-vipcar { background: var(--space-vipcar-soft); color: var(--space-vipcar); }
173
+ .sp-limppe { background: var(--space-limppe-soft); color: var(--space-limppe); }
174
+ .sp-gerais { background: var(--space-gerais-soft); color: var(--space-gerais); }
175
+ .sp-mixshop { background: var(--space-mixshop-soft); color: var(--space-mixshop); }
176
+ .sp-vipseg { background: var(--space-vipseg-soft); color: var(--space-vipseg); }
177
+
178
+ /* ---------- BADGE (notification counter) ---------- */
179
+ .badge {
180
+ display: inline-flex; align-items: center; justify-content: center;
181
+ min-width: 18px; height: 18px; padding: 0 5px;
182
+ background: var(--brand-500); color: #fff;
183
+ font-size: var(--fs-2xs); font-weight: 600;
184
+ border-radius: var(--r-sm);
185
+ }
186
+ .badge-ink { background: var(--ink-600); }
187
+
188
+ /* ---------- TOGGLE (square switch) ---------- */
189
+ .toggle {
190
+ width: 36px; height: 20px; padding: 2px;
191
+ border-radius: var(--r-sm);
192
+ background: var(--ink-200);
193
+ border: none; cursor: pointer; position: relative;
194
+ transition: background var(--t-base) var(--ease-out);
195
+ }
196
+ .toggle.on { background: var(--brand-500); }
197
+ .toggle .knob {
198
+ position: absolute; top: 2px; left: 2px;
199
+ width: 16px; height: 16px; border-radius: var(--r-xs);
200
+ background: #fff; box-shadow: 0 1px 2px rgba(0,0,0,0.18);
201
+ transition: left var(--t-base) var(--ease-out);
202
+ }
203
+ .toggle.on .knob { left: 18px; }
204
+ .toggle-sm { width: 28px; height: 16px; }
205
+ .toggle-sm .knob { width: 12px; height: 12px; }
206
+ .toggle-sm.on .knob { left: 14px; }
207
+
208
+ /* ---------- SEGMENTED ---------- */
209
+ .segmented {
210
+ display: inline-flex; padding: 3px; gap: 2px;
211
+ background: var(--ink-50);
212
+ border: 1px solid var(--line-200);
213
+ border-radius: var(--r-lg);
214
+ }
215
+ .segmented button {
216
+ display: inline-flex; align-items: center; gap: 6px;
217
+ height: 28px; padding: 0 12px;
218
+ font-size: var(--fs-sm); font-weight: 500;
219
+ color: var(--ink-400);
220
+ background: transparent;
221
+ border: none; cursor: pointer;
222
+ border-radius: var(--r-md);
223
+ transition: all var(--t-fast);
224
+ }
225
+ .segmented button.active {
226
+ color: var(--ink-700); font-weight: 600;
227
+ background: var(--surface);
228
+ box-shadow: var(--shadow-xs), 0 0 0 1px var(--line-200);
229
+ }
230
+
231
+ /* ---------- CHIP (filter) ---------- */
232
+ .chips { display: inline-flex; gap: 4px; flex-wrap: wrap; }
233
+ .chip {
234
+ display: inline-flex; align-items: center; gap: 6px;
235
+ height: 28px; padding: 0 12px;
236
+ font-family: var(--font-mono);
237
+ font-size: var(--fs-xs);
238
+ font-weight: 500;
239
+ letter-spacing: var(--ls-wide);
240
+ text-transform: uppercase;
241
+ color: var(--ink-500);
242
+ background: transparent;
243
+ border: 1px solid transparent;
244
+ border-radius: var(--r-sm);
245
+ cursor: pointer;
246
+ transition: all var(--t-fast);
247
+ }
248
+ .chip:hover { background: var(--ink-50); color: var(--ink-700); }
249
+ .chip.active { background: var(--brand-50); color: var(--brand-700); border-color: var(--brand-200); }
250
+ .chip .count { font-family: var(--font-mono); font-size: var(--fs-2xs); color: inherit; opacity: 0.7; }
251
+
252
+ /* ---------- AVATAR ---------- */
253
+ .avatar {
254
+ width: 24px; height: 24px;
255
+ background: var(--brand-500); color: #fff;
256
+ border-radius: 50%;
257
+ display: inline-flex; align-items: center; justify-content: center;
258
+ font-size: 11px; font-weight: 600;
259
+ font-family: var(--font-display);
260
+ flex-shrink: 0;
261
+ }
262
+ .avatar-sq { border-radius: var(--r-sm); }
263
+ .av-space {
264
+ width: 24px; height: 24px;
265
+ border-radius: var(--r-sm);
266
+ display: inline-flex; align-items: center; justify-content: center;
267
+ font-family: var(--font-display);
268
+ font-weight: 700;
269
+ font-size: 11px;
270
+ color: #fff;
271
+ flex-shrink: 0;
272
+ }
273
+
274
+ /* ---------- KBD ---------- */
275
+ .kbd {
276
+ display: inline-flex; align-items: center; justify-content: center;
277
+ min-width: 18px; height: 18px; padding: 0 4px;
278
+ font-family: var(--font-mono); font-size: var(--fs-2xs);
279
+ color: var(--ink-400);
280
+ background: var(--surface);
281
+ border: 1px solid var(--line-200); border-bottom-width: 2px;
282
+ border-radius: var(--r-xs);
283
+ }
284
+
285
+ /* ============================================================
286
+ LAYOUTS / PANELS
287
+ ============================================================ */
288
+
289
+ .panel {
290
+ background: var(--surface);
291
+ border: 1px solid var(--line-200);
292
+ border-radius: var(--r-xl);
293
+ overflow: hidden;
294
+ box-shadow: var(--shadow-sm);
295
+ }
296
+ .panel-head {
297
+ padding: 14px 20px;
298
+ border-bottom: 1px solid var(--line-100);
299
+ display: flex; align-items: center; justify-content: space-between;
300
+ background: var(--paper);
301
+ }
302
+ .panel-title { font-size: var(--fs-md); font-weight: 600; color: var(--ink-600); }
303
+ .panel-kicker {
304
+ font-family: var(--font-mono);
305
+ font-size: var(--fs-2xs);
306
+ letter-spacing: var(--ls-wider);
307
+ text-transform: uppercase;
308
+ color: var(--ink-300);
309
+ }
310
+ .panel-body { padding: 24px; }
311
+ .panel-body.flush { padding: 0; }
312
+
313
+ .section {
314
+ border-top: 1px solid var(--line-200);
315
+ padding: 80px 64px;
316
+ }
317
+ .section:first-child { border-top: none; }
318
+ .section-inner { max-width: var(--container-max); margin: 0 auto; }
319
+ .section-header {
320
+ display: grid;
321
+ grid-template-columns: minmax(220px, 280px) 1fr;
322
+ gap: 64px;
323
+ margin-bottom: 56px;
324
+ align-items: start;
325
+ }
326
+ .eyebrow {
327
+ font-family: var(--font-mono);
328
+ font-size: var(--fs-xs);
329
+ letter-spacing: var(--ls-widest);
330
+ text-transform: uppercase;
331
+ color: var(--brand-600);
332
+ margin-bottom: 14px;
333
+ }
334
+ .section h2 {
335
+ font-family: var(--font-display);
336
+ font-size: var(--fs-3xl);
337
+ line-height: var(--lh-tight);
338
+ letter-spacing: var(--ls-tight);
339
+ margin: 0;
340
+ color: var(--ink-700);
341
+ font-weight: 700;
342
+ }
343
+ .section-desc {
344
+ margin: 0;
345
+ color: var(--ink-400);
346
+ font-size: var(--fs-lg);
347
+ line-height: 1.55;
348
+ max-width: 640px;
349
+ }
350
+
351
+ .spec {
352
+ display: flex; justify-content: space-between; gap: 16px;
353
+ padding: 8px 0;
354
+ border-bottom: 1px dashed var(--line-200);
355
+ font-size: var(--fs-sm);
356
+ }
357
+ .spec:last-child { border-bottom: none; }
358
+ .spec .l { color: var(--ink-400); }
359
+ .spec .v { color: var(--ink-600); font-family: var(--font-mono); }
360
+
361
+ .divider {
362
+ height: 1px; background: var(--line-200);
363
+ margin: 24px 0;
364
+ }
365
+
366
+ /* ============================================================
367
+ APP PATTERNS
368
+ ============================================================ */
369
+
370
+ /* ---------- STAT CARD ---------- */
371
+ .stat {
372
+ background: var(--surface);
373
+ border: 1px solid var(--line-200);
374
+ border-radius: var(--r-lg);
375
+ padding: 18px;
376
+ display: flex; flex-direction: column; gap: 12px;
377
+ transition: border-color var(--t-fast);
378
+ }
379
+ .stat:hover { border-color: var(--line-300); }
380
+ .stat.is-critical { border-color: var(--danger-500); background: var(--danger-50); }
381
+ .stat-head { display: flex; align-items: center; justify-content: space-between; }
382
+ .stat-label {
383
+ font-family: var(--font-mono);
384
+ font-size: var(--fs-2xs);
385
+ letter-spacing: var(--ls-wider);
386
+ text-transform: uppercase;
387
+ color: var(--ink-400);
388
+ font-weight: 500;
389
+ }
390
+ .stat-icon {
391
+ width: 28px; height: 28px;
392
+ border-radius: var(--r-md);
393
+ display: inline-flex; align-items: center; justify-content: center;
394
+ color: #fff;
395
+ }
396
+ .stat-icon.green { background: var(--success-500); }
397
+ .stat-icon.orange { background: var(--brand-500); }
398
+ .stat-icon.blue { background: var(--info-500); }
399
+ .stat-icon.purple { background: #7c3aed; }
400
+ .stat-icon.red { background: var(--danger-500); }
401
+ .stat-icon.ghost { background: var(--ink-50); color: var(--ink-500); }
402
+ .stat-value {
403
+ font-family: var(--font-sans);
404
+ font-size: var(--fs-3xl);
405
+ font-weight: 700;
406
+ letter-spacing: var(--ls-tight);
407
+ color: var(--ink-700);
408
+ line-height: 1;
409
+ }
410
+ .stat.is-critical .stat-value { color: var(--danger-700); }
411
+ .stat-sub { font-size: var(--fs-xs); color: var(--ink-400); font-family: var(--font-mono); }
412
+ .stat-progress {
413
+ height: 4px; background: var(--ink-50);
414
+ border-radius: var(--r-xs); overflow: hidden;
415
+ margin-top: 4px;
416
+ }
417
+ .stat-progress > span {
418
+ display: block; height: 100%;
419
+ background: var(--success-500);
420
+ border-radius: var(--r-xs);
421
+ }
422
+
423
+ /* ---------- CRITICAL ALERT ---------- */
424
+ .alert-critical {
425
+ background: var(--danger-50);
426
+ border: 1px solid var(--danger-500);
427
+ border-radius: var(--r-lg);
428
+ padding: 16px 20px;
429
+ }
430
+ .alert-critical-head {
431
+ display: flex; align-items: center; gap: 8px;
432
+ font-family: var(--font-mono);
433
+ font-size: var(--fs-xs);
434
+ letter-spacing: var(--ls-wider);
435
+ text-transform: uppercase;
436
+ font-weight: 600;
437
+ color: var(--danger-700);
438
+ margin-bottom: 12px;
439
+ }
440
+ .alert-critical-list { display: flex; flex-direction: column; gap: 2px; }
441
+ .alert-critical-row {
442
+ display: grid;
443
+ grid-template-columns: auto 1fr auto auto;
444
+ gap: 12px; align-items: center;
445
+ padding: 8px 10px;
446
+ border-radius: var(--r-sm);
447
+ font-size: var(--fs-md);
448
+ color: var(--danger-700);
449
+ }
450
+ .alert-critical-row:hover { background: rgba(220, 53, 69, 0.06); }
451
+ .alert-critical-row .src {
452
+ font-family: var(--font-mono);
453
+ font-size: var(--fs-xs);
454
+ color: var(--danger-700); opacity: 0.7;
455
+ }
456
+ .alert-critical-foot {
457
+ margin-top: 8px; padding: 8px 10px;
458
+ font-size: var(--fs-xs);
459
+ color: var(--danger-700); opacity: 0.7;
460
+ font-family: var(--font-mono);
461
+ }
462
+
463
+ /* ---------- FUNNEL ---------- */
464
+ .funnel {
465
+ display: flex; height: 8px;
466
+ background: var(--ink-50);
467
+ border-radius: var(--r-xs);
468
+ overflow: hidden;
469
+ gap: 2px;
470
+ }
471
+ .funnel > span { display: block; height: 100%; }
472
+ .funnel-stages {
473
+ display: grid;
474
+ grid-template-columns: repeat(6, 1fr);
475
+ gap: 8px;
476
+ margin-top: 12px;
477
+ }
478
+ .funnel-stage { display: flex; flex-direction: column; gap: 2px; }
479
+ .funnel-stage-label { font-size: var(--fs-xs); color: var(--ink-500); }
480
+ .funnel-stage-count {
481
+ font-family: var(--font-mono);
482
+ font-size: var(--fs-sm);
483
+ font-weight: 600;
484
+ color: var(--ink-700);
485
+ }
486
+
487
+ /* ---------- KANBAN ---------- */
488
+ .kanban {
489
+ display: flex; gap: 12px;
490
+ overflow-x: auto;
491
+ padding-bottom: 8px;
492
+ }
493
+ .k-col {
494
+ flex: 1; min-width: 240px;
495
+ background: transparent;
496
+ display: flex; flex-direction: column; gap: 8px;
497
+ }
498
+ .k-col-head {
499
+ display: flex; align-items: center; justify-content: space-between;
500
+ padding: 8px 12px;
501
+ font-family: var(--font-mono);
502
+ font-size: var(--fs-xs);
503
+ letter-spacing: var(--ls-wide);
504
+ text-transform: uppercase;
505
+ font-weight: 600;
506
+ color: var(--ink-600);
507
+ }
508
+ .k-col-head .lh { display: inline-flex; align-items: center; gap: 8px; }
509
+ .k-col-head .dot { width: 8px; height: 8px; border-radius: 50%; }
510
+ .k-col-head .count { color: var(--ink-400); font-weight: 500; }
511
+ .k-add {
512
+ display: flex; align-items: center; justify-content: center; gap: 6px;
513
+ padding: 8px;
514
+ font-size: var(--fs-sm); color: var(--ink-400);
515
+ background: transparent;
516
+ border: 1px dashed var(--line-300);
517
+ border-radius: var(--r-md);
518
+ cursor: pointer;
519
+ transition: all var(--t-fast);
520
+ }
521
+ .k-add:hover { color: var(--brand-700); border-color: var(--brand-300); background: var(--brand-50); }
522
+
523
+ /* ---------- LEAD CARD ---------- */
524
+ .lead-card {
525
+ background: var(--surface);
526
+ border: 1px solid var(--line-200);
527
+ border-radius: var(--r-md);
528
+ padding: 12px;
529
+ display: flex; flex-direction: column; gap: 8px;
530
+ cursor: grab;
531
+ transition: all var(--t-fast);
532
+ position: relative;
533
+ }
534
+ .lead-card:hover { box-shadow: var(--shadow-md); border-color: var(--line-300); }
535
+ .lead-card.is-paused { border-left: 3px solid var(--warning-500); }
536
+ .lead-card.is-overdue { border-left: 3px solid var(--danger-500); }
537
+ .lead-card-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
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(--brand-500); }
540
+ .lead-card-sub { font-size: var(--fs-xs); color: var(--ink-400); }
541
+ .lead-card-meta { display: flex; align-items: center; justify-content: space-between; font-size: var(--fs-xs); color: var(--ink-400); }
542
+ .lead-card-meta .icons { display: inline-flex; gap: 6px; color: var(--ink-300); }
543
+ .lead-card-foot {
544
+ display: flex; align-items: center; gap: 6px;
545
+ padding-top: 8px;
546
+ border-top: 1px dashed var(--line-200);
547
+ font-size: var(--fs-xs); color: var(--ink-400);
548
+ }
549
+ .lead-card-followup {
550
+ display: inline-flex; align-items: center; gap: 4px;
551
+ font-size: var(--fs-xs); color: var(--brand-700); font-weight: 500;
552
+ }
553
+
554
+ /* ---------- EMPTY STATE ---------- */
555
+ .empty-state {
556
+ border: 1px dashed var(--line-300);
557
+ border-radius: var(--r-md);
558
+ padding: 32px 16px;
559
+ display: flex; flex-direction: column; align-items: center; gap: 8px;
560
+ color: var(--ink-300);
561
+ text-align: center;
562
+ background: transparent;
563
+ }
564
+ .empty-state .ico {
565
+ width: 32px; height: 32px;
566
+ display: inline-flex; align-items: center; justify-content: center;
567
+ color: var(--ink-300);
568
+ }
569
+ .empty-state .text { font-size: var(--fs-sm); color: var(--ink-400); }
570
+
571
+ /* ---------- TABLE ACTIONS ---------- */
572
+ .t-actions { display: inline-flex; align-items: center; gap: 6px; }
573
+ .t-act {
574
+ width: 22px; height: 22px;
575
+ display: inline-flex; align-items: center; justify-content: center;
576
+ border: 1px solid var(--line-200);
577
+ border-radius: var(--r-sm);
578
+ background: var(--surface);
579
+ cursor: pointer;
580
+ transition: all var(--t-fast);
581
+ }
582
+ .t-act:hover { background: var(--paper); }
583
+ .t-act.t-confirm { color: var(--success-700); }
584
+ .t-act.t-confirm:hover { background: var(--success-50); border-color: var(--success-500); }
585
+ .t-act.t-edit { color: var(--ink-500); }
586
+ .t-act.t-delete { color: var(--danger-700); }
587
+ .t-act.t-delete:hover { background: var(--danger-50); border-color: var(--danger-500); }
588
+
589
+ /* ---------- SIDEBAR ---------- */
590
+ .zk-sidebar {
591
+ width: var(--sidebar-w);
592
+ background: var(--canvas);
593
+ border-right: 1px solid var(--line-200);
594
+ padding: 20px 14px;
595
+ display: flex; flex-direction: column;
596
+ }
597
+ .zk-sidebar-brand {
598
+ display: flex; align-items: center; gap: 10px;
599
+ padding: 8px 8px 22px;
600
+ }
601
+ .zk-sidebar-logo { height: 36px; width: auto; display: block; }
602
+ .zk-sidebar-eyebrow {
603
+ font-family: var(--font-mono);
604
+ font-size: var(--fs-2xs);
605
+ letter-spacing: var(--ls-widest);
606
+ text-transform: uppercase;
607
+ color: var(--ink-300);
608
+ padding: 6px 10px 8px;
609
+ margin-top: 18px;
610
+ }
611
+ .zk-sidebar-link {
612
+ display: flex; align-items: center; gap: 10px;
613
+ padding: 7px 10px;
614
+ font-size: var(--fs-md);
615
+ color: var(--ink-500);
616
+ border-radius: var(--r-md);
617
+ cursor: pointer;
618
+ transition: all var(--t-fast) var(--ease-out);
619
+ position: relative;
620
+ }
621
+ .zk-sidebar-link:hover { background: var(--ink-50); color: var(--ink-700); }
622
+ .zk-sidebar-link.active {
623
+ color: var(--brand-700);
624
+ background: var(--brand-50);
625
+ font-weight: 500;
626
+ }
627
+
628
+ /* ---------- MODAL ---------- */
629
+ .modal-overlay {
630
+ position: fixed; inset: 0;
631
+ background: rgba(20, 17, 12, 0.60);
632
+ backdrop-filter: blur(2px);
633
+ display: flex; align-items: center; justify-content: center;
634
+ z-index: 100;
635
+ }
636
+ .modal {
637
+ position: relative;
638
+ max-width: 460px; width: calc(100% - 32px);
639
+ background: var(--surface);
640
+ border: 1px solid var(--line-200);
641
+ border-radius: var(--r-2xl);
642
+ box-shadow: var(--shadow-modal);
643
+ overflow: hidden;
644
+ animation: zk-fadein var(--t-slow) var(--ease-out);
645
+ }
646
+ .modal-head { padding: 24px 24px 0; }
647
+ .modal-title-row { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 6px; }
648
+ .modal-title {
649
+ margin: 0;
650
+ font-size: var(--fs-xl); font-weight: 700;
651
+ font-family: var(--font-display);
652
+ letter-spacing: -0.012em;
653
+ color: var(--ink-700);
654
+ }
655
+ .modal-desc { margin: 0 0 16px; font-size: var(--fs-sm); color: var(--ink-400); }
656
+ .modal-body { padding: 16px 24px; }
657
+ .modal-foot {
658
+ padding: 16px 20px;
659
+ border-top: 1px solid var(--line-100);
660
+ display: flex; justify-content: flex-end; gap: 8px;
661
+ }
662
+
663
+ /* ---------- CODE BLOCK ---------- */
664
+ .code-block {
665
+ background: var(--code-bg);
666
+ border: 1px solid var(--line-200);
667
+ border-radius: var(--r-lg);
668
+ padding: 16px;
669
+ font-family: var(--font-mono); font-size: var(--fs-sm);
670
+ line-height: 1.7;
671
+ color: var(--ink-600);
672
+ position: relative;
673
+ overflow-x: auto;
674
+ }
675
+ .code-block .copy { position: absolute; top: 10px; right: 10px; display: flex; gap: 4px; }
676
+ .code-block .k { color: var(--code-fg); }
677
+ .code-block .s { color: var(--success-700); }
678
+
679
+ /* ---------- BANNERS / TOASTS ---------- */
680
+ .announce {
681
+ width: 100%;
682
+ background: var(--paper);
683
+ border: 1px solid var(--line-200);
684
+ border-radius: var(--r-md);
685
+ padding: 10px 16px;
686
+ text-align: center;
687
+ font-size: var(--fs-md); color: var(--ink-600);
688
+ }
689
+ .announce a { color: var(--brand-700); text-decoration: underline; }
690
+ .tip {
691
+ display: flex; gap: 12px; padding: 14px;
692
+ background: var(--surface);
693
+ border: 1px solid var(--line-200);
694
+ border-radius: var(--r-lg);
695
+ max-width: 320px;
696
+ box-shadow: var(--shadow-md);
697
+ }
698
+ .tip .ico { color: var(--brand-500); margin-top: 2px; }
699
+ .tip .what {
700
+ font-size: var(--fs-xs); font-family: var(--font-mono);
701
+ letter-spacing: var(--ls-wider);
702
+ color: var(--ink-300);
703
+ text-transform: uppercase; margin-bottom: 4px;
704
+ }
705
+ .tip .title { font-size: var(--fs-md); font-weight: 600; color: var(--ink-700); margin-bottom: 4px; }
706
+ .tip .desc { font-size: var(--fs-sm); color: var(--ink-400); line-height: 1.45; }
707
+
708
+ .toast {
709
+ display: inline-flex; align-items: center; gap: 8px;
710
+ padding: 8px 14px;
711
+ background: var(--ink-700); color: #fff;
712
+ border-radius: var(--r-md);
713
+ font-size: var(--fs-sm); box-shadow: var(--shadow-lg);
714
+ }
715
+ .toast-success { background: var(--success-500); color: #fff; }
716
+ .toast-danger { background: var(--danger-500); color: #fff; }
717
+
718
+ /* ---------- DATA TABLE ---------- */
719
+ .zk-table { width: 100%; }
720
+ .zk-table-head {
721
+ font-family: var(--font-mono);
722
+ font-size: var(--fs-2xs);
723
+ letter-spacing: var(--ls-wider);
724
+ text-transform: uppercase;
725
+ color: var(--ink-300);
726
+ background: var(--paper);
727
+ border-bottom: 1px solid var(--line-100);
728
+ padding: 10px 18px;
729
+ }
730
+ .zk-table-row {
731
+ padding: 14px 18px;
732
+ align-items: center;
733
+ border-bottom: 1px solid var(--line-100);
734
+ font-size: var(--fs-sm);
735
+ transition: background var(--t-fast);
736
+ }
737
+ .zk-table-row:hover { background: var(--paper); }
738
+ .zk-table-row .url { color: var(--ink-600); font-family: var(--font-mono); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
739
+ .zk-table-row .num { color: var(--ink-500); font-family: var(--font-mono); }
740
+ .zk-table-row .date { color: var(--ink-400); font-family: var(--font-mono); font-size: var(--fs-xs); }