@cccarv82/freya 2.3.13 → 2.4.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.
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 +860 -182
  6. package/cli/web-ui.js +547 -175
  7. package/cli/web.js +690 -536
  8. package/package.json +6 -3
  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); }
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
+ }
96
+
97
+ [data-theme="dark"] *::-webkit-scrollbar-thumb:hover {
98
+ background: rgba(229, 231, 235, .26);
99
+ }
62
100
 
63
101
 
64
- html, body {
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,86 @@ 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
+ .topActions {
410
+ display: flex;
411
+ align-items: center;
412
+ gap: 10px;
413
+ }
414
+
415
+ .chip {
416
+ font-family: var(--mono);
417
+ font-size: 12px;
418
+ padding: 7px 10px;
419
+ border-radius: 999px;
420
+ border: 1px solid var(--line);
421
+ background: rgba(0, 0, 0, .22);
422
+ color: var(--faint);
423
+ }
424
+
425
+ .pill {
426
+ font-family: var(--mono);
427
+ font-size: 11px;
428
+ padding: 4px 8px;
429
+ border-radius: 999px;
430
+ border: 1px solid var(--line);
431
+ background: var(--paper2);
432
+ color: var(--muted);
433
+ text-transform: uppercase;
434
+ letter-spacing: .08em;
435
+ }
436
+
437
+ .pill.ok {
438
+ background: rgba(16, 185, 129, .12);
439
+ color: #065f46;
440
+ border-color: rgba(16, 185, 129, .28);
441
+ }
242
442
 
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); }
443
+ .pill.warn {
444
+ background: rgba(245, 158, 11, .18);
445
+ color: #92400e;
446
+ border-color: rgba(245, 158, 11, .35);
447
+ }
448
+
449
+ .pill.info {
450
+ background: rgba(59, 130, 246, .14);
451
+ color: #1e3a8a;
452
+ border-color: rgba(59, 130, 246, .35);
453
+ }
247
454
 
248
455
  .centerBody {
249
456
  padding: 16px 20px 20px;
@@ -254,22 +461,55 @@ body {
254
461
  gap: 18px;
255
462
  }
256
463
 
257
- .promptShell { display: flex; justify-content: center; }
464
+ .promptShell {
465
+ display: flex;
466
+ justify-content: center;
467
+ }
468
+
258
469
  .promptBar {
259
470
  width: min(720px, 100%);
260
471
  background: var(--paper);
261
- border: 1px solid var(--line);
262
- border-radius: 16px;
263
- padding: 14px;
472
+ backdrop-filter: blur(16px);
473
+ -webkit-backdrop-filter: blur(16px);
474
+ border: 1px solid var(--glass-border);
475
+ border-radius: var(--radius);
476
+ padding: 16px;
264
477
  display: flex;
265
478
  flex-direction: column;
479
+ gap: 12px;
480
+ box-shadow: var(--shadow);
481
+ transition: var(--transition);
482
+ }
483
+
484
+ .promptBar:focus-within {
485
+ box-shadow: var(--shadow-hover);
486
+ border-color: var(--line2);
487
+ }
488
+
489
+ .promptMeta {
490
+ display: flex;
491
+ justify-content: space-between;
492
+ align-items: center;
493
+ }
494
+
495
+ .promptTitle {
496
+ font-size: 11px;
497
+ text-transform: uppercase;
498
+ letter-spacing: .2em;
499
+ color: var(--faint);
500
+ }
501
+
502
+ .promptActions {
503
+ display: flex;
266
504
  gap: 10px;
267
- box-shadow: var(--shadow2);
505
+ flex-wrap: wrap;
506
+ }
507
+
508
+ .promptToggles {
509
+ display: flex;
510
+ gap: 14px;
511
+ flex-wrap: wrap;
268
512
  }
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
513
 
274
514
  .utilityGrid {
275
515
  display: grid;
@@ -279,10 +519,17 @@ body {
279
519
 
280
520
  .utilityCard {
281
521
  background: var(--paper);
282
- border: 1px solid var(--line);
283
- border-radius: 16px;
284
- padding: 14px;
522
+ backdrop-filter: blur(12px);
523
+ -webkit-backdrop-filter: blur(12px);
524
+ border: 1px solid var(--glass-border);
525
+ border-radius: var(--radius);
526
+ padding: 16px;
285
527
  box-shadow: var(--shadow2);
528
+ transition: var(--transition);
529
+ }
530
+
531
+ .utilityCard:hover {
532
+ box-shadow: var(--shadow-hover);
286
533
  }
287
534
 
288
535
  .utilityHead {
@@ -301,12 +548,32 @@ body {
301
548
  margin-bottom: 12px;
302
549
  }
303
550
 
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; }
551
+ .reportsTitle {
552
+ font-family: var(--display);
553
+ font-size: 24px;
554
+ font-weight: 600;
555
+ letter-spacing: -0.01em;
556
+ color: var(--text);
557
+ }
307
558
 
308
- .reportsTools { margin-bottom: 12px; }
309
- .reportsTools input { width: 100%; }
559
+ .reportsSubtitle {
560
+ font-size: 12px;
561
+ color: var(--faint);
562
+ margin-top: 4px;
563
+ }
564
+
565
+ .reportsActions {
566
+ display: flex;
567
+ gap: 10px;
568
+ }
569
+
570
+ .reportsTools {
571
+ margin-bottom: 12px;
572
+ }
573
+
574
+ .reportsTools input {
575
+ width: 100%;
576
+ }
310
577
 
311
578
  .reportsGrid {
312
579
  display: grid;
@@ -314,13 +581,67 @@ body {
314
581
  }
315
582
 
316
583
  .reportCard {
317
- border: 1px solid var(--line);
318
- border-radius: 16px;
319
- padding: 14px;
584
+ border: 1px solid var(--glass-border);
585
+ border-radius: var(--radius);
586
+ padding: 16px;
320
587
  background: var(--paper);
588
+ backdrop-filter: blur(12px);
589
+ -webkit-backdrop-filter: blur(12px);
321
590
  box-shadow: var(--shadow2);
322
591
  display: grid;
323
592
  gap: 12px;
593
+ transition: var(--transition);
594
+ }
595
+
596
+ .reportCard:hover {
597
+ box-shadow: var(--shadow-hover);
598
+ border-color: var(--line2);
599
+ transform: translateY(-2px);
600
+ }
601
+
602
+
603
+ .cardsMini {
604
+ display: flex;
605
+ gap: 12px;
606
+ flex-wrap: wrap;
607
+ }
608
+
609
+ .miniCard {
610
+ background: var(--paper);
611
+ border: 1px solid var(--glass-border);
612
+ border-radius: calc(var(--radius) * 1.5);
613
+ padding: 10px 16px 10px 10px;
614
+ display: flex;
615
+ align-items: center;
616
+ gap: 12px;
617
+ font-family: var(--sans);
618
+ font-size: 13px;
619
+ font-weight: 600;
620
+ color: var(--text);
621
+ cursor: pointer;
622
+ transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
623
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04), inset 0 1px 0 rgba(255, 255, 255, 0.05);
624
+ }
625
+
626
+ .miniCard:hover {
627
+ background: linear-gradient(180deg, var(--paper), var(--paper2));
628
+ border-color: rgba(45, 212, 191, 0.4);
629
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(45, 212, 191, 0.1);
630
+ transform: translateY(-2px);
631
+ }
632
+
633
+ .miniIcon {
634
+ width: 30px;
635
+ height: 30px;
636
+ border-radius: 50%;
637
+ background: rgba(45, 212, 191, 0.15);
638
+ color: var(--primary);
639
+ display: flex;
640
+ align-items: center;
641
+ justify-content: center;
642
+ font-weight: 700;
643
+ font-size: 14px;
644
+ font-family: var(--display);
324
645
  }
325
646
 
326
647
  .reportHead {
@@ -330,14 +651,32 @@ body {
330
651
  cursor: pointer;
331
652
  }
332
653
 
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; }
654
+ .reportName {
655
+ font-weight: 700;
656
+ }
657
+
658
+ .reportMeta {
659
+ font-size: 12px;
660
+ color: var(--faint);
661
+ margin-top: 4px;
662
+ display: flex;
663
+ align-items: center;
664
+ gap: 10px;
665
+ }
666
+
667
+ .reportMetaText {
668
+ display: inline-block;
669
+ }
670
+
671
+ .reportHeadActions {
672
+ display: flex;
673
+ gap: 8px;
674
+ align-items: center;
675
+ }
337
676
 
338
677
  .iconBtn {
339
678
  border: 1px solid var(--line);
340
- background: rgba(0,0,0,.25);
679
+ background: rgba(0, 0, 0, .25);
341
680
  color: var(--muted);
342
681
  border-radius: 10px;
343
682
  padding: 2px 8px;
@@ -345,39 +684,119 @@ body {
345
684
  font-size: 12px;
346
685
  }
347
686
 
348
- .reportBody { display: none; gap: 10px; }
349
- .reportCard.expanded .reportBody { display: grid; }
687
+ .reportBody {
688
+ display: none;
689
+ gap: 10px;
690
+ }
691
+
692
+ .reportCard.expanded .reportBody {
693
+ display: grid;
694
+ }
350
695
 
351
696
  .reportPreview {
352
697
  border: 1px solid var(--line);
353
698
  border-radius: 12px;
354
699
  padding: 12px;
355
- background: rgba(0,0,0,.18);
700
+ background: rgba(0, 0, 0, .18);
356
701
  min-height: 120px;
357
702
  outline: none;
358
703
  white-space: pre-wrap;
359
704
  }
360
705
 
361
- .reportPreview strong { font-weight: 700; }
362
- .reportPreview em { font-style: italic; }
706
+ .reportPreview strong {
707
+ font-weight: 700;
708
+ }
709
+
710
+ .reportPreview em {
711
+ font-style: italic;
712
+ }
713
+
714
+ .centerHead {
715
+ display: flex;
716
+ justify-content: space-between;
717
+ align-items: flex-end;
718
+ gap: 18px;
719
+ margin-bottom: 14px;
720
+ }
721
+
722
+ .statusLine {
723
+ display: flex;
724
+ align-items: center;
725
+ justify-content: flex-end;
726
+ gap: 12px;
727
+ }
728
+
729
+ h1 {
730
+ margin: 0;
731
+ font-family: var(--display);
732
+ font-size: 26px;
733
+ font-weight: 600;
734
+ letter-spacing: -.02em;
735
+ color: var(--text);
736
+ }
737
+
738
+ .subtitle {
739
+ margin-top: 6px;
740
+ color: var(--muted);
741
+ font-size: 13px;
742
+ line-height: 1.4;
743
+ max-width: 860px;
744
+ }
363
745
 
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; }
746
+ .midGrid {
747
+ display: grid;
748
+ grid-template-columns: 1fr 1fr;
749
+ gap: 14px;
750
+ }
366
751
 
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; }
752
+ .midSpan {
753
+ grid-column: 1 / -1;
754
+ }
369
755
 
370
- .midGrid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
371
- .midSpan { grid-column: 1 / -1; }
372
756
  @media (max-width: 980px) {
373
- .midGrid { grid-template-columns: 1fr; }
374
- .midSpan { grid-column: auto; }
757
+ .midGrid {
758
+ grid-template-columns: 1fr;
759
+ }
760
+
761
+ .midSpan {
762
+ grid-column: auto;
763
+ }
764
+ }
765
+
766
+ .panel {
767
+ border: 1px solid var(--glass-border);
768
+ background: var(--paper);
769
+ backdrop-filter: blur(12px);
770
+ -webkit-backdrop-filter: blur(12px);
771
+ border-radius: var(--radius);
772
+ box-shadow: var(--shadow2);
773
+ overflow: hidden;
774
+ transition: var(--transition);
775
+ }
776
+
777
+ .panel:hover {
778
+ box-shadow: var(--shadow-hover);
779
+ }
780
+
781
+ .panelHead {
782
+ display: flex;
783
+ align-items: center;
784
+ justify-content: space-between;
785
+ padding: 12px 12px;
786
+ border-bottom: 1px solid var(--line);
787
+ background: linear-gradient(180deg, var(--paper2), var(--paper));
375
788
  }
376
789
 
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; }
790
+ .panelHead b {
791
+ font-size: 12px;
792
+ letter-spacing: .08em;
793
+ text-transform: uppercase;
794
+ color: var(--muted);
795
+ }
796
+
797
+ .panelBody {
798
+ padding: 12px;
799
+ }
381
800
 
382
801
  /* Fixed-height panel bodies (Today/Reports) to keep layout stable + show vertical scroll */
383
802
  .panelBody.panelScroll {
@@ -387,90 +806,273 @@ h1 { margin: 0; font-size: 22px; letter-spacing: -.02em; }
387
806
  }
388
807
 
389
808
  /* 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 {
809
+ .devDrawer {
810
+ margin-top: 14px;
811
+ border: 1px dashed var(--line2);
812
+ border-radius: var(--radius);
813
+ background: rgba(255, 250, 242, .42);
814
+ }
815
+
816
+ [data-theme="dark"] .devDrawer {
817
+ background: rgba(0, 0, 0, .18);
818
+ }
819
+
820
+ .devDrawer>summary {
393
821
  cursor: pointer;
394
822
  list-style: none;
395
823
  padding: 12px 14px;
396
824
  font-weight: 900;
397
825
  color: var(--muted);
398
826
  }
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; } }
827
+
828
+ .devDrawer>summary::-webkit-details-marker {
829
+ display: none;
830
+ }
831
+
832
+ .devBody {
833
+ padding: 0 14px 14px;
834
+ }
835
+
836
+ .devGrid {
837
+ display: grid;
838
+ grid-template-columns: 1fr 1fr 1fr;
839
+ gap: 14px;
840
+ }
841
+
842
+ @media (max-width: 1100px) {
843
+ .devGrid {
844
+ grid-template-columns: 1fr;
845
+ }
846
+ }
403
847
 
404
848
  /* 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); }
849
+ label {
850
+ display: block;
851
+ font-size: 12px;
852
+ color: var(--muted);
853
+ margin-bottom: 6px;
854
+ }
855
+
856
+ input {
857
+ width: 100%;
858
+ padding: 11px 14px;
859
+ border-radius: var(--radius2);
860
+ border: 1px solid var(--line);
861
+ background: rgba(255, 255, 255, 0.4);
862
+ backdrop-filter: blur(4px);
863
+ color: var(--text);
864
+ outline: none;
865
+ transition: var(--transition);
866
+ font-family: var(--sans);
867
+ }
868
+
869
+ [data-theme="dark"] input {
870
+ background: rgba(0, 0, 0, .22);
871
+ }
872
+
873
+ input:focus {
874
+ box-shadow: var(--ring);
875
+ border-color: rgba(45, 212, 191, .35);
876
+ }
877
+
409
878
  textarea {
410
879
  width: 100%;
411
880
  padding: 10px 12px;
412
881
  border-radius: 12px;
413
882
  border: 1px solid var(--line);
414
- background: rgba(0,0,0,.22);
883
+ background: rgba(0, 0, 0, .22);
415
884
  color: var(--text);
416
885
  outline: none;
417
886
  resize: vertical;
418
887
  }
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
888
 
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); }
889
+ [data-theme="dark"] textarea {
890
+ background: rgba(0, 0, 0, .22);
891
+ }
892
+
893
+ textarea:focus {
894
+ box-shadow: var(--ring);
895
+ border-color: rgba(45, 212, 191, .35);
896
+ }
897
+
898
+ .row {
899
+ display: grid;
900
+ grid-template-columns: 1fr auto;
901
+ gap: 10px;
902
+ align-items: center;
903
+ }
904
+
905
+ .stack {
906
+ display: flex;
907
+ gap: 10px;
908
+ flex-wrap: wrap;
909
+ }
910
+
911
+ .help {
912
+ font-size: 12px;
913
+ color: var(--faint);
914
+ line-height: 1.4;
915
+ }
916
+
917
+ .small {
918
+ font-size: 12px;
919
+ color: var(--faint);
920
+ }
426
921
 
427
922
  /* BUTTONS */
428
923
  .btn {
429
924
  border: 1px solid var(--line);
430
- border-radius: 12px;
431
- background: rgba(0,0,0,.20);
432
- padding: 10px 12px;
925
+ border-radius: var(--radius2);
926
+ background: rgba(255, 255, 255, 0.4);
927
+ backdrop-filter: blur(4px);
928
+ padding: 10px 14px;
433
929
  cursor: pointer;
434
- font-weight: 700;
435
- color: var(--muted);
930
+ font-weight: 600;
931
+ color: var(--text);
932
+ transition: var(--transition);
933
+ }
934
+
935
+ [data-theme="dark"] .btn {
936
+ background: rgba(0, 0, 0, 0.2);
937
+ }
938
+
939
+ .btn:hover {
940
+ background: var(--paper2);
941
+ border-color: var(--line2);
942
+ box-shadow: var(--shadow2);
943
+ transform: translateY(-1px);
944
+ }
945
+
946
+ .btn.small {
947
+ padding: 7px 10px;
948
+ border-radius: 10px;
949
+ font-size: 12px;
436
950
  }
437
951
 
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; }
952
+ .btn.primary {
953
+ background: rgba(45, 212, 191, .18);
954
+ border-color: rgba(45, 212, 191, .45);
955
+ color: rgba(45, 212, 191, .95);
956
+ }
957
+
958
+ .sideBtn {
959
+ width: 100%;
960
+ text-align: left;
961
+ margin-top: 8px;
962
+ }
442
963
 
443
964
  .k {
444
965
  display: inline-block;
445
966
  padding: 2px 6px;
446
967
  border: 1px solid var(--line);
447
968
  border-radius: 8px;
448
- background: rgba(255,250,242,.75);
969
+ background: rgba(255, 250, 242, .75);
449
970
  font-family: var(--mono);
450
971
  font-size: 12px;
451
972
  color: var(--muted);
452
973
  }
453
- [data-theme="dark"] .k { background: rgba(0,0,0,.18); }
974
+
975
+ [data-theme="dark"] .k {
976
+ background: rgba(0, 0, 0, .18);
977
+ }
454
978
 
455
979
  /* 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); }
980
+ .log {
981
+ padding: 12px;
982
+ border: 1px solid var(--line);
983
+ border-radius: var(--radius);
984
+ background: rgba(255, 250, 242, .65);
985
+ font-family: var(--mono);
986
+ font-size: 12px;
987
+ color: var(--muted);
988
+ white-space: pre-wrap;
989
+ word-break: break-word;
990
+ max-height: 360px;
991
+ overflow: auto;
992
+ }
993
+
994
+ [data-theme="dark"] .log {
995
+ background: rgba(0, 0, 0, .18);
996
+ }
997
+
998
+ .rep {
999
+ width: 100%;
1000
+ text-align: left;
1001
+ border: 1px solid var(--line);
1002
+ border-radius: 12px;
1003
+ background: var(--paper2);
1004
+ padding: 10px 12px;
1005
+ cursor: pointer;
1006
+ font-family: var(--mono);
1007
+ font-size: 12px;
1008
+ color: var(--muted);
1009
+ }
1010
+
1011
+ .rep:hover {
1012
+ border-color: var(--line2);
1013
+ box-shadow: 0 10px 22px rgba(16, 24, 40, .10);
1014
+ }
458
1015
 
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); }
1016
+ .repActive {
1017
+ border-color: rgba(59, 130, 246, .55);
1018
+ box-shadow: 0 0 0 4px rgba(59, 130, 246, .12);
1019
+ }
462
1020
 
463
1021
  /* 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; }
1022
+ .md-h1 {
1023
+ font-size: 20px;
1024
+ margin: 10px 0 6px;
1025
+ }
1026
+
1027
+ .md-h2 {
1028
+ font-size: 16px;
1029
+ margin: 10px 0 6px;
1030
+ }
1031
+
1032
+ .md-h3 {
1033
+ font-size: 14px;
1034
+ margin: 10px 0 6px;
1035
+ }
1036
+
1037
+ .md-p {
1038
+ margin: 6px 0;
1039
+ color: var(--muted);
1040
+ line-height: 1.5;
1041
+ }
1042
+
1043
+ .md-ul {
1044
+ margin: 6px 0 6px 18px;
1045
+ color: var(--muted);
1046
+ }
1047
+
1048
+ .md-inline {
1049
+ font-family: var(--mono);
1050
+ font-size: 12px;
1051
+ padding: 2px 6px;
1052
+ border: 1px solid var(--line);
1053
+ border-radius: 8px;
1054
+ background: rgba(255, 250, 242, .60);
1055
+ }
1056
+
1057
+ [data-theme="dark"] .md-inline {
1058
+ background: rgba(0, 0, 0, .18);
1059
+ }
1060
+
1061
+ .md-code {
1062
+ background: rgba(0, 0, 0, .05);
1063
+ border: 1px solid var(--line);
1064
+ border-radius: var(--radius);
1065
+ padding: 12px;
1066
+ overflow: auto;
1067
+ }
1068
+
1069
+ [data-theme="dark"] .md-code {
1070
+ background: rgba(0, 0, 0, .22);
1071
+ }
1072
+
1073
+ .md-sp {
1074
+ height: 10px;
1075
+ }
474
1076
 
475
1077
  /* RIGHT: CHAT (hidden for Perplexity layout) */
476
1078
  .chatPane {
@@ -492,10 +1094,16 @@ textarea:focus { box-shadow: var(--ring); border-color: rgba(45,212,191,.35); }
492
1094
  border-radius: 18px;
493
1095
  padding: 10px 12px;
494
1096
  border: 1px solid var(--line);
495
- box-shadow: 0 1px 0 rgba(16,24,40,.03);
1097
+ box-shadow: 0 1px 0 rgba(16, 24, 40, .03);
1098
+ }
1099
+
1100
+ .bubble .bubbleMeta {
1101
+ font-size: 11px;
1102
+ font-weight: 900;
1103
+ color: var(--faint);
1104
+ margin-bottom: 6px;
496
1105
  }
497
1106
 
498
- .bubble .bubbleMeta { font-size: 11px; font-weight: 900; color: var(--faint); margin-bottom: 6px; }
499
1107
  .bubble .bubbleBody {
500
1108
  font-size: 13px;
501
1109
  line-height: 1.45;
@@ -505,7 +1113,8 @@ textarea:focus { box-shadow: var(--ring); border-color: rgba(45,212,191,.35); }
505
1113
  }
506
1114
 
507
1115
  /* Prevent horizontal scroll in chat bubbles when showing JSON/markdown/code */
508
- .bubble pre, .bubble code {
1116
+ .bubble pre,
1117
+ .bubble code {
509
1118
  white-space: pre-wrap;
510
1119
  word-break: break-word;
511
1120
  overflow-x: hidden;
@@ -513,22 +1122,91 @@ textarea:focus { box-shadow: var(--ring); border-color: rgba(45,212,191,.35); }
513
1122
 
514
1123
  .bubble.user {
515
1124
  align-self: flex-end;
516
- background: rgba(37,99,235,.10);
517
- border-color: rgba(37,99,235,.22);
1125
+ background: rgba(37, 99, 235, .10);
1126
+ border-color: rgba(37, 99, 235, .22);
518
1127
  }
519
1128
 
520
1129
  .bubble.assistant {
521
1130
  align-self: flex-start;
522
- background: rgba(255,250,242,.82);
1131
+ background: rgba(255, 250, 242, .82);
523
1132
  }
524
- [data-theme="dark"] .bubble.assistant { background: rgba(0,0,0,.18); }
525
1133
 
526
- .chatComposer { display: none; }
1134
+ [data-theme="dark"] .bubble.assistant {
1135
+ background: rgba(0, 0, 0, .18);
1136
+ }
527
1137
 
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; }
1138
+ .chatComposer {
1139
+ display: none;
1140
+ }
532
1141
 
1142
+ .composerActions {
1143
+ display: flex;
1144
+ gap: 10px;
1145
+ margin-top: 10px;
1146
+ flex-wrap: wrap;
1147
+ }
1148
+
1149
+ .composerToggles {
1150
+ margin-top: 10px;
1151
+ display: grid;
1152
+ gap: 6px;
1153
+ }
1154
+
1155
+ .toggleRow {
1156
+ display: flex;
1157
+ align-items: center;
1158
+ gap: 10px;
1159
+ user-select: none;
1160
+ font-size: 12px;
1161
+ color: var(--muted);
1162
+ }
1163
+
1164
+ .statusFooter {
1165
+ margin-top: 10px;
1166
+ display: flex;
1167
+ justify-content: flex-end;
1168
+ }
1169
+
1170
+ /* Typing Indicator Animation */
1171
+ .typing-indicator {
1172
+ display: flex;
1173
+ align-items: center;
1174
+ gap: 4px;
1175
+ padding: 4px 2px;
1176
+ }
1177
+
1178
+ .typing-indicator span {
1179
+ display: block;
1180
+ width: 6px;
1181
+ height: 6px;
1182
+ border-radius: 50%;
1183
+ background-color: var(--faint);
1184
+ animation: typing 1.4s infinite ease-in-out both;
1185
+ }
1186
+
1187
+ .typing-indicator span:nth-child(1) {
1188
+ animation-delay: -0.32s;
1189
+ }
1190
+
1191
+ .typing-indicator span:nth-child(2) {
1192
+ animation-delay: -0.16s;
1193
+ }
1194
+
1195
+ @keyframes typing {
1196
+
1197
+ 0%,
1198
+ 80%,
1199
+ 100% {
1200
+ transform: scale(0);
1201
+ opacity: 0.5;
1202
+ }
1203
+
1204
+ 40% {
1205
+ transform: scale(1);
1206
+ opacity: 1;
1207
+ }
1208
+ }
533
1209
 
534
- * { border-radius: 0 !important; }
1210
+ * {
1211
+ border-radius: 0 !important;
1212
+ }