anentrypoint-design 0.0.211 → 0.0.212
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/app-shell.css +38 -26
- package/chat.css +68 -8
- package/community.css +5 -1
- package/dist/247420.css +137 -36
- package/dist/247420.js +12 -12
- package/package.json +1 -1
- package/src/components/content.js +2 -2
- package/src/components/files.js +21 -25
- package/src/components/sessions.js +7 -2
- package/src/components/shell.js +32 -10
package/app-shell.css
CHANGED
|
@@ -1131,12 +1131,14 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1131
1131
|
.ds-file-listing { display: flex; flex-direction: column; gap: var(--space-2); min-height: 0; }
|
|
1132
1132
|
/* The quick filter is a compact control, not a full-width form row - a giant
|
|
1133
1133
|
input above the grid reads as a search page and costs fold height. */
|
|
1134
|
-
|
|
1134
|
+
/* The filter is now an inline item in the single .ds-file-controls toolbar row
|
|
1135
|
+
(the standalone right-aligned .ds-file-filter strip was removed). */
|
|
1135
1136
|
.ds-file-filter-input {
|
|
1136
1137
|
width: min(280px, 100%); padding: 6px 12px; font-size: var(--fs-sm);
|
|
1137
1138
|
background: var(--bg); color: var(--fg);
|
|
1138
1139
|
border: var(--bw-hair) solid var(--rule); border-radius: var(--r-1);
|
|
1139
1140
|
}
|
|
1141
|
+
.ds-file-controls .ds-file-filter-input { flex: 0 1 220px; }
|
|
1140
1142
|
.ds-file-filter-input:focus-visible { outline: none; box-shadow: var(--focus-ring-inset); }
|
|
1141
1143
|
.ds-file-sort { display: flex; gap: var(--space-2); padding: 0 var(--space-2) var(--space-1); }
|
|
1142
1144
|
.ds-file-sort-btn {
|
|
@@ -1266,7 +1268,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1266
1268
|
role=checkbox/aria-checked name+state. */
|
|
1267
1269
|
.ds-check-box {
|
|
1268
1270
|
width: 15px; height: 15px; box-sizing: border-box; flex: 0 0 auto; position: relative;
|
|
1269
|
-
border: 1.5px solid var(--
|
|
1271
|
+
border: 1.5px solid var(--fg-3); border-radius: 4px;
|
|
1270
1272
|
transition: background var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease);
|
|
1271
1273
|
}
|
|
1272
1274
|
.is-marked > .ds-check-box,
|
|
@@ -1278,14 +1280,14 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1278
1280
|
}
|
|
1279
1281
|
[aria-checked="mixed"] > .ds-check-box { background: var(--accent); border-color: var(--accent); }
|
|
1280
1282
|
[aria-checked="mixed"] > .ds-check-box::after {
|
|
1281
|
-
content: ""; position: absolute; left:
|
|
1283
|
+
content: ""; position: absolute; left: 3px; right: 3px; top: 6px; height: 2px; background: var(--bg); border-radius: 1px;
|
|
1282
1284
|
}
|
|
1283
1285
|
|
|
1284
1286
|
.ds-file-check {
|
|
1285
1287
|
display: inline-flex; align-items: center; justify-content: center;
|
|
1286
1288
|
min-width: 28px; height: 28px; padding: 0 4px;
|
|
1287
1289
|
background: transparent; border: 0; border-radius: var(--r-1);
|
|
1288
|
-
|
|
1290
|
+
color: var(--fg-3);
|
|
1289
1291
|
cursor: pointer;
|
|
1290
1292
|
transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
|
|
1291
1293
|
}
|
|
@@ -1376,6 +1378,16 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1376
1378
|
}
|
|
1377
1379
|
.ds-file-cell-media .ds-file-icon { width: 34px; height: 34px; font-size: 24px; }
|
|
1378
1380
|
.ds-file-cell-thumb { width: 100%; height: 100%; object-fit: cover; }
|
|
1381
|
+
/* Per-type icon tints on thumb tiles so the grid keeps the colour-coding the
|
|
1382
|
+
list rows already carry (mirrors .ds-file-row[data-file-type] .ds-file-icon). */
|
|
1383
|
+
.ds-file-cell[data-file-type="dir"] .ds-file-icon { color: var(--accent); }
|
|
1384
|
+
.ds-file-cell[data-file-type="image"] .ds-file-icon { color: var(--mascot); }
|
|
1385
|
+
.ds-file-cell[data-file-type="video"] .ds-file-icon { color: var(--purple-2); }
|
|
1386
|
+
.ds-file-cell[data-file-type="audio"] .ds-file-icon { color: var(--sky); }
|
|
1387
|
+
.ds-file-cell[data-file-type="code"] .ds-file-icon { color: var(--green-2); }
|
|
1388
|
+
.ds-file-cell[data-file-type="archive"] .ds-file-icon { color: var(--flame); }
|
|
1389
|
+
.ds-file-cell[data-file-type="document"] .ds-file-icon { color: var(--amber); }
|
|
1390
|
+
.ds-file-cell[data-file-type="symlink"] .ds-file-icon { color: var(--purple); }
|
|
1379
1391
|
.ds-file-cell-name {
|
|
1380
1392
|
font-size: var(--fs-tiny); text-align: left;
|
|
1381
1393
|
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
@@ -1386,13 +1398,6 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1386
1398
|
background: color-mix(in oklab, var(--bg) 78%, transparent);
|
|
1387
1399
|
}
|
|
1388
1400
|
|
|
1389
|
-
/* Card mode — opt-in via data-columns; switches the list to a grid. */
|
|
1390
|
-
.ds-file-grid[data-columns] { display: grid; gap: var(--space-3); }
|
|
1391
|
-
.ds-file-grid[data-columns="1"] { grid-template-columns: 1fr; }
|
|
1392
|
-
.ds-file-grid[data-columns="2"] { grid-template-columns: repeat(2, 1fr); }
|
|
1393
|
-
.ds-file-grid[data-columns="3"] { grid-template-columns: repeat(3, 1fr); }
|
|
1394
|
-
.ds-file-grid[data-columns="4"] { grid-template-columns: repeat(4, 1fr); }
|
|
1395
|
-
|
|
1396
1401
|
/* ============================================================
|
|
1397
1402
|
File browser surface — stage, toolbar, breadcrumb, dropzone,
|
|
1398
1403
|
upload progress, empty state, modals, preview. Authored for
|
|
@@ -1716,21 +1721,12 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1716
1721
|
}
|
|
1717
1722
|
.ds-filter-input:focus-visible { outline: none; box-shadow: var(--focus-ring-inset); }
|
|
1718
1723
|
|
|
1719
|
-
/* Loading skeleton
|
|
1720
|
-
.ds-file-
|
|
1721
|
-
.ds-file-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
background-size: 200% 100%;
|
|
1726
|
-
}
|
|
1727
|
-
@media (prefers-reduced-motion: no-preference) {
|
|
1728
|
-
.ds-file-skeleton { animation: ds-skeleton-shimmer 1.2s var(--ease) infinite; }
|
|
1729
|
-
}
|
|
1730
|
-
@keyframes ds-skeleton-shimmer {
|
|
1731
|
-
0% { background-position: 200% 0; }
|
|
1732
|
-
100% { background-position: -200% 0; }
|
|
1733
|
-
}
|
|
1724
|
+
/* Loading skeleton: FileSkeleton renders `.ds-file-grid.ds-file-skeleton` with
|
|
1725
|
+
`.ds-file-row.ds-file-row-skeleton` rows whose inner `.ds-skel` children shimmer
|
|
1726
|
+
(via .ds-skel::after). The container therefore inherits the .ds-file-grid layout
|
|
1727
|
+
and must NOT be a single 48px gradient bar (that collapsed every row and double-
|
|
1728
|
+
shimmered). The dead .ds-file-grid-loading rule + unused ds-skeleton-shimmer
|
|
1729
|
+
keyframe were removed; only the inner .ds-skel children animate. */
|
|
1734
1730
|
|
|
1735
1731
|
/* Drag-to-move drop target highlight on a directory row. */
|
|
1736
1732
|
.ds-file-row.ds-drop-target {
|
|
@@ -1939,6 +1935,13 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1939
1935
|
padding: 10px 12px; border-radius: 6px; overflow-x: auto;
|
|
1940
1936
|
font-family: var(--ff-mono); font-size: 0.9em; margin: 8px 0;
|
|
1941
1937
|
}
|
|
1938
|
+
/* Markdown tables + horizontal rules: agents routinely emit them, but they were
|
|
1939
|
+
unstyled (bare unspaced cells, vanished rules). */
|
|
1940
|
+
.chat-bubble.chat-md table { border-collapse: collapse; width: auto; max-width: 100%; margin: 8px 0; font-size: .95em; display: block; overflow-x: auto; }
|
|
1941
|
+
.chat-bubble.chat-md th,
|
|
1942
|
+
.chat-bubble.chat-md td { border: var(--bw-hair) solid var(--rule); padding: 4px 10px; text-align: left; }
|
|
1943
|
+
.chat-bubble.chat-md th { background: color-mix(in oklab, var(--fg) 5%, transparent); font-weight: 600; }
|
|
1944
|
+
.chat-bubble.chat-md hr { border: 0; border-top: var(--bw-hair) solid var(--rule); margin: 12px 0; }
|
|
1942
1945
|
|
|
1943
1946
|
.chat-msg .chat-bubble.chat-code,
|
|
1944
1947
|
.chat-msg.you .chat-bubble.chat-code,
|
|
@@ -3085,6 +3088,15 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
|
|
|
3085
3088
|
.ws-resizer.ws-resizer-rail { grid-column: 1; }
|
|
3086
3089
|
.ws-resizer.ws-resizer-sessions { grid-column: 2; }
|
|
3087
3090
|
.ws-resizer.ws-resizer-pane { grid-column: 3; justify-self: end; }
|
|
3091
|
+
/* A resizer must vanish once its TRACK is removed by the staging media blocks,
|
|
3092
|
+
else dragging it writes a --ws-*-w var that no longer affects the now-fixed
|
|
3093
|
+
drawer (a dead handle). Mirror the 1480 / 1100 / 900 staging exactly. */
|
|
3094
|
+
@media (max-width: 1480px) { .ws-resizer.ws-resizer-pane { display: none; } }
|
|
3095
|
+
@media (max-width: 1100px) { .ws-resizer.ws-resizer-sessions { display: none; } }
|
|
3096
|
+
@media (max-width: 900px) { .ws-resizer { display: none; } }
|
|
3097
|
+
/* Coarse-pointer hit target for hybrid touch laptops above the drawer breakpoint
|
|
3098
|
+
(the 8px sliver is un-grabbable by touch). */
|
|
3099
|
+
@media (pointer: coarse) { .ws-resizer { width: 16px; margin-right: -8px; } }
|
|
3088
3100
|
/* Ease the rail/pane collapse. Track COUNT stays stable on collapse (only a
|
|
3089
3101
|
width var flips), so grid-template-columns is animatable; reduced-motion
|
|
3090
3102
|
drops it to an instant swap. */
|
package/chat.css
CHANGED
|
@@ -268,6 +268,23 @@
|
|
|
268
268
|
@media (prefers-reduced-motion: reduce) {
|
|
269
269
|
.agentchat-working .chat-thinking-dots span { animation: none; opacity: .7; }
|
|
270
270
|
}
|
|
271
|
+
/* Standalone thinking part (ThinkingNode renders .chat-bubble.chat-thinking with
|
|
272
|
+
.chat-thinking-dots + .chat-thinking-text OUTSIDE the .agentchat-working tail).
|
|
273
|
+
Without these base rules the dots are invisible empty spans and the text has
|
|
274
|
+
no muted tone. Reuse the agentchat-dot-bounce keyframe. */
|
|
275
|
+
.chat-thinking { display: flex; align-items: center; gap: .5em; color: var(--fg-3); font-size: var(--fs-tiny); background: none; padding: .3em .2em; }
|
|
276
|
+
.chat-thinking-text { color: var(--fg-3); }
|
|
277
|
+
.chat-thinking-dots { display: inline-flex; gap: 3px; }
|
|
278
|
+
.chat-thinking-dots span {
|
|
279
|
+
width: 5px; height: 5px; border-radius: 50%;
|
|
280
|
+
background: var(--fg); opacity: .4;
|
|
281
|
+
animation: agentchat-dot-bounce 1.2s infinite ease-in-out;
|
|
282
|
+
}
|
|
283
|
+
.chat-thinking-dots span:nth-child(2) { animation-delay: .15s; }
|
|
284
|
+
.chat-thinking-dots span:nth-child(3) { animation-delay: .3s; }
|
|
285
|
+
@media (prefers-reduced-motion: reduce) {
|
|
286
|
+
.chat-thinking-dots span { animation: none; opacity: .7; }
|
|
287
|
+
}
|
|
271
288
|
|
|
272
289
|
/* Responsive: the control cluster + cwd bar must stay usable on phones/tablets.
|
|
273
290
|
The cwd path can't eat the row beside its label + buttons on a narrow screen. */
|
|
@@ -295,16 +312,20 @@
|
|
|
295
312
|
display: inline-block; width: 8px; height: 8px; border-radius: 50%;
|
|
296
313
|
background: var(--fg-3); flex: 0 0 auto;
|
|
297
314
|
}
|
|
315
|
+
/* Each variant carries a non-colour channel (fill vs halo vs hollow ring) so the
|
|
316
|
+
states stay distinguishable for colour-blind users and when stale/connecting
|
|
317
|
+
would otherwise share a hue. Mirrors the rail-tone shape differentiation. */
|
|
298
318
|
.status-dot-disc.status-dot-live { background: var(--accent); animation: status-disc-pulse 1.8s ease-in-out infinite; }
|
|
299
|
-
.status-dot-disc.status-dot-error { background: var(--flame); }
|
|
300
|
-
.status-dot-disc.status-dot-connecting { background: var(--amber); }
|
|
301
|
-
.status-dot-disc.status-dot-stale { background: var(--
|
|
319
|
+
.status-dot-disc.status-dot-error { background: var(--flame); box-shadow: 0 0 0 1.5px color-mix(in oklab, var(--flame) 38%, transparent); }
|
|
320
|
+
.status-dot-disc.status-dot-connecting { background: transparent; box-shadow: inset 0 0 0 2px var(--amber); }
|
|
321
|
+
.status-dot-disc.status-dot-stale { background: color-mix(in oklab, var(--warn) 70%, var(--fg-3)); }
|
|
302
322
|
@keyframes status-disc-pulse {
|
|
303
323
|
0%, 100% { box-shadow: 0 0 0 0 color-mix(in oklab, var(--accent) 55%, transparent); }
|
|
304
324
|
50% { box-shadow: 0 0 0 4px color-mix(in oklab, var(--accent) 0%, transparent); }
|
|
305
325
|
}
|
|
306
326
|
@media (prefers-reduced-motion: reduce) {
|
|
307
|
-
|
|
327
|
+
/* Keep the live disc shape-differentiated without motion: a static concentric ring. */
|
|
328
|
+
.status-dot-disc.status-dot-live { animation: none; box-shadow: 0 0 0 2px color-mix(in oklab, var(--accent) 35%, transparent); }
|
|
308
329
|
}
|
|
309
330
|
|
|
310
331
|
/* ----------------------------------------------------------------------------
|
|
@@ -367,7 +388,9 @@
|
|
|
367
388
|
.ds-session-sub { font-size: var(--fs-tiny); color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
368
389
|
.ds-session-meta { display: flex; align-items: center; gap: var(--space-2); flex: 0 0 auto; }
|
|
369
390
|
.ds-session-agent { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3); }
|
|
370
|
-
|
|
391
|
+
/* New-activity cue is a hollow accent RING so it stays shape-distinct from the
|
|
392
|
+
running live disc (a solid pulsing accent dot) for colour-blind / reduced-motion users. */
|
|
393
|
+
.ds-session-unread { width: 8px; height: 8px; border-radius: 50%; background: transparent; box-shadow: inset 0 0 0 2px var(--accent); display: inline-block; }
|
|
371
394
|
.ds-session-state { padding: var(--space-5) var(--space-3); text-align: center; color: var(--fg-3); font-size: var(--fs-sm); }
|
|
372
395
|
.ds-session-state-error { color: var(--flame); }
|
|
373
396
|
|
|
@@ -397,13 +420,15 @@
|
|
|
397
420
|
.ds-dash-card.is-error { border-color: var(--flame); }
|
|
398
421
|
.ds-dash-card-head { display: flex; align-items: center; gap: var(--space-2); }
|
|
399
422
|
.ds-dash-status { font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: .03em; }
|
|
400
|
-
|
|
423
|
+
/* running tone unified on --accent (the later is-running rule + the live disc all
|
|
424
|
+
use --accent); the dead var(--green) duplicate that lived here was removed. */
|
|
401
425
|
.ds-dash-status.is-error { color: var(--flame); }
|
|
402
426
|
.ds-dash-agent { font-size: var(--fs-body); font-weight: 600; color: var(--fg); }
|
|
403
427
|
.ds-dash-model { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3); margin-left: auto; }
|
|
404
428
|
.ds-dash-meta { display: flex; flex-direction: column; gap: 2px; }
|
|
405
429
|
.ds-dash-cwd { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
406
430
|
.ds-dash-stat { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-2); }
|
|
431
|
+
.ds-dash-stat-cost { color: var(--fg); font-weight: 600; }
|
|
407
432
|
.ds-dash-activity { font-size: var(--fs-tiny); color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
408
433
|
.ds-dash-actions { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-top: var(--space-1); }
|
|
409
434
|
.ds-dash-state { padding: var(--space-6) var(--space-4); text-align: center; color: var(--fg-3); font-size: var(--fs-body); }
|
|
@@ -450,6 +475,13 @@
|
|
|
450
475
|
/* --- B1: streaming pre shell — monospaced bubble while a fenced block streams,
|
|
451
476
|
so it does not reflow prose->block on settle. --- */
|
|
452
477
|
.chat-stream-pre pre { margin: 0; white-space: pre-wrap; word-break: break-word; font-family: var(--ff-mono); font-size: var(--fs-sm); }
|
|
478
|
+
/* Persistent minimal chrome so a fenced block does not pop a border + lang tab +
|
|
479
|
+
copy button only on settle - the streaming slab already reads as a code block. */
|
|
480
|
+
.chat-stream-pre { position: relative; }
|
|
481
|
+
.chat-stream-pre pre {
|
|
482
|
+
border: var(--bw-hair) solid var(--rule); border-radius: var(--r-1);
|
|
483
|
+
padding: var(--space-3); background: color-mix(in oklab, var(--fg) 4%, transparent);
|
|
484
|
+
}
|
|
453
485
|
|
|
454
486
|
/* --- A5: composer context line (agent / model / cwd at point of typing). --- */
|
|
455
487
|
.chat-composer-context {
|
|
@@ -466,6 +498,15 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
|
|
|
466
498
|
bottom-right of the flex-end composer (was unstyled, so the send button
|
|
467
499
|
could wrap below the textarea instead of anchoring like claude.ai/code). */
|
|
468
500
|
.chat-composer-toolbar { display: flex; align-items: center; gap: var(--space-1); flex: 0 0 auto; margin-left: auto; align-self: flex-end; }
|
|
501
|
+
/* Unify the toolbar cluster on one 32px / --r-1 square metric (the round 40px
|
|
502
|
+
ghost buttons + 36px square send read as two button systems; the kit moved
|
|
503
|
+
.btn* off --r-pill). chat.css loads after app-shell.css so this wins by order. */
|
|
504
|
+
.chat-composer-toolbar .composer-btn,
|
|
505
|
+
.chat-composer-toolbar .send { width: 32px; height: 32px; border-radius: var(--r-1); }
|
|
506
|
+
@media (pointer: coarse) {
|
|
507
|
+
.chat-composer-toolbar .composer-btn,
|
|
508
|
+
.chat-composer-toolbar .send { width: 44px; height: 44px; }
|
|
509
|
+
}
|
|
469
510
|
|
|
470
511
|
/* --- B2: follow-up chips below the last settled assistant turn. --- */
|
|
471
512
|
.agentchat-followups { display: flex; flex-wrap: wrap; gap: var(--space-2); padding: var(--space-2) var(--space-3); }
|
|
@@ -704,6 +745,25 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
|
|
|
704
745
|
.chat-msg-flat.you .chat-role { color: var(--accent); }
|
|
705
746
|
.chat-msg-flat .chat-bubble { background: none; border: none; border-radius: 0; padding: 0; max-width: 100%; box-shadow: none; transform: none; }
|
|
706
747
|
.chat-msg-flat.you .chat-bubble { background: none; color: inherit; }
|
|
748
|
+
/* Flat turns strip the bubble padding, so the role label sat 4px above the first
|
|
749
|
+
paragraph and the .them tint hugged text flush. Restore reading rhythm + give
|
|
750
|
+
the tinted assistant row inner breathing room so it reads as a card. */
|
|
751
|
+
.chat-msg-flat .chat-role { margin-bottom: var(--space-2); }
|
|
752
|
+
.chat-msg-flat .chat-md { line-height: 1.65; }
|
|
753
|
+
.chat-msg-flat .chat-md p { margin: 8px 0; }
|
|
754
|
+
.chat-msg-flat.them { padding-block: calc(var(--space-3) * var(--density, 1) + 2px); }
|
|
755
|
+
/* Inline backtick code (renderInline tags <code class=chat-tick>) - was a dead
|
|
756
|
+
class relying on the generic .chat-bubble code rule, so notices / non-bubble
|
|
757
|
+
surfaces got unstyled monospace. Self-style it regardless of container. */
|
|
758
|
+
.chat-tick { font-family: var(--ff-mono); font-size: .92em; background: color-mix(in oklab, var(--fg) 10%, transparent); padding: 1px 6px; border-radius: var(--r-1); }
|
|
759
|
+
/* Structured tool/code output earns more width than running prose (claude.ai/code
|
|
760
|
+
lets diffs/tables break out wider than the reading measure). A flat turn that
|
|
761
|
+
contains a tool card or code block widens itself AND its stack past --measure;
|
|
762
|
+
prose-only turns stay clamped. */
|
|
763
|
+
.chat-msg-flat:has(.chat-tool),
|
|
764
|
+
.chat-msg-flat:has(.chat-bubble.chat-code) { max-width: calc(var(--measure) + 14ch); }
|
|
765
|
+
.chat-msg-flat:has(.chat-tool) .chat-stack,
|
|
766
|
+
.chat-msg-flat:has(.chat-bubble.chat-code) .chat-stack { max-width: calc(var(--measure) + 14ch); }
|
|
707
767
|
/* Hover tint exceeds each role's REST tint so the row gives feedback (and the
|
|
708
768
|
ladder stays monotonic): assistant 5% > its 3% rest; user 4% > transparent. */
|
|
709
769
|
.chat-msg-flat.them:hover { background: color-mix(in oklab, var(--fg) 5%, transparent); }
|
|
@@ -791,9 +851,9 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
|
|
|
791
851
|
.ds-dash-group { display: flex; flex-direction: column; gap: var(--space-2); }
|
|
792
852
|
.ds-dash-group-label { font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: var(--tr-caps); color: var(--fg-3); padding: 0 var(--space-1); }
|
|
793
853
|
.ds-dash-breakdown { display: flex; align-items: center; gap: var(--space-1); font-size: var(--fs-sm); color: var(--fg-2); }
|
|
794
|
-
.ds-dash-breakdown .seg.is-running { color: var(--
|
|
854
|
+
.ds-dash-breakdown .seg.is-running { color: var(--accent); font-weight: 600; }
|
|
795
855
|
.ds-dash-breakdown .seg.is-error { color: var(--flame); font-weight: 600; }
|
|
796
|
-
.ds-dash-breakdown .seg.is-idle { color: var(--amber); }
|
|
856
|
+
.ds-dash-breakdown .seg.is-idle { color: var(--amber); font-weight: 600; }
|
|
797
857
|
.ds-dash-stream-disc { display: inline-flex; align-items: center; gap: var(--space-1); }
|
|
798
858
|
.ds-dash-selectall { display: inline-flex; align-items: center; gap: var(--space-1); font-size: var(--fs-tiny); color: var(--fg-2); cursor: pointer; background: none; border: none; padding: var(--space-1); }
|
|
799
859
|
.ds-dash-selectall:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
package/community.css
CHANGED
|
@@ -1166,7 +1166,11 @@
|
|
|
1166
1166
|
.cm-vs-btn,
|
|
1167
1167
|
.cm-user-btn,
|
|
1168
1168
|
.cm-ch-spinner,
|
|
1169
|
-
.cm-ch-voice-badge
|
|
1169
|
+
.cm-ch-voice-badge,
|
|
1170
|
+
.vx-ptt,
|
|
1171
|
+
.vx-ptt-glow,
|
|
1172
|
+
.vx-vad-meter,
|
|
1173
|
+
.vx-vad-fill {
|
|
1170
1174
|
transition: none !important;
|
|
1171
1175
|
animation: none !important;
|
|
1172
1176
|
}
|
package/dist/247420.css
CHANGED
|
@@ -1580,12 +1580,14 @@
|
|
|
1580
1580
|
.ds-247420 .ds-file-listing { display: flex; flex-direction: column; gap: var(--space-2); min-height: 0; }
|
|
1581
1581
|
/* The quick filter is a compact control, not a full-width form row - a giant
|
|
1582
1582
|
input above the grid reads as a search page and costs fold height. */
|
|
1583
|
-
|
|
1583
|
+
/* The filter is now an inline item in the single .ds-file-controls toolbar row
|
|
1584
|
+
(the standalone right-aligned .ds-file-filter strip was removed). */
|
|
1584
1585
|
.ds-247420 .ds-file-filter-input {
|
|
1585
1586
|
width: min(280px, 100%); padding: 6px 12px; font-size: var(--fs-sm);
|
|
1586
1587
|
background: var(--bg); color: var(--fg);
|
|
1587
1588
|
border: var(--bw-hair) solid var(--rule); border-radius: var(--r-1);
|
|
1588
1589
|
}
|
|
1590
|
+
.ds-247420 .ds-file-controls .ds-file-filter-input { flex: 0 1 220px; }
|
|
1589
1591
|
.ds-247420 .ds-file-filter-input:focus-visible { outline: none; box-shadow: var(--focus-ring-inset); }
|
|
1590
1592
|
.ds-247420 .ds-file-sort { display: flex; gap: var(--space-2); padding: 0 var(--space-2) var(--space-1); }
|
|
1591
1593
|
.ds-247420 .ds-file-sort-btn {
|
|
@@ -1715,7 +1717,7 @@
|
|
|
1715
1717
|
role=checkbox/aria-checked name+state. */
|
|
1716
1718
|
.ds-247420 .ds-check-box {
|
|
1717
1719
|
width: 15px; height: 15px; box-sizing: border-box; flex: 0 0 auto; position: relative;
|
|
1718
|
-
border: 1.5px solid var(--
|
|
1720
|
+
border: 1.5px solid var(--fg-3); border-radius: 4px;
|
|
1719
1721
|
transition: background var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease);
|
|
1720
1722
|
}
|
|
1721
1723
|
.ds-247420 .is-marked > .ds-check-box,
|
|
@@ -1727,14 +1729,14 @@
|
|
|
1727
1729
|
}
|
|
1728
1730
|
.ds-247420[aria-checked="mixed"] > .ds-check-box { background: var(--accent); border-color: var(--accent); }
|
|
1729
1731
|
.ds-247420[aria-checked="mixed"] > .ds-check-box::after {
|
|
1730
|
-
content: ""; position: absolute; left:
|
|
1732
|
+
content: ""; position: absolute; left: 3px; right: 3px; top: 6px; height: 2px; background: var(--bg); border-radius: 1px;
|
|
1731
1733
|
}
|
|
1732
1734
|
|
|
1733
1735
|
.ds-247420 .ds-file-check {
|
|
1734
1736
|
display: inline-flex; align-items: center; justify-content: center;
|
|
1735
1737
|
min-width: 28px; height: 28px; padding: 0 4px;
|
|
1736
1738
|
background: transparent; border: 0; border-radius: var(--r-1);
|
|
1737
|
-
|
|
1739
|
+
color: var(--fg-3);
|
|
1738
1740
|
cursor: pointer;
|
|
1739
1741
|
transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
|
|
1740
1742
|
}
|
|
@@ -1825,6 +1827,16 @@
|
|
|
1825
1827
|
}
|
|
1826
1828
|
.ds-247420 .ds-file-cell-media .ds-file-icon { width: 34px; height: 34px; font-size: 24px; }
|
|
1827
1829
|
.ds-247420 .ds-file-cell-thumb { width: 100%; height: 100%; object-fit: cover; }
|
|
1830
|
+
/* Per-type icon tints on thumb tiles so the grid keeps the colour-coding the
|
|
1831
|
+
list rows already carry (mirrors .ds-file-row[data-file-type] .ds-file-icon). */
|
|
1832
|
+
.ds-247420 .ds-file-cell[data-file-type="dir"] .ds-file-icon { color: var(--accent); }
|
|
1833
|
+
.ds-247420 .ds-file-cell[data-file-type="image"] .ds-file-icon { color: var(--mascot); }
|
|
1834
|
+
.ds-247420 .ds-file-cell[data-file-type="video"] .ds-file-icon { color: var(--purple-2); }
|
|
1835
|
+
.ds-247420 .ds-file-cell[data-file-type="audio"] .ds-file-icon { color: var(--sky); }
|
|
1836
|
+
.ds-247420 .ds-file-cell[data-file-type="code"] .ds-file-icon { color: var(--green-2); }
|
|
1837
|
+
.ds-247420 .ds-file-cell[data-file-type="archive"] .ds-file-icon { color: var(--flame); }
|
|
1838
|
+
.ds-247420 .ds-file-cell[data-file-type="document"] .ds-file-icon { color: var(--amber); }
|
|
1839
|
+
.ds-247420 .ds-file-cell[data-file-type="symlink"] .ds-file-icon { color: var(--purple); }
|
|
1828
1840
|
.ds-247420 .ds-file-cell-name {
|
|
1829
1841
|
font-size: var(--fs-tiny); text-align: left;
|
|
1830
1842
|
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
@@ -1835,13 +1847,6 @@
|
|
|
1835
1847
|
background: color-mix(in oklab, var(--bg) 78%, transparent);
|
|
1836
1848
|
}
|
|
1837
1849
|
|
|
1838
|
-
/* Card mode — opt-in via data-columns; switches the list to a grid. */
|
|
1839
|
-
.ds-247420 .ds-file-grid[data-columns] { display: grid; gap: var(--space-3); }
|
|
1840
|
-
.ds-247420 .ds-file-grid[data-columns="1"] { grid-template-columns: 1fr; }
|
|
1841
|
-
.ds-247420 .ds-file-grid[data-columns="2"] { grid-template-columns: repeat(2, 1fr); }
|
|
1842
|
-
.ds-247420 .ds-file-grid[data-columns="3"] { grid-template-columns: repeat(3, 1fr); }
|
|
1843
|
-
.ds-247420 .ds-file-grid[data-columns="4"] { grid-template-columns: repeat(4, 1fr); }
|
|
1844
|
-
|
|
1845
1850
|
/* ============================================================
|
|
1846
1851
|
File browser surface — stage, toolbar, breadcrumb, dropzone,
|
|
1847
1852
|
upload progress, empty state, modals, preview. Authored for
|
|
@@ -2165,21 +2170,12 @@
|
|
|
2165
2170
|
}
|
|
2166
2171
|
.ds-247420 .ds-filter-input:focus-visible { outline: none; box-shadow: var(--focus-ring-inset); }
|
|
2167
2172
|
|
|
2168
|
-
/* Loading skeleton
|
|
2169
|
-
|
|
2170
|
-
.ds-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
background-size: 200% 100%;
|
|
2175
|
-
}
|
|
2176
|
-
@media (prefers-reduced-motion: no-preference) {
|
|
2177
|
-
.ds-247420 .ds-file-skeleton { animation: ds-skeleton-shimmer 1.2s var(--ease) infinite; }
|
|
2178
|
-
}
|
|
2179
|
-
@keyframes ds-skeleton-shimmer {
|
|
2180
|
-
0% { background-position: 200% 0; }
|
|
2181
|
-
100% { background-position: -200% 0; }
|
|
2182
|
-
}
|
|
2173
|
+
/* Loading skeleton: FileSkeleton renders `.ds-file-grid.ds-file-skeleton` with
|
|
2174
|
+
`.ds-file-row.ds-file-row-skeleton` rows whose inner `.ds-skel` children shimmer
|
|
2175
|
+
(via .ds-skel::after). The container therefore inherits the .ds-file-grid layout
|
|
2176
|
+
and must NOT be a single 48px gradient bar (that collapsed every row and double-
|
|
2177
|
+
shimmered). The dead .ds-file-grid-loading rule + unused ds-skeleton-shimmer
|
|
2178
|
+
keyframe were removed; only the inner .ds-skel children animate. */
|
|
2183
2179
|
|
|
2184
2180
|
/* Drag-to-move drop target highlight on a directory row. */
|
|
2185
2181
|
.ds-247420 .ds-file-row.ds-drop-target {
|
|
@@ -2388,6 +2384,13 @@
|
|
|
2388
2384
|
padding: 10px 12px; border-radius: 6px; overflow-x: auto;
|
|
2389
2385
|
font-family: var(--ff-mono); font-size: 0.9em; margin: 8px 0;
|
|
2390
2386
|
}
|
|
2387
|
+
/* Markdown tables + horizontal rules: agents routinely emit them, but they were
|
|
2388
|
+
unstyled (bare unspaced cells, vanished rules). */
|
|
2389
|
+
.ds-247420 .chat-bubble.chat-md table { border-collapse: collapse; width: auto; max-width: 100%; margin: 8px 0; font-size: .95em; display: block; overflow-x: auto; }
|
|
2390
|
+
.ds-247420 .chat-bubble.chat-md th,
|
|
2391
|
+
.ds-247420 .chat-bubble.chat-md td { border: var(--bw-hair) solid var(--rule); padding: 4px 10px; text-align: left; }
|
|
2392
|
+
.ds-247420 .chat-bubble.chat-md th { background: color-mix(in oklab, var(--fg) 5%, transparent); font-weight: 600; }
|
|
2393
|
+
.ds-247420 .chat-bubble.chat-md hr { border: 0; border-top: var(--bw-hair) solid var(--rule); margin: 12px 0; }
|
|
2391
2394
|
|
|
2392
2395
|
.ds-247420 .chat-msg .chat-bubble.chat-code,
|
|
2393
2396
|
.ds-247420 .chat-msg.you .chat-bubble.chat-code,
|
|
@@ -3525,6 +3528,15 @@
|
|
|
3525
3528
|
.ds-247420 .ws-resizer.ws-resizer-rail { grid-column: 1; }
|
|
3526
3529
|
.ds-247420 .ws-resizer.ws-resizer-sessions { grid-column: 2; }
|
|
3527
3530
|
.ds-247420 .ws-resizer.ws-resizer-pane { grid-column: 3; justify-self: end; }
|
|
3531
|
+
/* A resizer must vanish once its TRACK is removed by the staging media blocks,
|
|
3532
|
+
else dragging it writes a --ws-*-w var that no longer affects the now-fixed
|
|
3533
|
+
drawer (a dead handle). Mirror the 1480 / 1100 / 900 staging exactly. */
|
|
3534
|
+
@media (max-width: 1480px) { .ds-247420 .ws-resizer.ws-resizer-pane { display: none; } }
|
|
3535
|
+
@media (max-width: 1100px) { .ds-247420 .ws-resizer.ws-resizer-sessions { display: none; } }
|
|
3536
|
+
@media (max-width: 900px) { .ds-247420 .ws-resizer { display: none; } }
|
|
3537
|
+
/* Coarse-pointer hit target for hybrid touch laptops above the drawer breakpoint
|
|
3538
|
+
(the 8px sliver is un-grabbable by touch). */
|
|
3539
|
+
@media (pointer: coarse) { .ds-247420 .ws-resizer { width: 16px; margin-right: -8px; } }
|
|
3528
3540
|
/* Ease the rail/pane collapse. Track COUNT stays stable on collapse (only a
|
|
3529
3541
|
width var flips), so grid-template-columns is animatable; reduced-motion
|
|
3530
3542
|
drops it to an instant swap. */
|
|
@@ -4965,7 +4977,11 @@
|
|
|
4965
4977
|
.ds-247420 .cm-vs-btn,
|
|
4966
4978
|
.ds-247420 .cm-user-btn,
|
|
4967
4979
|
.ds-247420 .cm-ch-spinner,
|
|
4968
|
-
.ds-247420 .cm-ch-voice-badge
|
|
4980
|
+
.ds-247420 .cm-ch-voice-badge,
|
|
4981
|
+
.ds-247420 .vx-ptt,
|
|
4982
|
+
.ds-247420 .vx-ptt-glow,
|
|
4983
|
+
.ds-247420 .vx-vad-meter,
|
|
4984
|
+
.ds-247420 .vx-vad-fill {
|
|
4969
4985
|
transition: none !important;
|
|
4970
4986
|
animation: none !important;
|
|
4971
4987
|
}
|
|
@@ -5595,6 +5611,23 @@
|
|
|
5595
5611
|
@media (prefers-reduced-motion: reduce) {
|
|
5596
5612
|
.ds-247420 .agentchat-working .chat-thinking-dots span { animation: none; opacity: .7; }
|
|
5597
5613
|
}
|
|
5614
|
+
/* Standalone thinking part (ThinkingNode renders .chat-bubble.chat-thinking with
|
|
5615
|
+
.chat-thinking-dots + .chat-thinking-text OUTSIDE the .agentchat-working tail).
|
|
5616
|
+
Without these base rules the dots are invisible empty spans and the text has
|
|
5617
|
+
no muted tone. Reuse the agentchat-dot-bounce keyframe. */
|
|
5618
|
+
.ds-247420 .chat-thinking { display: flex; align-items: center; gap: .5em; color: var(--fg-3); font-size: var(--fs-tiny); background: none; padding: .3em .2em; }
|
|
5619
|
+
.ds-247420 .chat-thinking-text { color: var(--fg-3); }
|
|
5620
|
+
.ds-247420 .chat-thinking-dots { display: inline-flex; gap: 3px; }
|
|
5621
|
+
.ds-247420 .chat-thinking-dots span {
|
|
5622
|
+
width: 5px; height: 5px; border-radius: 50%;
|
|
5623
|
+
background: var(--fg); opacity: .4;
|
|
5624
|
+
animation: agentchat-dot-bounce 1.2s infinite ease-in-out;
|
|
5625
|
+
}
|
|
5626
|
+
.ds-247420 .chat-thinking-dots span:nth-child(2) { animation-delay: .15s; }
|
|
5627
|
+
.ds-247420 .chat-thinking-dots span:nth-child(3) { animation-delay: .3s; }
|
|
5628
|
+
@media (prefers-reduced-motion: reduce) {
|
|
5629
|
+
.ds-247420 .chat-thinking-dots span { animation: none; opacity: .7; }
|
|
5630
|
+
}
|
|
5598
5631
|
|
|
5599
5632
|
/* Responsive: the control cluster + cwd bar must stay usable on phones/tablets.
|
|
5600
5633
|
The cwd path can't eat the row beside its label + buttons on a narrow screen. */
|
|
@@ -5622,16 +5655,20 @@
|
|
|
5622
5655
|
display: inline-block; width: 8px; height: 8px; border-radius: 50%;
|
|
5623
5656
|
background: var(--fg-3); flex: 0 0 auto;
|
|
5624
5657
|
}
|
|
5658
|
+
/* Each variant carries a non-colour channel (fill vs halo vs hollow ring) so the
|
|
5659
|
+
states stay distinguishable for colour-blind users and when stale/connecting
|
|
5660
|
+
would otherwise share a hue. Mirrors the rail-tone shape differentiation. */
|
|
5625
5661
|
.ds-247420 .status-dot-disc.status-dot-live { background: var(--accent); animation: status-disc-pulse 1.8s ease-in-out infinite; }
|
|
5626
|
-
.ds-247420 .status-dot-disc.status-dot-error { background: var(--flame); }
|
|
5627
|
-
.ds-247420 .status-dot-disc.status-dot-connecting { background: var(--amber); }
|
|
5628
|
-
.ds-247420 .status-dot-disc.status-dot-stale { background: var(--
|
|
5662
|
+
.ds-247420 .status-dot-disc.status-dot-error { background: var(--flame); box-shadow: 0 0 0 1.5px color-mix(in oklab, var(--flame) 38%, transparent); }
|
|
5663
|
+
.ds-247420 .status-dot-disc.status-dot-connecting { background: transparent; box-shadow: inset 0 0 0 2px var(--amber); }
|
|
5664
|
+
.ds-247420 .status-dot-disc.status-dot-stale { background: color-mix(in oklab, var(--warn) 70%, var(--fg-3)); }
|
|
5629
5665
|
@keyframes status-disc-pulse {
|
|
5630
5666
|
0%, 100% { box-shadow: 0 0 0 0 color-mix(in oklab, var(--accent) 55%, transparent); }
|
|
5631
5667
|
50% { box-shadow: 0 0 0 4px color-mix(in oklab, var(--accent) 0%, transparent); }
|
|
5632
5668
|
}
|
|
5633
5669
|
@media (prefers-reduced-motion: reduce) {
|
|
5634
|
-
|
|
5670
|
+
/* Keep the live disc shape-differentiated without motion: a static concentric ring. */
|
|
5671
|
+
.ds-247420 .status-dot-disc.status-dot-live { animation: none; box-shadow: 0 0 0 2px color-mix(in oklab, var(--accent) 35%, transparent); }
|
|
5635
5672
|
}
|
|
5636
5673
|
|
|
5637
5674
|
/* ----------------------------------------------------------------------------
|
|
@@ -5694,7 +5731,9 @@
|
|
|
5694
5731
|
.ds-247420 .ds-session-sub { font-size: var(--fs-tiny); color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
5695
5732
|
.ds-247420 .ds-session-meta { display: flex; align-items: center; gap: var(--space-2); flex: 0 0 auto; }
|
|
5696
5733
|
.ds-247420 .ds-session-agent { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3); }
|
|
5697
|
-
|
|
5734
|
+
/* New-activity cue is a hollow accent RING so it stays shape-distinct from the
|
|
5735
|
+
running live disc (a solid pulsing accent dot) for colour-blind / reduced-motion users. */
|
|
5736
|
+
.ds-247420 .ds-session-unread { width: 8px; height: 8px; border-radius: 50%; background: transparent; box-shadow: inset 0 0 0 2px var(--accent); display: inline-block; }
|
|
5698
5737
|
.ds-247420 .ds-session-state { padding: var(--space-5) var(--space-3); text-align: center; color: var(--fg-3); font-size: var(--fs-sm); }
|
|
5699
5738
|
.ds-247420 .ds-session-state-error { color: var(--flame); }
|
|
5700
5739
|
|
|
@@ -5724,13 +5763,15 @@
|
|
|
5724
5763
|
.ds-247420 .ds-dash-card.is-error { border-color: var(--flame); }
|
|
5725
5764
|
.ds-247420 .ds-dash-card-head { display: flex; align-items: center; gap: var(--space-2); }
|
|
5726
5765
|
.ds-247420 .ds-dash-status { font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: .03em; }
|
|
5727
|
-
|
|
5766
|
+
/* running tone unified on --accent (the later is-running rule + the live disc all
|
|
5767
|
+
use --accent); the dead var(--green) duplicate that lived here was removed. */
|
|
5728
5768
|
.ds-247420 .ds-dash-status.is-error { color: var(--flame); }
|
|
5729
5769
|
.ds-247420 .ds-dash-agent { font-size: var(--fs-body); font-weight: 600; color: var(--fg); }
|
|
5730
5770
|
.ds-247420 .ds-dash-model { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3); margin-left: auto; }
|
|
5731
5771
|
.ds-247420 .ds-dash-meta { display: flex; flex-direction: column; gap: 2px; }
|
|
5732
5772
|
.ds-247420 .ds-dash-cwd { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
5733
5773
|
.ds-247420 .ds-dash-stat { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-2); }
|
|
5774
|
+
.ds-247420 .ds-dash-stat-cost { color: var(--fg); font-weight: 600; }
|
|
5734
5775
|
.ds-247420 .ds-dash-activity { font-size: var(--fs-tiny); color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
5735
5776
|
.ds-247420 .ds-dash-actions { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-top: var(--space-1); }
|
|
5736
5777
|
.ds-247420 .ds-dash-state { padding: var(--space-6) var(--space-4); text-align: center; color: var(--fg-3); font-size: var(--fs-body); }
|
|
@@ -5777,6 +5818,13 @@
|
|
|
5777
5818
|
/* --- B1: streaming pre shell — monospaced bubble while a fenced block streams,
|
|
5778
5819
|
so it does not reflow prose->block on settle. --- */
|
|
5779
5820
|
.ds-247420 .chat-stream-pre pre { margin: 0; white-space: pre-wrap; word-break: break-word; font-family: var(--ff-mono); font-size: var(--fs-sm); }
|
|
5821
|
+
/* Persistent minimal chrome so a fenced block does not pop a border + lang tab +
|
|
5822
|
+
copy button only on settle - the streaming slab already reads as a code block. */
|
|
5823
|
+
.ds-247420 .chat-stream-pre { position: relative; }
|
|
5824
|
+
.ds-247420 .chat-stream-pre pre {
|
|
5825
|
+
border: var(--bw-hair) solid var(--rule); border-radius: var(--r-1);
|
|
5826
|
+
padding: var(--space-3); background: color-mix(in oklab, var(--fg) 4%, transparent);
|
|
5827
|
+
}
|
|
5780
5828
|
|
|
5781
5829
|
/* --- A5: composer context line (agent / model / cwd at point of typing). --- */
|
|
5782
5830
|
.ds-247420 .chat-composer-context {
|
|
@@ -5793,6 +5841,15 @@
|
|
|
5793
5841
|
bottom-right of the flex-end composer (was unstyled, so the send button
|
|
5794
5842
|
could wrap below the textarea instead of anchoring like claude.ai/code). */
|
|
5795
5843
|
.ds-247420 .chat-composer-toolbar { display: flex; align-items: center; gap: var(--space-1); flex: 0 0 auto; margin-left: auto; align-self: flex-end; }
|
|
5844
|
+
/* Unify the toolbar cluster on one 32px / --r-1 square metric (the round 40px
|
|
5845
|
+
ghost buttons + 36px square send read as two button systems; the kit moved
|
|
5846
|
+
.btn* off --r-pill). chat.css loads after app-shell.css so this wins by order. */
|
|
5847
|
+
.ds-247420 .chat-composer-toolbar .composer-btn,
|
|
5848
|
+
.ds-247420 .chat-composer-toolbar .send { width: 32px; height: 32px; border-radius: var(--r-1); }
|
|
5849
|
+
@media (pointer: coarse) {
|
|
5850
|
+
.ds-247420 .chat-composer-toolbar .composer-btn,
|
|
5851
|
+
.ds-247420 .chat-composer-toolbar .send { width: 44px; height: 44px; }
|
|
5852
|
+
}
|
|
5796
5853
|
|
|
5797
5854
|
/* --- B2: follow-up chips below the last settled assistant turn. --- */
|
|
5798
5855
|
.ds-247420 .agentchat-followups { display: flex; flex-wrap: wrap; gap: var(--space-2); padding: var(--space-2) var(--space-3); }
|
|
@@ -6031,6 +6088,25 @@
|
|
|
6031
6088
|
.ds-247420 .chat-msg-flat.you .chat-role { color: var(--accent); }
|
|
6032
6089
|
.ds-247420 .chat-msg-flat .chat-bubble { background: none; border: none; border-radius: 0; padding: 0; max-width: 100%; box-shadow: none; transform: none; }
|
|
6033
6090
|
.ds-247420 .chat-msg-flat.you .chat-bubble { background: none; color: inherit; }
|
|
6091
|
+
/* Flat turns strip the bubble padding, so the role label sat 4px above the first
|
|
6092
|
+
paragraph and the .them tint hugged text flush. Restore reading rhythm + give
|
|
6093
|
+
the tinted assistant row inner breathing room so it reads as a card. */
|
|
6094
|
+
.ds-247420 .chat-msg-flat .chat-role { margin-bottom: var(--space-2); }
|
|
6095
|
+
.ds-247420 .chat-msg-flat .chat-md { line-height: 1.65; }
|
|
6096
|
+
.ds-247420 .chat-msg-flat .chat-md p { margin: 8px 0; }
|
|
6097
|
+
.ds-247420 .chat-msg-flat.them { padding-block: calc(var(--space-3) * var(--density, 1) + 2px); }
|
|
6098
|
+
/* Inline backtick code (renderInline tags <code class=chat-tick>) - was a dead
|
|
6099
|
+
class relying on the generic .chat-bubble code rule, so notices / non-bubble
|
|
6100
|
+
surfaces got unstyled monospace. Self-style it regardless of container. */
|
|
6101
|
+
.ds-247420 .chat-tick { font-family: var(--ff-mono); font-size: .92em; background: color-mix(in oklab, var(--fg) 10%, transparent); padding: 1px 6px; border-radius: var(--r-1); }
|
|
6102
|
+
/* Structured tool/code output earns more width than running prose (claude.ai/code
|
|
6103
|
+
lets diffs/tables break out wider than the reading measure). A flat turn that
|
|
6104
|
+
contains a tool card or code block widens itself AND its stack past --measure;
|
|
6105
|
+
prose-only turns stay clamped. */
|
|
6106
|
+
.ds-247420 .chat-msg-flat:has(.chat-tool),
|
|
6107
|
+
.ds-247420 .chat-msg-flat:has(.chat-bubble.chat-code) { max-width: calc(var(--measure) + 14ch); }
|
|
6108
|
+
.ds-247420 .chat-msg-flat:has(.chat-tool) .chat-stack,
|
|
6109
|
+
.ds-247420 .chat-msg-flat:has(.chat-bubble.chat-code) .chat-stack { max-width: calc(var(--measure) + 14ch); }
|
|
6034
6110
|
/* Hover tint exceeds each role's REST tint so the row gives feedback (and the
|
|
6035
6111
|
ladder stays monotonic): assistant 5% > its 3% rest; user 4% > transparent. */
|
|
6036
6112
|
.ds-247420 .chat-msg-flat.them:hover { background: color-mix(in oklab, var(--fg) 5%, transparent); }
|
|
@@ -6118,9 +6194,9 @@
|
|
|
6118
6194
|
.ds-247420 .ds-dash-group { display: flex; flex-direction: column; gap: var(--space-2); }
|
|
6119
6195
|
.ds-247420 .ds-dash-group-label { font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: var(--tr-caps); color: var(--fg-3); padding: 0 var(--space-1); }
|
|
6120
6196
|
.ds-247420 .ds-dash-breakdown { display: flex; align-items: center; gap: var(--space-1); font-size: var(--fs-sm); color: var(--fg-2); }
|
|
6121
|
-
.ds-247420 .ds-dash-breakdown .seg.is-running { color: var(--
|
|
6197
|
+
.ds-247420 .ds-dash-breakdown .seg.is-running { color: var(--accent); font-weight: 600; }
|
|
6122
6198
|
.ds-247420 .ds-dash-breakdown .seg.is-error { color: var(--flame); font-weight: 600; }
|
|
6123
|
-
.ds-247420 .ds-dash-breakdown .seg.is-idle { color: var(--amber); }
|
|
6199
|
+
.ds-247420 .ds-dash-breakdown .seg.is-idle { color: var(--amber); font-weight: 600; }
|
|
6124
6200
|
.ds-247420 .ds-dash-stream-disc { display: inline-flex; align-items: center; gap: var(--space-1); }
|
|
6125
6201
|
.ds-247420 .ds-dash-selectall { display: inline-flex; align-items: center; gap: var(--space-1); font-size: var(--fs-tiny); color: var(--fg-2); cursor: pointer; background: none; border: none; padding: var(--space-1); }
|
|
6126
6202
|
.ds-247420 .ds-dash-selectall:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
@@ -6442,7 +6518,7 @@
|
|
|
6442
6518
|
font: var(--fs-tiny, 12px)/1.3 var(--ff-mono, monospace);
|
|
6443
6519
|
min-width: 0;
|
|
6444
6520
|
}
|
|
6445
|
-
.ds-247420 .ds-input-bare:focus { outline: none; border-color: var(--accent); }
|
|
6521
|
+
.ds-247420 .ds-input-bare:focus-visible { outline: none; border-color: var(--accent); box-shadow: var(--focus-ring-inset); }
|
|
6446
6522
|
/* A property field whose control spans the full panel width (label above,
|
|
6447
6523
|
control below) — used for wide segmented controls that would clip in the
|
|
6448
6524
|
narrow value column. */
|
|
@@ -7732,6 +7808,31 @@
|
|
|
7732
7808
|
}
|
|
7733
7809
|
}
|
|
7734
7810
|
|
|
7811
|
+
/* marketing.css */
|
|
7812
|
+
/* marketing.css — landing / docs site surface family (the agentgui flatspace
|
|
7813
|
+
* site renderer composes these instead of carrying inline style= props). Every
|
|
7814
|
+
* selector is written pre-scoped under `.ds-247420` so the build's selector-
|
|
7815
|
+
* prefixer leaves it untouched (consumers mount on <html class="ds-247420">).
|
|
7816
|
+
* All values read kit tokens — no hardcoded hex, no inline design in the app. */
|
|
7817
|
+
|
|
7818
|
+
.ds-247420 .site-panel { margin: var(--space-2); }
|
|
7819
|
+
|
|
7820
|
+
/* Hero block */
|
|
7821
|
+
.ds-247420 .site-hero { padding: 24px 22px; }
|
|
7822
|
+
.ds-247420 .site-hero-h { margin: 0 0 var(--space-2); }
|
|
7823
|
+
.ds-247420 .site-hero-body { margin: var(--space-2) 0 var(--space-3); color: var(--fg-2); max-width: 64ch; }
|
|
7824
|
+
.ds-247420 .site-chip-row { display: flex; gap: 6px; flex-wrap: wrap; margin: 0 0 var(--space-3); }
|
|
7825
|
+
.ds-247420 .site-cta-row { display: flex; gap: var(--space-2); flex-wrap: wrap; }
|
|
7826
|
+
|
|
7827
|
+
/* Quickstart CLI block — these .cli/.prompt/.cmd nodes were previously unstyled. */
|
|
7828
|
+
.ds-247420 .site-cli { padding: 16px 22px; }
|
|
7829
|
+
.ds-247420 .site-cli .cli { display: flex; gap: var(--space-2); font-family: var(--ff-mono); font-size: var(--fs-sm); padding: 2px 0; }
|
|
7830
|
+
.ds-247420 .site-cli .prompt { color: var(--fg-3); user-select: none; flex: 0 0 auto; }
|
|
7831
|
+
.ds-247420 .site-cli .cmd { color: var(--fg); white-space: pre-wrap; word-break: break-word; }
|
|
7832
|
+
|
|
7833
|
+
/* Embedded legacy doc (iframe wrapper) */
|
|
7834
|
+
.ds-247420 .site-embed { width: 100%; height: calc(100vh - 180px); min-height: 520px; border: 0; border-radius: var(--r-1); background: var(--bg-2); display: block; }
|
|
7835
|
+
|
|
7735
7836
|
/* spoint/loading-screen.css */
|
|
7736
7837
|
/* Loading-screen kit styles. Scoped under .ds-247420 at build time.
|
|
7737
7838
|
All colors reference design tokens (no raw literals) per the token-lint gate. */
|