@mkbabb/glass-ui 4.1.0 → 4.2.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 (430) hide show
  1. package/dist/{CardAction-8whJrLWt.js → CardAction-DlVP2evz.js} +58 -54
  2. package/dist/{CommandShortcut-D3yxgHNn.js → CommandShortcut-By-VQcLO.js} +3 -3
  3. package/dist/{ConfiguratorRow-CaP7U3ZA.js → ConfiguratorRow-YMXdINHx.js} +3 -3
  4. package/dist/{ContextMenuContent-B3ZsheLV.js → ContextMenuContent-CMWn6huB.js} +1 -1
  5. package/dist/{ContextMenuSubContent-DDRID3qC.js → ContextMenuSubContent-DvwWCUc0.js} +1 -1
  6. package/dist/{DataTable-Bc9kUtu_.js → DataTable-C4tG3eIJ.js} +4 -4
  7. package/dist/DialogContent-D8U9ZfWS.js +121 -0
  8. package/dist/{DialogScrollContent-TTuovQst.js → DialogScrollContent-BMekN7gq.js} +1 -1
  9. package/dist/{FadingScroll-DLRbH5Xr.js → FadingScroll-P8B30rAD.js} +1 -1
  10. package/dist/{HoverCardContent-Bel1gdLZ.js → HoverCardContent-DAmGYglo.js} +1 -1
  11. package/dist/{HoverPopover-BcIxvyqZ.js → HoverPopover-DYpBOzzF.js} +1 -1
  12. package/dist/{IconChip-DhbdGdFQ.js → IconChip-CQa7XZYc.js} +7 -5
  13. package/dist/{IconTooltip-B0zimd2H.js → IconTooltip-_df8M3xm.js} +1 -1
  14. package/dist/{Input-Cg9DF62r.js → Input-CyU4_hIC.js} +2 -2
  15. package/dist/{MetricBadge-RHdBP72w.js → MetricBadge-DQt_dGah.js} +1 -1
  16. package/dist/{Notification-CphK7AAm.js → Notification-BlSPJhtZ.js} +1 -1
  17. package/dist/{NumberFieldContent-D8cXeyO4.js → NumberFieldContent-Z3VxGu_6.js} +3 -3
  18. package/dist/PagerDots-CYlqVFd4.js +196 -0
  19. package/dist/PaperBackdrop-DYWgrnh8.js +42 -0
  20. package/dist/{PopoverContent-DL7E6vJP.js → PopoverContent-BuKyHZSz.js} +2 -2
  21. package/dist/{Progress-CnqB7gLm.js → Progress-C9SsdwIZ.js} +1 -1
  22. package/dist/{ScrollingText-CTZbA_cG.js → ScrollingText-DY3W1Jfh.js} +2 -2
  23. package/dist/{SelectScrollDownButton-DAKCBEdW.js → SelectScrollDownButton-3mFHX_R-.js} +15 -12
  24. package/dist/{Switch-B8RscmRu.js → Switch-uf-UKPA2.js} +1 -1
  25. package/dist/{Toaster-D9qIHjBI.js → Toaster-ozrsR4mP.js} +1 -1
  26. package/dist/{ToggleGroupItem-BLtr3TJq.js → ToggleGroupItem-BpzaVzNm.js} +4 -4
  27. package/dist/{TooltipProvider-BJ_Y5EGX.js → TooltipProvider-QQVM_80r.js} +1 -1
  28. package/dist/animated-digit.js +2 -2
  29. package/dist/api/index.d.ts +1 -0
  30. package/dist/api/types-extra.d.ts +3 -1
  31. package/dist/api.js +2 -2
  32. package/dist/aurora.js +163 -131
  33. package/dist/badge-Bt14yURi.js +72 -0
  34. package/dist/badge.js +1 -1
  35. package/dist/border-progress.js +1 -1
  36. package/dist/button-D1W9PrzI.js +130 -0
  37. package/dist/button.js +1 -1
  38. package/dist/canvas.js +1 -1
  39. package/dist/card.js +1 -1
  40. package/dist/carousel.js +227 -98
  41. package/dist/chipVariants-BJQ0I2kB.js +18 -0
  42. package/dist/collapsible.js +1 -1
  43. package/dist/color.js +1 -1
  44. package/dist/command.js +1 -1
  45. package/dist/components/custom/aurora/composables/glSetup.d.ts +1 -1
  46. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +1 -1
  47. package/dist/components/custom/aurora/constants/presets.d.ts +29 -0
  48. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -1
  49. package/dist/components/custom/aurora/index.d.ts +1 -1
  50. package/dist/components/custom/concentric/Concentric.vue.d.ts +15 -12
  51. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +8 -3
  52. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +8 -4
  53. package/dist/components/custom/concentric/composables/levelField.d.ts +50 -0
  54. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +7 -4
  55. package/dist/components/custom/concentric/composables/useConcentric.d.ts +3 -3
  56. package/dist/components/custom/concentric/constants.d.ts +62 -41
  57. package/dist/components/custom/concentric/index.d.ts +2 -2
  58. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +2 -2
  59. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -1
  60. package/dist/components/custom/configurator/Configurator.vue.d.ts +23 -2
  61. package/dist/components/custom/configurator/index.d.ts +1 -1
  62. package/dist/components/custom/dock/DockDropdownTrigger.vue.d.ts +4 -3
  63. package/dist/components/custom/dock/DockIconButton.vue.d.ts +10 -0
  64. package/dist/components/custom/dock/DockPopoverTrigger.vue.d.ts +19 -0
  65. package/dist/components/custom/dock/DockStack.vue.d.ts +35 -22
  66. package/dist/components/custom/dock/GlassDock.vue.d.ts +19 -3
  67. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +18 -32
  68. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +76 -145
  69. package/dist/components/custom/dock/composables/index.d.ts +1 -0
  70. package/dist/components/custom/dock/composables/railProjection.d.ts +45 -0
  71. package/dist/components/custom/dock/composables/useDockContextSilhouette.d.ts +192 -0
  72. package/dist/components/custom/dock/composables/useDockFission.d.ts +158 -0
  73. package/dist/components/custom/dock/composables/useDockItemDrag.d.ts +18 -0
  74. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +38 -0
  75. package/dist/components/custom/dock/constants.d.ts +14 -3
  76. package/dist/components/custom/dock/index.d.ts +3 -0
  77. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +21 -0
  78. package/dist/components/custom/dot-flow-field/composables/flowGLProgram.d.ts +8 -0
  79. package/dist/components/custom/dot-flow-field/composables/flowSetupGL.d.ts +9 -0
  80. package/dist/components/custom/dot-flow-field/composables/flowSetupGLFlow.d.ts +12 -0
  81. package/dist/components/custom/dot-flow-field/composables/flowSetupWGPU.d.ts +7 -0
  82. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +28 -2
  83. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -17
  84. package/dist/components/custom/dot-flow-field/constants.d.ts +51 -0
  85. package/dist/components/custom/dot-flow-field/index.d.ts +1 -1
  86. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -1
  87. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +29 -0
  88. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +2 -1
  89. package/dist/components/custom/dot-matrix/composables/uniformBridgeWGPU.d.ts +10 -1
  90. package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +7 -0
  91. package/dist/components/custom/dot-matrix/constants.d.ts +14 -0
  92. package/dist/components/custom/dot-matrix/index.d.ts +1 -1
  93. package/dist/components/custom/dot-matrix/shaders/dot-matrix.glsl.d.ts +2 -2
  94. package/dist/components/custom/dot-matrix/shaders/dot-matrix.wgsl.d.ts +1 -1
  95. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +4 -0
  96. package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +9 -0
  97. package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +11 -0
  98. package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +16 -1
  99. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +22 -1
  100. package/dist/components/custom/fourier-field/constants.d.ts +53 -0
  101. package/dist/components/custom/fourier-field/shaders/fourier-field.glsl.d.ts +1 -1
  102. package/dist/components/custom/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -1
  103. package/dist/components/custom/goo-blob/composables/easing.d.ts +1 -0
  104. package/dist/components/custom/goo-blob/composables/useBlobSatellites.d.ts +1 -0
  105. package/dist/components/custom/goo-blob/constants.d.ts +26 -1
  106. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -1
  107. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -1
  108. package/dist/components/custom/goo-blob/types.d.ts +50 -1
  109. package/dist/components/custom/goo-dot-matrix/composables/gooDotSetup.d.ts +32 -3
  110. package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +14 -4
  111. package/dist/components/custom/goo-dot-matrix/constants.d.ts +55 -16
  112. package/dist/components/custom/goo-dot-matrix/index.d.ts +1 -1
  113. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.frag.d.ts +2 -0
  114. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +1 -0
  115. package/dist/components/custom/goo-filter/GooFilter.vue.d.ts +22 -0
  116. package/dist/components/custom/goo-filter/index.d.ts +1 -0
  117. package/dist/components/custom/handmark/brush.d.ts +17 -17
  118. package/dist/components/custom/handmark/constants.d.ts +28 -8
  119. package/dist/components/custom/handmark/geometry.d.ts +34 -1
  120. package/dist/components/custom/handmark/index.d.ts +1 -1
  121. package/dist/components/custom/icon-chip/types.d.ts +10 -0
  122. package/dist/components/custom/paper-backdrop/PaperBackdrop.vue.d.ts +18 -0
  123. package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +44 -29
  124. package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +2 -0
  125. package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +3 -1
  126. package/dist/components/custom/paper-grid/composables/uniformBridgeWGPU.d.ts +2 -2
  127. package/dist/components/custom/paper-grid/constants.d.ts +44 -6
  128. package/dist/components/custom/paper-grid/index.d.ts +2 -2
  129. package/dist/components/custom/paper-grid/shaders/paper-grid.glsl.d.ts +1 -1
  130. package/dist/components/custom/paper-grid/shaders/paper-grid.wgsl.d.ts +1 -1
  131. package/dist/components/custom/selectable-chip/chipVariants.d.ts +39 -0
  132. package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +12 -20
  133. package/dist/components/custom/tabs/constants.d.ts +16 -8
  134. package/dist/components/custom/timeline/ScrubberTimeline.vue.d.ts +16 -0
  135. package/dist/components/custom/timeline/geometry.d.ts +0 -8
  136. package/dist/components/custom/toggle-chip/index.d.ts +15 -4
  137. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +12 -10
  138. package/dist/components/ui/_shared/useSurfaceAxis.d.ts +17 -3
  139. package/dist/components/ui/badge/Badge.vue.d.ts +14 -0
  140. package/dist/components/ui/badge/index.d.ts +1 -0
  141. package/dist/components/ui/button/Button.vue.d.ts +1 -0
  142. package/dist/components/ui/card/Card.vue.d.ts +1 -1
  143. package/dist/components/ui/card/ScrollCard.vue.d.ts +1 -1
  144. package/dist/components/ui/carousel/CarouselContent.vue.d.ts +2 -4
  145. package/dist/components/ui/dialog/DialogContent.vue.d.ts +9 -0
  146. package/dist/components/ui/drawer/Drawer.vue.d.ts +33 -14
  147. package/dist/components/ui/drawer/constants.d.ts +8 -6
  148. package/dist/components/ui/drawer/index.d.ts +12 -2
  149. package/dist/components/ui/select/SelectContent.vue.d.ts +9 -0
  150. package/dist/components/ui/slider/Slider.vue.d.ts +9 -0
  151. package/dist/composables/dom/index.d.ts +1 -0
  152. package/dist/composables/dom/useDragVelocity.d.ts +46 -0
  153. package/dist/composables/glass/wave/index.d.ts +4 -0
  154. package/dist/composables/glass/wave/waveField.d.ts +115 -0
  155. package/dist/composables/glass/wave/waveField.glsl.d.ts +1 -0
  156. package/dist/composables/glass/wave/waveField.wgsl.d.ts +1 -0
  157. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +95 -2
  158. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +40 -2
  159. package/dist/composables/glass/webgpu/index.d.ts +1 -0
  160. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +37 -0
  161. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +49 -2
  162. package/dist/composables/glass/webgpu/webgpuDevice.d.ts +1 -1
  163. package/dist/composables/motion/core/index.d.ts +4 -0
  164. package/dist/composables/motion/core/useHaptic.d.ts +48 -0
  165. package/dist/composables/motion/core/writeVelocityWeight.d.ts +31 -0
  166. package/dist/composables/motion/index.d.ts +2 -0
  167. package/dist/composables/motion/springPresets.d.ts +16 -17
  168. package/dist/composables/motion/suite.d.ts +2 -2
  169. package/dist/composables/motion/useBloomUp.d.ts +97 -0
  170. package/dist/composables/motion/useCelebrationBurst.d.ts +50 -0
  171. package/dist/composables/motion/useDockCtaReceive.d.ts +10 -28
  172. package/dist/composables/motion/useGooMorph.d.ts +72 -0
  173. package/dist/composables/motion/useLiquidFlex.d.ts +18 -0
  174. package/dist/composables/motion/useLiquidMorph.d.ts +108 -0
  175. package/dist/composables/motion/useLiquidPress.d.ts +12 -0
  176. package/dist/composables/motion/useLiquidReveal.d.ts +7 -4
  177. package/dist/composables/motion/useMorphField.d.ts +157 -0
  178. package/dist/composables/motion/useScrollPin.d.ts +49 -0
  179. package/dist/composables/motion/useScrollScene.d.ts +67 -0
  180. package/dist/concentric.js +532 -563
  181. package/dist/configurator.js +2 -2
  182. package/dist/confirm-dialog.js +3 -3
  183. package/dist/constellation.js +4 -4
  184. package/dist/context-menu.js +2 -2
  185. package/dist/controls.js +2 -2
  186. package/dist/createCanvasLifecycle-CuCrGRfq.js +173 -0
  187. package/dist/dark.js +1 -1
  188. package/dist/data-table.js +1 -1
  189. package/dist/deck.js +1 -1
  190. package/dist/dialog.js +3 -3
  191. package/dist/dock.js +1163 -618
  192. package/dist/dockContext-gFVS2gMg.js +18 -0
  193. package/dist/dom.js +7 -6
  194. package/dist/dot-flow-field.js +1114 -523
  195. package/dist/dot-matrix.js +348 -204
  196. package/dist/drawer.js +106 -96
  197. package/dist/{dropdown-menu-aJmV5SqE.js → dropdown-menu-CCfcCQ68.js} +3 -3
  198. package/dist/dropdown-menu.js +1 -1
  199. package/dist/easing.js +3 -3
  200. package/dist/expandable-container.js +2 -2
  201. package/dist/fading-scroll.js +1 -1
  202. package/dist/forms.js +6 -6
  203. package/dist/fourier-field.js +441 -197
  204. package/dist/fourier-math.js +1 -1
  205. package/dist/glass-panel.js +2 -2
  206. package/dist/glass-ui.css +1 -1
  207. package/dist/glass-ui.js +139 -135
  208. package/dist/goo-blob.js +11 -9
  209. package/dist/goo-dot-matrix.js +418 -198
  210. package/dist/handmark.js +137 -94
  211. package/dist/header-ribbon.js +1 -1
  212. package/dist/hover-card.js +1 -1
  213. package/dist/hover-popover.js +1 -1
  214. package/dist/icon-chip.js +1 -1
  215. package/dist/icon-tooltip.js +1 -1
  216. package/dist/index.d.ts +3 -0
  217. package/dist/instrument-chassis.js +1 -1
  218. package/dist/keyboard.js +1 -1
  219. package/dist/label.js +1 -1
  220. package/dist/labeled-field.js +7 -7
  221. package/dist/metric-badge.js +1 -1
  222. package/dist/metric-cell.js +1 -1
  223. package/dist/metric-stack.js +1 -1
  224. package/dist/motion-core.js +42 -39
  225. package/dist/motion-curves.js +20 -14
  226. package/dist/motion.js +226 -26
  227. package/dist/notification.js +1 -1
  228. package/dist/number-field.js +1 -1
  229. package/dist/pager-dots.js +1 -1
  230. package/dist/paper-backdrop.js +1 -1
  231. package/dist/paper-grid.js +315 -342
  232. package/dist/paperGrid-CXCSMbZ1.js +191 -0
  233. package/dist/popover.js +1 -1
  234. package/dist/{presets-CvOUqtdY.js → presets-QvYgnFIZ.js} +13 -12
  235. package/dist/progress.js +1 -1
  236. package/dist/pulse.js +1 -1
  237. package/dist/reactive.js +2 -2
  238. package/dist/{resolveCanvasColor-yPyIpJt9.js → resolveCanvasColor-DsSJk06I.js} +5 -5
  239. package/dist/scrolling-text.js +1 -1
  240. package/dist/search.js +7 -7
  241. package/dist/select.js +3 -3
  242. package/dist/selectable-chip.js +18 -35
  243. package/dist/separator.js +1 -1
  244. package/dist/{sheet-B2flBfLH.js → sheet-DUCIoOe0.js} +3 -3
  245. package/dist/sheet.js +1 -1
  246. package/dist/sidebar.js +1 -1
  247. package/dist/slider-CcICPe3u.js +149 -0
  248. package/dist/slider.js +1 -1
  249. package/dist/sortable-list.js +3 -3
  250. package/dist/{spectrum-walk-BVzA7Biz.js → spectrum-walk-cBNSx_zm.js} +1 -1
  251. package/dist/springPresets-DfoQ6XRY.js +64 -0
  252. package/dist/stacked-icons.js +54 -39
  253. package/dist/styles/cards.css +202 -2
  254. package/dist/styles/components.css +1 -3
  255. package/dist/styles/configurator.css +172 -7
  256. package/dist/styles/critical-partition.mjs +35 -2
  257. package/dist/styles/deferred.css +2 -0
  258. package/dist/styles/dock/adaptive-legibility.css +119 -0
  259. package/dist/styles/dock/density.css +18 -10
  260. package/dist/styles/dock/fission-bridge.css +552 -0
  261. package/dist/styles/dock/layers.css +88 -124
  262. package/dist/styles/dock/morph-bridge.css +15 -2
  263. package/dist/styles/dock/morph.css +45 -114
  264. package/dist/styles/dock/shape.css +137 -11
  265. package/dist/styles/dock/shell.css +1 -3
  266. package/dist/styles/dock/stack-rail.css +95 -7
  267. package/dist/styles/dock-controls/icon-button.css +34 -2
  268. package/dist/styles/dock-controls/triggers.css +23 -1
  269. package/dist/styles/dock-controls.css +18 -0
  270. package/dist/styles/dock.css +16 -1
  271. package/dist/styles/drawer.css +166 -0
  272. package/dist/styles/glass/glass-atom.css +244 -0
  273. package/dist/styles/glass/glass-capsule.css +143 -0
  274. package/dist/styles/glass/glass-chip.css +215 -0
  275. package/dist/styles/glass/liquid-enter.css +252 -0
  276. package/dist/styles/glass/liquid-morph.css +850 -0
  277. package/dist/styles/glass/material.css +70 -1
  278. package/dist/styles/glass/reveal.css +22 -2
  279. package/dist/styles/glass/rim.css +13 -1
  280. package/dist/styles/glass/surfaces.css +18 -8
  281. package/dist/styles/glass.css +11 -0
  282. package/dist/styles/icon-chip.css +45 -0
  283. package/dist/styles/index.css +11 -0
  284. package/dist/styles/jubilance.css +65 -0
  285. package/dist/styles/motion/morph-field.css +229 -0
  286. package/dist/styles/paper.css +230 -14
  287. package/dist/styles/scroll-choreography.css +135 -78
  288. package/dist/styles/segmented-tabs.css +85 -51
  289. package/dist/styles/select.css +151 -0
  290. package/dist/styles/tokens/color-radius.css +1 -1
  291. package/dist/styles/tokens/dark-arm.css +57 -8
  292. package/dist/styles/tokens/glass-deep.css +8 -4
  293. package/dist/styles/tokens/glass-fx.css +80 -2
  294. package/dist/styles/tokens/glass.css +140 -8
  295. package/dist/styles/tokens/light-dark.css +2 -2
  296. package/dist/styles/tokens/property-regs.css +144 -0
  297. package/dist/styles/tokens/scale-paper.css +20 -8
  298. package/dist/styles/tokens/scheme-motion.css +92 -157
  299. package/dist/styles/tokens/scheme-spring.css +239 -0
  300. package/dist/styles/tokens/scroll-tokens.css +15 -15
  301. package/dist/styles/tokens/shadow.css +73 -13
  302. package/dist/styles/tokens.css +9 -2
  303. package/dist/styles/utilities/btn.css +70 -0
  304. package/dist/switch.js +1 -1
  305. package/dist/tabs.js +198 -181
  306. package/dist/timeline.js +241 -206
  307. package/dist/toast.js +1 -1
  308. package/dist/toggle-chip.js +14 -41
  309. package/dist/toggle-group.js +1 -1
  310. package/dist/tooltip.js +1 -1
  311. package/dist/typewriter.js +1 -1
  312. package/dist/{uniformBridgeWGPU-CtAKl45L.js → uniformBridgeWGPU-BCse1SHU.js} +191 -127
  313. package/dist/{useAnimatedNumber-CLrxicG9.js → useAnimatedNumber-BntskVdQ.js} +1 -1
  314. package/dist/{useConfiguratorState-4xblKfwd.js → useConfiguratorState-22BcULzF.js} +37 -35
  315. package/dist/useDockCtaReceive-DX7RDb6_.js +88 -0
  316. package/dist/{useDragMorph-BUgAC-zK.js → useDragMorph-DGLSewwB.js} +2 -2
  317. package/dist/useDragVelocity-CjcfX3dA.js +57 -0
  318. package/dist/useGooMorph-Cs13NgYL.js +104 -0
  319. package/dist/useGpuSubstrate-Ceet70xq.js +347 -0
  320. package/dist/{useViewTransition-CUI1nAgn.js → useHaptic-CPz5BT9I.js} +40 -1
  321. package/dist/{useLiquidFlex-UmA6LMZu.js → useLiquidFlex-Cc6PjVJD.js} +8 -3
  322. package/dist/useLiquidPress-CtOQ8Z0_.js +43 -0
  323. package/dist/useMorphField-ogBM7ubT.js +141 -0
  324. package/dist/{useScrollChrome-D66AVP7C.js → useScrollChrome-JuImi1DM.js} +2 -2
  325. package/dist/{useSpringMount-BWDnKIwh.js → useSpringMount-DFxtzmkR.js} +1 -1
  326. package/dist/{useSpringPress-B1-Czp-V.js → useSpringPress-VM9RgVq3.js} +1 -1
  327. package/dist/{useSurfaceAxis-g0NloYEF.js → useSurfaceAxis-Ci7Dnaw2.js} +1 -1
  328. package/dist/{useTouchGate-CBZTD4SD.js → useTouchGate-B1Lf9XqN.js} +1 -1
  329. package/dist/virtual.js +1 -1
  330. package/dist/watercolor-dot.js +16 -26
  331. package/dist/writeVelocityWeight-Bh83xZfs.js +19 -0
  332. package/package.json +14 -3
  333. package/src/styles/cards.css +202 -2
  334. package/src/styles/configurator.css +172 -7
  335. package/src/styles/critical-partition.mjs +35 -2
  336. package/src/styles/dock/adaptive-legibility.css +119 -0
  337. package/src/styles/dock/density.css +18 -10
  338. package/src/styles/dock/fission-bridge.css +552 -0
  339. package/src/styles/dock/layers.css +88 -124
  340. package/src/styles/dock/morph-bridge.css +15 -2
  341. package/src/styles/dock/morph.css +45 -114
  342. package/src/styles/dock/shape.css +137 -11
  343. package/src/styles/dock/shell.css +1 -3
  344. package/src/styles/dock/stack-rail.css +95 -7
  345. package/src/styles/dock-controls/icon-button.css +34 -2
  346. package/src/styles/dock-controls/triggers.css +23 -1
  347. package/src/styles/dock-controls.css +18 -0
  348. package/src/styles/dock.css +16 -1
  349. package/src/styles/drawer.css +164 -0
  350. package/src/styles/glass/glass-atom.css +244 -0
  351. package/src/styles/glass/glass-capsule.css +143 -0
  352. package/src/styles/glass/glass-chip.css +215 -0
  353. package/src/styles/glass/liquid-enter.css +252 -0
  354. package/src/styles/glass/liquid-morph.css +850 -0
  355. package/src/styles/glass/material.css +70 -1
  356. package/src/styles/glass/reveal.css +22 -2
  357. package/src/styles/glass/rim.css +13 -1
  358. package/src/styles/glass/surfaces.css +18 -8
  359. package/src/styles/glass.css +11 -0
  360. package/src/styles/icon-chip.css +45 -0
  361. package/src/styles/index.css +11 -0
  362. package/src/styles/jubilance.css +65 -0
  363. package/src/styles/motion/morph-field.css +229 -0
  364. package/src/styles/paper.css +230 -14
  365. package/src/styles/scroll-choreography.css +135 -78
  366. package/src/styles/segmented-tabs.css +85 -47
  367. package/src/styles/select.css +151 -0
  368. package/src/styles/tokens/color-radius.css +1 -1
  369. package/src/styles/tokens/dark-arm.css +57 -8
  370. package/src/styles/tokens/glass-deep.css +8 -4
  371. package/src/styles/tokens/glass-fx.css +80 -2
  372. package/src/styles/tokens/glass.css +140 -8
  373. package/src/styles/tokens/light-dark.css +2 -2
  374. package/src/styles/tokens/property-regs.css +144 -0
  375. package/src/styles/tokens/scale-paper.css +20 -8
  376. package/src/styles/tokens/scheme-motion.css +92 -157
  377. package/src/styles/tokens/scheme-spring.css +239 -0
  378. package/src/styles/tokens/scroll-tokens.css +15 -15
  379. package/src/styles/tokens/shadow.css +73 -13
  380. package/src/styles/tokens.css +9 -2
  381. package/src/styles/utilities/btn.css +70 -0
  382. package/dist/DialogContent-6JtTB5x2.js +0 -106
  383. package/dist/PagerDots-Cjx96la-.js +0 -98
  384. package/dist/PaperBackdrop-CqwjnfLv.js +0 -31
  385. package/dist/badge-D9XWW4GT.js +0 -53
  386. package/dist/button-5dY1Dvhd.js +0 -125
  387. package/dist/components/custom/concentric/composables/ringField.d.ts +0 -85
  388. package/dist/createCanvasLifecycle-Gh45Ce-p.js +0 -93
  389. package/dist/dockContext-BNfyPLe9.js +0 -17
  390. package/dist/slider-2A0rPn79.js +0 -142
  391. package/dist/springPresets-Ce7OYCm9.js +0 -46
  392. package/dist/useDockCtaReceive-DfFkmgL1.js +0 -82
  393. package/dist/useGpuSubstrate-4pTcp6mX.js +0 -294
  394. package/dist/useLiquidPress-BooG97RY.js +0 -39
  395. /package/dist/{CollapsibleContent-68dEXIAl.js → CollapsibleContent-D7UNsXQr.js} +0 -0
  396. /package/dist/{DialogFooter-9phqcRIS.js → DialogFooter-DoLy0ewI.js} +0 -0
  397. /package/dist/{InstrumentChassis-CxsHSyMj.js → InstrumentChassis-UUJX0-mW.js} +0 -0
  398. /package/dist/{Label-C2ejNWeC.js → Label-B_HPqi_q.js} +0 -0
  399. /package/dist/{ModalOverlay-D1VrWyoi.js → ModalOverlay-DfAf7o15.js} +0 -0
  400. /package/dist/{SelectGroup-BFiod7X2.js → SelectGroup-Dcczq44n.js} +0 -0
  401. /package/dist/{SelectSeparator-C2UGOkXF.js → SelectSeparator-CNRGG7Ew.js} +0 -0
  402. /package/dist/{Separator-DQcwC2TR.js → Separator-Cf9-JFgi.js} +0 -0
  403. /package/dist/{_plugin-vue_export-helper-C1je1s0u.js → _plugin-vue_export-helper-gLzyemvl.js} +0 -0
  404. /package/dist/{color-Cs0-oxYL.js → color-B9jZdhJX.js} +0 -0
  405. /package/dist/{compile-nZ1xVYTp.js → compile-INR_tPk_.js} +0 -0
  406. /package/dist/{constants--C2DkLW8.js → constants-BWj7DkMn.js} +0 -0
  407. /package/dist/{createContext-CpBNTRMI.js → createContext-Cd23P9j0.js} +0 -0
  408. /package/dist/{dotMatrixField-D_x9_1qq.js → dotMatrixField-CRO0ZFk4.js} +0 -0
  409. /package/dist/{flow.glsl-B2P7e0MT.js → flow.glsl-DqEGRpl4.js} +0 -0
  410. /package/dist/{math-Eb0w3LqU.js → math-5RcIgCB4.js} +0 -0
  411. /package/dist/{menuItemVariants-D8VNHq22.js → menuItemVariants-DAXquKja.js} +0 -0
  412. /package/dist/{prng-B-d9eYX8.js → prng-B5tIXTtj.js} +0 -0
  413. /package/dist/{procedural-color.wgsl-m7Zgv35j.js → procedural-color.wgsl-C1Y5PkM6.js} +0 -0
  414. /package/dist/{scrollReader-DI1NWxUw.js → scrollReader-rc3Ns_NM.js} +0 -0
  415. /package/dist/{useControlSize-SH1UmJCi.js → useControlSize-DAZ062x7.js} +0 -0
  416. /package/dist/{useFuzzySearch-DIhcYtcw.js → useFuzzySearch-0fTYOhS4.js} +0 -0
  417. /package/dist/{useGlobalDark-CmjB9E32.js → useGlobalDark-B4HO9LXG.js} +0 -0
  418. /package/dist/{useIntersectionPause-Dbozzjgm.js → useIntersectionPause-DO8Vl4gs.js} +0 -0
  419. /package/dist/{useInterval-CNdua40W.js → useInterval-BVUI-sez.js} +0 -0
  420. /package/dist/{useKeyboardShortcuts-BPRp33Im.js → useKeyboardShortcuts-BEut54Tk.js} +0 -0
  421. /package/dist/{usePointerVelocityField-QLsy3_kv.js → usePointerVelocityField-BrkqZFhj.js} +0 -0
  422. /package/dist/{useResizeObserver-Bpoi7tRE.js → useResizeObserver-DdEn3v2f.js} +0 -0
  423. /package/dist/{useResolveTokenColor-vAylyR0x.js → useResolveTokenColor-ChOnCckA.js} +0 -0
  424. /package/dist/{useScrollProgress-c3yxmH6a.js → useScrollProgress-A0M6qRl7.js} +0 -0
  425. /package/dist/{useSortable-BVqlJRBR.js → useSortable-DQV_UNDw.js} +0 -0
  426. /package/dist/{useTextHighlight-NmBM5V_4.js → useTextHighlight-Bma3UlKA.js} +0 -0
  427. /package/dist/{useTimer-BHJOKr35.js → useTimer-BBLGPXR8.js} +0 -0
  428. /package/dist/{useUserInvalidAria-y5namzeE.js → useUserInvalidAria-EmmwWPOl.js} +0 -0
  429. /package/dist/{useViewportReady-anbac3m6.js → useViewportReady-C9pYnn7K.js} +0 -0
  430. /package/dist/{vReveal-D9k0jADx.js → vReveal-CT1KtwZA.js} +0 -0
@@ -55,7 +55,22 @@
55
55
  tier's own shadow recipe. The `::after` grain overlay already claims the
56
56
  five rungs' `::after`; the rim is folded INTO that same overlay's
57
57
  box-shadow below (the grain `::after` gets the rim inset ring) so no
58
- pseudo-element collides. */
58
+ pseudo-element collides.
59
+
60
+ ── BE.W5 — `--glass-edge-light` IS A WHOLE BOX-SHADOW LAYER, NEVER A COLOR ──
61
+ `--glass-edge-light` resolves to a COMPLETE box-shadow layer (the token is
62
+ `inset 0 0 0 0.75px hsl(0 0% 100% / 0.18)` — geometry + color, glass-fx.css:70;
63
+ the `.dark` arm re-points it to `--glass-edge-light-dark`). It is consumed as a
64
+ WHOLE LAYER inside a `box-shadow:` list — `box-shadow: var(--glass-edge-light),
65
+ <other layers>` (surfaces.css:203/371, stack-rail.css:176). The MISUSE is
66
+ NESTING it as a COLOR inside another shadow — `inset 0 0 0 1px
67
+ var(--glass-edge-light)` — which expands to `inset 0 0 0 1px inset 0 0 0 0.75px
68
+ hsl(…)`: an INVALID shadow value → the WHOLE `box-shadow` declaration DROPS →
69
+ NO rim, NO drop-shadow (worst in dark, where the rim is the silhouette device).
70
+ THE RULE: read `--glass-edge-light` as a whole `box-shadow` layer, NEVER nested
71
+ inside another shadow's geometry. To compose the rim's COLOR (e.g. accent-tint
72
+ it) use `--glass-rim-ink`/`--glass-material-rim` (rim.css — the COLOR seam),
73
+ NOT `--glass-edge-light` (the LAYER token). */
59
74
 
60
75
  /* (a)+(c) The moving-specular `::before` catch-light — the iOS-26
61
76
  illuminate-from-within behaviour. A masked radial-gradient glow rides the
@@ -298,4 +313,58 @@
298
313
  press-depth animation is the deliberate tradeoff. The press squish + gleam lift on
299
314
  the SAME `--glass-btn-press-t` drive (material gleam, above) carry the press read. */
300
315
 
316
+ /* ── BE.W-CLEAR-VARIANT — the Apple-Clear `surface="clear"` decoration + the
317
+ MANDATORY legibility scrim ──────────────────────────────────────────────────
318
+ The 4th surface-axis member (`useSurfaceAxis.ts` maps `clear → glass-clear`).
319
+ A `surface="clear"` surface paints the maximally-translucent `--glass-bg-clear`
320
+ (0.58 — the clearest rung the library ships, the album grid bleeds through) AND
321
+ a MANDATORY legibility scrim IN THE SAME SEAM — a `.glass-clear` cannot exist
322
+ without it (the Apple Clear contract: near-transparent → the text needs a scrim
323
+ floor). The scrim DIMS THE BACKDROP (`color-mix(in srgb, var(--background) N%,
324
+ transparent)` — the A5-1 modal-scrim idiom, painted BEHIND the translucent fill
325
+ within the box, see the two-layer-background note below), DISTINCT from the W55
326
+ `--glass-tint-*` PLATE-darken axis (the two legibility axes stay disjoint: the
327
+ scrim dims the backdrop, the W55 tint darkens the plate). The scrim strength
328
+ DERIVES from the sampled
329
+ `--glass-backdrop-luma` (useGlassBackdropLuminance's existing write) so it dims
330
+ MORE over a bright album grid (luma→1) and relaxes over a dark one (luma→0) —
331
+ the dynamic legibility that betters Apple's fixed scrim. The `0.5` fallback is
332
+ the safe mid-scrim when no observer is wired. The plate fill rides the SAME
333
+ oklab-tint seam so the W55 darken reaches it; the see-through frost is the
334
+ cross-engine FLOOR (pure opacity + backdrop-filter, no `url()` — Safari paints
335
+ it via the build-time -webkit- prefix pass). The scrim is a STATIC paint (no
336
+ layout, no animation — `proof:no-layout-animation` GREEN by construction).
337
+
338
+ THE SCRIM IS A SECOND BACKGROUND LAYER, NOT A PSEUDO. The glass family already
339
+ claims BOTH pseudos on every base rung — `::before` (the moving specular core)
340
+ AND `::after` (the grain overlay, ladder.css). `surface="clear"` composes ON a
341
+ base tier (`glass-floating glass-clear`), so its `::before`/`::after` are taken;
342
+ a scrim pseudo would CLOBBER the specular or grain. The mandatory scrim is
343
+ therefore the FIRST of two comma-separated `background` LAYERS — painted FRONT
344
+ (the translucent glass fill) over BACK (the `--background` dim) within the box,
345
+ so the dim sits between the backdrop-filtered backdrop and the content (a child
346
+ paints above both). The fill stays translucent so the backdrop still reads
347
+ THROUGH the dim — see-through AND legible, one element, no pseudo collision. */
348
+ [data-surface="clear"],
349
+ .glass-clear {
350
+ /* The dynamic scrim strength — DERIVED from the sampled backdrop luma
351
+ (dims MORE over a bright grid). `0.5` is the safe mid-scrim fallback. */
352
+ --glass-clear-scrim-strength: calc(
353
+ var(--glass-backdrop-luma, 0.5) * 40%
354
+ );
355
+ background:
356
+ color-mix(
357
+ in oklab,
358
+ var(--glass-bg-clear),
359
+ var(--glass-tint-source) var(--glass-tint-strength)
360
+ ),
361
+ color-mix(
362
+ in srgb,
363
+ var(--background) var(--glass-clear-scrim-strength),
364
+ transparent
365
+ );
366
+ backdrop-filter: var(--glass-blur-floating);
367
+ position: relative;
368
+ }
369
+
301
370
  }
@@ -45,6 +45,19 @@
45
45
  clocks read the shared spring tokens (read-only — the W-GLASS-CAL fence). */
46
46
  --glass-reveal-blur: 4px;
47
47
  --glass-reveal-slide: 0.5rem;
48
+ /* The materialize squish — the surface blooms FROM 0.88 (a clear squish-grow,
49
+ the Control-Center round-toggle reference), not the near-no-op 0.95. The
50
+ authority lives here; the closed/exit leg reads it with a 0.88 fallback.
51
+ BD.W-ANIM-IOS27-TUNE */
52
+ --glass-reveal-enter-scale: 0.88;
53
+ /* The SQUISH channel — the same volume-preserving born-wide+flat squish the
54
+ universal `.liquid-enter` mount recipe speaks (ONE grammar, no fork). The
55
+ closed leg rides it on the `scale:` LONGHAND (vol-preserving sx·sy ≈ 1),
56
+ settling to `1 1` at open; the bloom-from-small grace is the coupled
57
+ scale-down (--glass-reveal-enter-scale) × this squish, never a separate
58
+ transform: shorthand (which would clobber a centering transform). */
59
+ --lq-stretch-x: 1.06;
60
+ --lq-stretch-y: 0.945;
48
61
  transform-origin: var(--reka-popper-transform-origin, center);
49
62
  /* The coupled transition list — the SPATIAL legs (scale/translate) on the
50
63
  snappy spring's OWN settle clock, the EFFECTS legs (opacity/filter blur-
@@ -67,7 +80,7 @@
67
80
  from its edge) — the BASE never writes `translate`, so a center-anchored Dialog
68
81
  keeping its `-translate-x-1/2 -translate-y-1/2` centering is NEVER clobbered. */
69
82
  .glass-reveal[data-state="open"] {
70
- scale: 1;
83
+ scale: 1 1;
71
84
  opacity: 1;
72
85
  filter: blur(0);
73
86
  }
@@ -77,7 +90,14 @@
77
90
  past gone, the §6/W-MOTION-CANON P2 doctrine); NO `--spring-*` token on the
78
91
  exit. The exit is faster + un-sprung — the surface recedes cleanly. */
79
92
  .glass-reveal[data-state="closed"] {
80
- scale: var(--glass-reveal-enter-scale, 0.95);
93
+ /* Born wide+flat AND bloom-from-small: the SQUISH (--lq-stretch-x/-y,
94
+ vol-preserving) couples with the bloom-from-0.88 on the SAME `scale:`
95
+ LONGHAND (two factors, ONE longhand — never a second transform: shorthand
96
+ that would clobber a Dialog's centering translate). The deform stays
97
+ anisotropic (the long axis swells AS it blooms, the short pinches);
98
+ it settles to `1 1` at open. */
99
+ scale: calc(var(--glass-reveal-enter-scale, 0.88) * var(--lq-stretch-x, 1.06))
100
+ calc(var(--glass-reveal-enter-scale, 0.88) * var(--lq-stretch-y, 0.945));
81
101
  opacity: 0;
82
102
  filter: blur(var(--glass-reveal-blur));
83
103
  transition-timing-function: var(--ease-out);
@@ -77,9 +77,21 @@
77
77
  `--glass-rim-top`. `--glass-rim-ink` is the resolved top-ink stop (kept as
78
78
  the accent-compose seam — the `.dark` arm below re-points it). */
79
79
  --glass-rim-ink: hsl(0 0% 100% / 0.30);
80
+ /* BD.W-GLASS-KEY-EDGE — the LIT catch is now KEY-DRIVEN: the accent-mixed
81
+ catch-light rides the key-facing edges (`--glass-key-lit-y` top +
82
+ `--glass-key-lit-x` side, the upper-right cel key) so the accent reads on
83
+ the LIT edge that agrees with the cartoon cast's light source — not a flat
84
+ top-only halo. The side stop carries the same accent-mixed ink at the rim's
85
+ own 0.18-class weight (via `--glass-rim-ink`-derived mix). The SHADE half is
86
+ the key-driven `--glass-rim-bottom` two-stop under-shadow. At 0% accent
87
+ strength the mix resolves byte-compatible to the bare key-driven rim (the W2
88
+ no-op floor). The moving-specular `::before` catch-light + the grain
89
+ `::after` are UNTOUCHED (both occupied). */
80
90
  --glass-material-rim:
81
- inset 0 1px 0
91
+ inset 0 var(--glass-key-lit-y) 0
82
92
  color-mix(in oklab, var(--glass-rim-ink), var(--glass-accent) var(--glass-accent-strength)),
93
+ inset var(--glass-key-lit-x) 0 0
94
+ color-mix(in oklab, hsl(0 0% 100% / 0.18), var(--glass-accent) var(--glass-accent-strength)),
83
95
  var(--glass-rim-bottom);
84
96
  /* the per-rung border ink, accent-composed. `--glass-border-rung` is set by
85
97
  each rung at its own declaration (it reads the rung's `--glass-border-*`
@@ -279,7 +279,7 @@
279
279
  seam — over a bright field the pill darkens-to-legible, over a calm field it
280
280
  stays warm-cream/near-white (the iOS adaptive register reaching the pill).
281
281
  ZERO-delta at the `--glass-tint-strength: 0%`/floor default. */
282
- :where(.btn-glass, .segmented-indicator) {
282
+ :where(.btn-glass, .segmented-indicator, .glass-capsule) {
283
283
  --glass-bg-floating-tinted: color-mix(
284
284
  in oklab,
285
285
  var(--glass-bg-floating),
@@ -292,18 +292,13 @@
292
292
  QUIETER glass register, prominence-by-tint) reaches the W55 darken on its lit
293
293
  fill too — ZERO new compositing axis, the SAME seam the resting/floating pair
294
294
  composes. The floating rung is minted on the shared `:where()` seam ABOVE
295
- (the tab pill reads it too); quiet + resting stay button-scoped (the
295
+ (the tab pill reads it too); the quiet rung stays button-scoped (the
296
296
  hover/active fill register the segmented pill does not engage). */
297
297
  --glass-bg-quiet-tinted: color-mix(
298
298
  in oklab,
299
299
  var(--glass-bg-quiet),
300
300
  var(--glass-tint-source) var(--glass-tint-strength)
301
301
  );
302
- --glass-bg-resting-tinted: color-mix(
303
- in oklab,
304
- var(--glass-bg-resting),
305
- var(--glass-tint-source) var(--glass-tint-strength)
306
- );
307
302
  }
308
303
 
309
304
  /* BB.W-BUTTON-GLASS (e) — the optional refraction-edge opt-in. CONSUMES the
@@ -364,7 +359,22 @@
364
359
  padding-inline: 0.625rem;
365
360
  padding-block: 0.3125rem;
366
361
  border-radius: var(--radius-pill);
367
- background: var(--glass-bg-floating);
362
+ /* BD.W-GOO-CAROUSEL-DECK — the element-level oklab TINT seam (NOT the raw
363
+ pre-substituted `--glass-bg-floating` :root token — the gray-hole
364
+ substitution-trap). At the `--glass-tint-strength: 0%` default this is the
365
+ no-op floor (`color-mix(in oklab, X, src 0%) ≡ X` — byte-identical pager pixels
366
+ over a flat page); over a declared/sampled BRIGHT carousel image
367
+ (`@container style(--glass-backdrop: light)`) the pill darkens-toward-ink for a
368
+ real silhouette (the W55 ≤24% clamp keeps it translucent); under `.dark` the
369
+ W-DARK-MATERIAL tint arm LIFTS it toward luminous warm-dark, never a charcoal
370
+ slab. `in oklab` is the glass-tint perceptual family (the in-srgb
371
+ `--surface-tint-*` brand fence is untouched). The dock `--glass-bg-dock`
372
+ self-re-point precedent applied to the pager chassis. */
373
+ background: color-mix(
374
+ in oklab,
375
+ var(--glass-bg-floating),
376
+ var(--glass-tint-source) var(--glass-tint-strength)
377
+ );
368
378
  backdrop-filter: var(--glass-blur-floating);
369
379
  -webkit-backdrop-filter: var(--glass-blur-floating);
370
380
  box-shadow:
@@ -58,8 +58,19 @@
58
58
  AFTER surfaces.css and BEFORE surface-axis.css (same @layer components, same
59
59
  source order — the dist is byte-isomorphic). */
60
60
  @import "./glass/control-surfaces.css";
61
+ /* BD.W-TAB-IOS-CAPSULE — the ONE shared glassy register (`.glass-capsule` +
62
+ `.glass-capsule-track` + `.glass-capsule-hover`) the tabs/dock-tab/buttons/chips/
63
+ cards consumers compose. @import-ed AFTER surfaces.css (so the `--glass-bg-floating-
64
+ tinted` seam + the `--glass-rim-*`/`--glass-shadow-floating` tokens resolve) and
65
+ BEFORE the consuming recipes (segmented-tabs.css et al, imported by index.css). */
66
+ @import "./glass/glass-capsule.css";
61
67
  @import "./glass/surface-axis.css";
62
68
  @import "./glass/reveal.css";
69
+ /* BD.W-LIQUID-ENTRANCE-GENERAL — the UNIVERSAL `.liquid-enter` mount recipe
70
+ (the four coupled channels as @keyframes-on-mount + the `.is-cel` cel-slam + the
71
+ lagging cartoon cast). @import-ed AFTER reveal.css (it extends the same
72
+ `--lq-enter-*` channel substrate the `.glass-reveal` TRANSITION floor speaks). */
73
+ @import "./glass/liquid-enter.css";
63
74
  @import "./glass/deep.css";
64
75
  @import "./glass/progress-rail.css";
65
76
  @import "./glass/squircle.css";
@@ -27,6 +27,22 @@
27
27
  * --spring-snappy/--spring-smooth registers), no longer the fixed bezier.
28
28
  */
29
29
 
30
+ /* BD.W-GLASS-ATOM-REGISTER — the shared `.glass-atom` warm-glass register the
31
+ small atoms (Badge-glass / metric-badge / slider fill / the `+N` chip) consume.
32
+ @import-ed HERE (icon-chip.css loads in index.css AFTER glass.css, so
33
+ `.glass-capsule` + the `--glass-*` axes are defined) — a consume-only recipe,
34
+ not a second material. CSS `@import` must precede every rule, so it leads the
35
+ file (the comment above is not a rule). */
36
+ @import "./glass/glass-atom.css";
37
+ /* BD.W-CHIP-CONGRUENT-GLASS — the chip family's warm-glass toggle register
38
+ (.glass-chip: the stadium-pill lens + the de-frauded colour-flood punch the
39
+ ToggleChip/SelectableChip/toggle-group children compose). @import-ed HERE
40
+ alongside glass-atom.css (icon-chip.css loads in index.css AFTER glass.css, so
41
+ `.glass-capsule` + `.accent-tone` + the `--glass-*` axes resolve) — a consume-
42
+ only recipe, not a second material. CSS `@import` must precede every rule, so it
43
+ leads with the atom import. */
44
+ @import "./glass/glass-chip.css";
45
+
30
46
  :root {
31
47
  /* The chip≤glyph proportion (d2, structural). The diameter floors at
32
48
  `glyph × ratio` so the plate can NEVER paint under the glyph — a
@@ -110,6 +126,35 @@
110
126
  --icon-chip-plate-strength: 40%;
111
127
  }
112
128
 
129
+ /* ── The QUIET GLASS register (BD.W-GLASS-ATOM-REGISTER cross-link) ─────────────
130
+ The chip's SECOND register: the transmissive `.glass-atom` warm-glass capsule
131
+ tinted toward the event hue via `--glass-fill-tint`, NOT the loud `in srgb`
132
+ brand plate (the default, kept — AW.W26 fence). The component applies
133
+ `.glass-capsule .glass-atom` alongside `.icon-chip--glass`, so the body (warm
134
+ floor + `--glass-blur-quiet` backdrop + the keyed rim) comes from the SHARED
135
+ register — this rule only RETIRES the chip's own `in srgb` plate-color fill so
136
+ the two backgrounds don't double-paint (the capsule's translucent fill +
137
+ `.glass-atom`'s tinted `background-image` are the body). The glyph event color
138
+ is untouched (the one color event still reads). A flat capsule lens — the
139
+ backdrop-filter rides the shared `--glass-blur-quiet` (Safari-native, no
140
+ `backdrop-filter:url`, Fence 8). */
141
+ .icon-chip--glass {
142
+ /* Retire the brand plate fill — the `.glass-capsule` body + the `.glass-atom`
143
+ tinted `background-image` paint the surface (no double-fill). The capsule's
144
+ `background:` shorthand + the atom's later `background-image` layer win the
145
+ cascade over this `background-color: transparent` reset by source order. */
146
+ background-color: transparent;
147
+ }
148
+
149
+ /* The glass chip's hover-bloom (when BOTH `--glass` + `--bloom`) routes the glow
150
+ ring through the SAME event color, over the glass body — the bloom GROW (the
151
+ base `.icon-chip--bloom:hover` transform/spring) is inherited unchanged. */
152
+ @media (hover: hover) {
153
+ .icon-chip--glass.icon-chip--bloom:hover {
154
+ background-color: transparent;
155
+ }
156
+ }
157
+
113
158
  /* ── The duotone axis — a low-alpha fill of the same hue UNDER the stroke ──── */
114
159
  /* Lucide glyphs bake `fill: none` on the SVG root; CSS wins over the
115
160
  presentation attribute, so the `[data-duotone] svg` rule reaches the inner
@@ -172,6 +172,17 @@
172
172
  @import "./floating-panel.css";
173
173
  @import "./transitions.css";
174
174
  @import "./animations.css";
175
+ /* BD.W-MORPH-FIELD-WELD — the ONE morph-field recipe (the body/neck/waist silhouette + the
176
+ dedicated @property --morph-squish channel + the welling concave waist clip-path + the
177
+ 1940s ink-cast). The `useMorphField` weld writes the drive-derived channels once/frame;
178
+ this sheet paints them. The cross-engine clip-path waist FLOOR + the [data-morphing] goo
179
+ gate live here. */
180
+ @import "./motion/morph-field.css";
181
+ /* BE.W-CELEBRATE-BURST — the earned glass-petal radial-bloom recipe (the
182
+ .glass-celebration-petal warm-cream frosted-glass material + the overlay anchor).
183
+ @import-ed after animations.css per the wave spec (the petal motion is the JS rAF
184
+ step's compositor writes; this recipe is the static frosted material the petals wear). */
185
+ @import "./jubilance.css";
175
186
  @import "./scroll-driven.css";
176
187
  @import "./scroll-choreography.css";
177
188
  @import "./scroll-chrome.css";
@@ -0,0 +1,65 @@
1
+ /* jubilance.css — BE.W-CELEBRATE-BURST — the earned glass-petal radial-bloom recipe.
2
+ *
3
+ * THE PETAL IS THE SURFACE'S OWN GLASS (CB4 / warm-cream identity). `.glass-celebration-
4
+ * petal` paints the warm-cream frosted glass material via the EXACT element-level oklab
5
+ * tint seam `glass/ladder.css` composes — `color-mix(in oklab, var(--glass-bg-floating),
6
+ * var(--glass-tint-source) var(--glass-tint-strength))` — so the petal reads as the
7
+ * surface's OWN glass, NOT a saturated confetti color. There is NO disco-grain, NO `✦`
8
+ * glyph, NO sparkle-sweep (the §6 calm register, the disco-fenced floor).
9
+ *
10
+ * THE :tone OPT-IN (the hue-keyed burst). `useCelebrationBurst({ tone })` writes
11
+ * `--glass-accent` onto each petal (the W-GLASS-ACCENT rim-tint seam); the catch-light
12
+ * core reads `--glass-specular-core` which ALREADY OKLab-mixes toward `--glass-accent ×
13
+ * --glass-accent-strength` (material.css) — so a download-complete petal blooms
14
+ * `--viz-download` through the SHARED specular cohort, never a second fork. At the default
15
+ * (no tone) `--glass-accent` is transparent → the warm-cream identity (the no-op floor).
16
+ *
17
+ * COMPOSITOR-ONLY (CB3 / proof:no-layout-animation). The recipe paints a static frosted
18
+ * pill; the per-frame motion (translate/scale/opacity/filter) is the JS rAF step's inline
19
+ * writes (compositor channels ONLY — never a layout property). The recipe carries NO
20
+ * layout-animating transition.
21
+ *
22
+ * PRM-STATIC (the vestibular floor). Under reduce the JS `burst()` spawns NO drifting
23
+ * petals (the prefersReducedMotion() branch fires only the destination chip-bloom-in
24
+ * cascade) — so there are no petals to carve here; the destination cascade is PRM-carved
25
+ * by the EXISTING icon-chip-reveal `animation: none` rule (icon-chip.css), re-used not
26
+ * re-authored. */
27
+
28
+ @layer components {
29
+ /* The short-lived overlay container the JS appends to the origin's offsetParent (one
30
+ DOM write, removed on settle). It is a zero-size anchor at the origin center; the
31
+ petals position-absolute off it. */
32
+ .glass-celebration-overlay {
33
+ position: absolute;
34
+ pointer-events: none;
35
+ }
36
+
37
+ /* The earned glass petal — the surface's OWN warm-cream frosted glass material. */
38
+ .glass-celebration-petal {
39
+ /* The petal footprint — a small pill, tokenized for the one-knob retune. */
40
+ --celebration-petal-size: 10px;
41
+ position: absolute;
42
+ inline-size: var(--celebration-petal-size);
43
+ block-size: var(--celebration-petal-size);
44
+ border-radius: var(--radius-pill, 9999px);
45
+ pointer-events: none;
46
+ /* THE WARM-CREAM GLASS (CB4) — the EXACT element-level oklab tint seam ladder.css
47
+ composes for every glass rung. NOT a saturated bg-<hue>/raw-Tailwind confetti
48
+ color: the petal reads as the surface's own frosted glass. */
49
+ background: color-mix(
50
+ in oklab,
51
+ var(--glass-bg-floating, color-mix(in oklab, var(--card), white 8%)),
52
+ var(--glass-tint-source, transparent) var(--glass-tint-strength, 0%)
53
+ );
54
+ /* A sub-perceptual warm-cream catch-light — reads the SHARED --glass-specular-core
55
+ (which carries the --glass-accent :tone opt-in via material.css's oklab mix), a
56
+ soft inner gleam so the petal reads as lit glass, never a flat slab. NO second
57
+ specular fork, NO disco. */
58
+ box-shadow:
59
+ inset 0 0 0 0.5px
60
+ color-mix(in oklab, var(--glass-specular-core, hsl(40 35% 92%)) 40%, transparent),
61
+ 0 1px 3px color-mix(in oklab, var(--foreground), transparent 86%);
62
+ /* will-change promotes ONLY the compositor channels the JS step writes. */
63
+ will-change: transform, opacity, filter;
64
+ }
65
+ }
@@ -0,0 +1,229 @@
1
+ /* motion/morph-field.css — BD.W-MORPH-FIELD-WELD — the ONE morph-field RECIPE.
2
+ *
3
+ * The body / neck / waist recipe + the DEDICATED squish channel every `useMorphField`
4
+ * consumer paints over. The weld JS (useMorphField.ts) writes the drive-derived custom
5
+ * properties once per frame (`--morph-squish`, `--morph-neck-girth`, `--morph-neck-gap`,
6
+ * `--morph-k`, `--morph-waist`, `--morph-specular-angle`); this sheet projects them onto
7
+ * the body + neck silhouettes. The MORPH_SIGNATURES rows live in the JS (motion-named
8
+ * DATA); this sheet is signature-agnostic — it paints whatever the masses carry.
9
+ *
10
+ * THE DEDICATED SQUISH CHANNEL (the dock-core hardening fence). The volume-preserving
11
+ * squish writes `--morph-squish`, NEVER `--stretch` (the 6-JS-owner + the
12
+ * `--dock-morph-max-stretch:1.14` clobber). A morph that ALSO rides --stretch (the dock
13
+ * collapse) keeps its own channel; the weld owns this one. Registered @property so a bare
14
+ * var() INTERPOLATES the ramp (the --dock-morph-t precedent).
15
+ *
16
+ * DETERMINISM (motion-canon P5 / the M5 scalar-binding). Every axis below is
17
+ * `f(var(--morph-*))` (the weld's drive-derived writes) — NEVER a CSS animation/transition
18
+ * with its own clock. A frame at a given drive value is byte-reproducible. Compositor-only
19
+ * (transform / scale / clip-path / opacity / --* — ZERO animated layout property).
20
+ *
21
+ * THE CARTOON PUNCH (welded IN, gated on the SHIPPED Band-0 tokens). The body squash rides
22
+ * `--morph-squish × --motion-weight`; the ink cast rides the `--shadow-cartoon-*` rung
23
+ * (never a hex literal, never an animated box-shadow); the neck specular-sweep lags the
24
+ * geometry (follow-through). `--motion-weight` and `--ease-cartoon-punch` are SHIPPED (P1,
25
+ * scheme-motion.css), so the punch is LIVE (not skipped); PRM zeroes --motion-weight → the
26
+ * squash/arc/cast collapse in ONE assignment.
27
+ *
28
+ * CROSS-ENGINE (§L7). The goo `<filter>` is the ONE `<GooFilter>` mount's REGULAR
29
+ * `filter:url(#…)` (NEVER backdrop-filter — bug 245510), applied on a SIBLING goo LAYER,
30
+ * never an ANCESTOR of glass (an ancestor filter kills backdrop-filter on descendants in
31
+ * both engines). The clip-path hourglass waist is the Tier-C cross-engine FLOOR under the
32
+ * filter — a concave waist on BOTH engines before any blur fuses it. The filter is gated to
33
+ * `[data-morphing]` (never a steady-state re-blur — the Safari budget fence). */
34
+
35
+ /* The dedicated squish channel + the neck-drive channels — typed INHERITING @property so a
36
+ bare var() INTERPOLATES (the --dock-morph-t/--neck-t precedent). The weld writes them on
37
+ the host; descendant bodies + neck read the inheriting values. */
38
+ @property --morph-squish {
39
+ syntax: "<number>";
40
+ inherits: true;
41
+ initial-value: 1;
42
+ }
43
+ @property --morph-neck-girth {
44
+ syntax: "<number>";
45
+ inherits: true;
46
+ initial-value: 0;
47
+ }
48
+ @property --morph-k {
49
+ syntax: "<number>";
50
+ inherits: true;
51
+ initial-value: 1;
52
+ }
53
+ @property --morph-waist {
54
+ syntax: "<number>";
55
+ inherits: true;
56
+ initial-value: 1;
57
+ }
58
+ @property --morph-specular-angle {
59
+ syntax: "<angle>";
60
+ inherits: true;
61
+ initial-value: 0deg;
62
+ }
63
+
64
+ @layer components {
65
+ /* The morph FIELD host — the sibling goo LAYER the filter applies to (never an
66
+ ancestor of glass). The weld writes the drive-derived channels here; the bodies +
67
+ neck live under it and read the inheriting values. The filter engages ONLY while the
68
+ morph is in-flight (`[data-morphing]`) — crisp at rest, gooey during the merge. */
69
+ .morph-field {
70
+ position: relative;
71
+ pointer-events: none;
72
+ /* isolation keeps the blur/threshold scoped to the masses, not the page behind. */
73
+ isolation: isolate;
74
+ filter: none;
75
+ }
76
+ /* Gate the goo filter to the in-flight window — the §L7 Safari budget fence (no
77
+ steady-state re-blur). The weld sets `[data-morphing]` on the host (or the consumer
78
+ does). The filter id is the consumer's tuned instance off the ONE <GooFilter> mount
79
+ (`url(#glass-goo)` / `url(#pager-goo)` / `url(#dock-morph-goo)` / `url(#morph-goo)`),
80
+ passed via `--morph-goo-filter`. The REGULAR filter property (Safari-correct). */
81
+ [data-morphing].morph-field,
82
+ [data-morphing] .morph-field {
83
+ filter: var(--morph-goo-filter, url(#morph-goo));
84
+ }
85
+
86
+ /* A morph BODY — a warm-cream domed-droplet mass the weld translates/squashes. The fill
87
+ is the SAME six-layer warm-glass register the whole library reads (NEVER gray — the
88
+ transparent-plate bug the showcase had is exactly this fill being absent). The
89
+ transform is written INLINE by the weld (translate + scale); this sheet supplies the
90
+ resting silhouette + fill + the cast. */
91
+ .morph-body {
92
+ position: absolute;
93
+ border-radius: 999px;
94
+ /* the warm-cream domed droplet — a soft radial so the goo threshold reads a domed
95
+ mass, not a flat slab; transmissive (~0.55-0.80 α) so the colorful field reads
96
+ THROUGH it. Reads the shared --glass-* cohort (warm-cream identity, both modes). */
97
+ background: radial-gradient(
98
+ 120% 120% at 50% 38%,
99
+ var(--glass-bg-floating, color-mix(in oklab, var(--card), white 8%)) 0%,
100
+ var(--glass-bg-resting, var(--card)) 62%,
101
+ color-mix(in oklab, var(--card), var(--foreground) 6%) 100%
102
+ );
103
+ /* a 1px inner catch-light rim (the §3 defined edge) — the crisp metaball rim. */
104
+ box-shadow: inset 0 1px 0 0 color-mix(in oklab, white 22%, transparent);
105
+ overflow: clip;
106
+ transform-origin: center;
107
+ will-change: transform;
108
+ }
109
+
110
+ /* The welling NECK — the concave-throat filament between the two outermost bodies. Its
111
+ girth WELLS on `--morph-neck-girth` (peak mid, ~0 at the ends → no ghost throat at
112
+ rest) and its clip-path carves the structural hourglass waist (the Tier-C floor, both
113
+ engines, BEFORE the filter fuses it). The weld writes its transform inline (translate
114
+ + scaleX span + scaleY girth); this sheet supplies the fill + the waist clip + the
115
+ specular sweep. */
116
+ .morph-neck {
117
+ position: absolute;
118
+ border-radius: 999px;
119
+ background: radial-gradient(
120
+ 130% 130% at 50% 40%,
121
+ var(--glass-bg-floating, color-mix(in oklab, var(--card), white 8%)) 0%,
122
+ var(--glass-bg-resting, var(--card)) 70%,
123
+ color-mix(in oklab, var(--card), var(--foreground) 6%) 100%
124
+ );
125
+ /* THE CONCAVE WAIST — the clip-path hourglass pinches the throat toward the
126
+ centerline as the gap-fraction k narrows (the structural local-minimum waist read
127
+ on BOTH engines before the blur). The inset GROWS from the rim as the waist
128
+ tightens (`1 - --morph-waist`), `round 999px` so the throat is a gel capsule. */
129
+ --neck-pinch: calc((1 - clamp(0, var(--morph-waist, 1), 1)) * 42%);
130
+ clip-path: inset(var(--neck-pinch) 0 var(--neck-pinch) 0 round 999px);
131
+ /* the neck is visible EXACTLY while it wells (the opacity is the girth). */
132
+ opacity: var(--morph-neck-girth, 0);
133
+ transform-origin: center;
134
+ overflow: clip;
135
+ will-change: transform, clip-path, opacity;
136
+ }
137
+
138
+ /* THE NECK SPECULAR-SWEEP (follow-through) — a moving catch-light bending along the
139
+ throat as it stretches, reading the SHARED --glass-specular-core cohort (NO fork).
140
+ The conic angle LAGS the geometry (`--morph-specular-angle` carries the 60° trail the
141
+ weld writes). plus-lighter additive; a non-supporting engine degrades to a plain warm
142
+ overlay. */
143
+ .morph-neck::after {
144
+ content: "";
145
+ position: absolute;
146
+ inset: 0;
147
+ border-radius: 999px;
148
+ pointer-events: none;
149
+ background: conic-gradient(
150
+ from var(--morph-specular-angle, 0deg) at 50% 50%,
151
+ transparent 0deg,
152
+ color-mix(
153
+ in srgb,
154
+ var(--glass-specular-core, hsl(40 35% 92%)) 55%,
155
+ transparent
156
+ ) 18deg,
157
+ transparent 60deg,
158
+ transparent 360deg
159
+ );
160
+ opacity: calc(
161
+ var(--glass-specular-intensity-rest, 0.12) +
162
+ clamp(0, var(--morph-neck-girth, 0), 1) * 0.18
163
+ );
164
+ mix-blend-mode: plus-lighter;
165
+ will-change: opacity;
166
+ }
167
+
168
+ /* THE 1940s INK CAST (solid drawing — the most ALIVE detail). A `::after` caster on the
169
+ FIELD that slides OPPOSITE the morph motion and DEEPENS mid-merge, pooling darkest at
170
+ the thinnest waist (the mass is heaviest where the neck is thinnest). On the REAL
171
+ `--shadow-cartoon-*` rung (never a hex, never an animated box-shadow — a compositor
172
+ translate of a soft radial). Gated on `--motion-weight` so PRM zeroes it. */
173
+ .morph-field::after {
174
+ content: "";
175
+ position: absolute;
176
+ inset: 0;
177
+ z-index: -1;
178
+ pointer-events: none;
179
+ border-radius: inherit;
180
+ /* the cast plane reads the cartoon shadow rung (the cards.css cohort) — a soft warm
181
+ ink pool that deepens as the waist thins. No hex; reads --shadow-color. */
182
+ background: radial-gradient(
183
+ 60% 40% at 50% 60%,
184
+ color-mix(
185
+ in srgb,
186
+ var(--shadow-color, var(--foreground))
187
+ calc(
188
+ (18% + (1 - clamp(0, var(--morph-waist, 1), 1)) * 22%) *
189
+ var(--motion-weight, 0)
190
+ ),
191
+ transparent
192
+ )
193
+ 0%,
194
+ transparent 72%
195
+ );
196
+ /* slide OPPOSITE the morph — the cast trails the mass. The offset is the neck girth
197
+ × weight (deepest at mid-merge), on the cross axis. Compositor translate only. */
198
+ translate: 0
199
+ calc(var(--morph-neck-girth, 0) * 6px * var(--motion-weight, 0));
200
+ will-change: transform, background;
201
+ }
202
+
203
+ /* PRM (motion-canon P6 / §L5) — the goo layer drops, the neck never paints, the cast +
204
+ sweep are static-off; --motion-weight 0 (the :root PRM carve in scheme-motion.css)
205
+ already zeroes the squash/arc/cast amplitude. The morph still CONFIRMS (the weld's
206
+ seat() places one resting mass at the endpoint). */
207
+ @media (prefers-reduced-motion: reduce) {
208
+ [data-morphing].morph-field,
209
+ [data-morphing] .morph-field {
210
+ filter: none;
211
+ }
212
+ .morph-neck,
213
+ .morph-neck::after,
214
+ .morph-field::after {
215
+ display: none;
216
+ }
217
+ }
218
+
219
+ /* @supports floor — no `filter:url()` (the WebKit teardrop floor / a gap engine): the
220
+ clip-path hourglass waist on .morph-neck is the structural cross-engine FLOOR; the
221
+ bodies + the welling neck still read as a metaball via the clip-path waist alone (no
222
+ filter fuse). The morph degrades by SOFTENING, never to a non-morph crossfade. */
223
+ @supports not (filter: url("#morph-goo")) {
224
+ [data-morphing].morph-field,
225
+ [data-morphing] .morph-field {
226
+ filter: none;
227
+ }
228
+ }
229
+ }