@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
@@ -87,13 +87,32 @@
87
87
  centered in its cell (≥1px slack/side at hover), the cell sits flush at the
88
88
  dock content edge, and the `--dock-padding-block` (≈6px) padding holds the
89
89
  plate ≥7px clear of the `contain: paint` border-box edge on the block axis.
90
- So `contain: paint` is the NON-proximate second clip box (the lane's
90
+ So the `paint` clip axis is the NON-proximate second clip box (the lane's
91
91
  `probe-bottomdock-nocontain.png` forced-root probe proved the inner
92
- scroll-port box was proximate, not this) and it is UNEDITED here — the
93
- inset + freed cross axis suffice, no containment lift on the control-plate
94
- band. The π readback (W-DOCK-GEOMETRY-DELTA.md) records the live
95
- plate-inside-padding margin number that binds this verdict. */
96
- contain: paint;
92
+ scroll-port box was proximate, not this) and the `paint` axis is RETAINED
93
+ here — the inset + freed cross axis suffice, no containment LIFT on the
94
+ control-plate band. (BB.W-PERF-PRODUCER A′-4 widens the value to
95
+ `contain: layout style paint` — the restyle-scope axes ALONGSIDE the paint
96
+ clip box, see below — but never lifts `paint`.) The π readback
97
+ (W-DOCK-GEOMETRY-DELTA.md) records the live plate-inside-padding margin
98
+ number that binds this verdict. */
99
+ /* BB.W-PERF-PRODUCER A′-4 — the `--dock-morph-t` restyle-scope narrowing.
100
+ The per-frame morph scalar write recomputes the inheriting `calc()` group
101
+ across the dock subtree (dock.css's 10-selector `:where()` consumers); add
102
+ the `layout` + `style` containment axes so a scalar write recomputes
103
+ layout/style WITHIN the dock subtree, not up the document (the value.js A′-4
104
+ ~13fps restyle-cost trace). RECONCILED with the existing axes: `paint`
105
+ (above, the BA.W-DOCK-GEOMETRY clip box) composes — `contain: layout style
106
+ paint` is the union, NEVER `size` (which `container-type: inline-size` carries
107
+ as `inline-size` ONLY on the OPT-IN `containerName` host below; the default
108
+ free-floating dock must stay shrink-to-fit, so `size`/`inline-size` is
109
+ DELIBERATELY excluded here — adding it would re-introduce the 3.3.0 sliver
110
+ regression the §99 comment documents). The morph-axis `overflow: clip`
111
+ (the reveal aperture) + the `.glass-dock-frame` rail-escape are UNAFFECTED:
112
+ `layout`/`style` containment scopes RECALC, it does not establish a paint
113
+ clip beyond the already-present `paint` axis. The `DOCK_SPRING` clock is
114
+ byte-fenced (the value.js letter) — this is restyle COST, not a re-tune. */
115
+ contain: layout style paint;
97
116
  display: inline-flex;
98
117
  align-items: center;
99
118
  /* AW.W1 — the dock does NOT establish a default inline-size container.
@@ -273,16 +292,19 @@
273
292
  shell above; the cross axis stays visible there. */
274
293
  padding: var(--dock-padding-block, 0.375rem);
275
294
  border-radius: var(--radius-dock);
276
- /* AX.W01 — a vertical rail is ALWAYS-EXPANDED (no collapse↔expand morph),
277
- so its root padding/background/border-color never morph; the prior
278
- `padding/background/border-color var(--dock-motion-*)` transition arms
279
- are DELETED (a residual root CSS-transition on the morph-chrome props is
280
- the second-clock smell the single-scalar rebuild retires). The block-axis
281
- (height) morph is owned by the inner `.dock-layer-stack` / DockLayerGroup
282
- via the `--dock-morph-t` scalar (the size `calc()` above), never a CSS
283
- transition here. KEPT: the DECORATIVE hover-scale + press-squish (the
284
- individual `scale`/`transform`) and the box-shadow fade — these are
285
- interaction polish on the static rail, NOT the morph. */
295
+ /* BB.W-DOCK-MORPH-FAMILY (f) — the stale "a vertical rail is ALWAYS-EXPANDED
296
+ (no collapse↔expand morph)" assumption is RETIRED (it was false since
297
+ vertical-collapse shipped: `alwaysExpanded` defaults FALSE, so a vertical
298
+ dock genuinely collapses its `block-size`). The vertical plate's
299
+ bg/border/padding/radius now MORPH on the SAME `--dock-expand-t` scalar
300
+ the horizontal chrome rides (the morph.css `.glass-dock.vertical` interp +
301
+ padding axis-inverse + the radius arm below) — the chrome follows the
302
+ box-size morph, no discrete snap. NO root CSS-transition on the morph-
303
+ chrome props is re-added (a `transition: padding/background/border-color`
304
+ arm is the second-clock smell the single-scalar rebuild forbids — the
305
+ `--dock-expand-t` interp is the single authority). KEPT: the DECORATIVE
306
+ hover-scale + press-squish (the individual `scale`/`transform`) and the
307
+ box-shadow fade — interaction polish on the rail, NOT the morph chrome. */
286
308
  transition:
287
309
  box-shadow var(--dock-motion-standard),
288
310
  transform var(--dock-motion-resize),
@@ -318,6 +340,22 @@
318
340
  border-radius: var(--radius-xl);
319
341
  }
320
342
 
343
+ /* BB.W-DOCK-MORPH-FAMILY (f) — the VERTICAL big-dock CARD radius MORPHS on the
344
+ SAME `--dock-expand-t` scalar the horizontal `.shape-card` rides (the radius
345
+ arm of the vertical chrome un-gate; it lives in shell.css beside the horizontal
346
+ arm, not morph.css). `--radius-pill` at expand-t 0 (collapsed), the finite
347
+ `--dock-card-radius` at expand-t 1 (expanded) — the radius follows the box-size
348
+ block morph, no discrete snap. The static `.shape-pill`/`.shape-rounded` rest
349
+ radii above are the rest endpoints for those shapes; this is the card shape's
350
+ interpolated radius (mirroring the horizontal `:not(.vertical).shape-card`). */
351
+ .glass-dock.vertical.shape-card {
352
+ border-radius: calc(
353
+ var(--radius-pill) +
354
+ (var(--dock-card-radius) - var(--radius-pill)) *
355
+ var(--dock-expand-t, 1)
356
+ );
357
+ }
358
+
321
359
  /* AW.W3b — horizontal-root shape rules. The `shape-*` class once bound ONLY under
322
360
  the vertical surface; on a horizontal dock the prop silently no-op'd (the root
323
361
  hardwired `--radius-dock` = `--radius-pill`). These rules close that
@@ -67,6 +67,38 @@
67
67
  initial-value: 0;
68
68
  }
69
69
 
70
+ /* BB.W-DOCK-MORPH-FAMILY (e) — the `@property`-registered dock-scale axis. The
71
+ dock-scale cascade is `--dock-scale: calc(var(--ui-scale) * var(--dock-local-scale,
72
+ 1))` (tokens/sizing.css). UNregistered, that `calc()` substitutes ONCE at `:root`
73
+ against the `:root` identity `--dock-local-scale: 1`, so a consumer-scope
74
+ `--dock-local-scale` override is INHERITED but never RE-EVALUATED — the dock keeps
75
+ `--dock-scale: calc(1 * 1)` and stays at the unscaled base (the 3rd recurrence of
76
+ the AX.W55 substitution-vs-inheritance trap; the documented-but-broken `:root`
77
+ preset). Registering `--dock-local-scale` as an INHERITING `@property <number>`
78
+ makes a registered inheriting custom property re-substitute PER-ELEMENT, so a
79
+ `--dock-local-scale` override on ANY dock scope re-evaluates the `calc()` at that
80
+ scope and threads the whole geometry cascade (box·pad·gap·tab·tile·glyph) down in
81
+ lockstep — the `:root` preset made real (the `@property --dock-morph-t` house
82
+ idiom above is the precedent). `--dock-scale` itself is ALSO registered (the
83
+ derived axis) so its `calc()` re-resolves per-element when `--dock-local-scale`
84
+ shifts. ADDITIVE ONLY: `initial-value: 1` is the identity, so at the default
85
+ `--dock-local-scale: 1` the resolved `--dock-scale` is byte-IDENTICAL to HEAD (no
86
+ rung re-tune); the `@media (pointer: coarse)` re-declare (overflow.css) STAYS the
87
+ `:root`-equivalent re-resolve, and this registration is the complementary
88
+ non-`:root`-scope thread. DOCK_SPRING is untouched (this is a token registration,
89
+ not a clock). */
90
+ @property --dock-local-scale {
91
+ syntax: "<number>";
92
+ inherits: true;
93
+ initial-value: 1;
94
+ }
95
+
96
+ @property --dock-scale {
97
+ syntax: "<number>";
98
+ inherits: true;
99
+ initial-value: 1;
100
+ }
101
+
70
102
  @layer components {
71
103
  :where(
72
104
  .glass-dock,
@@ -1,21 +1,35 @@
1
1
  /*
2
- * drawer.css — Detented bottom-sheet grammar (AN.W3).
2
+ * drawer.css — Detented bottom-sheet grammar (AN.W3; BB.W-DRAWER-ABROGATE).
3
3
  *
4
- * vaul-vue owns the snap math (the spring transform between snap-points, the
5
- * drag-resistance overshoot, the `data-vaul-*` state attributes). glass-ui owns
6
- * the LOOK: the glass sheet surface, the rounded peek handle, the snap-stop
7
- * indicator rules, and the drag-resistance feel-tuning. This file is the
8
- * substrate so a consumer mounting `<Drawer mode="live-behind">` does not
9
- * re-author the three detents from scratch.
4
+ * THE HOUSE owns the snap math end-to-end now (vaul-vue ABROGATED). The Drawer
5
+ * family composes the reka `DialogRoot`/`DialogPortal`/`DialogContent` headless
6
+ * substrate (the SAME vueuse-free substrate every other compound wrapper binds),
7
+ * and the snap settle is driven by ONE house `SpringProgress` on the `DRAWER_SNAP`
8
+ * register (`useDrawerSnap.ts`, the §6 dock-morph `linear()` clock — NOT a bespoke
9
+ * `cubic-bezier(.32,.72,0,1)` transition; that was vaul's). The engine writes the
10
+ * `--glass-drawer-t` snap-fraction scalar (0 = closed/offscreen, 1 = the fullest
11
+ * detent) the content root reads as its translate; this file owns the LOOK: the
12
+ * glass sheet surface, the rounded peek handle, the snap-stop indicator rules, and
13
+ * the detent-fill geometry. This file is the substrate so a consumer mounting
14
+ * `<Drawer mode="live-behind">` does not re-author the three detents from scratch.
10
15
  *
11
16
  * Token-first — every visual axis reads a custom property. Consumers retune
12
17
  * the sheet by overriding the rungs below, never by editing this file.
13
18
  */
14
19
 
20
+ /* The snap-fraction scalar the house `useDrawerSnap` engine writes per frame. The
21
+ * content root's inline `transform` reads it (DrawerContent.vue) — typed so the
22
+ * default (1 = fully open) keeps a no-snap content-sized sheet seated open. */
23
+ @property --glass-drawer-t {
24
+ syntax: "<number>";
25
+ inherits: false;
26
+ initial-value: 1;
27
+ }
28
+
15
29
  :root {
16
30
  /* Detent grammar knobs — overridable per-consumer */
17
31
  --drawer-handle-w: 2.25rem;
18
- --drawer-handle-h: 0.3125rem; /* 5px — vaul's hit-target rhythm */
32
+ --drawer-handle-h: 0.3125rem; /* 5px — the iOS grip hit-target rhythm */
19
33
  --drawer-handle-color: var(--muted-foreground);
20
34
  --drawer-handle-opacity: 0.45;
21
35
  --drawer-handle-opacity-active: 0.85;
@@ -23,14 +37,15 @@
23
37
  }
24
38
 
25
39
  /*
26
- * The sheet surface. Replaces the prior inline-Tailwind triplet on
27
- * DrawerContent.vue so the glass tier + the snap transform feel live in one
40
+ * The sheet surface. The glass tier + the snap-translate feel live in one
28
41
  * token-driven place. The fixed/inset/z-index layout stays here too.
29
42
  *
30
- * NOTE: vaul-vue sets `transition: transform .5s cubic-bezier(.32,.72,0,1)` and
31
- * `touch-action: none` on `[data-vaul-drawer]` from its injected stylesheet —
32
- * that IS the drag-resistance spring curve. We do NOT override `transition` so
33
- * the snap feel is preserved; we layer border-radius + glass surface on top.
43
+ * NOTE: the snap motion is the house `useDrawerSnap` `SpringProgress` writing
44
+ * `--glass-drawer-t`, which the content root's inline `transform` reads (the §6
45
+ * doctrine — ONE motion vocabulary, no `transition: transform` curve injected on
46
+ * `[data-glass-drawer]`). `touch-action: none` on the handle keeps the drag gesture
47
+ * from scrolling the page. We layer border-radius + glass surface on top of the
48
+ * spring-driven translate.
34
49
  */
35
50
  .glass-drawer {
36
51
  position: fixed;
@@ -107,24 +122,26 @@
107
122
  }
108
123
 
109
124
  /*
110
- * Detented (snap-point) sheets fill the viewport height. vaul positions the
111
- * sheet by translating it DOWN by `innerHeight - (fraction * innerHeight)` —
112
- * so for a snap fraction to read as that fraction OF THE VIEWPORT, the sheet's
113
- * top must sit at the viewport top when fully open (offset 0). A `height: auto`
114
- * content sheet would instead translate off-screen. vaul tags the snap case via
115
- * `[data-vaul-snap-points=true]`; we fill height there and let the content
125
+ * Detented (snap-point) sheets fill the viewport height. The house engine positions
126
+ * the sheet by translating it along its drag axis by `(1 - --glass-drawer-t) * 100%`
127
+ * (DrawerContent.vue's inline transform) — so for a snap fraction to read as that
128
+ * fraction OF THE VIEWPORT, the sheet's top must sit at the viewport top when fully
129
+ * open (translate 0). A `height: auto` content sheet would instead translate
130
+ * off-screen. The content root tags the multi-detent case via
131
+ * `[data-glass-drawer-snap-points=true]`; we fill height there and let the content
116
132
  * scroll inside.
117
133
  */
118
- .glass-drawer[data-vaul-snap-points="true"] {
134
+ .glass-drawer[data-glass-drawer-snap-points="true"] {
119
135
  height: 100%;
120
136
  max-height: 100%;
121
137
  margin-top: 0;
122
138
  }
123
139
 
124
- /* Live-behind direction variants — vaul tags the root with the drag axis.
125
- Bottom is the default + the F-side pattern; the others ride the same surface
126
- so a top/side live-behind sheet inherits the grammar. */
127
- .glass-drawer[data-vaul-drawer-direction="top"] {
140
+ /* Direction variants — the content root tags itself with the drag axis
141
+ (`data-glass-drawer-direction`). Bottom is the default; the others ride the same
142
+ surface so a top/side sheet inherits the grammar. The side-lens (left/right) is
143
+ the BB-2 full-slide axis — it pins to its edge + fills the cross axis. */
144
+ .glass-drawer[data-glass-drawer-direction="top"] {
128
145
  bottom: auto;
129
146
  top: 0;
130
147
  margin-top: 0;
@@ -134,11 +151,35 @@
134
151
  border-radius: 0 0 var(--radius-panel) var(--radius-panel);
135
152
  }
136
153
 
154
+ .glass-drawer[data-glass-drawer-direction="left"],
155
+ .glass-drawer[data-glass-drawer-direction="right"] {
156
+ inset-inline: auto;
157
+ inset-block: 0;
158
+ height: 100%;
159
+ max-height: 100%;
160
+ width: min(24rem, 92vw);
161
+ margin: 0;
162
+ border: 1px solid var(--glass-border-overlay);
163
+ }
164
+
165
+ .glass-drawer[data-glass-drawer-direction="left"] {
166
+ left: 0;
167
+ border-left: 0;
168
+ border-radius: 0 var(--radius-panel) var(--radius-panel) 0;
169
+ }
170
+
171
+ .glass-drawer[data-glass-drawer-direction="right"] {
172
+ right: 0;
173
+ border-right: 0;
174
+ border-radius: var(--radius-panel) 0 0 var(--radius-panel);
175
+ }
176
+
137
177
  /*
138
178
  * Peek handle — the rounded grip at the top of the sheet. It is the visual
139
- * affordance the user drags to cycle peek → half → full. vaul-vue intensifies
140
- * the grip on `:active` via its own `[data-vaul-handle]` rules when the consumer
141
- * uses `<DrawerHandle>`; this is the glass-ui default grip for the common case.
179
+ * affordance the user drags to cycle peek → half → full. The house snap engine
180
+ * (`useDrawerSnap`) binds the pointer-drag gesture directly on this handle (the
181
+ * `[data-glass-drawer-handle]` element) and flags it `[data-dragging]` while a drag
182
+ * is in flight, so the grip intensifies "live" during the gesture.
142
183
  */
143
184
  .glass-drawer-handle {
144
185
  flex-shrink: 0;
@@ -160,10 +201,11 @@
160
201
  width var(--duration-fast) var(--ease-out);
161
202
  }
162
203
 
163
- /* While the sheet is being dragged vaul exposes the gesture; intensify the grip
164
- so the affordance reads as "live". `:active` covers the pointer-held case for
165
- the default grip; consumers using vaul's `<DrawerHandle>` get its own active
166
- rule in addition. */
204
+ /* While the sheet is being dragged the house engine flags the handle
205
+ `[data-dragging]`; intensify the grip so the affordance reads as "live".
206
+ `:active` covers the pointer-held case + `[data-dragging]` covers the captured
207
+ drag; the hover lift is the rest affordance. */
208
+ .glass-drawer-handle[data-dragging] .glass-drawer-grip,
167
209
  .glass-drawer-handle:active .glass-drawer-grip,
168
210
  .glass-drawer:hover .glass-drawer-grip {
169
211
  opacity: var(--drawer-handle-opacity-active);
@@ -176,7 +218,8 @@
176
218
  * `.glass-drawer-snap-rule` to a separator element inside the sheet; it reads as
177
219
  * the detent boundary line without competing with the content. This is the
178
220
  * "snap-stop visual indicator" the spec asks for, expressed as an opt-in class
179
- * (the detents themselves are positional, owned by vaul; the RULE is the look).
221
+ * (the detents themselves are positional, owned by the house snap engine; the
222
+ * RULE is the look).
180
223
  */
181
224
  .glass-drawer-snap-rule {
182
225
  height: 1px;
@@ -185,8 +228,11 @@
185
228
  background-color: var(--drawer-snap-rule-color);
186
229
  }
187
230
 
188
- /* Reduced-motion — vaul's transform transition is its own; we only suppress the
189
- grip's affordance animation so the handle does not pulse for PRM users. */
231
+ /* Reduced-motion — the house `SpringProgress` snaps the detent deterministically
232
+ under `prefers-reduced-motion: reduce` (its `respectReducedMotion` jumps the
233
+ `--glass-drawer-t` scalar to target in one frame, zero motion frames); here we
234
+ only suppress the grip's affordance animation so the handle does not pulse for
235
+ PRM users. */
190
236
  @media (prefers-reduced-motion: reduce) {
191
237
  .glass-drawer-grip {
192
238
  transition: none;
@@ -0,0 +1,44 @@
1
+ /* glass/deep.css — BB.W-DEEP-GLASS — the OPT-IN `.glass-deep` decoration.
2
+ *
3
+ * The deep-glass register: the maximal iOS-27 Liquid-Glass tier ABOVE the
4
+ * W-GLASS-CAL calm default (the Apple `saturate(1.8) blur(20px)` family, landed
5
+ * at the budget-clearing 16px / saturate 1.5; tokens/glass-deep.css). `.glass-deep`
6
+ * is the OPT-IN surface — a consumer adds it to a glass surface that wants the
7
+ * thick refractive liquid read (the hero glass, the dock, the CTA); the bare
8
+ * content default is UNCHANGED (the calm default is the user's call).
9
+ *
10
+ * ── The token-substitution model (the `.glass-opaque` precedent) ───────────
11
+ * `.glass-deep` is a DECORATION ON a base `.glass-*` rung, NOT a parallel solid/
12
+ * blur recipe. It mirrors `.glass-opaque` (ladder.css §opaque-escape — which only
13
+ * sets `--glass-level: 0`, a token re-point, never a competing `backdrop-filter`):
14
+ * `.glass-deep` re-points the floating-rung blur token to the deep family
15
+ * (`--glass-blur-floating: var(--glass-blur-deep)`), so the base `.glass-floating`
16
+ * rule's `backdrop-filter: var(--glass-blur-floating)` resolves to the DEEP blur —
17
+ * NO cascade fight, NO base-rule edit, the glass edge/rim/under-shadow + the W55
18
+ * tint axis + the a11y brackets all compose unchanged. The deep tier rides a base
19
+ * rung exactly as `.glass-opaque` does (the CardTier map is `deep →
20
+ * 'glass-floating glass-deep'`).
21
+ *
22
+ * Because the deep blur (glass-deep.css) COMPOSES `var(--glass-level)`, the a11y
23
+ * brackets (`prefers-reduced-transparency: reduce` / `prefers-contrast: more` set
24
+ * `--glass-level: 0` / 0.3 at :root, a11y-fallback.css) reach the deep plate for
25
+ * FREE — the deep blur collapses to blur(0) under reduced-transparency through the
26
+ * SAME level path (the opaque escape). The W55 bright-bucket darken reaches the
27
+ * deep surface by construction too: `.glass-deep` is composed WITH `.glass-floating`,
28
+ * which is already in the W55 `@container style(--glass-backdrop: light)` material
29
+ * group (ladder.css) AND self-engages the overlay-band darken — the deep tier
30
+ * inherits the legibility tint with no selector-list edit.
31
+ *
32
+ * @import-ed in glass.css AFTER ladder.css/surfaces.css (the same @layer components,
33
+ * source-order-after so the token re-point lands beside the rung it rides) and
34
+ * BEFORE the a11y @media brackets (which still win by the :root level re-point).
35
+ */
36
+ @layer components {
37
+ /* The deep decoration: re-point the floating rung's blur token to the deep
38
+ family. The base `.glass-floating` rule (`backdrop-filter:
39
+ var(--glass-blur-floating)`) then paints the deep `blur(16px) saturate(1.5)`
40
+ at `--glass-depth: 1` — the Apple-deep register, opt-in. */
41
+ .glass-deep {
42
+ --glass-blur-floating: var(--glass-blur-deep);
43
+ }
44
+ }
@@ -31,13 +31,21 @@
31
31
  strength))`). With the default `--glass-tint-strength: 0%` the mix is a
32
32
  no-op = byte-identical to the un-tinted rung; a consumer biases the surface
33
33
  toward a sampled backdrop hue by setting `--glass-tint-source` + a
34
- strength ≤30%. oklab is the mwg-preferred tint space (NEVER an
35
- `oklch(from …)` lightness-shift — browsers don't gamut-map yet). */
34
+ strength ≤30%. oklab is the mwg-preferred tint space for the TINT mix here
35
+ (NEVER an `oklch(from …)` lightness-shift in the GLASS-TINT mix). The
36
+ `oklch(from var(--foreground) …)` relative-color recipe DID land its first
37
+ live consumer at BB.W-DARK-INK-WARM — the dark `--surface-tint-*` arm
38
+ (`tokens/dark-arm.css`), where the tolerant α-mix absorbs the small high-L
39
+ chroma (the gamut-map caveat documented + pinned under the gamut edge there).
40
+ That is the INK derivation, separate from THIS glass-tint mix space. */
36
41
  .glass-wash {
37
42
  position: relative;
38
43
  background: color-mix(in oklab, var(--glass-bg-wash), var(--glass-tint-source) var(--glass-tint-strength));
39
44
  backdrop-filter: var(--glass-blur-wash);
40
- border: 1px solid var(--glass-border-wash);
45
+ /* BB.W-GLASS-ACCENT — the rung border ink feeds the accent-composed
46
+ `--glass-border-accent` (rim group above); byte-identical at 0%. */
47
+ --glass-border-rung: var(--glass-border-wash);
48
+ border: 1px solid var(--glass-border-accent);
41
49
  box-shadow: var(--glass-material-rim), var(--glass-shadow-wash);
42
50
  }
43
51
 
@@ -57,7 +65,8 @@
57
65
  position: relative;
58
66
  background: color-mix(in oklab, var(--glass-bg-quiet), var(--glass-tint-source) var(--glass-tint-strength));
59
67
  backdrop-filter: var(--glass-blur-quiet);
60
- border: 1px solid var(--glass-border-quiet);
68
+ --glass-border-rung: var(--glass-border-quiet);
69
+ border: 1px solid var(--glass-border-accent);
61
70
  box-shadow:
62
71
  var(--glass-material-rim),
63
72
  var(--glass-under-shadow-quiet),
@@ -68,7 +77,8 @@
68
77
  position: relative;
69
78
  background: color-mix(in oklab, var(--glass-bg-resting), var(--glass-tint-source) var(--glass-tint-strength));
70
79
  backdrop-filter: var(--glass-blur-resting);
71
- border: 1px solid var(--glass-border-resting);
80
+ --glass-border-rung: var(--glass-border-resting);
81
+ border: 1px solid var(--glass-border-accent);
72
82
  box-shadow:
73
83
  var(--glass-material-rim),
74
84
  var(--glass-under-shadow-default),
@@ -94,7 +104,8 @@
94
104
  position: relative;
95
105
  background: color-mix(in oklab, var(--glass-bg-floating), var(--glass-tint-source) var(--glass-tint-strength));
96
106
  backdrop-filter: var(--glass-blur-floating);
97
- border: 1px solid var(--glass-border-floating);
107
+ --glass-border-rung: var(--glass-border-floating);
108
+ border: 1px solid var(--glass-border-accent);
98
109
  box-shadow:
99
110
  var(--glass-material-rim),
100
111
  var(--glass-under-shadow-vivid),
@@ -108,7 +119,8 @@
108
119
  position: relative;
109
120
  background: color-mix(in oklab, var(--glass-bg-overlay), var(--glass-tint-source) var(--glass-tint-strength));
110
121
  backdrop-filter: var(--glass-blur-overlay);
111
- border: 1px solid var(--glass-border-overlay);
122
+ --glass-border-rung: var(--glass-border-overlay);
123
+ border: 1px solid var(--glass-border-accent);
112
124
  box-shadow: var(--glass-material-rim), var(--glass-shadow-overlay);
113
125
  }
114
126
 
@@ -199,7 +211,13 @@
199
211
  `--glass-tint-strength: 0%`. */
200
212
  :where(.glass-floating, .glass-overlay) {
201
213
  --glass-tint-source: var(--glass-tint-ink);
202
- --glass-tint-strength: var(--glass-tint-strength-aa);
214
+ /* BC.W-AUDIT — the scope-7 completion: the overlay band JOINS the content-tier
215
+ sub-perceptual FLOOR by default (translucent warm glass), and the FULL AA
216
+ darken engages ONLY under the bright bucket (the @container --glass-backdrop:
217
+ light above). The prior unconditional AA (20% ink-ward) collapsed every
218
+ floating surface to grey over the common calm-light backdrop. The full glass
219
+ rebuild + the per-band muted/contrast reconciliation is BC. */
220
+ --glass-tint-strength: var(--glass-tint-strength-floor);
203
221
  --muted-foreground: var(--foreground);
204
222
  }
205
223
 
@@ -212,10 +230,31 @@
212
230
  under the declared/sampled BRIGHT signal (the @container --glass-backdrop:light bucket
213
231
  above — where the muted lift also lives now). NO unconditional --muted-foreground lift
214
232
  here: on the calm-light floor the caption keeps the muted register (the slides read).
215
- A consumer opts a light-page card out via `--glass-tint-strength: 0%` on an ancestor. */
233
+ A consumer opts a light-page card out via `--glass-tint-strength: 0%` on an ancestor.
234
+
235
+ BB.W-ON-GLASS-FG (N13) — the THIRD-STATE on-glass FOREGROUND re-point lands HERE,
236
+ BESIDE the BA seam (the SAME cascade context, the SAME content-tier set, NOT a new
237
+ competing layer). The calm-light floor keeps the page-muted --neutral-5 at HEAD —
238
+ but the muted ink is calibrated against the CANVAS, and on a TRANSLUCENT content
239
+ plate (the glass-first common case) it composites toward the lifted backdrop and
240
+ its contrast COLLAPSES (1.15-3.29:1 measured in dark). The re-point targets the
241
+ muted register at the COMPOSITED glass fill: --muted-foreground → --on-glass-muted
242
+ (+ the -strong twin), a register BETWEEN the page-muted and the bright-bucket full
243
+ ink (legible-AND-subordinate; the caption stays quieter than body --foreground).
244
+ This is NOT a fork of --glass-tint-* — it READS the seam context and expresses the
245
+ third state; it NEVER re-declares --glass-tint-ink/-strength-* (W-DARK-MATERIAL's
246
+ frozen bound). The BA bright-bucket lift (@container --glass-backdrop:light above,
247
+ --muted-foreground → --foreground) STILL WINS where the plate darkens — the
248
+ @container conditional overrides this unconditional :where() when it engages, so a
249
+ darkened plate goes full ink; this calm re-point is the calm-plate case ONLY. The
250
+ overlay band (:where(.glass-floating, .glass-overlay) above) is a DISJOINT selector
251
+ set (it keeps the full-ink lift), so neither path collides. The values auto-flip per
252
+ mode (the on-glass rungs carry their own light/dark per-mode arms in tokens). */
216
253
  :where(.glass-card, .glass-resting, .glass-quiet, .glass-wash) {
217
254
  --glass-tint-source: var(--glass-tint-ink);
218
255
  --glass-tint-strength: var(--glass-tint-strength-floor);
256
+ --muted-foreground: var(--on-glass-muted);
257
+ --muted-foreground-strong: var(--on-glass-muted-strong);
219
258
  }
220
259
 
221
260
  /* AX.W55 — the `contrast-color()` foreground-ink flip (Chrome 147+/Safari 26+).
@@ -332,7 +371,16 @@
332
371
  var(--glass-shadow-floating);
333
372
  }
334
373
 
335
- /* Grain noise overlay — reuses paper texture SVG, no extra assets */
374
+ /* Grain noise overlay — reuses paper texture SVG, no extra assets.
375
+ BB.W-LIQUIDHOVER — the disco-grain pop (T8-F6) killed at the COMPOSITION CLASS:
376
+ the `background-image` is ALWAYS PRESENT (decoded once at rest, NEVER toggled to
377
+ `none`), and any STATE-driven grain engagement cross-fades the `opacity` ONLY on
378
+ the thin `--glass-grain-engage-duration` (~120ms linear) clock. A `background-
379
+ image: none → var(--paper-clean-texture)` engage decodes-and-appears in one frame
380
+ (the pop); the opacity cross-fade is a compositor-cheap interpolation with the
381
+ image constant — the only sanctioned grain engage. The `transition` lives HERE so
382
+ a hover/active grain lift (wherever a glass surface raises grain on interaction)
383
+ reads as a smooth fade by construction, not a discrete swap. */
336
384
  .glass-wash::after,
337
385
  .glass-quiet::after,
338
386
  .glass-resting::after,
@@ -342,36 +390,44 @@
342
390
  position: absolute;
343
391
  inset: 0;
344
392
  border-radius: inherit;
345
- background: var(--paper-clean-texture);
393
+ /* The grain texture is the `background-image` longhand (NOT the `background`
394
+ shorthand) so the image stays a STABLE always-present layer the engage
395
+ never re-declares — the structural anti-pop: opacity is the only animated
396
+ channel, the image is never `none → image`. */
397
+ background-image: var(--paper-clean-texture);
346
398
  background-repeat: repeat;
347
399
  background-size: var(--paper-texture-size);
348
400
  opacity: var(--glass-grain-opacity);
401
+ /* The opacity cross-fade engage — plain ~120ms linear direct-write (no spring,
402
+ no overshoot — instant-but-smooth per the ask). Under the PRM / reduced-
403
+ transparency brackets the clock collapses to 0ms (the a11y bracket below). */
404
+ transition: opacity var(--glass-grain-engage-duration, 120ms) linear;
349
405
  pointer-events: none;
350
406
  mix-blend-mode: overlay;
351
407
  }
352
408
 
353
- /* (b) The unified rim — `--glass-edge-light` full-perimeter inset ring on
354
- EVERY material surface (AW.W22). Previously the rim was wired only into
355
- the floating/overlay tiers' box-shadow stack; promoting it to the material
356
- group makes wash/quiet/resting/card/dock-control all carry the same
357
- silhouette catch-light from ONE token. The rim is its OWN `box-shadow`
358
- declaration on the material group so it composes uniformly without
359
- perturbing each tier's elevation recipe (the floating/overlay tiers drop
360
- their now-redundant inline `--glass-edge-light` layer below). The alpha is
361
- deliberately low so the rim never eats AA legibility over a busy
362
- backdrop. */
363
- .glass-material,
364
- .glass-wash,
365
- .glass-quiet,
366
- .glass-resting,
367
- .glass-floating,
368
- .glass-overlay,
369
- .glass-card,
370
- .glass-specular-track,
371
- .dock-icon-button {
372
- --glass-material-rim: var(--glass-edge-light);
409
+ /* BB.W-LIQUIDHOVER — the grain engage collapses to INSTANT under reduced motion (a
410
+ grain that cross-fades on hover under reduce is still motion; accessibility is
411
+ absolute). The reduced-transparency / forced-colors brackets already zero
412
+ `--glass-grain-opacity` (a11y-fallback.css), so the grain is inert there; this
413
+ bracket covers the reduced-MOTION case where the grain still paints but must not
414
+ animate. */
415
+ @media (prefers-reduced-motion: reduce) {
416
+ .glass-wash::after,
417
+ .glass-quiet::after,
418
+ .glass-resting::after,
419
+ .glass-floating::after,
420
+ .glass-overlay::after {
421
+ transition: none;
422
+ }
373
423
  }
374
424
 
425
+ /* The unified rim (AW.W22) + the BB.W-GLASS-ACCENT per-INSTANCE chromatic-RIM
426
+ tint group (the rim-ink + --glass-material-rim ring + the per-rung
427
+ --glass-border-accent border, light + dark arms) lives in glass/rim.css
428
+ (carved at BB.W-CARVE4 — the next adjacent @layer components block, the SOLE
429
+ writer of --glass-material-rim/--glass-border-accent). */
430
+
375
431
  .dark .glass-wash::after,
376
432
  .dark .glass-quiet::after,
377
433
  .dark .glass-resting::after,