anentrypoint-design 1.0.18 → 1.0.20

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.
@@ -180,6 +180,13 @@
180
180
  --panel-text-3: var(--fg-3);
181
181
  --panel-accent-2: var(--accent-bright, var(--accent));
182
182
  --panel-shadow: 0 1px 0 color-mix(in oklab, var(--fg) 6%, transparent), 0 4px 14px color-mix(in oklab, var(--fg) 8%, transparent);
183
+ /* Single-layer, half-strength companion to --shadow-1, used ONLY by .panel.
184
+ .panel already carries a tonal --panel-1 fill and a --rule border; a
185
+ full --shadow-1 on top made three simultaneous edge/surface signals
186
+ read as boxed/cardy rather than PilotDeck's flat, near-borderless look.
187
+ --shadow-1/2/3 stay untouched — they are the real elevation scale for
188
+ things that must read as floating (dialog/dropdown/tooltip/toast). */
189
+ --panel-shadow-1: 0 1px 2px color-mix(in oklab, var(--fg) 4%, transparent);
183
190
 
184
191
  /* Type — system-font stack, no custom web fonts loaded. */
185
192
  --ff-display: system-ui, sans-serif;
@@ -214,7 +221,7 @@
214
221
  --fs-h4: clamp(24px, 2cqi, 28px);
215
222
  --fs-h3: clamp(26px, 2.6cqi, 34px);
216
223
  --fs-h2: clamp(28px, 3.6cqi, 44px);
217
- --fs-h1: clamp(34px, 5cqi, 64px);
224
+ --fs-h1: clamp(34px, 4.4cqi, 52px);
218
225
  --fs-hero: clamp(42px, 7cqi, 96px);
219
226
  --fs-mega: clamp(56px, 11cqi, 168px);
220
227
  /* Bridges the fixed --fs-* ladder (tops out at --fs-xl, 21px) and the fluid
@@ -234,9 +241,9 @@
234
241
  marketing/hero layouts (h1 up to 64px). Application chrome — page titles,
235
242
  panel headers — needs a compact ceiling so a PageHeader title doesn't
236
243
  dwarf the content. Opt in with `data-typescale="app"` on a container. */
237
- --fs-h1-app: clamp(22px, 2.4cqi, 30px);
238
- --fs-h2-app: clamp(19px, 2cqi, 24px);
239
- --fs-h3-app: clamp(17px, 1.8cqi, 20px);
244
+ --fs-h1-app: clamp(22px, 2cqi, 26px);
245
+ --fs-h2-app: clamp(18px, 1.6cqi, 21px);
246
+ --fs-h3-app: clamp(16px, 1.5cqi, 18px);
240
247
  --fs-h4-app: clamp(15px, 1.6cqi, 17px);
241
248
 
242
249
  --lh-tight: 1.05;
@@ -283,7 +290,14 @@
283
290
  --bw-chunk: 4px;
284
291
  --bw-slab: 8px;
285
292
 
286
- --rule: color-mix(in oklab, currentColor 14%, transparent);
293
+ /* Retuned toward PilotDeck's near-borderless whisper: 14% read as a visibly
294
+ drawn line, not a hairline. 8% keeps the edge perceptible (still enough to
295
+ separate a --panel-1-filled surface from its --bg backdrop) without
296
+ competing with the fill + shadow already doing the container-definition
297
+ work in .panel. --rule-strong is untouched — it is the deliberate
298
+ stronger variant for places that need a visible seam (table rules, active
299
+ tab underline), not the ambient panel/card edge. */
300
+ --rule: color-mix(in oklab, currentColor 8%, transparent);
287
301
  --rule-strong: color-mix(in oklab, currentColor 28%, transparent);
288
302
 
289
303
  /* Micro rungs below --r-1 — chips, badges, scrollbar thumbs, tick marks
@@ -662,6 +676,7 @@ select:focus-visible {
662
676
  --panel-text-3: inherit;
663
677
  --panel-accent-2: inherit;
664
678
  --panel-shadow: inherit;
679
+ --panel-shadow-1: inherit;
665
680
  --on-accent: inherit;
666
681
  --on-color: inherit;
667
682
  --scrim: inherit;
@@ -781,14 +796,14 @@ select:focus-visible {
781
796
  --fs-h4: clamp(22px, 1.9cqi, 24px);
782
797
  --fs-h3: clamp(23px, 2.4cqi, 32px);
783
798
  --fs-h2: clamp(26px, 3.4cqi, 41px);
784
- --fs-h1: clamp(32px, 4.7cqi, 60px);
799
+ --fs-h1: clamp(32px, 4.2cqi, 48px);
785
800
  }
786
801
  [data-typescale="lg"] {
787
802
  --fs-body: 17px; --fs-lg: 20px; --fs-xl: 24px;
788
803
  --fs-h4: clamp(27px, 2.2cqi, 31px);
789
804
  --fs-h3: clamp(28px, 2.9cqi, 38px);
790
805
  --fs-h2: clamp(31px, 4cqi, 49px);
791
- --fs-h1: clamp(38px, 5.6cqi, 71px);
806
+ --fs-h1: clamp(38px, 4.8cqi, 58px);
792
807
  }
793
808
 
794
809
  /* Debug grid overlay — 8px mascot grid. Toggle via class on any container. */
package/dist/247420.css CHANGED
@@ -182,6 +182,13 @@
182
182
  --panel-text-3: var(--fg-3);
183
183
  --panel-accent-2: var(--accent-bright, var(--accent));
184
184
  --panel-shadow: 0 1px 0 color-mix(in oklab, var(--fg) 6%, transparent), 0 4px 14px color-mix(in oklab, var(--fg) 8%, transparent);
185
+ /* Single-layer, half-strength companion to --shadow-1, used ONLY by .panel.
186
+ .panel already carries a tonal --panel-1 fill and a --rule border; a
187
+ full --shadow-1 on top made three simultaneous edge/surface signals
188
+ read as boxed/cardy rather than PilotDeck's flat, near-borderless look.
189
+ --shadow-1/2/3 stay untouched — they are the real elevation scale for
190
+ things that must read as floating (dialog/dropdown/tooltip/toast). */
191
+ --panel-shadow-1: 0 1px 2px color-mix(in oklab, var(--fg) 4%, transparent);
185
192
 
186
193
  /* Type — system-font stack, no custom web fonts loaded. */
187
194
  --ff-display: system-ui, sans-serif;
@@ -216,7 +223,7 @@
216
223
  --fs-h4: clamp(24px, 2cqi, 28px);
217
224
  --fs-h3: clamp(26px, 2.6cqi, 34px);
218
225
  --fs-h2: clamp(28px, 3.6cqi, 44px);
219
- --fs-h1: clamp(34px, 5cqi, 64px);
226
+ --fs-h1: clamp(34px, 4.4cqi, 52px);
220
227
  --fs-hero: clamp(42px, 7cqi, 96px);
221
228
  --fs-mega: clamp(56px, 11cqi, 168px);
222
229
  /* Bridges the fixed --fs-* ladder (tops out at --fs-xl, 21px) and the fluid
@@ -236,9 +243,9 @@
236
243
  marketing/hero layouts (h1 up to 64px). Application chrome — page titles,
237
244
  panel headers — needs a compact ceiling so a PageHeader title doesn't
238
245
  dwarf the content. Opt in with `data-typescale="app"` on a container. */
239
- --fs-h1-app: clamp(22px, 2.4cqi, 30px);
240
- --fs-h2-app: clamp(19px, 2cqi, 24px);
241
- --fs-h3-app: clamp(17px, 1.8cqi, 20px);
246
+ --fs-h1-app: clamp(22px, 2cqi, 26px);
247
+ --fs-h2-app: clamp(18px, 1.6cqi, 21px);
248
+ --fs-h3-app: clamp(16px, 1.5cqi, 18px);
242
249
  --fs-h4-app: clamp(15px, 1.6cqi, 17px);
243
250
 
244
251
  --lh-tight: 1.05;
@@ -285,7 +292,14 @@
285
292
  --bw-chunk: 4px;
286
293
  --bw-slab: 8px;
287
294
 
288
- --rule: color-mix(in oklab, currentColor 14%, transparent);
295
+ /* Retuned toward PilotDeck's near-borderless whisper: 14% read as a visibly
296
+ drawn line, not a hairline. 8% keeps the edge perceptible (still enough to
297
+ separate a --panel-1-filled surface from its --bg backdrop) without
298
+ competing with the fill + shadow already doing the container-definition
299
+ work in .panel. --rule-strong is untouched — it is the deliberate
300
+ stronger variant for places that need a visible seam (table rules, active
301
+ tab underline), not the ambient panel/card edge. */
302
+ --rule: color-mix(in oklab, currentColor 8%, transparent);
289
303
  --rule-strong: color-mix(in oklab, currentColor 28%, transparent);
290
304
 
291
305
  /* Micro rungs below --r-1 — chips, badges, scrollbar thumbs, tick marks
@@ -664,6 +678,7 @@
664
678
  --panel-text-3: inherit;
665
679
  --panel-accent-2: inherit;
666
680
  --panel-shadow: inherit;
681
+ --panel-shadow-1: inherit;
667
682
  --on-accent: inherit;
668
683
  --on-color: inherit;
669
684
  --scrim: inherit;
@@ -783,14 +798,14 @@
783
798
  --fs-h4: clamp(22px, 1.9cqi, 24px);
784
799
  --fs-h3: clamp(23px, 2.4cqi, 32px);
785
800
  --fs-h2: clamp(26px, 3.4cqi, 41px);
786
- --fs-h1: clamp(32px, 4.7cqi, 60px);
801
+ --fs-h1: clamp(32px, 4.2cqi, 48px);
787
802
  }
788
803
  .ds-247420[data-typescale="lg"] {
789
804
  --fs-body: 17px; --fs-lg: 20px; --fs-xl: 24px;
790
805
  --fs-h4: clamp(27px, 2.2cqi, 31px);
791
806
  --fs-h3: clamp(28px, 2.9cqi, 38px);
792
807
  --fs-h2: clamp(31px, 4cqi, 49px);
793
- --fs-h1: clamp(38px, 5.6cqi, 71px);
808
+ --fs-h1: clamp(38px, 4.8cqi, 58px);
794
809
  }
795
810
 
796
811
  /* Debug grid overlay — 8px mascot grid. Toggle via class on any container. */
@@ -985,14 +1000,14 @@
985
1000
  border-radius: var(--r-pill, 999px);
986
1001
  }
987
1002
 
988
- .ds-247420 h1, .ds-247420 .t-h1 { font-family: var(--ff-display); font-size: var(--fs-h1); line-height: var(--lh-snug); letter-spacing: var(--tr-tight); font-weight: 600; margin: 0; }
1003
+ .ds-247420 h1, .ds-247420 .t-h1 { font-family: var(--ff-display); font-size: var(--fs-h1); line-height: var(--lh-snug); letter-spacing: var(--tr-tight); font-weight: var(--fw-semibold); margin: 0; }
989
1004
  .ds-247420 h2, .ds-247420 .t-h2 { font-family: var(--ff-display); font-size: var(--fs-h2); line-height: var(--lh-snug); letter-spacing: var(--tr-tight); font-weight: 600; margin: 0; }
990
1005
  .ds-247420 h3, .ds-247420 .t-h3 { font-family: var(--ff-display); font-size: var(--fs-h3); line-height: var(--lh-snug); letter-spacing: -0.01em; font-weight: 600; margin: 0; }
991
1006
  .ds-247420 h4, .ds-247420 .t-h4 { font-family: var(--ff-display); font-size: var(--fs-h4); line-height: var(--lh-snug); font-weight: 600; margin: 0; }
992
1007
 
993
- .ds-247420[data-typescale="app"] h1, .ds-247420[data-typescale="app"] .t-h1 { font-size: var(--fs-h1-app); line-height: 1.15; }
994
- .ds-247420[data-typescale="app"] h2, .ds-247420[data-typescale="app"] .t-h2 { font-size: var(--fs-h2-app); }
995
- .ds-247420[data-typescale="app"] h3, .ds-247420[data-typescale="app"] .t-h3 { font-size: var(--fs-h3-app); }
1008
+ .ds-247420[data-typescale="app"] h1, .ds-247420[data-typescale="app"] .t-h1 { font-size: var(--fs-h1-app); line-height: 1.15; font-weight: var(--fw-medium); }
1009
+ .ds-247420[data-typescale="app"] h2, .ds-247420[data-typescale="app"] .t-h2 { font-size: var(--fs-h2-app); font-weight: var(--fw-medium); }
1010
+ .ds-247420[data-typescale="app"] h3, .ds-247420[data-typescale="app"] .t-h3 { font-size: var(--fs-h3-app); font-weight: var(--fw-medium); }
996
1011
  .ds-247420[data-typescale="app"] h4, .ds-247420[data-typescale="app"] .t-h4 { font-size: var(--fs-h4-app); }
997
1012
 
998
1013
  .ds-247420 .t-hero { font-family: var(--ff-display); font-size: var(--fs-hero); line-height: var(--lh-tight); letter-spacing: var(--tr-tighter); font-weight: 700; margin: 0; }
@@ -1002,8 +1017,8 @@
1002
1017
  .ds-247420 .t-mono { font-family: var(--ff-mono); font-weight: 400; }
1003
1018
  .ds-247420 .t-body { font-family: var(--ff-body); }
1004
1019
 
1005
- .ds-247420 .t-label { font-family: var(--ff-mono); font-size: var(--fs-tiny); text-transform: uppercase; letter-spacing: var(--tr-label); font-weight: 500; }
1006
- .ds-247420 .t-micro { font-family: var(--ff-mono); font-size: var(--fs-micro); text-transform: uppercase; letter-spacing: var(--tr-label); color: var(--fg-3); }
1020
+ .ds-247420 .t-label { font-family: var(--ff-body); font-size: var(--fs-tiny); letter-spacing: 0; font-weight: 600; }
1021
+ .ds-247420 .t-micro { font-family: var(--ff-body); font-size: var(--fs-micro); letter-spacing: 0; color: var(--fg-3); font-weight: 600; }
1007
1022
  .ds-247420 .t-meta { font-family: var(--ff-body); font-size: var(--fs-sm); color: var(--fg-3); }
1008
1023
 
1009
1024
  .ds-247420 .lede, .ds-247420 .t-lede {
@@ -1422,9 +1437,9 @@
1422
1437
  outline-offset: var(--focus-offset);
1423
1438
  }
1424
1439
  .ds-247420 .app-side a.active {
1425
- color: var(--accent-fg);
1426
- background: var(--accent);
1427
- font-weight: 600;
1440
+ color: var(--fg);
1441
+ background: var(--bg-3);
1442
+ font-weight: 500;
1428
1443
  }
1429
1444
  .ds-247420 .app-side .count {
1430
1445
  background: color-mix(in oklab, var(--fg) 10%, transparent);
@@ -1432,15 +1447,16 @@
1432
1447
  padding: 3px 10px; font-size: var(--fs-micro); font-weight: 700;
1433
1448
  border-radius: var(--r-pill);
1434
1449
  }
1435
- /* The lime active pill is the sidebar's one accent moment; its own count
1436
- chip rides the ink-on-accent pair instead of a second competing hue.
1437
- The bare --accent here is deliberate and is NOT the usual accent-as-text
1438
- defect: the chip's own background is --accent-fg (ink), so this is the
1439
- INVERTED pair -- lime on ink, which is the high-contrast direction. Only
1440
- accent-coloured text on a normal background needs --accent-ink. */
1450
+ /* Active state is a flat neutral highlight (--bg-3/--fg), not an accent
1451
+ fill -- no hue, just a perceivable shade step up from the plain a[href]:hover
1452
+ (--bg-2). --fg over --bg-3 is the same body-text pairing used everywhere
1453
+ else in the sidebar, so it inherits that AA contrast for free instead of
1454
+ depending on a per-[data-accent] retune. The count chip stays on its
1455
+ default neutral pairing above; there is no accent-on-ink inversion to
1456
+ double down on anymore. */
1441
1457
  .ds-247420 .app-side a.active .count {
1442
- background: color-mix(in oklab, var(--accent-fg) 82%, transparent);
1443
- color: var(--accent);
1458
+ background: color-mix(in oklab, var(--fg) 16%, transparent);
1459
+ color: var(--fg-2);
1444
1460
  }
1445
1461
 
1446
1462
  .ds-247420 .app-main {
@@ -1546,31 +1562,27 @@
1546
1562
  }
1547
1563
 
1548
1564
  @media (min-width: 1400px) {
1549
- /* Fluid ceiling, not a hard stop: scales from 1400px up to 1920px across the
1550
- 1400-2200px viewport band (matches .ws-shell's 1920px ultrawide cap below)
1551
- instead of freezing at 1400px and leaving >1000px dead margin on a 2560px+
1552
- display. Row/prose measure caps (--measure-wide etc.) still own line-length
1553
- readability, so widening the shell itself does not create unreadable rows.
1554
- 100vw (not 92vw): a stock 1920px monitor sat at 92vw = 1766px, leaving a
1555
- visible ~154px dead margin on the single most common desktop resolution —
1556
- the ceiling now reaches full width exactly at 1920px instead of falling
1557
- short of it. */
1558
- .ds-247420 .app { max-width: clamp(1400px, 100vw, 1920px); margin-left: auto; margin-right: auto; }
1565
+ /* No outer ceiling: .app tracks 100vw at every width, including past 1920px
1566
+ and 2560px+ ultrawide displays, so the shell always fills the real screen
1567
+ edges instead of leaving dead margin on either side. Row/prose measure
1568
+ caps (--measure-wide, --stage-wide, 64ch, etc.) own line-length
1569
+ readability independently of the shell's own width, so letting .app grow
1570
+ unbounded does not create unreadable rows -- text still wraps at its own
1571
+ cap; only the surrounding chrome (panels, sidebar, status bar) stretches
1572
+ to use the extra space. Measured live at 2560px: the prior 1920px cap
1573
+ left a symmetric 320px dead margin on each side (640px total) -- this was
1574
+ the root cause of pages appearing to "shrink to content" rather than fill
1575
+ the screen on wide monitors. */
1576
+ .ds-247420 .app { width: 100%; margin-left: auto; margin-right: auto; }
1559
1577
  .ds-247420 .app-main .chat,
1560
1578
  .ds-247420 .app-main > .chat-area,
1561
1579
  .ds-247420 .app-main > .main-content { max-width: none; margin: 0; width: 100%; }
1562
- /* Status bar inherits the .app max-width cap above and stretches edge-to-edge
1563
- within it; no separate width constraint (which previously narrowed it). */
1580
+ /* Status bar spans the full-width .app edge-to-edge; no separate width
1581
+ constraint (which previously narrowed it). */
1564
1582
  .ds-247420 .app-status { width: 100%; }
1565
- /* Cap row text measure inside the wide capped main (ultrawide readability). */
1583
+ /* Cap row text measure inside the wide main (ultrawide readability). */
1566
1584
  .ds-247420 .row .title, .ds-247420 .row .sub { max-width: var(--measure-wide); }
1567
1585
  }
1568
- /* Beyond 1920px the shell itself stops growing (matches .ws-shell's own cap) —
1569
- extra space becomes page margin rather than stretching sidebar/content grid
1570
- tracks to distances a pointer/eye shouldn't have to travel. */
1571
- @media (min-width: 2200px) {
1572
- .ds-247420 .app { max-width: 1920px; }
1573
- }
1574
1586
 
1575
1587
  .ds-247420 .app-status {
1576
1588
  display: flex; align-items: center; gap: var(--space-3);
@@ -1668,9 +1680,17 @@
1668
1680
  font-weight: 700;
1669
1681
  }
1670
1682
  .ds-247420 .btn-primary:hover { background: var(--fg); color: var(--bg); transform: translateY(-1px); box-shadow: var(--shadow-2); }
1671
- .ds-247420 .btn-ghost { background: transparent; color: var(--fg); box-shadow: inset 0 0 0 2px var(--fg); }
1683
+ .ds-247420 .btn-ghost { background: transparent; color: var(--fg); box-shadow: inset 0 0 0 var(--bw-hair) var(--fg); }
1672
1684
  .ds-247420 .btn-ghost:hover { background: color-mix(in oklab, var(--fg) 12%, transparent); transform: translateY(-1px); }
1673
1685
  .ds-247420 .btn:active, .ds-247420 .btn-primary:active, .ds-247420 .btn-ghost:active { transform: translateY(1px); box-shadow: none; }
1686
+ /* Disabled state: --fg-3 (the tuned tertiary-text token, AA-clear against
1687
+ every panel tier) instead of a blind opacity halving -- opacity multiplies
1688
+ the SURROUNDING contrast too, so a light-on-dark button can drop under 3:1
1689
+ even though "disabled" only needs to stay legible, not full-strength. */
1690
+ .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 {
1691
+ background: var(--bg-2); color: var(--fg-3); border-color: var(--rule);
1692
+ box-shadow: none; cursor: not-allowed; pointer-events: none;
1693
+ }
1674
1694
  .ds-247420 .btn:focus-visible, .ds-247420 .btn-primary:focus-visible, .ds-247420 .btn-ghost:focus-visible, .ds-247420 .ds-icon-btn:focus-visible {
1675
1695
  outline: var(--focus-w) solid var(--focus-color);
1676
1696
  outline-offset: var(--focus-offset);
@@ -1680,6 +1700,23 @@
1680
1700
  height: var(--ctl-sm); min-height: var(--ctl-sm);
1681
1701
  padding: 0 var(--space-2); font-size: var(--fs-tiny); gap: var(--space-1);
1682
1702
  }
1703
+
1704
+ /* Link-styled button: an underline (not just color) is the affordance that
1705
+ separates "this navigates" from "this triggers an action" -- .btn-ghost's
1706
+ outline reads as a secondary ACTION button, not a link, at a glance. */
1707
+ .ds-247420 .btn-link {
1708
+ display: inline-flex; align-items: center; gap: var(--space-1);
1709
+ background: none; border: none; box-shadow: none; padding: 0;
1710
+ height: auto; min-height: 0;
1711
+ font-family: var(--ff-body); font-weight: 600; font-size: var(--fs-sm);
1712
+ color: var(--accent-ink); text-decoration: underline; text-underline-offset: 3px;
1713
+ cursor: pointer;
1714
+ }
1715
+ .ds-247420 .btn-link:hover { color: var(--fg); }
1716
+ .ds-247420 .btn-link:focus-visible {
1717
+ outline: var(--focus-w) solid var(--focus-color);
1718
+ outline-offset: var(--focus-offset);
1719
+ }
1683
1720
  .ds-247420 .btn-lg, .ds-247420 .btn-lg.btn-primary, .ds-247420 .btn-lg.btn-ghost {
1684
1721
  height: var(--ctl-lg); min-height: var(--ctl-lg);
1685
1722
  padding: 0 var(--space-4); font-size: var(--fs-body); gap: var(--space-2);
@@ -1939,18 +1976,40 @@
1939
1976
  Panel — soft tonal container, no border decoration
1940
1977
  ============================================================ */
1941
1978
  .ds-247420 .panel {
1942
- background: var(--panel-1, var(--bg-2));
1943
- border: var(--bw-hair) solid var(--rule);
1979
+ /* PilotDeck-parity: the reference canvas has NO visible container edge
1980
+ anywhere except a single hairline (sidebar only) page bg and panel
1981
+ fill read as the same tone. Stacking a tonal fill + a border + a shadow
1982
+ (the previous three-layer treatment) is what critics independently
1983
+ flagged as "every card reads as a boxed gray tile" / "grid of gray
1984
+ cards" — the single most-repeated, highest-impact gap. Panels are now
1985
+ flat (transparent, no border): content groups are separated by
1986
+ whitespace and an optional --panel-shadow-1 whisper only, never a fill.
1987
+ Use .panel-tonal to opt back into the filled/bordered look for surfaces
1988
+ that genuinely need a floating card (e.g. dropdowns, dialogs already
1989
+ have their own elevation scale and are unaffected). */
1990
+ background: transparent;
1991
+ border: none;
1944
1992
  border-radius: var(--r-2);
1945
- margin: 0 0 var(--space-4);
1946
- padding: var(--space-3);
1993
+ /* AGENTS.md "outer 2:1 inner": outer separation is --space-6, inner
1994
+ sibling gap --space-4 (48:24 = 2:1), matching .ds-panel-trio/
1995
+ .ds-panel-duo. Bumped up one rung from --space-5/--space-3 for more
1996
+ PilotDeck-style airy whitespace while preserving the 2:1 ratio. */
1997
+ margin: 0 0 var(--space-6);
1998
+ padding: var(--space-4);
1947
1999
  position: relative;
1948
- /* Crisp, restrained elevation — a hairline border does the edge definition;
1949
- the shadow only adds a whisper of lift, not a soft glow-card float. */
1950
- box-shadow: var(--shadow-1);
1951
2000
  transition: box-shadow var(--dur-base) var(--ease-spring), border-color var(--dur-snap) var(--ease),
1952
2001
  transform var(--dur-base) var(--ease-spring);
1953
2002
  }
2003
+ /* Opt-in tonal/bordered card — the pre-restyle .panel look, kept for
2004
+ surfaces that need to read as a discrete floating card rather than a
2005
+ text grouping on flat canvas (e.g. a composer input, which PilotDeck
2006
+ itself DOES give a faint 1px border+no fill — see .panel-inline below
2007
+ for that exact treatment). */
2008
+ .ds-247420 .panel.panel-tonal {
2009
+ background: var(--panel-1, var(--bg-2));
2010
+ border: var(--bw-hair) solid var(--rule);
2011
+ box-shadow: var(--panel-shadow-1);
2012
+ }
1954
2013
  /* Editorial accent spine — an opt-in printed-ink rule down the left edge that
1955
2014
  reads as a magazine pull-quote bar, not a glow card. */
1956
2015
  .ds-247420 .panel.panel-spine {
@@ -1962,7 +2021,9 @@
1962
2021
  width: var(--bw-chunk); background: var(--accent);
1963
2022
  border-radius: var(--bw-chunk) 0 0 var(--bw-chunk);
1964
2023
  }
1965
- .ds-247420 .panel.panel-inline { background: var(--bg-2); padding: var(--space-3) var(--space-3); }
2024
+ /* PilotDeck's composer is the ONE element with a visible edge on an
2025
+ otherwise flat canvas — a faint 1px border, no tonal fill. */
2026
+ .ds-247420 .panel.panel-inline { background: transparent; border: var(--bw-hair) solid var(--rule); padding: var(--space-3) var(--space-3); }
1966
2027
  .ds-247420 .panel.panel-wide { background: transparent; box-shadow: none; border: none; }
1967
2028
  /* Changelog (and any other panel-wide content) needs its OWN container-query
1968
2029
  context: the existing `@container (max-width: 760px) .ds-changelog-row`
@@ -1993,11 +2054,11 @@
1993
2054
  rows sit on ONE left axis (the old 24/32 padding was authored for the
1994
2055
  pre-padding .panel-wide era and indented the label 16px past its content). */
1995
2056
  padding: var(--space-2) var(--space-3);
1996
- font-size: var(--fs-tiny); font-weight: 600;
1997
- color: var(--fg-3);
1998
- letter-spacing: var(--tr-caps); text-transform: uppercase;
2057
+ font-size: var(--fs-sm); font-weight: 600;
2058
+ color: var(--fg-2);
2059
+ letter-spacing: 0;
1999
2060
  /* A hairline divider is the header's only structural separator from the
2000
- body — without it, an uppercase caps label at fs-tiny/600 reads as just
2061
+ body — without it, a sentence-case label at fs-sm/600 reads as just
2001
2062
  another dim meta line once the eye drops past the top of the panel. */
2002
2063
  border-bottom: var(--bw-hair) solid var(--rule);
2003
2064
  margin-bottom: var(--space-1);
@@ -2466,11 +2527,15 @@
2466
2527
  border-radius: var(--r-3);
2467
2528
  font-family: var(--ff-mono); font-size: var(--fs-lg);
2468
2529
  }
2469
- .ds-247420 .cli .prompt { color: var(--green-2); }
2530
+ /* user-select:none (matching .ds-cli-row .prompt below) so selecting/copying
2531
+ a command line grabs only the command text, not the prompt mark itself --
2532
+ otherwise every copy-pasted line carries a leading '$ ' that has to be
2533
+ stripped by hand before it can be re-run. */
2534
+ .ds-247420 .cli .prompt { color: var(--green-2); user-select: none; }
2470
2535
  .ds-247420 .cli .cmd { flex: 1; min-width: 0; overflow-x: auto; white-space: nowrap; color: var(--paper); }
2471
2536
  .ds-247420 .cli .copy {
2472
2537
  padding: var(--space-2) var(--space-3); background: transparent; color: var(--paper);
2473
- font-size: var(--fs-tiny); text-transform: uppercase; letter-spacing: var(--tr-caps);
2538
+ font-size: var(--fs-tiny); letter-spacing: var(--tr-tight); font-weight: 500;
2474
2539
  cursor: pointer; box-shadow: inset 0 0 0 1px var(--rule-strong);
2475
2540
  border-radius: var(--r-pill);
2476
2541
  }
@@ -2512,7 +2577,7 @@
2512
2577
  .ds-247420 .ds-quickstart-copy {
2513
2578
  align-self: flex-end;
2514
2579
  padding: var(--space-2) var(--space-3); background: transparent; color: var(--paper);
2515
- font-family: var(--ff-mono); font-size: var(--fs-tiny); text-transform: uppercase; letter-spacing: var(--tr-caps);
2580
+ font-family: var(--ff-body); font-size: var(--fs-tiny); letter-spacing: var(--tr-tight); font-weight: 500;
2516
2581
  cursor: pointer; box-shadow: inset 0 0 0 1px var(--rule-strong);
2517
2582
  border-radius: var(--r-pill); border: none;
2518
2583
  }
@@ -2679,7 +2744,11 @@
2679
2744
  ============================================================ */
2680
2745
  .ds-247420 .ds-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: currentColor; flex-shrink: 0; vertical-align: middle; }
2681
2746
  .ds-247420 .ds-dot-on { color: var(--green-2); }
2682
- .ds-247420 .ds-dot-off { color: var(--fg-3); }
2747
+ /* Off/idle reads as a HOLLOW ring (transparent fill, currentColor outline)
2748
+ instead of a solid dot in a dimmer color -- filled-vs-outline is a shape
2749
+ cue that survives grayscale/colorblind simulation, where a solid green dot
2750
+ and a solid gray dot at the same size can look identical in luminance. */
2751
+ .ds-247420 .ds-dot-off { color: var(--fg-3); background: transparent; box-shadow: inset 0 0 0 1.5px currentColor; }
2683
2752
  /* live is a distinct hue from a plain "on" dot — see .chip.tone-live's
2684
2753
  comment for the success-vs-live rationale. */
2685
2754
  .ds-247420 .ds-dot-live { color: var(--sky); }
@@ -2744,7 +2813,7 @@
2744
2813
  .ds-247420 .kpi-card .lbl {
2745
2814
  font-size: var(--fs-xs); color: var(--fg-3);
2746
2815
  font-weight: 600; margin-top: 8px;
2747
- letter-spacing: var(--tr-caps); text-transform: uppercase;
2816
+ letter-spacing: var(--tr-tight);
2748
2817
  }
2749
2818
  .ds-247420 .kpi-foot {
2750
2819
  display: flex; align-items: center; justify-content: space-between;
@@ -4006,7 +4075,7 @@
4006
4075
  .ds-247420 .ds-catalog-side h1 { font-size: var(--fs-lg); margin: 0 0 var(--space-1); }
4007
4076
  .ds-247420 .ds-catalog-side .subtitle { font-size: var(--fs-micro); color: var(--fg-3); margin: 0 0 var(--space-4); }
4008
4077
  .ds-247420 .ds-catalog-side nav h4 {
4009
- font-size: var(--fs-micro); text-transform: uppercase; letter-spacing: var(--tr-label);
4078
+ font-size: var(--fs-micro); letter-spacing: var(--tr-tight); font-weight: 600;
4010
4079
  color: var(--fg-3); margin: var(--space-3) 0 var(--space-1);
4011
4080
  }
4012
4081
  .ds-247420 .ds-catalog-side nav a {
@@ -4206,7 +4275,7 @@
4206
4275
  width: 36px; height: 36px; flex-shrink: 0;
4207
4276
  border-radius: 50%; background: var(--bg-3); color: var(--fg);
4208
4277
  display: inline-flex; align-items: center; justify-content: center;
4209
- font-family: var(--ff-mono); font-size: var(--fs-micro); font-weight: 600;
4278
+ font-family: var(--ff-body); font-size: var(--fs-micro); font-weight: 600;
4210
4279
  text-transform: lowercase; letter-spacing: 0.02em; user-select: none;
4211
4280
  transition: transform 0.12s ease, box-shadow 0.12s ease;
4212
4281
  position: relative;
@@ -4505,7 +4574,7 @@
4505
4574
  .ds-247420 .chat-link .thumb,
4506
4575
  .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; }
4507
4576
  .ds-247420 .chat-link .meta { display: flex; flex-direction: column; gap: var(--space-1); min-width: 0; }
4508
- .ds-247420 .chat-link .host { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); text-transform: lowercase; }
4577
+ .ds-247420 .chat-link .host { font-family: var(--ff-body); font-size: var(--fs-xs); color: var(--fg-3); text-transform: lowercase; }
4509
4578
  .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; }
4510
4579
  .ds-247420 .chat-link .desc { font-size: var(--fs-xs); color: var(--fg-2); line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
4511
4580
 
@@ -4517,7 +4586,7 @@
4517
4586
  .ds-247420 .chat-meta .who { font-weight: 600; color: var(--fg-2); }
4518
4587
  .ds-247420 .chat-meta .who::after { content: ' ·'; color: var(--fg-3); font-weight: 400; }
4519
4588
  .ds-247420 .chat-meta .t { color: var(--fg-3); }
4520
- .ds-247420 .chat-meta .tick { color: var(--fg-3); margin-left: var(--space-hair); letter-spacing: -2px; font-family: var(--ff-mono); }
4589
+ .ds-247420 .chat-meta .tick { color: var(--fg-3); margin-left: var(--space-hair); letter-spacing: -2px; font-family: var(--ff-body); }
4521
4590
  .ds-247420 .chat-meta .tick.read { color: var(--accent-ink); }
4522
4591
 
4523
4592
  .ds-247420 .chat-reactions {
@@ -4892,12 +4961,12 @@
4892
4961
 
4893
4962
  .ds-247420 .app-side .count {
4894
4963
  padding: 1px 8px; font-size: var(--fs-micro); font-weight: 700;
4895
- font-family: var(--ff-mono); letter-spacing: 0.04em;
4964
+ font-family: var(--ff-body); letter-spacing: 0.04em;
4896
4965
  min-width: 18px; text-align: center;
4897
4966
  }
4898
4967
  .ds-247420 .app-side a:has(> .count:empty) > .count,
4899
4968
  .ds-247420 .app-side .count:empty { display: none; }
4900
- .ds-247420 .app-side a .glyph { font-family: var(--ff-mono); font-size: 13px; font-weight: 600; color: var(--fg-3); text-align: center; }
4969
+ .ds-247420 .app-side a .glyph { font-family: var(--ff-body); font-size: 13px; font-weight: 600; color: var(--fg-3); text-align: center; }
4901
4970
  .ds-247420 .app-side a.active .glyph { color: var(--accent-ink); }
4902
4971
 
4903
4972
  /* -- select primitive --------------------------------------------------- */
@@ -6201,11 +6270,14 @@
6201
6270
  @media (prefers-reduced-motion: no-preference) {
6202
6271
  .ds-247420 .ws-shell { transition: grid-template-columns var(--dur-base) var(--ease); }
6203
6272
  }
6204
- /* Ultrawide: cap the shell so the 1fr content track doesn't stretch to
6205
- unreadable measures while the fixed side columns pin to their clamps. */
6206
- @media (min-width: 1920px) {
6207
- .ds-247420 .ws-shell { max-width: 1920px; margin-inline: auto; }
6208
- }
6273
+ /* Ultrawide: .ws-shell itself stays full-width (fills the real screen edges
6274
+ at any viewport, matching .app's own unbounded-width rule in topbar.css) --
6275
+ only the 1fr content track's OWN inner measure is capped, so rail/sessions/
6276
+ pane keep their fixed/clamped widths and only the middle content column's
6277
+ text gets a readability ceiling, instead of the whole grid (and its side
6278
+ columns) shrinking together and leaving dead margin on either side of the
6279
+ shell. */
6280
+ .ds-247420 .ws-content { max-width: var(--measure-wide, 1200px); margin-inline: auto; width: 100%; }
6209
6281
 
6210
6282
  /* Rail (left nav) */
6211
6283
  .ds-247420 .ws-rail {
@@ -7274,8 +7346,13 @@
7274
7346
  /* .ds-field-eyebrow joins the kit small-label voice above with no overrides. */
7275
7347
  .ds-247420 .ds-hint-sm { font-size: var(--fs-xs); color: var(--panel-text-2); }
7276
7348
  .ds-247420 .ds-note-quiet { margin: 0; color: var(--panel-text-2); }
7277
- .ds-247420 .ds-btn-row { display: flex; gap: var(--space-2, 8px); flex-wrap: wrap; }
7349
+ .ds-247420 .ds-btn-row { display: flex; gap: var(--space-2, 8px); flex-wrap: wrap; align-items: center; }
7278
7350
  .ds-247420 .ds-btn-row-tight { gap: var(--space-1-75, 6px); }
7351
+ /* Size-ladder demo group: each size's caption+button pair stacks and the
7352
+ group aligns at the BOTTOM so buttons of different heights share one
7353
+ visual baseline instead of centering on their own mismatched midpoints. */
7354
+ .ds-247420 .ds-btn-size-row { display: flex; flex-wrap: wrap; gap: var(--space-4); align-items: flex-end; }
7355
+ .ds-247420 .ds-btn-size-col { display: flex; flex-direction: column; gap: var(--space-1-75); align-items: flex-start; }
7279
7356
  .ds-247420 .ds-key-input { flex: 1 1 160px; min-width: 0; font-family: var(--ff-mono); }
7280
7357
  .ds-247420 .ds-toggle-btn { min-width: 78px; }
7281
7358
  /* Side-by-side checked/unchecked reference pair (settings kit theme panel) --
@@ -7586,7 +7663,7 @@
7586
7663
  .ds-247420 .ds-avatar {
7587
7664
  display: inline-flex; align-items: center; justify-content: center;
7588
7665
  border-radius: 50%; background: var(--bg-3); color: var(--fg);
7589
- font-family: var(--ff-mono); font-weight: 600; text-transform: lowercase;
7666
+ font-family: var(--ff-body); font-weight: 600; text-transform: lowercase;
7590
7667
  letter-spacing: 0.02em; user-select: none; flex-shrink: 0; object-fit: cover;
7591
7668
  box-shadow: inset 0 0 0 1px var(--rule);
7592
7669
  }
@@ -7811,8 +7888,7 @@
7811
7888
  color: var(--fg-3);
7812
7889
  font-family: var(--ff-mono);
7813
7890
  font-size: var(--fs-xs);
7814
- letter-spacing: 0.02em;
7815
- text-transform: uppercase;
7891
+ letter-spacing: 0;
7816
7892
  }
7817
7893
  .ds-247420 .panel.panel-docs .panel-title::before {
7818
7894
  content: 'docs · ';
@@ -7929,7 +8005,7 @@
7929
8005
  .ds-247420 .ds-git-status-chip {
7930
8006
  display: inline-flex; align-items: center; justify-content: center;
7931
8007
  flex: 0 0 auto; width: 18px; height: 18px;
7932
- font-family: var(--ff-mono); font-size: var(--fs-micro); font-weight: 700;
8008
+ font-family: var(--ff-body); font-size: var(--fs-micro); font-weight: 700;
7933
8009
  border-radius: var(--r-1);
7934
8010
  }
7935
8011
  .ds-247420 .ds-git-status-chip.tone-add { color: var(--green-2); background: color-mix(in oklab, var(--green-2) 16%, transparent); }
@@ -7947,7 +8023,7 @@
7947
8023
  flex: 0 0 auto; font-size: var(--fs-micro); color: var(--fg-3);
7948
8024
  border: var(--bw-hair) solid var(--rule); border-radius: var(--r-1); padding: 1px 6px;
7949
8025
  }
7950
- .ds-247420 .ds-git-row-stats { flex: 0 0 auto; display: inline-flex; gap: 6px; font-family: var(--ff-mono); font-size: var(--fs-micro); }
8026
+ .ds-247420 .ds-git-row-stats { flex: 0 0 auto; display: inline-flex; gap: 6px; font-family: var(--ff-body); font-size: var(--fs-micro); }
7951
8027
  .ds-247420 .ds-git-stat-add { color: var(--green-2); }
7952
8028
  .ds-247420 .ds-git-stat-del { color: var(--flame); }
7953
8029
 
@@ -8074,7 +8150,7 @@
8074
8150
 
8075
8151
  .ds-247420 .ds-plugins-row-body { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
8076
8152
  .ds-247420 .ds-plugins-row-name {
8077
- font-family: var(--ff-mono); font-size: var(--fs-sm); color: var(--fg);
8153
+ font-family: var(--ff-body); font-size: var(--fs-sm); color: var(--fg);
8078
8154
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
8079
8155
  }
8080
8156
  .ds-247420 .ds-plugins-row-meta {
@@ -8103,7 +8179,7 @@
8103
8179
  }
8104
8180
  .ds-247420 .ds-plugins-detail-title { display: flex; align-items: center; gap: 8px; min-width: 0; }
8105
8181
  .ds-247420 .ds-plugins-detail-title .name {
8106
- font-family: var(--ff-mono); font-size: var(--fs-md); font-weight: 600; color: var(--fg);
8182
+ font-family: var(--ff-body); font-size: var(--fs-md); font-weight: 600; color: var(--fg);
8107
8183
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
8108
8184
  }
8109
8185
  .ds-247420 .ds-plugins-version { font-size: var(--fs-micro); color: var(--fg-3); }
@@ -8139,7 +8215,7 @@
8139
8215
 
8140
8216
  .ds-247420 .ds-plugins-group-label {
8141
8217
  font-size: var(--fs-micro); font-weight: 600; color: var(--fg-3);
8142
- text-transform: uppercase; letter-spacing: 0.02em; margin-bottom: 6px;
8218
+ letter-spacing: 0; margin-bottom: 6px;
8143
8219
  }
8144
8220
  .ds-247420 .ds-plugins-requires-list { display: flex; flex-wrap: wrap; gap: 6px; }
8145
8221
  .ds-247420 .ds-plugins-chip {
@@ -8216,7 +8292,7 @@
8216
8292
  display: flex; align-items: center; gap: var(--space-2);
8217
8293
  margin-bottom: var(--space-2);
8218
8294
  }
8219
- .ds-247420 .ds-mc-detail-title { font-family: var(--ff-mono); font-size: var(--fs-base); font-weight: 700; }
8295
+ .ds-247420 .ds-mc-detail-title { font-family: var(--ff-body); font-size: var(--fs-base); font-weight: 700; }
8220
8296
 
8221
8297
  .ds-247420 .ds-mc-discovery-error {
8222
8298
  display: flex; align-items: center; gap: var(--space-1-75);
@@ -8271,7 +8347,7 @@
8271
8347
  .ds-247420 .ds-skills-group-label {
8272
8348
  padding: var(--space-2) var(--space-2) 3px;
8273
8349
  font-size: var(--fs-micro); font-weight: 600; color: var(--fg-3);
8274
- text-transform: uppercase; letter-spacing: 0.06em;
8350
+ letter-spacing: 0;
8275
8351
  }
8276
8352
 
8277
8353
  .ds-247420 .ds-skills-description { font-size: var(--fs-sm); color: var(--fg-2); line-height: 1.5; }
@@ -8462,8 +8538,7 @@
8462
8538
  .ds-247420 .ds-cal-weekday-label {
8463
8539
  font-size: var(--fs-micro);
8464
8540
  font-weight: 600;
8465
- letter-spacing: var(--tr-caps);
8466
- text-transform: uppercase;
8541
+ letter-spacing: 0;
8467
8542
  color: var(--fg-3);
8468
8543
  text-align: center;
8469
8544
  padding-block: var(--space-1);