agent-knowledge 1.0.0 → 1.0.1

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.
@@ -1,1154 +0,0 @@
1
- /* ═══════════════════════════════════════════════════════════════════════════
2
- agent-cortex — Dashboard Styles (MD3 Design Language)
3
- Matches agent-comm and agent-tasks design tokens exactly.
4
- ═══════════════════════════════════════════════════════════════════════════ */
5
-
6
- /* ── Reset ─────────────────────────────────────────────────────────────── */
7
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
8
-
9
- /* ── Design Tokens (Light) ─────────────────────────────────────────────── */
10
- :root {
11
- --bg: #ffffff;
12
- --bg-surface: #f5f7f9;
13
- --bg-elevated: #edf0f4;
14
- --bg-hover: #e4e8ed;
15
- --bg-inset: #dde3e9;
16
- --border: #c8d1da;
17
- --border-light: #dde3e9;
18
- --text: #1c2a33;
19
- --text-secondary: #3d5263;
20
- --text-muted: #5a6b78;
21
- --text-dim: #8895a0;
22
- --accent: #5d8da8;
23
- --accent-hover: #4e7a93;
24
- --accent-dim: rgba(93, 141, 168, 0.15);
25
- --accent-solid: #243742;
26
- --accent-glow: rgba(93, 141, 168, 0.35);
27
- --green: #1a7f37;
28
- --green-dim: rgba(26, 127, 55, 0.12);
29
- --yellow: #9a6700;
30
- --yellow-dim: rgba(154, 103, 0, 0.12);
31
- --orange: #bc4c00;
32
- --orange-dim: rgba(188, 76, 0, 0.12);
33
- --red: #cf222e;
34
- --red-dim: rgba(207, 34, 46, 0.12);
35
- --purple: #6e78a8;
36
- --purple-dim: rgba(110, 120, 168, 0.12);
37
- --blue: #0969da;
38
- --blue-dim: rgba(9, 105, 218, 0.12);
39
- --radius: 12px;
40
- --radius-sm: 8px;
41
- --radius-lg: 16px;
42
- --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
43
- --font-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace;
44
- --shadow-1: 0px 1px 2px 0px rgba(0,0,0,0.3), 0px 1px 3px 1px rgba(0,0,0,0.15);
45
- --shadow-2: 0px 1px 2px 0px rgba(0,0,0,0.3), 0px 2px 6px 2px rgba(0,0,0,0.15);
46
- --shadow-3: 0px 1px 3px 0px rgba(0,0,0,0.3), 0px 4px 8px 3px rgba(0,0,0,0.15);
47
- --shadow-hover: 0px 2px 4px 0px rgba(0,0,0,0.25), 0px 4px 12px 4px rgba(0,0,0,0.15);
48
- --shadow-panel: -2px 0px 8px 0px rgba(0,0,0,0.3), -4px 0px 16px 2px rgba(0,0,0,0.15);
49
- --focus-ring: rgba(93, 141, 168, 0.35);
50
- --transition-fast: 0.15s ease;
51
- --transition-normal: 0.2s ease;
52
- --transition-slow: 0.3s ease;
53
- --panel-width: 560px;
54
- }
55
-
56
- /* ── Dark Theme ────────────────────────────────────────────────────────── */
57
- [data-theme='dark'] {
58
- --bg: #0d1117;
59
- --bg-surface: #161b22;
60
- --bg-elevated: #1c2128;
61
- --bg-hover: #262c36;
62
- --bg-inset: #2d333b;
63
- --border: #373e47;
64
- --border-light: #2d333b;
65
- --text: #e6edf3;
66
- --text-secondary: #b1bac4;
67
- --text-muted: #8b949e;
68
- --text-dim: #6e7681;
69
- --accent: #5d8da8;
70
- --accent-hover: #79a8c0;
71
- --accent-dim: rgba(93, 141, 168, 0.2);
72
- --accent-solid: #a8c8d8;
73
- --accent-glow: rgba(93, 141, 168, 0.4);
74
- --green: #3fb950;
75
- --green-dim: rgba(63, 185, 80, 0.15);
76
- --yellow: #d29922;
77
- --yellow-dim: rgba(210, 153, 34, 0.15);
78
- --orange: #db6d28;
79
- --orange-dim: rgba(219, 109, 40, 0.15);
80
- --red: #f85149;
81
- --red-dim: rgba(248, 81, 73, 0.15);
82
- --purple: #8e9ad0;
83
- --purple-dim: rgba(142, 154, 208, 0.15);
84
- --blue: #58a6ff;
85
- --blue-dim: rgba(88, 166, 255, 0.15);
86
- --shadow-1: 0px 1px 2px 0px rgba(0,0,0,0.6), 0px 1px 3px 1px rgba(0,0,0,0.3);
87
- --shadow-2: 0px 1px 2px 0px rgba(0,0,0,0.6), 0px 2px 6px 2px rgba(0,0,0,0.3);
88
- --shadow-3: 0px 1px 3px 0px rgba(0,0,0,0.6), 0px 4px 8px 3px rgba(0,0,0,0.3);
89
- --shadow-hover: 0px 2px 4px 0px rgba(0,0,0,0.5), 0px 4px 12px 4px rgba(0,0,0,0.3);
90
- --shadow-panel: -2px 0px 8px 0px rgba(0,0,0,0.6), -4px 0px 16px 2px rgba(0,0,0,0.3);
91
- }
92
-
93
- /* ── Base ──────────────────────────────────────────────────────────────── */
94
- html { height: 100%; }
95
-
96
- body {
97
- font-family: var(--font-sans);
98
- font-size: 14px;
99
- line-height: 1.5;
100
- color: var(--text);
101
- background: var(--bg);
102
- height: 100%;
103
- overflow: hidden;
104
- -webkit-font-smoothing: antialiased;
105
- }
106
-
107
- .material-symbols-outlined {
108
- font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
109
- }
110
-
111
- /* ── Scrollbar ─────────────────────────────────────────────────────────── */
112
- ::-webkit-scrollbar { width: 6px; height: 6px; }
113
- ::-webkit-scrollbar-track { background: transparent; }
114
- ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
115
- ::-webkit-scrollbar-thumb:hover { background: var(--accent); }
116
-
117
- /* ── Header ────────────────────────────────────────────────────────────── */
118
- header {
119
- display: flex;
120
- align-items: center;
121
- justify-content: space-between;
122
- padding: 8px 16px;
123
- background: var(--bg-surface);
124
- border-bottom: 1px solid var(--border);
125
- flex-shrink: 0;
126
- z-index: 10;
127
- }
128
-
129
- .header-left {
130
- display: flex;
131
- align-items: center;
132
- gap: 8px;
133
- }
134
-
135
- .header-right {
136
- display: flex;
137
- align-items: center;
138
- gap: 12px;
139
- }
140
-
141
- .brand-icon {
142
- font-size: 24px;
143
- color: var(--accent);
144
- }
145
-
146
- h1 {
147
- font-family: var(--font-mono);
148
- font-size: 17px;
149
- font-weight: 700;
150
- color: var(--accent-solid);
151
- letter-spacing: -0.3px;
152
- }
153
-
154
- .version {
155
- font-family: var(--font-mono);
156
- font-size: 10px;
157
- font-weight: 500;
158
- color: var(--text-dim);
159
- background: var(--bg-elevated);
160
- padding: 2px 6px;
161
- border-radius: 10px;
162
- letter-spacing: 0.3px;
163
- }
164
-
165
- /* ── Connection Status ─────────────────────────────────────────────────── */
166
- .status-badge {
167
- display: inline-flex;
168
- align-items: center;
169
- gap: 4px;
170
- font-size: 11px;
171
- font-weight: 500;
172
- padding: 2px 8px;
173
- border-radius: 10px;
174
- }
175
-
176
- .status-badge::before {
177
- content: '';
178
- width: 6px;
179
- height: 6px;
180
- border-radius: 50%;
181
- flex-shrink: 0;
182
- }
183
-
184
- .status-badge.connected { color: var(--green); }
185
- .status-badge.connected::before { background: var(--green); }
186
- .status-badge.disconnected { color: var(--red); }
187
- .status-badge.disconnected::before { background: var(--red); }
188
-
189
- /* ── Stats ─────────────────────────────────────────────────────────────── */
190
- .stats {
191
- display: flex;
192
- gap: 8px;
193
- }
194
-
195
- .stat-badge {
196
- display: inline-flex;
197
- align-items: center;
198
- gap: 4px;
199
- font-size: 12px;
200
- font-weight: 500;
201
- color: var(--text-muted);
202
- background: var(--bg-elevated);
203
- padding: 4px 10px;
204
- border-radius: var(--radius-sm);
205
- }
206
-
207
- .stat-badge .stat-icon {
208
- font-size: 16px;
209
- color: var(--accent);
210
- }
211
-
212
- .stat-badge .stat-value {
213
- font-family: var(--font-mono);
214
- font-weight: 600;
215
- color: var(--text);
216
- }
217
-
218
- /* ── Icon Button ───────────────────────────────────────────────────────── */
219
- .icon-btn {
220
- display: inline-flex;
221
- align-items: center;
222
- justify-content: center;
223
- width: 32px;
224
- height: 32px;
225
- border: none;
226
- background: transparent;
227
- color: var(--text-muted);
228
- border-radius: var(--radius-sm);
229
- cursor: pointer;
230
- transition: background var(--transition-fast), color var(--transition-fast);
231
- }
232
-
233
- .icon-btn:hover {
234
- background: var(--bg-hover);
235
- color: var(--text);
236
- }
237
-
238
- .icon-btn:focus-visible {
239
- outline: 2px solid var(--accent);
240
- outline-offset: 1px;
241
- }
242
-
243
- /* ── Tab Bar ───────────────────────────────────────────────────────────── */
244
- .tab-bar {
245
- display: flex;
246
- background: var(--bg-surface);
247
- border-bottom: 1px solid var(--border);
248
- padding: 0 16px;
249
- gap: 0;
250
- flex-shrink: 0;
251
- }
252
-
253
- .tab {
254
- display: inline-flex;
255
- align-items: center;
256
- gap: 6px;
257
- padding: 10px 16px;
258
- font-size: 13px;
259
- font-weight: 500;
260
- color: var(--text-muted);
261
- background: none;
262
- border: none;
263
- border-bottom: 2px solid transparent;
264
- cursor: pointer;
265
- transition: color var(--transition-fast), border-color var(--transition-fast);
266
- white-space: nowrap;
267
- }
268
-
269
- .tab:hover {
270
- color: var(--text);
271
- background: var(--bg-hover);
272
- }
273
-
274
- .tab.active {
275
- color: var(--accent);
276
- border-bottom-color: var(--accent);
277
- font-weight: 600;
278
- }
279
-
280
- .tab-icon {
281
- font-size: 20px;
282
- }
283
-
284
- /* ── Content Layout ────────────────────────────────────────────────────── */
285
- .content-wrapper {
286
- display: flex;
287
- flex: 1;
288
- overflow: hidden;
289
- min-height: 0;
290
- }
291
-
292
- #content {
293
- flex: 1;
294
- overflow-y: auto;
295
- padding: 20px 24px;
296
- min-width: 0;
297
- }
298
-
299
- .view { display: none; }
300
- .view.active { display: block; }
301
-
302
- .view-header {
303
- display: flex;
304
- align-items: center;
305
- justify-content: space-between;
306
- margin-bottom: 16px;
307
- }
308
-
309
- .view-header h2 {
310
- display: flex;
311
- align-items: center;
312
- gap: 8px;
313
- font-size: 17px;
314
- font-weight: 700;
315
- color: var(--accent-solid);
316
- }
317
-
318
- .view-icon {
319
- font-size: 22px;
320
- color: var(--accent);
321
- }
322
-
323
- .view-actions {
324
- display: flex;
325
- gap: 8px;
326
- }
327
-
328
- /* ── Filter Chips ──────────────────────────────────────────────────────── */
329
- .filter-chips {
330
- display: flex;
331
- flex-wrap: wrap;
332
- gap: 6px;
333
- margin-bottom: 16px;
334
- }
335
-
336
- .chip {
337
- display: inline-flex;
338
- align-items: center;
339
- gap: 4px;
340
- padding: 5px 12px;
341
- font-size: 12px;
342
- font-weight: 500;
343
- color: var(--text-muted);
344
- background: var(--bg-elevated);
345
- border: 1px solid transparent;
346
- border-radius: var(--radius-sm);
347
- cursor: pointer;
348
- transition: all var(--transition-fast);
349
- white-space: nowrap;
350
- }
351
-
352
- .chip:hover {
353
- background: var(--bg-hover);
354
- color: var(--text);
355
- }
356
-
357
- .chip.active {
358
- background: var(--accent-dim);
359
- color: var(--accent);
360
- border-color: var(--accent);
361
- font-weight: 600;
362
- }
363
-
364
- .chip-icon {
365
- font-size: 16px;
366
- }
367
-
368
- /* ── Search Input ──────────────────────────────────────────────────────── */
369
- .search-bar {
370
- position: relative;
371
- margin-bottom: 16px;
372
- }
373
-
374
- .search-input-icon {
375
- position: absolute;
376
- left: 12px;
377
- top: 50%;
378
- transform: translateY(-50%);
379
- font-size: 20px;
380
- color: var(--text-dim);
381
- pointer-events: none;
382
- }
383
-
384
- .search-input {
385
- width: 100%;
386
- height: 40px;
387
- padding: 0 12px 0 40px;
388
- font-size: 14px;
389
- font-family: var(--font-sans);
390
- color: var(--text);
391
- background: var(--bg-elevated);
392
- border: 1px solid var(--border-light);
393
- border-radius: var(--radius-sm);
394
- outline: none;
395
- transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
396
- }
397
-
398
- .search-input::placeholder { color: var(--text-dim); }
399
-
400
- .search-input:focus {
401
- border-color: var(--accent);
402
- box-shadow: 0 0 0 3px var(--focus-ring);
403
- }
404
-
405
- /* ── Search Controls ───────────────────────────────────────────────────── */
406
- .search-controls {
407
- display: flex;
408
- align-items: center;
409
- justify-content: space-between;
410
- margin-bottom: 16px;
411
- flex-wrap: wrap;
412
- gap: 8px;
413
- }
414
-
415
- .mode-toggle {
416
- display: flex;
417
- gap: 0;
418
- border: 1px solid var(--border);
419
- border-radius: var(--radius-sm);
420
- overflow: hidden;
421
- }
422
-
423
- .mode-btn {
424
- display: inline-flex;
425
- align-items: center;
426
- gap: 4px;
427
- padding: 5px 12px;
428
- font-size: 12px;
429
- font-weight: 500;
430
- color: var(--text-muted);
431
- background: var(--bg-elevated);
432
- border: none;
433
- cursor: pointer;
434
- transition: all var(--transition-fast);
435
- }
436
-
437
- .mode-btn:hover { background: var(--bg-hover); color: var(--text); }
438
-
439
- .mode-btn.active {
440
- background: var(--accent-dim);
441
- color: var(--accent);
442
- font-weight: 600;
443
- }
444
-
445
- .mode-btn .material-symbols-outlined { font-size: 16px; }
446
-
447
- /* ── Card Grid ─────────────────────────────────────────────────────────── */
448
- .card-grid {
449
- display: grid;
450
- grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
451
- gap: 12px;
452
- }
453
-
454
- /* ── Knowledge Card ────────────────────────────────────────────────────── */
455
- .knowledge-card {
456
- background: var(--bg-elevated);
457
- border: 1px solid transparent;
458
- border-radius: var(--radius);
459
- padding: 14px 16px;
460
- cursor: pointer;
461
- box-shadow: var(--shadow-1);
462
- transition: transform var(--transition-fast), box-shadow var(--transition-fast), border-color var(--transition-fast);
463
- }
464
-
465
- .knowledge-card:hover {
466
- transform: translateY(-1px);
467
- box-shadow: var(--shadow-hover);
468
- border-color: var(--accent);
469
- }
470
-
471
- .knowledge-card .card-title {
472
- font-size: 14px;
473
- font-weight: 600;
474
- color: var(--text);
475
- margin-bottom: 6px;
476
- line-height: 1.3;
477
- }
478
-
479
- .knowledge-card .card-category {
480
- display: inline-flex;
481
- align-items: center;
482
- gap: 3px;
483
- font-size: 11px;
484
- font-weight: 500;
485
- padding: 2px 8px;
486
- border-radius: 10px;
487
- margin-bottom: 8px;
488
- }
489
-
490
- .card-category[data-cat="projects"] { background: var(--blue-dim); color: var(--blue); }
491
- .card-category[data-cat="people"] { background: var(--purple-dim); color: var(--purple); }
492
- .card-category[data-cat="decisions"] { background: var(--orange-dim); color: var(--orange); }
493
- .card-category[data-cat="workflows"] { background: var(--green-dim); color: var(--green); }
494
- .card-category[data-cat="notes"] { background: var(--yellow-dim); color: var(--yellow); }
495
-
496
- .knowledge-card .card-tags {
497
- display: flex;
498
- flex-wrap: wrap;
499
- gap: 4px;
500
- margin-bottom: 6px;
501
- }
502
-
503
- .card-tag {
504
- font-size: 10px;
505
- font-weight: 500;
506
- padding: 1px 6px;
507
- border-radius: 6px;
508
- background: var(--bg-hover);
509
- color: var(--text-muted);
510
- }
511
-
512
- .knowledge-card .card-date {
513
- font-size: 11px;
514
- color: var(--text-dim);
515
- font-family: var(--font-mono);
516
- }
517
-
518
- /* ── Results List ──────────────────────────────────────────────────────── */
519
- .results-list {
520
- display: flex;
521
- flex-direction: column;
522
- gap: 0;
523
- }
524
-
525
- .result-item {
526
- padding: 12px 16px;
527
- border-bottom: 1px solid var(--border-light);
528
- cursor: pointer;
529
- transition: background var(--transition-fast);
530
- }
531
-
532
- .result-item:hover {
533
- background: var(--bg-hover);
534
- }
535
-
536
- .result-item:last-child {
537
- border-bottom: none;
538
- }
539
-
540
- .result-meta {
541
- display: flex;
542
- align-items: center;
543
- gap: 8px;
544
- margin-bottom: 6px;
545
- flex-wrap: wrap;
546
- }
547
-
548
- .result-project {
549
- font-size: 11px;
550
- font-weight: 600;
551
- font-family: var(--font-mono);
552
- color: var(--accent);
553
- background: var(--accent-dim);
554
- padding: 1px 6px;
555
- border-radius: 6px;
556
- }
557
-
558
- .result-date {
559
- font-size: 11px;
560
- color: var(--text-dim);
561
- font-family: var(--font-mono);
562
- }
563
-
564
- /* ── Role Badge ────────────────────────────────────────────────────────── */
565
- .role-badge {
566
- display: inline-flex;
567
- align-items: center;
568
- gap: 2px;
569
- font-size: 10px;
570
- font-weight: 600;
571
- padding: 1px 6px;
572
- border-radius: 6px;
573
- text-transform: uppercase;
574
- letter-spacing: 0.3px;
575
- }
576
-
577
- .role-badge[data-role="user"] { background: var(--accent-dim); color: var(--accent); }
578
- .role-badge[data-role="assistant"] { background: var(--purple-dim); color: var(--purple); }
579
- .role-badge[data-role="tool_use"] { background: var(--orange-dim); color: var(--orange); }
580
- .role-badge[data-role="tool_result"] { background: var(--orange-dim); color: var(--orange); }
581
-
582
- /* ── Score Bar ─────────────────────────────────────────────────────────── */
583
- .score-container {
584
- display: flex;
585
- align-items: center;
586
- gap: 6px;
587
- }
588
-
589
- .score-bar {
590
- width: 60px;
591
- height: 4px;
592
- background: var(--bg-inset);
593
- border-radius: 2px;
594
- overflow: hidden;
595
- }
596
-
597
- .score-bar-fill {
598
- height: 100%;
599
- background: var(--green);
600
- border-radius: 2px;
601
- transition: width var(--transition-normal);
602
- }
603
-
604
- .score-value {
605
- font-size: 10px;
606
- font-weight: 600;
607
- font-family: var(--font-mono);
608
- color: var(--text-dim);
609
- }
610
-
611
- /* ── Scope Badge ───────────────────────────────────────────────────────── */
612
- .scope-badge {
613
- font-size: 10px;
614
- font-weight: 600;
615
- padding: 1px 6px;
616
- border-radius: 6px;
617
- text-transform: uppercase;
618
- letter-spacing: 0.3px;
619
- }
620
-
621
- .scope-badge[data-scope="errors"] { background: var(--red-dim); color: var(--red); }
622
- .scope-badge[data-scope="plans"] { background: var(--blue-dim); color: var(--blue); }
623
- .scope-badge[data-scope="configs"] { background: var(--orange-dim); color: var(--orange); }
624
- .scope-badge[data-scope="tools"] { background: var(--purple-dim); color: var(--purple); }
625
- .scope-badge[data-scope="files"] { background: var(--green-dim); color: var(--green); }
626
- .scope-badge[data-scope="decisions"] { background: var(--yellow-dim); color: var(--yellow); }
627
-
628
- /* ── Excerpt ───────────────────────────────────────────────────────────── */
629
- .result-excerpt {
630
- font-size: 13px;
631
- font-family: var(--font-mono);
632
- color: var(--text-secondary);
633
- line-height: 1.5;
634
- white-space: pre-wrap;
635
- word-break: break-word;
636
- background: var(--bg-surface);
637
- padding: 8px 12px;
638
- border-radius: var(--radius-sm);
639
- margin-top: 6px;
640
- border-left: 3px solid var(--accent);
641
- }
642
-
643
- .result-excerpt mark {
644
- background: var(--yellow-dim);
645
- color: var(--yellow);
646
- padding: 0 2px;
647
- border-radius: 2px;
648
- }
649
-
650
- /* ── Session Cards ─────────────────────────────────────────────────────── */
651
- .sessions-list {
652
- display: flex;
653
- flex-direction: column;
654
- gap: 8px;
655
- }
656
-
657
- .session-card {
658
- background: var(--bg-elevated);
659
- border: 1px solid transparent;
660
- border-radius: var(--radius);
661
- padding: 12px 16px;
662
- cursor: pointer;
663
- box-shadow: var(--shadow-1);
664
- transition: transform var(--transition-fast), box-shadow var(--transition-fast), border-color var(--transition-fast);
665
- }
666
-
667
- .session-card:hover {
668
- transform: translateY(-1px);
669
- box-shadow: var(--shadow-hover);
670
- border-color: var(--accent);
671
- }
672
-
673
- .session-card .session-header {
674
- display: flex;
675
- align-items: center;
676
- justify-content: space-between;
677
- margin-bottom: 6px;
678
- }
679
-
680
- .session-card .session-project {
681
- font-size: 12px;
682
- font-weight: 600;
683
- font-family: var(--font-mono);
684
- color: var(--accent);
685
- }
686
-
687
- .session-card .session-date {
688
- font-size: 11px;
689
- color: var(--text-dim);
690
- font-family: var(--font-mono);
691
- }
692
-
693
- .session-card .session-meta {
694
- display: flex;
695
- gap: 12px;
696
- margin-bottom: 6px;
697
- }
698
-
699
- .session-card .session-meta-item {
700
- display: flex;
701
- align-items: center;
702
- gap: 4px;
703
- font-size: 11px;
704
- color: var(--text-muted);
705
- }
706
-
707
- .session-card .session-meta-item .material-symbols-outlined {
708
- font-size: 14px;
709
- }
710
-
711
- .session-card .session-preview {
712
- font-size: 12px;
713
- color: var(--text-secondary);
714
- line-height: 1.4;
715
- overflow: hidden;
716
- text-overflow: ellipsis;
717
- white-space: nowrap;
718
- }
719
-
720
- /* ── Filter Select ─────────────────────────────────────────────────────── */
721
- .filter-select {
722
- height: 32px;
723
- padding: 0 28px 0 10px;
724
- font-size: 12px;
725
- font-family: var(--font-sans);
726
- color: var(--text);
727
- background: var(--bg-elevated);
728
- border: 1px solid var(--border-light);
729
- border-radius: var(--radius-sm);
730
- outline: none;
731
- cursor: pointer;
732
- appearance: none;
733
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M3 5l3 3 3-3' fill='none' stroke='%235a6b78' stroke-width='1.5'/%3E%3C/svg%3E");
734
- background-repeat: no-repeat;
735
- background-position: right 8px center;
736
- }
737
-
738
- .filter-select:focus {
739
- border-color: var(--accent);
740
- box-shadow: 0 0 0 3px var(--focus-ring);
741
- }
742
-
743
- /* ── Side Panel ────────────────────────────────────────────────────────── */
744
- .side-panel {
745
- width: 0;
746
- min-width: 0;
747
- overflow: hidden;
748
- background: var(--bg-surface);
749
- border-left: 1px solid var(--border);
750
- box-shadow: var(--shadow-panel);
751
- transition: width var(--transition-slow), min-width var(--transition-slow);
752
- flex-shrink: 0;
753
- display: flex;
754
- flex-direction: column;
755
- }
756
-
757
- .side-panel.open {
758
- width: var(--panel-width);
759
- min-width: var(--panel-width);
760
- }
761
-
762
- .panel-header {
763
- display: flex;
764
- align-items: center;
765
- justify-content: space-between;
766
- padding: 12px 16px;
767
- border-bottom: 1px solid var(--border);
768
- flex-shrink: 0;
769
- }
770
-
771
- .panel-title {
772
- font-size: 14px;
773
- font-weight: 600;
774
- color: var(--text);
775
- overflow: hidden;
776
- text-overflow: ellipsis;
777
- white-space: nowrap;
778
- flex: 1;
779
- margin-right: 8px;
780
- }
781
-
782
- .panel-body {
783
- flex: 1;
784
- overflow-y: auto;
785
- padding: 16px;
786
- }
787
-
788
- /* ── Chat Bubbles ──────────────────────────────────────────────────────── */
789
- .chat-messages {
790
- display: flex;
791
- flex-direction: column;
792
- gap: 12px;
793
- }
794
-
795
- .chat-msg {
796
- max-width: 85%;
797
- padding: 10px 14px;
798
- border-radius: var(--radius);
799
- font-size: 13px;
800
- line-height: 1.5;
801
- word-break: break-word;
802
- }
803
-
804
- .chat-msg.user {
805
- align-self: flex-end;
806
- background: var(--accent);
807
- color: #ffffff;
808
- border-bottom-right-radius: 4px;
809
- }
810
-
811
- .chat-msg.assistant {
812
- align-self: flex-start;
813
- background: var(--bg-elevated);
814
- color: var(--text);
815
- border-bottom-left-radius: 4px;
816
- }
817
-
818
- .chat-msg.tool {
819
- align-self: flex-start;
820
- background: var(--bg-inset);
821
- color: var(--text-muted);
822
- font-family: var(--font-mono);
823
- font-size: 11px;
824
- border-bottom-left-radius: 4px;
825
- max-height: 100px;
826
- overflow: hidden;
827
- position: relative;
828
- cursor: pointer;
829
- }
830
-
831
- .chat-msg.tool.expanded {
832
- max-height: none;
833
- }
834
-
835
- .chat-msg.tool::after {
836
- content: 'Click to expand';
837
- position: absolute;
838
- bottom: 0;
839
- left: 0;
840
- right: 0;
841
- padding: 4px;
842
- text-align: center;
843
- font-size: 10px;
844
- background: linear-gradient(transparent, var(--bg-inset));
845
- }
846
-
847
- .chat-msg.tool.expanded::after {
848
- display: none;
849
- }
850
-
851
- .chat-msg-role {
852
- font-size: 10px;
853
- font-weight: 600;
854
- text-transform: uppercase;
855
- letter-spacing: 0.3px;
856
- margin-bottom: 4px;
857
- opacity: 0.7;
858
- }
859
-
860
- .chat-msg-time {
861
- font-size: 10px;
862
- opacity: 0.5;
863
- margin-top: 4px;
864
- font-family: var(--font-mono);
865
- }
866
-
867
- /* ── Markdown / Prose ──────────────────────────────────────────────────── */
868
- .prose h1, .prose h2, .prose h3 {
869
- color: var(--text);
870
- margin: 16px 0 8px;
871
- line-height: 1.3;
872
- }
873
-
874
- .prose h1 { font-size: 20px; font-weight: 700; }
875
- .prose h2 { font-size: 16px; font-weight: 600; }
876
- .prose h3 { font-size: 14px; font-weight: 600; }
877
-
878
- .prose p { margin: 8px 0; }
879
-
880
- .prose code {
881
- font-family: var(--font-mono);
882
- font-size: 12px;
883
- background: var(--bg-inset);
884
- padding: 1px 4px;
885
- border-radius: 4px;
886
- }
887
-
888
- .prose pre {
889
- background: var(--bg-inset);
890
- padding: 12px;
891
- border-radius: var(--radius-sm);
892
- overflow-x: auto;
893
- margin: 12px 0;
894
- font-size: 12px;
895
- line-height: 1.5;
896
- }
897
-
898
- .prose pre code {
899
- background: none;
900
- padding: 0;
901
- }
902
-
903
- .prose a {
904
- color: var(--accent);
905
- text-decoration: underline;
906
- }
907
-
908
- .prose ul, .prose ol {
909
- padding-left: 20px;
910
- margin: 8px 0;
911
- }
912
-
913
- .prose li { margin: 2px 0; }
914
-
915
- .prose blockquote {
916
- border-left: 3px solid var(--accent);
917
- margin: 12px 0;
918
- padding: 4px 12px;
919
- background: var(--bg-elevated);
920
- border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
921
- color: var(--text-secondary);
922
- }
923
-
924
- .prose table {
925
- width: 100%;
926
- border-collapse: collapse;
927
- margin: 12px 0;
928
- font-size: 13px;
929
- }
930
-
931
- .prose th, .prose td {
932
- padding: 6px 10px;
933
- border: 1px solid var(--border-light);
934
- text-align: left;
935
- }
936
-
937
- .prose th {
938
- background: var(--bg-elevated);
939
- font-weight: 600;
940
- font-size: 11px;
941
- text-transform: uppercase;
942
- letter-spacing: 0.3px;
943
- }
944
-
945
- .prose hr {
946
- border: none;
947
- border-top: 1px solid var(--border-light);
948
- margin: 16px 0;
949
- }
950
-
951
- /* ── Empty State ───────────────────────────────────────────────────────── */
952
- .empty-state {
953
- display: flex;
954
- flex-direction: column;
955
- align-items: center;
956
- justify-content: center;
957
- padding: 48px 24px;
958
- text-align: center;
959
- }
960
-
961
- .empty-state.hidden { display: none; }
962
-
963
- .empty-icon {
964
- font-size: 48px;
965
- color: var(--text-dim);
966
- margin-bottom: 12px;
967
- }
968
-
969
- .empty-text {
970
- font-size: 15px;
971
- font-weight: 600;
972
- color: var(--text-muted);
973
- margin-bottom: 4px;
974
- }
975
-
976
- .empty-hint {
977
- font-size: 12px;
978
- color: var(--text-dim);
979
- }
980
-
981
- /* ── Loading Overlay ───────────────────────────────────────────────────── */
982
- .loading-overlay {
983
- position: fixed;
984
- inset: 0;
985
- display: flex;
986
- flex-direction: column;
987
- align-items: center;
988
- justify-content: center;
989
- background: var(--bg);
990
- z-index: 100;
991
- gap: 16px;
992
- transition: opacity var(--transition-slow);
993
- }
994
-
995
- .loading-overlay.hidden {
996
- opacity: 0;
997
- pointer-events: none;
998
- }
999
-
1000
- .loading-spinner {
1001
- width: 32px;
1002
- height: 32px;
1003
- border: 3px solid var(--border);
1004
- border-top-color: var(--accent);
1005
- border-radius: 50%;
1006
- animation: spin 0.8s linear infinite;
1007
- }
1008
-
1009
- .loading-text {
1010
- font-size: 13px;
1011
- color: var(--text-muted);
1012
- }
1013
-
1014
- /* ── Toast ─────────────────────────────────────────────────────────────── */
1015
- .toast-container {
1016
- position: fixed;
1017
- top: 16px;
1018
- right: 16px;
1019
- z-index: 200;
1020
- display: flex;
1021
- flex-direction: column;
1022
- gap: 8px;
1023
- max-width: 340px;
1024
- }
1025
-
1026
- .toast {
1027
- display: flex;
1028
- align-items: flex-start;
1029
- gap: 8px;
1030
- padding: 10px 14px;
1031
- background: var(--bg-surface);
1032
- border: 1px solid var(--border);
1033
- border-radius: var(--radius-sm);
1034
- box-shadow: var(--shadow-2);
1035
- animation: toastIn 0.3s ease;
1036
- font-size: 13px;
1037
- color: var(--text);
1038
- }
1039
-
1040
- .toast.fade-out {
1041
- animation: toastOut 0.3s ease forwards;
1042
- }
1043
-
1044
- .toast-icon {
1045
- font-size: 18px;
1046
- flex-shrink: 0;
1047
- }
1048
-
1049
- .toast.success .toast-icon { color: var(--green); }
1050
- .toast.error .toast-icon { color: var(--red); }
1051
-
1052
- /* ── Skeleton Loading ──────────────────────────────────────────────────── */
1053
- .skeleton-line {
1054
- height: 12px;
1055
- background: var(--bg-hover);
1056
- border-radius: 6px;
1057
- animation: pulse 1.5s ease-in-out infinite;
1058
- }
1059
-
1060
- .skeleton-line + .skeleton-line {
1061
- margin-top: 8px;
1062
- }
1063
-
1064
- .skeleton-line.w-75 { width: 75%; }
1065
- .skeleton-line.w-50 { width: 50%; }
1066
- .skeleton-line.w-25 { width: 25%; }
1067
-
1068
- /* ── Animations ────────────────────────────────────────────────────────── */
1069
- @keyframes spin {
1070
- to { transform: rotate(360deg); }
1071
- }
1072
-
1073
- @keyframes toastIn {
1074
- from { opacity: 0; transform: translateX(30px); }
1075
- to { opacity: 1; transform: translateX(0); }
1076
- }
1077
-
1078
- @keyframes toastOut {
1079
- from { opacity: 1; transform: translateX(0); }
1080
- to { opacity: 0; transform: translateX(30px); }
1081
- }
1082
-
1083
- @keyframes pulse {
1084
- 0%, 100% { opacity: 0.4; }
1085
- 50% { opacity: 0.8; }
1086
- }
1087
-
1088
- @keyframes fadeInUp {
1089
- from { opacity: 0; transform: translateY(8px); }
1090
- to { opacity: 1; transform: translateY(0); }
1091
- }
1092
-
1093
- /* ── Loading Inline ────────────────────────────────────────────────────── */
1094
- .loading-inline {
1095
- display: flex;
1096
- align-items: center;
1097
- justify-content: center;
1098
- gap: 8px;
1099
- padding: 24px;
1100
- color: var(--text-muted);
1101
- font-size: 13px;
1102
- }
1103
-
1104
- .loading-spinner.small {
1105
- width: 18px;
1106
- height: 18px;
1107
- border-width: 2px;
1108
- }
1109
-
1110
- /* ── Responsive ────────────────────────────────────────────────────────── */
1111
- @media (max-width: 1024px) {
1112
- .side-panel.open {
1113
- position: fixed;
1114
- right: 0;
1115
- top: 0;
1116
- bottom: 0;
1117
- z-index: 50;
1118
- }
1119
- }
1120
-
1121
- @media (max-width: 768px) {
1122
- #content { padding: 12px 16px; }
1123
- .card-grid { grid-template-columns: 1fr; }
1124
- .tab { padding: 8px 12px; font-size: 12px; }
1125
- .tab-icon { font-size: 18px; }
1126
- .side-panel.open { width: 100vw; min-width: 100vw; }
1127
- .search-controls { flex-direction: column; align-items: stretch; }
1128
- header { padding: 6px 12px; }
1129
- .stats { display: none; }
1130
- }
1131
-
1132
- @media (max-width: 480px) {
1133
- .tab { padding: 8px 10px; gap: 4px; }
1134
- }
1135
-
1136
- /* ── Reduced Motion ────────────────────────────────────────────────────── */
1137
- @media (prefers-reduced-motion: reduce) {
1138
- *, *::before, *::after {
1139
- animation-duration: 0.01ms !important;
1140
- transition-duration: 0.01ms !important;
1141
- }
1142
- }
1143
-
1144
- /* ── Focus Visible ─────────────────────────────────────────────────────── */
1145
- :focus-visible {
1146
- outline: 2px solid var(--accent);
1147
- outline-offset: 1px;
1148
- }
1149
-
1150
- /* ── Selection ─────────────────────────────────────────────────────────── */
1151
- ::selection {
1152
- background: var(--accent-dim);
1153
- color: var(--text);
1154
- }