basalt-ui 1.29.1 → 1.30.0

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.
Files changed (119) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/MIGRATING.md +701 -369
  3. package/README.md +23 -2
  4. package/agent/rules/basalt-controls.md +34 -34
  5. package/agent/skills/basalt-app/SKILL.md +4 -2
  6. package/agent/templates/query-client.ts.tpl +18 -4
  7. package/configs/lefthook.yml +51 -19
  8. package/configs/oxlint-plugin.js +210 -84
  9. package/configs/oxlint-plugin.test.ts +182 -5
  10. package/configs/oxlint.json +4 -4
  11. package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
  12. package/dist/charts/primitives/ChartCard.js +2 -2
  13. package/dist/charts/primitives/ChartFrame.d.ts +23 -3
  14. package/dist/charts/primitives/ChartFrame.d.ts.map +1 -1
  15. package/dist/charts/primitives/ChartFrame.js +4 -4
  16. package/dist/charts/primitives/chart-frame-layout.d.ts +55 -0
  17. package/dist/charts/primitives/chart-frame-layout.d.ts.map +1 -1
  18. package/dist/charts/primitives/chart-frame-layout.js +16 -0
  19. package/dist/cli/check-theme.d.ts.map +1 -1
  20. package/dist/cli/check-theme.js +6 -0
  21. package/dist/cli/doctor.d.ts +10 -4
  22. package/dist/cli/doctor.d.ts.map +1 -1
  23. package/dist/cli/doctor.js +28 -1
  24. package/dist/cli/help.d.ts.map +1 -1
  25. package/dist/cli/help.js +2 -1
  26. package/dist/cli/index.d.ts +12 -0
  27. package/dist/cli/index.d.ts.map +1 -1
  28. package/dist/cli/index.js +29 -0
  29. package/dist/cli/init.d.ts.map +1 -1
  30. package/dist/cli/init.js +4 -15
  31. package/dist/cli/sync.d.ts.map +1 -1
  32. package/dist/cli/sync.js +8 -14
  33. package/dist/controls/actions.d.ts.map +1 -1
  34. package/dist/controls/actions.js +12 -2
  35. package/dist/dashboard/section.module.css +15 -7
  36. package/dist/dashboard/stat-card.d.ts.map +1 -1
  37. package/dist/dashboard/stat-card.js +7 -2
  38. package/dist/dashboard/stat-group.d.ts +8 -2
  39. package/dist/dashboard/stat-group.d.ts.map +1 -1
  40. package/dist/dashboard/stat-group.js +23 -15
  41. package/dist/dashboard/stat-group.module.css +85 -9
  42. package/dist/dashboard/stat-group.module.css.d.ts +1 -0
  43. package/dist/dashboard/widget-grid.d.ts.map +1 -1
  44. package/dist/dashboard/widget-grid.js +4 -5
  45. package/dist/dashboard/widget-grid.module.css +64 -21
  46. package/dist/dashboard/widget-grid.module.css.d.ts +1 -0
  47. package/dist/guard/index.d.ts +19 -2
  48. package/dist/guard/index.d.ts.map +1 -1
  49. package/dist/guard/index.js +27 -4
  50. package/dist/index.d.ts +9 -0
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +2 -0
  53. package/dist/query-client.d.ts +20 -2
  54. package/dist/query-client.d.ts.map +1 -1
  55. package/dist/shell/app-brand.module.css +12 -3
  56. package/dist/shell/app-header.module.css +49 -9
  57. package/dist/shell/app-main.module.css +24 -4
  58. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  59. package/dist/shell/app-mobile-nav.js +98 -51
  60. package/dist/shell/app-mobile-nav.module.css +99 -11
  61. package/dist/shell/app-mobile-nav.module.css.d.ts +1 -0
  62. package/dist/shell/app-sidebar.module.css +55 -2
  63. package/dist/shell/index.d.ts.map +1 -1
  64. package/dist/shell/index.js +3 -3
  65. package/dist/shell/mobile-nav-model.d.ts +26 -7
  66. package/dist/shell/mobile-nav-model.d.ts.map +1 -1
  67. package/dist/shell/mobile-nav-model.js +12 -3
  68. package/dist/shell/page-aside.module.css +8 -6
  69. package/dist/shell/page-bar.d.ts +13 -0
  70. package/dist/shell/page-bar.d.ts.map +1 -1
  71. package/dist/shell/page-bar.js +13 -3
  72. package/dist/shell/page-bar.module.css +20 -12
  73. package/dist/shell/page-title.module.css +3 -1
  74. package/dist/theme/use-basalt-spacing.d.ts.map +1 -1
  75. package/dist/tokens/index.d.ts.map +1 -1
  76. package/dist/tokens/index.js +51 -7
  77. package/dist/tokens/palette.d.ts +98 -17
  78. package/dist/tokens/palette.d.ts.map +1 -1
  79. package/dist/tokens/palette.js +110 -18
  80. package/dist/tokens.css +17 -5
  81. package/llms.txt +2 -2
  82. package/package.json +1 -1
  83. package/src/charts/primitives/ChartCard.tsx +12 -7
  84. package/src/charts/primitives/ChartFrame.tsx +30 -15
  85. package/src/charts/primitives/chart-frame-layout.ts +86 -0
  86. package/src/cli/check-theme.ts +13 -0
  87. package/src/cli/doctor.ts +49 -8
  88. package/src/cli/help.ts +5 -3
  89. package/src/cli/index.ts +49 -0
  90. package/src/cli/init.ts +6 -27
  91. package/src/cli/sync.ts +11 -22
  92. package/src/controls/actions.tsx +51 -0
  93. package/src/dashboard/section.module.css +15 -7
  94. package/src/dashboard/stat-card.tsx +7 -2
  95. package/src/dashboard/stat-group.module.css +85 -9
  96. package/src/dashboard/stat-group.module.css.d.ts +1 -0
  97. package/src/dashboard/stat-group.tsx +40 -20
  98. package/src/dashboard/widget-grid.module.css +64 -21
  99. package/src/dashboard/widget-grid.module.css.d.ts +1 -0
  100. package/src/dashboard/widget-grid.tsx +30 -12
  101. package/src/guard/index.ts +79 -11
  102. package/src/index.ts +9 -0
  103. package/src/query-client.ts +17 -5
  104. package/src/shell/app-brand.module.css +12 -3
  105. package/src/shell/app-header.module.css +49 -9
  106. package/src/shell/app-main.module.css +24 -4
  107. package/src/shell/app-mobile-nav.module.css +99 -11
  108. package/src/shell/app-mobile-nav.module.css.d.ts +1 -0
  109. package/src/shell/app-mobile-nav.tsx +225 -83
  110. package/src/shell/app-sidebar.module.css +55 -2
  111. package/src/shell/index.tsx +26 -6
  112. package/src/shell/mobile-nav-model.ts +37 -9
  113. package/src/shell/page-aside.module.css +8 -6
  114. package/src/shell/page-bar.module.css +20 -12
  115. package/src/shell/page-bar.tsx +39 -5
  116. package/src/shell/page-title.module.css +3 -1
  117. package/src/theme/use-basalt-spacing.ts +8 -6
  118. package/src/tokens/index.ts +90 -6
  119. package/src/tokens/palette.ts +111 -18
@@ -49,12 +49,13 @@
49
49
  }
50
50
 
51
51
  /* The portalled form's band matches the SHELL-OWNED page-bar band exactly, whenever one is
52
- * present (`--basalt-page-bar-h`, `docs/DESIGN-SPEC.md` §5) — not a fixed 48px. `PageBar`
52
+ * present (`--basalt-page-bar-h`, `docs/DESIGN-SPEC.md` §5) — not a fixed header height. `PageBar`
53
53
  * publishes that var on `documentElement` from a ResizeObserver on the band's own content
54
54
  * (`shell/page-bar.tsx`), so it inherits down to every descendant, this header included, with no
55
55
  * extra wiring. Two seams, one line: MEASURED on `/cbbi` 1440x900, the band's outer edge (its own
56
56
  * `border-bottom`, `app-main.module.css` `.band:not(:empty)`) used to sit at y87 while this header
57
- * (unconditionally `var(--app-shell-header-height)`, 48px) sat at y96 — 9px apart.
57
+ * (unconditionally `var(--app-shell-header-height)`, 48px at the time — the token is 44 since the
58
+ * desktop-shell pass) sat at y96 — 9px apart.
58
59
  *
59
60
  * The `+ 1px` is not decorative. `--basalt-page-bar-h` measures the band's CONTENT box only (the
60
61
  * portalled row-2 wrapper `page-bar.tsx` attaches its ResizeObserver to); the band's own
@@ -63,9 +64,10 @@
63
64
  * under the page's global `box-sizing: border-box` reset — so its OWN `border-bottom` is absorbed
64
65
  * INSIDE whatever height is declared instead of adding on top. Feeding the raw var straight in
65
66
  * therefore undershoots by exactly the band's border: `calc(38px + 1px)` = 39px, matching the
66
- * band's true painted height, while the no-band fallback nets out unchanged (`calc((48px - 1px) +
67
- * 1px)` = 48px) because the same `+ 1px` also wraps that branch. Without a `PageBar` there is no
68
- * band seam to align to, so the header keeps closing the ordinary 48px top belt
67
+ * band's true painted height, while the no-band fallback nets out unchanged (`calc((44px - 1px) +
68
+ * 1px)` = 44px, reading today's `appShellHeaderHeight`) because the same `+ 1px` also wraps that
69
+ * branch. Without a `PageBar` there is no band seam to align to, so the header keeps closing the
70
+ * ordinary 44px top belt
69
71
  * (`docs/DESIGN-SPEC.md` §5) the header and sidebar-brand bands also close.
70
72
  */
71
73
  .panel[data-basalt-page-aside='shell'] .header {
@@ -81,7 +83,7 @@
81
83
  }
82
84
 
83
85
  /* A real title (docs/DESIGN-SPEC.md §5): mirrors `widget-header.module.css` `.heading` and the
84
- * breadcrumb's current-page treatment — the three 48px bands each carry one 550-weight head-font
86
+ * breadcrumb's current-page treatment — the three 44px bands each carry one 550-weight head-font
85
87
  * name. */
86
88
  .title {
87
89
  font-family: var(--basalt-font-head);
@@ -47,6 +47,19 @@ export declare function usePageKebabClaimed(): boolean;
47
47
  * Internal — the seam `PageAside` projects itself through below `sm` (`docs/ASIDE-SPEC.md` §0).
48
48
  * `host` says whether there is a row 2 to hang the pill off at all; `claim` publishes the aside's
49
49
  * title and glyph; `target` is the node inside the opened sheet its children portal into.
50
+ *
51
+ * It also carries THE ONE BRANCH NOBODY PREDICTS, as a dev-only warning. `PageBar` only claims the
52
+ * panel host when it renders a row 2 (`tabs`, `filters` or a non-empty `filtersEnd`), so a page
53
+ * whose bar has actions ALONE gets `host: false` — and below `sm` that aside silently stops being
54
+ * reachable: no pill, no sheet, just the in-flow form at the bottom of a scrolled page. The
55
+ * behaviour is deliberate (there is genuinely nowhere to hang a trigger) and pinned by
56
+ * `page-aside.test.tsx`, so this warns rather than changes it. Nothing about the page LOOKS wrong
57
+ * on the desktop the author is building on, which is exactly why it needs saying out loud.
58
+ *
59
+ * `settled` is why the warning is not a one-shot mount effect: `panelHost` is published by a LAYOUT
60
+ * effect inside `PageBar`, so on the first pass it is false on every page, including the ones that
61
+ * do host. Deferring by one commit — the same deferral `PageAside` runs for the same reason — is
62
+ * what keeps this from firing on every aside in the library.
50
63
  */
51
64
  export declare function useAsidePanelSlot(): {
52
65
  host: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"page-bar.d.ts","sourceRoot":"","sources":["../../src/shell/page-bar.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAMnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAK9D,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,wBAAwB,CAAA;AAExD;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gGAAgG;IAChG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CACzB,CAAA;AAuDD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,aAAa,EACb,QAAQ,GACT,EAAE;IACD,aAAa,EAAE,SAAS,YAAY,EAAE,CAAA;IACtC,QAAQ,EAAE,SAAS,CAAA;CACpB,GAAG,SAAS,CAsDZ;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAGlE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAGtE;AAED,yFAAyF;AACzF,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI;IACnC,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,MAAM,IAAI,CAAA;IAC7C,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAC3B,CAGA;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAElD,MAAM,MAAM,YAAY,GAAG,WAAW,GACpC,eAAe,CAAC,WAAW,CAAC,GAAG;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B,qGAAqG;IACrG,IAAI,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;IACrC,6CAA6C;IAC7C,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,sDAAsD;IACtD,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;IACxB,sBAAsB;IACtB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,CAAA;AAmEH,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,OAAO,EACP,UAAU,EACV,IAAI,EACJ,SAAS,EACT,KAAK,EACL,UAAU,GACX,EAAE,YAAY,GAAG,SAAS,CA0L1B"}
1
+ {"version":3,"file":"page-bar.d.ts","sourceRoot":"","sources":["../../src/shell/page-bar.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAMnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAK9D,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,wBAAwB,CAAA;AAKxD;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gGAAgG;IAChG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CACzB,CAAA;AAuDD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,aAAa,EACb,QAAQ,GACT,EAAE;IACD,aAAa,EAAE,SAAS,YAAY,EAAE,CAAA;IACtC,QAAQ,EAAE,SAAS,CAAA;CACpB,GAAG,SAAS,CAsDZ;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAGlE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAGtE;AAED,yFAAyF;AACzF,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,IAAI;IACnC,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,MAAM,IAAI,CAAA;IAC7C,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAC3B,CAaA;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAElD,MAAM,MAAM,YAAY,GAAG,WAAW,GACpC,eAAe,CAAC,WAAW,CAAC,GAAG;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B,qGAAqG;IACrG,IAAI,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;IACrC,6CAA6C;IAC7C,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,sDAAsD;IACtD,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;IACxB,sBAAsB;IACtB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,CAAA;AAmEH,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,OAAO,EACP,UAAU,EACV,IAAI,EACJ,SAAS,EACT,KAAK,EACL,UAAU,GACX,EAAE,YAAY,GAAG,SAAS,CAkM1B"}
@@ -11,6 +11,7 @@ import { useIsomorphicLayoutEffect } from "./isomorphic-layout-effect.js";
11
11
  import classes from "./page-bar.module.css";
12
12
  import asideClasses from "./page-aside.module.css";
13
13
  const PAGE_BAR_HEIGHT_VAR = "--basalt-page-bar-h";
14
+ const DEV = process.env["NODE_ENV"] !== "production";
14
15
  const NO_SLOTS = {
15
16
  target: null,
16
17
  setTarget: () => {
@@ -89,7 +90,17 @@ function usePageKebabClaimed() {
89
90
  return useContext(PageBarContext).kebabClaims > 0;
90
91
  }
91
92
  function useAsidePanelSlot() {
92
- const { panelHost, claimPanel, panelTarget } = useContext(PageBarContext);
93
+ const { panelHost, claimPanel, panelTarget, inShell } = useContext(PageBarContext);
94
+ const [settled, setSettled] = useState(false);
95
+ useIsomorphicLayoutEffect(() => {
96
+ setSettled(true);
97
+ }, []);
98
+ useEffect(() => {
99
+ if (!DEV || !settled || !inShell || panelHost) return;
100
+ console.warn(
101
+ "[basalt] PageAside: this page's PageBar renders no row 2 (no `tabs`, no `filters`, no `filtersEnd`), so below `sm` there is no pill to open the aside \u2014 it renders in flow at the bottom of the page instead. Give the bar a row 2, or expect the in-flow form on a phone."
102
+ );
103
+ }, [settled, inShell, panelHost]);
93
104
  return { host: panelHost, claim: claimPanel, target: panelTarget };
94
105
  }
95
106
  function publishBarHeight(node) {
@@ -174,8 +185,7 @@ function PageBar({
174
185
  panel !== null && /* @__PURE__ */ jsx(
175
186
  FilterPill,
176
187
  {
177
- label: "Panel",
178
- ariaLabel: panel.title,
188
+ label: panel.title,
179
189
  icon: panel.icon,
180
190
  className: classes.panelPill,
181
191
  hideGlyph: true,
@@ -96,10 +96,15 @@
96
96
  margin-inline-end: var(--vx-space-control-gap);
97
97
  }
98
98
 
99
+ /* Glyph BOX, 1.125rem — a decoration-class fixed size, deliberately NOT a `--vx-space-*` token
100
+ * (an icon is not a gap; the shipped icon set draws on a 24px grid and the box is a fraction of
101
+ * the type size, not of the spacing scale). Do not re-litigate these in a token sweep.
102
+ * 1.125rem rather than the old 1rem because `controlHeightCtl` grew 30 -> 32: a glyph held at
103
+ * 16px inside a 32px control reads EMPTIER, not bigger. */
99
104
  .row1 :global(.mantine-Button-section) > svg,
100
105
  .row1 :global(.mantine-ActionIcon-root) > svg {
101
- width: 1rem;
102
- height: 1rem;
106
+ width: 1.125rem;
107
+ height: 1.125rem;
103
108
  }
104
109
 
105
110
  /* Actions and sync are right-aligned; the lead (or the breadcrumb, in a shell) holds the left. */
@@ -114,21 +119,24 @@
114
119
  }
115
120
 
116
121
  /*
117
- * Row 2's rhythm is 8px · pills · 8px, NOT a 40px reserved row.
122
+ * Row 2's rhythm is 8px · pills · 8px, NOT a reserved row-height box.
118
123
  *
119
- * `min-height: var(--vx-space-page-bar-row-height)` (40px) left a 30px pill floating inside a 40px
120
- * box with the 5px above and below it belonging to nothing — and because the row sat in a `Stack`
121
- * that already spaced it, the visible gap between the header and the pills read as ~19px while the
122
- * gap from the pills to the first card read as ~19px too. Symmetric padding on the row itself is
123
- * one declaration owning both halves, so the sticky bar's published height covers exactly the band
124
- * it paints — including below `sm`, where `.row2` becomes a COLUMN of `.tabs` then `.pills` and
125
- * `padding-block` still owns both edges of the taller band.
124
+ * `min-height: var(--vx-space-page-bar-row-height)` was the defect, and the arithmetic is the whole
125
+ * reason it is gone. Measured when that token was 40 and `ctl` was 30: a 30px pill floated inside a
126
+ * 40px box with the 5px above and below it belonging to nothing — and because the row sat in a
127
+ * `Stack` that already spaced it, the visible gap between the header and the pills read as ~19px
128
+ * while the gap from the pills to the first card read as ~19px too. The desktop-shell pass has
129
+ * since moved both numbers (row height 40 -> 36, `ctl` 30 -> 32), which narrows that unowned band
130
+ * to 2px a side but does not close it: a HEIGHT token still hands its spare pixels to nobody.
131
+ * Symmetric padding on the row itself is one declaration owning both halves, so the sticky bar's
132
+ * published height covers exactly the band it paints — including below `sm`, where `.row2` becomes
133
+ * a COLUMN of `.tabs` then `.pills` and `padding-block` still owns both edges of the taller band.
126
134
  *
127
135
  * `stackXs` and not `stackSm`: the row sits inside the shell's own bordered band
128
136
  * (`app-main.module.css`'s `.band`), so it no longer has to carry the visual separation in
129
- * whitespace — 4px above and below a 30px `ctl` pill still clears it (38px total) and buys back 8px
137
+ * whitespace — 4px above and below a 32px `ctl` pill still clears it (40px total) and buys back 8px
130
138
  * of content on every page.
131
- * Row 1's 40px `--vx-space-page-bar-row-height` is untouched: it is a HEIGHT token, not padding.
139
+ * Row 1's 36px `--vx-space-page-bar-row-height` is untouched: it is a HEIGHT token, not padding.
132
140
  */
133
141
  .row2 {
134
142
  display: flex;
@@ -5,10 +5,12 @@
5
5
  * and every named spot reads identically regardless of which one a given surface uses.
6
6
  */
7
7
 
8
+ /* Title over subtitle is the tightest pair the 4px vertical rhythm has a step for — `stack-xs`,
9
+ * not the literal 4px it duplicated. */
8
10
  .root {
9
11
  display: flex;
10
12
  flex-direction: column;
11
- gap: 4px;
13
+ gap: var(--vx-space-stack-xs);
12
14
  }
13
15
 
14
16
  .titleRow {
@@ -1 +1 @@
1
- {"version":3,"file":"use-basalt-spacing.d.ts","sourceRoot":"","sources":["../../src/theme/use-basalt-spacing.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,wBAAgB,gBAAgB,IAAI,WAAW,CAE9C"}
1
+ {"version":3,"file":"use-basalt-spacing.d.ts","sourceRoot":"","sources":["../../src/theme/use-basalt-spacing.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,wBAAgB,gBAAgB,IAAI,WAAW,CAE9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAaH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAMvE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,WAAW,CAAA;AAOjC,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACnF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAM5D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAO7C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,wFAAwF;AACxF,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvD,8FAA8F;AAC9F,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AAEjD;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,GAAG,MAAM,KAAG,MACoB,CAAA;AA6DrE,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+Jb;;;;;OAKG;;IAEH;;;;;;;;;;OAUG;;CAEK,CAAA;AAEV;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,WAAW;IACtB;;;;;OAKG;;CAEK,CAAA;AAEV,kFAAkF;AAClF,MAAM,MAAM,WAAW,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE;IACjC,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,GAAG,WAAW,CAUd;AAOD;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAExC;AAyaD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,EACpD,GAAG,EAAE,CAAC,EACN,MAAM,SAAK,GACV;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CAAE,CAI5B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAEjE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,EACnD,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,CAAC,GACL;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CAAE,CAE5B;AAED;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,2CAA2C;AAC3C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,+GAA+G;IAC/G,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAClC,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;IACzC;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACrB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AA4DD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,eAAe,CAC7B,IAAI,GAAE,gBAAqB,EAC3B,IAAI,GAAE,WAAgC,GACrC,MAAM,CA6DR;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AASD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAkB1E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,CASvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAMtE"}
@@ -336,8 +336,9 @@ function spaceDecls(space) {
336
336
  decl("space-stack-xl", `${space.anchors.stackXl}px`),
337
337
  // The CSS-module spacing sweep's one-offs (docs/STATUS.md) — same single-source reasoning,
338
338
  // grouped to match `SPACE_STEP_BASE`'s own grouping in tokens/palette.ts.
339
- // ONE value at every viewport since 1.26.0 — the AppShell header is a single 48px row (law
340
- // C14), so the `-mobile` override of the old Decision-3 responsive pair is gone.
339
+ // ONE value at every viewport since 1.26.0 — the AppShell header is a single
340
+ // `appShellHeaderHeight` row (law C14), so the `-mobile` override of the old Decision-3
341
+ // responsive pair is gone.
341
342
  decl("space-sticky-header-clearance", `${space.step.stickyHeaderClearance}px`),
342
343
  decl("space-nav-icon-gap", `${space.step.navIconGap}px`),
343
344
  decl("space-sidebar-region-gap", `${space.step.sidebarRegionGap}px`),
@@ -414,6 +415,24 @@ function spaceDecls(space) {
414
415
  decl("space-sidebar-child-list-indent", `${space.step.sidebarChildListIndent}px`),
415
416
  decl("space-sidebar-child-row-inset-y", `${space.step.sidebarChildRowInsetY}px`),
416
417
  decl("space-sidebar-child-row-indent", `${space.step.sidebarChildRowIndent}px`),
418
+ // The page gutter — the ONE `appShell*` dimension that IS emitted, against the JS-number-only
419
+ // rule its five neighbours follow (see the note at the bottom of this list). It earns the
420
+ // exception because it is the most visible spacing number the framework ships — every page's
421
+ // left edge — and it was, until now, the one number the `--vx-*` layer did not expose at all, so
422
+ // a consumer retuning its identity through `createBasaltTheme` could not reach it and had to
423
+ // reach past the token layer into `AppShell.Main`'s own styles. Emitted in PLAIN PX, like every
424
+ // other inset/gap in this list and unlike the `pxRem` heights above it: the rem-plus-
425
+ // `var(--mantine-scale)` reconstruction exists so a CONTROL's box tracks the root font size and
426
+ // Mantine's global scale knob; a page gutter is a layout margin against a viewport, not a box
427
+ // sized to text, so scaling it with the font would make a large-type user's content column
428
+ // narrower rather than more legible.
429
+ decl("space-app-shell-inset", `${space.step.appShellInset}px`),
430
+ decl("space-app-shell-inset-mobile", `${space.step.appShellInsetMobile}px`),
431
+ // The header's breadcrumb floor — emitted for the same reason as the gutter pair above it and
432
+ // not for the JS-number reason its `appShell*` neighbours below are withheld for: this one has
433
+ // a real CSS consumer (`shell/app-header.module.css`'s `.lead`), which is the whole test this
434
+ // list applies. Plain px, like every other layout dimension here.
435
+ decl("space-app-shell-header-lead-min", `${space.step.appShellHeaderLeadMin}px`),
417
436
  decl("space-mobile-nav-tab-gap", `${space.step.mobileNavTabGap}px`),
418
437
  decl("space-mobile-nav-icon-size", `${space.step.mobileNavIconSize}px`),
419
438
  decl("space-mobile-nav-tab-inset-y", `${space.step.mobileNavTabInsetY}px`),
@@ -431,6 +450,11 @@ function spaceDecls(space) {
431
450
  decl("space-badge-inset-y", `${space.step.badgeInsetY}px`),
432
451
  decl("space-badge-inset-x", `${space.step.badgeInsetX}px`),
433
452
  decl("space-stat-card-gap", `${space.step.statCardGap}px`),
453
+ // The card/section inset ladder — the three values `spaceMobileDecls` below re-points at `< sm`
454
+ // (see its doc for where the law lives and why it lives there).
455
+ decl("space-card-inset-y", `${space.step.cardInsetY}px`),
456
+ decl("space-card-inset-x", `${space.step.cardInsetX}px`),
457
+ decl("space-section-gap", `${space.step.sectionGap}px`),
434
458
  decl("space-virtual-row-inset-y", `${space.step.virtualRowInsetY}px`),
435
459
  decl("space-virtual-row-inset-x", `${space.step.virtualRowInsetX}px`),
436
460
  // Controls tier row/gap heights (`docs/CONTROLS-SPEC.md` §5) — the current commit's consumers
@@ -446,7 +470,8 @@ function spaceDecls(space) {
446
470
  // `chartDotR`/`progressBarSize`/`timelineBullet` are DELIBERATELY absent — see this function's
447
471
  // doc for why (JS-number-only consumers, zero `var()` reads). `appShellHeaderHeight`/
448
472
  // `appShellNavbarWidth`/`appShellNavbarRailWidth`/`appShellAsideWidth`/`appShellAsideRailWidth`
449
- // join that list —
473
+ // join that list — but NOT `appShellInset`/`appShellInsetMobile`/`appShellHeaderLeadMin`, which
474
+ // are emitted above and carry their own reason for the exception —
450
475
  // `shell/index.tsx` reads all five as JS numbers via `useBasaltSpacing()` (Mantine's `AppShell`
451
476
  // `header`/`navbar`/`aside` props take numbers, not `var()` strings), so a `--vx-space-app-shell-*`
452
477
  // decl here would have had zero consumers, framework-wide, the same dead-weight shape this function's
@@ -542,11 +567,26 @@ function groupTokens(name, map) {
542
567
  }
543
568
  const MANTINE_SCHEME_ATTRIBUTE = "data-mantine-color-scheme";
544
569
  const indent = (block) => block.split("\n").map((line) => line === "" ? line : ` ${line}`).join("\n");
570
+ const MOBILE_MEDIA = "@media (max-width: 47.99375em)";
571
+ function spaceMobileDecls(space) {
572
+ return [
573
+ decl("space-card-inset-x", `${space.scale.xs}px`),
574
+ decl("space-section-gap", `${space.anchors.stackSm}px`)
575
+ ];
576
+ }
577
+ function mobileLadderBlock(space) {
578
+ return `${MOBILE_MEDIA} {
579
+ :root {
580
+ ${indent(spaceMobileDecls(space).join("\n"))}
581
+ }
582
+ }`;
583
+ }
545
584
  function buildPaletteCss(opts = {}, data = buildPaletteData()) {
546
585
  const groups = opts.groups ?? {};
547
586
  const legacyAliases = opts.legacyAliases ?? true;
587
+ const only = opts.only ?? "all";
548
588
  const extraDerived = (opts.derived ?? []).map((d) => ` ${d}`).join("\n");
549
- const derivedBlock = frameworkDerived(data, opts.only ?? "all", legacyAliases);
589
+ const derivedBlock = frameworkDerived(data, only, legacyAliases);
550
590
  const derived = extraDerived ? `${derivedBlock}
551
591
  ${extraDerived}` : derivedBlock;
552
592
  const side = (s) => {
@@ -555,9 +595,12 @@ ${extraDerived}` : derivedBlock;
555
595
  return extra ? `${framework}
556
596
  ${extra}` : framework;
557
597
  };
558
- const rootBlock = `:root {
598
+ const rootBlock = only === "core" ? `:root {
559
599
  ${derived}
560
- }`;
600
+ }` : `:root {
601
+ ${derived}
602
+ }
603
+ ${mobileLadderBlock(DEFAULT_SPACE_VALUES)}`;
561
604
  if (opts.scheme === void 0 && opts.defaultScheme === void 0 && !opts.mediaFallback) {
562
605
  return `${rootBlock}
563
606
  :root,
@@ -627,7 +670,8 @@ function buildDensityCss(space) {
627
670
  if (!space) return "";
628
671
  return `:root {
629
672
  ${spaceDecls(space).join("\n")}
630
- }`;
673
+ }
674
+ ${mobileLadderBlock(space)}`;
631
675
  }
632
676
  export {
633
677
  BP,
@@ -248,8 +248,15 @@ declare const SPACE_ANCHORS_BASE: {
248
248
  readonly controlHeightWidget: 24;
249
249
  /** The `size="ctl"` Mantine tier's resolved height (`docs/CONTROLS-SPEC.md` §5, C5) —
250
250
  * `PageBar`/`Section`/table toolbar/sidebar-block controls. Floored at 28px in
251
- * {@link deriveSpacing}. */
252
- readonly controlHeightCtl: 30;
251
+ * {@link deriveSpacing}.
252
+ *
253
+ * 32, up from 30. At 30 this tier was the ONLY chrome number in the shell that did not agree with
254
+ * its neighbours: the sidebar search trigger is 32 (`sidebarSearchTriggerHeight`), a sidebar block
255
+ * row is 32 (`sidebarBlockRowHeight`), and a NavLink row resolves to ~32 (`2 * rowInsetY +
256
+ * rowLineHeight * text.md`) — so a `size="ctl"` button sitting beside any of them read 2px short
257
+ * and the whole band looked unresolved. 32 lands the entire chrome tier on ONE number, which is
258
+ * also the smallest square that still holds a 16px icon with a 8px surround. */
259
+ readonly controlHeightCtl: 32;
253
260
  /** The touch hit-area size (`::before`) every home control expands to below `sm` (C15,
254
261
  * `docs/CONTROLS-SPEC.md` §5) — independent of the visible `controlHeightCtl` box, same shape as
255
262
  * `mobileNavBarHeight`/`mobileNavRowHeight`'s Apple HIG 44pt / WCAG 2.5.5 floors elsewhere in this
@@ -311,8 +318,14 @@ declare const SPACE_STEP_BASE: {
311
318
  readonly navIconGap: 10;
312
319
  /** Sidebar region-to-region gap: `.brand`'s bottom padding and `.searchSlot`'s bottom padding (in
313
320
  * both the expanded and collapsed rail variants) — the searchSlot comment explicitly says its gap
314
- * opens the nav region "the same way the brand row's own bottom padding does". */
315
- readonly sidebarRegionGap: 10;
321
+ * opens the nav region "the same way the brand row's own bottom padding does".
322
+ *
323
+ * 12, up from 10. This is the ONE gap the sidebar spends at all three of its seams (brand → search,
324
+ * search → nav, nav → account), so it is what separates the column's regions from each other; at 10
325
+ * it was indistinguishable from the gaps WITHIN a region (`sidebarSectionLabelGap`, the child-list
326
+ * margins), and the column read as one undifferentiated list of rows. 12 is the first step that
327
+ * reads as a region break without opening a hole. */
328
+ readonly sidebarRegionGap: 12;
316
329
  /** Blockquote rail's own vertical inset. */
317
330
  readonly proseQuoteInsetY: 2;
318
331
  /** Blockquote text indent past the rail. */
@@ -452,8 +465,11 @@ declare const SPACE_STEP_BASE: {
452
465
  readonly mermaidContainerInset: 16;
453
466
  /** Brand row's horizontal inset. */
454
467
  readonly sidebarBrandInsetX: 7;
455
- /** Gap between nav sections. */
456
- readonly sidebarSectionGap: 12;
468
+ /** Gap between nav sections. Paired with `sidebarSectionLabelGap` below: together they are the
469
+ * section's proximity law — MORE space above a section label than below it, so the label reads as
470
+ * belonging to the list it heads. 16/6, up from 12/2: at 12 above and 2 below the pair was
471
+ * INVERTED, gluing each label to the last row of the section before it. */
472
+ readonly sidebarSectionGap: 16;
457
473
  /** Account row's top inset. */
458
474
  readonly sidebarAccountInsetTop: 9;
459
475
  /** Account row's horizontal inset. */
@@ -462,8 +478,10 @@ declare const SPACE_STEP_BASE: {
462
478
  readonly sidebarAccountInsetBottom: 2;
463
479
  /** Identity-initials avatar block's fixed size (width and height). */
464
480
  readonly sidebarAvatarSize: 28;
465
- /** Section-label row's bottom gap (before the first nav row). */
466
- readonly sidebarSectionLabelGap: 2;
481
+ /** Section-label row's bottom gap (before the first nav row) — the smaller half of the
482
+ * proximity pair documented on `sidebarSectionGap` above. 6, up from 2: 2 was hairline enough that
483
+ * the label looked welded to the first row rather than titling the list. */
484
+ readonly sidebarSectionLabelGap: 6;
467
485
  /** Collapsible child-list wrapper's top margin. */
468
486
  readonly sidebarChildListGapTop: 2;
469
487
  /** Collapsible child-list wrapper's bottom margin. */
@@ -479,15 +497,22 @@ declare const SPACE_STEP_BASE: {
479
497
  /** Settings-menu `<Menu width={…}>` (`app-sidebar.tsx`). */
480
498
  readonly sidebarSettingsMenuWidth: 200;
481
499
  /** AppShell desktop header bar height — sized to hold one row of `size="md"` controls, so it
482
- * tracks `controlHeight`. Its level-0 coincidence with `appShellNavbarRailWidth` below is a
483
- * coincidence, not a law: this is a horizontal bar's HEIGHT (governed by control height), that
484
- * is a vertical rail's WIDTH (governed by icon footprint). They stay separate entries. */
500
+ * tracks `controlHeight`. It no longer coincides with `appShellNavbarRailWidth` below, which is
501
+ * the point that entry's own note was always making: this is a horizontal bar's HEIGHT (governed
502
+ * by control height), that is a vertical rail's WIDTH (governed by icon footprint). Two separate
503
+ * entries, and now visibly so. */
485
504
  /** AppShell header bar height — ONE value at every viewport since 1.26.0 (law C14,
486
505
  * `docs/CONTROLS-SPEC.md` §2.1). The pre-1.26.0 `appShellHeaderMobileHeight` (97) existed only
487
506
  * because the mobile header wrapped to a second, always-reserved page-actions row; `PageBar`
488
507
  * folds that row's overflow into a kebab and moves its filters/tabs into the page flow, so the
489
- * bar is 48px on a phone too and there is no sum to keep in step any more. */
490
- readonly appShellHeaderHeight: 48;
508
+ * bar is one row on a phone too and there is no sum to keep in step any more.
509
+ *
510
+ * 44, down from 48. The band holds ONE `ctl`-tier row (32 since this pass), so 48 left 8px of
511
+ * dead air above and below it — the "too much spacing at the top bar" the header reads as. 44
512
+ * keeps 6px of breathing room a side, still clears `touchControlHeight` (36) below `sm` and
513
+ * `controlHeight` (42) for a `size="md"` control, and is the Apple HIG 44pt figure the rest of
514
+ * this table already floors its touch targets at. */
515
+ readonly appShellHeaderHeight: 44;
491
516
  /** AppShell navbar width, expanded — ONE entry for both the `base` (mobile, where the navbar is
492
517
  * permanently collapsed and unused — see `MobileNav`) and the expanded `sm` value: the same
493
518
  * `.root` at full width, genuinely one concept.
@@ -499,8 +524,9 @@ declare const SPACE_STEP_BASE: {
499
524
  * (`sidebarAccountMenuWidth` 220 + the row inset), so the menu no longer overhangs the column it
500
525
  * belongs to. */
501
526
  readonly appShellNavbarWidth: 256;
502
- /** AppShell navbar width, collapsed icon rail. Separate from `appShellHeaderHeight` above
503
- * despite sharing 48 at level 0 (see that entry's note). */
527
+ /** AppShell navbar width, collapsed icon rail. Separate from `appShellHeaderHeight` above, which
528
+ * used to share 48 at level 0 and no longer does (see that entry's note) — the two were always
529
+ * independent concepts and the shared literal was only ever hiding it. */
504
530
  readonly appShellNavbarRailWidth: 48;
505
531
  /** AppShell ASIDE width, unfolded — the right-hand panel region a route claims by rendering
506
532
  * `PageAside` (`docs/ASIDE-SPEC.md` §0). ONE entry for every viewport, same reasoning as
@@ -515,6 +541,36 @@ declare const SPACE_STEP_BASE: {
515
541
  * `appShellNavbarRailWidth` (48) on purpose: the navbar rail hosts a full icon nav row and its
516
542
  * hover targets, this one hosts exactly one `ctl`-tier icon button and nothing else. */
517
543
  readonly appShellAsideRailWidth: 36;
544
+ /** The PAGE GUTTER — `AppShell.Main`'s own horizontal inset, i.e. the distance from the sidebar
545
+ * seam (and from the viewport's right edge) to the first pixel of page content. Unlike its
546
+ * `appShell*` neighbours above this one IS emitted as a `--vx-*` var (see `spaceDecls`'s doc in
547
+ * `tokens/index.ts` for why), because it is the single most visible spacing number the framework
548
+ * ships and a consumer retuning its identity has to be able to reach it.
549
+ *
550
+ * 20, up from the 13 (`SPACE_SCALE.sm`) the main column used to borrow. The sidebar's nav ICON
551
+ * column already sits at x=20 — 10px of `.root` frame inset plus 10px of NavLink inset
552
+ * (`rowInsetX`) — and the brand row claims to align with it while sitting at 13. 20 makes that
553
+ * claim true across the seam: brand mark, nav icons and the page's first column all start on one
554
+ * vertical line, and the content gets a seam-side gutter that reads deliberate instead of
555
+ * incidental. */
556
+ readonly appShellInset: 20;
557
+ /** The page gutter BELOW `sm` — the phone half of `appShellInset` above. A separate entry rather
558
+ * than one responsive value for the same reason `appShellNavbarWidth` is one: there is no sidebar
559
+ * seam to align to on a phone, so the number is answering a different question (how much of a
560
+ * 390px viewport to spend on margin) and must be free to move alone.
561
+ *
562
+ * 8, down from the same borrowed 13. 13 a side spends 26 of 390px — 6.7% of the viewport — on
563
+ * margin before a single card is drawn, which is the "content spacing is too big" a phone reads
564
+ * as. 8 keeps the content off the bezel without competing with the cards' own insets. */
565
+ readonly appShellInsetMobile: 8;
566
+ /** The app header's BREADCRUMB FLOOR — `shell/app-header.module.css`'s `.lead` `min-width`, the
567
+ * width below which the row's one elastic side may not shrink. A step, not the raw `96px` it
568
+ * shipped as: every other dimension of that row (its height, its control tier, its gaps) tracks
569
+ * density, so a frozen floor would grow relatively narrower at every level up — and it is a floor
570
+ * measured in CHARACTERS of the crumb (~13 at level 0), which is exactly the quantity that moves
571
+ * when the type and the row around it move. The full derivation of 96 is on the `.lead` rule
572
+ * itself; this entry only owns the number. */
573
+ readonly appShellHeaderLeadMin: 96;
518
574
  /** Tab's icon-to-label gap. */
519
575
  readonly mobileNavTabGap: 3;
520
576
  /** Bar height, EXCLUDING the safe-area inset — Mantine's own `AppShell.footer` rule adds
@@ -587,10 +643,29 @@ declare const SPACE_STEP_BASE: {
587
643
  readonly virtualRowInsetY: 8;
588
644
  /** `data/virtual-list.tsx`'s skeleton row horizontal inset. */
589
645
  readonly virtualRowInsetX: 12;
646
+ /** Card inset, VERTICAL — `dashboard/stat-card.tsx` and `charts/primitives/ChartCard.tsx`, which
647
+ * must render identically (a StatCard and a ChartCard sit in the same grid row). Does NOT step
648
+ * below `sm`: the phone is short of WIDTH, and shaving the vertical inset of a card that already
649
+ * hugs its content buys a few pixels at the cost of the card's own breathing room. */
650
+ readonly cardInsetY: 11;
651
+ /** Card inset, HORIZONTAL — same two files, same must-match reason. This IS the half that steps
652
+ * below `sm` (to `SPACE_SCALE.xs`), because horizontal is where a 390px viewport is short. */
653
+ readonly cardInsetX: 13;
654
+ /** `dashboard/section.module.css`'s header→body and body-child gap — a page-level GROUPING
655
+ * rhythm, which is why it reads the stack scale rather than the card-inset one. Steps to
656
+ * `SPACE.stackSm` below `sm`. Distinct from `sidebarSectionGap` above, which is the gap between
657
+ * two NAV sections inside the sidebar column. */
658
+ readonly sectionGap: 12;
590
659
  /** `PageBar` row height (row 1 or row 2, each measured independently — the bar's own overall
591
660
  * height is the sum published as `--basalt-page-bar-h`, computed by `PageBar` itself, not a
592
- * static token). */
593
- readonly pageBarRowHeight: 40;
661
+ * static token).
662
+ *
663
+ * 36, down from 40. Row 1 portals into a shell-owned band directly under the app header
664
+ * (`shell/page-bar.tsx`), so the two stack as visible chrome: at 40 against a 44 header the
665
+ * secondary row all but matched the primary one, and the eye could not tell which band owned the
666
+ * page. 36 puts it a clear step below the header while still holding a 32px `ctl` row with 2px a
667
+ * side. */
668
+ readonly pageBarRowHeight: 36;
594
669
  /** `WidgetHeader tier="section"` row height. */
595
670
  readonly sectionHeaderHeight: 36;
596
671
  /** `WidgetHeader tier="widget"` row height. */
@@ -947,6 +1022,9 @@ export declare const SPACE_STEP: {
947
1022
  readonly appShellNavbarRailWidth: number;
948
1023
  readonly appShellAsideWidth: number;
949
1024
  readonly appShellAsideRailWidth: number;
1025
+ readonly appShellInset: number;
1026
+ readonly appShellInsetMobile: number;
1027
+ readonly appShellHeaderLeadMin: number;
950
1028
  readonly mobileNavTabGap: number;
951
1029
  readonly mobileNavBarHeight: number;
952
1030
  readonly mobileNavIconSize: number;
@@ -976,6 +1054,9 @@ export declare const SPACE_STEP: {
976
1054
  readonly statCardGap: number;
977
1055
  readonly virtualRowInsetY: number;
978
1056
  readonly virtualRowInsetX: number;
1057
+ readonly cardInsetY: number;
1058
+ readonly cardInsetX: number;
1059
+ readonly sectionGap: number;
979
1060
  readonly pageBarRowHeight: number;
980
1061
  readonly sectionHeaderHeight: number;
981
1062
  readonly widgetHeaderHeight: number;
@@ -1 +1 @@
1
- {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/tokens/palette.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/tokens/palette.ts"],"names":[],"mappings":"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"}