@automagik/genie-brain 0.260404.8

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,623 @@
1
+ /* Brain Lab — Dashboard Styles
2
+ *
3
+ * Dark theme, responsive, adapted from cag-kb-agent UI patterns.
4
+ * Branding: Brain Lab (not CAG).
5
+ */
6
+
7
+ :root {
8
+ --bg-primary: #0f1117;
9
+ --bg-secondary: #161b22;
10
+ --bg-tertiary: #1c2333;
11
+ --bg-card: #1e2536;
12
+ --text-primary: #e6edf3;
13
+ --text-secondary: #8b949e;
14
+ --text-muted: #656d76;
15
+ --accent: #58a6ff;
16
+ --accent-hover: #79c0ff;
17
+ --accent-dim: rgba(88, 166, 255, 0.15);
18
+ --success: #3fb950;
19
+ --success-dim: rgba(63, 185, 80, 0.15);
20
+ --warning: #d29922;
21
+ --warning-dim: rgba(210, 153, 34, 0.15);
22
+ --error: #f85149;
23
+ --error-dim: rgba(248, 81, 73, 0.15);
24
+ --border: #30363d;
25
+ --border-muted: #21262d;
26
+ --gold: #ffd700;
27
+ --silver: #c0c0c0;
28
+ --bronze: #cd7f32;
29
+ --pareto: #a371f7;
30
+ --radius: 8px;
31
+ --radius-sm: 4px;
32
+ --shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
33
+ --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.4);
34
+ --transition: 150ms ease;
35
+ }
36
+
37
+ /* Reset */
38
+ *,
39
+ *::before,
40
+ *::after {
41
+ box-sizing: border-box;
42
+ margin: 0;
43
+ padding: 0;
44
+ }
45
+
46
+ body {
47
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
48
+ "Helvetica Neue", sans-serif;
49
+ background: var(--bg-primary);
50
+ color: var(--text-primary);
51
+ min-height: 100vh;
52
+ line-height: 1.5;
53
+ font-size: 14px;
54
+ }
55
+
56
+ /* Layout */
57
+ .container {
58
+ max-width: 1400px;
59
+ margin: 0 auto;
60
+ padding: 16px 24px;
61
+ }
62
+
63
+ /* Header */
64
+ .header {
65
+ display: flex;
66
+ justify-content: space-between;
67
+ align-items: center;
68
+ padding: 16px 0;
69
+ border-bottom: 1px solid var(--border);
70
+ margin-bottom: 16px;
71
+ }
72
+ .header h1 {
73
+ font-size: 20px;
74
+ font-weight: 600;
75
+ display: flex;
76
+ align-items: center;
77
+ gap: 8px;
78
+ }
79
+ .header h1 .logo {
80
+ font-size: 24px;
81
+ }
82
+ .header-right {
83
+ display: flex;
84
+ align-items: center;
85
+ gap: 12px;
86
+ }
87
+ .status-badge {
88
+ display: inline-flex;
89
+ align-items: center;
90
+ gap: 4px;
91
+ padding: 4px 10px;
92
+ border-radius: 20px;
93
+ font-size: 12px;
94
+ font-weight: 500;
95
+ }
96
+ .status-badge.online {
97
+ background: var(--success-dim);
98
+ color: var(--success);
99
+ }
100
+ .status-badge.offline {
101
+ background: var(--error-dim);
102
+ color: var(--error);
103
+ }
104
+ .status-dot {
105
+ width: 6px;
106
+ height: 6px;
107
+ border-radius: 50%;
108
+ background: currentColor;
109
+ }
110
+
111
+ /* Tabs */
112
+ .tabs {
113
+ display: flex;
114
+ gap: 0;
115
+ border-bottom: 1px solid var(--border);
116
+ margin-bottom: 20px;
117
+ }
118
+ .tab-btn {
119
+ padding: 10px 16px;
120
+ background: none;
121
+ border: none;
122
+ border-bottom: 2px solid transparent;
123
+ color: var(--text-secondary);
124
+ font-size: 14px;
125
+ font-weight: 500;
126
+ cursor: pointer;
127
+ transition: color var(--transition), border-color var(--transition);
128
+ }
129
+ .tab-btn:hover {
130
+ color: var(--text-primary);
131
+ }
132
+ .tab-btn.active {
133
+ color: var(--accent);
134
+ border-bottom-color: var(--accent);
135
+ }
136
+
137
+ /* Tab content */
138
+ .tab-content {
139
+ display: none;
140
+ }
141
+ .tab-content.active {
142
+ display: block;
143
+ }
144
+
145
+ /* Cards */
146
+ .card {
147
+ background: var(--bg-card);
148
+ border: 1px solid var(--border);
149
+ border-radius: var(--radius);
150
+ padding: 20px;
151
+ margin-bottom: 16px;
152
+ }
153
+ .card-header {
154
+ display: flex;
155
+ justify-content: space-between;
156
+ align-items: center;
157
+ margin-bottom: 16px;
158
+ }
159
+ .card-title {
160
+ font-size: 16px;
161
+ font-weight: 600;
162
+ }
163
+ .card-subtitle {
164
+ font-size: 12px;
165
+ color: var(--text-secondary);
166
+ margin-top: 2px;
167
+ }
168
+
169
+ /* Tables */
170
+ .table-wrapper {
171
+ overflow-x: auto;
172
+ }
173
+ table {
174
+ width: 100%;
175
+ border-collapse: collapse;
176
+ font-size: 13px;
177
+ }
178
+ th,
179
+ td {
180
+ text-align: left;
181
+ padding: 10px 12px;
182
+ border-bottom: 1px solid var(--border-muted);
183
+ }
184
+ th {
185
+ color: var(--text-secondary);
186
+ font-weight: 600;
187
+ font-size: 11px;
188
+ text-transform: uppercase;
189
+ letter-spacing: 0.5px;
190
+ cursor: pointer;
191
+ user-select: none;
192
+ white-space: nowrap;
193
+ }
194
+ th:hover {
195
+ color: var(--text-primary);
196
+ }
197
+ th.sorted-asc::after {
198
+ content: " \u2191";
199
+ }
200
+ th.sorted-desc::after {
201
+ content: " \u2193";
202
+ }
203
+ tr:hover {
204
+ background: rgba(255, 255, 255, 0.02);
205
+ }
206
+ td.numeric {
207
+ text-align: right;
208
+ font-variant-numeric: tabular-nums;
209
+ }
210
+
211
+ /* Medals & Pareto */
212
+ .medal {
213
+ font-size: 16px;
214
+ margin-right: 4px;
215
+ }
216
+ .pareto-star {
217
+ color: var(--pareto);
218
+ font-size: 12px;
219
+ margin-left: 4px;
220
+ cursor: help;
221
+ }
222
+
223
+ /* Score bar */
224
+ .score-bar {
225
+ display: flex;
226
+ align-items: center;
227
+ gap: 8px;
228
+ }
229
+ .score-bar-fill {
230
+ height: 6px;
231
+ border-radius: 3px;
232
+ min-width: 4px;
233
+ transition: width var(--transition);
234
+ }
235
+ .score-bar-fill.excellent {
236
+ background: var(--success);
237
+ }
238
+ .score-bar-fill.good {
239
+ background: var(--accent);
240
+ }
241
+ .score-bar-fill.fair {
242
+ background: var(--warning);
243
+ }
244
+ .score-bar-fill.poor {
245
+ background: var(--error);
246
+ }
247
+ .score-value {
248
+ font-weight: 600;
249
+ min-width: 36px;
250
+ }
251
+
252
+ /* MemScore triple */
253
+ .memscore {
254
+ font-family: "SF Mono", SFMono-Regular, Menlo, monospace;
255
+ font-size: 12px;
256
+ color: var(--text-secondary);
257
+ white-space: nowrap;
258
+ }
259
+
260
+ /* Metric colors */
261
+ .metric-excellent {
262
+ color: var(--success);
263
+ }
264
+ .metric-good {
265
+ color: var(--accent);
266
+ }
267
+ .metric-fair {
268
+ color: var(--warning);
269
+ }
270
+ .metric-poor {
271
+ color: var(--error);
272
+ }
273
+
274
+ /* Buttons */
275
+ .btn {
276
+ display: inline-flex;
277
+ align-items: center;
278
+ gap: 6px;
279
+ padding: 6px 14px;
280
+ border: 1px solid var(--border);
281
+ border-radius: var(--radius-sm);
282
+ background: var(--bg-tertiary);
283
+ color: var(--text-primary);
284
+ font-size: 13px;
285
+ cursor: pointer;
286
+ transition: background var(--transition), border-color var(--transition);
287
+ }
288
+ .btn:hover {
289
+ background: var(--bg-card);
290
+ border-color: var(--text-muted);
291
+ }
292
+ .btn-primary {
293
+ background: var(--accent);
294
+ color: #fff;
295
+ border-color: var(--accent);
296
+ }
297
+ .btn-primary:hover {
298
+ background: var(--accent-hover);
299
+ }
300
+ .btn-sm {
301
+ padding: 4px 10px;
302
+ font-size: 12px;
303
+ }
304
+
305
+ /* Stats row */
306
+ .stats-row {
307
+ display: grid;
308
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
309
+ gap: 12px;
310
+ margin-bottom: 20px;
311
+ }
312
+ .stat-card {
313
+ background: var(--bg-tertiary);
314
+ border: 1px solid var(--border-muted);
315
+ border-radius: var(--radius-sm);
316
+ padding: 12px 16px;
317
+ }
318
+ .stat-label {
319
+ font-size: 11px;
320
+ color: var(--text-muted);
321
+ text-transform: uppercase;
322
+ }
323
+ .stat-value {
324
+ font-size: 24px;
325
+ font-weight: 700;
326
+ margin-top: 2px;
327
+ }
328
+ .stat-value.success {
329
+ color: var(--success);
330
+ }
331
+ .stat-value.accent {
332
+ color: var(--accent);
333
+ }
334
+
335
+ /* Detail view */
336
+ .detail-header {
337
+ display: flex;
338
+ align-items: center;
339
+ gap: 12px;
340
+ margin-bottom: 20px;
341
+ }
342
+ .back-btn {
343
+ background: none;
344
+ border: none;
345
+ color: var(--accent);
346
+ font-size: 14px;
347
+ cursor: pointer;
348
+ padding: 4px 8px;
349
+ }
350
+ .back-btn:hover {
351
+ text-decoration: underline;
352
+ }
353
+ .answer-cell {
354
+ max-width: 400px;
355
+ }
356
+ .answer-toggle {
357
+ background: none;
358
+ border: none;
359
+ color: var(--accent);
360
+ font-size: 12px;
361
+ cursor: pointer;
362
+ padding: 0;
363
+ }
364
+ .answer-full {
365
+ display: none;
366
+ margin-top: 8px;
367
+ padding: 8px;
368
+ background: var(--bg-primary);
369
+ border-radius: var(--radius-sm);
370
+ font-size: 12px;
371
+ line-height: 1.6;
372
+ white-space: pre-wrap;
373
+ max-height: 200px;
374
+ overflow-y: auto;
375
+ }
376
+ .answer-full.expanded {
377
+ display: block;
378
+ }
379
+
380
+ /* Hit/miss indicators */
381
+ .hit {
382
+ color: var(--success);
383
+ font-weight: 600;
384
+ }
385
+ .miss {
386
+ color: var(--error);
387
+ font-weight: 600;
388
+ }
389
+
390
+ /* Progress bar (SSE) */
391
+ .progress-container {
392
+ display: none;
393
+ margin-bottom: 16px;
394
+ }
395
+ .progress-container.active {
396
+ display: block;
397
+ }
398
+ .progress-bar-bg {
399
+ height: 4px;
400
+ background: var(--bg-tertiary);
401
+ border-radius: 2px;
402
+ overflow: hidden;
403
+ }
404
+ .progress-bar-fill {
405
+ height: 100%;
406
+ background: var(--accent);
407
+ border-radius: 2px;
408
+ transition: width 300ms ease;
409
+ width: 0%;
410
+ }
411
+ .progress-label {
412
+ display: flex;
413
+ justify-content: space-between;
414
+ font-size: 12px;
415
+ color: var(--text-secondary);
416
+ margin-top: 4px;
417
+ }
418
+
419
+ /* Compare view */
420
+ .compare-grid {
421
+ display: grid;
422
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
423
+ gap: 16px;
424
+ }
425
+ .compare-card {
426
+ background: var(--bg-card);
427
+ border: 1px solid var(--border);
428
+ border-radius: var(--radius);
429
+ padding: 16px;
430
+ }
431
+ .compare-card.selected {
432
+ border-color: var(--accent);
433
+ }
434
+ .compare-memscore {
435
+ font-family: "SF Mono", SFMono-Regular, Menlo, monospace;
436
+ font-size: 18px;
437
+ font-weight: 700;
438
+ text-align: center;
439
+ padding: 16px 0;
440
+ }
441
+ .delta-positive {
442
+ color: var(--success);
443
+ }
444
+ .delta-negative {
445
+ color: var(--error);
446
+ }
447
+
448
+ /* Charts */
449
+ .charts-grid {
450
+ display: grid;
451
+ grid-template-columns: repeat(2, 1fr);
452
+ gap: 16px;
453
+ }
454
+ .chart-card {
455
+ background: var(--bg-card);
456
+ border: 1px solid var(--border);
457
+ border-radius: var(--radius);
458
+ padding: 16px;
459
+ }
460
+ .chart-card.full-width {
461
+ grid-column: 1 / -1;
462
+ }
463
+ .chart-card canvas {
464
+ max-height: 300px;
465
+ }
466
+ .chart-header {
467
+ margin-bottom: 12px;
468
+ }
469
+ .chart-title {
470
+ font-size: 14px;
471
+ font-weight: 600;
472
+ }
473
+ .chart-subtitle {
474
+ font-size: 12px;
475
+ color: var(--text-secondary);
476
+ }
477
+
478
+ /* Filter bar */
479
+ .filter-bar {
480
+ display: flex;
481
+ gap: 8px;
482
+ align-items: center;
483
+ margin-bottom: 16px;
484
+ flex-wrap: wrap;
485
+ }
486
+ .filter-input {
487
+ padding: 6px 12px;
488
+ background: var(--bg-tertiary);
489
+ border: 1px solid var(--border);
490
+ border-radius: var(--radius-sm);
491
+ color: var(--text-primary);
492
+ font-size: 13px;
493
+ min-width: 200px;
494
+ }
495
+ .filter-input::placeholder {
496
+ color: var(--text-muted);
497
+ }
498
+ .filter-input:focus {
499
+ outline: none;
500
+ border-color: var(--accent);
501
+ }
502
+
503
+ /* Checkbox */
504
+ .checkbox-label {
505
+ display: flex;
506
+ align-items: center;
507
+ gap: 6px;
508
+ cursor: pointer;
509
+ font-size: 13px;
510
+ }
511
+ .checkbox-label input[type="checkbox"] {
512
+ accent-color: var(--accent);
513
+ }
514
+
515
+ /* Toast */
516
+ .toast-container {
517
+ position: fixed;
518
+ bottom: 20px;
519
+ right: 20px;
520
+ z-index: 1000;
521
+ display: flex;
522
+ flex-direction: column;
523
+ gap: 8px;
524
+ }
525
+ .toast {
526
+ padding: 10px 16px;
527
+ border-radius: var(--radius-sm);
528
+ font-size: 13px;
529
+ animation: toast-in 200ms ease;
530
+ max-width: 360px;
531
+ }
532
+ .toast.success {
533
+ background: var(--success-dim);
534
+ color: var(--success);
535
+ border: 1px solid var(--success);
536
+ }
537
+ .toast.error {
538
+ background: var(--error-dim);
539
+ color: var(--error);
540
+ border: 1px solid var(--error);
541
+ }
542
+ .toast.info {
543
+ background: var(--accent-dim);
544
+ color: var(--accent);
545
+ border: 1px solid var(--accent);
546
+ }
547
+ @keyframes toast-in {
548
+ from {
549
+ opacity: 0;
550
+ transform: translateY(10px);
551
+ }
552
+ to {
553
+ opacity: 1;
554
+ transform: translateY(0);
555
+ }
556
+ }
557
+
558
+ /* Empty state */
559
+ .empty-state {
560
+ text-align: center;
561
+ padding: 60px 20px;
562
+ color: var(--text-muted);
563
+ }
564
+ .empty-state-icon {
565
+ font-size: 48px;
566
+ margin-bottom: 12px;
567
+ }
568
+ .empty-state-title {
569
+ font-size: 16px;
570
+ font-weight: 600;
571
+ color: var(--text-secondary);
572
+ margin-bottom: 4px;
573
+ }
574
+ .empty-state-text {
575
+ font-size: 13px;
576
+ }
577
+
578
+ /* Loading spinner */
579
+ .spinner {
580
+ display: inline-block;
581
+ width: 16px;
582
+ height: 16px;
583
+ border: 2px solid var(--border);
584
+ border-top-color: var(--accent);
585
+ border-radius: 50%;
586
+ animation: spin 600ms linear infinite;
587
+ }
588
+ @keyframes spin {
589
+ to {
590
+ transform: rotate(360deg);
591
+ }
592
+ }
593
+
594
+ /* Responsive */
595
+ @media (max-width: 768px) {
596
+ .container {
597
+ padding: 12px 16px;
598
+ }
599
+ .header {
600
+ flex-direction: column;
601
+ align-items: flex-start;
602
+ gap: 8px;
603
+ }
604
+ .tabs {
605
+ overflow-x: auto;
606
+ }
607
+ .stats-row {
608
+ grid-template-columns: repeat(2, 1fr);
609
+ }
610
+ .charts-grid {
611
+ grid-template-columns: 1fr;
612
+ }
613
+ .compare-grid {
614
+ grid-template-columns: 1fr;
615
+ }
616
+ table {
617
+ font-size: 12px;
618
+ }
619
+ th,
620
+ td {
621
+ padding: 8px;
622
+ }
623
+ }