@mkbabb/glass-ui 4.0.0 → 4.0.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 (394) hide show
  1. package/README.md +3 -1
  2. package/dist/CardAction-CW7a0m8M.js +253 -0
  3. package/dist/{CommandShortcut-DdtWXxOK.js → CommandShortcut-DvZNQ_HF.js} +4 -4
  4. package/dist/ConfiguratorRow-BR4l-ixA.js +143 -0
  5. package/dist/{ContextMenuContent-ON3x7cuk.js → ContextMenuContent-uWnVxDab.js} +1 -1
  6. package/dist/{ContextMenuSubContent-B0Vs6atR.js → ContextMenuSubContent-xol4sD2q.js} +32 -37
  7. package/dist/{DataTable-C464Zbqd.js → DataTable-CuKwF7wr.js} +4 -4
  8. package/dist/{DialogContent-DDE6pQBU.js → DialogContent-DcKK8k9i.js} +5 -5
  9. package/dist/{DialogFooter-8eZbdmPc.js → DialogFooter-BZNX5aVr.js} +3 -3
  10. package/dist/{FadingScroll-DwNnvKMs.js → FadingScroll-DI6hQhT9.js} +1 -1
  11. package/dist/{HoverCardContent-DkMaQzH5.js → HoverCardContent-b2uaAMRR.js} +1 -1
  12. package/dist/{HoverPopover-Dpzwvc4t.js → HoverPopover-CbqbNwgU.js} +2 -2
  13. package/dist/{IconChip-BDw1j5mu.js → IconChip-BTD-nay5.js} +3 -2
  14. package/dist/{IconTooltip-DSjasZIt.js → IconTooltip-Bl8gFZ8d.js} +1 -1
  15. package/dist/{Input-DVG_J0ne.js → Input-h9v5LeXf.js} +1 -1
  16. package/dist/{MetricBadge-BpC0R_Ec.js → MetricBadge-RHdBP72w.js} +1 -1
  17. package/dist/Notification-VUwexFUf.js +43 -0
  18. package/dist/NumberFieldContent-Cq7EzX-U.js +138 -0
  19. package/dist/{PopoverContent-BTorlp--.js → PopoverContent-DL7E6vJP.js} +4 -4
  20. package/dist/{Progress-hAT4gqGH.js → Progress-DctG61iZ.js} +4 -4
  21. package/dist/{ScrollingText-CUVFTWk2.js → ScrollingText-yOpBzFYq.js} +2 -2
  22. package/dist/{SelectScrollDownButton-C1jb3b3K.js → SelectScrollDownButton-CrA8F0iV.js} +18 -19
  23. package/dist/Toaster-Bw4xR8xV.js +274 -0
  24. package/dist/{ToggleGroupItem-Dzk9hWsF.js → ToggleGroupItem-pEM9vIhs.js} +50 -37
  25. package/dist/{TooltipProvider-B3MkB_8P.js → TooltipProvider-rzvnXz60.js} +1 -1
  26. package/dist/animated-digit.js +2 -2
  27. package/dist/api/index.d.ts +8 -3
  28. package/dist/api/types-extra.d.ts +6 -0
  29. package/dist/aurora.js +885 -242
  30. package/dist/badge.js +1 -1
  31. package/dist/border-progress.d.ts +1 -0
  32. package/dist/border-progress.js +106 -0
  33. package/dist/{button-BNDWhAZb.js → button-DYCUa-tH.js} +71 -26
  34. package/dist/button.js +1 -1
  35. package/dist/canvas.js +2 -2
  36. package/dist/card.js +2 -2
  37. package/dist/carousel.js +93 -110
  38. package/dist/collapsible.js +1 -1
  39. package/dist/command.js +1 -1
  40. package/dist/compile-CQEFRTmx.js +19 -0
  41. package/dist/components/custom/aurora/composables/atoms-fields.d.ts +39 -0
  42. package/dist/components/custom/aurora/composables/auroraFallbackGround.d.ts +108 -0
  43. package/dist/components/custom/aurora/composables/runtime.d.ts +19 -0
  44. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +5 -1
  45. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +51 -0
  46. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +29 -0
  47. package/dist/components/custom/aurora/constants/budget.d.ts +21 -0
  48. package/dist/components/custom/aurora/constants/presets.d.ts +2 -2
  49. package/dist/components/custom/aurora/constants/renderMode.d.ts +63 -12
  50. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -0
  51. package/dist/components/custom/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -0
  52. package/dist/components/custom/aurora/constants/shaders/procedural-color.wgsl.d.ts +4 -0
  53. package/dist/components/custom/aurora/index.d.ts +2 -1
  54. package/dist/components/custom/border-progress/BorderProgress.vue.d.ts +46 -0
  55. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +22 -0
  56. package/dist/components/custom/border-progress/constants.d.ts +59 -0
  57. package/dist/components/custom/border-progress/index.d.ts +4 -0
  58. package/dist/components/custom/concentric/Concentric.vue.d.ts +39 -0
  59. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +11 -0
  60. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +13 -0
  61. package/dist/components/custom/concentric/composables/ringField.d.ts +44 -0
  62. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +13 -0
  63. package/dist/components/custom/concentric/composables/useConcentric.d.ts +35 -0
  64. package/dist/components/custom/concentric/constants.d.ts +43 -0
  65. package/dist/components/custom/concentric/index.d.ts +5 -0
  66. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +4 -0
  67. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -0
  68. package/dist/components/custom/dock/DockIconButton.vue.d.ts +13 -4
  69. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +10 -2
  70. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +75 -0
  71. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -0
  72. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +38 -0
  73. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +41 -0
  74. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +24 -0
  75. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +34 -0
  76. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -0
  77. package/dist/components/custom/dot-flow-field/constants.d.ts +48 -0
  78. package/dist/components/custom/dot-flow-field/index.d.ts +5 -0
  79. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -0
  80. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +20 -0
  81. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -0
  82. package/dist/components/custom/easing/EasingConfigurator.vue.d.ts +33 -0
  83. package/dist/components/custom/easing/EasingPicker.vue.d.ts +49 -0
  84. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +75 -0
  85. package/dist/components/custom/easing/constants.d.ts +28 -0
  86. package/dist/components/custom/easing/index.d.ts +3 -0
  87. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +12 -2
  88. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +39 -0
  89. package/dist/components/custom/fourier-field/constants.d.ts +7 -0
  90. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +1 -1
  91. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +4 -2
  92. package/dist/components/custom/goo-blob/composables/uniformBridgeWGPU.d.ts +24 -0
  93. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +18 -11
  94. package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +23 -0
  95. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -0
  96. package/dist/components/custom/handmark/HandMark.vue.d.ts +1 -1
  97. package/dist/components/custom/icon-chip/types.d.ts +11 -1
  98. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +3 -1
  99. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
  100. package/dist/components/custom/spa-view/SpaView.vue.d.ts +50 -0
  101. package/dist/components/custom/spa-view/index.d.ts +2 -0
  102. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +10 -0
  103. package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +42 -0
  104. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +1 -1
  105. package/dist/components/ui/_shared/menuItemVariants.d.ts +1 -1
  106. package/dist/components/ui/badge/index.d.ts +1 -1
  107. package/dist/components/ui/button/Button.vue.d.ts +5 -2
  108. package/dist/components/ui/button/index.d.ts +2 -2
  109. package/dist/components/ui/card/Card.vue.d.ts +34 -4
  110. package/dist/components/ui/card/CardHeader.vue.d.ts +42 -16
  111. package/dist/components/ui/card/ScrollCard.vue.d.ts +33 -0
  112. package/dist/components/ui/card/ScrollCardHeader.vue.d.ts +17 -0
  113. package/dist/components/ui/card/index.d.ts +2 -0
  114. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
  115. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
  116. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +2 -2
  117. package/dist/components/ui/command/Command.vue.d.ts +1 -1
  118. package/dist/components/ui/drawer/Drawer.vue.d.ts +46 -33
  119. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +7 -8
  120. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +2 -2
  121. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +1 -1
  122. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +2 -2
  123. package/dist/components/ui/drawer/composables/drawerSnapContext.d.ts +26 -0
  124. package/dist/components/ui/drawer/composables/useDrawerSnap.d.ts +17 -0
  125. package/dist/components/ui/drawer/constants.d.ts +45 -0
  126. package/dist/components/ui/drawer/index.d.ts +23 -15
  127. package/dist/components/ui/focus-scope/FocusScope.vue.d.ts +20 -0
  128. package/dist/components/ui/focus-scope/index.d.ts +2 -0
  129. package/dist/components/ui/index.d.ts +1 -0
  130. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +3 -2
  131. package/dist/components/ui/select/SelectContent.vue.d.ts +1 -1
  132. package/dist/components/ui/sheet/index.d.ts +1 -1
  133. package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
  134. package/dist/components/ui/toast/Toast.vue.d.ts +5 -2
  135. package/dist/components/ui/toast/use-toast.d.ts +14 -0
  136. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  137. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +13 -6
  138. package/dist/composables/glass/index.d.ts +5 -2
  139. package/dist/composables/glass/useSpecularPointer.d.ts +33 -0
  140. package/dist/composables/glass/useSpecularTracking.d.ts +20 -0
  141. package/dist/composables/glass/vSpecular.d.ts +2 -0
  142. package/dist/composables/glass/webgl/shaders/flow.glsl.d.ts +1 -0
  143. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -0
  144. package/dist/composables/glass/webgpu/index.d.ts +2 -0
  145. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +54 -0
  146. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +84 -0
  147. package/dist/composables/motion/core/index.d.ts +1 -0
  148. package/dist/composables/motion/index.d.ts +4 -0
  149. package/dist/composables/motion/useDockCtaReceive.d.ts +59 -0
  150. package/dist/composables/motion/useDragMorph.d.ts +77 -0
  151. package/dist/composables/motion/useLiquidFlex.d.ts +11 -0
  152. package/dist/composables/motion/useLiquidPress.d.ts +71 -0
  153. package/dist/composables/motion/useLiquidReveal.d.ts +51 -0
  154. package/dist/composables/motion/useNumericTransition.d.ts +3 -3
  155. package/dist/composables/motion/usePointerVelocityField.d.ts +98 -0
  156. package/dist/concentric.d.ts +1 -0
  157. package/dist/concentric.js +562 -0
  158. package/dist/configurator.js +3 -2
  159. package/dist/confirm-dialog.js +22 -24
  160. package/dist/constellation.js +11 -11
  161. package/dist/context-menu.js +3 -3
  162. package/dist/controls.js +1 -1
  163. package/dist/createCanvasLifecycle-CHD5XrDW.js +82 -0
  164. package/dist/data-table.js +1 -1
  165. package/dist/dialog.js +2 -2
  166. package/dist/dock.js +564 -457
  167. package/dist/{dockContext-Bu1Avy-a.js → dockContext-BNfyPLe9.js} +1 -1
  168. package/dist/dom.js +5 -5
  169. package/dist/dot-flow-field.d.ts +1 -0
  170. package/dist/dot-flow-field.js +604 -0
  171. package/dist/drawer.d.ts +1 -0
  172. package/dist/drawer.js +380 -0
  173. package/dist/{dropdown-menu-BJ7E9js_.js → dropdown-menu-CofSZuk8.js} +14 -15
  174. package/dist/dropdown-menu.js +1 -1
  175. package/dist/easing.d.ts +1 -0
  176. package/dist/easing.js +463 -0
  177. package/dist/expandable-container.js +7 -4
  178. package/dist/fading-scroll.js +1 -1
  179. package/dist/focus-scope.d.ts +1 -0
  180. package/dist/focus-scope.js +23 -0
  181. package/dist/forms.js +7 -7
  182. package/dist/fourier-field.js +128 -116
  183. package/dist/fourier-math.js +1 -1
  184. package/dist/glass-panel.js +2 -2
  185. package/dist/glass-ui.css +1 -1
  186. package/dist/glass-ui.js +149 -341
  187. package/dist/goo-blob.js +830 -224
  188. package/dist/handmark.js +2 -2
  189. package/dist/header-ribbon.js +1 -1
  190. package/dist/hover-card.js +1 -1
  191. package/dist/hover-popover.js +1 -1
  192. package/dist/icon-chip.js +1 -1
  193. package/dist/icon-tooltip.js +1 -1
  194. package/dist/index.d.ts +1 -1
  195. package/dist/instrument-chassis.js +1 -1
  196. package/dist/label.js +1 -1
  197. package/dist/labeled-field.js +6 -6
  198. package/dist/metric-badge.js +1 -1
  199. package/dist/metric-cell.js +1 -1
  200. package/dist/metric-stack.js +4 -8
  201. package/dist/motion-core.js +36 -36
  202. package/dist/motion-curves.js +1 -1
  203. package/dist/motion.js +157 -55
  204. package/dist/notification.js +1 -1
  205. package/dist/number-field.js +1 -1
  206. package/dist/pager-dots.js +1 -1
  207. package/dist/paper-backdrop.js +1 -1
  208. package/dist/popover.js +1 -1
  209. package/dist/{compile-EXXzEr1q.js → procedural-color.glsl-CIFsJhwI.js} +1 -155
  210. package/dist/procedural-color.wgsl-CToRHugY.js +224 -0
  211. package/dist/progress.js +1 -1
  212. package/dist/pulse.js +1 -1
  213. package/dist/reactive.js +2 -2
  214. package/dist/scrolling-text.js +1 -1
  215. package/dist/search.js +9 -11
  216. package/dist/select.js +3 -3
  217. package/dist/separator.js +1 -1
  218. package/dist/{sheet-CquRYOAw.js → sheet-tZMg0E0w.js} +5 -5
  219. package/dist/sheet.js +1 -1
  220. package/dist/{slider-DQ95MET2.js → slider-DVb4HXU-.js} +3 -3
  221. package/dist/slider.js +1 -1
  222. package/dist/sortable-list.js +3 -3
  223. package/dist/spa-view.d.ts +1 -0
  224. package/dist/spa-view.js +46 -0
  225. package/dist/styles/animations.css +33 -9
  226. package/dist/styles/border-progress.css +109 -0
  227. package/dist/styles/cards.css +76 -0
  228. package/dist/styles/components.css +1 -1
  229. package/dist/styles/critical-partition.mjs +140 -0
  230. package/dist/styles/critical.css +12 -0
  231. package/dist/styles/deferred.css +31 -0
  232. package/dist/styles/dock/density.css +45 -0
  233. package/dist/styles/dock/layers.css +54 -30
  234. package/dist/styles/dock/morph.css +124 -7
  235. package/dist/styles/dock/overflow.css +16 -2
  236. package/dist/styles/dock/shell.css +54 -16
  237. package/dist/styles/dock.css +32 -0
  238. package/dist/styles/drawer.css +81 -35
  239. package/dist/styles/glass/deep.css +44 -0
  240. package/dist/styles/glass/ladder.css +87 -31
  241. package/dist/styles/glass/material.css +78 -15
  242. package/dist/styles/glass/reveal.css +136 -0
  243. package/dist/styles/glass/rim.css +100 -0
  244. package/dist/styles/glass/surfaces.css +101 -3
  245. package/dist/styles/glass-refract.css +96 -44
  246. package/dist/styles/glass-specular-track.css +7 -0
  247. package/dist/styles/glass.css +3 -0
  248. package/dist/styles/hover-popover.css +7 -6
  249. package/dist/styles/icon-chip.css +77 -15
  250. package/dist/styles/index.css +21 -9
  251. package/dist/styles/instrument-chassis.css +66 -3
  252. package/dist/styles/scroll-choreography.css +300 -0
  253. package/dist/styles/segmented-tabs.css +31 -0
  254. package/dist/styles/theme/bridges.css +11 -0
  255. package/dist/styles/theme/literals.css +11 -2
  256. package/dist/styles/theme/radius.css +6 -1
  257. package/dist/styles/tokens/dark-arm.css +98 -26
  258. package/dist/styles/tokens/glass-deep.css +75 -0
  259. package/dist/styles/tokens/glass-fx.css +333 -0
  260. package/dist/styles/tokens/glass.css +39 -319
  261. package/dist/styles/tokens/light-dark.css +15 -2
  262. package/dist/styles/tokens/offsets.css +116 -0
  263. package/dist/styles/tokens/on-glass-fg.css +39 -0
  264. package/dist/styles/tokens/property-regs.css +127 -0
  265. package/dist/styles/tokens/scale-paper.css +117 -89
  266. package/dist/styles/tokens/scheme-motion.css +70 -32
  267. package/dist/styles/tokens/scroll-tokens.css +123 -0
  268. package/dist/styles/tokens/{offsets-sizing.css → sizing.css} +37 -100
  269. package/dist/styles/tokens.css +9 -3
  270. package/dist/styles/typography/semantic.css +8 -8
  271. package/dist/styles/typography/utilities.css +22 -7
  272. package/dist/styles/utilities/animate.css +27 -24
  273. package/dist/styles/utilities/base-misc.css +255 -0
  274. package/dist/styles/utilities/base.css +47 -261
  275. package/dist/styles/utilities/btn.css +3 -1
  276. package/dist/styles/utilities/metal.css +189 -0
  277. package/dist/styles/utilities.css +14 -7
  278. package/dist/switch.js +1 -1
  279. package/dist/tabs.js +220 -107
  280. package/dist/timeline.js +2 -2
  281. package/dist/toast.js +1 -1
  282. package/dist/toggle-group.js +1 -1
  283. package/dist/tooltip.js +1 -1
  284. package/dist/typewriter.js +1 -1
  285. package/dist/useCanvas2D-B8w_E3Rr.js +83 -0
  286. package/dist/useConfiguratorState-DNlOh6c8.js +161 -0
  287. package/dist/useDragMorph-DgxnsVJz.js +102 -0
  288. package/dist/useLiquidPress-kfb4KX79.js +39 -0
  289. package/dist/usePointerVelocityField-JbRd5CrM.js +137 -0
  290. package/dist/useSpring-C0jyvEJB.js +40 -0
  291. package/dist/useSpringMount-q1amq1SJ.js +71 -0
  292. package/dist/useSpringPress-BsqPr7FJ.js +34 -0
  293. package/dist/{useTouchGate-28Tk2-t2.js → useTouchGate-CBZTD4SD.js} +1 -1
  294. package/dist/vSpecular-CQFmLNzA.js +68 -0
  295. package/dist/vendor-CKmzio-i.js +226 -0
  296. package/dist/watercolor-dot.js +2 -2
  297. package/package.json +126 -22
  298. package/src/styles/animations.css +33 -9
  299. package/src/styles/border-progress.css +109 -0
  300. package/src/styles/cards.css +76 -0
  301. package/src/styles/critical-partition.mjs +140 -0
  302. package/src/styles/dock/density.css +45 -0
  303. package/src/styles/dock/layers.css +54 -30
  304. package/src/styles/dock/morph.css +124 -7
  305. package/src/styles/dock/overflow.css +16 -2
  306. package/src/styles/dock/shell.css +54 -16
  307. package/src/styles/dock.css +32 -0
  308. package/src/styles/drawer.css +81 -35
  309. package/src/styles/glass/deep.css +44 -0
  310. package/src/styles/glass/ladder.css +87 -31
  311. package/src/styles/glass/material.css +78 -15
  312. package/src/styles/glass/reveal.css +136 -0
  313. package/src/styles/glass/rim.css +100 -0
  314. package/src/styles/glass/surfaces.css +101 -3
  315. package/src/styles/glass-refract.css +96 -44
  316. package/src/styles/glass-specular-track.css +7 -0
  317. package/src/styles/glass.css +3 -0
  318. package/src/styles/hover-popover.css +7 -6
  319. package/src/styles/icon-chip.css +77 -15
  320. package/src/styles/index.css +12 -0
  321. package/src/styles/instrument-chassis.css +66 -3
  322. package/src/styles/scroll-choreography.css +300 -0
  323. package/src/styles/segmented-tabs.css +31 -0
  324. package/src/styles/theme/bridges.css +11 -0
  325. package/src/styles/theme/literals.css +11 -2
  326. package/src/styles/theme/radius.css +6 -1
  327. package/src/styles/tokens/dark-arm.css +98 -26
  328. package/src/styles/tokens/glass-deep.css +75 -0
  329. package/src/styles/tokens/glass-fx.css +333 -0
  330. package/src/styles/tokens/glass.css +39 -319
  331. package/src/styles/tokens/light-dark.css +15 -2
  332. package/src/styles/tokens/offsets.css +116 -0
  333. package/src/styles/tokens/on-glass-fg.css +39 -0
  334. package/src/styles/tokens/property-regs.css +127 -0
  335. package/src/styles/tokens/scale-paper.css +117 -89
  336. package/src/styles/tokens/scheme-motion.css +70 -32
  337. package/src/styles/tokens/scroll-tokens.css +123 -0
  338. package/src/styles/tokens/{offsets-sizing.css → sizing.css} +37 -100
  339. package/src/styles/tokens.css +9 -3
  340. package/src/styles/typography/semantic.css +8 -8
  341. package/src/styles/typography/utilities.css +22 -7
  342. package/src/styles/utilities/animate.css +27 -24
  343. package/src/styles/utilities/base-misc.css +255 -0
  344. package/src/styles/utilities/base.css +47 -261
  345. package/src/styles/utilities/btn.css +3 -1
  346. package/src/styles/utilities/metal.css +189 -0
  347. package/src/styles/utilities.css +14 -7
  348. package/dist/CardAction-XH4YBVEK.js +0 -158
  349. package/dist/Notification-DKjKsQq8.js +0 -100
  350. package/dist/NumberFieldContent-1VtwDSgf.js +0 -145
  351. package/dist/Toaster-Bm_HQSpc.js +0 -263
  352. package/dist/check-njhk-vfu.js +0 -7
  353. package/dist/chevron-down-DKkxb4VV.js +0 -7
  354. package/dist/chevron-right-CPXbqQQz.js +0 -7
  355. package/dist/chevron-up-n_24SqI-.js +0 -7
  356. package/dist/createLucideIcon-DydS2qgk.js +0 -43
  357. package/dist/minimize-2-BV31Ob_h.js +0 -38
  358. package/dist/search-BSGrf2Sk.js +0 -12
  359. package/dist/useCanvas2D-ClrQuZtp.js +0 -96
  360. package/dist/useConfiguratorState-kiIlun8I.js +0 -303
  361. package/dist/useSpecularTracking-Bo5su68i.js +0 -32
  362. package/dist/useSpringMount-CvopqiFr.js +0 -108
  363. package/dist/useViewTransition-COsPjQVZ.js +0 -47
  364. package/dist/x-BUwTKe50.js +0 -10
  365. /package/dist/{CollapsibleContent-C_s6fG7r.js → CollapsibleContent-68dEXIAl.js} +0 -0
  366. /package/dist/{InstrumentChassis-UUJX0-mW.js → InstrumentChassis-Bx0F_q5g.js} +0 -0
  367. /package/dist/{Label-Ck9SWEKM.js → Label-C2ejNWeC.js} +0 -0
  368. /package/dist/{ModalOverlay-CkPRRgl_.js → ModalOverlay-D1VrWyoi.js} +0 -0
  369. /package/dist/{PaperBackdrop-nBKe0vkB.js → PaperBackdrop-Vf3tlpvd.js} +0 -0
  370. /package/dist/{SelectGroup-Dcczq44n.js → SelectGroup-DwwjicPY.js} +0 -0
  371. /package/dist/{SelectSeparator-DK2y1Bun.js → SelectSeparator-DXswVdRz.js} +0 -0
  372. /package/dist/{Separator-BArl4OaB.js → Separator-pKF0oA4M.js} +0 -0
  373. /package/dist/{Switch-Dr--uLGH.js → Switch-CwYNf8bo.js} +0 -0
  374. /package/dist/{_plugin-vue_export-helper-CBt_VvXa.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
  375. /package/dist/{badge-UILT_3pZ.js → badge-D9XWW4GT.js} +0 -0
  376. /package/dist/{createContext-B2RaZ-b8.js → createContext-CpBNTRMI.js} +0 -0
  377. /package/dist/{math-DeuJwLFx.js → math-BINYmg5z.js} +0 -0
  378. /package/dist/{menuItemVariants-DWRQXBxJ.js → menuItemVariants-D8VNHq22.js} +0 -0
  379. /package/dist/{prng-Cg22zv8g.js → prng-Za0Rmgag.js} +0 -0
  380. /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CUyHr5Uu.js} +0 -0
  381. /package/dist/{springPresets-WXaLbu8u.js → springPresets-CFQGQfdl.js} +0 -0
  382. /package/dist/{useAnimatedNumber-C_3wZLx4.js → useAnimatedNumber-BfUq2bUM.js} +0 -0
  383. /package/dist/{useInterval-CNdua40W.js → useInterval-CvK1mL92.js} +0 -0
  384. /package/dist/{useLiquidFlex-C12hXwOZ.js → useLiquidFlex-mZPMiNXh.js} +0 -0
  385. /package/dist/{useRAFLoop-CdwJ7284.js → useRAFLoop-UYa4zoiN.js} +0 -0
  386. /package/dist/{useResizeObserver-V6nq5gJb.js → useResizeObserver-Bpoi7tRE.js} +0 -0
  387. /package/dist/{useResolveTokenColor-NUG2zYAW.js → useResolveTokenColor-vAylyR0x.js} +0 -0
  388. /package/dist/{useSortable-BVqlJRBR.js → useSortable-DHjtZSEd.js} +0 -0
  389. /package/dist/{useSurfaceAxis-CMnF2zHb.js → useSurfaceAxis-g0NloYEF.js} +0 -0
  390. /package/dist/{useTextHighlight-NmBM5V_4.js → useTextHighlight-CWEi25hf.js} +0 -0
  391. /package/dist/{useTimer-B_PAasDL.js → useTimer-BHJOKr35.js} +0 -0
  392. /package/dist/{useUserInvalidAria-CDfJuakL.js → useUserInvalidAria-y5namzeE.js} +0 -0
  393. /package/dist/{useViewportReady-CvBcCYDf.js → useViewportReady-anbac3m6.js} +0 -0
  394. /package/dist/{vReveal-D9k0jADx.js → vReveal-Czsb7zQC.js} +0 -0
@@ -41,6 +41,21 @@
41
41
  initial-value: 0%;
42
42
  }
43
43
 
44
+ /* BB.W-BORDER-PROGRESS — the masked-conic BORDER ring's sweep fill. The conic
45
+ gradient (border-progress.css) reads `--border-progress-fill` as the swept
46
+ extent (`conic-gradient(…, transparent var(--border-progress-fill), …)`), so a
47
+ determinate progress INTERPOLATES the border ring (a bare unregistered var()
48
+ snaps the sweep; the registered typed <percentage> lets the engine animate the
49
+ gradient stop). `inherits: false` — each ring owns its own fill (the per-surface
50
+ ownership the specular cohort uses; a ringed parent must not push its fill onto a
51
+ child). `initial-value: 0%` is the safe resting ring (the unregistered fallback
52
+ paints it; the cross-fade collapses to it on a non-supporting engine). */
53
+ @property --border-progress-fill {
54
+ syntax: "<percentage>";
55
+ inherits: false;
56
+ initial-value: 0%;
57
+ }
58
+
44
59
  @property --phase-tint-amount {
45
60
  syntax: "<percentage>";
46
61
  inherits: true;
@@ -91,6 +106,71 @@
91
106
  initial-value: 0;
92
107
  }
93
108
 
109
+ /* BB.W-LENSING — the per-surface EDGE-glint angle channel. `--specular-angle` is
110
+ the pointer angle-from-center the edge-glint conic sweep reads (material.css);
111
+ `useSpecularPointer` writes it (the angle feed). `inherits: false` — the
112
+ per-element ownership discipline of the specular cohort above (each pseudo owns
113
+ its typed value; a parent's angle must never bleed into a child glass surface).
114
+ `initial-value: 0deg` is the static rest position (the rim glint sits top when
115
+ unwired — no ambient drift, no blowout). */
116
+ @property --specular-angle {
117
+ syntax: "<angle>";
118
+ inherits: false;
119
+ initial-value: 0deg;
120
+ }
121
+
122
+ /* BB.W-LENSING `--glass-refract` axis — RETIRED (DDR-LENS-BAKE, glass-refract.css).
123
+ The axis drove the `feDisplacementMap` `scale` by splicing `var(--glass-refract)`
124
+ between a head/tail `url()` pair. That construction never parsed as a
125
+ `backdrop-filter` (it emitted three tokens, not one url) AND broke consumer bundlers
126
+ (the tail `url("'…")` mis-resolved as a file path); a CSS url() string token cannot
127
+ carry a substituted `var()`, so a dynamic `scale` inside the mandatory single
128
+ self-contained data-URI is structurally impossible. The `scale` is now BAKED at 28
129
+ (the resting bend, byte-identical) — no axis, no `@property` reg. */
130
+
131
+ /* BB.W-GLASS-ACCENT — the THIRD disjoint glass axis: the per-INSTANCE
132
+ CHROMATIC-RIM tint. `--glass-accent` is a complete `<color>` (a consumer DATA
133
+ hue) that OKLab-tints a glass surface's RIM (the `--glass-material-rim` inset
134
+ ring + the per-rung `--glass-border-*`) and the `::before` specular catch-light
135
+ CORE — so the §F1 data-keyed colored hover (a chart cell whose surface glows
136
+ with that datum's series hue) is a ONE-LINE seam (`--glass-accent: <hue>;
137
+ --glass-accent-strength: <N%>` on the instance), not a hand-threaded
138
+ `border-color` + inline catch-light per consumer.
139
+
140
+ DISTINCT-not-fork of W55's `--glass-tint-source` (the WHOLE-PLATE BACKGROUND
141
+ legibility darken toward `--glass-tint-ink`): the accent is the RIM+GLINT
142
+ chromatic DECORATION axis (toward a consumer DATA hue, per-instance), it NEVER
143
+ writes the W55 cohort and NEVER tints the plate background. Three disjoint glass
144
+ axes: LEVEL (opacity+blur, AX.W54) · TINT (whole-plate legibility, W55) · ACCENT
145
+ (per-instance chromatic rim+glint, this wave).
146
+
147
+ • --glass-accent (<color>) — the consumer data hue. `inherits: true` (the
148
+ `--glass-level`-style cascading scalar — a host sets it on an ancestor to tint
149
+ a sub-tree; a consumer sets it per-INSTANCE on the surface). `initial-value:
150
+ transparent` is the NEUTRAL IDENTITY: a `color-mix(in oklab, X, transparent N)`
151
+ is byte-identical X at the resting end, so an UNSET surface paints exactly
152
+ today's warm-ink rim + warm-cream catch-light (the W2 neutral-fallback floor).
153
+
154
+ • --glass-accent-strength (<percentage>) — the bounded knob. `inherits: true`
155
+ (rides the accent down the same sub-tree). `initial-value: 0%` so the mix is a
156
+ provable no-op when unset (`color-mix(in oklab, X, <accent> 0%)` === X). The
157
+ consumer-set ceiling is a WHISPER at the rim, not a flooded plate — the demo
158
+ specimens engage ~40-55% (the rim/glint reads the hue while the warm-cream core
159
+ + the AA legibility survive; the `--glass-tint-strength-aa` ≤24% bounding
160
+ precedent, lifted here because the accent rides the THIN rim/glint not the
161
+ whole plate). A malformed override CLAMPS to 0% (the typed fail-safe). */
162
+ @property --glass-accent {
163
+ syntax: "<color>";
164
+ inherits: true;
165
+ initial-value: transparent;
166
+ }
167
+
168
+ @property --glass-accent-strength {
169
+ syntax: "<percentage>";
170
+ inherits: true;
171
+ initial-value: 0%;
172
+ }
173
+
94
174
  /* AX.W54 — the GLASS-FIRST single knob. `--glass-level` is the ONE clarity
95
175
  scalar threaded through BOTH glass ladders at their single sites (the
96
176
  `--glass-bg-*` opacity recipe + the `--glass-blur-*` radii). It is a typed,
@@ -114,6 +194,27 @@
114
194
  initial-value: 1;
115
195
  }
116
196
 
197
+ /* BB.W-DEEP-GLASS — the OPT-IN deep-glass DEPTH scalar. `--glass-depth` is the
198
+ `--glass-level` TWIN for the deep tier: a typed INHERITING <number> so a host
199
+ sets it on any ancestor to retune the deep tier's depth (the cascading-scalar
200
+ idiom, distinct from the per-element `inherits: false` specular cohort). The
201
+ deep recipe (tokens/glass-deep.css) LERPs both the blur radius AND the saturate
202
+ between the calm `floating` endpoint (depth 0 ≡ the calm ceiling) and the Apple-
203
+ deep endpoint (depth 1 ≡ saturate 1.5 / blur 16px), so the deep blur is
204
+ `--glass-depth`-DRIVEN (the D1 axis assert — never a baked literal) and animates
205
+ smoothly. `initial-value: 1` is the resting deep magnitude: a `.glass-deep`
206
+ surface paints at the full Apple-deep register by default; a consumer dials
207
+ `--glass-depth: 0.5` to land it half-way to the calm floating rung. SEPARATE
208
+ from `--glass-level` (opacity+blur clarity), `--glass-tint-*` (legibility), and
209
+ `--glass-refract` (lens displacement) — the disjoint depth axis. The deep tier
210
+ COMPOSES `--glass-level` too (the deep blur scales it), so the opaque escape +
211
+ the a11y brackets reach the deep plate through the ONE level path. */
212
+ @property --glass-depth {
213
+ syntax: "<number>";
214
+ inherits: true;
215
+ initial-value: 1;
216
+ }
217
+
117
218
  /* AX.W51 D18 — the master comfortable-sizing scalar registered typed. The
118
219
  `<number>` syntax guarantees `calc(<base> * var(--ui-scale))` is always valid (a
119
220
  malformed override CLAMPS to the initial value 1, not an invalidated calc — the
@@ -152,6 +253,13 @@
152
253
  --glass-specular-intensity-rest: 0;
153
254
  --glass-specular-intensity-hover: 0.1;
154
255
  --glass-specular-intensity-active: 0.16;
256
+ /* BB.W-BUTTON-GLASS (d) — the BUTTON-SCOPED hover gleam bump. The lit glass
257
+ button should read a notch brighter at the grazing edge than the global
258
+ hover whisper (0.10). `.btn-glass` re-points its own
259
+ `--glass-specular-intensity-hover` to this knob (surfaces.css), so ONLY the
260
+ button lifts — the global cohort above is UNTOUCHED. A consumer retints the
261
+ button gleam from this ONE override. */
262
+ --glass-specular-btn-hover: 0.14;
155
263
  }
156
264
 
157
265
  /* Over the deep canvas `plus-lighter` still lifts, so the dark arm runs a touch
@@ -159,4 +267,23 @@
159
267
  .dark {
160
268
  --glass-specular-intensity-hover: 0.08;
161
269
  --glass-specular-intensity-active: 0.12;
270
+ /* The button bump rides a touch softer in dark too (the dark hover is 0.08;
271
+ the button reads ~0.11, still a notch above the global whisper). */
272
+ --glass-specular-btn-hover: 0.11;
273
+ }
274
+
275
+ /* BB.W-BUTTON-GLASS (b)/(e) — the press DRIVE scalar. ONE typed 0..1 custom
276
+ property Button.vue writes off the `useSpringPress` spring (0 released → 1
277
+ pressed, with the ~5% overshoot the spring carries). It is the SINGLE drive the
278
+ press SQUISH (the `useLiquidFlex` reciprocal X/Y deform), the coupled specular/
279
+ brightness lift, and the optional `.glass-refract` lens-swell all read — the "one
280
+ drive, the glass deforms under press" read. Registered typed so a `transition`/
281
+ downstream `calc()` interpolates the VALUE (number), not the text. `inherits:
282
+ true` so the host-written value reaches the `.glass-material::before` pseudo +
283
+ the coupled rules. `initial-value: 0` so an unwired/SSR button is the static
284
+ rest frame (the no-JS CSS `.tap-squish` scale floor still presses). */
285
+ @property --glass-btn-press-t {
286
+ syntax: "<number>";
287
+ inherits: true;
288
+ initial-value: 0;
162
289
  }
@@ -67,6 +67,20 @@
67
67
  0 0 8px color-mix(in srgb, var(--ring) 15%, transparent);
68
68
  --focus-ring: var(--focus-ring-shadow);
69
69
 
70
+ /* BB.W-INVALID-RING — the destructive twin of --focus-ring-shadow. The
71
+ aria-invalid ring is ONE register: every form control (Input/Textarea/
72
+ NumberField via `.input-pill`, SelectTrigger, ComboboxInput, TagsInput)
73
+ reads `box-shadow: var(--invalid-ring)` instead of re-spelling the recipe
74
+ inline. ONE geometry (the SAME `--focus-ring-width`), ONE tint knob
75
+ (`--invalid-ring-tint`, the documented retint axis), resolving
76
+ `var(--destructive)` so a dark `--destructive` re-anchor flows through. A
77
+ consumer retints every invalid ring library-wide from a single
78
+ `:root { --invalid-ring-tint: … }` override — the token-first axis
79
+ `--focus-ring-shadow` already grants the focus ring. */
80
+ --invalid-ring-tint: 35%;
81
+ --invalid-ring: 0 0 0 var(--focus-ring-width)
82
+ color-mix(in srgb, var(--destructive) var(--invalid-ring-tint), transparent);
83
+
70
84
  /* ═══════════════════════════════════════════════
71
85
  §12 PAPER TEXTURES
72
86
  ═══════════════════════════════════════════════ */
@@ -80,6 +94,45 @@
80
94
  --paper-clean-texture: url("data:image/svg+xml,%3Csvg width='200' height='200' viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
81
95
  --paper-aged-texture: url("data:image/svg+xml,%3Csvg width='200' height='200' viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.5' numOctaves='5' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.06'/%3E%3C/svg%3E");
82
96
 
97
+ /* BB.W-PAPER-GRID-TEXTURE — the GEOMETRIC half of the paper-cascade, the
98
+ peer of the organic turbulence above. Where `--paper-*-texture` are
99
+ feTurbulence grain fields, this is a two-frequency engineering-paper
100
+ grid: a 32px MINOR cell + a 128px MAJOR rule (the 4×-major blueprint
101
+ vocabulary the demo `.story-bg-grid` speaks, re-expressed as a library
102
+ token so a document-register card can opt its INTERIOR ground into the
103
+ line-field, not only the page margin). Unlike the organic SVG textures
104
+ (a baked-at-parse `opacity` URI), the grid is a STATIC `background-image`
105
+ gradient-STACK — a one-time compositor-cached paint, NEVER a per-frame
106
+ repaint. The line INK reads a `color-mix(… var(--foreground) N%, …)` so
107
+ it composes against the warm ink identity and re-tints with `--foreground`
108
+ in lockstep — never a hardcoded `hsl()` (the no-gray / token-first
109
+ floor). The ambient through-card strength is the ONE knob
110
+ `--paper-grid-opacity` (~0.08, the ask's "felt THROUGH the card ~0.08"):
111
+ the MINOR line ink scales off it directly and the MAJOR rule rides
112
+ `* 1.6` (the demo's 7%→12% engineering-paper weight step), so a consumer
113
+ retunes the whole grid from the single strength knob. (The strength lives
114
+ in the ink alpha, not a layer `opacity`, because the utility paints the
115
+ grid on the card's HOST `background-image` to avoid the two-pseudo-budget
116
+ contention with the grain `::after` / specular `::before` — see
117
+ cards.css.) */
118
+ --paper-grid-opacity: 0.08;
119
+ --paper-grid-texture-size: 32px;
120
+ --paper-grid-line: color-mix(
121
+ in srgb,
122
+ var(--foreground) calc(var(--paper-grid-opacity) * 100%),
123
+ transparent
124
+ );
125
+ --paper-grid-line-major: color-mix(
126
+ in srgb,
127
+ var(--foreground) calc(var(--paper-grid-opacity) * 160%),
128
+ transparent
129
+ );
130
+ --paper-grid-texture:
131
+ linear-gradient(to right, var(--paper-grid-line-major) 1px, transparent 1px),
132
+ linear-gradient(to bottom, var(--paper-grid-line-major) 1px, transparent 1px),
133
+ linear-gradient(to right, var(--paper-grid-line) 1px, transparent 1px),
134
+ linear-gradient(to bottom, var(--paper-grid-line) 1px, transparent 1px);
135
+
83
136
  /* ═══════════════════════════════════════════════
84
137
  §13 GOLD (accent family kept for consumers using it)
85
138
  ═══════════════════════════════════════════════ */
@@ -130,6 +183,38 @@
130
183
  --color-silver-dark: var(--silver-dark);
131
184
  --color-silver-deep: var(--silver-deep);
132
185
 
186
+ /* ═══════════════════════════════════════════════
187
+ §13c BRONZE (the THIRD brand-metal — BB.W-METAL-SHIMMER)
188
+ ═══════════════════════════════════════════════ */
189
+ /* The warm-brown patina quad — the third member of the gold·silver·bronze
190
+ brand-metal TRIAD (the medal triad, the gilt/aged "third place" figure, the
191
+ record-badge register). Gold (warm-yellow ~84°) + silver (cool-steel ~255°)
192
+ are the two poles; bronze is the warm-amber-brown ~54° register between them.
193
+ The cascade EXACTLY mirrors gold's and silver's (scale-paper raw → bridges
194
+ `--color-bronze*` alias → both dark arms); `-deep` is mode-invariant.
195
+
196
+ BA.W-NO-GRAY brand-metal EXCEPTION — bronze is the THIRD metal on the SAME
197
+ sanction silver carries (the ONE cool-neutral exception). Bronze is a WARM
198
+ metal identity with chroma ABOVE the warm floor: each rung resolves OKLab
199
+ C 0.072-0.112 (far above the STRONG_FLOOR 0.020) at hue ~49-60°, so it reads
200
+ as polished bronze MATERIAL, never a desaturated brown CAST (the W-NO-GRAY
201
+ "warm-not-tinted" bar). It is NOT a neutral — a low-chroma bronze would BE a
202
+ neutral and break the brand-metal read; the chroma is the metal. The hue sits
203
+ between gold and red-orange so it distinguishes from a dark gold at the rim. */
204
+ --bronze: oklch(0.620 0.092 54.0);
205
+ --bronze-light: oklch(0.760 0.112 60.0);
206
+ --bronze-dark: oklch(0.500 0.082 50.0);
207
+ /* The mode-INVARIANT deep bronze plate (mirrors `--gold-deep`/`--silver-deep`'s
208
+ contract — a fixed dark bronze so a white label clears ≥4.5:1 in BOTH modes;
209
+ it does NOT flip with `--foreground`). 8.36:1 white in light / 4.79:1 in dark
210
+ on the dark-arm-lifted rungs. The would-be saturated CTA twin of the metal. */
211
+ --bronze-deep: oklch(0.430 0.072 50.0);
212
+
213
+ --color-bronze: var(--bronze);
214
+ --color-bronze-light: var(--bronze-light);
215
+ --color-bronze-dark: var(--bronze-dark);
216
+ --color-bronze-deep: var(--bronze-deep);
217
+
133
218
  /* ═══════════════════════════════════════════════
134
219
  §14 RAINBOW PALETTE — oklch (AV.W16 TW2; mode-independent, no .dark
135
220
  mirror; hue preserved from the prior hsl() cadence)
@@ -267,6 +352,32 @@
267
352
  --metric-row-label-clamp-cqi: 5cqi;
268
353
  --metric-row-label-clamp-max: 2.75rem;
269
354
 
355
+ /* BB.W-CONTROL-TOKENS — the two CONSUMER-reach knobs (the no-`:deep`
356
+ precept, Design Axis 2). MetricRow internals a consumer must reach are
357
+ exposed as tokens, never an internal a `:deep()` overrides.
358
+
359
+ • `--metric-row-label-align` — the label `text-align`. Default `left`
360
+ (byte-identical to the prior render). A cert-grid consumer building a
361
+ labelled ledger sets `right` at `:root`/a parent/per-row for a
362
+ right-aligned fixed seam — cascades into `.metric-row__label` with no
363
+ `:deep()`.
364
+ • `--metric-row-icon-color` — the leading-glyph ink (the MetricCell
365
+ `iconColor`→IconChip precedent, mirrored as a token since MetricRow
366
+ ships a raw `<component :is>`). The per-row `phaseColor` prop seeds it
367
+ inline so today's consumers paint unchanged; un-set, the component
368
+ fallback (`inherit`) keeps the icon on the inherited cascade. A consumer
369
+ wanting a DISTINCT icon ink from the phase tint overrides it directly.
370
+
371
+ Both carry their byte-identical defaults — `left` (the prior render) /
372
+ `inherit` (the prior un-tinted glyph). Declaring them here keeps the
373
+ `--metric-row-*` family discoverable in one home; the component-level
374
+ `var(…, fallback)` read preserves the same default if the token is ever
375
+ un-declared (the defense-in-depth back-compat floor). A per-row
376
+ `phaseColor` prop still wins over the `:root` `--metric-row-icon-color`
377
+ (inline cascades higher), so today's phase-tinted icons are unchanged. */
378
+ --metric-row-label-align: left;
379
+ --metric-row-icon-color: inherit;
380
+
270
381
  /* ═══════════════════════════════════════════════
271
382
  §2.D INSTRUMENT-CLUSTER COMPOSITION RHYTHM
272
383
 
@@ -317,93 +428,10 @@
317
428
  --table-head-h: calc(3rem * var(--table-density));
318
429
  --table-head-px: calc(1rem * var(--table-density));
319
430
 
320
- /* ═══════════════════════════════════════════════
321
- §20 PLATFORM MOTION (AQ.W5)
322
-
323
- The native-platform motion substrate axes. Three families, each read
324
- by a `@supports`-gated CSS recipe in `scroll-driven.css`,
325
- `animations.css` (§TOP-LAYER), and `view-transition.css` — every visual
326
- knob a token so a consumer retunes without editing library source.
327
-
328
- SCROLL-DRIVEN (scroll-driven.css). Values mirror the JS-fallback
329
- composable defaults (`useScrollProgress` / `useStaggerReveal`) so the
330
- native CSS path and the fallback path read identically — no visual seam
331
- at the `@supports` boundary.
332
-
333
- TOP-LAYER (animations.css §TOP-LAYER). The `@starting-style` entry/exit
334
- grammar for native `<dialog>` / `[popover]` glass surfaces. The backdrop dim
335
- uses the house alpha-derivative `color-mix(in srgb, var(--background) Npct,
336
- transparent)` (AZ.W-ADAPTIVE-AUTO A5-1). It is NOT the `hsl(var(--background)
337
- / α)` channel form: `--background` is a COMPLETE `hsl()` color
338
- (`= hsl(48 12% 98%)`), so `hsl(var(--background) / α)` double-wraps to
339
- `hsl(hsl(…) / α)` — invalid, never paints (the modal dim was silently dead).
340
- The genuine channel form would require `--background` declared as a bare
341
- `H S% L%` triple, which it never is — hence the alpha-derivative mix.
342
-
343
- VIEW-TRANSITION (view-transition.css). The shared `.gl-list-item` group
344
- recipe + the `--vt-*` axes the `useViewTransition` substrate consumers
345
- (dock layer swap, muster J's verdict re-rank) tune their swap against.
346
- ═══════════════════════════════════════════════ */
347
- --scroll-progress-scroller: root;
348
- --scroll-reveal-rise: 6px;
349
- --scroll-reveal-range-end: 60%;
350
-
351
- --top-layer-enter-scale: 0.96;
352
- --top-layer-backdrop-blur: 8px;
353
- --top-layer-backdrop-dim: 0.5;
354
-
355
- --vt-duration: var(--duration-normal);
356
- /* AX.W05 — ONE iOS-spring vocabulary: every spring-flavored transition reads
357
- a governed `--spring-*` register. The legacy apple-spring cubic-bezier
358
- (+27.5% overshoot) was a SECOND authority beside the regen `--spring-*`
359
- cohort; it is EXCISED. Its emphatic-overshoot register maps to the playful
360
- `--spring-bouncy` (the closest `linear()` overshoot stop-set), so the VT
361
- default + the cards/top-layer transitions share one spring primitive
362
- (CPU + GPU sample the same curve). No cubic-bezier fallback seed survives —
363
- the `linear()` spring degrades to `ease` where `linear()` is unsupported. */
364
- --vt-ease: var(--spring-bouncy);
365
- --vt-rise: 8px;
366
-
367
- /* AT.W6-dock-c / AU.W8 — the dock layer-swap morph timing, minted ONCE so
368
- both engine paths are timing-IDENTICAL: the FLIP fallback (via
369
- `--dock-motion-resize`), the native View-Transition group (its
370
- `animation-timing-function`), AND the runtime SpringProgress driver
371
- (AU.W8.3) consume this same `(0.32, 0.7)` source curve. Retires the AQ.W6
372
- fork where the VT path ran `--vt-ease` (apple-spring, +27.5% overshoot)
373
- while the FLIP ran the snappy spring. `--vt-ease` still defaults the
374
- other VT recipes (`.gl-list-item`).
375
-
376
- AU.W8 — RETARGET snappy → dock. `--spring-snappy` (ζ=0.65, +6.8%) read as
377
- mechanical: a stiff plateau at ~48% with too little overshoot to feel
378
- alive ("not iOS-smooth"). AW.W2 then retuned the dock spring to the
379
- iOS-control register: `--spring-dock` ((0.32, 0.7), ~+4.6%) settles snappy
380
- with a restrained overshoot — the felt iOS dock morph, off the prior
381
- playful +18.5% register. The runtime driver's DOCK_SPRING const MIRRORS the
382
- (0.32, 0.7) PRESETS row, so the CSS token and the JS-driven morph are
383
- bit-identical. */
384
- --dock-resize-spring: var(--spring-dock);
385
-
386
- /* AT.W7-dock-b — dock-control press micro-feedback spring. A TRANSFORM-ONLY
387
- spring (`scale`/`rotate`) the dock controls apply to their hover/press
388
- activation so the squish reads with a touch of spring-back rather than a
389
- flat ease. STRICTLY transform-scoped: it must never touch the surface-tier
390
- `[data-held]` fades (background/border/box-shadow), which stay on
391
- `--duration-fast var(--ease-standard)`. The duration pairs with
392
- `--duration-fast`; consumers retune the whole feel via this one token.
393
-
394
- AY.W-DOCK2 (D6) — the register is `--spring-smooth`, the §6 easing-doctrine
395
- transform-press register (tokens.css §2: transform hover/press/active →
396
- `--spring-smooth`/`--spring-snappy`, NEVER `--spring-bouncy`; a press must
397
- settle, never overshoot into a visible bounce). The prior `--spring-bouncy`
398
- ROOT default was off-doctrine, shadowed for the four named controls by a
399
- per-surface re-point in dock-controls.css — the exact per-surface fork the
400
- doctrine kills. The re-point is now a DEAD byte-identical redeclaration and is
401
- DELETED; the ROOT token IS the doctrine register, so any other consumer of
402
- `--dock-press-spring` inherits the correct smooth register.
403
-
404
- BA.W-GLASS-CAL Unit 3 — the duration leg re-times off the generic
405
- `--duration-fast` (0.2s) onto `--spring-smooth-duration` (0.36s, the
406
- smooth spring's OWN 2%-band envelope settle), so the press transform plays
407
- at its physical settle rather than a generic clock. */
408
- --dock-press-spring: var(--spring-smooth-duration) var(--spring-smooth);
431
+ /* §20 PLATFORM MOTION (AQ.W5) — the scroll-driven/choreography + TOP-LAYER +
432
+ VIEW-TRANSITION + dock-spring motion knobs — carved WHOLE to
433
+ tokens/scroll-tokens.css at BB.W-CARVE4 (a contiguous tail carve at the §19/§20
434
+ seam; §20 is the file's last section, so the partial @import-s IMMEDIATELY
435
+ AFTER this one — the dist is byte-isomorphic). The paper/control/display/metal/
436
+ timeline/metric/table families above stay. */
409
437
  }
@@ -51,9 +51,19 @@
51
51
  --type-leading-body: 1.5;
52
52
  --type-leading-prose: 1.618;
53
53
  --type-leading-heading: 1.2;
54
- --type-leading-display: 1.1;
54
+ /* BB.W-DISPLAY-TRACKING — the display leading is tightened to the Apple
55
+ 84/80 ≈ 1.05 signature (was 1.1). The DISPLAY ladder ONLY reads this rung;
56
+ --type-leading-heading (1.2) carries the heading/title register. */
57
+ --type-leading-display: 1.05;
55
58
 
56
59
  --type-tracking-tight: -0.025em;
60
+ /* BB.W-DISPLAY-TRACKING — the DISPLAY-ONLY proportional negative tracking
61
+ rung (the Apple −1.5%-of-size signature: 80px → −1.2px = −0.015em). It is
62
+ em-relative, so the single value is a constant −1.5% across the whole
63
+ clamp() ladder (φ² → φ^(11/2)). MINTED as its OWN rung so the display
64
+ calibration NEVER bleeds into the shared --type-tracking-tight (the
65
+ heading/title/configurator register's tracking, kept at -0.025em). */
66
+ --type-tracking-display: -0.015em;
57
67
  --type-tracking-snug: -0.01em;
58
68
  --type-tracking-normal: 0;
59
69
  --type-tracking-wide: 0.025em;
@@ -72,17 +82,24 @@
72
82
  --duration-xxl: 1.5s;
73
83
  --duration-shimmer-fast: 3s;
74
84
  --duration-shimmer: 5s;
85
+ /* BB.W-METAL-SHIMMER — the brand-metal family's OWN slow dignified one-pass
86
+ clock (slower than the 5s generic shimmer). The metal sweep (gold·silver·
87
+ bronze, text-clip + border/mask) reads as a calm slow patina catch, not a
88
+ fast band-pass — the §6 calm register. (`--duration-seal` was never landed;
89
+ this is net-new, NOT a retirement re-point.) */
90
+ --duration-metal: 6s;
75
91
  /* BA.W-GLASS-CAL (H2a) — `--duration-sparkle` (600ms) DELETED with the disco
76
92
  recipe retirement: the sparkle-sweep keyframe + its sole `btn-audacious`
77
93
  consumer are gone. */
78
94
 
79
95
  /* AH.W5-e (FA-8 §4d) — motion-duration + staged-reveal canon.
80
96
 
81
- Six duration tokens + three delay tokens promoted from raw literals
82
- at speedtest's celebratory-reveal SFCs (SpeedtestResults, ThankYou,
83
- ResultStack, CompleteBadge). Unified under the `--motion-*`
84
- namespace (parallel to `--motion-ease-*`) so all motion tokens
85
- cluster at one canon — duration + easing arm together. */
97
+ Duration + delay tokens promoted from raw literals at speedtest's
98
+ celebratory-reveal SFCs (SpeedtestResults, ThankYou, ResultStack).
99
+ Unified under the `--motion-*` namespace (parallel to `--motion-ease-*`)
100
+ so all motion tokens cluster at one canon — duration + easing arm
101
+ together. (BB.W-DEAD-SWEEP retired the never-shipped CompleteBadge
102
+ staged-reveal cluster — no consumer existed.) */
86
103
 
87
104
  /* Staged-entrance pairing — opacity + transform Vue <Transition> arms
88
105
  in the celebratory headline + result-row reveals. Partners with
@@ -99,17 +116,6 @@
99
116
  glyphs cleanly. Load-bearing — zeroing either collapses the shimmer to
100
117
  an imperceptible blow-through. */
101
118
 
102
- /* CompleteBadge staged-reveal cluster — the disc / ring / check curve
103
- fires at three asymmetric durations + delays per the A4-AF staged-
104
- variety design intent. Promoting the magic numbers makes the
105
- staged-variety visible at the canon. */
106
- --motion-duration-badge-disc: 420ms;
107
- --motion-duration-badge-ring: 560ms;
108
- --motion-duration-badge-check: 380ms;
109
- --motion-delay-badge-disc: 80ms;
110
- --motion-delay-badge-ring: 220ms;
111
- --motion-delay-badge-check: 460ms;
112
-
113
119
  /* Staggered-reveal increment canon — three perceptually-distinct tiers for
114
120
  per-row/per-cell/per-bar cascades:
115
121
  • tight (40ms) — dense row cascades, sub-perceptual gap
@@ -153,21 +159,53 @@
153
159
  ── EASING DOCTRINE (AX.W52 §6 — which easing fits which job) ──
154
160
  ONE recorded rule so the animation easing stops forking live. This
155
161
  FORMALIZES the already-correct `transitions.css` idiom (enter=spring,
156
- exit=bezier) as the house rule every recipe reaches for:
157
-
158
- | Transition kind | Easing |
159
- |--------------------------------------------------|-------------------------------------|
160
- | Surface props (bg, border, color, box-shadow, | `--ease-standard` (bezier — a |
161
- | opacity) | colour cross-fade reads as a |
162
- | | wobble on a spring) |
163
- | Transform — hover/press/active (scale, translate,| `--spring-smooth` (the ONE button/ |
164
- | rotate) | interactive scale register) or |
165
- | | `--spring-snappy` (crisp press) |
166
- | Enter (mount, popover open, dialog in) | `--spring-bouncy` / `--spring-snappy`|
167
- | Exit (unmount, close) | `--ease-out` / `--ease-standard` |
168
- | | (bezier, NO overshoot — an exit |
169
- | | must never overshoot past gone) |
170
- | Position-tracked (specular pointer follow) | `--ease-standard` |
162
+ exit=bezier) as the house rule every recipe reaches for.
163
+
164
+ BB.W-MOTION-CANON — the table embodies ONE principle (Material 3's
165
+ spatial-vs-effects split, codified in `docs/precepts/motion-canon.md`
166
+ as P1): a SPATIAL channel (the box MOVES/RESHAPES — position, SIZE,
167
+ rotation, corners) rides a `--spring-<name>` (overshoot = physicality);
168
+ an EFFECTS channel (the surface RE-TINTS — color, opacity, box-shadow)
169
+ rides a bezier `--ease-*` (a colour cross-fade reads as a wobble on a
170
+ spring). Each row below is tagged [SPATIAL] (spring) or [EFFECTS]
171
+ (bezier) so the rule is legible, not implicit. The canon doc is the
172
+ canonical home; this table is the SOURCE it re-states:
173
+
174
+ | Transition kind | Tier | Easing |
175
+ |--------------------------------------------------|-----------|--------------------------|
176
+ | Surface props (bg, border, color, box-shadow, | [EFFECTS] | `--ease-standard` (bezier|
177
+ | opacity) | | — a colour cross-fade |
178
+ | | | reads as a wobble on a |
179
+ | | | spring) |
180
+ | Transform — hover/press/active (scale, translate,| [SPATIAL] | `--spring-smooth` (the |
181
+ | rotate) | | ONE button/interactive |
182
+ | | | scale register) or |
183
+ | | | `--spring-snappy` |
184
+ | Size / morph (dock V↔H, indicator size- | [SPATIAL] | `--spring-dock` / |
185
+ | correction, reveal source-rect bloom) | | `--spring-snappy`, |
186
+ | | | expressed as a |
187
+ | | | COMPOSITOR transform |
188
+ | | | (P5) — NEVER an |
189
+ | | | animated width/height |
190
+ | Enter (mount, popover open, dialog in, reveal) | [SPATIAL] | `--spring-bouncy` / |
191
+ | | | `--spring-snappy` |
192
+ | Bold decelerating arrival (the SOTA arrival — | [SPATIAL] | `--ease-out-expo` |
193
+ | reveal draw-on, big-distance settle) | | (cubic-bezier(.16,1, |
194
+ | | | .3,1); the house expo) |
195
+ | Exit (unmount, close) | [EFFECTS] | `--ease-out` / |
196
+ | | | `--ease-standard` |
197
+ | | | (bezier, NO overshoot —|
198
+ | | | an exit must never |
199
+ | | | overshoot past gone) |
200
+ | Position-tracked (specular pointer follow) | [EFFECTS] | `--ease-standard` |
201
+
202
+ The SOTA arrival ease is the EXISTING `--ease-out-expo` (alias →
203
+ `--motion-ease-out-expo` = `cubic-bezier(0.16, 1, 0.3, 1)`, the house
204
+ expo with the value.js `easeOutExpo` JS twin in the MOTION_CURVES table)
205
+ — NOT a net-new token. The motion canon NAMES it as the arrival register;
206
+ it is not re-minted (a duplicate alias would fail proof:animation-
207
+ coherence's EASING-TABLE-BOUND arm — the curve already has its canonical
208
+ + alias row in `curves.ts`).
171
209
 
172
210
  The BUTTON family (`.btn-pill` / `.tap-squish` / `.glass-btn` /
173
211
  `btn-interactive`) UNIFIES its `scale` transform leg onto ONE register —