anentrypoint-design 1.0.19 → 1.0.21

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
@@ -94,6 +94,12 @@
94
94
  thebird warm-paper preset (5.25:1) while staying visually a clear
95
95
  warm red. */
96
96
  --warn: #C41C0C;
97
+ /* Paired foreground for --warn used as a FILL (a danger button background),
98
+ not as text-on-paper (--warn's own tuning above). --paper clears 5.97:1
99
+ on this --warn -- --warn was tuned dark specifically for the text-on-paper
100
+ direction, so re-using it for the opposite direction (paper text on this
101
+ as a fill) needs its own token, not a re-derivation of --warn itself. */
102
+ --warn-fg: var(--paper);
97
103
  /* Syntax-token aliases: light values pass 4.5:1 on paper; the dark blocks
98
104
  restore the bright dark-tuned originals. Components reference ONLY these. */
99
105
  --code-string: var(--green);
@@ -182,6 +188,13 @@
182
188
  --panel-text-3: var(--fg-3);
183
189
  --panel-accent-2: var(--accent-bright, var(--accent));
184
190
  --panel-shadow: 0 1px 0 color-mix(in oklab, var(--fg) 6%, transparent), 0 4px 14px color-mix(in oklab, var(--fg) 8%, transparent);
191
+ /* Single-layer, half-strength companion to --shadow-1, used ONLY by .panel.
192
+ .panel already carries a tonal --panel-1 fill and a --rule border; a
193
+ full --shadow-1 on top made three simultaneous edge/surface signals
194
+ read as boxed/cardy rather than PilotDeck's flat, near-borderless look.
195
+ --shadow-1/2/3 stay untouched — they are the real elevation scale for
196
+ things that must read as floating (dialog/dropdown/tooltip/toast). */
197
+ --panel-shadow-1: 0 1px 2px color-mix(in oklab, var(--fg) 4%, transparent);
185
198
 
186
199
  /* Type — system-font stack, no custom web fonts loaded. */
187
200
  --ff-display: system-ui, sans-serif;
@@ -216,7 +229,7 @@
216
229
  --fs-h4: clamp(24px, 2cqi, 28px);
217
230
  --fs-h3: clamp(26px, 2.6cqi, 34px);
218
231
  --fs-h2: clamp(28px, 3.6cqi, 44px);
219
- --fs-h1: clamp(34px, 5cqi, 64px);
232
+ --fs-h1: clamp(34px, 4.4cqi, 52px);
220
233
  --fs-hero: clamp(42px, 7cqi, 96px);
221
234
  --fs-mega: clamp(56px, 11cqi, 168px);
222
235
  /* Bridges the fixed --fs-* ladder (tops out at --fs-xl, 21px) and the fluid
@@ -236,9 +249,9 @@
236
249
  marketing/hero layouts (h1 up to 64px). Application chrome — page titles,
237
250
  panel headers — needs a compact ceiling so a PageHeader title doesn't
238
251
  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);
252
+ --fs-h1-app: clamp(22px, 2cqi, 26px);
253
+ --fs-h2-app: clamp(18px, 1.6cqi, 21px);
254
+ --fs-h3-app: clamp(16px, 1.5cqi, 18px);
242
255
  --fs-h4-app: clamp(15px, 1.6cqi, 17px);
243
256
 
244
257
  --lh-tight: 1.05;
@@ -285,7 +298,14 @@
285
298
  --bw-chunk: 4px;
286
299
  --bw-slab: 8px;
287
300
 
288
- --rule: color-mix(in oklab, currentColor 14%, transparent);
301
+ /* Retuned toward PilotDeck's near-borderless whisper: 14% read as a visibly
302
+ drawn line, not a hairline. 8% keeps the edge perceptible (still enough to
303
+ separate a --panel-1-filled surface from its --bg backdrop) without
304
+ competing with the fill + shadow already doing the container-definition
305
+ work in .panel. --rule-strong is untouched — it is the deliberate
306
+ stronger variant for places that need a visible seam (table rules, active
307
+ tab underline), not the ambient panel/card edge. */
308
+ --rule: color-mix(in oklab, currentColor 8%, transparent);
289
309
  --rule-strong: color-mix(in oklab, currentColor 28%, transparent);
290
310
 
291
311
  /* Micro rungs below --r-1 — chips, badges, scrollbar thumbs, tick marks
@@ -531,6 +551,10 @@
531
551
  /* warn/sky dark-tuned pairs (mirror flame/amber): the :root paper values
532
552
  (#E0241A / #3A6EFF) are too dark on ink; these clear AA 4.5:1 on --ink. */
533
553
  --warn: #FF5A52;
554
+ /* Paired foreground for --warn-as-fill (see :root's --warn-fg comment) --
555
+ dark theme's --warn is the lighter tuned red, so its fill needs the dark
556
+ --ink text, the opposite pairing from :root. */
557
+ --warn-fg: var(--ink);
534
558
  --sky: #6E9BFF;
535
559
  /* Category/heritage dark-tuned pairs (same convention as flame/amber/warn/
536
560
  sky above): the :root values are the PAPER tones and go dark-on-dark here.
@@ -619,6 +643,7 @@
619
643
  --flame: #FF5A1F;
620
644
  --amber: #D9A93A;
621
645
  --warn: #FF5A52;
646
+ --warn-fg: var(--ink);
622
647
  --sky: #6E9BFF;
623
648
  /* Mirrors the [data-theme="ink"] category retune above token-for-token —
624
649
  see that block for the measured before/after ratios. */
@@ -664,6 +689,7 @@
664
689
  --panel-text-3: inherit;
665
690
  --panel-accent-2: inherit;
666
691
  --panel-shadow: inherit;
692
+ --panel-shadow-1: inherit;
667
693
  --on-accent: inherit;
668
694
  --on-color: inherit;
669
695
  --scrim: inherit;
@@ -748,6 +774,7 @@
748
774
  --flame: #ff7b72;
749
775
  --amber: #d29922;
750
776
  --warn: #ff7b72;
777
+ --warn-fg: #0d1117;
751
778
  --sky: #58a6ff;
752
779
  --mascot-deep: #ff7b72;
753
780
  --purple-2: #d2a8ff;
@@ -783,14 +810,14 @@
783
810
  --fs-h4: clamp(22px, 1.9cqi, 24px);
784
811
  --fs-h3: clamp(23px, 2.4cqi, 32px);
785
812
  --fs-h2: clamp(26px, 3.4cqi, 41px);
786
- --fs-h1: clamp(32px, 4.7cqi, 60px);
813
+ --fs-h1: clamp(32px, 4.2cqi, 48px);
787
814
  }
788
815
  .ds-247420[data-typescale="lg"] {
789
816
  --fs-body: 17px; --fs-lg: 20px; --fs-xl: 24px;
790
817
  --fs-h4: clamp(27px, 2.2cqi, 31px);
791
818
  --fs-h3: clamp(28px, 2.9cqi, 38px);
792
819
  --fs-h2: clamp(31px, 4cqi, 49px);
793
- --fs-h1: clamp(38px, 5.6cqi, 71px);
820
+ --fs-h1: clamp(38px, 4.8cqi, 58px);
794
821
  }
795
822
 
796
823
  /* Debug grid overlay — 8px mascot grid. Toggle via class on any container. */
@@ -985,14 +1012,14 @@
985
1012
  border-radius: var(--r-pill, 999px);
986
1013
  }
987
1014
 
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; }
1015
+ .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
1016
  .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
1017
  .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
1018
  .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
1019
 
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); }
1020
+ .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); }
1021
+ .ds-247420[data-typescale="app"] h2, .ds-247420[data-typescale="app"] .t-h2 { font-size: var(--fs-h2-app); font-weight: var(--fw-medium); }
1022
+ .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
1023
  .ds-247420[data-typescale="app"] h4, .ds-247420[data-typescale="app"] .t-h4 { font-size: var(--fs-h4-app); }
997
1024
 
998
1025
  .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 +1029,8 @@
1002
1029
  .ds-247420 .t-mono { font-family: var(--ff-mono); font-weight: 400; }
1003
1030
  .ds-247420 .t-body { font-family: var(--ff-body); }
1004
1031
 
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); }
1032
+ .ds-247420 .t-label { font-family: var(--ff-body); font-size: var(--fs-tiny); letter-spacing: 0; font-weight: 600; }
1033
+ .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
1034
  .ds-247420 .t-meta { font-family: var(--ff-body); font-size: var(--fs-sm); color: var(--fg-3); }
1008
1035
 
1009
1036
  .ds-247420 .lede, .ds-247420 .t-lede {
@@ -1422,9 +1449,9 @@
1422
1449
  outline-offset: var(--focus-offset);
1423
1450
  }
1424
1451
  .ds-247420 .app-side a.active {
1425
- color: var(--accent-fg);
1426
- background: var(--accent);
1427
- font-weight: 600;
1452
+ color: var(--fg);
1453
+ background: var(--bg-3);
1454
+ font-weight: 500;
1428
1455
  }
1429
1456
  .ds-247420 .app-side .count {
1430
1457
  background: color-mix(in oklab, var(--fg) 10%, transparent);
@@ -1432,15 +1459,16 @@
1432
1459
  padding: 3px 10px; font-size: var(--fs-micro); font-weight: 700;
1433
1460
  border-radius: var(--r-pill);
1434
1461
  }
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. */
1462
+ /* Active state is a flat neutral highlight (--bg-3/--fg), not an accent
1463
+ fill -- no hue, just a perceivable shade step up from the plain a[href]:hover
1464
+ (--bg-2). --fg over --bg-3 is the same body-text pairing used everywhere
1465
+ else in the sidebar, so it inherits that AA contrast for free instead of
1466
+ depending on a per-[data-accent] retune. The count chip stays on its
1467
+ default neutral pairing above; there is no accent-on-ink inversion to
1468
+ double down on anymore. */
1441
1469
  .ds-247420 .app-side a.active .count {
1442
- background: color-mix(in oklab, var(--accent-fg) 82%, transparent);
1443
- color: var(--accent);
1470
+ background: color-mix(in oklab, var(--fg) 16%, transparent);
1471
+ color: var(--fg-2);
1444
1472
  }
1445
1473
 
1446
1474
  .ds-247420 .app-main {
@@ -1546,31 +1574,27 @@
1546
1574
  }
1547
1575
 
1548
1576
  @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; }
1577
+ /* No outer ceiling: .app tracks 100vw at every width, including past 1920px
1578
+ and 2560px+ ultrawide displays, so the shell always fills the real screen
1579
+ edges instead of leaving dead margin on either side. Row/prose measure
1580
+ caps (--measure-wide, --stage-wide, 64ch, etc.) own line-length
1581
+ readability independently of the shell's own width, so letting .app grow
1582
+ unbounded does not create unreadable rows -- text still wraps at its own
1583
+ cap; only the surrounding chrome (panels, sidebar, status bar) stretches
1584
+ to use the extra space. Measured live at 2560px: the prior 1920px cap
1585
+ left a symmetric 320px dead margin on each side (640px total) -- this was
1586
+ the root cause of pages appearing to "shrink to content" rather than fill
1587
+ the screen on wide monitors. */
1588
+ .ds-247420 .app { width: 100%; margin-left: auto; margin-right: auto; }
1559
1589
  .ds-247420 .app-main .chat,
1560
1590
  .ds-247420 .app-main > .chat-area,
1561
1591
  .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). */
1592
+ /* Status bar spans the full-width .app edge-to-edge; no separate width
1593
+ constraint (which previously narrowed it). */
1564
1594
  .ds-247420 .app-status { width: 100%; }
1565
- /* Cap row text measure inside the wide capped main (ultrawide readability). */
1595
+ /* Cap row text measure inside the wide main (ultrawide readability). */
1566
1596
  .ds-247420 .row .title, .ds-247420 .row .sub { max-width: var(--measure-wide); }
1567
1597
  }
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
1598
 
1575
1599
  .ds-247420 .app-status {
1576
1600
  display: flex; align-items: center; gap: var(--space-3);
@@ -1668,9 +1692,17 @@
1668
1692
  font-weight: 700;
1669
1693
  }
1670
1694
  .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); }
1695
+ .ds-247420 .btn-ghost { background: transparent; color: var(--fg); box-shadow: inset 0 0 0 var(--bw-hair) var(--fg); }
1672
1696
  .ds-247420 .btn-ghost:hover { background: color-mix(in oklab, var(--fg) 12%, transparent); transform: translateY(-1px); }
1673
1697
  .ds-247420 .btn:active, .ds-247420 .btn-primary:active, .ds-247420 .btn-ghost:active { transform: translateY(1px); box-shadow: none; }
1698
+ /* Disabled state: --fg-3 (the tuned tertiary-text token, AA-clear against
1699
+ every panel tier) instead of a blind opacity halving -- opacity multiplies
1700
+ the SURROUNDING contrast too, so a light-on-dark button can drop under 3:1
1701
+ even though "disabled" only needs to stay legible, not full-strength. */
1702
+ .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 {
1703
+ background: var(--bg-2); color: var(--fg-3); border-color: var(--rule);
1704
+ box-shadow: none; cursor: not-allowed; pointer-events: none;
1705
+ }
1674
1706
  .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
1707
  outline: var(--focus-w) solid var(--focus-color);
1676
1708
  outline-offset: var(--focus-offset);
@@ -1680,6 +1712,23 @@
1680
1712
  height: var(--ctl-sm); min-height: var(--ctl-sm);
1681
1713
  padding: 0 var(--space-2); font-size: var(--fs-tiny); gap: var(--space-1);
1682
1714
  }
1715
+
1716
+ /* Link-styled button: an underline (not just color) is the affordance that
1717
+ separates "this navigates" from "this triggers an action" -- .btn-ghost's
1718
+ outline reads as a secondary ACTION button, not a link, at a glance. */
1719
+ .ds-247420 .btn-link {
1720
+ display: inline-flex; align-items: center; gap: var(--space-1);
1721
+ background: none; border: none; box-shadow: none; padding: 0;
1722
+ height: auto; min-height: 0;
1723
+ font-family: var(--ff-body); font-weight: 600; font-size: var(--fs-sm);
1724
+ color: var(--accent-ink); text-decoration: underline; text-underline-offset: 3px;
1725
+ cursor: pointer;
1726
+ }
1727
+ .ds-247420 .btn-link:hover { color: var(--fg); }
1728
+ .ds-247420 .btn-link:focus-visible {
1729
+ outline: var(--focus-w) solid var(--focus-color);
1730
+ outline-offset: var(--focus-offset);
1731
+ }
1683
1732
  .ds-247420 .btn-lg, .ds-247420 .btn-lg.btn-primary, .ds-247420 .btn-lg.btn-ghost {
1684
1733
  height: var(--ctl-lg); min-height: var(--ctl-lg);
1685
1734
  padding: 0 var(--space-4); font-size: var(--fs-body); gap: var(--space-2);
@@ -1720,10 +1769,13 @@
1720
1769
  .ds-247420 .ds-icon-btn-ghost:hover { background: var(--fg); color: var(--bg); }
1721
1770
  .ds-247420 .ds-icon-btn-primary { background: var(--accent); color: var(--accent-fg); }
1722
1771
  .ds-247420 .ds-icon-btn-primary:hover { background: var(--fg); color: var(--accent-ink); }
1723
- /* --ink, not --on-color: --on-color is a fixed #fff, which measures 3.07:1 on
1724
- --warn (#FF5A52) -- below the 4.5:1 AA floor. --ink measures 6.27:1. Same
1725
- fix as .btn-primary.danger in app-shell/files.css. */
1726
- .ds-247420 .ds-icon-btn-danger { background: var(--warn); color: var(--ink); }
1772
+ /* --warn-fg (not a bare --ink/--on-color literal): --ink only clears AA
1773
+ against dark theme's lighter --warn (#FF5A52, 6.27:1); light theme's
1774
+ --warn is a darker red (#C41C0C) where --ink measures just 2.92:1, well
1775
+ under the 4.5:1 floor. --warn-fg is the theme-paired token (light: paper
1776
+ text 5.97:1, dark: ink text 6.27:1) -- same fix as .btn-primary.danger in
1777
+ app-shell/files.css, which had this exact light-theme regression live. */
1778
+ .ds-247420 .ds-icon-btn-danger { background: var(--warn); color: var(--warn-fg); }
1727
1779
  .ds-247420 .ds-icon-btn-danger:hover { filter: brightness(0.92); }
1728
1780
  .ds-247420 .ds-icon-btn:active { transform: translateY(1px); }
1729
1781
  .ds-247420 .ds-icon-btn:disabled, .ds-247420 .ds-icon-btn.is-disabled {
@@ -1929,7 +1981,7 @@
1929
1981
  .ds-247420 .ds-tooltip[data-placement^="bottom"]::after { top: -3px; left: 50%; margin-left: -3px; }
1930
1982
  .ds-247420 .ds-tooltip[data-placement^="left"]::after { right: -3px; top: 50%; margin-top: -3px; }
1931
1983
  .ds-247420 .ds-tooltip[data-placement^="right"]::after { left: -3px; top: 50%; margin-top: -3px; }
1932
- .ds-247420 .ds-tooltip.kind-danger { background: var(--warn); color: var(--ink); }
1984
+ .ds-247420 .ds-tooltip.kind-danger { background: var(--warn); color: var(--warn-fg); }
1933
1985
  .ds-247420 .ds-tooltip.kind-danger::after { background: var(--warn); }
1934
1986
  @media (prefers-reduced-motion: reduce) {
1935
1987
  .ds-247420 .ds-tooltip { transition: none; }
@@ -1939,18 +1991,40 @@
1939
1991
  Panel — soft tonal container, no border decoration
1940
1992
  ============================================================ */
1941
1993
  .ds-247420 .panel {
1942
- background: var(--panel-1, var(--bg-2));
1943
- border: var(--bw-hair) solid var(--rule);
1994
+ /* PilotDeck-parity: the reference canvas has NO visible container edge
1995
+ anywhere except a single hairline (sidebar only) page bg and panel
1996
+ fill read as the same tone. Stacking a tonal fill + a border + a shadow
1997
+ (the previous three-layer treatment) is what critics independently
1998
+ flagged as "every card reads as a boxed gray tile" / "grid of gray
1999
+ cards" — the single most-repeated, highest-impact gap. Panels are now
2000
+ flat (transparent, no border): content groups are separated by
2001
+ whitespace and an optional --panel-shadow-1 whisper only, never a fill.
2002
+ Use .panel-tonal to opt back into the filled/bordered look for surfaces
2003
+ that genuinely need a floating card (e.g. dropdowns, dialogs already
2004
+ have their own elevation scale and are unaffected). */
2005
+ background: transparent;
2006
+ border: none;
1944
2007
  border-radius: var(--r-2);
1945
- margin: 0 0 var(--space-4);
1946
- padding: var(--space-3);
2008
+ /* AGENTS.md "outer 2:1 inner": outer separation is --space-6, inner
2009
+ sibling gap --space-4 (48:24 = 2:1), matching .ds-panel-trio/
2010
+ .ds-panel-duo. Bumped up one rung from --space-5/--space-3 for more
2011
+ PilotDeck-style airy whitespace while preserving the 2:1 ratio. */
2012
+ margin: 0 0 var(--space-6);
2013
+ padding: var(--space-4);
1947
2014
  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
2015
  transition: box-shadow var(--dur-base) var(--ease-spring), border-color var(--dur-snap) var(--ease),
1952
2016
  transform var(--dur-base) var(--ease-spring);
1953
2017
  }
2018
+ /* Opt-in tonal/bordered card — the pre-restyle .panel look, kept for
2019
+ surfaces that need to read as a discrete floating card rather than a
2020
+ text grouping on flat canvas (e.g. a composer input, which PilotDeck
2021
+ itself DOES give a faint 1px border+no fill — see .panel-inline below
2022
+ for that exact treatment). */
2023
+ .ds-247420 .panel.panel-tonal {
2024
+ background: var(--panel-1, var(--bg-2));
2025
+ border: var(--bw-hair) solid var(--rule);
2026
+ box-shadow: var(--panel-shadow-1);
2027
+ }
1954
2028
  /* Editorial accent spine — an opt-in printed-ink rule down the left edge that
1955
2029
  reads as a magazine pull-quote bar, not a glow card. */
1956
2030
  .ds-247420 .panel.panel-spine {
@@ -1962,7 +2036,9 @@
1962
2036
  width: var(--bw-chunk); background: var(--accent);
1963
2037
  border-radius: var(--bw-chunk) 0 0 var(--bw-chunk);
1964
2038
  }
1965
- .ds-247420 .panel.panel-inline { background: var(--bg-2); padding: var(--space-3) var(--space-3); }
2039
+ /* PilotDeck's composer is the ONE element with a visible edge on an
2040
+ otherwise flat canvas — a faint 1px border, no tonal fill. */
2041
+ .ds-247420 .panel.panel-inline { background: transparent; border: var(--bw-hair) solid var(--rule); padding: var(--space-3) var(--space-3); }
1966
2042
  .ds-247420 .panel.panel-wide { background: transparent; box-shadow: none; border: none; }
1967
2043
  /* Changelog (and any other panel-wide content) needs its OWN container-query
1968
2044
  context: the existing `@container (max-width: 760px) .ds-changelog-row`
@@ -1993,11 +2069,11 @@
1993
2069
  rows sit on ONE left axis (the old 24/32 padding was authored for the
1994
2070
  pre-padding .panel-wide era and indented the label 16px past its content). */
1995
2071
  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;
2072
+ font-size: var(--fs-sm); font-weight: 600;
2073
+ color: var(--fg-2);
2074
+ letter-spacing: 0;
1999
2075
  /* 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
2076
+ body — without it, a sentence-case label at fs-sm/600 reads as just
2001
2077
  another dim meta line once the eye drops past the top of the panel. */
2002
2078
  border-bottom: var(--bw-hair) solid var(--rule);
2003
2079
  margin-bottom: var(--space-1);
@@ -2466,11 +2542,15 @@
2466
2542
  border-radius: var(--r-3);
2467
2543
  font-family: var(--ff-mono); font-size: var(--fs-lg);
2468
2544
  }
2469
- .ds-247420 .cli .prompt { color: var(--green-2); }
2545
+ /* user-select:none (matching .ds-cli-row .prompt below) so selecting/copying
2546
+ a command line grabs only the command text, not the prompt mark itself --
2547
+ otherwise every copy-pasted line carries a leading '$ ' that has to be
2548
+ stripped by hand before it can be re-run. */
2549
+ .ds-247420 .cli .prompt { color: var(--green-2); user-select: none; }
2470
2550
  .ds-247420 .cli .cmd { flex: 1; min-width: 0; overflow-x: auto; white-space: nowrap; color: var(--paper); }
2471
2551
  .ds-247420 .cli .copy {
2472
2552
  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);
2553
+ font-size: var(--fs-tiny); letter-spacing: var(--tr-tight); font-weight: 500;
2474
2554
  cursor: pointer; box-shadow: inset 0 0 0 1px var(--rule-strong);
2475
2555
  border-radius: var(--r-pill);
2476
2556
  }
@@ -2512,7 +2592,7 @@
2512
2592
  .ds-247420 .ds-quickstart-copy {
2513
2593
  align-self: flex-end;
2514
2594
  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);
2595
+ font-family: var(--ff-body); font-size: var(--fs-tiny); letter-spacing: var(--tr-tight); font-weight: 500;
2516
2596
  cursor: pointer; box-shadow: inset 0 0 0 1px var(--rule-strong);
2517
2597
  border-radius: var(--r-pill); border: none;
2518
2598
  }
@@ -2679,7 +2759,11 @@
2679
2759
  ============================================================ */
2680
2760
  .ds-247420 .ds-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: currentColor; flex-shrink: 0; vertical-align: middle; }
2681
2761
  .ds-247420 .ds-dot-on { color: var(--green-2); }
2682
- .ds-247420 .ds-dot-off { color: var(--fg-3); }
2762
+ /* Off/idle reads as a HOLLOW ring (transparent fill, currentColor outline)
2763
+ instead of a solid dot in a dimmer color -- filled-vs-outline is a shape
2764
+ cue that survives grayscale/colorblind simulation, where a solid green dot
2765
+ and a solid gray dot at the same size can look identical in luminance. */
2766
+ .ds-247420 .ds-dot-off { color: var(--fg-3); background: transparent; box-shadow: inset 0 0 0 1.5px currentColor; }
2683
2767
  /* live is a distinct hue from a plain "on" dot — see .chip.tone-live's
2684
2768
  comment for the success-vs-live rationale. */
2685
2769
  .ds-247420 .ds-dot-live { color: var(--sky); }
@@ -2744,7 +2828,7 @@
2744
2828
  .ds-247420 .kpi-card .lbl {
2745
2829
  font-size: var(--fs-xs); color: var(--fg-3);
2746
2830
  font-weight: 600; margin-top: 8px;
2747
- letter-spacing: var(--tr-caps); text-transform: uppercase;
2831
+ letter-spacing: var(--tr-tight);
2748
2832
  }
2749
2833
  .ds-247420 .kpi-foot {
2750
2834
  display: flex; align-items: center; justify-content: space-between;
@@ -3874,8 +3958,8 @@
3874
3958
  .ds-247420 .btn-primary.danger {
3875
3959
  background: var(--warn);
3876
3960
  border-color: var(--warn);
3877
- color: var(--ink);
3878
- box-shadow: inset 0 0 0 var(--bw-hair, 1px) color-mix(in oklab, var(--ink) 25%, transparent);
3961
+ color: var(--warn-fg);
3962
+ box-shadow: inset 0 0 0 var(--bw-hair, 1px) color-mix(in oklab, var(--warn-fg) 25%, transparent);
3879
3963
  font-weight: 700;
3880
3964
  letter-spacing: 0.01em;
3881
3965
  }
@@ -4006,7 +4090,7 @@
4006
4090
  .ds-247420 .ds-catalog-side h1 { font-size: var(--fs-lg); margin: 0 0 var(--space-1); }
4007
4091
  .ds-247420 .ds-catalog-side .subtitle { font-size: var(--fs-micro); color: var(--fg-3); margin: 0 0 var(--space-4); }
4008
4092
  .ds-247420 .ds-catalog-side nav h4 {
4009
- font-size: var(--fs-micro); text-transform: uppercase; letter-spacing: var(--tr-label);
4093
+ font-size: var(--fs-micro); letter-spacing: var(--tr-tight); font-weight: 600;
4010
4094
  color: var(--fg-3); margin: var(--space-3) 0 var(--space-1);
4011
4095
  }
4012
4096
  .ds-247420 .ds-catalog-side nav a {
@@ -4206,7 +4290,7 @@
4206
4290
  width: 36px; height: 36px; flex-shrink: 0;
4207
4291
  border-radius: 50%; background: var(--bg-3); color: var(--fg);
4208
4292
  display: inline-flex; align-items: center; justify-content: center;
4209
- font-family: var(--ff-mono); font-size: var(--fs-micro); font-weight: 600;
4293
+ font-family: var(--ff-body); font-size: var(--fs-micro); font-weight: 600;
4210
4294
  text-transform: lowercase; letter-spacing: 0.02em; user-select: none;
4211
4295
  transition: transform 0.12s ease, box-shadow 0.12s ease;
4212
4296
  position: relative;
@@ -4505,7 +4589,7 @@
4505
4589
  .ds-247420 .chat-link .thumb,
4506
4590
  .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
4591
  .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; }
4592
+ .ds-247420 .chat-link .host { font-family: var(--ff-body); font-size: var(--fs-xs); color: var(--fg-3); text-transform: lowercase; }
4509
4593
  .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
4594
  .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
4595
 
@@ -4517,7 +4601,7 @@
4517
4601
  .ds-247420 .chat-meta .who { font-weight: 600; color: var(--fg-2); }
4518
4602
  .ds-247420 .chat-meta .who::after { content: ' ·'; color: var(--fg-3); font-weight: 400; }
4519
4603
  .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); }
4604
+ .ds-247420 .chat-meta .tick { color: var(--fg-3); margin-left: var(--space-hair); letter-spacing: -2px; font-family: var(--ff-body); }
4521
4605
  .ds-247420 .chat-meta .tick.read { color: var(--accent-ink); }
4522
4606
 
4523
4607
  .ds-247420 .chat-reactions {
@@ -4892,12 +4976,12 @@
4892
4976
 
4893
4977
  .ds-247420 .app-side .count {
4894
4978
  padding: 1px 8px; font-size: var(--fs-micro); font-weight: 700;
4895
- font-family: var(--ff-mono); letter-spacing: 0.04em;
4979
+ font-family: var(--ff-body); letter-spacing: 0.04em;
4896
4980
  min-width: 18px; text-align: center;
4897
4981
  }
4898
4982
  .ds-247420 .app-side a:has(> .count:empty) > .count,
4899
4983
  .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; }
4984
+ .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
4985
  .ds-247420 .app-side a.active .glyph { color: var(--accent-ink); }
4902
4986
 
4903
4987
  /* -- select primitive --------------------------------------------------- */
@@ -6201,11 +6285,14 @@
6201
6285
  @media (prefers-reduced-motion: no-preference) {
6202
6286
  .ds-247420 .ws-shell { transition: grid-template-columns var(--dur-base) var(--ease); }
6203
6287
  }
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
- }
6288
+ /* Ultrawide: .ws-shell itself stays full-width (fills the real screen edges
6289
+ at any viewport, matching .app's own unbounded-width rule in topbar.css) --
6290
+ only the 1fr content track's OWN inner measure is capped, so rail/sessions/
6291
+ pane keep their fixed/clamped widths and only the middle content column's
6292
+ text gets a readability ceiling, instead of the whole grid (and its side
6293
+ columns) shrinking together and leaving dead margin on either side of the
6294
+ shell. */
6295
+ .ds-247420 .ws-content { max-width: var(--measure-wide, 1200px); margin-inline: auto; width: 100%; }
6209
6296
 
6210
6297
  /* Rail (left nav) */
6211
6298
  .ds-247420 .ws-rail {
@@ -7274,8 +7361,13 @@
7274
7361
  /* .ds-field-eyebrow joins the kit small-label voice above with no overrides. */
7275
7362
  .ds-247420 .ds-hint-sm { font-size: var(--fs-xs); color: var(--panel-text-2); }
7276
7363
  .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; }
7364
+ .ds-247420 .ds-btn-row { display: flex; gap: var(--space-2, 8px); flex-wrap: wrap; align-items: center; }
7278
7365
  .ds-247420 .ds-btn-row-tight { gap: var(--space-1-75, 6px); }
7366
+ /* Size-ladder demo group: each size's caption+button pair stacks and the
7367
+ group aligns at the BOTTOM so buttons of different heights share one
7368
+ visual baseline instead of centering on their own mismatched midpoints. */
7369
+ .ds-247420 .ds-btn-size-row { display: flex; flex-wrap: wrap; gap: var(--space-4); align-items: flex-end; }
7370
+ .ds-247420 .ds-btn-size-col { display: flex; flex-direction: column; gap: var(--space-1-75); align-items: flex-start; }
7279
7371
  .ds-247420 .ds-key-input { flex: 1 1 160px; min-width: 0; font-family: var(--ff-mono); }
7280
7372
  .ds-247420 .ds-toggle-btn { min-width: 78px; }
7281
7373
  /* Side-by-side checked/unchecked reference pair (settings kit theme panel) --
@@ -7586,7 +7678,7 @@
7586
7678
  .ds-247420 .ds-avatar {
7587
7679
  display: inline-flex; align-items: center; justify-content: center;
7588
7680
  border-radius: 50%; background: var(--bg-3); color: var(--fg);
7589
- font-family: var(--ff-mono); font-weight: 600; text-transform: lowercase;
7681
+ font-family: var(--ff-body); font-weight: 600; text-transform: lowercase;
7590
7682
  letter-spacing: 0.02em; user-select: none; flex-shrink: 0; object-fit: cover;
7591
7683
  box-shadow: inset 0 0 0 1px var(--rule);
7592
7684
  }
@@ -7811,8 +7903,7 @@
7811
7903
  color: var(--fg-3);
7812
7904
  font-family: var(--ff-mono);
7813
7905
  font-size: var(--fs-xs);
7814
- letter-spacing: 0.02em;
7815
- text-transform: uppercase;
7906
+ letter-spacing: 0;
7816
7907
  }
7817
7908
  .ds-247420 .panel.panel-docs .panel-title::before {
7818
7909
  content: 'docs · ';
@@ -7929,7 +8020,7 @@
7929
8020
  .ds-247420 .ds-git-status-chip {
7930
8021
  display: inline-flex; align-items: center; justify-content: center;
7931
8022
  flex: 0 0 auto; width: 18px; height: 18px;
7932
- font-family: var(--ff-mono); font-size: var(--fs-micro); font-weight: 700;
8023
+ font-family: var(--ff-body); font-size: var(--fs-micro); font-weight: 700;
7933
8024
  border-radius: var(--r-1);
7934
8025
  }
7935
8026
  .ds-247420 .ds-git-status-chip.tone-add { color: var(--green-2); background: color-mix(in oklab, var(--green-2) 16%, transparent); }
@@ -7947,7 +8038,7 @@
7947
8038
  flex: 0 0 auto; font-size: var(--fs-micro); color: var(--fg-3);
7948
8039
  border: var(--bw-hair) solid var(--rule); border-radius: var(--r-1); padding: 1px 6px;
7949
8040
  }
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); }
8041
+ .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
8042
  .ds-247420 .ds-git-stat-add { color: var(--green-2); }
7952
8043
  .ds-247420 .ds-git-stat-del { color: var(--flame); }
7953
8044
 
@@ -8074,7 +8165,7 @@
8074
8165
 
8075
8166
  .ds-247420 .ds-plugins-row-body { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
8076
8167
  .ds-247420 .ds-plugins-row-name {
8077
- font-family: var(--ff-mono); font-size: var(--fs-sm); color: var(--fg);
8168
+ font-family: var(--ff-body); font-size: var(--fs-sm); color: var(--fg);
8078
8169
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
8079
8170
  }
8080
8171
  .ds-247420 .ds-plugins-row-meta {
@@ -8103,7 +8194,7 @@
8103
8194
  }
8104
8195
  .ds-247420 .ds-plugins-detail-title { display: flex; align-items: center; gap: 8px; min-width: 0; }
8105
8196
  .ds-247420 .ds-plugins-detail-title .name {
8106
- font-family: var(--ff-mono); font-size: var(--fs-md); font-weight: 600; color: var(--fg);
8197
+ font-family: var(--ff-body); font-size: var(--fs-md); font-weight: 600; color: var(--fg);
8107
8198
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
8108
8199
  }
8109
8200
  .ds-247420 .ds-plugins-version { font-size: var(--fs-micro); color: var(--fg-3); }
@@ -8139,7 +8230,7 @@
8139
8230
 
8140
8231
  .ds-247420 .ds-plugins-group-label {
8141
8232
  font-size: var(--fs-micro); font-weight: 600; color: var(--fg-3);
8142
- text-transform: uppercase; letter-spacing: 0.02em; margin-bottom: 6px;
8233
+ letter-spacing: 0; margin-bottom: 6px;
8143
8234
  }
8144
8235
  .ds-247420 .ds-plugins-requires-list { display: flex; flex-wrap: wrap; gap: 6px; }
8145
8236
  .ds-247420 .ds-plugins-chip {
@@ -8216,7 +8307,7 @@
8216
8307
  display: flex; align-items: center; gap: var(--space-2);
8217
8308
  margin-bottom: var(--space-2);
8218
8309
  }
8219
- .ds-247420 .ds-mc-detail-title { font-family: var(--ff-mono); font-size: var(--fs-base); font-weight: 700; }
8310
+ .ds-247420 .ds-mc-detail-title { font-family: var(--ff-body); font-size: var(--fs-base); font-weight: 700; }
8220
8311
 
8221
8312
  .ds-247420 .ds-mc-discovery-error {
8222
8313
  display: flex; align-items: center; gap: var(--space-1-75);
@@ -8271,7 +8362,7 @@
8271
8362
  .ds-247420 .ds-skills-group-label {
8272
8363
  padding: var(--space-2) var(--space-2) 3px;
8273
8364
  font-size: var(--fs-micro); font-weight: 600; color: var(--fg-3);
8274
- text-transform: uppercase; letter-spacing: 0.06em;
8365
+ letter-spacing: 0;
8275
8366
  }
8276
8367
 
8277
8368
  .ds-247420 .ds-skills-description { font-size: var(--fs-sm); color: var(--fg-2); line-height: 1.5; }
@@ -8462,8 +8553,7 @@
8462
8553
  .ds-247420 .ds-cal-weekday-label {
8463
8554
  font-size: var(--fs-micro);
8464
8555
  font-weight: 600;
8465
- letter-spacing: var(--tr-caps);
8466
- text-transform: uppercase;
8556
+ letter-spacing: 0;
8467
8557
  color: var(--fg-3);
8468
8558
  text-align: center;
8469
8559
  padding-block: var(--space-1);