anentrypoint-design 0.0.240 → 0.0.242

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 CHANGED
@@ -1,9 +1,8 @@
1
1
  /* ============================================================
2
2
  247420 design system — component sheet
3
- "Acid Editorial": Bricolage Grotesque display + Hanken Grotesk body +
4
- JetBrains code. Confident hierarchy, asymmetric grid tension, print
5
- texture over glow, one electric lead accent. Indicator rails over
6
- hairlines.
3
+ "Acid Editorial": system-font display + body + mono, no custom web fonts.
4
+ Confident hierarchy, asymmetric grid tension, print texture over glow,
5
+ one electric lead accent. Indicator rails over hairlines.
7
6
  ============================================================ */
8
7
 
9
8
  /* ============================================================
@@ -31,7 +30,7 @@ button, input, select, textarea { font: inherit; }
31
30
  }
32
31
  .skip-link:focus {
33
32
  top: 10px;
34
- outline: 2px solid var(--accent);
33
+ outline: 2px solid var(--accent-ink);
35
34
  outline-offset: 2px;
36
35
  }
37
36
  body {
@@ -248,7 +247,7 @@ body.canvas-host { background: transparent !important; }
248
247
  }
249
248
  .app-topbar nav a:hover { background: var(--bg-2); color: var(--fg); }
250
249
  .app-topbar nav a:focus-visible {
251
- outline: 2px solid var(--accent);
250
+ outline: 2px solid var(--accent-ink);
252
251
  outline-offset: 2px;
253
252
  }
254
253
  /* Active tab reads as a subtle tinted pill with an accent underline rather than
@@ -284,7 +283,7 @@ body.canvas-host { background: transparent !important; }
284
283
  width: 100%;
285
284
  }
286
285
  .app-search:focus-within {
287
- outline: 2px solid var(--accent);
286
+ outline: 2px solid var(--accent-ink);
288
287
  outline-offset: 2px;
289
288
  }
290
289
 
@@ -326,7 +325,7 @@ body.canvas-host { background: transparent !important; }
326
325
  }
327
326
  .app-side a:hover { background: var(--bg-2); color: var(--fg); }
328
327
  .app-side a:focus-visible {
329
- outline: 2px solid var(--accent);
328
+ outline: 2px solid var(--accent-ink);
330
329
  outline-offset: 2px;
331
330
  }
332
331
  .app-side a.active {
@@ -449,7 +448,7 @@ body.canvas-host { background: transparent !important; }
449
448
  .btn-ghost:hover { background: var(--fg); color: var(--bg); }
450
449
  .btn:active, .btn-primary:active, .btn-ghost:active { transform: translateY(2px); }
451
450
  .btn:focus-visible, .btn-primary:focus-visible, .btn-ghost:focus-visible {
452
- outline: 2px solid var(--accent);
451
+ outline: 2px solid var(--accent-ink);
453
452
  outline-offset: 2px;
454
453
  }
455
454
 
@@ -476,7 +475,7 @@ body.canvas-host { background: transparent !important; }
476
475
  .ds-icon-btn-danger { background: var(--warn); color: var(--on-color); }
477
476
  .ds-icon-btn-danger:hover { filter: brightness(1.1); }
478
477
  .ds-icon-btn:active { transform: translateY(1px); }
479
- .ds-icon-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
478
+ .ds-icon-btn:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
480
479
  .ds-icon-btn:disabled, .ds-icon-btn.is-disabled {
481
480
  opacity: 0.5; cursor: not-allowed; pointer-events: none;
482
481
  }
@@ -488,7 +487,7 @@ body.canvas-host { background: transparent !important; }
488
487
  display: inline-flex; align-items: center; justify-content: center;
489
488
  min-width: 18px; height: 18px; padding: 0 6px;
490
489
  font-size: var(--fs-micro); font-weight: 600; line-height: 1;
491
- border-radius: 999px;
490
+ border-radius: var(--r-pill);
492
491
  background: var(--bg-3); color: var(--fg-2);
493
492
  }
494
493
  .ds-badge.tone-green { background: var(--green-tint); color: var(--green-deep); }
@@ -700,16 +699,13 @@ a.row { text-decoration: none; }
700
699
  padding: var(--space-9) 0 var(--space-8);
701
700
  display: grid; gap: var(--space-5) var(--space-6);
702
701
  grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr);
703
- grid-template-areas: 'title title' 'body actions' 'badge badge';
702
+ grid-template-areas: 'title title' 'body actions';
704
703
  align-items: end;
705
704
  max-width: var(--measure-wide);
706
705
  }
707
706
  .ds-hero-head { grid-area: title; display: grid; gap: var(--space-3); }
708
707
  .ds-hero-body { grid-area: body; }
709
708
  .ds-hero-actions { grid-area: actions; }
710
- /* Badge gets its own row — sharing 'actions' overlapped it onto the CTAs
711
- whenever a caller passes both actions and badge. */
712
- .ds-hero-badge { grid-area: badge; }
713
709
  .ds-hero-title {
714
710
  font-family: var(--ff-display); font-weight: 700;
715
711
  font-size: clamp(40px, 9cqi, 116px);
@@ -730,7 +726,7 @@ a.row { text-decoration: none; }
730
726
  @container (max-width: 900px) {
731
727
  .ds-hero {
732
728
  grid-template-columns: minmax(0, 1fr);
733
- grid-template-areas: 'title' 'body' 'actions' 'badge';
729
+ grid-template-areas: 'title' 'body' 'actions';
734
730
  align-items: start;
735
731
  padding: var(--space-7) 0 var(--space-6);
736
732
  }
@@ -904,7 +900,7 @@ table td { padding: 14px 16px; border-top: 1px solid var(--rule); }
904
900
  table tr.clickable { cursor: pointer; }
905
901
  table tr.clickable:hover td { background: var(--bg-2); }
906
902
  table tr.clickable:focus-visible {
907
- outline: 2px solid var(--accent);
903
+ outline: 2px solid var(--accent-ink);
908
904
  outline-offset: -2px;
909
905
  }
910
906
  table tr.clickable:focus-visible td { background: var(--bg-2); }
@@ -1302,7 +1298,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
1302
1298
  flex-direction: column;
1303
1299
  gap: 4px;
1304
1300
  }
1305
- .ds-file-grid:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: var(--r-2); }
1301
+ .ds-file-grid:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; border-radius: var(--r-2); }
1306
1302
 
1307
1303
  /* Listing wrapper holds the optional filter + sort header above the grid. */
1308
1304
  .ds-file-listing { display: flex; flex-direction: column; gap: var(--space-2); min-height: 0; }
@@ -1324,7 +1320,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
1324
1320
  }
1325
1321
  .ds-file-sort-btn:hover { color: var(--fg-2); background: var(--bg-2); }
1326
1322
  .ds-file-sort-btn.active { color: var(--accent-ink); }
1327
- .ds-file-sort-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
1323
+ .ds-file-sort-btn:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
1328
1324
 
1329
1325
  /* Skeleton shimmer rows shown while a directory loads. */
1330
1326
  .ds-file-row-skeleton { cursor: default; pointer-events: none; }
@@ -1372,7 +1368,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
1372
1368
  color: inherit; font: inherit; text-align: left; cursor: pointer;
1373
1369
  }
1374
1370
  .ds-file-open[disabled] { cursor: default; }
1375
- .ds-file-open:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: var(--r-1); }
1371
+ .ds-file-open:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; border-radius: var(--r-1); }
1376
1372
  .ds-file-row:hover {
1377
1373
  background: var(--bg-2);
1378
1374
  border-color: var(--rule);
@@ -1445,7 +1441,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
1445
1441
  role=checkbox/aria-checked name+state. */
1446
1442
  .ds-check-box {
1447
1443
  width: 15px; height: 15px; box-sizing: border-box; flex: 0 0 auto; position: relative;
1448
- border: 1.5px solid var(--fg-3); border-radius: 4px;
1444
+ border: 1.5px solid var(--fg-3); border-radius: var(--r-0);
1449
1445
  transition: background var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease);
1450
1446
  }
1451
1447
  .is-marked > .ds-check-box,
@@ -1457,7 +1453,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
1457
1453
  }
1458
1454
  [aria-checked="mixed"] > .ds-check-box { background: var(--accent); border-color: var(--accent); }
1459
1455
  [aria-checked="mixed"] > .ds-check-box::after {
1460
- content: ""; position: absolute; left: 3px; right: 3px; top: 6px; height: 2px; background: var(--bg); border-radius: 1px;
1456
+ content: ""; position: absolute; left: 3px; right: 3px; top: 6px; height: 2px; background: var(--bg); border-radius: var(--r-hair);
1461
1457
  }
1462
1458
 
1463
1459
  .ds-file-check {
@@ -1470,7 +1466,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
1470
1466
  }
1471
1467
  .ds-file-check:hover { background: var(--bg-3); color: var(--fg); }
1472
1468
  .ds-file-check.is-marked { color: var(--accent-ink); }
1473
- .ds-file-check:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
1469
+ .ds-file-check:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
1474
1470
  .ds-file-check[disabled] { opacity: 0.4; cursor: default; }
1475
1471
  .ds-file-row.is-marked { background: var(--accent-tint); border-color: var(--accent); }
1476
1472
  .ds-file-selectall {
@@ -1480,7 +1476,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
1480
1476
  padding: var(--space-1); border-radius: var(--r-1);
1481
1477
  }
1482
1478
  .ds-file-selectall:hover { background: var(--bg-2); color: var(--fg); }
1483
- .ds-file-selectall:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
1479
+ .ds-file-selectall:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
1484
1480
  .ds-file-controls { display: flex; align-items: center; gap: var(--space-2); padding: 0 var(--space-2) var(--space-1); flex-wrap: wrap; }
1485
1481
  .ds-file-controls .spread { flex: 1 1 auto; }
1486
1482
  .ds-file-controls .ds-file-sort { padding: 0; }
@@ -1518,7 +1514,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
1518
1514
  }
1519
1515
  .ds-density-btn:hover { color: var(--fg); }
1520
1516
  .ds-density-btn.active { background: var(--accent-tint); color: var(--fg); }
1521
- .ds-density-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
1517
+ .ds-density-btn:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
1522
1518
 
1523
1519
  /* Compact density — tighter rows for long listings. */
1524
1520
  .ds-file-grid[data-density="compact"] { gap: 2px; }
@@ -1552,7 +1548,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
1552
1548
  background: none; border: none; cursor: pointer; color: var(--fg);
1553
1549
  }
1554
1550
  .ds-file-cell-open[disabled] { cursor: default; }
1555
- .ds-file-cell-open:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; border-radius: var(--r-2); }
1551
+ .ds-file-cell-open:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; border-radius: var(--r-2); }
1556
1552
  .ds-file-cell-media {
1557
1553
  display: flex; align-items: center; justify-content: center;
1558
1554
  width: 100%; aspect-ratio: 4 / 3;
@@ -1770,7 +1766,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
1770
1766
  color: var(--fg-2); font-family: var(--ff-body); font-size: var(--fs-micro);
1771
1767
  }
1772
1768
  .ds-upload-act:hover { background: var(--bg-3); color: var(--fg); }
1773
- .ds-upload-act:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
1769
+ .ds-upload-act:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
1774
1770
  @media (hover: none), (pointer: coarse) {
1775
1771
  .ds-upload-act { min-height: 44px; min-width: 44px; }
1776
1772
  /* 44px floor for file controls on ANY touch device, not only narrow ones
@@ -1841,7 +1837,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
1841
1837
  border-radius: var(--r-2); color: var(--fg);
1842
1838
  font-family: inherit; font-size: var(--fs-sm);
1843
1839
  }
1844
- .ds-modal-input:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
1840
+ .ds-modal-input:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
1845
1841
  /* iOS auto-zooms inputs under 16px on focus, breaking the modal layout. */
1846
1842
  @media (hover: none), (pointer: coarse) {
1847
1843
  .ds-modal-input { font-size: 16px; min-height: 44px; }
@@ -2005,7 +2001,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
2005
2001
  .ds-kbd-sep { color: var(--fg-3); font-size: var(--fs-micro); padding: 0 2px; }
2006
2002
  .ds-kbd {
2007
2003
  display: inline-block; min-width: 0;
2008
- padding: 2px 7px; border-radius: 6px;
2004
+ padding: 2px 7px; border-radius: var(--r-0);
2009
2005
  background: var(--bg); border: var(--bw-hair) solid var(--rule);
2010
2006
  border-bottom-width: 2px;
2011
2007
  font-family: var(--ff-mono); font-size: var(--fs-micro); color: var(--fg-2);
@@ -2027,7 +2023,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
2027
2023
  transition: color var(--dur-base) var(--ease), background var(--dur-base) var(--ease);
2028
2024
  }
2029
2025
  .ds-segmented .ds-seg-btn:hover { color: var(--fg); }
2030
- .ds-segmented .ds-seg-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
2026
+ .ds-segmented .ds-seg-btn:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
2031
2027
  .ds-segmented .ds-seg-btn.is-on {
2032
2028
  background: var(--bg); color: var(--fg);
2033
2029
  box-shadow: inset 0 0 0 var(--bw-hair, 1px) var(--rule);
@@ -2081,7 +2077,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
2081
2077
  .chat-thread { scroll-behavior: smooth; }
2082
2078
  }
2083
2079
  .chat-thread::-webkit-scrollbar { width: 8px; }
2084
- .chat-thread::-webkit-scrollbar-thumb { background: var(--bg-3); border-radius: 4px; }
2080
+ .chat-thread::-webkit-scrollbar-thumb { background: var(--bg-3); border-radius: var(--r-0); }
2085
2081
  .chat-empty {
2086
2082
  margin: auto;
2087
2083
  text-align: center;
@@ -2095,7 +2091,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
2095
2091
  .chat-msg { display: flex; gap: 12px; align-items: flex-start; padding: 6px 0; position: relative; min-width: 0; }
2096
2092
  .chat-msg.you { flex-direction: row-reverse; }
2097
2093
  .chat-msg.you .chat-stack { align-items: flex-end; }
2098
- .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); }
2094
+ .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); }
2099
2095
 
2100
2096
  .chat-avatar {
2101
2097
  width: 36px; height: 36px; flex-shrink: 0;
@@ -2141,7 +2137,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
2141
2137
  .chat-bubble code {
2142
2138
  font-family: var(--ff-mono); font-size: 0.92em;
2143
2139
  background: color-mix(in oklab, var(--fg) 10%, transparent);
2144
- padding: 1px 6px; border-radius: 4px;
2140
+ padding: 1px 6px; border-radius: var(--r-0);
2145
2141
  }
2146
2142
  .chat-msg.you .chat-bubble code { background: color-mix(in oklab, var(--fg) 10%, transparent); }
2147
2143
  .chat-bubble a {
@@ -2252,7 +2248,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
2252
2248
  .chat-msg.you .chat-image,
2253
2249
  .chat-msg .chat-image,
2254
2250
  .chat-image {
2255
- display: inline-block; border-radius: 12px; overflow: hidden;
2251
+ display: inline-block; border-radius: var(--r-1); overflow: hidden;
2256
2252
  max-width: min(100%, 480px); background: var(--bg-2);
2257
2253
  text-decoration: none; color: var(--fg);
2258
2254
  border: 1px solid color-mix(in oklab, var(--fg) 10%, transparent);
@@ -2271,7 +2267,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
2271
2267
  .chat-file {
2272
2268
  display: flex; align-items: center; gap: 12px; padding: 12px 14px;
2273
2269
  background: var(--bg-2); border: 1px solid color-mix(in oklab, var(--fg) 10%, transparent);
2274
- border-radius: 12px; text-decoration: none; color: var(--fg);
2270
+ border-radius: var(--r-1); text-decoration: none; color: var(--fg);
2275
2271
  max-width: min(100%, 360px);
2276
2272
  transition: background var(--dur-snap, .15s) var(--ease, ease), border-color var(--dur-snap, .15s) var(--ease, ease);
2277
2273
  }
@@ -2280,7 +2276,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
2280
2276
  font-size: 22px; width: 36px; height: 36px;
2281
2277
  display: inline-flex; align-items: center; justify-content: center;
2282
2278
  background: color-mix(in oklab, var(--accent) 18%, transparent);
2283
- color: var(--accent-ink); border-radius: 8px; flex-shrink: 0; font-family: var(--ff-mono);
2279
+ color: var(--accent-ink); border-radius: var(--r-0); flex-shrink: 0; font-family: var(--ff-mono);
2284
2280
  }
2285
2281
  .chat-file > div { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
2286
2282
  .chat-file .name {
@@ -2298,7 +2294,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
2298
2294
  background: var(--bg-2);
2299
2295
  color: var(--fg);
2300
2296
  border: 1px solid color-mix(in oklab, var(--fg) 10%, transparent);
2301
- border-radius: 12px; overflow: hidden; max-width: min(100%, 480px);
2297
+ border-radius: var(--r-1); overflow: hidden; max-width: min(100%, 480px);
2302
2298
  transition: box-shadow 0.12s ease, border-color 0.12s ease;
2303
2299
  }
2304
2300
  .chat-msg:hover .chat-pdf { border-color: color-mix(in oklab, var(--accent) 30%, transparent); }
@@ -2321,7 +2317,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
2321
2317
  display: grid; grid-template-columns: 80px 1fr; gap: 12px; padding: 10px;
2322
2318
  background: var(--bg-2);
2323
2319
  border: 1px solid color-mix(in oklab, var(--fg) 10%, transparent);
2324
- border-radius: 12px; text-decoration: none; color: var(--fg);
2320
+ border-radius: var(--r-1); text-decoration: none; color: var(--fg);
2325
2321
  max-width: min(100%, 480px);
2326
2322
  transition: background var(--dur-snap, .15s) var(--ease, ease), border-color var(--dur-snap, .15s) var(--ease, ease), box-shadow 0.15s ease;
2327
2323
  }
@@ -2332,7 +2328,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
2332
2328
  }
2333
2329
  .chat-link:not(:has(.thumb)):not(:has(img)) { grid-template-columns: 1fr; }
2334
2330
  .chat-link .thumb,
2335
- .chat-link img.thumb { width: 80px; height: 80px; border-radius: 8px; object-fit: cover; background: var(--bg-3) center/cover no-repeat; }
2331
+ .chat-link img.thumb { width: 80px; height: 80px; border-radius: var(--r-0); object-fit: cover; background: var(--bg-3) center/cover no-repeat; }
2336
2332
  .chat-link .meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
2337
2333
  .chat-link .host { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); text-transform: lowercase; }
2338
2334
  .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; }
@@ -2356,7 +2352,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
2356
2352
  display: inline-flex; align-items: center; gap: 4px;
2357
2353
  padding: 2px 8px; background: var(--bg-2);
2358
2354
  border: 1px solid color-mix(in oklab, var(--fg) 10%, transparent);
2359
- border-radius: 999px; font-size: var(--fs-xs);
2355
+ border-radius: var(--r-pill); font-size: var(--fs-xs);
2360
2356
  cursor: pointer; user-select: none;
2361
2357
  transition: background var(--dur-snap, .12s) var(--ease, ease), border-color var(--dur-snap, .12s) var(--ease, ease), transform 0.12s ease;
2362
2358
  position: relative;
@@ -2477,7 +2473,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
2477
2473
  .chat-composer .send:active { filter: brightness(0.94); }
2478
2474
  .chat-composer .send:focus-visible,
2479
2475
  .composer-btn:focus-visible {
2480
- outline: 2px solid var(--accent);
2476
+ outline: 2px solid var(--accent-ink);
2481
2477
  outline-offset: 2px;
2482
2478
  }
2483
2479
  .chat-composer .send:disabled {
@@ -2589,8 +2585,13 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
2589
2585
  Component States — Disabled, Loading, Error, Success
2590
2586
  -------------------------------------------------------------- */
2591
2587
 
2592
- /* Disabled state for all interactive elements */
2588
+ /* Disabled state for all interactive elements. The `.is-disabled` class
2589
+ variants cover Btn()'s anchor-rendered case (shell.js) — an <a> has no
2590
+ :disabled pseudo-class, so a disabled link-styled button relies entirely
2591
+ on this class selector for its visual treatment (aria-disabled + tabindex
2592
+ are set in JS; this is the paired CSS half). */
2593
2593
  .btn:disabled, .btn-primary:disabled, .btn-ghost:disabled,
2594
+ .btn.is-disabled, .btn-primary.is-disabled, .btn-ghost.is-disabled,
2594
2595
  button:disabled, [disabled] {
2595
2596
  opacity: 0.6;
2596
2597
  cursor: not-allowed;
@@ -2927,7 +2928,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
2927
2928
 
2928
2929
  /* Base focus-visible: 2px ring + 2px offset clears dark bg-3 surfaces (WCAG 1.4.11) */
2929
2930
  :focus-visible {
2930
- outline: 2px solid var(--accent);
2931
+ outline: 2px solid var(--accent-ink);
2931
2932
  outline-offset: 2px;
2932
2933
  }
2933
2934
 
@@ -2937,7 +2938,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
2937
2938
  [role="tab"]:focus-visible,
2938
2939
  .row:focus-visible,
2939
2940
  .row[tabindex]:focus-visible {
2940
- outline: 2px solid var(--accent);
2941
+ outline: 2px solid var(--accent-ink);
2941
2942
  outline-offset: 2px;
2942
2943
  }
2943
2944
 
@@ -3327,7 +3328,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3327
3328
  border-radius: var(--r-1, 6px);
3328
3329
  cursor: pointer;
3329
3330
  }
3330
- .app-side-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
3331
+ .app-side-toggle:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
3331
3332
  @container (max-width: 900px) {
3332
3333
  .app-side-toggle { display: inline-flex; }
3333
3334
  .app-topbar .brand { margin-left: 44px; }
@@ -3417,7 +3418,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3417
3418
  .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; }
3418
3419
  .ws-resizer::after { content: ""; display: block; width: 2px; height: 100%; margin: 0 auto; background: transparent; transition: background var(--dur-snap) var(--ease); }
3419
3420
  .ws-resizer:hover::after, .ws-resizer:focus-visible::after { background: var(--accent); }
3420
- .ws-resizer:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
3421
+ .ws-resizer:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; }
3421
3422
  .ws-resizer.ws-resizer-rail { grid-column: 1; }
3422
3423
  .ws-resizer.ws-resizer-sessions { grid-column: 2; }
3423
3424
  .ws-resizer.ws-resizer-pane { grid-column: 3; justify-self: end; }
@@ -3469,7 +3470,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3469
3470
  border-radius: var(--r-1); cursor: pointer;
3470
3471
  }
3471
3472
  .ws-rail-toggle:hover { background: var(--bg-3); color: var(--fg); }
3472
- .ws-rail-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
3473
+ .ws-rail-toggle:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
3473
3474
  .ws-rail-inner { display: flex; flex-direction: column; min-height: 0; flex: 1; padding: var(--space-3) var(--space-2); gap: var(--space-2); }
3474
3475
  .ws-rail-head { display: flex; align-items: center; min-height: 36px; padding: 0 var(--space-2); }
3475
3476
  .ws-rail-brand { font-family: var(--ff-body); font-weight: 600; font-size: var(--fs-body); color: var(--fg); white-space: nowrap; overflow: hidden; }
@@ -3482,7 +3483,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3482
3483
  min-height: 40px; white-space: nowrap; overflow: hidden;
3483
3484
  }
3484
3485
  .ws-rail-action:hover { filter: brightness(1.08); }
3485
- .ws-rail-action:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
3486
+ .ws-rail-action:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
3486
3487
  .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; }
3487
3488
  .ws-rail-item {
3488
3489
  display: flex; align-items: center; gap: var(--space-2);
@@ -3492,7 +3493,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3492
3493
  font-family: var(--ff-body); font-size: var(--fs-sm); white-space: nowrap; overflow: hidden;
3493
3494
  }
3494
3495
  .ws-rail-item:hover { background: var(--bg-3); color: var(--fg); }
3495
- .ws-rail-item:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
3496
+ .ws-rail-item:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: -2px; }
3496
3497
  .ws-rail-item.active { background: var(--accent-tint); color: var(--fg); box-shadow: inset 2px 0 0 var(--accent); }
3497
3498
  .ws-rail-item-label { flex: 1; overflow: hidden; text-overflow: ellipsis; }
3498
3499
  .ws-rail-item-count { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3); }
@@ -3565,7 +3566,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3565
3566
  /* Desktop-only chrome toggle (sessions collapse): inverse of the mobile drawer-toggle. */
3566
3567
  .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); }
3567
3568
  .ws-desktop-toggle:hover { background: var(--bg-2); color: var(--fg); }
3568
- .ws-desktop-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
3569
+ .ws-desktop-toggle:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
3569
3570
  @media (max-width: 900px) { .ws-desktop-toggle { display: none; } }
3570
3571
  /* The pane collapse toggle is meaningless once the pane TRACK is dropped (the
3571
3572
  pane becomes a mobile overlay drawer at <=1480px, reached via its own
@@ -3689,7 +3690,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3689
3690
  .ws-crumb .app-crumb .crumb-right { margin-left: 0; flex-wrap: wrap; min-width: 0; display: inline-flex; }
3690
3691
  }
3691
3692
  .ws-drawer-toggle:hover { background: var(--bg-2); color: var(--fg); }
3692
- .ws-drawer-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
3693
+ .ws-drawer-toggle:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
3693
3694
 
3694
3695
  @media (prefers-reduced-motion: reduce) {
3695
3696
  .ws-shell, .ws-rail, .ws-pane, .ws-sessions, .ws-scrim { transition: none; }
@@ -3701,7 +3702,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3701
3702
  ============================================================ */
3702
3703
 
3703
3704
  /* Highlighted match inside a Row title (Row `highlight` prop). */
3704
- .ds-hl { background: color-mix(in oklab, var(--accent) 25%, transparent); color: inherit; border-radius: 2px; }
3705
+ .ds-hl { background: color-mix(in oklab, var(--accent) 25%, transparent); color: inherit; border-radius: var(--r-hair); }
3705
3706
 
3706
3707
  /* Action strip rendered inside an EXPANDED Row (Row `actions` prop). The
3707
3708
  buttons stop propagation so they never fire the row onClick. */
@@ -3714,20 +3715,20 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3714
3715
  transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
3715
3716
  }
3716
3717
  .row-act:hover { background: var(--bg-3); color: var(--fg); }
3717
- .row-act:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
3718
+ .row-act:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
3718
3719
 
3719
3720
  /* FilterPills - a group of pill toggle buttons (aria-pressed). */
3720
3721
  .ds-filter-pills { display: flex; flex-wrap: wrap; gap: var(--space-2); }
3721
3722
  .ds-filter-pill {
3722
3723
  display: inline-flex; align-items: center; justify-content: center;
3723
3724
  padding: 4px 12px; min-height: 28px;
3724
- background: var(--bg-2); border: var(--bw-hair) solid var(--bg-3); border-radius: 999px;
3725
+ background: var(--bg-2); border: var(--bw-hair) solid var(--bg-3); border-radius: var(--r-pill);
3725
3726
  color: var(--fg-2); font-family: var(--ff-body); font-size: var(--fs-tiny); cursor: pointer;
3726
3727
  transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
3727
3728
  }
3728
3729
  .ds-filter-pill:hover { background: var(--bg-3); color: var(--fg); }
3729
3730
  .ds-filter-pill.active { background: var(--accent-tint); color: var(--fg); border-color: var(--accent); }
3730
- .ds-filter-pill:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
3731
+ .ds-filter-pill:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
3731
3732
 
3732
3733
  /* Touch floor for the new small controls. */
3733
3734
  @media (pointer: coarse) {
@@ -3737,7 +3738,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3737
3738
  /* Disabled file actions (read-only row / in-flight mutation) stay visible but inert. */
3738
3739
  .ds-file-act:disabled { opacity: .45; cursor: default; }
3739
3740
  .ds-file-act:disabled:hover { background: transparent; color: var(--fg-3); }
3740
- .ds-file-act:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
3741
+ .ds-file-act:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 1px; }
3741
3742
 
3742
3743
  /* ============================================================
3743
3744
  Print — linearize WorkspaceShell so main content prints in full.
@@ -3788,7 +3789,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3788
3789
  /* PhaseWalk */
3789
3790
  .ds-phasewalk { display: inline-flex; gap: 2px; vertical-align: middle; }
3790
3791
  .ds-phasewalk-seg {
3791
- width: 18px; height: 10px; border-radius: 2px;
3792
+ width: 18px; height: 10px; border-radius: var(--r-hair);
3792
3793
  background: var(--bg-3); position: relative;
3793
3794
  }
3794
3795
  .ds-phasewalk-seg.is-reached { background: var(--success); }
@@ -3827,8 +3828,8 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3827
3828
  /* BarRow */
3828
3829
  .ds-bar-row { display: flex; align-items: center; gap: 8px; margin: 3px 0; font-size: var(--fs-tiny); }
3829
3830
  .ds-bar-row-label { width: 100px; flex-shrink: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
3830
- .ds-bar-bg { flex: 1; min-width: 60px; background: var(--bg-3); border-radius: 2px; height: 6px; overflow: hidden; }
3831
- .ds-bar-fill { background: var(--accent); height: 100%; border-radius: 2px; }
3831
+ .ds-bar-bg { flex: 1; min-width: 60px; background: var(--bg-3); border-radius: var(--r-hair); height: 6px; overflow: hidden; }
3832
+ .ds-bar-fill { background: var(--accent); height: 100%; border-radius: var(--r-hair); }
3832
3833
  .ds-bar-row-value { flex-shrink: 0; color: var(--fg-2); max-width: 40%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
3833
3834
  @media (max-width: 400px) {
3834
3835
  .ds-bar-row-label { width: 72px; }
@@ -3843,7 +3844,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3843
3844
  .ds-stats-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-1); }
3844
3845
  }
3845
3846
  .ds-stats-grid-empty { padding: var(--space-3); color: var(--fg-3); font-size: var(--fs-tiny); }
3846
- .ds-stat { min-width: 0; background: var(--bg-3); border-radius: 4px; padding: 10px 12px; }
3847
+ .ds-stat { min-width: 0; background: var(--bg-3); border-radius: var(--r-0); padding: 10px 12px; }
3847
3848
  .ds-stat-val { font-size: clamp(18px, 5cqi, 22px); font-weight: 700; color: var(--accent-ink); overflow-wrap: anywhere; }
3848
3849
  .ds-stat-val.rate-big { font-size: clamp(24px, 7cqi, 32px); color: var(--success); }
3849
3850
  .ds-stat-val.err-rate { font-size: clamp(24px, 7cqi, 32px); color: var(--warn); }
@@ -3854,7 +3855,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3854
3855
  .ds-sub-grid-empty { padding: var(--space-3); color: var(--fg-3); font-size: var(--fs-tiny); }
3855
3856
  .ds-sub-btn {
3856
3857
  padding: 6px 10px; background: var(--bg-3); border: var(--bw-hair) solid var(--bg-3);
3857
- border-radius: 4px; font-size: var(--fs-tiny); cursor: pointer; color: var(--fg);
3858
+ border-radius: var(--r-0); font-size: var(--fs-tiny); cursor: pointer; color: var(--fg);
3858
3859
  text-align: left; font-family: var(--ff-body);
3859
3860
  }
3860
3861
  .ds-sub-btn:hover { border-color: var(--accent); color: var(--accent-ink); }
@@ -3885,7 +3886,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3885
3886
  /* DevRow */
3886
3887
  .ds-dev-row {
3887
3888
  background: var(--danger-surface); border-left: var(--bw-chunk) solid var(--warn);
3888
- padding: 8px 12px; margin: 4px 0; border-radius: 3px; font-size: var(--fs-tiny);
3889
+ padding: 8px 12px; margin: 4px 0; border-radius: var(--r-hair); font-size: var(--fs-tiny);
3889
3890
  }
3890
3891
  .ds-dev-row strong { color: var(--warn); }
3891
3892
 
@@ -3905,7 +3906,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3905
3906
  .ds-live-log-entry { padding: 2px 8px; border-bottom: var(--bw-hair) solid var(--bg-3); overflow-wrap: anywhere; }
3906
3907
  .ds-live-log-entry:hover { background: var(--bg-3); }
3907
3908
  .ds-live-log-ts { margin-right: 6px; color: var(--fg-3); }
3908
- .ds-live-log-subtag { margin-right: 6px; padding: 0 5px; border-radius: 2px; font-size: var(--fs-micro); }
3909
+ .ds-live-log-subtag { margin-right: 6px; padding: 0 5px; border-radius: var(--r-hair); font-size: var(--fs-micro); }
3909
3910
  .ds-live-log-preview { margin-left: 6px; color: var(--fg-3); word-break: break-word; }
3910
3911
 
3911
3912
  /* Touch floors for the dense controls (not covered by the mobile width blocks). */
@@ -3941,6 +3942,13 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3941
3942
  @media (max-width: 760px) {
3942
3943
  .ds-panel-duo { grid-template-columns: 1fr; }
3943
3944
  }
3945
+ /* Wide-viewport density: auto-fit grid so panel COUNT tracks actual children
3946
+ instead of a hardcoded column number — 2 children sit 2-up, 5 wrap to a
3947
+ third row, never an arbitrary 3-card reflex (same auto-fit/minmax pattern
3948
+ as .ds-tile-grid). Panels floor at 280px before wrapping, so ultra-wide
3949
+ screens still get more columns than a fixed repeat(3, ...) ever allowed. */
3950
+ .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; }
3951
+ .ds-panel-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: var(--space-2); margin: var(--space-2) 0; }
3944
3952
  /* wide dense rows/tables scroll inside their panel, never the page */
3945
3953
  .ds-scroll-x { overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 100%; }
3946
3954
 
@@ -3951,7 +3959,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
3951
3959
  max-width: min(1100px, 100%);
3952
3960
  margin: var(--space-3) auto;
3953
3961
  background: var(--bg-2);
3954
- border-radius: 18px;
3962
+ border-radius: var(--r-2);
3955
3963
  padding: clamp(16px, 5vw, 64px);
3956
3964
  box-sizing: border-box;
3957
3965
  display: flex;
@@ -4013,7 +4021,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
4013
4021
  .ds-slide-split { grid-template-columns: 1fr; }
4014
4022
  }
4015
4023
  .ds-slide-split-cell {
4016
- padding: 18px; background: var(--bg-2); border-radius: 14px;
4024
+ padding: 18px; background: var(--bg-2); border-radius: var(--r-2);
4017
4025
  color: var(--fg-2); font-size: var(--fs-lg); line-height: var(--lh-base); min-width: 0;
4018
4026
  }
4019
4027
  .ds-slide-split-cell--accent { border-left: 3px solid var(--slide-accent, var(--accent)); }
@@ -4030,7 +4038,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
4030
4038
  .ds-err-path {
4031
4039
  display: inline-flex; gap: 6px; align-items: baseline; flex-wrap: wrap; max-width: 100%;
4032
4040
  font-family: var(--ff-mono); font-size: 13px; color: var(--panel-text-2);
4033
- background: var(--panel-1); padding: 6px 12px; border-radius: 8px;
4041
+ background: var(--panel-1); padding: 6px 12px; border-radius: var(--r-0);
4034
4042
  overflow-wrap: anywhere; word-break: break-all;
4035
4043
  }
4036
4044
 
@@ -4046,10 +4054,15 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
4046
4054
  }
4047
4055
  .ds-gallery-tile {
4048
4056
  cursor: pointer; display: flex; flex-direction: column; gap: 6px;
4049
- padding: 12px; border-radius: 10px; min-height: clamp(120px, 18vw, 160px);
4057
+ padding: 12px; border-radius: var(--r-1); min-height: clamp(120px, 18vw, 160px);
4050
4058
  border: 0; text-align: left; font: inherit; color: inherit;
4051
4059
  background: var(--tile-tone, var(--panel-1));
4060
+ transition: transform var(--dur-base) var(--ease), box-shadow var(--dur-base) var(--ease);
4052
4061
  }
4062
+ /* Flat tonal fill only (house style: no bespoke tile chrome, no borders — see
4063
+ .ds-feature above), so the hover affordance is a lift, matching the same
4064
+ translateY + shadow idiom .chat-msg:hover .chat-bubble already uses. */
4065
+ .ds-gallery-tile:hover { transform: translateY(-2px); box-shadow: 0 2px 8px color-mix(in oklab, var(--fg) 10%, transparent); }
4053
4066
  .ds-gallery-tile:focus-visible { outline: 2px solid var(--accent-ink); outline-offset: 2px; }
4054
4067
  .ds-gallery-tile--tight { min-height: clamp(96px, 14vw, 120px); }
4055
4068
  .ds-lightbox {
@@ -4060,7 +4073,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
4060
4073
  z-index: 50;
4061
4074
  }
4062
4075
  .ds-lightbox-card {
4063
- background: var(--panel-0); border-radius: 14px; padding: clamp(16px, 4vw, 28px);
4076
+ background: var(--panel-0); border-radius: var(--r-2); padding: clamp(16px, 4vw, 28px);
4064
4077
  width: min(520px, 100%); min-width: 0;
4065
4078
  max-height: calc(100vh - 24px);
4066
4079
  max-height: calc(100dvh - 24px);
@@ -4068,7 +4081,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
4068
4081
  display: flex; flex-direction: column; gap: 14px;
4069
4082
  }
4070
4083
  .ds-lightbox-preview {
4071
- padding: clamp(16px, 6vw, 36px); border-radius: 10px; text-align: center;
4084
+ padding: clamp(16px, 6vw, 36px); border-radius: var(--r-1); text-align: center;
4072
4085
  font-family: var(--ff-mono); white-space: pre-line; font-size: clamp(16px, 5vw, 24px);
4073
4086
  background: var(--tile-tone, var(--panel-1));
4074
4087
  }
@@ -4090,7 +4103,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
4090
4103
  }
4091
4104
  .ds-swatch-grid-lg { grid-template-columns: repeat(auto-fill, minmax(min(150px, 100%), 1fr)); }
4092
4105
  .ds-swatch-col { display: flex; flex-direction: column; gap: 6px; }
4093
- .ds-swatch-chip { height: 48px; border-radius: 10px; border: 1px solid var(--rule); background: var(--swatch, var(--panel-1)); }
4106
+ .ds-swatch-chip { height: 48px; border-radius: var(--r-1); border: 1px solid var(--rule); background: var(--swatch, var(--panel-1)); }
4094
4107
  .ds-swatch-chip--big { height: 64px; }
4095
4108
  .ds-swatch-name { font-family: var(--ff-mono); font-size: 11px; color: var(--fg-3); }
4096
4109
  .ds-type-panel { padding: clamp(10px, 2.5vw, 14px) clamp(10px, 3vw, 18px); display: flex; flex-direction: column; gap: 14px; }
@@ -4152,14 +4165,14 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
4152
4165
  .ds-savebar {
4153
4166
  position: sticky; bottom: 8px; display: flex; align-items: center;
4154
4167
  justify-content: flex-end; gap: 8px; flex-wrap: wrap; padding: 10px;
4155
- background: var(--panel-2); border-radius: 10px; margin: 8px 0;
4168
+ background: var(--panel-2); border-radius: var(--r-1); margin: 8px 0;
4156
4169
  }
4157
4170
  .ds-savebar-note { flex: 1 1 160px; min-width: 0; color: var(--panel-text-2); }
4158
4171
  .ds-settings-modal { min-width: min(320px, calc(100vw - 32px)); max-width: 480px; }
4159
4172
  .ds-modal-body-form { padding: 16px; display: flex; flex-direction: column; gap: 12px; }
4160
4173
  .ds-modal-note { margin: 0 0 8px; color: var(--panel-text-2); font-size: 14px; }
4161
4174
  .ds-draft-preview {
4162
- background: var(--panel-1); padding: 12px; border-radius: 6px;
4175
+ background: var(--panel-1); padding: 12px; border-radius: var(--r-0);
4163
4176
  font-size: 13px; color: var(--panel-text-2); max-height: 120px;
4164
4177
  overflow-y: auto; font-family: var(--ff-mono); overflow-wrap: anywhere;
4165
4178
  }
@@ -4180,7 +4193,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
4180
4193
  .ds-auth-remember { display: flex; align-items: center; gap: 6px; cursor: pointer; }
4181
4194
  .ds-auth-remember-text { color: var(--panel-text-2); font-size: 13px; }
4182
4195
  .ds-auth-forgot { font-size: 13px; }
4183
- .ds-auth-error { padding: 8px 10px; background: var(--panel-1); border-radius: 8px; color: var(--danger); font-size: 13px; overflow-wrap: anywhere; }
4196
+ .ds-auth-error { padding: 8px 10px; background: var(--panel-1); border-radius: var(--r-0); color: var(--danger); font-size: 13px; overflow-wrap: anywhere; }
4184
4197
  .ds-auth-divider { display: flex; align-items: center; gap: 10px; margin: 6px 0; color: var(--panel-text-3); font-size: 12px; }
4185
4198
  .ds-auth-divider-line { flex: 1; height: 1px; background: var(--panel-2); }
4186
4199
  .ds-auth-providers { display: flex; gap: 8px; flex-wrap: wrap; }
@@ -4204,7 +4217,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
4204
4217
  .ds-tile-meta { display: flex; align-items: center; justify-content: space-between; gap: 6px; font-size: 12px; flex-wrap: wrap; min-width: 0; }
4205
4218
  .ds-tile-glyph { font-family: var(--ff-mono); color: var(--panel-text-3); }
4206
4219
  .ds-tile-label { color: var(--panel-text); overflow-wrap: anywhere; }
4207
- .ds-gal-swatch { height: 64px; border-radius: 8px; background: var(--swatch, var(--panel-1)); }
4220
+ .ds-gal-swatch { height: 64px; border-radius: var(--r-0); background: var(--swatch, var(--panel-1)); }
4208
4221
  .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; }
4209
4222
  .ds-gal-swatch-name { color: var(--panel-text); }
4210
4223
  .ds-gal-swatch-hint { color: var(--panel-text-3); overflow-wrap: anywhere; }
@@ -4225,7 +4238,7 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
4225
4238
  .ds-cli-warn .prompt, .ds-cli-warn .cmd { color: var(--mascot); }
4226
4239
  .ds-cli-log .prompt { color: var(--fg-3); }
4227
4240
  .ds-cli-log .cmd { color: var(--fg-2); font-family: var(--ff-mono); }
4228
- .ds-term-body { padding: 14px 18px; display: flex; flex-direction: column; gap: 4px; background: var(--bg-2); border-radius: 10px; }
4241
+ .ds-term-body { padding: 14px 18px; display: flex; flex-direction: column; gap: 4px; background: var(--bg-2); border-radius: var(--r-1); }
4229
4242
  .ds-term-body--tall { min-height: 280px; }
4230
4243
  .ds-term-input-row { margin-top: 6px; }
4231
4244
  .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); }