claudeck 1.4.0 → 1.4.2
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/README.md +6 -8
- package/package.json +1 -1
- package/plugins/claude-editor/manifest.json +10 -0
- package/plugins/repos/manifest.json +10 -0
- package/public/css/core/theme.css +6 -21
- package/public/css/core/variables.css +2 -0
- package/public/css/features/message-queue.css +348 -0
- package/public/css/ui/commands.css +4 -4
- package/public/css/ui/messages.css +310 -78
- package/public/css/ui/right-panel.css +207 -0
- package/public/css/ui/sessions.css +173 -0
- package/public/css/ui/settings.css +75 -0
- package/public/index.html +10 -2
- package/public/js/components/add-project-modal.js +14 -0
- package/public/js/components/jump-to-latest.js +42 -0
- package/public/js/components/queue-stop-modal.js +23 -0
- package/public/js/components/settings-modal.js +65 -0
- package/public/js/core/api.js +15 -43
- package/public/js/core/dom.js +17 -0
- package/public/js/core/events.js +11 -0
- package/public/js/core/plugin-loader.js +96 -11
- package/public/js/core/store.js +11 -0
- package/public/js/core/utils.js +38 -2
- package/public/js/features/chat.js +49 -1
- package/public/js/features/message-queue.js +423 -0
- package/public/js/features/projects.js +185 -3
- package/public/js/main.js +4 -1
- package/public/js/panels/assistant-bot.js +16 -0
- package/public/js/panels/dev-docs.js +2 -2
- package/public/js/panels/memory.js +1 -0
- package/public/js/ui/context-gauge.js +10 -1
- package/public/js/ui/formatting.js +65 -11
- package/public/js/ui/header-dropdowns.js +30 -0
- package/public/js/ui/input-meta.js +13 -6
- package/public/js/ui/max-turns.js +6 -3
- package/public/js/ui/messages.js +97 -1
- package/public/js/ui/model-selector.js +1 -0
- package/public/js/ui/parallel.js +32 -2
- package/public/js/ui/permissions.js +1 -0
- package/public/js/ui/right-panel.js +0 -8
- package/public/js/ui/tab-sdk.js +395 -176
- package/public/style.css +2 -0
- package/server/memory-optimizer.js +17 -13
- package/server/routes/marketplace.js +316 -0
- package/server/routes/projects.js +0 -0
- package/server/ws-handler.js +22 -15
- package/server.js +18 -0
- package/plugins/event-stream/client.css +0 -207
- package/plugins/event-stream/client.js +0 -271
- package/plugins/linear/client.css +0 -345
- package/plugins/linear/client.js +0 -380
- package/plugins/linear/config.json +0 -5
- package/plugins/linear/server.js +0 -312
- package/plugins/sudoku/client.css +0 -196
- package/plugins/sudoku/client.js +0 -329
- package/plugins/tasks/client.css +0 -414
- package/plugins/tasks/client.js +0 -394
- package/plugins/tasks/server.js +0 -116
- package/plugins/tic-tac-toe/client.css +0 -167
- package/plugins/tic-tac-toe/client.js +0 -241
- package/public/js/components/linear-create-modal.js +0 -43
|
@@ -14,6 +14,56 @@
|
|
|
14
14
|
flex-direction: column;
|
|
15
15
|
min-width: 0;
|
|
16
16
|
overflow: hidden;
|
|
17
|
+
position: relative;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* ── Jump-to-latest pill ─────────────────────────────── */
|
|
21
|
+
/* Sits in document flow just above .input-bar; collapses to zero height when
|
|
22
|
+
hidden so it never pushes the chatbox down. */
|
|
23
|
+
claudeck-jump-to-latest {
|
|
24
|
+
display: flex;
|
|
25
|
+
justify-content: center;
|
|
26
|
+
width: 100%;
|
|
27
|
+
max-width: calc(var(--chat-max-w) + 48px);
|
|
28
|
+
margin: 0 auto;
|
|
29
|
+
padding: 0 24px 6px;
|
|
30
|
+
pointer-events: none;
|
|
31
|
+
z-index: 5;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.jump-to-latest {
|
|
35
|
+
display: inline-flex;
|
|
36
|
+
align-items: center;
|
|
37
|
+
gap: 6px;
|
|
38
|
+
padding: 6px 12px;
|
|
39
|
+
border-radius: 999px;
|
|
40
|
+
border: 1px solid var(--border, #d0d7de);
|
|
41
|
+
background: var(--bg-elevated, #ffffff);
|
|
42
|
+
color: var(--text, #1f2328);
|
|
43
|
+
font-size: 12px;
|
|
44
|
+
line-height: 1;
|
|
45
|
+
cursor: pointer;
|
|
46
|
+
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.18), 0 1px 2px rgba(0, 0, 0, 0.08);
|
|
47
|
+
pointer-events: auto;
|
|
48
|
+
transition: opacity 120ms ease, transform 120ms ease;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.jump-to-latest:hover {
|
|
52
|
+
transform: translateY(-1px);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.jump-to-latest.hidden {
|
|
56
|
+
display: none;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.jump-to-latest svg {
|
|
60
|
+
flex-shrink: 0;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* Hide the pill's wrapper padding when the button is hidden so the input-bar
|
|
64
|
+
doesn't get a phantom 6px gap above it. */
|
|
65
|
+
claudeck-jump-to-latest:not(:has(.jump-to-latest:not(.hidden))) {
|
|
66
|
+
padding: 0;
|
|
17
67
|
}
|
|
18
68
|
|
|
19
69
|
.messages {
|
|
@@ -55,7 +105,97 @@
|
|
|
55
105
|
display: none;
|
|
56
106
|
}
|
|
57
107
|
|
|
58
|
-
/*
|
|
108
|
+
/* ── Welcome State (centered chatbox) ─────────────────── */
|
|
109
|
+
.chat-area-main.welcome-state {
|
|
110
|
+
justify-content: center;
|
|
111
|
+
align-items: center;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.chat-area-main.welcome-state .messages {
|
|
115
|
+
display: none;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.chat-area-main.welcome-state .input-waiting,
|
|
119
|
+
.chat-area-main.welcome-state #image-preview-strip,
|
|
120
|
+
.chat-area-main.welcome-state #toolbox-panel,
|
|
121
|
+
.chat-area-main.welcome-state #workflow-panel {
|
|
122
|
+
display: none;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.chat-area-main.welcome-state .welcome-center {
|
|
126
|
+
display: flex;
|
|
127
|
+
flex-direction: column;
|
|
128
|
+
align-items: center;
|
|
129
|
+
gap: 20px;
|
|
130
|
+
width: 100%;
|
|
131
|
+
max-width: calc(var(--chat-max-w) + 48px);
|
|
132
|
+
padding: 0 24px;
|
|
133
|
+
margin-bottom: 32px;
|
|
134
|
+
animation: welcomeFadeIn 0.5s ease-out;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.chat-area-main.welcome-state .input-bar {
|
|
138
|
+
border-top: none;
|
|
139
|
+
padding-top: 0;
|
|
140
|
+
max-width: calc((var(--chat-max-w) + 48px) * 0.9);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.chat-area-main.welcome-state .input-bar::before {
|
|
144
|
+
display: none;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.chat-area-main:not(.welcome-state) .welcome-center {
|
|
148
|
+
display: none;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* Welcome center content */
|
|
152
|
+
.welcome-center .whaly-welcome-img {
|
|
153
|
+
width: 100px;
|
|
154
|
+
height: auto;
|
|
155
|
+
filter: drop-shadow(0 8px 24px rgba(51, 209, 122, 0.08));
|
|
156
|
+
animation: float 4s ease-in-out infinite;
|
|
157
|
+
transition: filter 0.3s;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.welcome-center:hover .whaly-welcome-img {
|
|
161
|
+
filter: drop-shadow(0 8px 32px rgba(51, 209, 122, 0.15));
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.welcome-center .welcome-greeting {
|
|
165
|
+
color: var(--text-dim);
|
|
166
|
+
font-size: 16px;
|
|
167
|
+
font-family: var(--font-display);
|
|
168
|
+
text-align: center;
|
|
169
|
+
letter-spacing: 0.03em;
|
|
170
|
+
font-weight: 500;
|
|
171
|
+
opacity: 0.8;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/* Transition animation: welcome state exiting */
|
|
175
|
+
.chat-area-main.welcome-exit .welcome-center {
|
|
176
|
+
animation: welcomeFadeOut 0.3s ease-in forwards;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.chat-area-main.welcome-exit .input-bar {
|
|
180
|
+
animation: inputBarSlideDown 0.4s ease-out forwards;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
@keyframes welcomeFadeIn {
|
|
184
|
+
from { opacity: 0; transform: translateY(12px); }
|
|
185
|
+
to { opacity: 1; transform: translateY(0); }
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
@keyframes welcomeFadeOut {
|
|
189
|
+
from { opacity: 1; transform: translateY(0); }
|
|
190
|
+
to { opacity: 0; transform: translateY(-20px); }
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
@keyframes inputBarSlideDown {
|
|
194
|
+
from { transform: translateY(0); }
|
|
195
|
+
to { transform: translateY(40px); }
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/* Whaly mascot empty state (used when messages exist but empty after clear) */
|
|
59
199
|
.whaly-placeholder {
|
|
60
200
|
display: flex;
|
|
61
201
|
flex-direction: column;
|
|
@@ -107,29 +247,30 @@
|
|
|
107
247
|
.msg-user {
|
|
108
248
|
background: var(--user-dim);
|
|
109
249
|
border: 1px solid var(--border);
|
|
110
|
-
border-
|
|
111
|
-
border-radius: var(--radius-md);
|
|
250
|
+
border-radius: var(--radius-lg);
|
|
112
251
|
padding: 0;
|
|
113
|
-
font-size:
|
|
114
|
-
line-height: 1.
|
|
252
|
+
font-size: 13.5px;
|
|
253
|
+
line-height: 1.7;
|
|
115
254
|
color: var(--text);
|
|
116
|
-
transition: border-color 0.2s;
|
|
255
|
+
transition: border-color 0.2s, box-shadow 0.2s;
|
|
117
256
|
}
|
|
118
257
|
|
|
119
258
|
.msg-user:hover {
|
|
120
|
-
border-color: rgba(123,155,245,0.
|
|
259
|
+
border-color: rgba(123,155,245,0.15);
|
|
260
|
+
box-shadow: 0 2px 12px rgba(123,155,245,0.04);
|
|
121
261
|
}
|
|
122
262
|
|
|
123
263
|
.msg-user-label {
|
|
124
264
|
display: block;
|
|
125
|
-
padding:
|
|
126
|
-
font-size:
|
|
127
|
-
font-weight:
|
|
128
|
-
font-family: var(--font-
|
|
129
|
-
letter-spacing: 0.
|
|
265
|
+
padding: 6px 16px;
|
|
266
|
+
font-size: 11px;
|
|
267
|
+
font-weight: 600;
|
|
268
|
+
font-family: var(--font-sans);
|
|
269
|
+
letter-spacing: 0.06em;
|
|
130
270
|
color: var(--user);
|
|
131
271
|
background: var(--user-dim);
|
|
132
272
|
border-bottom: 1px solid var(--border-subtle);
|
|
273
|
+
border-radius: var(--radius-lg) var(--radius-lg) 0 0;
|
|
133
274
|
user-select: none;
|
|
134
275
|
text-transform: uppercase;
|
|
135
276
|
}
|
|
@@ -174,7 +315,7 @@
|
|
|
174
315
|
|
|
175
316
|
.msg-user-body {
|
|
176
317
|
display: block;
|
|
177
|
-
padding:
|
|
318
|
+
padding: 12px 16px;
|
|
178
319
|
white-space: pre-wrap;
|
|
179
320
|
word-wrap: break-word;
|
|
180
321
|
font-family: var(--font-sans);
|
|
@@ -182,12 +323,11 @@
|
|
|
182
323
|
|
|
183
324
|
html[data-theme="light"] .msg-user {
|
|
184
325
|
border-color: var(--border);
|
|
185
|
-
border-left-color: var(--user);
|
|
186
326
|
}
|
|
187
327
|
|
|
188
328
|
.msg-assistant {
|
|
189
|
-
font-size:
|
|
190
|
-
line-height: 1.
|
|
329
|
+
font-size: 14px;
|
|
330
|
+
line-height: 1.65;
|
|
191
331
|
color: var(--text);
|
|
192
332
|
}
|
|
193
333
|
|
|
@@ -202,40 +342,37 @@ html[data-theme="light"] .msg-user {
|
|
|
202
342
|
.msg-assistant .text-content .md-h2,
|
|
203
343
|
.msg-assistant .text-content .md-h3,
|
|
204
344
|
.msg-assistant .text-content .md-h4 {
|
|
205
|
-
font-family: var(--font-
|
|
345
|
+
font-family: var(--font-editorial);
|
|
206
346
|
color: var(--text);
|
|
207
|
-
letter-spacing: 0.01em;
|
|
208
|
-
margin-top:
|
|
209
|
-
margin-bottom:
|
|
210
|
-
line-height: 1.
|
|
347
|
+
letter-spacing: -0.01em;
|
|
348
|
+
margin-top: 14px;
|
|
349
|
+
margin-bottom: 6px;
|
|
350
|
+
line-height: 1.35;
|
|
211
351
|
}
|
|
212
352
|
|
|
213
353
|
.msg-assistant .text-content .md-h1 {
|
|
214
|
-
font-size:
|
|
354
|
+
font-size: 22px;
|
|
215
355
|
font-weight: 700;
|
|
216
|
-
padding-bottom:
|
|
217
|
-
border-bottom:
|
|
218
|
-
background: linear-gradient(90deg, var(--text), var(--text-secondary));
|
|
219
|
-
-webkit-background-clip: text;
|
|
220
|
-
-webkit-text-fill-color: transparent;
|
|
221
|
-
background-clip: text;
|
|
356
|
+
padding-bottom: 6px;
|
|
357
|
+
border-bottom: 2px solid var(--border);
|
|
222
358
|
}
|
|
223
359
|
|
|
224
360
|
.msg-assistant .text-content .md-h2 {
|
|
225
|
-
font-size:
|
|
361
|
+
font-size: 18px;
|
|
226
362
|
font-weight: 700;
|
|
227
|
-
padding-bottom:
|
|
363
|
+
padding-bottom: 6px;
|
|
228
364
|
border-bottom: 1px solid var(--border-subtle);
|
|
229
365
|
}
|
|
230
366
|
|
|
231
367
|
.msg-assistant .text-content .md-h3 {
|
|
232
|
-
font-size:
|
|
368
|
+
font-size: 15.5px;
|
|
233
369
|
font-weight: 600;
|
|
234
370
|
}
|
|
235
371
|
|
|
236
372
|
.msg-assistant .text-content .md-h4 {
|
|
237
373
|
font-size: 14px;
|
|
238
374
|
font-weight: 600;
|
|
375
|
+
font-style: italic;
|
|
239
376
|
color: var(--text-secondary);
|
|
240
377
|
}
|
|
241
378
|
|
|
@@ -262,23 +399,25 @@ html[data-theme="light"] .msg-user {
|
|
|
262
399
|
/* ── Typography — Inline Code ────────────────────────── */
|
|
263
400
|
.msg-assistant .text-content code.inline-code {
|
|
264
401
|
font-family: var(--font-mono);
|
|
265
|
-
font-size:
|
|
402
|
+
font-size: 0.88em;
|
|
266
403
|
background: var(--bg-tertiary);
|
|
267
|
-
padding: 2px
|
|
268
|
-
border-radius:
|
|
404
|
+
padding: 2px 8px;
|
|
405
|
+
border-radius: 5px;
|
|
269
406
|
color: var(--purple);
|
|
270
407
|
border: 1px solid var(--border-subtle);
|
|
408
|
+
font-variant-ligatures: none;
|
|
271
409
|
}
|
|
272
410
|
|
|
273
411
|
/* Legacy inline code (without .inline-code class) */
|
|
274
412
|
.msg-assistant .text-content code:not([class*="language-"]):not(.inline-code):not(.hljs) {
|
|
275
413
|
font-family: var(--font-mono);
|
|
276
|
-
font-size:
|
|
414
|
+
font-size: 0.88em;
|
|
277
415
|
background: var(--bg-tertiary);
|
|
278
|
-
padding: 2px
|
|
279
|
-
border-radius:
|
|
416
|
+
padding: 2px 8px;
|
|
417
|
+
border-radius: 5px;
|
|
280
418
|
color: var(--purple);
|
|
281
419
|
border: 1px solid var(--border-subtle);
|
|
420
|
+
font-variant-ligatures: none;
|
|
282
421
|
}
|
|
283
422
|
|
|
284
423
|
/* ── Typography — Links ──────────────────────────────── */
|
|
@@ -291,7 +430,7 @@ html[data-theme="light"] .msg-user {
|
|
|
291
430
|
|
|
292
431
|
.msg-assistant .text-content .md-link:hover {
|
|
293
432
|
border-bottom-color: var(--accent);
|
|
294
|
-
|
|
433
|
+
opacity: 0.85;
|
|
295
434
|
}
|
|
296
435
|
|
|
297
436
|
/* ── Typography — Horizontal Rule ────────────────────── */
|
|
@@ -304,15 +443,16 @@ html[data-theme="light"] .msg-user {
|
|
|
304
443
|
|
|
305
444
|
/* ── Typography — Blockquotes ────────────────────────── */
|
|
306
445
|
.msg-assistant .text-content .md-blockquote {
|
|
307
|
-
margin:
|
|
446
|
+
margin: 10px 0;
|
|
308
447
|
padding: 10px 18px;
|
|
309
448
|
border-left: 3px solid var(--accent);
|
|
310
449
|
background: var(--accent-dim);
|
|
311
450
|
border-radius: 0 var(--radius-md) var(--radius-md) 0;
|
|
312
451
|
color: var(--text-secondary);
|
|
313
452
|
font-style: italic;
|
|
314
|
-
font-
|
|
315
|
-
|
|
453
|
+
font-family: var(--font-editorial);
|
|
454
|
+
font-size: 14px;
|
|
455
|
+
line-height: 1.7;
|
|
316
456
|
}
|
|
317
457
|
|
|
318
458
|
/* ── Typography — Lists ──────────────────────────────── */
|
|
@@ -346,6 +486,68 @@ html[data-theme="light"] .msg-user {
|
|
|
346
486
|
font-family: var(--font-mono);
|
|
347
487
|
}
|
|
348
488
|
|
|
489
|
+
/* Nested lists */
|
|
490
|
+
.msg-assistant .text-content .md-list .md-list {
|
|
491
|
+
margin: 4px 0;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
.msg-assistant .text-content .md-ul .md-ul {
|
|
495
|
+
list-style-type: circle;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
.msg-assistant .text-content .md-ul .md-ul .md-ul {
|
|
499
|
+
list-style-type: square;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/* ── Typography — Task Lists ───────────────────────────── */
|
|
503
|
+
.msg-assistant .text-content .md-task-list {
|
|
504
|
+
list-style: none;
|
|
505
|
+
padding-left: 4px;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
.msg-assistant .text-content .md-task-list li {
|
|
509
|
+
display: flex;
|
|
510
|
+
align-items: flex-start;
|
|
511
|
+
gap: 8px;
|
|
512
|
+
padding-left: 0;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
.msg-assistant .text-content .md-checkbox {
|
|
516
|
+
appearance: none;
|
|
517
|
+
-webkit-appearance: none;
|
|
518
|
+
width: 16px;
|
|
519
|
+
height: 16px;
|
|
520
|
+
border: 1.5px solid var(--border);
|
|
521
|
+
border-radius: 4px;
|
|
522
|
+
background: var(--bg-secondary);
|
|
523
|
+
flex-shrink: 0;
|
|
524
|
+
margin-top: 4px;
|
|
525
|
+
cursor: default;
|
|
526
|
+
position: relative;
|
|
527
|
+
transition: all 0.15s var(--ease-smooth);
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
.msg-assistant .text-content .md-checkbox:checked {
|
|
531
|
+
background: var(--accent);
|
|
532
|
+
border-color: var(--accent);
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
.msg-assistant .text-content .md-checkbox:checked::after {
|
|
536
|
+
content: "\2713";
|
|
537
|
+
position: absolute;
|
|
538
|
+
top: -1px;
|
|
539
|
+
left: 2px;
|
|
540
|
+
font-size: 12px;
|
|
541
|
+
color: #fff;
|
|
542
|
+
font-weight: 700;
|
|
543
|
+
line-height: 1;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
.msg-assistant .text-content .md-task-list .task-text-done {
|
|
547
|
+
text-decoration: line-through;
|
|
548
|
+
color: var(--text-dim);
|
|
549
|
+
}
|
|
550
|
+
|
|
349
551
|
/* ── Typography — Tables ─────────────────────────────── */
|
|
350
552
|
.msg-assistant .text-content .md-table-wrap {
|
|
351
553
|
margin: 12px 0;
|
|
@@ -371,7 +573,7 @@ html[data-theme="light"] .msg-user {
|
|
|
371
573
|
font-size: 11px;
|
|
372
574
|
text-transform: uppercase;
|
|
373
575
|
letter-spacing: 0.04em;
|
|
374
|
-
font-family: var(--font-
|
|
576
|
+
font-family: var(--font-sans);
|
|
375
577
|
}
|
|
376
578
|
|
|
377
579
|
.msg-assistant .text-content .md-table td {
|
|
@@ -388,6 +590,10 @@ html[data-theme="light"] .msg-user {
|
|
|
388
590
|
transition: background 0.15s;
|
|
389
591
|
}
|
|
390
592
|
|
|
593
|
+
.msg-assistant .text-content .md-table tbody tr:nth-child(even) {
|
|
594
|
+
background: var(--bg-secondary);
|
|
595
|
+
}
|
|
596
|
+
|
|
391
597
|
.msg-assistant .text-content .md-table tbody tr:hover {
|
|
392
598
|
background: var(--accent-dim);
|
|
393
599
|
}
|
|
@@ -395,16 +601,17 @@ html[data-theme="light"] .msg-user {
|
|
|
395
601
|
/* ── Code Blocks ─────────────────────────────────────── */
|
|
396
602
|
.code-block-wrapper {
|
|
397
603
|
position: relative;
|
|
398
|
-
margin:
|
|
604
|
+
margin: 10px 0;
|
|
399
605
|
border: 1px solid var(--border);
|
|
400
|
-
border-radius: var(--radius-
|
|
606
|
+
border-radius: var(--radius-lg);
|
|
401
607
|
overflow: hidden;
|
|
402
608
|
background: var(--bg-deep);
|
|
403
|
-
transition: border-color 0.2s;
|
|
609
|
+
transition: border-color 0.2s, box-shadow 0.2s;
|
|
404
610
|
}
|
|
405
611
|
|
|
406
612
|
.code-block-wrapper:hover {
|
|
407
613
|
border-color: rgba(255,255,255,0.06);
|
|
614
|
+
box-shadow: var(--shadow-sm);
|
|
408
615
|
}
|
|
409
616
|
|
|
410
617
|
.code-block-header {
|
|
@@ -418,12 +625,12 @@ html[data-theme="light"] .msg-user {
|
|
|
418
625
|
}
|
|
419
626
|
|
|
420
627
|
.code-lang-label {
|
|
421
|
-
font-family: var(--font-
|
|
628
|
+
font-family: var(--font-sans);
|
|
422
629
|
font-size: 11px;
|
|
423
630
|
font-weight: 600;
|
|
424
631
|
color: var(--text-secondary);
|
|
425
632
|
text-transform: uppercase;
|
|
426
|
-
letter-spacing: 0.
|
|
633
|
+
letter-spacing: 0.05em;
|
|
427
634
|
user-select: none;
|
|
428
635
|
}
|
|
429
636
|
|
|
@@ -454,6 +661,26 @@ html[data-theme="light"] .msg-user {
|
|
|
454
661
|
font-family: var(--font-mono);
|
|
455
662
|
font-size: 12.5px;
|
|
456
663
|
line-height: 1.65;
|
|
664
|
+
counter-reset: line;
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
/* Line numbers via CSS counters */
|
|
668
|
+
.msg-assistant .text-content pre code .code-line {
|
|
669
|
+
display: block;
|
|
670
|
+
counter-increment: line;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
.msg-assistant .text-content pre code .code-line::before {
|
|
674
|
+
content: counter(line);
|
|
675
|
+
display: inline-block;
|
|
676
|
+
width: 3ch;
|
|
677
|
+
margin-right: 16px;
|
|
678
|
+
text-align: right;
|
|
679
|
+
color: var(--text-dim);
|
|
680
|
+
opacity: 0.5;
|
|
681
|
+
font-size: 11px;
|
|
682
|
+
user-select: none;
|
|
683
|
+
pointer-events: none;
|
|
457
684
|
}
|
|
458
685
|
|
|
459
686
|
/* ── Code Copy Button ──────────────────────────────────── */
|
|
@@ -463,7 +690,7 @@ html[data-theme="light"] .msg-user {
|
|
|
463
690
|
opacity: 0;
|
|
464
691
|
padding: 3px 10px;
|
|
465
692
|
font-size: 10px;
|
|
466
|
-
font-family: var(--font-
|
|
693
|
+
font-family: var(--font-sans);
|
|
467
694
|
color: var(--text-dim);
|
|
468
695
|
background: transparent;
|
|
469
696
|
border: 1px solid var(--border);
|
|
@@ -471,7 +698,7 @@ html[data-theme="light"] .msg-user {
|
|
|
471
698
|
cursor: pointer;
|
|
472
699
|
transition: all 0.2s var(--ease-smooth);
|
|
473
700
|
text-transform: uppercase;
|
|
474
|
-
letter-spacing: 0.
|
|
701
|
+
letter-spacing: 0.05em;
|
|
475
702
|
margin-left: auto;
|
|
476
703
|
}
|
|
477
704
|
|
|
@@ -482,7 +709,7 @@ html[data-theme="light"] .msg-user {
|
|
|
482
709
|
right: 8px;
|
|
483
710
|
padding: 3px 10px;
|
|
484
711
|
font-size: 10px;
|
|
485
|
-
font-family: var(--font-
|
|
712
|
+
font-family: var(--font-sans);
|
|
486
713
|
color: var(--text-dim);
|
|
487
714
|
background: var(--bg-tertiary);
|
|
488
715
|
border: 1px solid var(--border);
|
|
@@ -492,7 +719,7 @@ html[data-theme="light"] .msg-user {
|
|
|
492
719
|
transition: all 0.2s var(--ease-smooth);
|
|
493
720
|
z-index: 2;
|
|
494
721
|
text-transform: uppercase;
|
|
495
|
-
letter-spacing: 0.
|
|
722
|
+
letter-spacing: 0.05em;
|
|
496
723
|
}
|
|
497
724
|
|
|
498
725
|
.code-block-wrapper:hover .code-copy-btn {
|
|
@@ -516,24 +743,23 @@ html[data-theme="light"] .msg-user {
|
|
|
516
743
|
display: flex;
|
|
517
744
|
align-items: center;
|
|
518
745
|
flex-wrap: wrap;
|
|
519
|
-
gap:
|
|
520
|
-
padding:
|
|
746
|
+
gap: 10px;
|
|
747
|
+
padding: 10px 14px;
|
|
521
748
|
background: var(--bg-secondary);
|
|
522
749
|
border: 1px solid var(--border);
|
|
523
|
-
border-
|
|
524
|
-
|
|
525
|
-
font-size: 11px;
|
|
750
|
+
border-radius: var(--radius-lg);
|
|
751
|
+
font-size: 11.5px;
|
|
526
752
|
font-family: var(--font-mono);
|
|
527
753
|
color: var(--text-secondary);
|
|
528
|
-
margin:
|
|
754
|
+
margin: 6px 0;
|
|
529
755
|
cursor: pointer;
|
|
530
756
|
transition: all 0.2s var(--ease-smooth);
|
|
531
|
-
animation:
|
|
757
|
+
animation: fadeIn 0.2s var(--ease-out-expo);
|
|
532
758
|
animation-fill-mode: both;
|
|
533
759
|
}
|
|
534
760
|
|
|
535
|
-
.tool-indicator:hover { border-color:
|
|
536
|
-
.tool-indicator .tool-name { font-weight: 600; color: var(--accent); font-family: var(--font-
|
|
761
|
+
.tool-indicator:hover { border-color: rgba(51,209,122,0.25); background: rgba(51,209,122,0.03); }
|
|
762
|
+
.tool-indicator .tool-name { font-weight: 600; color: var(--accent); font-family: var(--font-sans); letter-spacing: 0.02em; }
|
|
537
763
|
.tool-indicator .tool-detail { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-family: var(--font-sans); }
|
|
538
764
|
|
|
539
765
|
/* Spinner for running tools */
|
|
@@ -557,27 +783,20 @@ html[data-theme="light"] .msg-user {
|
|
|
557
783
|
flex-shrink: 0;
|
|
558
784
|
}
|
|
559
785
|
|
|
560
|
-
/* Running state —
|
|
786
|
+
/* Running state — subtle background tint */
|
|
561
787
|
.tool-indicator.tool-running {
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
animation-fill-mode: both;
|
|
565
|
-
}
|
|
566
|
-
|
|
567
|
-
@keyframes toolRunPulse {
|
|
568
|
-
0%, 100% { border-left-color: var(--accent); }
|
|
569
|
-
50% { border-left-color: var(--accent-solid); }
|
|
788
|
+
background: var(--accent-dim);
|
|
789
|
+
border-color: var(--border-accent);
|
|
570
790
|
}
|
|
571
791
|
|
|
572
792
|
/* Done state */
|
|
573
793
|
.tool-indicator.tool-done {
|
|
574
|
-
border-left-color: var(--success);
|
|
575
794
|
opacity: 0.85;
|
|
576
795
|
}
|
|
577
796
|
|
|
578
797
|
/* Error state */
|
|
579
798
|
.tool-indicator.tool-error {
|
|
580
|
-
border-
|
|
799
|
+
border-color: rgba(237,51,59,0.2);
|
|
581
800
|
}
|
|
582
801
|
|
|
583
802
|
/* Result preview shown inline under the tool detail */
|
|
@@ -700,17 +919,29 @@ html[data-theme="light"] .msg-user {
|
|
|
700
919
|
display: flex;
|
|
701
920
|
align-items: center;
|
|
702
921
|
gap: 12px;
|
|
703
|
-
padding:
|
|
922
|
+
padding: 12px 16px;
|
|
704
923
|
max-width: var(--chat-max-w);
|
|
705
924
|
width: 100%;
|
|
706
925
|
margin: 0 auto;
|
|
707
926
|
background: var(--bg-secondary);
|
|
708
927
|
border: 1px solid var(--border);
|
|
709
|
-
border-
|
|
710
|
-
border-radius: var(--radius-md);
|
|
928
|
+
border-radius: var(--radius-lg);
|
|
711
929
|
font-size: 12px;
|
|
712
930
|
color: var(--text-secondary);
|
|
713
|
-
animation:
|
|
931
|
+
animation: fadeIn 0.25s var(--ease-out-expo);
|
|
932
|
+
position: relative;
|
|
933
|
+
overflow: hidden;
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
.thinking-bar::before {
|
|
937
|
+
content: "";
|
|
938
|
+
position: absolute;
|
|
939
|
+
top: 0;
|
|
940
|
+
left: 0;
|
|
941
|
+
width: 60%;
|
|
942
|
+
height: 2px;
|
|
943
|
+
background: linear-gradient(90deg, transparent, var(--accent), transparent);
|
|
944
|
+
animation: editorialShimmer 2s linear infinite;
|
|
714
945
|
}
|
|
715
946
|
|
|
716
947
|
.thinking-dot-container {
|
|
@@ -720,11 +951,12 @@ html[data-theme="light"] .msg-user {
|
|
|
720
951
|
}
|
|
721
952
|
|
|
722
953
|
.thinking-dot {
|
|
723
|
-
width:
|
|
724
|
-
height:
|
|
954
|
+
width: 4px;
|
|
955
|
+
height: 4px;
|
|
725
956
|
background: var(--accent);
|
|
726
957
|
border-radius: 50%;
|
|
727
958
|
animation: thinkingPulse 1.4s infinite;
|
|
959
|
+
opacity: 0.7;
|
|
728
960
|
}
|
|
729
961
|
|
|
730
962
|
.thinking-dot:nth-child(2) { animation-delay: 0.2s; }
|
|
@@ -732,7 +964,7 @@ html[data-theme="light"] .msg-user {
|
|
|
732
964
|
|
|
733
965
|
.thinking-label {
|
|
734
966
|
color: var(--accent);
|
|
735
|
-
font-family: var(--font-
|
|
967
|
+
font-family: var(--font-sans);
|
|
736
968
|
font-size: 12px;
|
|
737
969
|
font-weight: 500;
|
|
738
970
|
letter-spacing: 0.02em;
|