anentrypoint-design 0.0.240 → 0.0.241

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/dist/247420.css CHANGED
@@ -202,10 +202,14 @@
202
202
  --rule: color-mix(in oklab, currentColor 14%, transparent);
203
203
  --rule-strong: color-mix(in oklab, currentColor 28%, transparent);
204
204
 
205
+ /* Micro rungs below --r-1 — chips, badges, scrollbar thumbs, tick marks
206
+ genuinely want a tighter corner than 10px; without these two tokens the
207
+ component sheets fell back to raw px literals bypassing the scale. */
208
+ --r-hair: 2px;
209
+ --r-0: 4px;
205
210
  --r-1: 10px;
206
211
  --r-2: 14px;
207
212
  --r-3: 22px;
208
- --r-4: 32px;
209
213
  --r-pill: 999px;
210
214
 
211
215
  --dur-snap: 80ms;
@@ -235,6 +239,10 @@
235
239
  --measure: 68ch;
236
240
  --measure-wide: 940px;
237
241
  --measure-narrow: 760px;
242
+ /* Page-stage ceiling — independent of --measure-wide (which stays the
243
+ narrower editorial hero/prose measure). Fluid so ultra-wide viewports
244
+ actually gain real estate instead of flat-lining at a fixed px cap. */
245
+ --stage-wide: min(96vw, 1440px);
238
246
 
239
247
  --sidebar-width: 220px;
240
248
  --sidebar-width-collapsed: 64px;
@@ -249,8 +257,11 @@
249
257
  /* Unified focus-ring tokens (single source for the design system). Outset
250
258
  rings (the default) tokenize colour+width+offset; bordered text fields use
251
259
  the inset variant. Deliberate negative offsets on edge-flush/clipping
252
- containers stay literal. */
253
- --focus-color: var(--accent);
260
+ containers stay literal. --focus-color uses --accent-ink (the readable
261
+ text/UI-boundary tone), never bare --accent (the lime FILL token, which
262
+ measures ~1.07:1 against --paper and is nearly invisible as an outline —
263
+ see AGENTS.md token-split rule). */
264
+ --focus-color: var(--accent-ink);
254
265
  --focus-w: 2px;
255
266
  --focus-offset: 2px;
256
267
  --focus-ring-inset: inset 0 0 0 var(--focus-w) var(--focus-color);
@@ -275,7 +286,7 @@
275
286
  /* Link focus-visible */
276
287
  .ds-247420 a:focus-visible,
277
288
  .ds-247420[role="link"]:focus-visible {
278
- outline: 2px solid var(--accent);
289
+ outline: 2px solid var(--accent-ink);
279
290
  outline-offset: 2px;
280
291
  }
281
292
 
@@ -283,13 +294,13 @@
283
294
  .ds-247420 input:focus-visible,
284
295
  .ds-247420 textarea:focus-visible,
285
296
  .ds-247420 select:focus-visible {
286
- outline: 2px solid var(--accent);
297
+ outline: 2px solid var(--accent-ink);
287
298
  outline-offset: 2px;
288
299
  }
289
300
 
290
301
  /* Interactive element focus-visible */
291
302
  .ds-247420[tabindex]:focus-visible {
292
- outline: 2px solid var(--accent);
303
+ outline: 2px solid var(--accent-ink);
293
304
  outline-offset: 2px;
294
305
  }
295
306
 
@@ -533,7 +544,7 @@
533
544
  }
534
545
  .ds-247420 .skip-link:focus {
535
546
  top: 10px;
536
- outline: 2px solid var(--accent);
547
+ outline: 2px solid var(--accent-ink);
537
548
  outline-offset: 2px;
538
549
  }
539
550
  .ds-247420 body {
@@ -750,7 +761,7 @@
750
761
  }
751
762
  .ds-247420 .app-topbar nav a:hover { background: var(--bg-2); color: var(--fg); }
752
763
  .ds-247420 .app-topbar nav a:focus-visible {
753
- outline: 2px solid var(--accent);
764
+ outline: 2px solid var(--accent-ink);
754
765
  outline-offset: 2px;
755
766
  }
756
767
  /* Active tab reads as a subtle tinted pill with an accent underline rather than
@@ -786,7 +797,7 @@
786
797
  width: 100%;
787
798
  }
788
799
  .ds-247420 .app-search:focus-within {
789
- outline: 2px solid var(--accent);
800
+ outline: 2px solid var(--accent-ink);
790
801
  outline-offset: 2px;
791
802
  }
792
803
 
@@ -828,7 +839,7 @@
828
839
  }
829
840
  .ds-247420 .app-side a:hover { background: var(--bg-2); color: var(--fg); }
830
841
  .ds-247420 .app-side a:focus-visible {
831
- outline: 2px solid var(--accent);
842
+ outline: 2px solid var(--accent-ink);
832
843
  outline-offset: 2px;
833
844
  }
834
845
  .ds-247420 .app-side a.active {
@@ -951,7 +962,7 @@
951
962
  .ds-247420 .btn-ghost:hover { background: var(--fg); color: var(--bg); }
952
963
  .ds-247420 .btn:active, .ds-247420 .btn-primary:active, .ds-247420 .btn-ghost:active { transform: translateY(2px); }
953
964
  .ds-247420 .btn:focus-visible, .ds-247420 .btn-primary:focus-visible, .ds-247420 .btn-ghost:focus-visible {
954
- outline: 2px solid var(--accent);
965
+ outline: 2px solid var(--accent-ink);
955
966
  outline-offset: 2px;
956
967
  }
957
968
 
@@ -978,7 +989,7 @@
978
989
  .ds-247420 .ds-icon-btn-danger { background: var(--warn); color: var(--on-color); }
979
990
  .ds-247420 .ds-icon-btn-danger:hover { filter: brightness(1.1); }
980
991
  .ds-247420 .ds-icon-btn:active { transform: translateY(1px); }
981
- .ds-247420 .ds-icon-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
992
+ .ds-247420 .ds-icon-btn:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
982
993
  .ds-247420 .ds-icon-btn:disabled, .ds-247420 .ds-icon-btn.is-disabled {
983
994
  opacity: 0.5; cursor: not-allowed; pointer-events: none;
984
995
  }
@@ -990,7 +1001,7 @@
990
1001
  display: inline-flex; align-items: center; justify-content: center;
991
1002
  min-width: 18px; height: 18px; padding: 0 6px;
992
1003
  font-size: var(--fs-micro); font-weight: 600; line-height: 1;
993
- border-radius: 999px;
1004
+ border-radius: var(--r-pill);
994
1005
  background: var(--bg-3); color: var(--fg-2);
995
1006
  }
996
1007
  .ds-247420 .ds-badge.tone-green { background: var(--green-tint); color: var(--green-deep); }
@@ -1202,16 +1213,13 @@
1202
1213
  padding: var(--space-9) 0 var(--space-8);
1203
1214
  display: grid; gap: var(--space-5) var(--space-6);
1204
1215
  grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr);
1205
- grid-template-areas: 'title title' 'body actions' 'badge badge';
1216
+ grid-template-areas: 'title title' 'body actions';
1206
1217
  align-items: end;
1207
1218
  max-width: var(--measure-wide);
1208
1219
  }
1209
1220
  .ds-247420 .ds-hero-head { grid-area: title; display: grid; gap: var(--space-3); }
1210
1221
  .ds-247420 .ds-hero-body { grid-area: body; }
1211
1222
  .ds-247420 .ds-hero-actions { grid-area: actions; }
1212
- /* Badge gets its own row — sharing 'actions' overlapped it onto the CTAs
1213
- whenever a caller passes both actions and badge. */
1214
- .ds-247420 .ds-hero-badge { grid-area: badge; }
1215
1223
  .ds-247420 .ds-hero-title {
1216
1224
  font-family: var(--ff-display); font-weight: 700;
1217
1225
  font-size: clamp(40px, 9cqi, 116px);
@@ -1232,7 +1240,7 @@
1232
1240
  @container (max-width: 900px) {
1233
1241
  .ds-247420 .ds-hero {
1234
1242
  grid-template-columns: minmax(0, 1fr);
1235
- grid-template-areas: 'title' 'body' 'actions' 'badge';
1243
+ grid-template-areas: 'title' 'body' 'actions';
1236
1244
  align-items: start;
1237
1245
  padding: var(--space-7) 0 var(--space-6);
1238
1246
  }
@@ -1406,7 +1414,7 @@
1406
1414
  .ds-247420 table tr.clickable { cursor: pointer; }
1407
1415
  .ds-247420 table tr.clickable:hover td { background: var(--bg-2); }
1408
1416
  .ds-247420 table tr.clickable:focus-visible {
1409
- outline: 2px solid var(--accent);
1417
+ outline: 2px solid var(--accent-ink);
1410
1418
  outline-offset: -2px;
1411
1419
  }
1412
1420
  .ds-247420 table tr.clickable:focus-visible td { background: var(--bg-2); }
@@ -1804,7 +1812,7 @@
1804
1812
  flex-direction: column;
1805
1813
  gap: 4px;
1806
1814
  }
1807
- .ds-247420 .ds-file-grid:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: var(--r-2); }
1815
+ .ds-247420 .ds-file-grid:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; border-radius: var(--r-2); }
1808
1816
 
1809
1817
  /* Listing wrapper holds the optional filter + sort header above the grid. */
1810
1818
  .ds-247420 .ds-file-listing { display: flex; flex-direction: column; gap: var(--space-2); min-height: 0; }
@@ -1826,7 +1834,7 @@
1826
1834
  }
1827
1835
  .ds-247420 .ds-file-sort-btn:hover { color: var(--fg-2); background: var(--bg-2); }
1828
1836
  .ds-247420 .ds-file-sort-btn.active { color: var(--accent-ink); }
1829
- .ds-247420 .ds-file-sort-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
1837
+ .ds-247420 .ds-file-sort-btn:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
1830
1838
 
1831
1839
  /* Skeleton shimmer rows shown while a directory loads. */
1832
1840
  .ds-247420 .ds-file-row-skeleton { cursor: default; pointer-events: none; }
@@ -1874,7 +1882,7 @@
1874
1882
  color: inherit; font: inherit; text-align: left; cursor: pointer;
1875
1883
  }
1876
1884
  .ds-247420 .ds-file-open[disabled] { cursor: default; }
1877
- .ds-247420 .ds-file-open:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: var(--r-1); }
1885
+ .ds-247420 .ds-file-open:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; border-radius: var(--r-1); }
1878
1886
  .ds-247420 .ds-file-row:hover {
1879
1887
  background: var(--bg-2);
1880
1888
  border-color: var(--rule);
@@ -1947,7 +1955,7 @@
1947
1955
  role=checkbox/aria-checked name+state. */
1948
1956
  .ds-247420 .ds-check-box {
1949
1957
  width: 15px; height: 15px; box-sizing: border-box; flex: 0 0 auto; position: relative;
1950
- border: 1.5px solid var(--fg-3); border-radius: 4px;
1958
+ border: 1.5px solid var(--fg-3); border-radius: var(--r-0);
1951
1959
  transition: background var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease);
1952
1960
  }
1953
1961
  .ds-247420 .is-marked > .ds-check-box,
@@ -1959,7 +1967,7 @@
1959
1967
  }
1960
1968
  .ds-247420[aria-checked="mixed"] > .ds-check-box { background: var(--accent); border-color: var(--accent); }
1961
1969
  .ds-247420[aria-checked="mixed"] > .ds-check-box::after {
1962
- content: ""; position: absolute; left: 3px; right: 3px; top: 6px; height: 2px; background: var(--bg); border-radius: 1px;
1970
+ content: ""; position: absolute; left: 3px; right: 3px; top: 6px; height: 2px; background: var(--bg); border-radius: var(--r-hair);
1963
1971
  }
1964
1972
 
1965
1973
  .ds-247420 .ds-file-check {
@@ -1972,7 +1980,7 @@
1972
1980
  }
1973
1981
  .ds-247420 .ds-file-check:hover { background: var(--bg-3); color: var(--fg); }
1974
1982
  .ds-247420 .ds-file-check.is-marked { color: var(--accent-ink); }
1975
- .ds-247420 .ds-file-check:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
1983
+ .ds-247420 .ds-file-check:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
1976
1984
  .ds-247420 .ds-file-check[disabled] { opacity: 0.4; cursor: default; }
1977
1985
  .ds-247420 .ds-file-row.is-marked { background: var(--accent-tint); border-color: var(--accent); }
1978
1986
  .ds-247420 .ds-file-selectall {
@@ -1982,7 +1990,7 @@
1982
1990
  padding: var(--space-1); border-radius: var(--r-1);
1983
1991
  }
1984
1992
  .ds-247420 .ds-file-selectall:hover { background: var(--bg-2); color: var(--fg); }
1985
- .ds-247420 .ds-file-selectall:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
1993
+ .ds-247420 .ds-file-selectall:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
1986
1994
  .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; }
1987
1995
  .ds-247420 .ds-file-controls .spread { flex: 1 1 auto; }
1988
1996
  .ds-247420 .ds-file-controls .ds-file-sort { padding: 0; }
@@ -2020,7 +2028,7 @@
2020
2028
  }
2021
2029
  .ds-247420 .ds-density-btn:hover { color: var(--fg); }
2022
2030
  .ds-247420 .ds-density-btn.active { background: var(--accent-tint); color: var(--fg); }
2023
- .ds-247420 .ds-density-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
2031
+ .ds-247420 .ds-density-btn:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
2024
2032
 
2025
2033
  /* Compact density — tighter rows for long listings. */
2026
2034
  .ds-247420 .ds-file-grid[data-density="compact"] { gap: 2px; }
@@ -2054,7 +2062,7 @@
2054
2062
  background: none; border: none; cursor: pointer; color: var(--fg);
2055
2063
  }
2056
2064
  .ds-247420 .ds-file-cell-open[disabled] { cursor: default; }
2057
- .ds-247420 .ds-file-cell-open:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; border-radius: var(--r-2); }
2065
+ .ds-247420 .ds-file-cell-open:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; border-radius: var(--r-2); }
2058
2066
  .ds-247420 .ds-file-cell-media {
2059
2067
  display: flex; align-items: center; justify-content: center;
2060
2068
  width: 100%; aspect-ratio: 4 / 3;
@@ -2272,7 +2280,7 @@
2272
2280
  color: var(--fg-2); font-family: var(--ff-body); font-size: var(--fs-micro);
2273
2281
  }
2274
2282
  .ds-247420 .ds-upload-act:hover { background: var(--bg-3); color: var(--fg); }
2275
- .ds-247420 .ds-upload-act:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
2283
+ .ds-247420 .ds-upload-act:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
2276
2284
  @media (hover: none), (pointer: coarse) {
2277
2285
  .ds-247420 .ds-upload-act { min-height: 44px; min-width: 44px; }
2278
2286
  /* 44px floor for file controls on ANY touch device, not only narrow ones
@@ -2343,7 +2351,7 @@
2343
2351
  border-radius: var(--r-2); color: var(--fg);
2344
2352
  font-family: inherit; font-size: var(--fs-sm);
2345
2353
  }
2346
- .ds-247420 .ds-modal-input:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
2354
+ .ds-247420 .ds-modal-input:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
2347
2355
  /* iOS auto-zooms inputs under 16px on focus, breaking the modal layout. */
2348
2356
  @media (hover: none), (pointer: coarse) {
2349
2357
  .ds-247420 .ds-modal-input { font-size: 16px; min-height: 44px; }
@@ -2507,7 +2515,7 @@
2507
2515
  .ds-247420 .ds-kbd-sep { color: var(--fg-3); font-size: var(--fs-micro); padding: 0 2px; }
2508
2516
  .ds-247420 .ds-kbd {
2509
2517
  display: inline-block; min-width: 0;
2510
- padding: 2px 7px; border-radius: 6px;
2518
+ padding: 2px 7px; border-radius: var(--r-0);
2511
2519
  background: var(--bg); border: var(--bw-hair) solid var(--rule);
2512
2520
  border-bottom-width: 2px;
2513
2521
  font-family: var(--ff-mono); font-size: var(--fs-micro); color: var(--fg-2);
@@ -2529,7 +2537,7 @@
2529
2537
  transition: color var(--dur-base) var(--ease), background var(--dur-base) var(--ease);
2530
2538
  }
2531
2539
  .ds-247420 .ds-segmented .ds-seg-btn:hover { color: var(--fg); }
2532
- .ds-247420 .ds-segmented .ds-seg-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
2540
+ .ds-247420 .ds-segmented .ds-seg-btn:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
2533
2541
  .ds-247420 .ds-segmented .ds-seg-btn.is-on {
2534
2542
  background: var(--bg); color: var(--fg);
2535
2543
  box-shadow: inset 0 0 0 var(--bw-hair, 1px) var(--rule);
@@ -2583,7 +2591,7 @@
2583
2591
  .ds-247420 .chat-thread { scroll-behavior: smooth; }
2584
2592
  }
2585
2593
  .ds-247420 .chat-thread::-webkit-scrollbar { width: 8px; }
2586
- .ds-247420 .chat-thread::-webkit-scrollbar-thumb { background: var(--bg-3); border-radius: 4px; }
2594
+ .ds-247420 .chat-thread::-webkit-scrollbar-thumb { background: var(--bg-3); border-radius: var(--r-0); }
2587
2595
  .ds-247420 .chat-empty {
2588
2596
  margin: auto;
2589
2597
  text-align: center;
@@ -2597,7 +2605,7 @@
2597
2605
  .ds-247420 .chat-msg { display: flex; gap: 12px; align-items: flex-start; padding: 6px 0; position: relative; min-width: 0; }
2598
2606
  .ds-247420 .chat-msg.you { flex-direction: row-reverse; }
2599
2607
  .ds-247420 .chat-msg.you .chat-stack { align-items: flex-end; }
2600
- .ds-247420 .chat-msg:hover { background: color-mix(in oklab, var(--fg) 4%, transparent); padding: 6px 0; margin: 0; border-radius: 8px; transition: background var(--dur-base) var(--ease); }
2608
+ .ds-247420 .chat-msg:hover { background: color-mix(in oklab, var(--fg) 4%, transparent); padding: 6px 0; margin: 0; border-radius: var(--r-0); transition: background var(--dur-base) var(--ease); }
2601
2609
 
2602
2610
  .ds-247420 .chat-avatar {
2603
2611
  width: 36px; height: 36px; flex-shrink: 0;
@@ -2643,7 +2651,7 @@
2643
2651
  .ds-247420 .chat-bubble code {
2644
2652
  font-family: var(--ff-mono); font-size: 0.92em;
2645
2653
  background: color-mix(in oklab, var(--fg) 10%, transparent);
2646
- padding: 1px 6px; border-radius: 4px;
2654
+ padding: 1px 6px; border-radius: var(--r-0);
2647
2655
  }
2648
2656
  .ds-247420 .chat-msg.you .chat-bubble code { background: color-mix(in oklab, var(--fg) 10%, transparent); }
2649
2657
  .ds-247420 .chat-bubble a {
@@ -2754,7 +2762,7 @@
2754
2762
  .ds-247420 .chat-msg.you .chat-image,
2755
2763
  .ds-247420 .chat-msg .chat-image,
2756
2764
  .ds-247420 .chat-image {
2757
- display: inline-block; border-radius: 12px; overflow: hidden;
2765
+ display: inline-block; border-radius: var(--r-1); overflow: hidden;
2758
2766
  max-width: min(100%, 480px); background: var(--bg-2);
2759
2767
  text-decoration: none; color: var(--fg);
2760
2768
  border: 1px solid color-mix(in oklab, var(--fg) 10%, transparent);
@@ -2773,7 +2781,7 @@
2773
2781
  .ds-247420 .chat-file {
2774
2782
  display: flex; align-items: center; gap: 12px; padding: 12px 14px;
2775
2783
  background: var(--bg-2); border: 1px solid color-mix(in oklab, var(--fg) 10%, transparent);
2776
- border-radius: 12px; text-decoration: none; color: var(--fg);
2784
+ border-radius: var(--r-1); text-decoration: none; color: var(--fg);
2777
2785
  max-width: min(100%, 360px);
2778
2786
  transition: background var(--dur-snap, .15s) var(--ease, ease), border-color var(--dur-snap, .15s) var(--ease, ease);
2779
2787
  }
@@ -2782,7 +2790,7 @@
2782
2790
  font-size: 22px; width: 36px; height: 36px;
2783
2791
  display: inline-flex; align-items: center; justify-content: center;
2784
2792
  background: color-mix(in oklab, var(--accent) 18%, transparent);
2785
- color: var(--accent-ink); border-radius: 8px; flex-shrink: 0; font-family: var(--ff-mono);
2793
+ color: var(--accent-ink); border-radius: var(--r-0); flex-shrink: 0; font-family: var(--ff-mono);
2786
2794
  }
2787
2795
  .ds-247420 .chat-file > div { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
2788
2796
  .ds-247420 .chat-file .name {
@@ -2800,7 +2808,7 @@
2800
2808
  background: var(--bg-2);
2801
2809
  color: var(--fg);
2802
2810
  border: 1px solid color-mix(in oklab, var(--fg) 10%, transparent);
2803
- border-radius: 12px; overflow: hidden; max-width: min(100%, 480px);
2811
+ border-radius: var(--r-1); overflow: hidden; max-width: min(100%, 480px);
2804
2812
  transition: box-shadow 0.12s ease, border-color 0.12s ease;
2805
2813
  }
2806
2814
  .ds-247420 .chat-msg:hover .chat-pdf { border-color: color-mix(in oklab, var(--accent) 30%, transparent); }
@@ -2823,7 +2831,7 @@
2823
2831
  display: grid; grid-template-columns: 80px 1fr; gap: 12px; padding: 10px;
2824
2832
  background: var(--bg-2);
2825
2833
  border: 1px solid color-mix(in oklab, var(--fg) 10%, transparent);
2826
- border-radius: 12px; text-decoration: none; color: var(--fg);
2834
+ border-radius: var(--r-1); text-decoration: none; color: var(--fg);
2827
2835
  max-width: min(100%, 480px);
2828
2836
  transition: background var(--dur-snap, .15s) var(--ease, ease), border-color var(--dur-snap, .15s) var(--ease, ease), box-shadow 0.15s ease;
2829
2837
  }
@@ -2834,7 +2842,7 @@
2834
2842
  }
2835
2843
  .ds-247420 .chat-link:not(:has(.thumb)):not(:has(img)) { grid-template-columns: 1fr; }
2836
2844
  .ds-247420 .chat-link .thumb,
2837
- .ds-247420 .chat-link img.thumb { width: 80px; height: 80px; border-radius: 8px; object-fit: cover; background: var(--bg-3) center/cover no-repeat; }
2845
+ .ds-247420 .chat-link img.thumb { width: 80px; height: 80px; border-radius: var(--r-0); object-fit: cover; background: var(--bg-3) center/cover no-repeat; }
2838
2846
  .ds-247420 .chat-link .meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
2839
2847
  .ds-247420 .chat-link .host { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); text-transform: lowercase; }
2840
2848
  .ds-247420 .chat-link .title { font-weight: 600; font-size: var(--fs-sm); line-height: 1.3; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
@@ -2858,7 +2866,7 @@
2858
2866
  display: inline-flex; align-items: center; gap: 4px;
2859
2867
  padding: 2px 8px; background: var(--bg-2);
2860
2868
  border: 1px solid color-mix(in oklab, var(--fg) 10%, transparent);
2861
- border-radius: 999px; font-size: var(--fs-xs);
2869
+ border-radius: var(--r-pill); font-size: var(--fs-xs);
2862
2870
  cursor: pointer; user-select: none;
2863
2871
  transition: background var(--dur-snap, .12s) var(--ease, ease), border-color var(--dur-snap, .12s) var(--ease, ease), transform 0.12s ease;
2864
2872
  position: relative;
@@ -2979,7 +2987,7 @@
2979
2987
  .ds-247420 .chat-composer .send:active { filter: brightness(0.94); }
2980
2988
  .ds-247420 .chat-composer .send:focus-visible,
2981
2989
  .ds-247420 .composer-btn:focus-visible {
2982
- outline: 2px solid var(--accent);
2990
+ outline: 2px solid var(--accent-ink);
2983
2991
  outline-offset: 2px;
2984
2992
  }
2985
2993
  .ds-247420 .chat-composer .send:disabled {
@@ -3091,8 +3099,12 @@
3091
3099
  Component States — Disabled, Loading, Error, Success
3092
3100
  -------------------------------------------------------------- */
3093
3101
 
3094
- /* Disabled state for all interactive elements */
3095
- .ds-247420 .btn:disabled, .ds-247420 .btn-primary:disabled, .ds-247420 .btn-ghost:disabled, .ds-247420 button:disabled, .ds-247420[disabled] {
3102
+ /* Disabled state for all interactive elements. The `.is-disabled` class
3103
+ variants cover Btn()'s anchor-rendered case (shell.js) an <a> has no
3104
+ :disabled pseudo-class, so a disabled link-styled button relies entirely
3105
+ on this class selector for its visual treatment (aria-disabled + tabindex
3106
+ are set in JS; this is the paired CSS half). */
3107
+ .ds-247420 .btn:disabled, .ds-247420 .btn-primary:disabled, .ds-247420 .btn-ghost:disabled, .ds-247420 .btn.is-disabled, .ds-247420 .btn-primary.is-disabled, .ds-247420 .btn-ghost.is-disabled, .ds-247420 button:disabled, .ds-247420[disabled] {
3096
3108
  opacity: 0.6;
3097
3109
  cursor: not-allowed;
3098
3110
  pointer-events: none;
@@ -3422,7 +3434,7 @@
3422
3434
 
3423
3435
  /* Base focus-visible: 2px ring + 2px offset clears dark bg-3 surfaces (WCAG 1.4.11) */
3424
3436
  .ds-247420 :focus-visible {
3425
- outline: 2px solid var(--accent);
3437
+ outline: 2px solid var(--accent-ink);
3426
3438
  outline-offset: 2px;
3427
3439
  }
3428
3440
 
@@ -3432,7 +3444,7 @@
3432
3444
  .ds-247420[role="tab"]:focus-visible,
3433
3445
  .ds-247420 .row:focus-visible,
3434
3446
  .ds-247420 .row[tabindex]:focus-visible {
3435
- outline: 2px solid var(--accent);
3447
+ outline: 2px solid var(--accent-ink);
3436
3448
  outline-offset: 2px;
3437
3449
  }
3438
3450
 
@@ -3819,7 +3831,7 @@
3819
3831
  border-radius: var(--r-1, 6px);
3820
3832
  cursor: pointer;
3821
3833
  }
3822
- .ds-247420 .app-side-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
3834
+ .ds-247420 .app-side-toggle:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
3823
3835
  @container (max-width: 900px) {
3824
3836
  .ds-247420 .app-side-toggle { display: inline-flex; }
3825
3837
  .ds-247420 .app-topbar .brand { margin-left: 44px; }
@@ -3909,7 +3921,7 @@
3909
3921
  .ds-247420 .ws-resizer { grid-row: 1 / -1; align-self: stretch; justify-self: end; width: 8px; margin-right: -4px; z-index: 5; cursor: col-resize; background: transparent; border: none; padding: 0; touch-action: none; }
3910
3922
  .ds-247420 .ws-resizer::after { content: ""; display: block; width: 2px; height: 100%; margin: 0 auto; background: transparent; transition: background var(--dur-snap) var(--ease); }
3911
3923
  .ds-247420 .ws-resizer:hover::after, .ds-247420 .ws-resizer:focus-visible::after { background: var(--accent); }
3912
- .ds-247420 .ws-resizer:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
3924
+ .ds-247420 .ws-resizer:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; }
3913
3925
  .ds-247420 .ws-resizer.ws-resizer-rail { grid-column: 1; }
3914
3926
  .ds-247420 .ws-resizer.ws-resizer-sessions { grid-column: 2; }
3915
3927
  .ds-247420 .ws-resizer.ws-resizer-pane { grid-column: 3; justify-self: end; }
@@ -3961,7 +3973,7 @@
3961
3973
  border-radius: var(--r-1); cursor: pointer;
3962
3974
  }
3963
3975
  .ds-247420 .ws-rail-toggle:hover { background: var(--bg-3); color: var(--fg); }
3964
- .ds-247420 .ws-rail-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
3976
+ .ds-247420 .ws-rail-toggle:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
3965
3977
  .ds-247420 .ws-rail-inner { display: flex; flex-direction: column; min-height: 0; flex: 1; padding: var(--space-3) var(--space-2); gap: var(--space-2); }
3966
3978
  .ds-247420 .ws-rail-head { display: flex; align-items: center; min-height: 36px; padding: 0 var(--space-2); }
3967
3979
  .ds-247420 .ws-rail-brand { font-family: var(--ff-body); font-weight: 600; font-size: var(--fs-body); color: var(--fg); white-space: nowrap; overflow: hidden; }
@@ -3974,7 +3986,7 @@
3974
3986
  min-height: 40px; white-space: nowrap; overflow: hidden;
3975
3987
  }
3976
3988
  .ds-247420 .ws-rail-action:hover { filter: brightness(1.08); }
3977
- .ds-247420 .ws-rail-action:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
3989
+ .ds-247420 .ws-rail-action:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
3978
3990
  .ds-247420 .ws-rail-nav { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; }
3979
3991
  .ds-247420 .ws-rail-item {
3980
3992
  display: flex; align-items: center; gap: var(--space-2);
@@ -3984,7 +3996,7 @@
3984
3996
  font-family: var(--ff-body); font-size: var(--fs-sm); white-space: nowrap; overflow: hidden;
3985
3997
  }
3986
3998
  .ds-247420 .ws-rail-item:hover { background: var(--bg-3); color: var(--fg); }
3987
- .ds-247420 .ws-rail-item:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
3999
+ .ds-247420 .ws-rail-item:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; }
3988
4000
  .ds-247420 .ws-rail-item.active { background: var(--accent-tint); color: var(--fg); box-shadow: inset 2px 0 0 var(--accent); }
3989
4001
  .ds-247420 .ws-rail-item-label { flex: 1; overflow: hidden; text-overflow: ellipsis; }
3990
4002
  .ds-247420 .ws-rail-item-count { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3); }
@@ -4057,7 +4069,7 @@
4057
4069
  /* Desktop-only chrome toggle (sessions collapse): inverse of the mobile drawer-toggle. */
4058
4070
  .ds-247420 .ws-desktop-toggle { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; border: none; background: none; color: var(--fg-2); cursor: pointer; border-radius: var(--r-1); }
4059
4071
  .ds-247420 .ws-desktop-toggle:hover { background: var(--bg-2); color: var(--fg); }
4060
- .ds-247420 .ws-desktop-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
4072
+ .ds-247420 .ws-desktop-toggle:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
4061
4073
  @media (max-width: 900px) { .ds-247420 .ws-desktop-toggle { display: none; } }
4062
4074
  /* The pane collapse toggle is meaningless once the pane TRACK is dropped (the
4063
4075
  pane becomes a mobile overlay drawer at <=1480px, reached via its own
@@ -4181,7 +4193,7 @@
4181
4193
  .ds-247420 .ws-crumb .app-crumb .crumb-right { margin-left: 0; flex-wrap: wrap; min-width: 0; display: inline-flex; }
4182
4194
  }
4183
4195
  .ds-247420 .ws-drawer-toggle:hover { background: var(--bg-2); color: var(--fg); }
4184
- .ds-247420 .ws-drawer-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
4196
+ .ds-247420 .ws-drawer-toggle:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
4185
4197
 
4186
4198
  @media (prefers-reduced-motion: reduce) {
4187
4199
  .ds-247420 .ws-shell, .ds-247420 .ws-rail, .ds-247420 .ws-pane, .ds-247420 .ws-sessions, .ds-247420 .ws-scrim { transition: none; }
@@ -4193,7 +4205,7 @@
4193
4205
  ============================================================ */
4194
4206
 
4195
4207
  /* Highlighted match inside a Row title (Row `highlight` prop). */
4196
- .ds-247420 .ds-hl { background: color-mix(in oklab, var(--accent) 25%, transparent); color: inherit; border-radius: 2px; }
4208
+ .ds-247420 .ds-hl { background: color-mix(in oklab, var(--accent) 25%, transparent); color: inherit; border-radius: var(--r-hair); }
4197
4209
 
4198
4210
  /* Action strip rendered inside an EXPANDED Row (Row `actions` prop). The
4199
4211
  buttons stop propagation so they never fire the row onClick. */
@@ -4206,20 +4218,20 @@
4206
4218
  transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
4207
4219
  }
4208
4220
  .ds-247420 .row-act:hover { background: var(--bg-3); color: var(--fg); }
4209
- .ds-247420 .row-act:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
4221
+ .ds-247420 .row-act:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
4210
4222
 
4211
4223
  /* FilterPills - a group of pill toggle buttons (aria-pressed). */
4212
4224
  .ds-247420 .ds-filter-pills { display: flex; flex-wrap: wrap; gap: var(--space-2); }
4213
4225
  .ds-247420 .ds-filter-pill {
4214
4226
  display: inline-flex; align-items: center; justify-content: center;
4215
4227
  padding: 4px 12px; min-height: 28px;
4216
- background: var(--bg-2); border: var(--bw-hair) solid var(--bg-3); border-radius: 999px;
4228
+ background: var(--bg-2); border: var(--bw-hair) solid var(--bg-3); border-radius: var(--r-pill);
4217
4229
  color: var(--fg-2); font-family: var(--ff-body); font-size: var(--fs-tiny); cursor: pointer;
4218
4230
  transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
4219
4231
  }
4220
4232
  .ds-247420 .ds-filter-pill:hover { background: var(--bg-3); color: var(--fg); }
4221
4233
  .ds-247420 .ds-filter-pill.active { background: var(--accent-tint); color: var(--fg); border-color: var(--accent); }
4222
- .ds-247420 .ds-filter-pill:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
4234
+ .ds-247420 .ds-filter-pill:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
4223
4235
 
4224
4236
  /* Touch floor for the new small controls. */
4225
4237
  @media (pointer: coarse) {
@@ -4229,7 +4241,7 @@
4229
4241
  /* Disabled file actions (read-only row / in-flight mutation) stay visible but inert. */
4230
4242
  .ds-247420 .ds-file-act:disabled { opacity: .45; cursor: default; }
4231
4243
  .ds-247420 .ds-file-act:disabled:hover { background: transparent; color: var(--fg-3); }
4232
- .ds-247420 .ds-file-act:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
4244
+ .ds-247420 .ds-file-act:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
4233
4245
 
4234
4246
  /* ============================================================
4235
4247
  Print — linearize WorkspaceShell so main content prints in full.
@@ -4279,7 +4291,7 @@
4279
4291
  /* PhaseWalk */
4280
4292
  .ds-247420 .ds-phasewalk { display: inline-flex; gap: 2px; vertical-align: middle; }
4281
4293
  .ds-247420 .ds-phasewalk-seg {
4282
- width: 18px; height: 10px; border-radius: 2px;
4294
+ width: 18px; height: 10px; border-radius: var(--r-hair);
4283
4295
  background: var(--bg-3); position: relative;
4284
4296
  }
4285
4297
  .ds-247420 .ds-phasewalk-seg.is-reached { background: var(--success); }
@@ -4318,8 +4330,8 @@
4318
4330
  /* BarRow */
4319
4331
  .ds-247420 .ds-bar-row { display: flex; align-items: center; gap: 8px; margin: 3px 0; font-size: var(--fs-tiny); }
4320
4332
  .ds-247420 .ds-bar-row-label { width: 100px; flex-shrink: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
4321
- .ds-247420 .ds-bar-bg { flex: 1; min-width: 60px; background: var(--bg-3); border-radius: 2px; height: 6px; overflow: hidden; }
4322
- .ds-247420 .ds-bar-fill { background: var(--accent); height: 100%; border-radius: 2px; }
4333
+ .ds-247420 .ds-bar-bg { flex: 1; min-width: 60px; background: var(--bg-3); border-radius: var(--r-hair); height: 6px; overflow: hidden; }
4334
+ .ds-247420 .ds-bar-fill { background: var(--accent); height: 100%; border-radius: var(--r-hair); }
4323
4335
  .ds-247420 .ds-bar-row-value { flex-shrink: 0; color: var(--fg-2); max-width: 40%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
4324
4336
  @media (max-width: 400px) {
4325
4337
  .ds-247420 .ds-bar-row-label { width: 72px; }
@@ -4334,7 +4346,7 @@
4334
4346
  .ds-247420 .ds-stats-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-1); }
4335
4347
  }
4336
4348
  .ds-247420 .ds-stats-grid-empty { padding: var(--space-3); color: var(--fg-3); font-size: var(--fs-tiny); }
4337
- .ds-247420 .ds-stat { min-width: 0; background: var(--bg-3); border-radius: 4px; padding: 10px 12px; }
4349
+ .ds-247420 .ds-stat { min-width: 0; background: var(--bg-3); border-radius: var(--r-0); padding: 10px 12px; }
4338
4350
  .ds-247420 .ds-stat-val { font-size: clamp(18px, 5cqi, 22px); font-weight: 700; color: var(--accent-ink); overflow-wrap: anywhere; }
4339
4351
  .ds-247420 .ds-stat-val.rate-big { font-size: clamp(24px, 7cqi, 32px); color: var(--success); }
4340
4352
  .ds-247420 .ds-stat-val.err-rate { font-size: clamp(24px, 7cqi, 32px); color: var(--warn); }
@@ -4345,7 +4357,7 @@
4345
4357
  .ds-247420 .ds-sub-grid-empty { padding: var(--space-3); color: var(--fg-3); font-size: var(--fs-tiny); }
4346
4358
  .ds-247420 .ds-sub-btn {
4347
4359
  padding: 6px 10px; background: var(--bg-3); border: var(--bw-hair) solid var(--bg-3);
4348
- border-radius: 4px; font-size: var(--fs-tiny); cursor: pointer; color: var(--fg);
4360
+ border-radius: var(--r-0); font-size: var(--fs-tiny); cursor: pointer; color: var(--fg);
4349
4361
  text-align: left; font-family: var(--ff-body);
4350
4362
  }
4351
4363
  .ds-247420 .ds-sub-btn:hover { border-color: var(--accent); color: var(--accent-ink); }
@@ -4376,7 +4388,7 @@
4376
4388
  /* DevRow */
4377
4389
  .ds-247420 .ds-dev-row {
4378
4390
  background: var(--danger-surface); border-left: var(--bw-chunk) solid var(--warn);
4379
- padding: 8px 12px; margin: 4px 0; border-radius: 3px; font-size: var(--fs-tiny);
4391
+ padding: 8px 12px; margin: 4px 0; border-radius: var(--r-hair); font-size: var(--fs-tiny);
4380
4392
  }
4381
4393
  .ds-247420 .ds-dev-row strong { color: var(--warn); }
4382
4394
 
@@ -4396,7 +4408,7 @@
4396
4408
  .ds-247420 .ds-live-log-entry { padding: 2px 8px; border-bottom: var(--bw-hair) solid var(--bg-3); overflow-wrap: anywhere; }
4397
4409
  .ds-247420 .ds-live-log-entry:hover { background: var(--bg-3); }
4398
4410
  .ds-247420 .ds-live-log-ts { margin-right: 6px; color: var(--fg-3); }
4399
- .ds-247420 .ds-live-log-subtag { margin-right: 6px; padding: 0 5px; border-radius: 2px; font-size: var(--fs-micro); }
4411
+ .ds-247420 .ds-live-log-subtag { margin-right: 6px; padding: 0 5px; border-radius: var(--r-hair); font-size: var(--fs-micro); }
4400
4412
  .ds-247420 .ds-live-log-preview { margin-left: 6px; color: var(--fg-3); word-break: break-word; }
4401
4413
 
4402
4414
  /* Touch floors for the dense controls (not covered by the mobile width blocks). */
@@ -4432,6 +4444,13 @@
4432
4444
  @media (max-width: 760px) {
4433
4445
  .ds-247420 .ds-panel-duo { grid-template-columns: 1fr; }
4434
4446
  }
4447
+ /* Wide-viewport density: auto-fit grid so panel COUNT tracks actual children
4448
+ instead of a hardcoded column number — 2 children sit 2-up, 5 wrap to a
4449
+ third row, never an arbitrary 3-card reflex (same auto-fit/minmax pattern
4450
+ as .ds-tile-grid). Panels floor at 280px before wrapping, so ultra-wide
4451
+ screens still get more columns than a fixed repeat(3, ...) ever allowed. */
4452
+ .ds-247420 .ds-panel-trio { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr)); gap: var(--space-2); margin: var(--space-2) 0; }
4453
+ .ds-247420 .ds-panel-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: var(--space-2); margin: var(--space-2) 0; }
4435
4454
  /* wide dense rows/tables scroll inside their panel, never the page */
4436
4455
  .ds-247420 .ds-scroll-x { overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 100%; }
4437
4456
 
@@ -4442,7 +4461,7 @@
4442
4461
  max-width: min(1100px, 100%);
4443
4462
  margin: var(--space-3) auto;
4444
4463
  background: var(--bg-2);
4445
- border-radius: 18px;
4464
+ border-radius: var(--r-2);
4446
4465
  padding: clamp(16px, 5vw, 64px);
4447
4466
  box-sizing: border-box;
4448
4467
  display: flex;
@@ -4504,7 +4523,7 @@
4504
4523
  .ds-247420 .ds-slide-split { grid-template-columns: 1fr; }
4505
4524
  }
4506
4525
  .ds-247420 .ds-slide-split-cell {
4507
- padding: 18px; background: var(--bg-2); border-radius: 14px;
4526
+ padding: 18px; background: var(--bg-2); border-radius: var(--r-2);
4508
4527
  color: var(--fg-2); font-size: var(--fs-lg); line-height: var(--lh-base); min-width: 0;
4509
4528
  }
4510
4529
  .ds-247420 .ds-slide-split-cell--accent { border-left: 3px solid var(--slide-accent, var(--accent)); }
@@ -4521,7 +4540,7 @@
4521
4540
  .ds-247420 .ds-err-path {
4522
4541
  display: inline-flex; gap: 6px; align-items: baseline; flex-wrap: wrap; max-width: 100%;
4523
4542
  font-family: var(--ff-mono); font-size: 13px; color: var(--panel-text-2);
4524
- background: var(--panel-1); padding: 6px 12px; border-radius: 8px;
4543
+ background: var(--panel-1); padding: 6px 12px; border-radius: var(--r-0);
4525
4544
  overflow-wrap: anywhere; word-break: break-all;
4526
4545
  }
4527
4546
 
@@ -4537,10 +4556,15 @@
4537
4556
  }
4538
4557
  .ds-247420 .ds-gallery-tile {
4539
4558
  cursor: pointer; display: flex; flex-direction: column; gap: 6px;
4540
- padding: 12px; border-radius: 10px; min-height: clamp(120px, 18vw, 160px);
4559
+ padding: 12px; border-radius: var(--r-1); min-height: clamp(120px, 18vw, 160px);
4541
4560
  border: 0; text-align: left; font: inherit; color: inherit;
4542
4561
  background: var(--tile-tone, var(--panel-1));
4562
+ transition: transform var(--dur-base) var(--ease), box-shadow var(--dur-base) var(--ease);
4543
4563
  }
4564
+ /* Flat tonal fill only (house style: no bespoke tile chrome, no borders — see
4565
+ .ds-feature above), so the hover affordance is a lift, matching the same
4566
+ translateY + shadow idiom .chat-msg:hover .chat-bubble already uses. */
4567
+ .ds-247420 .ds-gallery-tile:hover { transform: translateY(-2px); box-shadow: 0 2px 8px color-mix(in oklab, var(--fg) 10%, transparent); }
4544
4568
  .ds-247420 .ds-gallery-tile:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
4545
4569
  .ds-247420 .ds-gallery-tile--tight { min-height: clamp(96px, 14vw, 120px); }
4546
4570
  .ds-247420 .ds-lightbox {
@@ -4551,7 +4575,7 @@
4551
4575
  z-index: 50;
4552
4576
  }
4553
4577
  .ds-247420 .ds-lightbox-card {
4554
- background: var(--panel-0); border-radius: 14px; padding: clamp(16px, 4vw, 28px);
4578
+ background: var(--panel-0); border-radius: var(--r-2); padding: clamp(16px, 4vw, 28px);
4555
4579
  width: min(520px, 100%); min-width: 0;
4556
4580
  max-height: calc(100vh - 24px);
4557
4581
  max-height: calc(100dvh - 24px);
@@ -4559,7 +4583,7 @@
4559
4583
  display: flex; flex-direction: column; gap: 14px;
4560
4584
  }
4561
4585
  .ds-247420 .ds-lightbox-preview {
4562
- padding: clamp(16px, 6vw, 36px); border-radius: 10px; text-align: center;
4586
+ padding: clamp(16px, 6vw, 36px); border-radius: var(--r-1); text-align: center;
4563
4587
  font-family: var(--ff-mono); white-space: pre-line; font-size: clamp(16px, 5vw, 24px);
4564
4588
  background: var(--tile-tone, var(--panel-1));
4565
4589
  }
@@ -4581,7 +4605,7 @@
4581
4605
  }
4582
4606
  .ds-247420 .ds-swatch-grid-lg { grid-template-columns: repeat(auto-fill, minmax(min(150px, 100%), 1fr)); }
4583
4607
  .ds-247420 .ds-swatch-col { display: flex; flex-direction: column; gap: 6px; }
4584
- .ds-247420 .ds-swatch-chip { height: 48px; border-radius: 10px; border: 1px solid var(--rule); background: var(--swatch, var(--panel-1)); }
4608
+ .ds-247420 .ds-swatch-chip { height: 48px; border-radius: var(--r-1); border: 1px solid var(--rule); background: var(--swatch, var(--panel-1)); }
4585
4609
  .ds-247420 .ds-swatch-chip--big { height: 64px; }
4586
4610
  .ds-247420 .ds-swatch-name { font-family: var(--ff-mono); font-size: 11px; color: var(--fg-3); }
4587
4611
  .ds-247420 .ds-type-panel { padding: clamp(10px, 2.5vw, 14px) clamp(10px, 3vw, 18px); display: flex; flex-direction: column; gap: 14px; }
@@ -4643,14 +4667,14 @@
4643
4667
  .ds-247420 .ds-savebar {
4644
4668
  position: sticky; bottom: 8px; display: flex; align-items: center;
4645
4669
  justify-content: flex-end; gap: 8px; flex-wrap: wrap; padding: 10px;
4646
- background: var(--panel-2); border-radius: 10px; margin: 8px 0;
4670
+ background: var(--panel-2); border-radius: var(--r-1); margin: 8px 0;
4647
4671
  }
4648
4672
  .ds-247420 .ds-savebar-note { flex: 1 1 160px; min-width: 0; color: var(--panel-text-2); }
4649
4673
  .ds-247420 .ds-settings-modal { min-width: min(320px, calc(100vw - 32px)); max-width: 480px; }
4650
4674
  .ds-247420 .ds-modal-body-form { padding: 16px; display: flex; flex-direction: column; gap: 12px; }
4651
4675
  .ds-247420 .ds-modal-note { margin: 0 0 8px; color: var(--panel-text-2); font-size: 14px; }
4652
4676
  .ds-247420 .ds-draft-preview {
4653
- background: var(--panel-1); padding: 12px; border-radius: 6px;
4677
+ background: var(--panel-1); padding: 12px; border-radius: var(--r-0);
4654
4678
  font-size: 13px; color: var(--panel-text-2); max-height: 120px;
4655
4679
  overflow-y: auto; font-family: var(--ff-mono); overflow-wrap: anywhere;
4656
4680
  }
@@ -4671,7 +4695,7 @@
4671
4695
  .ds-247420 .ds-auth-remember { display: flex; align-items: center; gap: 6px; cursor: pointer; }
4672
4696
  .ds-247420 .ds-auth-remember-text { color: var(--panel-text-2); font-size: 13px; }
4673
4697
  .ds-247420 .ds-auth-forgot { font-size: 13px; }
4674
- .ds-247420 .ds-auth-error { padding: 8px 10px; background: var(--panel-1); border-radius: 8px; color: var(--danger); font-size: 13px; overflow-wrap: anywhere; }
4698
+ .ds-247420 .ds-auth-error { padding: 8px 10px; background: var(--panel-1); border-radius: var(--r-0); color: var(--danger); font-size: 13px; overflow-wrap: anywhere; }
4675
4699
  .ds-247420 .ds-auth-divider { display: flex; align-items: center; gap: 10px; margin: 6px 0; color: var(--panel-text-3); font-size: 12px; }
4676
4700
  .ds-247420 .ds-auth-divider-line { flex: 1; height: 1px; background: var(--panel-2); }
4677
4701
  .ds-247420 .ds-auth-providers { display: flex; gap: 8px; flex-wrap: wrap; }
@@ -4695,7 +4719,7 @@
4695
4719
  .ds-247420 .ds-tile-meta { display: flex; align-items: center; justify-content: space-between; gap: 6px; font-size: 12px; flex-wrap: wrap; min-width: 0; }
4696
4720
  .ds-247420 .ds-tile-glyph { font-family: var(--ff-mono); color: var(--panel-text-3); }
4697
4721
  .ds-247420 .ds-tile-label { color: var(--panel-text); overflow-wrap: anywhere; }
4698
- .ds-247420 .ds-gal-swatch { height: 64px; border-radius: 8px; background: var(--swatch, var(--panel-1)); }
4722
+ .ds-247420 .ds-gal-swatch { height: 64px; border-radius: var(--r-0); background: var(--swatch, var(--panel-1)); }
4699
4723
  .ds-247420 .ds-gal-swatch-meta { display: flex; justify-content: space-between; gap: 6px; flex-wrap: wrap; font-family: var(--ff-mono); font-size: 11px; min-width: 0; }
4700
4724
  .ds-247420 .ds-gal-swatch-name { color: var(--panel-text); }
4701
4725
  .ds-247420 .ds-gal-swatch-hint { color: var(--panel-text-3); overflow-wrap: anywhere; }
@@ -4716,7 +4740,7 @@
4716
4740
  .ds-247420 .ds-cli-warn .prompt, .ds-247420 .ds-cli-warn .cmd { color: var(--mascot); }
4717
4741
  .ds-247420 .ds-cli-log .prompt { color: var(--fg-3); }
4718
4742
  .ds-247420 .ds-cli-log .cmd { color: var(--fg-2); font-family: var(--ff-mono); }
4719
- .ds-247420 .ds-term-body { padding: 14px 18px; display: flex; flex-direction: column; gap: 4px; background: var(--bg-2); border-radius: 10px; }
4743
+ .ds-247420 .ds-term-body { padding: 14px 18px; display: flex; flex-direction: column; gap: 4px; background: var(--bg-2); border-radius: var(--r-1); }
4720
4744
  .ds-247420 .ds-term-body--tall { min-height: 280px; }
4721
4745
  .ds-247420 .ds-term-input-row { margin-top: 6px; }
4722
4746
  .ds-247420 .ds-term-input { flex: 1; min-width: 0; background: transparent; border: 0; outline: 0; font-family: var(--ff-mono); font-size: 13px; color: var(--fg); }
@@ -4841,7 +4865,7 @@
4841
4865
  width: 4px;
4842
4866
  height: 8px;
4843
4867
  background: var(--fg);
4844
- border-radius: 0 4px 4px 0;
4868
+ border-radius: 0 var(--r-0) var(--r-0) 0;
4845
4869
  transition: height var(--dur-base) var(--ease);
4846
4870
  }
4847
4871
  .ds-247420 .cm-server-icon:hover .cm-server-pill { height: 20px; }
@@ -4897,7 +4921,7 @@
4897
4921
  width: 32px;
4898
4922
  height: 2px;
4899
4923
  background: color-mix(in oklab, var(--fg) 12%, transparent);
4900
- border-radius: 2px;
4924
+ border-radius: var(--r-hair);
4901
4925
  margin: 4px 0;
4902
4926
  flex-shrink: 0;
4903
4927
  }
@@ -4958,7 +4982,7 @@
4958
4982
  .ds-247420 .cm-channel-list::-webkit-scrollbar-track { background: transparent; }
4959
4983
  .ds-247420 .cm-channel-list::-webkit-scrollbar-thumb {
4960
4984
  background: color-mix(in oklab, var(--fg) 18%, transparent);
4961
- border-radius: 4px;
4985
+ border-radius: var(--r-0);
4962
4986
  }
4963
4987
 
4964
4988
  /* ============================================================
@@ -5038,7 +5062,7 @@
5038
5062
  background: color-mix(in oklab, var(--fg) 8%, transparent);
5039
5063
  }
5040
5064
  .ds-247420 .cm-cat-add:focus-visible {
5041
- outline: 2px solid var(--accent);
5065
+ outline: 2px solid var(--accent-ink);
5042
5066
  outline-offset: 2px;
5043
5067
  }
5044
5068
 
@@ -5090,7 +5114,7 @@
5090
5114
  bottom: 4px;
5091
5115
  width: 3px;
5092
5116
  background: var(--accent);
5093
- border-radius: 0 3px 3px 0;
5117
+ border-radius: 0 var(--r-hair) var(--r-hair) 0;
5094
5118
  }
5095
5119
 
5096
5120
  .ds-247420 .cm-channel-item.voice-active {
@@ -5219,7 +5243,7 @@
5219
5243
  background: color-mix(in oklab, var(--fg) 10%, transparent);
5220
5244
  }
5221
5245
  .ds-247420 .cm-ch-action-btn:focus-visible {
5222
- outline: 2px solid var(--accent);
5246
+ outline: 2px solid var(--accent-ink);
5223
5247
  outline-offset: 2px;
5224
5248
  }
5225
5249
 
@@ -5558,7 +5582,7 @@
5558
5582
  .ds-247420 .cm-member-list::-webkit-scrollbar { width: 8px; }
5559
5583
  .ds-247420 .cm-member-list::-webkit-scrollbar-thumb {
5560
5584
  background: color-mix(in oklab, var(--fg) 18%, transparent);
5561
- border-radius: 4px;
5585
+ border-radius: var(--r-0);
5562
5586
  }
5563
5587
 
5564
5588
  .ds-247420 .cm-member-category {
@@ -5802,45 +5826,45 @@
5802
5826
  .ds-247420 .cm-server-icon:focus-visible,
5803
5827
  .ds-247420 .cm-server-back:focus-visible,
5804
5828
  .ds-247420 .cm-server-add:focus-visible {
5805
- outline: 2px solid var(--accent);
5829
+ outline: 2px solid var(--accent-ink);
5806
5830
  outline-offset: 2px;
5807
5831
  border-radius: var(--r-2);
5808
5832
  }
5809
5833
 
5810
5834
  .ds-247420 .cm-channel-item:focus-visible {
5811
- outline: 2px solid var(--accent);
5835
+ outline: 2px solid var(--accent-ink);
5812
5836
  outline-offset: -2px;
5813
5837
  border-radius: var(--r-1);
5814
5838
  }
5815
5839
 
5816
5840
  .ds-247420 .cm-server-header:focus-visible,
5817
5841
  .ds-247420 .cm-category-header:focus-visible {
5818
- outline: 2px solid var(--accent);
5842
+ outline: 2px solid var(--accent-ink);
5819
5843
  outline-offset: -2px;
5820
5844
  }
5821
5845
 
5822
5846
  .ds-247420 .cm-member-item:focus-visible {
5823
- outline: 2px solid var(--accent);
5847
+ outline: 2px solid var(--accent-ink);
5824
5848
  outline-offset: -2px;
5825
5849
  border-radius: var(--r-1);
5826
5850
  }
5827
5851
 
5828
5852
  .ds-247420 .cm-vs-btn:focus-visible,
5829
5853
  .ds-247420 .cm-user-btn:focus-visible {
5830
- outline: 2px solid var(--accent);
5854
+ outline: 2px solid var(--accent-ink);
5831
5855
  outline-offset: 2px;
5832
5856
  border-radius: var(--r-1);
5833
5857
  }
5834
5858
 
5835
5859
  /* ThreadPanel / Forum / Page interactive elements */
5836
5860
  .ds-247420 .cm-tp-item:focus-visible,
5837
- .ds-247420 .cm-forum-item:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; border-radius: var(--r-1); }
5861
+ .ds-247420 .cm-forum-item:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; border-radius: var(--r-1); }
5838
5862
  .ds-247420 .cm-tp-new:focus-visible,
5839
5863
  .ds-247420 .cm-tp-close:focus-visible,
5840
5864
  .ds-247420 .cm-forum-new:focus-visible,
5841
5865
  .ds-247420 .cm-forum-sort:focus-visible,
5842
- .ds-247420 .cm-page-edit:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: var(--r-1); }
5843
- .ds-247420 .cm-forum-search:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--accent); }
5866
+ .ds-247420 .cm-page-edit:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; border-radius: var(--r-1); }
5867
+ .ds-247420 .cm-forum-search:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--accent-ink); }
5844
5868
 
5845
5869
  /* ---------- mobile header ---------- */
5846
5870
  .ds-247420 .cm-mobile-header {
@@ -5868,7 +5892,7 @@
5868
5892
  border-radius: var(--r-1);
5869
5893
  }
5870
5894
  .ds-247420 .cm-mh-btn:hover { background: var(--panel-3); }
5871
- .ds-247420 .cm-mh-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
5895
+ .ds-247420 .cm-mh-btn:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
5872
5896
  .ds-247420 .cm-mh-title {
5873
5897
  flex: 1 1 auto;
5874
5898
  min-width: 0;
@@ -5913,7 +5937,7 @@
5913
5937
  border-radius: var(--r-1);
5914
5938
  }
5915
5939
  .ds-247420 .cm-rb-cancel:hover { background: var(--panel-3); color: var(--fg); }
5916
- .ds-247420 .cm-rb-cancel:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
5940
+ .ds-247420 .cm-rb-cancel:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
5917
5941
 
5918
5942
  /* ---------- banner ---------- */
5919
5943
  .ds-247420 .cm-banner {
@@ -5926,6 +5950,7 @@
5926
5950
  font-weight: 500;
5927
5951
  }
5928
5952
  .ds-247420 .cm-banner.clickable { cursor: pointer; }
5953
+ .ds-247420 .cm-banner.clickable:hover { background: color-mix(in oklab, currentColor 10%, transparent); }
5929
5954
  .ds-247420 .cm-banner-msg { flex: 1 1 auto; min-width: 0; }
5930
5955
  .ds-247420 .cm-banner-action {
5931
5956
  flex: none;
@@ -6002,6 +6027,7 @@
6002
6027
  touch-action: none;
6003
6028
  transition: background var(--dur-base) var(--ease), border-color var(--dur-base) var(--ease), transform var(--dur-snap) var(--ease);
6004
6029
  }
6030
+ .ds-247420 .vx-ptt:hover { background: color-mix(in oklab, var(--fg) 8%, var(--bg-2)); }
6005
6031
  .ds-247420 .vx-ptt:active { transform: scale(0.97); }
6006
6032
  .ds-247420 .vx-ptt-icon { font-size: var(--fs-xl); line-height: 1; }
6007
6033
  .ds-247420 .vx-ptt-label { font-size: var(--fs-tiny); letter-spacing: var(--tr-label); text-transform: uppercase; }
@@ -6111,6 +6137,7 @@
6111
6137
  cursor: pointer;
6112
6138
  transition: background var(--dur-base) var(--ease);
6113
6139
  }
6140
+ .ds-247420 .vx-btn:hover { background: var(--bg-4, var(--bg-3)); }
6114
6141
  .ds-247420 .vx-btn-on, .ds-247420 .vx-btn-primary { background: var(--accent); color: var(--accent-fg); border-color: var(--accent); }
6115
6142
 
6116
6143
  .ds-247420 .vx-modal-backdrop {
@@ -6141,6 +6168,7 @@
6141
6168
  border: 0; background: transparent; color: var(--fg-3);
6142
6169
  font-size: var(--fs-xl); line-height: 1; cursor: pointer; padding: 0 var(--space-1);
6143
6170
  }
6171
+ .ds-247420 .vx-modal-x:hover { color: var(--fg); }
6144
6172
  .ds-247420 .vx-modal-body { padding: var(--space-3); overflow-y: auto; display: flex; flex-direction: column; gap: var(--space-3); }
6145
6173
  .ds-247420 .vx-modal-foot {
6146
6174
  display: flex; justify-content: flex-end; gap: var(--space-2);
@@ -6198,6 +6226,7 @@
6198
6226
  cursor: pointer;
6199
6227
  font-size: var(--fs-sm);
6200
6228
  }
6229
+ .ds-247420 .vx-queue-btn:hover { background: var(--bg-4, var(--bg-2)); }
6201
6230
  .ds-247420 .vx-queue-strip {
6202
6231
  display: flex; gap: var(--space-2);
6203
6232
  overflow-x: auto;
@@ -6215,6 +6244,7 @@
6215
6244
  font-size: var(--fs-tiny);
6216
6245
  cursor: pointer;
6217
6246
  }
6247
+ .ds-247420 .vx-chip:hover { background: var(--bg-4, var(--bg-2)); border-color: var(--rule-strong); }
6218
6248
  .ds-247420 .vx-chip-current { border-color: var(--accent); background: color-mix(in oklab, var(--accent) 16%, var(--bg-3)); }
6219
6249
  .ds-247420 .vx-chip-live { border-color: var(--green-2); }
6220
6250
  .ds-247420 .vx-chip-dot { width: 8px; height: 8px; border-radius: var(--r-pill); background: var(--fg-3); flex-shrink: 0; }
@@ -6291,7 +6321,44 @@
6291
6321
  .ds-247420 .cm-tp-item-title { font-size: var(--fs-1, 14px); }
6292
6322
  .ds-247420 .cm-tp-item-snippet { font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); opacity: .8; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
6293
6323
  .ds-247420 .cm-tp-item-meta { display: flex; gap: var(--space-2); font-size: var(--fs-micro, 11px); color: var(--fg-2, var(--fg)); opacity: .7; }
6294
- .ds-247420 .cm-tp-empty, .ds-247420 .cm-forum-empty, .ds-247420 .cm-channel-empty, .ds-247420 .cm-member-empty { padding: var(--space-3); text-align: center; color: var(--fg-2, var(--fg)); opacity: .7; font-size: var(--fs-sm); }
6324
+ .ds-247420 .cm-tp-empty, .ds-247420 .cm-forum-empty, .ds-247420 .cm-channel-empty, .ds-247420 .cm-member-empty {
6325
+ display: flex; flex-direction: column; align-items: center; gap: var(--space-2);
6326
+ padding: var(--space-4) var(--space-3); text-align: center;
6327
+ color: var(--fg-2, var(--fg)); opacity: .7; font-size: var(--fs-sm);
6328
+ }
6329
+ .ds-247420 .cm-tp-empty svg, .ds-247420 .cm-forum-empty svg, .ds-247420 .cm-channel-empty svg, .ds-247420 .cm-member-empty svg { opacity: .6; }
6330
+
6331
+ /* Loading skeletons — cold-load placeholders for channel/member/thread/forum
6332
+ lists. Same .ds-skel shimmer primitive as sessions.js/files.js so every
6333
+ list surface in the kit uses one shimmer language, never a bare spinner. */
6334
+ .ds-247420 .cm-channel-item-skeleton, .ds-247420 .cm-member-item-skeleton {
6335
+ display: flex; align-items: center; gap: var(--space-2);
6336
+ padding: var(--space-2); margin: 2px var(--space-1);
6337
+ }
6338
+ .ds-247420 .cm-channel-item-skeleton .ds-skel-icon, .ds-247420 .cm-member-item-skeleton .ds-skel-icon {
6339
+ width: 20px; height: 20px; border-radius: var(--r-round, 50%); flex: none; background: var(--bg-3);
6340
+ }
6341
+ .ds-247420 .cm-channel-item-skeleton .ds-skel-title, .ds-247420 .cm-member-item-skeleton .ds-skel-title {
6342
+ height: 12px; width: 60%; border-radius: var(--r-1); background: var(--bg-3);
6343
+ }
6344
+ .ds-247420 .cm-list-item-skeleton {
6345
+ display: flex; flex-direction: column; gap: 6px;
6346
+ padding: var(--space-2) var(--space-3); border-bottom: var(--bw-hair) solid var(--rule);
6347
+ }
6348
+ .ds-247420 .cm-list-item-skeleton .ds-skel-title { height: 12px; width: 55%; border-radius: var(--r-1); background: var(--bg-3); }
6349
+ .ds-247420 .cm-list-item-skeleton .ds-skel-meta { height: 9px; width: 35%; border-radius: var(--r-1); background: var(--bg-3); }
6350
+ /* Self-contained shimmer keyframe: community.css ships standalone (the
6351
+ community-app kit does not also load chat.css), so this cannot depend on
6352
+ chat.css's ds-skel-shimmer definition even though the visual language and
6353
+ token vocabulary match it exactly. */
6354
+ @media (prefers-reduced-motion: no-preference) {
6355
+ .ds-247420 .cm-channel-item-skeleton .ds-skel-icon, .ds-247420 .cm-channel-item-skeleton .ds-skel-title, .ds-247420 .cm-member-item-skeleton .ds-skel-icon, .ds-247420 .cm-member-item-skeleton .ds-skel-title, .ds-247420 .cm-list-item-skeleton .ds-skel-title, .ds-247420 .cm-list-item-skeleton .ds-skel-meta {
6356
+ animation: cm-skel-shimmer 1.3s ease-in-out infinite;
6357
+ background: linear-gradient(90deg, var(--bg-3) 0%, var(--bg-2) 50%, var(--bg-3) 100%);
6358
+ background-size: 200% 100%;
6359
+ }
6360
+ }
6361
+ @keyframes cm-skel-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
6295
6362
 
6296
6363
  /* ForumView — cm-forum / cm-forum-* */
6297
6364
  .ds-247420 .cm-forum { display: flex; flex-direction: column; height: 100%; min-height: 0; background: var(--bg-1, var(--bg-2)); color: var(--fg); }
@@ -6488,13 +6555,13 @@
6488
6555
  position: absolute; right: 16px; bottom: 12px; z-index: 3;
6489
6556
  display: none; align-items: center; gap: .35em;
6490
6557
  padding: .4em .8em; font: inherit; font-size: var(--fs-tiny); cursor: pointer;
6491
- border-radius: 999px; border: var(--bw-hair) solid var(--rule);
6558
+ border-radius: var(--r-pill); border: var(--bw-hair) solid var(--rule);
6492
6559
  background: var(--bg-2); color: var(--fg-2, var(--fg));
6493
6560
  box-shadow: 0 2px 8px color-mix(in srgb, var(--fg) 14%, transparent);
6494
6561
  }
6495
6562
  .ds-247420 .agentchat-jump.show { display: inline-flex; }
6496
6563
  .ds-247420 .agentchat-jump:hover { background: var(--bg-3); }
6497
- .ds-247420 .agentchat-jump:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
6564
+ .ds-247420 .agentchat-jump:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
6498
6565
 
6499
6566
  /* Streaming caret: a thin blinking bar at the live edge of an assistant turn. */
6500
6567
  .ds-247420 .chat-stream-caret {
@@ -6516,7 +6583,7 @@
6516
6583
  }
6517
6584
  .ds-247420 .chat-msg-action-label { font-size: var(--fs-tiny); }
6518
6585
  .ds-247420 .chat-msg-action:hover { background: var(--bg-2); color: var(--fg); }
6519
- .ds-247420 .chat-msg-action:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; opacity: 1; }
6586
+ .ds-247420 .chat-msg-action:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; opacity: 1; }
6520
6587
 
6521
6588
  /* Empty state: a fresh thread is an invitation, not a void. */
6522
6589
  .ds-247420 .agentchat-empty {
@@ -6544,7 +6611,7 @@
6544
6611
  font: inherit;
6545
6612
  font-size: var(--fs-tiny);
6546
6613
  padding: .4em .8em;
6547
- border-radius: 999px;
6614
+ border-radius: var(--r-pill);
6548
6615
  border: 1px solid color-mix(in srgb, var(--fg) 16%, transparent);
6549
6616
  background: color-mix(in srgb, var(--fg) 5%, transparent);
6550
6617
  color: var(--fg-2, var(--fg));
@@ -6583,7 +6650,7 @@
6583
6650
  font-family: var(--ff-body); font-size: var(--fs-tiny);
6584
6651
  }
6585
6652
  .ds-247420 .agentchat-install-copy:hover { background: var(--bg-3); color: var(--fg); }
6586
- .ds-247420 .agentchat-install-copy:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
6653
+ .ds-247420 .agentchat-install-copy:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
6587
6654
  .ds-247420 .agentchat-install-actions { display: flex; justify-content: flex-start; }
6588
6655
 
6589
6656
  /* Host-supplied transcript export actions riding the controls row. */
@@ -6594,7 +6661,7 @@
6594
6661
  font-family: var(--ff-body); font-size: var(--fs-tiny);
6595
6662
  }
6596
6663
  .ds-247420 .agentchat-export-act:hover { background: var(--bg-2); color: var(--fg); }
6597
- .ds-247420 .agentchat-export-act:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
6664
+ .ds-247420 .agentchat-export-act:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
6598
6665
 
6599
6666
  /* "working" tail: a long silent tool call shouldn't read as frozen. */
6600
6667
  .ds-247420 .agentchat-working {
@@ -6724,7 +6791,7 @@
6724
6791
  /* Rail filter uses the shared .ds-search-input primitive (provides bg/border/
6725
6792
  radius/focus-ring); only the rail layout + touch floor live here. */
6726
6793
  .ds-247420 .ds-session-head .ds-search-input { order: 1; flex: 1 1 auto; min-width: 0; min-height: 36px; padding: 0 10px; }
6727
- .ds-247420 .ds-session-new:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
6794
+ .ds-247420 .ds-session-new:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
6728
6795
  /* Touch floor (must FOLLOW the base rules - same specificity, order decides). */
6729
6796
  @media (pointer: coarse) {
6730
6797
  .ds-247420 .ds-session-new { width: 44px; min-height: 44px; }
@@ -6743,10 +6810,10 @@
6743
6810
  cursor: pointer; text-align: left; color: var(--fg);
6744
6811
  }
6745
6812
  .ds-247420 .ds-session-row:hover { background: var(--bg-2); }
6746
- .ds-247420 .ds-session-row:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
6813
+ .ds-247420 .ds-session-row:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; }
6747
6814
  .ds-247420 .ds-session-row.active { background: var(--accent-tint); box-shadow: inset 2px 0 0 var(--accent); }
6748
6815
  .ds-247420 .ds-session-row.rail-green::before, .ds-247420 .ds-session-row.rail-purple::before, .ds-247420 .ds-session-row.rail-flame::before {
6749
- content: ''; position: absolute; left: 0; top: 8px; bottom: 8px; width: 3px; border-radius: 3px;
6816
+ content: ''; position: absolute; left: 0; top: 8px; bottom: 8px; width: 3px; border-radius: var(--r-hair);
6750
6817
  }
6751
6818
  /* Rail tones MUST match .row.rail-* in app-shell.css so the same semantic state
6752
6819
  reads as one colour across the conversation list and content rows. */
@@ -6837,7 +6904,7 @@
6837
6904
  }
6838
6905
  .ds-247420 .chat-code-block:hover .chat-code-copy, .ds-247420 .chat-code-block:focus-within .chat-code-copy { opacity: 1; }
6839
6906
  .ds-247420 .chat-code-copy.is-copied { color: var(--accent-ink); border-color: var(--accent); }
6840
- .ds-247420 .chat-code-copy:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; opacity: 1; }
6907
+ .ds-247420 .chat-code-copy:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; opacity: 1; }
6841
6908
  /* Head-placed copy (structured CodeNode + FilePreviewCode) is always visible. */
6842
6909
  .ds-247420 .chat-code-head .spread { flex: 1; }
6843
6910
  .ds-247420 .chat-code-copy-head { position: static; opacity: 1; }
@@ -6926,7 +6993,7 @@
6926
6993
  cursor: pointer; font-family: var(--ff-body); font-size: var(--fs-tiny);
6927
6994
  }
6928
6995
  .ds-247420 .ds-dash-errors-toggle.active { background: var(--accent-tint); color: var(--fg); border-color: var(--accent); }
6929
- .ds-247420 .ds-dash-errors-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
6996
+ .ds-247420 .ds-dash-errors-toggle:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
6930
6997
 
6931
6998
  /* --- C3: per-card select checkbox. --- */
6932
6999
  .ds-247420 .ds-dash-select {
@@ -6936,7 +7003,7 @@
6936
7003
  font-family: var(--ff-mono); font-size: var(--fs-sm);
6937
7004
  }
6938
7005
  .ds-247420 .ds-dash-select[aria-checked="true"] { color: var(--accent-ink); }
6939
- .ds-247420 .ds-dash-select:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
7006
+ .ds-247420 .ds-dash-select:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
6940
7007
 
6941
7008
  /* --- C5: active dashboard card (current conversation). --- */
6942
7009
  .ds-247420 .ds-dash-card.is-active { box-shadow: inset 2px 0 0 var(--accent); }
@@ -6958,7 +7025,7 @@
6958
7025
 
6959
7026
  /* --- E1: inline file preview pane (split view, non-modal). --- */
6960
7027
  .ds-247420 .ds-preview-pane { display: flex; flex-direction: column; min-height: 0; height: 100%; overflow: hidden; }
6961
- .ds-247420 .ds-preview-pane:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
7028
+ .ds-247420 .ds-preview-pane:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; }
6962
7029
  .ds-247420 .ds-preview-pane .ds-preview-body { flex: 1; min-height: 0; overflow: auto; }
6963
7030
  .ds-247420 .ds-preview-pane-empty { align-items: center; justify-content: center; color: var(--fg-3); font-size: var(--fs-sm); }
6964
7031
  .ds-247420 .ds-preview-code-wrap { display: flex; flex-direction: column; min-height: 0; }
@@ -6975,7 +7042,7 @@
6975
7042
  border-radius: var(--r-1); background: var(--bg-2); color: var(--fg-2); cursor: pointer;
6976
7043
  font-family: var(--ff-body); font-size: var(--fs-tiny);
6977
7044
  }
6978
- .ds-247420 .ds-file-more-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
7045
+ .ds-247420 .ds-file-more-btn:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
6979
7046
  /* --- D3: locked/no-access file row. --- */
6980
7047
  .ds-247420 .ds-file-row.is-locked { opacity: .6; }
6981
7048
 
@@ -6986,8 +7053,9 @@
6986
7053
  background: none; color: var(--fg-3); cursor: pointer;
6987
7054
  font-family: var(--ff-body); font-size: var(--fs-tiny);
6988
7055
  }
7056
+ .ds-247420 .ds-roots-tab:hover { background: var(--bg-2); color: var(--fg); }
6989
7057
  .ds-247420 .ds-roots-tab.active { background: var(--bg); color: var(--fg); }
6990
- .ds-247420 .ds-roots-tab:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
7058
+ .ds-247420 .ds-roots-tab:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
6991
7059
 
6992
7060
  /* --- H4: touch targets. On a coarse pointer / narrow screen the hover-revealed
6993
7061
  action rows are made permanently visible and small controls floor to 44px so
@@ -7019,7 +7087,7 @@
7019
7087
  color: var(--fg-3); font-family: var(--ff-body); font-size: var(--fs-micro);
7020
7088
  }
7021
7089
  .ds-247420 .ds-session-meta-copy:hover { background: var(--bg-3); color: var(--fg); }
7022
- .ds-247420 .ds-session-meta-copy:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
7090
+ .ds-247420 .ds-session-meta-copy:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
7023
7091
  @media (pointer: coarse), (max-width: 640px) {
7024
7092
  .ds-247420 .ds-session-meta-copy { min-height: 44px; min-width: 44px; }
7025
7093
  }
@@ -7047,7 +7115,7 @@
7047
7115
  }
7048
7116
 
7049
7117
  /* Drag-over ring: token accent, never a hex. */
7050
- .ds-247420 .chat-composer.dragover { outline: 2px solid var(--accent); outline-offset: -2px; border-radius: var(--r-2); }
7118
+ .ds-247420 .chat-composer.dragover { outline: 2px solid var(--accent-ink); outline-offset: -2px; border-radius: var(--r-2); }
7051
7119
 
7052
7120
  /* Per-bit composer context: only the bit that owns a control is a button. */
7053
7121
  .ds-247420 .chat-composer-context-bit {
@@ -7087,7 +7155,8 @@
7087
7155
  border-radius: var(--r-1); background: var(--bg-2); color: var(--fg-2); cursor: pointer;
7088
7156
  font-family: var(--ff-body); font-size: var(--fs-tiny);
7089
7157
  }
7090
- .ds-247420 .agentchat-earlier-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
7158
+ .ds-247420 .agentchat-earlier-btn:hover { background: var(--bg-2); color: var(--fg); }
7159
+ .ds-247420 .agentchat-earlier-btn:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
7091
7160
  @media (pointer: coarse) {
7092
7161
  .ds-247420 .agentchat-earlier-btn { min-height: 44px; }
7093
7162
  }
@@ -7195,7 +7264,7 @@
7195
7264
  }
7196
7265
  .ds-247420 .chat-msg .chat-tool .chat-tool-head::-webkit-details-marker { display: none; }
7197
7266
  .ds-247420 .chat-msg .chat-tool .chat-tool-head:hover { background: var(--bg-2); }
7198
- .ds-247420 .chat-msg .chat-tool .chat-tool-head:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
7267
+ .ds-247420 .chat-msg .chat-tool .chat-tool-head:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; }
7199
7268
  .ds-247420 .chat-tool-icon { display: inline-flex; color: var(--fg-3); }
7200
7269
  .ds-247420 .chat-tool-name { font-family: var(--ff-mono); font-weight: 600; color: var(--fg); }
7201
7270
  .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; }
@@ -7219,7 +7288,7 @@
7219
7288
  .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); }
7220
7289
  .ds-247420 .chat-tool-copy { position: static; opacity: 0; }
7221
7290
  .ds-247420 .chat-tool-section:hover .chat-tool-copy, .ds-247420 .chat-tool-section:focus-within .chat-tool-copy { opacity: 1; }
7222
- .ds-247420 .chat-tool-copy:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; opacity: 1; }
7291
+ .ds-247420 .chat-tool-copy:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; opacity: 1; }
7223
7292
  .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; }
7224
7293
  .ds-247420 .chat-tool-pre.is-error { color: var(--flame); }
7225
7294
  .ds-247420 .chat-tool-pre.chat-tool-empty { color: var(--fg-3); }
@@ -7282,10 +7351,11 @@
7282
7351
  .ds-247420 .ds-dash-breakdown .seg.is-idle::before { background: transparent; box-shadow: inset 0 0 0 1px var(--stale), inset 0 0 0 3px var(--bg); }
7283
7352
  .ds-247420 .ds-dash-stream-disc { display: inline-flex; align-items: center; gap: var(--space-1); }
7284
7353
  .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); }
7285
- .ds-247420 .ds-dash-selectall:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
7354
+ .ds-247420 .ds-dash-selectall:hover { color: var(--fg); }
7355
+ .ds-247420 .ds-dash-selectall:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
7286
7356
  .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); }
7287
7357
  .ds-247420 .ds-dash-clear:hover { color: var(--fg); }
7288
- .ds-247420 .ds-dash-clear:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; border-radius: var(--r-1); }
7358
+ .ds-247420 .ds-dash-clear:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; border-radius: var(--r-1); }
7289
7359
 
7290
7360
  /* Conversation-rail loading skeleton (cold ccsniff walk). */
7291
7361
  .ds-247420 .ds-session-row-skeleton { display: flex; flex-direction: column; gap: 6px; padding: var(--space-2) var(--space-3); }
@@ -7503,7 +7573,7 @@
7503
7573
  overflow: auto;
7504
7574
  }
7505
7575
  .ds-247420 .ds-ep-tree-item { display: flex; flex-direction: column; }
7506
- .ds-247420 .ds-ep-tree-item:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
7576
+ .ds-247420 .ds-ep-tree-item:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
7507
7577
  .ds-247420 .ds-ep-tree-row {
7508
7578
  display: flex; align-items: center; gap: 6px;
7509
7579
  padding: 4px 8px 4px 0;
@@ -7859,12 +7929,15 @@
7859
7929
  background: var(--panel-2, transparent);
7860
7930
  color: inherit; font: inherit; cursor: pointer;
7861
7931
  }
7932
+ .ds-247420 .ds-ep-dialog-btn:hover { background: var(--panel-3, var(--bg-3)); }
7862
7933
  .ds-247420 .ds-ep-dialog-btn.kind-primary {
7863
7934
  background: var(--accent); color: var(--accent-fg); border-color: var(--accent);
7864
7935
  }
7936
+ .ds-247420 .ds-ep-dialog-btn.kind-primary:hover { filter: brightness(1.08); }
7865
7937
  .ds-247420 .ds-ep-dialog-btn.kind-danger {
7866
7938
  background: var(--danger); color: var(--on-accent); border-color: var(--danger);
7867
7939
  }
7940
+ .ds-247420 .ds-ep-dialog-btn.kind-danger:hover { filter: brightness(1.1); }
7868
7941
 
7869
7942
  /* ---------------------------------------------------------------
7870
7943
  Toast
@@ -7908,7 +7981,7 @@
7908
7981
  .ds-247420 .ds-ep-ctxmenu-item:focus-visible,
7909
7982
  .ds-247420 .ds-ep-resize:focus-visible,
7910
7983
  .ds-247420 .ds-ep-dialog-btn:focus-visible {
7911
- outline: 2px solid var(--accent);
7984
+ outline: 2px solid var(--accent-ink);
7912
7985
  outline-offset: 2px;
7913
7986
  }
7914
7987
 
@@ -7959,7 +8032,7 @@
7959
8032
  .ds-247420 .ds-ep-iconbtn:focus-visible,
7960
8033
  .ds-247420 .ds-ep-iconbtn-group button:focus-visible,
7961
8034
  .ds-247420 .ds-ep-resize:focus-visible {
7962
- outline: 2px solid var(--accent);
8035
+ outline: 2px solid var(--accent-ink);
7963
8036
  outline-offset: 2px;
7964
8037
  border-radius: var(--r-1);
7965
8038
  }
@@ -7988,7 +8061,7 @@
7988
8061
  cursor: inherit;
7989
8062
  }
7990
8063
  .ds-247420 .ds-check:focus-visible, .ds-247420 .ds-radio:focus-visible {
7991
- outline: 2px solid var(--accent);
8064
+ outline: 2px solid var(--accent-ink);
7992
8065
  outline-offset: 2px;
7993
8066
  }
7994
8067
 
@@ -8015,6 +8088,7 @@
8015
8088
  padding: 0;
8016
8089
  flex-shrink: 0;
8017
8090
  }
8091
+ .ds-247420 .ds-toggle:hover { border-color: var(--rule-strong, var(--fg-3)); }
8018
8092
  .ds-247420 .ds-toggle-knob {
8019
8093
  position: absolute;
8020
8094
  top: 1px; left: 1px;
@@ -8032,7 +8106,7 @@
8032
8106
  transform: translateX(20px);
8033
8107
  }
8034
8108
  .ds-247420 .ds-toggle:focus-visible {
8035
- outline: 2px solid var(--accent);
8109
+ outline: 2px solid var(--accent-ink);
8036
8110
  outline-offset: 2px;
8037
8111
  }
8038
8112
  .ds-247420 .ds-toggle:disabled { cursor: not-allowed; }
@@ -8147,7 +8221,7 @@
8147
8221
  outline: none;
8148
8222
  }
8149
8223
  .ds-247420 .ds-dropdown-item:focus-visible {
8150
- outline: 2px solid var(--accent);
8224
+ outline: 2px solid var(--accent-ink);
8151
8225
  outline-offset: -2px;
8152
8226
  }
8153
8227
  .ds-247420 .ds-dropdown-item[aria-disabled="true"] {
@@ -8191,7 +8265,7 @@
8191
8265
  cursor: grab; font: 14px/1 var(--ff-mono, monospace); letter-spacing: -2px;
8192
8266
  touch-action: none; user-select: none;
8193
8267
  }
8194
- .ds-247420 .ds-reorder-handle:focus-visible { outline: 2px solid var(--focus-ring, var(--accent)); outline-offset: 2px; }
8268
+ .ds-247420 .ds-reorder-handle:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
8195
8269
  .ds-247420 .ds-reorder-handle:active { cursor: grabbing; }
8196
8270
  .ds-247420[data-dragging="true"] { opacity: 0.6; cursor: grabbing; transform: scale(0.98); }
8197
8271
  .ds-247420[data-drop-target-active="true"] {
@@ -8200,7 +8274,7 @@
8200
8274
  }
8201
8275
  .ds-247420 .ds-reorder-insertion-line {
8202
8276
  height: 2px; background: var(--focus-ring, var(--accent));
8203
- border-radius: 1px; animation: ds-insertion-in var(--dur-snap, 120ms) var(--ease, ease);
8277
+ border-radius: var(--r-hair); animation: ds-insertion-in var(--dur-snap, 120ms) var(--ease, ease);
8204
8278
  }
8205
8279
  @keyframes ds-insertion-in { from { transform: scaleX(0); opacity: 0; } to { transform: scaleX(1); opacity: 1; } }
8206
8280
  @media (prefers-reduced-motion: reduce) {
@@ -8267,6 +8341,7 @@
8267
8341
  color: var(--fg); font: inherit; text-align: left;
8268
8342
  border-radius: var(--r-1, 10px); cursor: pointer;
8269
8343
  }
8344
+ .ds-247420 .ov-cmd-item:hover { background: var(--panel-2, var(--rule)); }
8270
8345
  .ds-247420 .ov-cmd-item.is-active { background: var(--accent); color: var(--accent-fg); }
8271
8346
  .ds-247420 .ov-cmd-glyph { width: 18px; display: inline-flex; justify-content: center; flex-shrink: 0; }
8272
8347
  .ds-247420 .ov-cmd-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@@ -8301,6 +8376,7 @@
8301
8376
  padding: var(--space-2, 8px); cursor: pointer; font-size: var(--fs-lg, 18px);
8302
8377
  border-bottom: 2px solid transparent;
8303
8378
  }
8379
+ .ds-247420 .ov-emoji-tab:hover { background: var(--bg-2); }
8304
8380
  .ds-247420 .ov-emoji-tab[aria-selected="true"] { border-bottom-color: var(--accent); background: var(--bg-2); }
8305
8381
  .ds-247420 .ov-emoji-grid { overflow: auto; max-height: 220px; padding: var(--space-2, 8px); }
8306
8382
  .ds-247420 .ov-emoji-grid-inner { display: grid; grid-template-columns: repeat(8, 1fr); gap: var(--space-1, 4px); }
@@ -8399,7 +8475,7 @@
8399
8475
  border: 1px solid var(--rule); border-radius: var(--r-1, 10px);
8400
8476
  padding: var(--space-1, 4px) var(--space-2, 8px); font: inherit;
8401
8477
  }
8402
- .ds-247420 .ov-set-control:focus-visible { outline: none; border-color: var(--accent); }
8478
+ .ds-247420 .ov-set-control:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; border-color: var(--accent-ink); }
8403
8479
  .ds-247420 input.ov-set-control[type="range"] { padding: 0; accent-color: var(--accent); }
8404
8480
  .ds-247420 .ov-set-toggle { width: 18px; height: 18px; accent-color: var(--accent); flex-shrink: 0; cursor: pointer; }
8405
8481
  .ds-247420 .ov-set-btn {
@@ -8429,6 +8505,7 @@
8429
8505
  .ds-247420 .ov-auth-x:hover { color: var(--fg); }
8430
8506
  .ds-247420 .ov-auth-tabs { display: flex; gap: var(--space-1); padding: var(--space-2) var(--space-3) 0; }
8431
8507
  .ds-247420 .ov-auth-tab { flex: 1; padding: var(--space-1) var(--space-2); border: 1px solid var(--rule); border-bottom: none; border-radius: var(--r-1) var(--r-1) 0 0; background: var(--bg-3); color: var(--fg-2, var(--fg)); cursor: pointer; }
8508
+ .ds-247420 .ov-auth-tab:hover { color: var(--fg); }
8432
8509
  .ds-247420 .ov-auth-tab.is-active { background: var(--bg-2); color: var(--fg); font-weight: 700; }
8433
8510
  .ds-247420 .ov-auth-body { display: flex; flex-direction: column; gap: var(--space-2); padding: var(--space-3); }
8434
8511
  .ds-247420 .ov-auth-hint { margin: 0; font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); }
@@ -8494,8 +8571,8 @@
8494
8571
  background: var(--panel-2); cursor: pointer; flex-shrink: 0;
8495
8572
  }
8496
8573
  .ds-247420 .ds-input-color::-webkit-color-swatch-wrapper { padding: 2px; }
8497
- .ds-247420 .ds-input-color::-webkit-color-swatch { border: none; border-radius: 2px; }
8498
- .ds-247420 .ds-input-color:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
8574
+ .ds-247420 .ds-input-color::-webkit-color-swatch { border: none; border-radius: var(--r-hair); }
8575
+ .ds-247420 .ds-input-color:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
8499
8576
  .ds-247420 .ds-input-check {
8500
8577
  appearance: none; -webkit-appearance: none;
8501
8578
  width: 16px; height: 16px; flex-shrink: 0;
@@ -8508,7 +8585,7 @@
8508
8585
  width: 4px; height: 8px; border: solid var(--accent-fg);
8509
8586
  border-width: 0 2px 2px 0; transform: rotate(45deg);
8510
8587
  }
8511
- .ds-247420 .ds-input-check:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
8588
+ .ds-247420 .ds-input-check:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
8512
8589
 
8513
8590
  /* ---------------------------------------------------------------
8514
8591
  Tree drag-reparent affordance — clear drop target + dragging row.
@@ -8642,7 +8719,7 @@
8642
8719
  align-items: center;
8643
8720
  gap: 8px;
8644
8721
  padding: 6px 8px;
8645
- border-radius: 6px;
8722
+ border-radius: var(--r-0);
8646
8723
  color: var(--fg-2, color-mix(in oklab, var(--fg) 78%, transparent));
8647
8724
  text-decoration: none;
8648
8725
  font-size: var(--fs-sm, 14px);
@@ -8664,7 +8741,7 @@
8664
8741
  flex-shrink: 0;
8665
8742
  min-width: 18px;
8666
8743
  padding: 0 5px;
8667
- border-radius: 9px;
8744
+ border-radius: var(--r-1);
8668
8745
  background: var(--accent);
8669
8746
  color: var(--on-accent);
8670
8747
  font-size: 11px;
@@ -8942,7 +9019,7 @@
8942
9019
  }
8943
9020
 
8944
9021
  @media (prefers-reduced-motion: reduce) {
8945
- .ds-247420 .ds-event-list .row.event-flash { animation: none; outline: 2px solid var(--accent); }
9022
+ .ds-247420 .ds-event-list .row.event-flash { animation: none; outline: 2px solid var(--accent-ink); }
8946
9023
  }
8947
9024
 
8948
9025
  @media print {
@@ -9018,7 +9095,7 @@
9018
9095
  max-width: 100%;
9019
9096
  padding: 18px 18px 18px 20px;
9020
9097
  background: var(--panel-1);
9021
- border-radius: 10px;
9098
+ border-radius: var(--r-1);
9022
9099
  box-shadow: var(--panel-shadow);
9023
9100
  scrollbar-width: thin;
9024
9101
  scrollbar-color: var(--panel-3) transparent;
@@ -9027,7 +9104,7 @@
9027
9104
  .ds-247420 #ds-article-host.has-toc > .toc::-webkit-scrollbar-track { background: transparent; }
9028
9105
  .ds-247420 #ds-article-host.has-toc > .toc::-webkit-scrollbar-thumb {
9029
9106
  background: var(--panel-3);
9030
- border-radius: 8px;
9107
+ border-radius: var(--r-0);
9031
9108
  border: 2px solid transparent;
9032
9109
  background-clip: padding-box;
9033
9110
  }
@@ -9063,7 +9140,7 @@
9063
9140
  .ds-247420 .cli {
9064
9141
  display: block;
9065
9142
  background: var(--panel-1);
9066
- border-radius: 8px;
9143
+ border-radius: var(--r-0);
9067
9144
  padding: 16px 20px;
9068
9145
  margin: 16px 0 28px 0;
9069
9146
  font-family: var(--ff-mono);
@@ -9124,7 +9201,7 @@
9124
9201
  padding: 14px 18px;
9125
9202
  margin: 8px 0;
9126
9203
  background: var(--panel-1);
9127
- border-radius: 6px;
9204
+ border-radius: var(--r-0);
9128
9205
  font-size: 13px;
9129
9206
  box-shadow: var(--panel-shadow);
9130
9207
  text-decoration: none;
@@ -9141,7 +9218,7 @@
9141
9218
  border: 1px solid var(--panel-3);
9142
9219
  font-size: 0.7rem;
9143
9220
  padding: 0.15rem 0.5rem;
9144
- border-radius: 3px;
9221
+ border-radius: var(--r-hair);
9145
9222
  font-family: var(--ff-mono);
9146
9223
  }
9147
9224
  .ds-247420 .ds-prose .gm-callout {
@@ -9242,7 +9319,7 @@
9242
9319
  }
9243
9320
  .ds-247420 .sp-loading-bar-track {
9244
9321
  height: 6px;
9245
- border-radius: 3px;
9322
+ border-radius: var(--r-hair);
9246
9323
  background: var(--bg-3);
9247
9324
  overflow: hidden;
9248
9325
  }