@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,5 +1,5 @@
1
- import { t as e } from "./_plugin-vue_export-helper-C1je1s0u.js";
2
- import { n as t, t as n } from "./prng-B-d9eYX8.js";
1
+ import { t as e } from "./_plugin-vue_export-helper-gLzyemvl.js";
2
+ import { n as t, t as n } from "./prng-B5tIXTtj.js";
3
3
  import { computed as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, defineComponent as c, normalizeClass as l, normalizeStyle as u, onUnmounted as d, openBlock as f, ref as p, renderSlot as m, resolveDynamicComponent as h, toRef as g, useId as _, watch as v, withCtx as y } from "vue";
4
4
  //#region src/components/custom/watercolor-dot/prng.ts
5
5
  function b(e, t, n) {
@@ -87,14 +87,7 @@ var T = {
87
87
  class: "watercolor-filter-host",
88
88
  "aria-hidden": "true",
89
89
  focusable: "false"
90
- }, E = ["seed"], D = {
91
- key: 0,
92
- class: "watercolor-ghost-overlay",
93
- "aria-hidden": "true",
94
- focusable: "false",
95
- preserveAspectRatio: "none",
96
- viewBox: "0 0 100 100"
97
- }, O = /* @__PURE__ */ e(/* @__PURE__ */ c({
90
+ }, E = ["seed"], D = /* @__PURE__ */ e(/* @__PURE__ */ c({
98
91
  __name: "WatercolorDot",
99
92
  props: {
100
93
  color: {},
@@ -118,17 +111,17 @@ var T = {
118
111
  function C() {
119
112
  x.value = !0, t.animate && S.nudge();
120
113
  }
121
- let O = r(() => t.animate ? S.borderRadius.value : x.value ? S.hoverBorderRadius.value : S.borderRadius.value), k = r(() => t.animate ? S.transform.value : "none");
114
+ let D = r(() => t.animate ? S.borderRadius.value : x.value ? S.hoverBorderRadius.value : S.borderRadius.value), O = r(() => t.animate ? S.transform.value : "none");
122
115
  return (t, n) => (f(), i(h(e.tag), {
123
116
  class: l(["watercolor-swatch", e.animate && "watercolor-animated"]),
124
117
  "data-testid": "watercolor-swatch",
125
118
  "data-variant": e.variant,
126
119
  style: u({
127
120
  backgroundColor: e.variant === "ghost" ? void 0 : e.color,
128
- borderRadius: O.value,
121
+ borderRadius: D.value,
129
122
  "--watercolor-color": e.color,
130
123
  "--watercolor-filter": d.value,
131
- "--watercolor-wobble": k.value
124
+ "--watercolor-wobble": O.value
132
125
  }),
133
126
  onMouseenter: C,
134
127
  onMouseleave: n[0] ||= (e) => x.value = !1
@@ -155,18 +148,15 @@ var T = {
155
148
  xChannelSelector: "R",
156
149
  yChannelSelector: "G"
157
150
  }, null, -1)])])])),
158
- e.variant === "ghost" ? (f(), o("svg", D, [s("ellipse", {
151
+ e.variant === "ghost" ? (f(), o("div", {
152
+ key: 0,
159
153
  class: "watercolor-ghost-stroke",
160
- cx: "50",
161
- cy: "50",
162
- rx: "46",
163
- ry: "46",
164
- fill: "none",
165
- stroke: "var(--watercolor-color)",
166
- "stroke-width": "2",
167
- "vector-effect": "non-scaling-stroke",
168
- style: u({ filter: d.value })
169
- }, null, 4)])) : a("", !0),
154
+ "aria-hidden": "true",
155
+ style: u({
156
+ borderRadius: D.value,
157
+ filter: d.value
158
+ })
159
+ }, null, 4)) : a("", !0),
170
160
  m(t.$slots, "default", {}, void 0, !0)
171
161
  ]),
172
162
  _: 3
@@ -176,6 +166,6 @@ var T = {
176
166
  "style"
177
167
  ]));
178
168
  }
179
- }), [["__scopeId", "data-v-76317add"]]);
169
+ }), [["__scopeId", "data-v-a14ed6a5"]]);
180
170
  //#endregion
181
- export { O as WatercolorDot, n as hashString, t as mulberry32, x as radiiToCSS, b as randomRadii, w as useWatercolorBlob };
171
+ export { D as WatercolorDot, n as hashString, t as mulberry32, x as radiiToCSS, b as randomRadii, w as useWatercolorBlob };
@@ -0,0 +1,19 @@
1
+ //#region src/composables/motion/core/writeVelocityWeight.ts
2
+ var e = .618;
3
+ function t(t, n) {
4
+ if (!t) return;
5
+ let r = n < 0 ? 0 : n > 1 ? 1 : n, i = e + (1 - e) * r;
6
+ t.style.setProperty("--flex-vel", r.toFixed(4)), t.style.setProperty("--motion-weight", i.toFixed(4));
7
+ }
8
+ function n(t, n) {
9
+ if (n <= 1) return n < 1 ? 1 : n;
10
+ let r = e, i = 0;
11
+ if (t) {
12
+ let e = getComputedStyle(t), n = Number.parseFloat(e.getPropertyValue("--motion-weight")), a = Number.parseFloat(e.getPropertyValue("--flex-vel"));
13
+ Number.isFinite(n) && (r = n < 0 ? 0 : n), Number.isFinite(a) && (i = a < 0 ? 0 : a > 1 ? 1 : a);
14
+ }
15
+ let a = r + (1 - r) * i, o = 1 + (n - 1) * (a / e);
16
+ return o < 1 ? 1 : o;
17
+ }
18
+ //#endregion
19
+ export { n, t as r, e as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mkbabb/glass-ui",
3
- "version": "4.1.0",
3
+ "version": "4.2.0",
4
4
  "description": "Glassmorphic design system — Vue 3.5 components, reka-ui primitives, Tailwind CSS v4 tokens",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -717,11 +717,17 @@
717
717
  "proof:dock-taxonomy": "node scripts/proof-dock-taxonomy.mjs",
718
718
  "proof:dock-contextual-layers": "node scripts/proof-dock-contextual-layers.mjs",
719
719
  "proof:morph-showcase": "node scripts/proof-morph-showcase.mjs",
720
+ "proof:dock-fission": "node scripts/proof-dock-fission.mjs",
721
+ "proof:dock-gallery": "node scripts/proof-dock-gallery.mjs",
722
+ "proof:metaball-bridge2": "node scripts/proof-metaball-bridge2.mjs",
723
+ "proof:haptic-couple": "node scripts/proof-haptic.mjs",
724
+ "proof:celebration-burst": "node scripts/proof-celebration-burst.mjs",
720
725
  "proof:blob-page": "node scripts/proof-blob-page.mjs",
721
726
  "proof:blob-page-fence": "node scripts/proof-blob-page-fence.mjs",
722
727
  "proof:motion-demo": "node scripts/proof-motion-demo.mjs",
723
728
  "proof:motion2": "node scripts/proof-motion2.mjs",
724
729
  "proof:dock-sections": "node scripts/proof-dock-sections.mjs",
730
+ "proof:dock-context": "node scripts/proof-dock-context.mjs",
725
731
  "proof:dock-morph-insitu": "node scripts/proof-dock-morph-insitu.mjs",
726
732
  "proof:shell-hold": "node scripts/proof-shell-hold.mjs",
727
733
  "proof:az-reflect": "node scripts/proof-az-reflect.mjs",
@@ -756,6 +762,7 @@
756
762
  "proof:spa-view": "node scripts/proof-spa-view.mjs",
757
763
  "proof:card-tier-alpha": "node scripts/proof-card-tier-alpha.mjs",
758
764
  "proof:dockmorph-cta": "node scripts/proof-dockmorph-cta.mjs",
765
+ "proof:bloom-up": "node scripts/proof-bloom-up.mjs",
759
766
  "proof:gpu-substrate-single": "node scripts/proof-gpu-substrate-single.mjs",
760
767
  "proof:desktop-reserve": "node scripts/proof-desktop-reserve.mjs",
761
768
  "proof:pointer-velocity": "node scripts/proof-pointer-velocity.mjs",
@@ -900,6 +907,7 @@
900
907
  "proof:dark-material": "node scripts/proof-dark-material.mjs",
901
908
  "proof:no-gray": "node scripts/proof-no-gray.mjs",
902
909
  "proof:surface-axis": "node scripts/proof-surface-axis.mjs",
910
+ "proof:glass-foundation": "node scripts/proof-glass-foundation.mjs",
903
911
  "proof:menu-glass": "node scripts/proof-menu-glass.mjs",
904
912
  "proof:pager-ring": "node scripts/proof-pager-ring.mjs",
905
913
  "proof:icon-chip": "node scripts/proof-icon-chip.mjs",
@@ -975,8 +983,11 @@
975
983
  "proof:dock-vertical-clickable": "node scripts/proof-dock-vertical-clickable.mjs",
976
984
  "proof:dock-collapsed-both": "node scripts/proof-dock-collapsed-both.mjs",
977
985
  "proof:dock-stack-rail": "node scripts/proof-dock-stack-rail.mjs",
986
+ "proof:dock-rail-realize": "node scripts/proof-dock-rail-realize.mjs",
978
987
  "proof:dock-cockpit": "node scripts/proof-dock-cockpit.mjs",
979
988
  "proof:tabs-ios": "node scripts/proof-tabs-ios.mjs",
989
+ "proof:aria-orientation": "node scripts/proof-aria-orientation.mjs",
990
+ "proof:dock-a11y": "node scripts/proof-dock-a11y.mjs",
980
991
  "proof:liquid-tab": "node scripts/proof-liquid-tab.mjs",
981
992
  "proof:underline-tune": "node scripts/proof-underline-tune.mjs",
982
993
  "proof:virtual-window": "node scripts/proof-virtual-window.mjs",
@@ -1042,7 +1053,7 @@
1042
1053
  },
1043
1054
  "peerDependencies": {
1044
1055
  "@lucide/vue": "^1.16.0",
1045
- "@mkbabb/keyframes.js": "^4.0.0",
1056
+ "@mkbabb/keyframes.js": "^5.0.0",
1046
1057
  "@mkbabb/pencil-boil": "^0.4.1",
1047
1058
  "@mkbabb/value.js": "^0.13.0 || ^1.0.0",
1048
1059
  "@vueuse/core": "^14.0",
@@ -1080,7 +1091,7 @@
1080
1091
  },
1081
1092
  "devDependencies": {
1082
1093
  "@lucide/vue": "^1.20.0",
1083
- "@mkbabb/keyframes.js": "^4.3.0",
1094
+ "@mkbabb/keyframes.js": "^5.1.0",
1084
1095
  "@mkbabb/pencil-boil": "^0.4.1",
1085
1096
  "@mkbabb/value.js": "^0.13.0 || ^1.0.0",
1086
1097
  "@tailwindcss/postcss": "^4.3.1",
@@ -6,6 +6,122 @@
6
6
  * only the 5-rung glass ladder. */
7
7
 
8
8
  @layer components {
9
+ /* ── BD.W-CARD-MATERIAL-FLOOR — the card-surface warm tint-seam enrollment ──
10
+ The §4 leg-(a) material floor, reconciled to the SHIPPED `--glass-tint-*`
11
+ seam (NOT a fork, NOT a global re-tint). The card's glass/cartoon surfaces
12
+ ride the `.glass-${tier}` ladder rung, whose fill is already
13
+ `color-mix(in oklab, --glass-bg-${tier}, --glass-tint-source --glass-tint-
14
+ strength)` (ladder.css) — so the card reaches the warm floor by setting a
15
+ CARD-LOCAL non-zero `--glass-tint-strength` (the global default at
16
+ surface-axis.css:83 stays `0%`, so the 6 other seam-readers — drawer / menu /
17
+ veil / jubilance / .btn-glass / .segmented-indicator — are byte-unchanged:
18
+ the blast-radius bite). `--glass-tint-source` defaults to `var(--card)` (a
19
+ warm cream, glass-fx.css:158), so the floor is warm by construction in BOTH
20
+ modes. The card clears the warm-chroma floor (C ≥ 0.02 warm) in the MATERIAL
21
+ itself — before the field even lands, and on a dead ground (print / reduced-
22
+ transparency), the "far too gray" verdict closes at the material layer.
23
+
24
+ SCOPE — `[data-surface]` is `glass` or `cartoon` (NOT `veil`: veil owns its
25
+ own `--veil-bg` tint seam below; NOT `opaque`: the solid `--card` plate is
26
+ already warm-cream). The strength is set on the host so it inherits into the
27
+ rung's `color-mix`. This is a card-local re-point of the SHIPPED seam — DRY,
28
+ no second compositing axis, the ladder rung does the mix. */
29
+ [data-slot="card"]:where(
30
+ [data-surface="glass"],
31
+ [data-surface="cartoon"]
32
+ ) {
33
+ --glass-tint-strength: 8%;
34
+ /* BD.W-CARD-CEL-MOTION (§3.1) — the defined-edge border-ink floor. The
35
+ ladder rung's `--glass-border-resting`/`-quiet` ink is 4% warm
36
+ (glass.css:331-332) — it vanishes cream-on-cream (K3 RED). Floor the
37
+ card's own border-ink UP to ≥8% warm-ink so the cel reads as a defined
38
+ SHAPE (WCAG 1.4.11 non-text). `--glass-border-rung` is the per-rung ink
39
+ the accent-composed `--glass-border-accent` reads (ladder.css /
40
+ surfaces.css); re-pointing it card-locally floors the border WITHOUT
41
+ forking the rim (the keyed two-stop rim from `--glass-material-rim` is
42
+ CONSUMED unchanged — the card does NOT re-mint a rim). Warm (the
43
+ `--foreground` mix is warm-cream in both modes); the `.dark` ink lifts
44
+ off the near-black field through the same `--foreground` flip. */
45
+ --glass-border-rung: color-mix(in srgb, var(--foreground) 9%, transparent);
46
+ }
47
+
48
+ /* BD.W-CARD-CEL-MOTION (§3.2) — the inner catch-light over the field. A faint
49
+ `screen`-blended warm catch sits where the upper-right `--glass-key` sun
50
+ hits, lifting the cel off the field (the §3 layer-4 catch, coherent with the
51
+ rim + cast — ONE key). It rides the host `background-image` stack ALONGSIDE
52
+ the field underlayer (both are static gradients in the same longhand; the
53
+ catch is the FIRST layer so it sits over the warm underlayer), so it adds NO
54
+ pseudo (`::before` = moving specular, `::after` = grain — both occupied).
55
+ `screen` lifts only where there is light, never darkening — and it is below
56
+ content + clipped to the host radius, so it never washes the text column
57
+ (the K-AA carve). Under `prefers-contrast: more` the screen blend is dropped
58
+ (the catch is decoration, the edge is the legibility asset). */
59
+ [data-slot="card"][data-surface="glass"]:not(.paper-grid) {
60
+ background-blend-mode: screen, normal;
61
+ }
62
+ @media (prefers-contrast: more) {
63
+ [data-slot="card"][data-surface="glass"]:not(.paper-grid) {
64
+ background-blend-mode: normal;
65
+ }
66
+ }
67
+
68
+ /* ── BD.W-CARD-FIELD-FLOOR — the orphan-card static warm field underlayer ──
69
+ The §2 leg-(b) structural contract, card-local fallback. The COMMON case is
70
+ ancestor-supplied: the page mounts ONE global `[data-paper-field]` plane
71
+ (AppShell) behind every route, and the card composites over it. The ORPHAN
72
+ case is a card in an OCCLUDING context an ancestor field cannot reach (a
73
+ dialog / drawer / portal that paints its own opaque ground over the page
74
+ field) — there the card mounts its OWN cheap static warm underlayer so it is
75
+ NEVER gray-over-nothing wherever it is dropped.
76
+
77
+ MECHANISM — ONE static `radial-gradient` on the host `background-image`
78
+ longhand (the proven `.paper-grid` coexistence seam: a later
79
+ `background-image` COEXISTS with the glass tier's `background:` shorthand
80
+ fill — paints OVER the translucent color, UNDER content + UNDER both
81
+ pseudos, clipped to the host `border-radius` by construction). Zero JS, one
82
+ compositor-cached paint, PRM-static. The warm 0-alpha stops are explicit
83
+ `oklch(L C H / 0)` (NEVER bare `transparent` — the WebKit black-premultiply
84
+ hole, build-trap-(d)).
85
+
86
+ THE NO-DOUBLE-PAINT GATE (the presence-BEHIND check, NOT `closest()`): the
87
+ fallback paints ONLY when NO `[data-paper-field]` ancestor is present — `:where(
88
+ [data-paper-field]) &` switches it OFF under the global field, so a card over
89
+ the page field reads the page field (no local underlayer), and a 50-card grid
90
+ under ONE ancestor field is ONE field paint, not N. A `cartoon`/`opaque`
91
+ card already carries a defined edge + warm fill, so the orphan field is the
92
+ glass-surface case; `surface="glass"` only (the orphan glass card is the one
93
+ that reads gray-over-nothing). The `.paper-grid` document register is EXCLUDED
94
+ by selector (it sets its own grid `background-image` underlayer — a grid card
95
+ opts out of the warm-field fallback, not a `background-image: none` race). */
96
+ [data-slot="card"][data-surface="glass"]:not(.paper-grid) {
97
+ /* TWO static layers in ONE longhand (blended by the `background-blend-mode`
98
+ above — `screen, normal`): (1) the upper-right KEYED catch-light (warm,
99
+ `screen`-blended so it only LIFTS — the §3 catch), then (2) the warm cel
100
+ UNDERLAYER (one radial, amber-key toward the upper-right `--glass-key`,
101
+ the field fallback). Both fade to a warm 0-alpha — NEVER bare
102
+ `transparent` (the WebKit black-premultiply hole, build-trap-(d)). */
103
+ background-image:
104
+ radial-gradient(
105
+ 60% 55% at 80% 16%,
106
+ oklch(0.96 0.04 78 / 0.5),
107
+ oklch(0.96 0.04 78 / 0) 72%
108
+ ),
109
+ radial-gradient(
110
+ 120% 110% at 78% 22%,
111
+ oklch(0.9 0.075 72 / 0.5),
112
+ oklch(0.9 0.075 72 / 0) 70%
113
+ );
114
+ }
115
+
116
+ /* The presence-behind gate — under an ancestor field, the card reads the REAL
117
+ field (the page plane transmits through the translucent fill), so the local
118
+ fallback is switched OFF (no double paint). A 50-card grid under ONE ancestor
119
+ field is ONE field paint, not N local underlayers. */
120
+ :where([data-paper-field])
121
+ [data-slot="card"][data-surface="glass"]:not(.paper-grid) {
122
+ background-image: none;
123
+ }
124
+
9
125
  /* Paper texture overlay */
10
126
  .paper-texture {
11
127
  background-image: var(--paper-clean-texture);
@@ -182,13 +298,97 @@
182
298
  a card surface that often hosts portaled content; `translate: 0` at rest
183
299
  mints the stacking context once. Longhand maps `translate(x, y)` 1:1. */
184
300
  translate: 0;
301
+ position: relative;
302
+ /* BD.W-CARTOON-CASTER — the LOUD register carries `--motion-weight: 1` in the
303
+ SAME recipe (the loud-register coupling: so the punch is never accidentally
304
+ muted to ~+13.6% by inheriting the rest 0.618 — the BD.W-CARTOON-PUNCH
305
+ loud-register guard's concrete pass-subject). The press ramp ALIASES the
306
+ existing `--card-press-t` (the host's `useLiquidPress` already drives it for
307
+ every `pressable` card) — NO second press var, NO Card press-driver rewrite. */
308
+ --motion-weight: 1;
309
+ --cartoon-press-t: var(--card-press-t, 0);
185
310
  transition:
186
- translate var(--duration-normal) var(--spring-smooth),
311
+ translate var(--duration-normal) var(--ease-cartoon-punch),
312
+ scale var(--duration-normal) var(--ease-cartoon-punch),
187
313
  box-shadow var(--duration-normal) var(--ease-standard);
188
314
 
189
- &:hover:not(:disabled) {
315
+ /* BD.W-CARTOON-CASTER — the hover RE-POINTS the existing rule onto the punch
316
+ curve (was --spring-smooth) and guards `:not(:active)` so the press squash wins;
317
+ the object lifts a hair UP-RIGHT (toward the upper-right `--glass-key`) and the
318
+ cast deepens to the lg rung (the gap opens). ONE hover rule, no double-declare. */
319
+ &:hover:not(:active):not(:disabled) {
190
320
  translate: var(--lift-sm) var(--lift-sm);
321
+ /* BD.W-CARD-CEL-MOTION (§5) — the cel lifts toward the light with a
322
+ sub-perceptual VOL-PRESERVING scale (X·Y ≈ 1: 1.015 × 0.985 ≈ 1.0): the
323
+ cel rising toward its sun reads as PEELING off the field, not a flat
324
+ sticker slide. Composes the existing `scale` transition (declared above)
325
+ on the punch curve. The press squash (`scale: 1.04 0.94`) wins via
326
+ `:not(:active)`. */
327
+ scale: 1.015 0.985;
191
328
  box-shadow: var(--shadow-cartoon-lg);
329
+ & .cartoon-cast {
330
+ box-shadow: var(--shadow-cartoon-lg);
331
+ }
332
+ }
333
+
334
+ /* BD.W-CARTOON-CASTER — the press is a NON-uniform SQUASH (H5): widen X, compress
335
+ Y — real squash & stretch, NOT a uniform shrink. The CSS `:active` is the no-JS
336
+ floor; `useLiquidPress` drives `--card-press-t` 0→1 for the continuous
337
+ interruptible press the inert caster rides. */
338
+ &:active:not(:disabled) {
339
+ scale: 1.04 0.94;
340
+ }
341
+ }
342
+
343
+ /* ── BD.W-CARTOON-CASTER — the inert-child moving cel cast ───────────────────────
344
+ The cast rides an INERT `<span class="cartoon-cast" aria-hidden>` child the Card
345
+ emits when `surface="cartoon"` — NOT a `::before`/`::after` pseudo (both are
346
+ OCCUPIED on the real glass carrier: `::before` is the moving-specular catch-light,
347
+ `::after` is the grain overlay; the H2 hardening). The child is a self-contained
348
+ ink-plate the body floats above: it carries the SAME shipped `--shadow-cartoon-md`
349
+ box-shadow (set ONCE per state-flip — NEVER animated, the §L7 paint-fence) and
350
+ MOVES on the compositor via `translate`/`scale` only.
351
+
352
+ The cast travels DOWN-LEFT (opposite the upper-right `--glass-key`, coherent with
353
+ the shadow.css cel-ink geometry) as the body lifts, and SPREADS as the gap opens.
354
+ ONE scalar drive: `--cartoon-press-t × --motion-weight` (the `:root` PRM carve
355
+ zeroes `--motion-weight` → travel/spread collapse to rest). It LAGS the body
356
+ (~1.15× slower transition) → the ink recoils LATE on release (follow-through /
357
+ overlapping action). The `--cartoon-cast-dx/dy` drag-track deltas are 0 at rest
358
+ (the opt-in `useCartoonCast` DOM bridge is future — labeled honestly). */
359
+ .cartoon-cast {
360
+ position: absolute;
361
+ inset: 0;
362
+ z-index: -1; /* behind the cel face, in front of the page */
363
+ border-radius: inherit;
364
+ pointer-events: none;
365
+ box-shadow: var(--shadow-cartoon-md);
366
+ /* the derived offset + spread — read `--motion-weight × --cartoon-press-t`. The
367
+ sign is DOWN-LEFT (negative X, positive Y) to match the upper-right key. */
368
+ --cast-travel: calc(6px * var(--motion-weight) * var(--cartoon-press-t));
369
+ --cast-spread: calc(1 + 0.18 * var(--motion-weight) * var(--cartoon-press-t));
370
+ translate:
371
+ calc(-1 * var(--cast-travel) + var(--cartoon-cast-dx))
372
+ calc(var(--cast-travel) + var(--cartoon-cast-dy));
373
+ scale: var(--cast-spread);
374
+ /* the caster LAGS the body (~1.15×) → the late ink recoil on release. */
375
+ transition:
376
+ translate calc(var(--duration-normal) * 1.15) var(--ease-cartoon-punch),
377
+ scale calc(var(--duration-normal) * 1.15) var(--ease-cartoon-punch),
378
+ --cartoon-cast-dx var(--duration-normal) var(--ease-cartoon-punch),
379
+ --cartoon-cast-dy var(--duration-normal) var(--ease-cartoon-punch);
380
+ will-change: translate, scale;
381
+ }
382
+
383
+ /* BD.W-CARTOON-CASTER — PRM/PRT carve. Under reduced-motion `--motion-weight: 0`
384
+ zeroes travel/spread/squash/lag in ONE assignment (every `calc(… * --motion-weight)`
385
+ collapses to rest); the transition is killed. The static bold cel STAMP persists
386
+ (identity/legibility — only the TRAVEL/PUNCH is removed). */
387
+ @media (prefers-reduced-motion: reduce) {
388
+ .cartoon-surface,
389
+ .cartoon-cast {
390
+ --motion-weight: 0;
391
+ transition: none;
192
392
  }
193
393
  }
194
394
 
@@ -37,7 +37,12 @@
37
37
  .configurator-presets {
38
38
  padding-block: var(--configurator-preset-row-weight);
39
39
  }
40
- .configurator-presets [role="tablist"] {
40
+ /* The gallery track gap — the toggle-button group (BD.W-CONFIG-GALLERY-DOCK
41
+ * retired the `role="tablist"`/`role="tab"` ARIA-contradiction for the
42
+ * toggle-button `role="group"` + `aria-pressed` pattern). The token drives the
43
+ * inter-tile rhythm. */
44
+ .configurator-presets .configurator-gallery-track,
45
+ .configurator-presets [role="group"] {
41
46
  gap: var(--configurator-preset-row-gap);
42
47
  }
43
48
 
@@ -98,17 +103,168 @@
98
103
  * utility read — the token contract is byte-identical, only the MECHANISM moves
99
104
  * onto shipped CSS. The explicit mobile rows reset to `none` so one auto row
100
105
  * stretches to the taller column. */
106
+ /* The MOBILE / base placement of the three section-level children (the gallery
107
+ * moved OUT of the aside to a grid sibling — BD.W-CONFIG-GALLERY-DOCK). Single
108
+ * column, three rows: gallery → stage → aside. The base `grid-template-rows`
109
+ * (`auto minmax(stage-min,auto) 1fr`) ships from the SFC; these rules pin each
110
+ * child to its row so the source order (gallery, stage, aside) reads correctly.
111
+ * When no gallery renders the `auto` row collapses to 0 (an empty track). */
112
+ [data-slot="configurator"] > [data-gallery-dock] {
113
+ grid-row: 1;
114
+ grid-column: 1;
115
+ }
116
+ [data-slot="configurator"] > .configurator-stage {
117
+ grid-row: 2;
118
+ grid-column: 1;
119
+ }
120
+ [data-slot="configurator"] > .configurator-aside {
121
+ grid-row: 3;
122
+ grid-column: 1;
123
+ }
124
+
101
125
  @media (min-width: 1024px) {
126
+ /* The DESKTOP TWO-COLUMN geometry. Two columns (stage 1fr | aside band) and
127
+ * two rows: the gallery row (auto) over the body row (1fr). The placement of
128
+ * the gallery dock is the ONLY thing the `data-gallery` axis swaps. */
102
129
  [data-slot="configurator"] {
103
130
  grid-template-columns: minmax(0, 1fr)
104
131
  minmax(
105
132
  var(--configurator-aside-min, 280px),
106
133
  var(--configurator-aside-max, 360px)
107
134
  );
108
- grid-template-rows: none;
135
+ grid-template-rows: auto minmax(0, 1fr);
136
+ }
137
+
138
+ /* data-gallery="aside" (the default, inspector idiom) — the gallery sits in
139
+ * the ASIDE column, row 1, above the controls; the stage spans BOTH rows on
140
+ * the left. Byte-equivalent to the legacy "preset row inside the aside top". */
141
+ [data-slot="configurator"][data-gallery="aside"] > [data-gallery-dock] {
142
+ grid-row: 1;
143
+ grid-column: 2;
144
+ }
145
+ [data-slot="configurator"][data-gallery="aside"] > .configurator-stage {
146
+ grid-row: 1 / span 2;
147
+ grid-column: 1;
148
+ }
149
+ [data-slot="configurator"][data-gallery="aside"] > .configurator-aside {
150
+ grid-row: 2;
151
+ grid-column: 2;
152
+ }
153
+
154
+ /* data-gallery="top" (the §2.1 reflow) — the gallery is a LARGE full-width
155
+ * dock spanning BOTH columns up-top; the stage (col 1) + controls (col 2)
156
+ * reclaim the full height in row 2. The gallery is now ~studio-width, not the
157
+ * 360px gutter — ~5 φ-tall tiles visible, horizontally scrollable. */
158
+ [data-slot="configurator"][data-gallery="top"] > [data-gallery-dock] {
159
+ grid-row: 1;
160
+ grid-column: 1 / span 2;
161
+ }
162
+ [data-slot="configurator"][data-gallery="top"] > .configurator-stage {
163
+ grid-row: 2;
164
+ grid-column: 1;
165
+ }
166
+ [data-slot="configurator"][data-gallery="top"] > .configurator-aside {
167
+ grid-row: 2;
168
+ grid-column: 2;
169
+ }
170
+ }
171
+
172
+ /* The gallery-dock chrome divider — the hairline under the up-top dock / the
173
+ * left edge of the aside-placed dock. A dark-adaptive border off the same token
174
+ * the rest of the instrument reads, so it survives both glass plates. */
175
+ [data-slot="configurator"] > [data-gallery-dock] {
176
+ border-color: var(--configurator-divider);
177
+ }
178
+ [data-slot="configurator"][data-gallery="aside"] > [data-gallery-dock] {
179
+ border-bottom-width: 1px;
180
+ }
181
+ @media (min-width: 1024px) {
182
+ /* The up-top dock carries a bottom hairline; the aside-placed dock carries it
183
+ * too (above the controls). */
184
+ [data-slot="configurator"][data-gallery="top"] > [data-gallery-dock] {
185
+ border-bottom-width: 1px;
109
186
  }
110
187
  }
111
188
 
189
+ /* ── The WARM-GLASS gallery tiles + the device-free field-well ────────────────
190
+ * BD.W-CONFIG-GALLERY-DOCK §5/§B1. The tile is a `.glass-capsule` warm-glass cel
191
+ * (composed in the SFC class list) — the §3 colourful field reads THROUGH, never
192
+ * a flat opaque bg-card scrim. These rules add the GEOMETRY the capsule register
193
+ * doesn't carry: the φ-tall card shape, the rounded field-well, the active ring,
194
+ * the loading shimmer. No new material is minted — the transmissive composite is
195
+ * the shared `.glass-capsule`; the cartoon cast is the shared `.cartoon-cast`. */
196
+
197
+ /* The big field-well tile (the PresetPickerRow / baked-thumbnail form). A φ-tall
198
+ * card: a 16:10 field-well crowned by a label band. The capsule register paints
199
+ * the warm-glass body; this rule sets the card radius + the column flex so the
200
+ * well meets the rounded crown with zero bg leak. */
201
+ .configurator-preset-tile {
202
+ inline-size: clamp(160px, 22vw, 232px);
203
+ border-radius: var(--radius-card);
204
+ /* The capsule fill is a warm-glass PILL by default (--radius-pill); a TILE is
205
+ * a card, so re-point the geometry to the card radius here. The transmissive
206
+ * fill + rim + cast all carry from .glass-capsule. */
207
+ }
208
+
209
+ /* The §3 field-well — the device-free `auroraFallbackGround` background-image is
210
+ * set inline per tile; this rule sets the cover sizing + the rounded inner crown.
211
+ * The well is the COLOURFUL field; the warm-glass capsule frames it. */
212
+ .configurator-preset-well {
213
+ background-size: cover;
214
+ background-position: center;
215
+ /* a smooth bilinear upscale of the tiny raster (the per-quadrant mean
216
+ * luminance is preserved — the certify band reads true). */
217
+ image-rendering: auto;
218
+ }
219
+
220
+ /* The loading state — a warm shimmer until the field build lands (the field
221
+ * build is synchronous + cheap, so this is a sub-frame flicker at most). */
222
+ .configurator-preset-well.is-loading {
223
+ background-image: linear-gradient(
224
+ 100deg,
225
+ color-mix(in oklab, var(--card) 84%, transparent) 30%,
226
+ color-mix(in oklab, var(--foreground) 8%, var(--card)) 50%,
227
+ color-mix(in oklab, var(--card) 84%, transparent) 70%
228
+ );
229
+ background-size: 200% 100%;
230
+ animation: configurator-preset-shimmer 1.2s ease-in-out infinite;
231
+ }
232
+ @media (prefers-reduced-motion: reduce) {
233
+ .configurator-preset-well.is-loading {
234
+ animation: none;
235
+ }
236
+ }
237
+ @keyframes configurator-preset-shimmer {
238
+ from {
239
+ background-position: 200% 0;
240
+ }
241
+ to {
242
+ background-position: -200% 0;
243
+ }
244
+ }
245
+
246
+ /* The active tile ring — a 2px foreground-keyed inset crown over the warm-glass
247
+ * cel (an inset ring never clips on the scroll axis, the PresetPickerRow note).
248
+ * Composes with the capsule's own rim; the cast deepens to `-lg` in the SFC. */
249
+ .configurator-preset-tile.is-active {
250
+ box-shadow:
251
+ inset 0 0 0 2px var(--ring),
252
+ var(--shadow-cartoon-lg);
253
+ }
254
+
255
+ /* The compact CHIP form (the default fallback gallery — text-only preset pills).
256
+ * The capsule register paints the warm-glass body; this rule restores the pill
257
+ * radius the capsule already ships, and the active chip reads a selected fill via
258
+ * the `--glass-capsule-fill` override hook (no fork). */
259
+ .configurator-preset-chip {
260
+ border-radius: var(--radius-pill);
261
+ }
262
+ .configurator-preset-chip.is-active {
263
+ /* the selected rung — re-point the capsule fill toward the quiet glass-tint
264
+ * selected register via the documented override hook (NO new composite). */
265
+ --glass-capsule-fill: var(--glass-bg-quiet);
266
+ }
267
+
112
268
  /* 5. The SIDE FLIP — a data-attr, default RIGHT (BC.W-CONFIG-RIGHT).
113
269
  *
114
270
  * The aside side moves off the dead `lg:col-start-*` arbitrary utility (gated
@@ -122,11 +278,20 @@
122
278
  * order — WCAG 1.3.2/2.4.3 inviolate, the AM.W0 contract). Below `lg` (single
123
279
  * column) neither side has meaning. */
124
280
  @media (min-width: 1024px) {
125
- [data-slot="configurator"][data-aside-side="left"] .configurator-stage {
126
- grid-column-start: 2;
281
+ /* The flip swaps the two BODY columns (stage ↔ aside) while DOM/tab order stays
282
+ * gallery→stage→aside. The selectors carry `>`-child specificity to match the
283
+ * `data-gallery` placement rules above (which also use `>`); a bare descendant
284
+ * selector would lose the cascade to those and the flip would no-op. The aside
285
+ * keeps its body row (row 2); only the column target moves. The aside-placed
286
+ * gallery dock follows the aside to column 1. */
287
+ [data-slot="configurator"][data-aside-side="left"] > .configurator-stage {
288
+ grid-column: 2;
289
+ }
290
+ [data-slot="configurator"][data-aside-side="left"] > .configurator-aside {
291
+ grid-column: 1;
127
292
  }
128
- [data-slot="configurator"][data-aside-side="left"] .configurator-aside {
129
- grid-column-start: 1;
130
- grid-row-start: 1;
293
+ [data-slot="configurator"][data-aside-side="left"][data-gallery="aside"]
294
+ > [data-gallery-dock] {
295
+ grid-column: 1;
131
296
  }
132
297
  }
@@ -38,7 +38,11 @@
38
38
  * floating-CHROME collapse recipe — a late-mount surface decoration) and
39
39
  * `completion-seal.css` (the one-shot earned-gold feedback seal — a focal opt-in
40
40
  * surface that mounts on a completion event) are BOTH deferred: neither paints
41
- * an above-the-fold first-paint chrome pixel.
41
+ * an above-the-fold first-paint chrome pixel. The BD-added `motion/morph-field.css`
42
+ * (the ONE `useMorphField` goo recipe — the body/neck/waist silhouette + the
43
+ * dedicated squish channel) is likewise DEFERRED: it is gated to `[data-morphing]`
44
+ * and paints only while a morph drive is live (a late-mount compositor decoration),
45
+ * never a steady-state first-paint chrome pixel.
42
46
  *
43
47
  * The `paper.css` partial is bucketed DEFERRED — the paper underpaint/grain
44
48
  * utilities pair with glass for paper-on-glass compositions that mount with the
@@ -68,6 +72,8 @@ export const DEFERRED_PARTIALS = Object.freeze([
68
72
  "floating-panel.css",
69
73
  "transitions.css",
70
74
  "animations.css",
75
+ "motion/morph-field.css",
76
+ "jubilance.css",
71
77
  "scroll-driven.css",
72
78
  "scroll-choreography.css",
73
79
  "scroll-chrome.css",
@@ -158,5 +164,32 @@ export const DEFERRED_SOURCE_DIRECTIVE = '@source "../*.js";';
158
164
  * stay under the old number). The render-block FLOOR stays W-LIGHTHOUSE's
159
165
  * W3-arm-1 mobile-ms gate (the binding perf truth); this ceiling guards against a
160
166
  * recipe revert-toward-monolith.
167
+ *
168
+ * RE-BASE (BD greenfield band — re-measured over the SETTLED BD cascade): the
169
+ * critical subset grew to raw 561233 / gzip 174231 — AGAIN not a component-recipe
170
+ * leak into the critical BUCKET (the critical bucket is STILL the SAME 6 documented
171
+ * token+glass+type partials; w2 partials-disjoint + w4 hold, and the two recipe-shaped
172
+ * BD additions that COULD have leaked do NOT: `motion/morph-field.css` is bucketed
173
+ * DEFERRED, `glass-atom.css`/`glass-chip.css` are @import-ed by the DEFERRED
174
+ * `icon-chip.css` (not by `glass.css`), and `liquid-morph.css` is demo-only — it is
175
+ * @import-ed by NO src partial). The growth is the legitimate BD GREENFIELD enrichment
176
+ * of the critical TOKEN CASCADE + glass ladder, which lives in the critical tokens/* +
177
+ * glass/* sub-partials by construction: the NEW `tokens/property-regs.css` (the
178
+ * @property registrations a bare var() interpolates over), the `tokens/scheme-motion.css`
179
+ * --motion-weight × --ease-cartoon-punch motion grammar, the `tokens/shadow.css` cartoon
180
+ * cast rungs, the `tokens/dark-arm.css` dark-mode arms, the `tokens/glass.css` squish/tint
181
+ * axes, and the `tokens/glass-fx.css` / `tokens/scale-paper.css` page-chassis registers —
182
+ * all custom-property registers the chrome reads at first paint. The ONE borderline
183
+ * residual is `glass/liquid-enter.css` (a late-mount entrance @keyframes recipe, ~3.7KiB
184
+ * gzip) which rides `glass.css` over its `reveal.css` `--lq-enter-*` substrate; carving it
185
+ * to a deferred top-level partial is a structural cascade-order change reserved for the
186
+ * named BB.W-CSS-CRITICAL-INLINE successor (a triumvirate trigger, NOT a token-edit here),
187
+ * and it recovers only ~3.7KiB — the bucket would still sit ~170KiB, well over the old
188
+ * 156000. The critical subset is 49.5% of the settled monolith's resolved gzip — the
189
+ * spec's ~46% small-above-the-fold-subset bar HELD over the settled cascade. Ceiling
190
+ * re-pinned 156000 → 182000 (~4.5% headroom over the measured 174231, the profile-bundle
191
+ * re-base convention — the reviewed write, NEVER a silent component-recipe swallow). The
192
+ * render-block FLOOR stays W-LIGHTHOUSE's W3-arm-1 mobile-ms gate (the binding perf truth);
193
+ * this ceiling guards against a recipe revert-toward-monolith.
161
194
  */
162
- export const CRITICAL_GZIP_CEILING = 156000;
195
+ export const CRITICAL_GZIP_CEILING = 182000;