anentrypoint-design 0.0.206 → 0.0.208
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 +124 -12
- package/chat.css +139 -2
- package/dist/247420.css +263 -14
- package/dist/247420.js +15 -13
- package/package.json +1 -1
- package/src/components/agent-chat.js +5 -1
- package/src/components/chat.js +26 -3
- package/src/components/files-modals.js +45 -3
- package/src/components/files.js +164 -29
- package/src/components/sessions.js +131 -50
- package/src/components/shell.js +14 -6
- package/src/components.js +1 -1
package/dist/247420.css
CHANGED
|
@@ -904,10 +904,10 @@
|
|
|
904
904
|
============================================================ */
|
|
905
905
|
.ds-247420 .panel {
|
|
906
906
|
background: var(--panel-1, var(--bg-2));
|
|
907
|
-
border
|
|
907
|
+
border: var(--bw-hair) solid var(--rule);
|
|
908
|
+
border-radius: var(--r-2);
|
|
908
909
|
margin: 0 0 var(--space-5);
|
|
909
910
|
padding: var(--space-3);
|
|
910
|
-
box-shadow: var(--panel-shadow);
|
|
911
911
|
position: relative;
|
|
912
912
|
}
|
|
913
913
|
.ds-247420 .panel.panel-inline { background: var(--bg-2); padding: var(--space-3) var(--space-3); }
|
|
@@ -1296,10 +1296,10 @@
|
|
|
1296
1296
|
gap: 3px;
|
|
1297
1297
|
}
|
|
1298
1298
|
.ds-247420 .ds-file-row {
|
|
1299
|
-
|
|
1300
|
-
gap: 10px; padding: 10px 12px;
|
|
1299
|
+
gap: 8px; padding: 10px 12px;
|
|
1301
1300
|
font-size: var(--fs-xs);
|
|
1302
1301
|
}
|
|
1302
|
+
.ds-247420 .ds-file-open { gap: 10px; }
|
|
1303
1303
|
/* On mobile, fold meta under the title and keep actions inline. */
|
|
1304
1304
|
.ds-247420 .ds-file-row .ds-file-meta { font-size: var(--fs-micro); }
|
|
1305
1305
|
.ds-247420 .ds-file-row .ds-file-actions { opacity: 1; }
|
|
@@ -1307,6 +1307,7 @@
|
|
|
1307
1307
|
reachable by touch (cohesion sweep). */
|
|
1308
1308
|
.ds-247420 .ds-file-act, .ds-247420 .ds-file-sort-btn, .ds-247420 .ds-crumb-seg { min-height: 44px; }
|
|
1309
1309
|
.ds-247420 .ds-file-filter-input { min-height: 44px; }
|
|
1310
|
+
.ds-247420 .ds-file-check, .ds-247420 .ds-file-selectall, .ds-247420 .ds-density-btn { min-height: 44px; min-width: 44px; }
|
|
1310
1311
|
|
|
1311
1312
|
/* Chat */
|
|
1312
1313
|
.ds-247420 .chat-stack { max-width: 100%; min-width: 0; }
|
|
@@ -1533,10 +1534,13 @@
|
|
|
1533
1534
|
@keyframes ds-skel-shimmer { 100% { transform: translateX(100%); } }
|
|
1534
1535
|
@media (prefers-reduced-motion: reduce) { .ds-247420 .ds-skel::after { animation: none; } }
|
|
1535
1536
|
|
|
1536
|
-
/* File row — linear layout (icon · title · meta · actions)
|
|
1537
|
+
/* File row — linear layout (checkbox? · open-button[code · icon · title · meta] · actions).
|
|
1538
|
+
The row is a flex strip; the open <button> is the stretching member and lays
|
|
1539
|
+
out the entry's own columns. It needs a full reset (UA button chrome off)
|
|
1540
|
+
because FileRow wraps the row content in a real button for native keyboard
|
|
1541
|
+
semantics. */
|
|
1537
1542
|
.ds-247420 .ds-file-row {
|
|
1538
|
-
display:
|
|
1539
|
-
gap: 14px; align-items: center;
|
|
1543
|
+
display: flex; align-items: center; gap: 10px;
|
|
1540
1544
|
padding: 11px 16px; background: var(--bg);
|
|
1541
1545
|
border: var(--bw-hair) solid transparent;
|
|
1542
1546
|
border-radius: var(--r-2); color: var(--fg);
|
|
@@ -1545,6 +1549,14 @@
|
|
|
1545
1549
|
border-color var(--dur-snap) var(--ease),
|
|
1546
1550
|
transform var(--dur-snap) var(--ease);
|
|
1547
1551
|
}
|
|
1552
|
+
.ds-247420 .ds-file-open {
|
|
1553
|
+
display: flex; align-items: center; gap: 14px;
|
|
1554
|
+
flex: 1 1 auto; min-width: 0;
|
|
1555
|
+
background: none; border: 0; padding: 0; margin: 0;
|
|
1556
|
+
color: inherit; font: inherit; text-align: left; cursor: pointer;
|
|
1557
|
+
}
|
|
1558
|
+
.ds-247420 .ds-file-open[disabled] { cursor: default; }
|
|
1559
|
+
.ds-247420 .ds-file-open:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: var(--r-1); }
|
|
1548
1560
|
.ds-247420 .ds-file-row:hover {
|
|
1549
1561
|
background: var(--bg-2);
|
|
1550
1562
|
border-color: var(--rule);
|
|
@@ -1566,7 +1578,7 @@
|
|
|
1566
1578
|
.ds-247420 .ds-file-row .title {
|
|
1567
1579
|
font-weight: 500; font-size: var(--fs-sm);
|
|
1568
1580
|
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
1569
|
-
min-width: 0;
|
|
1581
|
+
min-width: 0; flex: 1 1 auto;
|
|
1570
1582
|
}
|
|
1571
1583
|
.ds-247420 .ds-file-row .code {
|
|
1572
1584
|
font-family: var(--ff-mono); font-size: var(--fs-micro);
|
|
@@ -1608,6 +1620,99 @@
|
|
|
1608
1620
|
.ds-247420 .ds-file-act:hover { background: var(--bg-3); color: var(--fg); }
|
|
1609
1621
|
.ds-247420 .ds-file-act-warn:hover { background: color-mix(in oklab, var(--warn) 18%, var(--bg)); color: var(--warn); }
|
|
1610
1622
|
|
|
1623
|
+
/* Multi-select — per-row checkbox, header tri-state, bulk action strip. */
|
|
1624
|
+
.ds-247420 .ds-file-check {
|
|
1625
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
1626
|
+
min-width: 28px; height: 28px; padding: 0 4px;
|
|
1627
|
+
background: transparent; border: 0; border-radius: var(--r-1);
|
|
1628
|
+
font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3);
|
|
1629
|
+
cursor: pointer;
|
|
1630
|
+
transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
|
|
1631
|
+
}
|
|
1632
|
+
.ds-247420 .ds-file-check:hover { background: var(--bg-3); color: var(--fg); }
|
|
1633
|
+
.ds-247420 .ds-file-check.is-marked { color: var(--accent); }
|
|
1634
|
+
.ds-247420 .ds-file-check:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
1635
|
+
.ds-247420 .ds-file-check[disabled] { opacity: 0.4; cursor: default; }
|
|
1636
|
+
.ds-247420 .ds-file-row.is-marked { background: var(--accent-tint); border-color: var(--accent); }
|
|
1637
|
+
.ds-247420 .ds-file-selectall {
|
|
1638
|
+
display: inline-flex; align-items: center; gap: var(--space-1);
|
|
1639
|
+
font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-2);
|
|
1640
|
+
cursor: pointer; background: none; border: none;
|
|
1641
|
+
padding: var(--space-1); border-radius: var(--r-1);
|
|
1642
|
+
}
|
|
1643
|
+
.ds-247420 .ds-file-selectall:hover { background: var(--bg-2); color: var(--fg); }
|
|
1644
|
+
.ds-247420 .ds-file-selectall:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
1645
|
+
.ds-247420 .ds-file-controls { display: flex; align-items: center; gap: var(--space-2); padding: 0 var(--space-2) var(--space-1); flex-wrap: wrap; }
|
|
1646
|
+
.ds-247420 .ds-file-controls .spread { flex: 1 1 auto; }
|
|
1647
|
+
.ds-247420 .ds-file-controls .ds-file-sort { padding: 0; }
|
|
1648
|
+
.ds-247420 .ds-bulkbar {
|
|
1649
|
+
display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap;
|
|
1650
|
+
padding: var(--space-1) var(--space-2);
|
|
1651
|
+
background: var(--bg-2); border: var(--bw-hair) solid var(--rule); border-radius: var(--r-2);
|
|
1652
|
+
}
|
|
1653
|
+
.ds-247420 .ds-bulkbar-count { font-size: var(--fs-tiny); color: var(--fg-2); }
|
|
1654
|
+
|
|
1655
|
+
/* Density picker — list / compact / thumbnails. */
|
|
1656
|
+
.ds-247420 .ds-density {
|
|
1657
|
+
display: inline-flex; gap: 2px; padding: 2px;
|
|
1658
|
+
background: var(--bg-2); border: var(--bw-hair) solid var(--rule); border-radius: var(--r-1);
|
|
1659
|
+
}
|
|
1660
|
+
.ds-247420 .ds-density-btn {
|
|
1661
|
+
font-size: var(--fs-tiny); color: var(--fg-2);
|
|
1662
|
+
background: none; border: none; cursor: pointer;
|
|
1663
|
+
padding: 2px var(--space-2); border-radius: calc(var(--r-1) - 2px);
|
|
1664
|
+
transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
|
|
1665
|
+
}
|
|
1666
|
+
.ds-247420 .ds-density-btn:hover { color: var(--fg); }
|
|
1667
|
+
.ds-247420 .ds-density-btn.active { background: var(--accent-tint); color: var(--accent); }
|
|
1668
|
+
.ds-247420 .ds-density-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
1669
|
+
|
|
1670
|
+
/* Compact density — tighter rows for long listings. */
|
|
1671
|
+
.ds-247420 .ds-file-grid[data-density="compact"] { gap: 2px; }
|
|
1672
|
+
.ds-247420 .ds-file-grid[data-density="compact"] .ds-file-row { padding: 5px 12px; gap: 10px; }
|
|
1673
|
+
.ds-247420 .ds-file-grid[data-density="compact"] .ds-file-row .title { font-size: var(--fs-xs); }
|
|
1674
|
+
.ds-247420 .ds-file-grid[data-density="compact"] .ds-file-row .ds-file-meta { font-size: var(--fs-micro); }
|
|
1675
|
+
.ds-247420 .ds-file-grid[data-density="compact"] .ds-file-icon { width: 20px; height: 20px; font-size: 13px; }
|
|
1676
|
+
|
|
1677
|
+
/* Thumbnail density — tile grid; image entries carry a real lazy thumbnail. */
|
|
1678
|
+
.ds-247420 .ds-file-grid-thumb {
|
|
1679
|
+
display: grid; grid-template-columns: repeat(auto-fill, minmax(132px, 1fr));
|
|
1680
|
+
gap: var(--space-3); align-items: start;
|
|
1681
|
+
}
|
|
1682
|
+
.ds-247420 .ds-file-cell {
|
|
1683
|
+
position: relative;
|
|
1684
|
+
background: var(--bg); border: var(--bw-hair) solid var(--rule); border-radius: var(--r-2);
|
|
1685
|
+
overflow: hidden;
|
|
1686
|
+
transition: border-color var(--dur-snap) var(--ease), background var(--dur-snap) var(--ease);
|
|
1687
|
+
}
|
|
1688
|
+
.ds-247420 .ds-file-cell:hover { border-color: var(--fg-3); }
|
|
1689
|
+
.ds-247420 .ds-file-cell.active { border-color: var(--accent); background: var(--accent-tint); }
|
|
1690
|
+
.ds-247420 .ds-file-cell.is-marked { border-color: var(--accent); background: var(--accent-tint); }
|
|
1691
|
+
.ds-247420 .ds-file-cell.is-locked { opacity: 0.6; }
|
|
1692
|
+
.ds-247420 .ds-file-cell-open {
|
|
1693
|
+
display: flex; flex-direction: column; align-items: stretch; gap: var(--space-1);
|
|
1694
|
+
width: 100%; padding: var(--space-1); margin: 0;
|
|
1695
|
+
background: none; border: none; cursor: pointer; color: var(--fg);
|
|
1696
|
+
}
|
|
1697
|
+
.ds-247420 .ds-file-cell-open[disabled] { cursor: default; }
|
|
1698
|
+
.ds-247420 .ds-file-cell-open:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; border-radius: var(--r-2); }
|
|
1699
|
+
.ds-247420 .ds-file-cell-media {
|
|
1700
|
+
display: flex; align-items: center; justify-content: center;
|
|
1701
|
+
width: 100%; aspect-ratio: 4 / 3;
|
|
1702
|
+
background: var(--bg-2); border-radius: var(--r-1); overflow: hidden;
|
|
1703
|
+
}
|
|
1704
|
+
.ds-247420 .ds-file-cell-media .ds-file-icon { width: 34px; height: 34px; font-size: 24px; }
|
|
1705
|
+
.ds-247420 .ds-file-cell-thumb { width: 100%; height: 100%; object-fit: cover; }
|
|
1706
|
+
.ds-247420 .ds-file-cell-name {
|
|
1707
|
+
font-size: var(--fs-tiny); text-align: left;
|
|
1708
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
1709
|
+
}
|
|
1710
|
+
.ds-247420 .ds-file-cell-meta { font-family: var(--ff-mono); font-size: var(--fs-micro); color: var(--fg-3); text-align: left; }
|
|
1711
|
+
.ds-247420 .ds-file-cell-check {
|
|
1712
|
+
position: absolute; top: 4px; left: 4px; z-index: 1;
|
|
1713
|
+
background: color-mix(in oklab, var(--bg) 78%, transparent);
|
|
1714
|
+
}
|
|
1715
|
+
|
|
1611
1716
|
/* Card mode — opt-in via data-columns; switches the list to a grid. */
|
|
1612
1717
|
.ds-247420 .ds-file-grid[data-columns] { display: grid; gap: var(--space-3); }
|
|
1613
1718
|
.ds-247420 .ds-file-grid[data-columns="1"] { grid-template-columns: 1fr; }
|
|
@@ -1990,7 +2095,7 @@
|
|
|
1990
2095
|
.ds-247420 .ds-segmented .ds-seg-btn:hover { color: var(--fg); }
|
|
1991
2096
|
.ds-247420 .ds-segmented .ds-seg-btn.is-on {
|
|
1992
2097
|
background: var(--bg); color: var(--fg);
|
|
1993
|
-
box-shadow: var(--
|
|
2098
|
+
box-shadow: inset 0 0 0 var(--bw-hair, 1px) var(--rule);
|
|
1994
2099
|
}
|
|
1995
2100
|
.ds-247420 .ds-theme-toggle.btn {
|
|
1996
2101
|
font-family: var(--ff-mono); font-size: var(--fs-xs);
|
|
@@ -2196,7 +2301,6 @@
|
|
|
2196
2301
|
.ds-247420 .chat-msg:hover .chat-image,
|
|
2197
2302
|
.ds-247420 .chat-image:hover {
|
|
2198
2303
|
border-color: color-mix(in oklab, var(--accent) 35%, transparent);
|
|
2199
|
-
box-shadow: 0 4px 16px color-mix(in oklab, var(--fg) 12%, transparent);
|
|
2200
2304
|
}
|
|
2201
2305
|
.ds-247420 .chat-image img { display: block; width: 100%; height: auto; max-height: 360px; object-fit: cover; }
|
|
2202
2306
|
.ds-247420 .chat-image .cap,
|
|
@@ -2237,7 +2341,7 @@
|
|
|
2237
2341
|
border-radius: 12px; overflow: hidden; max-width: min(100%, 480px);
|
|
2238
2342
|
transition: box-shadow 0.12s ease, border-color 0.12s ease;
|
|
2239
2343
|
}
|
|
2240
|
-
.ds-247420 .chat-msg:hover .chat-pdf { border-color: color-mix(in oklab, var(--accent) 30%, transparent);
|
|
2344
|
+
.ds-247420 .chat-msg:hover .chat-pdf { border-color: color-mix(in oklab, var(--accent) 30%, transparent); }
|
|
2241
2345
|
.ds-247420 .chat-pdf-head {
|
|
2242
2346
|
display: flex; align-items: center; gap: 10px; padding: 10px 14px;
|
|
2243
2347
|
background: color-mix(in oklab, var(--fg) 5%, var(--bg-2));
|
|
@@ -2265,7 +2369,6 @@
|
|
|
2265
2369
|
.ds-247420 .chat-link:hover {
|
|
2266
2370
|
background: var(--bg-3);
|
|
2267
2371
|
border-color: color-mix(in oklab, var(--accent) 40%, transparent);
|
|
2268
|
-
box-shadow: 0 2px 12px color-mix(in oklab, var(--fg) 8%, transparent);
|
|
2269
2372
|
}
|
|
2270
2373
|
.ds-247420 .chat-link:not(:has(.thumb)):not(:has(img)) { grid-template-columns: 1fr; }
|
|
2271
2374
|
.ds-247420 .chat-link .thumb,
|
|
@@ -3378,6 +3481,15 @@
|
|
|
3378
3481
|
.ds-247420 .ws-shell.ws-sessions-open .ws-scrim, .ds-247420 .ws-shell.ws-pane-open .ws-scrim { opacity: 1; pointer-events: auto; }
|
|
3379
3482
|
/* The mobile drawer-toggle affordances live in the crumb bar. */
|
|
3380
3483
|
.ds-247420 .ws-drawer-toggle { display: inline-flex; }
|
|
3484
|
+
/* The Crumb's narrow collapse elsewhere keys on the .app @container, which
|
|
3485
|
+
does not exist inside WorkspaceShell - mirror it here so the crumb bar
|
|
3486
|
+
cannot overflow a narrow viewport (trail hides, leaf ellipsizes, the
|
|
3487
|
+
right cluster wraps under instead of pushing past the edge). */
|
|
3488
|
+
.ds-247420 .ws-crumb { padding-top: 6px; padding-bottom: 6px; }
|
|
3489
|
+
.ds-247420 .ws-crumb .app-crumb { flex-wrap: wrap; min-width: 0; }
|
|
3490
|
+
.ds-247420 .ws-crumb .app-crumb > .sep, .ds-247420 .ws-crumb .app-crumb > span:not(.crumb-right):not(.leaf) { display: none; }
|
|
3491
|
+
.ds-247420 .ws-crumb .app-crumb .leaf { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
|
|
3492
|
+
.ds-247420 .ws-crumb .app-crumb .crumb-right { margin-left: 0; flex-wrap: wrap; min-width: 0; display: inline-flex; }
|
|
3381
3493
|
}
|
|
3382
3494
|
/* Drawer toggles are mobile-only chrome; hidden on the desktop grid. */
|
|
3383
3495
|
.ds-247420 .ws-drawer-toggle { display: none; align-items: center; justify-content: center; width: 40px; height: 40px; border: none; background: none; color: var(--fg-2); cursor: pointer; border-radius: var(--r-1); }
|
|
@@ -5422,7 +5534,10 @@
|
|
|
5422
5534
|
/* --- C5: active dashboard card (current conversation). --- */
|
|
5423
5535
|
.ds-247420 .ds-dash-card.is-active { box-shadow: inset 2px 0 0 var(--accent); }
|
|
5424
5536
|
.ds-247420 .ds-dash-card.is-selected { background: var(--accent-tint); }
|
|
5425
|
-
|
|
5537
|
+
/* Stale/idle card: a positive amber inset bar (mirrors is-active) so a stuck
|
|
5538
|
+
agent is flagged in a dense grid, not merely faded near-invisibly. The word
|
|
5539
|
+
'idle' co-carries state, so this stays colour-blind safe. */
|
|
5540
|
+
.ds-247420 .ds-dash-card.is-stale { box-shadow: inset 2px 0 0 var(--amber, #d9a93a); }
|
|
5426
5541
|
|
|
5427
5542
|
/* --- H3: dashboard live disc pulses; stale/error do not (handled by H1). --- */
|
|
5428
5543
|
|
|
@@ -5508,7 +5623,7 @@
|
|
|
5508
5623
|
/* Enter-to-send hint: visible while the composer is focused or carries a
|
|
5509
5624
|
draft; hidden under 420px to save rows. */
|
|
5510
5625
|
.ds-247420 .chat-composer-hint {
|
|
5511
|
-
display: none; padding: 2px var(--space-
|
|
5626
|
+
display: none; width: 100%; order: 5; padding: 2px var(--space-1) 0;
|
|
5512
5627
|
font-size: var(--fs-micro); color: var(--fg-3);
|
|
5513
5628
|
}
|
|
5514
5629
|
.ds-247420 .chat-composer:focus-within .chat-composer-hint,
|
|
@@ -5591,6 +5706,140 @@
|
|
|
5591
5706
|
/* One connection vocabulary: offline (is-lost kept as legacy alias). */
|
|
5592
5707
|
.ds-247420 .ds-dash-stream.is-offline { color: var(--flame); }
|
|
5593
5708
|
|
|
5709
|
+
/* ============================================================
|
|
5710
|
+
10th run - Claude-Code-web design-language parity
|
|
5711
|
+
============================================================ */
|
|
5712
|
+
|
|
5713
|
+
/* Flat full-width chat turns (claude.ai/code), replacing the messenger
|
|
5714
|
+
avatar-disc + colored-bubble layout. AgentChat passes flat:true; the demo
|
|
5715
|
+
Chat keeps the bubble layout. Turns are full-width to --measure; the user vs
|
|
5716
|
+
assistant distinction is a role label + a faint assistant background. */
|
|
5717
|
+
.ds-247420 .chat-msg-flat { display: block; padding: var(--space-3) var(--space-4); margin: 0; background: none; border-radius: var(--r-2); }
|
|
5718
|
+
.ds-247420 .chat-msg-flat.them { background: color-mix(in oklab, var(--fg) 3%, transparent); }
|
|
5719
|
+
.ds-247420 .chat-msg-flat.you { background: none; }
|
|
5720
|
+
.ds-247420 .chat-msg-flat .chat-stack { max-width: var(--measure); width: 100%; margin: 0; align-items: stretch; }
|
|
5721
|
+
.ds-247420 .chat-msg-flat.you .chat-stack { align-items: stretch; }
|
|
5722
|
+
.ds-247420 .chat-role { font-size: var(--fs-tiny); font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--fg-3); margin-bottom: var(--space-1); }
|
|
5723
|
+
.ds-247420 .chat-msg-flat.you .chat-role { color: var(--accent); }
|
|
5724
|
+
.ds-247420 .chat-msg-flat .chat-bubble { background: none; border: none; border-radius: 0; padding: 0; max-width: 100%; box-shadow: none; transform: none; }
|
|
5725
|
+
.ds-247420 .chat-msg-flat.you .chat-bubble { background: none; color: inherit; }
|
|
5726
|
+
.ds-247420 .chat-msg-flat:hover { background: color-mix(in oklab, var(--fg) 3%, transparent); }
|
|
5727
|
+
.ds-247420 .chat-msg-flat.you:hover { background: color-mix(in oklab, var(--fg) 2%, transparent); }
|
|
5728
|
+
.ds-247420 .chat-msg-flat:hover .chat-bubble { transform: none; box-shadow: none; background: none; }
|
|
5729
|
+
.ds-247420 .chat-msg-flat .chat-avatar { display: none; }
|
|
5730
|
+
|
|
5731
|
+
/* Tool-call card: a bordered, status-toned, scannable card (claude.ai/code),
|
|
5732
|
+
not the raw mascot-tinted details dump. The node keeps the .chat-bubble
|
|
5733
|
+
class, so these rules de-frame it and restyle. Placed after the flat-bubble
|
|
5734
|
+
reset so they win on equal specificity. */
|
|
5735
|
+
.ds-247420 .chat-msg .chat-tool {
|
|
5736
|
+
display: block; max-width: 100%; padding: 0; margin: var(--space-1) 0;
|
|
5737
|
+
background: var(--bg); color: var(--fg);
|
|
5738
|
+
border: var(--bw-hair) solid var(--rule); border-radius: var(--r-2);
|
|
5739
|
+
box-shadow: none; overflow: hidden;
|
|
5740
|
+
}
|
|
5741
|
+
.ds-247420 .chat-msg .chat-tool[open] { background: var(--bg); }
|
|
5742
|
+
.ds-247420 .chat-msg .chat-tool .chat-tool-head {
|
|
5743
|
+
display: flex; align-items: center; gap: var(--space-2);
|
|
5744
|
+
padding: var(--space-2) var(--space-3); cursor: pointer;
|
|
5745
|
+
font-size: var(--fs-sm); list-style: none;
|
|
5746
|
+
}
|
|
5747
|
+
.ds-247420 .chat-msg .chat-tool .chat-tool-head::-webkit-details-marker { display: none; }
|
|
5748
|
+
.ds-247420 .chat-msg .chat-tool .chat-tool-head:hover { background: var(--bg-2); }
|
|
5749
|
+
.ds-247420 .chat-tool-icon { display: inline-flex; color: var(--fg-3); }
|
|
5750
|
+
.ds-247420 .chat-tool-name { font-family: var(--ff-mono); font-weight: 600; color: var(--fg); }
|
|
5751
|
+
.ds-247420 .chat-tool-label { color: var(--fg-3); font-size: var(--fs-tiny); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
|
|
5752
|
+
.ds-247420 .chat-tool-status {
|
|
5753
|
+
margin-left: auto; flex: 0 0 auto;
|
|
5754
|
+
font-size: var(--fs-micro); font-weight: 700; text-transform: uppercase; letter-spacing: .04em;
|
|
5755
|
+
color: var(--fg-3);
|
|
5756
|
+
padding: 2px var(--space-2); border-radius: var(--r-pill);
|
|
5757
|
+
background: color-mix(in oklab, var(--fg) 6%, transparent);
|
|
5758
|
+
}
|
|
5759
|
+
.ds-247420 .chat-msg .chat-tool.tool-running .chat-tool-status { color: var(--accent); background: color-mix(in oklab, var(--accent) 12%, transparent); }
|
|
5760
|
+
.ds-247420 .chat-msg .chat-tool.tool-error .chat-tool-status { color: var(--flame); background: color-mix(in oklab, var(--flame) 12%, transparent); }
|
|
5761
|
+
.ds-247420 .chat-tool-body { border-top: var(--bw-hair) solid var(--rule); padding: var(--space-2) var(--space-3); display: flex; flex-direction: column; gap: var(--space-2); }
|
|
5762
|
+
.ds-247420 .chat-tool-section { display: flex; flex-direction: column; gap: var(--space-1); }
|
|
5763
|
+
.ds-247420 .chat-tool-section-label { font-size: var(--fs-micro); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--fg-3); }
|
|
5764
|
+
.ds-247420 .chat-tool-pre { margin: 0; padding: var(--space-2); background: var(--bg-2); border-radius: var(--r-1); font-family: var(--ff-mono); font-size: var(--fs-tiny); line-height: 1.45; overflow-x: auto; max-height: 320px; overflow-y: auto; }
|
|
5765
|
+
.ds-247420 .chat-tool-pre.is-error { color: var(--flame); }
|
|
5766
|
+
.ds-247420 .chat-tool-pre.chat-tool-empty { color: var(--fg-3); }
|
|
5767
|
+
|
|
5768
|
+
/* Fenced-code language tab on every rendered-markdown block (not just the
|
|
5769
|
+
structured CodeNode). injectCodeCopy reads the language- class. */
|
|
5770
|
+
.ds-247420 .chat-code-block { position: relative; }
|
|
5771
|
+
.ds-247420 .chat-code-lang {
|
|
5772
|
+
position: absolute; top: 0; left: 0; z-index: 2;
|
|
5773
|
+
padding: 2px var(--space-2); border-bottom-right-radius: var(--r-1);
|
|
5774
|
+
font-family: var(--ff-mono); font-size: var(--fs-micro); text-transform: uppercase; letter-spacing: .04em;
|
|
5775
|
+
color: var(--fg-3); background: color-mix(in oklab, var(--fg) 6%, transparent);
|
|
5776
|
+
pointer-events: none;
|
|
5777
|
+
}
|
|
5778
|
+
.ds-247420 .chat-code-block pre { padding-top: calc(var(--space-3) + 4px); }
|
|
5779
|
+
|
|
5780
|
+
/* Motion + microinteraction polish (all reduced-motion guarded). */
|
|
5781
|
+
.ds-247420 .ds-session-row { transition: background var(--dur-snap) var(--ease), box-shadow var(--dur-snap) var(--ease); }
|
|
5782
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
5783
|
+
.ds-247420 .agentchat-thread { scroll-behavior: smooth; }
|
|
5784
|
+
.ds-247420 .ds-alert { animation: ds-alert-in var(--dur-base) var(--ease); }
|
|
5785
|
+
}
|
|
5786
|
+
@keyframes ds-alert-in { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
|
|
5787
|
+
.ds-247420 .chat-code-copy { transition: opacity var(--dur-snap, .12s) var(--ease, ease), color var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease), background var(--dur-snap) var(--ease); }
|
|
5788
|
+
.ds-247420 .chat-msg-action { transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease); }
|
|
5789
|
+
.ds-247420 .agentchat-install-copy { transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease); }
|
|
5790
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
5791
|
+
.ds-247420 .btn.is-armed, .ds-247420 .btn-primary.is-armed { animation: ds-arm-pulse var(--dur-slow) var(--ease); }
|
|
5792
|
+
}
|
|
5793
|
+
@keyframes ds-arm-pulse { 0% { box-shadow: 0 0 0 0 color-mix(in oklab, var(--warn) 55%, transparent); } 100% { box-shadow: 0 0 0 6px color-mix(in oklab, var(--warn) 0%, transparent); } }
|
|
5794
|
+
.ds-247420 .ds-dash-card.is-new { box-shadow: inset 2px 0 0 var(--accent), 0 0 0 1px color-mix(in oklab, var(--accent) 40%, transparent); }
|
|
5795
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
5796
|
+
.ds-247420 .ds-dash-card.is-new { animation: ds-card-in var(--dur-slow) var(--ease); }
|
|
5797
|
+
}
|
|
5798
|
+
@keyframes ds-card-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
|
|
5799
|
+
|
|
5800
|
+
/* Live command-center: status-bucket groups + header breakdown + heartbeat. */
|
|
5801
|
+
.ds-247420 .ds-dash-group { display: flex; flex-direction: column; gap: var(--space-2); }
|
|
5802
|
+
.ds-247420 .ds-dash-group-label { font-size: var(--fs-micro); font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--fg-3); padding: 0 var(--space-1); }
|
|
5803
|
+
.ds-247420 .ds-dash-breakdown { display: flex; align-items: center; gap: var(--space-1); font-size: var(--fs-sm); color: var(--fg-2); }
|
|
5804
|
+
.ds-247420 .ds-dash-breakdown .seg.is-running { color: var(--green); font-weight: 600; }
|
|
5805
|
+
.ds-247420 .ds-dash-breakdown .seg.is-error { color: var(--flame); font-weight: 600; }
|
|
5806
|
+
.ds-247420 .ds-dash-breakdown .seg.is-idle { color: var(--amber, #d9a93a); }
|
|
5807
|
+
.ds-247420 .ds-dash-stream-disc { display: inline-flex; align-items: center; gap: var(--space-1); }
|
|
5808
|
+
.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); }
|
|
5809
|
+
.ds-247420 .ds-dash-selectall:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
5810
|
+
.ds-247420 .ds-dash-clear { background: none; border: none; color: var(--fg-3); cursor: pointer; font-size: var(--fs-tiny); text-decoration: underline dotted; padding: var(--space-1); }
|
|
5811
|
+
|
|
5812
|
+
/* Conversation-rail loading skeleton (cold ccsniff walk). */
|
|
5813
|
+
.ds-247420 .ds-session-row-skeleton { display: flex; flex-direction: column; gap: 6px; padding: var(--space-2) var(--space-3); }
|
|
5814
|
+
.ds-247420 .ds-session-row-skeleton .ds-skel { background: var(--bg-3); border-radius: var(--r-1); }
|
|
5815
|
+
.ds-247420 .ds-session-row-skeleton .ds-skel-title { height: 12px; width: 70%; }
|
|
5816
|
+
.ds-247420 .ds-session-row-skeleton .ds-skel-meta { height: 9px; width: 45%; }
|
|
5817
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
5818
|
+
.ds-247420 .ds-session-row-skeleton .ds-skel { animation: ds-skel-shimmer 1.3s ease-in-out infinite; background: linear-gradient(90deg, var(--bg-3) 0%, var(--bg-2) 50%, var(--bg-3) 100%); background-size: 200% 100%; }
|
|
5819
|
+
}
|
|
5820
|
+
@keyframes ds-skel-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
|
|
5821
|
+
|
|
5822
|
+
/* File code preview: paint Prism tokens (the bundle scoped them to the chat
|
|
5823
|
+
block only) + an optional non-selectable line-number gutter. */
|
|
5824
|
+
.ds-247420 .ds-preview-code code { color: var(--fg); }
|
|
5825
|
+
.ds-247420 .ds-preview-code .token.comment, .ds-247420 .ds-preview-code .token.prolog, .ds-247420 .ds-preview-code .token.doctype, .ds-247420 .ds-preview-code .token.cdata { color: var(--fg-3); }
|
|
5826
|
+
.ds-247420 .ds-preview-code .token.punctuation { color: var(--fg-2); }
|
|
5827
|
+
.ds-247420 .ds-preview-code .token.property, .ds-247420 .ds-preview-code .token.tag, .ds-247420 .ds-preview-code .token.boolean, .ds-247420 .ds-preview-code .token.number, .ds-247420 .ds-preview-code .token.constant, .ds-247420 .ds-preview-code .token.symbol { color: var(--purple-2, #7F18A4); }
|
|
5828
|
+
.ds-247420 .ds-preview-code .token.selector, .ds-247420 .ds-preview-code .token.attr-name, .ds-247420 .ds-preview-code .token.string, .ds-247420 .ds-preview-code .token.char, .ds-247420 .ds-preview-code .token.builtin { color: var(--green-2, #3A9A34); }
|
|
5829
|
+
.ds-247420 .ds-preview-code .token.atrule, .ds-247420 .ds-preview-code .token.attr-value, .ds-247420 .ds-preview-code .token.keyword { color: var(--sky, #3A6EFF); }
|
|
5830
|
+
.ds-247420 .ds-preview-code .token.function, .ds-247420 .ds-preview-code .token.class-name { color: var(--flame); }
|
|
5831
|
+
.ds-247420 .ds-preview-code.has-gutter { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 0 var(--space-2); }
|
|
5832
|
+
.ds-247420 .ds-preview-code.has-gutter code { display: block; min-width: 0; overflow-x: auto; }
|
|
5833
|
+
.ds-247420 .ds-preview-gutter { user-select: none; text-align: right; padding: 0 var(--space-2) 0 0; color: var(--fg-3); border-right: var(--bw-hair) solid var(--rule); font-family: var(--ff-mono); white-space: pre; line-height: inherit; }
|
|
5834
|
+
|
|
5835
|
+
/* Image preview: fit/actual control + alpha checkerboard. */
|
|
5836
|
+
.ds-247420 .ds-preview-media-controls { display: flex; gap: var(--space-2); padding: var(--space-2); justify-content: center; }
|
|
5837
|
+
.ds-247420 .ds-preview-media-alpha {
|
|
5838
|
+
background-image: linear-gradient(45deg, var(--bg-3) 25%, transparent 25%), linear-gradient(-45deg, var(--bg-3) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, var(--bg-3) 75%), linear-gradient(-45deg, transparent 75%, var(--bg-3) 75%);
|
|
5839
|
+
background-size: 16px 16px; background-position: 0 0, 0 8px, 8px -8px, -8px 0;
|
|
5840
|
+
}
|
|
5841
|
+
.ds-247420 .ds-preview-media.is-actual { max-width: none; max-height: none; }
|
|
5842
|
+
|
|
5594
5843
|
/* editor-primitives.css */
|
|
5595
5844
|
/* editor-primitives.css — chrome for in-engine editors, inspectors, IDEs,
|
|
5596
5845
|
debug HUDs. All rules under .ds-247420 scope (build prefixes). Tokens
|