brainzlab-ui 0.1.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,496 @@
1
+ /* ============================================
2
+ BRAINZLAB UI - COMPONENT STYLES
3
+ ============================================ */
4
+
5
+ /* ----------------------------------------
6
+ BUTTONS
7
+ ---------------------------------------- */
8
+ .btn-primary {
9
+ display: inline-flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ gap: 0.5rem;
13
+ padding: 0.75rem 1.5rem;
14
+ background: var(--color-primary-500);
15
+ color: white;
16
+ font-weight: 500;
17
+ border-radius: 9999px;
18
+ transition: all 0.2s var(--ease-out-expo);
19
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
20
+ }
21
+
22
+ .btn-primary:hover {
23
+ background: var(--color-primary-600);
24
+ transform: translateY(-1px);
25
+ box-shadow: 0 4px 12px rgba(217, 119, 6, 0.25);
26
+ }
27
+
28
+ .btn-primary:active { transform: translateY(0); }
29
+ .btn-primary:disabled { opacity: 0.5; cursor: not-allowed; }
30
+
31
+ .btn-secondary {
32
+ display: inline-flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ gap: 0.5rem;
36
+ padding: 0.75rem 1.5rem;
37
+ background: transparent;
38
+ color: var(--color-ink-700);
39
+ font-weight: 500;
40
+ border: 1px solid var(--color-cream-300);
41
+ border-radius: 9999px;
42
+ transition: all 0.2s var(--ease-out-expo);
43
+ }
44
+
45
+ .btn-secondary:hover {
46
+ background: var(--color-cream-100);
47
+ border-color: var(--color-cream-400);
48
+ color: var(--color-ink-900);
49
+ }
50
+
51
+ .btn-ghost {
52
+ display: inline-flex;
53
+ align-items: center;
54
+ justify-content: center;
55
+ gap: 0.5rem;
56
+ padding: 0.5rem 1rem;
57
+ background: transparent;
58
+ color: var(--color-ink-600);
59
+ font-weight: 500;
60
+ border-radius: 0.75rem;
61
+ transition: all 0.15s ease;
62
+ }
63
+
64
+ .btn-ghost:hover {
65
+ background: var(--color-cream-100);
66
+ color: var(--color-ink-900);
67
+ }
68
+
69
+ .btn-danger {
70
+ display: inline-flex;
71
+ align-items: center;
72
+ justify-content: center;
73
+ gap: 0.5rem;
74
+ padding: 0.75rem 1.5rem;
75
+ background: var(--color-error-500);
76
+ color: white;
77
+ font-weight: 500;
78
+ border-radius: 9999px;
79
+ transition: all 0.2s var(--ease-out-expo);
80
+ }
81
+
82
+ .btn-danger:hover {
83
+ background: var(--color-error-600);
84
+ transform: translateY(-1px);
85
+ }
86
+
87
+ .btn-lift {
88
+ transition: transform 0.2s var(--ease-out-back), box-shadow 0.2s ease;
89
+ }
90
+
91
+ .btn-lift:hover {
92
+ transform: translateY(-2px);
93
+ box-shadow: 0 10px 30px -10px currentColor;
94
+ }
95
+
96
+ .btn-lift:active { transform: translateY(0); }
97
+
98
+ /* Button sizes */
99
+ .btn-sm { padding: 0.5rem 1rem; font-size: 0.875rem; }
100
+ .btn-lg { padding: 1rem 2rem; font-size: 1.125rem; }
101
+
102
+ /* ----------------------------------------
103
+ CARDS
104
+ ---------------------------------------- */
105
+ .card {
106
+ background: white;
107
+ border: 1px solid var(--color-cream-200);
108
+ border-radius: 1rem;
109
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
110
+ transition: all 0.3s var(--ease-out-expo);
111
+ }
112
+
113
+ .card:hover {
114
+ border-color: var(--color-cream-300);
115
+ box-shadow: 0 8px 25px -5px rgba(0, 0, 0, 0.08);
116
+ }
117
+
118
+ .card-interactive:hover { transform: translateY(-2px); }
119
+
120
+ .card-lift {
121
+ transition: transform 0.3s var(--ease-out-expo), box-shadow 0.3s ease;
122
+ }
123
+
124
+ .card-lift:hover {
125
+ transform: translateY(-6px);
126
+ box-shadow: var(--shadow-large);
127
+ }
128
+
129
+ .card-body { padding: 1.5rem; }
130
+ .card-header { padding: 1rem 1.5rem; border-bottom: 1px solid var(--color-cream-200); }
131
+ .card-footer { padding: 1rem 1.5rem; border-top: 1px solid var(--color-cream-200); }
132
+
133
+ /* ----------------------------------------
134
+ FORM ELEMENTS
135
+ ---------------------------------------- */
136
+ .input {
137
+ width: 100%;
138
+ padding: 0.75rem 1rem;
139
+ background: var(--color-cream-50);
140
+ border: 1px solid var(--color-cream-200);
141
+ border-radius: 0.75rem;
142
+ color: var(--color-ink-900);
143
+ font-size: 0.9375rem;
144
+ transition: all 0.2s ease;
145
+ }
146
+
147
+ .input::placeholder { color: var(--color-ink-400); }
148
+
149
+ .input:focus {
150
+ outline: none;
151
+ border-color: var(--color-primary-500);
152
+ box-shadow: 0 0 0 3px rgba(217, 119, 6, 0.1);
153
+ background: white;
154
+ }
155
+
156
+ .input:disabled {
157
+ background: var(--color-cream-100);
158
+ cursor: not-allowed;
159
+ }
160
+
161
+ .input-error {
162
+ border-color: var(--color-error-500);
163
+ }
164
+
165
+ .input-error:focus {
166
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1);
167
+ }
168
+
169
+ /* Search input with icon */
170
+ .search-input-wrapper {
171
+ position: relative;
172
+ }
173
+
174
+ .search-input-wrapper .search-icon {
175
+ position: absolute;
176
+ left: 0.875rem;
177
+ top: 50%;
178
+ transform: translateY(-50%);
179
+ width: 1.25rem;
180
+ height: 1.25rem;
181
+ color: var(--color-ink-400);
182
+ pointer-events: none;
183
+ }
184
+
185
+ .search-input-wrapper .input {
186
+ padding-left: 2.75rem;
187
+ }
188
+
189
+ .label {
190
+ display: block;
191
+ font-size: 0.875rem;
192
+ font-weight: 500;
193
+ color: var(--color-ink-700);
194
+ margin-bottom: 0.375rem;
195
+ }
196
+
197
+ .select {
198
+ width: 100%;
199
+ padding: 0.75rem 2.5rem 0.75rem 1rem;
200
+ background: var(--color-cream-50);
201
+ border: 1px solid var(--color-cream-200);
202
+ border-radius: 0.75rem;
203
+ color: var(--color-ink-900);
204
+ font-size: 0.9375rem;
205
+ appearance: none;
206
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
207
+ background-position: right 0.75rem center;
208
+ background-repeat: no-repeat;
209
+ background-size: 1.25rem;
210
+ transition: all 0.2s ease;
211
+ }
212
+
213
+ .select:focus {
214
+ outline: none;
215
+ border-color: var(--color-primary-500);
216
+ box-shadow: 0 0 0 3px rgba(217, 119, 6, 0.1);
217
+ background-color: white;
218
+ }
219
+
220
+ .textarea {
221
+ width: 100%;
222
+ padding: 0.75rem 1rem;
223
+ background: var(--color-cream-50);
224
+ border: 1px solid var(--color-cream-200);
225
+ border-radius: 0.75rem;
226
+ color: var(--color-ink-900);
227
+ font-size: 0.9375rem;
228
+ min-height: 100px;
229
+ resize: vertical;
230
+ transition: all 0.2s ease;
231
+ }
232
+
233
+ .textarea:focus {
234
+ outline: none;
235
+ border-color: var(--color-primary-500);
236
+ box-shadow: 0 0 0 3px rgba(217, 119, 6, 0.1);
237
+ background: white;
238
+ }
239
+
240
+ /* ----------------------------------------
241
+ BADGES
242
+ ---------------------------------------- */
243
+ .badge {
244
+ display: inline-flex;
245
+ align-items: center;
246
+ gap: 0.375rem;
247
+ padding: 0.25rem 0.75rem;
248
+ font-size: 0.75rem;
249
+ font-weight: 500;
250
+ border-radius: 9999px;
251
+ }
252
+
253
+ .badge-primary {
254
+ background: rgba(217, 119, 6, 0.1);
255
+ color: var(--color-primary-600);
256
+ }
257
+
258
+ .badge-success {
259
+ background: rgba(34, 197, 94, 0.1);
260
+ color: var(--color-success-600);
261
+ }
262
+
263
+ .badge-error {
264
+ background: rgba(239, 68, 68, 0.1);
265
+ color: var(--color-error-600);
266
+ }
267
+
268
+ .badge-warning {
269
+ background: rgba(245, 158, 11, 0.1);
270
+ color: var(--color-warning-600);
271
+ }
272
+
273
+ .badge-info {
274
+ background: rgba(59, 130, 246, 0.1);
275
+ color: var(--color-info-600);
276
+ }
277
+
278
+ .badge-neutral {
279
+ background: var(--color-cream-200);
280
+ color: var(--color-ink-600);
281
+ }
282
+
283
+ /* ----------------------------------------
284
+ NAVIGATION
285
+ ---------------------------------------- */
286
+ .nav-item {
287
+ display: flex;
288
+ align-items: center;
289
+ gap: 0.75rem;
290
+ padding: 0.625rem 0.875rem;
291
+ font-size: 0.875rem;
292
+ font-weight: 500;
293
+ color: var(--color-ink-600);
294
+ border-radius: 0.75rem;
295
+ transition: all 0.15s ease;
296
+ }
297
+
298
+ .nav-item:hover {
299
+ background: var(--color-cream-100);
300
+ color: var(--color-ink-900);
301
+ }
302
+
303
+ .nav-item.active {
304
+ background: rgba(217, 119, 6, 0.1);
305
+ color: var(--color-primary-600);
306
+ }
307
+
308
+ /* ----------------------------------------
309
+ ALERTS
310
+ ---------------------------------------- */
311
+ .alert {
312
+ display: flex;
313
+ align-items: flex-start;
314
+ gap: 0.75rem;
315
+ padding: 1rem;
316
+ border-radius: 0.75rem;
317
+ font-size: 0.875rem;
318
+ }
319
+
320
+ .alert-success {
321
+ background: rgba(34, 197, 94, 0.1);
322
+ border: 1px solid rgba(34, 197, 94, 0.2);
323
+ color: var(--color-success-700);
324
+ }
325
+
326
+ .alert-error {
327
+ background: rgba(239, 68, 68, 0.1);
328
+ border: 1px solid rgba(239, 68, 68, 0.2);
329
+ color: var(--color-error-700);
330
+ }
331
+
332
+ .alert-warning {
333
+ background: rgba(245, 158, 11, 0.1);
334
+ border: 1px solid rgba(245, 158, 11, 0.2);
335
+ color: var(--color-warning-700);
336
+ }
337
+
338
+ .alert-info {
339
+ background: rgba(59, 130, 246, 0.1);
340
+ border: 1px solid rgba(59, 130, 246, 0.2);
341
+ color: var(--color-info-700);
342
+ }
343
+
344
+ /* ----------------------------------------
345
+ AVATARS
346
+ ---------------------------------------- */
347
+ .avatar {
348
+ display: flex;
349
+ align-items: center;
350
+ justify-content: center;
351
+ border-radius: 50%;
352
+ font-weight: 600;
353
+ text-transform: uppercase;
354
+ }
355
+
356
+ .avatar-sm { width: 2rem; height: 2rem; font-size: 0.75rem; }
357
+ .avatar-md { width: 2.5rem; height: 2.5rem; font-size: 0.875rem; }
358
+ .avatar-lg { width: 3rem; height: 3rem; font-size: 1rem; }
359
+ .avatar-xl { width: 4rem; height: 4rem; font-size: 1.25rem; }
360
+
361
+ .avatar-primary {
362
+ background: rgba(217, 119, 6, 0.15);
363
+ color: var(--color-primary-600);
364
+ }
365
+
366
+ .avatar-neutral {
367
+ background: var(--color-cream-200);
368
+ color: var(--color-ink-600);
369
+ }
370
+
371
+ /* ----------------------------------------
372
+ TABLES
373
+ ---------------------------------------- */
374
+ .table-wrapper {
375
+ overflow-x: auto;
376
+ border: 1px solid var(--color-cream-200);
377
+ border-radius: 0.75rem;
378
+ }
379
+
380
+ .table {
381
+ width: 100%;
382
+ border-collapse: collapse;
383
+ }
384
+
385
+ .table th {
386
+ padding: 0.75rem 1rem;
387
+ text-align: left;
388
+ font-size: 0.75rem;
389
+ font-weight: 600;
390
+ text-transform: uppercase;
391
+ letter-spacing: 0.05em;
392
+ color: var(--color-ink-500);
393
+ background: var(--color-cream-50);
394
+ border-bottom: 1px solid var(--color-cream-200);
395
+ }
396
+
397
+ .table td {
398
+ padding: 0.875rem 1rem;
399
+ font-size: 0.875rem;
400
+ color: var(--color-ink-700);
401
+ border-bottom: 1px solid var(--color-cream-100);
402
+ }
403
+
404
+ .table tbody tr:hover { background: var(--color-cream-50); }
405
+ .table tbody tr:last-child td { border-bottom: none; }
406
+
407
+ /* ----------------------------------------
408
+ STAT CARDS
409
+ ---------------------------------------- */
410
+ .stat-card {
411
+ padding: 1.5rem;
412
+ background: white;
413
+ border: 1px solid var(--color-cream-200);
414
+ border-radius: 1rem;
415
+ }
416
+
417
+ .stat-label {
418
+ font-size: 0.875rem;
419
+ font-weight: 500;
420
+ color: var(--color-ink-500);
421
+ }
422
+
423
+ .stat-value {
424
+ font-size: 2rem;
425
+ font-weight: 700;
426
+ color: var(--color-ink-950);
427
+ line-height: 1.2;
428
+ margin-top: 0.25rem;
429
+ }
430
+
431
+ .stat-change {
432
+ display: inline-flex;
433
+ align-items: center;
434
+ gap: 0.25rem;
435
+ font-size: 0.75rem;
436
+ font-weight: 500;
437
+ margin-top: 0.5rem;
438
+ }
439
+
440
+ .stat-change-positive { color: var(--color-success-600); }
441
+ .stat-change-negative { color: var(--color-error-600); }
442
+
443
+ /* ----------------------------------------
444
+ EMPTY STATES
445
+ ---------------------------------------- */
446
+ .empty-state {
447
+ text-align: center;
448
+ padding: 3rem 1.5rem;
449
+ }
450
+
451
+ .empty-state-icon {
452
+ width: 3rem;
453
+ height: 3rem;
454
+ margin: 0 auto 1rem;
455
+ color: var(--color-ink-300);
456
+ }
457
+
458
+ .empty-state-title {
459
+ font-size: 1.125rem;
460
+ font-weight: 600;
461
+ color: var(--color-ink-800);
462
+ }
463
+
464
+ .empty-state-description {
465
+ font-size: 0.9375rem;
466
+ color: var(--color-ink-500);
467
+ margin-top: 0.5rem;
468
+ max-width: 20rem;
469
+ margin-left: auto;
470
+ margin-right: auto;
471
+ }
472
+
473
+ /* ----------------------------------------
474
+ SECTION HEADERS
475
+ ---------------------------------------- */
476
+ .section-header {
477
+ font-family: var(--font-serif);
478
+ font-size: 1.875rem;
479
+ font-weight: 600;
480
+ color: var(--color-ink-950);
481
+ letter-spacing: -0.025em;
482
+ }
483
+
484
+ .section-subheader {
485
+ font-size: 1rem;
486
+ color: var(--color-ink-500);
487
+ margin-top: 0.5rem;
488
+ }
489
+
490
+ /* ----------------------------------------
491
+ DIVIDERS
492
+ ---------------------------------------- */
493
+ .divider {
494
+ height: 1px;
495
+ background: var(--color-cream-200);
496
+ }
@@ -0,0 +1,121 @@
1
+ /* ============================================
2
+ BRAINZLAB UI - DESIGN TOKENS
3
+ ============================================
4
+ Anthropic/Claude-inspired design system
5
+ Warm, elegant, and approachable
6
+ */
7
+
8
+ @theme {
9
+ /* Primary - Anthropic Orange/Coral */
10
+ --color-primary-50: #fef7f4;
11
+ --color-primary-100: #fdeee8;
12
+ --color-primary-200: #fad9cc;
13
+ --color-primary-300: #f5b8a1;
14
+ --color-primary-400: #ee8e6d;
15
+ --color-primary-500: #D97706;
16
+ --color-primary-600: #EA580C;
17
+ --color-primary-700: #C2410C;
18
+ --color-primary-800: #9A3412;
19
+ --color-primary-900: #7C2D12;
20
+
21
+ /* Background - Warm Cream/Beige */
22
+ --color-cream-50: #FAFAF9;
23
+ --color-cream-100: #F5F5F0;
24
+ --color-cream-200: #EEEDE8;
25
+ --color-cream-300: #E5E3DC;
26
+ --color-cream-400: #D4C4B5;
27
+ --color-cream-500: #BFA894;
28
+ --color-cream-600: #A68D74;
29
+ --color-cream-700: #8A7561;
30
+ --color-cream-800: #726253;
31
+ --color-cream-900: #5F5246;
32
+
33
+ /* Text - Warm Charcoal/Brown */
34
+ --color-ink-50: #F8F7F6;
35
+ --color-ink-100: #E8E6E3;
36
+ --color-ink-200: #D4D0CB;
37
+ --color-ink-300: #B5AEA5;
38
+ --color-ink-400: #958C80;
39
+ --color-ink-500: #7A7165;
40
+ --color-ink-600: #655D53;
41
+ --color-ink-700: #534C45;
42
+ --color-ink-800: #46413B;
43
+ --color-ink-900: #3D3833;
44
+ --color-ink-950: #1C1917;
45
+
46
+ /* Semantic - Success */
47
+ --color-success-50: #F0FDF4;
48
+ --color-success-100: #DCFCE7;
49
+ --color-success-200: #BBF7D0;
50
+ --color-success-300: #86EFAC;
51
+ --color-success-400: #4ADE80;
52
+ --color-success-500: #22C55E;
53
+ --color-success-600: #16A34A;
54
+ --color-success-700: #15803D;
55
+
56
+ /* Semantic - Error */
57
+ --color-error-50: #FEF2F2;
58
+ --color-error-100: #FEE2E2;
59
+ --color-error-200: #FECACA;
60
+ --color-error-300: #FCA5A5;
61
+ --color-error-400: #F87171;
62
+ --color-error-500: #EF4444;
63
+ --color-error-600: #DC2626;
64
+ --color-error-700: #B91C1C;
65
+
66
+ /* Semantic - Info */
67
+ --color-info-50: #EFF6FF;
68
+ --color-info-100: #DBEAFE;
69
+ --color-info-200: #BFDBFE;
70
+ --color-info-300: #93C5FD;
71
+ --color-info-400: #60A5FA;
72
+ --color-info-500: #3B82F6;
73
+ --color-info-600: #2563EB;
74
+ --color-info-700: #1D4ED8;
75
+
76
+ /* Semantic - Warning */
77
+ --color-warning-50: #FFFBEB;
78
+ --color-warning-100: #FEF3C7;
79
+ --color-warning-200: #FDE68A;
80
+ --color-warning-300: #FCD34D;
81
+ --color-warning-400: #FBBF24;
82
+ --color-warning-500: #F59E0B;
83
+ --color-warning-600: #D97706;
84
+ --color-warning-700: #B45309;
85
+
86
+ /* Animation Timing */
87
+ --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
88
+ --ease-out-back: cubic-bezier(0.34, 1.56, 0.64, 1);
89
+ --ease-in-out-quart: cubic-bezier(0.76, 0, 0.24, 1);
90
+
91
+ /* Shadows */
92
+ --shadow-soft: 0 2px 15px -3px rgba(0, 0, 0, 0.07), 0 10px 20px -2px rgba(0, 0, 0, 0.04);
93
+ --shadow-medium: 0 4px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 25px -5px rgba(0, 0, 0, 0.04);
94
+ --shadow-large: 0 25px 50px -12px rgba(0, 0, 0, 0.15);
95
+
96
+ /* Border Radius */
97
+ --radius-sm: 0.375rem;
98
+ --radius-md: 0.5rem;
99
+ --radius-lg: 0.75rem;
100
+ --radius-xl: 1rem;
101
+ --radius-2xl: 1.5rem;
102
+ --radius-full: 9999px;
103
+
104
+ /* Container Widths */
105
+ --container-xs: 20rem; /* 320px */
106
+ --container-sm: 24rem; /* 384px */
107
+ --container-md: 28rem; /* 448px */
108
+ --container-lg: 32rem; /* 512px */
109
+ --container-xl: 36rem; /* 576px */
110
+ --container-2xl: 42rem; /* 672px */
111
+ --container-3xl: 48rem; /* 768px */
112
+ --container-4xl: 56rem; /* 896px */
113
+ --container-5xl: 64rem; /* 1024px */
114
+ --container-6xl: 72rem; /* 1152px */
115
+ --container-7xl: 80rem; /* 1280px */
116
+
117
+ /* Typography - Font Families */
118
+ --font-sans: 'Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
119
+ --font-serif: 'Source Serif 4', Georgia, 'Times New Roman', serif;
120
+ --font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Monaco, Consolas, monospace;
121
+ }