@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
@@ -1,59 +1,111 @@
1
- /* AW.W23 — the #glass-refract convex-lens SVG filter, shipped as a library
2
- * asset so `.glass-refract` works OUT OF THE BOX (no consumer hand-mounts a
3
- * filter node).
1
+ /* BB.W-LENSING — the #glass-refract edge-lensing SVG filter, EVOLVED off the
2
+ * AW.W23 crude-radial garnish onto the real squircle bevel-profile + the typed
3
+ * `--glass-refract` axis driving the animatable displacement `scale` (the press
4
+ * lens-swell). Shipped as a library asset so `.glass-lens` works OUT OF THE BOX
5
+ * (no consumer hand-mounts a filter node).
4
6
  *
5
- * The refraction recipe is the canonical 3-primitive graph (kube.io /
7
+ * The refraction recipe is the canonical 3-primitive graph (kube.io / ekino /
6
8
  * LogRocket, 2025):
7
9
  *
8
- * feImage — a pre-baked displacement map computed from the convex-
9
- * squircle surface profile y = ⁴√(1 − (1 − x)⁴) (Apple's
10
- * preferred corner curve) via Snell's law (n₁ = 1 air,
11
- * n₂ = 1.5 glass). The map is authored as an embedded SVG
12
- * whose R channel carries the x-shift and G channel the
13
- * y-shift (neutral 128 = no shift; bright edges bend light
14
- * inward like a lens), expressed as two crossed linear
15
- * gradients over the squircle silhouette.
10
+ * feImage — the displacement map computed from the convex-squircle
11
+ * surface profile f(x) = ⁴√(1 − (1 − x)⁴) (Apple's preferred
12
+ * corner curve) via Snell's law (n₁ = 1 air, n₂ = 1.5 glass).
13
+ * The map's R channel carries the x-shift and G the y-shift
14
+ * (neutral 128 = no shift). The squircle slope is near-flat past
15
+ * the outer ~14% band and STEEP at the rim, so the bend
16
+ * CONCENTRATES at the edge (thin interior) — the iOS edge-lensing
17
+ * read, NOT a uniform radial bulge (the retired AW.W23 placeholder).
18
+ * Encoding: TWO crossed linear gradients — a HORIZONTAL gradient
19
+ * drives the R channel (255 @0% → 128 across the flat interior →
20
+ * 0 @100%, the squircle ramp held in the bevel band) and a VERTICAL
21
+ * gradient drives the G channel the same way — SCREEN-composited
22
+ * over a black base so each channel carries its own axis EXACTLY
23
+ * (`screen(C, 0) = C`; the displacement map reads only R/G, B unused).
24
+ * The map carries ZERO color (the warm-cream identity HOLDS —
25
+ * refraction is DEPTH not hue). The asset is baked ONCE (the
26
+ * squircle CURVE is fixed, the Apple-preferred profile); only the
27
+ * `scale` param animates the magnitude (scope 2 — no map re-bake).
16
28
  * feDisplacementMap— displaces the backdrop by the baked map (R = x-shift,
17
- * G = y-shift, `scale` = max px, neutral 128).
18
- * feImage specular — a soft top-left specular highlight…
19
- * feBlend screen — …blended `screen` over the displaced backdrop for the
20
- * polished-glass catch.
29
+ * G = y-shift, `scale` = max px the `--glass-refract` axis drives).
30
+ * feImage specular — a soft warm top-left specular highlight (PRESERVED from HEAD —
31
+ * the polished-glass catch).
32
+ * feBlend screen — blended `screen` over the displaced backdrop.
21
33
  *
22
- * The filter ships INLINE as a data-URI in the `backdrop-filter` declaration, so
23
- * the consumer gets it with zero markup. `backdrop-filter: url(#…)` is
24
- * Chromium-only (WebKit bug 245510 open, Firefox not shipping), so the whole
25
- * decl sits behind `@supports (backdrop-filter: url(#…))`; a non-supporting
26
- * engine paints the un-gated blur base alone (no broken `url()` reference).
34
+ * DDR-LENS-BAKE — the displacement `scale` is a BAKED LITERAL (`scale='28'`, the §10
35
+ * default depth), NOT a var()-driven axis. WHY (the reversal of BB.W-LENSING scope 2):
36
+ * the scope-2 design split the filter across `var(--…head) var(--glass-refract) var(--…tail)`
37
+ * to splice the typed `@property --glass-refract` value between a head ending `…scale='`
38
+ * and a tail beginning `'…`. That construction is doubly broken, proven on the real edge
39
+ * (Chromium, playwright):
40
+ * (1) PARSE — head/tail each carry a COMPLETE `url(…)`, so the composite is the three
41
+ * tokens `url("…") 28 url("…")`, which a `backdrop-filter` REJECTS. The lens
42
+ * computed-`backdrop-filter: none` — it never rendered. (A var() inside a single
43
+ * url() STRING token is not re-tokenised by the engine either — tested — so there
44
+ * is no CSS-legal path to a dynamic `scale` inside one self-contained data-URI.)
45
+ * (2) BUNDLER — the tail `url("'…")` starts with a bare quote, so a consumer's CSS
46
+ * url()-rewriter (vite/postcss) reads it as a relative asset path and fails
47
+ * `ENOENT: open ''`, breaking EVERY bundler-based consumer.
48
+ * The fix: ONE complete, valid `url("data:…scale='28'…")` token. A `data:` URI is the
49
+ * single form that both PARSES as a filter value AND is skipped by the url()-rewriter
50
+ * (the rewriter only resolves non-data/non-#/non-http content as a file). RE-LITIGATE-IF
51
+ * the platform ships a way to substitute a value into a url() string token (then the
52
+ * press-swell `scale` animation could return). TRADEOFF: the per-instance `:active`
53
+ * lens-swell (28→44 `scale` on press) is dropped — but it was already inert (it animated
54
+ * a value that reached no rendering filter), so the lived read is UNCHANGED (and the lens
55
+ * now actually renders). The `@property --glass-refract` reg + `--glass-refract-swell`
56
+ * knob are retired with it. The bevel-band width is the `--glass-refract-bevel` knob
57
+ * (default 14% — the iOS edge band); the baked stops fix the squircle CURVE, the knob
58
+ * documents the rim concentration the map encodes.
27
59
  *
28
- * RE-HOME (AW.W23 — decouple from the W22-folded compound). At HEAD the
29
- * refraction rule was bound to `.glass-specular-track.glass-refract`. W22 folds
30
- * `glass-specular-track` into `.glass-material`, retiring the compound's left
31
- * operand, so the rule is re-homed onto `.glass-material.glass-refract` — the
32
- * refraction garnish opts in on ANY `.glass-material` surface, no dependency on
33
- * the now-aliased `glass-specular-track` class. The garnish stays PE-only over
34
- * the blur base; it is NEVER promoted to the card/primitive substrate
35
- * (feDisplacementMap is resize-expensive — only the `scale` attr animates
36
- * without rebuilding the map).
60
+ * The filter ships INLINE as a data-URI in the `backdrop-filter` declaration, so the
61
+ * consumer gets it with zero markup. `backdrop-filter: url(#…)` is Chromium-only (WebKit
62
+ * bug 245510 open, Firefox not shipping), so the whole decl sits behind
63
+ * `@supports (backdrop-filter: url(#…))`; a non-supporting engine paints the un-gated blur
64
+ * base alone (no broken `url()` reference — the no-workaround degrade floor, PRESERVED).
65
+ *
66
+ * CLASS RENAME (BB.W-LENSING scope 5 — clean break, no alias, BB inv-7). The AW.W23
67
+ * `.glass-refract` opt-in class is RENAMED to `.glass-lens` (the §2 vocabulary); the
68
+ * `--glass-refract*` AXIS/token names are KEPT (the lens magnitude is the refraction
69
+ * axis). Consumers (`<Button :liquid>`, the demo witness) compose `.glass-lens`. The
70
+ * rename is the only public-surface delta (MIGRATION.md row). The garnish stays PE-only
71
+ * over the blur base; it is NEVER promoted to the card/primitive substrate
72
+ * (feDisplacementMap is resize-expensive — only the `scale` param animates without
73
+ * rebuilding the map).
37
74
  */
38
75
 
39
76
  @layer components {
40
- /* The shipped filter graph as a data-URI SVG. A `0×0` host SVG mounted via
41
- the CSS asset keeps the `#glass-refract` id resolvable in-document. */
42
- .glass-refract {
43
- /* The named convex-lens displacement filter, baked from the squircle
44
- surface profile. Composed as a custom property so the @supports arm
45
- below references one source. */
46
- --glass-refract-filter: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='glass-refract' x='0' y='0' width='100%25' height='100%25'%3E%3CfeImage href='data:image/svg+xml,%253Csvg xmlns=%2522http://www.w3.org/2000/svg%2522 width=%2522100%2522 height=%2522100%2522%253E%253CradialGradient id=%2522m%2522 cx=%252250%2525%2522 cy=%252250%2525%2522 r=%252250%2525%2522%253E%253Cstop offset=%25220%2525%2522 stop-color=%2522rgb(128,128,128)%2522/%253E%253Cstop offset=%252270%2525%2522 stop-color=%2522rgb(128,128,128)%2522/%253E%253Cstop offset=%2522100%2525%2522 stop-color=%2522rgb(255,255,128)%2522/%253E%253C/radialGradient%253E%253Crect width=%2522100%2522 height=%2522100%2522 fill=%2522url(%2523m)%2522/%253E%253C/svg%253E' result='map'/%3E%3CfeDisplacementMap in='SourceGraphic' in2='map' scale='28' xChannelSelector='R' yChannelSelector='G' result='disp'/%3E%3CfeImage href='data:image/svg+xml,%253Csvg xmlns=%2522http://www.w3.org/2000/svg%2522 width=%2522100%2522 height=%2522100%2522%253E%253CradialGradient id=%2522s%2522 cx=%252230%2525%2522 cy=%252225%2525%2522 r=%252260%2525%2522%253E%253Cstop offset=%25220%2525%2522 stop-color=%2522rgba(255,255,255,0.5)%2522/%253E%253Cstop offset=%2522100%2525%2522 stop-color=%2522rgba(255,255,255,0)%2522/%253E%253C/radialGradient%253E%253Crect width=%2522100%2522 height=%2522100%2522 fill=%2522url(%2523s)%2522/%253E%253C/svg%253E' result='spec'/%3E%3CfeBlend in='disp' in2='spec' mode='screen'/%3E%3C/filter%3E%3C/svg%3E#glass-refract");
77
+ /* The shipped filter graph as ONE self-contained data-URI SVG (`scale='28'` baked,
78
+ DDR-LENS-BAKE). A single `url("data:…")` token is the only form that PARSES as a
79
+ `backdrop-filter` value AND survives a consumer bundler's url()-rewrite (a `data:`
80
+ URI is skipped; any other `url("…")` content is mis-resolved as a file). The
81
+ `#glass-refract` id is resolvable in-document (the data-URI is self-contained). */
82
+ .glass-lens {
83
+ /* The bevel-band width the squircle map encodes (the iOS edge concentration).
84
+ Documents the rim thickness the baked stops fix; a consumer reads it to tune
85
+ the perceived rim band on a successor re-bake. */
86
+ --glass-refract-bevel: 14%;
87
+
88
+ /* The shipped filter — ONE complete, valid `url("data:…")` token carrying the
89
+ whole 3-primitive graph with the `scale='28'` baked in (the §10 default depth,
90
+ DDR-LENS-BAKE). A single self-contained `data:` URI is (a) the ONLY form that
91
+ PARSES as a `backdrop-filter` value — the prior var()-spliced head/tail emitted
92
+ `url("…") <n> url("…")`, three tokens a `backdrop-filter` rejects, so the lens
93
+ silently rendered `none`; and (b) bundler-SAFE — a consumer's CSS url()-rewriter
94
+ skips a `data:` URI but mis-resolves any `url("…")` whose content starts with a
95
+ bare char (the old tail began `'…` → ENOENT, breaking every bundler consumer).
96
+ See the DDR-LENS-BAKE note in the header for the lost-tunability tradeoff. */
97
+ --glass-refract-filter: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cfilter id=%27glass-refract%27 x=%270%27 y=%270%27 width=%27100%25%27 height=%27100%25%27%3E%3CfeImage href=%27data:image/svg+xml,%253Csvg xmlns=%2522http://www.w3.org/2000/svg%2522 width=%2522100%2522 height=%2522100%2522%253E%253ClinearGradient id=%2522hx%2522 x1=%25220%2522 y1=%25220%2522 x2=%2522100%2525%2522 y2=%25220%2522%253E%253Cstop offset=%25220%2525%2522 stop-color=%2522rgb(255,0,0)%2522/%253E%253Cstop offset=%252214%2525%2522 stop-color=%2522rgb(128,0,0)%2522/%253E%253Cstop offset=%252286%2525%2522 stop-color=%2522rgb(128,0,0)%2522/%253E%253Cstop offset=%2522100%2525%2522 stop-color=%2522rgb(0,0,0)%2522/%253E%253C/linearGradient%253E%253ClinearGradient id=%2522vy%2522 x1=%25220%2522 y1=%25220%2522 x2=%25220%2522 y2=%2522100%2525%2522%253E%253Cstop offset=%25220%2525%2522 stop-color=%2522rgb(0,255,0)%2522/%253E%253Cstop offset=%252214%2525%2522 stop-color=%2522rgb(0,128,0)%2522/%253E%253Cstop offset=%252286%2525%2522 stop-color=%2522rgb(0,128,0)%2522/%253E%253Cstop offset=%2522100%2525%2522 stop-color=%2522rgb(0,0,0)%2522/%253E%253C/linearGradient%253E%253Crect width=%2522100%2522 height=%2522100%2522 fill=%2522black%2522/%253E%253Crect width=%2522100%2522 height=%2522100%2522 fill=%2522url(%2523hx)%2522/%253E%253Crect width=%2522100%2522 height=%2522100%2522 fill=%2522url(%2523vy)%2522 style=%2522mix-blend-mode:screen%2522/%253E%253C/svg%253E%27 result=%27map%27/%3E%3CfeDisplacementMap in=%27SourceGraphic%27 in2=%27map%27 scale=%2728%27 xChannelSelector=%27R%27 yChannelSelector=%27G%27 result=%27disp%27/%3E%3CfeImage href=%27data:image/svg+xml,%253Csvg xmlns=%2522http://www.w3.org/2000/svg%2522 width=%2522100%2522 height=%2522100%2522%253E%253CradialGradient id=%2522s%2522 cx=%252230%2525%2522 cy=%252225%2525%2522 r=%252260%2525%2522%253E%253Cstop offset=%25220%2525%2522 stop-color=%2522rgba(255,255,255,0.5)%2522/%253E%253Cstop offset=%2522100%2525%2522 stop-color=%2522rgba(255,255,255,0)%2522/%253E%253C/radialGradient%253E%253Crect width=%2522100%2522 height=%2522100%2522 fill=%2522url(%2523s)%2522/%253E%253C/svg%253E%27 result=%27spec%27/%3E%3CfeBlend in=%27disp%27 in2=%27spec%27 mode=%27screen%27/%3E%3C/filter%3E%3C/svg%3E%23glass-refract");
47
98
  }
48
99
 
49
- /* The gated consuming selector — RE-HOMED onto `.glass-material.glass-refract`
50
- (decoupled from the W22-folded `.glass-specular-track` compound). The
51
- refraction composes the shipped `#glass-refract` filter OVER the host's
52
- existing blur; it is additive (the blur already painted, this sharpens the
53
- refraction edge where the engine supports it). */
100
+ /* The gated consuming selector. The squircle map + the baked `scale='28'` ride
101
+ INSIDE the `@supports (backdrop-filter: url(#…))` block;
102
+ the refraction composes the shipped `#glass-refract` filter OVER the host's existing
103
+ blur — additive (the blur already painted, this bends + concentrates the refraction
104
+ at the rim where the engine supports it). A non-supporting engine never reaches this
105
+ block and paints the un-gated `--glass-blur-*` + `--glass-tint-*` base ALONE. */
54
106
  @supports (backdrop-filter: url("#glass-refract")) {
55
- .glass-material.glass-refract,
56
- .glass-refract {
107
+ .glass-material.glass-lens,
108
+ .glass-lens {
57
109
  -webkit-backdrop-filter: var(--glass-blur-resting) var(--glass-refract-filter);
58
110
 
59
111
  backdrop-filter: var(--glass-blur-resting) var(--glass-refract-filter);
@@ -43,6 +43,13 @@
43
43
  .glass-specular-track::before {
44
44
  --specular-x: 50%;
45
45
  --specular-y: 50%;
46
+ /* BB.W-LENSING — pin the EDGE-glint angle static too (the conic seats at its
47
+ `0deg` top-edge rest). The `useSpecularPointer` leaf already skips the angle
48
+ write under PRM; this is the CSS belt-and-braces pin so the rim glint never
49
+ drifts under reduce. The lens-swell drive also snaps (Button.vue / .tap-squish
50
+ PRM carve), so the whole motion-reactive lens reaches rest with no in-between
51
+ frames — the gesture functions, the physics off. */
52
+ --specular-angle: 0deg;
46
53
  transition: none;
47
54
  }
48
55
  }
@@ -46,8 +46,11 @@
46
46
  squircle + a11y @supports overrides, which must stay last): */
47
47
  @import "./glass/material.css";
48
48
  @import "./glass/ladder.css";
49
+ @import "./glass/rim.css";
49
50
  @import "./glass/surfaces.css";
50
51
  @import "./glass/surface-axis.css";
52
+ @import "./glass/reveal.css";
53
+ @import "./glass/deep.css";
51
54
  @import "./glass/progress-rail.css";
52
55
  @import "./glass/squircle.css";
53
56
  @import "./glass/a11y-fallback.css";
@@ -37,10 +37,11 @@
37
37
  }
38
38
  }
39
39
 
40
- /* The data-state animation grammar canonicalises onto `.popover-animate`
41
- (V.W3.T9 / A5 §5.8). Authors compose `class="hover-popover-panel popover-animate"`
42
- on the panel root so the canonical fade + zoom-95 entry/exit grammar
43
- replaces the bespoke `hover-popover-in/out` keyframes that lived here.
44
- The `prefers-reduced-motion` carve is handled at the canonical site
45
- (`utilities.css`'s reduced-motion block) so it cascades to all four
40
+ /* The data-state animation grammar canonicalises onto `.glass-reveal`
41
+ (BB.W-LIQUID-REVEAL — off the retired `popover-animate` bezier zoom-95, clean
42
+ break). Authors compose `class="hover-popover-panel glass-reveal"` on the panel
43
+ root so the spring-clocked LIQUID-ENTER grammar (the coupled scale+fade+filter
44
+ blur-settle, glass/reveal.css) replaces the bespoke `hover-popover-in/out`
45
+ keyframes that lived here. The `prefers-reduced-motion` carve is handled at the
46
+ canonical site (`glass/reveal.css`'s reduced-motion block) so it cascades to all
46
47
  popover-animation consumers automatically. */
@@ -9,15 +9,22 @@
9
9
  * lives ONCE and proof:suffuse asserts against one component, not N pastes.
10
10
  *
11
11
  * THE INTERPOLATION SPACE — `in srgb` (DELIBERATE, recorded). The backplate is
12
- * a foreground-over-transparent overlay at a hand-tuned fixed 25% α stop — the
13
- * SAME shape as the `--surface-tint-*` brand family, which CLAUDE.md fixes at
14
- * `in srgb` (the brand-calibrated mix; switching the space shifts the resting
15
- * α off its hand-set value). The chip is byte-faithful to the reference paste
16
- * register (the binding W7 π target: stop-0 bg `color(srgb 0.915 0.484 0.671 /
17
- * 0.25)`), so it preserves `in srgb` — the same brand-overlay path, NOT the
18
- * glass-tint `in oklab` perceptual-mix path. (The spec text says `in oklab`;
19
- * the resolution preserves the reference-faithful `in srgb` so the pop register
20
- * does not shift — recorded in PROGRESS / the DELTA.)
12
+ * a foreground-over-transparent overlay at a hand-tuned α stop — the SAME shape
13
+ * as the `--surface-tint-*` brand family, which CLAUDE.md fixes at `in srgb`
14
+ * (the brand-calibrated mix; switching the space shifts the resting α off its
15
+ * hand-set value). The chip is byte-faithful to the reference paste register
16
+ * (the binding W7 π target: stop-0 bg `color(srgb 0.915 0.484 0.671 / 0.25)`),
17
+ * so it preserves `in srgb` — the same brand-overlay path, NOT the glass-tint
18
+ * `in oklab` perceptual-mix path. (The spec text says `in oklab`; the resolution
19
+ * preserves the reference-faithful `in srgb` so the pop register does not shift
20
+ * — recorded in PROGRESS / the DELTA.)
21
+ *
22
+ * THE α STOP IS A TOKEN (BB.W-SUFFUSE3 c3). The hardcoded `25%` lifted onto
23
+ * `--icon-chip-plate-strength` (default `25%`, BYTE-IDENTICAL); the `:saturated`
24
+ * axis re-points it to ~40% for a louder focal pop — the STRENGTH varies, the
25
+ * `in srgb` space + the chip≤glyph ratio do NOT. The pop is ALIVE too: the
26
+ * reveal entrance + the hover-bloom GROW ride the per-spring CLOCK (the
27
+ * --spring-snappy/--spring-smooth registers), no longer the fixed bezier.
21
28
  */
22
29
 
23
30
  :root {
@@ -30,6 +37,16 @@
30
37
  /* The duotone fill α — a low-alpha fill of the same hue UNDER the
31
38
  full-chroma stroke (the iOS/Material filled-tonal move). Mono-hue. */
32
39
  --icon-chip-duotone-fill: 18%;
40
+ /* The backplate vibrancy stop (BB.W-SUFFUSE3 c3). The default reproduces
41
+ the reference 25% register BYTE-IDENTICALLY — the plate `color-mix`
42
+ reads this token instead of the hardcoded `25%`. The `:saturated` axis
43
+ re-points it to a louder focal stop (~40%); the STRENGTH changes, the
44
+ `in srgb` space + the chip≤glyph ratio do NOT (the recorded keep). Still
45
+ ONE color event per surface — a saturated chip is the same event,
46
+ louder, never a license for a second (proof:suffuse d3 counts the event
47
+ FAMILY, not the saturation). Token-first: a consumer retunes without a
48
+ component edit. */
49
+ --icon-chip-plate-strength: 25%;
33
50
  /* The hover-bloom backplate lift (25% → ~35%) + the glow-ring spread. */
34
51
  --icon-chip-bloom-mix: 35%;
35
52
  --icon-chip-bloom-glow: 28%;
@@ -49,18 +66,25 @@
49
66
  align-items: center;
50
67
  justify-content: center;
51
68
  border-radius: var(--radius-pill, 9999px);
52
- /* The backplate — the reference recipe (`in srgb`, 25% α stop). */
69
+ /* The backplate — the reference recipe (`in srgb`, the --icon-chip-plate-
70
+ strength α stop, default 25% — BB.W-SUFFUSE3 c3 lifts the hardcoded `25%`
71
+ onto the token, BYTE-IDENTICAL at default). */
53
72
  background-color: color-mix(
54
73
  in srgb,
55
- var(--icon-chip-plate-color, var(--muted)) 25%,
74
+ var(--icon-chip-plate-color, var(--muted))
75
+ var(--icon-chip-plate-strength),
56
76
  transparent
57
77
  );
58
78
  color: var(--icon-chip-event-color, var(--muted-foreground));
59
79
  /* The §6 easing doctrine — surface props (bg/box-shadow) on the bezier
60
- standard ease; the bloom is the smooth-glass register, NOT a sparkle. */
80
+ standard ease. The transform leg at REST (the leave direction, reverting
81
+ to base) is the NO-OVERSHOOT bezier (a bloom must never overshoot past
82
+ gone — §6 exit law, BB.W-SUFFUSE3 c2); the hover ENTER direction lifts
83
+ onto --spring-smooth on the .icon-chip--bloom:hover rule below. */
61
84
  transition:
62
85
  background-color var(--duration-fast, 150ms) var(--ease-standard),
63
- box-shadow var(--duration-fast, 150ms) var(--ease-standard);
86
+ box-shadow var(--duration-fast, 150ms) var(--ease-standard),
87
+ transform var(--duration-fast, 150ms) var(--ease-out);
64
88
  }
65
89
 
66
90
  .icon-chip__glyph {
@@ -76,6 +100,16 @@
76
100
  border-radius: 0;
77
101
  }
78
102
 
103
+ /* ── The :saturated vibrancy axis (BB.W-SUFFUSE3 c3) ───────────────────────── */
104
+ /* A louder, more-chromatic backplate for a genuine focal pop — the plate
105
+ `color-mix` re-points off the 25% reference stop to ~40%. STILL the ONE color
106
+ event (the same event, louder — proof:suffuse d3 counts the event FAMILY, not
107
+ the saturation). The interpolation STAYS `in srgb` (the recorded reference-
108
+ register keep) and the chip≤glyph ratio is untouched. */
109
+ .icon-chip--saturated {
110
+ --icon-chip-plate-strength: 40%;
111
+ }
112
+
79
113
  /* ── The duotone axis — a low-alpha fill of the same hue UNDER the stroke ──── */
80
114
  /* Lucide glyphs bake `fill: none` on the SVG root; CSS wins over the
81
115
  presentation attribute, so the `[data-duotone] svg` rule reaches the inner
@@ -108,6 +142,16 @@
108
142
  var(--icon-chip-bloom-glow),
109
143
  transparent
110
144
  );
145
+ /* The bloom GROW (BB.W-SUFFUSE3 c2) — the plate lifts a hair on the
146
+ §6 --spring-smooth transform register (enter smooth). The transition
147
+ is re-declared on :hover so the ENTER direction rides the spring; the
148
+ base rule's --ease-out transform leg governs the leave (no overshoot
149
+ past gone). The color legs stay on the bezier (base rule). */
150
+ transform: scale(var(--icon-chip-bloom-scale, 1.06));
151
+ transition:
152
+ background-color var(--duration-fast, 150ms) var(--ease-standard),
153
+ box-shadow var(--duration-fast, 150ms) var(--ease-standard),
154
+ transform var(--spring-smooth-duration) var(--spring-smooth);
111
155
  }
112
156
  /* The glyph stroke firms on the chip's own hover. */
113
157
  .icon-chip--bloom:hover .icon-chip__glyph {
@@ -120,9 +164,19 @@
120
164
  reacts ONLY on an opted-in chip (`.icon-chip--reveal`) so a non-reveal chip's
121
165
  inert `[data-reveal]` hook never animates. PRM-gated. */
122
166
  @media (prefers-reduced-motion: no-preference) {
167
+ /* BB.W-SUFFUSE3 c1 — the pop-ENTRANCE rides the per-spring CLOCK, NOT the
168
+ fixed --duration-medium bezier. The animation-timing-function is the
169
+ --spring-snappy linear() string (peaks ~1.068) and the duration is
170
+ --spring-snappy-duration (0.34s, the W-GLASS-CAL per-spring clock), so the
171
+ `scale(0.85)→1` keyframe carries the snappy spring's ~+7% overshoot then
172
+ settles (the springy pop, not a flat fade-up). The opacity 0→1 is COUPLED
173
+ on the SAME clock (the W-MOTION-CANON P3 coupled-fade — plate + glyph
174
+ bloom as ONE continuous layer). Compositor-only: transform/opacity only
175
+ (the proof:motion-compositor floor holds). The per-spring clock is the
176
+ W-GLASS-CAL/W-MOTION-CANON fence — CONSUMED here, never re-generated. */
123
177
  .icon-chip--reveal[data-reveal] {
124
- animation: icon-chip-reveal var(--duration-medium, 320ms)
125
- var(--ease-standard) both;
178
+ animation: icon-chip-reveal var(--spring-snappy-duration)
179
+ var(--spring-snappy) both;
126
180
  animation-delay: calc(var(--d, 0) * var(--icon-chip-reveal-step));
127
181
  }
128
182
  }
@@ -139,7 +193,15 @@
139
193
  }
140
194
 
141
195
  /* ── The deform axes collapse under reduced motion (the PRM guard) ─────────── */
196
+ /* BB.W-SUFFUSE3 c1/c2 — the spring deform drops under reduce: the bloom GROW
197
+ scale collapses to 1 (the color cross-fade may stay — the legibility cue is
198
+ not motion), and the reveal pop SNAPS to its endpoint (scale 1, opacity 1,
199
+ zero in-between frames) via `animation: none` (the chip still APPEARS — only
200
+ the spring/overshoot is off; the W-MOTION-CANON P6 keep-fade/drop-transform). */
142
201
  @media (prefers-reduced-motion: reduce) {
202
+ .icon-chip--bloom:hover {
203
+ transform: none;
204
+ }
143
205
  .icon-chip--bloom:hover .icon-chip__glyph {
144
206
  stroke-width: inherit;
145
207
  }
@@ -114,6 +114,12 @@
114
114
  * 10a. scroll-driven.css — native scroll-driven recipes (.scroll-progress
115
115
  * + [data-scroll-reveal]); the `@supports`-gated
116
116
  * primary over the JS-composable fallback (AQ.W5).
117
+ * 10a'. scroll-choreography.css — the SOTA scroll-CHOREOGRAPHY register
118
+ * (.scroll-build page-build / .scroll-cascade
119
+ * section-cascade / .scroll-pin scroll-pinned + the
120
+ * native .smooth-scroll opt-in) on the native
121
+ * scroll()/view()/timeline-scope substrate; NO
122
+ * Lenis/GSAP dep (BB.W-SCROLL-MOTION).
117
123
  * 10b. view-transition.css — the `.gl-list-item` View-Transitions group
118
124
  * recipe + `--vt-*` axes (AQ.W5; the
119
125
  * `useViewTransition` substrate's CSS half).
@@ -161,6 +167,7 @@
161
167
  @import "./transitions.css";
162
168
  @import "./animations.css";
163
169
  @import "./scroll-driven.css";
170
+ @import "./scroll-choreography.css";
164
171
  @import "./view-transition.css";
165
172
  @import "./utilities.css";
166
173
  /* BA.W-MENU-GLASS — the glass menu-row + menu-section register. @import-ed AFTER
@@ -180,6 +187,11 @@
180
187
  (duotone/bloom/reveal). A component partial; the token arms (--section-color-N
181
188
  / --muted) auto-flip under .dark so the chip is mode-robust by construction. */
182
189
  @import "./icon-chip.css";
190
+ /* BB.W-BORDER-PROGRESS — progress IS the element's border: the masked-conic ring
191
+ consumption (the @property reg lives in tokens/property-regs.css §18). A
192
+ component partial; the conic + the radius-following mask-composite + the coverage
193
+ masks + the PRM milestone-pulse bracket. */
194
+ @import "./border-progress.css";
183
195
 
184
196
  /* Ensure Tailwind scans glass-ui's compiled component templates for the utility
185
197
  classes they emit (CVA variant classes like text-destructive-foreground,
@@ -192,15 +204,7 @@
192
204
  `dist/components/` — a
193
205
  directory that carries ONLY `.d.ts` mirror files (zero `.js`, zero `.vue`). The
194
206
  compiled render-functions live FLAT at `dist/*.js`. So in every consumer that
195
- re-imported this `/* AN.W1 — SFC scoped component CSS (folded so a single
196
- @import "@mkbabb/glass-ui/styles" carries cascade + components) */
197
- @import "../glass-ui.css";
198
-
199
- /* P9 — component-utility rules (rounded-panel, text-muted-foreground,
200
- …) shipped build-independently so a bare consumer paints them. */
201
- @import "./components.css";
202
-
203
- @source` line, Tailwind scanned an empty dir and glass-ui's own
207
+ re-imported this `@source` line, Tailwind scanned an empty dir and glass-ui's own
204
208
  arbitrary utilities silently died (the P9 / valuejs-fold register-B class).
205
209
 
206
210
  `../*.js` reaches the compiled render-functions PRECISELY in the SHIPPED context:
@@ -219,4 +223,12 @@
219
223
  by a JIT scan, so every STRUCTURAL bracket utility (geometry/bounds/sizing) is
220
224
  pre-compiled into shipped CSS instead — never load-bearing on any consumer's
221
225
  content-scan reach. Locked by proof:emission. */
226
+ /* AN.W1 — SFC scoped component CSS (folded so a single
227
+ @import "@mkbabb/glass-ui/styles" carries cascade + components) */
228
+ @import "../glass-ui.css";
229
+
230
+ /* P9 — component-utility rules (rounded-panel, text-muted-foreground,
231
+ …) shipped build-independently so a bare consumer paints them. */
232
+ @import "./components.css";
233
+
222
234
  @source "../*.js";
@@ -74,6 +74,28 @@
74
74
  --phase-color: var(--muted-foreground);
75
75
  --phase-color-label: var(--muted-foreground);
76
76
 
77
+ /* BB.W-PHASE-PALETTE (N18) — the `complete` phase ink is a CONSUMER
78
+ token, not a hardcoded brand metal. The four active phases
79
+ (ping/download/upload/jitter) already read a consumer-registerable
80
+ `--chart-{phase}` with a library `--viz-*` fallback (the bus carries
81
+ phase IDENTITY); `complete` was the one arm that pinned the gold
82
+ directly, so every completion gilded itself the moment the phase
83
+ flipped. `--phase-complete-color` (+ its WCAG-twin
84
+ `--phase-complete-color-label`) DEFAULT to the same gold the arm
85
+ hardcoded — an un-overriding consumer paints byte-identical gold (the
86
+ back-compat floor) — but a consumer (or any ancestor) overrides EITHER
87
+ on its host/preset to re-ink completion (its phase spectrum, an aurora
88
+ register, …), so gold is EARNED (the dock CTA + personal-best
89
+ garnish), never the chassis default leaking onto every completion.
90
+ The default lives at the chassis root (NOT :root/tokens.css) because
91
+ it is a chassis-phase register, scoped to the surface owning the bus —
92
+ the same home `--phase-color`'s idle default occupies above. It reads
93
+ `var(--color-gold)` / `var(--color-gold-dark)` (the existing mode-
94
+ resolved tokens, unedited), so it inherits the SAME .dark / light-dark
95
+ resolution the hardcoded form did. */
96
+ --phase-complete-color: var(--color-gold);
97
+ --phase-complete-color-label: var(--color-gold-dark, var(--color-gold));
98
+
77
99
  /* AV.W16 TW3 — inline-size container named `chassis` so the dial reflow
78
100
  below reads the chassis's OWN box, not the viewport (portable into a
79
101
  narrow host). */
@@ -157,7 +179,10 @@
157
179
  AND the structural twin-line grooves re-point from the warm-cream
158
180
  `--surface-tint-*` default onto the `--silver` quad (gold's cool mirror).
159
181
  The chassis reads as an INDUSTRIAL precision-instrument panel — the
160
- cool-metal twin of the warm-gold "complete"-phase affirmation.
182
+ cool-metal twin of the warm-gold "complete"-phase affirmation the chassis
183
+ ships BY DEFAULT (the `--phase-complete-color` consumer token's gold
184
+ default; BB.W-PHASE-PALETTE — a consumer may re-ink completion, but the
185
+ silver register's narration is of the warm-gold completion default).
161
186
 
162
187
  The phase cascade (`[data-phase="…"]`) stays ORTHOGONAL — a `structure`
163
188
  chassis still retints its phase fills on `data-phase`; only the
@@ -224,8 +249,15 @@
224
249
  --phase-tint-amount: var(--phase-tint-peak);
225
250
  }
226
251
  .instrument-chassis[data-phase="complete"] {
227
- --phase-color: var(--color-gold);
228
- --phase-color-label: var(--color-gold-dark, var(--color-gold));
252
+ /* BB.W-PHASE-PALETTE — demoted onto the `--phase-complete-color`
253
+ consumer seam (the exact `var(--chart-{phase}, …)` idiom the four
254
+ active arms above run). The arm reads ONLY the consumer token; the
255
+ gold lives in the token's DEFAULT at the chassis root, not as a
256
+ hardcoded ink here (a clean break with a back-compat default, NOT a
257
+ back-compat alias — no `--color-gold` dual-read survives). The warmth
258
+ ramp stays: `--phase-tint-amount` is orthogonal to the ink choice. */
259
+ --phase-color: var(--phase-complete-color);
260
+ --phase-color-label: var(--phase-complete-color-label);
229
261
  --phase-tint-amount: var(--phase-tint-peak);
230
262
  }
231
263
 
@@ -387,4 +419,35 @@
387
419
  height: 1px;
388
420
  }
389
421
  }
422
+
423
+ /* BB.W-DESKTOP-RESERVE (B3) — the WIDE-AXIS (desktop) dial reserve, the
424
+ EXACT DISJOINT COMPLEMENT of the mobile `@container chassis (max-width:
425
+ 44.9375rem)` reserve above: 44.9375rem ≈ 719px is the mobile ceiling, so
426
+ the desktop floor is 45rem ≈ 720px — the two container-query ranges share
427
+ no width, so a dial cell is reserved by exactly ONE branch at every box
428
+ width (no overlap, no gap, no competing `min-block-size`).
429
+
430
+ The mobile reflow reserves the dial box from frame 0; the wide box axis
431
+ had NO library reserve, so a `1fr` meter row collapsed to its pre-
432
+ hydration `<canvas>` intrinsic and grew on hydration, pushing the results
433
+ card + dock down (the desktop CLS the speedtest App.vue interim authored
434
+ a local `min-block-size: var(--chassis-max-block-size)` to cure — the
435
+ consumer interim this rung SUPERSEDES). The reserve is a STATIC
436
+ `min-block-size` — a frame-0 box reservation, NOT an animated height (no
437
+ per-frame layout, compositor-safe, `proof:no-layout-animation` holds: a
438
+ `min-block-size` reserve is never a `@keyframes`/`transition` target).
439
+
440
+ Token-first: `--instrument-dial-min-block-size-desktop` is the DESKTOP
441
+ DIAL a consumer overrides (default `var(--chassis-max-block-size)`, the
442
+ library's dock-adjusted dynamic-viewport guardrail, resolved at first
443
+ paint with no JS). The inline `var(--chassis-max-block-size)` fallback
444
+ carries the contract if the canonical token is unset. */
445
+ @container chassis (min-width: 45rem) {
446
+ .instrument-chassis .instrument-dial {
447
+ min-block-size: var(
448
+ --instrument-dial-min-block-size-desktop,
449
+ var(--chassis-max-block-size)
450
+ );
451
+ }
452
+ }
390
453
  }