fraim-framework 2.0.146 → 2.0.148
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.
- package/dist/src/ai-hub/hosts.js +36 -18
- package/dist/src/ai-hub/server.js +50 -16
- package/index.js +1 -1
- package/package.json +1 -1
- package/public/ai-hub/index.html +31 -8
- package/public/ai-hub/script.js +256 -19
- package/public/ai-hub/styles.css +389 -92
- package/public/first-run/index.html +35 -34
- package/public/first-run/script.js +667 -655
- package/public/first-run/styles.css +46 -22
- package/dist/src/cli/commands/test-mcp.js +0 -171
- package/dist/src/cli/setup/first-run.js +0 -242
- package/dist/src/core/config-writer.js +0 -75
- package/dist/src/core/utils/job-aliases.js +0 -47
- package/dist/src/core/utils/workflow-parser.js +0 -174
package/public/ai-hub/styles.css
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
:root {
|
|
2
2
|
color-scheme: light;
|
|
3
|
-
--bg: #
|
|
4
|
-
--surface: #
|
|
5
|
-
--soft: #
|
|
6
|
-
--line: #
|
|
7
|
-
--text: #
|
|
8
|
-
--muted: #
|
|
9
|
-
--accent: #
|
|
10
|
-
--accent-strong: #
|
|
11
|
-
--accent-soft: #
|
|
3
|
+
--bg: #ebe4d7;
|
|
4
|
+
--surface: #f8f4eb;
|
|
5
|
+
--soft: #f1ebde;
|
|
6
|
+
--line: #d7cdbf;
|
|
7
|
+
--text: #231e17;
|
|
8
|
+
--muted: #7c6f61;
|
|
9
|
+
--accent: #1f437d;
|
|
10
|
+
--accent-strong: #16345f;
|
|
11
|
+
--accent-soft: #dfe7f5;
|
|
12
12
|
--warn: #b08442;
|
|
13
13
|
--warn-soft: #fffaf0;
|
|
14
14
|
--danger: #a24747;
|
|
15
|
-
--shadow: 0 1px 2px rgba(
|
|
16
|
-
--shadow-lg: 0
|
|
15
|
+
--shadow: 0 1px 2px rgba(35, 30, 23, 0.05);
|
|
16
|
+
--shadow-lg: 0 18px 48px rgba(35, 30, 23, 0.16);
|
|
17
17
|
/* Issue #347 — picker group dots. Decorative only; the picker uses
|
|
18
18
|
these to scan groups by color without adding semantic weight. Kept
|
|
19
19
|
as variables so future themes flow through here. */
|
|
@@ -27,9 +27,11 @@ html, body { margin: 0; padding: 0; }
|
|
|
27
27
|
|
|
28
28
|
html, body { height: 100%; }
|
|
29
29
|
body {
|
|
30
|
-
font-family:
|
|
30
|
+
font-family: "Avenir Next", "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
|
31
31
|
color: var(--text);
|
|
32
|
-
background:
|
|
32
|
+
background:
|
|
33
|
+
radial-gradient(circle at top left, rgba(255, 255, 255, 0.45), transparent 28%),
|
|
34
|
+
linear-gradient(180deg, #efe8dc 0%, var(--bg) 100%);
|
|
33
35
|
line-height: 1.5;
|
|
34
36
|
font-size: 15px;
|
|
35
37
|
/* Issue #339 fix: bound the page to the viewport. The conversation
|
|
@@ -40,8 +42,9 @@ body {
|
|
|
40
42
|
button { font: inherit; cursor: pointer; }
|
|
41
43
|
|
|
42
44
|
.page {
|
|
43
|
-
max-width:
|
|
44
|
-
|
|
45
|
+
max-width: none;
|
|
46
|
+
width: 100%;
|
|
47
|
+
margin: 0;
|
|
45
48
|
padding: 24px;
|
|
46
49
|
display: flex;
|
|
47
50
|
flex-direction: column;
|
|
@@ -57,20 +60,32 @@ button { font: inherit; cursor: pointer; }
|
|
|
57
60
|
justify-content: space-between;
|
|
58
61
|
gap: 16px;
|
|
59
62
|
}
|
|
63
|
+
.header-copy {
|
|
64
|
+
display: flex;
|
|
65
|
+
flex-direction: column;
|
|
66
|
+
gap: 4px;
|
|
67
|
+
}
|
|
68
|
+
.header-eyebrow {
|
|
69
|
+
font-size: 11px;
|
|
70
|
+
font-weight: 700;
|
|
71
|
+
letter-spacing: 0.08em;
|
|
72
|
+
text-transform: uppercase;
|
|
73
|
+
color: var(--muted);
|
|
74
|
+
}
|
|
60
75
|
.header h1 {
|
|
61
|
-
font-size:
|
|
62
|
-
font-weight:
|
|
76
|
+
font-size: 34px;
|
|
77
|
+
font-weight: 700;
|
|
63
78
|
margin: 0;
|
|
64
|
-
letter-spacing: -0.
|
|
79
|
+
letter-spacing: -0.03em;
|
|
65
80
|
}
|
|
66
81
|
.project-button {
|
|
67
82
|
display: inline-flex;
|
|
68
83
|
align-items: center;
|
|
69
84
|
gap: 8px;
|
|
70
|
-
background:
|
|
85
|
+
background: rgba(255, 255, 255, 0.5);
|
|
71
86
|
border: 1px solid var(--line);
|
|
72
|
-
border-radius:
|
|
73
|
-
padding:
|
|
87
|
+
border-radius: 14px;
|
|
88
|
+
padding: 10px 16px;
|
|
74
89
|
color: var(--text);
|
|
75
90
|
box-shadow: var(--shadow);
|
|
76
91
|
max-width: 360px;
|
|
@@ -87,10 +102,10 @@ button { font: inherit; cursor: pointer; }
|
|
|
87
102
|
|
|
88
103
|
/* Welcome line */
|
|
89
104
|
.welcome {
|
|
90
|
-
background:
|
|
105
|
+
background: rgba(248, 244, 235, 0.86);
|
|
91
106
|
border: 1px solid var(--line);
|
|
92
|
-
border-radius:
|
|
93
|
-
padding:
|
|
107
|
+
border-radius: 20px;
|
|
108
|
+
padding: 20px 24px;
|
|
94
109
|
box-shadow: var(--shadow);
|
|
95
110
|
font-size: 15px;
|
|
96
111
|
line-height: 1.7;
|
|
@@ -184,7 +199,7 @@ button { font: inherit; cursor: pointer; }
|
|
|
184
199
|
/* Layout */
|
|
185
200
|
.layout {
|
|
186
201
|
display: grid;
|
|
187
|
-
grid-template-columns:
|
|
202
|
+
grid-template-columns: 326px minmax(0, 1fr);
|
|
188
203
|
gap: 20px;
|
|
189
204
|
align-items: stretch;
|
|
190
205
|
flex: 1;
|
|
@@ -196,49 +211,71 @@ button { font: inherit; cursor: pointer; }
|
|
|
196
211
|
display: grid;
|
|
197
212
|
grid-template-columns: minmax(0, 1fr);
|
|
198
213
|
grid-auto-rows: min-content;
|
|
199
|
-
gap:
|
|
214
|
+
gap: 14px;
|
|
200
215
|
min-width: 0;
|
|
201
216
|
align-self: start;
|
|
202
217
|
max-height: 100%;
|
|
203
218
|
overflow-y: auto;
|
|
219
|
+
border-radius: 28px;
|
|
220
|
+
background: rgba(248, 244, 235, 0.84);
|
|
221
|
+
box-shadow: var(--shadow);
|
|
204
222
|
}
|
|
205
223
|
.new-conv {
|
|
206
224
|
width: 100%;
|
|
207
225
|
background: var(--accent);
|
|
208
226
|
color: #fff;
|
|
209
227
|
border: none;
|
|
210
|
-
border-radius:
|
|
211
|
-
padding:
|
|
228
|
+
border-radius: 14px;
|
|
229
|
+
padding: 13px 16px;
|
|
212
230
|
font-weight: 600;
|
|
213
231
|
box-shadow: var(--shadow);
|
|
214
232
|
}
|
|
233
|
+
.rail-note {
|
|
234
|
+
padding: 0 2px;
|
|
235
|
+
font-size: 12px;
|
|
236
|
+
color: var(--muted);
|
|
237
|
+
line-height: 1.45;
|
|
238
|
+
}
|
|
239
|
+
.rail-section {
|
|
240
|
+
display: grid;
|
|
241
|
+
gap: 10px;
|
|
242
|
+
}
|
|
243
|
+
.rail-section-label {
|
|
244
|
+
font-size: 11px;
|
|
245
|
+
font-weight: 700;
|
|
246
|
+
letter-spacing: 0.14em;
|
|
247
|
+
text-transform: uppercase;
|
|
248
|
+
color: var(--muted);
|
|
249
|
+
padding: 0 2px;
|
|
250
|
+
}
|
|
215
251
|
.new-conv:hover { background: var(--accent-strong); }
|
|
216
252
|
.new-conv:focus-visible { outline: 2px solid var(--accent-strong); outline-offset: 2px; }
|
|
217
253
|
.conv-list {
|
|
218
254
|
display: grid;
|
|
219
255
|
grid-template-columns: minmax(0, 1fr);
|
|
220
|
-
gap:
|
|
221
|
-
margin-top:
|
|
256
|
+
gap: 10px;
|
|
257
|
+
margin-top: 0;
|
|
222
258
|
min-width: 0;
|
|
223
259
|
}
|
|
224
260
|
.conv-item {
|
|
225
261
|
width: 100%;
|
|
226
262
|
text-align: left;
|
|
227
|
-
background:
|
|
228
|
-
border: 1px solid
|
|
229
|
-
border-radius:
|
|
230
|
-
padding:
|
|
263
|
+
background: rgba(255, 255, 255, 0.44);
|
|
264
|
+
border: 1px solid rgba(31, 67, 125, 0.08);
|
|
265
|
+
border-radius: 22px;
|
|
266
|
+
padding: 14px;
|
|
231
267
|
display: flex;
|
|
232
|
-
align-items:
|
|
268
|
+
align-items: flex-start;
|
|
233
269
|
justify-content: space-between;
|
|
234
|
-
gap:
|
|
270
|
+
gap: 12px;
|
|
235
271
|
color: var(--text);
|
|
272
|
+
box-shadow: 0 10px 24px rgba(35, 30, 23, 0.04);
|
|
236
273
|
}
|
|
237
274
|
.conv-item:hover { background: var(--soft); }
|
|
238
275
|
.conv-item.active {
|
|
239
|
-
background:
|
|
240
|
-
border-color:
|
|
241
|
-
box-shadow:
|
|
276
|
+
background: rgba(229, 236, 248, 0.92);
|
|
277
|
+
border-color: rgba(31, 67, 125, 0.2);
|
|
278
|
+
box-shadow: 0 14px 28px rgba(31, 67, 125, 0.12);
|
|
242
279
|
}
|
|
243
280
|
/* Text column: stacks persona name label above job title */
|
|
244
281
|
.conv-body {
|
|
@@ -246,7 +283,7 @@ button { font: inherit; cursor: pointer; }
|
|
|
246
283
|
min-width: 0;
|
|
247
284
|
display: flex;
|
|
248
285
|
flex-direction: column;
|
|
249
|
-
gap:
|
|
286
|
+
gap: 4px;
|
|
250
287
|
}
|
|
251
288
|
.conv-persona-name {
|
|
252
289
|
font-size: 10px;
|
|
@@ -258,15 +295,24 @@ button { font: inherit; cursor: pointer; }
|
|
|
258
295
|
overflow: hidden;
|
|
259
296
|
text-overflow: ellipsis;
|
|
260
297
|
}
|
|
261
|
-
.conv-title {
|
|
298
|
+
.conv-title {
|
|
299
|
+
font-size: 17px;
|
|
300
|
+
font-weight: 700;
|
|
301
|
+
min-width: 0;
|
|
302
|
+
line-height: 1.3;
|
|
303
|
+
overflow: hidden;
|
|
304
|
+
display: -webkit-box;
|
|
305
|
+
-webkit-line-clamp: 2;
|
|
306
|
+
-webkit-box-orient: vertical;
|
|
307
|
+
}
|
|
262
308
|
/* Persona avatar chip — enlarged to 34px to serve as a clear visual anchor */
|
|
263
309
|
.conv-persona-chip {
|
|
264
310
|
flex-shrink: 0;
|
|
265
|
-
width:
|
|
266
|
-
height:
|
|
267
|
-
border-radius:
|
|
268
|
-
background:
|
|
269
|
-
border:
|
|
311
|
+
width: 48px;
|
|
312
|
+
height: 48px;
|
|
313
|
+
border-radius: 16px;
|
|
314
|
+
background: #ffffff;
|
|
315
|
+
border: 2px solid rgba(31, 67, 125, 0.14);
|
|
270
316
|
display: flex;
|
|
271
317
|
align-items: center;
|
|
272
318
|
justify-content: center;
|
|
@@ -277,13 +323,15 @@ button { font: inherit; cursor: pointer; }
|
|
|
277
323
|
line-height: 1;
|
|
278
324
|
text-transform: uppercase;
|
|
279
325
|
}
|
|
280
|
-
.conv-persona-chip img { width: 100%; height: 100%; object-fit: cover; border-radius:
|
|
326
|
+
.conv-persona-chip img { width: 100%; height: 100%; object-fit: cover; border-radius: 16px; }
|
|
281
327
|
.conv-persona-chip--free { background: transparent; border-color: var(--line); color: var(--muted); }
|
|
282
328
|
.conv-status {
|
|
283
329
|
font-size: 11px;
|
|
284
330
|
color: var(--muted);
|
|
285
331
|
font-weight: 500;
|
|
286
332
|
flex-shrink: 0;
|
|
333
|
+
white-space: nowrap;
|
|
334
|
+
padding-top: 4px;
|
|
287
335
|
}
|
|
288
336
|
.conv-status.running { color: var(--accent); }
|
|
289
337
|
.conv-status.attention { color: var(--warn); }
|
|
@@ -292,11 +340,11 @@ button { font: inherit; cursor: pointer; }
|
|
|
292
340
|
/* Conversation pane — fills the layout column vertically. Inner regions
|
|
293
341
|
manage their own height; the .messages list is the only scrollable area. */
|
|
294
342
|
.conversation {
|
|
295
|
-
background:
|
|
343
|
+
background: rgba(248, 244, 235, 0.94);
|
|
296
344
|
border: 1px solid var(--line);
|
|
297
|
-
border-radius:
|
|
298
|
-
box-shadow: var(--shadow);
|
|
299
|
-
padding:
|
|
345
|
+
border-radius: 30px;
|
|
346
|
+
box-shadow: var(--shadow-lg);
|
|
347
|
+
padding: 24px 26px;
|
|
300
348
|
display: flex;
|
|
301
349
|
flex-direction: column;
|
|
302
350
|
gap: 14px;
|
|
@@ -313,13 +361,26 @@ button { font: inherit; cursor: pointer; }
|
|
|
313
361
|
color: var(--muted);
|
|
314
362
|
padding: 80px 16px;
|
|
315
363
|
}
|
|
364
|
+
.empty-state::before {
|
|
365
|
+
content: "F";
|
|
366
|
+
width: 56px;
|
|
367
|
+
height: 56px;
|
|
368
|
+
border-radius: 18px;
|
|
369
|
+
display: inline-flex;
|
|
370
|
+
align-items: center;
|
|
371
|
+
justify-content: center;
|
|
372
|
+
background: var(--accent-soft);
|
|
373
|
+
color: var(--accent-strong);
|
|
374
|
+
font-weight: 700;
|
|
375
|
+
font-size: 24px;
|
|
376
|
+
}
|
|
316
377
|
.empty-state h3 { margin: 0; color: var(--text); font-weight: 600; font-size: 17px; }
|
|
317
378
|
.empty-state p { margin: 0; max-width: 320px; }
|
|
318
379
|
|
|
319
380
|
#active-conv {
|
|
320
381
|
display: flex;
|
|
321
382
|
flex-direction: column;
|
|
322
|
-
gap:
|
|
383
|
+
gap: 14px;
|
|
323
384
|
min-width: 0;
|
|
324
385
|
flex: 1;
|
|
325
386
|
min-height: 0;
|
|
@@ -331,6 +392,76 @@ button { font: inherit; cursor: pointer; }
|
|
|
331
392
|
.progress {
|
|
332
393
|
flex-shrink: 0;
|
|
333
394
|
}
|
|
395
|
+
.conv-topline {
|
|
396
|
+
display: flex;
|
|
397
|
+
align-items: center;
|
|
398
|
+
justify-content: space-between;
|
|
399
|
+
gap: 12px;
|
|
400
|
+
}
|
|
401
|
+
.employee-identity {
|
|
402
|
+
display: inline-flex;
|
|
403
|
+
align-items: center;
|
|
404
|
+
gap: 12px;
|
|
405
|
+
min-width: 0;
|
|
406
|
+
}
|
|
407
|
+
.identity-avatar {
|
|
408
|
+
width: 52px;
|
|
409
|
+
height: 52px;
|
|
410
|
+
border-radius: 18px;
|
|
411
|
+
background: #ffffff;
|
|
412
|
+
border: 1px solid rgba(31, 67, 125, 0.14);
|
|
413
|
+
display: inline-flex;
|
|
414
|
+
align-items: center;
|
|
415
|
+
justify-content: center;
|
|
416
|
+
overflow: hidden;
|
|
417
|
+
font-size: 16px;
|
|
418
|
+
font-weight: 700;
|
|
419
|
+
color: var(--accent-strong);
|
|
420
|
+
flex-shrink: 0;
|
|
421
|
+
}
|
|
422
|
+
.identity-avatar img {
|
|
423
|
+
width: 100%;
|
|
424
|
+
height: 100%;
|
|
425
|
+
object-fit: cover;
|
|
426
|
+
}
|
|
427
|
+
.identity-copy {
|
|
428
|
+
display: flex;
|
|
429
|
+
flex-direction: column;
|
|
430
|
+
min-width: 0;
|
|
431
|
+
}
|
|
432
|
+
.identity-copy strong {
|
|
433
|
+
font-size: 16px;
|
|
434
|
+
font-weight: 700;
|
|
435
|
+
color: var(--text);
|
|
436
|
+
}
|
|
437
|
+
.identity-copy small {
|
|
438
|
+
font-size: 13px;
|
|
439
|
+
color: var(--muted);
|
|
440
|
+
}
|
|
441
|
+
.run-state-pill {
|
|
442
|
+
display: inline-flex;
|
|
443
|
+
align-items: center;
|
|
444
|
+
justify-content: center;
|
|
445
|
+
padding: 7px 12px;
|
|
446
|
+
border-radius: 999px;
|
|
447
|
+
font-size: 11px;
|
|
448
|
+
font-weight: 700;
|
|
449
|
+
letter-spacing: 0.08em;
|
|
450
|
+
text-transform: uppercase;
|
|
451
|
+
background: rgba(31, 67, 125, 0.1);
|
|
452
|
+
color: var(--accent-strong);
|
|
453
|
+
}
|
|
454
|
+
.run-state-pill.running {
|
|
455
|
+
background: rgba(31, 67, 125, 0.14);
|
|
456
|
+
}
|
|
457
|
+
.run-state-pill.failed {
|
|
458
|
+
background: #fbebeb;
|
|
459
|
+
color: var(--danger);
|
|
460
|
+
}
|
|
461
|
+
.run-state-pill.completed {
|
|
462
|
+
background: #e4f0ea;
|
|
463
|
+
color: #2c6b4e;
|
|
464
|
+
}
|
|
334
465
|
.conv-header {
|
|
335
466
|
display: flex;
|
|
336
467
|
flex-wrap: wrap;
|
|
@@ -338,11 +469,27 @@ button { font: inherit; cursor: pointer; }
|
|
|
338
469
|
column-gap: 12px;
|
|
339
470
|
row-gap: 4px;
|
|
340
471
|
}
|
|
472
|
+
.title-block {
|
|
473
|
+
display: flex;
|
|
474
|
+
flex-direction: column;
|
|
475
|
+
gap: 4px;
|
|
476
|
+
min-width: 0;
|
|
477
|
+
flex: 1 1 auto;
|
|
478
|
+
}
|
|
341
479
|
.conv-header h2 { flex: 1 1 auto; min-width: 0; }
|
|
342
480
|
#artifact-slot { flex: 0 0 auto; }
|
|
343
481
|
|
|
344
|
-
.conv-header h2 { margin: 0; font-size:
|
|
482
|
+
.conv-header h2 { margin: 0; font-size: 34px; font-weight: 700; letter-spacing: -0.03em; }
|
|
345
483
|
.conv-job { color: var(--muted); font-size: 14px; margin-top: 2px; }
|
|
484
|
+
.summary-strip {
|
|
485
|
+
background: rgba(255, 255, 255, 0.56);
|
|
486
|
+
border: 1px solid rgba(31, 67, 125, 0.08);
|
|
487
|
+
border-radius: 18px;
|
|
488
|
+
padding: 14px 16px;
|
|
489
|
+
color: var(--text);
|
|
490
|
+
font-size: 14px;
|
|
491
|
+
line-height: 1.55;
|
|
492
|
+
}
|
|
346
493
|
|
|
347
494
|
.section-title {
|
|
348
495
|
font-size: 13px;
|
|
@@ -378,7 +525,7 @@ button { font: inherit; cursor: pointer; }
|
|
|
378
525
|
/* Progress is now a single-line status strip (was a tall card) so the
|
|
379
526
|
messages region gets the vertical space it needs. */
|
|
380
527
|
.progress {
|
|
381
|
-
background:
|
|
528
|
+
background: rgba(255, 255, 255, 0.46);
|
|
382
529
|
border: 1px solid var(--line);
|
|
383
530
|
border-radius: 8px;
|
|
384
531
|
padding: 8px 12px;
|
|
@@ -420,24 +567,48 @@ button { font: inherit; cursor: pointer; }
|
|
|
420
567
|
50% { opacity: 0.5; transform: scale(0.8); }
|
|
421
568
|
}
|
|
422
569
|
|
|
570
|
+
.thread-surface {
|
|
571
|
+
display: flex;
|
|
572
|
+
flex-direction: column;
|
|
573
|
+
gap: 14px;
|
|
574
|
+
min-height: 280px;
|
|
575
|
+
flex: 1;
|
|
576
|
+
padding: 18px 18px 16px;
|
|
577
|
+
border-radius: 28px;
|
|
578
|
+
border: 1px solid rgba(31, 67, 125, 0.1);
|
|
579
|
+
background:
|
|
580
|
+
linear-gradient(180deg, rgba(255, 255, 255, 0.74), rgba(255, 255, 255, 0.5)),
|
|
581
|
+
radial-gradient(circle at top left, rgba(31, 67, 125, 0.06), transparent 34%);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
.thread-surface-label {
|
|
585
|
+
font-size: 11px;
|
|
586
|
+
font-weight: 700;
|
|
587
|
+
letter-spacing: 0.14em;
|
|
588
|
+
text-transform: uppercase;
|
|
589
|
+
color: var(--muted);
|
|
590
|
+
}
|
|
591
|
+
|
|
423
592
|
.messages {
|
|
424
593
|
display: grid;
|
|
425
594
|
grid-template-columns: minmax(0, 1fr);
|
|
426
|
-
gap:
|
|
427
|
-
margin-top:
|
|
595
|
+
gap: 24px;
|
|
596
|
+
margin-top: 0;
|
|
428
597
|
min-width: 0;
|
|
429
598
|
/* Scroll messages here, not the page. */
|
|
430
599
|
flex: 1;
|
|
431
|
-
min-height:
|
|
600
|
+
min-height: 180px;
|
|
432
601
|
overflow-y: auto;
|
|
433
|
-
padding
|
|
602
|
+
padding: 8px 8px 8px 2px;
|
|
603
|
+
scroll-behavior: smooth;
|
|
434
604
|
}
|
|
435
|
-
.message { word-wrap: break-word; overflow-wrap: anywhere; }
|
|
436
605
|
.message {
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
606
|
+
word-wrap: break-word;
|
|
607
|
+
overflow-wrap: anywhere;
|
|
608
|
+
max-width: 100%;
|
|
609
|
+
width: 100%;
|
|
610
|
+
display: grid;
|
|
611
|
+
gap: 10px;
|
|
441
612
|
animation: slidein 280ms ease;
|
|
442
613
|
}
|
|
443
614
|
@keyframes slidein {
|
|
@@ -445,23 +616,91 @@ button { font: inherit; cursor: pointer; }
|
|
|
445
616
|
to { opacity: 1; transform: translateY(0); }
|
|
446
617
|
}
|
|
447
618
|
.message.manager {
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
color: var(--text);
|
|
619
|
+
justify-items: end;
|
|
620
|
+
padding-left: 24%;
|
|
451
621
|
}
|
|
452
622
|
.message.employee {
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
623
|
+
justify-items: start;
|
|
624
|
+
padding-right: 24%;
|
|
625
|
+
}
|
|
626
|
+
.message.system {
|
|
627
|
+
justify-items: stretch;
|
|
628
|
+
padding-right: 16%;
|
|
629
|
+
}
|
|
630
|
+
.message-meta {
|
|
631
|
+
display: inline-flex;
|
|
632
|
+
align-items: center;
|
|
633
|
+
gap: 8px;
|
|
634
|
+
margin-bottom: 0;
|
|
635
|
+
}
|
|
636
|
+
.message.manager .message-meta {
|
|
637
|
+
justify-content: flex-end;
|
|
638
|
+
}
|
|
639
|
+
.message-avatar {
|
|
640
|
+
width: 28px;
|
|
641
|
+
height: 28px;
|
|
642
|
+
border-radius: 10px;
|
|
643
|
+
display: inline-flex;
|
|
644
|
+
align-items: center;
|
|
645
|
+
justify-content: center;
|
|
646
|
+
overflow: hidden;
|
|
647
|
+
font-size: 11px;
|
|
648
|
+
font-weight: 700;
|
|
649
|
+
border: 1px solid rgba(31, 67, 125, 0.1);
|
|
650
|
+
}
|
|
651
|
+
.message-avatar.manager {
|
|
652
|
+
background: rgba(31, 67, 125, 0.12);
|
|
653
|
+
color: var(--accent-strong);
|
|
654
|
+
}
|
|
655
|
+
.message-avatar.employee {
|
|
656
|
+
background: #ffffff;
|
|
657
|
+
color: var(--accent-strong);
|
|
658
|
+
}
|
|
659
|
+
.message-avatar.system {
|
|
660
|
+
background: rgba(35, 30, 23, 0.08);
|
|
661
|
+
color: var(--muted);
|
|
662
|
+
}
|
|
663
|
+
.message-avatar img {
|
|
664
|
+
width: 100%;
|
|
665
|
+
height: 100%;
|
|
666
|
+
object-fit: cover;
|
|
456
667
|
}
|
|
457
668
|
.message .who {
|
|
458
669
|
font-size: 11px;
|
|
459
|
-
font-weight:
|
|
670
|
+
font-weight: 700;
|
|
460
671
|
text-transform: uppercase;
|
|
461
|
-
letter-spacing: 0.
|
|
672
|
+
letter-spacing: 0.08em;
|
|
462
673
|
color: var(--muted);
|
|
463
|
-
|
|
464
|
-
|
|
674
|
+
}
|
|
675
|
+
.message .lane-label {
|
|
676
|
+
font-size: 11px;
|
|
677
|
+
color: var(--muted);
|
|
678
|
+
opacity: 0.88;
|
|
679
|
+
}
|
|
680
|
+
.transport-raw {
|
|
681
|
+
display: none;
|
|
682
|
+
}
|
|
683
|
+
.bubble {
|
|
684
|
+
border-radius: 26px;
|
|
685
|
+
padding: 16px 18px;
|
|
686
|
+
font-size: 14px;
|
|
687
|
+
line-height: 1.6;
|
|
688
|
+
box-shadow: 0 12px 26px rgba(35, 30, 23, 0.05);
|
|
689
|
+
max-width: min(760px, 100%);
|
|
690
|
+
}
|
|
691
|
+
.message.manager .bubble {
|
|
692
|
+
background: var(--accent);
|
|
693
|
+
color: #fff;
|
|
694
|
+
}
|
|
695
|
+
.message.employee .bubble {
|
|
696
|
+
background: rgba(255, 255, 255, 0.86);
|
|
697
|
+
border: 1px solid rgba(31, 67, 125, 0.1);
|
|
698
|
+
color: var(--text);
|
|
699
|
+
}
|
|
700
|
+
.message.system .bubble {
|
|
701
|
+
background: rgba(255, 255, 255, 0.6);
|
|
702
|
+
border: 1px solid rgba(35, 30, 23, 0.08);
|
|
703
|
+
color: var(--text);
|
|
465
704
|
}
|
|
466
705
|
|
|
467
706
|
/* Inline artifact pill that sits in the .conv-header next to the title.
|
|
@@ -510,14 +749,20 @@ button { font: inherit; cursor: pointer; }
|
|
|
510
749
|
max-height: 30vh;
|
|
511
750
|
resize: vertical;
|
|
512
751
|
border: 1px solid var(--line);
|
|
513
|
-
border-radius:
|
|
514
|
-
padding:
|
|
752
|
+
border-radius: 18px;
|
|
753
|
+
padding: 13px 15px;
|
|
515
754
|
font: inherit;
|
|
516
755
|
color: var(--text);
|
|
517
756
|
background: var(--surface);
|
|
518
757
|
}
|
|
519
758
|
.coach textarea:focus { outline: none; border-color: var(--accent); }
|
|
520
759
|
.coach-actions { display: flex; justify-content: flex-end; margin-top: 10px; }
|
|
760
|
+
.coach-note {
|
|
761
|
+
margin-top: 10px;
|
|
762
|
+
color: var(--muted);
|
|
763
|
+
font-size: 12px;
|
|
764
|
+
line-height: 1.5;
|
|
765
|
+
}
|
|
521
766
|
.send-button {
|
|
522
767
|
background: var(--accent);
|
|
523
768
|
color: #fff;
|
|
@@ -758,6 +1003,22 @@ button.small { padding: 4px 10px; font-size: 12px; }
|
|
|
758
1003
|
.conv-stream { flex: initial; }
|
|
759
1004
|
.messages { flex: initial; max-height: 60vh; }
|
|
760
1005
|
.header { flex-wrap: wrap; }
|
|
1006
|
+
.conv-topline { align-items: flex-start; flex-direction: column; }
|
|
1007
|
+
.conv-header h2 { font-size: 28px; }
|
|
1008
|
+
.thread-surface {
|
|
1009
|
+
padding: 16px 14px 14px;
|
|
1010
|
+
}
|
|
1011
|
+
.message,
|
|
1012
|
+
.message.manager,
|
|
1013
|
+
.message.employee,
|
|
1014
|
+
.message.system {
|
|
1015
|
+
max-width: 100%;
|
|
1016
|
+
padding-left: 0;
|
|
1017
|
+
padding-right: 0;
|
|
1018
|
+
}
|
|
1019
|
+
.team-roster {
|
|
1020
|
+
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
|
|
1021
|
+
}
|
|
761
1022
|
.popover { width: min(320px, calc(100vw - 60px)); }
|
|
762
1023
|
}
|
|
763
1024
|
|
|
@@ -956,30 +1217,66 @@ button.small { padding: 4px 10px; font-size: 12px; }
|
|
|
956
1217
|
|
|
957
1218
|
/* Team roster — horizontal chip row above conv list */
|
|
958
1219
|
.team-roster {
|
|
959
|
-
display:
|
|
960
|
-
|
|
961
|
-
gap: 6px;
|
|
962
|
-
padding: 8px 10px 4px;
|
|
963
|
-
flex-wrap: wrap;
|
|
1220
|
+
display: grid;
|
|
1221
|
+
gap: 10px;
|
|
964
1222
|
}
|
|
965
1223
|
.roster-chip {
|
|
966
|
-
display:
|
|
1224
|
+
display: grid;
|
|
1225
|
+
grid-template-columns: 48px minmax(0, 1fr);
|
|
1226
|
+
align-items: center;
|
|
1227
|
+
gap: 12px;
|
|
1228
|
+
width: 100%;
|
|
1229
|
+
min-height: 74px;
|
|
1230
|
+
border-radius: 22px;
|
|
1231
|
+
background: rgba(255, 255, 255, 0.5);
|
|
1232
|
+
border: 1px solid rgba(31, 67, 125, 0.1);
|
|
1233
|
+
font-size: 12px;
|
|
1234
|
+
color: var(--text);
|
|
1235
|
+
cursor: pointer;
|
|
1236
|
+
overflow: hidden;
|
|
1237
|
+
padding: 12px 14px;
|
|
1238
|
+
text-align: left;
|
|
1239
|
+
box-shadow: 0 10px 24px rgba(35, 30, 23, 0.04);
|
|
1240
|
+
}
|
|
1241
|
+
.roster-chip.active {
|
|
1242
|
+
border-color: rgba(31, 67, 125, 0.22);
|
|
1243
|
+
background: rgba(223, 231, 245, 0.92);
|
|
1244
|
+
box-shadow: 0 14px 28px rgba(31, 67, 125, 0.1);
|
|
1245
|
+
}
|
|
1246
|
+
.roster-avatar {
|
|
1247
|
+
width: 48px;
|
|
1248
|
+
height: 48px;
|
|
1249
|
+
border-radius: 16px;
|
|
1250
|
+
display: inline-flex;
|
|
967
1251
|
align-items: center;
|
|
968
1252
|
justify-content: center;
|
|
969
|
-
|
|
970
|
-
height: 36px;
|
|
971
|
-
border-radius: 50%;
|
|
972
|
-
background: var(--accent-soft);
|
|
973
|
-
border: 2px solid var(--line);
|
|
974
|
-
font-size: 11px;
|
|
975
|
-
font-weight: 700;
|
|
1253
|
+
background: #ffffff;
|
|
976
1254
|
color: var(--accent-strong);
|
|
977
|
-
|
|
1255
|
+
font-size: 12px;
|
|
1256
|
+
font-weight: 700;
|
|
1257
|
+
border: 1px solid rgba(31, 67, 125, 0.1);
|
|
978
1258
|
overflow: hidden;
|
|
979
|
-
flex-shrink: 0;
|
|
980
1259
|
}
|
|
981
|
-
.roster-
|
|
982
|
-
.roster-
|
|
1260
|
+
.roster-avatar img { width: 100%; height: 100%; object-fit: cover; }
|
|
1261
|
+
.roster-copy {
|
|
1262
|
+
display: flex;
|
|
1263
|
+
flex-direction: column;
|
|
1264
|
+
min-width: 0;
|
|
1265
|
+
}
|
|
1266
|
+
.roster-copy strong {
|
|
1267
|
+
font-size: 16px;
|
|
1268
|
+
font-weight: 700;
|
|
1269
|
+
color: var(--text);
|
|
1270
|
+
line-height: 1.25;
|
|
1271
|
+
}
|
|
1272
|
+
.roster-copy small {
|
|
1273
|
+
font-size: 13px;
|
|
1274
|
+
color: var(--muted);
|
|
1275
|
+
line-height: 1.4;
|
|
1276
|
+
}
|
|
1277
|
+
.roster-chip--all .roster-avatar {
|
|
1278
|
+
background: var(--accent-soft);
|
|
1279
|
+
}
|
|
983
1280
|
.roster-chip-add {
|
|
984
1281
|
width: 36px;
|
|
985
1282
|
height: 36px;
|