@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
@@ -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
+ }
@@ -338,3 +338,34 @@
338
338
  .segmented-tabs--underline .segmented-tab:hover {
339
339
  color: color-mix(in oklab, var(--foreground) 70%, transparent);
340
340
  }
341
+
342
+ /* ════════════════════════════════════════════════════════════════════════
343
+ BB.W-DRAG-MORPH — the `.glass-drag-lift` decoration (the pull affordance).
344
+
345
+ The `useDragMorph` consumer adds this class to the morph element while
346
+ `dragging` is true (the SegmentedTabs `:draggable` indicator; the
347
+ DockLayerGroup pull rail). It is the visual "this is grabbable + grabbed"
348
+ affordance — the GRAB cursor + a sub-perceptual `--glass-specular` catch-light
349
+ lift + the `will-change: transform` compositor hint that promotes the lozenge
350
+ to its own layer for the 1:1 follow. It carries NO transform itself (the
351
+ translate + squish are the primitive's own `translate`/`--stretch` writes, the
352
+ §6 compositor channels); this class only paints the affordance + the hint.
353
+
354
+ The grab cursor sits on the morph element AT REST too (a draggable indicator
355
+ reads grabbable before the grab), so `.glass-drag-grabbable` marks the rest
356
+ affordance and `.glass-drag-lift` adds the grabbing state. PRM does not gate
357
+ the cursor/hint (they are not motion); the lift is a static specular nudge. */
358
+ .glass-drag-grabbable {
359
+ cursor: grab;
360
+ touch-action: none;
361
+ }
362
+
363
+ .glass-drag-lift {
364
+ cursor: grabbing;
365
+ /* Promote to its own compositor layer for the 1:1 follow (the translate write
366
+ is compositor-only; the hint keeps the plate off the main-thread paint). */
367
+ will-change: transform;
368
+ /* Sub-perceptual catch-light lift — the grabbed lozenge reads a hair brighter
369
+ at its specular edge (the W-GLASS-CAL specular register, disco-FREE). */
370
+ --glass-specular: 0.1;
371
+ }
@@ -47,6 +47,9 @@
47
47
 
48
48
  /* Letter spacing → tracking-* utilities */
49
49
  --tracking-tight: var(--type-tracking-tight);
50
+ /* BB.W-DISPLAY-TRACKING — the display-ONLY Apple −1.5% tracking rung bridged
51
+ to the `tracking-display` utility (the token-first consumer affordance). */
52
+ --tracking-display: var(--type-tracking-display);
50
53
  --tracking-snug: var(--type-tracking-snug);
51
54
  --tracking-normal: var(--type-tracking-normal);
52
55
  --tracking-wide: var(--type-tracking-wide);
@@ -219,6 +222,14 @@
219
222
  --color-silver-dark: var(--silver-dark);
220
223
  --color-silver-deep: var(--silver-deep);
221
224
 
225
+ /* BB.W-METAL-SHIMMER — the bronze brand metal (the third member of the
226
+ gold·silver·bronze triad; the @theme namespace bridge so a `text-bronze`/
227
+ `bg-bronze` utility resolves through, mirroring gold/silver). */
228
+ --color-bronze: var(--bronze);
229
+ --color-bronze-light: var(--bronze-light);
230
+ --color-bronze-dark: var(--bronze-dark);
231
+ --color-bronze-deep: var(--bronze-deep);
232
+
222
233
  --color-rainbow-red: var(--rainbow-red);
223
234
  --color-rainbow-orange: var(--rainbow-orange);
224
235
  --color-rainbow-yellow: var(--rainbow-yellow);
@@ -30,10 +30,19 @@
30
30
  band-pass vs one-pass sweep) want different tempos. The pre-V audit
31
31
  (C-c §5.3) flagged this as a "naming inversion"; it is intentional —
32
32
  documented here so the offset is searchable. The orphan
33
- `--duration-shimmer-slow` (8s) was excised in V.W2 T5. */
33
+ `--duration-shimmer-slow` (8s) was excised in V.W2 T5.
34
+
35
+ BB.W-METAL-SHIMMER — `--animate-gold-shimmer` re-points onto the metal-
36
+ PARAMETERIZED `metal-shimmer-sweep` keyframe (the gold-only
37
+ `gold-shimmer-slide` RETIRED — clean break, no alias); the duration/tempo
38
+ are byte-preserved (the gold READ unchanged). `--animate-metal` is the
39
+ brand-metal family's own row on the slow `--duration-metal` (6s) clock — the
40
+ `.metal-{gold,silver,bronze}`/`.metal-*-border`/`.metal-rainbow-rim`
41
+ utilities read it (utilities/metal.css). */
34
42
  --animate-shimmer: shimmer var(--duration-shimmer-fast) linear infinite;
35
43
  --animate-shimmer-sweep: shimmer-sweep var(--duration-shimmer) ease-in-out infinite;
36
- --animate-gold-shimmer: gold-shimmer-slide var(--duration-shimmer) linear infinite;
44
+ --animate-gold-shimmer: metal-shimmer-sweep var(--duration-shimmer) linear infinite;
45
+ --animate-metal: metal-shimmer-sweep var(--duration-metal) linear infinite;
37
46
  --animate-shake: shake 0.5s ease-in-out;
38
47
 
39
48
  /* ═══════════════════════════════════════════════
@@ -64,7 +64,12 @@
64
64
  |x|^(2K) + |y|^(2K) = 1, so the curve exponent n = 2K. The CSS `squircle`
65
65
  keyword == `superellipse(2)` == n=4 — the iOS-idiomatic web squircle. The
66
66
  k-PRIMITIVE band (a consumer dials 1.7–2.4 to taste; W42's dock-morph calc()s
67
- its animated k against this ONE vocabulary — do not re-define a second k). */
67
+ its animated k against this ONE vocabulary — do not re-define a second k).
68
+ (BB.W-DEAD-SWEEP re-ground: --corner-k-soft / --corner-k-sharp have no
69
+ runtime var() consumer but ARE pinned by proof:squircle-language (the
70
+ TOKEN-AXIS-EXISTS clause asserts both rungs are minted) — so KEPT, not
71
+ swept; the clean-break delete is a coordination follow-up once the gate
72
+ re-anchors.) */
68
73
  --corner-k-squircle: 2; /* the squircle — superellipse(2), n=4 */
69
74
  --corner-k-soft: 1.7; /* gentler, between round and squircle — n≈3.4 */
70
75
  --corner-k-sharp: 2.4; /* crisper square-bias for large surfaces — n≈4.8 */
@@ -57,7 +57,17 @@
57
57
  --accent{,-foreground} / --border / --input are pure var()-aliases —
58
58
  DELETED here (AQ.W2 §2a): they auto-track the --neutral-* ladder +
59
59
  --foreground above. Re-declaring them would be redundant. */
60
- --foreground: hsl(48 10% 90%);
60
+ /* BB.W-DARK-INK-WARM — the dark --foreground warmed off hsl(48 10% 90%) (OKLab H95.1°,
61
+ the EXACT yellow-green W-NO-GRAY condemned as "a cast, not warm material") onto the
62
+ no-gray warm identity hsl(30 14% 90%) (OKLab L0.926 C0.0063 H75.4° — the --foreground
63
+ 56° warm-amber family, L held within ±0.001 of HEAD, chroma off the gray floor,
64
+ chroma-only at constant L). The contrast contract holds (the dark ink over the L4 page
65
+ stays ≥ the body floor). EVERY dark var(--foreground) consumer (body copy, the lifted
66
+ muted register, --glass-tint-ink, the cartoon shadow, the configurator divider, the
67
+ dock-selected-accent, the --surface-tint-* relative-color recipe below) re-resolves
68
+ warm in lockstep, zero per-site edit. LOCKSTEP light-dark.css:92 (the §2c discipline —
69
+ both mode arms warm together or the FOUC/enhancement split paints two inks). */
70
+ --foreground: hsl(30 14% 90%);
61
71
  /* BA.W-DARK-MATERIAL scope 1 — the --card plate LIFTS L10→L16 (a warm-dark elevated
62
72
  surface, macOS-window territory) so it sits ~5× the deepened L4 page relL — a
63
73
  clearly distinct surface the five glass rungs ladder up from. LOCKSTEP light-dark.css:80. */
@@ -190,9 +200,14 @@
190
200
  --constellation-edge-floor: 0;
191
201
  --constellation-edge-accent-alpha: 0.34;
192
202
 
193
- /* Glass opacity + grain for dark — five-tier ladder, alpha-monotonic.
194
- Each rung lifts ~0.08 from its light counterpart so the dark surfaces
195
- carry comparable read-weight against the deeper canvas. */
203
+ /* Glass opacity + grain for dark — the per-tier canonical alpha, DARK arm
204
+ (BB.W-CARD-TIER-ALPHA). The SAME named `--glass-opacity-{tier}` register as
205
+ the light arm (tokens/glass.css), per-mode — the dark identity. Five-tier
206
+ ladder, alpha-monotonic; each rung lifts ~0.08 from its light counterpart so
207
+ the dark surfaces carry comparable read-weight against the deeper canvas. A
208
+ consumer reads these named tokens; a divergent register stays a consumer preset.
209
+ Machine-locked by `proof:card-tier-alpha` (the dark-arm-present + monotonic +
210
+ lift-over-light asserts). */
196
211
  --glass-opacity-wash: 0.38;
197
212
  --glass-opacity-quiet: 0.58;
198
213
  --glass-opacity-resting: 0.72;
@@ -218,6 +233,21 @@
218
233
  --glass-blur-overlay: blur(calc(var(--glass-blur-overlay-radius) * var(--glass-level))) saturate(1.22) brightness(1.06);
219
234
  --glass-blur-dock: blur(calc(var(--glass-blur-dock-radius) * var(--glass-level))) saturate(1.30) brightness(1.12);
220
235
 
236
+ /* BB.W-DEEP-GLASS — the DARK arm of the OPT-IN deep tier (the luminous-dark
237
+ deep mirror, the W-DARK-MATERIAL scope-2 "dark glass glows where light
238
+ passes" model). The deep tier is even more transmissive in dark — the deep
239
+ dark glass glows MORE where the backdrop passes — so its saturate/brightness
240
+ companion lifts HARDER than the calm dark floating (1.28/1.10): the deep
241
+ arm carries saturate(1.55) brightness(1.16), in LOCKSTEP with the light deep
242
+ arm (which sits at saturate 1.5 / depth-LERPed, glass-deep.css). The RADIUS
243
+ is the SAME --glass-blur-deep-active-radius × --glass-level (radius-only
244
+ across modes, the §2c discipline — only the saturate/brightness companions
245
+ differ between light/dark). This is a SEPARATE deep token the calm dark
246
+ ladder never reads (CALM-UNCHANGED in dark too — proof:glass-cal GREEN). */
247
+ --glass-blur-deep:
248
+ blur(var(--glass-blur-deep-active-radius))
249
+ saturate(1.55) brightness(1.16);
250
+
221
251
  /* BA.W-DARK-MATERIAL scope 3 — the dark arm of the adaptive --glass-tint-* seam (the
222
252
  SAME seam, NO third fork). The W55 self-engage block (glass/ladder.css) re-points
223
253
  --glass-tint-source → --glass-tint-ink at --glass-tint-strength-aa. In LIGHT that is
@@ -242,28 +272,59 @@
242
272
  mode arms — the content-tier self-engage needs no mode branch. */
243
273
  --glass-tint-strength-floor: 12%;
244
274
 
245
- /* BA.W-DARK-MATERIAL scope 5 — the --surface-tint-* dark arm. The light family is
246
- color-mix(in srgb, var(--foreground) N%, transparent) — over a near-black dark card
247
- a LIGHT-ink (dark --foreground IS light cream) tint composites to near-black: the
248
- 9-rung chip/hairline/divider scale is INVISIBLE in dark. The dark arm KEEPS the
249
- in-srgb space (the AW.W26 fence — NEVER oklab) but re-anchors the mix ink to a
250
- BRIGHTER warm off-white so a chip/hairline LIFTS off the deep card (the inverse
251
- intent of light's dark-ink tint). This re-resolves every --surface-tint-* consumer
252
- (chip backplates, the dock-rail divider, the spine, the timeline dot) in lockstep,
253
- zero per-site edit. The brighter ink is a near-white warm (hsl(48 12% 96%)) so the
254
- higher rungs read as genuine hairlines on the L16 card. */
255
- --surface-tint-4: color-mix(in srgb, hsl(48 12% 96%) 4%, transparent);
256
- --surface-tint-6: color-mix(in srgb, hsl(48 12% 96%) 6%, transparent);
257
- --surface-tint-8: color-mix(in srgb, hsl(48 12% 96%) 8%, transparent);
258
- --surface-tint-10: color-mix(in srgb, hsl(48 12% 96%) 10%, transparent);
259
- --surface-tint-12: color-mix(in srgb, hsl(48 12% 96%) 12%, transparent);
260
- --surface-tint-15: color-mix(in srgb, hsl(48 12% 96%) 15%, transparent);
261
- --surface-tint-18: color-mix(in srgb, hsl(48 12% 96%) 18%, transparent);
262
- --surface-tint-22: color-mix(in srgb, hsl(48 12% 96%) 22%, transparent);
263
- --surface-tint-25: color-mix(in srgb, hsl(48 12% 96%) 25%, transparent);
264
- --surface-tint-35: color-mix(in srgb, hsl(48 12% 96%) 35%, transparent);
265
- --surface-tint-40: color-mix(in srgb, hsl(48 12% 96%) 40%, transparent);
266
- --surface-tint-70: color-mix(in srgb, hsl(48 12% 96%) 70%, transparent);
275
+ /* BB.W-ON-GLASS-FG — the surface-aware FOREGROUND register, DARK arm (the N13
276
+ whisper collapse where it bites hardest). The dark page-muted --neutral-5 (L62,
277
+ "AA: 7.64:1 vs page") COLLAPSES over the lifted luminous-dark plate (the L16 card
278
+ at the 12% --glass-tint-strength-floor composites the bright backdrop UP — the
279
+ measured 1.15-3.29:1). The on-glass muted rung lifts BRIGHTER (the mirror of the
280
+ light arm's darkening) so it clears AA over the composited dark plate WHILE
281
+ staying subordinate to the L90 --foreground ink (the quiet-subordinate hierarchy
282
+ preserved — NOT a blanket lift to full ink, which the bright bucket already does).
283
+ Warm-amber (the BB.W-DARK-INK-WARM identity), NOT the slides deck hsl(45 …) literal
284
+ (the deck is the REFERENCE; the library re-derives against its own --card). The
285
+ light arm lives in tokens/glass.css (the plain per-mode pair — the house idiom). */
286
+ --on-glass-muted: hsl(34 16% 72%); /* brighter than the collapsed --neutral-5 L62 (6.63:1 vs the luminous-dark plate; subordinate to --foreground) */
287
+ --on-glass-muted-strong: hsl(36 14% 78%); /* the -strong rung, one step more present (7.75:1 vs plate) */
288
+ --input-on-glass: hsl(26 12% 22%); /* the form-well fill — grounded warm-dark so the L90 input TEXT reads against a stable base (9.3:1) */
289
+ --progress-track-on-glass: hsl(28 14% 26%); /* the recessed meter track — a warm-dark channel distinct from the fill silhouette */
290
+
291
+ /* BA.W-DARK-MATERIAL scope 5 + BB.W-DARK-INK-WARM — the --surface-tint-* dark arm,
292
+ --foreground-DERIVED. The light family is color-mix(in srgb, var(--foreground) N%,
293
+ transparent) — over a near-black dark card a LIGHT-ink (dark --foreground IS light
294
+ cream) tint composites to near-black: the 9-rung chip/hairline/divider scale is
295
+ INVISIBLE in dark. The dark arm re-anchors the mix ink to a BRIGHTER warm off-white
296
+ so a chip/hairline LIFTS off the deep card (the inverse intent of light's dark-ink
297
+ tint). BA executed that intent as a hardcoded hsl(48 12% 96%) literal ×12 — at the
298
+ EXACT OKLab H95.1° yellow-green the SAME tranche's W-NO-GRAY ruled "a cast, not warm
299
+ material", AND a per-rung literal a --foreground re-point can never reach (the
300
+ architectural asymmetry with the light arm + the substitution-vs-redeclaration trap
301
+ at the token mint). BB re-expresses each rung as a oklch(from var(--foreground) 0.975
302
+ c h) RELATIVE-COLOR derivation: the recipe extracts the (now-warmed) dark --foreground's
303
+ warm hue + chroma and lifts the lightness to 0.975 (≈ HEAD's 0.973 ink L, so the chip
304
+ lift off the L16 card is preserved) — the ink CARRIES the --foreground's warm hue
305
+ (OKLab H75.4°) BY DERIVATION (re-point the dark ink → every rung re-resolves warm; a
306
+ future re-tune reaches all 12 from ONE --foreground edit — the symmetry the light arm
307
+ has had since L.W5). The OUTER mix STAYS color-mix(in srgb, … N%, transparent) — the
308
+ SAME 12-rung α ladder + the SAME in-srgb interpolation space the light arm uses (the
309
+ AW.W26 fence holds — the oklch(from …) is the INK SOURCE, not the tint mix space).
310
+ This re-resolves every --surface-tint-* consumer (chip backplates, the dock-rail
311
+ divider, the spine, the timeline dot) in lockstep, zero per-site edit. The 0.975 lift
312
+ sits well under the sRGB gamut edge (the AX css-relative-color book's "browsers don't
313
+ gamut-map yet" caveat does not bite — at 0.975 the small high-L chroma resolves clean;
314
+ lift→1.0 drifts the hue, so 0.975 is the calibrated pin). The css-relative-color
315
+ chronic's FIRST live consumer (the tolerant α-mix the AX book was waiting for). */
316
+ --surface-tint-4: color-mix(in srgb, oklch(from var(--foreground) 0.975 c h) 4%, transparent);
317
+ --surface-tint-6: color-mix(in srgb, oklch(from var(--foreground) 0.975 c h) 6%, transparent);
318
+ --surface-tint-8: color-mix(in srgb, oklch(from var(--foreground) 0.975 c h) 8%, transparent);
319
+ --surface-tint-10: color-mix(in srgb, oklch(from var(--foreground) 0.975 c h) 10%, transparent);
320
+ --surface-tint-12: color-mix(in srgb, oklch(from var(--foreground) 0.975 c h) 12%, transparent);
321
+ --surface-tint-15: color-mix(in srgb, oklch(from var(--foreground) 0.975 c h) 15%, transparent);
322
+ --surface-tint-18: color-mix(in srgb, oklch(from var(--foreground) 0.975 c h) 18%, transparent);
323
+ --surface-tint-22: color-mix(in srgb, oklch(from var(--foreground) 0.975 c h) 22%, transparent);
324
+ --surface-tint-25: color-mix(in srgb, oklch(from var(--foreground) 0.975 c h) 25%, transparent);
325
+ --surface-tint-35: color-mix(in srgb, oklch(from var(--foreground) 0.975 c h) 35%, transparent);
326
+ --surface-tint-40: color-mix(in srgb, oklch(from var(--foreground) 0.975 c h) 40%, transparent);
327
+ --surface-tint-70: color-mix(in srgb, oklch(from var(--foreground) 0.975 c h) 70%, transparent);
267
328
 
268
329
  /* Hairline-accent dark mirror — see light counterpart at line ~404. */
269
330
  --hairline-catch-light: inset 0 0.5px 0 0 rgb(255 255 255 / 0.05);
@@ -304,5 +365,16 @@
304
365
  --silver: oklch(0.792 0.012 255);
305
366
  --silver-light: oklch(0.912 0.010 255);
306
367
  --silver-dark: oklch(0.648 0.014 255);
368
+
369
+ /* Bronze — lifted for dark (BB.W-METAL-SHIMMER; mirrors gold's dark arm: the
370
+ warm metal lifts ~+0.03 L so the bronze register reads on the deep canvas.
371
+ `--bronze-deep` is mode-invariant — NOT re-declared here, exactly as
372
+ `--gold-deep`/`--silver-deep` are omitted from this dark block). The warm hue
373
+ holds; the chroma stays above the W-NO-GRAY floor. The `.dark`-class fallback
374
+ for engines without `light-dark()` (the §2c lockstep — the light-dark arm AND
375
+ this dark fallback move TOGETHER). */
376
+ --bronze: oklch(0.650 0.090 54.0);
377
+ --bronze-light: oklch(0.790 0.110 60.0);
378
+ --bronze-dark: oklch(0.560 0.085 50.0);
307
379
  }
308
380
 
@@ -0,0 +1,75 @@
1
+ /*
2
+ * glass-deep.css — BB.W-DEEP-GLASS — the OPT-IN deep-glass token family.
3
+ *
4
+ * A SEPARATE `--glass-blur-deep-*` token family ABOVE the W-GLASS-CAL calm
5
+ * default (the Apple iOS-27 Liquid-Glass deep register: `saturate(1.8) blur(20px)`
6
+ * measured on Apple's live nav material; glass-ui lands the deep tier in the
7
+ * 14-20px band at a budget-clearing 16px + saturate 1.5). The calm content
8
+ * default is BYTE-UNTOUCHED — this family is minted ALONGSIDE the calm
9
+ * `--glass-blur-*` ladder (tokens/glass.css), which NEVER reads these tokens, so
10
+ * `proof:glass-cal` B1-B3 stay GREEN by construction (the calm default is the
11
+ * user's "a hair too much" call, INVIOLATE).
12
+ *
13
+ * This is the §8-ladder partial sibling of tokens/glass.css (kept OUT of glass.css
14
+ * so the ratchet-baselined glass.css stays at 505); @import-ed in tokens.css
15
+ * AFTER glass.css (the deep family resolves in the same :root cascade slot,
16
+ * adjacent same-selector blocks). The dark deep arm lives in tokens/dark-arm.css
17
+ * (the W-DARK-MATERIAL discipline — the luminous-dark companion beside the calm
18
+ * dark companions).
19
+ *
20
+ * ── The Apple-range derivation (DELTA cross-ref) ───────────────────────────
21
+ * Apple home nav: saturate(1.8) blur(20px) (the canonical measure)
22
+ * Apple product tiers: blur(14-20px) (the band)
23
+ * glass-ui calm ceiling: floating 13px / saturate 1.18 (W-GLASS-CAL dial-back)
24
+ * glass-ui DEEP: 16px / saturate 1.5 (STRICTLY deeper on BOTH axes,
25
+ * in-band, the budget-clearing landing — the full 20px is
26
+ * a BOOKED successor with the recorded throttle number).
27
+ * The deep saturate lands at the LOW end of the 1.5-1.8 band: the Apple 1.8 is
28
+ * measured over a NEUTRAL backdrop; glass-ui's deep tier sits over warm-aurora,
29
+ * and the warm-cream light-concentration ceiling (AX.W52 D19 — a saturate that
30
+ * over-juices a colored substrate reads as a garish smear) keeps it just-rich.
31
+ * The deepest BLUR carries the "more glass" read; the saturate stays restrained.
32
+ */
33
+ :root {
34
+ /* The Apple-range deep ENDPOINTS — the radius + saturate the deep tier reaches
35
+ at full depth (`--glass-depth: 1`). The calm `floating` rung (13px / 1.18)
36
+ is the depth-0 floor; the deep recipe LERPs between the two on `--glass-depth`
37
+ so the axis is a genuine driver, not a literal. */
38
+ --glass-blur-deep-radius: 16px; /* in [14,20], STRICTLY > calm floating 13px */
39
+ --glass-saturate-deep: 1.5; /* >= 1.5 (toward Apple 1.8), > calm floating 1.18 */
40
+
41
+ /* The deep blur RADIUS — LERPed from the calm floating radius (depth 0) to the
42
+ Apple-deep radius (depth 1) on `--glass-depth`, THEN scaled by the ONE
43
+ `--glass-level` clarity scalar (the W54 seam reaches the deep plate, so the
44
+ opaque escape + the a11y brackets compose: at `--glass-level: 0` the deep
45
+ blur resolves blur(0), the same solid floor). NOT a parallel recipe — the
46
+ deep blur COMPOSES `var(--glass-level)` exactly like every calm rung, and
47
+ reads `var(--glass-depth)` so a host dials the depth on any ancestor. */
48
+ --glass-blur-deep-active-radius:
49
+ calc(
50
+ (
51
+ var(--glass-blur-floating-radius)
52
+ + (var(--glass-blur-deep-radius) - var(--glass-blur-floating-radius))
53
+ * var(--glass-depth)
54
+ )
55
+ * var(--glass-level)
56
+ );
57
+ /* The deep SATURATE — LERPed from the calm floating saturate (1.18, depth 0)
58
+ to the deep saturate (depth 1) on `--glass-depth`. The saturate is the
59
+ light-concentration lift (chroma-only — it LIFTS the backdrop's existing
60
+ chroma, it does NOT inject a hue; the warm-cream `--card` base is the same). */
61
+ --glass-saturate-deep-active:
62
+ calc(
63
+ 1.18 + (var(--glass-saturate-deep) - 1.18) * var(--glass-depth)
64
+ );
65
+
66
+ /* The composed deep backdrop-filter — the SEPARATE deep family. The calm
67
+ ladder never reads this; `.glass-deep` (glass/deep.css) is its only
68
+ consumer. The brightness companion mirrors the calm floating arm's
69
+ light-concentration (the calm floating carries saturate only; the deep
70
+ tier adds a small brightness lift for the thicker-glass read — still no
71
+ hue inject). */
72
+ --glass-blur-deep:
73
+ blur(var(--glass-blur-deep-active-radius))
74
+ saturate(var(--glass-saturate-deep-active));
75
+ }