@mkbabb/glass-ui 3.10.1 → 3.11.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 (279) hide show
  1. package/dist/{CardAction-DrAcAV4d.js → CardAction-DuArVky-.js} +2 -2
  2. package/dist/{CommandShortcut-mV2e1aG6.js → CommandShortcut-CefCj5mt.js} +2 -2
  3. package/dist/{DataTable-C3E6jZ5B.js → DataTable-CUHMukiQ.js} +2 -2
  4. package/dist/DeckProgress-Dmk4_AKN.js +23 -0
  5. package/dist/{DialogContent-BxaaafFi.js → DialogContent-BRkT1cjP.js} +1 -1
  6. package/dist/{HoverPopover-CDA_SaCe.js → HoverPopover-2LOIW34a.js} +1 -1
  7. package/dist/InstrumentRail-CUJ05YVG.js +44 -0
  8. package/dist/{MetricBadge-idgrkqoP.js → MetricBadge-BZVWIxNy.js} +7 -5
  9. package/dist/{Notification-Cu0nN17_.js → Notification-DLMhblXR.js} +1 -1
  10. package/dist/{NumberFieldContent-CHEWghnY.js → NumberFieldContent-BbLOh8RU.js} +2 -2
  11. package/dist/{PopoverContent-DpUvdYY-.js → PopoverContent-BId6ggf_.js} +1 -1
  12. package/dist/{Progress-BW-StFw2.js → Progress-iEuD9pxG.js} +1 -1
  13. package/dist/{ScrollingText-DruYCni_.js → ScrollingText-BPP84wKo.js} +1 -1
  14. package/dist/{SelectScrollDownButton-pirzjm--.js → SelectScrollDownButton-T32cVFeM.js} +3 -3
  15. package/dist/{Switch-DeAqg6pi.js → Switch-Ch-k3Rv-.js} +1 -1
  16. package/dist/{TabsList-BAVzOZpg.js → TabsList-B8CVOQPC.js} +2 -2
  17. package/dist/{Toaster-CvuuW_y9.js → Toaster-1rYWrmAm.js} +46 -49
  18. package/dist/{ToggleGroupItem-DtD37b4G.js → ToggleGroupItem-COu_4IW4.js} +21 -17
  19. package/dist/animated-digit.js +2 -2
  20. package/dist/api/index.d.ts +5 -4
  21. package/dist/api.js +2 -2
  22. package/dist/aurora.js +70 -70
  23. package/dist/{badge-NdCQMvvB.js → badge-CaoFJzRb.js} +1 -1
  24. package/dist/badge.js +1 -1
  25. package/dist/{button-DyiWFAOE.js → button-DN39cGqL.js} +12 -12
  26. package/dist/button.js +1 -1
  27. package/dist/canvas.js +2 -2
  28. package/dist/card.js +1 -1
  29. package/dist/carousel.js +5 -5
  30. package/dist/collapsible.js +1 -1
  31. package/dist/{color-B65wWyQz.js → color-C5ls_QF7.js} +7 -9
  32. package/dist/color.js +1 -1
  33. package/dist/command.js +1 -1
  34. package/dist/components/custom/aurora/constants/presets.d.ts +62 -5
  35. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +1 -1
  36. package/dist/components/custom/aurora/index.d.ts +1 -1
  37. package/dist/components/custom/constellation/Constellation.vue.d.ts +0 -12
  38. package/dist/components/custom/constellation/constellationField.d.ts +151 -10
  39. package/dist/components/custom/constellation/index.d.ts +1 -3
  40. package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +0 -11
  41. package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +27 -0
  42. package/dist/components/custom/deck-progress/index.d.ts +2 -0
  43. package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +57 -0
  44. package/dist/components/custom/dialog-native/index.d.ts +1 -0
  45. package/dist/components/custom/dock/DockTabButton.vue.d.ts +4 -3
  46. package/dist/components/custom/dock/GlassDock.vue.d.ts +115 -3
  47. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +0 -36
  48. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +0 -44
  49. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +37 -5
  50. package/dist/components/custom/fourier-field/index.d.ts +1 -1
  51. package/dist/components/custom/fourier-field/math.d.ts +0 -17
  52. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +41 -0
  53. package/dist/components/custom/glass-panel/index.d.ts +2 -0
  54. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +3 -4
  55. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +8 -11
  56. package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
  57. package/dist/components/custom/handmark/brush.d.ts +242 -0
  58. package/dist/components/custom/handmark/freehand.d.ts +69 -0
  59. package/dist/components/custom/handmark/geometry.d.ts +50 -0
  60. package/dist/components/custom/handmark/index.d.ts +21 -0
  61. package/dist/components/custom/handmark/ink.d.ts +11 -0
  62. package/dist/components/custom/handmark/texture.d.ts +39 -0
  63. package/dist/components/custom/handmark/types.d.ts +53 -0
  64. package/dist/components/custom/handmark/useHandMark.d.ts +87 -0
  65. package/dist/components/custom/header-ribbon/HeaderRibbon.vue.d.ts +31 -0
  66. package/dist/components/custom/header-ribbon/index.d.ts +2 -0
  67. package/dist/components/custom/header-ribbon/types.d.ts +7 -0
  68. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +2 -2
  69. package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +91 -0
  70. package/dist/components/custom/instrument-rail/index.d.ts +2 -0
  71. package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +8 -0
  72. package/dist/components/ui/drawer/Drawer.vue.d.ts +0 -1
  73. package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
  74. package/dist/components/ui/slider/index.d.ts +19 -22
  75. package/dist/components/ui/toast/use-toast.d.ts +2 -2
  76. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  77. package/dist/components/ui/toggle/index.d.ts +1 -1
  78. package/dist/components/ui/toggle-group/ToggleGroup.vue.d.ts +7 -1
  79. package/dist/components/ui/toggle-group/ToggleGroupItem.vue.d.ts +3 -1
  80. package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +13 -0
  81. package/dist/composables/color/index.d.ts +0 -12
  82. package/dist/composables/dark/index.d.ts +1 -1
  83. package/dist/composables/dark/useGlobalDark.d.ts +21 -1
  84. package/dist/composables/glass/useSpecularTracking.d.ts +3 -12
  85. package/dist/composables/motion/core/index.d.ts +1 -0
  86. package/dist/composables/motion/index.d.ts +0 -2
  87. package/dist/composables/motion/useRouteTransition.d.ts +42 -0
  88. package/dist/composables/motion/useSpringMount.d.ts +1 -1
  89. package/dist/configurator.js +1 -1
  90. package/dist/confirm-dialog.js +2 -2
  91. package/dist/constellation.js +225 -260
  92. package/dist/controls.js +14 -48
  93. package/dist/dark.d.ts +1 -1
  94. package/dist/dark.js +1 -1
  95. package/dist/data-table.js +1 -1
  96. package/dist/deck-progress.d.ts +1 -0
  97. package/dist/deck-progress.js +2 -0
  98. package/dist/dialog.js +2 -2
  99. package/dist/dock.js +345 -340
  100. package/dist/dockContext-BKeIMmNk.js +9 -0
  101. package/dist/{dropdown-menu-DVnQcA0E.js → dropdown-menu-D77jX6Df.js} +4 -7
  102. package/dist/dropdown-menu.js +1 -1
  103. package/dist/expandable-container.js +79 -38
  104. package/dist/forms.js +2 -2
  105. package/dist/fourier-field.js +102 -137
  106. package/dist/fourier-math.js +2 -2
  107. package/dist/glass-panel.d.ts +1 -0
  108. package/dist/glass-panel.js +44 -0
  109. package/dist/glass-ui.css +1 -1
  110. package/dist/glass-ui.js +209 -287
  111. package/dist/goo-blob.js +212 -243
  112. package/dist/handmark.d.ts +1 -0
  113. package/dist/handmark.js +662 -0
  114. package/dist/header-ribbon.d.ts +1 -0
  115. package/dist/header-ribbon.js +63 -0
  116. package/dist/hover-popover.js +1 -1
  117. package/dist/icon-tooltip.js +1 -1
  118. package/dist/index.d.ts +3 -0
  119. package/dist/instrument-rail.d.ts +1 -0
  120. package/dist/instrument-rail.js +2 -0
  121. package/dist/keyboard.js +1 -1
  122. package/dist/labeled-field.js +5 -5
  123. package/dist/{math-BUU9hHID.js → math-DTpRVC0e.js} +2 -18
  124. package/dist/metric-badge.js +1 -1
  125. package/dist/metric-stack.js +1 -1
  126. package/dist/motion-core.js +70 -69
  127. package/dist/motion.js +37 -38
  128. package/dist/notification.js +1 -1
  129. package/dist/number-field.js +1 -1
  130. package/dist/popover.js +1 -1
  131. package/dist/{presets-1OhFpaIC.js → presets-BP_ALM0m.js} +14 -1
  132. package/dist/progress.js +1 -1
  133. package/dist/pulse.js +1 -1
  134. package/dist/reactive.js +1 -1
  135. package/dist/scrolling-text.js +1 -1
  136. package/dist/search.js +6 -6
  137. package/dist/select.js +1 -1
  138. package/dist/{sheet-ChSXcJpU.js → sheet-VZEtNFvO.js} +1 -1
  139. package/dist/sheet.js +1 -1
  140. package/dist/{slider-sfl8gFDD.js → slider-ClgpP7EB.js} +4 -4
  141. package/dist/slider.js +1 -1
  142. package/dist/sortable-list.js +2 -2
  143. package/dist/stacked-icons.js +6 -6
  144. package/dist/styles/animations.css +111 -15
  145. package/dist/styles/components.css +1 -1
  146. package/dist/styles/dock/layer-group.css +0 -22
  147. package/dist/styles/dock/layers.css +1 -11
  148. package/dist/styles/dock/morph.css +19 -95
  149. package/dist/styles/dock/shell.css +0 -12
  150. package/dist/styles/dock-controls.css +31 -28
  151. package/dist/styles/drawer.css +0 -2
  152. package/dist/styles/floating-panel.css +0 -2
  153. package/dist/styles/glass-refract.css +0 -2
  154. package/dist/styles/glass.css +1188 -31
  155. package/dist/styles/hover-popover.css +0 -2
  156. package/dist/styles/index.css +6 -24
  157. package/dist/styles/instrument-chassis.css +0 -4
  158. package/dist/styles/paper.css +68 -2
  159. package/dist/styles/theme.css +20 -13
  160. package/dist/styles/tokens.css +2360 -22
  161. package/dist/styles/typography.css +6 -18
  162. package/dist/styles/utilities.css +1291 -19
  163. package/dist/styles/view-transition.css +51 -0
  164. package/dist/switch.js +1 -1
  165. package/dist/tabs.js +98 -98
  166. package/dist/timeline.js +2 -2
  167. package/dist/toast.js +1 -1
  168. package/dist/toggle-group.js +1 -1
  169. package/dist/typewriter.js +1 -1
  170. package/dist/{useAnimatedNumber-DfVgP4te.js → useAnimatedNumber-Bcpy5Etf.js} +1 -1
  171. package/dist/{useConfiguratorState-BdQXh9ie.js → useConfiguratorState-DxAqksK6.js} +1 -1
  172. package/dist/useGlassRenderer-D7YGOYiM.js +69 -0
  173. package/dist/{useGlobalDark-D7R9OypB.js → useGlobalDark-D1wgEqfW.js} +21 -2
  174. package/dist/useSpecularTracking-BVRZsRHA.js +26 -0
  175. package/dist/useSpringMount-BJSHcLl3.js +113 -0
  176. package/dist/useViewTransition-DaN5Zrox.js +21 -0
  177. package/dist/vReveal-zUIQk-rJ.js +53 -0
  178. package/dist/watercolor-dot.js +2 -2
  179. package/package.json +57 -33
  180. package/src/styles/animations.css +111 -15
  181. package/src/styles/dock/layer-group.css +0 -22
  182. package/src/styles/dock/layers.css +1 -11
  183. package/src/styles/dock/morph.css +19 -95
  184. package/src/styles/dock/shell.css +0 -12
  185. package/src/styles/dock-controls.css +31 -28
  186. package/src/styles/glass.css +1188 -31
  187. package/src/styles/index.css +6 -24
  188. package/src/styles/paper.css +68 -2
  189. package/src/styles/theme.css +20 -13
  190. package/src/styles/tokens.css +2360 -22
  191. package/src/styles/typography.css +6 -18
  192. package/src/styles/utilities.css +1291 -19
  193. package/src/styles/view-transition.css +51 -0
  194. package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +0 -1
  195. package/dist/components/custom/constellation/composables/createConstellationField.d.ts +0 -35
  196. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +0 -35
  197. package/dist/components/custom/constellation/constants.d.ts +0 -36
  198. package/dist/components/custom/constellation/constellationDraw.d.ts +0 -18
  199. package/dist/components/custom/constellation/constellationInteraction.d.ts +0 -102
  200. package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +0 -15
  201. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +0 -131
  202. package/dist/components/custom/dock/constants.d.ts +0 -23
  203. package/dist/components/custom/fourier-field/presets.d.ts +0 -54
  204. package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +0 -18
  205. package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +0 -41
  206. package/dist/components/custom/goo-blob/constants.d.ts +0 -52
  207. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +0 -1
  208. package/dist/components/custom/tabs/constants.d.ts +0 -12
  209. package/dist/components/custom/underline/GlassUnderline.vue.d.ts +0 -84
  210. package/dist/components/custom/underline/index.d.ts +0 -2
  211. package/dist/components/custom/underline/types.d.ts +0 -56
  212. package/dist/composables/motion/curves.d.ts +0 -48
  213. package/dist/composables/motion/springPresets.d.ts +0 -33
  214. package/dist/composables/motion/suite.d.ts +0 -2
  215. package/dist/dockContext-bho8B1A4.js +0 -17
  216. package/dist/motion-curves.d.ts +0 -1
  217. package/dist/motion-curves.js +0 -130
  218. package/dist/springPresets-aRSm-4_k.js +0 -40
  219. package/dist/styles/glass/a11y-fallback.css +0 -245
  220. package/dist/styles/glass/ladder.css +0 -304
  221. package/dist/styles/glass/material.css +0 -238
  222. package/dist/styles/glass/progress-rail.css +0 -78
  223. package/dist/styles/glass/squircle.css +0 -66
  224. package/dist/styles/glass/surfaces.css +0 -306
  225. package/dist/styles/tokens/color-radius.css +0 -250
  226. package/dist/styles/tokens/dark-arm.css +0 -194
  227. package/dist/styles/tokens/glass.css +0 -413
  228. package/dist/styles/tokens/light-dark.css +0 -158
  229. package/dist/styles/tokens/offsets-sizing.css +0 -406
  230. package/dist/styles/tokens/property-regs.css +0 -169
  231. package/dist/styles/tokens/scale-paper.css +0 -361
  232. package/dist/styles/tokens/scheme-motion.css +0 -334
  233. package/dist/styles/tokens/shadow.css +0 -132
  234. package/dist/styles/utilities/a11y-overrides.css +0 -140
  235. package/dist/styles/utilities/animate.css +0 -26
  236. package/dist/styles/utilities/base.css +0 -365
  237. package/dist/styles/utilities/btn.css +0 -399
  238. package/dist/styles/utilities/components.css +0 -317
  239. package/dist/underline.d.ts +0 -1
  240. package/dist/underline.js +0 -85
  241. package/dist/useSpecularTracking-DFK_fhpG.js +0 -32
  242. package/dist/useSpringMount-DXUzxBjV.js +0 -108
  243. package/dist/vReveal-CqaCz_mC.js +0 -44
  244. package/src/styles/glass/a11y-fallback.css +0 -245
  245. package/src/styles/glass/ladder.css +0 -304
  246. package/src/styles/glass/material.css +0 -238
  247. package/src/styles/glass/progress-rail.css +0 -78
  248. package/src/styles/glass/squircle.css +0 -66
  249. package/src/styles/glass/surfaces.css +0 -306
  250. package/src/styles/tokens/color-radius.css +0 -250
  251. package/src/styles/tokens/dark-arm.css +0 -194
  252. package/src/styles/tokens/glass.css +0 -413
  253. package/src/styles/tokens/light-dark.css +0 -158
  254. package/src/styles/tokens/offsets-sizing.css +0 -406
  255. package/src/styles/tokens/property-regs.css +0 -169
  256. package/src/styles/tokens/scale-paper.css +0 -361
  257. package/src/styles/tokens/scheme-motion.css +0 -334
  258. package/src/styles/tokens/shadow.css +0 -132
  259. package/src/styles/utilities/a11y-overrides.css +0 -140
  260. package/src/styles/utilities/animate.css +0 -26
  261. package/src/styles/utilities/base.css +0 -365
  262. package/src/styles/utilities/btn.css +0 -399
  263. package/src/styles/utilities/components.css +0 -317
  264. /package/dist/{CollapsibleContent-Drow5WkV.js → CollapsibleContent-CP9qF1v4.js} +0 -0
  265. /package/dist/{DialogFooter-DufLHi0y.js → DialogFooter-Gprw8H_A.js} +0 -0
  266. /package/dist/{IconTooltip-BrQ5p181.js → IconTooltip-Cus0fvK0.js} +0 -0
  267. /package/dist/{Input-B-F818RU.js → Input-xuDwALQR.js} +0 -0
  268. /package/dist/{_plugin-vue_export-helper-DWghtRt7.js → _plugin-vue_export-helper-ok8pgSl5.js} +0 -0
  269. /package/dist/{compile-Ce_V55zi.js → compile-BOXjLUxu.js} +0 -0
  270. /package/dist/{constants-C8NMonuo.js → constants-yKeKnE84.js} +0 -0
  271. /package/dist/{prng-CjVgzjQT.js → prng-D27-B3tK.js} +0 -0
  272. /package/dist/{resolveCanvasColor-CRvVzOvP.js → resolveCanvasColor-BBiYfp8g.js} +0 -0
  273. /package/dist/{useCanvas2D-CSeH8h16.js → useCanvas2D-ClrQuZtp.js} +0 -0
  274. /package/dist/{useIntersectionPause-DAdVPVp4.js → useIntersectionPause-Cck5Uxk8.js} +0 -0
  275. /package/dist/{useInterval-D3USn0yc.js → useInterval-Dsmqwi03.js} +0 -0
  276. /package/dist/{useKeyboardShortcuts-i8tHd5WO.js → useKeyboardShortcuts-CyIYrndH.js} +0 -0
  277. /package/dist/{useScrollProgress-CcgmgMQt.js → useScrollProgress-CffFGLa5.js} +0 -0
  278. /package/dist/{useSortable-DnyGXKKY.js → useSortable-C8ReQ50P.js} +0 -0
  279. /package/dist/{useTextHighlight-B3b10W6r.js → useTextHighlight-CWEi25hf.js} +0 -0
@@ -1,158 +0,0 @@
1
- /* tokens/light-dark.css
2
- §-1a coarse-pointer comfort + §-1b light-dark() color architecture — the @media (pointer:coarse) / @media (min-resolution) / @supports (light-dark()) overrides. After the master token partials (overrides them).
3
- Carved from the tokens.css cascade root; @import-ed by tokens.css in
4
- cascade order. Same :root cascade context as its siblings. */
5
-
6
- /* AX.W51 D18 — the GLOBAL coarse-pointer comfort amplification. The WHOLE library
7
- — buttons, inputs, badges, toggles, the dock (a specialization that reads
8
- `--ui-scale`) — grows ~1.5× on touch from this ONE place, the W45 dock-only 1.5×
9
- lifted to the master scalar so the touch scale is CONSISTENT across the library
10
- (at HEAD the dock grew but the buttons did not — the three-scale split). The
11
- WCAG-2.5.5 44px touch floor is enforced HERE too: `--control-floor` lifts to
12
- `--touch-target`, so every scaled control-height `max(scaled, floor)` clamps at
13
- ≥ 44px regardless of the scalar (a consumer dialing `--ui-scale` below 1 still
14
- cannot drop a control under the target). Fine-pointer is byte-identical
15
- (`--ui-scale` stays 1). `--ui-coarse-scale` is the public default a consumer
16
- retunes. */
17
- @media (pointer: coarse) {
18
- :root {
19
- --ui-scale: var(--ui-coarse-scale, 1.5);
20
- --control-floor: var(--touch-target, 2.75rem);
21
- }
22
- }
23
-
24
- /* AV.W7 F2 — high-resolution overlay-blur restore. On a 2dppx+ display the
25
- richer 24px overlay wash is amortised by the extra device pixels (the blur
26
- samples a denser backing store), so the design ceiling is restored where it
27
- is affordable. Standard-density displays keep the 15px budget radius set in
28
- §-1a `:root`. Token-only override — every overlay surface that reads
29
- `--glass-blur-overlay-radius` inherits the restored value automatically. */
30
- @media (min-resolution: 2dppx) {
31
- :root {
32
- --glass-blur-overlay-radius: 24px;
33
- }
34
- }
35
-
36
- /* ═══════════════════════════════════════════════
37
- §-1b LIGHT-DARK() COLOR ARCHITECTURE (AQ.W2 §2)
38
-
39
- Every PAIRED color token (a token whose `:root` and `.dark` values are
40
- BOTH a <color> and differ) folds onto one `light-dark(light, dark)`
41
- declaration, keyed off the element's `color-scheme` (§-1). This is the
42
- single-source-of-truth collapse of the `.dark` mirror AND the dynamism
43
- win: an unregistered custom property holding a `light-dark()` expression
44
- re-resolves under a descendant `color-scheme` override (a `.dark`
45
- code-block embedded in a light page, or vice-versa).
46
-
47
- DISCIPLINE (§2b — BINDING): these tokens MUST stay UNREGISTERED (no
48
- `@property … syntax:"<color>"`). A registered <color> would resolve ONCE
49
- at the declaring element and inherit the RESOLVED color, freezing the
50
- descendant re-resolution. glass-ui's only `@property` registrations (§18)
51
- are non-color (percentage/length), so the discipline holds — W2 adds NO
52
- color `@property`.
53
-
54
- The semantic `var()`-aliases (`--background`, `--muted`, `--border`,
55
- `--secondary`, `--accent`, `--card-foreground`, …) do NOT appear here:
56
- they point at the SAME source name in both modes and auto-track once the
57
- `--neutral-*` ladder + `--foreground` resolve via `light-dark()`. Their
58
- redundant `.dark` re-declarations DELETE below.
59
-
60
- FALLBACK (§2c): this whole block is `@supports`-gated, so an engine
61
- WITHOUT `light-dark()` skips it and the retained `.dark` class block (the
62
- SOLE fallback floor) drives dark exactly as at HEAD. `light-dark()` is the
63
- enhancement OVER the class — not a parallel alias. Baseline Newly
64
- Available; the fallback floor is the pre-existing class block (net-zero
65
- new fallback LOC).
66
- ═══════════════════════════════════════════════ */
67
- @supports (color: light-dark(white, black)) {
68
- :root {
69
- /* Neutral ladder — the source the var()-aliases track */
70
- --neutral-0: light-dark(hsl(48 12% 98%), hsl(24 8% 6%));
71
- --neutral-1: light-dark(hsl(48 10% 95%), hsl(24 6% 11%));
72
- --neutral-2: light-dark(hsl(48 9% 90%), hsl(24 5% 16%));
73
- --neutral-3: light-dark(hsl(48 8% 82%), hsl(24 5% 22%));
74
- --neutral-4: light-dark(hsl(48 7% 70%), hsl(24 5% 34%));
75
- --neutral-5: light-dark(hsl(48 6% 40%), hsl(48 5% 62%));
76
- --neutral-6: light-dark(hsl(48 7% 30%), hsl(48 6% 72%));
77
-
78
- /* Core surfaces + ink */
79
- --foreground: light-dark(hsl(24 10% 10%), hsl(48 10% 90%));
80
- --card: light-dark(var(--neutral-0), hsl(24 8% 10%));
81
- --popover: light-dark(var(--neutral-0), hsl(24 8% 10%));
82
- --surface-public-data-panel: light-dark(hsl(44 16% 96%), hsl(36 9% 12%));
83
-
84
- --primary: light-dark(hsl(24 10% 10%), hsl(48 10% 90%));
85
- --primary-foreground: light-dark(var(--neutral-0), hsl(24 10% 10%));
86
- /* AX.W44 — dark-arm lift. The stock shadcn dark `hsl(0 62.8% 30.6%)`
87
- (L≈30.6) was a saturated-PLATE value used AS INK over `--card` by the
88
- Alert destructive variant — 1.75:1 over card (illegible) / 1.91:1 vs the
89
- page. Lifted to `hsl(0 80% 60%)`: 4.60:1 as text over `--card` (clears the
90
- 4.5 body floor) AND 5.03:1 as a plate vs the dark page (clears the 3.0
91
- graphic floor). The light arm is UNCHANGED (already 4.70:1). Lockstep with
92
- the `.dark` fallback floor below (§2c). */
93
- --destructive: light-dark(hsl(0 72% 50%), hsl(0 80% 60%));
94
- --destructive-foreground: light-dark(var(--neutral-0), hsl(48 10% 90%));
95
- --ring: light-dark(hsl(24 10% 10%), hsl(48 10% 70%));
96
- --shadow: light-dark(hsl(24 10% 10%), hsl(0 0% 5%));
97
-
98
- /* §4 native-control accent — the per-mode arms (dark reads the
99
- mid-tone ring for checkmark-glyph contrast headroom, NOT the
100
- near-white dark primary). Joins the light-dark() collapse; still
101
- re-specified as `accent-color` inside `.dark` per §2b. */
102
- --accent-color: light-dark(var(--primary), var(--ring));
103
-
104
- /* Section palette — jewel tones brightened L for dark (oklch pairs;
105
- AV.W16 TW2 — hue preserved, L evened) */
106
- --section-color-0: light-dark(oklch(0.552 0.192 359.8), oklch(0.721 0.145 354.0));
107
- --section-color-1: light-dark(oklch(0.502 0.165 305.9), oklch(0.733 0.113 308.2));
108
- --section-color-2: light-dark(oklch(0.484 0.163 265.5), oklch(0.718 0.107 268.4));
109
- --section-color-3: light-dark(oklch(0.542 0.089 222.8), oklch(0.767 0.091 219.9));
110
- --section-color-4: light-dark(oklch(0.551 0.088 171.1), oklch(0.776 0.105 172.6));
111
- --section-color-5: light-dark(oklch(0.623 0.124 69.6), oklch(0.813 0.109 78.2));
112
- --section-color-6: light-dark(oklch(0.579 0.201 30.4), oklch(0.693 0.151 28.1));
113
- --section-color-7: light-dark(oklch(0.532 0.180 317.5), oklch(0.739 0.134 318.1));
114
- --section-color-8: light-dark(oklch(0.520 0.176 8.4), oklch(0.709 0.142 2.3));
115
- --section-color-9: light-dark(oklch(0.492 0.038 239.6), oklch(0.763 0.032 239.0));
116
- --section-color-10: light-dark(oklch(0.556 0.103 128.8), oklch(0.794 0.116 127.9));
117
- --section-color-11: light-dark(oklch(0.601 0.092 208.0), oklch(0.805 0.095 206.7));
118
- --section-color-12: light-dark(oklch(0.513 0.163 291.9), oklch(0.719 0.115 295.6));
119
-
120
- --accent-pink: light-dark(oklch(0.613 0.197 353.8), oklch(0.683 0.131 354.7));
121
- --section-heading: light-dark(oklch(0.545 0.189 352.8), oklch(0.711 0.123 349.3));
122
- --accent-red: light-dark(oklch(0.574 0.216 27.5), oklch(0.644 0.165 22.9));
123
-
124
- /* Viz basis (amber/green stay var()-aliases → auto-track) */
125
- --viz-fourier: light-dark(oklch(0.579 0.201 30.4), oklch(0.693 0.151 28.1));
126
- --viz-chebyshev: light-dark(oklch(0.484 0.163 265.5), oklch(0.718 0.107 268.4));
127
- --viz-legendre: light-dark(oklch(0.532 0.180 317.5), oklch(0.739 0.134 318.1));
128
-
129
- /* WCAG companion chart labels */
130
- --chart-ping-label: light-dark(oklch(0.40 0.18 230), oklch(0.85 0.12 230));
131
- --chart-download-label: light-dark(oklch(0.40 0.20 22), oklch(0.85 0.14 22));
132
- --chart-upload-label: light-dark(oklch(0.40 0.16 55), oklch(0.85 0.12 55));
133
- --chart-jitter-label: light-dark(oklch(0.40 0.20 305), oklch(0.85 0.14 305));
134
-
135
- /* Semantic UI accents */
136
- --tier-featured: light-dark(oklch(0.841 0.173 84.2), oklch(0.867 0.165 88.7));
137
- --tier-saved: light-dark(oklch(0.676 0.176 252.3), oklch(0.748 0.135 250.1));
138
- --like: light-dark(oklch(0.633 0.200 24.9), oklch(0.690 0.162 22.2));
139
- --success: light-dark(oklch(0.720 0.192 149.5), oklch(0.805 0.186 151.6));
140
- --warning: light-dark(oklch(0.770 0.165 70.6), oklch(0.809 0.150 76.6));
141
- --info: light-dark(oklch(0.626 0.186 259.6), oklch(0.713 0.138 259.5));
142
- --delete: light-dark(oklch(0.597 0.198 25.5), oklch(0.644 0.170 23.1));
143
-
144
- /* Semantic foregrounds (warning-foreground is identical both modes
145
- → stays a single light-mode declaration, no light-dark() needed) */
146
- --success-foreground: light-dark(var(--neutral-0), hsl(48 10% 96%));
147
- --info-foreground: light-dark(var(--neutral-0), hsl(48 10% 96%));
148
-
149
- /* Cartoon-shadow color primitives (§2d — plain colors, convert) */
150
- --shadow-cartoon-color: light-dark(rgb(0 0 0 / 0.12), rgb(255 255 255 / 0.07));
151
- --shadow-cartoon-color-soft: light-dark(rgb(0 0 0 / 0.06), rgb(255 255 255 / 0.03));
152
-
153
- /* Gold family */
154
- --gold: light-dark(oklch(0.751 0.147 84.2), oklch(0.784 0.143 86.0));
155
- --gold-light: light-dark(oklch(0.890 0.183 96.1), oklch(0.898 0.182 97.4));
156
- --gold-dark: light-dark(oklch(0.599 0.132 64.2), oklch(0.678 0.150 63.8));
157
- }
158
- }
@@ -1,406 +0,0 @@
1
- /* tokens/offsets-sizing.css
2
- §9 animation offsets · §10 sizing (control heights, dropdown, carousel, stack-overlap, touch-target floor).
3
- Carved from the tokens.css cascade root; @import-ed by tokens.css in
4
- cascade order. Same :root cascade context as its siblings. */
5
- :root {
6
- /* ═══════════════════════════════════════════════
7
- §9 ANIMATION OFFSETS
8
- ═══════════════════════════════════════════════ */
9
- /* Hover lift offsets */
10
- --lift-sm: -1px;
11
- --lift-md: -2px;
12
- --lift-lg: -4px;
13
-
14
- /* Layout tokens */
15
- --mask-fade-width: 1rem;
16
- /* J.W3.C — dock content overflow caps. When dock content exceeds
17
- these dimensions, the inner `.dock-layers` (horizontal) /
18
- `.glass-dock.vertical` (rail) container scrolls with a
19
- `.scroll-fade-{x,y}` mask-fade so the boundary feathers rather
20
- than cliffs. Defaults clamp to 80vw / 80vh capped at sensible
21
- desktop widths; consumers override per-dock by setting either
22
- token directly on a `.glass-dock` instance. User findings 1 + 5a. */
23
- /* AX.W04 — `--dock-max-inline-size` is the canonical inline cap EVERY overflow
24
- strategy reads: `overflow="scroll"` scrolls past it, and `overflow="wrap"`
25
- wraps to N rows on the over-cap crossing (the dock shrink-wraps to content,
26
- `max-inline-size` caps that intrinsic width at this token). The prior
27
- `--dock-overflow-bp: 640px` viewport-breakpoint token (the magic-640
28
- snap-back) is DELETED — the wrap is content-driven, not viewport-coupled, so
29
- there is no breakpoint threshold to name. */
30
- --dock-max-inline-size: min(80vw, 64rem);
31
- --dock-max-block-size: min(80vh, 48rem);
32
-
33
- /* AB.W1.T1 — chassis max-block-size guardrail.
34
- Maximum block size a centred consumer-app card may consume while
35
- preserving the inline dock footprint. The recipe subtracts the
36
- consumer-owned `--dock-footer-space` (dock height + dock inset +
37
- card-edge inset) and `--page-padding-top` from the dynamic viewport,
38
- then takes one further rem of breathing room so the card never
39
- butts the dock — the user mandate is `≥ 1rem visible gap above
40
- dock`. Both consumer tokens carry safe fallbacks for callers that
41
- have not declared them.
42
-
43
- Consumers should shrink internal regions (meter, readout, timeline)
44
- before falling back to scroll. This token is a guardrail against
45
- chassis overflow, NOT a license to make the card scroll as the
46
- default solution; clamp-first / no-scroll-first is the canon.
47
- See DESIGN.md `## Chassis sizing — dock-adjusted viewport`. */
48
- --chassis-max-block-size: calc(
49
- 100dvh
50
- - var(--dock-footer-space, 5.75rem)
51
- - var(--page-padding-top, 0rem)
52
- - 1rem
53
- );
54
- /* R0G-2 (AO.W3/W4) — chassis mobile dial-reserve canon. instrument-
55
- chassis.css's mobile breakpoint reserves the dial's final box from
56
- frame 0 via these vars (with the same values as inline fallbacks, the
57
- safety net). Token-first home so the vars resolve canonically. */
58
- --instrument-dial-min-height-mobile: 24rem;
59
- --instrument-dial-meter-reserve-mobile: minmax(0, 1fr);
60
-
61
- --max-width-input: 24rem;
62
- --input-min-width-sm: 5rem;
63
- --min-width-input-sm: var(--input-min-width-sm);
64
- /* AU.W8b.4 — canonical popover width (Combobox list + anchor). Lifts the
65
- `w-[200px]` arbitrary-value wrap to the `w-popover` @theme utility. */
66
- --popover-width: 200px;
67
- --chart-height-compact: 15rem;
68
- --chart-height-default: 22.5rem;
69
- --chart-height-large: 25rem;
70
- --chart-margin: 1.25rem;
71
- --paper-texture-size: 200px 200px;
72
-
73
- /* Border opacity scale */
74
- --border-opacity-light: 0.15;
75
- --border-opacity-medium: 0.25;
76
- --border-opacity-strong: 0.6;
77
-
78
- /* ═══════════════════════════════════════════════
79
- §10 SIZING
80
- ═══════════════════════════════════════════════ */
81
- /* ── The ONE comfortable-sizing scale doctrine (AX.W51 D18) ──────────────
82
- `--ui-scale` is the MASTER comfortable-sizing scalar — ONE unitless knob
83
- (registered @property <number>, inherits:true, default the identity 1)
84
- every interactive-control magnitude derives through `calc(<base> *
85
- var(--ui-scale))`, so a single override grows control HEIGHT + PADDING +
86
- GAP + FONT-SIZE + GLYPH in LOCKSTEP, proportion preserved, no per-component
87
- hack. The cohorts below (`--control-h-*` heights, `--control-text*` control
88
- fonts, `--ui-glyph*` glyphs) are its reading surfaces; the CVA bases + the
89
- `.btn-pill`/`.input-pill` pills consume them.
90
-
91
- ONE scale system, not three. The dock (`--dock-scale`) and the dropdown
92
- family (`--dropdown-text`, W50) are SPECIALIZATIONS that read this axis:
93
- `--dock-scale: calc(var(--ui-scale) * var(--dock-local-scale, 1))` — the
94
- dock multiplies ON TOP of the global comfort axis (its existing geometry
95
- `calc` cascade inherits the global axis for free, zero edit). A consumer
96
- re-tints the whole library's comfort from ONE `:root { --ui-scale: … }`
97
- override (or a scoped region — a dense data-table sets it lower) — the
98
- token-first axis.
99
-
100
- EXCLUDED — the φ-DISPLAY ladder (`--type-display-*` / `--type-title` /
101
- `--type-heading` / `--type-subheading`): a hero/title is a TYPOGRAPHIC
102
- identity, NOT a touch target, so it does NOT grow on the comfort/coarse
103
- axis. Only interactive-CONTROL text rides `--ui-scale`. Containers (card /
104
- panel radii + paddings) are separate `--radius-*` / `--space-*` axes.
105
-
106
- The desktop default is the IDENTITY (1) — byte-exact preservation, no
107
- reflow of shipped consumers. The comfort GROWTH lives at the coarse-pointer
108
- default (`--ui-coarse-scale`, §below) + the consumer override. The
109
- WCAG-2.5.5 44px touch floor survives as a `max(…, --control-floor)` clamp
110
- inside the scaled control-size (the coarse block lifts `--control-floor` to
111
- `--touch-target`, so a sub-1 scale cannot drop a control under the target).
112
- Coordinates with W54's `--glass-level` + W55's `--glass-tint-*` — SEPARATE
113
- axes (size vs material vs legibility); a control is comfortably-sized AND
114
- glass AND legible, three orthogonal knobs. */
115
- --ui-scale: 1;
116
- /* The global coarse-pointer comfort default — the WHOLE library grows ~1.5×
117
- on touch from ONE place (the @media (pointer: coarse) block at §below lifts
118
- :root --ui-scale to this). The dock's prior parallel 1.5× becomes the global
119
- default it now shares. Public library-default identity — a consumer sets
120
- 1.3 / 1.75 on :root or a scope. */
121
- --ui-coarse-scale: 1.5;
122
- /* The control-height cohort — the h-7/h-9/h-10/h-11 register (28/36/40/44px)
123
- the CVA size rungs encode, each scaled by the master axis. The CVA rungs
124
- read these via `h-[var(--control-h-*)]` instead of the raw `h-N` literal.
125
- `--control-floor` is the WCAG-2.5.5 clamp seam (0 at desktop, lifted to
126
- --touch-target under coarse-pointer); each height is `max(scaled, floor)`. */
127
- --control-floor: 0px;
128
- --control-h-xs: max(calc(1.75rem * var(--ui-scale)), var(--control-floor));
129
- --control-h-sm: max(calc(2.25rem * var(--ui-scale)), var(--control-floor));
130
- --control-h-md: max(calc(2.5rem * var(--ui-scale)), var(--control-floor));
131
- --control-h-lg: max(calc(2.75rem * var(--ui-scale)), var(--control-floor));
132
- /* The control-FONT register (RED 3 — the user's "font too small"). A comfort
133
- multiplier BETWEEN the static φ-ladder rung and the painted control font,
134
- so interactive-control text grows on the comfort axis while the φ-DISPLAY
135
- ladder stays a pure typographic scale (display headings do NOT grow on
136
- touch). `--control-text` is the workhorse (the `text-sm` register the
137
- buttons/inputs/triggers carried); `--control-text-sm` is the quieter rung
138
- (the `text-xs` badge/caption register). W50's `--dropdown-text` IS the
139
- picker-family specialization of this register.
140
-
141
- AY.W-SCALE1 — the no-double-vw reconcile: the desktop-fluid viewport base
142
- lives ONCE in `--type-small` / `--type-caption` (typography.css §scale — a
143
- gentle `clamp(…vw…)` so the control font grows on a wide display); the
144
- `--ui-scale` comfort scalar multiplies that FLUID base exactly ONCE HERE. The
145
- vw term is applied once (in the rung), the comfort factor once (here) — under
146
- the coarse 1.5× the font grows by the comfort factor ONCE, NOT vw×1.5
147
- over-scaled. Do NOT inline a second clamp() here, and do NOT multiply the rung
148
- by --ui-scale at the rung. */
149
- --control-text: calc(var(--type-small) * var(--ui-scale));
150
- --control-text-sm: calc(var(--type-caption) * var(--ui-scale));
151
- /* The control-GLYPH cohort (RED 4 — the glyph grows WITH the box). The
152
- 1rem/0.875rem control-glyph register the `size-4`/`size-3.5` literals
153
- encode; the un-sized-<svg> CVA rule reads these via
154
- `size-[var(--ui-glyph)]`, KEEPING the `:not([class*=size-])` host-sized-icon
155
- escape intact (an explicit `size-9` still wins). */
156
- --ui-glyph: calc(1rem * var(--ui-scale));
157
- --ui-glyph-sm: calc(0.875rem * var(--ui-scale));
158
-
159
- /* ── The picker-family type-scale (AX.W50 D17) ───────────────────────────
160
- ONE governed two-rung scale the WHOLE shadcn picker family (Select /
161
- DropdownMenu / Combobox / ContextMenu / Command / MultiSelect) reads, so the
162
- family paints at ONE uniform scale instead of the scattered raw
163
- `text-sm`/`text-xs` Tailwind-literal lottery (item rows at `text-sm`,
164
- headings/shortcuts at `text-xs`, the two filter inputs at mismatched heights).
165
- A consumer re-tints the whole family from ONE override.
166
-
167
- It is a SPECIALIZATION of W51's control-font register (one scale system, not
168
- three): `--dropdown-text` reads `--control-text` (the comfort-scaled `text-sm`)
169
- and `--dropdown-text-secondary` reads `--control-text-sm` (the comfort-scaled
170
- `text-xs`), so the picker family rides the SAME `--ui-scale` comfort axis as
171
- every other control — a `--ui-scale` bump grows the dropdowns too. A consumer
172
- wanting the family LARGER than the rest overrides `--dropdown-text` directly
173
- (e.g. `var(--type-body)`); the override re-resolves every family surface.
174
-
175
- Scale-contract (which surface reads which rung):
176
- • PRIMARY (`--dropdown-text`) → item rows, triggers, filter inputs, empties.
177
- • SECONDARY (`--dropdown-text-secondary`) → section labels, group-headings,
178
- keyboard shortcuts (the quieter-than-item caption register; resolves the
179
- witness-2 contradiction — the Select/DropdownMenu/ContextMenu labels
180
- collapse DOWN to the secondary rung to match the Combobox/Command headings,
181
- ONE rung for the section-label role family-wide).
182
- `--dropdown-input-height` unifies the two filter-input heights (Combobox was
183
- h-10, Command was h-11) onto ONE register — a specialization of W51's
184
- `--control-h-md` so the picker input scales on the comfort axis with the font. */
185
- --dropdown-text: var(--control-text);
186
- --dropdown-text-secondary: var(--control-text-sm);
187
- --dropdown-input-height: var(--control-h-md);
188
-
189
- --size-icon-btn: 2.5rem;
190
- --icon-xs: 0.75rem;
191
- --icon-sm: 0.875rem;
192
- --icon-md: 1rem;
193
- --icon-lg: 1.25rem;
194
- --icon-xl: 1.5rem;
195
- /* V.W2 T9 — 32px rung; spinner glyphs (Loader2) + dense table-row buttons.
196
- Naming follows the radius ladder + Tailwind convention (2xl > xl > xxl) —
197
- see B6 §2.4 for the naming rationale. */
198
- --icon-2xl: 2rem;
199
- /* V.W2 T10 — 40px rung; empty-state hero glyph (DashboardMap MapIcon).
200
- AI.W5-ζ — rebound from `2.5rem` literal to `var(--size-icon-btn)` so
201
- the alignment is contractual single-source-of-truth rather than the
202
- coincidental numerical match noted prior. */
203
- --icon-3xl: var(--size-icon-btn);
204
- /* V.W2 T11 — 56px rung; FlowSelector school/home survey-flow picker.
205
- Largest rung in the icon ladder; reserved for hero-class glyphs. */
206
- --icon-hero: 3.5rem;
207
-
208
- /* Golden-ratio spacing rungs — φ² and φ³. Preemptive substrate; W4 hero
209
- chassis + W5 StoryChassis migration land the consumers. R3 §A row 1.
210
- The 0..4 rungs are not currently named (consumers reach via
211
- Tailwind's spacing scale); 5/6 land here because their values fall
212
- outside the default ladder and the audacious chassis pattern wants
213
- a named handle. */
214
- --space-phi-5: 2.618rem; /* φ² */
215
- --space-phi-6: 4.236rem; /* φ³ */
216
-
217
- /* Dock geometry — consumers may override locally */
218
- --dock-h: calc(var(--size-icon-btn) + 0.75rem + 3px);
219
- --dock-margin: 0.5rem;
220
- --dock-menubar-reserve: 4rem;
221
-
222
- /* AX.W45 — the dock geometry multiplier. `--dock-scale` threads the WHOLE
223
- `.glass-dock[data-density]` geometry cascade (box, padding, gap, tab,
224
- tile-min, glyph) via `calc(<base> * --dock-scale)`, so a single knob grows
225
- every dock axis in lockstep. The WCAG 2.5.5 44px floor survives as a `max(…,
226
- 44px)` clamp INSIDE the scaled control-size.
227
-
228
- AX.W51 RECONCILE (D18) — `--dock-scale` is RE-HOMED as a SPECIALIZATION of
229
- the global `--ui-scale` comfort axis: `calc(var(--ui-scale) *
230
- var(--dock-local-scale, 1))`. The dock now MULTIPLIES on top of the global
231
- comfort scalar — its whole existing geometry `calc` chain inherits the global
232
- axis for FREE (zero edit to the density cascade; the reconcile is at this ONE
233
- definition line). At the desktop identity (`--ui-scale: 1`,
234
- `--dock-local-scale: 1`) the dock is byte-identical to HEAD. On coarse-pointer
235
- the GLOBAL `:root { --ui-scale: var(--ui-coarse-scale, 1.5) }` block grows the
236
- dock WITH the rest of the library — ONE consistent touch scale, not a parallel
237
- dock-only 1.5×. `--dock-local-scale` is the dock-local EXTRA multiplier
238
- (default 1): a consumer who wants the dock LARGER than the global comfort sets
239
- it, and the coarse block lifts it to `--dock-mobile-scale` (default 1, the
240
- stack-extra) so the dock can grow an extra notch ON TOP of the global coarse
241
- default. `--dock-mobile-scale` is the public library-default identity
242
- (presets-in-consumers: a consumer sets 1.3/1.75 on `:root` or a dock scope). */
243
- --dock-scale: calc(var(--ui-scale) * var(--dock-local-scale, 1));
244
- --dock-local-scale: 1;
245
- --dock-mobile-scale: 1;
246
- /* Library glyph ownership — `.dock-icon-button > svg` reads this so the dock
247
- icon glyph scales WITH the box (mirroring `.dark-mode-toggle-button > svg`).
248
- A consumer-passed explicit lucide size class still WINS (utility layer >
249
- component layer); this is a DEFAULT, not a ceiling. */
250
- --dock-icon-glyph: calc(1.25rem * var(--dock-scale));
251
-
252
- /* AX.W45-TUNE Q1 — the COLLAPSED-pill floor tokens. The collapsed summary
253
- used to fall to `--dock-layer-height` (the FULL control height, ~2.5rem) for
254
- its `min-width` with NO block floor, so the shrunken pill read as an
255
- un-collapsed control row, not a tight proportioned squircle. These two floor
256
- tokens (referenced by dock.css's `.collapsed .dock-layer--summary` min-size +
257
- the `--dock-pad-collapsed` morph floor) mint a TIGHT proportioned pill: the
258
- summary min-size is ≈70% of the full control height (a proportioned dot, not a
259
- full-row stub — the ratified default), and the collapsed padding is a step
260
- BELOW the expanded `--dock-padding-block` so the collapsed chrome hugs the
261
- glyph. The summary carries a SYMMETRIC `min-block-size` (dock.css) keyed to the
262
- same token so the pill floors on BOTH axes — a squircle, not a stub. Consumers
263
- retune the pill geometry per-instance via these two handles. */
264
- /* AY.W-DOCK-NAV B4 — the collapsed pill is a PERFECT CIRCLE (the user's
265
- "circle, not oval" bar). The diameter is the collapsed-summary min-size on
266
- BOTH axes; the morph.css `.collapsed .dock-layer--summary` rule LIFTS the
267
- `.dock-layer` height-lock (`height: var(--dock-layer-height)`) for the
268
- collapsed summary so the pane is square at this token (the prior oval —
269
- 38×50, aspect 0.76 — was the locked 40px height against a 28px min-width).
270
- The 0.85× value is a TIGHT proportioned circle a step below the full control
271
- (so the collapsed dot reads smaller than an expanded control row) while
272
- staying large enough that the centred glyph is not cramped. A consumer
273
- retunes the circle diameter via this one handle. */
274
- --dock-collapsed-summary-min-size: calc(var(--dock-layer-height, 2.5rem) * 0.85);
275
- /* AX.W61 — the collapsed padding now threads the ONE `--dock-scale` coarse-pointer
276
- multiplier DIRECTLY (at HEAD it was a flat 0.25rem off the scale, so the
277
- collapsed pad alone stayed desktop-sized at the 1.5x mobile scale while the
278
- box/glyph/min-size grew — a desync the morph then interpolated FROM). The
279
- summary min-size already threads `--dock-scale` transitively through
280
- `--dock-layer-height` (itself `calc(* --dock-scale)` at every density rung); this
281
- lands the collapsed pad on the same thread so the whole collapsed pill scales
282
- coherently on touch. The 0.25rem base stays the ratified tight floor. */
283
- --dock-collapsed-padding: calc(0.25rem * var(--dock-scale));
284
-
285
- /* AX.W45-TUNE Q3/C3 + C5 — the dock-control family reads a real GLASS register
286
- on hover/active, NOT a same-hue `--card` mix at an alpha adjacent to the dock's
287
- own `--glass-bg-dock` substrate (a sub-1%-ΔL no-op — the loud Q3 tell: "nothing
288
- on hover, something on click"). Both legs now point at NAMED glass tiers a
289
- measurable step ABOVE the dock's 42%-opacity substrate:
290
- • hover → `--glass-bg-resting` (the 65% glass plate) — the control surface
291
- WAKES as a brighter glass tier on hover, reading the blurred dock
292
- substrate through it. The +ΔL above `--glass-bg-dock` is perceptible
293
- BEFORE click; the specular gleam + scale ride alongside (one register).
294
- • active → `--glass-bg-floating` (the 80% glass plate) — a tier ABOVE hover,
295
- the keyframes-dock "selected element reads as glass" model the user
296
- named (`pass-3:13`): the selected tile is a glass tier that shows the
297
- substrate through it, NOT the flat `--surface-tint-12` ink wash. The
298
- active ≠ hover register is the glass-tier step, not an alpha nudge.
299
- This is a REGISTER change (substrate→glass-tier), not a magnitude knob. The
300
- per-control `--dock-icon-hover-bg` override still wins if a consumer set it. */
301
- --dock-control-hover-bg: var(--glass-bg-resting);
302
- --dock-control-active-bg: var(--glass-bg-floating);
303
-
304
- /* AX.W45-TUNE C4/C5 — the small-tile specular override. The 40px dock-control
305
- tile is a fraction of a card's plate, so the global `--glass-specular-size`
306
- (36% of the plate) blooms a disproportionate disc on a hover/active dock tile
307
- (the I.W6 finding). The dock controls scope a TIGHTER radius (22%) so the gleam
308
- wakes as a restrained EDGE-catch on the small tile, not a tile-filling bloom —
309
- the right resolution of I.W6 (sized-down on the small surface), not turning the
310
- specular off everywhere. Read by the dock-control `::before` recipe (glass.css)
311
- via the family-scoped override below; the global card/panel size is untouched. */
312
- --dock-control-specular-size: 22%;
313
-
314
- /* AX.W45 DK8 — the layer-switcher rail surface ladder. The rail
315
- (`.dock-layer-rail` inside a `<DockLayerGroup>`) gets its own quiet plate +
316
- a tunable hover/active affordance, replacing the raw `--primary 15%` /
317
- `--accent 40%` mixes the indicator/tab used against an absent plate. */
318
- --dock-layer-rail-bg: var(--surface-tint-8);
319
- --dock-layer-rail-hover: color-mix(in srgb, var(--accent) 40%, transparent);
320
- --dock-layer-rail-active: color-mix(in srgb, var(--primary) 15%, transparent);
321
- /* AY.W-DOCK-NAV B6 — the switcher-rail TAB is a COMPACT square, distinct from
322
- the 40px dock CONTROL. The prior fallback chain (`var(--dock-control-size,
323
- 1.75rem)`) resolved to the full 40px control, so a 3-tab column rail stood
324
- ~140px tall — a giant pill of dead space. A dedicated tighter tab size
325
- (1.75rem = 28px, density-scaled) keeps the rail a compact icon column the
326
- indicator travels cleanly, and the dock grows only as tall as the rail needs.
327
- Consumers retune the rail-tab size via this one handle. */
328
- --dock-layer-tab-size: calc(1.75rem * var(--dock-scale));
329
-
330
- /* Dock active-state ladder (O.W6 Lane B)
331
- Token-overridable active paint for `.dock-icon-button`. Promoted
332
- from hardcoded `background: var(--muted); color: var(--foreground)`
333
- per bbnf-buddy O11/c R1: 7 `:deep()` escapes at `ToolsLayer.vue`
334
- redefine bg/color/scale/border/shadow on the active variant; the
335
- ladder absorbs ~3 of 7 at a stroke. Defaults preserve the prior
336
- visual contract (no transform, no border, no shadow) — overrides
337
- take effect per-instance via `:root` or a parent scope, e.g.
338
- `.tools-layer { --dock-active-scale: 1.2; --dock-active-bg: …; }`.
339
- ≥ 2-consumer coverage: bbnf-buddy ToolsLayer (override consumer) +
340
- speedtest dock (default consumer).
341
-
342
- AX.W45 DK2 — re-pointed off the opaque `--muted` plate onto the glass-
343
- correct `--dock-control-active-bg` (a translucent tint a ladder step above
344
- hover), so the icon-button active no longer stamps a solid cream rectangle
345
- over the dock glass. The O.W6 active-ladder override consumers still retint
346
- per-instance; only the DEFAULT moved to glass-correct. */
347
- --dock-active-bg: var(--dock-control-active-bg);
348
- --dock-active-color: var(--foreground);
349
- --dock-active-scale: 1;
350
- --dock-active-border: none;
351
- --dock-active-shadow: none;
352
-
353
- /* Q.W3 Lane G (Q-cos-13) — the O.W6 Lane D `--icon-tooltip-hit-area`
354
- token retired here. IconTooltip no longer owns a wrap-span; the
355
- slotted child carries its own WCAG 2.5.5 hit-area (interactive
356
- children via their four-state contract, bare glyphs via a
357
- `min-h-11 min-w-11` host). No orphaned token left behind. */
358
-
359
- /* O.W6 Lane D — Dock touch-target floor. Mirrors the IconTooltip
360
- hit-area but for the dock-control surface. The base value tracks
361
- the desktop default (`--size-icon-btn`); the
362
- `@media (pointer: coarse)` block at `dock.css` lifts it to the
363
- WCAG 2.5.5 floor on touch devices. */
364
- --dock-touch-target: 2.75rem; /* 44px */
365
-
366
- /* AQ.W3 §7 — canonical WCAG 2.5.5 (44px) touch-target floor for the
367
- NON-dock coarse-pointer surfaces (`Button size="icon"`,
368
- ExpandableContainer triggers, SegmentedTabs responsive mobile trigger). One
369
- named rung the `@media (pointer: coarse)` block in utilities.css reads,
370
- retiring the per-consumer one-liner `min-h-[44px]` patches. Equals
371
- `--dock-touch-target` numerically; kept as a distinct token so the
372
- dock floor and the general floor can be retuned independently. */
373
- --touch-target: 2.75rem; /* 44px */
374
-
375
- /* MetricBadge — stacked variant geometry. The 2-row stacked layout
376
- (label / value+unit) wants a taller floor than the inline pill so the
377
- label has breathing room above the baseline pair. T.W2.T2 +
378
- audit B-spec §3.2 vertical-rhythm table land 42px (2.625rem) as the
379
- min-height with 6px (0.375rem) block padding. The inline ladder
380
- keeps its tight defaults via `--metric-badge-min-height` /
381
- `--metric-badge-padding-block` (declared inline at the
382
- `.metric-badge` selector). */
383
- --metric-badge-min-height-stacked: 2.625rem;
384
- --metric-badge-padding-block-stacked: 0.375rem;
385
-
386
- /* Configurator — N.W2 Lane A density axis (4 rungs).
387
- The `comfortable` rung restates the pre-N.W2 baked recipe exactly
388
- (`gap-1.5 py-2` = 0.375rem / 0.5rem) so unparameterised consumers
389
- see no visual change. `mobile` halves the vertical breathing room
390
- for narrow-viewport studios; `spacious` doubles it for settings-
391
- page hosts. See `<ConfiguratorRow>` scoped CSS for the attribute-
392
- selector binding. */
393
- --configurator-row-gap-mobile: 0.25rem; /* 4px — tight */
394
- --configurator-row-gap-compact: 0.3125rem; /* 5px — slightly tighter */
395
- --configurator-row-gap-comfortable: 0.375rem; /* 6px — pre-N.W2 default */
396
- --configurator-row-gap-spacious: 0.75rem; /* 12px — generous */
397
-
398
- --configurator-row-py-mobile: 0.25rem; /* 4px — tight */
399
- --configurator-row-py-compact: 0.375rem; /* 6px — slightly tighter */
400
- --configurator-row-py-comfortable: 0.5rem; /* 8px — pre-N.W2 default */
401
- --configurator-row-py-spacious: 0.875rem; /* 14px — generous */
402
-
403
- /* Component font override (consumers override locally) */
404
- --select-font: inherit;
405
-
406
- }