@mkbabb/glass-ui 4.0.0 → 4.1.0

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 (609) hide show
  1. package/README.md +3 -1
  2. package/dist/CardAction-8whJrLWt.js +268 -0
  3. package/dist/{CommandShortcut-DdtWXxOK.js → CommandShortcut-D3yxgHNn.js} +25 -14
  4. package/dist/ConfiguratorRow-CaP7U3ZA.js +143 -0
  5. package/dist/ContextMenuContent-B3ZsheLV.js +90 -0
  6. package/dist/{ContextMenuSubContent-B0Vs6atR.js → ContextMenuSubContent-DDRID3qC.js} +28 -33
  7. package/dist/{DataTable-C464Zbqd.js → DataTable-Bc9kUtu_.js} +4 -4
  8. package/dist/{DialogContent-DDE6pQBU.js → DialogContent-6JtTB5x2.js} +11 -8
  9. package/dist/DialogFooter-9phqcRIS.js +80 -0
  10. package/dist/DialogScrollContent-TTuovQst.js +93 -0
  11. package/dist/{FadingScroll-DwNnvKMs.js → FadingScroll-DLRbH5Xr.js} +1 -1
  12. package/dist/HoverCardContent-Bel1gdLZ.js +88 -0
  13. package/dist/{HoverPopover-Dpzwvc4t.js → HoverPopover-BcIxvyqZ.js} +2 -2
  14. package/dist/{IconChip-BDw1j5mu.js → IconChip-DhbdGdFQ.js} +2 -1
  15. package/dist/{IconTooltip-DSjasZIt.js → IconTooltip-B0zimd2H.js} +1 -1
  16. package/dist/Input-Cg9DF62r.js +57 -0
  17. package/dist/{MetricBadge-BpC0R_Ec.js → MetricBadge-RHdBP72w.js} +1 -1
  18. package/dist/Notification-CphK7AAm.js +43 -0
  19. package/dist/NumberFieldContent-D8cXeyO4.js +140 -0
  20. package/dist/PagerDots-Cjx96la-.js +98 -0
  21. package/dist/{PopoverContent-BTorlp--.js → PopoverContent-DL7E6vJP.js} +4 -4
  22. package/dist/{Progress-hAT4gqGH.js → Progress-CnqB7gLm.js} +4 -4
  23. package/dist/{ScrollingText-CUVFTWk2.js → ScrollingText-CTZbA_cG.js} +2 -2
  24. package/dist/{SelectScrollDownButton-C1jb3b3K.js → SelectScrollDownButton-DAKCBEdW.js} +65 -61
  25. package/dist/{SelectSeparator-DK2y1Bun.js → SelectSeparator-C2UGOkXF.js} +1 -1
  26. package/dist/Separator-DQcwC2TR.js +44 -0
  27. package/dist/Switch-B8RscmRu.js +49 -0
  28. package/dist/Toaster-D9qIHjBI.js +274 -0
  29. package/dist/ToggleGroupItem-BLtr3TJq.js +170 -0
  30. package/dist/TooltipProvider-BJ_Y5EGX.js +109 -0
  31. package/dist/animated-digit.js +2 -2
  32. package/dist/api/index.d.ts +21 -33
  33. package/dist/api/types-extra.d.ts +37 -0
  34. package/dist/api.js +1 -1
  35. package/dist/aurora.js +1231 -260
  36. package/dist/badge.js +1 -1
  37. package/dist/border-progress.d.ts +1 -0
  38. package/dist/border-progress.js +98 -0
  39. package/dist/button-5dY1Dvhd.js +125 -0
  40. package/dist/button.js +1 -1
  41. package/dist/canvas.js +2 -3
  42. package/dist/card.js +2 -2
  43. package/dist/carousel.js +93 -110
  44. package/dist/collapsible.js +1 -1
  45. package/dist/color-Cs0-oxYL.js +116 -0
  46. package/dist/color.js +2 -2
  47. package/dist/command.js +1 -1
  48. package/dist/compile-nZ1xVYTp.js +19 -0
  49. package/dist/completion-seal.d.ts +1 -0
  50. package/dist/completion-seal.js +89 -0
  51. package/dist/components/custom/aurora/Aurora.vue.d.ts +10 -5
  52. package/dist/components/custom/aurora/composables/atoms-fields.d.ts +39 -0
  53. package/dist/components/custom/aurora/composables/auroraFallbackGround.d.ts +108 -0
  54. package/dist/components/custom/aurora/composables/color.d.ts +13 -0
  55. package/dist/components/custom/aurora/composables/frameLoop.d.ts +9 -0
  56. package/dist/components/custom/aurora/composables/runtime.d.ts +31 -0
  57. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +5 -1
  58. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +60 -0
  59. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +37 -0
  60. package/dist/components/custom/aurora/constants/budget.d.ts +21 -0
  61. package/dist/components/custom/aurora/constants/presets.d.ts +20 -2
  62. package/dist/components/custom/aurora/constants/renderMode.d.ts +77 -18
  63. package/dist/components/custom/aurora/constants/shaders/aurora-mediums.wgsl.d.ts +1 -0
  64. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -0
  65. package/dist/components/custom/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -0
  66. package/dist/components/custom/aurora/constants/shaders/procedural-color.wgsl.d.ts +4 -0
  67. package/dist/components/custom/aurora/index.d.ts +2 -1
  68. package/dist/components/custom/border-progress/BorderProgress.vue.d.ts +46 -0
  69. package/dist/components/custom/border-progress/composables/spectrum-walk.d.ts +25 -0
  70. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +18 -0
  71. package/dist/components/custom/border-progress/constants.d.ts +59 -0
  72. package/dist/components/custom/border-progress/index.d.ts +4 -0
  73. package/dist/components/custom/completion-seal/CompletionSeal.vue.d.ts +21 -0
  74. package/dist/components/custom/completion-seal/composables/useCompletionSeal.d.ts +37 -0
  75. package/dist/components/custom/completion-seal/constants.d.ts +46 -0
  76. package/dist/components/custom/completion-seal/index.d.ts +4 -0
  77. package/dist/components/custom/concentric/Concentric.vue.d.ts +39 -0
  78. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +18 -0
  79. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +22 -0
  80. package/dist/components/custom/concentric/composables/ringField.d.ts +85 -0
  81. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +14 -0
  82. package/dist/components/custom/concentric/composables/useConcentric.d.ts +35 -0
  83. package/dist/components/custom/concentric/constants.d.ts +67 -0
  84. package/dist/components/custom/concentric/index.d.ts +5 -0
  85. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +4 -0
  86. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -0
  87. package/dist/components/custom/confirm-dialog/ConfirmDialog.vue.d.ts +3 -3
  88. package/dist/components/custom/constellation/Constellation.vue.d.ts +5 -4
  89. package/dist/components/custom/constellation/composables/constellationGLSetup.d.ts +10 -0
  90. package/dist/components/custom/constellation/composables/constellationWGPUSetup.d.ts +19 -0
  91. package/dist/components/custom/constellation/composables/uniformBridgeWGPU.d.ts +66 -0
  92. package/dist/components/custom/constellation/composables/useConstellation.d.ts +3 -10
  93. package/dist/components/custom/constellation/constants.d.ts +33 -0
  94. package/dist/components/custom/constellation/constellationField.d.ts +31 -1
  95. package/dist/components/custom/constellation/constellationInteraction.d.ts +23 -14
  96. package/dist/components/custom/constellation/constellationRender.d.ts +25 -0
  97. package/dist/components/custom/constellation/constellationTypes.d.ts +38 -0
  98. package/dist/components/custom/constellation/constellationWell.d.ts +15 -0
  99. package/dist/components/custom/constellation/index.d.ts +5 -5
  100. package/dist/components/custom/constellation/shaders/constellation-lines.glsl.d.ts +2 -0
  101. package/dist/components/custom/constellation/shaders/constellation-lines.wgsl.d.ts +1 -0
  102. package/dist/components/custom/constellation/shaders/constellation-points.glsl.d.ts +2 -0
  103. package/dist/components/custom/constellation/shaders/constellation-points.wgsl.d.ts +1 -0
  104. package/dist/components/custom/deck/DeckPager.vue.d.ts +29 -0
  105. package/dist/components/custom/deck/composables/useDeck.d.ts +27 -0
  106. package/dist/components/custom/deck/composables/useDeckKeyboard.d.ts +25 -0
  107. package/dist/components/custom/deck/composables/useDeckSpring.d.ts +22 -0
  108. package/dist/components/custom/deck/constants.d.ts +14 -0
  109. package/dist/components/custom/deck/index.d.ts +8 -0
  110. package/dist/components/custom/dock/DockIconButton.vue.d.ts +25 -4
  111. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +10 -2
  112. package/dist/components/custom/dock/DockStack.vue.d.ts +65 -0
  113. package/dist/components/custom/dock/GlassDock.vue.d.ts +4 -2
  114. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +155 -0
  115. package/dist/components/custom/dock/composables/index.d.ts +2 -0
  116. package/dist/components/custom/dock/composables/useDockSearch.d.ts +85 -0
  117. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +11 -0
  118. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -0
  119. package/dist/components/custom/dock/constants.d.ts +18 -14
  120. package/dist/components/custom/dock/index.d.ts +5 -2
  121. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +42 -0
  122. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +83 -0
  123. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +39 -0
  124. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +35 -0
  125. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +31 -0
  126. package/dist/components/custom/dot-flow-field/constants.d.ts +69 -0
  127. package/dist/components/custom/dot-flow-field/index.d.ts +5 -0
  128. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -0
  129. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +4 -0
  130. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -0
  131. package/dist/components/custom/dot-matrix/DotMatrix.vue.d.ts +43 -0
  132. package/dist/components/custom/dot-matrix/composables/dotMatrixField.d.ts +89 -0
  133. package/dist/components/custom/dot-matrix/composables/uniformBridgeWGPU.d.ts +52 -0
  134. package/dist/components/custom/dot-matrix/composables/useDotMatrix.d.ts +34 -0
  135. package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +27 -0
  136. package/dist/components/custom/dot-matrix/constants.d.ts +58 -0
  137. package/dist/components/custom/dot-matrix/index.d.ts +5 -0
  138. package/dist/components/custom/dot-matrix/shaders/dot-matrix.glsl.d.ts +4 -0
  139. package/dist/components/custom/dot-matrix/shaders/dot-matrix.wgsl.d.ts +1 -0
  140. package/dist/components/custom/easing/EasingConfigurator.vue.d.ts +33 -0
  141. package/dist/components/custom/easing/EasingPicker.vue.d.ts +49 -0
  142. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +80 -0
  143. package/dist/components/custom/easing/constants.d.ts +28 -0
  144. package/dist/components/custom/easing/index.d.ts +3 -0
  145. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +11 -0
  146. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +43 -40
  147. package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +15 -0
  148. package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +20 -0
  149. package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +41 -0
  150. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +42 -0
  151. package/dist/components/custom/fourier-field/constants.d.ts +64 -0
  152. package/dist/components/custom/fourier-field/index.d.ts +23 -18
  153. package/dist/components/custom/fourier-field/shaders/fourier-field.compute.wgsl.d.ts +1 -0
  154. package/dist/components/custom/fourier-field/shaders/fourier-field.glsl.d.ts +4 -0
  155. package/dist/components/custom/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -0
  156. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +1 -1
  157. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +13 -3
  158. package/dist/components/custom/goo-blob/composables/uniformBridgeWGPU.d.ts +24 -0
  159. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +18 -11
  160. package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +23 -0
  161. package/dist/components/custom/goo-blob/constants.d.ts +1 -1
  162. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  163. package/dist/components/custom/goo-blob/shaders/metaball-noise.wgsl.d.ts +1 -0
  164. package/dist/components/custom/goo-blob/shaders/metaball-palette.wgsl.d.ts +1 -0
  165. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -1
  166. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -0
  167. package/dist/components/custom/goo-blob/types.d.ts +36 -0
  168. package/dist/components/custom/goo-dot-matrix/GooDotMatrix.vue.d.ts +49 -0
  169. package/dist/components/custom/goo-dot-matrix/composables/gooDotLattice.d.ts +24 -0
  170. package/dist/components/custom/goo-dot-matrix/composables/gooDotSetup.d.ts +50 -0
  171. package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +35 -0
  172. package/dist/components/custom/goo-dot-matrix/composables/useGooDotMatrix.d.ts +31 -0
  173. package/dist/components/custom/goo-dot-matrix/constants.d.ts +76 -0
  174. package/dist/components/custom/goo-dot-matrix/index.d.ts +5 -0
  175. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.frag.d.ts +11 -0
  176. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +3 -0
  177. package/dist/components/custom/handmark/HandMark.vue.d.ts +1 -1
  178. package/dist/components/custom/icon-chip/types.d.ts +11 -1
  179. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +3 -1
  180. package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +21 -2
  181. package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +15 -0
  182. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
  183. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +9 -0
  184. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  185. package/dist/components/custom/pager-dots/pagerWindow.d.ts +9 -0
  186. package/dist/components/custom/paper-grid/PaperGrid.vue.d.ts +42 -0
  187. package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +90 -0
  188. package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +16 -0
  189. package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +19 -0
  190. package/dist/components/custom/paper-grid/composables/uniformBridgeWGPU.d.ts +16 -0
  191. package/dist/components/custom/paper-grid/composables/usePaperGrid.d.ts +31 -0
  192. package/dist/components/custom/paper-grid/constants.d.ts +57 -0
  193. package/dist/components/custom/paper-grid/index.d.ts +5 -0
  194. package/dist/components/custom/paper-grid/shaders/paper-grid.glsl.d.ts +4 -0
  195. package/dist/components/custom/paper-grid/shaders/paper-grid.wgsl.d.ts +1 -0
  196. package/dist/components/custom/search/FuzzySearch.vue.d.ts +8 -2
  197. package/dist/components/custom/search/SearchBar.vue.d.ts +8 -0
  198. package/dist/components/custom/search/index.d.ts +2 -0
  199. package/dist/components/custom/search/searchVariants.d.ts +19 -0
  200. package/dist/components/custom/selectable-chip/SelectableChip.vue.d.ts +50 -0
  201. package/dist/components/custom/selectable-chip/index.d.ts +2 -0
  202. package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +23 -0
  203. package/dist/components/custom/spa-view/SpaView.vue.d.ts +50 -0
  204. package/dist/components/custom/spa-view/index.d.ts +2 -0
  205. package/dist/components/custom/split-chars/SplitChars.vue.d.ts +39 -0
  206. package/dist/components/custom/split-chars/index.d.ts +1 -0
  207. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +12 -0
  208. package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +42 -0
  209. package/dist/components/custom/tabs/constants.d.ts +20 -2
  210. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +30 -17
  211. package/dist/components/custom/watercolor-dot/useWatercolorBlob.d.ts +10 -5
  212. package/dist/components/ui/_shared/index.d.ts +2 -0
  213. package/dist/components/ui/_shared/menuItemVariants.d.ts +1 -1
  214. package/dist/components/ui/_shared/useControlSize.d.ts +46 -0
  215. package/dist/components/ui/badge/index.d.ts +1 -1
  216. package/dist/components/ui/button/Button.vue.d.ts +5 -2
  217. package/dist/components/ui/button/index.d.ts +2 -2
  218. package/dist/components/ui/card/Card.vue.d.ts +79 -4
  219. package/dist/components/ui/card/CardHeader.vue.d.ts +42 -16
  220. package/dist/components/ui/card/ScrollCard.vue.d.ts +33 -0
  221. package/dist/components/ui/card/ScrollCardHeader.vue.d.ts +17 -0
  222. package/dist/components/ui/card/index.d.ts +3 -1
  223. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
  224. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
  225. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +2 -2
  226. package/dist/components/ui/command/Command.vue.d.ts +1 -1
  227. package/dist/components/ui/command/CommandDialog.vue.d.ts +9 -3
  228. package/dist/components/ui/command/CommandList.vue.d.ts +3 -0
  229. package/dist/components/ui/context-menu/ContextMenuContent.vue.d.ts +5 -1
  230. package/dist/components/ui/drawer/Drawer.vue.d.ts +46 -33
  231. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +7 -8
  232. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +2 -2
  233. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +1 -1
  234. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +2 -2
  235. package/dist/components/ui/drawer/composables/drawerSnapContext.d.ts +26 -0
  236. package/dist/components/ui/drawer/composables/useDrawerSnap.d.ts +17 -0
  237. package/dist/components/ui/drawer/constants.d.ts +45 -0
  238. package/dist/components/ui/drawer/index.d.ts +23 -15
  239. package/dist/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +4 -0
  240. package/dist/components/ui/focus-scope/FocusScope.vue.d.ts +20 -0
  241. package/dist/components/ui/focus-scope/index.d.ts +2 -0
  242. package/dist/components/ui/hover-card/HoverCardContent.vue.d.ts +3 -0
  243. package/dist/components/ui/index.d.ts +1 -0
  244. package/dist/components/ui/input/Input.vue.d.ts +3 -0
  245. package/dist/components/ui/number-field/NumberFieldInput.vue.d.ts +6 -1
  246. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +3 -2
  247. package/dist/components/ui/select/SelectContent.vue.d.ts +4 -1
  248. package/dist/components/ui/sheet/index.d.ts +1 -1
  249. package/dist/components/ui/switch/Switch.vue.d.ts +2 -0
  250. package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
  251. package/dist/components/ui/textarea/Textarea.vue.d.ts +3 -0
  252. package/dist/components/ui/toast/Toast.vue.d.ts +5 -2
  253. package/dist/components/ui/toast/use-toast.d.ts +14 -0
  254. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  255. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +3 -0
  256. package/dist/composables/color/index.d.ts +2 -0
  257. package/dist/composables/color/useAccentTone.d.ts +34 -0
  258. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +13 -6
  259. package/dist/composables/glass/index.d.ts +5 -2
  260. package/dist/composables/glass/useSpecularPointer.d.ts +33 -0
  261. package/dist/composables/glass/useSpecularTracking.d.ts +20 -0
  262. package/dist/composables/glass/useVizChoreography.d.ts +123 -0
  263. package/dist/composables/glass/vSpecular.d.ts +2 -0
  264. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +10 -0
  265. package/dist/composables/glass/webgl/shaders/flow.glsl.d.ts +1 -0
  266. package/dist/composables/glass/webgl/shaders/flow.wgsl.d.ts +1 -0
  267. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -0
  268. package/dist/composables/glass/webgpu/index.d.ts +2 -0
  269. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +75 -0
  270. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +85 -0
  271. package/dist/composables/glass/webgpu/webgpuDevice.d.ts +42 -0
  272. package/dist/composables/motion/core/index.d.ts +4 -0
  273. package/dist/composables/motion/index.d.ts +4 -0
  274. package/dist/composables/motion/scrollReader.d.ts +25 -0
  275. package/dist/composables/motion/springPresets.d.ts +20 -1
  276. package/dist/composables/motion/useCharStagger.d.ts +44 -0
  277. package/dist/composables/motion/useDockCtaReceive.d.ts +84 -0
  278. package/dist/composables/motion/useDragMorph.d.ts +77 -0
  279. package/dist/composables/motion/useLiquidFlex.d.ts +11 -0
  280. package/dist/composables/motion/useLiquidPress.d.ts +71 -0
  281. package/dist/composables/motion/useLiquidReveal.d.ts +51 -0
  282. package/dist/composables/motion/useNumericTransition.d.ts +3 -3
  283. package/dist/composables/motion/usePointerVelocityField.d.ts +98 -0
  284. package/dist/composables/motion/useScrollChrome.d.ts +58 -0
  285. package/dist/composables/motion/useScrollTrigger.d.ts +67 -0
  286. package/dist/composables/motion/useSpringPress.d.ts +5 -5
  287. package/dist/composables/motion/useStaggerReveal.d.ts +24 -0
  288. package/dist/composables/sidebar/index.d.ts +4 -1
  289. package/dist/composables/sidebar/types.d.ts +68 -3
  290. package/dist/composables/sidebar/useClickDelegate.d.ts +4 -0
  291. package/dist/composables/sidebar/useLazyLoader.d.ts +5 -0
  292. package/dist/composables/sidebar/useScrollTo.d.ts +5 -0
  293. package/dist/composables/virtual/index.d.ts +4 -0
  294. package/dist/composables/virtual/useVirtualSectionWindow.d.ts +72 -0
  295. package/dist/composables/virtual/useWindowedStore.d.ts +43 -0
  296. package/dist/composables/virtual/virtualSectionLayout.d.ts +103 -0
  297. package/dist/concentric.d.ts +1 -0
  298. package/dist/concentric.js +836 -0
  299. package/dist/configurator.js +3 -2
  300. package/dist/confirm-dialog.js +62 -49
  301. package/dist/constellation.js +635 -235
  302. package/dist/context-menu.js +3 -3
  303. package/dist/controls.js +2 -2
  304. package/dist/createCanvasLifecycle-Gh45Ce-p.js +93 -0
  305. package/dist/dark.js +1 -1
  306. package/dist/data-table.js +1 -1
  307. package/dist/deck.d.ts +1 -0
  308. package/dist/deck.js +105 -0
  309. package/dist/dialog.js +4 -3
  310. package/dist/dock.js +819 -568
  311. package/dist/{dockContext-Bu1Avy-a.js → dockContext-BNfyPLe9.js} +1 -1
  312. package/dist/dom.js +5 -5
  313. package/dist/dot-flow-field.d.ts +1 -0
  314. package/dist/dot-flow-field.js +894 -0
  315. package/dist/dot-matrix.d.ts +1 -0
  316. package/dist/dot-matrix.js +630 -0
  317. package/dist/dotMatrixField-D_x9_1qq.js +48 -0
  318. package/dist/drawer.d.ts +1 -0
  319. package/dist/drawer.js +380 -0
  320. package/dist/{dropdown-menu-BJ7E9js_.js → dropdown-menu-aJmV5SqE.js} +82 -79
  321. package/dist/dropdown-menu.js +1 -1
  322. package/dist/easing.d.ts +1 -0
  323. package/dist/easing.js +475 -0
  324. package/dist/expandable-container.js +46 -21
  325. package/dist/fading-scroll.js +1 -1
  326. package/dist/flow.glsl-B2P7e0MT.js +4 -0
  327. package/dist/focus-scope.d.ts +1 -0
  328. package/dist/focus-scope.js +23 -0
  329. package/dist/forms.js +65 -63
  330. package/dist/fourier-field.js +831 -172
  331. package/dist/fourier-math.js +1 -1
  332. package/dist/glass-panel.js +2 -2
  333. package/dist/glass-ui.css +1 -1
  334. package/dist/glass-ui.js +187 -338
  335. package/dist/goo-blob.js +241 -692
  336. package/dist/goo-dot-matrix.d.ts +1 -0
  337. package/dist/goo-dot-matrix.js +591 -0
  338. package/dist/handmark.js +2 -2
  339. package/dist/header-ribbon.js +1 -1
  340. package/dist/hover-card.js +1 -1
  341. package/dist/hover-popover.js +1 -1
  342. package/dist/icon-chip.js +1 -1
  343. package/dist/icon-tooltip.js +1 -1
  344. package/dist/index.d.ts +3 -1
  345. package/dist/instrument-chassis.js +1 -1
  346. package/dist/keyboard.js +1 -1
  347. package/dist/label.js +1 -1
  348. package/dist/labeled-field.js +70 -60
  349. package/dist/metric-badge.js +1 -1
  350. package/dist/metric-cell.js +1 -1
  351. package/dist/metric-stack.js +14 -9
  352. package/dist/motion-core.js +58 -36
  353. package/dist/motion-curves.js +11 -1
  354. package/dist/motion.js +90 -53
  355. package/dist/notification.js +1 -1
  356. package/dist/number-field.js +1 -1
  357. package/dist/pager-dots.js +2 -91
  358. package/dist/paper-backdrop.js +1 -1
  359. package/dist/paper-grid.d.ts +1 -0
  360. package/dist/paper-grid.js +788 -0
  361. package/dist/popover.js +1 -1
  362. package/dist/{presets-BW2b-fr1.js → presets-CvOUqtdY.js} +3 -3
  363. package/dist/{compile-EXXzEr1q.js → procedural-color.wgsl-m7Zgv35j.js} +2 -156
  364. package/dist/progress.js +1 -1
  365. package/dist/pulse.js +2 -2
  366. package/dist/reactive.js +1 -1
  367. package/dist/resolveCanvasColor-yPyIpJt9.js +93 -0
  368. package/dist/scrollReader-DI1NWxUw.js +42 -0
  369. package/dist/scrolling-text.js +1 -1
  370. package/dist/search.js +162 -308
  371. package/dist/select.js +3 -3
  372. package/dist/selectable-chip.d.ts +1 -0
  373. package/dist/selectable-chip.js +65 -0
  374. package/dist/separator.js +1 -1
  375. package/dist/{sheet-CquRYOAw.js → sheet-B2flBfLH.js} +5 -5
  376. package/dist/sheet.js +1 -1
  377. package/dist/sidebar.js +216 -114
  378. package/dist/{slider-DQ95MET2.js → slider-2A0rPn79.js} +3 -3
  379. package/dist/slider.js +1 -1
  380. package/dist/sortable-list.js +2 -2
  381. package/dist/spa-view.d.ts +1 -0
  382. package/dist/spa-view.js +46 -0
  383. package/dist/spectrum-walk-BVzA7Biz.js +33 -0
  384. package/dist/{springPresets-WXaLbu8u.js → springPresets-Ce7OYCm9.js} +12 -6
  385. package/dist/styles/animations.css +46 -12
  386. package/dist/styles/border-progress.css +109 -0
  387. package/dist/styles/cards.css +145 -0
  388. package/dist/styles/completion-seal.css +131 -0
  389. package/dist/styles/components.css +2 -3
  390. package/dist/styles/configurator.css +55 -0
  391. package/dist/styles/critical-partition.mjs +162 -0
  392. package/dist/styles/critical.css +12 -0
  393. package/dist/styles/deferred.css +33 -0
  394. package/dist/styles/dock/cta-seat.css +87 -0
  395. package/dist/styles/dock/density.css +198 -0
  396. package/dist/styles/dock/layers.css +101 -29
  397. package/dist/styles/dock/morph-bridge.css +54 -18
  398. package/dist/styles/dock/morph.css +132 -7
  399. package/dist/styles/dock/overflow.css +28 -2
  400. package/dist/styles/dock/search.css +68 -0
  401. package/dist/styles/dock/shape.css +124 -0
  402. package/dist/styles/dock/shell.css +77 -21
  403. package/dist/styles/dock/stack-rail.css +264 -0
  404. package/dist/styles/dock-controls/dark-mode-toggle.css +17 -4
  405. package/dist/styles/dock-controls/icon-button.css +14 -0
  406. package/dist/styles/dock.css +43 -1
  407. package/dist/styles/drawer.css +81 -35
  408. package/dist/styles/glass/accent-tone.css +66 -0
  409. package/dist/styles/glass/control-surfaces.css +167 -0
  410. package/dist/styles/glass/deep.css +44 -0
  411. package/dist/styles/glass/ladder.css +147 -41
  412. package/dist/styles/glass/material.css +78 -15
  413. package/dist/styles/glass/reveal.css +136 -0
  414. package/dist/styles/glass/rim.css +110 -0
  415. package/dist/styles/glass/surfaces.css +148 -129
  416. package/dist/styles/glass-refract.css +96 -44
  417. package/dist/styles/glass-specular-track.css +7 -0
  418. package/dist/styles/glass.css +13 -0
  419. package/dist/styles/hover-popover.css +7 -6
  420. package/dist/styles/icon-chip.css +77 -15
  421. package/dist/styles/index.css +36 -9
  422. package/dist/styles/instrument-chassis.css +66 -3
  423. package/dist/styles/scroll-choreography.css +300 -0
  424. package/dist/styles/scroll-chrome.css +123 -0
  425. package/dist/styles/scroll-driven.css +38 -0
  426. package/dist/styles/segmented-tabs.css +81 -14
  427. package/dist/styles/theme/bridges.css +33 -0
  428. package/dist/styles/theme/literals.css +11 -2
  429. package/dist/styles/theme/radius.css +24 -2
  430. package/dist/styles/tokens/color-radius.css +13 -3
  431. package/dist/styles/tokens/dark-arm.css +137 -32
  432. package/dist/styles/tokens/glass-deep.css +100 -0
  433. package/dist/styles/tokens/glass-fx.css +376 -0
  434. package/dist/styles/tokens/glass.css +131 -351
  435. package/dist/styles/tokens/light-dark.css +16 -3
  436. package/dist/styles/tokens/offsets.css +143 -0
  437. package/dist/styles/tokens/on-glass-fg.css +39 -0
  438. package/dist/styles/tokens/property-regs.css +260 -0
  439. package/dist/styles/tokens/scale-paper.css +168 -96
  440. package/dist/styles/tokens/scheme-motion.css +114 -38
  441. package/dist/styles/tokens/scroll-tokens.css +123 -0
  442. package/dist/styles/tokens/sizing-config.css +110 -0
  443. package/{src/styles/tokens/offsets-sizing.css → dist/styles/tokens/sizing.css} +92 -204
  444. package/dist/styles/tokens.css +14 -3
  445. package/dist/styles/typography/semantic.css +26 -13
  446. package/dist/styles/typography/utilities.css +22 -7
  447. package/dist/styles/utilities/a11y-overrides.css +20 -5
  448. package/dist/styles/utilities/animate.css +27 -24
  449. package/dist/styles/utilities/base-misc.css +307 -0
  450. package/dist/styles/utilities/base.css +47 -261
  451. package/dist/styles/utilities/btn.css +17 -4
  452. package/dist/styles/utilities/components.css +31 -6
  453. package/dist/styles/utilities/metal.css +215 -0
  454. package/dist/styles/utilities.css +14 -7
  455. package/dist/switch.js +1 -1
  456. package/dist/tabs.js +220 -107
  457. package/dist/timeline.js +2 -2
  458. package/dist/toast.js +1 -1
  459. package/dist/toggle-chip.js +10 -10
  460. package/dist/toggle-group.js +1 -1
  461. package/dist/tooltip.js +1 -1
  462. package/dist/typewriter.js +2 -2
  463. package/dist/uniformBridgeWGPU-CtAKl45L.js +1204 -0
  464. package/dist/{useAnimatedNumber-C_3wZLx4.js → useAnimatedNumber-CLrxicG9.js} +1 -1
  465. package/dist/useConfiguratorState-4xblKfwd.js +162 -0
  466. package/dist/useControlSize-SH1UmJCi.js +9 -0
  467. package/dist/useDockCtaReceive-DfFkmgL1.js +82 -0
  468. package/dist/useDragMorph-BUgAC-zK.js +102 -0
  469. package/dist/useFuzzySearch-DIhcYtcw.js +177 -0
  470. package/dist/useGpuSubstrate-4pTcp6mX.js +294 -0
  471. package/dist/useLiquidPress-BooG97RY.js +39 -0
  472. package/dist/usePointerVelocityField-QLsy3_kv.js +91 -0
  473. package/dist/useScrollChrome-D66AVP7C.js +258 -0
  474. package/dist/useSpring-C0jyvEJB.js +40 -0
  475. package/dist/useSpringMount-BWDnKIwh.js +71 -0
  476. package/dist/useSpringPress-B1-Czp-V.js +36 -0
  477. package/dist/{useTouchGate-28Tk2-t2.js → useTouchGate-CBZTD4SD.js} +1 -1
  478. package/dist/useViewTransition-CUI1nAgn.js +95 -0
  479. package/dist/vSpecular-EX7loENl.js +68 -0
  480. package/dist/vendor-B2qOlYY3.js +239 -0
  481. package/dist/virtual.d.ts +1 -0
  482. package/dist/virtual.js +225 -0
  483. package/dist/watercolor-dot.js +117 -74
  484. package/package.json +252 -28
  485. package/src/styles/animations.css +46 -12
  486. package/src/styles/border-progress.css +109 -0
  487. package/src/styles/cards.css +145 -0
  488. package/src/styles/completion-seal.css +131 -0
  489. package/src/styles/configurator.css +55 -0
  490. package/src/styles/critical-partition.mjs +162 -0
  491. package/src/styles/dock/cta-seat.css +87 -0
  492. package/src/styles/dock/density.css +198 -0
  493. package/src/styles/dock/layers.css +101 -29
  494. package/src/styles/dock/morph-bridge.css +54 -18
  495. package/src/styles/dock/morph.css +132 -7
  496. package/src/styles/dock/overflow.css +28 -2
  497. package/src/styles/dock/search.css +68 -0
  498. package/src/styles/dock/shape.css +124 -0
  499. package/src/styles/dock/shell.css +77 -21
  500. package/src/styles/dock/stack-rail.css +264 -0
  501. package/src/styles/dock-controls/dark-mode-toggle.css +17 -4
  502. package/src/styles/dock-controls/icon-button.css +14 -0
  503. package/src/styles/dock.css +43 -1
  504. package/src/styles/drawer.css +81 -35
  505. package/src/styles/glass/accent-tone.css +66 -0
  506. package/src/styles/glass/control-surfaces.css +167 -0
  507. package/src/styles/glass/deep.css +44 -0
  508. package/src/styles/glass/ladder.css +147 -41
  509. package/src/styles/glass/material.css +78 -15
  510. package/src/styles/glass/reveal.css +136 -0
  511. package/src/styles/glass/rim.css +110 -0
  512. package/src/styles/glass/surfaces.css +148 -129
  513. package/src/styles/glass-refract.css +96 -44
  514. package/src/styles/glass-specular-track.css +7 -0
  515. package/src/styles/glass.css +13 -0
  516. package/src/styles/hover-popover.css +7 -6
  517. package/src/styles/icon-chip.css +77 -15
  518. package/src/styles/index.css +27 -0
  519. package/src/styles/instrument-chassis.css +66 -3
  520. package/src/styles/scroll-choreography.css +300 -0
  521. package/src/styles/scroll-chrome.css +123 -0
  522. package/src/styles/scroll-driven.css +38 -0
  523. package/src/styles/segmented-tabs.css +81 -14
  524. package/src/styles/theme/bridges.css +33 -0
  525. package/src/styles/theme/literals.css +11 -2
  526. package/src/styles/theme/radius.css +24 -2
  527. package/src/styles/tokens/color-radius.css +13 -3
  528. package/src/styles/tokens/dark-arm.css +137 -32
  529. package/src/styles/tokens/glass-deep.css +100 -0
  530. package/src/styles/tokens/glass-fx.css +376 -0
  531. package/src/styles/tokens/glass.css +131 -351
  532. package/src/styles/tokens/light-dark.css +16 -3
  533. package/src/styles/tokens/offsets.css +143 -0
  534. package/src/styles/tokens/on-glass-fg.css +39 -0
  535. package/src/styles/tokens/property-regs.css +260 -0
  536. package/src/styles/tokens/scale-paper.css +168 -96
  537. package/src/styles/tokens/scheme-motion.css +114 -38
  538. package/src/styles/tokens/scroll-tokens.css +123 -0
  539. package/src/styles/tokens/sizing-config.css +110 -0
  540. package/{dist/styles/tokens/offsets-sizing.css → src/styles/tokens/sizing.css} +92 -204
  541. package/src/styles/tokens.css +14 -3
  542. package/src/styles/typography/semantic.css +26 -13
  543. package/src/styles/typography/utilities.css +22 -7
  544. package/src/styles/utilities/a11y-overrides.css +20 -5
  545. package/src/styles/utilities/animate.css +27 -24
  546. package/src/styles/utilities/base-misc.css +307 -0
  547. package/src/styles/utilities/base.css +47 -261
  548. package/src/styles/utilities/btn.css +17 -4
  549. package/src/styles/utilities/components.css +31 -6
  550. package/src/styles/utilities/metal.css +215 -0
  551. package/src/styles/utilities.css +14 -7
  552. package/dist/CardAction-XH4YBVEK.js +0 -158
  553. package/dist/ContextMenuContent-ON3x7cuk.js +0 -85
  554. package/dist/DialogFooter-8eZbdmPc.js +0 -165
  555. package/dist/HoverCardContent-DkMaQzH5.js +0 -83
  556. package/dist/Input-DVG_J0ne.js +0 -55
  557. package/dist/Notification-DKjKsQq8.js +0 -100
  558. package/dist/NumberFieldContent-1VtwDSgf.js +0 -145
  559. package/dist/Separator-BArl4OaB.js +0 -37
  560. package/dist/Switch-Dr--uLGH.js +0 -47
  561. package/dist/Toaster-Bm_HQSpc.js +0 -263
  562. package/dist/ToggleGroupItem-Dzk9hWsF.js +0 -157
  563. package/dist/TooltipProvider-B3MkB_8P.js +0 -104
  564. package/dist/button-BNDWhAZb.js +0 -81
  565. package/dist/check-njhk-vfu.js +0 -7
  566. package/dist/chevron-down-DKkxb4VV.js +0 -7
  567. package/dist/chevron-right-CPXbqQQz.js +0 -7
  568. package/dist/chevron-up-n_24SqI-.js +0 -7
  569. package/dist/color-DweYl7pE.js +0 -86
  570. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +0 -35
  571. package/dist/components/custom/constellation/constellationDraw.d.ts +0 -30
  572. package/dist/components/custom/dock/DockRail.vue.d.ts +0 -89
  573. package/dist/createLucideIcon-DydS2qgk.js +0 -43
  574. package/dist/minimize-2-BV31Ob_h.js +0 -38
  575. package/dist/resolveCanvasColor-BBiYfp8g.js +0 -11
  576. package/dist/search-BSGrf2Sk.js +0 -12
  577. package/dist/styles/dock/rail-extend.css +0 -397
  578. package/dist/useCanvas2D-ClrQuZtp.js +0 -96
  579. package/dist/useConfiguratorState-kiIlun8I.js +0 -303
  580. package/dist/useRAFLoop-CdwJ7284.js +0 -109
  581. package/dist/useSpecularTracking-Bo5su68i.js +0 -32
  582. package/dist/useSpringMount-CvopqiFr.js +0 -108
  583. package/dist/useViewTransition-COsPjQVZ.js +0 -47
  584. package/dist/x-BUwTKe50.js +0 -10
  585. package/src/styles/dock/rail-extend.css +0 -397
  586. /package/dist/{CollapsibleContent-C_s6fG7r.js → CollapsibleContent-68dEXIAl.js} +0 -0
  587. /package/dist/{InstrumentChassis-UUJX0-mW.js → InstrumentChassis-CxsHSyMj.js} +0 -0
  588. /package/dist/{Label-Ck9SWEKM.js → Label-C2ejNWeC.js} +0 -0
  589. /package/dist/{ModalOverlay-CkPRRgl_.js → ModalOverlay-D1VrWyoi.js} +0 -0
  590. /package/dist/{PaperBackdrop-nBKe0vkB.js → PaperBackdrop-CqwjnfLv.js} +0 -0
  591. /package/dist/{SelectGroup-Dcczq44n.js → SelectGroup-BFiod7X2.js} +0 -0
  592. /package/dist/{_plugin-vue_export-helper-CBt_VvXa.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
  593. /package/dist/{badge-UILT_3pZ.js → badge-D9XWW4GT.js} +0 -0
  594. /package/dist/{constants-BPOqYJAm.js → constants--C2DkLW8.js} +0 -0
  595. /package/dist/{createContext-B2RaZ-b8.js → createContext-CpBNTRMI.js} +0 -0
  596. /package/dist/{math-DeuJwLFx.js → math-Eb0w3LqU.js} +0 -0
  597. /package/dist/{menuItemVariants-DWRQXBxJ.js → menuItemVariants-D8VNHq22.js} +0 -0
  598. /package/dist/{prng-Cg22zv8g.js → prng-B-d9eYX8.js} +0 -0
  599. /package/dist/{useGlobalDark-C28t0VWJ.js → useGlobalDark-CmjB9E32.js} +0 -0
  600. /package/dist/{useIntersectionPause-Bj4sPkMh.js → useIntersectionPause-Dbozzjgm.js} +0 -0
  601. /package/dist/{useKeyboardShortcuts-BXWXOZ-9.js → useKeyboardShortcuts-BPRp33Im.js} +0 -0
  602. /package/dist/{useLiquidFlex-C12hXwOZ.js → useLiquidFlex-UmA6LMZu.js} +0 -0
  603. /package/dist/{useResizeObserver-V6nq5gJb.js → useResizeObserver-Bpoi7tRE.js} +0 -0
  604. /package/dist/{useResolveTokenColor-NUG2zYAW.js → useResolveTokenColor-vAylyR0x.js} +0 -0
  605. /package/dist/{useScrollProgress-D7bYU2RK.js → useScrollProgress-c3yxmH6a.js} +0 -0
  606. /package/dist/{useSurfaceAxis-CMnF2zHb.js → useSurfaceAxis-g0NloYEF.js} +0 -0
  607. /package/dist/{useTimer-B_PAasDL.js → useTimer-BHJOKr35.js} +0 -0
  608. /package/dist/{useUserInvalidAria-CDfJuakL.js → useUserInvalidAria-y5namzeE.js} +0 -0
  609. /package/dist/{useViewportReady-CvBcCYDf.js → useViewportReady-anbac3m6.js} +0 -0
@@ -0,0 +1,167 @@
1
+ /* glass/control-surfaces.css
2
+ The form-control REST register carved from glass/surfaces.css — the
3
+ `.input-pill` family (Input/Textarea/NumberField), the shared `.control-surface`
4
+ class (Select default + TagsInput), the validity vocabulary, and the Select
5
+ trigger resting-border lift. A cohesive sub-concern of surfaces.css (the
6
+ no-god-module re-drain), @import-ed by glass.css in cascade order IMMEDIATELY
7
+ AFTER surfaces.css and BEFORE surface-axis.css — same `@layer components`, same
8
+ source order, so the carve is byte-isomorphic.
9
+ See docs/precepts/design-idioms.md §cohesion-aware partials. */
10
+ @layer components {
11
+ /* ── Pill input ───────────────────────────────── */
12
+ .input-pill {
13
+ @apply flex w-full;
14
+
15
+ /* AX.W51 D18 — the input pill rides the ONE `--ui-scale` comfort axis: the
16
+ height reads the `--control-h-md` cohort (`max(calc(2.5rem * --ui-scale),
17
+ --control-floor)`, the h-10 register with the WCAG-44px coarse clamp), the
18
+ font reads `--control-text`, the inline padding scales — so ONE override
19
+ grows the field's height + padding + font in lockstep. Desktop default is
20
+ the identity. */
21
+ /* BC.W-CONTROL-CUSTOM — the height reads the `--control-pill-h` element-
22
+ override seam, DEFAULTING to the cohort `--control-h-md` so a bare
23
+ control is byte-identical to HEAD. The shared `controlSizeClass(size)`
24
+ (_shared/useControlSize.ts) re-points the seam per rung
25
+ (sm→`--control-h-sm`, lg→`--control-h-lg`), so the `size` prop retunes
26
+ the field height WITHOUT a recipe fork — ONE substitution rung, the
27
+ cohort is still the source. */
28
+ height: var(--control-pill-h, var(--control-h-md));
29
+ border-radius: var(--radius-pill);
30
+ /* AW.W13 — the resting field edge reads as an enclosed control at rest
31
+ (~15%α — ~2× the prior 8% glass-wash floor that vanished on cream). The
32
+ `:focus-visible` accent ring + the `:user-invalid`/`[aria-invalid]`
33
+ destructive ring below still win by order + specificity.
34
+ AX.W54 — moved off the srgb `--surface-tint-15` fork onto the glass
35
+ border seam so the pill is ONE glass model with the rest of the ladder.
36
+ BA.W-SURFACE-AXIS scope 7 — re-pointed onto the SHARED `--control-surface-*`
37
+ REST register so Input/Textarea/NumberField/Select/Combobox/TagsInput are
38
+ ONE material at rest (the input rung was the warmer of the two; Select rode
39
+ the `glass-wash` gray — the no-gray control-family seam). The register reads
40
+ the same `--glass-*` ladder, so `--glass-level`/the W55 bright bucket retune
41
+ the whole form family in lockstep (--control-surface-border defaults to the
42
+ `--glass-border-floating` 15%α rung, --control-surface-bg to `--glass-bg-quiet`,
43
+ --control-surface-blur to `--glass-blur-quiet`). */
44
+ border: 1.5px solid var(--control-surface-border);
45
+ background: var(--control-surface-bg);
46
+ /* The control's REAL glass blur — the shared register's quiet-tier radius
47
+ (the same `--control-surface-blur` pairs with `--control-surface-bg`); the
48
+ `--glass-level` knob clarifies it in lockstep with every surface. */
49
+ backdrop-filter: var(--control-surface-blur);
50
+ padding: 0 calc(1rem * var(--ui-scale));
51
+ /* BC.W-CONTROL-CUSTOM — the font reads the `--control-pill-text` seam,
52
+ DEFAULTING to `--control-text` (byte-identical at unset). The `sm` rung
53
+ re-points it to `--control-text-sm` (the quieter register); `default`/`lg`
54
+ keep `--control-text`. This is the C1 close — the input register reads
55
+ `--control-text` via the recipe, NOT a bare `text-sm` literal. */
56
+ font-size: var(--control-pill-text, var(--control-text));
57
+ color: var(--foreground);
58
+ transition:
59
+ background-color var(--duration-fast) var(--ease-standard),
60
+ border-color var(--duration-fast) var(--ease-standard),
61
+ box-shadow var(--duration-fast) var(--ease-standard),
62
+ color var(--duration-fast) var(--ease-standard),
63
+ opacity var(--duration-fast) var(--ease-standard);
64
+ }
65
+
66
+ .input-pill::placeholder {
67
+ color: var(--surface-tint-35);
68
+ }
69
+
70
+ /* BA.W-SURFACE-AXIS scope 7 — the shared control REST surface class. The
71
+ NON-pill control families (the Select trigger, the TagsInput root) that do
72
+ NOT compose `.input-pill` but want the SAME resting material read this — so
73
+ the whole form band is ONE register at rest (the Select default rode the
74
+ lighter `glass-wash` gray before; this is the no-gray control-family seam).
75
+ It carries the bg/border/blur ONLY (each control owns its own height/radius/
76
+ padding/font), so a non-pill control composes `.control-surface` + its own
77
+ geometry. The hover lift brightens the fill one step toward the resting rung. */
78
+ .control-surface {
79
+ background: var(--control-surface-bg);
80
+ border: 1px solid var(--control-surface-border);
81
+ backdrop-filter: var(--control-surface-blur);
82
+ -webkit-backdrop-filter: var(--control-surface-blur);
83
+ }
84
+ .control-surface:hover:not(:disabled, [data-disabled]) {
85
+ background: var(--control-surface-bg-hover);
86
+ }
87
+
88
+ /* AQ.W4 §W4.6 — keyboard-focus ring only. Was bare `:focus` (showed the
89
+ accent ring on a mouse click); `:focus-visible` matches the
90
+ `.focus-ring` / `.glass-btn` / dock-control discipline. Ordered BEFORE
91
+ the `:user-invalid` rungs so an invalid focused field shows destructive,
92
+ not accent (the `:user-invalid:focus-visible` rule below wins by order +
93
+ specificity). `:focus-visible` Baseline Widely — no fallback. */
94
+ .input-pill:focus-visible {
95
+ outline: none;
96
+ border-color: var(--color-accent-opaque, var(--ring));
97
+ box-shadow: 0 0 0 2px var(--color-accent, color-mix(in srgb, var(--ring) 30%, transparent));
98
+ }
99
+
100
+ /* AQ.W4 §W4.1 — validity vocabulary on `.input-pill` (Input + Textarea).
101
+ The forgiving `:where(:user-invalid, .user-invalid-fallback,
102
+ [aria-invalid="true"])` group is ONE rule covering THREE trigger surfaces:
103
+ native constraint-validation (`:user-invalid`), the `useUserInvalidAria`
104
+ fallback class for engines without `:user-invalid` (css §3.2; NOT a
105
+ live+dead alias — the class is the SOLE fallback), AND (AW.W18) the
106
+ imperative `[aria-invalid="true"]` attribute. The `[aria-invalid]` arm
107
+ serves APP-DRIVEN validity — a custom key match, an async server check —
108
+ where there is no native constraint to trip `:user-invalid`, so the app
109
+ sets the ARIA attribute and the library's own ring paints with no
110
+ `:deep()` re-paint at the consumer. The destructive/success tints reuse
111
+ the semantic tokens via `color-mix` per the house pattern (W2). Non-color
112
+ reinforcement is the error TEXT (W4.5 `error` slot) + the `required`
113
+ asterisk — the border/bg shift is the supplementary cue, never the sole
114
+ one. `:user-valid` is intentionally subtle (border only, no bg fill) so
115
+ a long valid form is not a wall of green. */
116
+ .input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]) {
117
+ border-color: var(--destructive);
118
+ background: color-mix(in srgb, var(--destructive) 8%, var(--glass-bg-quiet));
119
+ }
120
+ .input-pill:where(:user-valid, .user-valid-fallback) {
121
+ border-color: var(--success);
122
+ }
123
+ /* Invalid + keyboard-focused → destructive ring (overrides the accent
124
+ `:focus-visible` ring above by order + the extra invalid compound). The
125
+ `[aria-invalid]` arm rides the same widened group so an app-driven
126
+ invalid field shows the destructive ring on focus too. */
127
+ .input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]):focus-visible {
128
+ border-color: var(--destructive);
129
+ /* BB.W-INVALID-RING — the shared destructive ring register (the
130
+ --focus-ring-shadow sibling). The byte-identical recipe is now ONE
131
+ token; the `8%` at-rest bg arm above stays `.input-pill`-local (a
132
+ glass-tint substrate the bare-ring surfaces do not carry). */
133
+ box-shadow: var(--invalid-ring);
134
+ }
135
+
136
+ /* AQ.W4 §W4.3 — `field-sizing: content` autosize (opt-in via the Textarea
137
+ `autosize` prop → `[data-autosize]`). The textarea grows vertically with
138
+ content between a 3-line floor and a token-driven ceiling, then scrolls.
139
+ `field-sizing` Baseline Newly (Chromium 2024) — on a non-supporting
140
+ engine the declaration is ignored and the element keeps the
141
+ `min/max-block-size` bounds + standard scroll (no JS, no `@supports`,
142
+ no grid-mirror polyfill). The fixed-size path (default, `min-h-20`) is
143
+ the unchanged no-op fallback. */
144
+ .input-pill[data-autosize] {
145
+ field-sizing: content;
146
+ width: 100%;
147
+ min-block-size: 3lh;
148
+ max-block-size: var(--textarea-autosize-max, 12lh);
149
+ resize: vertical;
150
+ }
151
+
152
+ .input-pill:disabled {
153
+ opacity: 0.5;
154
+ cursor: not-allowed;
155
+ }
156
+
157
+ /* AW.W13 — the Select trigger mirrors the input pill's resting border lift.
158
+ The reka-ui SelectTrigger renders `role="combobox"` over the `.glass-wash`
159
+ surface; its 8%α `--glass-border-wash` field edge vanished on cream just
160
+ like the input pill, so the same `--surface-tint-15` lift makes the
161
+ trigger read as an enclosed control at rest. Scoped to the combobox role
162
+ so the lift reaches ONLY the Select trigger, not every `.glass-wash`
163
+ surface. */
164
+ .glass-wash[role="combobox"] {
165
+ border-color: var(--surface-tint-15);
166
+ }
167
+ }
@@ -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,8 +211,35 @@
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);
203
- --muted-foreground: var(--foreground);
214
+ /* BC.W-ADAPTIVE-RECONCILE (the fourier-analysis-M Tier-1 #1 fold, CONTINUOUS half)
215
+ — the OVERLAY band SPECIFICALLY JOINS the continuous observer driver, the SAME
216
+ clamp the content tiers get. The dropdown/Dialog/Popover/Select-content plate
217
+ FLOORS to warm-cream when the measured backdrop is calm/dark, and darkens
218
+ CONTINUOUSLY only under a measured bright backdrop — NOT the binary `@container`
219
+ bucket jump, NOT a blanket unconditional darken (the retired 4.0.x 20% slab).
220
+ The `BC.W-AUDIT` pre-fix already closed the UNCONDITIONAL-darken half (the band
221
+ floored by default); THIS is the continuous earned-darken half. The MEASURED AA
222
+ bar (the overlay plate clears 4.5:1 WHILE α < 0.86) is GLASS-LEGIBILITY-
223
+ MEASURED's roster addition — the driver here, the bar there, no double-ownership. */
224
+ --glass-tint-strength: clamp(
225
+ var(--glass-tint-strength-floor),
226
+ calc(
227
+ var(--glass-tint-strength-floor) +
228
+ (var(--glass-tint-strength-aa) - var(--glass-tint-strength-floor)) *
229
+ max(0, (var(--glass-backdrop-luma, 0) - var(--glass-backdrop-luma-knee, 0.6)) / (1 - var(--glass-backdrop-luma-knee, 0.6)))
230
+ ),
231
+ var(--glass-tint-strength-aa)
232
+ );
233
+ /* BC.W-DIALOG-GLASS — the overlay band's muted caption keeps the on-glass MUTED
234
+ register on a CALM modal (the SAME `--on-glass-muted` the content tiers read on
235
+ their calm path — legible-AND-subordinate against the composited glass fill),
236
+ NOT an UNCONDITIONAL lift to full `--foreground` that blackened the caption on a
237
+ cream modal over a light page. The bright-bucket lift (@container --glass-
238
+ backdrop:light below) moves `--muted-foreground` to the contrast ink in LOCKSTEP
239
+ with `--foreground` only where the plate ACTUALLY darkens to AA — so a busy-
240
+ backdrop modal goes full ink, a calm modal keeps the muted register. */
241
+ --muted-foreground: var(--on-glass-muted);
242
+ --muted-foreground-strong: var(--on-glass-muted-strong);
204
243
  }
205
244
 
206
245
  /* BA.W-DARK-MATERIAL scope 7 — the plain CONTENT tiers self-engage the SUB-PERCEPTUAL
@@ -212,10 +251,52 @@
212
251
  under the declared/sampled BRIGHT signal (the @container --glass-backdrop:light bucket
213
252
  above — where the muted lift also lives now). NO unconditional --muted-foreground lift
214
253
  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. */
254
+ A consumer opts a light-page card out via `--glass-tint-strength: 0%` on an ancestor.
255
+
256
+ BB.W-ON-GLASS-FG (N13) — the THIRD-STATE on-glass FOREGROUND re-point lands HERE,
257
+ BESIDE the BA seam (the SAME cascade context, the SAME content-tier set, NOT a new
258
+ competing layer). The calm-light floor keeps the page-muted --neutral-5 at HEAD —
259
+ but the muted ink is calibrated against the CANVAS, and on a TRANSLUCENT content
260
+ plate (the glass-first common case) it composites toward the lifted backdrop and
261
+ its contrast COLLAPSES (1.15-3.29:1 measured in dark). The re-point targets the
262
+ muted register at the COMPOSITED glass fill: --muted-foreground → --on-glass-muted
263
+ (+ the -strong twin), a register BETWEEN the page-muted and the bright-bucket full
264
+ ink (legible-AND-subordinate; the caption stays quieter than body --foreground).
265
+ This is NOT a fork of --glass-tint-* — it READS the seam context and expresses the
266
+ third state; it NEVER re-declares --glass-tint-ink/-strength-* (W-DARK-MATERIAL's
267
+ frozen bound). The BA bright-bucket lift (@container --glass-backdrop:light above,
268
+ --muted-foreground → --foreground) STILL WINS where the plate darkens — the
269
+ @container conditional overrides this unconditional :where() when it engages, so a
270
+ darkened plate goes full ink; this calm re-point is the calm-plate case ONLY. The
271
+ overlay band (:where(.glass-floating, .glass-overlay) above) is a DISJOINT selector
272
+ set (it keeps the full-ink lift), so neither path collides. The values auto-flip per
273
+ mode (the on-glass rungs carry their own light/dark per-mode arms in tokens). */
216
274
  :where(.glass-card, .glass-resting, .glass-quiet, .glass-wash) {
217
275
  --glass-tint-source: var(--glass-tint-ink);
218
- --glass-tint-strength: var(--glass-tint-strength-floor);
276
+ /* BC.W-ADAPTIVE-RECONCILE — the CONTINUOUS observer-driven darken (the dead-knob
277
+ closed; req #7). The strength is no longer a flat floor: it is a clamp that
278
+ READS the observer's measured `--glass-backdrop-luma` and lerps from the calm
279
+ warm-cream floor toward the ≤24% AA ceiling as the backdrop brightens past the
280
+ `--glass-backdrop-luma-knee` (the iOS-27 dynamic-range shift, apple-ios27.md
281
+ §1.5). Over a calm/dark backdrop (luma ≤ knee, the `max(0, …)` ramp → 0) the
282
+ clamp resolves EXACTLY `--glass-tint-strength-floor` (the GLASS-IDENTITY calm
283
+ identity, byte-equal); rising luma ramps the lift CONTINUOUSLY; the clamp floors
284
+ at the 4% identity and ceilings at the bounded AA — never an unconditional 20%
285
+ slab (the AZ grey-slab is the OPPOSITE of this earned, measured track). This
286
+ RETIRES the discrete `@container --glass-backdrop: light` bucket as the strength
287
+ driver — the continuous calc subsumes it (the bucket survives only as a no-
288
+ `@property` degrade fallback). */
289
+ --glass-tint-strength: clamp(
290
+ var(--glass-tint-strength-floor),
291
+ calc(
292
+ var(--glass-tint-strength-floor) +
293
+ (var(--glass-tint-strength-aa) - var(--glass-tint-strength-floor)) *
294
+ max(0, (var(--glass-backdrop-luma, 0) - var(--glass-backdrop-luma-knee, 0.6)) / (1 - var(--glass-backdrop-luma-knee, 0.6)))
295
+ ),
296
+ var(--glass-tint-strength-aa)
297
+ );
298
+ --muted-foreground: var(--on-glass-muted);
299
+ --muted-foreground-strong: var(--on-glass-muted-strong);
219
300
  }
220
301
 
221
302
  /* AX.W55 — the `contrast-color()` foreground-ink flip (Chrome 147+/Safari 26+).
@@ -257,14 +338,22 @@
257
338
  --muted-foreground: contrast-color(var(--card));
258
339
  }
259
340
  }
260
- /* The OVERLAY band self-engages the darken UNCONDITIONALLY (it floats over an
261
- UNKNOWN consumer surface), so its ink-flip companion mirrors that — UNCONDITIONAL.
262
- --foreground lifts in lockstep with --muted-foreground (the scope-6 lockstep). */
263
- :where(.glass-floating, .glass-overlay) {
264
- color: contrast-color(var(--card));
265
- --foreground: contrast-color(var(--card));
266
- --muted-foreground: contrast-color(var(--card));
267
- }
341
+ /* BC.W-DIALOG-GLASS / BC.W-ADAPTIVE-RECONCILE (overlay-band arm) — the overlay
342
+ band's `contrast-color()` ink flip is now GATED in the bright bucket above
343
+ (the @container --glass-backdrop:light block already lists `.glass-floating,
344
+ .glass-overlay` alongside the content tiers), NOT here as an UNCONDITIONAL
345
+ flip. The retired unconditional `:where(.glass-floating, .glass-overlay)`
346
+ rule blackened the ink even on a CALM modal over a light page — a translucent
347
+ cream plate forced to pure-black `contrast-color(--card)`, harsh on the cream,
348
+ and `--muted-foreground` flipped to the same so captions lost their muted
349
+ register. Now: over a calm/dark backdrop the modal keeps the WARM-INK
350
+ `--foreground` (legible, not pure-black) + the muted caption register; only a
351
+ modal over a genuinely-bright/busy backdrop flips to the dark contrast ink
352
+ (where the plate ACTUALLY darkens to bright-bucket AA), the `--foreground`/
353
+ `--muted-foreground` lift moving in LOCKSTEP there (the scope-6 lockstep). The
354
+ overlay band STILL self-darkens UNCONDITIONALLY (the tint-strength clamp above,
355
+ it floats over unknown) — only the INK flips in the bright bucket. ONE
356
+ reconciled flip, not two forks (ladder.css stays the single source). */
268
357
  /* BA.W-DARK-MATERIAL scope 7 — the content-tier ink flip is GATED on the bright
269
358
  signal (it moved INTO the @container bucket above), NOT unconditional. Over a calm
270
359
  LIGHT page the content tiers only carry the 4% silhouette floor (still a warm cream
@@ -332,7 +421,16 @@
332
421
  var(--glass-shadow-floating);
333
422
  }
334
423
 
335
- /* Grain noise overlay — reuses paper texture SVG, no extra assets */
424
+ /* Grain noise overlay — reuses paper texture SVG, no extra assets.
425
+ BB.W-LIQUIDHOVER — the disco-grain pop (T8-F6) killed at the COMPOSITION CLASS:
426
+ the `background-image` is ALWAYS PRESENT (decoded once at rest, NEVER toggled to
427
+ `none`), and any STATE-driven grain engagement cross-fades the `opacity` ONLY on
428
+ the thin `--glass-grain-engage-duration` (~120ms linear) clock. A `background-
429
+ image: none → var(--paper-clean-texture)` engage decodes-and-appears in one frame
430
+ (the pop); the opacity cross-fade is a compositor-cheap interpolation with the
431
+ image constant — the only sanctioned grain engage. The `transition` lives HERE so
432
+ a hover/active grain lift (wherever a glass surface raises grain on interaction)
433
+ reads as a smooth fade by construction, not a discrete swap. */
336
434
  .glass-wash::after,
337
435
  .glass-quiet::after,
338
436
  .glass-resting::after,
@@ -342,36 +440,44 @@
342
440
  position: absolute;
343
441
  inset: 0;
344
442
  border-radius: inherit;
345
- background: var(--paper-clean-texture);
443
+ /* The grain texture is the `background-image` longhand (NOT the `background`
444
+ shorthand) so the image stays a STABLE always-present layer the engage
445
+ never re-declares — the structural anti-pop: opacity is the only animated
446
+ channel, the image is never `none → image`. */
447
+ background-image: var(--paper-clean-texture);
346
448
  background-repeat: repeat;
347
449
  background-size: var(--paper-texture-size);
348
450
  opacity: var(--glass-grain-opacity);
451
+ /* The opacity cross-fade engage — plain ~120ms linear direct-write (no spring,
452
+ no overshoot — instant-but-smooth per the ask). Under the PRM / reduced-
453
+ transparency brackets the clock collapses to 0ms (the a11y bracket below). */
454
+ transition: opacity var(--glass-grain-engage-duration, 120ms) linear;
349
455
  pointer-events: none;
350
456
  mix-blend-mode: overlay;
351
457
  }
352
458
 
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);
459
+ /* BB.W-LIQUIDHOVER — the grain engage collapses to INSTANT under reduced motion (a
460
+ grain that cross-fades on hover under reduce is still motion; accessibility is
461
+ absolute). The reduced-transparency / forced-colors brackets already zero
462
+ `--glass-grain-opacity` (a11y-fallback.css), so the grain is inert there; this
463
+ bracket covers the reduced-MOTION case where the grain still paints but must not
464
+ animate. */
465
+ @media (prefers-reduced-motion: reduce) {
466
+ .glass-wash::after,
467
+ .glass-quiet::after,
468
+ .glass-resting::after,
469
+ .glass-floating::after,
470
+ .glass-overlay::after {
471
+ transition: none;
472
+ }
373
473
  }
374
474
 
475
+ /* The unified rim (AW.W22) + the BB.W-GLASS-ACCENT per-INSTANCE chromatic-RIM
476
+ tint group (the rim-ink + --glass-material-rim ring + the per-rung
477
+ --glass-border-accent border, light + dark arms) lives in glass/rim.css
478
+ (carved at BB.W-CARVE4 — the next adjacent @layer components block, the SOLE
479
+ writer of --glass-material-rim/--glass-border-accent). */
480
+
375
481
  .dark .glass-wash::after,
376
482
  .dark .glass-quiet::after,
377
483
  .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
  }