@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
@@ -1,29 +1,68 @@
1
1
  /*
2
- * paper.css — Paper-texture primitives
2
+ * paper.css — Paper-texture primitives (BD.W-PAPER-MORPHISM, the texture+blend
3
+ * redesign — the grain/grit must be PLAINLY VISIBLE; if you squint, it FAILS).
3
4
  *
4
5
  * Two composable Tailwind `@utility` declarations:
5
- * - paper-underpaint: fixed, app-root, fullscreen SVG turbulence at z-index -1
6
- * - paper-grain-overlay: ::after overlay for individual surfaces
6
+ * - paper-underpaint: fixed, app-root, fullscreen tooth texture at z-index -1
7
+ * - paper-grain-overlay: ::after tooth overlay for individual surfaces
7
8
  *
8
- * Texture: feTurbulence baseFrequency 0.65, 4 octaves, desaturated via
9
- * feColorMatrix, blended multiply (light) / soft-light (dark). Tiles ~60px.
9
+ * THE FIX (the headline): the prior `feTurbulence bf=0.65 4-oct` + `feBlend
10
+ * multiply in2=SourceGraphic` cloud was a self-cancelling no-op — a fine cloud
11
+ * averaged to grey on hiDPI, and `overlay`/`soft-light` collapse to IDENTITY
12
+ * against a near-white cream wash (L≈0.98) / near-black ink wash (the blends only
13
+ * bite mid-grey backdrops; the paper register lives on the poles). Measured std
14
+ * 0.02–0.86 — invisible by math.
15
+ *
16
+ * THE TEXTURE — `--paper-grain-tooth`: a COARSE anisotropic grey-RGB speckle
17
+ * (`baseFrequency='0.04 0.09'` = grain direction, 2 octaves), KEEP the RGB
18
+ * (`feColorMatrix saturate=0` → grey, never zero it), per-channel
19
+ * `feComponentTransfer` slope-1.8/intercept-(-0.4) CONTRAST-STRETCH (the
20
+ * letterpress bite) + `feFuncA slope=0 intercept=1` (FULL OPAQUE alpha — the
21
+ * grey speckle is painted straight, the blend carries the darken/lighten; NOT the
22
+ * lens-A luminance→alpha matrix that gives a near-empty texture). `<filter
23
+ * color-interpolation-filters='sRGB'>` pins sRGB (identical Chrome↔Safari,
24
+ * deterministic seed). NO `feBlend` mud op. Tile 140px (coarse tooth reads as
25
+ * STRUCTURE, survives hiDPI, divides cleanly DPR 1/2/3).
26
+ *
27
+ * THE BLEND LAW (the decisive, physically-true move): `multiply` (light — ink
28
+ * sinks into the paper's pits → darken) / `screen` (dark — fiber catches light →
29
+ * lighten). Baseline, sRGB-safe, identical both engines. Plain per-mode arms.
30
+ *
31
+ * THE ALPHA: `--paper-grain-opacity` re-calibrated to the JND floor (light 0.22 /
32
+ * dark 0.16 — glass-fx.css / dark-arm.css; the inversion the measurements force:
33
+ * multiply on cream is gentle → MORE, screen on ink bites hard → LESS).
34
+ *
35
+ * The LIBRARY FENCE: `--glass-grain-opacity` (0.025/0.045) is BYTE-UNTOUCHED — the
36
+ * calm glass identity stands; paper is loud, glass is a whisper. That separation
37
+ * IS the design.
10
38
  */
11
39
 
40
+ /* The ONE coarse-tooth texture — DRY single source, both utilities resolve it.
41
+ Painted onto a rect at full alpha (`feFuncA slope=0 intercept=1`); the
42
+ mix-blend-mode carries the visibility. sRGB-pinned, deterministic seed. */
43
+ :root {
44
+ --paper-grain-tooth: url("data:image/svg+xml,%3Csvg width='140' height='140' viewBox='0 0 140 140' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='t' x='0' y='0' width='100%25' height='100%25' color-interpolation-filters='sRGB'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.04 0.09' numOctaves='2' seed='7' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3CfeComponentTransfer%3E%3CfeFuncR type='linear' slope='1.8' intercept='-0.4'/%3E%3CfeFuncG type='linear' slope='1.8' intercept='-0.4'/%3E%3CfeFuncB type='linear' slope='1.8' intercept='-0.4'/%3E%3CfeFuncA type='linear' slope='0' intercept='1'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23t)'/%3E%3C/svg%3E");
45
+ --paper-grain-tile: 140px;
46
+ }
47
+
12
48
  @utility paper-underpaint {
13
49
  position: fixed;
14
50
  inset: 0;
15
51
  z-index: -1;
16
52
  pointer-events: none;
17
- background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3CfeBlend mode='multiply' in2='SourceGraphic'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='1'/%3E%3C/svg%3E");
53
+ background-image: var(--paper-grain-tooth);
18
54
  background-repeat: repeat;
19
- background-size: 60px 60px;
20
- opacity: var(--glass-grain-opacity);
55
+ background-size: var(--paper-grain-tile) var(--paper-grain-tile);
56
+ opacity: var(--paper-grain-opacity, var(--glass-grain-opacity));
57
+ /* LIGHT: ink sinks into the cream → multiply darkens the valleys. */
21
58
  mix-blend-mode: multiply;
22
59
  }
23
60
 
24
61
  :where(.dark) .paper-underpaint,
25
62
  .dark .paper-underpaint {
26
- mix-blend-mode: soft-light;
63
+ /* DARK: fiber catches light off the ink → screen lifts (NOT soft-light, which
64
+ collapses to identity on the near-black pole — the self-cancelling defect). */
65
+ mix-blend-mode: screen;
27
66
  }
28
67
 
29
68
  @utility paper-grain-overlay {
@@ -36,23 +75,200 @@
36
75
  inset: 0;
37
76
  border-radius: inherit;
38
77
  pointer-events: none;
39
- background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3CfeBlend mode='multiply' in2='SourceGraphic'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='1'/%3E%3C/svg%3E");
78
+ background-image: var(--paper-grain-tooth);
40
79
  background-repeat: repeat;
41
- background-size: 60px 60px;
42
- opacity: var(--glass-grain-opacity);
43
- mix-blend-mode: overlay;
80
+ background-size: var(--paper-grain-tile) var(--paper-grain-tile);
81
+ opacity: var(--paper-grain-opacity, var(--glass-grain-opacity));
82
+ /* LIGHT tooth: multiply — the physically-true ink-into-pits darken (NOT
83
+ overlay, which is identity on the L≈0.98 cream pole). */
84
+ mix-blend-mode: multiply;
44
85
  }
45
86
  }
46
87
 
47
88
  :where(.dark) .paper-grain-overlay::after,
48
89
  .dark .paper-grain-overlay::after {
49
- mix-blend-mode: soft-light;
90
+ /* DARK tooth: screen — fiber catches light off the ink (NOT soft-light). */
91
+ mix-blend-mode: screen;
92
+ }
93
+
94
+ /* ═══════════════════════════════════════════════════════════════════════
95
+ BD.W-PAGE-FIELD / BD.W-GLASS-FIELD — the WARM COLORFUL FIELD register
96
+ ───────────────────────────────────────────────────────────────────────
97
+ The single highest-leverage piece: it turns the gray storybook WARM. A
98
+ per-route four-layer technicolor CEL (amber key → terracotta mid → sand
99
+ bounce + a warm over-glaze toward the --glass-key corner) PLUS a wide
100
+ low-chroma BASE WASH that raises the floor everywhere, painted at FIELD
101
+ lightness (L 0.90-0.93 light / 0.28-0.34 dark — where the gamut admits
102
+ REAL chroma, NOT the gamut-bound L0.98 plate) OVER the decoupled
103
+ --neutral-0 floor (KEEP-NEUTRAL, untouched, never deleted).
104
+
105
+ ONE primitive, TWO acceptance floors (glass-floor ~0.012 composite-behind-
106
+ glass + field-floor 0.045 ground). The library glass material is BYTE-
107
+ UNTOUCHED — it finally has a backdrop worthy of it.
108
+
109
+ THE WARM-BOUND IS A PAINT INVARIANT: --field-h clamps the route's
110
+ --field-h-raw to [25,95] IN THE CSS calc, so an inline raw:210 CANNOT
111
+ paint teal/navy. The teal/navy purge is enforced at the paint layer.
112
+
113
+ OPT-IN: the warm stops only render under `[data-paper-field]` (the demo
114
+ chassis sets it per glass route) — the calm neutral underpaint stays the
115
+ default for solid-chrome routes; --neutral-0 stays decoupled + calm.
116
+
117
+ CROSS-ENGINE: pure compositor CSS — radial/conic-gradient + oklch() +
118
+ transform only. NO backdrop-filter:url, NO SVG goo, NO trig. oklch ≥ Safari
119
+ 15.4, @property ≥ 16.4, gradients/transform forever. The WebKit premultiply-
120
+ toward-black desaturation hole is dodged: every warm 0-alpha stop is an
121
+ explicit `oklch(L C H / 0)` warm color, NEVER bare `transparent`.
122
+ ═══════════════════════════════════════════════════════════════════════ */
123
+
124
+ /* The warm-bound: clamp the route's raw hue request to [25,95]. A DISTINCT
125
+ var (NOT self-referential `--field-h: max(var(--field-h),…)` which is a
126
+ no-op) — the route writes --field-h-raw, the field resolves --field-h.
127
+ Set on the field element itself so the clamp resolves even when the chassis
128
+ writes --field-h-raw on an ancestor. */
129
+ .paper-field {
130
+ --field-h: clamp(25, var(--field-h-raw, 62), 95);
131
+ }
132
+
133
+ /* The warm-cel GROUND — a dedicated fixed plane the chassis mounts UNDER the
134
+ grain (the grain `.paper-underpaint` rides on top at its 0.22 multiply
135
+ opacity; the field paints true at full opacity / normal blend, so the grain
136
+ does NOT crush the pigment). ONE <PaperBackdrop field> component emits both,
137
+ stacked — one backdrop mount, grain on top, warm field below. */
138
+ .paper-field {
139
+ position: fixed;
140
+ inset: 0;
141
+ /* one step BELOW the grain underpaint (the chassis mounts the grain at
142
+ -z-10) so the grain rides ON TOP of the warm field — one backdrop, two
143
+ stacked planes. Still above the page floor (content is z 0+). */
144
+ z-index: -11;
145
+ pointer-events: none;
146
+ /* L4 warm over-glaze — a faint cel sheen brightest toward the upper-right
147
+ --glass-key corner (cel coherence: field + glass rim/cast share ONE key).
148
+ --glass-key is a KEYWORD (upper-right), so the glaze is positioned by a
149
+ fixed `at`/`from` matching it — NEVER a `-58deg`/keyword-as-angle bug. */
150
+ background:
151
+ conic-gradient(
152
+ from -45deg at 78% 22%,
153
+ oklch(0.96 0.05 calc(var(--field-h) + 6) / calc(0.30 * var(--field-intensity))),
154
+ oklch(0.96 0.05 calc(var(--field-h) + 6) / 0) 28%,
155
+ oklch(0.96 0.05 calc(var(--field-h) + 6) / 0) 72%,
156
+ oklch(0.96 0.05 calc(var(--field-h) + 6) / calc(0.18 * var(--field-intensity)))
157
+ ),
158
+ /* the wide warm BASE WASH — raises the floor EVERYWHERE (no flat gap). */
159
+ radial-gradient(
160
+ 120% 100% at 50% 50%,
161
+ oklch(0.91 0.075 calc(var(--field-h) + 8) / calc(0.50 * var(--field-intensity))),
162
+ oklch(0.91 0.075 calc(var(--field-h) + 8) / 0) 100%
163
+ ),
164
+ /* L3 sand fill-light bounce (bottom-right). */
165
+ radial-gradient(
166
+ 95% 80% at 80% 88%,
167
+ oklch(0.88 0.115 calc(var(--field-h) + 30) / calc(0.90 * var(--field-intensity))),
168
+ oklch(0.88 0.115 calc(var(--field-h) + 30) / 0) 70%
169
+ ),
170
+ /* L2 terracotta saturated mid (right band, where the cards sit). */
171
+ radial-gradient(
172
+ 95% 78% at 78% 30%,
173
+ oklch(0.85 0.145 calc(var(--field-h) - 24) / calc(0.90 * var(--field-intensity))),
174
+ oklch(0.85 0.145 calc(var(--field-h) - 24) / 0) 72%
175
+ ),
176
+ /* L1 amber key mass (densest pigment, top-left toward the key-light). */
177
+ radial-gradient(
178
+ 100% 84% at 24% 20%,
179
+ oklch(0.87 0.155 calc(var(--field-h)) / calc(0.95 * var(--field-intensity))),
180
+ oklch(0.87 0.155 calc(var(--field-h)) / 0) 75%
181
+ ),
182
+ var(--neutral-0); /* L0 the KEEP-NEUTRAL solid floor — decoupled. */
183
+ }
184
+
185
+ /* DARK: warm-LUMINOUS — lower L, KEEP chroma; NEVER gray-charcoal. Plain
186
+ ancestor `.dark .x` (a scoped :global(.dark) silently drops; this is a
187
+ non-scoped global stylesheet so a plain `.dark` ancestor is correct). */
188
+ .dark .paper-field {
189
+ background:
190
+ conic-gradient(
191
+ from -45deg at 78% 22%,
192
+ oklch(0.42 0.05 calc(var(--field-h) + 6) / calc(0.30 * var(--field-intensity))),
193
+ oklch(0.42 0.05 calc(var(--field-h) + 6) / 0) 28%,
194
+ oklch(0.42 0.05 calc(var(--field-h) + 6) / 0) 72%,
195
+ oklch(0.42 0.05 calc(var(--field-h) + 6) / calc(0.18 * var(--field-intensity)))
196
+ ),
197
+ radial-gradient(
198
+ 120% 100% at 50% 50%,
199
+ oklch(0.30 0.055 calc(var(--field-h) + 8) / calc(0.50 * var(--field-intensity))),
200
+ oklch(0.30 0.055 calc(var(--field-h) + 8) / 0) 100%
201
+ ),
202
+ radial-gradient(
203
+ 95% 80% at 80% 88%,
204
+ oklch(0.34 0.085 calc(var(--field-h) + 30) / calc(0.90 * var(--field-intensity))),
205
+ oklch(0.34 0.085 calc(var(--field-h) + 30) / 0) 70%
206
+ ),
207
+ radial-gradient(
208
+ 95% 78% at 78% 30%,
209
+ oklch(0.33 0.10 calc(var(--field-h) - 24) / calc(0.90 * var(--field-intensity))),
210
+ oklch(0.33 0.10 calc(var(--field-h) - 24) / 0) 72%
211
+ ),
212
+ radial-gradient(
213
+ 100% 84% at 24% 20%,
214
+ oklch(0.36 0.11 calc(var(--field-h)) / calc(0.95 * var(--field-intensity))),
215
+ oklch(0.36 0.11 calc(var(--field-h)) / 0) 75%
216
+ ),
217
+ var(--neutral-0);
218
+ }
219
+
220
+ /* The CARTOON DRIFT — liquid-weight on the ground: anticipation (pull-back) →
221
+ arc sweep (translate + rotate on ONE curve) → follow-through overshoot, baked
222
+ by --ease-cartoon-punch (DEPEND on BD.W-CARTOON-PUNCH, no literal-cubic dup).
223
+ Rides a `::before` copy of the bg (the field plane has a FREE ::before, no
224
+ collision with the grain). The warm stops survive PRM; only the drift
225
+ freezes. */
226
+ .paper-field::before {
227
+ content: "";
228
+ position: absolute;
229
+ inset: -28%;
230
+ background: inherit;
231
+ opacity: 0.72;
232
+ pointer-events: none;
233
+ animation: field-cel-drift 42s
234
+ var(--ease-cartoon-punch, cubic-bezier(0.5, -0.2, 0.4, 1.2)) infinite
235
+ alternate;
236
+ will-change: transform;
237
+ content-visibility: auto;
238
+ }
239
+
240
+ @keyframes field-cel-drift {
241
+ /* independent translate:/scale:/rotate: LONGHANDS — a `transform: scale()`
242
+ shorthand would clobber the translate centering (build-trap e). */
243
+ from {
244
+ translate: -1.5% 1%;
245
+ scale: 1;
246
+ rotate: -1.2deg;
247
+ }
248
+ to {
249
+ translate: 2.5% -2.5%;
250
+ scale: 1.07;
251
+ rotate: 2.4deg;
252
+ }
50
253
  }
51
254
 
52
255
  /* ═══════════════════════════════════════════════
53
256
  A11y — respect user motion + transparency preferences
54
257
  ═══════════════════════════════════════════════ */
258
+ @media (prefers-reduced-motion: reduce) {
259
+ /* the drift freezes — the warm field STAYS (it is content, not motion). */
260
+ .paper-field::before {
261
+ animation: none;
262
+ }
263
+ }
264
+
55
265
  @media (prefers-reduced-transparency: reduce) {
266
+ /* the warm stops drop to 0-alpha; the decoupled --neutral-0 floor shows
267
+ (the calm opaque legibility floor). The field is a transmissive
268
+ enhancement, NEVER a legibility dependency. */
269
+ .paper-field {
270
+ --field-intensity: 0;
271
+ }
56
272
  .paper-underpaint,
57
273
  .paper-grain-overlay::after {
58
274
  opacity: 0;
@@ -19,9 +19,11 @@
19
19
  * the implicit stagger [NO setTimeout], the spring-clocked
20
20
  * coupled transform+opacity build).
21
21
  * .scroll-pin — the fixed-stage-advances-time scroll-pinned register
22
- * (position: sticky stage + a named scroll-timeline linked via
23
- * timeline-scope; the stage's internal phases advance with
24
- * scroll progress, compositor channels only).
22
+ * (position: sticky stage; the stage's internal phases advance
23
+ * against a spring-damped `--pin-t` the keyframes.js scroll spine
24
+ * `useScrollPin` writes per scroll tick — EVERY engine, no
25
+ * `animation-timeline`. The dead `--gl-pin` named scroll-timeline
26
+ * is EXCISED — BD.W-SCROLL-LIQUID-ENGINE).
25
27
  * .smooth-scroll — the native scroll-behavior: smooth opt-in (PRM-gated,
26
28
  * zero runtime — a smooth-scroll under reduce is a vestibular
27
29
  * concern, so the smooth interpolation is dropped under PRM).
@@ -31,9 +33,10 @@
31
33
  * so under PRM no scroll/build animation attaches at all and content renders in
32
34
  * its terminal state (the `from` keyframe never applies because the animation
33
35
  * never binds; the .scroll-pin stage shows its terminal phase, no sweep). The
34
- * scroll-driven recipes sit under a second `@supports (animation-timeline: …)`
35
- * gate so a non-supporting engine gets the STATIC layout (the .scroll-pin stage
36
- * is a correct non-pinned read, never a broken silent stage).
36
+ * `view()`-cascade recipe sits under a second `@supports (animation-timeline: …)`
37
+ * gate so a non-supporting engine gets the STATIC cascade layout. The .scroll-pin
38
+ * register needs NO `@supports` gate — its `--pin-t` is JS-written by `useScrollPin`
39
+ * on every engine; under PRM the composable zeroes the scrub (1:1, no drift).
37
40
  *
38
41
  * COMPOSITOR-ONLY (the proof:no-layout-animation floor BB.W-CARD-COMPOSITE): every
39
42
  * @keyframes step + transition animates ONLY transform/translate/scale/opacity/
@@ -45,6 +48,39 @@
45
48
  * register THREADS them, it never re-tunes a spring value or a duration).
46
49
  */
47
50
 
51
+ /* ─────────────────────────────────────────────────────────────────────────────
52
+ * BD.W-SCROLL-LIQUID-ENGINE — the liquid-weight scroll tokens.
53
+ *
54
+ * The `--ease-scroll-spring` is the compositor spring-scrub the cascade rides
55
+ * (ZERO JS). The pin-phase fractions are the calc-friendly window bounds the
56
+ * `--pin-t` recipes read (a NUMBER, not the `%` the dead `animation-range` used).
57
+ * All golden-proportioned (1/φ family). The liquid-weight scrub itself is a JS-side
58
+ * param of `useScrollScene`/`useScrollPin` (the φ-derived defaults live in the
59
+ * composables, PRM → 0 inside them). The cartoon-punch deps
60
+ * (`--motion-weight`/`--ease-cartoon-punch`/`--shadow-cartoon-md`) SHIP today and are
61
+ * consumed via `var(…, fallback)` so the recipes stay GREEN. */
62
+ :root {
63
+ /* The spring-shaped compositor cascade ease — the `--spring-gentle` twin
64
+ (ζ ≈ 0.85, a `springLinearStops` `linear()` stop-set). Degrades to the
65
+ no-overshoot `--ease-out` where `linear()` is unsupported (Safari < 17.2 —
66
+ the house precedent). `--spring-gentle` SHIPS (scheme-motion.css). */
67
+ --ease-scroll-spring: var(--spring-gentle, var(--ease-out, ease-out));
68
+ /* The pin reveal/expand windows as 0..1 fractions (the `--pin-t` recipes read
69
+ a NUMBER for the calc, not the `%` the dead timeline used). 1/φ² + 0.9. */
70
+ --scroll-pin-phase-reveal-end-frac: 0.382;
71
+ --scroll-pin-phase-expand-end-frac: 0.9;
72
+ /* The volume-preserving squash depth — 1 − 1/φ⁴. */
73
+ --scroll-pin-squash-floor: 0.944;
74
+ }
75
+
76
+ @supports not (animation-timing-function: linear(0, 1)) {
77
+ :root {
78
+ /* Where `linear()` is unsupported the spring twin cannot resolve — fall to
79
+ the no-overshoot settle bezier (a scrubbed spring without the stop-set). */
80
+ --ease-scroll-spring: var(--ease-out, ease-out);
81
+ }
82
+ }
83
+
48
84
  /* ─────────────────────────────────────────────────────────────────────────────
49
85
  * .scroll-build — the route-enter page-build.
50
86
  *
@@ -160,8 +196,15 @@
160
196
  progress map (the spring shaping lives in the section's own settle
161
197
  where the build is mount-driven; a scroll-bound timeline reads
162
198
  1:1 with scroll position — a spring on a scrubbed timeline reads as
163
- a scrubbed spring, which is correct here as the linear progress map). */
164
- animation: gl-cascade-build auto linear both;
199
+ a scrubbed spring, which is correct here as the linear progress map).
200
+
201
+ BD.W-SCROLL-LIQUID-ENGINE: the easing is the spring-shaped
202
+ `--ease-scroll-spring` (a `springLinearStops` `linear()` twin of
203
+ `--spring-gentle`, ζ ≈ 0.85) — each card's scroll-scrubbed entrance
204
+ reads with spring WEIGHT (a hair of overshoot at the end of its
205
+ range), ZERO JS (the platform carries it on the compositor). The
206
+ Safari-degrade-to-cel-slam arm lives in the entrance-reveal scope. */
207
+ animation: gl-cascade-build auto var(--ease-scroll-spring, linear) both;
165
208
  animation-timeline: view(block);
166
209
  animation-range: entry 0% entry var(--scroll-cascade-range-end, 45%);
167
210
  }
@@ -202,83 +245,97 @@
202
245
  }
203
246
 
204
247
  /* ─────────────────────────────────────────────────────────────────────────────
205
- * .scroll-pin — the fixed-stage-advances-time scroll-pinned register.
248
+ * .scroll-pin — the fixed-stage-advances-time scroll-pinned register, RE-INVENTED
249
+ * on a JS-written `--pin-t` (BD.W-SCROLL-LIQUID-ENGINE).
250
+ *
251
+ * THE DEFECT (excised, no alias): the prior register bound the phase reveals to a
252
+ * named `scroll-timeline: --gl-pin` declared on `.scroll-pin` + `timeline-scope:
253
+ * --gl-pin`. A named scroll-timeline measures the DECLARING element's OWN scroll
254
+ * progress — but `.scroll-pin` is `overflow: visible` with zero internal scroll
255
+ * extent, so it is NOT a scroll port: `--gl-pin`'s `currentTime` was permanently
256
+ * `null` and the bound `gl-pin-reveal` animation parked at its `from` keyframe
257
+ * forever (dead on EVERY engine, including those that fully support the native
258
+ * feature — structural deadness, not a Safari degrade).
206
259
  *
207
- * The SOTA "scrolling does not move the scene, it advances time inside it" model:
208
- * a `.scroll-pin` tall container (the `--scroll-pin-stage-height` temporal space)
209
- * holds a `.scroll-pin-stage` `position: sticky` element. The container declares
210
- * a named `scroll-timeline`; the stage's internal phase animations bind to that
211
- * named timeline via `timeline-scope` (so the stage animates against the
212
- * CONTAINER'S scroll progress — the fixed stage advances time). The phase
213
- * animations are compositor-only (transform/opacity/clip-path over the
214
- * `animation-range` phase windows — the Codrops phased sequence: a reveal phase
215
- * 0..45%, an expand phase 45..90%, a settle phase 90..100%).
260
+ * THE FIX (every engine, no `animation-timeline`, no `@supports` gate): the stage
261
+ * is plain `position: sticky` + `contain: layout paint` (bounded recalc); the
262
+ * phases read a SPRING-DAMPED `--pin-t ∈ [0, 1]` that `useScrollPin` (the
263
+ * keyframes.js scroll spine — `SpringProgress` over the ONE `createScrollReader`)
264
+ * writes off the REAL scroll port per coalesced tick. The reveal arrives with
265
+ * inertia, overshoots (ζ ≈ 0.85), then settles — the cartoon-slam felt register.
266
+ * Works on Safari 15+ with no timeline primitive.
216
267
  *
217
- * `timeline-scope` is the newest primitive — the `@supports` gate probes it (NOT
218
- * just `scroll()`), so an engine with `scroll()`/`view()` but not `timeline-scope`
219
- * gets the STATIC layout (a correct non-pinned read: the stage is a plain sticky
220
- * element at its terminal phase, never a broken silent stage). In 2026
221
- * `timeline-scope` ships alongside `scroll()`/`view()` (the universal-support
222
- * convergence), so the CSS-only register is the ship; the JS fallback leaf (mirror
223
- * useScrollProgress's dual-path single-writer) is BOOKED only on a material
224
- * engine-gap reveal (the §Triumvirate support-matrix trigger) — never a JS scroll
225
- * lib (the no-net-dep fence is binding either way).
268
+ * Liquid weight is the DEFAULT here (the §L4 no-stiff-snap law): `useScrollPin`'s
269
+ * `SpringProgress` keeps converging AFTER the finger lifts. PRM zeroes the scrub
270
+ * (the pin scrub → 0 under reduce inside the composable) so `--pin-t` tracks
271
+ * scroll 1:1 with no interpolated drift — the vestibular floor.
226
272
  * ─────────────────────────────────────────────────────────────────────────── */
227
- @media (prefers-reduced-motion: no-preference) {
228
- @supports (animation-timeline: scroll()) and (timeline-scope: --gl-pin) {
229
- @keyframes gl-pin-reveal {
230
- from {
231
- opacity: 0;
232
- transform: translateY(var(--scroll-pin-lift, 2.5rem)) scale(0.96);
233
- }
234
- to {
235
- opacity: 1;
236
- transform: translateY(0) scale(1);
237
- }
238
- }
239
- @keyframes gl-pin-settle {
240
- from {
241
- transform: scale(1);
242
- opacity: 1;
243
- }
244
- to {
245
- /* The settle phase — a gentle compositor drift, never a layout move. */
246
- transform: scale(1.02) translateY(calc(-1 * var(--scroll-pin-lift, 2.5rem)));
247
- opacity: 1;
248
- }
249
- }
250
273
 
251
- /* The tall temporal container declares a named scroll-timeline + exposes it
252
- to descendants via timeline-scope (the fixed-stage-advances-time link). */
253
- .scroll-pin {
254
- position: relative;
255
- block-size: var(--scroll-pin-stage-height, 320vh);
256
- scroll-timeline-name: --gl-pin;
257
- scroll-timeline-axis: block;
258
- timeline-scope: --gl-pin;
259
- }
274
+ /* The typed pin progress register — `inherits: true` so the sticky stage + the
275
+ phase children read the `--pin-t` written on the `.scroll-pin` container; a typed
276
+ `@property` makes the calc cheaper + lets an optional native cosmetic-parallax leg
277
+ composite it. Registered OUTSIDE the PRM gate (a custom property is inert — it only
278
+ drives motion through the recipes below, which ARE PRM-gated). */
279
+ @property --pin-t {
280
+ syntax: "<number>";
281
+ inherits: true;
282
+ initial-value: 0;
283
+ }
260
284
 
261
- /* The sticky stage — pinned to the viewport while the container scrolls
262
- past; its phases advance against the container's --gl-pin timeline. */
263
- .scroll-pin-stage {
264
- position: sticky;
265
- inset-block-start: 0;
266
- }
285
+ .scroll-pin {
286
+ position: relative;
287
+ block-size: var(--scroll-pin-stage-height, 320vh);
288
+ }
267
289
 
268
- /* Phase 1 — the reveal (0..45% of the container scroll). */
269
- .scroll-pin-stage .scroll-pin-phase-reveal {
270
- animation: gl-pin-reveal auto linear both;
271
- animation-timeline: --gl-pin;
272
- animation-range: 0% var(--scroll-pin-phase-reveal-end, 45%);
273
- }
290
+ .scroll-pin-stage {
291
+ position: sticky;
292
+ inset-block-start: 0;
293
+ /* Bounded main-thread recalc — the `--pin-t` write is a style recalc on this
294
+ isolated subtree, NOT a reflow (translate/scale/opacity don't reflow). */
295
+ contain: layout paint;
296
+ }
274
297
 
275
- /* Phase 2 — the settle/expand (the reveal-end..expand-end window). */
276
- .scroll-pin-stage .scroll-pin-phase-settle {
277
- animation: gl-pin-settle auto linear both;
278
- animation-timeline: --gl-pin;
279
- animation-range: var(--scroll-pin-phase-reveal-end, 45%)
280
- var(--scroll-pin-phase-expand-end, 90%);
281
- }
298
+ @media (prefers-reduced-motion: no-preference) {
299
+ /* Phase 1 — the reveal. Reads `--pin-t` mapped across the reveal window
300
+ (0 .. --scroll-pin-phase-reveal-end-frac). The lift + squash ride the
301
+ compositor longhands (`translate`/`scale` — NEVER the `transform` shorthand,
302
+ which would fold a centering translate; the longhands stack independently).
303
+ The squash floor is volume-preserving (a hair of squash on entry). */
304
+ .scroll-pin-stage .scroll-pin-phase-reveal {
305
+ --t: clamp(
306
+ 0,
307
+ calc(var(--pin-t, 0) / var(--scroll-pin-phase-reveal-end-frac, 0.382)),
308
+ 1
309
+ );
310
+ opacity: var(--t);
311
+ translate: 0 calc((1 - var(--t)) * var(--scroll-pin-lift, 2.5rem));
312
+ scale: calc(
313
+ var(--scroll-pin-squash-floor, 0.944) +
314
+ (1 - var(--scroll-pin-squash-floor, 0.944)) * var(--t)
315
+ );
316
+ /* will-change scoped to the active phase — added while the pin is in range,
317
+ never the full 320vh lifetime (the audit's transient-promotion rule). */
318
+ will-change: transform, opacity;
319
+ }
320
+
321
+ /* Phase 2 — the settle/drift. Reads the reveal-end..expand-end window of
322
+ `--pin-t`; a gentle compositor drift as the reader continues past, never a
323
+ layout move. */
324
+ .scroll-pin-stage .scroll-pin-phase-settle {
325
+ --t: clamp(
326
+ 0,
327
+ calc(
328
+ (var(--pin-t, 0) - var(--scroll-pin-phase-reveal-end-frac, 0.382)) /
329
+ (
330
+ var(--scroll-pin-phase-expand-end-frac, 0.9) -
331
+ var(--scroll-pin-phase-reveal-end-frac, 0.382)
332
+ )
333
+ ),
334
+ 1
335
+ );
336
+ opacity: 1;
337
+ translate: 0 calc(var(--t) * -1 * var(--scroll-pin-lift, 2.5rem));
338
+ scale: calc(1 + 0.02 * var(--t));
282
339
  }
283
340
  }
284
341