@cccarv82/freya 2.3.13 → 2.5.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 (37) hide show
  1. package/.agent/rules/freya/agents/coach.mdc +7 -16
  2. package/.agent/rules/freya/agents/ingestor.mdc +1 -89
  3. package/.agent/rules/freya/agents/master.mdc +3 -0
  4. package/.agent/rules/freya/agents/oracle.mdc +7 -23
  5. package/cli/web-ui.css +965 -182
  6. package/cli/web-ui.js +551 -173
  7. package/cli/web.js +863 -536
  8. package/package.json +7 -4
  9. package/scripts/build-vector-index.js +85 -0
  10. package/scripts/export-obsidian.js +6 -16
  11. package/scripts/generate-blockers-report.js +5 -17
  12. package/scripts/generate-daily-summary.js +25 -58
  13. package/scripts/generate-executive-report.js +22 -204
  14. package/scripts/generate-sm-weekly-report.js +27 -92
  15. package/scripts/lib/DataLayer.js +92 -0
  16. package/scripts/lib/DataManager.js +198 -0
  17. package/scripts/lib/Embedder.js +59 -0
  18. package/scripts/lib/schema.js +23 -0
  19. package/scripts/migrate-v1-v2.js +184 -0
  20. package/scripts/validate-data.js +48 -51
  21. package/scripts/validate-structure.js +12 -58
  22. package/templates/base/scripts/build-vector-index.js +85 -0
  23. package/templates/base/scripts/export-obsidian.js +143 -0
  24. package/templates/base/scripts/generate-daily-summary.js +25 -58
  25. package/templates/base/scripts/generate-executive-report.js +14 -225
  26. package/templates/base/scripts/generate-sm-weekly-report.js +9 -91
  27. package/templates/base/scripts/index/build-index.js +13 -0
  28. package/templates/base/scripts/index/update-index.js +15 -0
  29. package/templates/base/scripts/lib/DataLayer.js +92 -0
  30. package/templates/base/scripts/lib/DataManager.js +198 -0
  31. package/templates/base/scripts/lib/Embedder.js +59 -0
  32. package/templates/base/scripts/lib/index-utils.js +407 -0
  33. package/templates/base/scripts/lib/schema.js +23 -0
  34. package/templates/base/scripts/lib/search-utils.js +183 -0
  35. package/templates/base/scripts/migrate-v1-v2.js +184 -0
  36. package/templates/base/scripts/validate-data.js +48 -51
  37. package/templates/base/scripts/validate-structure.js +10 -32
package/cli/web-ui.css CHANGED
@@ -1,67 +1,106 @@
1
1
  /* FREYA web UI styles (served as static asset)
2
2
  Keep this file plain CSS to avoid escaping issues in inline template literals. */
3
3
 
4
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Outfit:wght@400;500;600;700&display=swap');
5
+
4
6
  :root {
5
- --radius: 0px;
6
- --radius2: 0px;
7
- --shadow: 0 20px 60px rgba(16, 24, 40, .12);
8
- --shadow2: 0 10px 22px rgba(16, 24, 40, .10);
7
+ --radius: 16px;
8
+ --radius2: 12px;
9
+ --shadow: 0 20px 60px rgba(16, 24, 40, .08);
10
+ --shadow2: 0 8px 30px rgba(16, 24, 40, .04);
11
+ --shadow-hover: 0 12px 40px rgba(16, 24, 40, .08);
9
12
  --ring: 0 0 0 4px rgba(37, 99, 235, .18);
13
+ --glass-bg: rgba(255, 255, 255, 0.4);
14
+ --glass-border: rgba(255, 255, 255, 0.3);
10
15
 
11
16
  /* Warm cream palette (light-first) */
12
- --bg: #f7f0e6;
13
- --paper: #fffaf2;
14
- --paper2: rgba(255, 250, 242, .78);
15
- --line: rgba(30, 41, 59, .10);
16
- --line2: rgba(30, 41, 59, .18);
17
- --text: #111827;
18
- --muted: rgba(17, 24, 39, .74);
19
- --faint: rgba(17, 24, 39, .56);
17
+ --bg: #fdfbf7;
18
+ --paper: rgba(255, 255, 255, 0.75);
19
+ --paper2: rgba(255, 255, 255, 0.5);
20
+ --line: rgba(30, 41, 59, .06);
21
+ --line2: rgba(30, 41, 59, .12);
22
+ --text: #1e293b;
23
+ --muted: rgba(30, 41, 59, .74);
24
+ --faint: rgba(30, 41, 59, .50);
20
25
 
21
26
  --accent: #f97316;
22
- --primary: #2563eb;
23
- --chip: rgba(37, 99, 235, .10);
24
- --chip2: rgba(249, 115, 22, .14);
27
+ --primary: #3b82f6;
28
+ --chip: rgba(59, 130, 246, .10);
29
+ --chip2: rgba(249, 115, 22, .12);
30
+
31
+ --mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
32
+ --sans: 'Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
33
+ --display: 'Outfit', var(--sans);
25
34
 
26
- --mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
27
- --sans: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif;
35
+ --transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
28
36
  }
29
37
 
30
38
  [data-theme="dark"] {
31
- --bg: #0f1113;
32
- --paper: rgba(20, 22, 25, .98);
33
- --paper2: rgba(27, 30, 34, .92);
34
- --line: rgba(255, 255, 255, .08);
35
- --line2: rgba(255, 255, 255, .18);
36
- --text: #e5e7eb;
37
- --muted: rgba(229, 231, 235, .72);
38
- --faint: rgba(229, 231, 235, .50);
39
+ --bg: #0f1115;
40
+ --paper: rgba(20, 22, 26, 0.65);
41
+ --paper2: rgba(30, 33, 39, 0.5);
42
+ --line: rgba(255, 255, 255, .06);
43
+ --line2: rgba(255, 255, 255, .12);
44
+ --text: #f1f5f9;
45
+ --muted: rgba(241, 245, 249, .70);
46
+ --faint: rgba(241, 245, 249, .45);
39
47
  --chip: rgba(45, 212, 191, .15);
40
- --chip2: rgba(56, 189, 248, .18);
48
+ --chip2: rgba(56, 189, 248, .15);
41
49
  --accent: #2dd4bf;
42
- --primary: #22d3ee;
50
+ --primary: #38bdf8;
51
+
52
+ --glass-bg: rgba(20, 22, 26, 0.4);
53
+ --glass-border: rgba(255, 255, 255, 0.05);
54
+ --shadow: 0 20px 60px rgba(0, 0, 0, .4);
55
+ --shadow2: 0 8px 30px rgba(0, 0, 0, .3);
56
+ --shadow-hover: 0 12px 40px rgba(0, 0, 0, .5);
43
57
  }
44
58
 
45
- * { box-sizing: border-box; }
59
+ * {
60
+ box-sizing: border-box;
61
+ }
46
62
 
47
63
  /* Subtle themed scrollbars (best-effort) */
48
- * { scrollbar-color: rgba(17,24,39,.32) transparent; scrollbar-width: thin; }
49
- [data-theme="dark"] * { scrollbar-color: rgba(229,231,235,.28) transparent; }
64
+ * {
65
+ scrollbar-color: rgba(17, 24, 39, .32) transparent;
66
+ scrollbar-width: thin;
67
+ }
68
+
69
+ [data-theme="dark"] * {
70
+ scrollbar-color: rgba(229, 231, 235, .28) transparent;
71
+ }
72
+
73
+ *::-webkit-scrollbar {
74
+ width: 10px;
75
+ height: 10px;
76
+ }
77
+
78
+ *::-webkit-scrollbar-track {
79
+ background: transparent;
80
+ }
50
81
 
51
- *::-webkit-scrollbar { width: 10px; height: 10px; }
52
- *::-webkit-scrollbar-track { background: transparent; }
53
82
  *::-webkit-scrollbar-thumb {
54
- background: rgba(17,24,39,.18);
83
+ background: rgba(17, 24, 39, .18);
55
84
  border: 3px solid transparent;
56
85
  background-clip: content-box;
57
86
  border-radius: 999px;
58
87
  }
59
- [data-theme="dark"] *::-webkit-scrollbar-thumb { background: rgba(229,231,235,.16); }
60
- *::-webkit-scrollbar-thumb:hover { background: rgba(17,24,39,.28); }
61
- [data-theme="dark"] *::-webkit-scrollbar-thumb:hover { background: rgba(229,231,235,.26); }
62
88
 
89
+ [data-theme="dark"] *::-webkit-scrollbar-thumb {
90
+ background: rgba(229, 231, 235, .16);
91
+ }
92
+
93
+ *::-webkit-scrollbar-thumb:hover {
94
+ background: rgba(17, 24, 39, .28);
95
+ }
63
96
 
64
- html, body {
97
+ [data-theme="dark"] *::-webkit-scrollbar-thumb:hover {
98
+ background: rgba(229, 231, 235, .26);
99
+ }
100
+
101
+
102
+ html,
103
+ body {
65
104
  height: 100%;
66
105
  }
67
106
 
@@ -73,10 +112,13 @@ body {
73
112
  }
74
113
 
75
114
  [data-theme="dark"] body {
76
- background: radial-gradient(800px 360px at 65% 10%, rgba(45,212,191,.10), transparent 55%), var(--bg);
115
+ background: radial-gradient(800px 360px at 65% 10%, rgba(45, 212, 191, .10), transparent 55%), var(--bg);
77
116
  }
78
117
 
79
- .app { padding: 0; height: 100%; }
118
+ .app {
119
+ padding: 0;
120
+ height: 100%;
121
+ }
80
122
 
81
123
  .frame {
82
124
  width: 100vw;
@@ -97,12 +139,19 @@ body {
97
139
  }
98
140
 
99
141
  @media (max-width: 1200px) {
100
- .shell { grid-template-columns: 72px 1fr; }
142
+ .shell {
143
+ grid-template-columns: 72px 1fr;
144
+ }
101
145
  }
102
146
 
103
147
  @media (max-width: 860px) {
104
- .shell { grid-template-columns: 1fr; }
105
- .rail { display: none; }
148
+ .shell {
149
+ grid-template-columns: 1fr;
150
+ }
151
+
152
+ .rail {
153
+ display: none;
154
+ }
106
155
  }
107
156
 
108
157
  /* LEFT RAIL */
@@ -116,7 +165,13 @@ body {
116
165
  gap: 14px;
117
166
  }
118
167
 
119
- .railTop { display: flex; align-items: center; justify-content: center; width: 100%; }
168
+ .railTop {
169
+ display: flex;
170
+ align-items: center;
171
+ justify-content: center;
172
+ width: 100%;
173
+ }
174
+
120
175
  .railLogo {
121
176
  width: 38px;
122
177
  height: 38px;
@@ -130,23 +185,54 @@ body {
130
185
  border: 1px solid var(--line2);
131
186
  }
132
187
 
133
- .railNav { display: flex; flex-direction: column; gap: 10px; width: 100%; align-items: center; }
188
+ .railNav {
189
+ display: flex;
190
+ flex-direction: column;
191
+ gap: 10px;
192
+ width: 100%;
193
+ align-items: center;
194
+ }
195
+
134
196
  .railBtn {
135
- width: 38px;
136
- height: 38px;
137
- border-radius: 12px;
138
- border: 1px solid var(--line);
139
- background: rgba(255,255,255,.04);
197
+ width: 42px;
198
+ height: 42px;
199
+ border-radius: 14px;
200
+ border: 1px solid transparent;
201
+ background: transparent;
140
202
  color: var(--muted);
141
203
  display: grid;
142
204
  place-items: center;
143
- font-size: 12px;
205
+ font-size: 14px;
144
206
  cursor: pointer;
207
+ transition: var(--transition);
208
+ }
209
+
210
+ .railBtn.active {
211
+ background: var(--glass-bg);
212
+ border-color: var(--glass-border);
213
+ color: var(--primary);
214
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
215
+ }
216
+
217
+ .railBtn:hover:not(.active) {
218
+ background: rgba(0, 0, 0, 0.03);
219
+ color: var(--text);
220
+ }
221
+
222
+ [data-theme="dark"] .railBtn:hover:not(.active) {
223
+ background: rgba(255, 255, 255, 0.05);
224
+ }
225
+
226
+ .railBottom {
227
+ margin-top: auto;
228
+ padding-bottom: 6px;
229
+ }
230
+
231
+ .railToggle {
232
+ width: 44px;
233
+ height: 44px;
234
+ font-size: 11px;
145
235
  }
146
- .railBtn.active { border-color: rgba(45,212,191,.5); color: var(--text); box-shadow: 0 0 0 1px rgba(45,212,191,.35); }
147
- .railBtn:hover { border-color: var(--line2); }
148
- .railBottom { margin-top: auto; padding-bottom: 6px; }
149
- .railToggle { width: 44px; height: 44px; font-size: 11px; }
150
236
 
151
237
  .sideHeader .logo {
152
238
  font-weight: 900;
@@ -155,24 +241,53 @@ body {
155
241
  color: var(--muted);
156
242
  }
157
243
 
158
- .dot { width: 10px; height: 10px; border-radius: 6px; background: rgba(148,163,184,.6); }
159
- .dot.ok { background: rgba(16,185,129,.85); }
160
- .dot.err { background: rgba(239,68,68,.85); }
161
- .dot.run { background: rgba(56,189,248,.9); }
162
- .dot.plan { background: rgba(250,204,21,.9); }
244
+ .dot {
245
+ width: 10px;
246
+ height: 10px;
247
+ border-radius: 6px;
248
+ background: rgba(148, 163, 184, .6);
249
+ }
250
+
251
+ .dot.ok {
252
+ background: rgba(16, 185, 129, .85);
253
+ }
254
+
255
+ .dot.err {
256
+ background: rgba(239, 68, 68, .85);
257
+ }
258
+
259
+ .dot.run {
260
+ background: rgba(56, 189, 248, .9);
261
+ }
262
+
263
+ .dot.plan {
264
+ background: rgba(250, 204, 21, .9);
265
+ }
163
266
 
164
267
  .railStatus {
165
268
  width: 16px;
166
269
  height: 16px;
167
270
  border-radius: 999px;
168
271
  border: 1px solid var(--line2);
169
- background: rgba(148,163,184,.6);
170
- box-shadow: 0 0 0 4px rgba(0,0,0,.25);
272
+ background: rgba(148, 163, 184, .6);
273
+ box-shadow: 0 0 0 4px rgba(0, 0, 0, .25);
274
+ }
275
+
276
+ .railStatus.ok {
277
+ background: rgba(16, 185, 129, .9);
278
+ }
279
+
280
+ .railStatus.err {
281
+ background: rgba(239, 68, 68, .9);
282
+ }
283
+
284
+ .railStatus.run {
285
+ background: rgba(56, 189, 248, .9);
286
+ }
287
+
288
+ .railStatus.plan {
289
+ background: rgba(250, 204, 21, .9);
171
290
  }
172
- .railStatus.ok { background: rgba(16,185,129,.9); }
173
- .railStatus.err { background: rgba(239,68,68,.9); }
174
- .railStatus.run { background: rgba(56,189,248,.9); }
175
- .railStatus.plan { background: rgba(250,204,21,.9); }
176
291
 
177
292
  .sidePath {
178
293
  margin: 10px 6px 10px;
@@ -182,16 +297,32 @@ body {
182
297
  word-break: break-all;
183
298
  }
184
299
 
185
- .sideGroup { margin-top: 10px; padding: 10px 6px; border-top: 1px solid var(--line); }
186
- .sideTitle { font-weight: 800; font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); margin-bottom: 10px; }
300
+ .sideGroup {
301
+ margin-top: 10px;
302
+ padding: 10px 6px;
303
+ border-top: 1px solid var(--line);
304
+ }
305
+
306
+ .sideTitle {
307
+ font-weight: 800;
308
+ font-size: 11px;
309
+ letter-spacing: .08em;
310
+ text-transform: uppercase;
311
+ color: var(--muted);
312
+ margin-bottom: 10px;
313
+ }
314
+
315
+ .cardsMini {
316
+ display: grid;
317
+ gap: 8px;
318
+ }
187
319
 
188
- .cardsMini { display: grid; gap: 8px; }
189
320
  .miniCard {
190
321
  width: 100%;
191
322
  text-align: left;
192
323
  border: 1px solid var(--line);
193
324
  border-radius: 12px;
194
- background: rgba(0,0,0,.18);
325
+ background: rgba(0, 0, 0, .18);
195
326
  padding: 10px 12px;
196
327
  cursor: pointer;
197
328
  display: flex;
@@ -200,7 +331,11 @@ body {
200
331
  font-weight: 700;
201
332
  color: var(--muted);
202
333
  }
203
- .miniCard:hover { border-color: var(--line2); box-shadow: var(--shadow2); }
334
+
335
+ .miniCard:hover {
336
+ border-color: var(--line2);
337
+ box-shadow: var(--shadow2);
338
+ }
204
339
 
205
340
  .miniIcon {
206
341
  width: 24px;
@@ -208,12 +343,16 @@ body {
208
343
  border-radius: 8px;
209
344
  display: grid;
210
345
  place-items: center;
211
- background: rgba(45,212,191,.18);
346
+ background: rgba(45, 212, 191, .18);
212
347
  border: 1px solid var(--line);
213
348
  color: var(--primary);
214
349
  font-weight: 800;
215
350
  }
216
- .miniIcon.warn { background: rgba(56,189,248,.18); color: var(--accent); }
351
+
352
+ .miniIcon.warn {
353
+ background: rgba(56, 189, 248, .18);
354
+ color: var(--accent);
355
+ }
217
356
 
218
357
  /* CENTER */
219
358
  .center {
@@ -232,18 +371,191 @@ body {
232
371
  background: transparent;
233
372
  }
234
373
 
235
- .brandLine { display: flex; align-items: center; gap: 12px; }
236
- .brandStack { display: flex; flex-direction: column; gap: 2px; }
237
- .brand { font-weight: 700; font-size: 13px; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); }
238
- .brandSub { font-size: 12px; color: var(--faint); }
239
- .spark { width: 10px; height: 10px; border-radius: 4px; background: linear-gradient(135deg, var(--accent), var(--primary)); box-shadow: 0 0 0 6px rgba(45,212,191,.10); }
240
- .topActions { display: flex; align-items: center; gap: 10px; }
241
- .chip { font-family: var(--mono); font-size: 12px; padding: 7px 10px; border-radius: 999px; border: 1px solid var(--line); background: rgba(0,0,0,.22); color: var(--faint); }
374
+ .brandLine {
375
+ display: flex;
376
+ align-items: center;
377
+ gap: 12px;
378
+ }
379
+
380
+ .brandStack {
381
+ display: flex;
382
+ flex-direction: column;
383
+ gap: 2px;
384
+ }
385
+
386
+ .brand {
387
+ font-family: var(--display);
388
+ font-weight: 700;
389
+ font-size: 14px;
390
+ letter-spacing: .12em;
391
+ text-transform: uppercase;
392
+ color: var(--text);
393
+ }
394
+
395
+ .brandSub {
396
+ font-family: var(--sans);
397
+ font-size: 12px;
398
+ color: var(--faint);
399
+ }
400
+
401
+ .spark {
402
+ width: 10px;
403
+ height: 10px;
404
+ border-radius: 4px;
405
+ background: linear-gradient(135deg, var(--accent), var(--primary));
406
+ box-shadow: 0 0 0 6px rgba(45, 212, 191, .10);
407
+ }
408
+
409
+ .chip {
410
+ display: inline-flex;
411
+ align-items: center;
412
+ padding: 4px 12px;
413
+ background: var(--chip);
414
+ color: var(--primary);
415
+ border-radius: 99px;
416
+ font-size: 11px;
417
+ font-weight: 600;
418
+ letter-spacing: 0.02em;
419
+ border: 1px solid var(--line);
420
+ white-space: nowrap;
421
+ }
422
+
423
+ .chip.clickable {
424
+ cursor: pointer;
425
+ transition: var(--transition);
426
+ }
427
+
428
+ .chip.clickable:hover {
429
+ background: var(--primary);
430
+ color: white;
431
+ transform: translateY(-1px);
432
+ box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2);
433
+ }
434
+
435
+ /* Documentation Styles */
436
+ .docs-content {
437
+ max-width: 900px;
438
+ margin: 0 auto;
439
+ padding: 40px 20px;
440
+ line-height: 1.7;
441
+ }
442
+
443
+ .docs-card {
444
+ background: var(--paper);
445
+ border: 1px solid var(--line2);
446
+ border-radius: var(--radius);
447
+ padding: 40px;
448
+ margin-bottom: 30px;
449
+ box-shadow: var(--shadow2);
450
+ backdrop-filter: blur(10px);
451
+ }
452
+
453
+ .docs-h1 {
454
+ font-family: var(--display);
455
+ font-size: 32px;
456
+ font-weight: 700;
457
+ color: var(--primary);
458
+ margin-top: 0;
459
+ margin-bottom: 24px;
460
+ }
461
+
462
+ .docs-h2 {
463
+ font-family: var(--display);
464
+ font-size: 24px;
465
+ font-weight: 600;
466
+ color: var(--text);
467
+ margin-top: 40px;
468
+ margin-bottom: 16px;
469
+ border-bottom: 1px solid var(--line);
470
+ padding-bottom: 8px;
471
+ }
472
+
473
+ .docs-p {
474
+ margin-bottom: 16px;
475
+ color: var(--muted);
476
+ }
477
+
478
+ .docs-code {
479
+ background: var(--bg2);
480
+ padding: 2px 6px;
481
+ border-radius: 6px;
482
+ font-family: var(--mono);
483
+ font-size: 0.9em;
484
+ color: var(--accent);
485
+ border: 1px solid var(--line);
486
+ }
487
+
488
+ .docs-pre {
489
+ background: var(--bg);
490
+ padding: 20px;
491
+ border-radius: var(--radius2);
492
+ overflow-x: auto;
493
+ font-family: var(--mono);
494
+ border: 1px solid var(--line);
495
+ margin: 20px 0;
496
+ color: var(--muted);
497
+ }
498
+
499
+ .docs-ul {
500
+ padding-left: 24px;
501
+ margin-bottom: 24px;
502
+ }
503
+
504
+ .docs-ul li {
505
+ margin-bottom: 12px;
506
+ color: var(--muted);
507
+ }
508
+
509
+ .docs-strong {
510
+ font-weight: 600;
511
+ color: var(--text);
512
+ }
513
+
514
+ .topActions {
515
+ display: flex;
516
+ align-items: center;
517
+ gap: 10px;
518
+ }
242
519
 
243
- .pill { font-family: var(--mono); font-size: 11px; padding: 4px 8px; border-radius: 999px; border: 1px solid var(--line); background: var(--paper2); color: var(--muted); text-transform: uppercase; letter-spacing: .08em; }
244
- .pill.ok { background: rgba(16, 185, 129, .12); color: #065f46; border-color: rgba(16, 185, 129, .28); }
245
- .pill.warn { background: rgba(245, 158, 11, .18); color: #92400e; border-color: rgba(245, 158, 11, .35); }
246
- .pill.info { background: rgba(59, 130, 246, .14); color: #1e3a8a; border-color: rgba(59, 130, 246, .35); }
520
+ .chip {
521
+ font-family: var(--mono);
522
+ font-size: 12px;
523
+ padding: 7px 10px;
524
+ border-radius: 999px;
525
+ border: 1px solid var(--line);
526
+ background: rgba(0, 0, 0, .22);
527
+ color: var(--faint);
528
+ }
529
+
530
+ .pill {
531
+ font-family: var(--mono);
532
+ font-size: 11px;
533
+ padding: 4px 8px;
534
+ border-radius: 999px;
535
+ border: 1px solid var(--line);
536
+ background: var(--paper2);
537
+ color: var(--muted);
538
+ text-transform: uppercase;
539
+ letter-spacing: .08em;
540
+ }
541
+
542
+ .pill.ok {
543
+ background: rgba(16, 185, 129, .12);
544
+ color: #065f46;
545
+ border-color: rgba(16, 185, 129, .28);
546
+ }
547
+
548
+ .pill.warn {
549
+ background: rgba(245, 158, 11, .18);
550
+ color: #92400e;
551
+ border-color: rgba(245, 158, 11, .35);
552
+ }
553
+
554
+ .pill.info {
555
+ background: rgba(59, 130, 246, .14);
556
+ color: #1e3a8a;
557
+ border-color: rgba(59, 130, 246, .35);
558
+ }
247
559
 
248
560
  .centerBody {
249
561
  padding: 16px 20px 20px;
@@ -254,22 +566,55 @@ body {
254
566
  gap: 18px;
255
567
  }
256
568
 
257
- .promptShell { display: flex; justify-content: center; }
569
+ .promptShell {
570
+ display: flex;
571
+ justify-content: center;
572
+ }
573
+
258
574
  .promptBar {
259
575
  width: min(720px, 100%);
260
576
  background: var(--paper);
261
- border: 1px solid var(--line);
262
- border-radius: 16px;
263
- padding: 14px;
577
+ backdrop-filter: blur(16px);
578
+ -webkit-backdrop-filter: blur(16px);
579
+ border: 1px solid var(--glass-border);
580
+ border-radius: var(--radius);
581
+ padding: 16px;
264
582
  display: flex;
265
583
  flex-direction: column;
584
+ gap: 12px;
585
+ box-shadow: var(--shadow);
586
+ transition: var(--transition);
587
+ }
588
+
589
+ .promptBar:focus-within {
590
+ box-shadow: var(--shadow-hover);
591
+ border-color: var(--line2);
592
+ }
593
+
594
+ .promptMeta {
595
+ display: flex;
596
+ justify-content: space-between;
597
+ align-items: center;
598
+ }
599
+
600
+ .promptTitle {
601
+ font-size: 11px;
602
+ text-transform: uppercase;
603
+ letter-spacing: .2em;
604
+ color: var(--faint);
605
+ }
606
+
607
+ .promptActions {
608
+ display: flex;
266
609
  gap: 10px;
267
- box-shadow: var(--shadow2);
610
+ flex-wrap: wrap;
611
+ }
612
+
613
+ .promptToggles {
614
+ display: flex;
615
+ gap: 14px;
616
+ flex-wrap: wrap;
268
617
  }
269
- .promptMeta { display: flex; justify-content: space-between; align-items: center; }
270
- .promptTitle { font-size: 11px; text-transform: uppercase; letter-spacing: .2em; color: var(--faint); }
271
- .promptActions { display: flex; gap: 10px; flex-wrap: wrap; }
272
- .promptToggles { display: flex; gap: 14px; flex-wrap: wrap; }
273
618
 
274
619
  .utilityGrid {
275
620
  display: grid;
@@ -279,10 +624,17 @@ body {
279
624
 
280
625
  .utilityCard {
281
626
  background: var(--paper);
282
- border: 1px solid var(--line);
283
- border-radius: 16px;
284
- padding: 14px;
627
+ backdrop-filter: blur(12px);
628
+ -webkit-backdrop-filter: blur(12px);
629
+ border: 1px solid var(--glass-border);
630
+ border-radius: var(--radius);
631
+ padding: 16px;
285
632
  box-shadow: var(--shadow2);
633
+ transition: var(--transition);
634
+ }
635
+
636
+ .utilityCard:hover {
637
+ box-shadow: var(--shadow-hover);
286
638
  }
287
639
 
288
640
  .utilityHead {
@@ -301,12 +653,32 @@ body {
301
653
  margin-bottom: 12px;
302
654
  }
303
655
 
304
- .reportsTitle { font-size: 18px; font-weight: 700; }
305
- .reportsSubtitle { font-size: 12px; color: var(--faint); margin-top: 4px; }
306
- .reportsActions { display: flex; gap: 10px; }
656
+ .reportsTitle {
657
+ font-family: var(--display);
658
+ font-size: 24px;
659
+ font-weight: 600;
660
+ letter-spacing: -0.01em;
661
+ color: var(--text);
662
+ }
307
663
 
308
- .reportsTools { margin-bottom: 12px; }
309
- .reportsTools input { width: 100%; }
664
+ .reportsSubtitle {
665
+ font-size: 12px;
666
+ color: var(--faint);
667
+ margin-top: 4px;
668
+ }
669
+
670
+ .reportsActions {
671
+ display: flex;
672
+ gap: 10px;
673
+ }
674
+
675
+ .reportsTools {
676
+ margin-bottom: 12px;
677
+ }
678
+
679
+ .reportsTools input {
680
+ width: 100%;
681
+ }
310
682
 
311
683
  .reportsGrid {
312
684
  display: grid;
@@ -314,13 +686,67 @@ body {
314
686
  }
315
687
 
316
688
  .reportCard {
317
- border: 1px solid var(--line);
318
- border-radius: 16px;
319
- padding: 14px;
689
+ border: 1px solid var(--glass-border);
690
+ border-radius: var(--radius);
691
+ padding: 16px;
320
692
  background: var(--paper);
693
+ backdrop-filter: blur(12px);
694
+ -webkit-backdrop-filter: blur(12px);
321
695
  box-shadow: var(--shadow2);
322
696
  display: grid;
323
697
  gap: 12px;
698
+ transition: var(--transition);
699
+ }
700
+
701
+ .reportCard:hover {
702
+ box-shadow: var(--shadow-hover);
703
+ border-color: var(--line2);
704
+ transform: translateY(-2px);
705
+ }
706
+
707
+
708
+ .cardsMini {
709
+ display: flex;
710
+ gap: 12px;
711
+ flex-wrap: wrap;
712
+ }
713
+
714
+ .miniCard {
715
+ background: var(--paper);
716
+ border: 1px solid var(--glass-border);
717
+ border-radius: calc(var(--radius) * 1.5);
718
+ padding: 10px 16px 10px 10px;
719
+ display: flex;
720
+ align-items: center;
721
+ gap: 12px;
722
+ font-family: var(--sans);
723
+ font-size: 13px;
724
+ font-weight: 600;
725
+ color: var(--text);
726
+ cursor: pointer;
727
+ transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
728
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04), inset 0 1px 0 rgba(255, 255, 255, 0.05);
729
+ }
730
+
731
+ .miniCard:hover {
732
+ background: linear-gradient(180deg, var(--paper), var(--paper2));
733
+ border-color: rgba(45, 212, 191, 0.4);
734
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(45, 212, 191, 0.1);
735
+ transform: translateY(-2px);
736
+ }
737
+
738
+ .miniIcon {
739
+ width: 30px;
740
+ height: 30px;
741
+ border-radius: 50%;
742
+ background: rgba(45, 212, 191, 0.15);
743
+ color: var(--primary);
744
+ display: flex;
745
+ align-items: center;
746
+ justify-content: center;
747
+ font-weight: 700;
748
+ font-size: 14px;
749
+ font-family: var(--display);
324
750
  }
325
751
 
326
752
  .reportHead {
@@ -330,14 +756,32 @@ body {
330
756
  cursor: pointer;
331
757
  }
332
758
 
333
- .reportName { font-weight: 700; }
334
- .reportMeta { font-size: 12px; color: var(--faint); margin-top: 4px; display: flex; align-items: center; gap: 10px; }
335
- .reportMetaText { display: inline-block; }
336
- .reportHeadActions { display: flex; gap: 8px; align-items: center; }
759
+ .reportName {
760
+ font-weight: 700;
761
+ }
762
+
763
+ .reportMeta {
764
+ font-size: 12px;
765
+ color: var(--faint);
766
+ margin-top: 4px;
767
+ display: flex;
768
+ align-items: center;
769
+ gap: 10px;
770
+ }
771
+
772
+ .reportMetaText {
773
+ display: inline-block;
774
+ }
775
+
776
+ .reportHeadActions {
777
+ display: flex;
778
+ gap: 8px;
779
+ align-items: center;
780
+ }
337
781
 
338
782
  .iconBtn {
339
783
  border: 1px solid var(--line);
340
- background: rgba(0,0,0,.25);
784
+ background: rgba(0, 0, 0, .25);
341
785
  color: var(--muted);
342
786
  border-radius: 10px;
343
787
  padding: 2px 8px;
@@ -345,39 +789,119 @@ body {
345
789
  font-size: 12px;
346
790
  }
347
791
 
348
- .reportBody { display: none; gap: 10px; }
349
- .reportCard.expanded .reportBody { display: grid; }
792
+ .reportBody {
793
+ display: none;
794
+ gap: 10px;
795
+ }
796
+
797
+ .reportCard.expanded .reportBody {
798
+ display: grid;
799
+ }
350
800
 
351
801
  .reportPreview {
352
802
  border: 1px solid var(--line);
353
803
  border-radius: 12px;
354
804
  padding: 12px;
355
- background: rgba(0,0,0,.18);
805
+ background: rgba(0, 0, 0, .18);
356
806
  min-height: 120px;
357
807
  outline: none;
358
808
  white-space: pre-wrap;
359
809
  }
360
810
 
361
- .reportPreview strong { font-weight: 700; }
362
- .reportPreview em { font-style: italic; }
811
+ .reportPreview strong {
812
+ font-weight: 700;
813
+ }
814
+
815
+ .reportPreview em {
816
+ font-style: italic;
817
+ }
363
818
 
364
- .centerHead { display: flex; justify-content: space-between; align-items: flex-end; gap: 18px; margin-bottom: 14px; }
365
- .statusLine { display:flex; align-items:center; justify-content:flex-end; gap: 12px; }
819
+ .centerHead {
820
+ display: flex;
821
+ justify-content: space-between;
822
+ align-items: flex-end;
823
+ gap: 18px;
824
+ margin-bottom: 14px;
825
+ }
366
826
 
367
- h1 { margin: 0; font-size: 22px; letter-spacing: -.02em; }
368
- .subtitle { margin-top: 6px; color: var(--muted); font-size: 13px; line-height: 1.4; max-width: 860px; }
827
+ .statusLine {
828
+ display: flex;
829
+ align-items: center;
830
+ justify-content: flex-end;
831
+ gap: 12px;
832
+ }
833
+
834
+ h1 {
835
+ margin: 0;
836
+ font-family: var(--display);
837
+ font-size: 26px;
838
+ font-weight: 600;
839
+ letter-spacing: -.02em;
840
+ color: var(--text);
841
+ }
842
+
843
+ .subtitle {
844
+ margin-top: 6px;
845
+ color: var(--muted);
846
+ font-size: 13px;
847
+ line-height: 1.4;
848
+ max-width: 860px;
849
+ }
850
+
851
+ .midGrid {
852
+ display: grid;
853
+ grid-template-columns: 1fr 1fr;
854
+ gap: 14px;
855
+ }
856
+
857
+ .midSpan {
858
+ grid-column: 1 / -1;
859
+ }
369
860
 
370
- .midGrid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
371
- .midSpan { grid-column: 1 / -1; }
372
861
  @media (max-width: 980px) {
373
- .midGrid { grid-template-columns: 1fr; }
374
- .midSpan { grid-column: auto; }
862
+ .midGrid {
863
+ grid-template-columns: 1fr;
864
+ }
865
+
866
+ .midSpan {
867
+ grid-column: auto;
868
+ }
375
869
  }
376
870
 
377
- .panel { border: 1px solid var(--line); background: var(--paper); border-radius: var(--radius); box-shadow: 0 1px 0 rgba(16,24,40,.04); }
378
- .panelHead { display: flex; align-items: center; justify-content: space-between; padding: 12px 12px; border-bottom: 1px solid var(--line); background: linear-gradient(180deg, var(--paper2), var(--paper)); }
379
- .panelHead b { font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
380
- .panelBody { padding: 12px; }
871
+ .panel {
872
+ border: 1px solid var(--glass-border);
873
+ background: var(--paper);
874
+ backdrop-filter: blur(12px);
875
+ -webkit-backdrop-filter: blur(12px);
876
+ border-radius: var(--radius);
877
+ box-shadow: var(--shadow2);
878
+ overflow: hidden;
879
+ transition: var(--transition);
880
+ }
881
+
882
+ .panel:hover {
883
+ box-shadow: var(--shadow-hover);
884
+ }
885
+
886
+ .panelHead {
887
+ display: flex;
888
+ align-items: center;
889
+ justify-content: space-between;
890
+ padding: 12px 12px;
891
+ border-bottom: 1px solid var(--line);
892
+ background: linear-gradient(180deg, var(--paper2), var(--paper));
893
+ }
894
+
895
+ .panelHead b {
896
+ font-size: 12px;
897
+ letter-spacing: .08em;
898
+ text-transform: uppercase;
899
+ color: var(--muted);
900
+ }
901
+
902
+ .panelBody {
903
+ padding: 12px;
904
+ }
381
905
 
382
906
  /* Fixed-height panel bodies (Today/Reports) to keep layout stable + show vertical scroll */
383
907
  .panelBody.panelScroll {
@@ -387,90 +911,273 @@ h1 { margin: 0; font-size: 22px; letter-spacing: -.02em; }
387
911
  }
388
912
 
389
913
  /* DEV DRAWER */
390
- .devDrawer { margin-top: 14px; border: 1px dashed var(--line2); border-radius: var(--radius); background: rgba(255,250,242,.42); }
391
- [data-theme="dark"] .devDrawer { background: rgba(0,0,0,.18); }
392
- .devDrawer > summary {
914
+ .devDrawer {
915
+ margin-top: 14px;
916
+ border: 1px dashed var(--line2);
917
+ border-radius: var(--radius);
918
+ background: rgba(255, 250, 242, .42);
919
+ }
920
+
921
+ [data-theme="dark"] .devDrawer {
922
+ background: rgba(0, 0, 0, .18);
923
+ }
924
+
925
+ .devDrawer>summary {
393
926
  cursor: pointer;
394
927
  list-style: none;
395
928
  padding: 12px 14px;
396
929
  font-weight: 900;
397
930
  color: var(--muted);
398
931
  }
399
- .devDrawer > summary::-webkit-details-marker { display:none; }
400
- .devBody { padding: 0 14px 14px; }
401
- .devGrid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 14px; }
402
- @media (max-width: 1100px) { .devGrid { grid-template-columns: 1fr; } }
932
+
933
+ .devDrawer>summary::-webkit-details-marker {
934
+ display: none;
935
+ }
936
+
937
+ .devBody {
938
+ padding: 0 14px 14px;
939
+ }
940
+
941
+ .devGrid {
942
+ display: grid;
943
+ grid-template-columns: 1fr 1fr 1fr;
944
+ gap: 14px;
945
+ }
946
+
947
+ @media (max-width: 1100px) {
948
+ .devGrid {
949
+ grid-template-columns: 1fr;
950
+ }
951
+ }
403
952
 
404
953
  /* FORMS */
405
- label { display: block; font-size: 12px; color: var(--muted); margin-bottom: 6px; }
406
- input { width: 100%; padding: 11px 12px; border-radius: 12px; border: 1px solid var(--line); background: rgba(0,0,0,.22); color: var(--text); outline: none; }
407
- [data-theme="dark"] input { background: rgba(0,0,0,.22); }
408
- input:focus { box-shadow: var(--ring); border-color: rgba(45,212,191,.35); }
954
+ label {
955
+ display: block;
956
+ font-size: 12px;
957
+ color: var(--muted);
958
+ margin-bottom: 6px;
959
+ }
960
+
961
+ input {
962
+ width: 100%;
963
+ padding: 11px 14px;
964
+ border-radius: var(--radius2);
965
+ border: 1px solid var(--line);
966
+ background: rgba(255, 255, 255, 0.4);
967
+ backdrop-filter: blur(4px);
968
+ color: var(--text);
969
+ outline: none;
970
+ transition: var(--transition);
971
+ font-family: var(--sans);
972
+ }
973
+
974
+ [data-theme="dark"] input {
975
+ background: rgba(0, 0, 0, .22);
976
+ }
977
+
978
+ input:focus {
979
+ box-shadow: var(--ring);
980
+ border-color: rgba(45, 212, 191, .35);
981
+ }
982
+
409
983
  textarea {
410
984
  width: 100%;
411
985
  padding: 10px 12px;
412
986
  border-radius: 12px;
413
987
  border: 1px solid var(--line);
414
- background: rgba(0,0,0,.22);
988
+ background: rgba(0, 0, 0, .22);
415
989
  color: var(--text);
416
990
  outline: none;
417
991
  resize: vertical;
418
992
  }
419
- [data-theme="dark"] textarea { background: rgba(0,0,0,.22); }
420
- textarea:focus { box-shadow: var(--ring); border-color: rgba(45,212,191,.35); }
421
993
 
422
- .row { display: grid; grid-template-columns: 1fr auto; gap: 10px; align-items: center; }
423
- .stack { display: flex; gap: 10px; flex-wrap: wrap; }
424
- .help { font-size: 12px; color: var(--faint); line-height: 1.4; }
425
- .small { font-size: 12px; color: var(--faint); }
994
+ [data-theme="dark"] textarea {
995
+ background: rgba(0, 0, 0, .22);
996
+ }
997
+
998
+ textarea:focus {
999
+ box-shadow: var(--ring);
1000
+ border-color: rgba(45, 212, 191, .35);
1001
+ }
1002
+
1003
+ .row {
1004
+ display: grid;
1005
+ grid-template-columns: 1fr auto;
1006
+ gap: 10px;
1007
+ align-items: center;
1008
+ }
1009
+
1010
+ .stack {
1011
+ display: flex;
1012
+ gap: 10px;
1013
+ flex-wrap: wrap;
1014
+ }
1015
+
1016
+ .help {
1017
+ font-size: 12px;
1018
+ color: var(--faint);
1019
+ line-height: 1.4;
1020
+ }
1021
+
1022
+ .small {
1023
+ font-size: 12px;
1024
+ color: var(--faint);
1025
+ }
426
1026
 
427
1027
  /* BUTTONS */
428
1028
  .btn {
429
1029
  border: 1px solid var(--line);
430
- border-radius: 12px;
431
- background: rgba(0,0,0,.20);
432
- padding: 10px 12px;
1030
+ border-radius: var(--radius2);
1031
+ background: rgba(255, 255, 255, 0.4);
1032
+ backdrop-filter: blur(4px);
1033
+ padding: 10px 14px;
433
1034
  cursor: pointer;
434
- font-weight: 700;
435
- color: var(--muted);
1035
+ font-weight: 600;
1036
+ color: var(--text);
1037
+ transition: var(--transition);
436
1038
  }
437
1039
 
438
- .btn:hover { border-color: var(--line2); box-shadow: var(--shadow2); }
439
- .btn.small { padding: 7px 10px; border-radius: 10px; font-size: 12px; }
440
- .btn.primary { background: rgba(45,212,191,.18); border-color: rgba(45,212,191,.45); color: rgba(45,212,191,.95); }
441
- .sideBtn { width: 100%; text-align: left; margin-top: 8px; }
1040
+ [data-theme="dark"] .btn {
1041
+ background: rgba(0, 0, 0, 0.2);
1042
+ }
1043
+
1044
+ .btn:hover {
1045
+ background: var(--paper2);
1046
+ border-color: var(--line2);
1047
+ box-shadow: var(--shadow2);
1048
+ transform: translateY(-1px);
1049
+ }
1050
+
1051
+ .btn.small {
1052
+ padding: 7px 10px;
1053
+ border-radius: 10px;
1054
+ font-size: 12px;
1055
+ }
1056
+
1057
+ .btn.primary {
1058
+ background: rgba(45, 212, 191, .18);
1059
+ border-color: rgba(45, 212, 191, .45);
1060
+ color: rgba(45, 212, 191, .95);
1061
+ }
1062
+
1063
+ .sideBtn {
1064
+ width: 100%;
1065
+ text-align: left;
1066
+ margin-top: 8px;
1067
+ }
442
1068
 
443
1069
  .k {
444
1070
  display: inline-block;
445
1071
  padding: 2px 6px;
446
1072
  border: 1px solid var(--line);
447
1073
  border-radius: 8px;
448
- background: rgba(255,250,242,.75);
1074
+ background: rgba(255, 250, 242, .75);
449
1075
  font-family: var(--mono);
450
1076
  font-size: 12px;
451
1077
  color: var(--muted);
452
1078
  }
453
- [data-theme="dark"] .k { background: rgba(0,0,0,.18); }
1079
+
1080
+ [data-theme="dark"] .k {
1081
+ background: rgba(0, 0, 0, .18);
1082
+ }
454
1083
 
455
1084
  /* REPORT/TODAY ITEMS + PREVIEW */
456
- .log { padding: 12px; border: 1px solid var(--line); border-radius: var(--radius); background: rgba(255,250,242,.65); font-family: var(--mono); font-size: 12px; color: var(--muted); white-space: pre-wrap; word-break: break-word; max-height: 360px; overflow: auto; }
457
- [data-theme="dark"] .log { background: rgba(0,0,0,.18); }
1085
+ .log {
1086
+ padding: 12px;
1087
+ border: 1px solid var(--line);
1088
+ border-radius: var(--radius);
1089
+ background: rgba(255, 250, 242, .65);
1090
+ font-family: var(--mono);
1091
+ font-size: 12px;
1092
+ color: var(--muted);
1093
+ white-space: pre-wrap;
1094
+ word-break: break-word;
1095
+ max-height: 360px;
1096
+ overflow: auto;
1097
+ }
458
1098
 
459
- .rep { width: 100%; text-align: left; border: 1px solid var(--line); border-radius: 12px; background: var(--paper2); padding: 10px 12px; cursor: pointer; font-family: var(--mono); font-size: 12px; color: var(--muted); }
460
- .rep:hover { border-color: var(--line2); box-shadow: 0 10px 22px rgba(16,24,40,.10); }
461
- .repActive { border-color: rgba(59,130,246,.55); box-shadow: 0 0 0 4px rgba(59,130,246,.12); }
1099
+ [data-theme="dark"] .log {
1100
+ background: rgba(0, 0, 0, .18);
1101
+ }
1102
+
1103
+ .rep {
1104
+ width: 100%;
1105
+ text-align: left;
1106
+ border: 1px solid var(--line);
1107
+ border-radius: 12px;
1108
+ background: var(--paper2);
1109
+ padding: 10px 12px;
1110
+ cursor: pointer;
1111
+ font-family: var(--mono);
1112
+ font-size: 12px;
1113
+ color: var(--muted);
1114
+ }
1115
+
1116
+ .rep:hover {
1117
+ border-color: var(--line2);
1118
+ box-shadow: 0 10px 22px rgba(16, 24, 40, .10);
1119
+ }
1120
+
1121
+ .repActive {
1122
+ border-color: rgba(59, 130, 246, .55);
1123
+ box-shadow: 0 0 0 4px rgba(59, 130, 246, .12);
1124
+ }
462
1125
 
463
1126
  /* Markdown */
464
- .md-h1{ font-size: 20px; margin: 10px 0 6px; }
465
- .md-h2{ font-size: 16px; margin: 10px 0 6px; }
466
- .md-h3{ font-size: 14px; margin: 10px 0 6px; }
467
- .md-p{ margin: 6px 0; color: var(--muted); line-height: 1.5; }
468
- .md-ul{ margin: 6px 0 6px 18px; color: var(--muted); }
469
- .md-inline{ font-family: var(--mono); font-size: 12px; padding: 2px 6px; border: 1px solid var(--line); border-radius: 8px; background: rgba(255,250,242,.60); }
470
- [data-theme="dark"] .md-inline{ background: rgba(0,0,0,.18); }
471
- .md-code{ background: rgba(0,0,0,.05); border: 1px solid var(--line); border-radius: var(--radius); padding: 12px; overflow:auto; }
472
- [data-theme="dark"] .md-code{ background: rgba(0,0,0,.22); }
473
- .md-sp{ height: 10px; }
1127
+ .md-h1 {
1128
+ font-size: 20px;
1129
+ margin: 10px 0 6px;
1130
+ }
1131
+
1132
+ .md-h2 {
1133
+ font-size: 16px;
1134
+ margin: 10px 0 6px;
1135
+ }
1136
+
1137
+ .md-h3 {
1138
+ font-size: 14px;
1139
+ margin: 10px 0 6px;
1140
+ }
1141
+
1142
+ .md-p {
1143
+ margin: 6px 0;
1144
+ color: var(--muted);
1145
+ line-height: 1.5;
1146
+ }
1147
+
1148
+ .md-ul {
1149
+ margin: 6px 0 6px 18px;
1150
+ color: var(--muted);
1151
+ }
1152
+
1153
+ .md-inline {
1154
+ font-family: var(--mono);
1155
+ font-size: 12px;
1156
+ padding: 2px 6px;
1157
+ border: 1px solid var(--line);
1158
+ border-radius: 8px;
1159
+ background: rgba(255, 250, 242, .60);
1160
+ }
1161
+
1162
+ [data-theme="dark"] .md-inline {
1163
+ background: rgba(0, 0, 0, .18);
1164
+ }
1165
+
1166
+ .md-code {
1167
+ background: rgba(0, 0, 0, .05);
1168
+ border: 1px solid var(--line);
1169
+ border-radius: var(--radius);
1170
+ padding: 12px;
1171
+ overflow: auto;
1172
+ }
1173
+
1174
+ [data-theme="dark"] .md-code {
1175
+ background: rgba(0, 0, 0, .22);
1176
+ }
1177
+
1178
+ .md-sp {
1179
+ height: 10px;
1180
+ }
474
1181
 
475
1182
  /* RIGHT: CHAT (hidden for Perplexity layout) */
476
1183
  .chatPane {
@@ -492,10 +1199,16 @@ textarea:focus { box-shadow: var(--ring); border-color: rgba(45,212,191,.35); }
492
1199
  border-radius: 18px;
493
1200
  padding: 10px 12px;
494
1201
  border: 1px solid var(--line);
495
- box-shadow: 0 1px 0 rgba(16,24,40,.03);
1202
+ box-shadow: 0 1px 0 rgba(16, 24, 40, .03);
1203
+ }
1204
+
1205
+ .bubble .bubbleMeta {
1206
+ font-size: 11px;
1207
+ font-weight: 900;
1208
+ color: var(--faint);
1209
+ margin-bottom: 6px;
496
1210
  }
497
1211
 
498
- .bubble .bubbleMeta { font-size: 11px; font-weight: 900; color: var(--faint); margin-bottom: 6px; }
499
1212
  .bubble .bubbleBody {
500
1213
  font-size: 13px;
501
1214
  line-height: 1.45;
@@ -505,7 +1218,8 @@ textarea:focus { box-shadow: var(--ring); border-color: rgba(45,212,191,.35); }
505
1218
  }
506
1219
 
507
1220
  /* Prevent horizontal scroll in chat bubbles when showing JSON/markdown/code */
508
- .bubble pre, .bubble code {
1221
+ .bubble pre,
1222
+ .bubble code {
509
1223
  white-space: pre-wrap;
510
1224
  word-break: break-word;
511
1225
  overflow-x: hidden;
@@ -513,22 +1227,91 @@ textarea:focus { box-shadow: var(--ring); border-color: rgba(45,212,191,.35); }
513
1227
 
514
1228
  .bubble.user {
515
1229
  align-self: flex-end;
516
- background: rgba(37,99,235,.10);
517
- border-color: rgba(37,99,235,.22);
1230
+ background: rgba(37, 99, 235, .10);
1231
+ border-color: rgba(37, 99, 235, .22);
518
1232
  }
519
1233
 
520
1234
  .bubble.assistant {
521
1235
  align-self: flex-start;
522
- background: rgba(255,250,242,.82);
1236
+ background: rgba(255, 250, 242, .82);
523
1237
  }
524
- [data-theme="dark"] .bubble.assistant { background: rgba(0,0,0,.18); }
525
1238
 
526
- .chatComposer { display: none; }
1239
+ [data-theme="dark"] .bubble.assistant {
1240
+ background: rgba(0, 0, 0, .18);
1241
+ }
527
1242
 
528
- .composerActions { display: flex; gap: 10px; margin-top: 10px; flex-wrap: wrap; }
529
- .composerToggles { margin-top: 10px; display: grid; gap: 6px; }
530
- .toggleRow { display:flex; align-items:center; gap:10px; user-select:none; font-size: 12px; color: var(--muted); }
531
- .statusFooter { margin-top: 10px; display:flex; justify-content:flex-end; }
1243
+ .chatComposer {
1244
+ display: none;
1245
+ }
532
1246
 
1247
+ .composerActions {
1248
+ display: flex;
1249
+ gap: 10px;
1250
+ margin-top: 10px;
1251
+ flex-wrap: wrap;
1252
+ }
1253
+
1254
+ .composerToggles {
1255
+ margin-top: 10px;
1256
+ display: grid;
1257
+ gap: 6px;
1258
+ }
1259
+
1260
+ .toggleRow {
1261
+ display: flex;
1262
+ align-items: center;
1263
+ gap: 10px;
1264
+ user-select: none;
1265
+ font-size: 12px;
1266
+ color: var(--muted);
1267
+ }
1268
+
1269
+ .statusFooter {
1270
+ margin-top: 10px;
1271
+ display: flex;
1272
+ justify-content: flex-end;
1273
+ }
1274
+
1275
+ /* Typing Indicator Animation */
1276
+ .typing-indicator {
1277
+ display: flex;
1278
+ align-items: center;
1279
+ gap: 4px;
1280
+ padding: 4px 2px;
1281
+ }
1282
+
1283
+ .typing-indicator span {
1284
+ display: block;
1285
+ width: 6px;
1286
+ height: 6px;
1287
+ border-radius: 50%;
1288
+ background-color: var(--faint);
1289
+ animation: typing 1.4s infinite ease-in-out both;
1290
+ }
1291
+
1292
+ .typing-indicator span:nth-child(1) {
1293
+ animation-delay: -0.32s;
1294
+ }
1295
+
1296
+ .typing-indicator span:nth-child(2) {
1297
+ animation-delay: -0.16s;
1298
+ }
1299
+
1300
+ @keyframes typing {
1301
+
1302
+ 0%,
1303
+ 80%,
1304
+ 100% {
1305
+ transform: scale(0);
1306
+ opacity: 0.5;
1307
+ }
1308
+
1309
+ 40% {
1310
+ transform: scale(1);
1311
+ opacity: 1;
1312
+ }
1313
+ }
533
1314
 
534
- * { border-radius: 0 !important; }
1315
+ * {
1316
+ border-radius: 0 !important;
1317
+ }