@mkbabb/glass-ui 3.13.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 (507) hide show
  1. package/README.md +3 -1
  2. package/dist/CardAction-CW7a0m8M.js +253 -0
  3. package/dist/{CommandShortcut-RowNEO6i.js → CommandShortcut-DvZNQ_HF.js} +58 -53
  4. package/dist/ConfiguratorRow-BR4l-ixA.js +143 -0
  5. package/dist/{ContextMenuContent-CT3AS1WX.js → ContextMenuContent-uWnVxDab.js} +1 -1
  6. package/dist/{ContextMenuSubContent-BQmxTAdw.js → ContextMenuSubContent-xol4sD2q.js} +32 -37
  7. package/dist/{DataTable-BCddn3T3.js → DataTable-CuKwF7wr.js} +99 -97
  8. package/dist/DialogContent-DcKK8k9i.js +103 -0
  9. package/dist/{DialogFooter-Blu4t7tJ.js → DialogFooter-BZNX5aVr.js} +3 -3
  10. package/dist/FadingScroll-DI6hQhT9.js +76 -0
  11. package/dist/{HoverCardContent-Csywg3YF.js → HoverCardContent-b2uaAMRR.js} +1 -1
  12. package/dist/{HoverPopover-CISOJQuZ.js → HoverPopover-CbqbNwgU.js} +2 -2
  13. package/dist/IconChip-BTD-nay5.js +55 -0
  14. package/dist/{IconTooltip-DPzE09X9.js → IconTooltip-Bl8gFZ8d.js} +1 -1
  15. package/dist/{Input-DWQQIOC4.js → Input-h9v5LeXf.js} +1 -1
  16. package/dist/{MetricBadge-C9QMz1KT.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-DL7E6vJP.js +127 -0
  20. package/dist/{Progress-DwlUKGbr.js → Progress-DctG61iZ.js} +98 -78
  21. package/dist/{ScrollingText-DfFrwSph.js → ScrollingText-yOpBzFYq.js} +2 -2
  22. package/dist/{SelectScrollDownButton-CiDUxfEj.js → SelectScrollDownButton-CrA8F0iV.js} +35 -20
  23. package/dist/{Switch-CsIuYP_e.js → Switch-CwYNf8bo.js} +1 -1
  24. package/dist/Toaster-Bw4xR8xV.js +274 -0
  25. package/dist/{ToggleGroupItem-D_AHlRw9.js → ToggleGroupItem-pEM9vIhs.js} +50 -37
  26. package/dist/{TooltipProvider-B3MkB_8P.js → TooltipProvider-rzvnXz60.js} +1 -1
  27. package/dist/animated-digit.js +2 -2
  28. package/dist/api/index.d.ts +16 -8
  29. package/dist/api/types-extra.d.ts +6 -0
  30. package/dist/api.js +2 -2
  31. package/dist/aurora.js +888 -230
  32. package/dist/badge.js +1 -1
  33. package/dist/border-progress.d.ts +1 -0
  34. package/dist/border-progress.js +106 -0
  35. package/dist/button-DYCUa-tH.js +126 -0
  36. package/dist/button.js +1 -1
  37. package/dist/canvas.js +2 -2
  38. package/dist/card.js +2 -2
  39. package/dist/carousel.d.ts +1 -1
  40. package/dist/carousel.js +90 -151
  41. package/dist/collapsible.js +1 -1
  42. package/dist/color-swatch.d.ts +1 -0
  43. package/dist/color-swatch.js +47 -0
  44. package/dist/color.js +1 -1
  45. package/dist/command.js +1 -1
  46. package/dist/compile-CQEFRTmx.js +19 -0
  47. package/dist/components/custom/aurora/composables/atoms-fields.d.ts +39 -0
  48. package/dist/components/custom/aurora/composables/auroraFallbackGround.d.ts +108 -0
  49. package/dist/components/custom/aurora/composables/runtime.d.ts +19 -0
  50. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +5 -1
  51. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +51 -0
  52. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +29 -0
  53. package/dist/components/custom/aurora/constants/budget.d.ts +21 -0
  54. package/dist/components/custom/aurora/constants/presets.d.ts +30 -2
  55. package/dist/components/custom/aurora/constants/renderMode.d.ts +63 -10
  56. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -0
  57. package/dist/components/custom/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -0
  58. package/dist/components/custom/aurora/constants/shaders/procedural-color.wgsl.d.ts +4 -0
  59. package/dist/components/custom/aurora/index.d.ts +3 -2
  60. package/dist/components/custom/border-progress/BorderProgress.vue.d.ts +46 -0
  61. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +22 -0
  62. package/dist/components/custom/border-progress/constants.d.ts +59 -0
  63. package/dist/components/custom/border-progress/index.d.ts +4 -0
  64. package/dist/components/custom/color-swatch/ColorSwatch.vue.d.ts +22 -0
  65. package/dist/components/custom/color-swatch/index.d.ts +1 -0
  66. package/dist/components/custom/concentric/Concentric.vue.d.ts +39 -0
  67. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +11 -0
  68. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +13 -0
  69. package/dist/components/custom/concentric/composables/ringField.d.ts +44 -0
  70. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +13 -0
  71. package/dist/components/custom/concentric/composables/useConcentric.d.ts +35 -0
  72. package/dist/components/custom/concentric/constants.d.ts +43 -0
  73. package/dist/components/custom/concentric/index.d.ts +5 -0
  74. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +4 -0
  75. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -0
  76. package/dist/components/custom/configurator/Configurator.vue.d.ts +19 -8
  77. package/dist/components/custom/constellation/Constellation.vue.d.ts +18 -206
  78. package/dist/components/custom/constellation/composables/useConstellation.d.ts +26 -0
  79. package/dist/components/custom/constellation/constellationField.d.ts +2 -369
  80. package/dist/components/custom/constellation/constellationTypes.d.ts +369 -0
  81. package/dist/components/custom/constellation/index.d.ts +1 -1
  82. package/dist/components/custom/dock/DockIconButton.vue.d.ts +13 -4
  83. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +10 -2
  84. package/dist/components/custom/dock/DockRail.vue.d.ts +17 -16
  85. package/dist/components/custom/dock/DockSection.vue.d.ts +69 -0
  86. package/dist/components/custom/dock/DockSeparator.vue.d.ts +49 -1
  87. package/dist/components/custom/dock/DockTabButton.vue.d.ts +5 -5
  88. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +75 -0
  89. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -0
  90. package/dist/components/custom/dock/constants.d.ts +35 -0
  91. package/dist/components/custom/dock/index.d.ts +2 -0
  92. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +38 -0
  93. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +41 -0
  94. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +24 -0
  95. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +34 -0
  96. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -0
  97. package/dist/components/custom/dot-flow-field/constants.d.ts +48 -0
  98. package/dist/components/custom/dot-flow-field/index.d.ts +5 -0
  99. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -0
  100. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +20 -0
  101. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -0
  102. package/dist/components/custom/easing/EasingConfigurator.vue.d.ts +33 -0
  103. package/dist/components/custom/easing/EasingPicker.vue.d.ts +49 -0
  104. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +75 -0
  105. package/dist/components/custom/easing/constants.d.ts +28 -0
  106. package/dist/components/custom/easing/index.d.ts +3 -0
  107. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +10 -0
  108. package/dist/components/custom/fading-scroll/FadingScroll.vue.d.ts +25 -0
  109. package/dist/components/custom/fading-scroll/composables/useFadingScroll.d.ts +31 -0
  110. package/dist/components/custom/fading-scroll/constants.d.ts +19 -0
  111. package/dist/components/custom/fading-scroll/index.d.ts +2 -0
  112. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +19 -2
  113. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +39 -0
  114. package/dist/components/custom/fourier-field/constants.d.ts +7 -0
  115. package/dist/components/custom/fourier-field/index.d.ts +1 -1
  116. package/dist/components/custom/fourier-field/math.d.ts +17 -0
  117. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +9 -1
  118. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +4 -2
  119. package/dist/components/custom/goo-blob/composables/uniformBridgeWGPU.d.ts +24 -0
  120. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +29 -12
  121. package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +23 -0
  122. package/dist/components/custom/goo-blob/constants.d.ts +6 -1
  123. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -0
  124. package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
  125. package/dist/components/custom/handmark/brush.d.ts +269 -0
  126. package/dist/components/custom/handmark/composables/useHandMark.d.ts +89 -0
  127. package/dist/components/custom/handmark/constants.d.ts +39 -0
  128. package/dist/components/custom/handmark/freehand.d.ts +69 -0
  129. package/dist/components/custom/handmark/geometry.d.ts +52 -0
  130. package/dist/components/custom/handmark/index.d.ts +27 -0
  131. package/dist/components/custom/handmark/ink.d.ts +11 -0
  132. package/dist/components/custom/handmark/texture.d.ts +39 -0
  133. package/dist/components/custom/handmark/types.d.ts +62 -0
  134. package/dist/components/custom/icon-chip/IconChip.vue.d.ts +4 -0
  135. package/dist/components/custom/icon-chip/index.d.ts +2 -0
  136. package/dist/components/custom/icon-chip/types.d.ts +82 -0
  137. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +17 -2
  138. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
  139. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +39 -0
  140. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  141. package/dist/components/custom/spa-view/SpaView.vue.d.ts +50 -0
  142. package/dist/components/custom/spa-view/index.d.ts +2 -0
  143. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +29 -24
  144. package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +42 -0
  145. package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +30 -21
  146. package/dist/components/custom/tabs/constants.d.ts +9 -3
  147. package/dist/components/custom/tabs/index.d.ts +1 -1
  148. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +15 -1
  149. package/dist/components/ui/_shared/index.d.ts +2 -0
  150. package/dist/components/ui/_shared/menuItemVariants.d.ts +19 -0
  151. package/dist/components/ui/_shared/useSurfaceAxis.d.ts +41 -0
  152. package/dist/components/ui/badge/index.d.ts +1 -1
  153. package/dist/components/ui/button/Button.vue.d.ts +5 -2
  154. package/dist/components/ui/button/index.d.ts +2 -2
  155. package/dist/components/ui/card/Card.vue.d.ts +34 -4
  156. package/dist/components/ui/card/CardHeader.vue.d.ts +42 -16
  157. package/dist/components/ui/card/ScrollCard.vue.d.ts +33 -0
  158. package/dist/components/ui/card/ScrollCardHeader.vue.d.ts +17 -0
  159. package/dist/components/ui/card/index.d.ts +2 -0
  160. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
  161. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
  162. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +2 -2
  163. package/dist/components/ui/carousel/index.d.ts +0 -1
  164. package/dist/components/ui/command/Command.vue.d.ts +4 -1
  165. package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -3
  166. package/dist/components/ui/drawer/Drawer.vue.d.ts +46 -33
  167. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +12 -8
  168. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +2 -2
  169. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +1 -1
  170. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +2 -2
  171. package/dist/components/ui/drawer/composables/drawerSnapContext.d.ts +26 -0
  172. package/dist/components/ui/drawer/composables/useDrawerSnap.d.ts +17 -0
  173. package/dist/components/ui/drawer/constants.d.ts +45 -0
  174. package/dist/components/ui/drawer/index.d.ts +23 -15
  175. package/dist/components/ui/focus-scope/FocusScope.vue.d.ts +20 -0
  176. package/dist/components/ui/focus-scope/index.d.ts +2 -0
  177. package/dist/components/ui/index.d.ts +1 -1
  178. package/dist/components/ui/popover/PopoverContent.vue.d.ts +3 -0
  179. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +3 -2
  180. package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +14 -3
  181. package/dist/components/ui/select/SelectContent.vue.d.ts +1 -1
  182. package/dist/components/ui/select/SelectTrigger.vue.d.ts +27 -4
  183. package/dist/components/ui/sheet/SheetContent.vue.d.ts +6 -0
  184. package/dist/components/ui/sheet/index.d.ts +1 -1
  185. package/dist/components/ui/skeleton/Skeleton.vue.d.ts +3 -0
  186. package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
  187. package/dist/components/ui/toast/Toast.vue.d.ts +5 -2
  188. package/dist/components/ui/toast/use-toast.d.ts +14 -0
  189. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  190. package/dist/composables/dark/index.d.ts +1 -1
  191. package/dist/composables/dark/useGlobalDark.d.ts +23 -1
  192. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +13 -6
  193. package/dist/composables/glass/index.d.ts +5 -2
  194. package/dist/composables/glass/useSpecularPointer.d.ts +33 -0
  195. package/dist/composables/glass/useSpecularTracking.d.ts +20 -0
  196. package/dist/composables/glass/vSpecular.d.ts +2 -0
  197. package/dist/composables/glass/webgl/shaders/flow.glsl.d.ts +1 -0
  198. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -0
  199. package/dist/composables/glass/webgpu/index.d.ts +2 -0
  200. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +54 -0
  201. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +84 -0
  202. package/dist/composables/motion/core/index.d.ts +1 -0
  203. package/dist/composables/motion/index.d.ts +4 -0
  204. package/dist/composables/motion/useDockCtaReceive.d.ts +59 -0
  205. package/dist/composables/motion/useDragMorph.d.ts +77 -0
  206. package/dist/composables/motion/useLiquidFlex.d.ts +11 -0
  207. package/dist/composables/motion/useLiquidPress.d.ts +71 -0
  208. package/dist/composables/motion/useLiquidReveal.d.ts +51 -0
  209. package/dist/composables/motion/useNumericTransition.d.ts +3 -3
  210. package/dist/composables/motion/usePointerVelocityField.d.ts +98 -0
  211. package/dist/composables/motion/useViewTransition.d.ts +36 -1
  212. package/dist/concentric.d.ts +1 -0
  213. package/dist/concentric.js +562 -0
  214. package/dist/configurator.js +3 -2
  215. package/dist/confirm-dialog.js +22 -24
  216. package/dist/constellation.js +93 -95
  217. package/dist/context-menu.js +3 -3
  218. package/dist/controls.js +10 -4
  219. package/dist/createCanvasLifecycle-CHD5XrDW.js +82 -0
  220. package/dist/dark.d.ts +1 -1
  221. package/dist/dark.js +1 -1
  222. package/dist/data-table.js +1 -1
  223. package/dist/dialog.js +2 -2
  224. package/dist/dock.js +738 -442
  225. package/dist/{dockContext-BegmJVmx.js → dockContext-BNfyPLe9.js} +1 -1
  226. package/dist/dom.js +5 -5
  227. package/dist/dot-flow-field.d.ts +1 -0
  228. package/dist/dot-flow-field.js +604 -0
  229. package/dist/drawer.d.ts +1 -0
  230. package/dist/drawer.js +380 -0
  231. package/dist/{dropdown-menu-DzkkyBwX.js → dropdown-menu-CofSZuk8.js} +14 -15
  232. package/dist/dropdown-menu.js +1 -1
  233. package/dist/easing.d.ts +1 -0
  234. package/dist/easing.js +463 -0
  235. package/dist/expandable-container.js +45 -38
  236. package/dist/fading-scroll.d.ts +1 -0
  237. package/dist/fading-scroll.js +2 -0
  238. package/dist/focus-scope.d.ts +1 -0
  239. package/dist/focus-scope.js +23 -0
  240. package/dist/forms.js +7 -7
  241. package/dist/fourier-field.js +135 -122
  242. package/dist/fourier-math.js +2 -2
  243. package/dist/glass-panel.js +39 -36
  244. package/dist/glass-ui.css +1 -1
  245. package/dist/glass-ui.js +154 -362
  246. package/dist/goo-blob.js +838 -227
  247. package/dist/handmark.d.ts +1 -0
  248. package/dist/handmark.js +707 -0
  249. package/dist/header-ribbon.js +1 -1
  250. package/dist/hover-card.js +1 -1
  251. package/dist/hover-popover.js +1 -1
  252. package/dist/icon-chip.d.ts +1 -0
  253. package/dist/icon-chip.js +2 -0
  254. package/dist/icon-tooltip.js +1 -1
  255. package/dist/index.d.ts +3 -3
  256. package/dist/instrument-chassis.js +1 -1
  257. package/dist/keyboard.js +1 -1
  258. package/dist/label.js +1 -1
  259. package/dist/labeled-field.js +6 -6
  260. package/dist/{math-U6-RrLmV.js → math-BINYmg5z.js} +11 -3
  261. package/dist/{menuItemVariants-DPiEarb0.js → menuItemVariants-D8VNHq22.js} +10 -4
  262. package/dist/metric-badge.js +1 -1
  263. package/dist/metric-cell.js +25 -22
  264. package/dist/metric-stack.js +4 -8
  265. package/dist/motion-core.js +36 -35
  266. package/dist/motion-curves.js +1 -1
  267. package/dist/motion.js +157 -55
  268. package/dist/notification.js +1 -1
  269. package/dist/number-field.js +1 -1
  270. package/dist/pager-dots.d.ts +1 -0
  271. package/dist/pager-dots.js +91 -0
  272. package/dist/paper-backdrop.js +1 -1
  273. package/dist/popover.js +1 -1
  274. package/dist/{presets-BKVyQfbt.js → presets-BW2b-fr1.js} +14 -1
  275. package/dist/{compile-B7NGOBcP.js → procedural-color.glsl-CIFsJhwI.js} +1 -155
  276. package/dist/procedural-color.wgsl-CToRHugY.js +224 -0
  277. package/dist/progress.js +1 -1
  278. package/dist/pulse.js +1 -1
  279. package/dist/reactive.js +2 -2
  280. package/dist/scrolling-text.js +1 -1
  281. package/dist/search.js +10 -12
  282. package/dist/select.js +3 -3
  283. package/dist/separator.js +1 -1
  284. package/dist/sheet-tZMg0E0w.js +218 -0
  285. package/dist/sheet.js +1 -1
  286. package/dist/{slider-B-JP2JlI.js → slider-DVb4HXU-.js} +7 -7
  287. package/dist/slider.js +1 -1
  288. package/dist/sortable-list.js +3 -3
  289. package/dist/spa-view.d.ts +1 -0
  290. package/dist/spa-view.js +46 -0
  291. package/dist/styles/animations.css +40 -31
  292. package/dist/styles/border-progress.css +109 -0
  293. package/dist/styles/cards.css +76 -0
  294. package/dist/styles/components.css +1 -1
  295. package/dist/styles/configurator.css +35 -0
  296. package/dist/styles/critical-partition.mjs +140 -0
  297. package/dist/styles/critical.css +12 -0
  298. package/dist/styles/deferred.css +31 -0
  299. package/dist/styles/dock/density.css +64 -0
  300. package/dist/styles/dock/layers.css +54 -30
  301. package/dist/styles/dock/morph.css +124 -7
  302. package/dist/styles/dock/overflow.css +31 -2
  303. package/dist/styles/dock/rail-extend.css +168 -71
  304. package/dist/styles/dock/section.css +59 -0
  305. package/dist/styles/dock/shell.css +83 -16
  306. package/dist/styles/dock-controls/icon-button.css +11 -1
  307. package/dist/styles/dock-controls/tab-button.css +24 -83
  308. package/dist/styles/dock-controls/triggers.css +7 -0
  309. package/dist/styles/dock.css +38 -3
  310. package/dist/styles/drawer.css +127 -35
  311. package/dist/styles/feedback-tone.css +104 -0
  312. package/dist/styles/glass/deep.css +44 -0
  313. package/dist/styles/glass/ladder.css +154 -52
  314. package/dist/styles/glass/material.css +78 -15
  315. package/dist/styles/glass/reveal.css +136 -0
  316. package/dist/styles/glass/rim.css +100 -0
  317. package/dist/styles/glass/surface-axis.css +113 -0
  318. package/dist/styles/glass/surfaces.css +189 -15
  319. package/dist/styles/glass-refract.css +96 -44
  320. package/dist/styles/glass-specular-track.css +7 -0
  321. package/dist/styles/glass.css +8 -2
  322. package/dist/styles/hover-popover.css +7 -6
  323. package/dist/styles/icon-chip.css +211 -0
  324. package/dist/styles/index.css +78 -4
  325. package/dist/styles/instrument-chassis.css +107 -2
  326. package/dist/styles/menu.css +127 -0
  327. package/dist/styles/scroll-choreography.css +300 -0
  328. package/dist/styles/segmented-tabs.css +188 -86
  329. package/dist/styles/select.css +50 -0
  330. package/dist/styles/theme/bridges.css +22 -1
  331. package/dist/styles/theme/literals.css +11 -2
  332. package/dist/styles/theme/radius.css +6 -1
  333. package/dist/styles/tokens/color-radius.css +40 -13
  334. package/dist/styles/tokens/dark-arm.css +200 -20
  335. package/dist/styles/tokens/glass-deep.css +75 -0
  336. package/dist/styles/tokens/glass-fx.css +333 -0
  337. package/dist/styles/tokens/glass.css +95 -315
  338. package/dist/styles/tokens/light-dark.css +64 -22
  339. package/dist/styles/tokens/offsets.css +116 -0
  340. package/dist/styles/tokens/on-glass-fg.css +39 -0
  341. package/dist/styles/tokens/property-regs.css +130 -10
  342. package/dist/styles/tokens/scale-paper.css +155 -84
  343. package/dist/styles/tokens/scheme-motion.css +102 -46
  344. package/dist/styles/tokens/scroll-tokens.css +123 -0
  345. package/dist/styles/tokens/{offsets-sizing.css → sizing.css} +88 -89
  346. package/dist/styles/tokens.css +9 -3
  347. package/dist/styles/transitions.css +7 -7
  348. package/dist/styles/typography/scale.css +153 -0
  349. package/dist/styles/typography/semantic.css +220 -0
  350. package/dist/styles/typography/utilities.css +174 -0
  351. package/dist/styles/typography.css +23 -507
  352. package/dist/styles/utilities/a11y-overrides.css +33 -4
  353. package/dist/styles/utilities/animate.css +27 -24
  354. package/dist/styles/utilities/base-misc.css +255 -0
  355. package/dist/styles/utilities/base.css +100 -138
  356. package/dist/styles/utilities/btn.css +21 -202
  357. package/dist/styles/utilities/metal.css +189 -0
  358. package/dist/styles/utilities.css +14 -7
  359. package/dist/styles/view-transition.css +4 -1
  360. package/dist/switch.js +1 -1
  361. package/dist/tabs.js +275 -191
  362. package/dist/timeline.js +2 -2
  363. package/dist/toast.js +1 -1
  364. package/dist/toggle-chip.js +3 -1
  365. package/dist/toggle-group.js +1 -1
  366. package/dist/tooltip.js +1 -1
  367. package/dist/typewriter.js +1 -1
  368. package/dist/{useAnimatedNumber-C5I3wWd8.js → useAnimatedNumber-BfUq2bUM.js} +1 -1
  369. package/dist/useCanvas2D-B8w_E3Rr.js +83 -0
  370. package/dist/useConfiguratorState-DNlOh6c8.js +161 -0
  371. package/dist/useDragMorph-DgxnsVJz.js +102 -0
  372. package/dist/{useGlobalDark-yhL4Wp-s.js → useGlobalDark-C28t0VWJ.js} +22 -3
  373. package/dist/useLiquidPress-kfb4KX79.js +39 -0
  374. package/dist/usePointerVelocityField-JbRd5CrM.js +137 -0
  375. package/dist/{useRAFLoop-Bxv0o6L5.js → useRAFLoop-UYa4zoiN.js} +1 -1
  376. package/dist/useSpring-C0jyvEJB.js +40 -0
  377. package/dist/useSpringMount-q1amq1SJ.js +71 -0
  378. package/dist/useSpringPress-BsqPr7FJ.js +34 -0
  379. package/dist/useSurfaceAxis-g0NloYEF.js +7 -0
  380. package/dist/{useTouchGate-Dg7MQI1G.js → useTouchGate-CBZTD4SD.js} +1 -1
  381. package/dist/vReveal-Czsb7zQC.js +10 -0
  382. package/dist/vSpecular-CQFmLNzA.js +68 -0
  383. package/dist/vendor-CKmzio-i.js +226 -0
  384. package/dist/watercolor-dot.js +12 -5
  385. package/package.json +193 -25
  386. package/src/styles/animations.css +40 -31
  387. package/src/styles/border-progress.css +109 -0
  388. package/src/styles/cards.css +76 -0
  389. package/src/styles/configurator.css +35 -0
  390. package/src/styles/critical-partition.mjs +140 -0
  391. package/src/styles/dock/density.css +64 -0
  392. package/src/styles/dock/layers.css +54 -30
  393. package/src/styles/dock/morph.css +124 -7
  394. package/src/styles/dock/overflow.css +31 -2
  395. package/src/styles/dock/rail-extend.css +168 -71
  396. package/src/styles/dock/section.css +59 -0
  397. package/src/styles/dock/shell.css +83 -16
  398. package/src/styles/dock-controls/icon-button.css +11 -1
  399. package/src/styles/dock-controls/tab-button.css +24 -83
  400. package/src/styles/dock-controls/triggers.css +7 -0
  401. package/src/styles/dock.css +38 -3
  402. package/src/styles/drawer.css +123 -35
  403. package/src/styles/feedback-tone.css +104 -0
  404. package/src/styles/glass/deep.css +44 -0
  405. package/src/styles/glass/ladder.css +154 -52
  406. package/src/styles/glass/material.css +78 -15
  407. package/src/styles/glass/reveal.css +136 -0
  408. package/src/styles/glass/rim.css +100 -0
  409. package/src/styles/glass/surface-axis.css +113 -0
  410. package/src/styles/glass/surfaces.css +189 -15
  411. package/src/styles/glass-refract.css +96 -44
  412. package/src/styles/glass-specular-track.css +7 -0
  413. package/src/styles/glass.css +8 -2
  414. package/src/styles/hover-popover.css +7 -6
  415. package/src/styles/icon-chip.css +211 -0
  416. package/src/styles/index.css +78 -4
  417. package/src/styles/instrument-chassis.css +107 -2
  418. package/src/styles/menu.css +127 -0
  419. package/src/styles/scroll-choreography.css +300 -0
  420. package/src/styles/segmented-tabs.css +184 -84
  421. package/src/styles/select.css +50 -0
  422. package/src/styles/theme/bridges.css +22 -1
  423. package/src/styles/theme/literals.css +11 -2
  424. package/src/styles/theme/radius.css +6 -1
  425. package/src/styles/tokens/color-radius.css +40 -13
  426. package/src/styles/tokens/dark-arm.css +200 -20
  427. package/src/styles/tokens/glass-deep.css +75 -0
  428. package/src/styles/tokens/glass-fx.css +333 -0
  429. package/src/styles/tokens/glass.css +95 -315
  430. package/src/styles/tokens/light-dark.css +64 -22
  431. package/src/styles/tokens/offsets.css +116 -0
  432. package/src/styles/tokens/on-glass-fg.css +39 -0
  433. package/src/styles/tokens/property-regs.css +130 -10
  434. package/src/styles/tokens/scale-paper.css +155 -84
  435. package/src/styles/tokens/scheme-motion.css +102 -46
  436. package/src/styles/tokens/scroll-tokens.css +123 -0
  437. package/src/styles/tokens/{offsets-sizing.css → sizing.css} +88 -89
  438. package/src/styles/tokens.css +9 -3
  439. package/src/styles/transitions.css +7 -7
  440. package/src/styles/typography/scale.css +153 -0
  441. package/src/styles/typography/semantic.css +220 -0
  442. package/src/styles/typography/utilities.css +174 -0
  443. package/src/styles/typography.css +23 -507
  444. package/src/styles/utilities/a11y-overrides.css +33 -4
  445. package/src/styles/utilities/animate.css +27 -24
  446. package/src/styles/utilities/base-misc.css +255 -0
  447. package/src/styles/utilities/base.css +100 -138
  448. package/src/styles/utilities/btn.css +21 -202
  449. package/src/styles/utilities/metal.css +189 -0
  450. package/src/styles/utilities.css +14 -7
  451. package/src/styles/view-transition.css +4 -1
  452. package/dist/CardAction-Cj2eycQ2.js +0 -157
  453. package/dist/DialogContent-Dl9WkAoS.js +0 -100
  454. package/dist/Notification-DdwNxIrI.js +0 -100
  455. package/dist/NumberFieldContent-CqaN-SvN.js +0 -145
  456. package/dist/PopoverContent-BYwt2-4x.js +0 -121
  457. package/dist/TabsList-Dttss653.js +0 -105
  458. package/dist/Toaster-D6q4HtXu.js +0 -263
  459. package/dist/button-ChXMfsud.js +0 -81
  460. package/dist/check-njhk-vfu.js +0 -7
  461. package/dist/chevron-down-DKkxb4VV.js +0 -7
  462. package/dist/chevron-right-CPXbqQQz.js +0 -7
  463. package/dist/chevron-up-n_24SqI-.js +0 -7
  464. package/dist/components/custom/underline/GlassUnderline.vue.d.ts +0 -84
  465. package/dist/components/custom/underline/index.d.ts +0 -2
  466. package/dist/components/custom/underline/types.d.ts +0 -56
  467. package/dist/components/ui/carousel/CarouselDots.vue.d.ts +0 -4
  468. package/dist/createLucideIcon-DydS2qgk.js +0 -43
  469. package/dist/minimize-2-BV31Ob_h.js +0 -38
  470. package/dist/search-BSGrf2Sk.js +0 -12
  471. package/dist/sheet-1fChZjtw.js +0 -214
  472. package/dist/underline.d.ts +0 -1
  473. package/dist/underline.js +0 -85
  474. package/dist/useCanvas2D-ClrQuZtp.js +0 -96
  475. package/dist/useConfiguratorState-DAoeHVue.js +0 -287
  476. package/dist/useSpecularTracking-Bo5su68i.js +0 -32
  477. package/dist/useSpringMount-CI2jOstM.js +0 -108
  478. package/dist/vReveal-CqaCz_mC.js +0 -44
  479. package/dist/x-BUwTKe50.js +0 -10
  480. /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-68dEXIAl.js} +0 -0
  481. /package/dist/{InstrumentChassis-UUJX0-mW.js → InstrumentChassis-Bx0F_q5g.js} +0 -0
  482. /package/dist/{Label-r3WzWrsj.js → Label-C2ejNWeC.js} +0 -0
  483. /package/dist/{ModalOverlay-DVLI2VRr.js → ModalOverlay-D1VrWyoi.js} +0 -0
  484. /package/dist/{PaperBackdrop-DIXTtVq6.js → PaperBackdrop-Vf3tlpvd.js} +0 -0
  485. /package/dist/{SelectGroup-aumMgWLs.js → SelectGroup-DwwjicPY.js} +0 -0
  486. /package/dist/{SelectSeparator-BQ_1Fcbp.js → SelectSeparator-DXswVdRz.js} +0 -0
  487. /package/dist/{Separator-0JE6LtNu.js → Separator-pKF0oA4M.js} +0 -0
  488. /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
  489. /package/dist/{badge-UILT_3pZ.js → badge-D9XWW4GT.js} +0 -0
  490. /package/dist/{color-CUYeFbgd.js → color-DweYl7pE.js} +0 -0
  491. /package/dist/{constants-CS75AWHG.js → constants-BPOqYJAm.js} +0 -0
  492. /package/dist/{createContext-BM46COQ-.js → createContext-CpBNTRMI.js} +0 -0
  493. /package/dist/{prng-D27-B3tK.js → prng-Za0Rmgag.js} +0 -0
  494. /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CUyHr5Uu.js} +0 -0
  495. /package/dist/{springPresets--YdWTHtm.js → springPresets-CFQGQfdl.js} +0 -0
  496. /package/dist/{useIntersectionPause-Cc-H9ees.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
  497. /package/dist/{useInterval-iHludrxk.js → useInterval-CvK1mL92.js} +0 -0
  498. /package/dist/{useKeyboardShortcuts-Be3w_Rwk.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
  499. /package/dist/{useLiquidFlex-BL0lLLN2.js → useLiquidFlex-mZPMiNXh.js} +0 -0
  500. /package/dist/{useResizeObserver-BhgdhOIj.js → useResizeObserver-Bpoi7tRE.js} +0 -0
  501. /package/dist/{useResolveTokenColor-Dvn2RZJW.js → useResolveTokenColor-vAylyR0x.js} +0 -0
  502. /package/dist/{useScrollProgress-Dlvx-L3v.js → useScrollProgress-D7bYU2RK.js} +0 -0
  503. /package/dist/{useSortable-muI29agz.js → useSortable-DHjtZSEd.js} +0 -0
  504. /package/dist/{useTextHighlight-DmRYkOBx.js → useTextHighlight-CWEi25hf.js} +0 -0
  505. /package/dist/{useTimer-Dzarvzuk.js → useTimer-BHJOKr35.js} +0 -0
  506. /package/dist/{useUserInvalidAria-B2h6jAM_.js → useUserInvalidAria-y5namzeE.js} +0 -0
  507. /package/dist/{useViewportReady-B40FK4Pa.js → useViewportReady-anbac3m6.js} +0 -0
@@ -72,6 +72,28 @@
72
72
  --phase-color: var(--muted-foreground);
73
73
  --phase-color-label: var(--muted-foreground);
74
74
 
75
+ /* BB.W-PHASE-PALETTE (N18) — the `complete` phase ink is a CONSUMER
76
+ token, not a hardcoded brand metal. The four active phases
77
+ (ping/download/upload/jitter) already read a consumer-registerable
78
+ `--chart-{phase}` with a library `--viz-*` fallback (the bus carries
79
+ phase IDENTITY); `complete` was the one arm that pinned the gold
80
+ directly, so every completion gilded itself the moment the phase
81
+ flipped. `--phase-complete-color` (+ its WCAG-twin
82
+ `--phase-complete-color-label`) DEFAULT to the same gold the arm
83
+ hardcoded — an un-overriding consumer paints byte-identical gold (the
84
+ back-compat floor) — but a consumer (or any ancestor) overrides EITHER
85
+ on its host/preset to re-ink completion (its phase spectrum, an aurora
86
+ register, …), so gold is EARNED (the dock CTA + personal-best
87
+ garnish), never the chassis default leaking onto every completion.
88
+ The default lives at the chassis root (NOT :root/tokens.css) because
89
+ it is a chassis-phase register, scoped to the surface owning the bus —
90
+ the same home `--phase-color`'s idle default occupies above. It reads
91
+ `var(--color-gold)` / `var(--color-gold-dark)` (the existing mode-
92
+ resolved tokens, unedited), so it inherits the SAME .dark / light-dark
93
+ resolution the hardcoded form did. */
94
+ --phase-complete-color: var(--color-gold);
95
+ --phase-complete-color-label: var(--color-gold-dark, var(--color-gold));
96
+
75
97
  /* AV.W16 TW3 — inline-size container named `chassis` so the dial reflow
76
98
  below reads the chassis's OWN box, not the viewport (portable into a
77
99
  narrow host). */
@@ -146,6 +168,51 @@
146
168
  display: none;
147
169
  }
148
170
 
171
+ /* ─────────────────────────────────────────────────────────────
172
+ BA.W-ATLAS-RECONCILE C-3 — structure variant (SILVER MILLED-METAL register)
173
+
174
+ The cool polished-steel housing read: the engraved-bezel `::before` stroke
175
+ AND the structural twin-line grooves re-point from the warm-cream
176
+ `--surface-tint-*` default onto the `--silver` quad (gold's cool mirror).
177
+ The chassis reads as an INDUSTRIAL precision-instrument panel — the
178
+ cool-metal twin of the warm-gold "complete"-phase affirmation the chassis
179
+ ships BY DEFAULT (the `--phase-complete-color` consumer token's gold
180
+ default; BB.W-PHASE-PALETTE — a consumer may re-ink completion, but the
181
+ silver register's narration is of the warm-gold completion default).
182
+
183
+ The phase cascade (`[data-phase="…"]`) stays ORTHOGONAL — a `structure`
184
+ chassis still retints its phase fills on `data-phase`; only the
185
+ structure-metal recipe (bezel + grooves) forks here. Consumer #2 of the
186
+ silver quad (the atlas's structure surface is consumer #1).
187
+
188
+ The silver is the W-NO-GRAY NAMED cool-neutral exception (a brand METAL
189
+ identity, not a neutral — its very-low chroma reads as milled steel, the
190
+ cool hue distinguishes it from the warm glass plate).
191
+ ───────────────────────────────────────────────────────────── */
192
+ .instrument-chassis[data-variant="structure"] {
193
+ /* The milled-panel edge: the chassis border lifts off the resting glass
194
+ edge onto a hairline silver structure stroke. */
195
+ border-color: color-mix(in oklab, var(--color-silver-dark) 55%, transparent);
196
+ }
197
+
198
+ /* The engraved bezel re-tints to the cool silver catch (the polished sleeve
199
+ reads as steel, not warm-cream). */
200
+ .instrument-chassis[data-variant="structure"]::before {
201
+ border-color: color-mix(in oklab, var(--color-silver-light) 60%, transparent);
202
+ }
203
+ .dark .instrument-chassis[data-variant="structure"]::before {
204
+ border-color: color-mix(in oklab, var(--color-silver) 40%, transparent);
205
+ }
206
+
207
+ /* The structural grooves re-point to the silver twin-line: the catch reads
208
+ the light silver, the under-shadow the dark silver — a milled seam, not the
209
+ default warm twin-line. ONE re-point at the variant root; every
210
+ `<ChassisDivider>` inside a structure chassis inherits it. */
211
+ .instrument-chassis[data-variant="structure"] {
212
+ --twin-line-catch: color-mix(in oklab, var(--color-silver-light) 50%, transparent);
213
+ --twin-line-shadow: color-mix(in oklab, var(--color-silver-dark) 40%, transparent);
214
+ }
215
+
149
216
  /* Phase-color cascade — single property, full chassis-wide retint.
150
217
  `--phase-color-label` mirrors the cascade through the WCAG companion
151
218
  tokens (AC.W6c F1.V-04). The label register falls back to the canvas
@@ -178,8 +245,15 @@
178
245
  --phase-tint-amount: var(--phase-tint-peak);
179
246
  }
180
247
  .instrument-chassis[data-phase="complete"] {
181
- --phase-color: var(--color-gold);
182
- --phase-color-label: var(--color-gold-dark, var(--color-gold));
248
+ /* BB.W-PHASE-PALETTE — demoted onto the `--phase-complete-color`
249
+ consumer seam (the exact `var(--chart-{phase}, …)` idiom the four
250
+ active arms above run). The arm reads ONLY the consumer token; the
251
+ gold lives in the token's DEFAULT at the chassis root, not as a
252
+ hardcoded ink here (a clean break with a back-compat default, NOT a
253
+ back-compat alias — no `--color-gold` dual-read survives). The warmth
254
+ ramp stays: `--phase-tint-amount` is orthogonal to the ink choice. */
255
+ --phase-color: var(--phase-complete-color);
256
+ --phase-color-label: var(--phase-complete-color-label);
183
257
  --phase-tint-amount: var(--phase-tint-peak);
184
258
  }
185
259
 
@@ -341,4 +415,35 @@
341
415
  height: 1px;
342
416
  }
343
417
  }
418
+
419
+ /* BB.W-DESKTOP-RESERVE (B3) — the WIDE-AXIS (desktop) dial reserve, the
420
+ EXACT DISJOINT COMPLEMENT of the mobile `@container chassis (max-width:
421
+ 44.9375rem)` reserve above: 44.9375rem ≈ 719px is the mobile ceiling, so
422
+ the desktop floor is 45rem ≈ 720px — the two container-query ranges share
423
+ no width, so a dial cell is reserved by exactly ONE branch at every box
424
+ width (no overlap, no gap, no competing `min-block-size`).
425
+
426
+ The mobile reflow reserves the dial box from frame 0; the wide box axis
427
+ had NO library reserve, so a `1fr` meter row collapsed to its pre-
428
+ hydration `<canvas>` intrinsic and grew on hydration, pushing the results
429
+ card + dock down (the desktop CLS the speedtest App.vue interim authored
430
+ a local `min-block-size: var(--chassis-max-block-size)` to cure — the
431
+ consumer interim this rung SUPERSEDES). The reserve is a STATIC
432
+ `min-block-size` — a frame-0 box reservation, NOT an animated height (no
433
+ per-frame layout, compositor-safe, `proof:no-layout-animation` holds: a
434
+ `min-block-size` reserve is never a `@keyframes`/`transition` target).
435
+
436
+ Token-first: `--instrument-dial-min-block-size-desktop` is the DESKTOP
437
+ DIAL a consumer overrides (default `var(--chassis-max-block-size)`, the
438
+ library's dock-adjusted dynamic-viewport guardrail, resolved at first
439
+ paint with no JS). The inline `var(--chassis-max-block-size)` fallback
440
+ carries the contract if the canonical token is unset. */
441
+ @container chassis (min-width: 45rem) {
442
+ .instrument-chassis .instrument-dial {
443
+ min-block-size: var(
444
+ --instrument-dial-min-block-size-desktop,
445
+ var(--chassis-max-block-size)
446
+ );
447
+ }
448
+ }
344
449
  }
@@ -0,0 +1,127 @@
1
+ /* menu.css — the glass MENU-ROW + MENU-SECTION register (BA.W-MENU-GLASS).
2
+
3
+ The shared `menuItemVariants` CVA's `surface=glass` arm (the DEFAULT, glass-
4
+ first canon AX.W54) composes `.glass-menu-row`; all 13 menu/picker-family SFCs
5
+ inherit the glassy hover-lift register in ONE edit (no per-SFC menu-row CSS).
6
+
7
+ ── The cascade-trap pre-empt (the AZ dock-rail `@layer`-loses-to-utility trap) ──
8
+ `.interactive-item:hover` (utilities/base.css, `@layer components`) paints a flat
9
+ `color-mix(--accent 50%)` hover background. An UNLAYERED Tailwind `hover:bg-accent`
10
+ utility would win over BOTH (the trap). The CVA's glass arm therefore DROPS the
11
+ flat-accent utilities entirely — so the only background-painters on a glass row are
12
+ the `@layer components` `.interactive-item:hover` rule and these `.glass-menu-row`
13
+ rules. This file is `@import`-ed AFTER `utilities.css` in `index.css`, so at equal
14
+ specificity (0-1-1 for the `:hover`/`[data-highlighted]` selectors) and equal layer
15
+ (`components`) the recipe wins by SOURCE ORDER over `.interactive-item:hover` —
16
+ exactly the discipline `glass/surface-axis.css` uses ("@import-ed AFTER ladder.css
17
+ so the attr rules win by source order"). NEVER re-add an unlayered flat-accent
18
+ utility to the glass arm — it would re-introduce the trap.
19
+
20
+ ── The element-level tint discipline (substitution-vs-inheritance) ──
21
+ The row reads the ELEMENT-LEVEL glass-quiet oklab tint
22
+ `color-mix(in oklab, var(--glass-bg-quiet), var(--glass-tint-source) var(--glass-tint-strength))`
23
+ — the SAME seam `glass/ladder.css:58` / `glass/surfaces.css:19` compose — NOT the
24
+ pre-baked `--glass-bg-quiet` raw token. So the row darkens-over-light (W55 bright
25
+ bucket / `--glass-tint-strength` lift) AND lifts-over-dark per W-DARK-MATERIAL's
26
+ tint arm, in lockstep with every other glass surface. */
27
+ @layer components {
28
+ /* ── .glass-menu-row — the glassy hover-lift menu/picker item ──────────────
29
+ Every visual axis reads a `--menu-row-*` knob so a consumer retunes via a
30
+ `:root` override. The REST state is transparent (the row sits on the
31
+ container's own `glass-floating` plate — DropdownMenuContent /
32
+ ContextMenuContent are already `glass-floating rounded-panel`); the glass
33
+ PLATE materializes on hover/focus/highlight. */
34
+ .glass-menu-row {
35
+ /* The glass-quiet plate the row paints AT THE ELEMENT on hover/highlight
36
+ (the element-level oklab tint — see header). Overridable. */
37
+ --menu-row-bg: color-mix(
38
+ in oklab,
39
+ var(--glass-bg-quiet),
40
+ var(--glass-tint-source) var(--glass-tint-strength)
41
+ );
42
+ /* The PRM-gated hover-lift travel (zeroed under reduce, below). */
43
+ --menu-row-lift: -1px;
44
+ /* The 44px WCAG-2.5.5 touch floor (the row never reflows below it). The
45
+ base is the CVA's own py rhythm; the clamp guarantees the floor. Reads
46
+ `--touch-target` (the 44px token declared UNCONDITIONALLY at :root —
47
+ offsets-sizing.css), NOT `--control-floor` (which is declared ONLY inside
48
+ the `@media (pointer: coarse)` block, so on a FINE pointer `var(--control-
49
+ floor)` resolves to the guaranteed-invalid initial value → 0px in the
50
+ max(), and the floor silently vanished — the live π caught the 36px row).
51
+ The `2.75rem` literal fallback covers a consumer who unsets the token. */
52
+ min-block-size: max(2rem, var(--touch-target, 2.75rem));
53
+
54
+ /* The lift transform rides the §6 spring register (`--spring-smooth`); the
55
+ surface props (background) ride the bezier `--ease-standard` via the
56
+ `.interactive-item` base transition (already declared there). The
57
+ explicit transform leg here pairs the spring with the lift. */
58
+ transition: translate var(--duration-fast) var(--spring-smooth);
59
+ translate: 0 0;
60
+ }
61
+
62
+ /* Hover / keyboard-focus / reka internal-highlight / sub-trigger-open all
63
+ reach the SAME glass register (Combobox/Command/Select parity — the CVA
64
+ routes all three input modes through `data-[highlighted]`). */
65
+ .glass-menu-row:hover:not([data-disabled]),
66
+ .glass-menu-row:focus:not([data-disabled]),
67
+ .glass-menu-row[data-highlighted]:not([data-disabled]),
68
+ .glass-menu-row[data-state="open"]:not([data-disabled]) {
69
+ background: var(--menu-row-bg);
70
+ color: var(--accent-foreground);
71
+ translate: 0 var(--menu-row-lift);
72
+ }
73
+
74
+ /* ── .glass-menu-section — the mono section-label + hairline row-group ──────
75
+ The "section caption + hairline over a row group" recipe (the slides gear
76
+ hand-built ~120 lines of). Folds onto `typography.css` `.section-label` (the
77
+ mono / √φ-caption / small-caps register) for the caption and `--border-
78
+ hairline` for the divider. Tokenized on `--menu-section-*` so a consumer
79
+ retunes via a `:root` override. ≥2 consumers: the library menu defaults
80
+ (the section caption a DropdownMenuLabel composes) + the in-repo demo menu
81
+ story (Unit 2 adoption); the slides DeckSettings is the named foreign
82
+ downstream consumer. */
83
+ .glass-menu-section {
84
+ /* The caption register (mono / small-caps / quiet ink) — the same
85
+ vocabulary `.section-label` carries, exposed as overridable knobs. */
86
+ --menu-section-font: var(--font-mono);
87
+ --menu-section-size: var(--type-caption);
88
+ --menu-section-color: var(--muted-foreground);
89
+ --menu-section-tracking: var(--type-tracking-caps);
90
+ /* The hairline divider over the group (the catch-light + under-shadow
91
+ pair). Default-off feather; the rule below paints it. */
92
+ --menu-section-hairline: var(--border-hairline);
93
+ /* The block rhythm above the group (a section is a deliberate break). */
94
+ --menu-section-gap: 0.375rem;
95
+
96
+ display: block;
97
+ margin-block-start: var(--menu-section-gap);
98
+ padding-block-start: var(--menu-section-gap);
99
+ /* The hairline reads as a top divider over the group via box-shadow (the
100
+ house hairline pattern — a whisper, not a hard 1px rule). */
101
+ box-shadow: var(--menu-section-hairline);
102
+ }
103
+
104
+ /* The section CAPTION — a mono small-caps label. Composes onto the label
105
+ element the section recipe wraps (or a nested `.glass-menu-section-label`);
106
+ the demo + library menu labels read this caption register. */
107
+ .glass-menu-section-label,
108
+ .glass-menu-section > [data-menu-section-label] {
109
+ font-family: var(--menu-section-font);
110
+ font-size: var(--menu-section-size);
111
+ color: var(--menu-section-color);
112
+ text-transform: uppercase;
113
+ letter-spacing: var(--menu-section-tracking);
114
+ }
115
+ }
116
+
117
+ /* ── PRM gate — no deform/lift under reduce ───────────────────────────────────
118
+ The hover-lift `translate` is the only motion the row introduces; under
119
+ `prefers-reduced-motion: reduce` it collapses to the identity (0) and the
120
+ transition is removed (the surface bg cross-fade is not motion). The glass
121
+ plate still materializes on hover — only the geometric lift is suppressed. */
122
+ @media (prefers-reduced-motion: reduce) {
123
+ .glass-menu-row {
124
+ --menu-row-lift: 0px;
125
+ transition: none;
126
+ }
127
+ }
@@ -0,0 +1,300 @@
1
+ /*
2
+ * scroll-choreography.css — the SOTA scroll-driven CHOREOGRAPHY register
3
+ * (BB.W-SCROLL-MOTION).
4
+ *
5
+ * Cascade rung AFTER scroll-driven.css. glass-ui owns the native scroll-driven
6
+ * SUBSTRATE (scroll-driven.css `scroll()`/`view()` + the `--demo-main-progress`
7
+ * named timeline + the `supportsCssTimeline` harden) but composes none of the
8
+ * CHOREOGRAPHY — the page-load BUILD, the section CASCADE, the scroll-PINNED
9
+ * fixed-stage-advances-time reveals + the smooth-scroll register. The award-winners
10
+ * hand-roll these on Lenis+GSAP (a 20-40KB JS dependency); glass-ui ships the
11
+ * NATIVE register — the platform now ships `scroll()`/`view()`/`timeline-scope`
12
+ * natively, off the compositor at 60fps (the no-net-dep fence; the 2026
13
+ * universal-support convergence). NO Lenis/GSAP/Locomotive dependency, ever.
14
+ *
15
+ * .scroll-build — the route-enter page-build (chrome -> hero -> body, a
16
+ * spring-clocked coupled-fade, @keyframes-on-mount [NOT a
17
+ * scroll timeline — the build fires on mount], PRM-snapped).
18
+ * .scroll-cascade — the orchestrated section cascade (per-child view() timeline,
19
+ * the implicit stagger [NO setTimeout], the spring-clocked
20
+ * coupled transform+opacity build).
21
+ * .scroll-pin — the fixed-stage-advances-time scroll-pinned register
22
+ * (position: sticky stage + a named scroll-timeline linked via
23
+ * timeline-scope; the stage's internal phases advance with
24
+ * scroll progress, compositor channels only).
25
+ * .smooth-scroll — the native scroll-behavior: smooth opt-in (PRM-gated,
26
+ * zero runtime — a smooth-scroll under reduce is a vestibular
27
+ * concern, so the smooth interpolation is dropped under PRM).
28
+ *
29
+ * THE DISCIPLINE (mirrors scroll-driven.css EXACTLY — the exemplary outer-gate):
30
+ * the whole register sits under `@media (prefers-reduced-motion: no-preference)`
31
+ * so under PRM no scroll/build animation attaches at all and content renders in
32
+ * its terminal state (the `from` keyframe never applies because the animation
33
+ * never binds; the .scroll-pin stage shows its terminal phase, no sweep). The
34
+ * scroll-driven recipes sit under a second `@supports (animation-timeline: …)`
35
+ * gate so a non-supporting engine gets the STATIC layout (the .scroll-pin stage
36
+ * is a correct non-pinned read, never a broken silent stage).
37
+ *
38
+ * COMPOSITOR-ONLY (the proof:no-layout-animation floor BB.W-CARD-COMPOSITE): every
39
+ * @keyframes step + transition animates ONLY transform/translate/scale/opacity/
40
+ * clip-path — NEVER a layout-triggering property (no height/padding/inline-size/
41
+ * top/grid-template). The SPATIAL (transform) legs ride the per-spring `--spring-*`
42
+ * + the matching `--spring-*-duration` settle clock (P2/P4); the EFFECTS (opacity)
43
+ * legs ride the no-overshoot `--ease-out` bezier (P1/P3 — a fade must never
44
+ * overshoot). The spring tokens are READ-ONLY (the W-GLASS-CAL clock fence — this
45
+ * register THREADS them, it never re-tunes a spring value or a duration).
46
+ */
47
+
48
+ /* ─────────────────────────────────────────────────────────────────────────────
49
+ * .scroll-build — the route-enter page-build.
50
+ *
51
+ * A MOUNT-driven entrance (route-enter), NOT a scroll-driven one — so it rides a
52
+ * plain `@keyframes ... animation` (NOT a `view()`/`scroll()` timeline; the build
53
+ * fires on first paint of the new route, not on scroll). It sits under the PRM
54
+ * no-preference gate ALONE (no `@supports (animation-timeline)` — it does not use a
55
+ * timeline, so it runs on every engine; under PRM it never binds, so the page
56
+ * mounts at its terminal state).
57
+ *
58
+ * The coordinated stagger: the .scroll-build container's direct children are the
59
+ * BEATS (chrome, hero, body), each delayed by `--scroll-build-step * --i` (the
60
+ * per-beat coordinated stagger — the page assembles chrome-first, then the hero,
61
+ * then the first section). `--i` is the beat index a consumer sets per child
62
+ * (0-based); the chassis sets it on the chrome/hero/section in reading order
63
+ * (W-HIERARCHY2 owns the ORDER; this register threads the entrance ON it).
64
+ * ─────────────────────────────────────────────────────────────────────────── */
65
+ @media (prefers-reduced-motion: no-preference) {
66
+ @keyframes gl-page-build {
67
+ from {
68
+ opacity: 0;
69
+ /* SPATIAL leg — the build rise (a transform, compositor-only). */
70
+ transform: translateY(var(--scroll-build-rise, 1.5rem));
71
+ }
72
+ to {
73
+ opacity: 1;
74
+ transform: translateY(0);
75
+ }
76
+ }
77
+
78
+ /* The page-build container marks the entrance; the beats are its children. */
79
+ .scroll-build > * {
80
+ /* The coupled build: the SPATIAL transform rides the snappy spring settle
81
+ clock (P2/P4 — the page parts arrive with crisp gravity); the opacity is
82
+ a coupled leg in the SAME keyframe on the SAME clock so the fade tracks
83
+ the rise as ONE coherent glide (P3 — fade coupled to transform). The
84
+ no-overshoot bezier governs the FADE channel where the spring's
85
+ overshoot is not wanted: `--ease-out` is named on the build's title beat
86
+ (the hero <h1> — audacious type arrives with GRAVITY, not bounce, per
87
+ W-HIERARCHY2); the other beats ride the snappy spring. */
88
+ animation: gl-page-build var(--spring-snappy-duration, 0.34s)
89
+ var(--spring-snappy) both;
90
+ animation-delay: calc(var(--scroll-build-step, 90ms) * var(--i, 0));
91
+ }
92
+
93
+ /* The hero/title beat: the audacious-type-arrives-with-gravity register — the
94
+ no-overshoot `--ease-out` bezier (a strictly monotone settle, NO overshoot
95
+ past the terminal transform), the existing .story-hero-title--enter
96
+ discipline folded into the ONE entrance system. A consumer marks the hero
97
+ beat `.scroll-build-hero`. */
98
+ .scroll-build > .scroll-build-hero {
99
+ animation: gl-page-build 0.62s var(--ease-out, ease-out) both;
100
+ }
101
+ }
102
+
103
+ /* The EXPLICIT P6 carve — under prefers-reduced-motion: reduce the page-build DROPS
104
+ the spatial transform (no movement — the vestibular floor) but KEEPS a gentle
105
+ terminal fade-in (the EFFECTS channel survives per P6: fade-keeps, transform-
106
+ drops). This sits OUTSIDE the no-preference gate as the reduce-arm of the
107
+ coordinated build (mirroring the transitions.css fade-slide PRM arm — the
108
+ opacity leg alone under reduce). The build is mount-driven, so the no-preference
109
+ gate above never binds under reduce; this arm gives PRM users the coupled-FADE
110
+ terminal entrance with ZERO motion frames (no translateY), the genuine P6 read. */
111
+ @media (prefers-reduced-motion: reduce) {
112
+ @keyframes gl-page-build-fade {
113
+ from {
114
+ opacity: 0;
115
+ }
116
+ to {
117
+ opacity: 1;
118
+ }
119
+ }
120
+ .scroll-build > * {
121
+ /* fade-keeps (opacity only), transform-DROPS (no translateY) — P6. */
122
+ animation: gl-page-build-fade var(--duration-fast, 0.16s) var(--ease-out, ease-out)
123
+ both;
124
+ animation-delay: 0s; /* no coordinated stagger under reduce — a single calm paint */
125
+ }
126
+ }
127
+
128
+ /* ─────────────────────────────────────────────────────────────────────────────
129
+ * .scroll-cascade — the orchestrated section cascade.
130
+ *
131
+ * Extends the bare `[data-scroll-reveal] > *` 6px fade into the SOTA coordinated
132
+ * build: the per-child `view()` timeline stays the implicit-stagger mechanism (each
133
+ * child owns its own timeline — NO setTimeout cascade), but the entrance is the
134
+ * spring-clocked coupled build (a deeper rise + a tighter reveal window). It sits
135
+ * under the PRM no-preference gate + the `@supports (animation-timeline: view())`
136
+ * gate (the scroll-driven.css discipline) — under PRM/non-support the sections
137
+ * render at their terminal state.
138
+ * ─────────────────────────────────────────────────────────────────────────── */
139
+ @media (prefers-reduced-motion: no-preference) {
140
+ @supports ((animation-timeline: view()) and (animation-range: entry)) {
141
+ @keyframes gl-cascade-build {
142
+ from {
143
+ /* EFFECTS leg — the coupled fade (no overshoot). */
144
+ opacity: 0;
145
+ /* SPATIAL leg — the build rise (a transform, compositor-only). */
146
+ transform: translateY(var(--scroll-cascade-rise, 1.25rem));
147
+ }
148
+ to {
149
+ opacity: 1;
150
+ transform: translateY(0);
151
+ }
152
+ }
153
+
154
+ .scroll-cascade > * {
155
+ /* The view()-timeline drives the build off each child's OWN entry into
156
+ the viewport (the implicit stagger). The progress-bound timeline maps
157
+ the entrance across the `animation-range` window; the keyframe's
158
+ coupled transform+opacity build is the orchestrated cascade (vs the
159
+ bare 6px reveal). `linear` is the right easing for a SCROLL-bound
160
+ progress map (the spring shaping lives in the section's own settle
161
+ where the build is mount-driven; a scroll-bound timeline reads
162
+ 1:1 with scroll position — a spring on a scrubbed timeline reads as
163
+ a scrubbed spring, which is correct here as the linear progress map). */
164
+ animation: gl-cascade-build auto linear both;
165
+ animation-timeline: view(block);
166
+ animation-range: entry 0% entry var(--scroll-cascade-range-end, 45%);
167
+ }
168
+
169
+ /* The horizontal-scroller variant — a `view(inline)` axis. */
170
+ .scroll-cascade.scroll-cascade--inline > * {
171
+ animation-timeline: view(inline);
172
+ }
173
+
174
+ /* The OPT-IN column-stagger variant (the Codrops nuance — even columns
175
+ from top, odd from below). A GRID-surface flourish, NOT the default (the
176
+ proportion fence: a uniform vertical cascade is the calm StoryPage
177
+ default; the column-stagger is the front-door grid showcase). A consumer
178
+ sets `--col` (the column index) per child; even/odd rise from opposite
179
+ directions, offset by `--scroll-cascade-column-stagger`. */
180
+ @keyframes gl-cascade-build-col-even {
181
+ from {
182
+ opacity: 0;
183
+ transform: translateY(calc(-1 * var(--scroll-cascade-rise, 1.25rem)));
184
+ }
185
+ to {
186
+ opacity: 1;
187
+ transform: translateY(0);
188
+ }
189
+ }
190
+ .scroll-cascade.scroll-cascade--columns > * {
191
+ animation-range: entry 0%
192
+ entry
193
+ calc(
194
+ var(--scroll-cascade-range-end, 45%) +
195
+ var(--scroll-cascade-column-stagger, 60ms) * 0
196
+ );
197
+ }
198
+ .scroll-cascade.scroll-cascade--columns > *:nth-child(even) {
199
+ animation-name: gl-cascade-build-col-even;
200
+ }
201
+ }
202
+ }
203
+
204
+ /* ─────────────────────────────────────────────────────────────────────────────
205
+ * .scroll-pin — the fixed-stage-advances-time scroll-pinned register.
206
+ *
207
+ * The SOTA "scrolling does not move the scene, it advances time inside it" model:
208
+ * a `.scroll-pin` tall container (the `--scroll-pin-stage-height` temporal space)
209
+ * holds a `.scroll-pin-stage` `position: sticky` element. The container declares
210
+ * a named `scroll-timeline`; the stage's internal phase animations bind to that
211
+ * named timeline via `timeline-scope` (so the stage animates against the
212
+ * CONTAINER'S scroll progress — the fixed stage advances time). The phase
213
+ * animations are compositor-only (transform/opacity/clip-path over the
214
+ * `animation-range` phase windows — the Codrops phased sequence: a reveal phase
215
+ * 0..45%, an expand phase 45..90%, a settle phase 90..100%).
216
+ *
217
+ * `timeline-scope` is the newest primitive — the `@supports` gate probes it (NOT
218
+ * just `scroll()`), so an engine with `scroll()`/`view()` but not `timeline-scope`
219
+ * gets the STATIC layout (a correct non-pinned read: the stage is a plain sticky
220
+ * element at its terminal phase, never a broken silent stage). In 2026
221
+ * `timeline-scope` ships alongside `scroll()`/`view()` (the universal-support
222
+ * convergence), so the CSS-only register is the ship; the JS fallback leaf (mirror
223
+ * useScrollProgress's dual-path single-writer) is BOOKED only on a material
224
+ * engine-gap reveal (the §Triumvirate support-matrix trigger) — never a JS scroll
225
+ * lib (the no-net-dep fence is binding either way).
226
+ * ─────────────────────────────────────────────────────────────────────────── */
227
+ @media (prefers-reduced-motion: no-preference) {
228
+ @supports (animation-timeline: scroll()) and (timeline-scope: --gl-pin) {
229
+ @keyframes gl-pin-reveal {
230
+ from {
231
+ opacity: 0;
232
+ transform: translateY(var(--scroll-pin-lift, 2.5rem)) scale(0.96);
233
+ }
234
+ to {
235
+ opacity: 1;
236
+ transform: translateY(0) scale(1);
237
+ }
238
+ }
239
+ @keyframes gl-pin-settle {
240
+ from {
241
+ transform: scale(1);
242
+ opacity: 1;
243
+ }
244
+ to {
245
+ /* The settle phase — a gentle compositor drift, never a layout move. */
246
+ transform: scale(1.02) translateY(calc(-1 * var(--scroll-pin-lift, 2.5rem)));
247
+ opacity: 1;
248
+ }
249
+ }
250
+
251
+ /* The tall temporal container declares a named scroll-timeline + exposes it
252
+ to descendants via timeline-scope (the fixed-stage-advances-time link). */
253
+ .scroll-pin {
254
+ position: relative;
255
+ block-size: var(--scroll-pin-stage-height, 320vh);
256
+ scroll-timeline-name: --gl-pin;
257
+ scroll-timeline-axis: block;
258
+ timeline-scope: --gl-pin;
259
+ }
260
+
261
+ /* The sticky stage — pinned to the viewport while the container scrolls
262
+ past; its phases advance against the container's --gl-pin timeline. */
263
+ .scroll-pin-stage {
264
+ position: sticky;
265
+ inset-block-start: 0;
266
+ }
267
+
268
+ /* Phase 1 — the reveal (0..45% of the container scroll). */
269
+ .scroll-pin-stage .scroll-pin-phase-reveal {
270
+ animation: gl-pin-reveal auto linear both;
271
+ animation-timeline: --gl-pin;
272
+ animation-range: 0% var(--scroll-pin-phase-reveal-end, 45%);
273
+ }
274
+
275
+ /* Phase 2 — the settle/expand (the reveal-end..expand-end window). */
276
+ .scroll-pin-stage .scroll-pin-phase-settle {
277
+ animation: gl-pin-settle auto linear both;
278
+ animation-timeline: --gl-pin;
279
+ animation-range: var(--scroll-pin-phase-reveal-end, 45%)
280
+ var(--scroll-pin-phase-expand-end, 90%);
281
+ }
282
+ }
283
+ }
284
+
285
+ /* ─────────────────────────────────────────────────────────────────────────────
286
+ * .smooth-scroll — the native smooth-scroll opt-in.
287
+ *
288
+ * The native `scroll-behavior: smooth` (CSS-first, zero runtime — NOT a JS rAF
289
+ * momentum loop, which IS Lenis and is the fence). An OPT-IN class the scroller
290
+ * (`<main>`, a `.scroll-pin` container) applies. PRM-GATED: under
291
+ * `prefers-reduced-motion: reduce` the smooth interpolation is DROPPED and the
292
+ * jump-scroll is correct (a smooth-scroll over an anchor-jump is a vestibular
293
+ * concern). A consumer wanting Lenis-grade momentum brings it in THEIR app (the
294
+ * presets-in-consumers discipline); the library ships the native register.
295
+ * ─────────────────────────────────────────────────────────────────────────── */
296
+ @media (prefers-reduced-motion: no-preference) {
297
+ .smooth-scroll {
298
+ scroll-behavior: smooth;
299
+ }
300
+ }