fraim-framework 2.0.146 → 2.0.147
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/package.json +1 -1
- package/public/ai-hub/index.html +67 -44
- package/public/ai-hub/script.js +347 -110
- package/public/ai-hub/styles.css +561 -264
- package/public/first-run/index.html +1 -0
- package/public/first-run/script.js +30 -18
- package/public/first-run/styles.css +73 -49
package/public/ai-hub/styles.css
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
color-scheme: light;
|
|
3
|
-
--bg: #
|
|
4
|
-
--surface: #
|
|
5
|
-
--soft: #
|
|
6
|
-
--line: #
|
|
7
|
-
--text: #
|
|
8
|
-
--muted: #
|
|
9
|
-
--accent: #
|
|
10
|
-
--accent-strong: #
|
|
11
|
-
--accent-soft: #
|
|
12
|
-
--warn: #b08442;
|
|
13
|
-
--warn-soft: #fffaf0;
|
|
14
|
-
--danger: #a24747;
|
|
15
|
-
--shadow: 0 1px 2px rgba(
|
|
16
|
-
--shadow-lg: 0
|
|
1
|
+
:root {
|
|
2
|
+
color-scheme: light;
|
|
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
|
+
--warn: #b08442;
|
|
13
|
+
--warn-soft: #fffaf0;
|
|
14
|
+
--danger: #a24747;
|
|
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. */
|
|
@@ -26,10 +26,12 @@ html, body { margin: 0; padding: 0; }
|
|
|
26
26
|
[hidden] { display: none !important; }
|
|
27
27
|
|
|
28
28
|
html, body { height: 100%; }
|
|
29
|
-
body {
|
|
30
|
-
font-family:
|
|
31
|
-
color: var(--text);
|
|
32
|
-
background:
|
|
29
|
+
body {
|
|
30
|
+
font-family: "Avenir Next", "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
|
31
|
+
color: var(--text);
|
|
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
|
|
@@ -39,9 +41,10 @@ body {
|
|
|
39
41
|
|
|
40
42
|
button { font: inherit; cursor: pointer; }
|
|
41
43
|
|
|
42
|
-
.page {
|
|
43
|
-
max-width:
|
|
44
|
-
|
|
44
|
+
.page {
|
|
45
|
+
max-width: none;
|
|
46
|
+
width: 100%;
|
|
47
|
+
margin: 0;
|
|
45
48
|
padding: 24px;
|
|
46
49
|
display: flex;
|
|
47
50
|
flex-direction: column;
|
|
@@ -51,26 +54,38 @@ button { font: inherit; cursor: pointer; }
|
|
|
51
54
|
}
|
|
52
55
|
|
|
53
56
|
/* Header */
|
|
54
|
-
.header {
|
|
55
|
-
display: flex;
|
|
56
|
-
align-items: center;
|
|
57
|
-
justify-content: space-between;
|
|
58
|
-
gap: 16px;
|
|
59
|
-
}
|
|
60
|
-
.header
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
57
|
+
.header {
|
|
58
|
+
display: flex;
|
|
59
|
+
align-items: center;
|
|
60
|
+
justify-content: space-between;
|
|
61
|
+
gap: 16px;
|
|
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
|
+
}
|
|
75
|
+
.header h1 {
|
|
76
|
+
font-size: 34px;
|
|
77
|
+
font-weight: 700;
|
|
78
|
+
margin: 0;
|
|
79
|
+
letter-spacing: -0.03em;
|
|
80
|
+
}
|
|
81
|
+
.project-button {
|
|
67
82
|
display: inline-flex;
|
|
68
83
|
align-items: center;
|
|
69
84
|
gap: 8px;
|
|
70
|
-
background:
|
|
71
|
-
border: 1px solid var(--line);
|
|
72
|
-
border-radius:
|
|
73
|
-
padding:
|
|
85
|
+
background: rgba(255, 255, 255, 0.5);
|
|
86
|
+
border: 1px solid var(--line);
|
|
87
|
+
border-radius: 14px;
|
|
88
|
+
padding: 10px 16px;
|
|
74
89
|
color: var(--text);
|
|
75
90
|
box-shadow: var(--shadow);
|
|
76
91
|
max-width: 360px;
|
|
@@ -86,11 +101,11 @@ button { font: inherit; cursor: pointer; }
|
|
|
86
101
|
}
|
|
87
102
|
|
|
88
103
|
/* Welcome line */
|
|
89
|
-
.welcome {
|
|
90
|
-
background:
|
|
91
|
-
border: 1px solid var(--line);
|
|
92
|
-
border-radius:
|
|
93
|
-
padding:
|
|
104
|
+
.welcome {
|
|
105
|
+
background: rgba(248, 244, 235, 0.86);
|
|
106
|
+
border: 1px solid var(--line);
|
|
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;
|
|
@@ -182,72 +197,94 @@ button { font: inherit; cursor: pointer; }
|
|
|
182
197
|
}
|
|
183
198
|
|
|
184
199
|
/* Layout */
|
|
185
|
-
.layout {
|
|
186
|
-
display: grid;
|
|
187
|
-
grid-template-columns:
|
|
188
|
-
gap: 20px;
|
|
189
|
-
align-items: stretch;
|
|
190
|
-
flex: 1;
|
|
191
|
-
min-height: 0;
|
|
192
|
-
}
|
|
200
|
+
.layout {
|
|
201
|
+
display: grid;
|
|
202
|
+
grid-template-columns: 326px minmax(0, 1fr);
|
|
203
|
+
gap: 20px;
|
|
204
|
+
align-items: stretch;
|
|
205
|
+
flex: 1;
|
|
206
|
+
min-height: 0;
|
|
207
|
+
}
|
|
193
208
|
|
|
194
209
|
/* Left rail */
|
|
195
|
-
.rail {
|
|
196
|
-
display: grid;
|
|
197
|
-
grid-template-columns: minmax(0, 1fr);
|
|
198
|
-
grid-auto-rows: min-content;
|
|
199
|
-
gap:
|
|
200
|
-
min-width: 0;
|
|
201
|
-
align-self: start;
|
|
202
|
-
max-height: 100%;
|
|
203
|
-
overflow-y: auto;
|
|
204
|
-
|
|
205
|
-
.
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
.
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
}
|
|
237
|
-
.conv-
|
|
238
|
-
.conv-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
210
|
+
.rail {
|
|
211
|
+
display: grid;
|
|
212
|
+
grid-template-columns: minmax(0, 1fr);
|
|
213
|
+
grid-auto-rows: min-content;
|
|
214
|
+
gap: 14px;
|
|
215
|
+
min-width: 0;
|
|
216
|
+
align-self: start;
|
|
217
|
+
max-height: 100%;
|
|
218
|
+
overflow-y: auto;
|
|
219
|
+
border-radius: 28px;
|
|
220
|
+
background: rgba(248, 244, 235, 0.84);
|
|
221
|
+
box-shadow: var(--shadow);
|
|
222
|
+
}
|
|
223
|
+
.new-conv {
|
|
224
|
+
width: 100%;
|
|
225
|
+
background: var(--accent);
|
|
226
|
+
color: #fff;
|
|
227
|
+
border: none;
|
|
228
|
+
border-radius: 14px;
|
|
229
|
+
padding: 13px 16px;
|
|
230
|
+
font-weight: 600;
|
|
231
|
+
box-shadow: var(--shadow);
|
|
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
|
+
}
|
|
251
|
+
.new-conv:hover { background: var(--accent-strong); }
|
|
252
|
+
.new-conv:focus-visible { outline: 2px solid var(--accent-strong); outline-offset: 2px; }
|
|
253
|
+
.conv-list {
|
|
254
|
+
display: grid;
|
|
255
|
+
grid-template-columns: minmax(0, 1fr);
|
|
256
|
+
gap: 10px;
|
|
257
|
+
margin-top: 0;
|
|
258
|
+
min-width: 0;
|
|
259
|
+
}
|
|
260
|
+
.conv-item {
|
|
261
|
+
width: 100%;
|
|
262
|
+
text-align: left;
|
|
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;
|
|
267
|
+
display: flex;
|
|
268
|
+
align-items: flex-start;
|
|
269
|
+
justify-content: space-between;
|
|
270
|
+
gap: 12px;
|
|
271
|
+
color: var(--text);
|
|
272
|
+
box-shadow: 0 10px 24px rgba(35, 30, 23, 0.04);
|
|
273
|
+
}
|
|
274
|
+
.conv-item:hover { background: var(--soft); }
|
|
275
|
+
.conv-item.active {
|
|
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);
|
|
279
|
+
}
|
|
243
280
|
/* Text column: stacks persona name label above job title */
|
|
244
|
-
.conv-body {
|
|
245
|
-
flex: 1;
|
|
246
|
-
min-width: 0;
|
|
247
|
-
display: flex;
|
|
248
|
-
flex-direction: column;
|
|
249
|
-
gap:
|
|
250
|
-
}
|
|
281
|
+
.conv-body {
|
|
282
|
+
flex: 1;
|
|
283
|
+
min-width: 0;
|
|
284
|
+
display: flex;
|
|
285
|
+
flex-direction: column;
|
|
286
|
+
gap: 4px;
|
|
287
|
+
}
|
|
251
288
|
.conv-persona-name {
|
|
252
289
|
font-size: 10px;
|
|
253
290
|
font-weight: 700;
|
|
@@ -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
|
-
.conv-persona-chip {
|
|
264
|
-
flex-shrink: 0;
|
|
265
|
-
width:
|
|
266
|
-
height:
|
|
267
|
-
border-radius:
|
|
268
|
-
background:
|
|
269
|
-
border:
|
|
309
|
+
.conv-persona-chip {
|
|
310
|
+
flex-shrink: 0;
|
|
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,26 +323,28 @@ 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
|
-
.conv-status {
|
|
283
|
-
font-size: 11px;
|
|
284
|
-
color: var(--muted);
|
|
285
|
-
font-weight: 500;
|
|
286
|
-
flex-shrink: 0;
|
|
287
|
-
|
|
328
|
+
.conv-status {
|
|
329
|
+
font-size: 11px;
|
|
330
|
+
color: var(--muted);
|
|
331
|
+
font-weight: 500;
|
|
332
|
+
flex-shrink: 0;
|
|
333
|
+
white-space: nowrap;
|
|
334
|
+
padding-top: 4px;
|
|
335
|
+
}
|
|
288
336
|
.conv-status.running { color: var(--accent); }
|
|
289
337
|
.conv-status.attention { color: var(--warn); }
|
|
290
338
|
.conv-status.failed { color: var(--danger); }
|
|
291
339
|
|
|
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
|
-
.conversation {
|
|
295
|
-
background:
|
|
296
|
-
border: 1px solid var(--line);
|
|
297
|
-
border-radius:
|
|
298
|
-
box-shadow: var(--shadow);
|
|
299
|
-
padding:
|
|
342
|
+
.conversation {
|
|
343
|
+
background: rgba(248, 244, 235, 0.94);
|
|
344
|
+
border: 1px solid var(--line);
|
|
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;
|
|
@@ -305,44 +353,143 @@ button { font: inherit; cursor: pointer; }
|
|
|
305
353
|
height: 100%;
|
|
306
354
|
overflow: hidden;
|
|
307
355
|
}
|
|
308
|
-
.empty-state {
|
|
309
|
-
display: grid;
|
|
310
|
-
gap: 8px;
|
|
311
|
-
place-items: center;
|
|
312
|
-
text-align: center;
|
|
313
|
-
color: var(--muted);
|
|
314
|
-
padding: 80px 16px;
|
|
315
|
-
}
|
|
316
|
-
.empty-state
|
|
356
|
+
.empty-state {
|
|
357
|
+
display: grid;
|
|
358
|
+
gap: 8px;
|
|
359
|
+
place-items: center;
|
|
360
|
+
text-align: center;
|
|
361
|
+
color: var(--muted);
|
|
362
|
+
padding: 80px 16px;
|
|
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
|
+
}
|
|
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
|
-
#active-conv {
|
|
320
|
-
display: flex;
|
|
321
|
-
flex-direction: column;
|
|
322
|
-
gap:
|
|
323
|
-
min-width: 0;
|
|
324
|
-
flex: 1;
|
|
325
|
-
min-height: 0;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
.conv-header,
|
|
329
|
-
.coach,
|
|
330
|
-
.micro,
|
|
331
|
-
.progress {
|
|
332
|
-
flex-shrink: 0;
|
|
333
|
-
}
|
|
334
|
-
.conv-
|
|
335
|
-
display: flex;
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
380
|
+
#active-conv {
|
|
381
|
+
display: flex;
|
|
382
|
+
flex-direction: column;
|
|
383
|
+
gap: 14px;
|
|
384
|
+
min-width: 0;
|
|
385
|
+
flex: 1;
|
|
386
|
+
min-height: 0;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
.conv-header,
|
|
390
|
+
.coach,
|
|
391
|
+
.micro,
|
|
392
|
+
.progress {
|
|
393
|
+
flex-shrink: 0;
|
|
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
|
+
}
|
|
465
|
+
.conv-header {
|
|
466
|
+
display: flex;
|
|
467
|
+
flex-wrap: wrap;
|
|
468
|
+
align-items: baseline;
|
|
469
|
+
column-gap: 12px;
|
|
470
|
+
row-gap: 4px;
|
|
471
|
+
}
|
|
472
|
+
.title-block {
|
|
473
|
+
display: flex;
|
|
474
|
+
flex-direction: column;
|
|
475
|
+
gap: 4px;
|
|
476
|
+
min-width: 0;
|
|
477
|
+
flex: 1 1 auto;
|
|
478
|
+
}
|
|
479
|
+
.conv-header h2 { flex: 1 1 auto; min-width: 0; }
|
|
480
|
+
#artifact-slot { flex: 0 0 auto; }
|
|
481
|
+
|
|
482
|
+
.conv-header h2 { margin: 0; font-size: 34px; font-weight: 700; letter-spacing: -0.03em; }
|
|
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;
|
|
@@ -377,11 +524,11 @@ button { font: inherit; cursor: pointer; }
|
|
|
377
524
|
|
|
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
|
-
.progress {
|
|
381
|
-
background:
|
|
382
|
-
border: 1px solid var(--line);
|
|
383
|
-
border-radius: 8px;
|
|
384
|
-
padding: 8px 12px;
|
|
527
|
+
.progress {
|
|
528
|
+
background: rgba(255, 255, 255, 0.46);
|
|
529
|
+
border: 1px solid var(--line);
|
|
530
|
+
border-radius: 8px;
|
|
531
|
+
padding: 8px 12px;
|
|
385
532
|
font-size: 13px;
|
|
386
533
|
display: flex;
|
|
387
534
|
align-items: center;
|
|
@@ -414,55 +561,147 @@ button { font: inherit; cursor: pointer; }
|
|
|
414
561
|
}
|
|
415
562
|
.progress.done .stage::before { background: #6cb39a; animation: none; }
|
|
416
563
|
.progress.attention .stage::before { background: var(--warn); animation: none; }
|
|
417
|
-
.progress.failed .stage::before { background: var(--danger); animation: none; }
|
|
418
|
-
@keyframes pulse {
|
|
419
|
-
0%, 100% { opacity: 1; transform: scale(1); }
|
|
420
|
-
50% { opacity: 0.5; transform: scale(0.8); }
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
.
|
|
424
|
-
display:
|
|
425
|
-
|
|
426
|
-
gap:
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
font-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
display:
|
|
464
|
-
|
|
465
|
-
|
|
564
|
+
.progress.failed .stage::before { background: var(--danger); animation: none; }
|
|
565
|
+
@keyframes pulse {
|
|
566
|
+
0%, 100% { opacity: 1; transform: scale(1); }
|
|
567
|
+
50% { opacity: 0.5; transform: scale(0.8); }
|
|
568
|
+
}
|
|
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
|
+
|
|
592
|
+
.messages {
|
|
593
|
+
display: grid;
|
|
594
|
+
grid-template-columns: minmax(0, 1fr);
|
|
595
|
+
gap: 24px;
|
|
596
|
+
margin-top: 0;
|
|
597
|
+
min-width: 0;
|
|
598
|
+
/* Scroll messages here, not the page. */
|
|
599
|
+
flex: 1;
|
|
600
|
+
min-height: 180px;
|
|
601
|
+
overflow-y: auto;
|
|
602
|
+
padding: 8px 8px 8px 2px;
|
|
603
|
+
scroll-behavior: smooth;
|
|
604
|
+
}
|
|
605
|
+
.message {
|
|
606
|
+
word-wrap: break-word;
|
|
607
|
+
overflow-wrap: anywhere;
|
|
608
|
+
max-width: 100%;
|
|
609
|
+
width: 100%;
|
|
610
|
+
display: grid;
|
|
611
|
+
gap: 10px;
|
|
612
|
+
animation: slidein 280ms ease;
|
|
613
|
+
}
|
|
614
|
+
@keyframes slidein {
|
|
615
|
+
from { opacity: 0; transform: translateY(6px); }
|
|
616
|
+
to { opacity: 1; transform: translateY(0); }
|
|
617
|
+
}
|
|
618
|
+
.message.manager {
|
|
619
|
+
justify-items: end;
|
|
620
|
+
padding-left: 24%;
|
|
621
|
+
}
|
|
622
|
+
.message.employee {
|
|
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;
|
|
667
|
+
}
|
|
668
|
+
.message .who {
|
|
669
|
+
font-size: 11px;
|
|
670
|
+
font-weight: 700;
|
|
671
|
+
text-transform: uppercase;
|
|
672
|
+
letter-spacing: 0.08em;
|
|
673
|
+
color: var(--muted);
|
|
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);
|
|
704
|
+
}
|
|
466
705
|
|
|
467
706
|
/* Inline artifact pill that sits in the .conv-header next to the title.
|
|
468
707
|
Compact so it never crowds Coach or Micro-manage. Hover reveals the
|
|
@@ -504,20 +743,26 @@ button { font: inherit; cursor: pointer; }
|
|
|
504
743
|
}
|
|
505
744
|
.artifact-where { display: none; } /* full path lives in tooltip via title attr */
|
|
506
745
|
|
|
507
|
-
.coach textarea {
|
|
508
|
-
width: 100%;
|
|
509
|
-
min-height: 56px;
|
|
510
|
-
max-height: 30vh;
|
|
511
|
-
resize: vertical;
|
|
512
|
-
border: 1px solid var(--line);
|
|
513
|
-
border-radius:
|
|
514
|
-
padding:
|
|
515
|
-
font: inherit;
|
|
516
|
-
color: var(--text);
|
|
517
|
-
background: var(--surface);
|
|
518
|
-
}
|
|
519
|
-
.coach textarea:focus { outline: none; border-color: var(--accent); }
|
|
520
|
-
.coach-actions { display: flex; justify-content: flex-end; margin-top: 10px; }
|
|
746
|
+
.coach textarea {
|
|
747
|
+
width: 100%;
|
|
748
|
+
min-height: 56px;
|
|
749
|
+
max-height: 30vh;
|
|
750
|
+
resize: vertical;
|
|
751
|
+
border: 1px solid var(--line);
|
|
752
|
+
border-radius: 18px;
|
|
753
|
+
padding: 13px 15px;
|
|
754
|
+
font: inherit;
|
|
755
|
+
color: var(--text);
|
|
756
|
+
background: var(--surface);
|
|
757
|
+
}
|
|
758
|
+
.coach textarea:focus { outline: none; border-color: var(--accent); }
|
|
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;
|
|
@@ -743,7 +988,7 @@ button { font: inherit; cursor: pointer; }
|
|
|
743
988
|
.install-status { color: var(--muted); flex: 1; font-size: 12px; }
|
|
744
989
|
button.small { padding: 4px 10px; font-size: 12px; }
|
|
745
990
|
|
|
746
|
-
@media (max-width: 820px) {
|
|
991
|
+
@media (max-width: 820px) {
|
|
747
992
|
/* Single-column reflow — the rigid 100vh layout doesn't make sense at
|
|
748
993
|
mobile width because the rail stacks above the conversation. Let the
|
|
749
994
|
page scroll naturally and bound the messages section to keep the
|
|
@@ -755,11 +1000,27 @@ button.small { padding: 4px 10px; font-size: 12px; }
|
|
|
755
1000
|
.rail { max-height: none; overflow-y: visible; }
|
|
756
1001
|
.conversation { height: auto; min-height: 60vh; overflow: visible; }
|
|
757
1002
|
#active-conv { flex: initial; }
|
|
758
|
-
.conv-stream { flex: initial; }
|
|
759
|
-
.messages { flex: initial; max-height: 60vh; }
|
|
760
|
-
.header { flex-wrap: wrap; }
|
|
761
|
-
.
|
|
762
|
-
}
|
|
1003
|
+
.conv-stream { flex: initial; }
|
|
1004
|
+
.messages { flex: initial; max-height: 60vh; }
|
|
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
|
+
}
|
|
1022
|
+
.popover { width: min(320px, calc(100vw - 60px)); }
|
|
1023
|
+
}
|
|
763
1024
|
|
|
764
1025
|
/* ---------------------------------------------------------------- */
|
|
765
1026
|
/* Issue #347 — Pizza tracker (R1), template picker (R2), totals (R4) */
|
|
@@ -955,31 +1216,67 @@ button.small { padding: 4px 10px; font-size: 12px; }
|
|
|
955
1216
|
/* ── Issue #385: Team roster, Employee selector, Lock badges, Hire notice ── */
|
|
956
1217
|
|
|
957
1218
|
/* Team roster — horizontal chip row above conv list */
|
|
958
|
-
.team-roster {
|
|
959
|
-
display:
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
border
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
1219
|
+
.team-roster {
|
|
1220
|
+
display: grid;
|
|
1221
|
+
gap: 10px;
|
|
1222
|
+
}
|
|
1223
|
+
.roster-chip {
|
|
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;
|
|
1251
|
+
align-items: center;
|
|
1252
|
+
justify-content: center;
|
|
1253
|
+
background: #ffffff;
|
|
1254
|
+
color: var(--accent-strong);
|
|
1255
|
+
font-size: 12px;
|
|
1256
|
+
font-weight: 700;
|
|
1257
|
+
border: 1px solid rgba(31, 67, 125, 0.1);
|
|
1258
|
+
overflow: hidden;
|
|
1259
|
+
}
|
|
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;
|