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.
- package/LICENSE +21 -0
- package/README.md +120 -0
- package/dist/cli.js +10502 -0
- package/dist/cli.js.map +1 -0
- package/package.json +63 -0
- package/public/adjourn-overlay.css +253 -0
- package/public/agent-overlay.css +444 -0
- package/public/agent-overlay.js +604 -0
- package/public/agent-profile.css +3230 -0
- package/public/agent-profile.js +3329 -0
- package/public/app.js +6629 -0
- package/public/auto-hide-scroll.js +90 -0
- package/public/avatar-skill.js +793 -0
- package/public/avatars/chair.svg +98 -0
- package/public/avatars/first-principles.svg +122 -0
- package/public/avatars/long-horizon.svg +147 -0
- package/public/avatars/open_ai.png +0 -0
- package/public/avatars/phenomenologist.svg +130 -0
- package/public/avatars/socrates.svg +187 -0
- package/public/avatars/user-empathy.svg +117 -0
- package/public/avatars/value-investor.svg +117 -0
- package/public/favicon.svg +10 -0
- package/public/fonts/agent-Italic.woff2 +0 -0
- package/public/fonts/human-sans.woff2 +0 -0
- package/public/icons.css +103 -0
- package/public/models-cache.js +57 -0
- package/public/new-agent.css +1359 -0
- package/public/new-agent.js +675 -0
- package/public/onboarding.css +628 -0
- package/public/onboarding.js +782 -0
- package/public/prototype-dashboard.html +7596 -0
- package/public/report/spines/a16z-thesis.css +1055 -0
- package/public/report/spines/anthropic-essay.css +556 -0
- package/public/report/spines/boardroom-dark.css +1082 -0
- package/public/report/spines/gartner-note.css +538 -0
- package/public/report/spines/mckinsey-deck.css +523 -0
- package/public/report/spines/openai-paper.css +516 -0
- package/public/report.html +1417 -0
- package/public/room-settings.css +895 -0
- package/public/room-settings.js +1039 -0
- package/public/themes.css +338 -0
- package/public/user-settings.css +1236 -0
- package/public/user-settings.js +1291 -0
|
@@ -0,0 +1,3230 @@
|
|
|
1
|
+
/* ═══════════════════════════════════════════
|
|
2
|
+
AGENT PROFILE — single-page layout
|
|
3
|
+
No tabs. Just: Bio · Instruction · Memory · Knowledge.
|
|
4
|
+
Stacked, generously spaced, easy to read.
|
|
5
|
+
═══════════════════════════════════════════ */
|
|
6
|
+
|
|
7
|
+
.agent-page {
|
|
8
|
+
display: flex;
|
|
9
|
+
flex-direction: column;
|
|
10
|
+
height: 100%;
|
|
11
|
+
min-height: 0;
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
background: var(--panel);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* ─── Cover ─── */
|
|
17
|
+
.agent-page-cover {
|
|
18
|
+
height: 88px;
|
|
19
|
+
background:
|
|
20
|
+
repeating-linear-gradient(
|
|
21
|
+
45deg,
|
|
22
|
+
transparent 0 22px,
|
|
23
|
+
rgba(111, 181, 114, 0.04) 22px 23px
|
|
24
|
+
),
|
|
25
|
+
linear-gradient(120deg, var(--lime-dim) 0%, var(--panel-3) 42%, var(--panel) 100%);
|
|
26
|
+
border-bottom: 0.5px solid var(--line-bright);
|
|
27
|
+
position: relative;
|
|
28
|
+
flex-shrink: 0;
|
|
29
|
+
overflow: hidden;
|
|
30
|
+
z-index: 0;
|
|
31
|
+
}
|
|
32
|
+
.agent-page-cover .cover-quote {
|
|
33
|
+
position: absolute;
|
|
34
|
+
inset: 0;
|
|
35
|
+
display: flex;
|
|
36
|
+
align-items: center;
|
|
37
|
+
justify-content: flex-end;
|
|
38
|
+
padding: 0 32px;
|
|
39
|
+
font-family: "Agent", var(--font-agent);
|
|
40
|
+
font-size: 22px;
|
|
41
|
+
color: var(--lime);
|
|
42
|
+
opacity: 0.42;
|
|
43
|
+
pointer-events: none;
|
|
44
|
+
user-select: none;
|
|
45
|
+
white-space: nowrap;
|
|
46
|
+
overflow: hidden;
|
|
47
|
+
}
|
|
48
|
+
/* Top-left corner: creator + joined date, on a small dark backdrop
|
|
49
|
+
so it stays legible against the gradient cover. */
|
|
50
|
+
.agent-page-cover .cover-meta-corner {
|
|
51
|
+
position: absolute;
|
|
52
|
+
top: 10px;
|
|
53
|
+
left: 14px;
|
|
54
|
+
font-family: var(--mono);
|
|
55
|
+
font-size: 9.5px;
|
|
56
|
+
color: var(--text-soft);
|
|
57
|
+
letter-spacing: 0.12em;
|
|
58
|
+
text-transform: uppercase;
|
|
59
|
+
background: rgba(10, 10, 10, 0.55);
|
|
60
|
+
-webkit-backdrop-filter: blur(2px);
|
|
61
|
+
backdrop-filter: blur(2px);
|
|
62
|
+
padding: 3px 8px;
|
|
63
|
+
border: 0.5px solid rgba(111, 181, 114, 0.3);
|
|
64
|
+
pointer-events: none;
|
|
65
|
+
user-select: none;
|
|
66
|
+
}
|
|
67
|
+
.agent-page-cover .cover-meta-corner .sep { color: var(--text-faint); margin: 0 5px; }
|
|
68
|
+
.agent-page-cover .cover-meta-corner .v { color: var(--text); font-weight: 700; }
|
|
69
|
+
|
|
70
|
+
/* ─── Identity row (avatar overlaps cover) ─── */
|
|
71
|
+
.agent-page-identity {
|
|
72
|
+
display: grid;
|
|
73
|
+
grid-template-columns: auto 1fr auto;
|
|
74
|
+
gap: 16px;
|
|
75
|
+
align-items: start;
|
|
76
|
+
padding: 12px 32px 14px;
|
|
77
|
+
flex-shrink: 0;
|
|
78
|
+
background: var(--panel);
|
|
79
|
+
border-bottom: 0.5px solid var(--line-bright);
|
|
80
|
+
position: relative;
|
|
81
|
+
}
|
|
82
|
+
.agent-page-avatar {
|
|
83
|
+
width: 76px;
|
|
84
|
+
height: 76px;
|
|
85
|
+
background: var(--bg);
|
|
86
|
+
border: 0.5px solid var(--line-strong);
|
|
87
|
+
padding: 5px;
|
|
88
|
+
margin-top: -42px;
|
|
89
|
+
image-rendering: pixelated;
|
|
90
|
+
image-rendering: crisp-edges;
|
|
91
|
+
position: relative;
|
|
92
|
+
z-index: 2;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.agent-page-id { padding-top: 6px; min-width: 0; }
|
|
96
|
+
.agent-page-id .name-row {
|
|
97
|
+
display: flex;
|
|
98
|
+
align-items: center;
|
|
99
|
+
gap: 10px;
|
|
100
|
+
flex-wrap: wrap;
|
|
101
|
+
margin-bottom: 4px;
|
|
102
|
+
}
|
|
103
|
+
.agent-page-id .name {
|
|
104
|
+
font-size: 22px;
|
|
105
|
+
font-weight: 700;
|
|
106
|
+
color: var(--text);
|
|
107
|
+
letter-spacing: -0.018em;
|
|
108
|
+
line-height: 1.1;
|
|
109
|
+
}
|
|
110
|
+
.agent-page-id .role-tag {
|
|
111
|
+
font-family: var(--mono);
|
|
112
|
+
font-size: 9.5px;
|
|
113
|
+
font-weight: 700;
|
|
114
|
+
text-transform: uppercase;
|
|
115
|
+
letter-spacing: 0.14em;
|
|
116
|
+
padding: 2px 8px;
|
|
117
|
+
background: rgba(111, 181, 114, 0.10);
|
|
118
|
+
border: 0.5px solid var(--lime-dim);
|
|
119
|
+
color: var(--lime);
|
|
120
|
+
}
|
|
121
|
+
.agent-page-id .status-pill {
|
|
122
|
+
font-family: var(--mono);
|
|
123
|
+
font-size: 9.5px;
|
|
124
|
+
font-weight: 700;
|
|
125
|
+
text-transform: uppercase;
|
|
126
|
+
letter-spacing: 0.12em;
|
|
127
|
+
padding: 2px 8px;
|
|
128
|
+
border: 0.5px solid;
|
|
129
|
+
}
|
|
130
|
+
.agent-page-id .status-pill.active { color: var(--lime); border-color: var(--lime); }
|
|
131
|
+
.agent-page-id .status-pill.intern { color: var(--amber); border-color: var(--amber); }
|
|
132
|
+
.agent-page-id .status-pill.off-duty { color: var(--text-dim); border-color: var(--line-bright); }
|
|
133
|
+
.agent-page-id .status-pill.active::before { content: "● "; }
|
|
134
|
+
.agent-page-id .status-pill.intern::before { content: "▲ "; }
|
|
135
|
+
.agent-page-id .status-pill.off-duty::before { content: "◌ "; }
|
|
136
|
+
/* Bio: single line truncated next to the avatar; full text on hover. */
|
|
137
|
+
.agent-page-id .bio {
|
|
138
|
+
position: relative;
|
|
139
|
+
margin-top: 6px;
|
|
140
|
+
max-width: 600px;
|
|
141
|
+
}
|
|
142
|
+
.agent-page-id .bio-line {
|
|
143
|
+
font-family: var(--font-human);
|
|
144
|
+
font-size: 12.5px;
|
|
145
|
+
color: var(--text-soft);
|
|
146
|
+
line-height: 1.6;
|
|
147
|
+
letter-spacing: -0.003em;
|
|
148
|
+
white-space: nowrap;
|
|
149
|
+
overflow: hidden;
|
|
150
|
+
text-overflow: ellipsis;
|
|
151
|
+
cursor: help;
|
|
152
|
+
padding-right: 8px;
|
|
153
|
+
border-bottom: 0.5px dotted transparent;
|
|
154
|
+
transition: border-color 0.12s;
|
|
155
|
+
}
|
|
156
|
+
.agent-page-id .bio:hover .bio-line {
|
|
157
|
+
border-bottom-color: var(--lime-dim);
|
|
158
|
+
}
|
|
159
|
+
.agent-page-id .bio-tooltip {
|
|
160
|
+
position: absolute;
|
|
161
|
+
top: calc(100% + 6px);
|
|
162
|
+
left: 0;
|
|
163
|
+
width: 460px;
|
|
164
|
+
max-width: 90vw;
|
|
165
|
+
padding: 14px 16px;
|
|
166
|
+
background: var(--panel);
|
|
167
|
+
border: 0.5px solid var(--lime-dim);
|
|
168
|
+
font-family: var(--font-human);
|
|
169
|
+
font-size: 12.5px;
|
|
170
|
+
color: var(--text-soft);
|
|
171
|
+
line-height: 1.65;
|
|
172
|
+
letter-spacing: -0.003em;
|
|
173
|
+
z-index: 50;
|
|
174
|
+
opacity: 0;
|
|
175
|
+
visibility: hidden;
|
|
176
|
+
transform: translateY(-2px);
|
|
177
|
+
transition: opacity 0.12s ease, transform 0.12s ease, visibility 0s linear 0.12s;
|
|
178
|
+
pointer-events: none;
|
|
179
|
+
}
|
|
180
|
+
.agent-page-id .bio-tooltip::before, .agent-page-id .bio-tooltip::after {
|
|
181
|
+
content: "";
|
|
182
|
+
position: absolute;
|
|
183
|
+
width: 8px; height: 8px;
|
|
184
|
+
border: 0.5px solid var(--lime);
|
|
185
|
+
pointer-events: none;
|
|
186
|
+
}
|
|
187
|
+
.agent-page-id .bio-tooltip::before { top: -1px; left: -1px; border-right: none; border-bottom: none; }
|
|
188
|
+
.agent-page-id .bio-tooltip::after { bottom: -1px; right: -1px; border-left: none; border-top: none; }
|
|
189
|
+
.agent-page-id .bio-tooltip p + p { margin-top: 8px; }
|
|
190
|
+
.agent-page-id .bio:hover .bio-tooltip,
|
|
191
|
+
.agent-page-id .bio:focus-within .bio-tooltip {
|
|
192
|
+
opacity: 1;
|
|
193
|
+
visibility: visible;
|
|
194
|
+
transform: translateY(0);
|
|
195
|
+
transition: opacity 0.12s ease, transform 0.12s ease, visibility 0s;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.agent-page-id-buttons { display: flex; gap: 6px; padding-top: 8px; }
|
|
199
|
+
.agent-page-id-buttons .ap-pill-btn {
|
|
200
|
+
font-family: var(--mono);
|
|
201
|
+
font-size: 10px;
|
|
202
|
+
font-weight: 700;
|
|
203
|
+
text-transform: uppercase;
|
|
204
|
+
letter-spacing: 0.1em;
|
|
205
|
+
padding: 6px 11px;
|
|
206
|
+
border: 0.5px solid var(--line-strong);
|
|
207
|
+
background: transparent;
|
|
208
|
+
color: var(--text-soft);
|
|
209
|
+
cursor: pointer;
|
|
210
|
+
text-decoration: none;
|
|
211
|
+
transition: all 0.12s;
|
|
212
|
+
}
|
|
213
|
+
.agent-page-id-buttons .ap-pill-btn:hover { border-color: var(--lime); color: var(--lime); }
|
|
214
|
+
.agent-page-id-buttons .ap-pill-btn.primary {
|
|
215
|
+
background: var(--lime); color: var(--bg); border-color: var(--lime);
|
|
216
|
+
}
|
|
217
|
+
.agent-page-id-buttons .ap-pill-btn.primary:hover {
|
|
218
|
+
background: transparent; color: var(--lime);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/* ─── Metrics row · inline body block, sits right under bio ─── */
|
|
222
|
+
.agent-page-metrics {
|
|
223
|
+
display: grid;
|
|
224
|
+
grid-template-columns: repeat(4, 1fr);
|
|
225
|
+
gap: 1px;
|
|
226
|
+
background: var(--line-bright);
|
|
227
|
+
border: 0.5px solid var(--line-bright);
|
|
228
|
+
}
|
|
229
|
+
@media (max-width: 700px) {
|
|
230
|
+
.agent-page-metrics { grid-template-columns: repeat(2, 1fr); }
|
|
231
|
+
}
|
|
232
|
+
.agent-page-metrics .cell {
|
|
233
|
+
background: var(--bg);
|
|
234
|
+
padding: 12px 16px;
|
|
235
|
+
display: flex;
|
|
236
|
+
flex-direction: column;
|
|
237
|
+
gap: 4px;
|
|
238
|
+
}
|
|
239
|
+
.agent-page-metrics .lbl {
|
|
240
|
+
font-family: var(--mono);
|
|
241
|
+
font-size: 9px;
|
|
242
|
+
color: var(--text-faint);
|
|
243
|
+
text-transform: uppercase;
|
|
244
|
+
letter-spacing: 0.16em;
|
|
245
|
+
font-weight: 700;
|
|
246
|
+
}
|
|
247
|
+
.agent-page-metrics .v {
|
|
248
|
+
font-family: var(--mono);
|
|
249
|
+
font-size: 20px;
|
|
250
|
+
color: var(--text);
|
|
251
|
+
font-weight: 700;
|
|
252
|
+
letter-spacing: -0.01em;
|
|
253
|
+
line-height: 1;
|
|
254
|
+
}
|
|
255
|
+
.agent-page-metrics .v.text {
|
|
256
|
+
font-size: 13.5px;
|
|
257
|
+
letter-spacing: -0.005em;
|
|
258
|
+
}
|
|
259
|
+
.agent-page-metrics .v .unit {
|
|
260
|
+
font-size: 11px;
|
|
261
|
+
color: var(--text-dim);
|
|
262
|
+
font-weight: 400;
|
|
263
|
+
margin-left: 4px;
|
|
264
|
+
letter-spacing: 0.04em;
|
|
265
|
+
}
|
|
266
|
+
.agent-page-metrics .deck {
|
|
267
|
+
font-family: var(--font-human);
|
|
268
|
+
font-size: 10.5px;
|
|
269
|
+
color: var(--text-dim);
|
|
270
|
+
letter-spacing: -0.003em;
|
|
271
|
+
}
|
|
272
|
+
.agent-page-metrics .deck .lime { color: var(--lime); }
|
|
273
|
+
|
|
274
|
+
/* ─── Body — single scroll, stacked sections ─── */
|
|
275
|
+
.agent-page-body {
|
|
276
|
+
flex: 1;
|
|
277
|
+
min-height: 0;
|
|
278
|
+
overflow-y: auto;
|
|
279
|
+
}
|
|
280
|
+
.agent-page-stack {
|
|
281
|
+
max-width: 760px;
|
|
282
|
+
margin: 0 auto;
|
|
283
|
+
padding: 32px 32px 56px;
|
|
284
|
+
display: flex;
|
|
285
|
+
flex-direction: column;
|
|
286
|
+
gap: 36px;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/* Section primitives */
|
|
290
|
+
.ap-sec { display: flex; flex-direction: column; gap: 14px; }
|
|
291
|
+
.ap-sec-head {
|
|
292
|
+
display: flex;
|
|
293
|
+
align-items: end;
|
|
294
|
+
justify-content: space-between;
|
|
295
|
+
gap: 12px;
|
|
296
|
+
padding-bottom: 10px;
|
|
297
|
+
border-bottom: 0.5px solid var(--line-bright);
|
|
298
|
+
}
|
|
299
|
+
.ap-sec-head .label-row {
|
|
300
|
+
display: flex;
|
|
301
|
+
align-items: baseline;
|
|
302
|
+
gap: 10px;
|
|
303
|
+
}
|
|
304
|
+
.ap-sec-head .eyebrow {
|
|
305
|
+
font-family: var(--mono);
|
|
306
|
+
font-size: 9.5px;
|
|
307
|
+
font-weight: 700;
|
|
308
|
+
text-transform: uppercase;
|
|
309
|
+
letter-spacing: 0.18em;
|
|
310
|
+
color: var(--lime);
|
|
311
|
+
}
|
|
312
|
+
.ap-sec-head .title {
|
|
313
|
+
font-size: 14px;
|
|
314
|
+
font-weight: 700;
|
|
315
|
+
color: var(--text);
|
|
316
|
+
letter-spacing: -0.01em;
|
|
317
|
+
}
|
|
318
|
+
.ap-sec-head .deck {
|
|
319
|
+
font-family: var(--font-human);
|
|
320
|
+
font-size: 11.5px;
|
|
321
|
+
color: var(--text-dim);
|
|
322
|
+
letter-spacing: -0.003em;
|
|
323
|
+
margin-top: 4px;
|
|
324
|
+
}
|
|
325
|
+
.ap-sec-head .right {
|
|
326
|
+
font-family: var(--mono);
|
|
327
|
+
font-size: 10px;
|
|
328
|
+
color: var(--text-faint);
|
|
329
|
+
letter-spacing: 0.06em;
|
|
330
|
+
text-align: right;
|
|
331
|
+
white-space: nowrap;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/* ─── Bio (top of body) ─── */
|
|
335
|
+
.ap-bio-block {
|
|
336
|
+
font-family: var(--font-human);
|
|
337
|
+
font-size: 14px;
|
|
338
|
+
line-height: 1.7;
|
|
339
|
+
color: var(--text-soft);
|
|
340
|
+
letter-spacing: -0.003em;
|
|
341
|
+
}
|
|
342
|
+
.ap-bio-block p + p { margin-top: 10px; }
|
|
343
|
+
.ap-bio-block .bio-tag {
|
|
344
|
+
display: block;
|
|
345
|
+
font-family: var(--mono);
|
|
346
|
+
font-size: 9.5px;
|
|
347
|
+
text-transform: uppercase;
|
|
348
|
+
letter-spacing: 0.18em;
|
|
349
|
+
color: var(--lime);
|
|
350
|
+
margin-bottom: 10px;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/* ─── Instruction (read-only doc) ─── */
|
|
354
|
+
.ap-instr-doc {
|
|
355
|
+
background: var(--bg);
|
|
356
|
+
border: 0.5px solid var(--line-bright);
|
|
357
|
+
padding: 22px 26px;
|
|
358
|
+
display: flex;
|
|
359
|
+
flex-direction: column;
|
|
360
|
+
gap: 18px;
|
|
361
|
+
position: relative;
|
|
362
|
+
}
|
|
363
|
+
.ap-instr-doc .meta-strip {
|
|
364
|
+
position: absolute;
|
|
365
|
+
top: 10px;
|
|
366
|
+
right: 14px;
|
|
367
|
+
font-family: var(--mono);
|
|
368
|
+
font-size: 9px;
|
|
369
|
+
color: var(--text-faint);
|
|
370
|
+
letter-spacing: 0.12em;
|
|
371
|
+
text-transform: uppercase;
|
|
372
|
+
}
|
|
373
|
+
.ap-instr-doc .meta-strip::before { content: "🔒 "; font-size: 9px; }
|
|
374
|
+
.ap-instr-section .lbl {
|
|
375
|
+
font-family: var(--mono);
|
|
376
|
+
font-size: 9.5px;
|
|
377
|
+
font-weight: 700;
|
|
378
|
+
text-transform: uppercase;
|
|
379
|
+
letter-spacing: 0.16em;
|
|
380
|
+
color: var(--text-dim);
|
|
381
|
+
margin-bottom: 6px;
|
|
382
|
+
}
|
|
383
|
+
.ap-instr-section p {
|
|
384
|
+
font-family: var(--font-human);
|
|
385
|
+
font-size: 13px;
|
|
386
|
+
color: var(--text-soft);
|
|
387
|
+
line-height: 1.65;
|
|
388
|
+
letter-spacing: -0.003em;
|
|
389
|
+
}
|
|
390
|
+
.ap-instr-section p .ink { color: var(--text); font-weight: 600; font-family: var(--mono); }
|
|
391
|
+
.ap-instr-section p .mono { font-family: var(--mono); color: var(--text); }
|
|
392
|
+
|
|
393
|
+
/* ─── Memory · About You ─── */
|
|
394
|
+
.about-you-card {
|
|
395
|
+
background: linear-gradient(135deg, var(--bg) 0%, rgba(111, 181, 114, 0.04) 100%);
|
|
396
|
+
border: 0.5px solid var(--lime-dim);
|
|
397
|
+
padding: 22px 24px;
|
|
398
|
+
position: relative;
|
|
399
|
+
}
|
|
400
|
+
.about-you-card::before, .about-you-card::after {
|
|
401
|
+
content: "";
|
|
402
|
+
position: absolute;
|
|
403
|
+
width: 10px;
|
|
404
|
+
height: 10px;
|
|
405
|
+
border: 1.5px solid var(--lime);
|
|
406
|
+
pointer-events: none;
|
|
407
|
+
}
|
|
408
|
+
.about-you-card::before { top: -1px; left: -1px; border-right: none; border-bottom: none; }
|
|
409
|
+
.about-you-card::after { bottom: -1px; right: -1px; border-left: none; border-top: none; }
|
|
410
|
+
.about-you-card .headline {
|
|
411
|
+
font-family: var(--font-human);
|
|
412
|
+
font-size: 13.5px;
|
|
413
|
+
color: var(--text);
|
|
414
|
+
line-height: 1.55;
|
|
415
|
+
letter-spacing: -0.005em;
|
|
416
|
+
font-weight: 600;
|
|
417
|
+
margin-bottom: 10px;
|
|
418
|
+
}
|
|
419
|
+
.about-you-card .summary {
|
|
420
|
+
font-family: var(--font-human);
|
|
421
|
+
font-size: 12.5px;
|
|
422
|
+
color: var(--text-soft);
|
|
423
|
+
line-height: 1.65;
|
|
424
|
+
letter-spacing: -0.003em;
|
|
425
|
+
}
|
|
426
|
+
.about-you-card .summary p + p { margin-top: 8px; }
|
|
427
|
+
.about-you-card .grid {
|
|
428
|
+
display: grid;
|
|
429
|
+
grid-template-columns: 1fr 1fr;
|
|
430
|
+
gap: 18px;
|
|
431
|
+
margin-top: 18px;
|
|
432
|
+
padding-top: 16px;
|
|
433
|
+
border-top: 0.5px dashed var(--lime-dim);
|
|
434
|
+
}
|
|
435
|
+
@media (max-width: 700px) { .about-you-card .grid { grid-template-columns: 1fr; } }
|
|
436
|
+
.about-you-card .group .lbl {
|
|
437
|
+
font-family: var(--mono);
|
|
438
|
+
font-size: 9.5px;
|
|
439
|
+
font-weight: 700;
|
|
440
|
+
text-transform: uppercase;
|
|
441
|
+
letter-spacing: 0.16em;
|
|
442
|
+
margin-bottom: 8px;
|
|
443
|
+
color: var(--lime);
|
|
444
|
+
}
|
|
445
|
+
.about-you-card .group.warn .lbl { color: var(--amber); }
|
|
446
|
+
.about-you-card .group ul {
|
|
447
|
+
list-style: none;
|
|
448
|
+
padding: 0;
|
|
449
|
+
margin: 0;
|
|
450
|
+
display: flex;
|
|
451
|
+
flex-direction: column;
|
|
452
|
+
gap: 6px;
|
|
453
|
+
}
|
|
454
|
+
.about-you-card .group li {
|
|
455
|
+
font-family: var(--font-human);
|
|
456
|
+
font-size: 12px;
|
|
457
|
+
color: var(--text-soft);
|
|
458
|
+
line-height: 1.55;
|
|
459
|
+
letter-spacing: -0.003em;
|
|
460
|
+
padding-left: 14px;
|
|
461
|
+
position: relative;
|
|
462
|
+
}
|
|
463
|
+
.about-you-card .group.traits li::before {
|
|
464
|
+
content: "·";
|
|
465
|
+
position: absolute;
|
|
466
|
+
left: 4px;
|
|
467
|
+
color: var(--lime);
|
|
468
|
+
font-weight: 700;
|
|
469
|
+
}
|
|
470
|
+
.about-you-card .group.warn li::before {
|
|
471
|
+
content: "▲";
|
|
472
|
+
position: absolute;
|
|
473
|
+
left: 0;
|
|
474
|
+
color: var(--amber);
|
|
475
|
+
font-size: 9px;
|
|
476
|
+
top: 4px;
|
|
477
|
+
}
|
|
478
|
+
.about-you-card .relationship {
|
|
479
|
+
margin-top: 18px;
|
|
480
|
+
padding-top: 14px;
|
|
481
|
+
border-top: 0.5px dashed var(--lime-dim);
|
|
482
|
+
display: flex;
|
|
483
|
+
flex-wrap: wrap;
|
|
484
|
+
gap: 24px;
|
|
485
|
+
font-family: var(--mono);
|
|
486
|
+
font-size: 10.5px;
|
|
487
|
+
color: var(--text-dim);
|
|
488
|
+
letter-spacing: 0.04em;
|
|
489
|
+
}
|
|
490
|
+
.about-you-card .relationship .cell .l {
|
|
491
|
+
font-family: var(--font-human);
|
|
492
|
+
color: var(--text-faint);
|
|
493
|
+
font-size: 10px;
|
|
494
|
+
letter-spacing: 0.02em;
|
|
495
|
+
display: block;
|
|
496
|
+
margin-bottom: 2px;
|
|
497
|
+
}
|
|
498
|
+
.about-you-card .relationship .cell .v {
|
|
499
|
+
font-family: var(--mono);
|
|
500
|
+
color: var(--text);
|
|
501
|
+
font-size: 13px;
|
|
502
|
+
font-weight: 700;
|
|
503
|
+
letter-spacing: -0.005em;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/* ─── Memory · Per-room cards ─── */
|
|
507
|
+
.room-mem-list {
|
|
508
|
+
display: flex;
|
|
509
|
+
flex-direction: column;
|
|
510
|
+
gap: 12px;
|
|
511
|
+
}
|
|
512
|
+
.room-mem-card {
|
|
513
|
+
background: var(--bg);
|
|
514
|
+
border: 0.5px solid var(--line-bright);
|
|
515
|
+
padding: 16px 18px;
|
|
516
|
+
transition: border-color 0.12s;
|
|
517
|
+
}
|
|
518
|
+
.room-mem-card:hover { border-color: var(--lime-dim); }
|
|
519
|
+
.room-mem-card .head-row {
|
|
520
|
+
display: flex;
|
|
521
|
+
align-items: baseline;
|
|
522
|
+
justify-content: space-between;
|
|
523
|
+
gap: 12px;
|
|
524
|
+
margin-bottom: 4px;
|
|
525
|
+
}
|
|
526
|
+
.room-mem-card .name-row {
|
|
527
|
+
display: flex;
|
|
528
|
+
align-items: baseline;
|
|
529
|
+
gap: 8px;
|
|
530
|
+
flex-wrap: wrap;
|
|
531
|
+
min-width: 0;
|
|
532
|
+
}
|
|
533
|
+
.room-mem-card .num {
|
|
534
|
+
font-family: var(--mono);
|
|
535
|
+
font-size: 10.5px;
|
|
536
|
+
color: var(--lime);
|
|
537
|
+
letter-spacing: 0.06em;
|
|
538
|
+
font-weight: 700;
|
|
539
|
+
}
|
|
540
|
+
.room-mem-card .name {
|
|
541
|
+
font-size: 14px;
|
|
542
|
+
font-weight: 700;
|
|
543
|
+
color: var(--text);
|
|
544
|
+
letter-spacing: -0.008em;
|
|
545
|
+
}
|
|
546
|
+
.room-mem-card .stats {
|
|
547
|
+
font-family: var(--mono);
|
|
548
|
+
font-size: 10px;
|
|
549
|
+
color: var(--text-faint);
|
|
550
|
+
letter-spacing: 0.06em;
|
|
551
|
+
white-space: nowrap;
|
|
552
|
+
}
|
|
553
|
+
.room-mem-card .stats .v { color: var(--text-soft); }
|
|
554
|
+
.room-mem-card .summary {
|
|
555
|
+
font-family: var(--font-human);
|
|
556
|
+
font-size: 12px;
|
|
557
|
+
color: var(--text-dim);
|
|
558
|
+
line-height: 1.55;
|
|
559
|
+
letter-spacing: -0.003em;
|
|
560
|
+
margin-bottom: 12px;
|
|
561
|
+
}
|
|
562
|
+
.room-mem-card .lessons {
|
|
563
|
+
list-style: none;
|
|
564
|
+
padding: 0;
|
|
565
|
+
margin: 0;
|
|
566
|
+
display: flex;
|
|
567
|
+
flex-direction: column;
|
|
568
|
+
gap: 5px;
|
|
569
|
+
padding-top: 11px;
|
|
570
|
+
border-top: 0.5px dotted var(--line-bright);
|
|
571
|
+
}
|
|
572
|
+
.room-mem-card .lessons li {
|
|
573
|
+
font-family: var(--font-human);
|
|
574
|
+
font-size: 12.5px;
|
|
575
|
+
color: var(--text-soft);
|
|
576
|
+
line-height: 1.5;
|
|
577
|
+
letter-spacing: -0.003em;
|
|
578
|
+
padding-left: 14px;
|
|
579
|
+
position: relative;
|
|
580
|
+
}
|
|
581
|
+
.room-mem-card .lessons li::before {
|
|
582
|
+
content: "▸";
|
|
583
|
+
position: absolute;
|
|
584
|
+
left: 0;
|
|
585
|
+
top: 3px;
|
|
586
|
+
color: var(--lime);
|
|
587
|
+
font-size: 9px;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
/* ─── Knowledge ─── */
|
|
591
|
+
.ap-know-block { display: flex; flex-direction: column; gap: 12px; }
|
|
592
|
+
|
|
593
|
+
.ap-know-drop {
|
|
594
|
+
display: grid;
|
|
595
|
+
grid-template-columns: auto 1fr auto;
|
|
596
|
+
gap: 14px;
|
|
597
|
+
align-items: center;
|
|
598
|
+
padding: 16px 18px;
|
|
599
|
+
background: var(--bg);
|
|
600
|
+
border: 0.5px dashed var(--line-strong);
|
|
601
|
+
cursor: pointer;
|
|
602
|
+
transition: all 0.12s;
|
|
603
|
+
}
|
|
604
|
+
.ap-know-drop:hover {
|
|
605
|
+
border-color: var(--lime);
|
|
606
|
+
border-style: solid;
|
|
607
|
+
background: linear-gradient(135deg, var(--bg) 0%, rgba(111, 181, 114, 0.04) 100%);
|
|
608
|
+
}
|
|
609
|
+
.ap-know-drop .icon {
|
|
610
|
+
width: 36px;
|
|
611
|
+
height: 36px;
|
|
612
|
+
border: 0.5px solid var(--line-strong);
|
|
613
|
+
display: flex;
|
|
614
|
+
align-items: center;
|
|
615
|
+
justify-content: center;
|
|
616
|
+
font-family: var(--mono);
|
|
617
|
+
font-size: 18px;
|
|
618
|
+
color: var(--text-dim);
|
|
619
|
+
font-weight: 700;
|
|
620
|
+
}
|
|
621
|
+
.ap-know-drop:hover .icon { border-color: var(--lime); color: var(--lime); }
|
|
622
|
+
.ap-know-drop .title {
|
|
623
|
+
font-family: var(--mono);
|
|
624
|
+
font-size: 12px;
|
|
625
|
+
color: var(--text);
|
|
626
|
+
font-weight: 700;
|
|
627
|
+
letter-spacing: -0.003em;
|
|
628
|
+
}
|
|
629
|
+
.ap-know-drop .deck {
|
|
630
|
+
font-family: var(--font-human);
|
|
631
|
+
font-size: 11px;
|
|
632
|
+
color: var(--text-dim);
|
|
633
|
+
margin-top: 2px;
|
|
634
|
+
letter-spacing: -0.003em;
|
|
635
|
+
}
|
|
636
|
+
.ap-know-drop .pill {
|
|
637
|
+
font-family: var(--mono);
|
|
638
|
+
font-size: 9.5px;
|
|
639
|
+
font-weight: 700;
|
|
640
|
+
text-transform: uppercase;
|
|
641
|
+
letter-spacing: 0.1em;
|
|
642
|
+
padding: 5px 10px;
|
|
643
|
+
border: 0.5px solid var(--line-strong);
|
|
644
|
+
color: var(--text-soft);
|
|
645
|
+
background: var(--panel-2);
|
|
646
|
+
white-space: nowrap;
|
|
647
|
+
}
|
|
648
|
+
.ap-know-drop:hover .pill { border-color: var(--lime); color: var(--lime); }
|
|
649
|
+
|
|
650
|
+
.ap-know-list { display: flex; flex-direction: column; }
|
|
651
|
+
.ap-know-row {
|
|
652
|
+
display: grid;
|
|
653
|
+
grid-template-columns: auto 1fr auto auto;
|
|
654
|
+
gap: 14px;
|
|
655
|
+
align-items: center;
|
|
656
|
+
padding: 11px 14px;
|
|
657
|
+
background: var(--bg);
|
|
658
|
+
border: 0.5px solid var(--line-bright);
|
|
659
|
+
border-top: none;
|
|
660
|
+
transition: background 0.1s;
|
|
661
|
+
}
|
|
662
|
+
.ap-know-row:first-child { border-top: 0.5px solid var(--line-bright); }
|
|
663
|
+
.ap-know-row:hover { background: var(--panel-2); }
|
|
664
|
+
.ap-know-row .ext {
|
|
665
|
+
width: 32px;
|
|
666
|
+
height: 32px;
|
|
667
|
+
display: flex;
|
|
668
|
+
align-items: center;
|
|
669
|
+
justify-content: center;
|
|
670
|
+
font-family: var(--mono);
|
|
671
|
+
font-size: 9px;
|
|
672
|
+
font-weight: 700;
|
|
673
|
+
text-transform: uppercase;
|
|
674
|
+
letter-spacing: 0.04em;
|
|
675
|
+
border: 0.5px solid;
|
|
676
|
+
color: var(--text-soft);
|
|
677
|
+
background: var(--panel-2);
|
|
678
|
+
}
|
|
679
|
+
.ap-know-row .ext[data-type="pdf"] { color: var(--red); border-color: rgba(181, 112, 106, 0.5); background: rgba(181, 112, 106, 0.06); }
|
|
680
|
+
.ap-know-row .ext[data-type="md"] { color: var(--lime); border-color: var(--lime-dim); background: rgba(111, 181, 114, 0.06); }
|
|
681
|
+
.ap-know-row .ext[data-type="doc"] { color: var(--cyan); border-color: rgba(106, 155, 151, 0.4); background: rgba(106, 155, 151, 0.06); }
|
|
682
|
+
.ap-know-row .ext[data-type="epub"] { color: var(--magenta); border-color: rgba(142, 122, 142, 0.5); background: rgba(142, 122, 142, 0.06); }
|
|
683
|
+
.ap-know-row .ext[data-type="txt"] { color: var(--text-soft); border-color: var(--line-strong); }
|
|
684
|
+
.ap-know-row .ext[data-type="link"] { color: var(--amber); border-color: rgba(181, 149, 96, 0.5); background: rgba(181, 149, 96, 0.06); }
|
|
685
|
+
|
|
686
|
+
.ap-know-row .info { min-width: 0; }
|
|
687
|
+
.ap-know-row .name {
|
|
688
|
+
font-family: var(--mono);
|
|
689
|
+
font-size: 12px;
|
|
690
|
+
color: var(--text);
|
|
691
|
+
font-weight: 700;
|
|
692
|
+
letter-spacing: -0.003em;
|
|
693
|
+
white-space: nowrap;
|
|
694
|
+
overflow: hidden;
|
|
695
|
+
text-overflow: ellipsis;
|
|
696
|
+
}
|
|
697
|
+
.ap-know-row .meta {
|
|
698
|
+
font-family: var(--font-human);
|
|
699
|
+
font-size: 10.5px;
|
|
700
|
+
color: var(--text-faint);
|
|
701
|
+
margin-top: 2px;
|
|
702
|
+
letter-spacing: 0.02em;
|
|
703
|
+
}
|
|
704
|
+
.ap-know-row .meta .sep { color: var(--line-bright); margin: 0 5px; }
|
|
705
|
+
.ap-know-row .indexed {
|
|
706
|
+
font-family: var(--mono);
|
|
707
|
+
font-size: 9px;
|
|
708
|
+
text-transform: uppercase;
|
|
709
|
+
letter-spacing: 0.12em;
|
|
710
|
+
color: var(--lime);
|
|
711
|
+
font-weight: 700;
|
|
712
|
+
white-space: nowrap;
|
|
713
|
+
}
|
|
714
|
+
.ap-know-row .indexed::before { content: "● "; }
|
|
715
|
+
.ap-know-row .indexed.pending { color: var(--amber); }
|
|
716
|
+
.ap-know-row .indexed.pending::before { content: "▲ "; }
|
|
717
|
+
.ap-know-row .actions { display: flex; gap: 4px; }
|
|
718
|
+
.ap-know-row .actions .icon-btn {
|
|
719
|
+
width: 24px; height: 24px;
|
|
720
|
+
border: 0.5px solid var(--line-bright);
|
|
721
|
+
background: transparent;
|
|
722
|
+
color: var(--text-faint);
|
|
723
|
+
font-family: var(--mono);
|
|
724
|
+
font-size: 11px;
|
|
725
|
+
cursor: pointer;
|
|
726
|
+
display: inline-flex;
|
|
727
|
+
align-items: center;
|
|
728
|
+
justify-content: center;
|
|
729
|
+
text-decoration: none;
|
|
730
|
+
transition: all 0.12s;
|
|
731
|
+
}
|
|
732
|
+
.ap-know-row .actions .icon-btn:hover { border-color: var(--lime); color: var(--lime); }
|
|
733
|
+
.ap-know-row .actions .icon-btn.danger:hover { border-color: var(--red); color: var(--red); }
|
|
734
|
+
|
|
735
|
+
.ap-know-empty {
|
|
736
|
+
padding: 24px;
|
|
737
|
+
text-align: center;
|
|
738
|
+
font-family: var(--mono);
|
|
739
|
+
font-size: 11px;
|
|
740
|
+
color: var(--text-faint);
|
|
741
|
+
letter-spacing: 0.06em;
|
|
742
|
+
text-transform: uppercase;
|
|
743
|
+
border: 0.5px dashed var(--line-bright);
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
/* Active state for sidebar agent rows is defined in each dashboard's
|
|
747
|
+
stylesheet (matched to .session-row.active for consistency). */
|
|
748
|
+
|
|
749
|
+
/* Mobile */
|
|
750
|
+
@media (max-width: 600px) {
|
|
751
|
+
.agent-page-cover { height: 70px; }
|
|
752
|
+
.agent-page-identity { grid-template-columns: auto 1fr; padding: 10px 16px 14px; }
|
|
753
|
+
.agent-page-id-buttons { display: none; }
|
|
754
|
+
.agent-page-avatar { width: 64px; height: 64px; margin-top: -34px; }
|
|
755
|
+
.agent-page-id .name { font-size: 18px; }
|
|
756
|
+
.agent-page-stack { padding: 22px 16px 36px; gap: 28px; }
|
|
757
|
+
.ap-instr-doc { padding: 18px 16px; }
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
|
|
761
|
+
/* ═══════════════════════════════════════════
|
|
762
|
+
GAME-CARD layout (Director console)
|
|
763
|
+
─────────────────────────────────────────────
|
|
764
|
+
New chrome inspired by an RPG character sheet:
|
|
765
|
+
header tabs · left portrait · right 2x2 grid
|
|
766
|
+
(Badges / Intel / Skills / Equipment) · roster row
|
|
767
|
+
· single bright lime CTA. Boardroom palette
|
|
768
|
+
(lime on charcoal), no shadows, hairline lines.
|
|
769
|
+
═════════════════════════════════════════════ */
|
|
770
|
+
|
|
771
|
+
/* NOTE: agent-picker.css also defines `.ap-card` (each director tile in
|
|
772
|
+
the convene overlay is an .ap-card grid of avatar + info + add-btn).
|
|
773
|
+
That stylesheet loads earlier but defines `display: grid`, a hover
|
|
774
|
+
background, etc. — and our rule below doesn't redeclare those, so
|
|
775
|
+
the grid + hover would leak into the profile. Override every
|
|
776
|
+
conflicting prop (including :hover) to keep the profile shell calm. */
|
|
777
|
+
.ap-card {
|
|
778
|
+
display: block;
|
|
779
|
+
grid-template-columns: none;
|
|
780
|
+
gap: 0;
|
|
781
|
+
align-items: stretch;
|
|
782
|
+
cursor: default;
|
|
783
|
+
text-decoration: none;
|
|
784
|
+
transition: none;
|
|
785
|
+
max-width: 1100px;
|
|
786
|
+
margin: 22px auto 40px;
|
|
787
|
+
padding: 0 28px;
|
|
788
|
+
background: transparent;
|
|
789
|
+
border: none;
|
|
790
|
+
position: relative;
|
|
791
|
+
font-family: var(--sans);
|
|
792
|
+
}
|
|
793
|
+
/* Full-width profile card variant · sibling of .ap-card directly
|
|
794
|
+
inside .main-view, so it spans the entire main-view width without
|
|
795
|
+
the 1100px max-width or horizontal padding that constrains the
|
|
796
|
+
two-column layout below. Sticky to the top of the scroll container
|
|
797
|
+
(.main-view) so the avatar/name banner stays visible while the
|
|
798
|
+
content below scrolls. */
|
|
799
|
+
.ap-profile-card.ap-profile-card-full {
|
|
800
|
+
position: sticky;
|
|
801
|
+
top: 0;
|
|
802
|
+
z-index: 50;
|
|
803
|
+
width: 100%;
|
|
804
|
+
max-width: none;
|
|
805
|
+
margin: 0;
|
|
806
|
+
border-left: none;
|
|
807
|
+
border-right: none;
|
|
808
|
+
border-top: none;
|
|
809
|
+
}
|
|
810
|
+
.ap-card:hover {
|
|
811
|
+
background: transparent;
|
|
812
|
+
border-color: transparent;
|
|
813
|
+
}
|
|
814
|
+
.ap-layout {
|
|
815
|
+
display: grid;
|
|
816
|
+
grid-template-columns: minmax(0, 1fr) 320px;
|
|
817
|
+
gap: 18px;
|
|
818
|
+
align-items: start;
|
|
819
|
+
}
|
|
820
|
+
@media (max-width: 880px) {
|
|
821
|
+
.ap-layout { grid-template-columns: 1fr; }
|
|
822
|
+
}
|
|
823
|
+
.ap-main-col,
|
|
824
|
+
.ap-side-col {
|
|
825
|
+
display: flex;
|
|
826
|
+
flex-direction: column;
|
|
827
|
+
gap: 16px;
|
|
828
|
+
min-width: 0;
|
|
829
|
+
}
|
|
830
|
+
/* Standalone module card · used by every block in both columns.
|
|
831
|
+
Soft rounded corners + a single subtle border so the card reads as
|
|
832
|
+
a calm surface, not a HUD chrome panel. Works equally well on
|
|
833
|
+
dark themes (eastwood/jtriley) and light themes (atrium/pinterest). */
|
|
834
|
+
/* Block · column layout, padding lives on the body so the header
|
|
835
|
+
reads as a full-width strip (mirrors the convene overlay's
|
|
836
|
+
.panel + .panel-head pattern). */
|
|
837
|
+
.ap-block {
|
|
838
|
+
background: var(--panel-2);
|
|
839
|
+
border: 0.5px solid var(--line);
|
|
840
|
+
padding: 0;
|
|
841
|
+
display: flex;
|
|
842
|
+
flex-direction: column;
|
|
843
|
+
gap: 0;
|
|
844
|
+
position: relative;
|
|
845
|
+
}
|
|
846
|
+
.ap-block > *:not(.ap-block-h) {
|
|
847
|
+
padding: 18px 22px 20px;
|
|
848
|
+
}
|
|
849
|
+
.ap-block-body {
|
|
850
|
+
display: flex;
|
|
851
|
+
flex-direction: column;
|
|
852
|
+
gap: 0;
|
|
853
|
+
min-width: 0;
|
|
854
|
+
}
|
|
855
|
+
/* Section header · compact strip across the top of the block. Tight
|
|
856
|
+
padding, panel-3 surface, mono uppercase title with the lime "// "
|
|
857
|
+
prefix lifted from the convene overlay's tune_room treatment. */
|
|
858
|
+
.ap-block-h {
|
|
859
|
+
display: flex;
|
|
860
|
+
align-items: center;
|
|
861
|
+
justify-content: space-between;
|
|
862
|
+
gap: 12px;
|
|
863
|
+
margin: 0;
|
|
864
|
+
padding: 6px 14px;
|
|
865
|
+
background: var(--panel-3);
|
|
866
|
+
border-bottom: 0.5px solid var(--line-bright);
|
|
867
|
+
font-family: var(--mono);
|
|
868
|
+
font-size: 10px;
|
|
869
|
+
font-weight: 700;
|
|
870
|
+
letter-spacing: 0.14em;
|
|
871
|
+
text-transform: uppercase;
|
|
872
|
+
color: var(--text);
|
|
873
|
+
line-height: 1.4;
|
|
874
|
+
min-height: 28px;
|
|
875
|
+
}
|
|
876
|
+
.ap-block-h-title {
|
|
877
|
+
display: inline-flex;
|
|
878
|
+
align-items: center;
|
|
879
|
+
gap: 6px;
|
|
880
|
+
line-height: 1.2;
|
|
881
|
+
}
|
|
882
|
+
.ap-block-h-title::before {
|
|
883
|
+
content: "// ";
|
|
884
|
+
color: var(--lime);
|
|
885
|
+
}
|
|
886
|
+
.ap-block-h-tag {
|
|
887
|
+
font-family: var(--mono);
|
|
888
|
+
font-size: 9.5px;
|
|
889
|
+
font-weight: 600;
|
|
890
|
+
letter-spacing: 0.06em;
|
|
891
|
+
color: var(--text-dim);
|
|
892
|
+
text-transform: uppercase;
|
|
893
|
+
}
|
|
894
|
+
.ap-block-h-action {
|
|
895
|
+
font-family: var(--mono);
|
|
896
|
+
font-size: 9px;
|
|
897
|
+
font-weight: 700;
|
|
898
|
+
letter-spacing: 0.12em;
|
|
899
|
+
color: var(--text-soft);
|
|
900
|
+
text-transform: uppercase;
|
|
901
|
+
background: transparent;
|
|
902
|
+
border: 0.5px solid var(--line-bright);
|
|
903
|
+
padding: 3px 8px;
|
|
904
|
+
cursor: pointer;
|
|
905
|
+
transition: border-color 0.12s, color 0.12s, background 0.12s;
|
|
906
|
+
}
|
|
907
|
+
.ap-block-h-action:hover {
|
|
908
|
+
border-color: var(--text-faint);
|
|
909
|
+
color: var(--text);
|
|
910
|
+
background: var(--panel);
|
|
911
|
+
}
|
|
912
|
+
.ap-sec-hint {
|
|
913
|
+
font-family: var(--mono);
|
|
914
|
+
font-size: 9px;
|
|
915
|
+
font-weight: 500;
|
|
916
|
+
letter-spacing: 0.06em;
|
|
917
|
+
color: var(--text-faint);
|
|
918
|
+
text-transform: uppercase;
|
|
919
|
+
margin-left: 8px;
|
|
920
|
+
}
|
|
921
|
+
/* Profile card · the new-agent overlay still uses the corner brackets,
|
|
922
|
+
so scope them to .ap-card.create only. The read-only profile reads
|
|
923
|
+
as a calmer panel. */
|
|
924
|
+
.ap-card.create::before, .ap-card.create::after,
|
|
925
|
+
.ap-card.create .ap-card-corner {
|
|
926
|
+
content: "";
|
|
927
|
+
position: absolute;
|
|
928
|
+
width: 10px; height: 10px;
|
|
929
|
+
border: 2px solid var(--lime);
|
|
930
|
+
pointer-events: none;
|
|
931
|
+
}
|
|
932
|
+
.ap-card.create::before { top: -2px; left: -2px; border-right: none; border-bottom: none; }
|
|
933
|
+
.ap-card.create::after { bottom: -2px; right: -2px; border-left: none; border-top: none; }
|
|
934
|
+
.ap-card.create .ap-card-corner.tr { top: -2px; right: -2px; border-left: none; border-bottom: none; }
|
|
935
|
+
.ap-card.create .ap-card-corner.bl { bottom: -2px; left: -2px; border-right: none; border-top: none; }
|
|
936
|
+
.ap-card.create { border: 2px solid var(--lime-dim); }
|
|
937
|
+
|
|
938
|
+
/* ── Header bar with tabs ─────────────────────────── */
|
|
939
|
+
.ap-card-head {
|
|
940
|
+
display: grid;
|
|
941
|
+
grid-template-columns: 36px 1fr 36px;
|
|
942
|
+
align-items: center;
|
|
943
|
+
gap: 12px;
|
|
944
|
+
padding: 12px 16px;
|
|
945
|
+
border-bottom: 0.5px solid var(--line-bright);
|
|
946
|
+
background: var(--panel-3);
|
|
947
|
+
}
|
|
948
|
+
.ap-back, .ap-menu {
|
|
949
|
+
width: 32px; height: 32px;
|
|
950
|
+
background: transparent;
|
|
951
|
+
border: 0.5px solid var(--line-bright);
|
|
952
|
+
color: var(--text-soft);
|
|
953
|
+
font-family: var(--mono);
|
|
954
|
+
font-size: 14px;
|
|
955
|
+
line-height: 1;
|
|
956
|
+
cursor: pointer;
|
|
957
|
+
display: flex;
|
|
958
|
+
align-items: center;
|
|
959
|
+
justify-content: center;
|
|
960
|
+
transition: all 0.12s;
|
|
961
|
+
}
|
|
962
|
+
.ap-back:hover, .ap-menu:hover {
|
|
963
|
+
border-color: var(--lime);
|
|
964
|
+
color: var(--lime);
|
|
965
|
+
}
|
|
966
|
+
.ap-tabs {
|
|
967
|
+
display: inline-flex;
|
|
968
|
+
justify-content: center;
|
|
969
|
+
background: var(--bg);
|
|
970
|
+
border: 0.5px solid var(--line-bright);
|
|
971
|
+
padding: 3px;
|
|
972
|
+
margin: 0 auto;
|
|
973
|
+
}
|
|
974
|
+
.ap-tab {
|
|
975
|
+
background: transparent;
|
|
976
|
+
border: none;
|
|
977
|
+
color: var(--text-soft);
|
|
978
|
+
padding: 6px 16px;
|
|
979
|
+
font-family: var(--mono);
|
|
980
|
+
font-size: 10.5px;
|
|
981
|
+
font-weight: 700;
|
|
982
|
+
letter-spacing: 0.18em;
|
|
983
|
+
text-transform: uppercase;
|
|
984
|
+
cursor: pointer;
|
|
985
|
+
transition: all 0.12s;
|
|
986
|
+
}
|
|
987
|
+
.ap-tab:hover {
|
|
988
|
+
color: var(--lime);
|
|
989
|
+
}
|
|
990
|
+
.ap-tab.active {
|
|
991
|
+
background: var(--lime);
|
|
992
|
+
color: var(--bg);
|
|
993
|
+
cursor: default;
|
|
994
|
+
}
|
|
995
|
+
.ap-tab[disabled] { opacity: 0.4; cursor: not-allowed; pointer-events: none; }
|
|
996
|
+
|
|
997
|
+
/* ── Profile-header card (cover + overlapping avatar) ──
|
|
998
|
+
The cover image fills the top of the card edge-to-edge;
|
|
999
|
+
the circular avatar is absolutely positioned so it
|
|
1000
|
+
overlaps the cover/body boundary; name + meta sit in
|
|
1001
|
+
the body below. Reference: Dribbble Amanda Smith. */
|
|
1002
|
+
.ap-profile-card {
|
|
1003
|
+
position: relative;
|
|
1004
|
+
background: var(--panel-2);
|
|
1005
|
+
border: 0.5px solid var(--line-bright);
|
|
1006
|
+
overflow: hidden;
|
|
1007
|
+
}
|
|
1008
|
+
.ap-cover {
|
|
1009
|
+
height: 84px;
|
|
1010
|
+
position: relative;
|
|
1011
|
+
overflow: hidden;
|
|
1012
|
+
border-bottom: 0.5px solid var(--line-bright);
|
|
1013
|
+
}
|
|
1014
|
+
.ap-cover-art {
|
|
1015
|
+
position: absolute;
|
|
1016
|
+
inset: 0;
|
|
1017
|
+
background:
|
|
1018
|
+
linear-gradient(120deg, var(--panel-3) 0%, var(--panel-2) 100%);
|
|
1019
|
+
}
|
|
1020
|
+
/* ⋯ menu now lives inside the body row at the right end · sits in
|
|
1021
|
+
line with the name+meta column rather than floating in the cover. */
|
|
1022
|
+
.ap-id-menu {
|
|
1023
|
+
flex-shrink: 0;
|
|
1024
|
+
align-self: center;
|
|
1025
|
+
width: 28px;
|
|
1026
|
+
height: 28px;
|
|
1027
|
+
border: 0.5px solid var(--line-bright);
|
|
1028
|
+
background: transparent;
|
|
1029
|
+
color: var(--text-soft);
|
|
1030
|
+
font-size: 16px;
|
|
1031
|
+
line-height: 1;
|
|
1032
|
+
cursor: pointer;
|
|
1033
|
+
display: flex;
|
|
1034
|
+
align-items: center;
|
|
1035
|
+
justify-content: center;
|
|
1036
|
+
transition: background 0.12s, color 0.12s, border-color 0.12s;
|
|
1037
|
+
}
|
|
1038
|
+
.ap-id-menu:hover { background: var(--panel-3); color: var(--text); border-color: var(--text-faint); }
|
|
1039
|
+
|
|
1040
|
+
/* ⋯ menu popover · floats over the profile, anchored to the
|
|
1041
|
+
menu button via fixed positioning set in JS. */
|
|
1042
|
+
.ap-id-menu-pop {
|
|
1043
|
+
position: fixed;
|
|
1044
|
+
z-index: 9100;
|
|
1045
|
+
min-width: 220px;
|
|
1046
|
+
background: var(--panel);
|
|
1047
|
+
border: 0.5px solid var(--line-strong);
|
|
1048
|
+
display: flex;
|
|
1049
|
+
flex-direction: column;
|
|
1050
|
+
}
|
|
1051
|
+
.ap-id-menu-item {
|
|
1052
|
+
display: flex;
|
|
1053
|
+
align-items: center;
|
|
1054
|
+
gap: 10px;
|
|
1055
|
+
padding: 10px 14px;
|
|
1056
|
+
background: transparent;
|
|
1057
|
+
border: none;
|
|
1058
|
+
border-bottom: 0.5px solid var(--line-bright);
|
|
1059
|
+
color: var(--text);
|
|
1060
|
+
font-family: var(--font-human);
|
|
1061
|
+
font-size: 12.5px;
|
|
1062
|
+
text-align: left;
|
|
1063
|
+
cursor: pointer;
|
|
1064
|
+
transition: background 0.1s;
|
|
1065
|
+
}
|
|
1066
|
+
.ap-id-menu-item:last-child { border-bottom: none; }
|
|
1067
|
+
.ap-id-menu-item:hover { background: var(--panel-2); }
|
|
1068
|
+
.ap-id-menu-mark { font-family: var(--mono); font-size: 11px; color: var(--lime); }
|
|
1069
|
+
/* Disabled state · used for the chair's locked-avatar row. Looks like
|
|
1070
|
+
the active items but doesn't react to hover and the mark switches
|
|
1071
|
+
to the muted ⊘ glyph. */
|
|
1072
|
+
.ap-id-menu-item.disabled {
|
|
1073
|
+
cursor: not-allowed;
|
|
1074
|
+
color: var(--text-faint);
|
|
1075
|
+
opacity: 0.85;
|
|
1076
|
+
}
|
|
1077
|
+
.ap-id-menu-item.disabled:hover { background: transparent; }
|
|
1078
|
+
.ap-id-menu-item.disabled .ap-id-menu-mark { color: var(--text-faint); }
|
|
1079
|
+
/* Hairline divider · separates routine actions from destructive ones
|
|
1080
|
+
(Delete) so the menu reads as two distinct groups. */
|
|
1081
|
+
.ap-id-menu-divider {
|
|
1082
|
+
height: 0.5px;
|
|
1083
|
+
background: var(--line-strong);
|
|
1084
|
+
margin: 4px 0;
|
|
1085
|
+
}
|
|
1086
|
+
/* Danger variant · used for "Delete director". Red label + glyph
|
|
1087
|
+
on idle, full red fill on hover so the destructive action is
|
|
1088
|
+
unmistakeably distinct from the regular ones. */
|
|
1089
|
+
.ap-id-menu-item-danger {
|
|
1090
|
+
color: var(--red, #B5706A);
|
|
1091
|
+
}
|
|
1092
|
+
.ap-id-menu-item-danger .ap-id-menu-mark {
|
|
1093
|
+
color: var(--red, #B5706A);
|
|
1094
|
+
}
|
|
1095
|
+
.ap-id-menu-item-danger:hover {
|
|
1096
|
+
background: var(--red, #B5706A);
|
|
1097
|
+
color: var(--bg);
|
|
1098
|
+
}
|
|
1099
|
+
.ap-id-menu-item-danger:hover .ap-id-menu-mark { color: var(--bg); }
|
|
1100
|
+
.ap-profile-body {
|
|
1101
|
+
position: relative;
|
|
1102
|
+
display: flex;
|
|
1103
|
+
align-items: center;
|
|
1104
|
+
gap: 18px;
|
|
1105
|
+
padding: 8px 32px 12px;
|
|
1106
|
+
}
|
|
1107
|
+
.ap-avatar {
|
|
1108
|
+
position: relative;
|
|
1109
|
+
width: 76px;
|
|
1110
|
+
height: 76px;
|
|
1111
|
+
margin-top: -46px;
|
|
1112
|
+
margin-bottom: 0;
|
|
1113
|
+
border-radius: 50%;
|
|
1114
|
+
background: var(--panel-2);
|
|
1115
|
+
/* Ring color follows the page bg so the avatar reads as separated
|
|
1116
|
+
from the cover gradient on every theme · in light themes the ring
|
|
1117
|
+
is white against the gray cover; in dark themes the ring is the
|
|
1118
|
+
near-black bg against the panel-toned cover. */
|
|
1119
|
+
border: 4px solid var(--bg);
|
|
1120
|
+
overflow: hidden;
|
|
1121
|
+
display: flex;
|
|
1122
|
+
align-items: center;
|
|
1123
|
+
justify-content: center;
|
|
1124
|
+
flex-shrink: 0;
|
|
1125
|
+
z-index: 2;
|
|
1126
|
+
}
|
|
1127
|
+
.ap-avatar img {
|
|
1128
|
+
width: 100%;
|
|
1129
|
+
height: 100%;
|
|
1130
|
+
object-fit: cover;
|
|
1131
|
+
image-rendering: pixelated;
|
|
1132
|
+
image-rendering: crisp-edges;
|
|
1133
|
+
}
|
|
1134
|
+
/* Text column · sits to the right of the avatar in the same row,
|
|
1135
|
+
so name + meta read as one tight identifier block. */
|
|
1136
|
+
.ap-id-text {
|
|
1137
|
+
display: flex;
|
|
1138
|
+
flex-direction: column;
|
|
1139
|
+
gap: 6px;
|
|
1140
|
+
flex: 1;
|
|
1141
|
+
min-width: 0;
|
|
1142
|
+
padding-top: 2px;
|
|
1143
|
+
}
|
|
1144
|
+
.ap-id-name {
|
|
1145
|
+
font-family: var(--font-human);
|
|
1146
|
+
font-size: 22px;
|
|
1147
|
+
font-weight: 700;
|
|
1148
|
+
color: var(--text);
|
|
1149
|
+
letter-spacing: -0.018em;
|
|
1150
|
+
line-height: 1.15;
|
|
1151
|
+
margin: 0;
|
|
1152
|
+
}
|
|
1153
|
+
.ap-id-meta {
|
|
1154
|
+
display: flex;
|
|
1155
|
+
align-items: center;
|
|
1156
|
+
gap: 8px;
|
|
1157
|
+
flex-wrap: wrap;
|
|
1158
|
+
line-height: 1.2;
|
|
1159
|
+
}
|
|
1160
|
+
.ap-id-role {
|
|
1161
|
+
font-family: var(--mono);
|
|
1162
|
+
font-size: 10px;
|
|
1163
|
+
font-weight: 700;
|
|
1164
|
+
letter-spacing: 0.18em;
|
|
1165
|
+
text-transform: uppercase;
|
|
1166
|
+
color: var(--text-soft);
|
|
1167
|
+
}
|
|
1168
|
+
.ap-id-dot { color: var(--text-faint); font-size: 10px; }
|
|
1169
|
+
.ap-id-handle {
|
|
1170
|
+
font-family: var(--mono);
|
|
1171
|
+
font-size: 10.5px;
|
|
1172
|
+
color: var(--text-faint);
|
|
1173
|
+
letter-spacing: 0.02em;
|
|
1174
|
+
}
|
|
1175
|
+
.ap-status-pill {
|
|
1176
|
+
display: inline-flex;
|
|
1177
|
+
align-items: center;
|
|
1178
|
+
padding: 3px 10px;
|
|
1179
|
+
margin-left: 6px;
|
|
1180
|
+
background: var(--panel-3);
|
|
1181
|
+
border: 0.5px solid var(--line-bright);
|
|
1182
|
+
color: var(--text-soft);
|
|
1183
|
+
font-family: var(--mono);
|
|
1184
|
+
font-size: 8.5px;
|
|
1185
|
+
font-weight: 700;
|
|
1186
|
+
letter-spacing: 0.14em;
|
|
1187
|
+
text-transform: uppercase;
|
|
1188
|
+
line-height: 1.2;
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
/* ── Body · single-column module stack ─────────────── */
|
|
1192
|
+
.ap-card-body {
|
|
1193
|
+
padding: 18px 28px 32px;
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
/* ── Module grid (single col by default; sections opt-in to span) ── */
|
|
1197
|
+
.ap-grid {
|
|
1198
|
+
display: grid;
|
|
1199
|
+
grid-template-columns: 1fr 1fr;
|
|
1200
|
+
gap: 16px;
|
|
1201
|
+
}
|
|
1202
|
+
@media (max-width: 560px) {
|
|
1203
|
+
.ap-grid { grid-template-columns: 1fr; }
|
|
1204
|
+
}
|
|
1205
|
+
.ap-sec {
|
|
1206
|
+
display: flex;
|
|
1207
|
+
flex-direction: column;
|
|
1208
|
+
gap: 10px;
|
|
1209
|
+
padding: 14px;
|
|
1210
|
+
background: var(--panel);
|
|
1211
|
+
border: 0.5px solid var(--line-bright);
|
|
1212
|
+
position: relative;
|
|
1213
|
+
}
|
|
1214
|
+
.ap-sec h3 {
|
|
1215
|
+
font-family: var(--mono);
|
|
1216
|
+
font-size: 9.5px;
|
|
1217
|
+
font-weight: 700;
|
|
1218
|
+
letter-spacing: 0.22em;
|
|
1219
|
+
text-transform: uppercase;
|
|
1220
|
+
color: var(--text-soft);
|
|
1221
|
+
margin: 0;
|
|
1222
|
+
padding-bottom: 6px;
|
|
1223
|
+
border-bottom: 0.5px dashed var(--line-bright);
|
|
1224
|
+
}
|
|
1225
|
+
.ap-sec.full { grid-column: 1 / -1; }
|
|
1226
|
+
|
|
1227
|
+
/* Badges · square tiles */
|
|
1228
|
+
.ap-badges-tiles {
|
|
1229
|
+
display: flex;
|
|
1230
|
+
gap: 8px;
|
|
1231
|
+
flex-wrap: wrap;
|
|
1232
|
+
align-items: center;
|
|
1233
|
+
min-height: 48px;
|
|
1234
|
+
}
|
|
1235
|
+
.ap-tile {
|
|
1236
|
+
width: 44px; height: 44px;
|
|
1237
|
+
border: 0.5px solid var(--lime-dim);
|
|
1238
|
+
background: var(--panel-3);
|
|
1239
|
+
color: var(--lime);
|
|
1240
|
+
display: flex;
|
|
1241
|
+
align-items: center;
|
|
1242
|
+
justify-content: center;
|
|
1243
|
+
font-size: 18px;
|
|
1244
|
+
font-family: var(--mono);
|
|
1245
|
+
position: relative;
|
|
1246
|
+
}
|
|
1247
|
+
.ap-tile .ap-tile-label {
|
|
1248
|
+
position: absolute;
|
|
1249
|
+
bottom: -14px;
|
|
1250
|
+
left: 50%;
|
|
1251
|
+
transform: translateX(-50%);
|
|
1252
|
+
font-size: 8px;
|
|
1253
|
+
letter-spacing: 0.14em;
|
|
1254
|
+
color: var(--text-faint);
|
|
1255
|
+
text-transform: uppercase;
|
|
1256
|
+
white-space: nowrap;
|
|
1257
|
+
}
|
|
1258
|
+
.ap-tile.empty {
|
|
1259
|
+
border-style: dashed;
|
|
1260
|
+
border-color: var(--line-bright);
|
|
1261
|
+
color: var(--text-faint);
|
|
1262
|
+
background: transparent;
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1265
|
+
/* Intel · bio prose. The .ap-intel-view variant matches body but
|
|
1266
|
+
rendered inside the .ap-intel container so the edit toggle can swap
|
|
1267
|
+
it with a textarea (mirrors the Instruction edit pattern). */
|
|
1268
|
+
.ap-intel-view,
|
|
1269
|
+
.ap-intel-body {
|
|
1270
|
+
font-family: var(--font-human);
|
|
1271
|
+
font-size: 12.5px;
|
|
1272
|
+
line-height: 1.55;
|
|
1273
|
+
color: var(--text);
|
|
1274
|
+
letter-spacing: -0.003em;
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
/* Skills · 4 progress bars */
|
|
1278
|
+
.ap-skill-rows { display: flex; flex-direction: column; gap: 9px; }
|
|
1279
|
+
.ap-skill-row {
|
|
1280
|
+
display: grid;
|
|
1281
|
+
grid-template-columns: 96px 1fr 32px;
|
|
1282
|
+
align-items: center;
|
|
1283
|
+
gap: 10px;
|
|
1284
|
+
}
|
|
1285
|
+
.ap-skill-label {
|
|
1286
|
+
font-family: var(--mono);
|
|
1287
|
+
font-size: 9.5px;
|
|
1288
|
+
letter-spacing: 0.1em;
|
|
1289
|
+
text-transform: uppercase;
|
|
1290
|
+
color: var(--text-soft);
|
|
1291
|
+
}
|
|
1292
|
+
.ap-skill-bar {
|
|
1293
|
+
height: 8px;
|
|
1294
|
+
background: var(--bg);
|
|
1295
|
+
border: 0.5px solid var(--line-bright);
|
|
1296
|
+
position: relative;
|
|
1297
|
+
overflow: hidden;
|
|
1298
|
+
}
|
|
1299
|
+
.ap-skill-fill {
|
|
1300
|
+
height: 100%;
|
|
1301
|
+
background: var(--lime);
|
|
1302
|
+
/* Pixel-art segment scan so the bar feels 8-bit. */
|
|
1303
|
+
background-image: linear-gradient(
|
|
1304
|
+
90deg, transparent 0, transparent 7px,
|
|
1305
|
+
rgba(0,0,0,0.18) 7px, rgba(0,0,0,0.18) 8px
|
|
1306
|
+
);
|
|
1307
|
+
background-size: 8px 100%;
|
|
1308
|
+
}
|
|
1309
|
+
.ap-skill-val {
|
|
1310
|
+
font-family: var(--mono);
|
|
1311
|
+
font-size: 10px;
|
|
1312
|
+
color: var(--lime);
|
|
1313
|
+
font-weight: 700;
|
|
1314
|
+
text-align: right;
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
/* ─── Skills v2 · uploaded Skill.md files ────────────────────────────
|
|
1318
|
+
Replaces the prototype inventory grid. Pattern · radar at top,
|
|
1319
|
+
per-skill rows below, drop-zone at the foot. PRD: docs/PRD-skills.md. */
|
|
1320
|
+
.ap-skills-v2 {
|
|
1321
|
+
display: flex;
|
|
1322
|
+
flex-direction: column;
|
|
1323
|
+
gap: 14px;
|
|
1324
|
+
}
|
|
1325
|
+
.ap-skills-radar-wrap {
|
|
1326
|
+
display: flex;
|
|
1327
|
+
align-items: center;
|
|
1328
|
+
justify-content: center;
|
|
1329
|
+
}
|
|
1330
|
+
.ap-radar {
|
|
1331
|
+
width: 100%;
|
|
1332
|
+
max-width: 290px;
|
|
1333
|
+
height: auto;
|
|
1334
|
+
display: block;
|
|
1335
|
+
}
|
|
1336
|
+
.ap-radar-grid {
|
|
1337
|
+
fill: none;
|
|
1338
|
+
stroke: var(--line-bright);
|
|
1339
|
+
stroke-width: 1;
|
|
1340
|
+
opacity: 0.45;
|
|
1341
|
+
}
|
|
1342
|
+
.ap-radar-spoke {
|
|
1343
|
+
stroke: var(--line);
|
|
1344
|
+
stroke-width: 1;
|
|
1345
|
+
opacity: 0.6;
|
|
1346
|
+
}
|
|
1347
|
+
.ap-radar-base {
|
|
1348
|
+
fill: var(--text-faint);
|
|
1349
|
+
fill-opacity: 0.18;
|
|
1350
|
+
stroke: var(--text-faint);
|
|
1351
|
+
stroke-width: 1;
|
|
1352
|
+
stroke-opacity: 0.7;
|
|
1353
|
+
}
|
|
1354
|
+
.ap-radar-current {
|
|
1355
|
+
fill: var(--lime);
|
|
1356
|
+
fill-opacity: 0.32;
|
|
1357
|
+
stroke: var(--lime);
|
|
1358
|
+
stroke-width: 1.5;
|
|
1359
|
+
}
|
|
1360
|
+
.ap-radar-axis-label {
|
|
1361
|
+
font-family: var(--mono);
|
|
1362
|
+
font-size: 8px;
|
|
1363
|
+
font-weight: 700;
|
|
1364
|
+
letter-spacing: 0.12em;
|
|
1365
|
+
fill: var(--text-soft);
|
|
1366
|
+
text-transform: uppercase;
|
|
1367
|
+
}
|
|
1368
|
+
|
|
1369
|
+
/* List · scrolls internally past 6 rows so a 12-skill chair doesn't
|
|
1370
|
+
blow up the panel height. The thumb fades in on hover/scroll via the
|
|
1371
|
+
same auto-hide pattern used in the agent overlay. */
|
|
1372
|
+
.ap-skills-list {
|
|
1373
|
+
display: flex;
|
|
1374
|
+
flex-direction: column;
|
|
1375
|
+
gap: 4px;
|
|
1376
|
+
max-height: 252px;
|
|
1377
|
+
overflow-y: auto;
|
|
1378
|
+
margin: 0 -2px;
|
|
1379
|
+
padding: 0 2px;
|
|
1380
|
+
scrollbar-width: thin;
|
|
1381
|
+
scrollbar-color: transparent transparent;
|
|
1382
|
+
scrollbar-gutter: stable;
|
|
1383
|
+
}
|
|
1384
|
+
.ap-skills-list:hover { scrollbar-color: var(--text-faint) transparent; }
|
|
1385
|
+
.ap-skills-list::-webkit-scrollbar { width: 6px; }
|
|
1386
|
+
.ap-skills-list::-webkit-scrollbar-track { background: transparent; }
|
|
1387
|
+
.ap-skills-list::-webkit-scrollbar-thumb { background: transparent; transition: background 0.18s; }
|
|
1388
|
+
.ap-skills-list:hover::-webkit-scrollbar-thumb { background: var(--text-faint); }
|
|
1389
|
+
|
|
1390
|
+
/* Single-line dense row · ◆ + name + inline deltas + ⋯ menu.
|
|
1391
|
+
Total height ≈ 32px. Uninstall folded into the popover so the row
|
|
1392
|
+
stays single-line at common widths. */
|
|
1393
|
+
.ap-skill-row {
|
|
1394
|
+
display: flex;
|
|
1395
|
+
align-items: center;
|
|
1396
|
+
gap: 10px;
|
|
1397
|
+
padding: 7px 10px;
|
|
1398
|
+
background: var(--bg);
|
|
1399
|
+
border: 0.5px solid var(--line-bright);
|
|
1400
|
+
font-family: var(--font-human);
|
|
1401
|
+
transition: border-color 0.12s, background 0.12s;
|
|
1402
|
+
min-height: 32px;
|
|
1403
|
+
}
|
|
1404
|
+
.ap-skill-row:hover {
|
|
1405
|
+
border-color: var(--text-faint);
|
|
1406
|
+
background: var(--panel);
|
|
1407
|
+
}
|
|
1408
|
+
.ap-skill-row-mark {
|
|
1409
|
+
flex-shrink: 0;
|
|
1410
|
+
color: var(--lime);
|
|
1411
|
+
font-size: 9px;
|
|
1412
|
+
line-height: 1;
|
|
1413
|
+
}
|
|
1414
|
+
.ap-skill-row-name {
|
|
1415
|
+
flex: 1 1 auto;
|
|
1416
|
+
min-width: 0;
|
|
1417
|
+
font-size: 12.5px;
|
|
1418
|
+
font-weight: 600;
|
|
1419
|
+
color: var(--text);
|
|
1420
|
+
letter-spacing: -0.005em;
|
|
1421
|
+
line-height: 1.3;
|
|
1422
|
+
white-space: nowrap;
|
|
1423
|
+
overflow: hidden;
|
|
1424
|
+
text-overflow: ellipsis;
|
|
1425
|
+
}
|
|
1426
|
+
.ap-skill-row-deltas {
|
|
1427
|
+
flex-shrink: 0;
|
|
1428
|
+
display: inline-flex;
|
|
1429
|
+
align-items: baseline;
|
|
1430
|
+
gap: 8px;
|
|
1431
|
+
font-family: var(--mono);
|
|
1432
|
+
font-size: 9.5px;
|
|
1433
|
+
letter-spacing: 0.02em;
|
|
1434
|
+
color: var(--text-soft);
|
|
1435
|
+
white-space: nowrap;
|
|
1436
|
+
overflow: hidden;
|
|
1437
|
+
max-width: 50%;
|
|
1438
|
+
text-overflow: ellipsis;
|
|
1439
|
+
}
|
|
1440
|
+
.ap-skill-row-menu {
|
|
1441
|
+
flex-shrink: 0;
|
|
1442
|
+
width: 20px;
|
|
1443
|
+
height: 20px;
|
|
1444
|
+
background: transparent;
|
|
1445
|
+
border: 0.5px solid transparent;
|
|
1446
|
+
color: var(--text-faint);
|
|
1447
|
+
font-family: var(--mono);
|
|
1448
|
+
font-size: 14px;
|
|
1449
|
+
line-height: 1;
|
|
1450
|
+
cursor: pointer;
|
|
1451
|
+
display: flex;
|
|
1452
|
+
align-items: center;
|
|
1453
|
+
justify-content: center;
|
|
1454
|
+
letter-spacing: 0;
|
|
1455
|
+
transition: color 0.12s, border-color 0.12s, background 0.12s;
|
|
1456
|
+
}
|
|
1457
|
+
.ap-skill-row-menu:hover {
|
|
1458
|
+
color: var(--text);
|
|
1459
|
+
border-color: var(--line-bright);
|
|
1460
|
+
background: var(--bg);
|
|
1461
|
+
}
|
|
1462
|
+
|
|
1463
|
+
/* Inline delta · "rigor +2" · axis label muted, value color-coded by
|
|
1464
|
+
sign. Tight gap so multiple deltas read as one breath. */
|
|
1465
|
+
.ap-sd { display: inline-flex; align-items: baseline; gap: 3px; }
|
|
1466
|
+
.ap-sd-l {
|
|
1467
|
+
color: var(--text-faint);
|
|
1468
|
+
text-transform: lowercase;
|
|
1469
|
+
letter-spacing: 0;
|
|
1470
|
+
}
|
|
1471
|
+
.ap-sd-v { font-weight: 700; }
|
|
1472
|
+
.ap-sd-v.pos { color: var(--lime); }
|
|
1473
|
+
.ap-sd-v.neg { color: var(--amber); }
|
|
1474
|
+
.ap-sd-empty {
|
|
1475
|
+
color: var(--text-faint);
|
|
1476
|
+
font-style: italic;
|
|
1477
|
+
font-family: var(--font-human);
|
|
1478
|
+
font-size: 10px;
|
|
1479
|
+
}
|
|
1480
|
+
|
|
1481
|
+
.ap-skills-drop {
|
|
1482
|
+
display: flex;
|
|
1483
|
+
align-items: center;
|
|
1484
|
+
justify-content: center;
|
|
1485
|
+
gap: 6px;
|
|
1486
|
+
padding: 7px 12px;
|
|
1487
|
+
background: var(--panel);
|
|
1488
|
+
border: 0.5px dashed var(--line-bright);
|
|
1489
|
+
color: var(--text-soft);
|
|
1490
|
+
font-family: var(--font-human);
|
|
1491
|
+
font-size: 11.5px;
|
|
1492
|
+
font-weight: 400;
|
|
1493
|
+
letter-spacing: -0.003em;
|
|
1494
|
+
cursor: pointer;
|
|
1495
|
+
transition: border-color 0.12s, color 0.12s, background 0.12s;
|
|
1496
|
+
}
|
|
1497
|
+
.ap-skills-drop:hover {
|
|
1498
|
+
border-color: var(--text-faint);
|
|
1499
|
+
color: var(--text);
|
|
1500
|
+
background: var(--panel-2);
|
|
1501
|
+
}
|
|
1502
|
+
.ap-skills-drop.dragging {
|
|
1503
|
+
border-color: var(--lime);
|
|
1504
|
+
color: var(--lime);
|
|
1505
|
+
background: var(--panel-3);
|
|
1506
|
+
}
|
|
1507
|
+
.ap-skills-drop.disabled {
|
|
1508
|
+
cursor: not-allowed;
|
|
1509
|
+
opacity: 0.65;
|
|
1510
|
+
border-color: var(--line);
|
|
1511
|
+
}
|
|
1512
|
+
.ap-skills-drop.disabled:hover {
|
|
1513
|
+
border-color: var(--line);
|
|
1514
|
+
color: var(--text-soft);
|
|
1515
|
+
background: var(--panel);
|
|
1516
|
+
}
|
|
1517
|
+
.ap-skills-drop-mark { font-size: 12px; line-height: 1; color: var(--lime); }
|
|
1518
|
+
.ap-skills-drop-text code {
|
|
1519
|
+
font-family: var(--mono);
|
|
1520
|
+
font-size: 11px;
|
|
1521
|
+
letter-spacing: 0;
|
|
1522
|
+
color: inherit;
|
|
1523
|
+
}
|
|
1524
|
+
|
|
1525
|
+
/* Skill info popover · fixed to the viewport, anchored above the
|
|
1526
|
+
trigger. Folds info + uninstall into one menu so the row stays
|
|
1527
|
+
single-line dense. Closed on outside click (capture-phase listener). */
|
|
1528
|
+
.ap-skill-info-pop {
|
|
1529
|
+
position: fixed;
|
|
1530
|
+
z-index: 9200;
|
|
1531
|
+
width: 300px;
|
|
1532
|
+
max-height: calc(100vh - 32px);
|
|
1533
|
+
overflow-y: auto;
|
|
1534
|
+
padding: 14px 16px;
|
|
1535
|
+
background: var(--panel);
|
|
1536
|
+
border: 0.5px solid var(--line-strong);
|
|
1537
|
+
font-family: var(--font-human);
|
|
1538
|
+
display: flex;
|
|
1539
|
+
flex-direction: column;
|
|
1540
|
+
gap: 10px;
|
|
1541
|
+
}
|
|
1542
|
+
.ap-skill-info-head {
|
|
1543
|
+
font-size: 13.5px;
|
|
1544
|
+
font-weight: 700;
|
|
1545
|
+
color: var(--text);
|
|
1546
|
+
letter-spacing: -0.008em;
|
|
1547
|
+
line-height: 1.25;
|
|
1548
|
+
}
|
|
1549
|
+
.ap-skill-info-sub {
|
|
1550
|
+
font-family: var(--mono);
|
|
1551
|
+
font-size: 9.5px;
|
|
1552
|
+
letter-spacing: 0.06em;
|
|
1553
|
+
color: var(--text-faint);
|
|
1554
|
+
margin-top: -6px;
|
|
1555
|
+
}
|
|
1556
|
+
.ap-skill-info-desc {
|
|
1557
|
+
font-size: 12px;
|
|
1558
|
+
color: var(--text-soft);
|
|
1559
|
+
line-height: 1.55;
|
|
1560
|
+
letter-spacing: -0.003em;
|
|
1561
|
+
}
|
|
1562
|
+
.ap-skill-info-when,
|
|
1563
|
+
.ap-skill-info-ability,
|
|
1564
|
+
.ap-skill-info-tips-wrap {
|
|
1565
|
+
font-size: 11.5px;
|
|
1566
|
+
color: var(--text);
|
|
1567
|
+
line-height: 1.5;
|
|
1568
|
+
}
|
|
1569
|
+
.ap-skill-info-when .lbl,
|
|
1570
|
+
.ap-skill-info-ability .lbl,
|
|
1571
|
+
.ap-skill-info-tips-wrap .lbl {
|
|
1572
|
+
display: block;
|
|
1573
|
+
font-family: var(--mono);
|
|
1574
|
+
font-size: 8.5px;
|
|
1575
|
+
font-weight: 700;
|
|
1576
|
+
letter-spacing: 0.18em;
|
|
1577
|
+
text-transform: uppercase;
|
|
1578
|
+
color: var(--text-faint);
|
|
1579
|
+
margin-bottom: 5px;
|
|
1580
|
+
}
|
|
1581
|
+
.ap-skill-info-ability-row {
|
|
1582
|
+
display: flex;
|
|
1583
|
+
flex-wrap: wrap;
|
|
1584
|
+
gap: 10px;
|
|
1585
|
+
font-family: var(--mono);
|
|
1586
|
+
font-size: 10.5px;
|
|
1587
|
+
}
|
|
1588
|
+
.ap-skill-info-tips {
|
|
1589
|
+
list-style: none;
|
|
1590
|
+
margin: 0;
|
|
1591
|
+
padding: 0;
|
|
1592
|
+
display: flex;
|
|
1593
|
+
flex-direction: column;
|
|
1594
|
+
gap: 4px;
|
|
1595
|
+
}
|
|
1596
|
+
.ap-skill-info-tips li {
|
|
1597
|
+
position: relative;
|
|
1598
|
+
padding-left: 12px;
|
|
1599
|
+
font-size: 11.5px;
|
|
1600
|
+
color: var(--text-soft);
|
|
1601
|
+
line-height: 1.5;
|
|
1602
|
+
}
|
|
1603
|
+
.ap-skill-info-tips li::before {
|
|
1604
|
+
content: "·";
|
|
1605
|
+
position: absolute;
|
|
1606
|
+
left: 4px;
|
|
1607
|
+
color: var(--lime);
|
|
1608
|
+
font-weight: 700;
|
|
1609
|
+
}
|
|
1610
|
+
.ap-skill-info-empty {
|
|
1611
|
+
font-size: 11.5px;
|
|
1612
|
+
color: var(--text-faint);
|
|
1613
|
+
font-style: italic;
|
|
1614
|
+
}
|
|
1615
|
+
.ap-skill-info-actions {
|
|
1616
|
+
margin-top: 4px;
|
|
1617
|
+
padding-top: 12px;
|
|
1618
|
+
border-top: 0.5px solid var(--line-bright);
|
|
1619
|
+
display: flex;
|
|
1620
|
+
justify-content: flex-end;
|
|
1621
|
+
}
|
|
1622
|
+
.ap-skill-info-uninstall {
|
|
1623
|
+
font-family: var(--mono);
|
|
1624
|
+
font-size: 10px;
|
|
1625
|
+
font-weight: 700;
|
|
1626
|
+
letter-spacing: 0.14em;
|
|
1627
|
+
text-transform: uppercase;
|
|
1628
|
+
padding: 6px 12px;
|
|
1629
|
+
background: transparent;
|
|
1630
|
+
border: 0.5px solid var(--line-bright);
|
|
1631
|
+
color: var(--text-soft);
|
|
1632
|
+
cursor: pointer;
|
|
1633
|
+
transition: border-color 0.12s, color 0.12s, background 0.12s;
|
|
1634
|
+
}
|
|
1635
|
+
.ap-skill-info-uninstall:hover {
|
|
1636
|
+
border-color: var(--red, #C85A5A);
|
|
1637
|
+
color: var(--red, #C85A5A);
|
|
1638
|
+
}
|
|
1639
|
+
|
|
1640
|
+
/* System skill variant · row tinted lime, "system" badge, locked notice
|
|
1641
|
+
replaces the uninstall button in the popover. */
|
|
1642
|
+
.ap-skill-row-system .ap-skill-row-mark {
|
|
1643
|
+
color: var(--lime);
|
|
1644
|
+
}
|
|
1645
|
+
.ap-skill-row-sys {
|
|
1646
|
+
display: inline-block;
|
|
1647
|
+
margin-left: 8px;
|
|
1648
|
+
padding: 1px 6px;
|
|
1649
|
+
font-family: var(--mono);
|
|
1650
|
+
font-size: 8.5px;
|
|
1651
|
+
font-weight: 700;
|
|
1652
|
+
letter-spacing: 0.16em;
|
|
1653
|
+
text-transform: uppercase;
|
|
1654
|
+
color: var(--lime);
|
|
1655
|
+
border: 0.5px solid var(--lime-dim, var(--lime));
|
|
1656
|
+
background: transparent;
|
|
1657
|
+
vertical-align: 1px;
|
|
1658
|
+
}
|
|
1659
|
+
.ap-skill-info-sys-badge {
|
|
1660
|
+
display: inline-block;
|
|
1661
|
+
margin-left: 8px;
|
|
1662
|
+
padding: 2px 7px;
|
|
1663
|
+
font-family: var(--mono);
|
|
1664
|
+
font-size: 8.5px;
|
|
1665
|
+
font-weight: 700;
|
|
1666
|
+
letter-spacing: 0.16em;
|
|
1667
|
+
text-transform: uppercase;
|
|
1668
|
+
color: var(--lime);
|
|
1669
|
+
border: 0.5px solid var(--lime-dim, var(--lime));
|
|
1670
|
+
background: transparent;
|
|
1671
|
+
vertical-align: 2px;
|
|
1672
|
+
}
|
|
1673
|
+
.ap-skill-info-locked {
|
|
1674
|
+
margin-top: 4px;
|
|
1675
|
+
padding-top: 12px;
|
|
1676
|
+
border-top: 0.5px solid var(--line-bright);
|
|
1677
|
+
display: flex;
|
|
1678
|
+
align-items: center;
|
|
1679
|
+
gap: 8px;
|
|
1680
|
+
font-family: var(--mono);
|
|
1681
|
+
font-size: 10px;
|
|
1682
|
+
letter-spacing: 0.1em;
|
|
1683
|
+
text-transform: uppercase;
|
|
1684
|
+
color: var(--text-faint);
|
|
1685
|
+
}
|
|
1686
|
+
.ap-skill-info-locked-mark {
|
|
1687
|
+
color: var(--lime);
|
|
1688
|
+
font-size: 12px;
|
|
1689
|
+
line-height: 1;
|
|
1690
|
+
}
|
|
1691
|
+
|
|
1692
|
+
/* Equipment · 6 inventory slots */
|
|
1693
|
+
.ap-equipment-grid {
|
|
1694
|
+
display: grid;
|
|
1695
|
+
grid-template-columns: repeat(6, 1fr);
|
|
1696
|
+
gap: 6px;
|
|
1697
|
+
}
|
|
1698
|
+
/* Compact variant for the right rail · 3 cols, smaller slots. */
|
|
1699
|
+
.ap-equipment-grid.compact {
|
|
1700
|
+
grid-template-columns: repeat(3, 1fr);
|
|
1701
|
+
gap: 8px;
|
|
1702
|
+
}
|
|
1703
|
+
.ap-slot {
|
|
1704
|
+
aspect-ratio: 1;
|
|
1705
|
+
border: 0.5px solid var(--line);
|
|
1706
|
+
background: transparent;
|
|
1707
|
+
display: flex;
|
|
1708
|
+
align-items: center;
|
|
1709
|
+
justify-content: center;
|
|
1710
|
+
font-family: var(--mono);
|
|
1711
|
+
color: var(--text-faint);
|
|
1712
|
+
font-size: 14px;
|
|
1713
|
+
cursor: default;
|
|
1714
|
+
position: relative;
|
|
1715
|
+
opacity: 0.7;
|
|
1716
|
+
transition: border-color 0.12s, background 0.12s, opacity 0.12s, color 0.12s;
|
|
1717
|
+
}
|
|
1718
|
+
.ap-slot:hover {
|
|
1719
|
+
border-color: var(--line-bright);
|
|
1720
|
+
background: var(--panel);
|
|
1721
|
+
opacity: 1;
|
|
1722
|
+
color: var(--text-soft);
|
|
1723
|
+
}
|
|
1724
|
+
.ap-slot.filled {
|
|
1725
|
+
border-color: var(--line-bright);
|
|
1726
|
+
color: var(--text);
|
|
1727
|
+
background: var(--panel-3);
|
|
1728
|
+
opacity: 1;
|
|
1729
|
+
}
|
|
1730
|
+
.ap-slot.filled:hover { border-color: var(--text-faint); }
|
|
1731
|
+
.ap-slot .ap-slot-ext {
|
|
1732
|
+
position: absolute;
|
|
1733
|
+
bottom: 2px;
|
|
1734
|
+
left: 50%;
|
|
1735
|
+
transform: translateX(-50%);
|
|
1736
|
+
font-size: 7.5px;
|
|
1737
|
+
letter-spacing: 0.1em;
|
|
1738
|
+
color: var(--text-faint);
|
|
1739
|
+
text-transform: uppercase;
|
|
1740
|
+
}
|
|
1741
|
+
|
|
1742
|
+
/* Coming-soon block · used by sections (e.g., Equipment) whose feature
|
|
1743
|
+
isn't shipped yet. Centered glyph + title + body copy + status tag,
|
|
1744
|
+
so the section reads as deliberately reserved space rather than an
|
|
1745
|
+
empty grid. */
|
|
1746
|
+
.ap-coming-soon {
|
|
1747
|
+
display: flex;
|
|
1748
|
+
flex-direction: column;
|
|
1749
|
+
align-items: center;
|
|
1750
|
+
text-align: center;
|
|
1751
|
+
gap: 8px;
|
|
1752
|
+
padding: 6px 4px 4px;
|
|
1753
|
+
}
|
|
1754
|
+
.ap-coming-soon-mark {
|
|
1755
|
+
font-family: var(--mono);
|
|
1756
|
+
font-size: 18px;
|
|
1757
|
+
line-height: 1;
|
|
1758
|
+
color: var(--lime-dim);
|
|
1759
|
+
letter-spacing: 0;
|
|
1760
|
+
}
|
|
1761
|
+
.ap-coming-soon-title {
|
|
1762
|
+
font-family: var(--font-human);
|
|
1763
|
+
font-size: 13.5px;
|
|
1764
|
+
font-weight: 700;
|
|
1765
|
+
letter-spacing: -0.005em;
|
|
1766
|
+
color: var(--text);
|
|
1767
|
+
line-height: 1.2;
|
|
1768
|
+
}
|
|
1769
|
+
.ap-coming-soon-body {
|
|
1770
|
+
font-family: var(--font-human);
|
|
1771
|
+
font-size: 12px;
|
|
1772
|
+
line-height: 1.55;
|
|
1773
|
+
color: var(--text-soft);
|
|
1774
|
+
letter-spacing: -0.003em;
|
|
1775
|
+
margin: 0;
|
|
1776
|
+
max-width: 280px;
|
|
1777
|
+
}
|
|
1778
|
+
.ap-coming-soon-tag {
|
|
1779
|
+
margin-top: 4px;
|
|
1780
|
+
font-family: var(--mono);
|
|
1781
|
+
font-size: 9px;
|
|
1782
|
+
font-weight: 700;
|
|
1783
|
+
letter-spacing: 0.16em;
|
|
1784
|
+
text-transform: uppercase;
|
|
1785
|
+
color: var(--lime);
|
|
1786
|
+
border: 0.5px solid var(--lime-dim);
|
|
1787
|
+
padding: 3px 9px;
|
|
1788
|
+
}
|
|
1789
|
+
|
|
1790
|
+
/* Roster · bottom-spanning row showing recent room avatars */
|
|
1791
|
+
.ap-roster-portraits {
|
|
1792
|
+
display: flex;
|
|
1793
|
+
gap: 10px;
|
|
1794
|
+
flex-wrap: wrap;
|
|
1795
|
+
}
|
|
1796
|
+
.ap-portrait-mini {
|
|
1797
|
+
width: 56px; height: 56px;
|
|
1798
|
+
border: 0.5px solid var(--line-strong);
|
|
1799
|
+
background: var(--bg);
|
|
1800
|
+
display: flex;
|
|
1801
|
+
align-items: center;
|
|
1802
|
+
justify-content: center;
|
|
1803
|
+
position: relative;
|
|
1804
|
+
}
|
|
1805
|
+
.ap-portrait-mini img {
|
|
1806
|
+
width: 80%; height: 80%;
|
|
1807
|
+
image-rendering: pixelated;
|
|
1808
|
+
}
|
|
1809
|
+
.ap-portrait-mini.empty {
|
|
1810
|
+
border-style: dashed;
|
|
1811
|
+
border-color: var(--line-bright);
|
|
1812
|
+
color: var(--text-faint);
|
|
1813
|
+
font-family: var(--mono);
|
|
1814
|
+
font-size: 18px;
|
|
1815
|
+
}
|
|
1816
|
+
|
|
1817
|
+
/* ── Footer CTA bar ────────────────────────────────── */
|
|
1818
|
+
.ap-card-foot {
|
|
1819
|
+
border-top: 0.5px solid var(--line-bright);
|
|
1820
|
+
padding: 14px 20px;
|
|
1821
|
+
display: flex;
|
|
1822
|
+
align-items: center;
|
|
1823
|
+
justify-content: space-between;
|
|
1824
|
+
gap: 10px;
|
|
1825
|
+
background: var(--panel-3);
|
|
1826
|
+
}
|
|
1827
|
+
.ap-foot-meta {
|
|
1828
|
+
font-family: var(--mono);
|
|
1829
|
+
font-size: 9.5px;
|
|
1830
|
+
letter-spacing: 0.14em;
|
|
1831
|
+
text-transform: uppercase;
|
|
1832
|
+
color: var(--text-faint);
|
|
1833
|
+
}
|
|
1834
|
+
.ap-cta {
|
|
1835
|
+
display: inline-flex;
|
|
1836
|
+
align-items: center;
|
|
1837
|
+
gap: 10px;
|
|
1838
|
+
background: var(--lime);
|
|
1839
|
+
color: var(--bg);
|
|
1840
|
+
border: 0.5px solid var(--lime);
|
|
1841
|
+
padding: 11px 22px;
|
|
1842
|
+
font-family: var(--mono);
|
|
1843
|
+
font-size: 11px;
|
|
1844
|
+
font-weight: 700;
|
|
1845
|
+
letter-spacing: 0.18em;
|
|
1846
|
+
text-transform: uppercase;
|
|
1847
|
+
cursor: pointer;
|
|
1848
|
+
text-decoration: none;
|
|
1849
|
+
transition: all 0.14s;
|
|
1850
|
+
}
|
|
1851
|
+
.ap-cta:hover {
|
|
1852
|
+
background: transparent;
|
|
1853
|
+
color: var(--lime);
|
|
1854
|
+
}
|
|
1855
|
+
.ap-cta-arrow { font-size: 14px; line-height: 1; }
|
|
1856
|
+
|
|
1857
|
+
/* ═══════════════════════════════════════════
|
|
1858
|
+
PROFILE · MODEL dropdown
|
|
1859
|
+
─────────────────────────────────────────────
|
|
1860
|
+
Native <select> styled to match the calm
|
|
1861
|
+
panel chrome — no lime accents.
|
|
1862
|
+
═════════════════════════════════════════════ */
|
|
1863
|
+
/* Model · custom dropdown trigger + popover (replaces native select). */
|
|
1864
|
+
.ap-model-row {
|
|
1865
|
+
display: flex;
|
|
1866
|
+
flex-direction: column;
|
|
1867
|
+
gap: 6px;
|
|
1868
|
+
}
|
|
1869
|
+
/* Single-line trigger · name on the left, provider chip on the right,
|
|
1870
|
+
caret last. Was previously a 2-row layout with provider stacked
|
|
1871
|
+
below the name; the row read way too tall for what's effectively
|
|
1872
|
+
a dropdown trigger. Long names still wrap-protected with ellipsis. */
|
|
1873
|
+
.ap-model-trigger {
|
|
1874
|
+
display: grid;
|
|
1875
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
1876
|
+
gap: 10px;
|
|
1877
|
+
align-items: center;
|
|
1878
|
+
background: var(--bg);
|
|
1879
|
+
border: 0.5px solid var(--line-bright);
|
|
1880
|
+
color: var(--text);
|
|
1881
|
+
padding: 6px 12px;
|
|
1882
|
+
cursor: pointer;
|
|
1883
|
+
font-family: inherit;
|
|
1884
|
+
text-align: left;
|
|
1885
|
+
width: 100%;
|
|
1886
|
+
min-width: 0;
|
|
1887
|
+
transition: border-color 0.1s;
|
|
1888
|
+
}
|
|
1889
|
+
.ap-model-trigger-text {
|
|
1890
|
+
display: flex;
|
|
1891
|
+
flex-direction: row;
|
|
1892
|
+
align-items: baseline;
|
|
1893
|
+
gap: 10px;
|
|
1894
|
+
min-width: 0;
|
|
1895
|
+
}
|
|
1896
|
+
.ap-model-trigger:hover { border-color: var(--line-bright); background: var(--panel); }
|
|
1897
|
+
.ap-model-trigger-name {
|
|
1898
|
+
flex: 1 1 auto;
|
|
1899
|
+
font-family: var(--font-human);
|
|
1900
|
+
font-size: 12.5px;
|
|
1901
|
+
font-weight: 700;
|
|
1902
|
+
color: var(--text);
|
|
1903
|
+
letter-spacing: -0.005em;
|
|
1904
|
+
line-height: 1.3;
|
|
1905
|
+
white-space: nowrap;
|
|
1906
|
+
overflow: hidden;
|
|
1907
|
+
text-overflow: ellipsis;
|
|
1908
|
+
min-width: 0;
|
|
1909
|
+
}
|
|
1910
|
+
.ap-model-trigger-provider {
|
|
1911
|
+
flex: 0 0 auto;
|
|
1912
|
+
font-family: var(--mono);
|
|
1913
|
+
font-size: 9px;
|
|
1914
|
+
font-weight: 700;
|
|
1915
|
+
letter-spacing: 0.14em;
|
|
1916
|
+
text-transform: uppercase;
|
|
1917
|
+
color: var(--text-faint);
|
|
1918
|
+
white-space: nowrap;
|
|
1919
|
+
}
|
|
1920
|
+
.ap-model-trigger-caret {
|
|
1921
|
+
color: var(--text-faint);
|
|
1922
|
+
font-size: 11px;
|
|
1923
|
+
line-height: 1;
|
|
1924
|
+
flex-shrink: 0;
|
|
1925
|
+
}
|
|
1926
|
+
|
|
1927
|
+
/* Track Record stats · read-only counters shown below the model
|
|
1928
|
+
selector. Deliberately no background / no border / no padding on
|
|
1929
|
+
the cells: keeping stats as pure typography (vs. the bordered
|
|
1930
|
+
model trigger above) signals that these are passive data, not
|
|
1931
|
+
interactive controls. A hairline divider above the group
|
|
1932
|
+
separates them from the dropdown; thin verticals between the
|
|
1933
|
+
three cells form a clean spec-readout rhythm. */
|
|
1934
|
+
/* Inline status row · "12 rooms · 47 rounds · 1.2k tokens".
|
|
1935
|
+
Replaces the older 3-up tile grid which read as a dashboard widget
|
|
1936
|
+
detached from the rest of the block. Mono with tabular-nums keeps
|
|
1937
|
+
the numerals aligned; lowercase labels match the memory meta-line
|
|
1938
|
+
typography so the whole panel reads as one family. */
|
|
1939
|
+
.ap-stats-grid {
|
|
1940
|
+
display: flex;
|
|
1941
|
+
flex-wrap: wrap;
|
|
1942
|
+
align-items: baseline;
|
|
1943
|
+
gap: 6px 18px;
|
|
1944
|
+
margin-top: 14px;
|
|
1945
|
+
padding-top: 14px;
|
|
1946
|
+
border-top: 0.5px solid var(--line);
|
|
1947
|
+
}
|
|
1948
|
+
.ap-stat {
|
|
1949
|
+
display: inline-flex;
|
|
1950
|
+
align-items: baseline;
|
|
1951
|
+
gap: 5px;
|
|
1952
|
+
padding: 0;
|
|
1953
|
+
background: transparent;
|
|
1954
|
+
border: none;
|
|
1955
|
+
text-align: left;
|
|
1956
|
+
min-width: 0;
|
|
1957
|
+
}
|
|
1958
|
+
.ap-stat-v {
|
|
1959
|
+
font-family: var(--mono);
|
|
1960
|
+
font-size: 13px;
|
|
1961
|
+
font-weight: 700;
|
|
1962
|
+
color: var(--text);
|
|
1963
|
+
letter-spacing: -0.005em;
|
|
1964
|
+
line-height: 1;
|
|
1965
|
+
font-variant-numeric: tabular-nums;
|
|
1966
|
+
}
|
|
1967
|
+
.ap-stat-l {
|
|
1968
|
+
font-family: var(--mono);
|
|
1969
|
+
font-size: 9px;
|
|
1970
|
+
font-weight: 400;
|
|
1971
|
+
letter-spacing: 0.06em;
|
|
1972
|
+
text-transform: lowercase;
|
|
1973
|
+
color: var(--text-faint);
|
|
1974
|
+
line-height: 1;
|
|
1975
|
+
}
|
|
1976
|
+
|
|
1977
|
+
/* Popover — anchored under the trigger. Mirrors the room composer's
|
|
1978
|
+
.cmp-dd-pop dropdown: tight rows, mono micro-type hint inline with
|
|
1979
|
+
the label, provider section headers, hairline scrollbar. One
|
|
1980
|
+
coherent dropdown vocabulary across the prototype. */
|
|
1981
|
+
.ap-model-picker {
|
|
1982
|
+
position: fixed;
|
|
1983
|
+
z-index: 9100;
|
|
1984
|
+
background: var(--panel);
|
|
1985
|
+
border: 0.5px solid var(--line-strong);
|
|
1986
|
+
padding: 2px 0;
|
|
1987
|
+
overflow-y: auto;
|
|
1988
|
+
max-height: 60vh;
|
|
1989
|
+
border-radius: 4px;
|
|
1990
|
+
}
|
|
1991
|
+
.ap-model-picker::-webkit-scrollbar { width: 6px; }
|
|
1992
|
+
.ap-model-picker::-webkit-scrollbar-thumb { background: var(--line-strong); }
|
|
1993
|
+
|
|
1994
|
+
/* Provider section header · matches .cmp-dd-group · mono / faint /
|
|
1995
|
+
uppercase, hairline divider above (suppressed on the first one). */
|
|
1996
|
+
.ap-model-group {
|
|
1997
|
+
font-family: var(--mono);
|
|
1998
|
+
font-size: 8.5px;
|
|
1999
|
+
letter-spacing: 0.18em;
|
|
2000
|
+
text-transform: uppercase;
|
|
2001
|
+
color: var(--text-faint);
|
|
2002
|
+
padding: 8px 10px 3px;
|
|
2003
|
+
border-top: 0.5px solid var(--line);
|
|
2004
|
+
}
|
|
2005
|
+
.ap-model-group:first-child {
|
|
2006
|
+
border-top: none;
|
|
2007
|
+
padding-top: 5px;
|
|
2008
|
+
}
|
|
2009
|
+
|
|
2010
|
+
/* Row · single-line label + uppercase mono hint, baseline-aligned,
|
|
2011
|
+
same vertical rhythm as .cmp-dd-opt. No per-row divider. */
|
|
2012
|
+
.ap-model-opt {
|
|
2013
|
+
display: flex;
|
|
2014
|
+
align-items: baseline;
|
|
2015
|
+
gap: 10px;
|
|
2016
|
+
width: 100%;
|
|
2017
|
+
padding: 5px 10px;
|
|
2018
|
+
background: transparent;
|
|
2019
|
+
border: none;
|
|
2020
|
+
text-align: left;
|
|
2021
|
+
cursor: pointer;
|
|
2022
|
+
transition: background 0.1s;
|
|
2023
|
+
font-family: inherit;
|
|
2024
|
+
color: var(--text);
|
|
2025
|
+
min-width: 0;
|
|
2026
|
+
}
|
|
2027
|
+
.ap-model-opt:hover { background: var(--panel-2); }
|
|
2028
|
+
.ap-model-opt.active { background: var(--panel-3); }
|
|
2029
|
+
.ap-model-opt-label {
|
|
2030
|
+
font-family: var(--font-human);
|
|
2031
|
+
font-size: 12.5px;
|
|
2032
|
+
font-weight: 600;
|
|
2033
|
+
color: var(--text);
|
|
2034
|
+
letter-spacing: -0.005em;
|
|
2035
|
+
line-height: 1.3;
|
|
2036
|
+
flex-shrink: 0;
|
|
2037
|
+
white-space: nowrap;
|
|
2038
|
+
overflow: hidden;
|
|
2039
|
+
text-overflow: ellipsis;
|
|
2040
|
+
min-width: 0;
|
|
2041
|
+
}
|
|
2042
|
+
.ap-model-opt.active .ap-model-opt-label { color: var(--lime); }
|
|
2043
|
+
.ap-model-opt-hint {
|
|
2044
|
+
font-family: var(--mono);
|
|
2045
|
+
font-size: 8.5px;
|
|
2046
|
+
letter-spacing: 0.08em;
|
|
2047
|
+
text-transform: uppercase;
|
|
2048
|
+
/* `--text-dim` (not `--text-faint`) because the deck — "fast · cheap
|
|
2049
|
+
· good", "reasoning · long context", etc. — carries the meaning of
|
|
2050
|
+
each model. Matches `.cmp-dd-opt-hint` in the new-room composer. */
|
|
2051
|
+
color: var(--text-dim);
|
|
2052
|
+
line-height: 1.3;
|
|
2053
|
+
overflow: hidden;
|
|
2054
|
+
text-overflow: ellipsis;
|
|
2055
|
+
white-space: nowrap;
|
|
2056
|
+
}
|
|
2057
|
+
/* Tiny mono square-tag on each picker row · "direct" / "OR" / "direct
|
|
2058
|
+
· OR" so the user can tell at a glance how this model would route.
|
|
2059
|
+
Mirrors `.composer-pick-model` from the new-room "select a director"
|
|
2060
|
+
picker: square corners (no radius), no uppercase, tight 1×5 padding,
|
|
2061
|
+
`--text-soft` on `--panel-2`, `0.5px var(--line)` border. Pinned to
|
|
2062
|
+
the right edge so the label/hint pair keeps its layout. */
|
|
2063
|
+
.ap-model-opt-route {
|
|
2064
|
+
margin-left: auto;
|
|
2065
|
+
padding: 1px 5px;
|
|
2066
|
+
font-family: var(--mono);
|
|
2067
|
+
font-size: 8.5px;
|
|
2068
|
+
letter-spacing: 0.04em;
|
|
2069
|
+
color: var(--text-soft);
|
|
2070
|
+
background: var(--panel-2);
|
|
2071
|
+
border: 0.5px solid var(--line);
|
|
2072
|
+
flex-shrink: 0;
|
|
2073
|
+
line-height: 1.3;
|
|
2074
|
+
white-space: nowrap;
|
|
2075
|
+
}
|
|
2076
|
+
.ap-model-opt.active .ap-model-opt-route {
|
|
2077
|
+
color: var(--lime);
|
|
2078
|
+
border-color: var(--lime-dim);
|
|
2079
|
+
}
|
|
2080
|
+
|
|
2081
|
+
/* Stale-model warning under the trigger · the agent's saved modelV
|
|
2082
|
+
isn't reachable with the current key set. Doesn't block the click
|
|
2083
|
+
(runtime resolves to the global default), but the user should
|
|
2084
|
+
know their pick won't actually be used. */
|
|
2085
|
+
.ap-model-stale {
|
|
2086
|
+
display: flex;
|
|
2087
|
+
align-items: center;
|
|
2088
|
+
gap: 6px;
|
|
2089
|
+
margin-top: 6px;
|
|
2090
|
+
padding: 4px 8px;
|
|
2091
|
+
font-family: var(--mono);
|
|
2092
|
+
font-size: 9.5px;
|
|
2093
|
+
letter-spacing: 0.06em;
|
|
2094
|
+
color: var(--text-soft);
|
|
2095
|
+
background: var(--panel-2);
|
|
2096
|
+
border: 0.5px solid var(--line);
|
|
2097
|
+
border-radius: 3px;
|
|
2098
|
+
}
|
|
2099
|
+
.ap-model-stale-mark {
|
|
2100
|
+
color: var(--amber, #C9A46B);
|
|
2101
|
+
font-size: 11px;
|
|
2102
|
+
line-height: 1;
|
|
2103
|
+
}
|
|
2104
|
+
.ap-model-stale-text {
|
|
2105
|
+
letter-spacing: 0.04em;
|
|
2106
|
+
}
|
|
2107
|
+
|
|
2108
|
+
/* ═══════════════════════════════════════════
|
|
2109
|
+
PROFILE · SKILL slot grid
|
|
2110
|
+
─────────────────────────────────────────────
|
|
2111
|
+
Read-only mirror of the new-agent overlay's
|
|
2112
|
+
slot grid. Same vocabulary (8 slots in a 4×2
|
|
2113
|
+
inventory), same icons + names — just no
|
|
2114
|
+
click-to-install affordance.
|
|
2115
|
+
═══════════════════════════════════════════ */
|
|
2116
|
+
.ap-skill-grid {
|
|
2117
|
+
/* 3×3-ish inventory (8 slots, 3 per row + 2 in last row) · fits the
|
|
2118
|
+
320px right rail with comfortable cell size. */
|
|
2119
|
+
display: grid;
|
|
2120
|
+
grid-template-columns: repeat(3, 1fr);
|
|
2121
|
+
gap: 10px;
|
|
2122
|
+
}
|
|
2123
|
+
.ap-skill-slot {
|
|
2124
|
+
aspect-ratio: 1;
|
|
2125
|
+
background: var(--panel);
|
|
2126
|
+
border: 0.5px solid var(--line);
|
|
2127
|
+
color: var(--text-faint);
|
|
2128
|
+
display: flex;
|
|
2129
|
+
flex-direction: column;
|
|
2130
|
+
align-items: center;
|
|
2131
|
+
justify-content: center;
|
|
2132
|
+
gap: 7px;
|
|
2133
|
+
font-family: var(--mono);
|
|
2134
|
+
position: relative;
|
|
2135
|
+
padding: 8px 6px;
|
|
2136
|
+
cursor: default;
|
|
2137
|
+
transition: border-color 0.12s, background 0.12s, color 0.12s;
|
|
2138
|
+
}
|
|
2139
|
+
.ap-skill-slot.filled {
|
|
2140
|
+
border-color: var(--line-bright);
|
|
2141
|
+
background: var(--panel-3);
|
|
2142
|
+
color: var(--text);
|
|
2143
|
+
}
|
|
2144
|
+
.ap-skill-slot.filled:hover { border-color: var(--text-faint); }
|
|
2145
|
+
/* Info badge · top-right of each filled slot. Hover shows the
|
|
2146
|
+
skill description as a small popover-tooltip (CSS-only). */
|
|
2147
|
+
.ap-skill-info {
|
|
2148
|
+
position: absolute;
|
|
2149
|
+
top: 4px;
|
|
2150
|
+
right: 4px;
|
|
2151
|
+
width: 14px;
|
|
2152
|
+
height: 14px;
|
|
2153
|
+
border: 0.5px solid var(--line-bright);
|
|
2154
|
+
background: var(--bg);
|
|
2155
|
+
color: var(--text-faint);
|
|
2156
|
+
font-family: var(--mono);
|
|
2157
|
+
font-size: 9px;
|
|
2158
|
+
font-weight: 700;
|
|
2159
|
+
font-style: italic;
|
|
2160
|
+
line-height: 1;
|
|
2161
|
+
display: flex;
|
|
2162
|
+
align-items: center;
|
|
2163
|
+
justify-content: center;
|
|
2164
|
+
cursor: help;
|
|
2165
|
+
border-radius: 50%;
|
|
2166
|
+
z-index: 2;
|
|
2167
|
+
transition: color 0.1s, border-color 0.1s;
|
|
2168
|
+
}
|
|
2169
|
+
.ap-skill-info:hover { color: var(--text); border-color: var(--text-soft); }
|
|
2170
|
+
.ap-skill-info::after {
|
|
2171
|
+
content: attr(data-tip);
|
|
2172
|
+
position: absolute;
|
|
2173
|
+
bottom: calc(100% + 6px);
|
|
2174
|
+
right: 0;
|
|
2175
|
+
padding: 6px 9px;
|
|
2176
|
+
background: var(--panel);
|
|
2177
|
+
border: 0.5px solid var(--line-strong);
|
|
2178
|
+
font-family: var(--font-human);
|
|
2179
|
+
font-size: 11px;
|
|
2180
|
+
font-weight: 400;
|
|
2181
|
+
font-style: normal;
|
|
2182
|
+
letter-spacing: -0.003em;
|
|
2183
|
+
color: var(--text);
|
|
2184
|
+
white-space: nowrap;
|
|
2185
|
+
opacity: 0;
|
|
2186
|
+
pointer-events: none;
|
|
2187
|
+
transition: opacity 0.1s;
|
|
2188
|
+
z-index: 3;
|
|
2189
|
+
}
|
|
2190
|
+
.ap-skill-info:hover::after { opacity: 1; }
|
|
2191
|
+
.ap-skill-slot .ap-skill-icon {
|
|
2192
|
+
font-size: 24px;
|
|
2193
|
+
line-height: 1;
|
|
2194
|
+
}
|
|
2195
|
+
.ap-skill-slot.empty {
|
|
2196
|
+
border-style: solid;
|
|
2197
|
+
border-color: var(--line);
|
|
2198
|
+
background: transparent;
|
|
2199
|
+
opacity: 0.7;
|
|
2200
|
+
}
|
|
2201
|
+
.ap-skill-slot.empty .ap-skill-icon {
|
|
2202
|
+
font-size: 20px;
|
|
2203
|
+
font-weight: 300;
|
|
2204
|
+
color: var(--text-faint);
|
|
2205
|
+
opacity: 1;
|
|
2206
|
+
}
|
|
2207
|
+
.ap-skill-slot.empty:hover {
|
|
2208
|
+
border-color: var(--text-faint);
|
|
2209
|
+
background: var(--panel);
|
|
2210
|
+
opacity: 1;
|
|
2211
|
+
}
|
|
2212
|
+
.ap-skill-slot.empty:hover .ap-skill-icon { color: var(--text-soft); }
|
|
2213
|
+
.ap-skill-slot .ap-skill-name {
|
|
2214
|
+
font-family: var(--mono);
|
|
2215
|
+
font-size: 8.5px;
|
|
2216
|
+
font-weight: 700;
|
|
2217
|
+
letter-spacing: 0.08em;
|
|
2218
|
+
text-transform: uppercase;
|
|
2219
|
+
text-align: center;
|
|
2220
|
+
white-space: nowrap;
|
|
2221
|
+
overflow: hidden;
|
|
2222
|
+
text-overflow: ellipsis;
|
|
2223
|
+
max-width: 100%;
|
|
2224
|
+
}
|
|
2225
|
+
.ap-skill-meta {
|
|
2226
|
+
font-family: var(--mono);
|
|
2227
|
+
font-size: 9.5px;
|
|
2228
|
+
color: var(--text-faint);
|
|
2229
|
+
letter-spacing: 0.06em;
|
|
2230
|
+
text-transform: uppercase;
|
|
2231
|
+
margin-top: 4px;
|
|
2232
|
+
}
|
|
2233
|
+
.ap-skill-meta .ap-skill-count {
|
|
2234
|
+
color: var(--text);
|
|
2235
|
+
font-weight: 700;
|
|
2236
|
+
}
|
|
2237
|
+
|
|
2238
|
+
|
|
2239
|
+
/* ═══════════════════════════════════════════
|
|
2240
|
+
PROFILE · INSTRUCTION / RULES / MEMORY blocks
|
|
2241
|
+
═══════════════════════════════════════════ */
|
|
2242
|
+
|
|
2243
|
+
/* Section subhead next to the h3, used to inline a short usage hint
|
|
2244
|
+
(e.g. "click an empty slot to install"). */
|
|
2245
|
+
.ap-sec h3 .ap-sec-hint {
|
|
2246
|
+
font-size: 9px;
|
|
2247
|
+
font-weight: 400;
|
|
2248
|
+
letter-spacing: 0.06em;
|
|
2249
|
+
text-transform: none;
|
|
2250
|
+
color: var(--text-faint);
|
|
2251
|
+
margin-left: 8px;
|
|
2252
|
+
}
|
|
2253
|
+
|
|
2254
|
+
/* Generic empty-state for sections that have nothing to show. */
|
|
2255
|
+
.ap-empty {
|
|
2256
|
+
padding: 10px 12px;
|
|
2257
|
+
border: 0.5px dashed var(--line-bright);
|
|
2258
|
+
background: var(--bg);
|
|
2259
|
+
font-family: var(--mono);
|
|
2260
|
+
font-size: 11px;
|
|
2261
|
+
color: var(--text-faint);
|
|
2262
|
+
letter-spacing: 0.06em;
|
|
2263
|
+
text-transform: lowercase;
|
|
2264
|
+
text-align: center;
|
|
2265
|
+
}
|
|
2266
|
+
|
|
2267
|
+
/* INSTRUCTION block — labelled prose paragraphs. */
|
|
2268
|
+
/* INSTRUCTION · markdown view + edit toggle. View renders the
|
|
2269
|
+
markdown to HTML; click 'edit' in the section header to swap to
|
|
2270
|
+
the textarea editor. */
|
|
2271
|
+
.ap-instr { display: flex; flex-direction: column; gap: 0; }
|
|
2272
|
+
.ap-instr-view {
|
|
2273
|
+
font-family: var(--font-human);
|
|
2274
|
+
font-size: 12.5px;
|
|
2275
|
+
line-height: 1.6;
|
|
2276
|
+
color: var(--text);
|
|
2277
|
+
/* Collapsed default · ~12 lines of body copy. JS adds an
|
|
2278
|
+
.overflowing class on the parent when scrollHeight exceeds this,
|
|
2279
|
+
which reveals the fade gradient and the show-more toggle. */
|
|
2280
|
+
position: relative;
|
|
2281
|
+
max-height: 240px;
|
|
2282
|
+
overflow: hidden;
|
|
2283
|
+
transition: max-height 0.25s ease;
|
|
2284
|
+
}
|
|
2285
|
+
.ap-instr-view.expanded {
|
|
2286
|
+
max-height: none;
|
|
2287
|
+
}
|
|
2288
|
+
/* Fade-out gradient hugging the bottom edge while collapsed — fades to
|
|
2289
|
+
the parent .ap-block panel colour so it reads as "more below". */
|
|
2290
|
+
.ap-instr-view::after {
|
|
2291
|
+
content: "";
|
|
2292
|
+
position: absolute;
|
|
2293
|
+
left: 0;
|
|
2294
|
+
right: 0;
|
|
2295
|
+
bottom: 0;
|
|
2296
|
+
height: 56px;
|
|
2297
|
+
pointer-events: none;
|
|
2298
|
+
opacity: 0;
|
|
2299
|
+
transition: opacity 0.15s ease;
|
|
2300
|
+
background: linear-gradient(to bottom, transparent, var(--panel-2));
|
|
2301
|
+
}
|
|
2302
|
+
.ap-instr.overflowing .ap-instr-view:not(.expanded)::after { opacity: 1; }
|
|
2303
|
+
/* Toggle button · hidden unless content actually overflows. Mirrors
|
|
2304
|
+
.ap-block-h-action's mono-uppercase look so it sits in the page. */
|
|
2305
|
+
.ap-instr-toggle {
|
|
2306
|
+
display: none;
|
|
2307
|
+
align-self: flex-start;
|
|
2308
|
+
margin-top: 10px;
|
|
2309
|
+
font-family: var(--mono);
|
|
2310
|
+
font-size: 9.5px;
|
|
2311
|
+
font-weight: 700;
|
|
2312
|
+
letter-spacing: 0.14em;
|
|
2313
|
+
text-transform: uppercase;
|
|
2314
|
+
padding: 5px 10px;
|
|
2315
|
+
background: transparent;
|
|
2316
|
+
border: 0.5px solid var(--line-bright);
|
|
2317
|
+
color: var(--text-soft);
|
|
2318
|
+
cursor: pointer;
|
|
2319
|
+
transition: border-color 0.1s, color 0.1s;
|
|
2320
|
+
}
|
|
2321
|
+
.ap-instr-toggle:hover { border-color: var(--text-soft); color: var(--text); }
|
|
2322
|
+
.ap-instr.overflowing .ap-instr-toggle { display: inline-block; }
|
|
2323
|
+
.ap-instr-view > *:first-child { margin-top: 0; }
|
|
2324
|
+
.ap-instr-view > *:last-child { margin-bottom: 0; }
|
|
2325
|
+
.ap-instr-view h3 {
|
|
2326
|
+
font-family: var(--mono);
|
|
2327
|
+
font-size: 10px;
|
|
2328
|
+
font-weight: 700;
|
|
2329
|
+
letter-spacing: 0.2em;
|
|
2330
|
+
text-transform: uppercase;
|
|
2331
|
+
color: var(--text-faint);
|
|
2332
|
+
margin: 14px 0 6px;
|
|
2333
|
+
padding: 0;
|
|
2334
|
+
border: none;
|
|
2335
|
+
}
|
|
2336
|
+
.ap-instr-view h4 {
|
|
2337
|
+
font-family: var(--font-human);
|
|
2338
|
+
font-size: 13px;
|
|
2339
|
+
font-weight: 700;
|
|
2340
|
+
color: var(--text);
|
|
2341
|
+
margin: 12px 0 4px;
|
|
2342
|
+
letter-spacing: -0.005em;
|
|
2343
|
+
}
|
|
2344
|
+
.ap-instr-view h5 {
|
|
2345
|
+
font-family: var(--font-human);
|
|
2346
|
+
font-size: 12px;
|
|
2347
|
+
font-weight: 700;
|
|
2348
|
+
color: var(--text-soft);
|
|
2349
|
+
margin: 10px 0 4px;
|
|
2350
|
+
}
|
|
2351
|
+
.ap-instr-view p { margin: 0 0 8px; }
|
|
2352
|
+
.ap-instr-view ul, .ap-instr-view ol {
|
|
2353
|
+
margin: 0 0 10px;
|
|
2354
|
+
padding-left: 20px;
|
|
2355
|
+
}
|
|
2356
|
+
.ap-instr-view li { margin-bottom: 3px; }
|
|
2357
|
+
.ap-instr-view strong { color: var(--text); font-weight: 700; }
|
|
2358
|
+
.ap-instr-view em { color: var(--text-soft); font-style: italic; }
|
|
2359
|
+
.ap-instr-view code {
|
|
2360
|
+
font-family: var(--mono);
|
|
2361
|
+
font-size: 11.5px;
|
|
2362
|
+
background: var(--bg);
|
|
2363
|
+
border: 0.5px solid var(--line-bright);
|
|
2364
|
+
padding: 1px 5px;
|
|
2365
|
+
color: var(--text);
|
|
2366
|
+
}
|
|
2367
|
+
.ap-instr-view pre {
|
|
2368
|
+
background: var(--bg);
|
|
2369
|
+
border: 0.5px solid var(--line-bright);
|
|
2370
|
+
padding: 10px 12px;
|
|
2371
|
+
margin: 8px 0;
|
|
2372
|
+
overflow-x: auto;
|
|
2373
|
+
}
|
|
2374
|
+
.ap-instr-view pre code {
|
|
2375
|
+
background: transparent;
|
|
2376
|
+
border: none;
|
|
2377
|
+
padding: 0;
|
|
2378
|
+
font-size: 11.5px;
|
|
2379
|
+
line-height: 1.5;
|
|
2380
|
+
}
|
|
2381
|
+
|
|
2382
|
+
/* Edit mode · textarea + footer with save/cancel. */
|
|
2383
|
+
.ap-instr-edit { display: flex; flex-direction: column; gap: 10px; }
|
|
2384
|
+
.ap-instr-textarea {
|
|
2385
|
+
background: var(--bg);
|
|
2386
|
+
border: 0.5px solid var(--line-bright);
|
|
2387
|
+
color: var(--text);
|
|
2388
|
+
font-family: var(--mono);
|
|
2389
|
+
font-size: 12px;
|
|
2390
|
+
line-height: 1.55;
|
|
2391
|
+
padding: 12px 14px;
|
|
2392
|
+
min-height: 220px;
|
|
2393
|
+
width: 100%;
|
|
2394
|
+
resize: vertical;
|
|
2395
|
+
outline: none;
|
|
2396
|
+
transition: border-color 0.1s;
|
|
2397
|
+
}
|
|
2398
|
+
.ap-instr-textarea:focus { border-color: var(--text-soft); }
|
|
2399
|
+
.ap-instr-textarea::placeholder { color: var(--text-faint); }
|
|
2400
|
+
.ap-instr-edit-foot {
|
|
2401
|
+
display: flex;
|
|
2402
|
+
align-items: center;
|
|
2403
|
+
justify-content: space-between;
|
|
2404
|
+
gap: 12px;
|
|
2405
|
+
}
|
|
2406
|
+
.ap-instr-edit-hint {
|
|
2407
|
+
font-family: var(--mono);
|
|
2408
|
+
font-size: 9.5px;
|
|
2409
|
+
letter-spacing: 0.1em;
|
|
2410
|
+
text-transform: uppercase;
|
|
2411
|
+
color: var(--text-faint);
|
|
2412
|
+
}
|
|
2413
|
+
.ap-instr-edit-actions { display: flex; gap: 8px; }
|
|
2414
|
+
.ap-instr-cancel,
|
|
2415
|
+
.ap-instr-save {
|
|
2416
|
+
font-family: var(--mono);
|
|
2417
|
+
font-size: 9.5px;
|
|
2418
|
+
font-weight: 700;
|
|
2419
|
+
letter-spacing: 0.14em;
|
|
2420
|
+
text-transform: uppercase;
|
|
2421
|
+
padding: 8px 14px;
|
|
2422
|
+
cursor: pointer;
|
|
2423
|
+
border: 0.5px solid var(--line-bright);
|
|
2424
|
+
background: transparent;
|
|
2425
|
+
color: var(--text-soft);
|
|
2426
|
+
transition: border-color 0.1s, color 0.1s, background 0.1s;
|
|
2427
|
+
}
|
|
2428
|
+
.ap-instr-cancel:hover { border-color: var(--text-soft); color: var(--text); }
|
|
2429
|
+
.ap-instr-save {
|
|
2430
|
+
background: var(--text);
|
|
2431
|
+
border-color: var(--text);
|
|
2432
|
+
color: var(--bg);
|
|
2433
|
+
}
|
|
2434
|
+
.ap-instr-save:hover { background: var(--text-soft); border-color: var(--text-soft); }
|
|
2435
|
+
|
|
2436
|
+
/* Intel edit · same shape as the instruction editor but with a shorter
|
|
2437
|
+
single-line textarea (bio is 8-280 chars, not multi-section markdown). */
|
|
2438
|
+
.ap-intel-edit { display: flex; flex-direction: column; gap: 10px; }
|
|
2439
|
+
.ap-intel-textarea {
|
|
2440
|
+
background: var(--bg);
|
|
2441
|
+
border: 0.5px solid var(--line-bright);
|
|
2442
|
+
color: var(--text);
|
|
2443
|
+
font-family: var(--font-human);
|
|
2444
|
+
font-size: 12.5px;
|
|
2445
|
+
line-height: 1.5;
|
|
2446
|
+
padding: 10px 14px;
|
|
2447
|
+
min-height: 64px;
|
|
2448
|
+
width: 100%;
|
|
2449
|
+
resize: vertical;
|
|
2450
|
+
outline: none;
|
|
2451
|
+
transition: border-color 0.12s;
|
|
2452
|
+
letter-spacing: -0.003em;
|
|
2453
|
+
}
|
|
2454
|
+
.ap-intel-textarea:focus { border-color: var(--text-soft); }
|
|
2455
|
+
.ap-intel-textarea::placeholder { color: var(--text-faint); }
|
|
2456
|
+
.ap-intel-edit-foot {
|
|
2457
|
+
display: flex;
|
|
2458
|
+
align-items: center;
|
|
2459
|
+
justify-content: space-between;
|
|
2460
|
+
gap: 12px;
|
|
2461
|
+
}
|
|
2462
|
+
.ap-intel-edit-hint {
|
|
2463
|
+
font-family: var(--mono);
|
|
2464
|
+
font-size: 9.5px;
|
|
2465
|
+
letter-spacing: 0.1em;
|
|
2466
|
+
text-transform: uppercase;
|
|
2467
|
+
color: var(--text-faint);
|
|
2468
|
+
}
|
|
2469
|
+
.ap-intel-edit-hint.error { color: var(--red, #C85A5A); text-transform: none; letter-spacing: 0; }
|
|
2470
|
+
.ap-intel-edit-actions { display: flex; gap: 8px; }
|
|
2471
|
+
|
|
2472
|
+
/* RULES block · editable numbered list + add button. */
|
|
2473
|
+
.ap-rules-block { display: flex; flex-direction: column; gap: 8px; }
|
|
2474
|
+
.ap-rules-list {
|
|
2475
|
+
list-style: none;
|
|
2476
|
+
margin: 0;
|
|
2477
|
+
padding: 0;
|
|
2478
|
+
display: flex;
|
|
2479
|
+
flex-direction: column;
|
|
2480
|
+
gap: 6px;
|
|
2481
|
+
}
|
|
2482
|
+
.ap-rule {
|
|
2483
|
+
display: grid;
|
|
2484
|
+
grid-template-columns: 22px 1fr 22px;
|
|
2485
|
+
gap: 8px;
|
|
2486
|
+
align-items: center;
|
|
2487
|
+
padding: 6px 10px;
|
|
2488
|
+
background: var(--bg);
|
|
2489
|
+
border: 0.5px solid var(--line-bright);
|
|
2490
|
+
transition: border-color 0.1s;
|
|
2491
|
+
}
|
|
2492
|
+
.ap-rule:focus-within { border-color: var(--text-soft); }
|
|
2493
|
+
.ap-rule-num {
|
|
2494
|
+
font-family: var(--mono);
|
|
2495
|
+
font-size: 10.5px;
|
|
2496
|
+
font-weight: 700;
|
|
2497
|
+
color: var(--text-soft);
|
|
2498
|
+
text-align: center;
|
|
2499
|
+
}
|
|
2500
|
+
.ap-rule-input {
|
|
2501
|
+
background: transparent;
|
|
2502
|
+
border: none;
|
|
2503
|
+
color: var(--text);
|
|
2504
|
+
font-family: var(--font-human);
|
|
2505
|
+
font-size: 12.5px;
|
|
2506
|
+
line-height: 1.4;
|
|
2507
|
+
padding: 4px 0;
|
|
2508
|
+
width: 100%;
|
|
2509
|
+
outline: none;
|
|
2510
|
+
}
|
|
2511
|
+
.ap-rule-input::placeholder { color: var(--text-faint); }
|
|
2512
|
+
.ap-rule-rm {
|
|
2513
|
+
background: transparent;
|
|
2514
|
+
border: none;
|
|
2515
|
+
color: var(--text-faint);
|
|
2516
|
+
font-size: 12px;
|
|
2517
|
+
line-height: 1;
|
|
2518
|
+
cursor: pointer;
|
|
2519
|
+
padding: 2px;
|
|
2520
|
+
opacity: 0;
|
|
2521
|
+
transition: opacity 0.1s, color 0.1s;
|
|
2522
|
+
}
|
|
2523
|
+
.ap-rule:hover .ap-rule-rm,
|
|
2524
|
+
.ap-rule:focus-within .ap-rule-rm { opacity: 1; }
|
|
2525
|
+
.ap-rule-rm:hover { color: var(--red); }
|
|
2526
|
+
.ap-rule-empty {
|
|
2527
|
+
font-family: var(--font-human);
|
|
2528
|
+
font-size: 12px;
|
|
2529
|
+
color: var(--text-faint);
|
|
2530
|
+
padding: 8px 10px;
|
|
2531
|
+
border: 0.5px dashed var(--line-bright);
|
|
2532
|
+
background: transparent;
|
|
2533
|
+
text-align: center;
|
|
2534
|
+
}
|
|
2535
|
+
.ap-rule-empty strong { color: var(--text-soft); font-weight: 700; }
|
|
2536
|
+
/* (the rules add button now lives in the section heading as
|
|
2537
|
+
.ap-block-h-action; the disabled state below applies there too.) */
|
|
2538
|
+
.ap-block-h-action[disabled] {
|
|
2539
|
+
cursor: not-allowed;
|
|
2540
|
+
opacity: 0.4;
|
|
2541
|
+
pointer-events: none;
|
|
2542
|
+
}
|
|
2543
|
+
|
|
2544
|
+
/* ─── Memory · v1 (live, API-driven) ────────────────────────
|
|
2545
|
+
List of editable rows pulled from /api/agents/:id/memories.
|
|
2546
|
+
Each row · [kind tag + source] [content] [pin / edit / delete]. */
|
|
2547
|
+
.ap-memory {
|
|
2548
|
+
display: flex;
|
|
2549
|
+
flex-direction: column;
|
|
2550
|
+
gap: 12px;
|
|
2551
|
+
}
|
|
2552
|
+
.ap-memory-add {
|
|
2553
|
+
display: grid;
|
|
2554
|
+
grid-template-columns: 1fr auto auto;
|
|
2555
|
+
gap: 8px;
|
|
2556
|
+
align-items: stretch;
|
|
2557
|
+
}
|
|
2558
|
+
.ap-memory-add[hidden] { display: none; }
|
|
2559
|
+
.ap-memory-add-cancel {
|
|
2560
|
+
font-family: var(--mono);
|
|
2561
|
+
font-size: 9.5px;
|
|
2562
|
+
font-weight: 700;
|
|
2563
|
+
letter-spacing: 0.16em;
|
|
2564
|
+
text-transform: uppercase;
|
|
2565
|
+
padding: 0 12px;
|
|
2566
|
+
background: transparent;
|
|
2567
|
+
color: var(--text-soft);
|
|
2568
|
+
border: 0.5px solid var(--line-bright);
|
|
2569
|
+
cursor: pointer;
|
|
2570
|
+
transition: border-color 0.12s, color 0.12s, background 0.12s;
|
|
2571
|
+
}
|
|
2572
|
+
.ap-memory-add-cancel:hover {
|
|
2573
|
+
border-color: var(--text-faint);
|
|
2574
|
+
color: var(--text);
|
|
2575
|
+
background: var(--panel-3);
|
|
2576
|
+
}
|
|
2577
|
+
.ap-memory-add-input {
|
|
2578
|
+
background: var(--bg);
|
|
2579
|
+
border: 0.5px solid var(--line-bright);
|
|
2580
|
+
color: var(--text);
|
|
2581
|
+
font-family: var(--font-human);
|
|
2582
|
+
font-size: 12.5px;
|
|
2583
|
+
padding: 9px 12px;
|
|
2584
|
+
outline: none;
|
|
2585
|
+
letter-spacing: -0.003em;
|
|
2586
|
+
transition: border-color 0.1s;
|
|
2587
|
+
}
|
|
2588
|
+
.ap-memory-add-input:focus { border-color: var(--text-soft); }
|
|
2589
|
+
.ap-memory-add-input::placeholder { color: var(--text-faint); }
|
|
2590
|
+
.ap-memory-add-btn {
|
|
2591
|
+
font-family: var(--mono);
|
|
2592
|
+
font-size: 9.5px;
|
|
2593
|
+
font-weight: 700;
|
|
2594
|
+
letter-spacing: 0.16em;
|
|
2595
|
+
text-transform: uppercase;
|
|
2596
|
+
padding: 0 14px;
|
|
2597
|
+
background: var(--text);
|
|
2598
|
+
color: var(--bg);
|
|
2599
|
+
border: 0.5px solid var(--text);
|
|
2600
|
+
cursor: pointer;
|
|
2601
|
+
transition: background 0.1s, color 0.1s, border-color 0.1s;
|
|
2602
|
+
}
|
|
2603
|
+
.ap-memory-add-btn:hover { background: var(--text-soft); border-color: var(--text-soft); }
|
|
2604
|
+
.ap-memory-add-btn[disabled] { opacity: 0.6; cursor: not-allowed; }
|
|
2605
|
+
|
|
2606
|
+
/* Open list · rows are separated by hairlines, no per-row border or
|
|
2607
|
+
filled background. Hover bleeds edge-to-edge inside the block-body
|
|
2608
|
+
for a clean Notes/Notion-style read. The list uses negative margin
|
|
2609
|
+
to escape the block-body's 22px horizontal padding so hover/dividers
|
|
2610
|
+
reach the panel border. */
|
|
2611
|
+
.ap-memory-list {
|
|
2612
|
+
display: flex;
|
|
2613
|
+
flex-direction: column;
|
|
2614
|
+
margin: 0 -22px;
|
|
2615
|
+
gap: 0;
|
|
2616
|
+
}
|
|
2617
|
+
.ap-memory-row {
|
|
2618
|
+
position: relative;
|
|
2619
|
+
display: flex;
|
|
2620
|
+
flex-direction: column;
|
|
2621
|
+
gap: 5px;
|
|
2622
|
+
padding: 9px 22px 10px;
|
|
2623
|
+
background: transparent;
|
|
2624
|
+
border: none;
|
|
2625
|
+
border-bottom: 0.5px solid var(--line);
|
|
2626
|
+
transition: background 0.12s;
|
|
2627
|
+
}
|
|
2628
|
+
.ap-memory-row:last-child { border-bottom: none; }
|
|
2629
|
+
.ap-memory-row:hover { background: var(--panel); }
|
|
2630
|
+
|
|
2631
|
+
/* Overflow rows · everything past the first 5. Hidden by default,
|
|
2632
|
+
revealed when the toggle below is clicked. Inline with the rest
|
|
2633
|
+
of the list so dividers + hover states stay continuous. */
|
|
2634
|
+
.ap-memory-overflow {
|
|
2635
|
+
display: contents;
|
|
2636
|
+
}
|
|
2637
|
+
.ap-memory-overflow[hidden] { display: none; }
|
|
2638
|
+
/* Toggle button · sits inside the already-outdented .ap-memory-list,
|
|
2639
|
+
so it doesn't add its own negative margin (that double-outdent was
|
|
2640
|
+
what was making it overflow the block on the right). Padding-only,
|
|
2641
|
+
width 100% so the dashed-top hairline + fill span edge-to-edge. */
|
|
2642
|
+
.ap-memory-toggle {
|
|
2643
|
+
display: flex;
|
|
2644
|
+
width: 100%;
|
|
2645
|
+
box-sizing: border-box;
|
|
2646
|
+
margin: 0;
|
|
2647
|
+
padding: 9px 22px;
|
|
2648
|
+
align-items: center;
|
|
2649
|
+
justify-content: center;
|
|
2650
|
+
gap: 8px;
|
|
2651
|
+
background: var(--panel-2);
|
|
2652
|
+
border: none;
|
|
2653
|
+
border-top: 0.5px dashed var(--line);
|
|
2654
|
+
color: var(--text-soft);
|
|
2655
|
+
font-family: var(--mono);
|
|
2656
|
+
font-size: 10px;
|
|
2657
|
+
letter-spacing: 0.18em;
|
|
2658
|
+
text-transform: uppercase;
|
|
2659
|
+
font-weight: 600;
|
|
2660
|
+
cursor: pointer;
|
|
2661
|
+
transition: background 0.14s, color 0.14s;
|
|
2662
|
+
}
|
|
2663
|
+
.ap-memory-toggle:hover {
|
|
2664
|
+
background: var(--panel);
|
|
2665
|
+
color: var(--lime);
|
|
2666
|
+
}
|
|
2667
|
+
.ap-memory-toggle-icon {
|
|
2668
|
+
font-size: 11px;
|
|
2669
|
+
line-height: 1;
|
|
2670
|
+
color: var(--text-faint);
|
|
2671
|
+
transition: transform 0.18s ease, color 0.14s;
|
|
2672
|
+
}
|
|
2673
|
+
.ap-memory-toggle:hover .ap-memory-toggle-icon { color: var(--lime); }
|
|
2674
|
+
.ap-memory-toggle.expanded .ap-memory-toggle-icon { transform: rotate(180deg); }
|
|
2675
|
+
/* Show / hide labels swap based on the .expanded state. Default is
|
|
2676
|
+
collapsed (▾ Show all N) · clicked → expanded (▴ Collapse). */
|
|
2677
|
+
.ap-memory-toggle-show,
|
|
2678
|
+
.ap-memory-toggle-hide { line-height: 1; }
|
|
2679
|
+
.ap-memory-toggle:not(.expanded) .ap-memory-toggle-hide { display: none; }
|
|
2680
|
+
.ap-memory-toggle.expanded .ap-memory-toggle-show { display: none; }
|
|
2681
|
+
|
|
2682
|
+
/* Pinned · 2px lime bar on the very left edge, no layout shift. */
|
|
2683
|
+
.ap-memory-row::before {
|
|
2684
|
+
content: "";
|
|
2685
|
+
position: absolute;
|
|
2686
|
+
left: 0;
|
|
2687
|
+
top: 0;
|
|
2688
|
+
bottom: 0;
|
|
2689
|
+
width: 2px;
|
|
2690
|
+
background: transparent;
|
|
2691
|
+
transition: background 0.12s;
|
|
2692
|
+
}
|
|
2693
|
+
.ap-memory-row.pinned::before { background: var(--lime); }
|
|
2694
|
+
|
|
2695
|
+
.ap-memory-content {
|
|
2696
|
+
font-family: var(--font-human);
|
|
2697
|
+
font-size: 12.5px;
|
|
2698
|
+
line-height: 1.5;
|
|
2699
|
+
color: var(--text);
|
|
2700
|
+
letter-spacing: -0.003em;
|
|
2701
|
+
min-width: 0;
|
|
2702
|
+
word-break: break-word;
|
|
2703
|
+
}
|
|
2704
|
+
|
|
2705
|
+
.ap-memory-row-foot {
|
|
2706
|
+
display: flex;
|
|
2707
|
+
align-items: center;
|
|
2708
|
+
justify-content: space-between;
|
|
2709
|
+
gap: 8px;
|
|
2710
|
+
min-height: 16px;
|
|
2711
|
+
}
|
|
2712
|
+
/* Meta · single mono micro-line "fact · manual" at the foot of the row.
|
|
2713
|
+
No border / chip — just type in faint color, kind highlighted lime. */
|
|
2714
|
+
.ap-memory-meta {
|
|
2715
|
+
display: inline-flex;
|
|
2716
|
+
align-items: center;
|
|
2717
|
+
gap: 5px;
|
|
2718
|
+
font-family: var(--mono);
|
|
2719
|
+
font-size: 8.5px;
|
|
2720
|
+
letter-spacing: 0.12em;
|
|
2721
|
+
text-transform: uppercase;
|
|
2722
|
+
color: var(--text-faint);
|
|
2723
|
+
line-height: 1.2;
|
|
2724
|
+
}
|
|
2725
|
+
.ap-memory-kind { color: var(--lime); font-weight: 700; }
|
|
2726
|
+
.ap-memory-meta-sep { opacity: 0.5; }
|
|
2727
|
+
.ap-memory-source { color: var(--text-faint); }
|
|
2728
|
+
.ap-memory-edit-area {
|
|
2729
|
+
width: 100%;
|
|
2730
|
+
background: var(--bg);
|
|
2731
|
+
border: 0.5px solid var(--text-soft);
|
|
2732
|
+
color: var(--text);
|
|
2733
|
+
font-family: var(--font-human);
|
|
2734
|
+
font-size: 12.5px;
|
|
2735
|
+
line-height: 1.5;
|
|
2736
|
+
padding: 8px 10px;
|
|
2737
|
+
outline: none;
|
|
2738
|
+
resize: vertical;
|
|
2739
|
+
min-height: 56px;
|
|
2740
|
+
letter-spacing: -0.003em;
|
|
2741
|
+
}
|
|
2742
|
+
.ap-memory-edit-actions {
|
|
2743
|
+
display: flex;
|
|
2744
|
+
gap: 6px;
|
|
2745
|
+
margin-top: 6px;
|
|
2746
|
+
}
|
|
2747
|
+
.ap-memory-edit-cancel,
|
|
2748
|
+
.ap-memory-edit-save {
|
|
2749
|
+
font-family: var(--mono);
|
|
2750
|
+
font-size: 9px;
|
|
2751
|
+
font-weight: 700;
|
|
2752
|
+
letter-spacing: 0.14em;
|
|
2753
|
+
text-transform: uppercase;
|
|
2754
|
+
padding: 5px 10px;
|
|
2755
|
+
cursor: pointer;
|
|
2756
|
+
border: 0.5px solid var(--line-bright);
|
|
2757
|
+
background: transparent;
|
|
2758
|
+
color: var(--text-soft);
|
|
2759
|
+
}
|
|
2760
|
+
.ap-memory-edit-save { background: var(--text); color: var(--bg); border-color: var(--text); }
|
|
2761
|
+
.ap-memory-edit-cancel:hover { color: var(--text); border-color: var(--text-soft); }
|
|
2762
|
+
.ap-memory-edit-save:hover { background: var(--text-soft); border-color: var(--text-soft); }
|
|
2763
|
+
|
|
2764
|
+
.ap-memory-actions {
|
|
2765
|
+
display: flex;
|
|
2766
|
+
align-items: center;
|
|
2767
|
+
gap: 2px;
|
|
2768
|
+
flex-shrink: 0;
|
|
2769
|
+
margin-left: auto;
|
|
2770
|
+
}
|
|
2771
|
+
.ap-memory-pin,
|
|
2772
|
+
.ap-memory-edit,
|
|
2773
|
+
.ap-memory-delete {
|
|
2774
|
+
font-family: var(--mono);
|
|
2775
|
+
font-size: 11px;
|
|
2776
|
+
line-height: 1;
|
|
2777
|
+
width: 18px;
|
|
2778
|
+
height: 18px;
|
|
2779
|
+
display: inline-flex;
|
|
2780
|
+
align-items: center;
|
|
2781
|
+
justify-content: center;
|
|
2782
|
+
padding: 0;
|
|
2783
|
+
background: transparent;
|
|
2784
|
+
border: 0;
|
|
2785
|
+
color: var(--text-faint);
|
|
2786
|
+
cursor: pointer;
|
|
2787
|
+
transition: color 0.12s, background 0.12s, opacity 0.12s;
|
|
2788
|
+
opacity: 0;
|
|
2789
|
+
}
|
|
2790
|
+
.ap-memory-row:hover .ap-memory-pin,
|
|
2791
|
+
.ap-memory-row:hover .ap-memory-edit,
|
|
2792
|
+
.ap-memory-row:hover .ap-memory-delete { opacity: 0.7; }
|
|
2793
|
+
.ap-memory-pin:hover,
|
|
2794
|
+
.ap-memory-edit:hover {
|
|
2795
|
+
opacity: 1;
|
|
2796
|
+
color: var(--text);
|
|
2797
|
+
background: var(--line-bright);
|
|
2798
|
+
}
|
|
2799
|
+
.ap-memory-pin { font-size: 12px; }
|
|
2800
|
+
.ap-memory-edit svg { display: block; width: 9px; height: 9px; }
|
|
2801
|
+
.ap-memory-delete { font-size: 14px; font-weight: 300; }
|
|
2802
|
+
.ap-memory-delete:hover {
|
|
2803
|
+
opacity: 1;
|
|
2804
|
+
color: var(--red, #C85A5A);
|
|
2805
|
+
background: var(--line-bright);
|
|
2806
|
+
}
|
|
2807
|
+
|
|
2808
|
+
.ap-memory-row.pinned .ap-memory-pin {
|
|
2809
|
+
color: var(--lime);
|
|
2810
|
+
opacity: 1;
|
|
2811
|
+
}
|
|
2812
|
+
.ap-memory-row.pinned .ap-memory-pin:hover { background: var(--line-bright); color: var(--lime); }
|
|
2813
|
+
|
|
2814
|
+
.ap-memory-row.editing .ap-memory-actions { visibility: hidden; }
|
|
2815
|
+
|
|
2816
|
+
/* ─── Memory · legacy prototype tile gallery (kept for callers
|
|
2817
|
+
that still pass `p.memory` shape). v1 profiles render the
|
|
2818
|
+
.ap-memory list above and never enter this block. */
|
|
2819
|
+
.ap-memory-gallery {
|
|
2820
|
+
display: grid;
|
|
2821
|
+
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
|
|
2822
|
+
gap: 10px;
|
|
2823
|
+
}
|
|
2824
|
+
/* Memory tile · game-HUD style. Reads like a save-slot / quest entry:
|
|
2825
|
+
chunky room number set in mono display weight, corner brackets that
|
|
2826
|
+
frame the tile like an old game card, a small "▸" affordance on
|
|
2827
|
+
hover. Background uses a subtle linear gradient + scanline pattern
|
|
2828
|
+
so each tile feels like a tactile chip rather than flat panel. */
|
|
2829
|
+
.ap-memory-gallery {
|
|
2830
|
+
display: grid;
|
|
2831
|
+
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
|
2832
|
+
gap: 12px;
|
|
2833
|
+
}
|
|
2834
|
+
.ap-memory-tile {
|
|
2835
|
+
position: relative;
|
|
2836
|
+
background:
|
|
2837
|
+
repeating-linear-gradient(
|
|
2838
|
+
0deg,
|
|
2839
|
+
transparent 0,
|
|
2840
|
+
transparent 3px,
|
|
2841
|
+
rgba(255,255,255,0.012) 3px,
|
|
2842
|
+
rgba(255,255,255,0.012) 4px
|
|
2843
|
+
),
|
|
2844
|
+
linear-gradient(135deg, var(--panel-3) 0%, var(--panel-2) 100%);
|
|
2845
|
+
border: 0.5px solid var(--line-bright);
|
|
2846
|
+
padding: 14px 14px 12px;
|
|
2847
|
+
text-align: left;
|
|
2848
|
+
font-family: inherit;
|
|
2849
|
+
cursor: pointer;
|
|
2850
|
+
display: grid;
|
|
2851
|
+
grid-template-rows: auto 1fr auto;
|
|
2852
|
+
gap: 8px;
|
|
2853
|
+
color: var(--text);
|
|
2854
|
+
min-height: 128px;
|
|
2855
|
+
transition: border-color 0.14s, transform 0.14s, box-shadow 0.14s;
|
|
2856
|
+
overflow: hidden;
|
|
2857
|
+
}
|
|
2858
|
+
/* Corner brackets · classic HUD frame. */
|
|
2859
|
+
.ap-memory-tile::before,
|
|
2860
|
+
.ap-memory-tile::after {
|
|
2861
|
+
content: "";
|
|
2862
|
+
position: absolute;
|
|
2863
|
+
width: 9px;
|
|
2864
|
+
height: 9px;
|
|
2865
|
+
border: 1.5px solid var(--text-faint);
|
|
2866
|
+
pointer-events: none;
|
|
2867
|
+
transition: border-color 0.14s;
|
|
2868
|
+
}
|
|
2869
|
+
.ap-memory-tile::before { top: -1px; left: -1px; border-right: none; border-bottom: none; }
|
|
2870
|
+
.ap-memory-tile::after { bottom: -1px; right: -1px; border-left: none; border-top: none; }
|
|
2871
|
+
.ap-memory-tile:hover {
|
|
2872
|
+
border-color: var(--text-soft);
|
|
2873
|
+
transform: translateY(-2px);
|
|
2874
|
+
}
|
|
2875
|
+
.ap-memory-tile:hover::before,
|
|
2876
|
+
.ap-memory-tile:hover::after { border-color: var(--text); }
|
|
2877
|
+
|
|
2878
|
+
/* ROOM # · two-line treatment · "ROOM" on top, big "#04" below. */
|
|
2879
|
+
.ap-memory-tile-num {
|
|
2880
|
+
display: flex;
|
|
2881
|
+
flex-direction: column;
|
|
2882
|
+
align-items: flex-start;
|
|
2883
|
+
gap: 0;
|
|
2884
|
+
font-family: var(--mono);
|
|
2885
|
+
color: var(--text-soft);
|
|
2886
|
+
letter-spacing: 0.22em;
|
|
2887
|
+
text-transform: uppercase;
|
|
2888
|
+
line-height: 1;
|
|
2889
|
+
}
|
|
2890
|
+
.ap-memory-tile-num::before {
|
|
2891
|
+
content: attr(data-label);
|
|
2892
|
+
font-size: 8.5px;
|
|
2893
|
+
color: var(--text-faint);
|
|
2894
|
+
letter-spacing: 0.28em;
|
|
2895
|
+
margin-bottom: 4px;
|
|
2896
|
+
}
|
|
2897
|
+
.ap-memory-tile-num-id {
|
|
2898
|
+
font-size: 18px;
|
|
2899
|
+
font-weight: 700;
|
|
2900
|
+
color: var(--text);
|
|
2901
|
+
letter-spacing: 0.04em;
|
|
2902
|
+
}
|
|
2903
|
+
|
|
2904
|
+
/* Name · the hero text. */
|
|
2905
|
+
.ap-memory-tile-name {
|
|
2906
|
+
font-family: var(--font-human);
|
|
2907
|
+
font-size: 14px;
|
|
2908
|
+
font-weight: 700;
|
|
2909
|
+
color: var(--text);
|
|
2910
|
+
letter-spacing: -0.008em;
|
|
2911
|
+
line-height: 1.35;
|
|
2912
|
+
overflow: hidden;
|
|
2913
|
+
text-overflow: ellipsis;
|
|
2914
|
+
display: -webkit-box;
|
|
2915
|
+
-webkit-line-clamp: 2;
|
|
2916
|
+
-webkit-box-orient: vertical;
|
|
2917
|
+
}
|
|
2918
|
+
|
|
2919
|
+
/* Hint · stats row + open arrow. */
|
|
2920
|
+
.ap-memory-tile-hint {
|
|
2921
|
+
display: flex;
|
|
2922
|
+
align-items: center;
|
|
2923
|
+
justify-content: space-between;
|
|
2924
|
+
gap: 6px;
|
|
2925
|
+
font-family: var(--mono);
|
|
2926
|
+
font-size: 9px;
|
|
2927
|
+
color: var(--text-faint);
|
|
2928
|
+
letter-spacing: 0.14em;
|
|
2929
|
+
text-transform: uppercase;
|
|
2930
|
+
padding-top: 8px;
|
|
2931
|
+
border-top: 0.5px solid var(--line-bright);
|
|
2932
|
+
}
|
|
2933
|
+
.ap-memory-tile-hint::after {
|
|
2934
|
+
content: "▸";
|
|
2935
|
+
font-size: 11px;
|
|
2936
|
+
color: var(--text-faint);
|
|
2937
|
+
transition: transform 0.14s, color 0.14s;
|
|
2938
|
+
}
|
|
2939
|
+
.ap-memory-tile:hover .ap-memory-tile-hint::after {
|
|
2940
|
+
color: var(--text);
|
|
2941
|
+
transform: translateX(2px);
|
|
2942
|
+
}
|
|
2943
|
+
|
|
2944
|
+
/* ── Memory · YOU tile (about-user) ─────────────────
|
|
2945
|
+
Distinct warm amber treatment so the self-card reads
|
|
2946
|
+
as the special "first card" in the gallery vs the
|
|
2947
|
+
uniform room cards. */
|
|
2948
|
+
.ap-memory-tile-self {
|
|
2949
|
+
background:
|
|
2950
|
+
repeating-linear-gradient(
|
|
2951
|
+
0deg,
|
|
2952
|
+
transparent 0,
|
|
2953
|
+
transparent 3px,
|
|
2954
|
+
rgba(200, 152, 90, 0.04) 3px,
|
|
2955
|
+
rgba(200, 152, 90, 0.04) 4px
|
|
2956
|
+
),
|
|
2957
|
+
linear-gradient(135deg, rgba(200, 152, 90, 0.18) 0%, var(--panel-3) 60%);
|
|
2958
|
+
border-color: var(--amber, #C8985A);
|
|
2959
|
+
border-width: 1px;
|
|
2960
|
+
}
|
|
2961
|
+
.ap-memory-tile-self::before,
|
|
2962
|
+
.ap-memory-tile-self::after {
|
|
2963
|
+
border-color: var(--amber, #C8985A);
|
|
2964
|
+
border-width: 2px;
|
|
2965
|
+
width: 11px;
|
|
2966
|
+
height: 11px;
|
|
2967
|
+
}
|
|
2968
|
+
.ap-memory-tile-self:hover {
|
|
2969
|
+
border-color: var(--amber, #C8985A);
|
|
2970
|
+
background:
|
|
2971
|
+
repeating-linear-gradient(
|
|
2972
|
+
0deg,
|
|
2973
|
+
transparent 0,
|
|
2974
|
+
transparent 3px,
|
|
2975
|
+
rgba(200, 152, 90, 0.06) 3px,
|
|
2976
|
+
rgba(200, 152, 90, 0.06) 4px
|
|
2977
|
+
),
|
|
2978
|
+
linear-gradient(135deg, rgba(200, 152, 90, 0.26) 0%, var(--panel-3) 60%);
|
|
2979
|
+
}
|
|
2980
|
+
.ap-memory-tile-self .ap-memory-tile-num {
|
|
2981
|
+
color: var(--amber, #C8985A);
|
|
2982
|
+
}
|
|
2983
|
+
.ap-memory-tile-self .ap-memory-tile-num::before {
|
|
2984
|
+
color: rgba(200, 152, 90, 0.7);
|
|
2985
|
+
}
|
|
2986
|
+
.ap-memory-tile-self .ap-memory-tile-num-id {
|
|
2987
|
+
color: var(--amber, #C8985A);
|
|
2988
|
+
font-size: 22px;
|
|
2989
|
+
letter-spacing: 0.08em;
|
|
2990
|
+
}
|
|
2991
|
+
.ap-memory-tile-self .ap-memory-tile-hint {
|
|
2992
|
+
border-top-color: rgba(200, 152, 90, 0.28);
|
|
2993
|
+
color: rgba(200, 152, 90, 0.7);
|
|
2994
|
+
}
|
|
2995
|
+
.ap-memory-tile-self .ap-memory-tile-hint::after { color: var(--amber, #C8985A); }
|
|
2996
|
+
/* Watermark star top-right */
|
|
2997
|
+
.ap-memory-self-mark {
|
|
2998
|
+
position: absolute;
|
|
2999
|
+
top: 6px;
|
|
3000
|
+
right: 8px;
|
|
3001
|
+
font-size: 14px;
|
|
3002
|
+
line-height: 1;
|
|
3003
|
+
color: var(--amber, #C8985A);
|
|
3004
|
+
pointer-events: none;
|
|
3005
|
+
opacity: 0.7;
|
|
3006
|
+
}
|
|
3007
|
+
|
|
3008
|
+
/* Overlay shown when a tile is clicked. */
|
|
3009
|
+
.ap-memory-overlay {
|
|
3010
|
+
position: fixed;
|
|
3011
|
+
inset: 0;
|
|
3012
|
+
z-index: 9200;
|
|
3013
|
+
display: flex;
|
|
3014
|
+
align-items: center;
|
|
3015
|
+
justify-content: center;
|
|
3016
|
+
padding: 20px;
|
|
3017
|
+
}
|
|
3018
|
+
.ap-memory-overlay-backdrop {
|
|
3019
|
+
position: absolute;
|
|
3020
|
+
inset: 0;
|
|
3021
|
+
background: rgba(0,0,0,0.6);
|
|
3022
|
+
backdrop-filter: blur(2px);
|
|
3023
|
+
-webkit-backdrop-filter: blur(2px);
|
|
3024
|
+
}
|
|
3025
|
+
.ap-memory-overlay-card {
|
|
3026
|
+
position: relative;
|
|
3027
|
+
z-index: 1;
|
|
3028
|
+
width: min(560px, 100%);
|
|
3029
|
+
max-height: 80vh;
|
|
3030
|
+
overflow-y: auto;
|
|
3031
|
+
background: var(--panel-2);
|
|
3032
|
+
border: 0.5px solid var(--line-bright);
|
|
3033
|
+
padding: 22px 24px;
|
|
3034
|
+
display: flex;
|
|
3035
|
+
flex-direction: column;
|
|
3036
|
+
gap: 14px;
|
|
3037
|
+
}
|
|
3038
|
+
.ap-memory-overlay-close {
|
|
3039
|
+
position: absolute;
|
|
3040
|
+
top: 10px;
|
|
3041
|
+
right: 10px;
|
|
3042
|
+
width: 28px;
|
|
3043
|
+
height: 28px;
|
|
3044
|
+
background: transparent;
|
|
3045
|
+
border: 0.5px solid var(--line-bright);
|
|
3046
|
+
color: var(--text-soft);
|
|
3047
|
+
font-size: 16px;
|
|
3048
|
+
line-height: 1;
|
|
3049
|
+
cursor: pointer;
|
|
3050
|
+
display: flex;
|
|
3051
|
+
align-items: center;
|
|
3052
|
+
justify-content: center;
|
|
3053
|
+
}
|
|
3054
|
+
.ap-memory-overlay-close:hover { color: var(--text); border-color: var(--text-faint); }
|
|
3055
|
+
.ap-memory-detail-head {
|
|
3056
|
+
display: flex;
|
|
3057
|
+
gap: 12px;
|
|
3058
|
+
align-items: baseline;
|
|
3059
|
+
padding-right: 32px;
|
|
3060
|
+
}
|
|
3061
|
+
.ap-memory-detail-num {
|
|
3062
|
+
font-family: var(--mono);
|
|
3063
|
+
font-size: 10px;
|
|
3064
|
+
font-weight: 700;
|
|
3065
|
+
color: var(--text-faint);
|
|
3066
|
+
letter-spacing: 0.18em;
|
|
3067
|
+
text-transform: uppercase;
|
|
3068
|
+
}
|
|
3069
|
+
.ap-memory-detail-name {
|
|
3070
|
+
font-family: var(--font-human);
|
|
3071
|
+
font-size: 16px;
|
|
3072
|
+
font-weight: 700;
|
|
3073
|
+
color: var(--text);
|
|
3074
|
+
letter-spacing: -0.008em;
|
|
3075
|
+
}
|
|
3076
|
+
.ap-memory-detail-stats {
|
|
3077
|
+
font-family: var(--mono);
|
|
3078
|
+
font-size: 9.5px;
|
|
3079
|
+
color: var(--text-faint);
|
|
3080
|
+
letter-spacing: 0.08em;
|
|
3081
|
+
text-transform: uppercase;
|
|
3082
|
+
margin-top: 2px;
|
|
3083
|
+
}
|
|
3084
|
+
.ap-memory-detail-summary {
|
|
3085
|
+
font-family: var(--font-human);
|
|
3086
|
+
font-size: 12.5px;
|
|
3087
|
+
line-height: 1.55;
|
|
3088
|
+
color: var(--text);
|
|
3089
|
+
margin: 0;
|
|
3090
|
+
}
|
|
3091
|
+
.ap-memory-detail-body {
|
|
3092
|
+
font-family: var(--font-human);
|
|
3093
|
+
font-size: 12.5px;
|
|
3094
|
+
line-height: 1.55;
|
|
3095
|
+
color: var(--text);
|
|
3096
|
+
}
|
|
3097
|
+
.ap-memory-detail-body p { margin: 0 0 8px; }
|
|
3098
|
+
.ap-memory-detail-body p:last-child { margin-bottom: 0; }
|
|
3099
|
+
.ap-memory-detail-lessons {
|
|
3100
|
+
list-style: none;
|
|
3101
|
+
margin: 0;
|
|
3102
|
+
padding: 0;
|
|
3103
|
+
display: flex;
|
|
3104
|
+
flex-direction: column;
|
|
3105
|
+
gap: 6px;
|
|
3106
|
+
}
|
|
3107
|
+
.ap-memory-detail-lessons li {
|
|
3108
|
+
font-family: var(--font-human);
|
|
3109
|
+
font-size: 12px;
|
|
3110
|
+
color: var(--text);
|
|
3111
|
+
line-height: 1.5;
|
|
3112
|
+
padding-left: 16px;
|
|
3113
|
+
position: relative;
|
|
3114
|
+
}
|
|
3115
|
+
.ap-memory-detail-lessons li::before {
|
|
3116
|
+
content: "▸";
|
|
3117
|
+
position: absolute;
|
|
3118
|
+
left: 0;
|
|
3119
|
+
top: 0;
|
|
3120
|
+
color: var(--text-soft);
|
|
3121
|
+
font-family: var(--mono);
|
|
3122
|
+
}
|
|
3123
|
+
|
|
3124
|
+
/* Profile skill slots are interactive (click to install / remove);
|
|
3125
|
+
cursor signals affordance. Hover-state border colour changes were
|
|
3126
|
+
removed at the user's request — the profile reads as a calm panel. */
|
|
3127
|
+
.ap-skill-slot[data-ap-skill-slot] { cursor: pointer; }
|
|
3128
|
+
|
|
3129
|
+
/* ─── Web Search · per-agent toggle row ─── */
|
|
3130
|
+
.ap-skill-row-web-search {
|
|
3131
|
+
/* the system row already has its own styling; we only touch the
|
|
3132
|
+
middle cell (toggle / configure) */
|
|
3133
|
+
}
|
|
3134
|
+
.ap-skill-row-toggle {
|
|
3135
|
+
display: inline-flex;
|
|
3136
|
+
align-items: center;
|
|
3137
|
+
gap: 10px;
|
|
3138
|
+
background: transparent;
|
|
3139
|
+
border: none;
|
|
3140
|
+
padding: 0;
|
|
3141
|
+
cursor: pointer;
|
|
3142
|
+
font-family: var(--mono, "Inter", system-ui, sans-serif);
|
|
3143
|
+
font-size: 10px;
|
|
3144
|
+
letter-spacing: 0.18em;
|
|
3145
|
+
text-transform: uppercase;
|
|
3146
|
+
color: var(--text-faint, #3A382F);
|
|
3147
|
+
font-weight: 600;
|
|
3148
|
+
}
|
|
3149
|
+
.ap-skill-row-toggle-track {
|
|
3150
|
+
position: relative;
|
|
3151
|
+
width: 30px;
|
|
3152
|
+
height: 16px;
|
|
3153
|
+
border-radius: 8px;
|
|
3154
|
+
background: var(--panel-3, #21211E);
|
|
3155
|
+
border: 1px solid var(--line-strong, #4D4B45);
|
|
3156
|
+
transition: background 0.15s ease, border-color 0.15s ease;
|
|
3157
|
+
}
|
|
3158
|
+
.ap-skill-row-toggle-knob {
|
|
3159
|
+
position: absolute;
|
|
3160
|
+
top: 2px;
|
|
3161
|
+
left: 2px;
|
|
3162
|
+
width: 10px;
|
|
3163
|
+
height: 10px;
|
|
3164
|
+
border-radius: 50%;
|
|
3165
|
+
/* Off state uses --text-soft (visibly grey) so the knob reads
|
|
3166
|
+
against the dark track without depending on theme nuance. The
|
|
3167
|
+
`on` state below overrides this with the bg color so the gold
|
|
3168
|
+
knob pops on the gold track. */
|
|
3169
|
+
background: var(--text-soft, #8E8B83);
|
|
3170
|
+
transition: left 0.15s ease, background 0.15s ease;
|
|
3171
|
+
}
|
|
3172
|
+
.ap-skill-row-toggle.on .ap-skill-row-toggle-track {
|
|
3173
|
+
background: var(--lime, #6FB572);
|
|
3174
|
+
border-color: var(--lime-deep, #427A48);
|
|
3175
|
+
}
|
|
3176
|
+
.ap-skill-row-toggle.on .ap-skill-row-toggle-knob {
|
|
3177
|
+
left: 17px;
|
|
3178
|
+
background: var(--bg, #0A0A0A);
|
|
3179
|
+
}
|
|
3180
|
+
.ap-skill-row-toggle.on .ap-skill-row-toggle-text { color: var(--text, #C8C5BE); }
|
|
3181
|
+
.ap-skill-row-toggle:hover .ap-skill-row-toggle-track {
|
|
3182
|
+
border-color: var(--text-soft, #8E8B83);
|
|
3183
|
+
}
|
|
3184
|
+
|
|
3185
|
+
/* ─── Web Search · "needs key" state · same toggle shape, dotted
|
|
3186
|
+
track so the row layout never shifts. The click prompt +
|
|
3187
|
+
Configure-key action live in the JS handler + ⋯ popover. ─── */
|
|
3188
|
+
.ap-skill-row-toggle.needs-key .ap-skill-row-toggle-track {
|
|
3189
|
+
background: transparent;
|
|
3190
|
+
border: 1px dashed var(--line-strong, #4D4B45);
|
|
3191
|
+
}
|
|
3192
|
+
.ap-skill-row-toggle.needs-key .ap-skill-row-toggle-knob {
|
|
3193
|
+
background: var(--text-faint, #5C5A4D);
|
|
3194
|
+
opacity: 0.65;
|
|
3195
|
+
}
|
|
3196
|
+
.ap-skill-row-toggle.needs-key .ap-skill-row-toggle-text {
|
|
3197
|
+
color: var(--text-faint, #5C5A4D);
|
|
3198
|
+
}
|
|
3199
|
+
.ap-skill-row-toggle.needs-key:hover .ap-skill-row-toggle-track {
|
|
3200
|
+
border-color: var(--lime, #6FB572);
|
|
3201
|
+
border-style: solid;
|
|
3202
|
+
}
|
|
3203
|
+
.ap-skill-row-toggle.needs-key:hover .ap-skill-row-toggle-text {
|
|
3204
|
+
color: var(--lime, #6FB572);
|
|
3205
|
+
}
|
|
3206
|
+
|
|
3207
|
+
/* ─── Configure-key action inside the ⋯ skill-info popover ─── */
|
|
3208
|
+
.ap-skill-info-configure {
|
|
3209
|
+
display: inline-flex;
|
|
3210
|
+
align-items: center;
|
|
3211
|
+
gap: 8px;
|
|
3212
|
+
width: 100%;
|
|
3213
|
+
background: transparent;
|
|
3214
|
+
border: 0.5px solid var(--lime, #6FB572);
|
|
3215
|
+
padding: 8px 12px;
|
|
3216
|
+
cursor: pointer;
|
|
3217
|
+
font-family: var(--mono, "Inter", system-ui, sans-serif);
|
|
3218
|
+
font-size: 10px;
|
|
3219
|
+
letter-spacing: 0.14em;
|
|
3220
|
+
text-transform: uppercase;
|
|
3221
|
+
color: var(--lime, #6FB572);
|
|
3222
|
+
font-weight: 700;
|
|
3223
|
+
transition: background 0.12s ease, color 0.12s ease;
|
|
3224
|
+
margin-bottom: 8px;
|
|
3225
|
+
}
|
|
3226
|
+
.ap-skill-info-configure:hover {
|
|
3227
|
+
background: var(--lime, #6FB572);
|
|
3228
|
+
color: var(--bg, #0A0A0A);
|
|
3229
|
+
}
|
|
3230
|
+
.ap-skill-info-configure-mark { font-size: 12px; }
|