privateboard 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +120 -0
  3. package/dist/cli.js +10502 -0
  4. package/dist/cli.js.map +1 -0
  5. package/package.json +63 -0
  6. package/public/adjourn-overlay.css +253 -0
  7. package/public/agent-overlay.css +444 -0
  8. package/public/agent-overlay.js +604 -0
  9. package/public/agent-profile.css +3230 -0
  10. package/public/agent-profile.js +3329 -0
  11. package/public/app.js +6629 -0
  12. package/public/auto-hide-scroll.js +90 -0
  13. package/public/avatar-skill.js +793 -0
  14. package/public/avatars/chair.svg +98 -0
  15. package/public/avatars/first-principles.svg +122 -0
  16. package/public/avatars/long-horizon.svg +147 -0
  17. package/public/avatars/open_ai.png +0 -0
  18. package/public/avatars/phenomenologist.svg +130 -0
  19. package/public/avatars/socrates.svg +187 -0
  20. package/public/avatars/user-empathy.svg +117 -0
  21. package/public/avatars/value-investor.svg +117 -0
  22. package/public/favicon.svg +10 -0
  23. package/public/fonts/agent-Italic.woff2 +0 -0
  24. package/public/fonts/human-sans.woff2 +0 -0
  25. package/public/icons.css +103 -0
  26. package/public/models-cache.js +57 -0
  27. package/public/new-agent.css +1359 -0
  28. package/public/new-agent.js +675 -0
  29. package/public/onboarding.css +628 -0
  30. package/public/onboarding.js +782 -0
  31. package/public/prototype-dashboard.html +7596 -0
  32. package/public/report/spines/a16z-thesis.css +1055 -0
  33. package/public/report/spines/anthropic-essay.css +556 -0
  34. package/public/report/spines/boardroom-dark.css +1082 -0
  35. package/public/report/spines/gartner-note.css +538 -0
  36. package/public/report/spines/mckinsey-deck.css +523 -0
  37. package/public/report/spines/openai-paper.css +516 -0
  38. package/public/report.html +1417 -0
  39. package/public/room-settings.css +895 -0
  40. package/public/room-settings.js +1039 -0
  41. package/public/themes.css +338 -0
  42. package/public/user-settings.css +1236 -0
  43. package/public/user-settings.js +1291 -0
@@ -0,0 +1,1359 @@
1
+ /* ═══════════════════════════════════════════
2
+ NEW AGENT OVERLAY
3
+ Triggered from the sidebar's [+ New agent] button.
4
+ Sections: name · description · instruction · model · knowledge
5
+ ═══════════════════════════════════════════ */
6
+
7
+ .new-agent-overlay {
8
+ position: fixed;
9
+ inset: 0;
10
+ background: rgba(0, 0, 0, 0.78);
11
+ -webkit-backdrop-filter: blur(4px);
12
+ backdrop-filter: blur(4px);
13
+ z-index: 920;
14
+ display: none;
15
+ align-items: center;
16
+ justify-content: center;
17
+ padding: 24px;
18
+ overflow: hidden;
19
+ font-family: var(--mono, "Inter", system-ui, sans-serif);
20
+ }
21
+ .new-agent-overlay.open {
22
+ display: flex;
23
+ animation: na-fade 0.14s ease-out;
24
+ }
25
+ @keyframes na-fade { from { opacity: 0; } to { opacity: 1; } }
26
+
27
+ .new-agent-modal {
28
+ position: relative;
29
+ width: 100%;
30
+ max-width: 600px;
31
+ max-height: calc(100vh - 48px);
32
+ margin: auto;
33
+ background: var(--panel, #131312);
34
+ border: 0.5px solid var(--line-strong, #3A3A35);
35
+ color: var(--text, #C8C5BE);
36
+ display: flex;
37
+ flex-direction: column;
38
+ min-height: 0;
39
+ animation: na-rise 0.18s ease-out;
40
+ }
41
+ @keyframes na-rise {
42
+ from { transform: translateY(10px); opacity: 0; }
43
+ to { transform: translateY(0); opacity: 1; }
44
+ }
45
+ /* Lime corner brackets · TL + BR. Match room-settings overlay's
46
+ .room-settings-modal::before / ::after — this is the global modal
47
+ chrome, not a left-colored-border emphasis (which is the pattern
48
+ the user wants to avoid). */
49
+ .new-agent-modal::before,
50
+ .new-agent-modal::after {
51
+ content: "";
52
+ position: absolute;
53
+ width: 14px;
54
+ height: 14px;
55
+ border: 2px solid var(--lime, #6FB572);
56
+ pointer-events: none;
57
+ }
58
+ .new-agent-modal::before { top: -1px; left: -1px; border-right: none; border-bottom: none; }
59
+ .new-agent-modal::after { bottom: -1px; right: -1px; border-left: none; border-top: none; }
60
+
61
+ .new-agent-modal > .na-classification,
62
+ .new-agent-modal > .na-head,
63
+ .new-agent-modal > .na-foot {
64
+ flex: 0 0 auto;
65
+ }
66
+ .new-agent-modal > .na-body {
67
+ flex: 1 1 auto;
68
+ min-height: 0;
69
+ overflow-y: auto;
70
+ }
71
+
72
+ /* Classification + header · faithful match to room-settings overlay
73
+ (.rs-classification / .rs-head). Same proportions, same colour
74
+ discipline (lime classification, dashed header bottom, lime ▸
75
+ title prefix), different class names because the JSX is na-*. */
76
+ .na-classification {
77
+ background: var(--panel-2, #1A1A18);
78
+ border-bottom: 0.5px solid var(--line-bright, #2A2A26);
79
+ padding: 6px 14px;
80
+ font-family: var(--mono);
81
+ font-size: 9px;
82
+ letter-spacing: 0.2em;
83
+ text-transform: uppercase;
84
+ color: var(--lime, #6FB572);
85
+ display: flex;
86
+ justify-content: space-between;
87
+ align-items: center;
88
+ }
89
+ .na-classification .dot { color: var(--lime, #6FB572); margin-right: 4px; }
90
+ .na-classification .right {
91
+ color: var(--text-faint, #3A382F);
92
+ letter-spacing: 0.12em;
93
+ }
94
+
95
+ .na-head {
96
+ display: grid;
97
+ grid-template-columns: 1fr auto;
98
+ gap: 14px;
99
+ align-items: start;
100
+ padding: 16px 18px 14px;
101
+ border-bottom: 0.5px dashed var(--line-bright, #2A2A26);
102
+ }
103
+ .na-head > div { min-width: 0; }
104
+ .na-head .na-step-num {
105
+ font-family: var(--mono);
106
+ font-size: 9.5px;
107
+ color: var(--text-dim, #5C5A52);
108
+ text-transform: uppercase;
109
+ letter-spacing: 0.12em;
110
+ margin-bottom: 6px;
111
+ }
112
+ .na-head .na-step-num .hl {
113
+ color: var(--lime, #6FB572);
114
+ font-weight: 700;
115
+ }
116
+ .na-head .na-step-title {
117
+ font-family: var(--font-human, "Inter", sans-serif);
118
+ font-size: 15px;
119
+ font-weight: 700;
120
+ color: var(--text, #C8C5BE);
121
+ letter-spacing: -0.01em;
122
+ line-height: 1.3;
123
+ }
124
+ .na-head .na-step-title::before {
125
+ content: "▸ ";
126
+ color: var(--lime, #6FB572);
127
+ }
128
+ .na-head .na-step-title em {
129
+ font-style: italic;
130
+ color: var(--lime, #6FB572);
131
+ }
132
+ .na-head .na-close {
133
+ width: 28px; height: 28px;
134
+ background: transparent;
135
+ border: 0.5px solid var(--line-bright, #2A2A26);
136
+ color: var(--text-dim, #5C5A52);
137
+ font-size: 14px;
138
+ line-height: 1;
139
+ cursor: pointer;
140
+ font-family: var(--mono);
141
+ display: inline-flex;
142
+ align-items: center;
143
+ justify-content: center;
144
+ transition: color 0.12s, border-color 0.12s;
145
+ flex-shrink: 0;
146
+ }
147
+ .na-head .na-close:hover {
148
+ border-color: var(--lime, #6FB572);
149
+ color: var(--lime, #6FB572);
150
+ }
151
+
152
+ /* Body */
153
+ .na-body { padding: 16px 22px 12px; }
154
+
155
+ .na-section { margin-bottom: 18px; }
156
+ .na-section:last-child { margin-bottom: 0; }
157
+ .na-section-head {
158
+ display: flex;
159
+ align-items: baseline;
160
+ justify-content: space-between;
161
+ gap: 8px;
162
+ margin-bottom: 7px;
163
+ }
164
+ .na-section-label {
165
+ font-family: var(--mono);
166
+ font-size: 9.5px;
167
+ font-weight: 700;
168
+ text-transform: uppercase;
169
+ letter-spacing: 0.16em;
170
+ color: var(--lime, #6FB572);
171
+ }
172
+ .na-section-label::before { content: "[ "; color: var(--text-dim, #5C5A52); }
173
+ .na-section-label::after { content: " ]"; color: var(--text-dim, #5C5A52); }
174
+ .na-section-hint {
175
+ font-family: var(--font-human);
176
+ font-size: 11px;
177
+ color: var(--text-faint, #3A382F);
178
+ letter-spacing: -0.003em;
179
+ }
180
+ .na-section-hint .opt {
181
+ color: var(--text-dim, #5C5A52);
182
+ margin-left: 4px;
183
+ }
184
+
185
+ /* Inputs */
186
+ .na-input-wrap, .na-textarea-wrap {
187
+ border: 0.5px solid var(--line-strong, #3A3A35);
188
+ background: var(--bg, #0A0A0A);
189
+ transition: border-color 0.12s;
190
+ display: flex;
191
+ align-items: stretch;
192
+ }
193
+ .na-input-wrap:focus-within, .na-textarea-wrap:focus-within {
194
+ border-color: var(--lime, #6FB572);
195
+ }
196
+ .na-input-wrap::before, .na-textarea-wrap::before {
197
+ content: ">";
198
+ color: var(--lime, #6FB572);
199
+ font-weight: 700;
200
+ font-size: 12px;
201
+ font-family: var(--mono);
202
+ padding: 7px 0 0 10px;
203
+ align-self: flex-start;
204
+ }
205
+ .na-input-wrap input,
206
+ .na-textarea-wrap textarea {
207
+ flex: 1;
208
+ border: none;
209
+ background: transparent;
210
+ font-family: var(--font-human);
211
+ font-size: 13.5px;
212
+ line-height: 1.55;
213
+ color: var(--text, #C8C5BE);
214
+ outline: none;
215
+ padding: 7px 12px;
216
+ letter-spacing: -0.003em;
217
+ }
218
+ .na-input-wrap input::placeholder,
219
+ .na-textarea-wrap textarea::placeholder {
220
+ color: var(--text-faint, #3A382F);
221
+ }
222
+ .na-textarea-wrap textarea {
223
+ resize: vertical;
224
+ min-height: 52px;
225
+ }
226
+ .na-textarea-wrap.tall textarea { min-height: 110px; }
227
+
228
+ .na-input-meta {
229
+ display: flex;
230
+ justify-content: space-between;
231
+ margin-top: 5px;
232
+ font-family: var(--mono);
233
+ font-size: 9.5px;
234
+ color: var(--text-faint, #3A382F);
235
+ letter-spacing: 0.06em;
236
+ text-transform: uppercase;
237
+ }
238
+ .na-input-meta .accent { color: var(--lime, #6FB572); }
239
+ .na-input-meta .handle { color: var(--text-soft, #8E8B83); }
240
+
241
+ /* Avatar picker — 8-bit portrait + regenerate button */
242
+ .na-avatar-row {
243
+ display: grid;
244
+ grid-template-columns: auto 1fr;
245
+ gap: 14px;
246
+ align-items: center;
247
+ }
248
+ .na-avatar-frame {
249
+ width: 80px; height: 80px;
250
+ border: 0.5px solid var(--line-strong, #3A3A35);
251
+ background: var(--bg, #0A0A0A);
252
+ padding: 4px;
253
+ display: grid;
254
+ place-items: center;
255
+ position: relative;
256
+ }
257
+ .na-avatar-frame::before, .na-avatar-frame::after {
258
+ content: "";
259
+ position: absolute;
260
+ width: 6px; height: 6px;
261
+ border: 0.5px solid var(--lime, #6FB572);
262
+ pointer-events: none;
263
+ }
264
+ .na-avatar-frame::before { top: -1px; left: -1px; border-right: none; border-bottom: none; }
265
+ .na-avatar-frame::after { bottom: -1px; right: -1px; border-left: none; border-top: none; }
266
+ .na-avatar-frame.placeholder::before,
267
+ .na-avatar-frame.placeholder::after {
268
+ border-color: var(--line-strong, #3A3A35);
269
+ }
270
+ .na-avatar-frame svg {
271
+ width: 100%; height: 100%;
272
+ image-rendering: pixelated;
273
+ image-rendering: -moz-crisp-edges;
274
+ display: block;
275
+ }
276
+ .na-avatar-actions {
277
+ display: flex;
278
+ flex-direction: column;
279
+ gap: 6px;
280
+ align-items: flex-start;
281
+ min-width: 0;
282
+ }
283
+ .na-avatar-regen {
284
+ display: inline-flex;
285
+ align-items: center;
286
+ gap: 7px;
287
+ padding: 6px 11px;
288
+ border: 0.5px solid var(--line-strong, #3A3A35);
289
+ background: var(--panel-2, #1A1A18);
290
+ font-family: var(--mono);
291
+ font-size: 10px;
292
+ font-weight: 700;
293
+ text-transform: uppercase;
294
+ letter-spacing: 0.1em;
295
+ color: var(--text-soft, #8E8B83);
296
+ text-decoration: none;
297
+ cursor: pointer;
298
+ transition: all 0.12s;
299
+ }
300
+ .na-avatar-regen:hover {
301
+ border-color: var(--lime, #6FB572);
302
+ color: var(--lime, #6FB572);
303
+ }
304
+ .na-avatar-regen .icon {
305
+ font-family: var(--mono);
306
+ font-size: 13px;
307
+ font-weight: 400;
308
+ line-height: 1;
309
+ }
310
+ .na-avatar-regen:hover .icon {
311
+ animation: na-spin 0.6s ease-out;
312
+ }
313
+ @keyframes na-spin { from { transform: rotate(0); } to { transform: rotate(360deg); } }
314
+ .na-avatar-meta {
315
+ font-family: var(--mono);
316
+ font-size: 9.5px;
317
+ color: var(--text-faint, #3A382F);
318
+ letter-spacing: 0.06em;
319
+ text-transform: uppercase;
320
+ }
321
+ .na-avatar-meta-label::after { content: ":"; margin-right: 4px; }
322
+ .na-avatar-seed { color: var(--lime, #6FB572); }
323
+ .na-avatar-roll { color: var(--text-soft, #8E8B83); }
324
+ .na-avatar-hint {
325
+ font-family: var(--font-human);
326
+ font-size: 10.5px;
327
+ color: var(--text-dim, #5C5A52);
328
+ letter-spacing: -0.003em;
329
+ line-height: 1.3;
330
+ }
331
+ .na-avatar-hint .ink { color: var(--text-soft, #8E8B83); }
332
+
333
+ /* Model picker — dropdown selection */
334
+ .na-model-select { position: relative; }
335
+ .na-model-trigger {
336
+ width: 100%;
337
+ display: grid;
338
+ grid-template-columns: 1fr auto;
339
+ gap: 12px;
340
+ align-items: center;
341
+ padding: 10px 12px;
342
+ background: var(--bg, #0A0A0A);
343
+ border: 0.5px solid var(--line-strong, #3A3A35);
344
+ font-family: var(--mono);
345
+ cursor: pointer;
346
+ text-align: left;
347
+ transition: border-color 0.12s;
348
+ }
349
+ .na-model-trigger:hover { border-color: var(--lime-dim, #2D5532); }
350
+ .na-model-select[data-open="true"] .na-model-trigger {
351
+ border-color: var(--lime, #6FB572);
352
+ }
353
+ .na-model-trigger .trigger-l {
354
+ display: inline-flex;
355
+ align-items: baseline;
356
+ gap: 8px;
357
+ min-width: 0;
358
+ }
359
+ .na-model-trigger .trigger-l .mark {
360
+ font-size: 8px;
361
+ color: var(--lime, #6FB572);
362
+ }
363
+ .na-model-trigger .trigger-l .name {
364
+ font-size: 13px;
365
+ font-weight: 700;
366
+ color: var(--text, #C8C5BE);
367
+ letter-spacing: -0.003em;
368
+ white-space: nowrap;
369
+ overflow: hidden;
370
+ text-overflow: ellipsis;
371
+ }
372
+ .na-model-trigger .trigger-r {
373
+ display: inline-flex;
374
+ align-items: baseline;
375
+ gap: 7px;
376
+ font-family: var(--mono);
377
+ font-size: 10.5px;
378
+ color: var(--text-soft, #8E8B83);
379
+ }
380
+ .na-model-trigger .trigger-r .prov {
381
+ font-size: 9.5px;
382
+ font-weight: 700;
383
+ text-transform: uppercase;
384
+ letter-spacing: 0.14em;
385
+ color: var(--text-faint, #3A382F);
386
+ }
387
+ .na-model-trigger .trigger-r .dot { color: var(--text-faint, #3A382F); }
388
+ .na-model-trigger .trigger-r .deck {
389
+ font-family: var(--font-human);
390
+ font-size: 11px;
391
+ letter-spacing: -0.003em;
392
+ color: var(--text-soft, #8E8B83);
393
+ }
394
+ .na-model-trigger .chev {
395
+ margin-left: 4px;
396
+ color: var(--text-soft, #8E8B83);
397
+ font-size: 11px;
398
+ display: inline-block;
399
+ transition: transform 0.14s;
400
+ }
401
+ .na-model-select[data-open="true"] .chev {
402
+ transform: rotate(180deg);
403
+ color: var(--lime, #6FB572);
404
+ }
405
+
406
+ .na-model-dropdown {
407
+ display: none;
408
+ position: fixed;
409
+ z-index: 1100;
410
+ background: var(--panel-2, #1A1A18);
411
+ border: 0.5px solid var(--lime, #6FB572);
412
+ padding: 6px 0;
413
+ overflow-y: auto;
414
+ overscroll-behavior: contain;
415
+ box-sizing: border-box;
416
+ scrollbar-width: thin;
417
+ scrollbar-color: var(--lime-dim, #2D5532) var(--panel-2, #1A1A18);
418
+ }
419
+ .na-model-dropdown::-webkit-scrollbar { width: 8px; }
420
+ .na-model-dropdown::-webkit-scrollbar-track { background: var(--panel-2, #1A1A18); }
421
+ .na-model-dropdown::-webkit-scrollbar-thumb {
422
+ background: var(--lime-dim, #2D5532);
423
+ border: 2px solid var(--panel-2, #1A1A18);
424
+ }
425
+ .na-model-dropdown::-webkit-scrollbar-thumb:hover { background: var(--lime, #6FB572); }
426
+ .na-model-select[data-open="true"] .na-model-dropdown {
427
+ display: block;
428
+ animation: na-fade 0.12s ease-out;
429
+ }
430
+ .na-model-grp + .na-model-grp {
431
+ border-top: 0.5px dashed var(--line-bright, #2A2A26);
432
+ margin-top: 4px;
433
+ padding-top: 4px;
434
+ }
435
+ .na-model-grp-label {
436
+ font-family: var(--mono);
437
+ font-size: 9px;
438
+ font-weight: 700;
439
+ text-transform: uppercase;
440
+ letter-spacing: 0.18em;
441
+ color: var(--text-faint, #3A382F);
442
+ padding: 4px 14px 3px;
443
+ display: flex;
444
+ align-items: baseline;
445
+ gap: 6px;
446
+ }
447
+ .na-model-grp-status {
448
+ font-family: var(--mono);
449
+ font-size: 8.5px;
450
+ font-weight: 400;
451
+ letter-spacing: 0.1em;
452
+ text-transform: uppercase;
453
+ }
454
+ .na-model-grp-status.direct { color: var(--lime, #6FB572); }
455
+ .na-model-grp-status.via { color: var(--amber, #B59560); }
456
+ .na-model-grp-status.none { color: var(--text-faint, #3A382F); }
457
+ .na-model-opt {
458
+ display: grid;
459
+ grid-template-columns: 14px 1fr auto;
460
+ gap: 10px;
461
+ align-items: baseline;
462
+ padding: 7px 14px;
463
+ font-family: var(--mono);
464
+ text-decoration: none;
465
+ cursor: pointer;
466
+ transition: background 0.1s;
467
+ }
468
+ .na-model-opt .mark {
469
+ color: var(--lime, #6FB572);
470
+ font-size: 8px;
471
+ visibility: hidden;
472
+ text-align: center;
473
+ }
474
+ .na-model-opt .name {
475
+ font-size: 12px;
476
+ font-weight: 700;
477
+ color: var(--text-soft, #8E8B83);
478
+ letter-spacing: -0.003em;
479
+ }
480
+ .na-model-opt .deck {
481
+ font-family: var(--font-human);
482
+ font-size: 10.5px;
483
+ color: var(--text-dim, #5C5A52);
484
+ letter-spacing: -0.003em;
485
+ }
486
+ .na-model-opt:hover {
487
+ background: rgba(111, 181, 114, 0.05);
488
+ }
489
+ .na-model-opt:hover .name { color: var(--text, #C8C5BE); }
490
+ .na-model-opt.active {
491
+ background: rgba(111, 181, 114, 0.07);
492
+ }
493
+ .na-model-opt.active .mark { visibility: visible; }
494
+ .na-model-opt.active .name { color: var(--lime, #6FB572); }
495
+ .na-model-opt.active .deck { color: var(--text-soft, #8E8B83); }
496
+
497
+ /* Knowledge upload */
498
+ .na-know-drop {
499
+ display: grid;
500
+ grid-template-columns: auto 1fr auto;
501
+ gap: 14px;
502
+ align-items: center;
503
+ padding: 14px 16px;
504
+ background: var(--bg, #0A0A0A);
505
+ border: 0.5px dashed var(--line-strong, #3A3A35);
506
+ cursor: pointer;
507
+ transition: all 0.12s;
508
+ text-decoration: none;
509
+ color: inherit;
510
+ }
511
+ .na-know-drop:hover {
512
+ border-color: var(--lime, #6FB572);
513
+ border-style: solid;
514
+ background: linear-gradient(135deg, var(--bg) 0%, rgba(111, 181, 114, 0.04) 100%);
515
+ }
516
+ .na-know-drop .icon {
517
+ width: 32px;
518
+ height: 32px;
519
+ border: 0.5px solid var(--line-strong, #3A3A35);
520
+ display: flex;
521
+ align-items: center;
522
+ justify-content: center;
523
+ font-family: var(--mono);
524
+ font-size: 16px;
525
+ color: var(--text-dim, #5C5A52);
526
+ font-weight: 400;
527
+ }
528
+ .na-know-drop:hover .icon { border-color: var(--lime); color: var(--lime); }
529
+ .na-know-drop .title {
530
+ font-family: var(--mono);
531
+ font-size: 11.5px;
532
+ color: var(--text, #C8C5BE);
533
+ font-weight: 700;
534
+ letter-spacing: -0.003em;
535
+ }
536
+ .na-know-drop .deck {
537
+ font-family: var(--font-human);
538
+ font-size: 10.5px;
539
+ color: var(--text-dim, #5C5A52);
540
+ margin-top: 2px;
541
+ letter-spacing: -0.003em;
542
+ }
543
+ .na-know-drop .pill {
544
+ font-family: var(--mono);
545
+ font-size: 9.5px;
546
+ font-weight: 700;
547
+ text-transform: uppercase;
548
+ letter-spacing: 0.1em;
549
+ padding: 4px 9px;
550
+ border: 0.5px solid var(--line-strong, #3A3A35);
551
+ color: var(--text-soft, #8E8B83);
552
+ background: var(--panel-2, #1A1A18);
553
+ white-space: nowrap;
554
+ }
555
+ .na-know-drop:hover .pill {
556
+ border-color: var(--lime); color: var(--lime);
557
+ }
558
+
559
+ .na-know-list {
560
+ margin-top: 8px;
561
+ display: flex;
562
+ flex-direction: column;
563
+ gap: 4px;
564
+ }
565
+ .na-know-item {
566
+ display: grid;
567
+ grid-template-columns: auto 1fr auto;
568
+ gap: 10px;
569
+ align-items: center;
570
+ padding: 7px 10px;
571
+ background: var(--panel-2, #1A1A18);
572
+ border: 0.5px solid var(--line-bright, #2A2A26);
573
+ font-family: var(--mono);
574
+ font-size: 11px;
575
+ }
576
+ .na-know-item .ext {
577
+ width: 28px; height: 22px;
578
+ display: flex; align-items: center; justify-content: center;
579
+ font-size: 8.5px; font-weight: 700;
580
+ text-transform: uppercase;
581
+ border: 0.5px solid var(--line-strong);
582
+ background: var(--bg);
583
+ color: var(--text-soft);
584
+ }
585
+ .na-know-item .ext[data-type="pdf"] { color: var(--red); border-color: rgba(181,112,106,0.5); }
586
+ .na-know-item .ext[data-type="md"] { color: var(--lime); border-color: var(--lime-dim); }
587
+ .na-know-item .ext[data-type="doc"] { color: var(--cyan); border-color: rgba(106,155,151,0.5); }
588
+ .na-know-item .name {
589
+ color: var(--text);
590
+ font-weight: 700;
591
+ letter-spacing: -0.003em;
592
+ white-space: nowrap;
593
+ overflow: hidden;
594
+ text-overflow: ellipsis;
595
+ }
596
+ .na-know-item .size {
597
+ color: var(--text-faint);
598
+ letter-spacing: 0.04em;
599
+ }
600
+ .na-know-item .remove {
601
+ font-family: var(--mono);
602
+ font-size: 11px;
603
+ color: var(--text-faint);
604
+ background: transparent;
605
+ border: none;
606
+ cursor: pointer;
607
+ padding: 0 4px;
608
+ }
609
+ .na-know-item .remove:hover { color: var(--red); }
610
+
611
+ /* Footer · padding aligned with the head's horizontal scale (22px) so
612
+ the modal's left/right edges feel like one ruled column. */
613
+ .na-foot {
614
+ border-top: 0.5px solid var(--line, #1f1f1c);
615
+ padding: 10px 22px;
616
+ background: var(--panel-2, #1A1A18);
617
+ display: flex;
618
+ justify-content: space-between;
619
+ align-items: center;
620
+ gap: 10px;
621
+ }
622
+ .na-foot .summary {
623
+ font-family: var(--mono);
624
+ font-size: 10px;
625
+ color: var(--text-faint, #3A382F);
626
+ letter-spacing: 0.06em;
627
+ }
628
+ .na-foot .summary .v { color: var(--text-soft, #8E8B83); }
629
+ .na-foot-actions { display: flex; gap: 6px; }
630
+ .na-foot .btn {
631
+ font-family: var(--mono);
632
+ font-size: 10px;
633
+ font-weight: 700;
634
+ text-transform: uppercase;
635
+ letter-spacing: 0.1em;
636
+ padding: 7px 13px;
637
+ border: 0.5px solid var(--line-strong, #3A3A35);
638
+ background: transparent;
639
+ color: var(--text-soft, #8E8B83);
640
+ cursor: pointer;
641
+ text-decoration: none;
642
+ transition: all 0.12s;
643
+ }
644
+ .na-foot .btn:hover { border-color: var(--lime, #6FB572); color: var(--lime, #6FB572); }
645
+ .na-foot .btn.primary {
646
+ background: var(--lime, #6FB572);
647
+ border-color: var(--lime, #6FB572);
648
+ color: var(--bg, #0A0A0A);
649
+ }
650
+ .na-foot .btn.primary:hover {
651
+ background: transparent; color: var(--lime, #6FB572);
652
+ }
653
+ .na-foot .btn:disabled,
654
+ .na-foot .btn.primary:disabled {
655
+ opacity: 0.45;
656
+ cursor: not-allowed;
657
+ background: transparent;
658
+ color: var(--text-faint);
659
+ border-color: var(--line-bright);
660
+ }
661
+
662
+ @media (max-width: 600px) {
663
+ .new-agent-overlay { padding: 12px; }
664
+ .na-head { padding: 12px 14px; }
665
+ .na-body { padding: 14px 14px 10px; }
666
+ .na-foot { padding: 10px 14px; flex-direction: column-reverse; align-items: stretch; }
667
+ .na-foot .summary { text-align: center; }
668
+ .na-foot-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
669
+ .na-avatar-row { grid-template-columns: 1fr; }
670
+ .na-model-trigger { grid-template-columns: 1fr; gap: 4px; }
671
+ .na-model-trigger .trigger-r { flex-wrap: wrap; }
672
+ }
673
+
674
+
675
+ /* ═══════════════════════════════════════════
676
+ NEW AGENT · LEGACY GAME-CARD OVERRIDES
677
+ ─────────────────────────────────────────────
678
+ This block remained from when the new-agent overlay tried to reuse
679
+ the .ap-card chrome from agent-profile.css. The current JSX uses
680
+ .new-agent-modal (top of file), not .ap-card — but the .ap-card
681
+ rules here still apply where any inner element happens to use
682
+ them (e.g. ap-id, ap-id-handle in the legacy fields). The overlay-
683
+ level override that conflicted with the canonical declaration up
684
+ top has been removed; the global modal chrome (centered, blurred
685
+ backdrop, lime corner brackets, z-index 920) lives at line 7.
686
+ ═══════════════════════════════════════════ */
687
+
688
+ .new-agent-overlay .ap-card {
689
+ width: 100%;
690
+ max-width: 1040px;
691
+ margin: 0 auto;
692
+ max-height: calc(100vh - 48px);
693
+ }
694
+
695
+ /* Body becomes scrollable inside the modal so the header + footer stay
696
+ pinned when the form gets long. */
697
+ .new-agent-overlay .ap-card-body {
698
+ overflow-y: auto;
699
+ flex: 1 1 auto;
700
+ min-height: 0;
701
+ }
702
+
703
+ /* Identity inputs in the left column (override the card's .ap-id which
704
+ was designed for read-only text). */
705
+ .new-agent-overlay .ap-id { gap: 6px; }
706
+ .new-agent-overlay .ap-id .na-name-wrap {
707
+ width: 100%;
708
+ background: var(--bg);
709
+ border: 0.5px solid var(--line-strong);
710
+ padding: 0 10px;
711
+ transition: border-color 0.12s;
712
+ }
713
+ .new-agent-overlay .ap-id .na-name-wrap:focus-within { border-color: var(--lime); }
714
+ .new-agent-overlay .na-name-input {
715
+ width: 100%;
716
+ border: none;
717
+ background: transparent;
718
+ padding: 8px 0;
719
+ font-family: var(--font-human);
720
+ font-size: 16px;
721
+ font-weight: 700;
722
+ color: var(--text);
723
+ text-align: center;
724
+ outline: none;
725
+ }
726
+ .new-agent-overlay .na-name-input::placeholder { color: var(--text-faint); }
727
+ .new-agent-overlay .ap-id-handle {
728
+ font-family: var(--mono);
729
+ font-size: 11px;
730
+ color: var(--text-faint);
731
+ }
732
+ .new-agent-overlay .ap-id-handle .na-handle-preview { color: var(--lime); font-weight: 700; }
733
+ .new-agent-overlay .na-name-meta {
734
+ display: flex;
735
+ align-items: center;
736
+ justify-content: space-between;
737
+ gap: 8px;
738
+ font-family: var(--mono);
739
+ font-size: 9.5px;
740
+ color: var(--text-faint);
741
+ letter-spacing: 0.04em;
742
+ text-transform: uppercase;
743
+ }
744
+ .new-agent-overlay .na-avatar-regen {
745
+ color: var(--text-soft);
746
+ text-decoration: none;
747
+ border-bottom: 0.5px dashed var(--line-bright);
748
+ cursor: pointer;
749
+ transition: color 0.12s, border-color 0.12s;
750
+ }
751
+ .new-agent-overlay .na-avatar-regen:hover {
752
+ color: var(--lime);
753
+ border-color: var(--lime);
754
+ }
755
+
756
+ /* Avatar frame – the generated SVG sits inside .ap-portrait, so the
757
+ na-avatar-frame is just the inner wrapper. */
758
+ .new-agent-overlay .na-avatar-frame {
759
+ width: 100%; height: 100%;
760
+ display: flex;
761
+ align-items: center;
762
+ justify-content: center;
763
+ }
764
+ .new-agent-overlay .na-avatar-frame svg {
765
+ width: 80%; height: 80%;
766
+ }
767
+
768
+ /* Textareas + input wrappers inside the .ap-sec slots. */
769
+ .new-agent-overlay .ap-sec .na-textarea-wrap {
770
+ background: var(--bg);
771
+ border: 0.5px solid var(--line-strong);
772
+ padding: 8px 10px;
773
+ transition: border-color 0.12s;
774
+ }
775
+ .new-agent-overlay .ap-sec .na-textarea-wrap:focus-within { border-color: var(--lime); }
776
+ .new-agent-overlay .ap-sec textarea {
777
+ width: 100%;
778
+ border: none;
779
+ background: transparent;
780
+ font-family: var(--font-human);
781
+ font-size: 13px;
782
+ line-height: 1.5;
783
+ color: var(--text);
784
+ outline: none;
785
+ resize: vertical;
786
+ min-height: 60px;
787
+ }
788
+ .new-agent-overlay .ap-sec .na-textarea-wrap.tall textarea { min-height: 130px; }
789
+ .new-agent-overlay .ap-sec textarea::placeholder { color: var(--text-faint); white-space: pre-line; }
790
+ .new-agent-overlay .ap-sec .na-input-meta {
791
+ display: flex;
792
+ justify-content: space-between;
793
+ font-family: var(--mono);
794
+ font-size: 9.5px;
795
+ color: var(--text-faint);
796
+ letter-spacing: 0.04em;
797
+ text-transform: uppercase;
798
+ }
799
+ .new-agent-overlay .ap-sec .na-desc-count,
800
+ .new-agent-overlay .ap-sec .na-instr-count,
801
+ .new-agent-overlay .ap-sec .na-name-count { color: var(--lime); font-weight: 700; }
802
+
803
+ /* Knowledge upload zone fits inside the equipment slot. */
804
+ .new-agent-overlay .ap-sec .na-know-drop {
805
+ display: flex;
806
+ align-items: center;
807
+ gap: 10px;
808
+ padding: 10px 12px;
809
+ background: var(--bg);
810
+ border: 0.5px dashed var(--line-strong);
811
+ color: var(--text-soft);
812
+ font-family: var(--font-human);
813
+ font-size: 12px;
814
+ text-decoration: none;
815
+ cursor: pointer;
816
+ transition: all 0.12s;
817
+ }
818
+ .new-agent-overlay .ap-sec .na-know-drop:hover {
819
+ border-color: var(--lime);
820
+ color: var(--lime);
821
+ }
822
+ .new-agent-overlay .ap-sec .na-know-drop .icon {
823
+ width: 28px; height: 28px;
824
+ border: 0.5px solid currentColor;
825
+ display: flex;
826
+ align-items: center;
827
+ justify-content: center;
828
+ font-family: var(--mono);
829
+ font-size: 16px;
830
+ }
831
+ .new-agent-overlay .ap-sec .na-know-drop .title { font-weight: 700; }
832
+ .new-agent-overlay .ap-sec .na-know-drop .deck {
833
+ font-family: var(--mono);
834
+ font-size: 9.5px;
835
+ letter-spacing: 0.04em;
836
+ color: var(--text-faint);
837
+ text-transform: uppercase;
838
+ }
839
+
840
+ /* Footer · Cancel ghost + Deploy primary. */
841
+ .new-agent-overlay .na-foot-actions {
842
+ display: flex;
843
+ gap: 8px;
844
+ }
845
+ .new-agent-overlay .ap-cta-ghost {
846
+ background: transparent;
847
+ border: 0.5px solid var(--line-strong);
848
+ color: var(--text-soft);
849
+ padding: 10px 16px;
850
+ font-family: var(--mono);
851
+ font-size: 11px;
852
+ font-weight: 700;
853
+ letter-spacing: 0.18em;
854
+ text-transform: uppercase;
855
+ cursor: pointer;
856
+ transition: all 0.12s;
857
+ }
858
+ .new-agent-overlay .ap-cta-ghost:hover {
859
+ border-color: var(--text);
860
+ color: var(--text);
861
+ }
862
+ .new-agent-overlay .ap-cta[disabled] {
863
+ opacity: 0.4;
864
+ cursor: not-allowed;
865
+ pointer-events: none;
866
+ }
867
+
868
+ /* (Previously hid .na-classification + .na-head when the overlay used
869
+ the .ap-card chrome. The overlay now uses .new-agent-modal directly
870
+ and these elements ARE the chrome — must not be hidden.) */
871
+
872
+
873
+ /* ═══════════════════════════════════════════
874
+ RULES section
875
+ ═══════════════════════════════════════════ */
876
+ .new-agent-overlay .na-rules-list {
877
+ list-style: none;
878
+ margin: 0;
879
+ padding: 0;
880
+ display: flex;
881
+ flex-direction: column;
882
+ gap: 6px;
883
+ }
884
+ .new-agent-overlay .na-rule {
885
+ display: grid;
886
+ grid-template-columns: 22px 1fr 24px;
887
+ align-items: center;
888
+ gap: 8px;
889
+ padding: 5px 8px;
890
+ background: var(--bg);
891
+ border: 0.5px solid var(--line-strong);
892
+ }
893
+ .new-agent-overlay .na-rule:focus-within { border-color: var(--lime); }
894
+ .new-agent-overlay .na-rule-num {
895
+ font-family: var(--mono);
896
+ font-size: 10.5px;
897
+ font-weight: 700;
898
+ color: var(--lime);
899
+ text-align: center;
900
+ }
901
+ .new-agent-overlay .na-rule-input {
902
+ border: none;
903
+ background: transparent;
904
+ outline: none;
905
+ font-family: var(--font-human);
906
+ font-size: 12.5px;
907
+ color: var(--text);
908
+ padding: 5px 0;
909
+ }
910
+ .new-agent-overlay .na-rule-input::placeholder { color: var(--text-faint); }
911
+ .new-agent-overlay .na-rule-rm {
912
+ background: transparent;
913
+ border: 0.5px solid transparent;
914
+ color: var(--text-faint);
915
+ cursor: pointer;
916
+ font-family: var(--mono);
917
+ font-size: 11px;
918
+ width: 22px; height: 22px;
919
+ display: flex;
920
+ align-items: center;
921
+ justify-content: center;
922
+ transition: all 0.12s;
923
+ }
924
+ .new-agent-overlay .na-rule-rm:hover { color: var(--red); border-color: var(--red); }
925
+ .new-agent-overlay .na-rule-empty {
926
+ font-family: var(--mono);
927
+ font-size: 11px;
928
+ color: var(--text-faint);
929
+ letter-spacing: 0.08em;
930
+ text-transform: uppercase;
931
+ padding: 8px 10px;
932
+ border: 0.5px dashed var(--line-bright);
933
+ text-align: center;
934
+ }
935
+ .new-agent-overlay .na-rule-add {
936
+ display: inline-flex;
937
+ align-items: center;
938
+ gap: 6px;
939
+ background: transparent;
940
+ border: 0.5px dashed var(--line-strong);
941
+ color: var(--text-soft);
942
+ padding: 6px 12px;
943
+ font-family: var(--mono);
944
+ font-size: 10.5px;
945
+ font-weight: 700;
946
+ letter-spacing: 0.14em;
947
+ text-transform: uppercase;
948
+ cursor: pointer;
949
+ transition: all 0.12s;
950
+ margin-top: 6px;
951
+ align-self: flex-start;
952
+ }
953
+ .new-agent-overlay .na-rule-add .plus { color: var(--lime); font-size: 13px; line-height: 1; }
954
+ .new-agent-overlay .na-rule-add:hover { border-color: var(--lime); color: var(--lime); border-style: solid; }
955
+ .new-agent-overlay .na-rule-add[disabled],
956
+ .new-agent-overlay .na-rule-add.at-cap {
957
+ opacity: 0.4;
958
+ pointer-events: none;
959
+ }
960
+
961
+ /* ═══════════════════════════════════════════
962
+ SKILLS slot grid
963
+ ─────────────────────────────────────────────
964
+ Inventory-style 4×2 grid of installable abilities.
965
+ Empty slots are dashed; filled slots show the
966
+ ability's icon + short name.
967
+ ═══════════════════════════════════════════ */
968
+ .new-agent-overlay .na-skill-grid {
969
+ display: grid;
970
+ grid-template-columns: repeat(4, 1fr);
971
+ gap: 8px;
972
+ }
973
+ .new-agent-overlay .na-skill-slot {
974
+ aspect-ratio: 1;
975
+ background: var(--bg);
976
+ border: 0.5px dashed var(--line-bright);
977
+ color: var(--text-faint);
978
+ display: flex;
979
+ flex-direction: column;
980
+ align-items: center;
981
+ justify-content: center;
982
+ gap: 4px;
983
+ font-family: var(--mono);
984
+ cursor: pointer;
985
+ transition: all 0.12s;
986
+ position: relative;
987
+ padding: 4px;
988
+ }
989
+ .new-agent-overlay .na-skill-slot.empty:hover {
990
+ border-color: var(--lime);
991
+ color: var(--lime);
992
+ }
993
+ .new-agent-overlay .na-skill-slot.filled {
994
+ border-style: solid;
995
+ border-color: var(--lime-dim);
996
+ background: var(--panel-3);
997
+ color: var(--lime);
998
+ }
999
+ .new-agent-overlay .na-skill-slot.filled:hover {
1000
+ border-color: var(--red);
1001
+ color: var(--red);
1002
+ }
1003
+ .new-agent-overlay .na-skill-icon {
1004
+ font-size: 22px;
1005
+ line-height: 1;
1006
+ }
1007
+ .new-agent-overlay .na-skill-slot.empty .na-skill-icon { font-size: 18px; }
1008
+ .new-agent-overlay .na-skill-name {
1009
+ font-family: var(--mono);
1010
+ font-size: 8.5px;
1011
+ font-weight: 700;
1012
+ letter-spacing: 0.08em;
1013
+ text-transform: uppercase;
1014
+ text-align: center;
1015
+ white-space: nowrap;
1016
+ overflow: hidden;
1017
+ text-overflow: ellipsis;
1018
+ max-width: 100%;
1019
+ }
1020
+ .new-agent-overlay .na-skill-slot.empty .na-skill-name { color: var(--text-faint); }
1021
+
1022
+ /* Skill picker popover · floats over the modal so it can extend past
1023
+ the modal boundary if needed. */
1024
+ .na-skill-picker {
1025
+ position: fixed;
1026
+ z-index: 9100;
1027
+ min-width: 260px;
1028
+ max-width: 320px;
1029
+ max-height: 320px;
1030
+ overflow-y: auto;
1031
+ background: var(--panel-2, #1A1A18);
1032
+ border: 0.5px solid var(--line-bright, #2A2A26);
1033
+ display: flex;
1034
+ flex-direction: column;
1035
+ }
1036
+ .na-skill-pick {
1037
+ display: flex;
1038
+ align-items: center;
1039
+ gap: 12px;
1040
+ padding: 10px 12px;
1041
+ background: transparent;
1042
+ border: none;
1043
+ border-bottom: 0.5px solid var(--line-bright, #2A2A26);
1044
+ color: var(--text, #C8C5BE);
1045
+ cursor: pointer;
1046
+ text-align: left;
1047
+ font-family: var(--font-human);
1048
+ transition: background 0.1s;
1049
+ }
1050
+ .na-skill-pick:last-child { border-bottom: none; }
1051
+ .na-skill-pick:hover { background: var(--panel-3, #21211E); }
1052
+ .na-skill-pick-icon {
1053
+ width: 28px; height: 28px;
1054
+ border: 0.5px solid var(--line-bright, #2A2A26);
1055
+ background: var(--bg, #0A0A0A);
1056
+ color: var(--text, #C8C5BE);
1057
+ display: flex;
1058
+ align-items: center;
1059
+ justify-content: center;
1060
+ font-family: var(--mono);
1061
+ font-size: 16px;
1062
+ flex-shrink: 0;
1063
+ }
1064
+ .na-skill-pick-body {
1065
+ display: flex;
1066
+ flex-direction: column;
1067
+ gap: 1px;
1068
+ min-width: 0;
1069
+ }
1070
+ .na-skill-pick-name {
1071
+ font-size: 12.5px;
1072
+ font-weight: 700;
1073
+ color: var(--text, #C8C5BE);
1074
+ }
1075
+ .na-skill-pick-deck {
1076
+ font-family: var(--mono);
1077
+ font-size: 9.5px;
1078
+ color: var(--text-faint, #5C5A52);
1079
+ letter-spacing: 0.06em;
1080
+ text-transform: uppercase;
1081
+ }
1082
+
1083
+ /* ════════════════════════════════════════════════════════════
1084
+ SLIM FORM (post-redesign) — name + bio + avatar + instruction.
1085
+ The earlier rich form (rules / skills / model / knowledge) is
1086
+ gone; configuration lives in the agent profile after creation.
1087
+ These rules sit under the same .new-agent-modal chrome and
1088
+ layer onto the existing input/textarea/avatar styles.
1089
+ ════════════════════════════════════════════════════════════ */
1090
+
1091
+ /* Modal body padding override (was 18px 22px 14px). */
1092
+ .new-agent-modal > .na-body { padding: 20px 24px 22px; }
1093
+
1094
+ /* Header — title + close. */
1095
+ .na-step-num {
1096
+ font-family: var(--mono);
1097
+ font-size: 9.5px;
1098
+ color: var(--lime);
1099
+ text-transform: uppercase;
1100
+ letter-spacing: 0.16em;
1101
+ font-weight: 700;
1102
+ margin-bottom: 5px;
1103
+ }
1104
+ .na-step-num::before { content: ""; }
1105
+ .na-step-num::after { content: ""; }
1106
+ .na-step-title {
1107
+ font-family: var(--font-human);
1108
+ font-size: 16px;
1109
+ font-weight: 700;
1110
+ color: var(--text);
1111
+ letter-spacing: -0.012em;
1112
+ line-height: 1.2;
1113
+ }
1114
+ .na-step-title em { font-style: normal; color: var(--lime); }
1115
+ .na-close {
1116
+ width: 28px; height: 28px;
1117
+ background: transparent;
1118
+ border: 0.5px solid var(--line-bright);
1119
+ color: var(--text-faint);
1120
+ font-family: var(--mono);
1121
+ font-size: 13px;
1122
+ line-height: 1;
1123
+ cursor: pointer;
1124
+ display: flex;
1125
+ align-items: center;
1126
+ justify-content: center;
1127
+ transition: border-color 0.12s, color 0.12s;
1128
+ }
1129
+ .na-close:hover { border-color: var(--text); color: var(--text); }
1130
+
1131
+ /* Body stack — single column. Avatar block on top, fields below.
1132
+ Removed the old 2-col grid (.na-grid / .na-side) in favour of a
1133
+ simple top-down flow. */
1134
+ .na-stack {
1135
+ display: flex;
1136
+ flex-direction: column;
1137
+ gap: 16px;
1138
+ }
1139
+ .na-avatar-block {
1140
+ display: flex;
1141
+ flex-direction: column;
1142
+ align-items: center;
1143
+ gap: 8px;
1144
+ }
1145
+ .na-portrait {
1146
+ width: 96px;
1147
+ height: 96px;
1148
+ background: var(--bg);
1149
+ border: 0.5px solid var(--line-bright);
1150
+ padding: 4px;
1151
+ position: relative;
1152
+ display: grid;
1153
+ place-items: center;
1154
+ }
1155
+ /* Portrait corner brackets retired · matches the other compact-modal
1156
+ surfaces (no decorative chrome on framed previews). */
1157
+ .na-portrait::before,
1158
+ .na-portrait::after { display: none; }
1159
+ .na-portrait .na-avatar-frame {
1160
+ width: 100%;
1161
+ height: 100%;
1162
+ border: none;
1163
+ background: transparent;
1164
+ padding: 0;
1165
+ }
1166
+ .na-portrait .na-avatar-frame::before,
1167
+ .na-portrait .na-avatar-frame::after { display: none; }
1168
+ /* Avatar regenerate · centered button beneath the portrait. */
1169
+ .new-agent-overlay .na-avatar-regen {
1170
+ display: inline-flex;
1171
+ align-items: center;
1172
+ justify-content: center;
1173
+ gap: 6px;
1174
+ padding: 7px 14px;
1175
+ border: 0.5px solid var(--line-bright);
1176
+ background: transparent;
1177
+ font-family: var(--mono);
1178
+ font-size: 10px;
1179
+ font-weight: 700;
1180
+ text-transform: uppercase;
1181
+ letter-spacing: 0.14em;
1182
+ color: var(--text-soft);
1183
+ text-decoration: none;
1184
+ cursor: pointer;
1185
+ transition: border-color 0.12s, color 0.12s, background 0.12s;
1186
+ }
1187
+ .new-agent-overlay .na-avatar-regen:hover {
1188
+ border-color: var(--lime);
1189
+ color: var(--lime);
1190
+ }
1191
+ .new-agent-overlay .na-avatar-regen:disabled {
1192
+ opacity: 0.6;
1193
+ cursor: progress;
1194
+ }
1195
+ .na-avatar-regen-mark { font-size: 11px; color: var(--lime); line-height: 1; }
1196
+ /* Vibe caption · the LLM's one-line description that seeded the avatar. */
1197
+ .na-avatar-vibe {
1198
+ font-family: var(--mono);
1199
+ font-size: 9.5px;
1200
+ letter-spacing: 0.04em;
1201
+ color: var(--text-faint);
1202
+ text-align: center;
1203
+ max-width: 320px;
1204
+ line-height: 1.4;
1205
+ min-height: 14px;
1206
+ }
1207
+ .na-avatar-vibe:empty { display: none; }
1208
+
1209
+ /* Fields side — stacked field blocks. */
1210
+ .na-fields {
1211
+ display: flex;
1212
+ flex-direction: column;
1213
+ gap: 14px;
1214
+ min-width: 0;
1215
+ }
1216
+ .na-field { display: flex; flex-direction: column; gap: 5px; }
1217
+ .na-field-label {
1218
+ display: flex;
1219
+ align-items: baseline;
1220
+ justify-content: space-between;
1221
+ gap: 8px;
1222
+ font-family: var(--mono);
1223
+ font-size: 10px;
1224
+ font-weight: 700;
1225
+ letter-spacing: 0.18em;
1226
+ text-transform: uppercase;
1227
+ color: var(--lime);
1228
+ }
1229
+ .na-field-label > span:first-child::before { content: "["; color: var(--text-faint); margin-right: 4px; }
1230
+ .na-field-label > span:first-child::after { content: "]"; color: var(--text-faint); margin-left: 4px; }
1231
+ .na-field-meta {
1232
+ font-family: var(--mono);
1233
+ font-size: 9.5px;
1234
+ font-weight: 500;
1235
+ letter-spacing: 0.06em;
1236
+ text-transform: uppercase;
1237
+ color: var(--text-faint);
1238
+ }
1239
+ .na-field-hint {
1240
+ font-family: var(--mono);
1241
+ font-size: 9.5px;
1242
+ letter-spacing: 0.06em;
1243
+ text-transform: uppercase;
1244
+ color: var(--text-faint);
1245
+ }
1246
+ .na-field-hint .na-handle-preview {
1247
+ color: var(--lime);
1248
+ font-weight: 700;
1249
+ text-transform: none;
1250
+ letter-spacing: 0;
1251
+ }
1252
+
1253
+ /* Slim form input/textarea overrides · one consistent typography
1254
+ for every editable surface (name input, intro textarea, instruction
1255
+ textarea). Same font, same size, same left-aligned text — including
1256
+ placeholders — so the form reads as one coherent column.
1257
+ The leading ">" prefix from the older convene-style inputs is
1258
+ suppressed (each field already has a [LABEL] above it). */
1259
+ .new-agent-overlay .na-input-wrap::before,
1260
+ .new-agent-overlay .na-textarea-wrap::before { content: none; }
1261
+ .new-agent-overlay .na-input-wrap input,
1262
+ .new-agent-overlay .na-textarea-wrap textarea {
1263
+ padding: 10px 12px;
1264
+ font-family: var(--font-human);
1265
+ font-size: 13.5px;
1266
+ line-height: 1.55;
1267
+ color: var(--text);
1268
+ text-align: left;
1269
+ letter-spacing: -0.003em;
1270
+ }
1271
+ .new-agent-overlay .na-input-wrap input::placeholder,
1272
+ .new-agent-overlay .na-textarea-wrap textarea::placeholder {
1273
+ font-family: var(--font-human);
1274
+ font-size: 13.5px;
1275
+ color: var(--text-faint);
1276
+ letter-spacing: -0.003em;
1277
+ opacity: 1;
1278
+ }
1279
+ /* Intro · tall enough to comfortably fit a 1-2 sentence bio without
1280
+ needing a scrollbar in the default empty state. overflow-y stays
1281
+ `auto` so it only appears when the user actually overflows. */
1282
+ .new-agent-overlay .na-textarea-wrap.intro textarea {
1283
+ min-height: 96px;
1284
+ resize: vertical;
1285
+ overflow-y: auto;
1286
+ }
1287
+ /* Instruction · stays monospace because it's markdown source, but
1288
+ the font-size matches the rest of the form so the visual rhythm
1289
+ is consistent. Default 200px tall, with a higher max-height to
1290
+ discourage the scrollbar from appearing on common content. */
1291
+ .new-agent-overlay .na-textarea-wrap.tall textarea {
1292
+ min-height: 220px;
1293
+ font-family: var(--mono);
1294
+ font-size: 13px;
1295
+ line-height: 1.5;
1296
+ resize: vertical;
1297
+ overflow-y: auto;
1298
+ }
1299
+
1300
+ /* Footer — slim summary + cancel/create. */
1301
+ .new-agent-modal > .na-foot {
1302
+ border-top: 0.5px solid var(--line-bright);
1303
+ background: var(--panel-2);
1304
+ padding: 12px 18px;
1305
+ display: flex;
1306
+ justify-content: space-between;
1307
+ align-items: center;
1308
+ gap: 12px;
1309
+ }
1310
+ .na-foot-meta {
1311
+ display: flex;
1312
+ align-items: baseline;
1313
+ gap: 8px;
1314
+ font-family: var(--mono);
1315
+ font-size: 10px;
1316
+ letter-spacing: 0.06em;
1317
+ color: var(--text-faint);
1318
+ }
1319
+ .na-summary-name {
1320
+ color: var(--text);
1321
+ font-weight: 700;
1322
+ letter-spacing: -0.005em;
1323
+ font-family: var(--font-human);
1324
+ font-size: 13px;
1325
+ }
1326
+ .na-summary-handle { color: var(--lime); }
1327
+ .na-foot-sep { color: var(--text-faint); }
1328
+ .na-foot-actions { display: flex; gap: 8px; }
1329
+ .na-cancel,
1330
+ .na-create {
1331
+ font-family: var(--mono);
1332
+ font-size: 10px;
1333
+ font-weight: 700;
1334
+ letter-spacing: 0.16em;
1335
+ text-transform: uppercase;
1336
+ padding: 9px 16px;
1337
+ cursor: pointer;
1338
+ border: 0.5px solid var(--line-bright);
1339
+ background: transparent;
1340
+ color: var(--text-soft);
1341
+ display: inline-flex;
1342
+ align-items: center;
1343
+ gap: 6px;
1344
+ transition: border-color 0.12s, color 0.12s, background 0.12s;
1345
+ }
1346
+ .na-cancel:hover { border-color: var(--text); color: var(--text); }
1347
+ .na-create {
1348
+ background: var(--lime);
1349
+ border-color: var(--lime);
1350
+ color: var(--bg);
1351
+ }
1352
+ .na-create:hover { background: transparent; color: var(--lime); }
1353
+ .na-create:disabled {
1354
+ background: transparent;
1355
+ border-color: var(--line-bright);
1356
+ color: var(--text-faint);
1357
+ cursor: not-allowed;
1358
+ }
1359
+ .na-create-mark { font-size: 11px; line-height: 1; }