@mkbabb/glass-ui 3.9.0 → 3.10.1

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 (265) hide show
  1. package/dist/{CardAction-DuArVky-.js → CardAction-DrAcAV4d.js} +2 -2
  2. package/dist/{CommandShortcut-CefCj5mt.js → CommandShortcut-mV2e1aG6.js} +2 -2
  3. package/dist/{DataTable-CUHMukiQ.js → DataTable-C3E6jZ5B.js} +2 -2
  4. package/dist/{DialogContent-BRkT1cjP.js → DialogContent-BxaaafFi.js} +1 -1
  5. package/dist/{HoverPopover-2LOIW34a.js → HoverPopover-CDA_SaCe.js} +1 -1
  6. package/dist/{MetricBadge-lTc002u2.js → MetricBadge-idgrkqoP.js} +1 -1
  7. package/dist/{Notification-BxK8LZMw.js → Notification-Cu0nN17_.js} +3 -3
  8. package/dist/{NumberFieldContent-BbLOh8RU.js → NumberFieldContent-CHEWghnY.js} +2 -2
  9. package/dist/{PopoverContent-BId6ggf_.js → PopoverContent-DpUvdYY-.js} +1 -1
  10. package/dist/{Progress-iEuD9pxG.js → Progress-BW-StFw2.js} +1 -1
  11. package/dist/{ScrollingText-BPP84wKo.js → ScrollingText-DruYCni_.js} +1 -1
  12. package/dist/{SelectScrollDownButton-T32cVFeM.js → SelectScrollDownButton-pirzjm--.js} +3 -3
  13. package/dist/{Switch-LDKLmmgx.js → Switch-DeAqg6pi.js} +1 -1
  14. package/dist/{TabsList-B8CVOQPC.js → TabsList-BAVzOZpg.js} +2 -2
  15. package/dist/{Toaster-1rYWrmAm.js → Toaster-CvuuW_y9.js} +49 -46
  16. package/dist/{ToggleGroupItem-Cev4pOVK.js → ToggleGroupItem-DtD37b4G.js} +4 -4
  17. package/dist/animated-digit.js +2 -2
  18. package/dist/api/index.d.ts +4 -4
  19. package/dist/api.js +1 -1
  20. package/dist/aurora.js +238 -547
  21. package/dist/{badge-BvwvT50i.js → badge-NdCQMvvB.js} +2 -2
  22. package/dist/badge.js +1 -1
  23. package/dist/{button-DN39cGqL.js → button-DyiWFAOE.js} +12 -12
  24. package/dist/button.js +1 -1
  25. package/dist/canvas.js +2 -2
  26. package/dist/card.js +1 -1
  27. package/dist/carousel.js +5 -5
  28. package/dist/collapsible.js +1 -1
  29. package/dist/{color-8jBjWiJ6.js → color-B65wWyQz.js} +9 -7
  30. package/dist/color.js +1 -1
  31. package/dist/command.js +1 -1
  32. package/dist/{compile-DAjIoEy2.js → compile-Ce_V55zi.js} +23 -23
  33. package/dist/components/custom/aurora/composables/atoms.d.ts +21 -4
  34. package/dist/components/custom/aurora/composables/runtime.d.ts +0 -9
  35. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +0 -11
  36. package/dist/components/custom/aurora/constants/renderMode.d.ts +0 -32
  37. package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +1 -1
  38. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +2 -2
  39. package/dist/components/custom/aurora/constants/shaders/tonemap.glsl.d.ts +1 -1
  40. package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +1 -0
  41. package/dist/components/custom/aurora/index.d.ts +1 -1
  42. package/dist/components/custom/constellation/Constellation.vue.d.ts +85 -1
  43. package/dist/components/custom/constellation/composables/createConstellationField.d.ts +35 -0
  44. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +35 -0
  45. package/dist/components/custom/constellation/constants.d.ts +36 -0
  46. package/dist/components/custom/constellation/constellationDraw.d.ts +18 -0
  47. package/dist/components/custom/constellation/constellationField.d.ts +174 -63
  48. package/dist/components/custom/constellation/constellationInteraction.d.ts +102 -0
  49. package/dist/components/custom/constellation/index.d.ts +4 -2
  50. package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +11 -0
  51. package/dist/components/custom/dock/GlassDock.vue.d.ts +2 -110
  52. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +36 -0
  53. package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +15 -0
  54. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +131 -0
  55. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +44 -0
  56. package/dist/components/custom/dock/constants.d.ts +23 -0
  57. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +6 -0
  58. package/dist/components/custom/fourier-field/index.d.ts +25 -1
  59. package/dist/components/custom/fourier-field/math.d.ts +20 -8
  60. package/dist/components/custom/fourier-field/presets.d.ts +54 -0
  61. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +8 -10
  62. package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +18 -0
  63. package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +41 -0
  64. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +4 -3
  65. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +16 -21
  66. package/dist/components/custom/goo-blob/constants.d.ts +52 -0
  67. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  68. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -0
  69. package/dist/components/custom/goo-blob/types.d.ts +59 -25
  70. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +2 -2
  71. package/dist/components/custom/tabs/constants.d.ts +12 -0
  72. package/dist/components/custom/underline/GlassUnderline.vue.d.ts +84 -0
  73. package/dist/components/custom/underline/index.d.ts +2 -0
  74. package/dist/components/custom/underline/types.d.ts +56 -0
  75. package/dist/components/ui/drawer/Drawer.vue.d.ts +1 -0
  76. package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
  77. package/dist/components/ui/slider/index.d.ts +25 -18
  78. package/dist/components/ui/toast/use-toast.d.ts +2 -2
  79. package/dist/composables/color/index.d.ts +24 -7
  80. package/dist/composables/glass/useSpecularTracking.d.ts +12 -3
  81. package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +1 -6
  82. package/dist/composables/motion/curves.d.ts +48 -0
  83. package/dist/composables/motion/index.d.ts +2 -0
  84. package/dist/composables/motion/springPresets.d.ts +33 -0
  85. package/dist/composables/motion/suite.d.ts +2 -0
  86. package/dist/composables/motion/useSpringMount.d.ts +1 -1
  87. package/dist/configurator.js +1 -1
  88. package/dist/confirm-dialog.js +2 -2
  89. package/dist/constellation.js +322 -147
  90. package/dist/controls.js +48 -14
  91. package/dist/dark.js +1 -1
  92. package/dist/data-table.js +1 -1
  93. package/dist/dialog.js +2 -2
  94. package/dist/dock.js +340 -327
  95. package/dist/dockContext-bho8B1A4.js +17 -0
  96. package/dist/{dropdown-menu-D77jX6Df.js → dropdown-menu-DVnQcA0E.js} +7 -4
  97. package/dist/dropdown-menu.js +1 -1
  98. package/dist/expandable-container.js +1 -1
  99. package/dist/forms.js +2 -2
  100. package/dist/fourier-field.js +147 -120
  101. package/dist/fourier-math.d.ts +1 -0
  102. package/dist/fourier-math.js +2 -0
  103. package/dist/glass-ui.css +1 -1
  104. package/dist/glass-ui.js +286 -207
  105. package/dist/goo-blob.js +368 -322
  106. package/dist/hover-popover.js +1 -1
  107. package/dist/icon-tooltip.js +1 -1
  108. package/dist/index.d.ts +0 -2
  109. package/dist/keyboard.js +1 -1
  110. package/dist/labeled-field.js +5 -5
  111. package/dist/math-BUU9hHID.js +43 -0
  112. package/dist/metric-badge.js +1 -1
  113. package/dist/metric-stack.js +2 -2
  114. package/dist/motion-core.js +4 -4
  115. package/dist/motion-curves.d.ts +1 -0
  116. package/dist/motion-curves.js +130 -0
  117. package/dist/motion.js +38 -37
  118. package/dist/notification.js +1 -1
  119. package/dist/number-field.js +1 -1
  120. package/dist/popover.js +1 -1
  121. package/dist/progress.js +1 -1
  122. package/dist/pulse.js +1 -1
  123. package/dist/reactive.js +1 -1
  124. package/dist/scrolling-text.js +1 -1
  125. package/dist/search.js +6 -6
  126. package/dist/select.js +1 -1
  127. package/dist/{sheet-VZEtNFvO.js → sheet-ChSXcJpU.js} +1 -1
  128. package/dist/sheet.js +1 -1
  129. package/dist/{slider-DC2mwuoe.js → slider-sfl8gFDD.js} +8 -8
  130. package/dist/slider.js +1 -1
  131. package/dist/sortable-list.js +2 -2
  132. package/dist/springPresets-aRSm-4_k.js +40 -0
  133. package/dist/stacked-icons.js +6 -6
  134. package/dist/styles/cards.css +2 -2
  135. package/dist/styles/components.css +1 -1
  136. package/dist/styles/dock/layer-group.css +38 -4
  137. package/dist/styles/dock/layers.css +11 -1
  138. package/dist/styles/dock/morph.css +95 -19
  139. package/dist/styles/dock/shell.css +12 -0
  140. package/dist/styles/dock-controls.css +25 -12
  141. package/dist/styles/drawer.css +14 -4
  142. package/dist/styles/floating-panel.css +2 -0
  143. package/dist/styles/glass/a11y-fallback.css +245 -0
  144. package/dist/styles/glass/ladder.css +304 -0
  145. package/dist/styles/glass/material.css +238 -0
  146. package/dist/styles/glass/progress-rail.css +78 -0
  147. package/dist/styles/glass/squircle.css +66 -0
  148. package/dist/styles/glass/surfaces.css +306 -0
  149. package/dist/styles/glass-refract.css +2 -0
  150. package/dist/styles/glass.css +31 -1052
  151. package/dist/styles/hover-popover.css +2 -0
  152. package/dist/styles/index.css +24 -6
  153. package/dist/styles/instrument-chassis.css +4 -0
  154. package/dist/styles/theme.css +14 -14
  155. package/dist/styles/tokens/color-radius.css +250 -0
  156. package/dist/styles/tokens/dark-arm.css +194 -0
  157. package/dist/styles/tokens/glass.css +413 -0
  158. package/dist/styles/tokens/light-dark.css +158 -0
  159. package/dist/styles/tokens/offsets-sizing.css +406 -0
  160. package/dist/styles/tokens/property-regs.css +169 -0
  161. package/dist/styles/tokens/scale-paper.css +361 -0
  162. package/dist/styles/tokens/scheme-motion.css +334 -0
  163. package/dist/styles/tokens/shadow.css +132 -0
  164. package/dist/styles/tokens.css +22 -2269
  165. package/dist/styles/transitions.css +20 -2
  166. package/dist/styles/typography.css +18 -6
  167. package/dist/styles/utilities/a11y-overrides.css +140 -0
  168. package/dist/styles/utilities/animate.css +26 -0
  169. package/dist/styles/utilities/base.css +365 -0
  170. package/dist/styles/utilities/btn.css +399 -0
  171. package/dist/styles/utilities/components.css +317 -0
  172. package/dist/styles/utilities.css +19 -1170
  173. package/dist/switch.js +1 -1
  174. package/dist/tabs.js +98 -98
  175. package/dist/timeline.js +2 -2
  176. package/dist/toast.js +1 -1
  177. package/dist/toggle-group.js +1 -1
  178. package/dist/typewriter.js +1 -1
  179. package/dist/underline.d.ts +1 -0
  180. package/dist/underline.js +85 -0
  181. package/dist/{useAnimatedNumber-C5I3wWd8.js → useAnimatedNumber-DfVgP4te.js} +1 -1
  182. package/dist/{useConfiguratorState-DxAqksK6.js → useConfiguratorState-BdQXh9ie.js} +1 -1
  183. package/dist/useSpecularTracking-DFK_fhpG.js +32 -0
  184. package/dist/useSpringMount-DXUzxBjV.js +108 -0
  185. package/dist/watercolor-dot.js +2 -2
  186. package/package.json +62 -38
  187. package/src/styles/cards.css +2 -2
  188. package/src/styles/dock/layer-group.css +38 -4
  189. package/src/styles/dock/layers.css +11 -1
  190. package/src/styles/dock/morph.css +95 -19
  191. package/src/styles/dock/shell.css +12 -0
  192. package/src/styles/dock-controls.css +25 -12
  193. package/src/styles/drawer.css +12 -4
  194. package/src/styles/glass/a11y-fallback.css +245 -0
  195. package/src/styles/glass/ladder.css +304 -0
  196. package/src/styles/glass/material.css +238 -0
  197. package/src/styles/glass/progress-rail.css +78 -0
  198. package/src/styles/glass/squircle.css +66 -0
  199. package/src/styles/glass/surfaces.css +306 -0
  200. package/src/styles/glass.css +31 -1052
  201. package/src/styles/index.css +24 -6
  202. package/src/styles/theme.css +14 -14
  203. package/src/styles/tokens/color-radius.css +250 -0
  204. package/src/styles/tokens/dark-arm.css +194 -0
  205. package/src/styles/tokens/glass.css +413 -0
  206. package/src/styles/tokens/light-dark.css +158 -0
  207. package/src/styles/tokens/offsets-sizing.css +406 -0
  208. package/src/styles/tokens/property-regs.css +169 -0
  209. package/src/styles/tokens/scale-paper.css +361 -0
  210. package/src/styles/tokens/scheme-motion.css +334 -0
  211. package/src/styles/tokens/shadow.css +132 -0
  212. package/src/styles/tokens.css +22 -2269
  213. package/src/styles/transitions.css +20 -2
  214. package/src/styles/typography.css +18 -6
  215. package/src/styles/utilities/a11y-overrides.css +140 -0
  216. package/src/styles/utilities/animate.css +26 -0
  217. package/src/styles/utilities/base.css +365 -0
  218. package/src/styles/utilities/btn.css +399 -0
  219. package/src/styles/utilities/components.css +317 -0
  220. package/src/styles/utilities.css +19 -1170
  221. package/dist/DeckProgress-Dmk4_AKN.js +0 -23
  222. package/dist/InstrumentRail-CUJ05YVG.js +0 -44
  223. package/dist/components/custom/aurora/composables/gpuRuntime.d.ts +0 -16
  224. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +0 -7
  225. package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +0 -27
  226. package/dist/components/custom/deck-progress/index.d.ts +0 -2
  227. package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +0 -57
  228. package/dist/components/custom/dialog-native/index.d.ts +0 -1
  229. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +0 -41
  230. package/dist/components/custom/glass-panel/index.d.ts +0 -2
  231. package/dist/components/custom/header-ribbon/HeaderRibbon.vue.d.ts +0 -31
  232. package/dist/components/custom/header-ribbon/index.d.ts +0 -2
  233. package/dist/components/custom/header-ribbon/types.d.ts +0 -7
  234. package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +0 -91
  235. package/dist/components/custom/instrument-rail/index.d.ts +0 -2
  236. package/dist/composables/glass/createGPUCanvas.d.ts +0 -40
  237. package/dist/deck-progress.d.ts +0 -1
  238. package/dist/deck-progress.js +0 -2
  239. package/dist/dockContext-BKeIMmNk.js +0 -9
  240. package/dist/glass-panel.d.ts +0 -1
  241. package/dist/glass-panel.js +0 -44
  242. package/dist/header-ribbon.d.ts +0 -1
  243. package/dist/header-ribbon.js +0 -63
  244. package/dist/instrument-rail.d.ts +0 -1
  245. package/dist/instrument-rail.js +0 -2
  246. package/dist/useGlassRenderer-5I0YkI4t.js +0 -69
  247. package/dist/useSpecularTracking-BVRZsRHA.js +0 -26
  248. package/dist/useSpringMount-BJSHcLl3.js +0 -113
  249. /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-Drow5WkV.js} +0 -0
  250. /package/dist/{DialogFooter-Gprw8H_A.js → DialogFooter-DufLHi0y.js} +0 -0
  251. /package/dist/{IconTooltip-yefK7cJc.js → IconTooltip-BrQ5p181.js} +0 -0
  252. /package/dist/{Input-DWQQIOC4.js → Input-B-F818RU.js} +0 -0
  253. /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-DWghtRt7.js} +0 -0
  254. /package/dist/{constants-CS75AWHG.js → constants-C8NMonuo.js} +0 -0
  255. /package/dist/{presets-BKVyQfbt.js → presets-1OhFpaIC.js} +0 -0
  256. /package/dist/{prng-wHuHlNHE.js → prng-CjVgzjQT.js} +0 -0
  257. /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CRvVzOvP.js} +0 -0
  258. /package/dist/{useCanvas2D-ClrQuZtp.js → useCanvas2D-CSeH8h16.js} +0 -0
  259. /package/dist/{useGlobalDark-yhL4Wp-s.js → useGlobalDark-D7R9OypB.js} +0 -0
  260. /package/dist/{useIntersectionPause-Cc-H9ees.js → useIntersectionPause-DAdVPVp4.js} +0 -0
  261. /package/dist/{useInterval-Dsmqwi03.js → useInterval-D3USn0yc.js} +0 -0
  262. /package/dist/{useKeyboardShortcuts-Be3w_Rwk.js → useKeyboardShortcuts-i8tHd5WO.js} +0 -0
  263. /package/dist/{useScrollProgress-CAH8Ofwt.js → useScrollProgress-CcgmgMQt.js} +0 -0
  264. /package/dist/{useSortable-C8ReQ50P.js → useSortable-DnyGXKKY.js} +0 -0
  265. /package/dist/{useTextHighlight-DON84L8w.js → useTextHighlight-B3b10W6r.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mkbabb/glass-ui",
3
- "version": "3.9.0",
3
+ "version": "3.10.1",
4
4
  "description": "Glassmorphic design system — Vue 3.5 components, reka-ui primitives, Tailwind CSS v4 tokens",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -58,6 +58,9 @@
58
58
  "fourier-field": [
59
59
  "dist/fourier-field.d.ts"
60
60
  ],
61
+ "fourier-math": [
62
+ "dist/fourier-math.d.ts"
63
+ ],
61
64
  "goo-blob": [
62
65
  "dist/goo-blob.d.ts"
63
66
  ],
@@ -76,9 +79,6 @@
76
79
  "status-dot": [
77
80
  "dist/status-dot.d.ts"
78
81
  ],
79
- "deck-progress": [
80
- "dist/deck-progress.d.ts"
81
- ],
82
82
  "pulse": [
83
83
  "dist/pulse.d.ts"
84
84
  ],
@@ -88,9 +88,6 @@
88
88
  "toggle-chip": [
89
89
  "dist/toggle-chip.d.ts"
90
90
  ],
91
- "glass-panel": [
92
- "dist/glass-panel.d.ts"
93
- ],
94
91
  "sortable-list": [
95
92
  "dist/sortable-list.d.ts"
96
93
  ],
@@ -109,24 +106,21 @@
109
106
  "instrument-chassis": [
110
107
  "dist/instrument-chassis.d.ts"
111
108
  ],
112
- "instrument-rail": [
113
- "dist/instrument-rail.d.ts"
114
- ],
115
109
  "hover-popover": [
116
110
  "dist/hover-popover.d.ts"
117
111
  ],
118
112
  "configurator": [
119
113
  "dist/configurator.d.ts"
120
114
  ],
121
- "header-ribbon": [
122
- "dist/header-ribbon.d.ts"
123
- ],
124
115
  "constellation": [
125
116
  "dist/constellation.d.ts"
126
117
  ],
127
118
  "scrolling-text": [
128
119
  "dist/scrolling-text.d.ts"
129
120
  ],
121
+ "underline": [
122
+ "dist/underline.d.ts"
123
+ ],
130
124
  "forms": [
131
125
  "dist/forms.d.ts"
132
126
  ],
@@ -151,6 +145,9 @@
151
145
  "motion-core": [
152
146
  "dist/motion-core.d.ts"
153
147
  ],
148
+ "motion-curves": [
149
+ "dist/motion-curves.d.ts"
150
+ ],
154
151
  "button": [
155
152
  "dist/button.d.ts"
156
153
  ],
@@ -297,6 +294,10 @@
297
294
  "types": "./dist/fourier-field.d.ts",
298
295
  "import": "./dist/fourier-field.js"
299
296
  },
297
+ "./fourier-math": {
298
+ "types": "./dist/fourier-math.d.ts",
299
+ "import": "./dist/fourier-math.js"
300
+ },
300
301
  "./goo-blob": {
301
302
  "types": "./dist/goo-blob.d.ts",
302
303
  "import": "./dist/goo-blob.js"
@@ -309,10 +310,6 @@
309
310
  "types": "./dist/configurator.d.ts",
310
311
  "import": "./dist/configurator.js"
311
312
  },
312
- "./header-ribbon": {
313
- "types": "./dist/header-ribbon.d.ts",
314
- "import": "./dist/header-ribbon.js"
315
- },
316
313
  "./constellation": {
317
314
  "types": "./dist/constellation.d.ts",
318
315
  "import": "./dist/constellation.js"
@@ -337,10 +334,6 @@
337
334
  "types": "./dist/status-dot.d.ts",
338
335
  "import": "./dist/status-dot.js"
339
336
  },
340
- "./deck-progress": {
341
- "types": "./dist/deck-progress.d.ts",
342
- "import": "./dist/deck-progress.js"
343
- },
344
337
  "./pulse": {
345
338
  "types": "./dist/pulse.d.ts",
346
339
  "import": "./dist/pulse.js"
@@ -353,10 +346,6 @@
353
346
  "types": "./dist/toggle-chip.d.ts",
354
347
  "import": "./dist/toggle-chip.js"
355
348
  },
356
- "./glass-panel": {
357
- "types": "./dist/glass-panel.d.ts",
358
- "import": "./dist/glass-panel.js"
359
- },
360
349
  "./sortable-list": {
361
350
  "types": "./dist/sortable-list.d.ts",
362
351
  "import": "./dist/sortable-list.js"
@@ -381,10 +370,6 @@
381
370
  "types": "./dist/instrument-chassis.d.ts",
382
371
  "import": "./dist/instrument-chassis.js"
383
372
  },
384
- "./instrument-rail": {
385
- "types": "./dist/instrument-rail.d.ts",
386
- "import": "./dist/instrument-rail.js"
387
- },
388
373
  "./hover-popover": {
389
374
  "types": "./dist/hover-popover.d.ts",
390
375
  "import": "./dist/hover-popover.js"
@@ -393,6 +378,10 @@
393
378
  "types": "./dist/scrolling-text.d.ts",
394
379
  "import": "./dist/scrolling-text.js"
395
380
  },
381
+ "./underline": {
382
+ "types": "./dist/underline.d.ts",
383
+ "import": "./dist/underline.js"
384
+ },
396
385
  "./forms": {
397
386
  "types": "./dist/forms.d.ts",
398
387
  "import": "./dist/forms.js"
@@ -421,6 +410,10 @@
421
410
  "types": "./dist/motion-core.d.ts",
422
411
  "import": "./dist/motion-core.js"
423
412
  },
413
+ "./motion-curves": {
414
+ "types": "./dist/motion-curves.d.ts",
415
+ "import": "./dist/motion-curves.js"
416
+ },
424
417
  "./button": {
425
418
  "types": "./dist/button.d.ts",
426
419
  "import": "./dist/button.js"
@@ -554,6 +547,9 @@
554
547
  "proof:phantom-classes": "node scripts/proof-phantom-classes.mjs",
555
548
  "proof:vt-names": "node scripts/proof-vt-names.mjs",
556
549
  "proof:dock-animation-live": "node scripts/proof-dock-animation-live.mjs",
550
+ "proof:dock-rail-cohesion": "node scripts/proof-dock-rail-cohesion.mjs",
551
+ "proof:dock-lockstep-bornred": "node scripts/proof-dock-lockstep-bornred.mjs",
552
+ "proof:dock-items-lag-capture": "node scripts/proof-dock-items-lag-capture.mjs",
557
553
  "proof:dock-orchestrator-single": "node scripts/proof-dock-orchestrator-single.mjs",
558
554
  "proof:dock-clip-reveal": "node scripts/proof-dock-clip-reveal.mjs",
559
555
  "proof:dock-layering-polish": "node scripts/proof-dock-layering-polish.mjs",
@@ -568,6 +564,7 @@
568
564
  "proof:dock-css-carve": "node scripts/proof-dock-css-carve.mjs",
569
565
  "proof:dock-css-split": "node scripts/proof-dock-controls-split.mjs",
570
566
  "proof:design-idiom-localization": "node scripts/proof-design-idiom-localization.mjs",
567
+ "proof:colocation": "node scripts/proof-colocation.mjs",
571
568
  "proof:tailwind-v4-idiom": "node scripts/proof-tailwind-v4-idiom.mjs",
572
569
  "proof:au-w9-consumers": "node scripts/proof-au-w9-consumers.mjs",
573
570
  "proof:shadow-contract": "node scripts/proof-shadow-contract.mjs",
@@ -575,8 +572,10 @@
575
572
  "proof:card-cartoon-consumers": "node scripts/proof-card-cartoon-consumers.mjs",
576
573
  "proof:doc-consistency": "node scripts/proof-doc-consistency.mjs",
577
574
  "proof:au-w0-reground": "node scripts/proof-au-w0-reground.mjs",
575
+ "proof:ay-w0-reground": "node scripts/proof-ay-w0-reground.mjs",
578
576
  "proof:au-w1-design": "node scripts/proof-au-w1-design.mjs",
579
577
  "proof:au-final": "node scripts/proof-au-final.mjs",
578
+ "proof:ay-final": "node scripts/proof-ay-final.mjs",
580
579
  "proof:strict-templates": "node scripts/proof-strict-templates.mjs",
581
580
  "proof:peer-optional": "node scripts/proof-peer-optional.mjs",
582
581
  "proof:vueuse-free-root": "node scripts/proof-vueuse-free-root.mjs",
@@ -598,7 +597,7 @@
598
597
  "proof:blob-value-free": "node scripts/proof-blob-value-free.mjs",
599
598
  "proof:motion-composables-consumer": "node scripts/proof-motion-composables-consumer.mjs",
600
599
  "proof:motion-value-free": "node scripts/proof-motion-value-free.mjs",
601
- "proof:no-value-default": "node scripts/proof-no-value-default.mjs",
600
+ "proof:motion-suite": "node scripts/proof-motion-suite.mjs",
602
601
  "proof:blob-space-gamma": "node scripts/proof-blob-space-gamma.mjs",
603
602
  "proof:blob-smin-normalized": "node scripts/proof-blob-smin-normalized.mjs",
604
603
  "proof:blob-gradient-unit-length": "node scripts/proof-blob-gradient-unit-length.mjs",
@@ -616,18 +615,22 @@
616
615
  "proof:aurora-oilpastel-medium": "node scripts/proof-aurora-oilpastel-medium.mjs",
617
616
  "proof:aurora-stroke-composite": "node scripts/proof-aurora-stroke-composite.mjs",
618
617
  "proof:aurora-painterly-statistics": "node scripts/proof-aurora-painterly-statistics.mjs",
618
+ "proof:aurora-arresting-ref": "node scripts/aurora-arresting-metric.mjs tests-visual/fixtures/starry-night-crop.png",
619
619
  "proof:aurora-atoms-roundtrip": "node scripts/proof-aurora-atoms-roundtrip.mjs",
620
- "proof:aurora-wgsl-equivalence": "node scripts/proof-aurora-wgsl-equivalence.mjs",
621
- "proof:aurora-noise-hash-equivalence": "node scripts/proof-aurora-noise-hash-equivalence.mjs",
622
- "proof:aurora-backend-fallback": "node scripts/proof-aurora-backend-fallback.mjs",
623
- "proof:webgpu-substrate-single": "node scripts/proof-webgpu-substrate-single.mjs",
624
- "proof:aurora-webgpu-render": "node scripts/proof-aurora-webgpu-render.mjs",
620
+ "proof:aur2-residue": "node scripts/proof-aur2-residue.mjs",
621
+ "proof:aurora-arresting": "node scripts/proof-aurora-arresting.mjs",
622
+ "proof:aurora-atoms-render": "node scripts/proof-aurora-atoms-render.mjs",
623
+ "proof:aurora-studio": "node scripts/proof-aurora-studio.mjs",
625
624
  "proof:aurora-interaction-prm": "node scripts/proof-aurora-interaction-prm.mjs",
626
625
  "proof:shader-shared-source": "node scripts/proof-shader-shared-source.mjs",
627
626
  "proof:blob-color-equivalence": "vitest run tests/components/custom/goo-blob/blob-color-equivalence.test.ts",
628
627
  "proof:fail-explicit": "node scripts/proof-fail-explicit.mjs",
629
628
  "proof:no-god-module": "node scripts/proof-no-god-module.mjs",
629
+ "proof:composable-return-types": "node scripts/proof-composable-return-types.mjs",
630
630
  "proof:no-legacy-commentary": "node scripts/proof-no-legacy-commentary.mjs",
631
+ "proof:no-retired-survivor": "node scripts/proof-no-retired-survivor.mjs",
632
+ "proof:tag-parity": "node scripts/proof-tag-parity.mjs",
633
+ "proof:var-in-arbitrary-guard": "node scripts/proof-var-in-arbitrary-guard.mjs",
631
634
  "proof:story-language": "node scripts/proof-story-language.mjs",
632
635
  "proof:gate-detrap": "node scripts/proof-gate-detrap.mjs",
633
636
  "proof:liquid-glass-tokens": "node scripts/proof-liquid-glass-tokens.mjs",
@@ -640,6 +643,11 @@
640
643
  "proof:constellation-substrate-single": "node scripts/proof-constellation-substrate-single.mjs",
641
644
  "proof:constellation-tokens": "node scripts/proof-constellation-tokens.mjs",
642
645
  "proof:constellation-warp-live": "node scripts/proof-constellation-warp-live.mjs",
646
+ "proof:constellation-egg-live": "node scripts/proof-constellation-egg-live.mjs",
647
+ "proof:constellation-freeze-live": "node scripts/proof-constellation-freeze-live.mjs",
648
+ "proof:fourier-field-intensity": "node scripts/proof-fourier-field-intensity.mjs",
649
+ "proof:fourier-field-visibility-live": "node scripts/proof-fourier-field-visibility-live.mjs",
650
+ "proof:constellation-refit-live": "node scripts/proof-constellation-refit-live.mjs",
643
651
  "proof:canvas2d-substrate": "vitest run tests/composables/glass/canvas2d/useCanvas2D.test.ts",
644
652
  "proof:resolve-canvas-color": "vitest run tests/composables/glass/canvas2d/resolveCanvasColor.test.ts",
645
653
  "proof:text-highlight": "vitest run tests/composables/motion/text-highlight-home.test.ts tests/composables/motion/useTextHighlight.test.ts",
@@ -656,13 +664,26 @@
656
664
  "proof:aurora-chrome-idiomatic": "node scripts/proof-aurora-chrome-idiomatic.mjs",
657
665
  "proof:aurora-preset-roster": "node scripts/proof-aurora-preset-roster.mjs",
658
666
  "proof:ui-scale": "node scripts/proof-ui-scale.mjs",
667
+ "proof:touch-target": "node scripts/proof-touch-target.mjs",
668
+ "proof:webkit-backdrop": "node scripts/proof-webkit-backdrop.mjs",
669
+ "proof:nested-backdrop-budget": "node scripts/proof-nested-backdrop-budget.mjs",
659
670
  "proof:dropdown-type-scale": "node scripts/proof-dropdown-type-scale.mjs",
660
671
  "proof:forced-colors-skin": "node scripts/proof-forced-colors-skin.mjs",
661
- "proof:glass-one-model": "node scripts/proof-glass-level.mjs --one-model",
672
+ "proof:glass-cohesion": "node scripts/proof-glass-cohesion.mjs",
673
+ "proof:substrate-cohesion": "node scripts/proof-substrate-cohesion.mjs",
674
+ "proof:component-orphan": "node scripts/proof-component-orphan.mjs",
675
+ "proof:substrate-staging": "node scripts/proof-substrate-staging.mjs",
676
+ "proof:easter-eggs": "node scripts/proof-easter-eggs.mjs",
677
+ "proof:instrument-scope": "node scripts/proof-instrument-scope.mjs",
678
+ "proof:readme-meta-clean": "node scripts/proof-readme-meta-clean.mjs",
679
+ "proof:convergence-fit-coherent": "node scripts/proof-convergence-fit-coherent.mjs",
662
680
  "proof:adaptive-glass": "node scripts/proof-adaptive-glass.mjs",
663
681
  "proof:dark-semantic-contrast": "node scripts/proof-dark-semantic-contrast.mjs",
664
682
  "proof:glass-material-demo": "node scripts/proof-glass-material-demo.mjs",
665
683
  "proof:blob-live-truth": "node scripts/proof-blob-live-truth.mjs",
684
+ "proof:blob-config-atoms": "node scripts/proof-blob-config-atoms.mjs",
685
+ "proof:blob3-strip": "node scripts/proof-blob3-strip.mjs",
686
+ "proof:blob-config": "node scripts/proof-blob-config.mjs",
666
687
  "proof:tabs-unified": "node scripts/proof-tabs-unified.mjs",
667
688
  "proof:glass-material-sota": "node scripts/proof-glass-material-sota.mjs",
668
689
  "proof:primitive-affordance": "node scripts/proof-primitive-affordance.mjs",
@@ -673,10 +694,13 @@
673
694
  "proof:substrate-paints-color": "node scripts/proof-substrate-paints-color.mjs",
674
695
  "proof:deck-progress-rail": "node scripts/proof-deck-progress-rail.mjs",
675
696
  "proof:blob-render": "node scripts/proof-blob-render.mjs",
697
+ "proof:blob-warm-default": "node scripts/proof-blob-warm-default.mjs",
676
698
  "proof:blob-integration": "node scripts/proof-blob-integration.mjs",
677
699
  "proof:gate-script-parity": "node scripts/proof-gate-script-parity.mjs",
678
700
  "proof:all": "node scripts/gates.mjs --run local",
679
- "proof:live-verified-ledger": "node scripts/proof-live-verified-ledger.mjs",
701
+ "proof:live-verified-ledger": "node scripts/proof-live-verified-ledger.mjs --tranche=AY",
702
+ "proof:live-verified-ledger:ay": "node scripts/proof-live-verified-ledger.mjs --tranche=AY",
703
+ "proof:live-verified-ledger:ax": "node scripts/proof-live-verified-ledger.mjs --tranche=AX",
680
704
  "proof:disposition-live": "node scripts/proof-disposition-live.mjs",
681
705
  "proof:gen-ci-fresh": "node scripts/proof-gen-ci-fresh.mjs",
682
706
  "gates:verify-ci": "node scripts/gates.mjs --verify-ci",
@@ -724,7 +748,7 @@
724
748
  },
725
749
  "devDependencies": {
726
750
  "@lucide/vue": "^1.16.0",
727
- "@mkbabb/keyframes.js": "^2.2.0",
751
+ "@mkbabb/keyframes.js": "^4.1.0",
728
752
  "@mkbabb/value.js": "^0.10.0",
729
753
  "@tailwindcss/postcss": "^4.3.0",
730
754
  "@tailwindcss/vite": "^4.3.0",
@@ -38,8 +38,8 @@
38
38
  mints the stacking context once. Longhand maps `translate(x, y)` 1:1. */
39
39
  translate: 0;
40
40
  transition:
41
- translate var(--duration-normal) var(--spring-bouncy),
42
- box-shadow var(--duration-normal) var(--ease-apple);
41
+ translate var(--duration-normal) var(--spring-smooth),
42
+ box-shadow var(--duration-normal) var(--ease-standard);
43
43
 
44
44
  &:hover:not(:disabled) {
45
45
  translate: var(--lift-sm) var(--lift-sm);
@@ -98,6 +98,22 @@
98
98
  display: flex;
99
99
  flex-direction: column;
100
100
  flex-shrink: 0;
101
+ /* AY.W-DOCK-NAV B6 — `align-self: start` (not the group's `stretch`
102
+ default) so the column rail reports its OWN intrinsic content height
103
+ (the stacked tabs) to the group's cross-axis sizing rather than being
104
+ stretched to the group's content-row height. Under `stretch` the rail's
105
+ height resolved to the group height, which was the single content-row
106
+ height — circular: the rail's 3 tall tabs overflowed a 40px rail and the
107
+ lower tabs + the indicator fell below the dock floor (the B6 break). With
108
+ `align-self: start` the rail demands its natural column height, the group
109
+ grows to it, and the dock grows to contain the whole rail. The
110
+ `min-height: max-content` belt makes the demand explicit — a row-flex
111
+ child's cross-size can otherwise resolve to the (smaller) container row
112
+ height even under `align-self: start`; `max-content` floors the rail at
113
+ its stacked-tab content height so the chain (group → pane → dock) grows
114
+ to fit. */
115
+ align-self: start;
116
+ min-height: max-content;
101
117
  gap: var(--dock-layer-rail-gap, 0.125rem);
102
118
  padding: var(--dock-layer-rail-padding, 0.125rem);
103
119
  background: var(--dock-layer-rail-bg, var(--surface-tint-8));
@@ -134,6 +150,12 @@
134
150
  display: inline-flex;
135
151
  align-items: center;
136
152
  justify-content: center;
153
+ /* AY.W-DOCK-NAV B6 — `flex-shrink: 0` so the stacked tabs in the column rail
154
+ hold their full size and the rail demands its natural content height (no
155
+ tab squish). With the rail's `align-self: start` this makes the rail report
156
+ its true column height to the group's cross-axis sizing, growing the dock
157
+ to contain all the tabs + the travelling indicator (the B6 un-clip). */
158
+ flex-shrink: 0;
137
159
  width: var(--dock-layer-tab-size, var(--dock-control-size, 1.75rem));
138
160
  height: var(--dock-layer-tab-size, var(--dock-control-size, 1.75rem));
139
161
  border: 0;
@@ -183,7 +205,19 @@
183
205
  it at the top tab and it NEVER reached the active tab below (the mis-alignment
184
206
  the user screenshotted). The default rule below travels Y; the `.vertical`
185
207
  group's ROW rail overrides back to X. The active-tab plate reads the tunable
186
- `--dock-layer-rail-active` rung. Both morph on `--dock-motion-resize`. */
208
+ `--dock-layer-rail-active` rung.
209
+
210
+ AY.W-DOCK2 (D5 one-clock) — the rail indicator travel moves OFF the fixed-
211
+ linear `--dock-motion-resize` SECOND clock (DK7 killed exactly this pattern
212
+ for the leaving-pane opacity but left it alive on the rail; H-dock §D7 L2) onto
213
+ the `--spring-snappy` register. DECISION: a rail tab switch is a DISCRETE
214
+ selection (the user picks a pane), NOT the box collapse↔expand morph — so it
215
+ does NOT fold onto `--dock-morph-t` (the morph scalar). It uses the iOS
216
+ segmented-control register (`--spring-snappy`, the SAME curve `SegmentedTabs`'
217
+ indicator rides — the confirmed discrete-selection register), so the rail
218
+ indicator glides between tabs on the house spring, never a fixed-linear timer.
219
+ The binding outcome: NO `--dock-motion-resize` survives on the rail (recorded
220
+ in W-DOCK2-DELTA.md). */
187
221
  .dock-layer-rail .dock-layer-tab-indicator {
188
222
  position: absolute;
189
223
  left: 0;
@@ -197,9 +231,9 @@
197
231
  color-mix(in srgb, var(--primary) 15%, transparent)
198
232
  );
199
233
  transition:
200
- width var(--dock-motion-resize),
201
- height var(--dock-motion-resize),
202
- transform var(--dock-motion-resize);
234
+ width var(--duration-fast) var(--spring-snappy),
235
+ height var(--duration-fast) var(--spring-snappy),
236
+ transform var(--duration-fast) var(--spring-snappy);
203
237
  pointer-events: none;
204
238
  }
205
239
 
@@ -196,9 +196,19 @@
196
196
  block-axis morph reveals a column) is NOT forced onto one nowrap row — the
197
197
  vertical group's active host block-sizes to `height: max-content` below
198
198
  (the AP.W3 column treatment, KEPT). */
199
+ /* AY.W-DOCK-NAV B6 — the height is a FLOOR (`min-height`), not a fixed lock. A
200
+ single-row content pane's intrinsic height already equals
201
+ `--dock-layer-height` (the controls + line-height sum to it), so `min-height`
202
+ is byte-identical for the common case. But a horizontal dock hosting a COLUMN
203
+ switcher-rail (`<DockLayerGroup>` with `show-rail`) lays the rail out as a
204
+ stack of tabs taller than one row — the prior fixed `height` clipped the
205
+ rail's lower tabs + the active indicator BELOW the dock floor (the B6 "no rail
206
+ line / broken" read, measured: 2 of 3 tabs clipped). The floor lets the pane
207
+ block-size to the rail's natural column height so the dock grows to contain
208
+ the whole rail. The cross axis keeps `nowrap`. */
199
209
  .glass-dock:not(.vertical) .dock-layer {
200
210
  white-space: nowrap;
201
- height: var(--dock-layer-height, 2.5rem);
211
+ min-height: var(--dock-layer-height, 2.5rem);
202
212
  }
203
213
 
204
214
  .dock-layer.is-active {
@@ -61,9 +61,22 @@
61
61
  authority, and at rest `--dock-expand-t` resolves to the class endpoint (0
62
62
  collapsed / 1 expanded) so the resting look is exact. */
63
63
  .glass-dock.variant-dock:not(.vertical) {
64
+ /* AY.W-A11Y-PERF O-1 — the resting-endpoint dock bg composes the W55 oklab
65
+ adaptive tint so the bright bucket (engaged when a consumer/page marks
66
+ `--glass-backdrop: light` on the dock's ancestor — the @container block
67
+ below + the page-redesign W60 wiring) reaches the LIVE `.variant-dock`
68
+ surface (this 0,3,0 morph interp OVERRIDES the 0,1,0 shell.css bg, so the
69
+ tint must be applied HERE too). The srgb transition mix is preserved between
70
+ the two color endpoints; the adaptive darken rides the resting endpoint
71
+ (`--glass-bg-dock` wrapped in the oklab tint) — at the `0%` rest default the
72
+ inner oklab mix is a no-op so this is byte-identical to today. */
64
73
  background: color-mix(
65
74
  in srgb,
66
- var(--glass-bg-dock, var(--glass-bg-resting))
75
+ color-mix(
76
+ in oklab,
77
+ var(--glass-bg-dock, var(--glass-bg-resting)),
78
+ var(--glass-tint-source) var(--glass-tint-strength)
79
+ )
67
80
  calc(var(--dock-expand-t, 1) * 100%),
68
81
  var(--glass-bg-wash)
69
82
  );
@@ -78,18 +91,40 @@
78
91
  /* The padding morph is split out + scoped `:not(.dock-overflow-wrap)` so the
79
92
  wrap variant's own padding rules (W04 territory — `.dock-overflow-wrap` +
80
93
  its `@media` snap-back) are NOT clobbered by this higher-specificity longhand.
81
- Padding interpolates linearly between the collapsed floor and the expanded
82
- block/inline padding on the same `--dock-expand-t` scalar. */
94
+
95
+ AY.W-DOCK-CHROME §1 — the LAYOUT-ISOLATION fix: the collapse↔expand morph is
96
+ an INLINE-WIDTH aperture by contract ("horizontal docks animate width"), so
97
+ the BLOCK axis MUST be invariant across the morph — otherwise the dock's
98
+ outer height shrinks ~4px on collapse (the collapsed-pad 0.25rem vs the
99
+ expanded pad-block 0.375rem, ×2) and, because a free-floating / inline dock
100
+ sits in normal flow (`display:inline-flex`), that height delta REFLOWS its
101
+ siblings — the page content jumped as the dock animated (the user's 13:27
102
+ audit item 1). The fix holds `padding-block` PINNED at the expanded value in
103
+ BOTH states (no `--dock-expand-t` interpolation on the block axis) so the
104
+ outer block-size is constant; ONLY `padding-inline` morphs to tighten the
105
+ collapsed pill inline. The collapsed circle is unaffected — its diameter is
106
+ owned by the summary pane's own symmetric `block-size` + `aspect-ratio:1`
107
+ (the `.collapsed .dock-layer--summary` rule below), CENTRED on the dock's
108
+ stable-height plate by the root `align-items:center`, not by the root pad. So
109
+ the morph reflows NOTHING vertically: 0px container-height delta. */
83
110
  .glass-dock.variant-dock:not(.vertical):not(.dock-overflow-wrap) {
84
- --dock-pad-collapsed: var(
85
- --dock-collapsed-padding,
86
- var(--dock-padding-block, 0.375rem)
87
- );
88
- padding-block: calc(
89
- var(--dock-pad-collapsed) +
90
- (var(--dock-padding-block, 0.375rem) - var(--dock-pad-collapsed)) *
91
- var(--dock-expand-t, 1)
111
+ /* The collapsed inline-pad endpoint is the EXPANDED block pad (max'd with the
112
+ consumer `--dock-collapsed-padding` handle) so the height-pinned collapsed
113
+ pill is SYMMETRIC → a clean circle at the `--radius-dock` 9999px. The block
114
+ axis is pinned to the expanded pad (below), so matching the inline collapsed
115
+ endpoint to it keeps the box square (the B4 "symmetric collapsed padding
116
+ keeps the pill a circle" intent, preserved through the §1 height-pin). The
117
+ `max()` lets a consumer set `--dock-collapsed-padding` LARGER for a looser
118
+ pill but never SMALLER than the block pad (which would re-introduce the
119
+ narrower-than-tall oval the height-pin would otherwise leave). */
120
+ --dock-pad-collapsed: max(
121
+ var(--dock-padding-block, 0.375rem),
122
+ var(--dock-collapsed-padding, 0px)
92
123
  );
124
+ /* block padding is INVARIANT — the expanded value, both states (the
125
+ layout-isolation contract above): the inline aperture morphs, the block
126
+ axis is pinned so the outer height never changes → 0px container reflow. */
127
+ padding-block: var(--dock-padding-block, 0.375rem);
93
128
  padding-inline: calc(
94
129
  var(--dock-pad-collapsed) +
95
130
  (var(--dock-padding-inline, 0.5rem) - var(--dock-pad-collapsed)) *
@@ -110,14 +145,17 @@
110
145
  box-shadow: var(--shadow-dock-override, var(--shadow-dock-collapsed));
111
146
  }
112
147
 
113
- /* AX.W45-TUNE Q1 — the collapsed summary floors on BOTH axes off the SAME
114
- `--dock-collapsed-summary-min-size` token (now MINTED in tokens.css §10 as a
115
- tight ≈0.7× of the full control height). The prior rule floored ONLY
116
- `min-width` and let the token fall to `--dock-layer-height` (the full control
117
- height) — so the collapsed pill read as a full-row stub, not a proportioned
118
- squircle. Adding the symmetric `min-block-size` makes the collapsed pill a
119
- tight square-ish dot the consumer's glyph sits centred in (the proportioned-
120
- pill target the user's Q1 named). */
148
+
149
+ /* AY.W-DOCK-NAV B4 — the collapsed summary is a PERFECT CIRCLE. The `.dock-layer`
150
+ base rule (`.glass-dock:not(.vertical) .dock-layer`) locks `height:
151
+ var(--dock-layer-height)` (40px) on EVERY layer including the summary; against
152
+ the 0.85× `--dock-collapsed-summary-min-size` min-width that made the pane
153
+ 40h × 30w — an oval (the user's "circle, not oval"). This rule (1) LIFTS the
154
+ height-lock so the summary block-sizes to the SAME token its width floors at,
155
+ and (2) floors both axes to that ONE token, so the collapsed pane is a square
156
+ and the root's symmetric collapsed padding keeps the pill a circle. The glyph
157
+ sits centred on both axes. The `aspect-ratio: 1` belt-and-braces guarantees
158
+ 1:1 even if a consumer's collapsed-slot content is wider than the floor. */
121
159
  .glass-dock.collapsed .dock-layer--summary {
122
160
  min-width: var(
123
161
  --dock-collapsed-summary-min-size,
@@ -127,6 +165,15 @@
127
165
  --dock-collapsed-summary-min-size,
128
166
  var(--dock-layer-height, 2.5rem)
129
167
  );
168
+ block-size: var(
169
+ --dock-collapsed-summary-min-size,
170
+ var(--dock-layer-height, 2.5rem)
171
+ );
172
+ height: var(
173
+ --dock-collapsed-summary-min-size,
174
+ var(--dock-layer-height, 2.5rem)
175
+ );
176
+ aspect-ratio: 1;
130
177
  justify-content: center;
131
178
  }
132
179
 
@@ -146,6 +193,35 @@
146
193
  --dock-expand-t: var(--dock-morph-t);
147
194
  }
148
195
 
196
+ /* AY.W-DOCK-NAV B15 — the EMPTY-collapsed-summary trap. A dock with a
197
+ `#persistent` control but NO `#collapsed` slot (the overview first-section
198
+ dock) still renders a `.dock-layer--summary` pane that floors to the circle
199
+ min-width — so collapsed it read as a WIDE pill: the persistent Home glyph on
200
+ the LEFT + an empty circle of dead space on the RIGHT (the measured 84×50
201
+ oval). Expanding then grew the content INTO that right-side void, so the
202
+ morph read "from the right" not center-out (the user's B15). When the summary
203
+ slot is EMPTY (`:not(:has(*))`), collapse it to zero width + no floor so the
204
+ persistent control stands alone as the collapsed circle, and the morph grows
205
+ symmetrically about the persistent. An empty Vue `#collapsed` slot renders
206
+ ZERO child nodes (no whitespace text node either), so `:empty` matches it
207
+ exactly — and a flat `:empty` avoids the nested-`:has()` form Lightning CSS
208
+ drops. An authored `#collapsed` slot (non-empty summary) keeps its circle
209
+ pill. */
210
+ .glass-dock.collapsed .dock-layer--summary:empty {
211
+ min-width: 0;
212
+ inline-size: 0;
213
+ padding: 0;
214
+ margin: 0;
215
+ border: 0;
216
+ }
217
+
218
+ /* The persistent control IS the collapsed pill in the empty-summary case — drop
219
+ the inter-region gap so the collapsed circle is exactly the persistent box. */
220
+ .glass-dock.collapsed:has(.dock-layer--summary:empty) .dock-persistent
221
+ + .dock-layers {
222
+ margin-inline-start: 0;
223
+ }
224
+
149
225
  /* AW.W3 — the collapsed-hover scale rides the unified dock spring vocabulary.
150
226
  The `scale var(--dock-motion-resize)` arm was added to the `.glass-dock`
151
227
  root transition above, so this hover scale settles on the SAME spring curve
@@ -64,6 +64,18 @@
64
64
  stacking-context guarantee). Covers every dock scale site. */
65
65
  scale: 1;
66
66
  position: relative;
67
+ /* AY.W-A11Y-PERF O-1 — engage the W55 bright-backdrop bucket BY DEFAULT on
68
+ the dock (the surface the user reported unreadable over light content). The
69
+ SELF-engage rule in dock/morph.css darkens the dock's OWN plate toward ink
70
+ unconditionally (a dock floats over arbitrary — frequently light — page
71
+ content). `dark` (the :root default) stays the inherited value a consumer
72
+ re-reads; the descendant/nested-glass reach uses the @container block. */
73
+ --glass-backdrop: light;
74
+ /* AY.W-A11Y-PERF O-4 — paint containment so the maximal-glass nested
75
+ backdrop-filter sample does not escape the dock box (the standard nested-
76
+ backdrop-cost mitigation; the Button-in-glass-in-dock stack re-samples the
77
+ already-blurred buffer at each level without it). */
78
+ contain: paint;
67
79
  display: inline-flex;
68
80
  align-items: center;
69
81
  /* AW.W1 — the dock does NOT establish a default inline-size container.
@@ -24,23 +24,21 @@
24
24
  toward `--scale-press-dock` settles on a NO-OVERSHOOT spring (Apple,
25
25
  "Designing Fluid Interfaces": default 100% damping — no bounce — for a tap;
26
26
  reserve bounce for surfaces driven by gesture MOMENTUM). The dock controls
27
- are tap surfaces (no momentum), so the press re-binds `--dock-press-spring`
28
- from the bouncy preset (`--spring-bouncy`, ~+20% overshoot, defined in
29
- tokens.css §-2) to `--spring-smooth` — the critically-damped (ζ≈1, ~0.4%
30
- peak) iOS tap curve. Token-routed (an existing spring preset, never a raw
31
- cubic-bezier); the `--duration-fast` prefix is kept so the squish-back stays
32
- quick. Every dock-control `scale var(--dock-press-spring)` press transition
33
- (and the select chevron's `rotate`) inherits this one binding. A future
34
- momentum-gated surface (none today) would override this back to a bouncy
35
- preset on its own scope. The `:where()` group keeps zero specificity so a
36
- consumer override of `--dock-press-spring` still wins. */
27
+ are tap surfaces (no momentum).
28
+
29
+ AY.W-DOCK2 (D6) — the per-surface re-point of `--dock-press-spring` to
30
+ `--spring-smooth` is DELETED here: the ROOT token (`tokens.css`) IS the §6
31
+ doctrine register now (`--spring-smooth`), so the re-point was a dead
32
+ byte-identical redeclaration — the exact per-surface fork the §6 doctrine
33
+ claims to have killed. The dock controls inherit the correct smooth
34
+ transform-press register straight from the ROOT token; this `:where()` group
35
+ keeps ONLY the small-tile specular sizing below. */
37
36
  :where(
38
37
  .dock-icon-button,
39
38
  .dock-tab-button,
40
39
  .dock-select-trigger,
41
40
  .dock-dropdown-trigger
42
41
  ) {
43
- --dock-press-spring: var(--duration-fast) var(--spring-smooth);
44
42
  /* AX.W45-TUNE C4/C5 — the small-tile specular sizing. The dock controls are
45
43
  ~40px tiles, a fraction of a card's plate, so the global 36% specular
46
44
  radius blooms a tile-filling disc (the I.W6 finding). The family re-points
@@ -227,7 +225,22 @@
227
225
  [data-size="control"]
228
226
  ) {
229
227
  --dark-mode-toggle-size: var(--dock-control-size, var(--size-icon-btn));
230
- --dark-mode-toggle-padding: var(--dock-icon-padding, 0);
228
+ /* AY.W-DOCK-CHROME §2 — the in-dock toggle GLYPH insets to the nav-glyph
229
+ register. The toggle SVG carries `h-full w-full` (the utility layer, which
230
+ BEATS the component-layer `> svg { width: --dock-control-glyph-size }` rule
231
+ below), so the glyph fills whatever the PADDED box leaves. Prior the in-dock
232
+ padding fell to `var(--dock-icon-padding, 0)` (the token is never defined →
233
+ 0 pad → the glyph filled the whole 40px box edge-to-edge, ~2.5× the 16-20px
234
+ nav glyphs — the user's "too large" read). Pad the box by HALF the box↔glyph
235
+ difference so the `h-full` SVG lands at exactly `--dock-icon-glyph` (the
236
+ `--dock-scale`-keyed size the nav icons paint) — optically UNIFORM with the
237
+ nav glyphs through the utility-win path, not fighting it. */
238
+ --dark-mode-toggle-padding: calc(
239
+ (
240
+ var(--dock-control-size, var(--size-icon-btn)) -
241
+ var(--dock-icon-glyph, 1.25rem)
242
+ ) / 2
243
+ );
231
244
  }
232
245
 
233
246
  /* AX.W06 USF-2 — the dock-control optical-size contract. The