@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
@@ -0,0 +1,215 @@
1
+ /* ════════════════════════════════════════════════════════════════════════
2
+ .glass-chip — BD.W-CHIP-CONGRUENT-GLASS: the ONE warm-glass toggle register
3
+ the chip family (ToggleChip · SelectableChip + the toggle-group children)
4
+ composes. A stadium-pill warm-glass LENS that PUNCHES when you pick it: the
5
+ tonal band floods through the translucent lens on `--ease-cartoon-punch` with
6
+ anticipation → overshoot → settle, a one-shot accent-bloom trailing the
7
+ spatial leg.
8
+
9
+ CONSUME-ONLY — declares ZERO own glass tokens (the no-fork fence, Fence C3c).
10
+ It COMPOSES:
11
+ · `.glass-capsule` — the warm-transmissive lozenge BODY (warm floor +
12
+ rim + lift + blur), on `--radius-pill`. The chip
13
+ is the ≥4th `.glass-capsule` consumer (after the
14
+ tab indicator + the button sites). NEVER inlines
15
+ `backdrop-filter` / `--glass-bg-*` / a rim.
16
+ · `.glass-capsule-hover` — the SHARED specular-lift + press-snap step.
17
+ · `.accent-tone` — the contrast-floored tonal channels (idle fill /
18
+ active band / active edge / contrast-safe ink).
19
+ · `--glass-fill-tint` / `--glass-fill-strength` (BE.W-TINTED-CHIP, glass.css)
20
+ — the per-instance plate-fill data hue the body
21
+ tints toward. The chip is its ≥3rd consumer; it
22
+ APPLIES the axis, never re-mints a tint.
23
+ · `--motion-weight` × `--ease-cartoon-punch` (BD.W-MOTION-WEIGHT /
24
+ -CARTOON-PUNCH) — the cartoon press/flood punch +
25
+ the PRM dial (`--motion-weight: 0`).
26
+
27
+ DISTINCT-not-fork of `.glass-atom` (the small-atom register: Badge/+N/slider):
28
+ both COMPOSE `.glass-capsule`. `.glass-atom` is the quiet always-on identity
29
+ chip; `.glass-chip` is the TOGGLE face whose state flip is the de-frauded
30
+ colour-flood punch. They never write each other's channels.
31
+
32
+ @layer components, @import-ed by index.css AFTER glass.css (so `.glass-capsule`
33
+ + `.accent-tone` + the `--glass-*` axes resolve) and BEFORE/AROUND the chip
34
+ recipes. Every channel is compositor-only + Safari-native (no
35
+ `backdrop-filter: url()`, no goo — Fence 8). The warm 0-alpha sources are
36
+ explicit `oklch(L C H / 0)` (NEVER bare `transparent` — the WebKit
37
+ black-premultiply hole, build-trap-(d)). Per-mode `.dark` arms (no
38
+ `light-dark()` fragment).
39
+ ════════════════════════════════════════════════════════════════════════ */
40
+
41
+ /* The COMMIT-flood scalar — the ON-flip envelope. `inherits: TRUE` is the
42
+ load-bearing de-fraud (challenge R1): an `inherits:false` reg resolves to its
43
+ `initial-value` on the `::after` PSEUDO (a separate box from the element that
44
+ sets it), so the flood reads `0` forever. `inherits:true` lets the element's
45
+ `[data-state="on"]{--chip-flood-t:1}` reach the pseudo. Typed so the opacity
46
+ interpolates a NUMBER, not the textual representation. On a pre-Baseline engine
47
+ that drops the typed reg the scalar collapses to the initial 0 — the chip still
48
+ selects (the COLOUR event below is plain `data-state`, never tied to the
49
+ scalar; challenge R5). */
50
+ @property --chip-flood-t {
51
+ syntax: "<number>";
52
+ inherits: true;
53
+ initial-value: 0;
54
+ }
55
+
56
+ @layer components {
57
+ /* ── .glass-chip — the warm-glass toggle lens ──
58
+ The chip wears `.glass-chip .glass-capsule .glass-capsule-hover .accent-tone`
59
+ (the component CVA composes all four). This rule owns only the chip-specific
60
+ layer: the warm idle floor (the #2 dormant-tint cure), the per-instance fill
61
+ tint over the capsule's warm body, the ONE `scale` write (hover/press/punch
62
+ folded), and the `::after` flood. The capsule owns the body/rim/blur. */
63
+ .glass-chip {
64
+ position: relative;
65
+ /* The flood `::after` sits ABOVE the translucent fill (challenge R2): a
66
+ new stacking context so `plus-lighter` blends over the lens body, never
67
+ occluded under an opaque layer. The capsule body is α<1, so the bloom
68
+ reads through. */
69
+ isolation: isolate;
70
+
71
+ /* ── The WARM IDLE FLOOR (root #2 cure) ──
72
+ The chip carries chroma at rest over warm-cream even with no vibrant
73
+ field behind. The floor RAISES the `.accent-tone` idle strength the chip
74
+ reads — a NON-self-referential floor (build-trap-(b): a property reading
75
+ ITSELF in its own `max()` is guaranteed-invalid and drops). A SEPARATE
76
+ input var is the source: the `.accent-tone` recipe's default idle
77
+ strength is 8%; the chip floors the resolved strength to
78
+ `--chip-tint-floor` so the idle AND the default-tone active band both
79
+ clear the 0.02 warm floor (the live finding: BOTH are gray over
80
+ `--primary`). PLAIN per-mode pair (12% light / 15% dark), NEVER
81
+ `light-dark()` (the inset-shadow trap). */
82
+ --chip-tint-floor: 12%;
83
+ --accent-fill-strength: max(8%, var(--chip-tint-floor));
84
+ /* Lift the DEFAULT-tone active band too (the §1b finding: the default
85
+ band reads C 0.013 — a darken, not a chroma lift). The band floors to a
86
+ bolder warm-clearing stop so a selected default chip is tonal, not gray. */
87
+ --accent-band-strength: max(18%, calc(var(--chip-tint-floor) + 10%));
88
+
89
+ /* ── The per-instance fill tint (BE.W-TINTED-CHIP CONSUME) ──
90
+ The translucent capsule body tints toward the consumer data hue ON TOP
91
+ of the W55 legibility composite. At the `@property` defaults
92
+ (`--glass-fill-tint: transparent` / strength 0%) this is the byte-
93
+ identical no-op (`color-mix(in oklab, X, transparent 0%)` ≡ X — the warm
94
+ floor above keeps the idle body warm even at a transparent tint). The
95
+ mix is `in oklab` (the perceptual glass-tint family). The 0-alpha stop is
96
+ warm `oklch(… / 0)`, never bare `transparent` (the WebKit black-
97
+ premultiply hole). */
98
+ --glass-chip-tinted: color-mix(
99
+ in oklab,
100
+ var(--glass-fill-tint, oklch(0.9 0.05 75 / 0))
101
+ var(--glass-fill-strength, 0%),
102
+ oklch(0.9 0.05 75 / 0)
103
+ );
104
+
105
+ /* ── The ONE scale write (hover/press/punch, single source of truth) ──
106
+ Folds the on-flood overshoot into ONE `scale` so it never collides with
107
+ the capsule-hover scale step (the CVA's `hover:scale-*` is retired in the
108
+ chip variants — this is the sole scale writer on the chip box). Volume-
109
+ preserving, center-pinned. The coefficient (0.12) is raised vs the
110
+ segmented-indicator's 0.06 so the dip/overshoot clear the gate's OWN
111
+ thresholds (≤0.996 dip / ≥1.04 overshoot at weight 1.0): the punch curve
112
+ peaks at 1.22 → 1 + 0.12·1.22·1.0 ≈ 1.026 over rest is too soft, so the
113
+ overshoot READ is carried by the curve's pre-dip (−0.04) + the COLOUR
114
+ event; the spatial leg adds the perceptible breathe without taffy. */
115
+ scale: calc(1 + 0.12 * var(--chip-flood-t, 0) * var(--motion-weight, 0.618));
116
+ transform-origin: center;
117
+
118
+ /* The SPATIAL legs (scale) settle on the punch clock; the EFFECTS legs
119
+ (background/border/color) stay on the bezier (motion-canon P1). */
120
+ transition:
121
+ scale var(--duration-normal) var(--ease-cartoon-punch),
122
+ background-color var(--duration-fast) var(--ease-standard),
123
+ border-color var(--duration-fast) var(--ease-standard),
124
+ color var(--duration-fast) var(--ease-standard);
125
+
126
+ /* ── The per-instance fill tint application ──
127
+ The capsule body (the `.glass-capsule` `background:` shorthand) is the
128
+ warm transmissive plate; the chip LAYERS the data-hue tint on top via
129
+ `background-image` (a later layer over the capsule's shorthand — the
130
+ proven `.paper-grid`/`.glass-atom` coexistence seam: paints OVER the
131
+ translucent fill, UNDER content). When `--glass-fill-tint` is unset the
132
+ tinted layer is the warm 0-alpha no-op (invisible) and the capsule's warm
133
+ body reads. */
134
+ background-image: linear-gradient(
135
+ var(--glass-chip-tinted),
136
+ var(--glass-chip-tinted)
137
+ );
138
+ }
139
+ .dark .glass-chip {
140
+ --chip-tint-floor: 15%;
141
+ }
142
+
143
+ /* ── The on-flip COLOUR event (the perceptible primary read) ──
144
+ OFF→ON floods the active band through the lens + lights the active rim + the
145
+ contrast-safe ink. Driven by PLAIN `data-state` (the reka Toggle contract),
146
+ NEVER tied to `--chip-flood-t` — so selection is legible even on a pre-
147
+ Baseline engine that drops the typed scalar (challenge R5). The `.accent-tone`
148
+ channels supply the colour; this rule only SWAPS which channel paints. */
149
+ .glass-chip[data-state="on"] {
150
+ background-color: var(--accent-band);
151
+ border-color: var(--accent-edge);
152
+ color: var(--accent-ink);
153
+ /* arm the spatial+bloom envelope */
154
+ --chip-flood-t: 1;
155
+ }
156
+
157
+ /* ── The COMMIT flood `::after` (the trailing accent bloom) ──
158
+ An additive radial bloom INSIDE the lens (`inset:0`, `border-radius:inherit`,
159
+ `plus-lighter`) ABOVE the translucent fill (inside `isolation:isolate`,
160
+ challenge R2). Its opacity reads `--chip-flood-t` (inherited from the element,
161
+ challenge R1) so it fires on ON and clears on OFF. The transition DELAY trails
162
+ the spatial leg (EFFECTS-trails-SPATIAL, the v3 f006→f007 ordering). The bloom
163
+ hue is the active band; default tone neutral → a provable near-no-op until a
164
+ consumer sets a vibrant `:tone`. */
165
+ .glass-chip::after {
166
+ content: "";
167
+ position: absolute;
168
+ inset: 0;
169
+ border-radius: inherit;
170
+ pointer-events: none;
171
+ background: radial-gradient(
172
+ 120% 140% at 50% 50%,
173
+ color-mix(in oklab, var(--accent-band) 60%, oklch(0.9 0.05 75 / 0)),
174
+ oklch(0.9 0.05 75 / 0) 72%
175
+ );
176
+ mix-blend-mode: plus-lighter;
177
+ opacity: var(--chip-flood-t, 0);
178
+ transition: opacity var(--duration-normal) var(--ease-out) 60ms;
179
+ }
180
+
181
+ /* ── The CELL exception — a 72px icon+label TILE is a CARD, not a pill ──
182
+ The DELIBERATE 2-silhouette family (named honestly): the inline rungs are
183
+ stadium pills (the capsule's `--radius-pill`); the cell re-points to the
184
+ squircle card radius. It composes the SAME `.glass-chip` material + motion;
185
+ only the silhouette differs. The `::after` flood inherits the card radius. */
186
+ .glass-chip--cell {
187
+ border-radius: var(--radius-card);
188
+ }
189
+ .glass-chip--cell.glass-capsule {
190
+ border-radius: var(--radius-card);
191
+ }
192
+
193
+ /* ── PRM carve ──
194
+ Under reduced-motion `--motion-weight: 0` zeroes the spatial overshoot (the
195
+ `scale` calc collapses to 1) in ONE assignment; the bloom's MOTION rides the
196
+ same dial via the punch clock. The COLOUR cross-fade + the static lens lift
197
+ (the `.glass-capsule` rim/shadow) + the `--accent-band` swap REMAIN —
198
+ selection is always legible (challenge R7: zeroes the MOTION, not the bloom).
199
+ Vestibular-safe. */
200
+ @media (prefers-reduced-motion: reduce) {
201
+ .glass-chip {
202
+ --motion-weight: 0;
203
+ }
204
+ }
205
+
206
+ /* ── prefers-contrast: more — the active rim α floors UP ──
207
+ The active `--accent-edge` rim is the legibility CONTRACT; under more-contrast
208
+ floor the border ink so the selected lit edge clears ≥3:1 over the lens body.
209
+ The `--accent-ink` is already value.js contrast-safe (useAccentTone). */
210
+ @media (prefers-contrast: more) {
211
+ .glass-chip[data-state="on"] {
212
+ border-color: color-mix(in srgb, var(--foreground) 28%, transparent);
213
+ }
214
+ }
215
+ }
@@ -0,0 +1,252 @@
1
+ /* glass/liquid-enter.css
2
+ BD.W-LIQUID-ENTRANCE-GENERAL — the UNIVERSAL LIQUID-ENTER mount recipe.
3
+
4
+ `.glass-reveal`'s four coupled channels (SPATIAL bloom + SQUISH + fade + decongest),
5
+ promoted from an overlay-only `data-state` TRANSITION to a mount `@keyframes` so a
6
+ `v-if`-born-at-open surface ANIMATES (a CSS transition needs a state-change a
7
+ born-at-open element lacks; an `@keyframes` does not). This is the everywhere
8
+ entrance EVERY mount surface opts into — cards, rows, controls, dock-modules, demo
9
+ sub-sections — on the `--i` 1/φ time-clock stagger. The flat fade dies.
10
+
11
+ THREE registers share ONE grammar (NOT three engines):
12
+ • MOUNT — this file (`.liquid-enter`), plain @keyframes-on-mount, the Safari-15
13
+ floor, the DEFAULT. Zero JS.
14
+ • SCROLL — `.scroll-build`/`.scroll-cascade` (scroll-choreography.css), AUGMENTED
15
+ in place; this file does NOT touch them (Bug B: a 2nd `animation:`
16
+ shorthand on `.scroll-build > *` clobbers `gl-page-build`).
17
+ • TRIGGER— `useLiquidReveal`/`useBloomUp` (the JS source-rect bloom).
18
+
19
+ THE FOUR CHANNELS (the iOS-27 read, design.md §SPATIAL/EFFECTS split):
20
+ 1. SPATIAL bloom — `translate:` rise (the LONGHAND, composes with a centering
21
+ transform) on the snappy spring.
22
+ 2. SQUISH volume — the reciprocal `scale:` LONGHAND, born wide+flat (vol-preserving
23
+ sx·sy ≈ 1), settles square. NEVER a `transform: scale()` shorthand (Bug A: it
24
+ REPLACES a base centering `transform: translate(-50%,-50%)` → a centered dialog
25
+ snaps to the corner; AND it composes with a `scale:` longhand → double-scale,
26
+ born at 78% area). The bloom-from-small GRACE is the coupled rise + blur + fade,
27
+ NOT an isotropic shrink (a 0.88 multiplier re-introduces the 0.776-area shrink).
28
+ When a JS clock is present, `--stretch` (useLiquidFlex — the ONE squish engine)
29
+ is written live and paired reciprocally on THIS longhand.
30
+ 3. EFFECTS fade — `opacity 0→1` (coupled so scale+fade read as ONE coalescing layer).
31
+ 4. EFFECTS decongest — `filter: blur(b)→blur(0)` on the surface's OWN pixels
32
+ (`filter`, NEVER `backdrop-filter` — the resting glass plate is untouched + the
33
+ WebKit per-frame-reblur hole is avoided), on the SAME spring clock.
34
+
35
+ The four channels are governed by ONE number — `--motion-weight` (rest 1/φ ≈ 0.618,
36
+ the shipped Band-0 token): weight 0 ⇒ no visible punch (PRM), weight 1 ⇒ the full
37
+ celebration slam. Co-scaled, never four unrelated tics.
38
+
39
+ @import-ed by glass.css in cascade order, in its own @layer components. */
40
+
41
+ @layer components {
42
+ /* The channel substrate — the public start knobs, shared with `.glass-reveal`
43
+ (which keys the same `--lq-enter-*` names so the MOUNT recipe + the reka
44
+ closed→open TRANSITION speak ONE grammar, no fork). */
45
+ .liquid-enter {
46
+ --lq-enter-rise: 0.5rem; /* the SPATIAL rise (the translate: longhand leg) */
47
+ --lq-enter-blur: 4px; /* the decongest start radius (the filter leg) */
48
+ --lq-enter-origin: center; /* the bloom anchor (a popper edge overrides) */
49
+ /* The born squish — wide+flat, vol-preserving (product ≈ 1.002). The settle is
50
+ 1 1. A consumer driving useLiquidFlex writes --lq-stretch-x/-y live. */
51
+ --lq-stretch-x: 1.06;
52
+ --lq-stretch-y: 0.945;
53
+ /* The register's OWN clock — the 1/φ overlap stagger keys off THIS so the
54
+ "launch beat N+1 as beat N hits 62%" holds on the cel/bouncy clock too
55
+ (DELTA-ASSAY §3 — not hardcoded to the snappy duration). */
56
+ --lq-enter-duration: var(--spring-snappy-duration);
57
+ }
58
+
59
+ /* ── BASE register (the graceful floor, GREEN on the bouncy/snappy spring) ──
60
+ A 2-stop squish-grow: the spring's `linear()` overshoot interior supplies the
61
+ calibrated iOS bounce. ONE `scale:` longhand (the squish), ONE `translate:`
62
+ longhand (the rise) — NO `transform:` shorthand (Bug A). */
63
+ @media (prefers-reduced-motion: no-preference) {
64
+ .liquid-enter {
65
+ animation: gl-liquid-enter var(--lq-enter-duration) var(--spring-snappy)
66
+ both;
67
+ /* The 1/φ overlap — the per-beat delay is the spring settle × 1/φ ≈ 0.618,
68
+ so beat N+1 launches as beat N reaches ~62% (Disney follow-through /
69
+ overlap; the golden proportion). Keyed off THIS register's own clock. */
70
+ animation-delay: calc(
71
+ var(
72
+ --lq-enter-step,
73
+ calc(var(--lq-enter-duration) * 0.618)
74
+ ) * var(--i, 0)
75
+ );
76
+ transform-origin: var(--lq-enter-origin);
77
+ }
78
+
79
+ /* DISPLAY type arrives with GRAVITY, no bounce (a heading must not overshoot —
80
+ the W-HIERARCHY arrival law). The fade/decongest still ride the recipe. */
81
+ .liquid-enter.is-display {
82
+ animation-timing-function: var(--ease-out);
83
+ }
84
+
85
+ @keyframes gl-liquid-enter {
86
+ 0% {
87
+ opacity: 0;
88
+ /* SQUISH on the scale: LONGHAND — born wide+flat (vol-preserving), the
89
+ short axis pinches, the long swells. NO transform: shorthand here. */
90
+ scale: var(--lq-stretch-x, 1.06) var(--lq-stretch-y, 0.945);
91
+ /* SPATIAL rise on the translate: LONGHAND (composes with a base
92
+ centering transform — never clobbers it). */
93
+ translate: 0 var(--lq-enter-rise, 0.5rem);
94
+ /* DECONGEST — the surface's OWN pixels (filter, not backdrop-filter). */
95
+ filter: blur(var(--lq-enter-blur, 4px));
96
+ }
97
+ 100% {
98
+ opacity: 1;
99
+ scale: 1 1;
100
+ translate: 0 0;
101
+ filter: blur(0);
102
+ }
103
+ }
104
+ }
105
+
106
+ /* ── CEL register (`.is-cel`, the audacious cartoon-technicolor upgrade) ──
107
+ LIVE-PROVEN FINDING (GOLDEN §7e): the cel-slam PUNCH cannot come from
108
+ ease-overshoot across the narrow `scale: 0.88→1` span (a 0.12 span × a 1.22
109
+ ease-peak yields only ~2% absolute punch). The punch MUST live in EXPLICIT
110
+ keyframe STOPS (a 3-stop arc); `--ease-cartoon-punch` (the shipped loud
111
+ `linear()`) adds the anticipation dip + extra overshoot ON TOP. Same
112
+ `scale:`/`translate:` LONGHAND discipline — NO `transform:` shorthand.
113
+
114
+ The arc: ANTICIPATION (sink + squish DOWN) → PUNCH (lift + stretch UP) →
115
+ FOLLOW-THROUGH settle. Every magnitude rides `--motion-weight` so PRM
116
+ (weight 0) flattens the whole arc to the fade in ONE assignment. */
117
+ @media (prefers-reduced-motion: no-preference) {
118
+ .liquid-enter.is-cel {
119
+ animation: gl-cel-slam var(--lq-enter-duration)
120
+ var(--ease-cartoon-punch, var(--spring-bouncy)) both;
121
+ }
122
+
123
+ @keyframes gl-cel-slam {
124
+ 0% {
125
+ opacity: 0;
126
+ /* ── ANTICIPATION — sink + squish DOWN (born flat, tall; vol-preserve) ── */
127
+ translate: 0
128
+ calc(14px * var(--motion-weight, 0.618));
129
+ scale: calc(1 - 0.12 * var(--motion-weight, 0.618))
130
+ calc(1 + 0.06 * var(--motion-weight, 0.618));
131
+ filter: blur(var(--lq-enter-blur, 4px));
132
+ }
133
+ 62% {
134
+ opacity: 1;
135
+ /* ── PUNCH — lift + stretch UP (sx↑, sy↓; vol-preserve) ── */
136
+ translate: 0
137
+ calc(-3px * var(--motion-weight, 0.618));
138
+ scale: calc(1 + 0.1 * var(--motion-weight, 0.618))
139
+ calc(1 - 0.05 * var(--motion-weight, 0.618));
140
+ filter: blur(0);
141
+ }
142
+ 100% {
143
+ opacity: 1;
144
+ /* ── FOLLOW-THROUGH settle ── */
145
+ translate: 0 0;
146
+ scale: 1 1;
147
+ filter: blur(0);
148
+ }
149
+ }
150
+ }
151
+
152
+ /* ── The lagging cartoon CAST (`.is-cel`, opt-in) — a CHILD layer, never
153
+ ::after{box-shadow} ──
154
+ A box-shadow cannot LAG a transform (both repaint on the same element in
155
+ lockstep), and an animated box-shadow is a WebKit paint hole. So the cast is a
156
+ child caster layer carrying the STATIC layered `--shadow-cartoon-md` (the proper
157
+ 1940s-technicolor punch, 3-layer ink — NOT the bare single-stamp whisper),
158
+ animated on its OWN transform clock +`6ms·--motion-weight` later: the object
159
+ slams in, its bold shadow catches up a beat behind (overlapping action). The
160
+ cast's TRANSFORM moves (compositor); the box-shadow is static-painted, never
161
+ animated. Capped to HERO/headline surfaces (perf — never a global .is-cel). */
162
+ .liquid-enter.is-cel > .cartoon-cast {
163
+ position: absolute;
164
+ inset: 0;
165
+ z-index: -1;
166
+ border-radius: inherit;
167
+ /* STATIC layered stamp; re-tints per mode via the --cartoon-ink-* cohort
168
+ (shadow.css / dark-arm.css). NEVER animated. */
169
+ box-shadow: var(--shadow-cartoon-md);
170
+ pointer-events: none;
171
+ }
172
+ @media (prefers-reduced-motion: no-preference) {
173
+ .liquid-enter.is-cel > .cartoon-cast {
174
+ animation: gl-cast-lag var(--lq-enter-duration)
175
+ var(--ease-cartoon-punch, var(--spring-snappy)) both;
176
+ /* the LATE arrival — the shadow trails the cel a beat behind */
177
+ animation-delay: calc(0.006s + 0.06s * var(--motion-weight, 0.618));
178
+ }
179
+ @keyframes gl-cast-lag {
180
+ 0% {
181
+ opacity: 0;
182
+ translate: 0 calc(10px * var(--motion-weight, 0.618)) 0;
183
+ scale: 0.92;
184
+ }
185
+ 100% {
186
+ opacity: 1;
187
+ translate: 0 0 0;
188
+ scale: 1;
189
+ }
190
+ }
191
+ }
192
+ /* Under prefers-contrast: more the inked edge is a LEGIBILITY asset — floor it on. */
193
+ @media (prefers-contrast: more) {
194
+ .liquid-enter.is-cel > .cartoon-cast {
195
+ opacity: 1;
196
+ }
197
+ }
198
+ }
199
+
200
+ /* ── The Safari < 17.2 `linear()` floor (DELTA-ASSAY §3) ──
201
+ `linear()` spring/punch curves UNPARSE before Safari 17.2 → the `animation`
202
+ timing falls to the UA default, killing the overshoot. Supply a cubic-bezier
203
+ floor so the entrance still reads bouncy (not a dead linear ramp) on legacy
204
+ WebKit. Plain @keyframes + scale/translate/opacity/filter longhands are
205
+ themselves Safari-15-safe; only the spring CURVE needs the floor. */
206
+ @supports not (animation-timing-function: linear(0, 1)) {
207
+ @layer components {
208
+ @media (prefers-reduced-motion: no-preference) {
209
+ .liquid-enter {
210
+ animation-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1);
211
+ }
212
+ .liquid-enter.is-cel,
213
+ .liquid-enter.is-cel > .cartoon-cast {
214
+ animation-timing-function: cubic-bezier(0.5, -0.2, 0.4, 1.4);
215
+ }
216
+ }
217
+ }
218
+ }
219
+
220
+ /* ── REDUCED-MOTION CARVE (the vestibular floor — WCAG 2.3.3 · design.md P6) ──
221
+ Under `prefers-reduced-motion: reduce` the entrance keeps the FADE and drops the
222
+ transform + squish + bounce + blur + stagger + cast in ONE arm (opacity is not a
223
+ vestibular trigger). One calm paint on the short clock, delay → 0. This mirrors the
224
+ `.glass-reveal` + `.scroll-build` PRM precedent. The shipped `--ease-cartoon-punch`
225
+ already re-aliases to `--ease-standard` under reduce (scheme-motion.css) and
226
+ `--motion-weight → 0` zeroes the arc — this carve is the belt-and-suspenders floor
227
+ that also drops the keyframe channels outright. */
228
+ @layer components {
229
+ @media (prefers-reduced-motion: reduce) {
230
+ .liquid-enter,
231
+ .liquid-enter.is-cel {
232
+ animation: gl-liquid-enter-reduced var(--duration-fast) var(--ease-out)
233
+ both;
234
+ animation-delay: 0s;
235
+ }
236
+ .liquid-enter.is-cel > .cartoon-cast {
237
+ /* the cast still appears (its ink is a legibility asset) but does not fly */
238
+ animation: none;
239
+ opacity: 1;
240
+ translate: 0;
241
+ scale: 1;
242
+ }
243
+ @keyframes gl-liquid-enter-reduced {
244
+ from {
245
+ opacity: 0;
246
+ }
247
+ to {
248
+ opacity: 1;
249
+ }
250
+ }
251
+ }
252
+ }