@mkbabb/glass-ui 3.13.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/README.md +3 -1
  2. package/dist/CardAction-CW7a0m8M.js +253 -0
  3. package/dist/{CommandShortcut-RowNEO6i.js → CommandShortcut-DvZNQ_HF.js} +58 -53
  4. package/dist/ConfiguratorRow-BR4l-ixA.js +143 -0
  5. package/dist/{ContextMenuContent-CT3AS1WX.js → ContextMenuContent-uWnVxDab.js} +1 -1
  6. package/dist/{ContextMenuSubContent-BQmxTAdw.js → ContextMenuSubContent-xol4sD2q.js} +32 -37
  7. package/dist/{DataTable-BCddn3T3.js → DataTable-CuKwF7wr.js} +99 -97
  8. package/dist/DialogContent-DcKK8k9i.js +103 -0
  9. package/dist/{DialogFooter-Blu4t7tJ.js → DialogFooter-BZNX5aVr.js} +3 -3
  10. package/dist/FadingScroll-DI6hQhT9.js +76 -0
  11. package/dist/{HoverCardContent-Csywg3YF.js → HoverCardContent-b2uaAMRR.js} +1 -1
  12. package/dist/{HoverPopover-CISOJQuZ.js → HoverPopover-CbqbNwgU.js} +2 -2
  13. package/dist/IconChip-BTD-nay5.js +55 -0
  14. package/dist/{IconTooltip-DPzE09X9.js → IconTooltip-Bl8gFZ8d.js} +1 -1
  15. package/dist/{Input-DWQQIOC4.js → Input-h9v5LeXf.js} +1 -1
  16. package/dist/{MetricBadge-C9QMz1KT.js → MetricBadge-RHdBP72w.js} +1 -1
  17. package/dist/Notification-VUwexFUf.js +43 -0
  18. package/dist/NumberFieldContent-Cq7EzX-U.js +138 -0
  19. package/dist/PopoverContent-DL7E6vJP.js +127 -0
  20. package/dist/{Progress-DwlUKGbr.js → Progress-DctG61iZ.js} +98 -78
  21. package/dist/{ScrollingText-DfFrwSph.js → ScrollingText-yOpBzFYq.js} +2 -2
  22. package/dist/{SelectScrollDownButton-CiDUxfEj.js → SelectScrollDownButton-CrA8F0iV.js} +35 -20
  23. package/dist/{Switch-CsIuYP_e.js → Switch-CwYNf8bo.js} +1 -1
  24. package/dist/Toaster-Bw4xR8xV.js +274 -0
  25. package/dist/{ToggleGroupItem-D_AHlRw9.js → ToggleGroupItem-pEM9vIhs.js} +50 -37
  26. package/dist/{TooltipProvider-B3MkB_8P.js → TooltipProvider-rzvnXz60.js} +1 -1
  27. package/dist/animated-digit.js +2 -2
  28. package/dist/api/index.d.ts +16 -8
  29. package/dist/api/types-extra.d.ts +6 -0
  30. package/dist/api.js +2 -2
  31. package/dist/aurora.js +888 -230
  32. package/dist/badge.js +1 -1
  33. package/dist/border-progress.d.ts +1 -0
  34. package/dist/border-progress.js +106 -0
  35. package/dist/button-DYCUa-tH.js +126 -0
  36. package/dist/button.js +1 -1
  37. package/dist/canvas.js +2 -2
  38. package/dist/card.js +2 -2
  39. package/dist/carousel.d.ts +1 -1
  40. package/dist/carousel.js +90 -151
  41. package/dist/collapsible.js +1 -1
  42. package/dist/color-swatch.d.ts +1 -0
  43. package/dist/color-swatch.js +47 -0
  44. package/dist/color.js +1 -1
  45. package/dist/command.js +1 -1
  46. package/dist/compile-CQEFRTmx.js +19 -0
  47. package/dist/components/custom/aurora/composables/atoms-fields.d.ts +39 -0
  48. package/dist/components/custom/aurora/composables/auroraFallbackGround.d.ts +108 -0
  49. package/dist/components/custom/aurora/composables/runtime.d.ts +19 -0
  50. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +5 -1
  51. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +51 -0
  52. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +29 -0
  53. package/dist/components/custom/aurora/constants/budget.d.ts +21 -0
  54. package/dist/components/custom/aurora/constants/presets.d.ts +30 -2
  55. package/dist/components/custom/aurora/constants/renderMode.d.ts +63 -10
  56. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -0
  57. package/dist/components/custom/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -0
  58. package/dist/components/custom/aurora/constants/shaders/procedural-color.wgsl.d.ts +4 -0
  59. package/dist/components/custom/aurora/index.d.ts +3 -2
  60. package/dist/components/custom/border-progress/BorderProgress.vue.d.ts +46 -0
  61. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +22 -0
  62. package/dist/components/custom/border-progress/constants.d.ts +59 -0
  63. package/dist/components/custom/border-progress/index.d.ts +4 -0
  64. package/dist/components/custom/color-swatch/ColorSwatch.vue.d.ts +22 -0
  65. package/dist/components/custom/color-swatch/index.d.ts +1 -0
  66. package/dist/components/custom/concentric/Concentric.vue.d.ts +39 -0
  67. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +11 -0
  68. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +13 -0
  69. package/dist/components/custom/concentric/composables/ringField.d.ts +44 -0
  70. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +13 -0
  71. package/dist/components/custom/concentric/composables/useConcentric.d.ts +35 -0
  72. package/dist/components/custom/concentric/constants.d.ts +43 -0
  73. package/dist/components/custom/concentric/index.d.ts +5 -0
  74. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +4 -0
  75. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -0
  76. package/dist/components/custom/configurator/Configurator.vue.d.ts +19 -8
  77. package/dist/components/custom/constellation/Constellation.vue.d.ts +18 -206
  78. package/dist/components/custom/constellation/composables/useConstellation.d.ts +26 -0
  79. package/dist/components/custom/constellation/constellationField.d.ts +2 -369
  80. package/dist/components/custom/constellation/constellationTypes.d.ts +369 -0
  81. package/dist/components/custom/constellation/index.d.ts +1 -1
  82. package/dist/components/custom/dock/DockIconButton.vue.d.ts +13 -4
  83. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +10 -2
  84. package/dist/components/custom/dock/DockRail.vue.d.ts +17 -16
  85. package/dist/components/custom/dock/DockSection.vue.d.ts +69 -0
  86. package/dist/components/custom/dock/DockSeparator.vue.d.ts +49 -1
  87. package/dist/components/custom/dock/DockTabButton.vue.d.ts +5 -5
  88. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +75 -0
  89. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -0
  90. package/dist/components/custom/dock/constants.d.ts +35 -0
  91. package/dist/components/custom/dock/index.d.ts +2 -0
  92. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +38 -0
  93. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +41 -0
  94. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +24 -0
  95. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +34 -0
  96. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -0
  97. package/dist/components/custom/dot-flow-field/constants.d.ts +48 -0
  98. package/dist/components/custom/dot-flow-field/index.d.ts +5 -0
  99. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -0
  100. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +20 -0
  101. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -0
  102. package/dist/components/custom/easing/EasingConfigurator.vue.d.ts +33 -0
  103. package/dist/components/custom/easing/EasingPicker.vue.d.ts +49 -0
  104. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +75 -0
  105. package/dist/components/custom/easing/constants.d.ts +28 -0
  106. package/dist/components/custom/easing/index.d.ts +3 -0
  107. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +10 -0
  108. package/dist/components/custom/fading-scroll/FadingScroll.vue.d.ts +25 -0
  109. package/dist/components/custom/fading-scroll/composables/useFadingScroll.d.ts +31 -0
  110. package/dist/components/custom/fading-scroll/constants.d.ts +19 -0
  111. package/dist/components/custom/fading-scroll/index.d.ts +2 -0
  112. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +19 -2
  113. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +39 -0
  114. package/dist/components/custom/fourier-field/constants.d.ts +7 -0
  115. package/dist/components/custom/fourier-field/index.d.ts +1 -1
  116. package/dist/components/custom/fourier-field/math.d.ts +17 -0
  117. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +9 -1
  118. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +4 -2
  119. package/dist/components/custom/goo-blob/composables/uniformBridgeWGPU.d.ts +24 -0
  120. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +29 -12
  121. package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +23 -0
  122. package/dist/components/custom/goo-blob/constants.d.ts +6 -1
  123. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -0
  124. package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
  125. package/dist/components/custom/handmark/brush.d.ts +269 -0
  126. package/dist/components/custom/handmark/composables/useHandMark.d.ts +89 -0
  127. package/dist/components/custom/handmark/constants.d.ts +39 -0
  128. package/dist/components/custom/handmark/freehand.d.ts +69 -0
  129. package/dist/components/custom/handmark/geometry.d.ts +52 -0
  130. package/dist/components/custom/handmark/index.d.ts +27 -0
  131. package/dist/components/custom/handmark/ink.d.ts +11 -0
  132. package/dist/components/custom/handmark/texture.d.ts +39 -0
  133. package/dist/components/custom/handmark/types.d.ts +62 -0
  134. package/dist/components/custom/icon-chip/IconChip.vue.d.ts +4 -0
  135. package/dist/components/custom/icon-chip/index.d.ts +2 -0
  136. package/dist/components/custom/icon-chip/types.d.ts +82 -0
  137. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +17 -2
  138. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
  139. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +39 -0
  140. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  141. package/dist/components/custom/spa-view/SpaView.vue.d.ts +50 -0
  142. package/dist/components/custom/spa-view/index.d.ts +2 -0
  143. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +29 -24
  144. package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +42 -0
  145. package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +30 -21
  146. package/dist/components/custom/tabs/constants.d.ts +9 -3
  147. package/dist/components/custom/tabs/index.d.ts +1 -1
  148. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +15 -1
  149. package/dist/components/ui/_shared/index.d.ts +2 -0
  150. package/dist/components/ui/_shared/menuItemVariants.d.ts +19 -0
  151. package/dist/components/ui/_shared/useSurfaceAxis.d.ts +41 -0
  152. package/dist/components/ui/badge/index.d.ts +1 -1
  153. package/dist/components/ui/button/Button.vue.d.ts +5 -2
  154. package/dist/components/ui/button/index.d.ts +2 -2
  155. package/dist/components/ui/card/Card.vue.d.ts +34 -4
  156. package/dist/components/ui/card/CardHeader.vue.d.ts +42 -16
  157. package/dist/components/ui/card/ScrollCard.vue.d.ts +33 -0
  158. package/dist/components/ui/card/ScrollCardHeader.vue.d.ts +17 -0
  159. package/dist/components/ui/card/index.d.ts +2 -0
  160. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
  161. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
  162. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +2 -2
  163. package/dist/components/ui/carousel/index.d.ts +0 -1
  164. package/dist/components/ui/command/Command.vue.d.ts +4 -1
  165. package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -3
  166. package/dist/components/ui/drawer/Drawer.vue.d.ts +46 -33
  167. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +12 -8
  168. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +2 -2
  169. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +1 -1
  170. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +2 -2
  171. package/dist/components/ui/drawer/composables/drawerSnapContext.d.ts +26 -0
  172. package/dist/components/ui/drawer/composables/useDrawerSnap.d.ts +17 -0
  173. package/dist/components/ui/drawer/constants.d.ts +45 -0
  174. package/dist/components/ui/drawer/index.d.ts +23 -15
  175. package/dist/components/ui/focus-scope/FocusScope.vue.d.ts +20 -0
  176. package/dist/components/ui/focus-scope/index.d.ts +2 -0
  177. package/dist/components/ui/index.d.ts +1 -1
  178. package/dist/components/ui/popover/PopoverContent.vue.d.ts +3 -0
  179. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +3 -2
  180. package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +14 -3
  181. package/dist/components/ui/select/SelectContent.vue.d.ts +1 -1
  182. package/dist/components/ui/select/SelectTrigger.vue.d.ts +27 -4
  183. package/dist/components/ui/sheet/SheetContent.vue.d.ts +6 -0
  184. package/dist/components/ui/sheet/index.d.ts +1 -1
  185. package/dist/components/ui/skeleton/Skeleton.vue.d.ts +3 -0
  186. package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
  187. package/dist/components/ui/toast/Toast.vue.d.ts +5 -2
  188. package/dist/components/ui/toast/use-toast.d.ts +14 -0
  189. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  190. package/dist/composables/dark/index.d.ts +1 -1
  191. package/dist/composables/dark/useGlobalDark.d.ts +23 -1
  192. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +13 -6
  193. package/dist/composables/glass/index.d.ts +5 -2
  194. package/dist/composables/glass/useSpecularPointer.d.ts +33 -0
  195. package/dist/composables/glass/useSpecularTracking.d.ts +20 -0
  196. package/dist/composables/glass/vSpecular.d.ts +2 -0
  197. package/dist/composables/glass/webgl/shaders/flow.glsl.d.ts +1 -0
  198. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -0
  199. package/dist/composables/glass/webgpu/index.d.ts +2 -0
  200. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +54 -0
  201. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +84 -0
  202. package/dist/composables/motion/core/index.d.ts +1 -0
  203. package/dist/composables/motion/index.d.ts +4 -0
  204. package/dist/composables/motion/useDockCtaReceive.d.ts +59 -0
  205. package/dist/composables/motion/useDragMorph.d.ts +77 -0
  206. package/dist/composables/motion/useLiquidFlex.d.ts +11 -0
  207. package/dist/composables/motion/useLiquidPress.d.ts +71 -0
  208. package/dist/composables/motion/useLiquidReveal.d.ts +51 -0
  209. package/dist/composables/motion/useNumericTransition.d.ts +3 -3
  210. package/dist/composables/motion/usePointerVelocityField.d.ts +98 -0
  211. package/dist/composables/motion/useViewTransition.d.ts +36 -1
  212. package/dist/concentric.d.ts +1 -0
  213. package/dist/concentric.js +562 -0
  214. package/dist/configurator.js +3 -2
  215. package/dist/confirm-dialog.js +22 -24
  216. package/dist/constellation.js +93 -95
  217. package/dist/context-menu.js +3 -3
  218. package/dist/controls.js +10 -4
  219. package/dist/createCanvasLifecycle-CHD5XrDW.js +82 -0
  220. package/dist/dark.d.ts +1 -1
  221. package/dist/dark.js +1 -1
  222. package/dist/data-table.js +1 -1
  223. package/dist/dialog.js +2 -2
  224. package/dist/dock.js +738 -442
  225. package/dist/{dockContext-BegmJVmx.js → dockContext-BNfyPLe9.js} +1 -1
  226. package/dist/dom.js +5 -5
  227. package/dist/dot-flow-field.d.ts +1 -0
  228. package/dist/dot-flow-field.js +604 -0
  229. package/dist/drawer.d.ts +1 -0
  230. package/dist/drawer.js +380 -0
  231. package/dist/{dropdown-menu-DzkkyBwX.js → dropdown-menu-CofSZuk8.js} +14 -15
  232. package/dist/dropdown-menu.js +1 -1
  233. package/dist/easing.d.ts +1 -0
  234. package/dist/easing.js +463 -0
  235. package/dist/expandable-container.js +45 -38
  236. package/dist/fading-scroll.d.ts +1 -0
  237. package/dist/fading-scroll.js +2 -0
  238. package/dist/focus-scope.d.ts +1 -0
  239. package/dist/focus-scope.js +23 -0
  240. package/dist/forms.js +7 -7
  241. package/dist/fourier-field.js +135 -122
  242. package/dist/fourier-math.js +2 -2
  243. package/dist/glass-panel.js +39 -36
  244. package/dist/glass-ui.css +1 -1
  245. package/dist/glass-ui.js +154 -362
  246. package/dist/goo-blob.js +838 -227
  247. package/dist/handmark.d.ts +1 -0
  248. package/dist/handmark.js +707 -0
  249. package/dist/header-ribbon.js +1 -1
  250. package/dist/hover-card.js +1 -1
  251. package/dist/hover-popover.js +1 -1
  252. package/dist/icon-chip.d.ts +1 -0
  253. package/dist/icon-chip.js +2 -0
  254. package/dist/icon-tooltip.js +1 -1
  255. package/dist/index.d.ts +3 -3
  256. package/dist/instrument-chassis.js +1 -1
  257. package/dist/keyboard.js +1 -1
  258. package/dist/label.js +1 -1
  259. package/dist/labeled-field.js +6 -6
  260. package/dist/{math-U6-RrLmV.js → math-BINYmg5z.js} +11 -3
  261. package/dist/{menuItemVariants-DPiEarb0.js → menuItemVariants-D8VNHq22.js} +10 -4
  262. package/dist/metric-badge.js +1 -1
  263. package/dist/metric-cell.js +25 -22
  264. package/dist/metric-stack.js +4 -8
  265. package/dist/motion-core.js +36 -35
  266. package/dist/motion-curves.js +1 -1
  267. package/dist/motion.js +157 -55
  268. package/dist/notification.js +1 -1
  269. package/dist/number-field.js +1 -1
  270. package/dist/pager-dots.d.ts +1 -0
  271. package/dist/pager-dots.js +91 -0
  272. package/dist/paper-backdrop.js +1 -1
  273. package/dist/popover.js +1 -1
  274. package/dist/{presets-BKVyQfbt.js → presets-BW2b-fr1.js} +14 -1
  275. package/dist/{compile-B7NGOBcP.js → procedural-color.glsl-CIFsJhwI.js} +1 -155
  276. package/dist/procedural-color.wgsl-CToRHugY.js +224 -0
  277. package/dist/progress.js +1 -1
  278. package/dist/pulse.js +1 -1
  279. package/dist/reactive.js +2 -2
  280. package/dist/scrolling-text.js +1 -1
  281. package/dist/search.js +10 -12
  282. package/dist/select.js +3 -3
  283. package/dist/separator.js +1 -1
  284. package/dist/sheet-tZMg0E0w.js +218 -0
  285. package/dist/sheet.js +1 -1
  286. package/dist/{slider-B-JP2JlI.js → slider-DVb4HXU-.js} +7 -7
  287. package/dist/slider.js +1 -1
  288. package/dist/sortable-list.js +3 -3
  289. package/dist/spa-view.d.ts +1 -0
  290. package/dist/spa-view.js +46 -0
  291. package/dist/styles/animations.css +40 -31
  292. package/dist/styles/border-progress.css +109 -0
  293. package/dist/styles/cards.css +76 -0
  294. package/dist/styles/components.css +1 -1
  295. package/dist/styles/configurator.css +35 -0
  296. package/dist/styles/critical-partition.mjs +140 -0
  297. package/dist/styles/critical.css +12 -0
  298. package/dist/styles/deferred.css +31 -0
  299. package/dist/styles/dock/density.css +64 -0
  300. package/dist/styles/dock/layers.css +54 -30
  301. package/dist/styles/dock/morph.css +124 -7
  302. package/dist/styles/dock/overflow.css +31 -2
  303. package/dist/styles/dock/rail-extend.css +168 -71
  304. package/dist/styles/dock/section.css +59 -0
  305. package/dist/styles/dock/shell.css +83 -16
  306. package/dist/styles/dock-controls/icon-button.css +11 -1
  307. package/dist/styles/dock-controls/tab-button.css +24 -83
  308. package/dist/styles/dock-controls/triggers.css +7 -0
  309. package/dist/styles/dock.css +38 -3
  310. package/dist/styles/drawer.css +127 -35
  311. package/dist/styles/feedback-tone.css +104 -0
  312. package/dist/styles/glass/deep.css +44 -0
  313. package/dist/styles/glass/ladder.css +154 -52
  314. package/dist/styles/glass/material.css +78 -15
  315. package/dist/styles/glass/reveal.css +136 -0
  316. package/dist/styles/glass/rim.css +100 -0
  317. package/dist/styles/glass/surface-axis.css +113 -0
  318. package/dist/styles/glass/surfaces.css +189 -15
  319. package/dist/styles/glass-refract.css +96 -44
  320. package/dist/styles/glass-specular-track.css +7 -0
  321. package/dist/styles/glass.css +8 -2
  322. package/dist/styles/hover-popover.css +7 -6
  323. package/dist/styles/icon-chip.css +211 -0
  324. package/dist/styles/index.css +78 -4
  325. package/dist/styles/instrument-chassis.css +107 -2
  326. package/dist/styles/menu.css +127 -0
  327. package/dist/styles/scroll-choreography.css +300 -0
  328. package/dist/styles/segmented-tabs.css +188 -86
  329. package/dist/styles/select.css +50 -0
  330. package/dist/styles/theme/bridges.css +22 -1
  331. package/dist/styles/theme/literals.css +11 -2
  332. package/dist/styles/theme/radius.css +6 -1
  333. package/dist/styles/tokens/color-radius.css +40 -13
  334. package/dist/styles/tokens/dark-arm.css +200 -20
  335. package/dist/styles/tokens/glass-deep.css +75 -0
  336. package/dist/styles/tokens/glass-fx.css +333 -0
  337. package/dist/styles/tokens/glass.css +95 -315
  338. package/dist/styles/tokens/light-dark.css +64 -22
  339. package/dist/styles/tokens/offsets.css +116 -0
  340. package/dist/styles/tokens/on-glass-fg.css +39 -0
  341. package/dist/styles/tokens/property-regs.css +130 -10
  342. package/dist/styles/tokens/scale-paper.css +155 -84
  343. package/dist/styles/tokens/scheme-motion.css +102 -46
  344. package/dist/styles/tokens/scroll-tokens.css +123 -0
  345. package/dist/styles/tokens/{offsets-sizing.css → sizing.css} +88 -89
  346. package/dist/styles/tokens.css +9 -3
  347. package/dist/styles/transitions.css +7 -7
  348. package/dist/styles/typography/scale.css +153 -0
  349. package/dist/styles/typography/semantic.css +220 -0
  350. package/dist/styles/typography/utilities.css +174 -0
  351. package/dist/styles/typography.css +23 -507
  352. package/dist/styles/utilities/a11y-overrides.css +33 -4
  353. package/dist/styles/utilities/animate.css +27 -24
  354. package/dist/styles/utilities/base-misc.css +255 -0
  355. package/dist/styles/utilities/base.css +100 -138
  356. package/dist/styles/utilities/btn.css +21 -202
  357. package/dist/styles/utilities/metal.css +189 -0
  358. package/dist/styles/utilities.css +14 -7
  359. package/dist/styles/view-transition.css +4 -1
  360. package/dist/switch.js +1 -1
  361. package/dist/tabs.js +275 -191
  362. package/dist/timeline.js +2 -2
  363. package/dist/toast.js +1 -1
  364. package/dist/toggle-chip.js +3 -1
  365. package/dist/toggle-group.js +1 -1
  366. package/dist/tooltip.js +1 -1
  367. package/dist/typewriter.js +1 -1
  368. package/dist/{useAnimatedNumber-C5I3wWd8.js → useAnimatedNumber-BfUq2bUM.js} +1 -1
  369. package/dist/useCanvas2D-B8w_E3Rr.js +83 -0
  370. package/dist/useConfiguratorState-DNlOh6c8.js +161 -0
  371. package/dist/useDragMorph-DgxnsVJz.js +102 -0
  372. package/dist/{useGlobalDark-yhL4Wp-s.js → useGlobalDark-C28t0VWJ.js} +22 -3
  373. package/dist/useLiquidPress-kfb4KX79.js +39 -0
  374. package/dist/usePointerVelocityField-JbRd5CrM.js +137 -0
  375. package/dist/{useRAFLoop-Bxv0o6L5.js → useRAFLoop-UYa4zoiN.js} +1 -1
  376. package/dist/useSpring-C0jyvEJB.js +40 -0
  377. package/dist/useSpringMount-q1amq1SJ.js +71 -0
  378. package/dist/useSpringPress-BsqPr7FJ.js +34 -0
  379. package/dist/useSurfaceAxis-g0NloYEF.js +7 -0
  380. package/dist/{useTouchGate-Dg7MQI1G.js → useTouchGate-CBZTD4SD.js} +1 -1
  381. package/dist/vReveal-Czsb7zQC.js +10 -0
  382. package/dist/vSpecular-CQFmLNzA.js +68 -0
  383. package/dist/vendor-CKmzio-i.js +226 -0
  384. package/dist/watercolor-dot.js +12 -5
  385. package/package.json +193 -25
  386. package/src/styles/animations.css +40 -31
  387. package/src/styles/border-progress.css +109 -0
  388. package/src/styles/cards.css +76 -0
  389. package/src/styles/configurator.css +35 -0
  390. package/src/styles/critical-partition.mjs +140 -0
  391. package/src/styles/dock/density.css +64 -0
  392. package/src/styles/dock/layers.css +54 -30
  393. package/src/styles/dock/morph.css +124 -7
  394. package/src/styles/dock/overflow.css +31 -2
  395. package/src/styles/dock/rail-extend.css +168 -71
  396. package/src/styles/dock/section.css +59 -0
  397. package/src/styles/dock/shell.css +83 -16
  398. package/src/styles/dock-controls/icon-button.css +11 -1
  399. package/src/styles/dock-controls/tab-button.css +24 -83
  400. package/src/styles/dock-controls/triggers.css +7 -0
  401. package/src/styles/dock.css +38 -3
  402. package/src/styles/drawer.css +123 -35
  403. package/src/styles/feedback-tone.css +104 -0
  404. package/src/styles/glass/deep.css +44 -0
  405. package/src/styles/glass/ladder.css +154 -52
  406. package/src/styles/glass/material.css +78 -15
  407. package/src/styles/glass/reveal.css +136 -0
  408. package/src/styles/glass/rim.css +100 -0
  409. package/src/styles/glass/surface-axis.css +113 -0
  410. package/src/styles/glass/surfaces.css +189 -15
  411. package/src/styles/glass-refract.css +96 -44
  412. package/src/styles/glass-specular-track.css +7 -0
  413. package/src/styles/glass.css +8 -2
  414. package/src/styles/hover-popover.css +7 -6
  415. package/src/styles/icon-chip.css +211 -0
  416. package/src/styles/index.css +78 -4
  417. package/src/styles/instrument-chassis.css +107 -2
  418. package/src/styles/menu.css +127 -0
  419. package/src/styles/scroll-choreography.css +300 -0
  420. package/src/styles/segmented-tabs.css +184 -84
  421. package/src/styles/select.css +50 -0
  422. package/src/styles/theme/bridges.css +22 -1
  423. package/src/styles/theme/literals.css +11 -2
  424. package/src/styles/theme/radius.css +6 -1
  425. package/src/styles/tokens/color-radius.css +40 -13
  426. package/src/styles/tokens/dark-arm.css +200 -20
  427. package/src/styles/tokens/glass-deep.css +75 -0
  428. package/src/styles/tokens/glass-fx.css +333 -0
  429. package/src/styles/tokens/glass.css +95 -315
  430. package/src/styles/tokens/light-dark.css +64 -22
  431. package/src/styles/tokens/offsets.css +116 -0
  432. package/src/styles/tokens/on-glass-fg.css +39 -0
  433. package/src/styles/tokens/property-regs.css +130 -10
  434. package/src/styles/tokens/scale-paper.css +155 -84
  435. package/src/styles/tokens/scheme-motion.css +102 -46
  436. package/src/styles/tokens/scroll-tokens.css +123 -0
  437. package/src/styles/tokens/{offsets-sizing.css → sizing.css} +88 -89
  438. package/src/styles/tokens.css +9 -3
  439. package/src/styles/transitions.css +7 -7
  440. package/src/styles/typography/scale.css +153 -0
  441. package/src/styles/typography/semantic.css +220 -0
  442. package/src/styles/typography/utilities.css +174 -0
  443. package/src/styles/typography.css +23 -507
  444. package/src/styles/utilities/a11y-overrides.css +33 -4
  445. package/src/styles/utilities/animate.css +27 -24
  446. package/src/styles/utilities/base-misc.css +255 -0
  447. package/src/styles/utilities/base.css +100 -138
  448. package/src/styles/utilities/btn.css +21 -202
  449. package/src/styles/utilities/metal.css +189 -0
  450. package/src/styles/utilities.css +14 -7
  451. package/src/styles/view-transition.css +4 -1
  452. package/dist/CardAction-Cj2eycQ2.js +0 -157
  453. package/dist/DialogContent-Dl9WkAoS.js +0 -100
  454. package/dist/Notification-DdwNxIrI.js +0 -100
  455. package/dist/NumberFieldContent-CqaN-SvN.js +0 -145
  456. package/dist/PopoverContent-BYwt2-4x.js +0 -121
  457. package/dist/TabsList-Dttss653.js +0 -105
  458. package/dist/Toaster-D6q4HtXu.js +0 -263
  459. package/dist/button-ChXMfsud.js +0 -81
  460. package/dist/check-njhk-vfu.js +0 -7
  461. package/dist/chevron-down-DKkxb4VV.js +0 -7
  462. package/dist/chevron-right-CPXbqQQz.js +0 -7
  463. package/dist/chevron-up-n_24SqI-.js +0 -7
  464. package/dist/components/custom/underline/GlassUnderline.vue.d.ts +0 -84
  465. package/dist/components/custom/underline/index.d.ts +0 -2
  466. package/dist/components/custom/underline/types.d.ts +0 -56
  467. package/dist/components/ui/carousel/CarouselDots.vue.d.ts +0 -4
  468. package/dist/createLucideIcon-DydS2qgk.js +0 -43
  469. package/dist/minimize-2-BV31Ob_h.js +0 -38
  470. package/dist/search-BSGrf2Sk.js +0 -12
  471. package/dist/sheet-1fChZjtw.js +0 -214
  472. package/dist/underline.d.ts +0 -1
  473. package/dist/underline.js +0 -85
  474. package/dist/useCanvas2D-ClrQuZtp.js +0 -96
  475. package/dist/useConfiguratorState-DAoeHVue.js +0 -287
  476. package/dist/useSpecularTracking-Bo5su68i.js +0 -32
  477. package/dist/useSpringMount-CI2jOstM.js +0 -108
  478. package/dist/vReveal-CqaCz_mC.js +0 -44
  479. package/dist/x-BUwTKe50.js +0 -10
  480. /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-68dEXIAl.js} +0 -0
  481. /package/dist/{InstrumentChassis-UUJX0-mW.js → InstrumentChassis-Bx0F_q5g.js} +0 -0
  482. /package/dist/{Label-r3WzWrsj.js → Label-C2ejNWeC.js} +0 -0
  483. /package/dist/{ModalOverlay-DVLI2VRr.js → ModalOverlay-D1VrWyoi.js} +0 -0
  484. /package/dist/{PaperBackdrop-DIXTtVq6.js → PaperBackdrop-Vf3tlpvd.js} +0 -0
  485. /package/dist/{SelectGroup-aumMgWLs.js → SelectGroup-DwwjicPY.js} +0 -0
  486. /package/dist/{SelectSeparator-BQ_1Fcbp.js → SelectSeparator-DXswVdRz.js} +0 -0
  487. /package/dist/{Separator-0JE6LtNu.js → Separator-pKF0oA4M.js} +0 -0
  488. /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
  489. /package/dist/{badge-UILT_3pZ.js → badge-D9XWW4GT.js} +0 -0
  490. /package/dist/{color-CUYeFbgd.js → color-DweYl7pE.js} +0 -0
  491. /package/dist/{constants-CS75AWHG.js → constants-BPOqYJAm.js} +0 -0
  492. /package/dist/{createContext-BM46COQ-.js → createContext-CpBNTRMI.js} +0 -0
  493. /package/dist/{prng-D27-B3tK.js → prng-Za0Rmgag.js} +0 -0
  494. /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CUyHr5Uu.js} +0 -0
  495. /package/dist/{springPresets--YdWTHtm.js → springPresets-CFQGQfdl.js} +0 -0
  496. /package/dist/{useIntersectionPause-Cc-H9ees.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
  497. /package/dist/{useInterval-iHludrxk.js → useInterval-CvK1mL92.js} +0 -0
  498. /package/dist/{useKeyboardShortcuts-Be3w_Rwk.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
  499. /package/dist/{useLiquidFlex-BL0lLLN2.js → useLiquidFlex-mZPMiNXh.js} +0 -0
  500. /package/dist/{useResizeObserver-BhgdhOIj.js → useResizeObserver-Bpoi7tRE.js} +0 -0
  501. /package/dist/{useResolveTokenColor-Dvn2RZJW.js → useResolveTokenColor-vAylyR0x.js} +0 -0
  502. /package/dist/{useScrollProgress-Dlvx-L3v.js → useScrollProgress-D7bYU2RK.js} +0 -0
  503. /package/dist/{useSortable-muI29agz.js → useSortable-DHjtZSEd.js} +0 -0
  504. /package/dist/{useTextHighlight-DmRYkOBx.js → useTextHighlight-CWEi25hf.js} +0 -0
  505. /package/dist/{useTimer-Dzarvzuk.js → useTimer-BHJOKr35.js} +0 -0
  506. /package/dist/{useUserInvalidAria-B2h6jAM_.js → useUserInvalidAria-y5namzeE.js} +0 -0
  507. /package/dist/{useViewportReady-B40FK4Pa.js → useViewportReady-anbac3m6.js} +0 -0
@@ -0,0 +1,104 @@
1
+ /* feedback-tone.css — the ONE shared tinted-glass tone recipe (BA.W-FEEDBACK-TONE).
2
+
3
+ THE COLLAPSE: Toast, Notification, and Alert each carried an INDEPENDENT tone map
4
+ (the Toast variant map painted SOLID `bg-{success,warning,info,destructive}` opaque
5
+ token plates over a `glass-floating` base; the Notification type map painted
6
+ `bg-<tone>/90` near-opaque slabs; Alert alone was correct in SHAPE — glass-wash plate
7
+ + tone-on-rim — but HARDCODED its `border-<tone>/40` rim per variant). Three tone
8
+ maps, three calibration sites, and TWO of them painted a colored SLAB that occluded
9
+ the backdrop (the R8-12/R8-13 "not glassy at all" defect; the blur track survived but
10
+ was inert behind a 100%-opaque plate).
11
+
12
+ This file mints the tone register ONCE. Every feedback tone reads as COLORED GLASS:
13
+ a tinted-glass wash (the rung bg mixed a BOUNDED % toward the tone, the SAME
14
+ `color-mix(in oklab, <rung bg>, <tint> <strength>)` seam the W55 `--glass-tint-*`
15
+ legibility lift and the `--veil-bg` plate already run — ZERO new compositing path) +
16
+ a tone-keyed rim + a full-chroma glyph. The backdrop STILL shows through (α stays
17
+ translucent, the W2 π floor < ~0.92). The body ink stays `--foreground` /
18
+ `--card-foreground` for legibility (the Alert discipline — body never tone-tinted),
19
+ so the tone is ONE deliberate color event per surface (the AZ.W-SUFFUSE one-color-
20
+ event idiom), never a full-bleed fill.
21
+
22
+ THE ONE KNOB: `--feedback-tone-strength` tints all four tones at once (the bounded
23
+ mix %, the toast-glass §A band). The four tone hues map to the HOUSE tokens
24
+ `--success` / `--warning` / `--info` / `--destructive` (presets-in-consumers — NO new
25
+ colors). A consumer recalibrates the tone weight with ONE override.
26
+
27
+ THE RUNG: the register reads `--feedback-tone-rung` (default the floating-chrome rung
28
+ `--glass-bg-floating`, the Toast/Notification overlay register). Alert RE-POINTS it to
29
+ `--glass-bg-wash` on its own surface (a content panel rides wash, not floating — the
30
+ register difference is correct; only the tone SOURCE unifies, not the rung). The rung
31
+ reads `--glass-bg-*` DIRECTLY (the same tokens W-SURFACE-AXIS's glass arm routes), so
32
+ the tone tint rides ON the glass surface — a re-point, not a fork.
33
+
34
+ THE SUBSTITUTION TRAP (the recurring AX.W55 / dock-scale class): `--feedback-tone-rung`
35
+ resolves the `--glass-bg-floating` token, which BAKES `var(--glass-level)` at its
36
+ `:root` declaration (level=1). A descendant `--glass-level: 0` does NOT re-resolve the
37
+ baked rung — but that is the CORRECT register here: a feedback surface IS translucent
38
+ glass by design; the `opaque`/level-0 escape is W-SURFACE-AXIS's `[data-surface]`
39
+ concern, not a tone-register knob. The tone register composes the tint AT THE ELEMENT
40
+ off the resolved rung, so the `color-mix` re-resolves whenever `--tone`/`--feedback-
41
+ tone-strength`/the rung change (the W55 element-level tint discipline). */
42
+ @layer components {
43
+ :root {
44
+ /* The bounded mix % — the tone wash strength. 18% reads as colored GLASS
45
+ (the backdrop shows through, the silhouette is unmistakably tinted) without
46
+ tipping toward a slab; the toast-glass §A band is ≈12–22%. ONE knob retunes
47
+ all four tones. */
48
+ --feedback-tone-strength: 18%;
49
+ /* The rung the tint mixes over — the floating-chrome register (Toast /
50
+ Notification). Alert re-points it to the wash rung on its own surface. */
51
+ --feedback-tone-rung: var(--glass-bg-floating);
52
+ /* The rim weight — a tone-keyed border, a thin tinted rim (not a loud edge). */
53
+ --feedback-tone-border-strength: 40%;
54
+ }
55
+
56
+ /* ── The parametric register ──────────────────────────────────────────────────
57
+ A surface declares `--tone` (one of the four house tokens) + composes
58
+ `.feedback-tone`; the tinted-glass wash + the tone-keyed rim resolve off the ONE
59
+ recipe. The glyph carries the FULL-chroma tone (`[&>svg]` via the consumer's own
60
+ class, or the `.feedback-tone-glyph` helper below). The `default` (un-toned)
61
+ surface simply omits `.feedback-tone` — the bare glass rung paints.
62
+
63
+ `--tone` has NO `:root` default ON PURPOSE: a `.feedback-tone` surface with no
64
+ `--tone` set would mix the rung toward `initial` (transparent) — a no-op wash, the
65
+ same as the bare rung; this is the safe degenerate, not a paint bug. Every real
66
+ consumer sets `--tone` via its `.feedback-tone-<name>` register. */
67
+ .feedback-tone {
68
+ background: color-mix(
69
+ in oklab,
70
+ var(--feedback-tone-rung),
71
+ var(--tone) var(--feedback-tone-strength)
72
+ );
73
+ border-color: color-mix(
74
+ in oklab,
75
+ transparent,
76
+ var(--tone) var(--feedback-tone-border-strength)
77
+ );
78
+ }
79
+
80
+ /* The four house tone registers — each binds `--tone` to its house token. A surface
81
+ maps its variant/type onto the matching class (Toast `variant` /
82
+ Notification `type` / Alert `variant`); the `error` notification type maps to the
83
+ destructive tone (the three-maps-into-one collapse — `error` IS destructive). */
84
+ .feedback-tone-success {
85
+ --tone: var(--success);
86
+ }
87
+ .feedback-tone-warning {
88
+ --tone: var(--warning);
89
+ }
90
+ .feedback-tone-info {
91
+ --tone: var(--info);
92
+ }
93
+ .feedback-tone-destructive {
94
+ --tone: var(--destructive);
95
+ }
96
+
97
+ /* The glyph helper — the leading status glyph carries the FULL-chroma tone (the one
98
+ color event's saturated note over the tinted wash). A consumer composes it on its
99
+ icon, or reads `var(--tone)` directly in an arbitrary `[&>svg]:text-(--tone)`
100
+ utility. */
101
+ .feedback-tone-glyph {
102
+ color: var(--tone);
103
+ }
104
+ }
@@ -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
 
@@ -141,6 +153,13 @@
141
153
  .glass-card {
142
154
  --glass-tint-source: var(--glass-tint-ink);
143
155
  --glass-tint-strength: var(--glass-tint-strength-aa);
156
+ /* BA.W-DARK-MATERIAL scope 7 — the --muted-foreground lift moves HERE, into the
157
+ declared/sampled BRIGHT condition. The muted L40 tier cannot clear 4.5:1 on a
158
+ translucent FULL-AA-darkened plate (darkening moves the plate toward muted's
159
+ own luminance), so it lifts to the full ink ONLY where the plate actually
160
+ darkens — NOT on the calm-light unconditional floor (where it stays the muted
161
+ register, the slides caption read). */
162
+ --muted-foreground: var(--foreground);
144
163
  }
145
164
  }
146
165
 
@@ -182,19 +201,62 @@
182
201
  TOWARD muted's own luminance), so the low-contrast muted register resolves to
183
202
  the legible dark ink (clears ~10:1) — a token re-point on the same inheriting
184
203
  axis as the tint. */
185
- :where(
186
- .glass-floating,
187
- .glass-overlay,
188
- .glass-card,
189
- .glass-resting,
190
- .glass-quiet,
191
- .glass-wash
192
- ) {
204
+ /* The OVERLAY band (.glass-floating/.glass-overlay — Dialog/Sheet/Popover/DropdownMenu/
205
+ HoverCard/Command/Tooltip/Toast/Select-content) keeps the FULL unconditional AA darken
206
+ + the muted lift: it floats over WHATEVER the consumer painted (frequently a light/
207
+ near-white app surface — the canonical G2 case), so darkening toward the warm-ink is
208
+ the correct DEFAULT over an UNKNOWN surface. Over a DARK page this becomes the
209
+ luminous-dark LIFT (the dark-arm re-tunes --glass-tint-strength-aa to 12% — the plate
210
+ lifts off the deep page). A dark-substrate consumer who wants the pristine plate sets
211
+ `--glass-tint-strength: 0%`. */
212
+ :where(.glass-floating, .glass-overlay) {
193
213
  --glass-tint-source: var(--glass-tint-ink);
194
- --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);
195
221
  --muted-foreground: var(--foreground);
196
222
  }
197
223
 
224
+ /* BA.W-DARK-MATERIAL scope 7 — the plain CONTENT tiers self-engage the SUB-PERCEPTUAL
225
+ FLOOR unconditionally, NOT the full AA darken (the R9-1 slides gray-slab fix). Over a
226
+ calm LIGHT page the floor (--glass-tint-strength-floor: 4%) is a silhouette whisper —
227
+ the translucent cream card stays warm (L ≈ 0.94), no gray slab. Over a DARK page the
228
+ floor re-resolves to the luminous-dark lift (12% in the dark arm — the plate lifts off
229
+ the deep page, the desired register). The FULL AA darken engages on these tiers ONLY
230
+ under the declared/sampled BRIGHT signal (the @container --glass-backdrop:light bucket
231
+ above — where the muted lift also lives now). NO unconditional --muted-foreground lift
232
+ here: on the calm-light floor the caption keeps the muted register (the slides read).
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). */
253
+ :where(.glass-card, .glass-resting, .glass-quiet, .glass-wash) {
254
+ --glass-tint-source: var(--glass-tint-ink);
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);
258
+ }
259
+
198
260
  /* AX.W55 — the `contrast-color()` foreground-ink flip (Chrome 147+/Safari 26+).
199
261
  A PROGRESSIVE-ENHANCEMENT layer, NEVER the load-bearing floor (Open-Q #5
200
262
  ratified): the declarative bucket above already carries AA on ALL engines (it
@@ -207,6 +269,20 @@
207
269
  white, illegible on the still-light translucent plate). The bucket is the floor;
208
270
  this is the native refinement. Scoped to the bright bucket. */
209
271
  @supports (color: contrast-color(white)) {
272
+ /* The bright-bucket ink flip — the content tiers + overlay band over a DECLARED/
273
+ sampled bright backdrop. BA.W-DARK-MATERIAL scope 6 — the SYSTEMIC contrast-color()
274
+ selection-inversion fix (approach A, lockstep-lift). At HEAD this block lifted only
275
+ --muted-foreground (and the surface `color`) to contrast-color(--card) (white over
276
+ a light plate, L100), but the ACTIVE control register (a SegmentedTabs active tab,
277
+ the curve-picker selected label) reads var(--foreground) DIRECTLY (L90, un-lifted) —
278
+ a control sets its OWN `color: var(--foreground)` which wins over the inherited
279
+ surface `color`, so the inactive (muted→white) read BRIGHTER than the active
280
+ (--foreground), inverting selection. The fix lifts --foreground ITSELF in lockstep
281
+ with --muted-foreground: now an active register reading --foreground resolves the
282
+ SAME anchored contrast-color ink as the lifted inactive, so selected ≥ unselected
283
+ everywhere (the inversion gone for ANY --muted-foreground/--foreground selection
284
+ pairing inside a glass card — the SYSTEMIC library-seam fix, not a curve-picker
285
+ one-off). Progressive enhancement only — the declarative darken is the AA floor. */
210
286
  @container style(--glass-backdrop: light) {
211
287
  .glass-material,
212
288
  .glass-wash,
@@ -216,25 +292,26 @@
216
292
  .glass-overlay,
217
293
  .glass-card {
218
294
  color: contrast-color(var(--card));
295
+ --foreground: contrast-color(var(--card));
296
+ --muted-foreground: contrast-color(var(--card));
219
297
  }
220
298
  }
221
- /* AY.W-A11Y-PERF O-1 / AZ.W-ADAPTIVE-AUTO Arm 1 — the same contrast-color
222
- refinement for the SELF-ENGAGED band + content tiers (the @container block
223
- above queries an ancestor; these surfaces engage their own tint
224
- unconditionally, so their ink-flip companion mirrors that). The muted
225
- register flips to the same anchored dark ink. Progressive enhancement only
226
- — the declarative darken above is the AA floor on all engines. */
227
- :where(
228
- .glass-floating,
229
- .glass-overlay,
230
- .glass-card,
231
- .glass-resting,
232
- .glass-quiet,
233
- .glass-wash
234
- ) {
299
+ /* The OVERLAY band self-engages the darken UNCONDITIONALLY (it floats over an
300
+ UNKNOWN consumer surface), so its ink-flip companion mirrors that — UNCONDITIONAL.
301
+ --foreground lifts in lockstep with --muted-foreground (the scope-6 lockstep). */
302
+ :where(.glass-floating, .glass-overlay) {
235
303
  color: contrast-color(var(--card));
304
+ --foreground: contrast-color(var(--card));
236
305
  --muted-foreground: contrast-color(var(--card));
237
306
  }
307
+ /* BA.W-DARK-MATERIAL scope 7 — the content-tier ink flip is GATED on the bright
308
+ signal (it moved INTO the @container bucket above), NOT unconditional. Over a calm
309
+ LIGHT page the content tiers only carry the 4% silhouette floor (still a warm cream
310
+ plate), so flipping the ink to the contrast-color DARK ink there is correct only
311
+ where the plate ACTUALLY darkens to the bright-bucket AA — the unconditional flip
312
+ would force a white-on-cream / dark-on-darkened mismatch on the calm card. The
313
+ content tiers therefore take NO unconditional contrast-color flip; their flip lives
314
+ in the @container bucket with the rest of the bright-condition darken. */
238
315
  }
239
316
 
240
317
  /* ── The opaque escape (AX.W54) ───────────────────
@@ -248,6 +325,14 @@
248
325
  a consumer that wants a flat surface). */
249
326
  .glass-opaque {
250
327
  --glass-level: 0;
328
+ /* BA.W-DARK-MATERIAL scope 7 — the opaque escape suppresses the adaptive TINT axis
329
+ too (not just the opacity/blur level). A solid opaque plate has no translucent
330
+ backdrop to darken-over, so the self-engage tint is meaningless on it; zeroing the
331
+ strength keeps the opaque escape bucket-INVARIANT (the unset floor and the bright
332
+ bucket resolve the SAME solid plate — the byte-identity canary). Without this, the
333
+ scope-7 unconditional content-tier floor (4%) tinted even the solid plate, breaking
334
+ the opt-out's "flat surface" contract. */
335
+ --glass-tint-strength: 0%;
251
336
  }
252
337
 
253
338
  /* ── Content-aware under-shadow modifier (AV.W15 M4) ──────────────
@@ -286,7 +371,16 @@
286
371
  var(--glass-shadow-floating);
287
372
  }
288
373
 
289
- /* 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. */
290
384
  .glass-wash::after,
291
385
  .glass-quiet::after,
292
386
  .glass-resting::after,
@@ -296,36 +390,44 @@
296
390
  position: absolute;
297
391
  inset: 0;
298
392
  border-radius: inherit;
299
- 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);
300
398
  background-repeat: repeat;
301
399
  background-size: var(--paper-texture-size);
302
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;
303
405
  pointer-events: none;
304
406
  mix-blend-mode: overlay;
305
407
  }
306
408
 
307
- /* (b) The unified rim — `--glass-edge-light` full-perimeter inset ring on
308
- EVERY material surface (AW.W22). Previously the rim was wired only into
309
- the floating/overlay tiers' box-shadow stack; promoting it to the material
310
- group makes wash/quiet/resting/card/dock-control all carry the same
311
- silhouette catch-light from ONE token. The rim is its OWN `box-shadow`
312
- declaration on the material group so it composes uniformly without
313
- perturbing each tier's elevation recipe (the floating/overlay tiers drop
314
- their now-redundant inline `--glass-edge-light` layer below). The alpha is
315
- deliberately low so the rim never eats AA legibility over a busy
316
- backdrop. */
317
- .glass-material,
318
- .glass-wash,
319
- .glass-quiet,
320
- .glass-resting,
321
- .glass-floating,
322
- .glass-overlay,
323
- .glass-card,
324
- .glass-specular-track,
325
- .dock-icon-button {
326
- --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
+ }
327
423
  }
328
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
+
329
431
  .dark .glass-wash::after,
330
432
  .dark .glass-quiet::after,
331
433
  .dark .glass-resting::after,
@@ -105,23 +105,72 @@
105
105
  registered-`@property` var() nested in an hsl() alpha computes to 0 in
106
106
  Chromium — the cross-engine-safe path); the per-stop alphas are literals so
107
107
  even the lifted hover/active states read as a lens, not a flash. */
108
- background: radial-gradient(
109
- circle var(--glass-specular-size, 36%) at var(--specular-x, 50%) var(--specular-y, 50%),
110
- hsl(40 35% 92% / 0.5) 0%,
111
- hsl(40 35% 92% / 0) 70%,
112
- transparent 100%
108
+ /* BB.W-LENSING (scope 3) — the motion-reactive EDGE glint UNIFIED with the
109
+ centered catch-light disc on ONE `::before`. TWO background layers compose:
110
+ (TOP) the angle-keyed EDGE-anchored conic sweep — a warm-cream arc that
111
+ brightens the RIM where the pointer's `--specular-angle` grazes (the
112
+ glass-THICKNESS read iOS-27 fuses with the catch-light); (BOTTOM) the
113
+ existing pointer-position centered disc. BOTH ride the SAME `--specular-
114
+ intensity` cohort (the `opacity` below) + `plus-lighter` blend + warm-cream
115
+ core `hsl(40 35% 92%)` — NEVER a second color/blend fork. The conic is masked
116
+ to the rim band only (the `--glass-edge-glint-band` radial mask, scope 3),
117
+ so the glint is a bounded RIM ring, NOT a whole-plate wash (the AX.W52 D19
118
+ bounded-gleam discipline). The `--specular-angle` floor `0deg` sits the glint
119
+ at the top edge when unwired (static rest — no ambient drift, no blowout). */
120
+ /* BB.W-GLASS-ACCENT — the catch-light CORE COLOR composes the per-instance
121
+ chromatic accent. The warm-cream `hsl(40 35% 92%)` core resolves through
122
+ the ONE `--glass-specular-core` var, OKLab-mixed toward `var(--glass-
123
+ accent)` at `var(--glass-accent-strength)`. This tints the CORE only — it
124
+ is the COLOR axis; W-LENSING owns the GEOMETRY (the conic angle-keyed
125
+ edge-glint + the radial disc + the masks + the `plus-lighter` blend, all
126
+ BELOW, untouched). Tinting the ONE core tints BOTH the centered disc AND
127
+ the rim glint (they share the core), so the data hue reads at the glint
128
+ where the pointer grazes — the data-keyed colored catch-light. At
129
+ `--glass-accent-strength: 0%` + `--glass-accent: transparent` (the
130
+ `@property` defaults) the mix === `hsl(40 35% 92%)` byte-identical (the W2
131
+ warm-cream floor). Each gradient stop reproduces its original alpha via
132
+ `color-mix(in srgb, <core> N%, transparent)` (=== the prior `<core> / 0.NN`),
133
+ so the geometry + falloff is byte-identical at rest. */
134
+ --glass-specular-core: color-mix(
135
+ in oklab,
136
+ hsl(40 35% 92%),
137
+ var(--glass-accent) var(--glass-accent-strength)
113
138
  );
139
+ background:
140
+ conic-gradient(
141
+ from var(--specular-angle, 0deg) at 50% 50%,
142
+ transparent 0deg,
143
+ color-mix(in srgb, var(--glass-specular-core) 55%, transparent) 18deg,
144
+ transparent 60deg,
145
+ transparent 360deg
146
+ ),
147
+ radial-gradient(
148
+ circle var(--glass-specular-size, 36%) at var(--specular-x, 50%) var(--specular-y, 50%),
149
+ color-mix(in srgb, var(--glass-specular-core) 50%, transparent) 0%,
150
+ transparent 70%,
151
+ transparent 100%
152
+ );
114
153
  opacity: var(--specular-intensity, 0);
115
- /* Clip the gleam to ITS OWN radius (not the whole plate) so it stays a
116
- bounded glint. `mask-image` Baseline 2023-12-07; a non-supporting engine
117
- ignores it and the `inset: 0` + radius-inherit + the in-paint falloff
118
- already bound the gleam to the surface. */
119
- mask-image: radial-gradient(
120
- circle var(--glass-specular-size, 36%) at var(--specular-x, 50%) var(--specular-y, 50%),
121
- black 0%,
122
- black 60%,
123
- transparent 100%
124
- );
154
+ /* Per-layer masks (the `,`-separated list pairs with the two backgrounds in
155
+ order): the EDGE conic is masked to the RIM BAND ONLY — transparent across
156
+ the interior, opaque in the outer `--glass-edge-glint-band` (default 22%) — so
157
+ the angle-keyed glint reads as a THICKNESS rim, not a center wash; the centered
158
+ disc keeps its own-radius clip (AX.W52 D19). `mask-image` Baseline 2023-12-07;
159
+ a non-supporting engine ignores it and the `inset: 0` + in-paint falloff still
160
+ bound the gleam. */
161
+ mask-image:
162
+ radial-gradient(
163
+ circle closest-side at 50% 50%,
164
+ transparent calc(100% - var(--glass-edge-glint-band, 22%)),
165
+ black calc(100% - calc(var(--glass-edge-glint-band, 22%) * 0.5)),
166
+ black 100%
167
+ ),
168
+ radial-gradient(
169
+ circle var(--glass-specular-size, 36%) at var(--specular-x, 50%) var(--specular-y, 50%),
170
+ black 0%,
171
+ black 60%,
172
+ transparent 100%
173
+ );
125
174
  /* AX.W52 D19 — `plus-lighter` (additive but HDR-clamped, Safari 16.4+) over
126
175
  the prior `screen` (a non-linear lightener that lifted the whole tile
127
176
  toward white — the muddy-card defect). A non-supporting engine degrades to
@@ -235,4 +284,18 @@
235
284
  --specular-intensity: var(--glass-specular-intensity-active, 0.16);
236
285
  }
237
286
 
287
+ /* BB.W-LENSING (scope 2) — the `:active` LENS-SWELL is RETIRED (DDR-LENS-BAKE,
288
+ glass-refract.css header). The swell drove the displacement `scale` by mutating
289
+ the `--glass-refract` axis on the `--glass-btn-press-t` press drive (28 rest → 44
290
+ pressed). That depended on the var()-spliced head/`scale`/tail filter — which never
291
+ PARSED as a `backdrop-filter` (three tokens: `url("…") <n> url("…")`), so the lens
292
+ rendered `none` and the swell animated a value that reached NO filter. A CSS url()
293
+ string token cannot carry a substituted `var()` (the engine does not re-tokenise
294
+ inside a string), so a dynamic per-instance `scale` is structurally impossible in a
295
+ single self-contained data-URI — and the single token is mandatory for both parse
296
+ validity and bundler url()-rewrite safety. The `scale` is now BAKED at the §10
297
+ default (28); the resting lens read is PRESERVED (and now actually renders), the
298
+ press-depth animation is the deliberate tradeoff. The press squish + gleam lift on
299
+ the SAME `--glass-btn-press-t` drive (material gleam, above) carry the press read. */
300
+
238
301
  }