anentrypoint-design 0.0.210 → 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 +120 -74
- package/chat.css +94 -20
- package/colors_and_type.css +19 -4
- package/community.css +5 -1
- package/dist/247420.css +489 -100
- package/dist/247420.js +13 -13
- package/package.json +1 -1
- package/src/components/content.js +8 -2
- package/src/components/files.js +24 -28
- package/src/components/sessions.js +9 -4
- package/src/components/shell.js +32 -10
package/app-shell.css
CHANGED
|
@@ -590,8 +590,13 @@ body.canvas-host { background: transparent !important; }
|
|
|
590
590
|
.row.rail-purple::before,
|
|
591
591
|
.row.rail-flame::before { height: 56%; opacity: 1; }
|
|
592
592
|
.row.rail-green::before { background: var(--accent); }
|
|
593
|
-
.row.rail-purple::before { background: var(--purple-2
|
|
593
|
+
.row.rail-purple::before { background: var(--purple-2); }
|
|
594
594
|
.row.rail-flame::before { background: var(--flame); }
|
|
595
|
+
/* Differentiate the rail by SHAPE, not hue alone (color-blind safety): error
|
|
596
|
+
reads as a taller solid bar, subagent as a dashed/gapped fill, ok stays the
|
|
597
|
+
short solid bar. Paired with the sr-only status word emitted by Row(). */
|
|
598
|
+
.row.rail-flame::before { height: 64%; }
|
|
599
|
+
.row.rail-purple::before { background: repeating-linear-gradient(var(--purple-2) 0 4px, transparent 4px 7px); }
|
|
595
600
|
.row-grid { /* explicit grid-template-columns set inline */ }
|
|
596
601
|
/* A row with no leading code/index drops the empty first column so the title
|
|
597
602
|
takes the full width instead of wrapping in the narrow code gutter. */
|
|
@@ -827,8 +832,8 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
827
832
|
border: 0; border-radius: var(--r-2);
|
|
828
833
|
box-shadow: inset 0 0 0 1px var(--rule);
|
|
829
834
|
}
|
|
830
|
-
.row-form input:focus,
|
|
831
|
-
.row-form textarea:focus { box-shadow:
|
|
835
|
+
.row-form input:focus-visible,
|
|
836
|
+
.row-form textarea:focus-visible { box-shadow: var(--focus-ring-inset); }
|
|
832
837
|
|
|
833
838
|
/* Field char counter (TextField maxLength) */
|
|
834
839
|
.ds-field-count {
|
|
@@ -849,9 +854,9 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
849
854
|
Responsive Design — Mobile (480px), Tablet (1024px), Desktop (1440px+)
|
|
850
855
|
============================================================ */
|
|
851
856
|
|
|
852
|
-
/*
|
|
857
|
+
/* --------------------------------------------------------------------
|
|
853
858
|
Mobile Portrait Breakpoint (480px and below)
|
|
854
|
-
|
|
859
|
+
---------------------------------------------------------------------- */
|
|
855
860
|
@media (max-width: 480px) {
|
|
856
861
|
/* App Layout: single-column + drawer is handled once in the ≤900px block;
|
|
857
862
|
no need to re-declare grid-template-columns here (was a redundant !important). */
|
|
@@ -975,9 +980,9 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
975
980
|
.cli .copy { padding: 6px 12px; font-size: var(--fs-micro); }
|
|
976
981
|
}
|
|
977
982
|
|
|
978
|
-
/*
|
|
983
|
+
/* --------------------------------------------------------------------
|
|
979
984
|
Container Query Responsive (720px and below)
|
|
980
|
-
|
|
985
|
+
---------------------------------------------------------------------- */
|
|
981
986
|
@container (max-width: 760px) {
|
|
982
987
|
.app-body { grid-template-columns: 1fr !important; }
|
|
983
988
|
.app-side-shell { border-right: 0; border-bottom: 1px solid var(--rule); }
|
|
@@ -987,9 +992,9 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
987
992
|
.row .sub { grid-column: 1 / -1; order: 3; }
|
|
988
993
|
}
|
|
989
994
|
|
|
990
|
-
/*
|
|
995
|
+
/* --------------------------------------------------------------------
|
|
991
996
|
Tablet Landscape Breakpoint (768px to 1024px)
|
|
992
|
-
|
|
997
|
+
---------------------------------------------------------------------- */
|
|
993
998
|
@media (min-width: 481px) and (max-width: 1024px) {
|
|
994
999
|
/* App Layout — side handled by 900px drawer block; restore for 901-1024 */
|
|
995
1000
|
.app-side a {
|
|
@@ -1066,9 +1071,9 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1066
1071
|
}
|
|
1067
1072
|
}
|
|
1068
1073
|
|
|
1069
|
-
/*
|
|
1074
|
+
/* --------------------------------------------------------------------
|
|
1070
1075
|
Mid Breakpoint (768px and below) — collapse sidebar + simplify row grid
|
|
1071
|
-
|
|
1076
|
+
---------------------------------------------------------------------- */
|
|
1072
1077
|
@media (max-width: 768px) {
|
|
1073
1078
|
/* Sidebar stacks above main rather than sitting beside it */
|
|
1074
1079
|
.app-body { grid-template-columns: 1fr; }
|
|
@@ -1083,9 +1088,9 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1083
1088
|
.row .sub { grid-column: 1 / -1; }
|
|
1084
1089
|
}
|
|
1085
1090
|
|
|
1086
|
-
/*
|
|
1091
|
+
/* --------------------------------------------------------------------
|
|
1087
1092
|
Desktop Breakpoint Enhancements (1025px and up)
|
|
1088
|
-
|
|
1093
|
+
---------------------------------------------------------------------- */
|
|
1089
1094
|
@media (min-width: 1025px) {
|
|
1090
1095
|
/* Chat Bubbles */
|
|
1091
1096
|
.chat-stack { max-width: min(70%, 480px); }
|
|
@@ -1106,7 +1111,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1106
1111
|
.ds-chat-md { font-size: var(--fs-sm); line-height: 1.6; }
|
|
1107
1112
|
.ds-chat-composer { display: flex; gap: 8px; padding: var(--space-4); }
|
|
1108
1113
|
.ds-chat-composer input { flex: 1; padding: 13px 18px; background: var(--bg-2); border: 0; border-radius: var(--r-pill); font-family: inherit; font-size: var(--fs-sm); color: var(--fg); }
|
|
1109
|
-
.ds-chat-composer input:focus { box-shadow:
|
|
1114
|
+
.ds-chat-composer input:focus-visible { box-shadow: var(--focus-ring-inset); }
|
|
1110
1115
|
|
|
1111
1116
|
/* ============================================================
|
|
1112
1117
|
File surface — responsive grid + row layouts
|
|
@@ -1126,13 +1131,15 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1126
1131
|
.ds-file-listing { display: flex; flex-direction: column; gap: var(--space-2); min-height: 0; }
|
|
1127
1132
|
/* The quick filter is a compact control, not a full-width form row - a giant
|
|
1128
1133
|
input above the grid reads as a search page and costs fold height. */
|
|
1129
|
-
|
|
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). */
|
|
1130
1136
|
.ds-file-filter-input {
|
|
1131
1137
|
width: min(280px, 100%); padding: 6px 12px; font-size: var(--fs-sm);
|
|
1132
1138
|
background: var(--bg); color: var(--fg);
|
|
1133
1139
|
border: var(--bw-hair) solid var(--rule); border-radius: var(--r-1);
|
|
1134
1140
|
}
|
|
1135
|
-
.ds-file-filter-input
|
|
1141
|
+
.ds-file-controls .ds-file-filter-input { flex: 0 1 220px; }
|
|
1142
|
+
.ds-file-filter-input:focus-visible { outline: none; box-shadow: var(--focus-ring-inset); }
|
|
1136
1143
|
.ds-file-sort { display: flex; gap: var(--space-2); padding: 0 var(--space-2) var(--space-1); }
|
|
1137
1144
|
.ds-file-sort-btn {
|
|
1138
1145
|
font-size: var(--fs-tiny); font-family: var(--ff-mono); color: var(--fg-3);
|
|
@@ -1253,11 +1260,34 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1253
1260
|
.ds-file-act-warn:hover { background: color-mix(in oklab, var(--warn) 18%, var(--bg)); color: var(--warn); }
|
|
1254
1261
|
|
|
1255
1262
|
/* Multi-select — per-row checkbox, header tri-state, bulk action strip. */
|
|
1263
|
+
/* CSS-drawn multi-select checkbox: a bordered box that fills with the accent +
|
|
1264
|
+
a border-drawn tick when its parent button is .is-marked or aria-checked.
|
|
1265
|
+
Shared by FileRow/FileCell (.is-marked) and the file/session select-all +
|
|
1266
|
+
SessionCard select (aria-checked true/mixed) since the bundle concatenates
|
|
1267
|
+
all CSS. Replaces the old [x]/[ ] bracket text - no glyphs, AT keeps the
|
|
1268
|
+
role=checkbox/aria-checked name+state. */
|
|
1269
|
+
.ds-check-box {
|
|
1270
|
+
width: 15px; height: 15px; box-sizing: border-box; flex: 0 0 auto; position: relative;
|
|
1271
|
+
border: 1.5px solid var(--fg-3); border-radius: 4px;
|
|
1272
|
+
transition: background var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease);
|
|
1273
|
+
}
|
|
1274
|
+
.is-marked > .ds-check-box,
|
|
1275
|
+
[aria-checked="true"] > .ds-check-box { background: var(--accent); border-color: var(--accent); }
|
|
1276
|
+
.is-marked > .ds-check-box::after,
|
|
1277
|
+
[aria-checked="true"] > .ds-check-box::after {
|
|
1278
|
+
content: ""; position: absolute; left: 4px; top: 1px; width: 4px; height: 8px;
|
|
1279
|
+
border: solid var(--bg); border-width: 0 1.5px 1.5px 0; transform: rotate(45deg);
|
|
1280
|
+
}
|
|
1281
|
+
[aria-checked="mixed"] > .ds-check-box { background: var(--accent); border-color: var(--accent); }
|
|
1282
|
+
[aria-checked="mixed"] > .ds-check-box::after {
|
|
1283
|
+
content: ""; position: absolute; left: 3px; right: 3px; top: 6px; height: 2px; background: var(--bg); border-radius: 1px;
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1256
1286
|
.ds-file-check {
|
|
1257
1287
|
display: inline-flex; align-items: center; justify-content: center;
|
|
1258
1288
|
min-width: 28px; height: 28px; padding: 0 4px;
|
|
1259
1289
|
background: transparent; border: 0; border-radius: var(--r-1);
|
|
1260
|
-
|
|
1290
|
+
color: var(--fg-3);
|
|
1261
1291
|
cursor: pointer;
|
|
1262
1292
|
transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
|
|
1263
1293
|
}
|
|
@@ -1282,7 +1312,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1282
1312
|
padding: var(--space-1) var(--space-2);
|
|
1283
1313
|
background: var(--bg-2); border: var(--bw-hair) solid var(--rule); border-radius: var(--r-2);
|
|
1284
1314
|
}
|
|
1285
|
-
.ds-bulkbar-count { font-size: var(--fs-
|
|
1315
|
+
.ds-bulkbar-count { font-size: var(--fs-sm); font-weight: 600; color: var(--fg-2); }
|
|
1286
1316
|
/* BulkBar is a toolbar (it even declares role=toolbar): compact rect buttons,
|
|
1287
1317
|
quiet destructive outline - the app arm-confirms destructive bulk actions
|
|
1288
1318
|
via ConfirmDialog, so the strip never needs a loud CTA. */
|
|
@@ -1348,6 +1378,16 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1348
1378
|
}
|
|
1349
1379
|
.ds-file-cell-media .ds-file-icon { width: 34px; height: 34px; font-size: 24px; }
|
|
1350
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); }
|
|
1351
1391
|
.ds-file-cell-name {
|
|
1352
1392
|
font-size: var(--fs-tiny); text-align: left;
|
|
1353
1393
|
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
@@ -1358,13 +1398,6 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1358
1398
|
background: color-mix(in oklab, var(--bg) 78%, transparent);
|
|
1359
1399
|
}
|
|
1360
1400
|
|
|
1361
|
-
/* Card mode — opt-in via data-columns; switches the list to a grid. */
|
|
1362
|
-
.ds-file-grid[data-columns] { display: grid; gap: var(--space-3); }
|
|
1363
|
-
.ds-file-grid[data-columns="1"] { grid-template-columns: 1fr; }
|
|
1364
|
-
.ds-file-grid[data-columns="2"] { grid-template-columns: repeat(2, 1fr); }
|
|
1365
|
-
.ds-file-grid[data-columns="3"] { grid-template-columns: repeat(3, 1fr); }
|
|
1366
|
-
.ds-file-grid[data-columns="4"] { grid-template-columns: repeat(4, 1fr); }
|
|
1367
|
-
|
|
1368
1401
|
/* ============================================================
|
|
1369
1402
|
File browser surface — stage, toolbar, breadcrumb, dropzone,
|
|
1370
1403
|
upload progress, empty state, modals, preview. Authored for
|
|
@@ -1543,7 +1576,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1543
1576
|
.ds-file-empty-glyph { font-size: 34px; opacity: 0.55; }
|
|
1544
1577
|
.ds-file-empty-text { font-size: var(--fs-sm); }
|
|
1545
1578
|
|
|
1546
|
-
/*
|
|
1579
|
+
/* -- Modals ------------------------------------------------- */
|
|
1547
1580
|
.ds-modal-backdrop {
|
|
1548
1581
|
position: fixed; inset: 0; z-index: var(--z-modal, 800);
|
|
1549
1582
|
display: flex; align-items: center; justify-content: center;
|
|
@@ -1589,7 +1622,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1589
1622
|
border-radius: var(--r-2); color: var(--fg);
|
|
1590
1623
|
font-family: inherit; font-size: var(--fs-sm);
|
|
1591
1624
|
}
|
|
1592
|
-
.ds-modal-input:focus { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
1625
|
+
.ds-modal-input:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
1593
1626
|
/* In-body modal error (role=alert): mutation failures (409/403) surface INSIDE
|
|
1594
1627
|
the dialog, not behind the fixed overlay. */
|
|
1595
1628
|
.ds-modal-error {
|
|
@@ -1604,7 +1637,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1604
1637
|
color: var(--on-color);
|
|
1605
1638
|
}
|
|
1606
1639
|
|
|
1607
|
-
/*
|
|
1640
|
+
/* -- Preview ------------------------------------------------ */
|
|
1608
1641
|
.ds-preview-head {
|
|
1609
1642
|
display: flex; align-items: center; gap: var(--space-3);
|
|
1610
1643
|
padding: var(--space-3) var(--space-4);
|
|
@@ -1677,7 +1710,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1677
1710
|
.ds-file-stage { padding: var(--space-3) var(--space-2); }
|
|
1678
1711
|
}
|
|
1679
1712
|
|
|
1680
|
-
/*
|
|
1713
|
+
/* -- File browser UX affordances ---------------------------- */
|
|
1681
1714
|
/* Toolbar filter input — compact search box. */
|
|
1682
1715
|
.ds-filter-input {
|
|
1683
1716
|
width: clamp(120px, 22vw, 220px);
|
|
@@ -1686,23 +1719,14 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1686
1719
|
border-radius: var(--r-pill); color: var(--fg);
|
|
1687
1720
|
font-family: inherit; font-size: var(--fs-xs);
|
|
1688
1721
|
}
|
|
1689
|
-
.ds-filter-input:focus-visible { outline: none; box-shadow:
|
|
1722
|
+
.ds-filter-input:focus-visible { outline: none; box-shadow: var(--focus-ring-inset); }
|
|
1690
1723
|
|
|
1691
|
-
/* Loading skeleton
|
|
1692
|
-
.ds-file-
|
|
1693
|
-
.ds-file-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
background-size: 200% 100%;
|
|
1698
|
-
}
|
|
1699
|
-
@media (prefers-reduced-motion: no-preference) {
|
|
1700
|
-
.ds-file-skeleton { animation: ds-skeleton-shimmer 1.2s var(--ease) infinite; }
|
|
1701
|
-
}
|
|
1702
|
-
@keyframes ds-skeleton-shimmer {
|
|
1703
|
-
0% { background-position: 200% 0; }
|
|
1704
|
-
100% { background-position: -200% 0; }
|
|
1705
|
-
}
|
|
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. */
|
|
1706
1730
|
|
|
1707
1731
|
/* Drag-to-move drop target highlight on a directory row. */
|
|
1708
1732
|
.ds-file-row.ds-drop-target {
|
|
@@ -1911,6 +1935,13 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1911
1935
|
padding: 10px 12px; border-radius: 6px; overflow-x: auto;
|
|
1912
1936
|
font-family: var(--ff-mono); font-size: 0.9em; margin: 8px 0;
|
|
1913
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; }
|
|
1914
1945
|
|
|
1915
1946
|
.chat-msg .chat-bubble.chat-code,
|
|
1916
1947
|
.chat-msg.you .chat-bubble.chat-code,
|
|
@@ -2209,7 +2240,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
2209
2240
|
.app-side a .glyph { font-family: var(--ff-mono); font-size: 13px; font-weight: 600; color: var(--fg-3); text-align: center; }
|
|
2210
2241
|
.app-side a.active .glyph { color: var(--accent); }
|
|
2211
2242
|
|
|
2212
|
-
/*
|
|
2243
|
+
/* -- select primitive --------------------------------------------------- */
|
|
2213
2244
|
.ds-select {
|
|
2214
2245
|
width: 100%;
|
|
2215
2246
|
min-width: 0;
|
|
@@ -2233,10 +2264,10 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
2233
2264
|
background-repeat: no-repeat;
|
|
2234
2265
|
cursor: pointer;
|
|
2235
2266
|
}
|
|
2236
|
-
.ds-select:focus-visible { box-shadow:
|
|
2267
|
+
.ds-select:focus-visible { box-shadow: var(--focus-ring-inset); }
|
|
2237
2268
|
.ds-select:hover { background-color: var(--bg-3); }
|
|
2238
2269
|
|
|
2239
|
-
/*
|
|
2270
|
+
/* -- chat composer autogrow polish (sizing lives in the primary block) -- */
|
|
2240
2271
|
.chat-composer textarea {
|
|
2241
2272
|
transition: height var(--dur-snap) var(--ease);
|
|
2242
2273
|
}
|
|
@@ -2245,7 +2276,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
2245
2276
|
cursor: not-allowed;
|
|
2246
2277
|
}
|
|
2247
2278
|
|
|
2248
|
-
/*
|
|
2279
|
+
/* -- mobile responsive: chat -------------------------------------------- */
|
|
2249
2280
|
@media (max-width: 768px) {
|
|
2250
2281
|
.chat-stack { max-width: 100%; }
|
|
2251
2282
|
.chat-msg { padding: 4px 0; }
|
|
@@ -2270,9 +2301,9 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
2270
2301
|
Comprehensive improvements for perfect UX across all surfaces
|
|
2271
2302
|
============================================================ */
|
|
2272
2303
|
|
|
2273
|
-
/*
|
|
2304
|
+
/* ------------------------------------------------------------
|
|
2274
2305
|
Component States — Disabled, Loading, Error, Success
|
|
2275
|
-
|
|
2306
|
+
-------------------------------------------------------------- */
|
|
2276
2307
|
|
|
2277
2308
|
/* Disabled state for all interactive elements */
|
|
2278
2309
|
.btn:disabled, .btn-primary:disabled, .btn-ghost:disabled,
|
|
@@ -2324,9 +2355,9 @@ textarea.error {
|
|
|
2324
2355
|
opacity: 0.8;
|
|
2325
2356
|
}
|
|
2326
2357
|
|
|
2327
|
-
/*
|
|
2358
|
+
/* ------------------------------------------------------------
|
|
2328
2359
|
Enhanced Button Micro-Interactions
|
|
2329
|
-
|
|
2360
|
+
-------------------------------------------------------------- */
|
|
2330
2361
|
|
|
2331
2362
|
/* Button scale feedback on active */
|
|
2332
2363
|
.btn:active:not(:disabled),
|
|
@@ -2356,9 +2387,9 @@ input[type="checkbox"], input[type="radio"] {
|
|
|
2356
2387
|
-webkit-touch-callout: none;
|
|
2357
2388
|
}
|
|
2358
2389
|
|
|
2359
|
-
/*
|
|
2390
|
+
/* ------------------------------------------------------------
|
|
2360
2391
|
Drag-and-Drop Styles
|
|
2361
|
-
|
|
2392
|
+
-------------------------------------------------------------- */
|
|
2362
2393
|
|
|
2363
2394
|
/* Draggable element */
|
|
2364
2395
|
[draggable="true"], .draggable {
|
|
@@ -2415,9 +2446,9 @@ input[type="checkbox"], input[type="radio"] {
|
|
|
2415
2446
|
50% { opacity: 1; }
|
|
2416
2447
|
}
|
|
2417
2448
|
|
|
2418
|
-
/*
|
|
2449
|
+
/* ------------------------------------------------------------
|
|
2419
2450
|
Context Menu Styles
|
|
2420
|
-
|
|
2451
|
+
-------------------------------------------------------------- */
|
|
2421
2452
|
|
|
2422
2453
|
.ds-context-menu {
|
|
2423
2454
|
position: absolute;
|
|
@@ -2479,9 +2510,9 @@ input[type="checkbox"], input[type="radio"] {
|
|
|
2479
2510
|
cursor: context-menu;
|
|
2480
2511
|
}
|
|
2481
2512
|
|
|
2482
|
-
/*
|
|
2513
|
+
/* ------------------------------------------------------------
|
|
2483
2514
|
Enhanced Form Inputs
|
|
2484
|
-
|
|
2515
|
+
-------------------------------------------------------------- */
|
|
2485
2516
|
|
|
2486
2517
|
input[type="text"],
|
|
2487
2518
|
input[type="email"],
|
|
@@ -2507,7 +2538,7 @@ textarea::placeholder {
|
|
|
2507
2538
|
color: var(--fg-3);
|
|
2508
2539
|
}
|
|
2509
2540
|
|
|
2510
|
-
/*
|
|
2541
|
+
/* -- Field controls: themed base for TextField / Select / SearchInput --
|
|
2511
2542
|
Root fix: previously only `transition` was set, so themed apps got
|
|
2512
2543
|
browser-default white boxes in dark mode and labels collided with inputs
|
|
2513
2544
|
because `.ds-field` had no layout. */
|
|
@@ -2556,7 +2587,7 @@ textarea::placeholder {
|
|
|
2556
2587
|
.ds-field .ds-select:focus-visible,
|
|
2557
2588
|
.ds-search-input:focus-visible {
|
|
2558
2589
|
outline: none;
|
|
2559
|
-
box-shadow:
|
|
2590
|
+
box-shadow: var(--focus-ring-inset);
|
|
2560
2591
|
}
|
|
2561
2592
|
.ds-field input:disabled,
|
|
2562
2593
|
.ds-field textarea:disabled,
|
|
@@ -2594,9 +2625,9 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
|
|
|
2594
2625
|
color: var(--fg);
|
|
2595
2626
|
}
|
|
2596
2627
|
|
|
2597
|
-
/*
|
|
2628
|
+
/* ------------------------------------------------------------
|
|
2598
2629
|
Accessibility Enhancements
|
|
2599
|
-
|
|
2630
|
+
-------------------------------------------------------------- */
|
|
2600
2631
|
|
|
2601
2632
|
/* Enhanced focus-visible for all interactive elements */
|
|
2602
2633
|
[role="button"]:focus-visible,
|
|
@@ -2625,11 +2656,17 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
|
|
|
2625
2656
|
animation-iteration-count: 1 !important;
|
|
2626
2657
|
transition-duration: 0.01ms !important;
|
|
2627
2658
|
}
|
|
2659
|
+
/* Kill the residual paint frame of looping skeleton/shimmer placeholders and
|
|
2660
|
+
give reduced-motion users a steady placeholder fill instead. */
|
|
2661
|
+
.skeleton, .ds-skeleton, .ds-session-row-skeleton .ds-skel {
|
|
2662
|
+
animation: none !important;
|
|
2663
|
+
background: var(--bg-2) !important;
|
|
2664
|
+
}
|
|
2628
2665
|
}
|
|
2629
2666
|
|
|
2630
|
-
/*
|
|
2667
|
+
/* ------------------------------------------------------------
|
|
2631
2668
|
Performance
|
|
2632
|
-
|
|
2669
|
+
-------------------------------------------------------------- */
|
|
2633
2670
|
|
|
2634
2671
|
/* Limit layout/style containment to self-contained components. `paint` is
|
|
2635
2672
|
intentionally omitted — it clips focus rings, tooltips and dropdowns that
|
|
@@ -2638,9 +2675,9 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
|
|
|
2638
2675
|
contain: layout style;
|
|
2639
2676
|
}
|
|
2640
2677
|
|
|
2641
|
-
/*
|
|
2678
|
+
/* ------------------------------------------------------------
|
|
2642
2679
|
Mobile Touch Optimizations
|
|
2643
|
-
|
|
2680
|
+
-------------------------------------------------------------- */
|
|
2644
2681
|
|
|
2645
2682
|
@media (hover: none) and (pointer: coarse) {
|
|
2646
2683
|
/* Mobile devices: larger touch targets, faster responses */
|
|
@@ -2671,9 +2708,9 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
|
|
|
2671
2708
|
}
|
|
2672
2709
|
}
|
|
2673
2710
|
|
|
2674
|
-
/*
|
|
2711
|
+
/* ------------------------------------------------------------
|
|
2675
2712
|
Theme Transition Smoothness
|
|
2676
|
-
|
|
2713
|
+
-------------------------------------------------------------- */
|
|
2677
2714
|
|
|
2678
2715
|
/* Scoped to the DS wrapper so the design system never reaches out and
|
|
2679
2716
|
animates the host document's html/body. */
|
|
@@ -2682,9 +2719,9 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
|
|
|
2682
2719
|
color var(--dur-base) var(--ease);
|
|
2683
2720
|
}
|
|
2684
2721
|
|
|
2685
|
-
/*
|
|
2722
|
+
/* ------------------------------------------------------------
|
|
2686
2723
|
Empty State & Loading States
|
|
2687
|
-
|
|
2724
|
+
-------------------------------------------------------------- */
|
|
2688
2725
|
|
|
2689
2726
|
.empty-state {
|
|
2690
2727
|
display: flex; flex-direction: column; align-items: center; gap: var(--space-4);
|
|
@@ -2722,9 +2759,9 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
|
|
|
2722
2759
|
.skeleton-line { height: 12px; margin-bottom: 12px; }
|
|
2723
2760
|
.skeleton-title { height: 24px; margin-bottom: 16px; width: 60%; }
|
|
2724
2761
|
|
|
2725
|
-
/*
|
|
2762
|
+
/* ------------------------------------------------------------
|
|
2726
2763
|
Toast Notification Styles
|
|
2727
|
-
|
|
2764
|
+
-------------------------------------------------------------- */
|
|
2728
2765
|
|
|
2729
2766
|
.toast {
|
|
2730
2767
|
position: fixed;
|
|
@@ -3051,6 +3088,15 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
|
|
|
3051
3088
|
.ws-resizer.ws-resizer-rail { grid-column: 1; }
|
|
3052
3089
|
.ws-resizer.ws-resizer-sessions { grid-column: 2; }
|
|
3053
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; } }
|
|
3054
3100
|
/* Ease the rail/pane collapse. Track COUNT stays stable on collapse (only a
|
|
3055
3101
|
width var flips), so grid-template-columns is animatable; reduced-motion
|
|
3056
3102
|
drops it to an instant swap. */
|
|
@@ -3130,7 +3176,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
|
|
|
3130
3176
|
/* Crumb band is the top chrome of the content column: a stable height so the
|
|
3131
3177
|
top edge aligns with the rail head, and a left gutter matching .ws-main so
|
|
3132
3178
|
the trail text is not flush against the rail border. */
|
|
3133
|
-
.ws-crumb { flex: 0 0 auto; min-height: 48px; padding: 0 var(--space-
|
|
3179
|
+
.ws-crumb { flex: 0 0 auto; min-height: 48px; padding: 0 var(--space-5); display: flex; align-items: center; gap: var(--space-1); border-bottom: var(--bw-hair) solid var(--bg-3); }
|
|
3134
3180
|
.ws-crumb-main { flex: 1 1 auto; min-width: 0; }
|
|
3135
3181
|
/* Content column gutter. Claude-Code-class calm: file grid / dashboard / event
|
|
3136
3182
|
list / history get a generous, consistent inner gutter instead of butting
|