@mkbabb/glass-ui 4.0.1 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. package/dist/{CardAction-CW7a0m8M.js → CardAction-8whJrLWt.js} +23 -8
  2. package/dist/{CommandShortcut-DvZNQ_HF.js → CommandShortcut-D3yxgHNn.js} +23 -12
  3. package/dist/{ConfiguratorRow-BR4l-ixA.js → ConfiguratorRow-CaP7U3ZA.js} +11 -11
  4. package/dist/ContextMenuContent-B3ZsheLV.js +90 -0
  5. package/dist/{ContextMenuSubContent-xol4sD2q.js → ContextMenuSubContent-DDRID3qC.js} +15 -15
  6. package/dist/{DataTable-CuKwF7wr.js → DataTable-Bc9kUtu_.js} +2 -2
  7. package/dist/{DialogContent-DcKK8k9i.js → DialogContent-6JtTB5x2.js} +8 -5
  8. package/dist/DialogFooter-9phqcRIS.js +80 -0
  9. package/dist/DialogScrollContent-TTuovQst.js +93 -0
  10. package/dist/HoverCardContent-Bel1gdLZ.js +88 -0
  11. package/dist/{IconChip-BTD-nay5.js → IconChip-DhbdGdFQ.js} +1 -1
  12. package/dist/{IconTooltip-Bl8gFZ8d.js → IconTooltip-B0zimd2H.js} +1 -1
  13. package/dist/Input-Cg9DF62r.js +57 -0
  14. package/dist/{Notification-VUwexFUf.js → Notification-CphK7AAm.js} +3 -3
  15. package/dist/NumberFieldContent-D8cXeyO4.js +140 -0
  16. package/dist/PagerDots-Cjx96la-.js +98 -0
  17. package/dist/{SelectScrollDownButton-CrA8F0iV.js → SelectScrollDownButton-DAKCBEdW.js} +62 -57
  18. package/dist/{SelectSeparator-DXswVdRz.js → SelectSeparator-C2UGOkXF.js} +1 -1
  19. package/dist/Separator-DQcwC2TR.js +44 -0
  20. package/dist/Switch-B8RscmRu.js +49 -0
  21. package/dist/{Toaster-Bw4xR8xV.js → Toaster-D9qIHjBI.js} +1 -1
  22. package/dist/{ToggleGroupItem-pEM9vIhs.js → ToggleGroupItem-BLtr3TJq.js} +2 -2
  23. package/dist/TooltipProvider-BJ_Y5EGX.js +109 -0
  24. package/dist/animated-digit.js +1 -1
  25. package/dist/api/index.d.ts +15 -32
  26. package/dist/api/types-extra.d.ts +31 -0
  27. package/dist/api.js +1 -1
  28. package/dist/aurora.js +579 -251
  29. package/dist/border-progress.js +49 -57
  30. package/dist/{button-DYCUa-tH.js → button-5dY1Dvhd.js} +13 -14
  31. package/dist/button.js +1 -1
  32. package/dist/canvas.js +2 -3
  33. package/dist/card.js +1 -1
  34. package/dist/carousel.js +20 -20
  35. package/dist/color-Cs0-oxYL.js +116 -0
  36. package/dist/color.js +2 -2
  37. package/dist/command.js +1 -1
  38. package/dist/completion-seal.d.ts +1 -0
  39. package/dist/completion-seal.js +89 -0
  40. package/dist/components/custom/aurora/Aurora.vue.d.ts +10 -5
  41. package/dist/components/custom/aurora/composables/color.d.ts +13 -0
  42. package/dist/components/custom/aurora/composables/frameLoop.d.ts +9 -0
  43. package/dist/components/custom/aurora/composables/runtime.d.ts +12 -0
  44. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +11 -2
  45. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +8 -0
  46. package/dist/components/custom/aurora/constants/presets.d.ts +18 -0
  47. package/dist/components/custom/aurora/constants/renderMode.d.ts +16 -8
  48. package/dist/components/custom/aurora/constants/shaders/aurora-mediums.wgsl.d.ts +1 -0
  49. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -1
  50. package/dist/components/custom/border-progress/composables/spectrum-walk.d.ts +25 -0
  51. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +14 -18
  52. package/dist/components/custom/border-progress/index.d.ts +1 -1
  53. package/dist/components/custom/completion-seal/CompletionSeal.vue.d.ts +21 -0
  54. package/dist/components/custom/completion-seal/composables/useCompletionSeal.d.ts +37 -0
  55. package/dist/components/custom/completion-seal/constants.d.ts +46 -0
  56. package/dist/components/custom/completion-seal/index.d.ts +4 -0
  57. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +7 -0
  58. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +9 -0
  59. package/dist/components/custom/concentric/composables/ringField.d.ts +57 -16
  60. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +2 -1
  61. package/dist/components/custom/concentric/composables/useConcentric.d.ts +4 -4
  62. package/dist/components/custom/concentric/constants.d.ts +30 -6
  63. package/dist/components/custom/concentric/index.d.ts +2 -2
  64. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +2 -2
  65. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -1
  66. package/dist/components/custom/confirm-dialog/ConfirmDialog.vue.d.ts +3 -3
  67. package/dist/components/custom/constellation/Constellation.vue.d.ts +5 -4
  68. package/dist/components/custom/constellation/composables/constellationGLSetup.d.ts +10 -0
  69. package/dist/components/custom/constellation/composables/constellationWGPUSetup.d.ts +19 -0
  70. package/dist/components/custom/constellation/composables/uniformBridgeWGPU.d.ts +66 -0
  71. package/dist/components/custom/constellation/composables/useConstellation.d.ts +3 -10
  72. package/dist/components/custom/constellation/constants.d.ts +33 -0
  73. package/dist/components/custom/constellation/constellationField.d.ts +31 -1
  74. package/dist/components/custom/constellation/constellationInteraction.d.ts +23 -14
  75. package/dist/components/custom/constellation/constellationRender.d.ts +25 -0
  76. package/dist/components/custom/constellation/constellationTypes.d.ts +38 -0
  77. package/dist/components/custom/constellation/constellationWell.d.ts +15 -0
  78. package/dist/components/custom/constellation/index.d.ts +5 -5
  79. package/dist/components/custom/constellation/shaders/constellation-lines.glsl.d.ts +2 -0
  80. package/dist/components/custom/constellation/shaders/constellation-lines.wgsl.d.ts +1 -0
  81. package/dist/components/custom/constellation/shaders/constellation-points.glsl.d.ts +2 -0
  82. package/dist/components/custom/constellation/shaders/constellation-points.wgsl.d.ts +1 -0
  83. package/dist/components/custom/deck/DeckPager.vue.d.ts +29 -0
  84. package/dist/components/custom/deck/composables/useDeck.d.ts +27 -0
  85. package/dist/components/custom/deck/composables/useDeckKeyboard.d.ts +25 -0
  86. package/dist/components/custom/deck/composables/useDeckSpring.d.ts +22 -0
  87. package/dist/components/custom/deck/constants.d.ts +14 -0
  88. package/dist/components/custom/deck/index.d.ts +8 -0
  89. package/dist/components/custom/dock/DockIconButton.vue.d.ts +12 -0
  90. package/dist/components/custom/dock/DockStack.vue.d.ts +65 -0
  91. package/dist/components/custom/dock/GlassDock.vue.d.ts +4 -2
  92. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +80 -0
  93. package/dist/components/custom/dock/composables/index.d.ts +2 -0
  94. package/dist/components/custom/dock/composables/useDockSearch.d.ts +85 -0
  95. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +11 -0
  96. package/dist/components/custom/dock/constants.d.ts +18 -14
  97. package/dist/components/custom/dock/index.d.ts +5 -2
  98. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +15 -11
  99. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +48 -6
  100. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +23 -8
  101. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +6 -5
  102. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -5
  103. package/dist/components/custom/dot-flow-field/constants.d.ts +42 -21
  104. package/dist/components/custom/dot-flow-field/index.d.ts +2 -2
  105. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -1
  106. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +4 -20
  107. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -1
  108. package/dist/components/custom/dot-matrix/DotMatrix.vue.d.ts +43 -0
  109. package/dist/components/custom/dot-matrix/composables/dotMatrixField.d.ts +89 -0
  110. package/dist/components/custom/dot-matrix/composables/uniformBridgeWGPU.d.ts +52 -0
  111. package/dist/components/custom/dot-matrix/composables/useDotMatrix.d.ts +34 -0
  112. package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +27 -0
  113. package/dist/components/custom/dot-matrix/constants.d.ts +58 -0
  114. package/dist/components/custom/dot-matrix/index.d.ts +5 -0
  115. package/dist/components/custom/dot-matrix/shaders/dot-matrix.glsl.d.ts +4 -0
  116. package/dist/components/custom/dot-matrix/shaders/dot-matrix.wgsl.d.ts +1 -0
  117. package/dist/components/custom/easing/EasingPicker.vue.d.ts +2 -2
  118. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +5 -0
  119. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +11 -0
  120. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +40 -47
  121. package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +15 -0
  122. package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +20 -0
  123. package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +41 -0
  124. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +40 -37
  125. package/dist/components/custom/fourier-field/constants.d.ts +61 -4
  126. package/dist/components/custom/fourier-field/index.d.ts +23 -18
  127. package/dist/components/custom/fourier-field/shaders/fourier-field.compute.wgsl.d.ts +1 -0
  128. package/dist/components/custom/fourier-field/shaders/fourier-field.glsl.d.ts +4 -0
  129. package/dist/components/custom/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -0
  130. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +9 -1
  131. package/dist/components/custom/goo-blob/constants.d.ts +1 -1
  132. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  133. package/dist/components/custom/goo-blob/shaders/metaball-noise.wgsl.d.ts +1 -0
  134. package/dist/components/custom/goo-blob/shaders/metaball-palette.wgsl.d.ts +1 -0
  135. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -1
  136. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -1
  137. package/dist/components/custom/goo-blob/types.d.ts +36 -0
  138. package/dist/components/custom/goo-dot-matrix/GooDotMatrix.vue.d.ts +49 -0
  139. package/dist/components/custom/goo-dot-matrix/composables/gooDotLattice.d.ts +24 -0
  140. package/dist/components/custom/goo-dot-matrix/composables/gooDotSetup.d.ts +50 -0
  141. package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +35 -0
  142. package/dist/components/custom/goo-dot-matrix/composables/useGooDotMatrix.d.ts +31 -0
  143. package/dist/components/custom/goo-dot-matrix/constants.d.ts +76 -0
  144. package/dist/components/custom/goo-dot-matrix/index.d.ts +5 -0
  145. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.frag.d.ts +11 -0
  146. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +3 -0
  147. package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +21 -2
  148. package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +15 -0
  149. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +9 -0
  150. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  151. package/dist/components/custom/pager-dots/pagerWindow.d.ts +9 -0
  152. package/dist/components/custom/paper-grid/PaperGrid.vue.d.ts +42 -0
  153. package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +90 -0
  154. package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +16 -0
  155. package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +19 -0
  156. package/dist/components/custom/paper-grid/composables/uniformBridgeWGPU.d.ts +16 -0
  157. package/dist/components/custom/paper-grid/composables/usePaperGrid.d.ts +31 -0
  158. package/dist/components/custom/paper-grid/constants.d.ts +57 -0
  159. package/dist/components/custom/paper-grid/index.d.ts +5 -0
  160. package/dist/components/custom/paper-grid/shaders/paper-grid.glsl.d.ts +4 -0
  161. package/dist/components/custom/paper-grid/shaders/paper-grid.wgsl.d.ts +1 -0
  162. package/dist/components/custom/search/FuzzySearch.vue.d.ts +8 -2
  163. package/dist/components/custom/search/SearchBar.vue.d.ts +8 -0
  164. package/dist/components/custom/search/index.d.ts +2 -0
  165. package/dist/components/custom/search/searchVariants.d.ts +19 -0
  166. package/dist/components/custom/selectable-chip/SelectableChip.vue.d.ts +50 -0
  167. package/dist/components/custom/selectable-chip/index.d.ts +2 -0
  168. package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +23 -0
  169. package/dist/components/custom/split-chars/SplitChars.vue.d.ts +39 -0
  170. package/dist/components/custom/split-chars/index.d.ts +1 -0
  171. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +8 -6
  172. package/dist/components/custom/tabs/constants.d.ts +20 -2
  173. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +29 -16
  174. package/dist/components/custom/watercolor-dot/useWatercolorBlob.d.ts +10 -5
  175. package/dist/components/ui/_shared/index.d.ts +2 -0
  176. package/dist/components/ui/_shared/useControlSize.d.ts +46 -0
  177. package/dist/components/ui/button/index.d.ts +1 -1
  178. package/dist/components/ui/card/Card.vue.d.ts +45 -0
  179. package/dist/components/ui/card/index.d.ts +1 -1
  180. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +1 -1
  181. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +1 -1
  182. package/dist/components/ui/command/CommandDialog.vue.d.ts +9 -3
  183. package/dist/components/ui/command/CommandList.vue.d.ts +3 -0
  184. package/dist/components/ui/context-menu/ContextMenuContent.vue.d.ts +5 -1
  185. package/dist/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +4 -0
  186. package/dist/components/ui/hover-card/HoverCardContent.vue.d.ts +3 -0
  187. package/dist/components/ui/input/Input.vue.d.ts +3 -0
  188. package/dist/components/ui/number-field/NumberFieldInput.vue.d.ts +6 -1
  189. package/dist/components/ui/select/SelectContent.vue.d.ts +3 -0
  190. package/dist/components/ui/switch/Switch.vue.d.ts +2 -0
  191. package/dist/components/ui/textarea/Textarea.vue.d.ts +3 -0
  192. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +3 -0
  193. package/dist/composables/color/index.d.ts +2 -0
  194. package/dist/composables/color/useAccentTone.d.ts +34 -0
  195. package/dist/composables/glass/useVizChoreography.d.ts +123 -0
  196. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +10 -0
  197. package/dist/composables/glass/webgl/shaders/flow.wgsl.d.ts +1 -0
  198. package/dist/composables/glass/webgpu/index.d.ts +1 -1
  199. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +28 -7
  200. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +1 -0
  201. package/dist/composables/glass/webgpu/webgpuDevice.d.ts +42 -0
  202. package/dist/composables/motion/core/index.d.ts +3 -0
  203. package/dist/composables/motion/scrollReader.d.ts +25 -0
  204. package/dist/composables/motion/springPresets.d.ts +20 -1
  205. package/dist/composables/motion/useCharStagger.d.ts +44 -0
  206. package/dist/composables/motion/useDockCtaReceive.d.ts +31 -6
  207. package/dist/composables/motion/useScrollChrome.d.ts +58 -0
  208. package/dist/composables/motion/useScrollTrigger.d.ts +67 -0
  209. package/dist/composables/motion/useSpringPress.d.ts +5 -5
  210. package/dist/composables/motion/useStaggerReveal.d.ts +24 -0
  211. package/dist/composables/sidebar/index.d.ts +4 -1
  212. package/dist/composables/sidebar/types.d.ts +68 -3
  213. package/dist/composables/sidebar/useClickDelegate.d.ts +4 -0
  214. package/dist/composables/sidebar/useLazyLoader.d.ts +5 -0
  215. package/dist/composables/sidebar/useScrollTo.d.ts +5 -0
  216. package/dist/composables/virtual/index.d.ts +4 -0
  217. package/dist/composables/virtual/useVirtualSectionWindow.d.ts +72 -0
  218. package/dist/composables/virtual/useWindowedStore.d.ts +43 -0
  219. package/dist/composables/virtual/virtualSectionLayout.d.ts +103 -0
  220. package/dist/concentric.js +495 -221
  221. package/dist/configurator.js +2 -2
  222. package/dist/confirm-dialog.js +62 -47
  223. package/dist/constellation.js +635 -235
  224. package/dist/context-menu.js +2 -2
  225. package/dist/controls.js +1 -1
  226. package/dist/createCanvasLifecycle-Gh45Ce-p.js +93 -0
  227. package/dist/dark.js +1 -1
  228. package/dist/data-table.js +1 -1
  229. package/dist/deck.d.ts +1 -0
  230. package/dist/deck.js +105 -0
  231. package/dist/dialog.js +4 -3
  232. package/dist/dock.js +602 -458
  233. package/dist/dot-flow-field.js +580 -290
  234. package/dist/dot-matrix.d.ts +1 -0
  235. package/dist/dot-matrix.js +630 -0
  236. package/dist/dotMatrixField-D_x9_1qq.js +48 -0
  237. package/dist/{dropdown-menu-CofSZuk8.js → dropdown-menu-aJmV5SqE.js} +83 -79
  238. package/dist/dropdown-menu.js +1 -1
  239. package/dist/easing.js +188 -176
  240. package/dist/expandable-container.js +42 -20
  241. package/dist/fading-scroll.js +1 -1
  242. package/dist/flow.glsl-B2P7e0MT.js +4 -0
  243. package/dist/forms.js +62 -60
  244. package/dist/fourier-field.js +825 -178
  245. package/dist/fourier-math.js +1 -1
  246. package/dist/glass-ui.css +1 -1
  247. package/dist/glass-ui.js +145 -104
  248. package/dist/goo-blob.js +171 -1228
  249. package/dist/goo-dot-matrix.d.ts +1 -0
  250. package/dist/goo-dot-matrix.js +591 -0
  251. package/dist/handmark.js +1 -1
  252. package/dist/hover-card.js +1 -1
  253. package/dist/hover-popover.js +1 -1
  254. package/dist/icon-chip.js +1 -1
  255. package/dist/icon-tooltip.js +1 -1
  256. package/dist/index.d.ts +2 -0
  257. package/dist/instrument-chassis.js +1 -1
  258. package/dist/keyboard.js +1 -1
  259. package/dist/labeled-field.js +70 -60
  260. package/dist/metric-cell.js +1 -1
  261. package/dist/metric-stack.js +11 -2
  262. package/dist/motion-core.js +54 -32
  263. package/dist/motion-curves.js +11 -1
  264. package/dist/motion.js +46 -111
  265. package/dist/notification.js +1 -1
  266. package/dist/number-field.js +1 -1
  267. package/dist/pager-dots.js +2 -91
  268. package/dist/paper-backdrop.js +1 -1
  269. package/dist/paper-grid.d.ts +1 -0
  270. package/dist/paper-grid.js +788 -0
  271. package/dist/{presets-BW2b-fr1.js → presets-CvOUqtdY.js} +3 -3
  272. package/dist/{procedural-color.glsl-CIFsJhwI.js → procedural-color.wgsl-m7Zgv35j.js} +2 -2
  273. package/dist/progress.js +1 -1
  274. package/dist/pulse.js +1 -1
  275. package/dist/reactive.js +1 -1
  276. package/dist/{useCanvas2D-B8w_E3Rr.js → resolveCanvasColor-yPyIpJt9.js} +12 -2
  277. package/dist/scrollReader-DI1NWxUw.js +42 -0
  278. package/dist/scrolling-text.js +1 -1
  279. package/dist/search.js +160 -304
  280. package/dist/select.js +3 -3
  281. package/dist/selectable-chip.d.ts +1 -0
  282. package/dist/selectable-chip.js +65 -0
  283. package/dist/separator.js +1 -1
  284. package/dist/{sheet-tZMg0E0w.js → sheet-B2flBfLH.js} +2 -2
  285. package/dist/sheet.js +1 -1
  286. package/dist/sidebar.js +216 -114
  287. package/dist/slider.js +1 -1
  288. package/dist/sortable-list.js +1 -1
  289. package/dist/spectrum-walk-BVzA7Biz.js +33 -0
  290. package/dist/{springPresets-CFQGQfdl.js → springPresets-Ce7OYCm9.js} +12 -6
  291. package/dist/styles/animations.css +13 -3
  292. package/dist/styles/cards.css +69 -0
  293. package/dist/styles/completion-seal.css +131 -0
  294. package/dist/styles/components.css +2 -3
  295. package/dist/styles/configurator.css +55 -0
  296. package/dist/styles/critical-partition.mjs +33 -11
  297. package/dist/styles/deferred.css +2 -0
  298. package/dist/styles/dock/cta-seat.css +87 -0
  299. package/dist/styles/dock/density.css +153 -0
  300. package/dist/styles/dock/layers.css +55 -7
  301. package/dist/styles/dock/morph-bridge.css +54 -18
  302. package/dist/styles/dock/morph.css +41 -33
  303. package/dist/styles/dock/overflow.css +12 -0
  304. package/dist/styles/dock/search.css +68 -0
  305. package/dist/styles/dock/shape.css +124 -0
  306. package/dist/styles/dock/shell.css +23 -5
  307. package/dist/styles/dock/stack-rail.css +264 -0
  308. package/dist/styles/dock-controls/dark-mode-toggle.css +17 -4
  309. package/dist/styles/dock-controls/icon-button.css +14 -0
  310. package/dist/styles/dock.css +11 -1
  311. package/dist/styles/glass/accent-tone.css +66 -0
  312. package/dist/styles/glass/control-surfaces.css +167 -0
  313. package/dist/styles/glass/ladder.css +67 -17
  314. package/dist/styles/glass/rim.css +19 -9
  315. package/dist/styles/glass/surfaces.css +69 -148
  316. package/dist/styles/glass.css +10 -0
  317. package/dist/styles/index.css +15 -0
  318. package/dist/styles/scroll-chrome.css +123 -0
  319. package/dist/styles/scroll-driven.css +38 -0
  320. package/dist/styles/segmented-tabs.css +50 -14
  321. package/dist/styles/theme/bridges.css +22 -0
  322. package/dist/styles/theme/radius.css +18 -1
  323. package/dist/styles/tokens/color-radius.css +13 -3
  324. package/dist/styles/tokens/dark-arm.css +39 -6
  325. package/dist/styles/tokens/glass-deep.css +28 -3
  326. package/dist/styles/tokens/glass-fx.css +44 -1
  327. package/dist/styles/tokens/glass.css +91 -31
  328. package/dist/styles/tokens/light-dark.css +1 -1
  329. package/dist/styles/tokens/offsets.css +27 -0
  330. package/dist/styles/tokens/property-regs.css +133 -0
  331. package/dist/styles/tokens/scale-paper.css +73 -29
  332. package/dist/styles/tokens/scheme-motion.css +44 -6
  333. package/dist/styles/tokens/sizing-config.css +110 -0
  334. package/dist/styles/tokens/sizing.css +55 -104
  335. package/dist/styles/tokens.css +5 -0
  336. package/dist/styles/typography/semantic.css +18 -5
  337. package/dist/styles/utilities/a11y-overrides.css +20 -5
  338. package/dist/styles/utilities/base-misc.css +52 -0
  339. package/dist/styles/utilities/btn.css +14 -3
  340. package/dist/styles/utilities/components.css +31 -6
  341. package/dist/styles/utilities/metal.css +26 -0
  342. package/dist/switch.js +1 -1
  343. package/dist/tabs.js +8 -8
  344. package/dist/timeline.js +1 -1
  345. package/dist/toast.js +1 -1
  346. package/dist/toggle-chip.js +10 -10
  347. package/dist/toggle-group.js +1 -1
  348. package/dist/tooltip.js +1 -1
  349. package/dist/typewriter.js +1 -1
  350. package/dist/uniformBridgeWGPU-CtAKl45L.js +1204 -0
  351. package/dist/{useAnimatedNumber-BfUq2bUM.js → useAnimatedNumber-CLrxicG9.js} +1 -1
  352. package/dist/{useConfiguratorState-DNlOh6c8.js → useConfiguratorState-4xblKfwd.js} +25 -24
  353. package/dist/useControlSize-SH1UmJCi.js +9 -0
  354. package/dist/useDockCtaReceive-DfFkmgL1.js +82 -0
  355. package/dist/{useDragMorph-DgxnsVJz.js → useDragMorph-BUgAC-zK.js} +4 -4
  356. package/dist/useFuzzySearch-DIhcYtcw.js +177 -0
  357. package/dist/useGpuSubstrate-4pTcp6mX.js +294 -0
  358. package/dist/{useLiquidPress-kfb4KX79.js → useLiquidPress-BooG97RY.js} +2 -2
  359. package/dist/usePointerVelocityField-QLsy3_kv.js +91 -0
  360. package/dist/useScrollChrome-D66AVP7C.js +258 -0
  361. package/dist/{useSpringMount-q1amq1SJ.js → useSpringMount-BWDnKIwh.js} +1 -1
  362. package/dist/useSpringPress-B1-Czp-V.js +36 -0
  363. package/dist/useViewTransition-CUI1nAgn.js +95 -0
  364. package/dist/{vendor-CKmzio-i.js → vendor-B2qOlYY3.js} +24 -11
  365. package/dist/virtual.d.ts +1 -0
  366. package/dist/virtual.js +225 -0
  367. package/dist/watercolor-dot.js +116 -73
  368. package/package.json +127 -7
  369. package/src/styles/animations.css +13 -3
  370. package/src/styles/cards.css +69 -0
  371. package/src/styles/completion-seal.css +131 -0
  372. package/src/styles/configurator.css +55 -0
  373. package/src/styles/critical-partition.mjs +33 -11
  374. package/src/styles/dock/cta-seat.css +87 -0
  375. package/src/styles/dock/density.css +153 -0
  376. package/src/styles/dock/layers.css +55 -7
  377. package/src/styles/dock/morph-bridge.css +54 -18
  378. package/src/styles/dock/morph.css +41 -33
  379. package/src/styles/dock/overflow.css +12 -0
  380. package/src/styles/dock/search.css +68 -0
  381. package/src/styles/dock/shape.css +124 -0
  382. package/src/styles/dock/shell.css +23 -5
  383. package/src/styles/dock/stack-rail.css +264 -0
  384. package/src/styles/dock-controls/dark-mode-toggle.css +17 -4
  385. package/src/styles/dock-controls/icon-button.css +14 -0
  386. package/src/styles/dock.css +11 -1
  387. package/src/styles/glass/accent-tone.css +66 -0
  388. package/src/styles/glass/control-surfaces.css +167 -0
  389. package/src/styles/glass/ladder.css +67 -17
  390. package/src/styles/glass/rim.css +19 -9
  391. package/src/styles/glass/surfaces.css +69 -148
  392. package/src/styles/glass.css +10 -0
  393. package/src/styles/index.css +15 -0
  394. package/src/styles/scroll-chrome.css +123 -0
  395. package/src/styles/scroll-driven.css +38 -0
  396. package/src/styles/segmented-tabs.css +50 -14
  397. package/src/styles/theme/bridges.css +22 -0
  398. package/src/styles/theme/radius.css +18 -1
  399. package/src/styles/tokens/color-radius.css +13 -3
  400. package/src/styles/tokens/dark-arm.css +39 -6
  401. package/src/styles/tokens/glass-deep.css +28 -3
  402. package/src/styles/tokens/glass-fx.css +44 -1
  403. package/src/styles/tokens/glass.css +91 -31
  404. package/src/styles/tokens/light-dark.css +1 -1
  405. package/src/styles/tokens/offsets.css +27 -0
  406. package/src/styles/tokens/property-regs.css +133 -0
  407. package/src/styles/tokens/scale-paper.css +73 -29
  408. package/src/styles/tokens/scheme-motion.css +44 -6
  409. package/src/styles/tokens/sizing-config.css +110 -0
  410. package/src/styles/tokens/sizing.css +55 -104
  411. package/src/styles/tokens.css +5 -0
  412. package/src/styles/typography/semantic.css +18 -5
  413. package/src/styles/utilities/a11y-overrides.css +20 -5
  414. package/src/styles/utilities/base-misc.css +52 -0
  415. package/src/styles/utilities/btn.css +14 -3
  416. package/src/styles/utilities/components.css +31 -6
  417. package/src/styles/utilities/metal.css +26 -0
  418. package/dist/ContextMenuContent-uWnVxDab.js +0 -85
  419. package/dist/DialogFooter-BZNX5aVr.js +0 -165
  420. package/dist/HoverCardContent-b2uaAMRR.js +0 -83
  421. package/dist/Input-h9v5LeXf.js +0 -55
  422. package/dist/NumberFieldContent-Cq7EzX-U.js +0 -138
  423. package/dist/Separator-pKF0oA4M.js +0 -37
  424. package/dist/Switch-CwYNf8bo.js +0 -47
  425. package/dist/TooltipProvider-rzvnXz60.js +0 -104
  426. package/dist/color-DweYl7pE.js +0 -86
  427. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +0 -35
  428. package/dist/components/custom/constellation/constellationDraw.d.ts +0 -30
  429. package/dist/components/custom/dock/DockRail.vue.d.ts +0 -89
  430. package/dist/createCanvasLifecycle-CHD5XrDW.js +0 -82
  431. package/dist/procedural-color.wgsl-CToRHugY.js +0 -224
  432. package/dist/resolveCanvasColor-CUyHr5Uu.js +0 -11
  433. package/dist/styles/dock/rail-extend.css +0 -397
  434. package/dist/usePointerVelocityField-JbRd5CrM.js +0 -137
  435. package/dist/useRAFLoop-UYa4zoiN.js +0 -109
  436. package/dist/useSpringPress-BsqPr7FJ.js +0 -34
  437. package/src/styles/dock/rail-extend.css +0 -397
  438. /package/dist/{FadingScroll-DI6hQhT9.js → FadingScroll-DLRbH5Xr.js} +0 -0
  439. /package/dist/{HoverPopover-CbqbNwgU.js → HoverPopover-BcIxvyqZ.js} +0 -0
  440. /package/dist/{InstrumentChassis-Bx0F_q5g.js → InstrumentChassis-CxsHSyMj.js} +0 -0
  441. /package/dist/{PaperBackdrop-Vf3tlpvd.js → PaperBackdrop-CqwjnfLv.js} +0 -0
  442. /package/dist/{Progress-DctG61iZ.js → Progress-CnqB7gLm.js} +0 -0
  443. /package/dist/{ScrollingText-yOpBzFYq.js → ScrollingText-CTZbA_cG.js} +0 -0
  444. /package/dist/{SelectGroup-DwwjicPY.js → SelectGroup-BFiod7X2.js} +0 -0
  445. /package/dist/{compile-CQEFRTmx.js → compile-nZ1xVYTp.js} +0 -0
  446. /package/dist/{constants-BPOqYJAm.js → constants--C2DkLW8.js} +0 -0
  447. /package/dist/{math-BINYmg5z.js → math-Eb0w3LqU.js} +0 -0
  448. /package/dist/{prng-Za0Rmgag.js → prng-B-d9eYX8.js} +0 -0
  449. /package/dist/{slider-DVb4HXU-.js → slider-2A0rPn79.js} +0 -0
  450. /package/dist/{useGlobalDark-C28t0VWJ.js → useGlobalDark-CmjB9E32.js} +0 -0
  451. /package/dist/{useIntersectionPause-Bj4sPkMh.js → useIntersectionPause-Dbozzjgm.js} +0 -0
  452. /package/dist/{useInterval-CvK1mL92.js → useInterval-CNdua40W.js} +0 -0
  453. /package/dist/{useKeyboardShortcuts-BXWXOZ-9.js → useKeyboardShortcuts-BPRp33Im.js} +0 -0
  454. /package/dist/{useLiquidFlex-mZPMiNXh.js → useLiquidFlex-UmA6LMZu.js} +0 -0
  455. /package/dist/{useScrollProgress-D7bYU2RK.js → useScrollProgress-c3yxmH6a.js} +0 -0
  456. /package/dist/{useSortable-DHjtZSEd.js → useSortable-BVqlJRBR.js} +0 -0
  457. /package/dist/{useTextHighlight-CWEi25hf.js → useTextHighlight-NmBM5V_4.js} +0 -0
  458. /package/dist/{vReveal-Czsb7zQC.js → vReveal-D9k0jADx.js} +0 -0
  459. /package/dist/{vSpecular-CQFmLNzA.js → vSpecular-EX7loENl.js} +0 -0
@@ -91,12 +91,38 @@
91
91
  opacity-only register. */
92
92
  --glass-blur-dock-radius: 9px;
93
93
 
94
+ /* ── Per-rung SATURATE — the CANONICAL named saturate register (BC.W-GLASS-
95
+ LEGIBILITY-MEASURED, the speedtest-AX BC-W10 fold) ───────────────────────
96
+ The saturate term is the LOAD-BEARING glass knob (research/apple-glass.md §4:
97
+ the apple.com nav rides `saturate(1.8)` — the highest term, blur moderate).
98
+ Each `--glass-saturate-{tier}` is the library's canonical saturation for that
99
+ rung — a NAMED, `:root`-overridable input the composed `--glass-blur-{tier}`
100
+ reads THROUGH, the SAME substitution-vs-redeclaration discipline as the
101
+ `--glass-opacity-{tier}` alpha register above. A `:root { --glass-saturate-
102
+ quiet: … }` override re-resolves the rung's saturation with ZERO recipe edit
103
+ (the speedtest "dark cards" chronic + the apple-glass saturate-as-load-bearing
104
+ lever). The values here ARE the W52-D19 bake (wash/quiet/resting 1.05,
105
+ floating 1.18, overlay 1.2) become the token defaults — so the composed blur
106
+ is BYTE-IDENTICAL to the old baked literal (proof:glass-cal / proof:card-tier-
107
+ alpha stay GREEN by construction). The deep-tier `--glass-saturate-deep` 1.8
108
+ ceiling (glass-deep.css) is the upper bound; no rung saturate exceeds it. The
109
+ dark arm (tokens/dark-arm.css) re-declares this register with the W-DARK-
110
+ MATERIAL luminosity lift — the SAME named tokens, per-mode (the plain per-mode
111
+ pair idiom). The brightness() companions stay baked (this fold mints ONLY the
112
+ saturate knob). Machine-locked by `proof:glass-legibility` L7. */
113
+ --glass-saturate-wash: 1.05;
114
+ --glass-saturate-quiet: 1.05;
115
+ --glass-saturate-resting: 1.05;
116
+ --glass-saturate-floating: 1.18;
117
+ --glass-saturate-overlay: 1.2;
118
+
94
119
  /* AX.W54 — each blur radius is scaled by the ONE `--glass-level` scalar (in
95
120
  lockstep with the opacity seam above): level=1 byte-identical; level=0 →
96
121
  blur(0) (the clean solid floor with the opacity); level>1 → more diffusion.
97
- The per-rung `saturate()`/`brightness()` companions are UNTOUCHED (the level
122
+ The per-rung `saturate()` companion reads the named `--glass-saturate-{tier}`
123
+ knob (BC.W-GLASS-LEGIBILITY-MEASURED); `brightness()` stays baked (the level
98
124
  scales the RADIUS, not the saturation — W52's calm light-concentration). */
99
- --glass-blur-wash: blur(calc(var(--glass-blur-wash-radius) * var(--glass-level))) saturate(1.05);
125
+ --glass-blur-wash: blur(calc(var(--glass-blur-wash-radius) * var(--glass-level))) saturate(var(--glass-saturate-wash));
100
126
  /* AV.W15 M1 — the `quiet` rung gained `saturate(1.05) brightness(1.02)`
101
127
  so the lower ladder reads with the same saturation life as `resting`+
102
128
  (Apple: Liquid Glass concentrates light, it does not desaturate). The
@@ -104,27 +130,34 @@
104
130
  between bare `wash` and `resting` without over-brightening the rung.
105
131
  The `prefers-reduced-transparency: reduce` bracket at glass.css maps
106
132
  `--glass-blur-quiet: none`, so this whole chain drops with the blur. */
107
- --glass-blur-quiet: blur(calc(var(--glass-blur-quiet-radius) * var(--glass-level))) saturate(1.05) brightness(1.02);
108
- --glass-blur-resting: blur(calc(var(--glass-blur-resting-radius) * var(--glass-level))) saturate(1.05);
133
+ --glass-blur-quiet: blur(calc(var(--glass-blur-quiet-radius) * var(--glass-level))) saturate(var(--glass-saturate-quiet)) brightness(1.02);
134
+ --glass-blur-resting: blur(calc(var(--glass-blur-resting-radius) * var(--glass-level))) saturate(var(--glass-saturate-resting));
109
135
  /* AX.W52 D19 — the floating/overlay backdrop saturate tamed from 1.4/1.5 to a
110
136
  gentle ~1.18/1.2 (real liquid glass concentrates light ~1.1–1.2×; the prior
111
137
  1.4–1.5× over-juiced the bleed-through into a garish smear over a colored
112
138
  substrate). wash/quiet/resting already sit at 1.05 — untouched. */
113
- --glass-blur-floating: blur(calc(var(--glass-blur-floating-radius) * var(--glass-level))) saturate(1.18);
114
- --glass-blur-overlay: blur(calc(var(--glass-blur-overlay-radius) * var(--glass-level))) saturate(1.2);
139
+ --glass-blur-floating: blur(calc(var(--glass-blur-floating-radius) * var(--glass-level))) saturate(var(--glass-saturate-floating));
140
+ --glass-blur-overlay: blur(calc(var(--glass-blur-overlay-radius) * var(--glass-level))) saturate(var(--glass-saturate-overlay));
115
141
  /* Dock blur composes blur() only — no saturate. */
116
142
  --glass-blur-dock: blur(calc(var(--glass-blur-dock-radius) * var(--glass-level)));
117
143
 
118
- /* AX.W52 — the GLASS BUTTON blur. The `glass`/`glass-wash` button variants
119
- compose the `.glass-wash` tier (`--glass-blur-wash` = blur(1px)) — a
120
- sub-perceptual diffusion authored for a small detail TILE, not a button
121
- the user reads as "glass." A button is a hero control: it wants a real
122
- glass blur. `--glass-blur-btn` lifts the variant onto the `quiet`-tier
123
- radius (10px — a genuine liquid-glass diffusion) with the same gentle
124
- `saturate(1.05) brightness(1.02)` light-concentration the quiet rung
125
- carries (NOT a colour-juice). The wash TILE tier (MetricCell et al.) keeps
126
- its 1px — only the glass BUTTON variants reach for this. */
127
- --glass-blur-btn: blur(calc(var(--glass-blur-quiet-radius) * var(--glass-level))) saturate(1.05) brightness(1.02);
144
+ /* AX.W52 → BC.W-GLASS-LEGIBILITY-MEASURED — the GLASS BUTTON blur, lifted to
145
+ the FLOATING-tier "more glass" register. The `glass`/`glass-wash` button
146
+ variants compose the `.glass-wash` tier (`--glass-blur-wash` = blur(1px)) — a
147
+ sub-perceptual diffusion authored for a small detail TILE, not a button the
148
+ user reads as "glass." A button is a hero control: it wants a real glass blur.
149
+ The AX.W52 landing sat at the quiet-tier 8px/saturate(1.05) — "quieter than
150
+ even the calm floating tier" (apple-ios27.md §4.2). This wave lifts it to the
151
+ FLOATING-tier register (apple-ios27.md §5 bake-table "button blur lift to
152
+ 10-13 / 1.18"): the floating radius (13px, in the 10-13 band) + the named
153
+ `--glass-saturate-floating` knob (1.18) — a genuinely MORE-glass transmissive
154
+ capsule revealing the craft beneath (the apple-glass SUPERSET: apple.com's web
155
+ CTA is a SOLID blue capsule, zero blur — research/apple-glass.md §1.4). The
156
+ `brightness(1.02)` light-concentration the quiet rung carried is KEPT (no
157
+ colour-juice). Clean break — the old 8px/quiet value is GONE, no alias. The
158
+ wash TILE tier (MetricCell et al.) keeps its 1px — only the glass BUTTON
159
+ variants reach for this. Machine-locked by `proof:glass-legibility` L3. */
160
+ --glass-blur-btn: blur(calc(var(--glass-blur-floating-radius) * var(--glass-level))) saturate(var(--glass-saturate-floating)) brightness(1.02);
128
161
 
129
162
  /* Dock-specific opacity (0.42) — lighter than `resting` (0.65) so the dock
130
163
  reads as a translucent overlay rather than a panel, backdrop bleed
@@ -133,6 +166,20 @@
133
166
  dock reads as painted chrome, not a frosted ghost. */
134
167
  --glass-opacity-dock: 0.42;
135
168
 
169
+ /* Dialog-specific opacity (0.68) — BC.W-DIALOG-GLASS. The iOS-27 control-
170
+ center modal register: SEE-THROUGH frosted glass that reveals the page
171
+ beneath, NOT the floating-tier near-opaque slab (0.80 read as "NOT glassy
172
+ at all"). 0.68 sits between `resting` (0.65 — transparent enough to read
173
+ through) and `floating` (0.80 — opaque enough for AA legibility against
174
+ the bright bucket), so the modal floats with the FLOATING-tier lift (edge/
175
+ rim/under-shadow) while reading at the RESTING-tier transparency. The
176
+ LIBRARY iOS-modal identity (presets-in-consumers — a consumer retunes
177
+ `--glass-bg-dialog` via :root). Consumed by DialogContent.vue, which re-
178
+ declares `--glass-bg-floating: var(--glass-bg-dialog)` on the dialog scope
179
+ (the self-re-point recipe, the dock precedent — NOT a raw rung override
180
+ that won't re-compose). */
181
+ --glass-opacity-dialog: 0.68;
182
+
136
183
  /* Dock foreground over an animated backdrop. A dock floating over an
137
184
  aurora/animated surface (`value.js` dock-over-aurora, a slides routed
138
185
  control, bbnf) sits on a mid-luminance, shifting field where the muted
@@ -178,22 +225,35 @@
178
225
  second hand-rolled recipe. */
179
226
  --glass-bg-dock: color-mix(in oklab, color-mix(in srgb, var(--card) calc((1 - (1 - var(--glass-opacity-dock)) * var(--glass-level)) * 100%), transparent), var(--glass-tint-source) var(--glass-tint-strength));
180
227
  --glass-bg-chassis: color-mix(in srgb, var(--card) calc((1 - (1 - var(--glass-opacity-chassis)) * var(--glass-level)) * 100%), transparent);
228
+ /* BC.W-DIALOG-GLASS — the dialog plate bg, composed the SAME oklab-tint-wrapped
229
+ way the dock self-re-points (so the BC.W-ADAPTIVE-RECONCILE darken reaches the
230
+ modal over a bright backdrop without a second hand-rolled recipe). The 0.68
231
+ opacity is the iOS-27 control-center register (see `--glass-opacity-dialog`).
232
+ DialogContent.vue re-declares `--glass-bg-floating: var(--glass-bg-dialog)` on
233
+ the dialog scope (the documented retune path — the self-re-point, NOT a raw
234
+ rung override) so the floating edge/rim/under-shadow LIFT survives the
235
+ transparency drop. */
236
+ --glass-bg-dialog: color-mix(in oklab, color-mix(in srgb, var(--card) calc((1 - (1 - var(--glass-opacity-dialog)) * var(--glass-level)) * 100%), transparent), var(--glass-tint-source) var(--glass-tint-strength));
181
237
 
182
- /* Composed borders — foreground-tinted. BA.W-NO-GRAY L3 — the warm RIM
183
- re-anchor (G9). The rim IS warm (it rides --foreground, hsl-24 warm ink),
184
- but at 8-12% α over a near-white plate it was a near-invisible hairline —
185
- the plate had no carved silhouette, reading as a borderless gray rectangle
186
- (the user's "no gray ... for cards"). The α lifts a few points per rung so
187
- the warm hairline CARVES the silhouette (the WWDC25 "rim that defines the
188
- silhouette" device, on the warm-ink register). Still bounded low — the rim
189
- is a whisper that defines the edge, never a hard rule. The source stays
190
- --foreground (the warm-ink tint, NOT a new color); only the presence lifts. */
191
- --glass-border-wash: color-mix(in srgb, var(--foreground) 11%, transparent);
192
- --glass-border-quiet: color-mix(in srgb, var(--foreground) 13%, transparent);
193
- --glass-border-resting: color-mix(in srgb, var(--foreground) 16%, transparent);
194
- --glass-border-floating: color-mix(in srgb, var(--foreground) 19%, transparent);
195
- --glass-border-overlay: color-mix(in srgb, var(--foreground) 22%, transparent);
196
- --glass-border-dock: color-mix(in srgb, var(--foreground) 14%, transparent);
238
+ /* Composed borders — foreground-tinted. BC.W-BLACK-BAR D2 — the perimeter
239
+ hairline is RETIRED as the silhouette device. The old 11-22% warm-ink rung
240
+ borders rode --foreground (oklab L 0.216, near-black warm ink); over a
241
+ near-white cream plate the full-perimeter hairline read as the user's "wtf
242
+ is this black bar" — worst on the TOP edge where the bright white catch-light
243
+ ring sat just inside a dark border (a bright rim and a dark line at war on the
244
+ SAME edge). The silhouette is now carved by the directional rim
245
+ (--glass-rim-top catch-light + --glass-rim-bottom under-shadow, glass-fx.css),
246
+ NOT by this perimeter ink. So each rung drops to ≤5% α — the warm hue stays
247
+ --foreground (the warm-not-tinted identity, BA.W-NO-GRAY), only the PRESENCE
248
+ falls below the read-threshold so the hairline can never read as a bar. The
249
+ +1% on the two heaviest rungs (floating/overlay) holds a faint tier-presence
250
+ ordering without crossing the threshold (apple-ios27.md §5 "top ≤4%" target). */
251
+ --glass-border-wash: color-mix(in srgb, var(--foreground) 4%, transparent);
252
+ --glass-border-quiet: color-mix(in srgb, var(--foreground) 4%, transparent);
253
+ --glass-border-resting: color-mix(in srgb, var(--foreground) 4%, transparent);
254
+ --glass-border-floating: color-mix(in srgb, var(--foreground) 5%, transparent);
255
+ --glass-border-overlay: color-mix(in srgb, var(--foreground) 5%, transparent);
256
+ --glass-border-dock: color-mix(in srgb, var(--foreground) 4%, transparent);
197
257
  --glass-border: var(--glass-border-quiet);
198
258
 
199
259
  /* ── The control REST register (BA.W-SURFACE-AXIS scope 7) ────────────────
@@ -131,7 +131,7 @@
131
131
  --section-color-2: light-dark(oklch(0.484 0.163 265.5), oklch(0.718 0.107 268.4));
132
132
  --section-color-3: light-dark(oklch(0.542 0.089 222.8), oklch(0.767 0.091 219.9));
133
133
  --section-color-4: light-dark(oklch(0.551 0.088 171.1), oklch(0.776 0.105 172.6));
134
- --section-color-5: light-dark(oklch(0.623 0.124 69.6), oklch(0.813 0.109 78.2));
134
+ --section-color-5: light-dark(oklch(0.530 0.124 69.6), oklch(0.813 0.109 78.2));
135
135
  --section-color-6: light-dark(oklch(0.579 0.201 30.4), oklch(0.693 0.151 28.1));
136
136
  --section-color-7: light-dark(oklch(0.532 0.180 317.5), oklch(0.739 0.134 318.1));
137
137
  --section-color-8: light-dark(oklch(0.520 0.176 8.4), oklch(0.709 0.142 2.3));
@@ -108,6 +108,33 @@
108
108
  it claimed to back never read it — PopoverContent paints `p-4` directly), so
109
109
  it was an orphan declaration the golden-padding cut prunes. */
110
110
  --panel-padding: 0.375rem;
111
+
112
+ /* BC.W-OVERLAY-UNIFORM — the token-BACKING of the raw floating-overlay
113
+ literals (the token-beats-prop seam). Each defaults to the byte-identical
114
+ HEAD magnitude so a bare overlay is pixel-unchanged; a consumer retunes
115
+ EVERY overlay's min-width / max-block / tooltip type / select chevron from
116
+ ONE `:root` override (the uniformity payoff). These are token-backings of
117
+ EXISTING raw literals (`min-w-32` / `max-h-[60vh]` / tooltip `text-sm` /
118
+ chevron `opacity-50`) — NOT a new compositing register (the `surface` axis
119
+ + the φ `--overlay-pad-*` ladder are THREADED, not re-minted). */
120
+ /* `min-w-32` = 32 × 0.25rem = 8rem — the dropdown/select/context-menu min-width. */
121
+ --overlay-min-width: 8rem;
122
+ /* The collision-bounded max-block ceiling the dropdown (`max-h-[60vh]`) +
123
+ command list (`max-h-[300px]`) read. Defaults to 60vh — the viewport-
124
+ relative ceiling so a long menu scrolls inside the overlay rather than
125
+ running off-screen. (The Select precompiled `[data-slot="select-content"]`
126
+ max-height in select.css is the BA.W-EMISSION consumer-reach floor — KEPT,
127
+ not threaded here; see the census on-the-line row.) */
128
+ --overlay-max-block: 60vh;
129
+ /* The tooltip type rung — the golden quiet caption register (√φ ladder), the
130
+ token-backing of the bare `text-sm` on TooltipContent (the overlay share of
131
+ class 3). Defaults to `--type-caption` so the compact tooltip chip reads the
132
+ house caption scale; a consumer retunes the tooltip type from `:root`. */
133
+ --tooltip-text: var(--type-caption);
134
+ /* The Select trigger chevron opacity — the token-backing of the bare
135
+ `opacity-50` so a consumer retunes the affordance prominence from `:root`. */
136
+ --select-chevron-opacity: 0.5;
137
+
111
138
  --chart-height-compact: 15rem;
112
139
  --chart-height-default: 22.5rem;
113
140
  --chart-height-large: 25rem;
@@ -171,6 +171,19 @@
171
171
  initial-value: 0%;
172
172
  }
173
173
 
174
+ /* BC.W-GLASS-GLOW-FIX (Atlas A-8) — the Pulse aura breath SCALE. The `ambient-pulse`
175
+ keyframe runs on `.pulse-aura` and writes this property; the `.pulse-aura::before`
176
+ child (the radial paint) reads it via `transform: scale(var(--pulse-aura-breath-
177
+ scale))`. Typed `<number>` so the keyframe INTERPOLATES it per-frame (a bare
178
+ unregistered var would snap min↔max). INHERITS so the pseudo-element picks it up
179
+ from its originating `.pulse-aura` (the aura has no content descendants — it is
180
+ `aria-hidden` + empty — so the inherit only reaches the `::before` halo). */
181
+ @property --pulse-aura-breath-scale {
182
+ syntax: "<number>";
183
+ inherits: true;
184
+ initial-value: 1;
185
+ }
186
+
174
187
  /* AX.W54 — the GLASS-FIRST single knob. `--glass-level` is the ONE clarity
175
188
  scalar threaded through BOTH glass ladders at their single sites (the
176
189
  `--glass-bg-*` opacity recipe + the `--glass-blur-*` radii). It is a typed,
@@ -194,6 +207,26 @@
194
207
  initial-value: 1;
195
208
  }
196
209
 
210
+ /* BC.W-ADAPTIVE-RECONCILE — the OBSERVER's measured backdrop relative-luminance, now
211
+ LOAD-BEARING. `useGlassBackdropLuminance` WRITES `--glass-backdrop-luma` (0..1) on
212
+ the glass target; the content/overlay/dock `:where()` rules READ it on the RHS of the
213
+ `--glass-tint-strength` clamp (glass/ladder.css, dock/morph.css) — the continuous
214
+ driver that lifts the calm 4% floor toward the ≤24% AA ceiling as the measured
215
+ backdrop brightens past the knee (the iOS-27 dynamic-range shift; apple-ios27.md §1.5).
216
+ Registered as a typed INHERITING `<number>` (the `--glass-level`/`--progress-crescendo`
217
+ precedent) so a bare `var()` INTERPOLATES smoothly between sample frames instead of
218
+ snapping (a per-sample re-paint would flicker the plate). `inherits: true` so the
219
+ observer's write on the target reaches every descendant glass surface that reads the
220
+ clamp. `initial-value: 0` is the calm-dark rest: with luma 0 the clamp's luma-ramp is
221
+ `max(0, …) = 0`, so an unwired surface resolves EXACTLY the floor (the zero-delta calm
222
+ identity GLASS-IDENTITY pins). This replaces the empty `--glass-backdrop-luma: ;`
223
+ placeholder declaration (the dead-knob's write-only stub) — the loop now READS. */
224
+ @property --glass-backdrop-luma {
225
+ syntax: "<number>";
226
+ inherits: true;
227
+ initial-value: 0;
228
+ }
229
+
197
230
  /* BB.W-DEEP-GLASS — the OPT-IN deep-glass DEPTH scalar. `--glass-depth` is the
198
231
  `--glass-level` TWIN for the deep tier: a typed INHERITING <number> so a host
199
232
  sets it on any ancestor to retune the deep tier's depth (the cascading-scalar
@@ -287,3 +320,103 @@
287
320
  inherits: true;
288
321
  initial-value: 0;
289
322
  }
323
+
324
+ /* BC.W-AX-COMPLETION-SEAL — the 4 motion drives of the hero-scale earned-GOLD
325
+ completion seal (completion-seal.css consumes them). Registered typed so the
326
+ one-shot draw INTERPOLATES (a bare unregistered var() snaps; the §18 typed-property
327
+ idiom lets the engine animate the stroke-reveal / settle / glint). The seal is the
328
+ visual seal of the W-PHASE-PALETTE completion event — its ink reads the earned-gold
329
+ register; its glint composes the W-AX-METAL-GLOW catch-light. One-shot, PRM-gated,
330
+ compositor-only.
331
+
332
+ • --seal-draw (<percentage>) — the stroke-reveal extent (the stroke-dashoffset wipe
333
+ drive: 0% undrawn → 100% fully drawn). `inherits: false` (each seal owns its own
334
+ draw, the per-surface ownership of the specular/border-progress cohort — a sealed
335
+ parent must not push its draw onto a child seal). `initial-value: 100%` is the
336
+ SAFE fully-drawn resting seal: on a non-supporting engine (no @property) the seal
337
+ paints fully drawn, NEVER a blank — the editorial draw-on degrades to the finished
338
+ mark, never to nothing.
339
+
340
+ • --seal-scale (<number>) — the settle scale (the draw-on lands with a small spring
341
+ overshoot on the seal's own --spring-snappy/--spring-bouncy clock — the SPATIAL
342
+ leg, W-MOTION-CANON P2 enter-bouncy). `inherits: false` (per-seal). `initial-value:
343
+ 1` is the resting settled scale.
344
+
345
+ • --seal-glint (<number>) — the gold catch-light intensity (the one-pass glint that
346
+ fires once on settle, reading --metal-glow-opacity from W-AX-METAL-GLOW — a glint,
347
+ not a loop). `inherits: false` (per-seal). `initial-value: 0` so an unwired seal is
348
+ un-glinting at rest (the calm floor; the glint wakes only on the draw).
349
+
350
+ • --seal-ink (<color>) — the seal stroke color. `inherits: true` (the cascading-scalar
351
+ idiom — a consumer scope re-inks the seal in lockstep with the completion register).
352
+ The @property `initial-value` MUST be a CONCRETE var-free <color> (the typed-property
353
+ rule: a registration fallback cannot be a var()), so it is the LITERAL light-gold
354
+ `oklch(0.751 0.147 84.2)` (scale-paper.css's `--gold` value) — the engine fallback
355
+ when no cascaded value exists. The RUNTIME cascade default is the TOKEN form the
356
+ recipe sets: `--seal-ink: var(--phase-complete-color, var(--color-gold))` — the
357
+ EARNED-gold completion register (Q2: gold is earned at completion, NEVER the running
358
+ phase spectrum). */
359
+ @property --seal-draw {
360
+ syntax: "<percentage>";
361
+ inherits: false;
362
+ initial-value: 100%;
363
+ }
364
+
365
+ @property --seal-scale {
366
+ syntax: "<number>";
367
+ inherits: false;
368
+ initial-value: 1;
369
+ }
370
+
371
+ @property --seal-glint {
372
+ syntax: "<number>";
373
+ inherits: false;
374
+ initial-value: 0;
375
+ }
376
+
377
+ @property --seal-ink {
378
+ syntax: "<color>";
379
+ inherits: true;
380
+ initial-value: oklch(0.751 0.147 84.2);
381
+ }
382
+
383
+ /* BC.W-SCROLL-TRIGGER — the native scroll-ramp custom. The continuous 0..1 scroll
384
+ progress the `useScrollTrigger` reader exposes rides this registered custom on a
385
+ `supportsScrollTimeline()` engine: a `.scroll-progress`-style recipe writes it via
386
+ `animation-timeline: scroll(self)` so a consumer's CSS ramp (the BC.W-SCROLL-CHROME
387
+ shrink/opacity) reads `--scroll-t` with ZERO JS (the dual-path single-writer — the JS
388
+ `progress` ref attaches NOTHING on a supporting engine). `inherits: true` (the
389
+ cascading-scalar idiom — a scroll-driven ancestor exposes the ramp to descendant
390
+ chrome, the `--ui-scale`/`--glass-level` pattern), distinct from the per-element
391
+ non-inheriting specular/progress cohort. `initial-value: 0` is the safe resting ramp
392
+ (the unregistered fallback paints it; on a non-supporting engine the JS reader writes
393
+ `progress.value` and the consumer reads the ref, not this custom). The typed
394
+ `<number>` lets the engine interpolate the ramp rather than the textual rep (a bare
395
+ unregistered var() snaps — the `--border-progress-fill`/`--dock-morph-t` precedent). */
396
+ @property --scroll-t {
397
+ syntax: "<number>";
398
+ inherits: true;
399
+ initial-value: 0;
400
+ }
401
+
402
+ /* BC.W-SCROLL-CHROME — the floating-chrome COLLAPSE fraction. `--chrome-collapse-t`
403
+ is the 0..1 collapse scalar `useScrollChrome` ramps off the scroll reader's
404
+ direction + range (0 = fully expanded, 1 = fully collapsed). The `.scroll-chrome`
405
+ recipe (scroll-chrome.css) reads it for the COMPOSITOR shrink/quiet ramp:
406
+ `transform: scale()/translateY()` (the SPATIAL leg), `opacity` (bounded above a
407
+ never-invisible floor — the NN/g pale-fade trap forbidden), and the shadow LIFT as
408
+ content scrolls under (Apple "as text scrolls underneath, shadows become more
409
+ prominent"). It NEVER drives the resting `backdrop-filter` blur (the
410
+ W-DOCK-SHRINK-BLUR fence — the shrunken bar is crisp glass, not a blurry mess).
411
+ Registered typed so a bare `var()` INTERPOLATES the ramp rather than snapping (the
412
+ `--scroll-t`/`--dock-morph-t` precedent); `inherits: true` (the cascading-scalar
413
+ idiom — a scroll-driven ancestor exposes the collapse to descendant chrome, the
414
+ `--scroll-t`/`--glass-level` pattern, distinct from the per-element non-inheriting
415
+ specular cohort). `initial-value: 0` is the PERSISTENT rest (the iOS-27 default — a
416
+ bare chrome does NOT collapse; the unregistered fallback paints it too, so the
417
+ recipe is byte-identical to the expanded chrome when unwired). */
418
+ @property --chrome-collapse-t {
419
+ syntax: "<number>";
420
+ inherits: true;
421
+ initial-value: 0;
422
+ }
@@ -44,13 +44,17 @@
44
44
  (segmented/pill slider OR the underline rule) STRETCHES along its travel
45
45
  axis as it glides between tabs, then settles to fit — the Material 3
46
46
  ELASTIC / Apple Liquid-Glass "controls insist on animating themselves"
47
- register, kept RESTRAINED. The deform is volume-preserving (stretch X,
48
- compress Y in lockstep: `scale: var(--stretch) calc(1 / var(--stretch))`)
49
- so it reads as an elastic warp, never a size pump. The cap holds the peak
50
- LOW (1.08 ≈ +8%) — iOS 26.2 dialed motion DOWN; a high-frequency control
51
- wants a whisper of squish, not a bounce. A consumer dials the elasticity
52
- (or to 1 for none) without touching source. */
53
- --tab-indicator-max-stretch: 1.08;
47
+ register. The deform is volume-preserving (stretch X, compress Y in lockstep:
48
+ `scale: var(--stretch) calc(1 / var(--stretch))`) so it reads as an elastic
49
+ warp, never a size pump. A consumer dials the elasticity (or to 1 for none)
50
+ without touching source.
51
+ BC.W-LIQUID-TAB — lifted 1.08 → 1.15 (in lockstep with the no-token floor
52
+ DEFAULT_INDICATOR_MAX_STRETCH, the SOLE cap source — constant + token never
53
+ fork). The click travel-squish AND the liquid-tab pull-morph read this ONE
54
+ cap; the lift makes a FAST pull visibly swell the pill so the gel-squish READS
55
+ as liquid (glass-dock-codebase.md §3.4) — still capped LOW (≤1.2, the
56
+ anti-taffy-pull bar; the pill swells, never taffy-pulls). */
57
+ --tab-indicator-max-stretch: 1.15;
54
58
  /* BA.W-TABS — the indicator's OWN travel clock, re-pointed off the generic
55
59
  `--duration-normal` (0.3s, which dragged a ~190ms sub-pixel undershoot tail
56
60
  past the ~100ms 90%-travel point — the R10-2 "too slow" read) onto the
@@ -81,6 +85,26 @@
81
85
  --invalid-ring: 0 0 0 var(--focus-ring-width)
82
86
  color-mix(in srgb, var(--destructive) var(--invalid-ring-tint), transparent);
83
87
 
88
+ /* BC.W-RADIO-FIX — the selection-control STATE register (the `--focus-ring-shadow`
89
+ / `--invalid-ring` precedent: one named register, read everywhere — never a
90
+ per-control magic literal). The checks family (Checkbox + RadioGroupItem) reads
91
+ these TWO tokens so a re-tint is ONE edit, library-wide.
92
+
93
+ • `--control-ring` — the UNCHECKED outline. Post-BC.W-BLACK-BAR the general glass
94
+ rim is ≤4% warm-ink (`--glass-border-resting`), which reads as a near-invisible
95
+ hairline on a 16px circle — too faint to tell a rest radio from its siblings. So
96
+ the selection atoms are the NAMED exception (recorded in BC.W-BLACK-BAR's fences):
97
+ a slightly-stronger ~12% warm-ink outline that reads as a DEFINED circle at 16px
98
+ without re-introducing the dark `--primary` hairline. Warm-ink-derived (no gray,
99
+ BA.W-NO-GRAY).
100
+ • `--control-checked-bg` — the SELECTED glass-tinted fill. The recipe is minted
101
+ ONCE here (the anti-paste bite: a second inline `color-mix(... --primary 88% ...)`
102
+ literal on a checks atom reds — the recipe IS the token). Mirrors the
103
+ glass-`--primary` over the floating tier the Checkbox already speaks, so the ring
104
+ goes outline → filled glass disc (a real material step), warm-not-saturated. */
105
+ --control-ring: color-mix(in srgb, var(--foreground) 12%, transparent);
106
+ --control-checked-bg: color-mix(in srgb, var(--primary) 88%, var(--glass-bg-floating));
107
+
84
108
  /* ═══════════════════════════════════════════════
85
109
  §12 PAPER TEXTURES
86
110
  ═══════════════════════════════════════════════ */
@@ -94,29 +118,49 @@
94
118
  --paper-clean-texture: url("data:image/svg+xml,%3Csvg width='200' height='200' viewBox='0 0 200 200' 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%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
95
119
  --paper-aged-texture: url("data:image/svg+xml,%3Csvg width='200' height='200' viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.5' numOctaves='5' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.06'/%3E%3C/svg%3E");
96
120
 
97
- /* BB.W-PAPER-GRID-TEXTURE — the GEOMETRIC half of the paper-cascade, the
98
- peer of the organic turbulence above. Where `--paper-*-texture` are
99
- feTurbulence grain fields, this is a two-frequency engineering-paper
100
- grid: a 32px MINOR cell + a 128px MAJOR rule (the 4×-major blueprint
101
- vocabulary the demo `.story-bg-grid` speaks, re-expressed as a library
102
- token so a document-register card can opt its INTERIOR ground into the
103
- line-field, not only the page margin). Unlike the organic SVG textures
104
- (a baked-at-parse `opacity` URI), the grid is a STATIC `background-image`
105
- gradient-STACK — a one-time compositor-cached paint, NEVER a per-frame
106
- repaint. The line INK reads a `color-mix(… var(--foreground) N%, …)` so
107
- it composes against the warm ink identity and re-tints with `--foreground`
108
- in lockstep — never a hardcoded `hsl()` (the no-gray / token-first
109
- floor). The ambient through-card strength is the ONE knob
110
- `--paper-grid-opacity` (~0.08, the ask's "felt THROUGH the card ~0.08"):
111
- the MINOR line ink scales off it directly and the MAJOR rule rides
112
- `* 1.6` (the demo's 7%→12% engineering-paper weight step), so a consumer
113
- retunes the whole grid from the single strength knob. (The strength lives
114
- in the ink alpha, not a layer `opacity`, because the utility paints the
115
- grid on the card's HOST `background-image` to avoid the two-pseudo-budget
116
- contention with the grain `::after` / specular `::before` — see
117
- cards.css.) */
121
+ /* BC.W-GRID-SIMPLE — the ONE engineering-graph-paper rhythm source. The
122
+ keyframes.js `EditorShell` magnitudes, re-expressed as `--grid-*` tokens:
123
+ a fine 1rem cell + a bolder 5rem major rule (the 5× engineering-graph
124
+ rhythm), each line a hairline-crisp single device-pixel. The pitch is
125
+ REM-RELATIVE — 1rem (16px at the default root) and 5rem (80px) divide
126
+ cleanly at DPR 1/2/3, so every line lands on a whole device-pixel column/
127
+ row (the anti-blur rule; the prior 28px/32px integer pitch landed on
128
+ sub-pixel boundaries at fractional-DPR zoom and the anti-aliaser softened
129
+ the 1px lines). The fine 3% is the user's "less busy substrate" — DELIBERATELY
130
+ BELOW the 10% legibility floor — and the major 11% is held STRICTLY ABOVE it
131
+ (the kf weight step). The line INK is a `color-mix(… var(--foreground) N%, …)`
132
+ so it re-tints with the theme by construction (warm-ink on light, lifting
133
+ off near-black on dark) — NO parallel `--grid-*-dark` family (the
134
+ `--foreground` flip re-resolves the mix; the cards.css dark-arm precedent).
135
+ A consumer dials it LARGER (`--grid-pitch: 1.25rem` / `--grid-major: 6.25rem`)
136
+ or quieter (the `--grid-line`/`--grid-line-major` strength knobs) at `:root`
137
+ — the token-first axis. This is the SINGLE rhythm source: the demo full-bleed
138
+ page grid (`.grid-bg`, story-hero.css) AND the library card-interior register
139
+ (`.paper-grid`, cards.css) both read it (the two-parallel-28px/32px-systems
140
+ fix). The LIQUID full-bleed sibling (`<PaperGrid>`, BC.W-VIZ-PAPERGRID)
141
+ re-uses the SAME rhythm — one pitch, two registers (static page-bg vs liquid). */
142
+ --grid-pitch: 1rem;
143
+ --grid-major: 5rem;
144
+ --grid-line: color-mix(in srgb, var(--foreground) 3%, transparent);
145
+ --grid-line-major: color-mix(in srgb, var(--foreground) 11%, transparent);
146
+
147
+ /* The library card-interior GEOMETRIC register (`.paper-grid`, cards.css) —
148
+ the document-register card's INTERIOR ground, felt THROUGH the glass tint.
149
+ It UNIFIES its pitch onto the shared `--grid-pitch` (the prior 32px literal
150
+ retired — ONE rhythm source) and keeps its OWN ambient through-card strength
151
+ register: the `--paper-grid-opacity` single knob (~0.08, the ask's "felt
152
+ THROUGH the card ~0.08"). DISTINCT from the page-bg 3%/11% tier above — a
153
+ card interior reads quieter than a full-bleed page wash — but the PITCH is
154
+ shared. The ink stays a `color-mix(… var(--foreground) N%, …)` (re-tints with
155
+ --foreground in lockstep, never a hardcoded literal — the no-gray floor); the
156
+ MAJOR rule rides `* 1.6` (the 0.08→0.128 weight step). The strength lives in
157
+ the ink alpha, not a layer `opacity`, because `.paper-grid` paints the grid on
158
+ the card's HOST `background-image` to avoid two-pseudo-budget contention with
159
+ the grain `::after` / specular `::before` (see cards.css). A STATIC raster —
160
+ gradient-stack `background-image`, one compositor-cached paint, never a
161
+ per-frame repaint. */
118
162
  --paper-grid-opacity: 0.08;
119
- --paper-grid-texture-size: 32px;
163
+ --paper-grid-texture-size: var(--grid-pitch);
120
164
  --paper-grid-line: color-mix(
121
165
  in srgb,
122
166
  var(--foreground) calc(var(--paper-grid-opacity) * 100%),
@@ -74,6 +74,20 @@
74
74
  §1 DURATION
75
75
  ═══════════════════════════════════════════════ */
76
76
  --duration-instant: 0.1s;
77
+ /* BC.W-CONTROL-SMOOTH — the named control-press SURFACE clock (the W-GLASS-CAL
78
+ per-register-clock discipline). An interactive control the user actively pokes
79
+ (hover-in, press, toggle) wants the iOS quick ~100-120ms surface beat, NOT the
80
+ 0.2s calm card-crossfade beat — at 0.2s the colour/border/shadow easing drags
81
+ VISIBLY behind the pointer (the §F "super laggy" read). 0.12s brackets the iOS
82
+ 100-120ms quick-control register (apple-ios27.md). `transition-control` (btn.css)
83
+ reads THIS so the whole control family re-times from one `:root` override, and
84
+ the surface beat now tracks the press-squish window (the press is `tap-squish`/
85
+ `useSpringPress`'s coupled transform leg on the spring's own clock — P3 fade-
86
+ coupled-to-transform). The bezier `--ease-standard` STAYS for the surface legs
87
+ (a colour cross-fade on a spring wobbles, §6 binding); only the DURATION shortens.
88
+ The CALM card register keeps `--duration-fast`/`--duration-normal` — a `<Card>` is
89
+ not an interactive control. */
90
+ --duration-control: 0.12s;
77
91
  --duration-fast: 0.2s;
78
92
  --duration-normal: 0.3s;
79
93
  --duration-slow: 0.45s;
@@ -141,12 +155,14 @@
141
155
  `linear()` stops; this is the single source of truth tying each
142
156
  (response, ζ) pair to its serialized curve.
143
157
 
144
- iOS-canonical (response, dampingFraction) per AL-X4 §3:
158
+ iOS-canonical (response, dampingFraction) per AL-X4 §3 (BC.W-SPRING-EASE
159
+ eased `snappy`+`bouncy` to fill their clocks + minted the `press` register):
145
160
  smooth: (0.50s, ζ=0.86) — gentle settle, sub-perceptual overshoot ~0.5%
146
- snappy: (0.35s, ζ=0.65) — quick crisp, overshoot ~+6.8%
147
- bouncy: (0.50s, ζ=0.45) — emphatic overshoot ~+20.5%
161
+ snappy: (0.42s, ζ=0.78) — quick crisp, eased to fill its clock, overshoot ~+2.0%
162
+ bouncy: (0.50s, ζ=0.55) — emphatic, overshoot ~+12.6% (the Apple 12-18% band)
148
163
  gentle: (0.70s, ζ=1.00) — patient critically-damped
149
164
  dock: (0.32s, ζ=0.70) — dock expand/collapse morph, overshoot ~+4.6%
165
+ press: (0.15s, ζ=0.86) — the iOS interactive tap-press, sub-100ms answer, ~+0.5%
150
166
 
151
167
  Note on `smooth`: at ζ=0.86 the analytic solver produces a peak
152
168
  of 1.00498 (+0.5%) at the 24% slot — mathematically present but
@@ -218,10 +234,11 @@
218
234
  for interactive transforms; those use `--spring-smooth`).
219
235
  ═══════════════════════════════════════════════ */
220
236
  --spring-smooth: linear(0, 0.09804 2.041%, 0.29288 4.082%, 0.49447 6.122%, 0.66436 8.163%, 0.79208 10.204%, 0.88050 12.245%, 0.93754 14.286%, 0.97182 16.327%, 0.99083 18.367%, 1.00027 20.408%, 1.00413 22.449%, 1.00502 24.490%, 1.00453 26.531%, 1.00355 28.571%, 1.00254 30.612%, 1.00169 32.653%, 1.00105 34.694%, 1.00060 36.735%, 1.00031 38.776%, 1.00014 40.816%, 1.00005 42.857%, 1.00000 44.898%, 1.00000 46.939%, 1.00000 48.980%, 1.00000 51.020%, 1.00000 53.061%, 1.00000 55.102%, 1.00000 57.143%, 1.00000 59.184%, 1.00000 61.224%, 1.00000 63.265%, 1.00000 65.306%, 1.00000 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
221
- --spring-snappy: linear(0, 0.10438 2.041%, 0.32622 4.082%, 0.56668 6.122%, 0.77153 8.163%, 0.91961 10.204%, 1.01073 12.245%, 1.05549 14.286%, 1.06804 16.327%, 1.06171 18.367%, 1.04686 20.408%, 1.03044 22.449%, 1.01629 24.490%, 1.00596 26.531%, 0.99954 28.571%, 0.99633 30.612%, 0.99537 32.653%, 0.99575 34.694%, 0.99674 36.735%, 0.99786 38.776%, 0.99884 40.816%, 0.99956 42.857%, 1.00001 44.898%, 1.00024 46.939%, 1.00000 48.980%, 1.00000 51.020%, 1.00000 53.061%, 1.00000 55.102%, 1.00000 57.143%, 1.00000 59.184%, 1.00000 61.224%, 1.00000 63.265%, 1.00000 65.306%, 1.00000 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
222
- --spring-bouncy: linear(0, 0.11105 2.041%, 0.36430 4.082%, 0.65496 6.122%, 0.90929 8.163%, 1.08828 10.204%, 1.18289 12.245%, 1.20482 14.286%, 1.17641 16.327%, 1.12214 18.367%, 1.06276 20.408%, 1.01239 22.449%, 0.97809 24.490%, 0.96099 26.531%, 0.95826 28.571%, 0.96514 30.612%, 0.97666 32.653%, 0.98873 34.694%, 0.99867 36.735%, 1.00520 38.776%, 1.00825 40.816%, 1.00847 42.857%, 1.00686 44.898%, 1.00443 46.939%, 1.00199 48.980%, 1.00004 51.020%, 0.99880 53.061%, 0.99827 55.102%, 0.99829 57.143%, 0.99866 59.184%, 0.99916 61.224%, 0.99966 63.265%, 1.00004 65.306%, 1.00027 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
237
+ --spring-snappy: linear(0, 0.10038 2.041%, 0.30488 4.082%, 0.51991 6.122%, 0.70158 8.163%, 0.83608 10.204%, 0.92554 12.245%, 0.97893 14.286%, 1.00665 16.327%, 1.01792 18.367%, 1.01981 20.408%, 1.01715 22.449%, 1.01292 24.490%, 1.00873 26.531%, 1.00530 28.571%, 1.00282 30.612%, 1.00120 32.653%, 1.00027 34.694%, 0.99980 36.735%, 0.99962 38.776%, 0.99961 40.816%, 0.99967 42.857%, 0.99976 44.898%, 0.99984 46.939%, 0.99991 48.980%, 0.99995 51.020%, 1.00000 53.061%, 1.00000 55.102%, 1.00000 57.143%, 1.00000 59.184%, 1.00000 61.224%, 1.00000 63.265%, 1.00000 65.306%, 1.00000 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
238
+ --spring-bouncy: linear(0, 0.10764 2.041%, 0.34440 4.082%, 0.60803 6.122%, 0.83510 8.163%, 0.99669 10.204%, 1.08926 12.245%, 1.12435 14.286%, 1.11986 16.327%, 1.09372 18.367%, 1.06042 20.408%, 1.02959 22.449%, 1.00623 24.490%, 0.99172 26.531%, 0.98510 28.571%, 0.98426 30.612%, 0.98688 32.653%, 0.99095 34.694%, 0.99505 36.735%, 0.99835 38.776%, 1.00055 40.816%, 1.00170 42.857%, 1.00202 44.898%, 1.00180 46.939%, 1.00132 48.980%, 1.00079 51.020%, 1.00033 53.061%, 1.00001 55.102%, 0.99982 57.143%, 1.00000 59.184%, 1.00000 61.224%, 1.00000 63.265%, 1.00000 65.306%, 1.00000 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
223
239
  --spring-gentle: linear(0, 0.09415 2.041%, 0.27374 4.082%, 0.45506 6.122%, 0.60779 8.163%, 0.72570 10.204%, 0.81213 12.245%, 0.87336 14.286%, 0.91570 16.327%, 0.94445 18.367%, 0.96371 20.408%, 0.97645 22.449%, 0.98481 24.490%, 0.99025 26.531%, 0.99377 28.571%, 0.99604 30.612%, 0.99749 32.653%, 0.99841 34.694%, 0.99900 36.735%, 0.99937 38.776%, 0.99961 40.816%, 0.99975 42.857%, 0.99985 44.898%, 1.00000 46.939%, 1.00000 48.980%, 1.00000 51.020%, 1.00000 53.061%, 1.00000 55.102%, 1.00000 57.143%, 1.00000 59.184%, 1.00000 61.224%, 1.00000 63.265%, 1.00000 65.306%, 1.00000 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
224
240
  --spring-dock: linear(0, 0.10282 2.041%, 0.31773 4.082%, 0.54783 6.122%, 0.74309 8.163%, 0.88550 10.204%, 0.97598 12.245%, 1.02452 14.286%, 1.04368 16.327%, 1.04501 18.367%, 1.03739 20.408%, 1.02681 22.449%, 1.01672 24.490%, 1.00873 26.531%, 1.00323 28.571%, 0.99996 30.612%, 0.99837 32.653%, 0.99789 34.694%, 0.99805 36.735%, 0.99848 38.776%, 0.99897 40.816%, 0.99940 42.857%, 0.99972 44.898%, 0.99993 46.939%, 1.00004 48.980%, 1.00000 51.020%, 1.00000 53.061%, 1.00000 55.102%, 1.00000 57.143%, 1.00000 59.184%, 1.00000 61.224%, 1.00000 63.265%, 1.00000 65.306%, 1.00000 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
241
+ --spring-press: linear(0, 0.09804 2.041%, 0.29288 4.082%, 0.49447 6.122%, 0.66436 8.163%, 0.79208 10.204%, 0.88050 12.245%, 0.93754 14.286%, 0.97182 16.327%, 0.99083 18.367%, 1.00027 20.408%, 1.00413 22.449%, 1.00502 24.490%, 1.00453 26.531%, 1.00355 28.571%, 1.00254 30.612%, 1.00169 32.653%, 1.00105 34.694%, 1.00060 36.735%, 1.00031 38.776%, 1.00014 40.816%, 1.00005 42.857%, 1.00000 44.898%, 1.00000 46.939%, 1.00000 48.980%, 1.00000 51.020%, 1.00000 53.061%, 1.00000 55.102%, 1.00000 57.143%, 1.00000 59.184%, 1.00000 61.224%, 1.00000 63.265%, 1.00000 65.306%, 1.00000 67.347%, 1.00000 69.388%, 1.00000 71.429%, 1.00000 73.469%, 1.00000 75.510%, 1.00000 77.551%, 1.00000 79.592%, 1.00000 81.633%, 1.00000 83.673%, 1.00000 85.714%, 1.00000 87.755%, 1.00000 89.796%, 1.00000 91.837%, 1.00000 93.878%, 1.00000 95.918%, 1.00000 97.959%, 1);
225
242
 
226
243
  /* ── PER-SPRING DURATION CLOCK (BA.W-GLASS-CAL Unit 3) ──
227
244
  Generated from `scripts/regen-spring-tokens.mjs` — DO NOT hand-edit.
@@ -241,9 +258,20 @@
241
258
  matching `--spring-<name>-duration`. */
242
259
  --spring-smooth-duration: 0.36s;
243
260
  --spring-snappy-duration: 0.34s;
244
- --spring-bouncy-duration: 0.69s;
261
+ --spring-bouncy-duration: 0.57s;
245
262
  --spring-gentle-duration: 0.44s;
246
263
  --spring-dock-duration: 0.28s;
264
+ --spring-press-duration: 0.11s;
265
+
266
+ /* ── DECK SLIDE-TRANSITION CURVE (BC.W-DECK) ──
267
+ The full-viewport keyboard-paged deck's slide transition rides the SAME
268
+ `--spring-smooth` register the deck's `DECK_SPRING` samples (the calm-settle
269
+ `.smooth` family; the (response, ζ) pair lives in deck/constants.ts) — an
270
+ ALIAS, NOT a new spring family (the donor's own fence + the W-GLASS-CAL spring
271
+ fence). `--spring-deck: var(--spring-smooth)` so a deck slide reads as a calm
272
+ settle, not a bounce; the JS half (`installDeckSpring`) consumes keyframes.js
273
+ `springTimingFunction(DECK_SPRING)` for the count-up easing. */
274
+ --spring-deck: var(--spring-smooth);
247
275
 
248
276
  /* Core cubic-bezier (exits, fallbacks, non-spring uses) */
249
277
  --motion-ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
@@ -264,6 +292,16 @@
264
292
  --ease-decelerate: var(--ease-out);
265
293
  --ease-accelerate: var(--ease-in);
266
294
 
295
+ /* BC.W-MOTION-PRESETS — the brand "convergence-reveal" / partial-sum settle.
296
+ The Fourier partial sum converges ONTO its target with a decaying Gibbs
297
+ ripple — a monotone critically-damped approach, NO sustained overshoot past
298
+ terminal. That curve IS `gentle` (ζ=1.0, overshoot 0), so this is the ALIAS
299
+ reuse: `--ease-convergence` resolves to `--spring-gentle` (no new
300
+ SPRING_PRESETS row, no second curve). The settle clock is the per-spring
301
+ `--spring-gentle-duration`. The N-term build-up is the `useStagger`
302
+ orchestration ON this curve (a documented recipe, not a new primitive). */
303
+ --ease-convergence: var(--spring-gentle);
304
+
267
305
  /* ═══════════════════════════════════════════════
268
306
  §2.A AMBIENT MOTION — Pulse aura tokens
269
307