anentrypoint-design 0.0.211 → 0.0.213
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 +126 -66
- package/chat.css +136 -18
- package/colors_and_type.css +14 -9
- package/community.css +5 -1
- package/dist/247420.css +316 -103
- package/dist/247420.js +13 -13
- package/package.json +1 -1
- package/src/components/chat.js +15 -2
- package/src/components/content.js +7 -4
- package/src/components/files.js +93 -41
- package/src/components/interaction-primitives.js +7 -0
- package/src/components/sessions.js +10 -2
- package/src/components/shell.js +52 -18
- package/src/components.js +1 -1
package/dist/247420.css
CHANGED
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
--ink: #131318;
|
|
21
21
|
--ink-2: #25252C;
|
|
22
22
|
--ink-3: #54545A; /* WCAG AAA on --paper (~7.1:1); was #6A6A70 (AA only) */
|
|
23
|
+
--ink-3-dark: #464650; /* dark theme bg-3 (tier-3 surface) */
|
|
24
|
+
--paper-3-dark: #B4B4BC; /* dark theme fg-3 (tier-3 text) */
|
|
23
25
|
|
|
24
26
|
/* Lore palette */
|
|
25
27
|
--green: #247420;
|
|
@@ -252,10 +254,10 @@
|
|
|
252
254
|
color-scheme: dark;
|
|
253
255
|
--bg: var(--ink);
|
|
254
256
|
--bg-2: var(--ink-2);
|
|
255
|
-
--bg-3:
|
|
257
|
+
--bg-3: var(--ink-3-dark);
|
|
256
258
|
--fg: var(--paper);
|
|
257
259
|
--fg-2: var(--paper-2);
|
|
258
|
-
--fg-3:
|
|
260
|
+
--fg-3: var(--paper-3-dark);
|
|
259
261
|
--panel-bg: var(--bg);
|
|
260
262
|
--panel-bg-2: var(--bg-2);
|
|
261
263
|
--panel-0: var(--bg);
|
|
@@ -282,18 +284,20 @@
|
|
|
282
284
|
--code-num: var(--sun);
|
|
283
285
|
}
|
|
284
286
|
|
|
285
|
-
/* NOTE: the [data-theme="auto"] block below
|
|
286
|
-
[data-theme="ink"/"dark"] block above.
|
|
287
|
-
|
|
288
|
-
|
|
287
|
+
/* NOTE: the [data-theme="auto"] block below mirrors the
|
|
288
|
+
[data-theme="ink"/"dark"] block above token-for-token. 'auto + OS-dark' and
|
|
289
|
+
'explicit dark' are the same visual context and resolve every token —
|
|
290
|
+
including --danger — identically. The two are kept as separate selectors
|
|
291
|
+
only because one is media-gated; a future de-drift can consolidate them into
|
|
292
|
+
a shared selector list once a build step can hoist the media query. */
|
|
289
293
|
@media (prefers-color-scheme: dark) {
|
|
290
294
|
.ds-247420[data-theme="auto"] {
|
|
291
295
|
--bg: var(--ink);
|
|
292
296
|
--bg-2: var(--ink-2);
|
|
293
|
-
--bg-3:
|
|
297
|
+
--bg-3: var(--ink-3-dark);
|
|
294
298
|
--fg: var(--paper);
|
|
295
299
|
--fg-2: var(--paper-2);
|
|
296
|
-
--fg-3:
|
|
300
|
+
--fg-3: var(--paper-3-dark);
|
|
297
301
|
--panel-bg: var(--bg);
|
|
298
302
|
--panel-bg-2: var(--bg-2);
|
|
299
303
|
--panel-0: var(--bg);
|
|
@@ -306,6 +310,7 @@
|
|
|
306
310
|
--accent: var(--accent-bright, var(--green-2));
|
|
307
311
|
--accent-fg: var(--ink);
|
|
308
312
|
--accent-bright: var(--green-2);
|
|
313
|
+
--danger: oklch(0.68 0.19 25);
|
|
309
314
|
--flame: #FF5A1F;
|
|
310
315
|
--amber: #D9A93A;
|
|
311
316
|
--warn: #FF5A52;
|
|
@@ -375,7 +380,7 @@
|
|
|
375
380
|
--fg: var(--ink); --fg-2: var(--ink-2); --fg-3: var(--ink-3);
|
|
376
381
|
--accent: var(--green); --accent-fg: var(--paper);
|
|
377
382
|
/* A paper island under a dark ancestor must not inherit the dark signal pair. */
|
|
378
|
-
--flame: #C53E00; --amber: #8A6512;
|
|
383
|
+
--flame: #C53E00; --amber: #8A6512; --warn: #E0241A; --sky: #3A6EFF;
|
|
379
384
|
}
|
|
380
385
|
|
|
381
386
|
/* thebird — warm-paper brand preset. A first-class swappable theme: it lives
|
|
@@ -899,7 +904,7 @@
|
|
|
899
904
|
.ds-247420 .ds-icon-btn-primary { background: var(--accent); color: var(--accent-fg); }
|
|
900
905
|
.ds-247420 .ds-icon-btn-primary:hover { background: var(--fg); color: var(--bg); }
|
|
901
906
|
/* warn = destructive ACTION tone; flame stays exclusively error STATUS. */
|
|
902
|
-
.ds-247420 .ds-icon-btn-danger { background: var(--warn); color: var(--
|
|
907
|
+
.ds-247420 .ds-icon-btn-danger { background: var(--warn); color: var(--on-color); }
|
|
903
908
|
.ds-247420 .ds-icon-btn-danger:hover { filter: brightness(1.1); }
|
|
904
909
|
.ds-247420 .ds-icon-btn:active { transform: translateY(1px); }
|
|
905
910
|
.ds-247420 .ds-icon-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
@@ -921,10 +926,10 @@
|
|
|
921
926
|
.ds-247420 .ds-badge.tone-purple { background: var(--purple-tint); color: var(--purple-deep); }
|
|
922
927
|
.ds-247420 .ds-badge.tone-mascot { background: var(--mascot-tint); color: var(--ink); }
|
|
923
928
|
.ds-247420 .ds-badge.tone-sun { background: var(--sun); color: var(--ink); }
|
|
924
|
-
.ds-247420 .ds-badge.tone-flame { background: var(--flame); color: var(--
|
|
929
|
+
.ds-247420 .ds-badge.tone-flame { background: var(--flame); color: var(--on-color); }
|
|
925
930
|
.ds-247420 .ds-badge.tone-live { background: var(--green-tint); color: var(--green-deep); }
|
|
926
931
|
.ds-247420 .ds-badge.tone-wip { background: var(--bg-3); color: var(--fg-2); }
|
|
927
|
-
.ds-247420 .ds-badge.tone-error { background: var(--flame); color: var(--
|
|
932
|
+
.ds-247420 .ds-badge.tone-error { background: var(--flame); color: var(--on-color); }
|
|
928
933
|
.ds-247420 .ds-badge.tone-success { background: var(--green-tint); color: var(--green-deep); }
|
|
929
934
|
.ds-247420 .ds-badge.tone-neutral { background: var(--bg-3); color: var(--fg-2); }
|
|
930
935
|
|
|
@@ -941,14 +946,14 @@
|
|
|
941
946
|
.ds-247420 .chip.tone-purple { background: var(--purple-tint); color: var(--purple-deep); }
|
|
942
947
|
.ds-247420 .chip.tone-mascot { background: var(--mascot-tint); color: var(--ink); }
|
|
943
948
|
.ds-247420 .chip.tone-sun { background: var(--sun); color: var(--ink); }
|
|
944
|
-
.ds-247420 .chip.tone-flame { background: var(--flame); color: var(--
|
|
949
|
+
.ds-247420 .chip.tone-flame { background: var(--flame); color: var(--on-color); }
|
|
945
950
|
.ds-247420 .chip.tone-live { background: var(--green-tint); color: var(--green-deep); }
|
|
946
951
|
.ds-247420 .chip.tone-wip { background: var(--bg-3); color: var(--fg-2); }
|
|
947
|
-
.ds-247420 .chip.tone-error { background: var(--flame); color: var(--
|
|
952
|
+
.ds-247420 .chip.tone-error { background: var(--flame); color: var(--on-color); }
|
|
948
953
|
.ds-247420 .chip.tone-success { background: var(--green-tint); color: var(--green-deep); }
|
|
949
954
|
.ds-247420 .chip.tone-disabled { background: var(--bg-3); color: var(--fg-3); }
|
|
950
955
|
.ds-247420 .chip.tone-ok { background: var(--green-tint); color: var(--green-deep); }
|
|
951
|
-
.ds-247420 .chip.tone-miss { background: var(--flame); color: var(--
|
|
956
|
+
.ds-247420 .chip.tone-miss { background: var(--flame); color: var(--on-color); }
|
|
952
957
|
.ds-247420 .chip.tone-neutral { background: var(--bg-3); color: var(--fg-2); }
|
|
953
958
|
|
|
954
959
|
.ds-247420 .glyph {
|
|
@@ -987,6 +992,8 @@
|
|
|
987
992
|
font-family: var(--ff-mono); letter-spacing: 0;
|
|
988
993
|
}
|
|
989
994
|
.ds-247420 .panel-body { padding: var(--space-2) var(--space-3) var(--space-3); }
|
|
995
|
+
.ds-247420 .panel-body > * { margin: 0; }
|
|
996
|
+
.ds-247420 .panel-body > * + * { margin-top: var(--space-3); }
|
|
990
997
|
.ds-247420 .panel.panel-wide .panel-body { padding: 0; }
|
|
991
998
|
|
|
992
999
|
/* ============================================================
|
|
@@ -1009,6 +1016,21 @@
|
|
|
1009
1016
|
transition: background var(--dur-snap) var(--ease);
|
|
1010
1017
|
}
|
|
1011
1018
|
.ds-247420 .row + .row { margin-top: 2px; }
|
|
1019
|
+
/* `detail` drops to its own full-width line. The row is a grid, so span every
|
|
1020
|
+
track (grid-column 1/-1); flex-basis:100% covers the flex-row fallback. */
|
|
1021
|
+
.ds-247420 .ds-row-detail {
|
|
1022
|
+
white-space: pre-wrap;
|
|
1023
|
+
font-family: var(--ff-mono);
|
|
1024
|
+
font-size: var(--fs-sm);
|
|
1025
|
+
line-height: var(--lh-snug, 1.3);
|
|
1026
|
+
margin-top: 8px;
|
|
1027
|
+
padding: 10px 12px;
|
|
1028
|
+
background: var(--bg);
|
|
1029
|
+
border-radius: var(--r-1);
|
|
1030
|
+
overflow-x: auto;
|
|
1031
|
+
flex-basis: 100%;
|
|
1032
|
+
grid-column: 1 / -1;
|
|
1033
|
+
}
|
|
1012
1034
|
.ds-247420 .row::before {
|
|
1013
1035
|
content: '';
|
|
1014
1036
|
position: absolute; left: 7px; top: 0; bottom: 0; width: 3px;
|
|
@@ -1392,8 +1414,6 @@
|
|
|
1392
1414
|
.ds-247420 .chat-msg:hover { padding: 4px 0; margin: 0; background: transparent; }
|
|
1393
1415
|
.ds-247420 .chat-composer { padding: 8px; gap: 6px; }
|
|
1394
1416
|
.ds-247420 .chat-composer textarea { padding: 10px 12px; font-size: var(--fs-sm); }
|
|
1395
|
-
.ds-247420 .chat-composer .send,
|
|
1396
|
-
.ds-247420 .chat-composer button { width: 40px; height: 40px; font-size: 16px; }
|
|
1397
1417
|
|
|
1398
1418
|
/* KPI Cards */
|
|
1399
1419
|
.ds-247420 .kpi {
|
|
@@ -1580,12 +1600,14 @@
|
|
|
1580
1600
|
.ds-247420 .ds-file-listing { display: flex; flex-direction: column; gap: var(--space-2); min-height: 0; }
|
|
1581
1601
|
/* The quick filter is a compact control, not a full-width form row - a giant
|
|
1582
1602
|
input above the grid reads as a search page and costs fold height. */
|
|
1583
|
-
|
|
1603
|
+
/* The filter is now an inline item in the single .ds-file-controls toolbar row
|
|
1604
|
+
(the standalone right-aligned .ds-file-filter strip was removed). */
|
|
1584
1605
|
.ds-247420 .ds-file-filter-input {
|
|
1585
1606
|
width: min(280px, 100%); padding: 6px 12px; font-size: var(--fs-sm);
|
|
1586
1607
|
background: var(--bg); color: var(--fg);
|
|
1587
1608
|
border: var(--bw-hair) solid var(--rule); border-radius: var(--r-1);
|
|
1588
1609
|
}
|
|
1610
|
+
.ds-247420 .ds-file-controls .ds-file-filter-input { flex: 0 1 220px; }
|
|
1589
1611
|
.ds-247420 .ds-file-filter-input:focus-visible { outline: none; box-shadow: var(--focus-ring-inset); }
|
|
1590
1612
|
.ds-247420 .ds-file-sort { display: flex; gap: var(--space-2); padding: 0 var(--space-2) var(--space-1); }
|
|
1591
1613
|
.ds-247420 .ds-file-sort-btn {
|
|
@@ -1715,7 +1737,7 @@
|
|
|
1715
1737
|
role=checkbox/aria-checked name+state. */
|
|
1716
1738
|
.ds-247420 .ds-check-box {
|
|
1717
1739
|
width: 15px; height: 15px; box-sizing: border-box; flex: 0 0 auto; position: relative;
|
|
1718
|
-
border: 1.5px solid var(--
|
|
1740
|
+
border: 1.5px solid var(--fg-3); border-radius: 4px;
|
|
1719
1741
|
transition: background var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease);
|
|
1720
1742
|
}
|
|
1721
1743
|
.ds-247420 .is-marked > .ds-check-box,
|
|
@@ -1727,14 +1749,14 @@
|
|
|
1727
1749
|
}
|
|
1728
1750
|
.ds-247420[aria-checked="mixed"] > .ds-check-box { background: var(--accent); border-color: var(--accent); }
|
|
1729
1751
|
.ds-247420[aria-checked="mixed"] > .ds-check-box::after {
|
|
1730
|
-
content: ""; position: absolute; left:
|
|
1752
|
+
content: ""; position: absolute; left: 3px; right: 3px; top: 6px; height: 2px; background: var(--bg); border-radius: 1px;
|
|
1731
1753
|
}
|
|
1732
1754
|
|
|
1733
1755
|
.ds-247420 .ds-file-check {
|
|
1734
1756
|
display: inline-flex; align-items: center; justify-content: center;
|
|
1735
1757
|
min-width: 28px; height: 28px; padding: 0 4px;
|
|
1736
1758
|
background: transparent; border: 0; border-radius: var(--r-1);
|
|
1737
|
-
|
|
1759
|
+
color: var(--fg-3);
|
|
1738
1760
|
cursor: pointer;
|
|
1739
1761
|
transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
|
|
1740
1762
|
}
|
|
@@ -1780,9 +1802,10 @@
|
|
|
1780
1802
|
background: var(--bg-2); border: var(--bw-hair) solid var(--rule); border-radius: var(--r-1);
|
|
1781
1803
|
}
|
|
1782
1804
|
.ds-247420 .ds-density-btn {
|
|
1783
|
-
|
|
1805
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
1806
|
+
width: 28px; height: 28px; color: var(--fg-2);
|
|
1784
1807
|
background: none; border: none; cursor: pointer;
|
|
1785
|
-
padding:
|
|
1808
|
+
padding: 0; border-radius: calc(var(--r-1) - 2px);
|
|
1786
1809
|
transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
|
|
1787
1810
|
}
|
|
1788
1811
|
.ds-247420 .ds-density-btn:hover { color: var(--fg); }
|
|
@@ -1825,6 +1848,16 @@
|
|
|
1825
1848
|
}
|
|
1826
1849
|
.ds-247420 .ds-file-cell-media .ds-file-icon { width: 34px; height: 34px; font-size: 24px; }
|
|
1827
1850
|
.ds-247420 .ds-file-cell-thumb { width: 100%; height: 100%; object-fit: cover; }
|
|
1851
|
+
/* Per-type icon tints on thumb tiles so the grid keeps the colour-coding the
|
|
1852
|
+
list rows already carry (mirrors .ds-file-row[data-file-type] .ds-file-icon). */
|
|
1853
|
+
.ds-247420 .ds-file-cell[data-file-type="dir"] .ds-file-icon { color: var(--accent); }
|
|
1854
|
+
.ds-247420 .ds-file-cell[data-file-type="image"] .ds-file-icon { color: var(--mascot); }
|
|
1855
|
+
.ds-247420 .ds-file-cell[data-file-type="video"] .ds-file-icon { color: var(--purple-2); }
|
|
1856
|
+
.ds-247420 .ds-file-cell[data-file-type="audio"] .ds-file-icon { color: var(--sky); }
|
|
1857
|
+
.ds-247420 .ds-file-cell[data-file-type="code"] .ds-file-icon { color: var(--green-2); }
|
|
1858
|
+
.ds-247420 .ds-file-cell[data-file-type="archive"] .ds-file-icon { color: var(--flame); }
|
|
1859
|
+
.ds-247420 .ds-file-cell[data-file-type="document"] .ds-file-icon { color: var(--amber); }
|
|
1860
|
+
.ds-247420 .ds-file-cell[data-file-type="symlink"] .ds-file-icon { color: var(--purple); }
|
|
1828
1861
|
.ds-247420 .ds-file-cell-name {
|
|
1829
1862
|
font-size: var(--fs-tiny); text-align: left;
|
|
1830
1863
|
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
@@ -1835,13 +1868,6 @@
|
|
|
1835
1868
|
background: color-mix(in oklab, var(--bg) 78%, transparent);
|
|
1836
1869
|
}
|
|
1837
1870
|
|
|
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
1871
|
/* ============================================================
|
|
1846
1872
|
File browser surface — stage, toolbar, breadcrumb, dropzone,
|
|
1847
1873
|
upload progress, empty state, modals, preview. Authored for
|
|
@@ -2165,21 +2191,12 @@
|
|
|
2165
2191
|
}
|
|
2166
2192
|
.ds-247420 .ds-filter-input:focus-visible { outline: none; box-shadow: var(--focus-ring-inset); }
|
|
2167
2193
|
|
|
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
|
-
}
|
|
2194
|
+
/* Loading skeleton: FileSkeleton renders `.ds-file-grid.ds-file-skeleton` with
|
|
2195
|
+
`.ds-file-row.ds-file-row-skeleton` rows whose inner `.ds-skel` children shimmer
|
|
2196
|
+
(via .ds-skel::after). The container therefore inherits the .ds-file-grid layout
|
|
2197
|
+
and must NOT be a single 48px gradient bar (that collapsed every row and double-
|
|
2198
|
+
shimmered). The dead .ds-file-grid-loading rule + unused ds-skeleton-shimmer
|
|
2199
|
+
keyframe were removed; only the inner .ds-skel children animate. */
|
|
2183
2200
|
|
|
2184
2201
|
/* Drag-to-move drop target highlight on a directory row. */
|
|
2185
2202
|
.ds-247420 .ds-file-row.ds-drop-target {
|
|
@@ -2237,6 +2254,7 @@
|
|
|
2237
2254
|
transition: color var(--dur-base) var(--ease), background var(--dur-base) var(--ease);
|
|
2238
2255
|
}
|
|
2239
2256
|
.ds-247420 .ds-segmented .ds-seg-btn:hover { color: var(--fg); }
|
|
2257
|
+
.ds-247420 .ds-segmented .ds-seg-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
2240
2258
|
.ds-247420 .ds-segmented .ds-seg-btn.is-on {
|
|
2241
2259
|
background: var(--bg); color: var(--fg);
|
|
2242
2260
|
box-shadow: inset 0 0 0 var(--bw-hair, 1px) var(--rule);
|
|
@@ -2384,10 +2402,27 @@
|
|
|
2384
2402
|
color: color-mix(in oklab, currentColor 75%, transparent); font-style: italic;
|
|
2385
2403
|
}
|
|
2386
2404
|
.ds-247420 .chat-bubble.chat-md pre {
|
|
2387
|
-
background:
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
|
|
2405
|
+
background: var(--bg);
|
|
2406
|
+
border: 1px solid color-mix(in oklab, var(--fg) 12%, transparent);
|
|
2407
|
+
padding: 12px 16px; border-radius: var(--r-1); overflow-x: auto;
|
|
2408
|
+
font-family: var(--ff-mono); font-size: var(--fs-xs); line-height: 1.55;
|
|
2409
|
+
color: var(--fg); margin: 8px 0;
|
|
2410
|
+
}
|
|
2411
|
+
/* When injectCodeCopy has wrapped the fence (.chat-code-block), reserve room
|
|
2412
|
+
for the absolute .chat-code-lang tab. This selector outranks the bare
|
|
2413
|
+
.chat-code-block pre reservation in chat.css, which the 2-class md pre
|
|
2414
|
+
selector above would otherwise override. */
|
|
2415
|
+
.ds-247420 .chat-code-block .chat-bubble.chat-md pre,
|
|
2416
|
+
.ds-247420 .chat-bubble.chat-md .chat-code-block pre {
|
|
2417
|
+
padding-top: calc(var(--space-3) + 4px);
|
|
2418
|
+
}
|
|
2419
|
+
/* Markdown tables + horizontal rules: agents routinely emit them, but they were
|
|
2420
|
+
unstyled (bare unspaced cells, vanished rules). */
|
|
2421
|
+
.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; }
|
|
2422
|
+
.ds-247420 .chat-bubble.chat-md th,
|
|
2423
|
+
.ds-247420 .chat-bubble.chat-md td { border: var(--bw-hair) solid var(--rule); padding: 4px 10px; text-align: left; }
|
|
2424
|
+
.ds-247420 .chat-bubble.chat-md th { background: color-mix(in oklab, var(--fg) 5%, transparent); font-weight: 600; }
|
|
2425
|
+
.ds-247420 .chat-bubble.chat-md hr { border: 0; border-top: var(--bw-hair) solid var(--rule); margin: 12px 0; }
|
|
2391
2426
|
|
|
2392
2427
|
.ds-247420 .chat-msg .chat-bubble.chat-code,
|
|
2393
2428
|
.ds-247420 .chat-msg.you .chat-bubble.chat-code,
|
|
@@ -2615,6 +2650,14 @@
|
|
|
2615
2650
|
border-color: var(--accent);
|
|
2616
2651
|
box-shadow: 0 0 0 2px color-mix(in oklab, var(--accent) 18%, transparent);
|
|
2617
2652
|
}
|
|
2653
|
+
.ds-247420 .chat-composer.is-error,
|
|
2654
|
+
.ds-247420 .chat-composer:has(textarea[aria-invalid="true"]) {
|
|
2655
|
+
border-color: var(--flame);
|
|
2656
|
+
}
|
|
2657
|
+
.ds-247420 .chat-composer.is-error:focus-within,
|
|
2658
|
+
.ds-247420 .chat-composer:has(textarea[aria-invalid="true"]):focus-within {
|
|
2659
|
+
box-shadow: 0 0 0 2px color-mix(in oklab, var(--flame) 22%, transparent);
|
|
2660
|
+
}
|
|
2618
2661
|
.ds-247420 .chat-composer textarea {
|
|
2619
2662
|
flex: 1; min-width: 0; padding: 8px 4px;
|
|
2620
2663
|
background: none; color: var(--fg);
|
|
@@ -2630,7 +2673,7 @@
|
|
|
2630
2673
|
.ds-247420 .chat-composer textarea::placeholder { color: var(--fg-3); }
|
|
2631
2674
|
.ds-247420 .chat-composer textarea:focus { background: none; border: none; box-shadow: none; outline: none; }
|
|
2632
2675
|
.ds-247420 .chat-composer .send {
|
|
2633
|
-
|
|
2676
|
+
border-radius: var(--r-1);
|
|
2634
2677
|
background: var(--accent); color: var(--accent-fg);
|
|
2635
2678
|
border: 0; cursor: pointer;
|
|
2636
2679
|
display: inline-flex; align-items: center; justify-content: center;
|
|
@@ -2638,10 +2681,10 @@
|
|
|
2638
2681
|
transition: background var(--dur-snap, .15s) var(--ease, ease);
|
|
2639
2682
|
}
|
|
2640
2683
|
.ds-247420 .chat-composer .send:disabled { opacity: .5; cursor: not-allowed; }
|
|
2641
|
-
/* Ghost icon buttons in the toolbar (attach / emoji / more)
|
|
2642
|
-
|
|
2684
|
+
/* Ghost icon buttons in the toolbar (attach / emoji / more). Size + radius are
|
|
2685
|
+
owned by .chat-composer-toolbar .composer-btn in chat.css (32px / --r-1,
|
|
2686
|
+
44px coarse); this base rule keeps only the shared appearance. */
|
|
2643
2687
|
.ds-247420 .composer-btn {
|
|
2644
|
-
width: 40px; height: 40px; border-radius: 50%;
|
|
2645
2688
|
background: transparent; color: var(--fg-3);
|
|
2646
2689
|
border: 0; cursor: pointer;
|
|
2647
2690
|
display: inline-flex; align-items: center; justify-content: center;
|
|
@@ -2737,9 +2780,6 @@
|
|
|
2737
2780
|
@media (max-height: 500px) and (orientation: landscape) {
|
|
2738
2781
|
.ds-247420 .chat-composer { padding: 6px 0; }
|
|
2739
2782
|
.ds-247420 .chat-composer textarea { min-height: 44px; max-height: 120px; }
|
|
2740
|
-
/* Keep the send button at the 44x44 minimum tap target even in the
|
|
2741
|
-
space-constrained landscape layout. */
|
|
2742
|
-
.ds-247420 .chat-composer .send, .ds-247420 .chat-composer button { width: 44px; height: 44px; font-size: 14px; }
|
|
2743
2783
|
}
|
|
2744
2784
|
|
|
2745
2785
|
/* ============================================================
|
|
@@ -2875,7 +2915,6 @@
|
|
|
2875
2915
|
position: absolute;
|
|
2876
2916
|
left: 0; right: 0; height: 2px;
|
|
2877
2917
|
background: var(--accent);
|
|
2878
|
-
animation: pulse-line 0.6s ease-in-out infinite;
|
|
2879
2918
|
}
|
|
2880
2919
|
.ds-247420 .list-item.drag-before::before { top: -2px; }
|
|
2881
2920
|
.ds-247420 .list-item.drag-after::after { bottom: -2px; }
|
|
@@ -2884,6 +2923,10 @@
|
|
|
2884
2923
|
0%, 100% { opacity: 0.3; }
|
|
2885
2924
|
50% { opacity: 1; }
|
|
2886
2925
|
}
|
|
2926
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
2927
|
+
.ds-247420 .list-item.drag-before::before,
|
|
2928
|
+
.ds-247420 .list-item.drag-after::after { animation: pulse-line 0.6s ease-in-out infinite; }
|
|
2929
|
+
}
|
|
2887
2930
|
|
|
2888
2931
|
/* ------------------------------------------------------------
|
|
2889
2932
|
Context Menu Styles
|
|
@@ -2898,7 +2941,6 @@
|
|
|
2898
2941
|
min-width: 160px;
|
|
2899
2942
|
z-index: calc(var(--z-overlay, 1000) + 1);
|
|
2900
2943
|
padding: 4px 0;
|
|
2901
|
-
animation: context-menu-in 0.15s ease-out;
|
|
2902
2944
|
}
|
|
2903
2945
|
|
|
2904
2946
|
@keyframes context-menu-in {
|
|
@@ -2911,6 +2953,9 @@
|
|
|
2911
2953
|
transform: scale(1) translateY(0);
|
|
2912
2954
|
}
|
|
2913
2955
|
}
|
|
2956
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
2957
|
+
.ds-247420 .ds-context-menu { animation: context-menu-in 0.15s ease-out; }
|
|
2958
|
+
}
|
|
2914
2959
|
|
|
2915
2960
|
.ds-247420 .ds-context-menu-item {
|
|
2916
2961
|
display: flex; align-items: center; gap: 10px;
|
|
@@ -3165,6 +3210,10 @@
|
|
|
3165
3210
|
padding: var(--space-8) var(--space-4);
|
|
3166
3211
|
text-align: center; color: var(--fg-3);
|
|
3167
3212
|
}
|
|
3213
|
+
.ds-247420 .empty-state--inline {
|
|
3214
|
+
flex-direction: row; align-items: center; gap: var(--space-2);
|
|
3215
|
+
padding: var(--space-2) 0; text-align: left;
|
|
3216
|
+
}
|
|
3168
3217
|
.ds-247420 .empty-state-icon {
|
|
3169
3218
|
font-size: 48px; opacity: 0.4;
|
|
3170
3219
|
}
|
|
@@ -3209,7 +3258,6 @@
|
|
|
3209
3258
|
padding: var(--space-3) var(--space-4);
|
|
3210
3259
|
max-width: 320px;
|
|
3211
3260
|
box-shadow: 0 10px 40px color-mix(in oklab, var(--fg) 20%, transparent);
|
|
3212
|
-
animation: toast-slide-in 0.3s ease-out;
|
|
3213
3261
|
z-index: calc(var(--z-overlay, 1000) + 10);
|
|
3214
3262
|
}
|
|
3215
3263
|
|
|
@@ -3223,6 +3271,9 @@
|
|
|
3223
3271
|
transform: translateX(0);
|
|
3224
3272
|
}
|
|
3225
3273
|
}
|
|
3274
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
3275
|
+
.ds-247420 .toast { animation: toast-slide-in 0.3s ease-out; }
|
|
3276
|
+
}
|
|
3226
3277
|
|
|
3227
3278
|
.ds-247420 .toast.error { border-color: var(--warn); }
|
|
3228
3279
|
.ds-247420 .toast.success { border-color: var(--green-2); }
|
|
@@ -3249,11 +3300,13 @@
|
|
|
3249
3300
|
height: 4px;
|
|
3250
3301
|
border-radius: 50%;
|
|
3251
3302
|
background: var(--accent);
|
|
3252
|
-
animation: ds-bounce 1.4s infinite ease-in-out;
|
|
3253
3303
|
}
|
|
3254
|
-
|
|
3255
|
-
.ds-247420 .ds-spinner span
|
|
3256
|
-
.ds-247420 .ds-spinner span:nth-child(
|
|
3304
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
3305
|
+
.ds-247420 .ds-spinner span { animation: ds-bounce 1.4s infinite ease-in-out; }
|
|
3306
|
+
.ds-247420 .ds-spinner span:nth-child(1) { animation-delay: 0s; }
|
|
3307
|
+
.ds-247420 .ds-spinner span:nth-child(2) { animation-delay: 0.18s; }
|
|
3308
|
+
.ds-247420 .ds-spinner span:nth-child(3) { animation-delay: 0.36s; }
|
|
3309
|
+
}
|
|
3257
3310
|
|
|
3258
3311
|
.ds-247420 .ds-spinner-lg { height: 24px; gap: 6px; }
|
|
3259
3312
|
.ds-247420 .ds-spinner-lg span { width: 6px; height: 6px; }
|
|
@@ -3525,6 +3578,22 @@
|
|
|
3525
3578
|
.ds-247420 .ws-resizer.ws-resizer-rail { grid-column: 1; }
|
|
3526
3579
|
.ds-247420 .ws-resizer.ws-resizer-sessions { grid-column: 2; }
|
|
3527
3580
|
.ds-247420 .ws-resizer.ws-resizer-pane { grid-column: 3; justify-self: end; }
|
|
3581
|
+
/* A resizer must vanish once its TRACK is removed by the staging media blocks,
|
|
3582
|
+
else dragging it writes a --ws-*-w var that no longer affects the now-fixed
|
|
3583
|
+
drawer (a dead handle). Mirror the 1480 / 1100 / 900 staging exactly. */
|
|
3584
|
+
@media (max-width: 1480px) { .ds-247420 .ws-resizer.ws-resizer-pane { display: none; } }
|
|
3585
|
+
@media (max-width: 1100px) { .ds-247420 .ws-resizer.ws-resizer-sessions { display: none; } }
|
|
3586
|
+
@media (max-width: 900px) { .ds-247420 .ws-resizer { display: none; } }
|
|
3587
|
+
/* A resizer must also vanish once its TRACK is desktop-collapsed: a 0px (pane/
|
|
3588
|
+
sessions) or 60px icon-only (rail) track has no width to drag, and a drag would
|
|
3589
|
+
write an INLINE --ws-*-w that overrides the collapse var (inline wins), fighting
|
|
3590
|
+
the collapse state. Mirror the breakpoint guards for the collapse classes. */
|
|
3591
|
+
.ds-247420 .ws-rail-collapsed .ws-resizer-rail,
|
|
3592
|
+
.ds-247420 .ws-sessions-collapsed .ws-resizer-sessions,
|
|
3593
|
+
.ds-247420 .ws-pane-collapsed .ws-resizer-pane { display: none; }
|
|
3594
|
+
/* Coarse-pointer hit target for hybrid touch laptops above the drawer breakpoint
|
|
3595
|
+
(the 8px sliver is un-grabbable by touch). */
|
|
3596
|
+
@media (pointer: coarse) { .ds-247420 .ws-resizer { width: 16px; margin-right: -8px; } }
|
|
3528
3597
|
/* Ease the rail/pane collapse. Track COUNT stays stable on collapse (only a
|
|
3529
3598
|
width var flips), so grid-template-columns is animatable; reduced-motion
|
|
3530
3599
|
drops it to an instant swap. */
|
|
@@ -3622,16 +3691,10 @@
|
|
|
3622
3691
|
overflow: hidden; transition: width var(--dur-base) var(--ease);
|
|
3623
3692
|
}
|
|
3624
3693
|
.ds-247420 .ws-pane-collapsed .ws-pane { width: 0; border-left: none; }
|
|
3625
|
-
.ds-247420 .ws-pane-collapsed .ws-pane >
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
width: 28px; height: 28px;
|
|
3629
|
-
display: inline-flex; align-items: center; justify-content: center;
|
|
3630
|
-
background: var(--bg-2); border: var(--bw-hair) solid var(--bg-3); color: var(--fg-2);
|
|
3631
|
-
border-radius: var(--r-1); cursor: pointer; z-index: 2;
|
|
3694
|
+
.ds-247420 .ws-pane-collapsed .ws-pane > * { display: none; }
|
|
3695
|
+
@media (pointer: coarse) {
|
|
3696
|
+
.ds-247420 .ws-rail-toggle { width: 44px; height: 44px; }
|
|
3632
3697
|
}
|
|
3633
|
-
.ds-247420 .ws-pane-toggle:hover { background: var(--bg-3); color: var(--fg); }
|
|
3634
|
-
.ds-247420 .ws-pane-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
3635
3698
|
|
|
3636
3699
|
/* Drawer toggles and the scrim are hidden by default and revealed by the staged
|
|
3637
3700
|
media blocks BELOW - these base rules must precede those blocks in source
|
|
@@ -3644,6 +3707,10 @@
|
|
|
3644
3707
|
.ds-247420 .ws-desktop-toggle:hover { background: var(--bg-2); color: var(--fg); }
|
|
3645
3708
|
.ds-247420 .ws-desktop-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
3646
3709
|
@media (max-width: 900px) { .ds-247420 .ws-desktop-toggle { display: none; } }
|
|
3710
|
+
/* The pane collapse toggle is meaningless once the pane TRACK is dropped (the
|
|
3711
|
+
pane becomes a mobile overlay drawer at <=1480px, reached via its own
|
|
3712
|
+
drawer-toggle), so hide this crumb control past that breakpoint. */
|
|
3713
|
+
@media (max-width: 1480px) { .ds-247420 .ws-pane-toggle { display: none; } }
|
|
3647
3714
|
.ds-247420 .ws-scrim { display: none; }
|
|
3648
3715
|
|
|
3649
3716
|
/* Responsive: the columns yield to the CONTENT in stages - the main column is
|
|
@@ -3680,9 +3747,7 @@
|
|
|
3680
3747
|
}
|
|
3681
3748
|
.ds-247420 .ws-shell.ws-pane-open .ws-pane { transform: translateX(0); width: min(340px, 85vw); }
|
|
3682
3749
|
.ds-247420 .ws-shell.ws-pane-open.ws-pane-collapsed .ws-pane { border-left: var(--bw-hair) solid var(--bg-3); }
|
|
3683
|
-
.ds-247420 .ws-shell.ws-pane-open.ws-pane-collapsed .ws-pane >
|
|
3684
|
-
/* The desktop collapse chevron is meaningless in drawer mode. */
|
|
3685
|
-
.ds-247420 .ws-pane-toggle { display: none; }
|
|
3750
|
+
.ds-247420 .ws-shell.ws-pane-open.ws-pane-collapsed .ws-pane > * { display: revert; }
|
|
3686
3751
|
.ds-247420 .ws-pane-drawer-toggle { display: inline-flex; }
|
|
3687
3752
|
/* Scrim is always present from this stage down so it FADES with the drawer
|
|
3688
3753
|
instead of hard-appearing; pointer-events gate keeps it inert while closed. */
|
|
@@ -4965,7 +5030,11 @@
|
|
|
4965
5030
|
.ds-247420 .cm-vs-btn,
|
|
4966
5031
|
.ds-247420 .cm-user-btn,
|
|
4967
5032
|
.ds-247420 .cm-ch-spinner,
|
|
4968
|
-
.ds-247420 .cm-ch-voice-badge
|
|
5033
|
+
.ds-247420 .cm-ch-voice-badge,
|
|
5034
|
+
.ds-247420 .vx-ptt,
|
|
5035
|
+
.ds-247420 .vx-ptt-glow,
|
|
5036
|
+
.ds-247420 .vx-vad-meter,
|
|
5037
|
+
.ds-247420 .vx-vad-fill {
|
|
4969
5038
|
transition: none !important;
|
|
4970
5039
|
animation: none !important;
|
|
4971
5040
|
}
|
|
@@ -5424,17 +5493,19 @@
|
|
|
5424
5493
|
font: inherit;
|
|
5425
5494
|
}
|
|
5426
5495
|
.ds-247420 .agentchat-cwd-btn:hover { border-color: var(--accent); }
|
|
5427
|
-
.ds-247420 .agentchat-cwd-btn:focus-visible { outline:
|
|
5496
|
+
.ds-247420 .agentchat-cwd-btn:focus-visible { outline: var(--focus-w) solid var(--focus-color); outline-offset: var(--focus-offset); }
|
|
5428
5497
|
.ds-247420 .agentchat-cwd-input {
|
|
5429
5498
|
flex: 1;
|
|
5430
5499
|
min-width: 12ch;
|
|
5431
5500
|
background: var(--bg-2);
|
|
5432
|
-
border:
|
|
5501
|
+
border: var(--bw-hair) solid var(--rule);
|
|
5433
5502
|
color: var(--fg);
|
|
5434
|
-
border-radius:
|
|
5503
|
+
border-radius: var(--r-1);
|
|
5435
5504
|
padding: 4px 8px;
|
|
5436
5505
|
font: inherit;
|
|
5437
5506
|
}
|
|
5507
|
+
.ds-247420 .agentchat-cwd-input:focus-visible { outline: none; box-shadow: var(--focus-ring-inset); }
|
|
5508
|
+
.ds-247420 .agentchat-cwd-input[aria-invalid='true'] { border-color: var(--flame); box-shadow: inset 0 0 0 var(--bw-hair) var(--flame); }
|
|
5438
5509
|
|
|
5439
5510
|
/* head + thread */
|
|
5440
5511
|
.ds-247420 .agentchat-head {
|
|
@@ -5595,6 +5666,23 @@
|
|
|
5595
5666
|
@media (prefers-reduced-motion: reduce) {
|
|
5596
5667
|
.ds-247420 .agentchat-working .chat-thinking-dots span { animation: none; opacity: .7; }
|
|
5597
5668
|
}
|
|
5669
|
+
/* Standalone thinking part (ThinkingNode renders .chat-bubble.chat-thinking with
|
|
5670
|
+
.chat-thinking-dots + .chat-thinking-text OUTSIDE the .agentchat-working tail).
|
|
5671
|
+
Without these base rules the dots are invisible empty spans and the text has
|
|
5672
|
+
no muted tone. Reuse the agentchat-dot-bounce keyframe. */
|
|
5673
|
+
.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; }
|
|
5674
|
+
.ds-247420 .chat-thinking-text { color: var(--fg-3); }
|
|
5675
|
+
.ds-247420 .chat-thinking-dots { display: inline-flex; gap: 3px; }
|
|
5676
|
+
.ds-247420 .chat-thinking-dots span {
|
|
5677
|
+
width: 5px; height: 5px; border-radius: 50%;
|
|
5678
|
+
background: var(--fg); opacity: .4;
|
|
5679
|
+
animation: agentchat-dot-bounce 1.2s infinite ease-in-out;
|
|
5680
|
+
}
|
|
5681
|
+
.ds-247420 .chat-thinking-dots span:nth-child(2) { animation-delay: .15s; }
|
|
5682
|
+
.ds-247420 .chat-thinking-dots span:nth-child(3) { animation-delay: .3s; }
|
|
5683
|
+
@media (prefers-reduced-motion: reduce) {
|
|
5684
|
+
.ds-247420 .chat-thinking-dots span { animation: none; opacity: .7; }
|
|
5685
|
+
}
|
|
5598
5686
|
|
|
5599
5687
|
/* Responsive: the control cluster + cwd bar must stay usable on phones/tablets.
|
|
5600
5688
|
The cwd path can't eat the row beside its label + buttons on a narrow screen. */
|
|
@@ -5622,15 +5710,30 @@
|
|
|
5622
5710
|
display: inline-block; width: 8px; height: 8px; border-radius: 50%;
|
|
5623
5711
|
background: var(--fg-3); flex: 0 0 auto;
|
|
5624
5712
|
}
|
|
5625
|
-
|
|
5626
|
-
|
|
5627
|
-
.
|
|
5628
|
-
|
|
5713
|
+
/* Each variant carries a non-colour channel (fill vs halo vs hollow ring) so the
|
|
5714
|
+
states stay distinguishable for colour-blind users and when stale/connecting
|
|
5715
|
+
would otherwise share a hue. Mirrors the rail-tone shape differentiation. */
|
|
5716
|
+
/* One canonical stale tone (disc + word + rail share it) — a muted grey-warn,
|
|
5717
|
+
deliberately desaturated so it is NOT the saturated --amber used by
|
|
5718
|
+
connecting/connecting-stream (which would re-collide hues). */
|
|
5719
|
+
.ds-247420 { --stale: color-mix(in oklab, var(--warn) 70%, var(--fg-3)); }
|
|
5720
|
+
/* Live: a persistent faint concentric ring (resting shape channel, independent
|
|
5721
|
+
of motion) with the pulse layered on top — so even at the pulse trough the
|
|
5722
|
+
disc reads as solid-fill + ring, never a bare solid that aliases stale. */
|
|
5723
|
+
.ds-247420 .status-dot-disc.status-dot-live { background: var(--accent); box-shadow: 0 0 0 2px color-mix(in oklab, var(--accent) 30%, transparent); animation: status-disc-pulse 1.8s ease-in-out infinite; }
|
|
5724
|
+
.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); }
|
|
5725
|
+
.ds-247420 .status-dot-disc.status-dot-connecting { background: transparent; box-shadow: inset 0 0 0 2px var(--amber); }
|
|
5726
|
+
/* Stale: a muted ring with a hollow centre — silhouette distinct from live's
|
|
5727
|
+
filled disc and connecting's amber hollow ring (hue + inset core). */
|
|
5728
|
+
.ds-247420 .status-dot-disc.status-dot-stale { background: transparent; box-shadow: inset 0 0 0 1px var(--stale), inset 0 0 0 3px var(--bg); }
|
|
5629
5729
|
@keyframes status-disc-pulse {
|
|
5630
|
-
|
|
5631
|
-
|
|
5730
|
+
/* First shadow is the persistent resting ring; second is the animated halo —
|
|
5731
|
+
the ring is always present so the trough never collapses to a bare solid. */
|
|
5732
|
+
0%, 100% { box-shadow: 0 0 0 2px color-mix(in oklab, var(--accent) 30%, transparent), 0 0 0 2px color-mix(in oklab, var(--accent) 55%, transparent); }
|
|
5733
|
+
50% { box-shadow: 0 0 0 2px color-mix(in oklab, var(--accent) 30%, transparent), 0 0 0 6px color-mix(in oklab, var(--accent) 0%, transparent); }
|
|
5632
5734
|
}
|
|
5633
5735
|
@media (prefers-reduced-motion: reduce) {
|
|
5736
|
+
/* The base rule already carries the persistent ring; just stop the pulse. */
|
|
5634
5737
|
.ds-247420 .status-dot-disc.status-dot-live { animation: none; }
|
|
5635
5738
|
}
|
|
5636
5739
|
|
|
@@ -5694,7 +5797,9 @@
|
|
|
5694
5797
|
.ds-247420 .ds-session-sub { font-size: var(--fs-tiny); color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
5695
5798
|
.ds-247420 .ds-session-meta { display: flex; align-items: center; gap: var(--space-2); flex: 0 0 auto; }
|
|
5696
5799
|
.ds-247420 .ds-session-agent { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3); }
|
|
5697
|
-
|
|
5800
|
+
/* New-activity cue is a hollow accent RING so it stays shape-distinct from the
|
|
5801
|
+
running live disc (a solid pulsing accent dot) for colour-blind / reduced-motion users. */
|
|
5802
|
+
.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
5803
|
.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
5804
|
.ds-247420 .ds-session-state-error { color: var(--flame); }
|
|
5700
5805
|
|
|
@@ -5724,13 +5829,15 @@
|
|
|
5724
5829
|
.ds-247420 .ds-dash-card.is-error { border-color: var(--flame); }
|
|
5725
5830
|
.ds-247420 .ds-dash-card-head { display: flex; align-items: center; gap: var(--space-2); }
|
|
5726
5831
|
.ds-247420 .ds-dash-status { font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: .03em; }
|
|
5727
|
-
|
|
5832
|
+
/* running tone unified on --accent (the later is-running rule + the live disc all
|
|
5833
|
+
use --accent); the dead var(--green) duplicate that lived here was removed. */
|
|
5728
5834
|
.ds-247420 .ds-dash-status.is-error { color: var(--flame); }
|
|
5729
5835
|
.ds-247420 .ds-dash-agent { font-size: var(--fs-body); font-weight: 600; color: var(--fg); }
|
|
5730
5836
|
.ds-247420 .ds-dash-model { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3); margin-left: auto; }
|
|
5731
5837
|
.ds-247420 .ds-dash-meta { display: flex; flex-direction: column; gap: 2px; }
|
|
5732
5838
|
.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
5839
|
.ds-247420 .ds-dash-stat { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-2); }
|
|
5840
|
+
.ds-247420 .ds-dash-stat-cost { color: var(--fg); font-weight: 600; }
|
|
5734
5841
|
.ds-247420 .ds-dash-activity { font-size: var(--fs-tiny); color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
5735
5842
|
.ds-247420 .ds-dash-actions { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-top: var(--space-1); }
|
|
5736
5843
|
.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 +5884,13 @@
|
|
|
5777
5884
|
/* --- B1: streaming pre shell — monospaced bubble while a fenced block streams,
|
|
5778
5885
|
so it does not reflow prose->block on settle. --- */
|
|
5779
5886
|
.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); }
|
|
5887
|
+
/* Persistent minimal chrome so a fenced block does not pop a border + lang tab +
|
|
5888
|
+
copy button only on settle - the streaming slab already reads as a code block. */
|
|
5889
|
+
.ds-247420 .chat-stream-pre { position: relative; }
|
|
5890
|
+
.ds-247420 .chat-stream-pre pre {
|
|
5891
|
+
border: var(--bw-hair) solid var(--rule); border-radius: var(--r-1);
|
|
5892
|
+
padding: var(--space-3); background: color-mix(in oklab, var(--fg) 4%, transparent);
|
|
5893
|
+
}
|
|
5780
5894
|
|
|
5781
5895
|
/* --- A5: composer context line (agent / model / cwd at point of typing). --- */
|
|
5782
5896
|
.ds-247420 .chat-composer-context {
|
|
@@ -5787,18 +5901,27 @@
|
|
|
5787
5901
|
}
|
|
5788
5902
|
.ds-247420 button.chat-composer-context { cursor: pointer; }
|
|
5789
5903
|
.ds-247420 button.chat-composer-context:hover { color: var(--fg-2); }
|
|
5790
|
-
.ds-247420 button.chat-composer-context:focus-visible { outline:
|
|
5904
|
+
.ds-247420 button.chat-composer-context:focus-visible { outline: var(--focus-w) solid var(--focus-color); outline-offset: var(--focus-offset); }
|
|
5791
5905
|
|
|
5792
5906
|
/* Composer send/cancel button row: a non-wrapping cluster pinned to the
|
|
5793
5907
|
bottom-right of the flex-end composer (was unstyled, so the send button
|
|
5794
5908
|
could wrap below the textarea instead of anchoring like claude.ai/code). */
|
|
5795
5909
|
.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; }
|
|
5910
|
+
/* Unify the toolbar cluster on one 32px / --r-1 square metric (the round 40px
|
|
5911
|
+
ghost buttons + 36px square send read as two button systems; the kit moved
|
|
5912
|
+
.btn* off --r-pill). chat.css loads after app-shell.css so this wins by order. */
|
|
5913
|
+
.ds-247420 .chat-composer-toolbar .composer-btn,
|
|
5914
|
+
.ds-247420 .chat-composer-toolbar .send { width: 32px; height: 32px; border-radius: var(--r-1); }
|
|
5915
|
+
@media (pointer: coarse) {
|
|
5916
|
+
.ds-247420 .chat-composer-toolbar .composer-btn,
|
|
5917
|
+
.ds-247420 .chat-composer-toolbar .send { width: 44px; height: 44px; }
|
|
5918
|
+
}
|
|
5796
5919
|
|
|
5797
5920
|
/* --- B2: follow-up chips below the last settled assistant turn. --- */
|
|
5798
5921
|
.ds-247420 .agentchat-followups { display: flex; flex-wrap: wrap; gap: var(--space-2); padding: var(--space-2) var(--space-3); }
|
|
5799
5922
|
|
|
5800
5923
|
/* --- C1: stale/idle dashboard status (static, NOT pulsing). --- */
|
|
5801
|
-
.ds-247420 .ds-dash-status.is-stale { color: var(--
|
|
5924
|
+
.ds-247420 .ds-dash-status.is-stale { color: var(--stale); }
|
|
5802
5925
|
.ds-247420 .ds-dash-status.is-running { color: var(--accent); }
|
|
5803
5926
|
|
|
5804
5927
|
/* --- C2: dashboard sort/filter toolbar + stream-state line. --- */
|
|
@@ -5842,7 +5965,7 @@
|
|
|
5842
5965
|
/* Stale/idle card: a positive amber inset bar (mirrors is-active) so a stuck
|
|
5843
5966
|
agent is flagged in a dense grid, not merely faded near-invisibly. The word
|
|
5844
5967
|
'idle' co-carries state, so this stays colour-blind safe. */
|
|
5845
|
-
.ds-247420 .ds-dash-card.is-stale { box-shadow: inset 2px 0 0 var(--
|
|
5968
|
+
.ds-247420 .ds-dash-card.is-stale { box-shadow: inset 2px 0 0 var(--stale); }
|
|
5846
5969
|
|
|
5847
5970
|
/* --- H3: dashboard live disc pulses; stale/error do not (handled by H1). --- */
|
|
5848
5971
|
|
|
@@ -5952,7 +6075,7 @@
|
|
|
5952
6075
|
font: inherit; color: inherit; text-decoration: underline dotted;
|
|
5953
6076
|
}
|
|
5954
6077
|
.ds-247420 .chat-composer-context-bit:hover { color: var(--fg-2); }
|
|
5955
|
-
.ds-247420 .chat-composer-context-bit:focus-visible { outline:
|
|
6078
|
+
.ds-247420 .chat-composer-context-bit:focus-visible { outline: var(--focus-w) solid var(--focus-color); outline-offset: var(--focus-offset); }
|
|
5956
6079
|
@media (pointer: coarse) {
|
|
5957
6080
|
.ds-247420 .chat-composer-context-bit { min-height: 44px; }
|
|
5958
6081
|
}
|
|
@@ -6031,10 +6154,44 @@
|
|
|
6031
6154
|
.ds-247420 .chat-msg-flat.you .chat-role { color: var(--accent); }
|
|
6032
6155
|
.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
6156
|
.ds-247420 .chat-msg-flat.you .chat-bubble { background: none; color: inherit; }
|
|
6157
|
+
/* Flat user turns reset their bubble to transparent, but the messenger rule
|
|
6158
|
+
(.chat-msg.you .chat-bubble code) tints inline code on --accent-fg, which is
|
|
6159
|
+
invisible/wrong on the bare page surface. Reset to the neutral fg-10% tint the
|
|
6160
|
+
sibling assistant turns get (wins over app-shell.css by later source order). */
|
|
6161
|
+
.ds-247420 .chat-msg-flat.you .chat-bubble code { background: color-mix(in oklab, var(--fg) 10%, transparent); }
|
|
6162
|
+
/* Flat turns strip the bubble padding, so the role label sat 4px above the first
|
|
6163
|
+
paragraph and the .them tint hugged text flush. Restore reading rhythm + give
|
|
6164
|
+
the tinted assistant row inner breathing room so it reads as a card. */
|
|
6165
|
+
.ds-247420 .chat-msg-flat .chat-role { margin-bottom: var(--space-2); }
|
|
6166
|
+
.ds-247420 .chat-msg-flat .chat-md { line-height: 1.65; }
|
|
6167
|
+
.ds-247420 .chat-msg-flat .chat-md p { margin: 8px 0; }
|
|
6168
|
+
.ds-247420 .chat-msg-flat.them { padding-block: calc(var(--space-3) * var(--density, 1) + 2px); }
|
|
6169
|
+
/* Inline backtick code (renderInline tags <code class=chat-tick>) - was a dead
|
|
6170
|
+
class relying on the generic .chat-bubble code rule, so notices / non-bubble
|
|
6171
|
+
surfaces got unstyled monospace. Self-style it regardless of container. */
|
|
6172
|
+
.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); }
|
|
6173
|
+
/* Structured tool/code output earns more width than running prose (claude.ai/code
|
|
6174
|
+
lets diffs/tables break out wider than the reading measure). A flat turn that
|
|
6175
|
+
contains a tool card or code block widens itself AND its stack past --measure;
|
|
6176
|
+
prose-only turns stay clamped. */
|
|
6177
|
+
.ds-247420 .chat-msg-flat:has(.chat-tool),
|
|
6178
|
+
.ds-247420 .chat-msg-flat:has(.chat-bubble.chat-code) { max-width: calc(var(--measure) + 14ch); }
|
|
6179
|
+
.ds-247420 .chat-msg-flat:has(.chat-tool) .chat-stack,
|
|
6180
|
+
.ds-247420 .chat-msg-flat:has(.chat-bubble.chat-code) .chat-stack { max-width: calc(var(--measure) + 14ch); }
|
|
6034
6181
|
/* Hover tint exceeds each role's REST tint so the row gives feedback (and the
|
|
6035
6182
|
ladder stays monotonic): assistant 5% > its 3% rest; user 4% > transparent. */
|
|
6036
6183
|
.ds-247420 .chat-msg-flat.them:hover { background: color-mix(in oklab, var(--fg) 5%, transparent); }
|
|
6037
6184
|
.ds-247420 .chat-msg-flat.you:hover { background: color-mix(in oklab, var(--fg) 4%, transparent); }
|
|
6185
|
+
/* A turn whose only assistant content is a bordered tool card or code block
|
|
6186
|
+
already carries its own --bg surface + rule border; the turn-level .them tint
|
|
6187
|
+
would stack a second, wider-than-measure surface behind it. Suppress it so the
|
|
6188
|
+
card is the single surface (claude.ai/code keeps tool cards on bare canvas).
|
|
6189
|
+
Selectors mirror the breakout pair above so suppression + widening always
|
|
6190
|
+
cover the same turns. */
|
|
6191
|
+
.ds-247420 .chat-msg-flat.them:has(.chat-tool),
|
|
6192
|
+
.ds-247420 .chat-msg-flat.them:has(.chat-bubble.chat-code),
|
|
6193
|
+
.ds-247420 .chat-msg-flat.them:has(.chat-tool):hover,
|
|
6194
|
+
.ds-247420 .chat-msg-flat.them:has(.chat-bubble.chat-code):hover { background: none; }
|
|
6038
6195
|
.ds-247420 .chat-msg-flat:hover .chat-bubble { transform: none; box-shadow: none; background: none; }
|
|
6039
6196
|
.ds-247420 .chat-msg-flat .chat-avatar { display: none; }
|
|
6040
6197
|
|
|
@@ -6073,7 +6230,9 @@
|
|
|
6073
6230
|
.ds-247420 .chat-msg .chat-tool.tool-done .chat-tool-status { color: var(--success); background: color-mix(in oklab, var(--success) 12%, transparent); }
|
|
6074
6231
|
.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); }
|
|
6075
6232
|
.ds-247420 .chat-tool-section { display: flex; flex-direction: column; gap: var(--space-1); }
|
|
6076
|
-
.ds-247420 .chat-tool-section-label { font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: var(--tr-caps); color: var(--fg-3); }
|
|
6233
|
+
.ds-247420 .chat-tool-section-label { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: var(--tr-caps); color: var(--fg-3); }
|
|
6234
|
+
.ds-247420 .chat-tool-copy { position: static; opacity: 0; }
|
|
6235
|
+
.ds-247420 .chat-tool-section:hover .chat-tool-copy, .ds-247420 .chat-tool-section:focus-within .chat-tool-copy { opacity: 1; }
|
|
6077
6236
|
.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; }
|
|
6078
6237
|
.ds-247420 .chat-tool-pre.is-error { color: var(--flame); }
|
|
6079
6238
|
.ds-247420 .chat-tool-pre.chat-tool-empty { color: var(--fg-3); }
|
|
@@ -6109,6 +6268,11 @@
|
|
|
6109
6268
|
accent), placed last so its inset bar wins source order over is-active/is-stale.
|
|
6110
6269
|
The full-perimeter border-color (line ~396) stays for extra severity emphasis. */
|
|
6111
6270
|
.ds-247420 .ds-dash-card.is-error { box-shadow: inset 2px 0 0 var(--flame); }
|
|
6271
|
+
/* A newly-arrived AND errored card: keep the LEFT inset bar flame (severity
|
|
6272
|
+
precedence, never accent) while restoring the is-new arrival outline as a
|
|
6273
|
+
full-perimeter accent glow that does not collide with the flame bar. Placed
|
|
6274
|
+
after both is-new and is-error so it wins source order. */
|
|
6275
|
+
.ds-247420 .ds-dash-card.is-new.is-error { box-shadow: inset 2px 0 0 var(--flame), 0 0 0 1px color-mix(in oklab, var(--accent) 40%, transparent); }
|
|
6112
6276
|
@media (prefers-reduced-motion: no-preference) {
|
|
6113
6277
|
.ds-247420 .ds-dash-card.is-new { animation: ds-card-in var(--dur-slow) var(--ease); }
|
|
6114
6278
|
}
|
|
@@ -6118,9 +6282,17 @@
|
|
|
6118
6282
|
.ds-247420 .ds-dash-group { display: flex; flex-direction: column; gap: var(--space-2); }
|
|
6119
6283
|
.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
6284
|
.ds-247420 .ds-dash-breakdown { display: flex; align-items: center; gap: var(--space-1); font-size: var(--fs-sm); color: var(--fg-2); }
|
|
6121
|
-
|
|
6122
|
-
|
|
6285
|
+
/* Shape-channel discs mirror the .status-dot-disc vocabulary (solid /
|
|
6286
|
+
solid+halo / hollow ring) so a colour-blind user can scan the breakdown by
|
|
6287
|
+
shape, not hue alone. CSS-drawn discs, not glyphs (glyph policy clean). */
|
|
6288
|
+
.ds-247420 .ds-dash-breakdown .seg { display: inline-flex; align-items: center; gap: var(--space-1); font-weight: 600; }
|
|
6289
|
+
.ds-247420 .ds-dash-breakdown .seg::before { content: ''; width: 7px; height: 7px; border-radius: 50%; flex: none; }
|
|
6290
|
+
.ds-247420 .ds-dash-breakdown .seg.is-running { color: var(--accent); }
|
|
6291
|
+
.ds-247420 .ds-dash-breakdown .seg.is-running::before { background: var(--accent); }
|
|
6292
|
+
.ds-247420 .ds-dash-breakdown .seg.is-error { color: var(--flame); }
|
|
6293
|
+
.ds-247420 .ds-dash-breakdown .seg.is-error::before { background: var(--flame); box-shadow: 0 0 0 1.5px color-mix(in oklab, var(--flame) 38%, transparent); }
|
|
6123
6294
|
.ds-247420 .ds-dash-breakdown .seg.is-idle { color: var(--amber); }
|
|
6295
|
+
.ds-247420 .ds-dash-breakdown .seg.is-idle::before { background: transparent; box-shadow: inset 0 0 0 2px var(--amber); }
|
|
6124
6296
|
.ds-247420 .ds-dash-stream-disc { display: inline-flex; align-items: center; gap: var(--space-1); }
|
|
6125
6297
|
.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
6298
|
.ds-247420 .ds-dash-selectall:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
@@ -6192,6 +6364,21 @@
|
|
|
6192
6364
|
.ds-247420 .agentchat-thread { --measure: 84ch; }
|
|
6193
6365
|
}
|
|
6194
6366
|
|
|
6367
|
+
/* Stop/cancel composer control: re-tone the accent send button as a quiet
|
|
6368
|
+
neutral control so 'stop generating' reads as distinct from accent send.
|
|
6369
|
+
Flame/warn stay reserved (flame=error STATUS, warn=destructive ACTION); a
|
|
6370
|
+
neutral quiet tone is the claude-code-aligned read for an in-flight stop. */
|
|
6371
|
+
.ds-247420 .chat-composer .send.cancel {
|
|
6372
|
+
background: var(--bg-3);
|
|
6373
|
+
color: var(--fg);
|
|
6374
|
+
box-shadow: inset 0 0 0 var(--bw-hair, 1px) var(--rule-strong, var(--rule));
|
|
6375
|
+
}
|
|
6376
|
+
.ds-247420 .chat-composer .send.cancel:hover {
|
|
6377
|
+
background: color-mix(in oklab, var(--fg) 8%, var(--bg-3));
|
|
6378
|
+
filter: none;
|
|
6379
|
+
}
|
|
6380
|
+
.ds-247420 .chat-composer .send.cancel:active { filter: brightness(0.96); }
|
|
6381
|
+
|
|
6195
6382
|
/* editor-primitives.css */
|
|
6196
6383
|
/* editor-primitives.css — chrome for in-engine editors, inspectors, IDEs,
|
|
6197
6384
|
debug HUDs. All rules under .ds-247420 scope (build prefixes). Tokens
|
|
@@ -6394,11 +6581,12 @@
|
|
|
6394
6581
|
font: inherit;
|
|
6395
6582
|
min-width: 0; width: 100%;
|
|
6396
6583
|
}
|
|
6397
|
-
.ds-247420 .ds-ep-propfield-value input:focus,
|
|
6398
|
-
.ds-247420 .ds-ep-propfield-value select:focus,
|
|
6399
|
-
.ds-247420 .ds-ep-propfield-value textarea:focus {
|
|
6584
|
+
.ds-247420 .ds-ep-propfield-value input:focus-visible,
|
|
6585
|
+
.ds-247420 .ds-ep-propfield-value select:focus-visible,
|
|
6586
|
+
.ds-247420 .ds-ep-propfield-value textarea:focus-visible {
|
|
6400
6587
|
outline: none;
|
|
6401
6588
|
border-color: var(--accent);
|
|
6589
|
+
box-shadow: var(--focus-ring-inset);
|
|
6402
6590
|
}
|
|
6403
6591
|
.ds-247420 .ds-ep-propfield-hint {
|
|
6404
6592
|
grid-column: 1 / -1;
|
|
@@ -6442,7 +6630,7 @@
|
|
|
6442
6630
|
font: var(--fs-tiny, 12px)/1.3 var(--ff-mono, monospace);
|
|
6443
6631
|
min-width: 0;
|
|
6444
6632
|
}
|
|
6445
|
-
.ds-247420 .ds-input-bare:focus { outline: none; border-color: var(--accent); }
|
|
6633
|
+
.ds-247420 .ds-input-bare:focus-visible { outline: none; border-color: var(--accent); box-shadow: var(--focus-ring-inset); }
|
|
6446
6634
|
/* A property field whose control spans the full panel width (label above,
|
|
6447
6635
|
control below) — used for wide segmented controls that would clip in the
|
|
6448
6636
|
narrow value column. */
|
|
@@ -7629,10 +7817,10 @@
|
|
|
7629
7817
|
.ds-247420 .health-summary { display: flex; flex-wrap: wrap; gap: .4em; margin: .6em 0; }
|
|
7630
7818
|
.ds-247420 .health-chip {
|
|
7631
7819
|
font-family: var(--ff-mono, ui-monospace, monospace);
|
|
7632
|
-
font-size: .8rem; padding: .15em .55em; border-radius: 6px;
|
|
7820
|
+
font-size: .8rem; padding: .15em .55em; border-radius: var(--r-1, 6px);
|
|
7633
7821
|
background: color-mix(in srgb, var(--fg) 8%, transparent);
|
|
7634
7822
|
color: var(--fg-2);
|
|
7635
|
-
border: 1px solid color-mix(in srgb, var(--fg) 12%, transparent);
|
|
7823
|
+
border: var(--bw-hair, 1px) solid color-mix(in srgb, var(--fg) 12%, transparent);
|
|
7636
7824
|
}
|
|
7637
7825
|
.ds-247420 .health-summary.health-ok .health-chip:first-child {
|
|
7638
7826
|
color: var(--accent);
|
|
@@ -7650,9 +7838,9 @@
|
|
|
7650
7838
|
}
|
|
7651
7839
|
.ds-247420 .cwd-bar-btn {
|
|
7652
7840
|
cursor: pointer; font: inherit; line-height: 1.3;
|
|
7653
|
-
padding: .15em .55em; border-radius: 6px;
|
|
7841
|
+
padding: .15em .55em; border-radius: var(--r-1, 6px);
|
|
7654
7842
|
background: color-mix(in srgb, var(--fg) 8%, transparent);
|
|
7655
|
-
border: 1px solid color-mix(in srgb, var(--fg) 14%, transparent);
|
|
7843
|
+
border: var(--bw-hair, 1px) solid color-mix(in srgb, var(--fg) 14%, transparent);
|
|
7656
7844
|
color: var(--fg-2);
|
|
7657
7845
|
}
|
|
7658
7846
|
.ds-247420 .cwd-bar-btn:hover { background: color-mix(in srgb, var(--fg) 14%, transparent); }
|
|
@@ -7728,10 +7916,35 @@
|
|
|
7728
7916
|
.ds-247420 #app { min-height: auto; display: block; height: auto; }
|
|
7729
7917
|
.ds-247420 .skip-link, .ds-247420 .status-dot, .ds-247420 .history-actions, .ds-247420 .chat-composer { display: none !important; }
|
|
7730
7918
|
.ds-247420 .app, .ds-247420 .app-main, .ds-247420 .panel, .ds-247420 .chat, .ds-247420 .chat-thread {
|
|
7731
|
-
background:
|
|
7919
|
+
background: var(--paper) !important; color: var(--ink) !important; box-shadow: none !important;
|
|
7732
7920
|
}
|
|
7733
7921
|
}
|
|
7734
7922
|
|
|
7923
|
+
/* marketing.css */
|
|
7924
|
+
/* marketing.css — landing / docs site surface family (the agentgui flatspace
|
|
7925
|
+
* site renderer composes these instead of carrying inline style= props). Every
|
|
7926
|
+
* selector is written pre-scoped under `.ds-247420` so the build's selector-
|
|
7927
|
+
* prefixer leaves it untouched (consumers mount on <html class="ds-247420">).
|
|
7928
|
+
* All values read kit tokens — no hardcoded hex, no inline design in the app. */
|
|
7929
|
+
|
|
7930
|
+
.ds-247420 .site-panel { margin: var(--space-2); }
|
|
7931
|
+
|
|
7932
|
+
/* Hero block */
|
|
7933
|
+
.ds-247420 .site-hero { padding: 24px 22px; }
|
|
7934
|
+
.ds-247420 .site-hero-h { margin: 0 0 var(--space-2); }
|
|
7935
|
+
.ds-247420 .site-hero-body { margin: var(--space-2) 0 var(--space-3); color: var(--fg-2); max-width: 64ch; }
|
|
7936
|
+
.ds-247420 .site-chip-row { display: flex; gap: 6px; flex-wrap: wrap; margin: 0 0 var(--space-3); }
|
|
7937
|
+
.ds-247420 .site-cta-row { display: flex; gap: var(--space-2); flex-wrap: wrap; }
|
|
7938
|
+
|
|
7939
|
+
/* Quickstart CLI block — these .cli/.prompt/.cmd nodes were previously unstyled. */
|
|
7940
|
+
.ds-247420 .site-cli { padding: 16px 22px; }
|
|
7941
|
+
.ds-247420 .site-cli .cli { display: flex; gap: var(--space-2); font-family: var(--ff-mono); font-size: var(--fs-sm); padding: 2px 0; }
|
|
7942
|
+
.ds-247420 .site-cli .prompt { color: var(--fg-3); user-select: none; flex: 0 0 auto; }
|
|
7943
|
+
.ds-247420 .site-cli .cmd { color: var(--fg); white-space: pre-wrap; word-break: break-word; }
|
|
7944
|
+
|
|
7945
|
+
/* Embedded legacy doc (iframe wrapper) */
|
|
7946
|
+
.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; }
|
|
7947
|
+
|
|
7735
7948
|
/* spoint/loading-screen.css */
|
|
7736
7949
|
/* Loading-screen kit styles. Scoped under .ds-247420 at build time.
|
|
7737
7950
|
All colors reference design tokens (no raw literals) per the token-lint gate. */
|