@mkbabb/glass-ui 4.0.0 → 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 (609) hide show
  1. package/README.md +3 -1
  2. package/dist/CardAction-8whJrLWt.js +268 -0
  3. package/dist/{CommandShortcut-DdtWXxOK.js → CommandShortcut-D3yxgHNn.js} +25 -14
  4. package/dist/ConfiguratorRow-CaP7U3ZA.js +143 -0
  5. package/dist/ContextMenuContent-B3ZsheLV.js +90 -0
  6. package/dist/{ContextMenuSubContent-B0Vs6atR.js → ContextMenuSubContent-DDRID3qC.js} +28 -33
  7. package/dist/{DataTable-C464Zbqd.js → DataTable-Bc9kUtu_.js} +4 -4
  8. package/dist/{DialogContent-DDE6pQBU.js → DialogContent-6JtTB5x2.js} +11 -8
  9. package/dist/DialogFooter-9phqcRIS.js +80 -0
  10. package/dist/DialogScrollContent-TTuovQst.js +93 -0
  11. package/dist/{FadingScroll-DwNnvKMs.js → FadingScroll-DLRbH5Xr.js} +1 -1
  12. package/dist/HoverCardContent-Bel1gdLZ.js +88 -0
  13. package/dist/{HoverPopover-Dpzwvc4t.js → HoverPopover-BcIxvyqZ.js} +2 -2
  14. package/dist/{IconChip-BDw1j5mu.js → IconChip-DhbdGdFQ.js} +2 -1
  15. package/dist/{IconTooltip-DSjasZIt.js → IconTooltip-B0zimd2H.js} +1 -1
  16. package/dist/Input-Cg9DF62r.js +57 -0
  17. package/dist/{MetricBadge-BpC0R_Ec.js → MetricBadge-RHdBP72w.js} +1 -1
  18. package/dist/Notification-CphK7AAm.js +43 -0
  19. package/dist/NumberFieldContent-D8cXeyO4.js +140 -0
  20. package/dist/PagerDots-Cjx96la-.js +98 -0
  21. package/dist/{PopoverContent-BTorlp--.js → PopoverContent-DL7E6vJP.js} +4 -4
  22. package/dist/{Progress-hAT4gqGH.js → Progress-CnqB7gLm.js} +4 -4
  23. package/dist/{ScrollingText-CUVFTWk2.js → ScrollingText-CTZbA_cG.js} +2 -2
  24. package/dist/{SelectScrollDownButton-C1jb3b3K.js → SelectScrollDownButton-DAKCBEdW.js} +65 -61
  25. package/dist/{SelectSeparator-DK2y1Bun.js → SelectSeparator-C2UGOkXF.js} +1 -1
  26. package/dist/Separator-DQcwC2TR.js +44 -0
  27. package/dist/Switch-B8RscmRu.js +49 -0
  28. package/dist/Toaster-D9qIHjBI.js +274 -0
  29. package/dist/ToggleGroupItem-BLtr3TJq.js +170 -0
  30. package/dist/TooltipProvider-BJ_Y5EGX.js +109 -0
  31. package/dist/animated-digit.js +2 -2
  32. package/dist/api/index.d.ts +21 -33
  33. package/dist/api/types-extra.d.ts +37 -0
  34. package/dist/api.js +1 -1
  35. package/dist/aurora.js +1231 -260
  36. package/dist/badge.js +1 -1
  37. package/dist/border-progress.d.ts +1 -0
  38. package/dist/border-progress.js +98 -0
  39. package/dist/button-5dY1Dvhd.js +125 -0
  40. package/dist/button.js +1 -1
  41. package/dist/canvas.js +2 -3
  42. package/dist/card.js +2 -2
  43. package/dist/carousel.js +93 -110
  44. package/dist/collapsible.js +1 -1
  45. package/dist/color-Cs0-oxYL.js +116 -0
  46. package/dist/color.js +2 -2
  47. package/dist/command.js +1 -1
  48. package/dist/compile-nZ1xVYTp.js +19 -0
  49. package/dist/completion-seal.d.ts +1 -0
  50. package/dist/completion-seal.js +89 -0
  51. package/dist/components/custom/aurora/Aurora.vue.d.ts +10 -5
  52. package/dist/components/custom/aurora/composables/atoms-fields.d.ts +39 -0
  53. package/dist/components/custom/aurora/composables/auroraFallbackGround.d.ts +108 -0
  54. package/dist/components/custom/aurora/composables/color.d.ts +13 -0
  55. package/dist/components/custom/aurora/composables/frameLoop.d.ts +9 -0
  56. package/dist/components/custom/aurora/composables/runtime.d.ts +31 -0
  57. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +5 -1
  58. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +60 -0
  59. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +37 -0
  60. package/dist/components/custom/aurora/constants/budget.d.ts +21 -0
  61. package/dist/components/custom/aurora/constants/presets.d.ts +20 -2
  62. package/dist/components/custom/aurora/constants/renderMode.d.ts +77 -18
  63. package/dist/components/custom/aurora/constants/shaders/aurora-mediums.wgsl.d.ts +1 -0
  64. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -0
  65. package/dist/components/custom/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -0
  66. package/dist/components/custom/aurora/constants/shaders/procedural-color.wgsl.d.ts +4 -0
  67. package/dist/components/custom/aurora/index.d.ts +2 -1
  68. package/dist/components/custom/border-progress/BorderProgress.vue.d.ts +46 -0
  69. package/dist/components/custom/border-progress/composables/spectrum-walk.d.ts +25 -0
  70. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +18 -0
  71. package/dist/components/custom/border-progress/constants.d.ts +59 -0
  72. package/dist/components/custom/border-progress/index.d.ts +4 -0
  73. package/dist/components/custom/completion-seal/CompletionSeal.vue.d.ts +21 -0
  74. package/dist/components/custom/completion-seal/composables/useCompletionSeal.d.ts +37 -0
  75. package/dist/components/custom/completion-seal/constants.d.ts +46 -0
  76. package/dist/components/custom/completion-seal/index.d.ts +4 -0
  77. package/dist/components/custom/concentric/Concentric.vue.d.ts +39 -0
  78. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +18 -0
  79. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +22 -0
  80. package/dist/components/custom/concentric/composables/ringField.d.ts +85 -0
  81. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +14 -0
  82. package/dist/components/custom/concentric/composables/useConcentric.d.ts +35 -0
  83. package/dist/components/custom/concentric/constants.d.ts +67 -0
  84. package/dist/components/custom/concentric/index.d.ts +5 -0
  85. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +4 -0
  86. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -0
  87. package/dist/components/custom/confirm-dialog/ConfirmDialog.vue.d.ts +3 -3
  88. package/dist/components/custom/constellation/Constellation.vue.d.ts +5 -4
  89. package/dist/components/custom/constellation/composables/constellationGLSetup.d.ts +10 -0
  90. package/dist/components/custom/constellation/composables/constellationWGPUSetup.d.ts +19 -0
  91. package/dist/components/custom/constellation/composables/uniformBridgeWGPU.d.ts +66 -0
  92. package/dist/components/custom/constellation/composables/useConstellation.d.ts +3 -10
  93. package/dist/components/custom/constellation/constants.d.ts +33 -0
  94. package/dist/components/custom/constellation/constellationField.d.ts +31 -1
  95. package/dist/components/custom/constellation/constellationInteraction.d.ts +23 -14
  96. package/dist/components/custom/constellation/constellationRender.d.ts +25 -0
  97. package/dist/components/custom/constellation/constellationTypes.d.ts +38 -0
  98. package/dist/components/custom/constellation/constellationWell.d.ts +15 -0
  99. package/dist/components/custom/constellation/index.d.ts +5 -5
  100. package/dist/components/custom/constellation/shaders/constellation-lines.glsl.d.ts +2 -0
  101. package/dist/components/custom/constellation/shaders/constellation-lines.wgsl.d.ts +1 -0
  102. package/dist/components/custom/constellation/shaders/constellation-points.glsl.d.ts +2 -0
  103. package/dist/components/custom/constellation/shaders/constellation-points.wgsl.d.ts +1 -0
  104. package/dist/components/custom/deck/DeckPager.vue.d.ts +29 -0
  105. package/dist/components/custom/deck/composables/useDeck.d.ts +27 -0
  106. package/dist/components/custom/deck/composables/useDeckKeyboard.d.ts +25 -0
  107. package/dist/components/custom/deck/composables/useDeckSpring.d.ts +22 -0
  108. package/dist/components/custom/deck/constants.d.ts +14 -0
  109. package/dist/components/custom/deck/index.d.ts +8 -0
  110. package/dist/components/custom/dock/DockIconButton.vue.d.ts +25 -4
  111. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +10 -2
  112. package/dist/components/custom/dock/DockStack.vue.d.ts +65 -0
  113. package/dist/components/custom/dock/GlassDock.vue.d.ts +4 -2
  114. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +155 -0
  115. package/dist/components/custom/dock/composables/index.d.ts +2 -0
  116. package/dist/components/custom/dock/composables/useDockSearch.d.ts +85 -0
  117. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +11 -0
  118. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -0
  119. package/dist/components/custom/dock/constants.d.ts +18 -14
  120. package/dist/components/custom/dock/index.d.ts +5 -2
  121. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +42 -0
  122. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +83 -0
  123. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +39 -0
  124. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +35 -0
  125. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +31 -0
  126. package/dist/components/custom/dot-flow-field/constants.d.ts +69 -0
  127. package/dist/components/custom/dot-flow-field/index.d.ts +5 -0
  128. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -0
  129. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +4 -0
  130. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -0
  131. package/dist/components/custom/dot-matrix/DotMatrix.vue.d.ts +43 -0
  132. package/dist/components/custom/dot-matrix/composables/dotMatrixField.d.ts +89 -0
  133. package/dist/components/custom/dot-matrix/composables/uniformBridgeWGPU.d.ts +52 -0
  134. package/dist/components/custom/dot-matrix/composables/useDotMatrix.d.ts +34 -0
  135. package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +27 -0
  136. package/dist/components/custom/dot-matrix/constants.d.ts +58 -0
  137. package/dist/components/custom/dot-matrix/index.d.ts +5 -0
  138. package/dist/components/custom/dot-matrix/shaders/dot-matrix.glsl.d.ts +4 -0
  139. package/dist/components/custom/dot-matrix/shaders/dot-matrix.wgsl.d.ts +1 -0
  140. package/dist/components/custom/easing/EasingConfigurator.vue.d.ts +33 -0
  141. package/dist/components/custom/easing/EasingPicker.vue.d.ts +49 -0
  142. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +80 -0
  143. package/dist/components/custom/easing/constants.d.ts +28 -0
  144. package/dist/components/custom/easing/index.d.ts +3 -0
  145. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +11 -0
  146. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +43 -40
  147. package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +15 -0
  148. package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +20 -0
  149. package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +41 -0
  150. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +42 -0
  151. package/dist/components/custom/fourier-field/constants.d.ts +64 -0
  152. package/dist/components/custom/fourier-field/index.d.ts +23 -18
  153. package/dist/components/custom/fourier-field/shaders/fourier-field.compute.wgsl.d.ts +1 -0
  154. package/dist/components/custom/fourier-field/shaders/fourier-field.glsl.d.ts +4 -0
  155. package/dist/components/custom/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -0
  156. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +1 -1
  157. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +13 -3
  158. package/dist/components/custom/goo-blob/composables/uniformBridgeWGPU.d.ts +24 -0
  159. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +18 -11
  160. package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +23 -0
  161. package/dist/components/custom/goo-blob/constants.d.ts +1 -1
  162. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  163. package/dist/components/custom/goo-blob/shaders/metaball-noise.wgsl.d.ts +1 -0
  164. package/dist/components/custom/goo-blob/shaders/metaball-palette.wgsl.d.ts +1 -0
  165. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -1
  166. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -0
  167. package/dist/components/custom/goo-blob/types.d.ts +36 -0
  168. package/dist/components/custom/goo-dot-matrix/GooDotMatrix.vue.d.ts +49 -0
  169. package/dist/components/custom/goo-dot-matrix/composables/gooDotLattice.d.ts +24 -0
  170. package/dist/components/custom/goo-dot-matrix/composables/gooDotSetup.d.ts +50 -0
  171. package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +35 -0
  172. package/dist/components/custom/goo-dot-matrix/composables/useGooDotMatrix.d.ts +31 -0
  173. package/dist/components/custom/goo-dot-matrix/constants.d.ts +76 -0
  174. package/dist/components/custom/goo-dot-matrix/index.d.ts +5 -0
  175. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.frag.d.ts +11 -0
  176. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +3 -0
  177. package/dist/components/custom/handmark/HandMark.vue.d.ts +1 -1
  178. package/dist/components/custom/icon-chip/types.d.ts +11 -1
  179. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +3 -1
  180. package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +21 -2
  181. package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +15 -0
  182. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
  183. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +9 -0
  184. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  185. package/dist/components/custom/pager-dots/pagerWindow.d.ts +9 -0
  186. package/dist/components/custom/paper-grid/PaperGrid.vue.d.ts +42 -0
  187. package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +90 -0
  188. package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +16 -0
  189. package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +19 -0
  190. package/dist/components/custom/paper-grid/composables/uniformBridgeWGPU.d.ts +16 -0
  191. package/dist/components/custom/paper-grid/composables/usePaperGrid.d.ts +31 -0
  192. package/dist/components/custom/paper-grid/constants.d.ts +57 -0
  193. package/dist/components/custom/paper-grid/index.d.ts +5 -0
  194. package/dist/components/custom/paper-grid/shaders/paper-grid.glsl.d.ts +4 -0
  195. package/dist/components/custom/paper-grid/shaders/paper-grid.wgsl.d.ts +1 -0
  196. package/dist/components/custom/search/FuzzySearch.vue.d.ts +8 -2
  197. package/dist/components/custom/search/SearchBar.vue.d.ts +8 -0
  198. package/dist/components/custom/search/index.d.ts +2 -0
  199. package/dist/components/custom/search/searchVariants.d.ts +19 -0
  200. package/dist/components/custom/selectable-chip/SelectableChip.vue.d.ts +50 -0
  201. package/dist/components/custom/selectable-chip/index.d.ts +2 -0
  202. package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +23 -0
  203. package/dist/components/custom/spa-view/SpaView.vue.d.ts +50 -0
  204. package/dist/components/custom/spa-view/index.d.ts +2 -0
  205. package/dist/components/custom/split-chars/SplitChars.vue.d.ts +39 -0
  206. package/dist/components/custom/split-chars/index.d.ts +1 -0
  207. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +12 -0
  208. package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +42 -0
  209. package/dist/components/custom/tabs/constants.d.ts +20 -2
  210. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +30 -17
  211. package/dist/components/custom/watercolor-dot/useWatercolorBlob.d.ts +10 -5
  212. package/dist/components/ui/_shared/index.d.ts +2 -0
  213. package/dist/components/ui/_shared/menuItemVariants.d.ts +1 -1
  214. package/dist/components/ui/_shared/useControlSize.d.ts +46 -0
  215. package/dist/components/ui/badge/index.d.ts +1 -1
  216. package/dist/components/ui/button/Button.vue.d.ts +5 -2
  217. package/dist/components/ui/button/index.d.ts +2 -2
  218. package/dist/components/ui/card/Card.vue.d.ts +79 -4
  219. package/dist/components/ui/card/CardHeader.vue.d.ts +42 -16
  220. package/dist/components/ui/card/ScrollCard.vue.d.ts +33 -0
  221. package/dist/components/ui/card/ScrollCardHeader.vue.d.ts +17 -0
  222. package/dist/components/ui/card/index.d.ts +3 -1
  223. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
  224. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
  225. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +2 -2
  226. package/dist/components/ui/command/Command.vue.d.ts +1 -1
  227. package/dist/components/ui/command/CommandDialog.vue.d.ts +9 -3
  228. package/dist/components/ui/command/CommandList.vue.d.ts +3 -0
  229. package/dist/components/ui/context-menu/ContextMenuContent.vue.d.ts +5 -1
  230. package/dist/components/ui/drawer/Drawer.vue.d.ts +46 -33
  231. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +7 -8
  232. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +2 -2
  233. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +1 -1
  234. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +2 -2
  235. package/dist/components/ui/drawer/composables/drawerSnapContext.d.ts +26 -0
  236. package/dist/components/ui/drawer/composables/useDrawerSnap.d.ts +17 -0
  237. package/dist/components/ui/drawer/constants.d.ts +45 -0
  238. package/dist/components/ui/drawer/index.d.ts +23 -15
  239. package/dist/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +4 -0
  240. package/dist/components/ui/focus-scope/FocusScope.vue.d.ts +20 -0
  241. package/dist/components/ui/focus-scope/index.d.ts +2 -0
  242. package/dist/components/ui/hover-card/HoverCardContent.vue.d.ts +3 -0
  243. package/dist/components/ui/index.d.ts +1 -0
  244. package/dist/components/ui/input/Input.vue.d.ts +3 -0
  245. package/dist/components/ui/number-field/NumberFieldInput.vue.d.ts +6 -1
  246. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +3 -2
  247. package/dist/components/ui/select/SelectContent.vue.d.ts +4 -1
  248. package/dist/components/ui/sheet/index.d.ts +1 -1
  249. package/dist/components/ui/switch/Switch.vue.d.ts +2 -0
  250. package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
  251. package/dist/components/ui/textarea/Textarea.vue.d.ts +3 -0
  252. package/dist/components/ui/toast/Toast.vue.d.ts +5 -2
  253. package/dist/components/ui/toast/use-toast.d.ts +14 -0
  254. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  255. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +3 -0
  256. package/dist/composables/color/index.d.ts +2 -0
  257. package/dist/composables/color/useAccentTone.d.ts +34 -0
  258. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +13 -6
  259. package/dist/composables/glass/index.d.ts +5 -2
  260. package/dist/composables/glass/useSpecularPointer.d.ts +33 -0
  261. package/dist/composables/glass/useSpecularTracking.d.ts +20 -0
  262. package/dist/composables/glass/useVizChoreography.d.ts +123 -0
  263. package/dist/composables/glass/vSpecular.d.ts +2 -0
  264. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +10 -0
  265. package/dist/composables/glass/webgl/shaders/flow.glsl.d.ts +1 -0
  266. package/dist/composables/glass/webgl/shaders/flow.wgsl.d.ts +1 -0
  267. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -0
  268. package/dist/composables/glass/webgpu/index.d.ts +2 -0
  269. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +75 -0
  270. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +85 -0
  271. package/dist/composables/glass/webgpu/webgpuDevice.d.ts +42 -0
  272. package/dist/composables/motion/core/index.d.ts +4 -0
  273. package/dist/composables/motion/index.d.ts +4 -0
  274. package/dist/composables/motion/scrollReader.d.ts +25 -0
  275. package/dist/composables/motion/springPresets.d.ts +20 -1
  276. package/dist/composables/motion/useCharStagger.d.ts +44 -0
  277. package/dist/composables/motion/useDockCtaReceive.d.ts +84 -0
  278. package/dist/composables/motion/useDragMorph.d.ts +77 -0
  279. package/dist/composables/motion/useLiquidFlex.d.ts +11 -0
  280. package/dist/composables/motion/useLiquidPress.d.ts +71 -0
  281. package/dist/composables/motion/useLiquidReveal.d.ts +51 -0
  282. package/dist/composables/motion/useNumericTransition.d.ts +3 -3
  283. package/dist/composables/motion/usePointerVelocityField.d.ts +98 -0
  284. package/dist/composables/motion/useScrollChrome.d.ts +58 -0
  285. package/dist/composables/motion/useScrollTrigger.d.ts +67 -0
  286. package/dist/composables/motion/useSpringPress.d.ts +5 -5
  287. package/dist/composables/motion/useStaggerReveal.d.ts +24 -0
  288. package/dist/composables/sidebar/index.d.ts +4 -1
  289. package/dist/composables/sidebar/types.d.ts +68 -3
  290. package/dist/composables/sidebar/useClickDelegate.d.ts +4 -0
  291. package/dist/composables/sidebar/useLazyLoader.d.ts +5 -0
  292. package/dist/composables/sidebar/useScrollTo.d.ts +5 -0
  293. package/dist/composables/virtual/index.d.ts +4 -0
  294. package/dist/composables/virtual/useVirtualSectionWindow.d.ts +72 -0
  295. package/dist/composables/virtual/useWindowedStore.d.ts +43 -0
  296. package/dist/composables/virtual/virtualSectionLayout.d.ts +103 -0
  297. package/dist/concentric.d.ts +1 -0
  298. package/dist/concentric.js +836 -0
  299. package/dist/configurator.js +3 -2
  300. package/dist/confirm-dialog.js +62 -49
  301. package/dist/constellation.js +635 -235
  302. package/dist/context-menu.js +3 -3
  303. package/dist/controls.js +2 -2
  304. package/dist/createCanvasLifecycle-Gh45Ce-p.js +93 -0
  305. package/dist/dark.js +1 -1
  306. package/dist/data-table.js +1 -1
  307. package/dist/deck.d.ts +1 -0
  308. package/dist/deck.js +105 -0
  309. package/dist/dialog.js +4 -3
  310. package/dist/dock.js +819 -568
  311. package/dist/{dockContext-Bu1Avy-a.js → dockContext-BNfyPLe9.js} +1 -1
  312. package/dist/dom.js +5 -5
  313. package/dist/dot-flow-field.d.ts +1 -0
  314. package/dist/dot-flow-field.js +894 -0
  315. package/dist/dot-matrix.d.ts +1 -0
  316. package/dist/dot-matrix.js +630 -0
  317. package/dist/dotMatrixField-D_x9_1qq.js +48 -0
  318. package/dist/drawer.d.ts +1 -0
  319. package/dist/drawer.js +380 -0
  320. package/dist/{dropdown-menu-BJ7E9js_.js → dropdown-menu-aJmV5SqE.js} +82 -79
  321. package/dist/dropdown-menu.js +1 -1
  322. package/dist/easing.d.ts +1 -0
  323. package/dist/easing.js +475 -0
  324. package/dist/expandable-container.js +46 -21
  325. package/dist/fading-scroll.js +1 -1
  326. package/dist/flow.glsl-B2P7e0MT.js +4 -0
  327. package/dist/focus-scope.d.ts +1 -0
  328. package/dist/focus-scope.js +23 -0
  329. package/dist/forms.js +65 -63
  330. package/dist/fourier-field.js +831 -172
  331. package/dist/fourier-math.js +1 -1
  332. package/dist/glass-panel.js +2 -2
  333. package/dist/glass-ui.css +1 -1
  334. package/dist/glass-ui.js +187 -338
  335. package/dist/goo-blob.js +241 -692
  336. package/dist/goo-dot-matrix.d.ts +1 -0
  337. package/dist/goo-dot-matrix.js +591 -0
  338. package/dist/handmark.js +2 -2
  339. package/dist/header-ribbon.js +1 -1
  340. package/dist/hover-card.js +1 -1
  341. package/dist/hover-popover.js +1 -1
  342. package/dist/icon-chip.js +1 -1
  343. package/dist/icon-tooltip.js +1 -1
  344. package/dist/index.d.ts +3 -1
  345. package/dist/instrument-chassis.js +1 -1
  346. package/dist/keyboard.js +1 -1
  347. package/dist/label.js +1 -1
  348. package/dist/labeled-field.js +70 -60
  349. package/dist/metric-badge.js +1 -1
  350. package/dist/metric-cell.js +1 -1
  351. package/dist/metric-stack.js +14 -9
  352. package/dist/motion-core.js +58 -36
  353. package/dist/motion-curves.js +11 -1
  354. package/dist/motion.js +90 -53
  355. package/dist/notification.js +1 -1
  356. package/dist/number-field.js +1 -1
  357. package/dist/pager-dots.js +2 -91
  358. package/dist/paper-backdrop.js +1 -1
  359. package/dist/paper-grid.d.ts +1 -0
  360. package/dist/paper-grid.js +788 -0
  361. package/dist/popover.js +1 -1
  362. package/dist/{presets-BW2b-fr1.js → presets-CvOUqtdY.js} +3 -3
  363. package/dist/{compile-EXXzEr1q.js → procedural-color.wgsl-m7Zgv35j.js} +2 -156
  364. package/dist/progress.js +1 -1
  365. package/dist/pulse.js +2 -2
  366. package/dist/reactive.js +1 -1
  367. package/dist/resolveCanvasColor-yPyIpJt9.js +93 -0
  368. package/dist/scrollReader-DI1NWxUw.js +42 -0
  369. package/dist/scrolling-text.js +1 -1
  370. package/dist/search.js +162 -308
  371. package/dist/select.js +3 -3
  372. package/dist/selectable-chip.d.ts +1 -0
  373. package/dist/selectable-chip.js +65 -0
  374. package/dist/separator.js +1 -1
  375. package/dist/{sheet-CquRYOAw.js → sheet-B2flBfLH.js} +5 -5
  376. package/dist/sheet.js +1 -1
  377. package/dist/sidebar.js +216 -114
  378. package/dist/{slider-DQ95MET2.js → slider-2A0rPn79.js} +3 -3
  379. package/dist/slider.js +1 -1
  380. package/dist/sortable-list.js +2 -2
  381. package/dist/spa-view.d.ts +1 -0
  382. package/dist/spa-view.js +46 -0
  383. package/dist/spectrum-walk-BVzA7Biz.js +33 -0
  384. package/dist/{springPresets-WXaLbu8u.js → springPresets-Ce7OYCm9.js} +12 -6
  385. package/dist/styles/animations.css +46 -12
  386. package/dist/styles/border-progress.css +109 -0
  387. package/dist/styles/cards.css +145 -0
  388. package/dist/styles/completion-seal.css +131 -0
  389. package/dist/styles/components.css +2 -3
  390. package/dist/styles/configurator.css +55 -0
  391. package/dist/styles/critical-partition.mjs +162 -0
  392. package/dist/styles/critical.css +12 -0
  393. package/dist/styles/deferred.css +33 -0
  394. package/dist/styles/dock/cta-seat.css +87 -0
  395. package/dist/styles/dock/density.css +198 -0
  396. package/dist/styles/dock/layers.css +101 -29
  397. package/dist/styles/dock/morph-bridge.css +54 -18
  398. package/dist/styles/dock/morph.css +132 -7
  399. package/dist/styles/dock/overflow.css +28 -2
  400. package/dist/styles/dock/search.css +68 -0
  401. package/dist/styles/dock/shape.css +124 -0
  402. package/dist/styles/dock/shell.css +77 -21
  403. package/dist/styles/dock/stack-rail.css +264 -0
  404. package/dist/styles/dock-controls/dark-mode-toggle.css +17 -4
  405. package/dist/styles/dock-controls/icon-button.css +14 -0
  406. package/dist/styles/dock.css +43 -1
  407. package/dist/styles/drawer.css +81 -35
  408. package/dist/styles/glass/accent-tone.css +66 -0
  409. package/dist/styles/glass/control-surfaces.css +167 -0
  410. package/dist/styles/glass/deep.css +44 -0
  411. package/dist/styles/glass/ladder.css +147 -41
  412. package/dist/styles/glass/material.css +78 -15
  413. package/dist/styles/glass/reveal.css +136 -0
  414. package/dist/styles/glass/rim.css +110 -0
  415. package/dist/styles/glass/surfaces.css +148 -129
  416. package/dist/styles/glass-refract.css +96 -44
  417. package/dist/styles/glass-specular-track.css +7 -0
  418. package/dist/styles/glass.css +13 -0
  419. package/dist/styles/hover-popover.css +7 -6
  420. package/dist/styles/icon-chip.css +77 -15
  421. package/dist/styles/index.css +36 -9
  422. package/dist/styles/instrument-chassis.css +66 -3
  423. package/dist/styles/scroll-choreography.css +300 -0
  424. package/dist/styles/scroll-chrome.css +123 -0
  425. package/dist/styles/scroll-driven.css +38 -0
  426. package/dist/styles/segmented-tabs.css +81 -14
  427. package/dist/styles/theme/bridges.css +33 -0
  428. package/dist/styles/theme/literals.css +11 -2
  429. package/dist/styles/theme/radius.css +24 -2
  430. package/dist/styles/tokens/color-radius.css +13 -3
  431. package/dist/styles/tokens/dark-arm.css +137 -32
  432. package/dist/styles/tokens/glass-deep.css +100 -0
  433. package/dist/styles/tokens/glass-fx.css +376 -0
  434. package/dist/styles/tokens/glass.css +131 -351
  435. package/dist/styles/tokens/light-dark.css +16 -3
  436. package/dist/styles/tokens/offsets.css +143 -0
  437. package/dist/styles/tokens/on-glass-fg.css +39 -0
  438. package/dist/styles/tokens/property-regs.css +260 -0
  439. package/dist/styles/tokens/scale-paper.css +168 -96
  440. package/dist/styles/tokens/scheme-motion.css +114 -38
  441. package/dist/styles/tokens/scroll-tokens.css +123 -0
  442. package/dist/styles/tokens/sizing-config.css +110 -0
  443. package/{src/styles/tokens/offsets-sizing.css → dist/styles/tokens/sizing.css} +92 -204
  444. package/dist/styles/tokens.css +14 -3
  445. package/dist/styles/typography/semantic.css +26 -13
  446. package/dist/styles/typography/utilities.css +22 -7
  447. package/dist/styles/utilities/a11y-overrides.css +20 -5
  448. package/dist/styles/utilities/animate.css +27 -24
  449. package/dist/styles/utilities/base-misc.css +307 -0
  450. package/dist/styles/utilities/base.css +47 -261
  451. package/dist/styles/utilities/btn.css +17 -4
  452. package/dist/styles/utilities/components.css +31 -6
  453. package/dist/styles/utilities/metal.css +215 -0
  454. package/dist/styles/utilities.css +14 -7
  455. package/dist/switch.js +1 -1
  456. package/dist/tabs.js +220 -107
  457. package/dist/timeline.js +2 -2
  458. package/dist/toast.js +1 -1
  459. package/dist/toggle-chip.js +10 -10
  460. package/dist/toggle-group.js +1 -1
  461. package/dist/tooltip.js +1 -1
  462. package/dist/typewriter.js +2 -2
  463. package/dist/uniformBridgeWGPU-CtAKl45L.js +1204 -0
  464. package/dist/{useAnimatedNumber-C_3wZLx4.js → useAnimatedNumber-CLrxicG9.js} +1 -1
  465. package/dist/useConfiguratorState-4xblKfwd.js +162 -0
  466. package/dist/useControlSize-SH1UmJCi.js +9 -0
  467. package/dist/useDockCtaReceive-DfFkmgL1.js +82 -0
  468. package/dist/useDragMorph-BUgAC-zK.js +102 -0
  469. package/dist/useFuzzySearch-DIhcYtcw.js +177 -0
  470. package/dist/useGpuSubstrate-4pTcp6mX.js +294 -0
  471. package/dist/useLiquidPress-BooG97RY.js +39 -0
  472. package/dist/usePointerVelocityField-QLsy3_kv.js +91 -0
  473. package/dist/useScrollChrome-D66AVP7C.js +258 -0
  474. package/dist/useSpring-C0jyvEJB.js +40 -0
  475. package/dist/useSpringMount-BWDnKIwh.js +71 -0
  476. package/dist/useSpringPress-B1-Czp-V.js +36 -0
  477. package/dist/{useTouchGate-28Tk2-t2.js → useTouchGate-CBZTD4SD.js} +1 -1
  478. package/dist/useViewTransition-CUI1nAgn.js +95 -0
  479. package/dist/vSpecular-EX7loENl.js +68 -0
  480. package/dist/vendor-B2qOlYY3.js +239 -0
  481. package/dist/virtual.d.ts +1 -0
  482. package/dist/virtual.js +225 -0
  483. package/dist/watercolor-dot.js +117 -74
  484. package/package.json +252 -28
  485. package/src/styles/animations.css +46 -12
  486. package/src/styles/border-progress.css +109 -0
  487. package/src/styles/cards.css +145 -0
  488. package/src/styles/completion-seal.css +131 -0
  489. package/src/styles/configurator.css +55 -0
  490. package/src/styles/critical-partition.mjs +162 -0
  491. package/src/styles/dock/cta-seat.css +87 -0
  492. package/src/styles/dock/density.css +198 -0
  493. package/src/styles/dock/layers.css +101 -29
  494. package/src/styles/dock/morph-bridge.css +54 -18
  495. package/src/styles/dock/morph.css +132 -7
  496. package/src/styles/dock/overflow.css +28 -2
  497. package/src/styles/dock/search.css +68 -0
  498. package/src/styles/dock/shape.css +124 -0
  499. package/src/styles/dock/shell.css +77 -21
  500. package/src/styles/dock/stack-rail.css +264 -0
  501. package/src/styles/dock-controls/dark-mode-toggle.css +17 -4
  502. package/src/styles/dock-controls/icon-button.css +14 -0
  503. package/src/styles/dock.css +43 -1
  504. package/src/styles/drawer.css +81 -35
  505. package/src/styles/glass/accent-tone.css +66 -0
  506. package/src/styles/glass/control-surfaces.css +167 -0
  507. package/src/styles/glass/deep.css +44 -0
  508. package/src/styles/glass/ladder.css +147 -41
  509. package/src/styles/glass/material.css +78 -15
  510. package/src/styles/glass/reveal.css +136 -0
  511. package/src/styles/glass/rim.css +110 -0
  512. package/src/styles/glass/surfaces.css +148 -129
  513. package/src/styles/glass-refract.css +96 -44
  514. package/src/styles/glass-specular-track.css +7 -0
  515. package/src/styles/glass.css +13 -0
  516. package/src/styles/hover-popover.css +7 -6
  517. package/src/styles/icon-chip.css +77 -15
  518. package/src/styles/index.css +27 -0
  519. package/src/styles/instrument-chassis.css +66 -3
  520. package/src/styles/scroll-choreography.css +300 -0
  521. package/src/styles/scroll-chrome.css +123 -0
  522. package/src/styles/scroll-driven.css +38 -0
  523. package/src/styles/segmented-tabs.css +81 -14
  524. package/src/styles/theme/bridges.css +33 -0
  525. package/src/styles/theme/literals.css +11 -2
  526. package/src/styles/theme/radius.css +24 -2
  527. package/src/styles/tokens/color-radius.css +13 -3
  528. package/src/styles/tokens/dark-arm.css +137 -32
  529. package/src/styles/tokens/glass-deep.css +100 -0
  530. package/src/styles/tokens/glass-fx.css +376 -0
  531. package/src/styles/tokens/glass.css +131 -351
  532. package/src/styles/tokens/light-dark.css +16 -3
  533. package/src/styles/tokens/offsets.css +143 -0
  534. package/src/styles/tokens/on-glass-fg.css +39 -0
  535. package/src/styles/tokens/property-regs.css +260 -0
  536. package/src/styles/tokens/scale-paper.css +168 -96
  537. package/src/styles/tokens/scheme-motion.css +114 -38
  538. package/src/styles/tokens/scroll-tokens.css +123 -0
  539. package/src/styles/tokens/sizing-config.css +110 -0
  540. package/{dist/styles/tokens/offsets-sizing.css → src/styles/tokens/sizing.css} +92 -204
  541. package/src/styles/tokens.css +14 -3
  542. package/src/styles/typography/semantic.css +26 -13
  543. package/src/styles/typography/utilities.css +22 -7
  544. package/src/styles/utilities/a11y-overrides.css +20 -5
  545. package/src/styles/utilities/animate.css +27 -24
  546. package/src/styles/utilities/base-misc.css +307 -0
  547. package/src/styles/utilities/base.css +47 -261
  548. package/src/styles/utilities/btn.css +17 -4
  549. package/src/styles/utilities/components.css +31 -6
  550. package/src/styles/utilities/metal.css +215 -0
  551. package/src/styles/utilities.css +14 -7
  552. package/dist/CardAction-XH4YBVEK.js +0 -158
  553. package/dist/ContextMenuContent-ON3x7cuk.js +0 -85
  554. package/dist/DialogFooter-8eZbdmPc.js +0 -165
  555. package/dist/HoverCardContent-DkMaQzH5.js +0 -83
  556. package/dist/Input-DVG_J0ne.js +0 -55
  557. package/dist/Notification-DKjKsQq8.js +0 -100
  558. package/dist/NumberFieldContent-1VtwDSgf.js +0 -145
  559. package/dist/Separator-BArl4OaB.js +0 -37
  560. package/dist/Switch-Dr--uLGH.js +0 -47
  561. package/dist/Toaster-Bm_HQSpc.js +0 -263
  562. package/dist/ToggleGroupItem-Dzk9hWsF.js +0 -157
  563. package/dist/TooltipProvider-B3MkB_8P.js +0 -104
  564. package/dist/button-BNDWhAZb.js +0 -81
  565. package/dist/check-njhk-vfu.js +0 -7
  566. package/dist/chevron-down-DKkxb4VV.js +0 -7
  567. package/dist/chevron-right-CPXbqQQz.js +0 -7
  568. package/dist/chevron-up-n_24SqI-.js +0 -7
  569. package/dist/color-DweYl7pE.js +0 -86
  570. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +0 -35
  571. package/dist/components/custom/constellation/constellationDraw.d.ts +0 -30
  572. package/dist/components/custom/dock/DockRail.vue.d.ts +0 -89
  573. package/dist/createLucideIcon-DydS2qgk.js +0 -43
  574. package/dist/minimize-2-BV31Ob_h.js +0 -38
  575. package/dist/resolveCanvasColor-BBiYfp8g.js +0 -11
  576. package/dist/search-BSGrf2Sk.js +0 -12
  577. package/dist/styles/dock/rail-extend.css +0 -397
  578. package/dist/useCanvas2D-ClrQuZtp.js +0 -96
  579. package/dist/useConfiguratorState-kiIlun8I.js +0 -303
  580. package/dist/useRAFLoop-CdwJ7284.js +0 -109
  581. package/dist/useSpecularTracking-Bo5su68i.js +0 -32
  582. package/dist/useSpringMount-CvopqiFr.js +0 -108
  583. package/dist/useViewTransition-COsPjQVZ.js +0 -47
  584. package/dist/x-BUwTKe50.js +0 -10
  585. package/src/styles/dock/rail-extend.css +0 -397
  586. /package/dist/{CollapsibleContent-C_s6fG7r.js → CollapsibleContent-68dEXIAl.js} +0 -0
  587. /package/dist/{InstrumentChassis-UUJX0-mW.js → InstrumentChassis-CxsHSyMj.js} +0 -0
  588. /package/dist/{Label-Ck9SWEKM.js → Label-C2ejNWeC.js} +0 -0
  589. /package/dist/{ModalOverlay-CkPRRgl_.js → ModalOverlay-D1VrWyoi.js} +0 -0
  590. /package/dist/{PaperBackdrop-nBKe0vkB.js → PaperBackdrop-CqwjnfLv.js} +0 -0
  591. /package/dist/{SelectGroup-Dcczq44n.js → SelectGroup-BFiod7X2.js} +0 -0
  592. /package/dist/{_plugin-vue_export-helper-CBt_VvXa.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
  593. /package/dist/{badge-UILT_3pZ.js → badge-D9XWW4GT.js} +0 -0
  594. /package/dist/{constants-BPOqYJAm.js → constants--C2DkLW8.js} +0 -0
  595. /package/dist/{createContext-B2RaZ-b8.js → createContext-CpBNTRMI.js} +0 -0
  596. /package/dist/{math-DeuJwLFx.js → math-Eb0w3LqU.js} +0 -0
  597. /package/dist/{menuItemVariants-DWRQXBxJ.js → menuItemVariants-D8VNHq22.js} +0 -0
  598. /package/dist/{prng-Cg22zv8g.js → prng-B-d9eYX8.js} +0 -0
  599. /package/dist/{useGlobalDark-C28t0VWJ.js → useGlobalDark-CmjB9E32.js} +0 -0
  600. /package/dist/{useIntersectionPause-Bj4sPkMh.js → useIntersectionPause-Dbozzjgm.js} +0 -0
  601. /package/dist/{useKeyboardShortcuts-BXWXOZ-9.js → useKeyboardShortcuts-BPRp33Im.js} +0 -0
  602. /package/dist/{useLiquidFlex-C12hXwOZ.js → useLiquidFlex-UmA6LMZu.js} +0 -0
  603. /package/dist/{useResizeObserver-V6nq5gJb.js → useResizeObserver-Bpoi7tRE.js} +0 -0
  604. /package/dist/{useResolveTokenColor-NUG2zYAW.js → useResolveTokenColor-vAylyR0x.js} +0 -0
  605. /package/dist/{useScrollProgress-D7bYU2RK.js → useScrollProgress-c3yxmH6a.js} +0 -0
  606. /package/dist/{useSurfaceAxis-CMnF2zHb.js → useSurfaceAxis-g0NloYEF.js} +0 -0
  607. /package/dist/{useTimer-B_PAasDL.js → useTimer-BHJOKr35.js} +0 -0
  608. /package/dist/{useUserInvalidAria-CDfJuakL.js → useUserInvalidAria-y5namzeE.js} +0 -0
  609. /package/dist/{useViewportReady-CvBcCYDf.js → useViewportReady-anbac3m6.js} +0 -0
@@ -0,0 +1,33 @@
1
+ import { o as e, t } from "./color-Cs0-oxYL.js";
2
+ import { OKLCHColor as n, sampleColorRamp as r } from "@mkbabb/value.js";
3
+ //#region src/components/custom/border-progress/composables/spectrum-walk.ts
4
+ var i = (e) => new n(e.L, e.C, e.h / 360), a = (e) => ({
5
+ L: Number(e.l),
6
+ C: Number(e.c),
7
+ h: (Number(e.h) * 360 % 360 + 360) % 360
8
+ });
9
+ function o(n, o) {
10
+ let s = n.map((e) => t(e)), c = s.length;
11
+ if (o < 2) return [e(s[0] ?? {
12
+ L: .7,
13
+ C: 0,
14
+ h: 0
15
+ })];
16
+ if (c === 0) return Array.from({ length: o }, () => e({
17
+ L: .7,
18
+ C: 0,
19
+ h: 0
20
+ }));
21
+ if (c === 1) return Array.from({ length: o }, () => e(s[0]));
22
+ let l = (t, n, o) => r(i(t), i(n), o, {
23
+ space: "oklch",
24
+ hueMethod: "shorter"
25
+ }).map((t) => e(a(t))), u = c - 1, d = [];
26
+ for (let e = 0; e < u; e++) {
27
+ let t = Math.round(e * (o - 1) / u), n = Math.round((e + 1) * (o - 1) / u), r = l(s[e], s[e + 1], n - t + 1);
28
+ d.push(...e > 0 ? r.slice(1) : r);
29
+ }
30
+ return d;
31
+ }
32
+ //#endregion
33
+ export { o as walkConcreteSpectrum };
@@ -8,27 +8,33 @@ var e = [
8
8
  },
9
9
  {
10
10
  name: "snappy",
11
- response: .35,
12
- dampingFraction: .65,
13
- comment: "CONTROL register — crisp position morphs (tab underline, progress fill, marker pop), overshoot ~+6.8%"
11
+ response: .42,
12
+ dampingFraction: .78,
13
+ comment: "CONTROL register — crisp position morphs (tab underline, progress fill, marker pop); eased to fill its clock (90%-travel ~0.57 of clock), overshoot ~+2.0%"
14
14
  },
15
15
  {
16
16
  name: "bouncy",
17
17
  response: .5,
18
- dampingFraction: .45,
19
- comment: "PLAYFUL register — emphatic one-shots only (bouncy toggle, dialog/success entrance, VT default), overshoot ~+20.5%"
18
+ dampingFraction: .55,
19
+ comment: "PLAYFUL register — emphatic one-shots only (bouncy toggle, dialog/success entrance, VT default), overshoot ~+12.6% (the Apple 12-18% band)"
20
20
  },
21
21
  {
22
22
  name: "gentle",
23
23
  response: .7,
24
24
  dampingFraction: 1,
25
- comment: "GENTLE register — patient critically-damped settle, reached via the --ease-spring-gentle @theme alias"
25
+ comment: "GENTLE register — patient critically-damped settle, reached via the --ease-spring-gentle @theme alias. BC.W-MOTION-PRESETS reuses this row as the brand convergence-reveal (--ease-convergence): the partial-sum settle is critically-damped with NO overshoot (ζ=1.0, overshoot 0) — measured-not-distinct, so the ALIAS, not a new row"
26
26
  },
27
27
  {
28
28
  name: "dock",
29
29
  response: .32,
30
30
  dampingFraction: .7,
31
31
  comment: "DOCK register — dock expand/collapse morph + the in-dock Slider thumb, iOS-control settled, overshoot ~+4.6%"
32
+ },
33
+ {
34
+ name: "press",
35
+ response: .15,
36
+ dampingFraction: .86,
37
+ comment: "PRESS register — the iOS interactive tap-press (Apple interactiveSpring 0.15/0.86); sub-100ms answer, tiny alive rebound ~+0.5%. Read by useSpringPress + the --glass-btn-press-t drive"
32
38
  }
33
39
  ];
34
40
  function t(t) {
@@ -134,9 +134,18 @@
134
134
  }
135
135
  }
136
136
 
137
- /* ── Gold shimmer: metallic text highlight sweep ── */
138
-
139
- @keyframes gold-shimmer-slide {
137
+ /* ── Metal shimmer: the metal-PARAMETERIZED text/border highlight sweep ──
138
+ * BB.W-METAL-SHIMMER — the ONE metal-agnostic sweep (the gold-only
139
+ * `gold-shimmer-slide` RETIRED onto it — clean break, no alias). The keyframe is
140
+ * PURE position (ZERO baked metal color): the metal hue is the recipe's job via
141
+ * the `--metal-shimmer-color`-bound gradient (see utilities/metal.css). The SAME
142
+ * keyframe sweeps a gold, silver, or bronze gradient depending only on the channel,
143
+ * usable for BOTH text-clip (the `.metal-*` text register) AND border/mask (the
144
+ * `.metal-*-border` swept RIM) — the position pass shifts whatever gradient the
145
+ * surface paints. The `200% 0`→`-200% 0` shape carries the gold READ exactly
146
+ * (byte-faithful to the retired `gold-shimmer-slide`). The slow `--duration-metal`
147
+ * (6s) clock is set at the consumer (the metal recipe), not baked here. */
148
+ @keyframes metal-shimmer-sweep {
140
149
  0% { background-position: 200% 0; }
141
150
  100% { background-position: -200% 0; }
142
151
  }
@@ -145,8 +154,8 @@
145
154
  * The `@keyframes sparkle-sweep` + its reduced-motion stub are DELETED with the
146
155
  * disco recipe family — the `btn-audacious` ::after star (its sole consumer) is
147
156
  * gone, and the dock-tab primary tier collapsed onto the calm glass register.
148
- * The `Complete!` celebratory shimmer rides its OWN keyframes (gold-shimmer-slide
149
- * / shimmer above), never sparkle-sweep.
157
+ * The `Complete!` celebratory shimmer rides the metal-shimmer-sweep / shimmer
158
+ * keyframes above, never sparkle-sweep.
150
159
  */
151
160
 
152
161
  /* ── Pulse dot bounce: dots variant of <Pulse> ──
@@ -198,14 +207,24 @@
198
207
  /* AX.W57 (P6) — the aura breath reads its OWN element-opacity range
199
208
  (`--pulse-aura-breath-{min,max}`, 0.28↔0.42), decoupled from the
200
209
  shared `--pulse-aura-opacity-*` skeleton-shimmer stops so the halo
201
- breathes as an ambient wash, never up to the 0.95 shimmer peak. */
210
+ breathes as an ambient wash, never up to the 0.95 shimmer peak.
211
+
212
+ BC.W-GLASS-GLOW-FIX (Atlas A-8 root) — the breath SCALE is driven via the
213
+ `--pulse-aura-breath-scale` registered custom property (a `<number>`, typed
214
+ in property-regs.css so it INTERPOLATES per-frame), NOT a `transform: scale()`
215
+ on `.pulse-aura` itself. The `.pulse-aura::before` child reads the scale; the
216
+ `.pulse-aura` element stays UNSCALED at `inset:0` as the `overflow: clip`
217
+ boundary. Scaling the CHILD (clipped by the unscaled parent) is what makes the
218
+ 1.15× peak STAY inside the host box — scaling the clip element itself scaled the
219
+ clip rect too, so the radial escaped (the prior incomplete fix). The element-
220
+ opacity breath stays HERE (it does not change geometry). */
202
221
  0%,
203
222
  100% {
204
- transform: scale(var(--animate-ambient-pulse-scale-min, 1));
223
+ --pulse-aura-breath-scale: var(--animate-ambient-pulse-scale-min, 1);
205
224
  opacity: var(--pulse-aura-breath-min, 0.28);
206
225
  }
207
226
  50% {
208
- transform: scale(var(--animate-ambient-pulse-scale-max, 1.15));
227
+ --pulse-aura-breath-scale: var(--animate-ambient-pulse-scale-max, 1.15);
209
228
  opacity: var(--pulse-aura-breath-max, 0.42);
210
229
  }
211
230
  }
@@ -314,13 +333,26 @@
314
333
  dialog.glass-top-layer {
315
334
  opacity: 0;
316
335
  scale: var(--top-layer-enter-scale, 0.96);
317
- transition-property: opacity, scale, display, overlay;
336
+ /* BB.W-LIQUID-REVEAL — the coupled blur-settle decongest (the iOS
337
+ "light-bending modulation" arrival). The surface's OWN pixels decongest
338
+ `filter: blur(--top-layer-enter-blur)` → `blur(0)` AS it blooms (a `filter`
339
+ radius interp is compositor-safe; it rides the surface's pixels, so it does
340
+ NOT fight the resting glass-tier `backdrop-filter` plate blur — the
341
+ REVEAL-TOPLAYER-NO-BLUR fix, the twin of the `.glass-reveal` recipe's blur
342
+ leg, glass/reveal.css). */
343
+ filter: blur(var(--top-layer-enter-blur, 4px));
344
+ transition-property: opacity, scale, filter, display, overlay;
318
345
  /* BA.W-GLASS-CAL Unit 3 — the enter rides the bouncy spring's OWN settle
319
346
  clock (`--spring-bouncy-duration`, the 2%-band envelope settle) rather
320
347
  than the generic `--duration-normal`, so the emphatic dialog/popover
321
- entrance bounce reads fully instead of being clipped at 0.3s. */
322
- transition-duration: var(--spring-bouncy-duration);
323
- transition-timing-function: var(--spring-bouncy);
348
+ entrance bounce reads fully instead of being clipped at 0.3s. The blur
349
+ decongest rides the no-overshoot `--ease-out` (EFFECTS), the scale the
350
+ bouncy spring (SPATIAL) — the W-MOTION-CANON split. */
351
+ transition-duration: var(--spring-bouncy-duration),
352
+ var(--spring-bouncy-duration), var(--spring-bouncy-duration),
353
+ var(--spring-bouncy-duration), var(--spring-bouncy-duration);
354
+ transition-timing-function: var(--spring-bouncy), var(--spring-bouncy),
355
+ var(--ease-out), linear, linear;
324
356
  transition-behavior: allow-discrete;
325
357
  }
326
358
 
@@ -330,9 +362,11 @@
330
362
  dialog.glass-top-layer[open] {
331
363
  opacity: 1;
332
364
  scale: 1;
365
+ filter: blur(0);
333
366
  @starting-style {
334
367
  opacity: 0;
335
368
  scale: var(--top-layer-enter-scale, 0.96);
369
+ filter: blur(var(--top-layer-enter-blur, 4px));
336
370
  }
337
371
  }
338
372
 
@@ -0,0 +1,109 @@
1
+ /* BB.W-BORDER-PROGRESS — progress IS the element's border.
2
+ *
3
+ * The masked-conic ring consumption (the registration lives in
4
+ * tokens/property-regs.css §18, mirroring the specular split: the @property reg
5
+ * there, the consumption here). The ring paints a `conic-gradient` MASK-COMPOSITED
6
+ * into the border band so ONLY the band paints AND it FOLLOWS the host
7
+ * `border-radius` — a `border-image` SQUARES the corners (measured inferior,
8
+ * forbidden), a floating-bar child re-introduces allocation (forbidden). The host
9
+ * INTERIOR is untouched: a glass card still transmits the backdrop THROUGH its
10
+ * content box (the AX.W54 glass-first identity — the ring is a border-band cut-out,
11
+ * not an opaque overlay).
12
+ *
13
+ * Compositor-only: the sweep rides the registered `--border-progress-fill`
14
+ * <percentage>; no layout property animates (`proof:no-layout-animation`). The
15
+ * unregistered fallback is safe (the `initial-value` paints the resting ring; the
16
+ * cross-fade collapses to it on a non-supporting engine — Chromium 85+/Safari
17
+ * 16.4+, within the deployment floor). */
18
+
19
+ .border-progress {
20
+ position: relative;
21
+ display: block;
22
+ border-radius: var(--border-progress-radius, 16px);
23
+ /* The host reserves the border band the ring paints into (allocation-free —
24
+ the content box is untouched, no reflow). */
25
+ padding: 0;
26
+ }
27
+
28
+ /* The ring layer — inset over the host, the border band the conic paints into.
29
+ The `border` width IS the band thickness; the conic is mask-composited so the
30
+ padding-box (interior) is EXCLUDED from the border-box (the radius-following
31
+ cut-out). */
32
+ .border-progress__ring {
33
+ position: absolute;
34
+ inset: 0;
35
+ border-radius: inherit;
36
+ border: var(--border-progress-width, 12px) solid transparent;
37
+ pointer-events: none;
38
+ /* The spectrum conic, swept to --border-progress-fill. The colored arc runs
39
+ from the top (12 o'clock) clockwise to the fill fraction; past it is
40
+ transparent so the resting band shows ONLY the filled spectrum. */
41
+ background:
42
+ conic-gradient(
43
+ from 0deg,
44
+ var(--border-progress-spectrum, var(--section-color-7)),
45
+ transparent var(--border-progress-fill, 0%),
46
+ transparent 100%
47
+ );
48
+ /* THE RADIUS-FOLLOWING CUT-OUT — the house border-ring idiom: paint a
49
+ border-box fill, EXCLUDE a padding-box fill, leaving only the border band,
50
+ which follows `border-radius` exactly (a border-image cannot). */
51
+ -webkit-mask:
52
+ linear-gradient(#fff 0 0) padding-box,
53
+ linear-gradient(#fff 0 0) border-box;
54
+ -webkit-mask-composite: xor;
55
+ mask:
56
+ linear-gradient(#fff 0 0) padding-box,
57
+ linear-gradient(#fff 0 0) border-box;
58
+ mask-composite: exclude;
59
+ }
60
+
61
+ /* THE COVERAGE AXIS — ONE conic-mask mechanism, two coverage masks (NOT a second
62
+ recipe). `bottom-edge` adds a SECOND mask layer scoping the painted band to the
63
+ bottom edge only; it composes WITH the border-band cut-out above (the mask
64
+ stack intersects), so the bottom register reuses the exact conic + radius
65
+ cut-out — the dock-orientation `dim`-idiom discipline (no parallel fork). */
66
+ .border-progress[data-coverage="bottom-edge"] .border-progress__ring {
67
+ -webkit-mask:
68
+ linear-gradient(#fff 0 0) padding-box,
69
+ linear-gradient(#fff 0 0) border-box,
70
+ linear-gradient(to top, #fff 0, #fff var(--border-progress-width, 12px), transparent var(--border-progress-width, 12px));
71
+ -webkit-mask-composite: xor, source-in;
72
+ mask:
73
+ linear-gradient(#fff 0 0) padding-box,
74
+ linear-gradient(#fff 0 0) border-box,
75
+ linear-gradient(to top, #fff 0, #fff var(--border-progress-width, 12px), transparent var(--border-progress-width, 12px));
76
+ mask-composite: exclude, intersect;
77
+ }
78
+
79
+ /* The content box — the host's own surface (a glass card, a chassis). It is
80
+ untouched by the ring (backdrop-intact); the ring sits over the border band
81
+ only. */
82
+ .border-progress__content {
83
+ position: relative;
84
+ z-index: 1;
85
+ border-radius: inherit;
86
+ height: 100%;
87
+ }
88
+
89
+ /* THE MILESTONE PULSE — a brief brightness bloom on a crossed phase edge. The
90
+ pulse is PRM-gated (no edge-pulse under reduced motion — the ring snaps to the
91
+ new value). Compositor-only (filter brightness, never a layout property). */
92
+ @media (prefers-reduced-motion: no-preference) {
93
+ .border-progress[data-milestone] .border-progress__ring {
94
+ animation: border-progress-milestone-pulse
95
+ var(--spring-snappy-duration, 0.34s) var(--ease-out, ease-out);
96
+ }
97
+ }
98
+
99
+ @keyframes border-progress-milestone-pulse {
100
+ 0% {
101
+ filter: brightness(1);
102
+ }
103
+ 40% {
104
+ filter: brightness(1.35);
105
+ }
106
+ 100% {
107
+ filter: brightness(1);
108
+ }
109
+ }
@@ -17,6 +17,151 @@
17
17
  :where(.dark) .paper-texture {
18
18
  background-blend-mode: screen;
19
19
  }
20
+
21
+ /* BB.W-PAPER-GRID-TEXTURE — the GEOMETRIC sibling of `.paper-texture`.
22
+ Paints the two-frequency `--paper-grid-texture` engineering-grid as a
23
+ card's INTERIOR ground, clipped to the plate's own `border-radius`
24
+ automatically (a host `background-image`), so the math/grid brand pillar
25
+ reads THROUGH a document-register card at the ambient `--paper-grid-
26
+ opacity` — not only in the page margin an opaque plate occludes. A
27
+ decoration-only register (NOT a tier): it composes ON TOP of any glass/
28
+ paper tier, exactly like `.paper-texture` / `cartoon-surface` /
29
+ `veil-surface`.
30
+
31
+ BC.W-GRID-SIMPLE — the card-interior pitch UNIFIES onto the ONE
32
+ `--grid-*` rhythm source: `--paper-grid-texture-size` now reads
33
+ `var(--grid-pitch)` (scale-paper.css), retiring the prior 32px literal so
34
+ the demo page grid + this card interior share ONE pitch (the
35
+ two-parallel-28px/32px-systems fix). This card-interior register keeps its
36
+ OWN quieter ambient strength (`--paper-grid-opacity`), DISTINCT from the
37
+ full-bleed page-bg 3%/11% tier — a card interior reads softer than a page
38
+ wash. It is a host `background-image` only — NO `backdrop-filter`/`filter`
39
+ on this element, so the grid lines are NEVER convolved into the "blurry
40
+ mess" the page grid suffered (the de-blur discipline: the grid is the
41
+ card's own underlay, not a crisp grid read THROUGH a blurred glass plate).
42
+
43
+ THE SEAM (the two-pseudo-budget reveal, recorded — the Triumvirate's
44
+ through-glass-read locate-the-seam, NOT a token-α loop): a glass tier
45
+ already claims BOTH pseudos — `::before` is the moving-specular catch-
46
+ light (glass/material.css) and `::after` is the grain overlay
47
+ (glass/ladder.css). A `.paper-grid::after` would CLOBBER the grain's
48
+ `background-image` on the SAME single pseudo — so the grid + grain could
49
+ not compose (the orthogonality the spec requires). The grid therefore
50
+ rides the HOST element's `background-image` longhand: the glass tier's
51
+ `background:` SHORTHAND sets the translucent fill `background-color`, and
52
+ a later `background-image` longhand COEXISTS with that color (the image
53
+ paints OVER the color, UNDER the content + UNDER both pseudos), so the
54
+ grid is the card's own underlay felt THROUGH the glass tint with ZERO
55
+ pseudo contention — grain (`::after`) + specular (`::before`) + grid
56
+ (host bg-image) all paint at once. The host bg-image is clipped by the
57
+ host `border-radius` by construction (no `border-radius: inherit` pseudo
58
+ needed). A STATIC raster — gradient-stack `background-image`, one
59
+ compositor-cached paint, no per-frame repaint (the W6 paint-path
60
+ discipline). The ambient strength lives in the line-ink alpha (the
61
+ `--paper-grid-opacity`-scaled `--foreground` mix, scale-paper.css) since
62
+ a host bg-image has no independent layer-opacity — so ONE knob
63
+ (`--paper-grid-opacity`) still tunes the through-card strength. */
64
+ .paper-grid {
65
+ background-image: var(--paper-grid-texture);
66
+ background-repeat: repeat;
67
+ background-size:
68
+ calc(var(--paper-grid-texture-size) * 4)
69
+ calc(var(--paper-grid-texture-size) * 4),
70
+ calc(var(--paper-grid-texture-size) * 4)
71
+ calc(var(--paper-grid-texture-size) * 4),
72
+ var(--paper-grid-texture-size) var(--paper-grid-texture-size),
73
+ var(--paper-grid-texture-size) var(--paper-grid-texture-size);
74
+ background-blend-mode: multiply;
75
+ }
76
+
77
+ /* The scheme-aware dark arm — PLAIN-ancestor `.dark` (NOT a scoped
78
+ `:global()`; the recurring scoped-global-drop trap, recorded; this is a
79
+ library CSS partial, but the discipline holds). The line ink is
80
+ `--foreground`-derived, so the warm-cream foreground flips dark→light in
81
+ the `.dark` block and the grid ink auto-lifts off the near-black `--card`
82
+ interior with NO parallel `--paper-grid-*-dark` family — only the BLEND
83
+ flips (light `multiply` → dark `screen`, the legible-on-dark equivalent
84
+ the `.paper-texture` dark arm uses). */
85
+ :where(.dark) .paper-grid,
86
+ .dark .paper-grid {
87
+ background-blend-mode: screen;
88
+ }
89
+ }
90
+
91
+ /* ═══════════════════════════════════════════════
92
+ A11y — the geometric grid honors the SAME transparency idiom the organic
93
+ paper register establishes (paper.css). A reduced-transparency user gets a
94
+ clean card interior, no texture; the static grid needs no motion gate (the
95
+ PRM block guards a future drift only). One a11y idiom, not a grid-local fork.
96
+ ═══════════════════════════════════════════════ */
97
+ @media (prefers-reduced-transparency: reduce) {
98
+ .paper-grid {
99
+ background-image: none;
100
+ }
101
+ }
102
+
103
+ @media (prefers-reduced-motion: reduce) {
104
+ .paper-grid {
105
+ /* Static raster at rest; guard a future `@property` transform drift. */
106
+ animation: none !important;
107
+ }
108
+ }
109
+
110
+ /* ── Selection-card decoration (BC.W-SELECTION-CARD — the I5 selection card) ──────
111
+ The ONE new Atlas component, realized as a `<Card variant="selection">`
112
+ DECORATION (NOT a new SFC, NOT a new tier, NOT a new compositing seam). It
113
+ COMPOSES the two BUILT seams — the A-2 `--glass-accent` rim (glass/rim.css +
114
+ glass/material.css) + the A-3 `.metal-*-border` swept rim (utilities/metal.css)
115
+ — and authors ZERO competing rim/background recipe of its own. The rule is a
116
+ TOKEN-SUBSTITUTION on the base tier (the `.glass-opaque`/`.glass-deep` precedent):
117
+ it re-points the EXISTING `--glass-accent-strength` (+ an OPTIONAL sub-perceptual
118
+ floating-tier lift) locally; it does NOT declare a `background`/`border`.
119
+
120
+ THE RIM-NOT-FILL DISCIPLINE (the no-saturated-slab structural bar): selection is
121
+ read by (a) the metal rim (the `.metal-*-border` class Card composes when
122
+ `:selected`), (b) a BOUNDED accent-strength LIFT (unselected → selected, both ≤
123
+ the W-GLASS-ACCENT rim ceiling), and OPTIONALLY (c) a sub-perceptual
124
+ `--glass-bg-floating`-tier lift (the "selected reads as glass" register). The
125
+ plate STAYS warm-cream translucent — the BC.W-GLASS-IDENTITY floor is inviolate.
126
+ This rule NEVER writes `--glass-tint-source`/`--glass-tint-strength` (the A-2
127
+ distinct-axis fence — the accent is rim+glint DECORATION, not whole-plate
128
+ legibility) and NEVER paints a `--foreground`/`--primary`/`--surface-tint` opaque
129
+ plate FILL (the "selected = loud fill" anti-pattern is the disease-root the gate's
130
+ S3 bite reds).
131
+
132
+ THE ACCENT-STRENGTH LADDER (the bounded lift, two tokens a consumer retunes):
133
+ unselected → --selection-accent-strength (~16% — a calm rim glow)
134
+ selected → --selection-accent-strength-selected (~28% — brighter at the rim,
135
+ still ≤ the W-GLASS-ACCENT ceiling; the data hue reads stronger at
136
+ the rim/glint, NOT a flooded plate)
137
+ The host (Card.vue) writes `--glass-accent` (the HUE) per-instance off `data-hue`;
138
+ this rule supplies the STRENGTH so the calm/selected lift is ONE source. An UNSET
139
+ `data-hue` leaves `--glass-accent: transparent` (the @property default), so even
140
+ with the strength engaged the `color-mix(in oklab, X, transparent N%)` === X — the
141
+ A-2 no-op floor: a `variant="selection"` card with no `data-hue` is byte-identical
142
+ to a bare Card. A consumer may override `--glass-accent-strength` per-instance
143
+ (Card.vue's `data-hue-strength`); this rule is the default. */
144
+ [data-variant="selection"] {
145
+ /* The bounded accent-strength ladder — both ≤ the W-GLASS-ACCENT rim ceiling.
146
+ A consumer retunes the calm/selected pair from these two knobs. */
147
+ --selection-accent-strength: 16%;
148
+ --selection-accent-strength-selected: 28%;
149
+ /* Re-point the EXISTING accent-strength seam to the calm rung (the rim glow at
150
+ rest). At an unset `--glass-accent: transparent` this is a provable no-op. */
151
+ --glass-accent-strength: var(--selection-accent-strength);
152
+ }
153
+
154
+ [data-variant="selection"][data-selected="true"] {
155
+ /* SELECTED — lift the accent-strength to the brighter (still-bounded) rung. The
156
+ brighter rim + the `.metal-*-border` Card composes are the selection read; the
157
+ plate is UNTOUCHED (no background/fill here — rim-not-fill). */
158
+ --glass-accent-strength: var(--selection-accent-strength-selected);
159
+ /* OPTIONAL sub-perceptual "selected reads as glass" lift — re-point the base
160
+ tier's resting fill toward the floating rung (the W-REGISTER-IOS tier), a
161
+ TOKEN re-point, NOT a `--surface-tint` gray plate, NEVER a `--foreground`
162
+ brand fill. The plate stays warm-cream translucent (the floating rung is the
163
+ SAME warm-cream material at a heavier rung, the BC.W-GLASS-IDENTITY ladder). */
164
+ --glass-bg-resting: var(--glass-bg-floating, var(--glass-bg-resting));
20
165
  }
21
166
 
22
167
  /* ── Cartoon surface decoration ───────────────────────────────────
@@ -0,0 +1,131 @@
1
+ /* BC.W-AX-COMPLETION-SEAL — the hero-scale earned-GOLD completion seal.
2
+ *
3
+ * A determinate process completes and a HERO-SCALE gold mark DRAWS itself onto the
4
+ * surface: the stroke INKS (a `stroke-dashoffset` wipe on the registered `--seal-draw`
5
+ * <percentage>), settles with a small spring overshoot (the `--seal-scale` SPATIAL leg
6
+ * on the seal's own `--spring-snappy`/`--spring-bouncy` clock), and glints ONCE on
7
+ * settle (the `--seal-glint` + the W-AX-METAL-GLOW gold catch-light). It is GOLD because
8
+ * completion is EARNED — the ink reads the W-PHASE-PALETTE completion register
9
+ * (`--phase-complete-color`/`--color-gold`), so a consumer re-inking completion re-inks
10
+ * the seal in lockstep. The seal mints NO new gold token + does NOT re-author the metal
11
+ * glow — it COMPOSES both (the earned-gold register has ONE home).
12
+ *
13
+ * ONE-SHOT: the draw fires ONCE on `play` (the `.completion-seal[data-play]` arm), then
14
+ * holds the static fully-drawn seal — no looping shimmer (the §6 calm register; the disco
15
+ * family stays gone). PRM-gated: under `prefers-reduced-motion: reduce` the seal appears
16
+ * instantly fully-drawn (`--seal-draw: 100%` snap), no stroke animation, no glint sweep
17
+ * (the seal is correct, the motion off — the vestibular floor).
18
+ *
19
+ * COMPOSITOR-ONLY: the draw rides `stroke-dashoffset` (a paint prop) + `transform` (the
20
+ * scale) + `filter`/`opacity` (the glint) — NO layout property animates
21
+ * (`proof:no-layout-animation` holds). The registrations live in
22
+ * tokens/property-regs.css §18 (the specular/border-progress split: the @property reg
23
+ * there, the consumption here). */
24
+
25
+ .completion-seal {
26
+ /* The seal stroke ink — the EARNED-gold completion register (Q2). The runtime
27
+ cascade default is the token form: a consumer (or any ancestor) re-inking
28
+ `--phase-complete-color` re-inks the seal. The @property `initial-value` literal
29
+ light-gold is only the non-supporting-engine fallback. */
30
+ --seal-ink: var(--phase-complete-color, var(--color-gold));
31
+
32
+ display: inline-flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ /* The settle scale rides the SPATIAL leg — a small overshoot on the seal's own
36
+ spring clock (NOT a generic --duration-*). Compositor-only (transform). */
37
+ transform: scale(var(--seal-scale, 1));
38
+ }
39
+
40
+ /* The hero-scale gold-draw glyph — an SVG <path>/<circle> stroked in `--seal-ink`. The
41
+ stroke INKS itself via the `--seal-draw` wipe (a stroke-dashoffset paint, never a
42
+ fade). The glint reads the W-AX-METAL-GLOW catch-light (composed, not re-authored). */
43
+ .completion-seal__mark {
44
+ fill: none;
45
+ stroke: var(--seal-ink);
46
+ stroke-width: var(--seal-stroke-width, 6);
47
+ stroke-linecap: round;
48
+ stroke-linejoin: round;
49
+ /* The stroke-reveal: the dash array is the full path length, the offset rides the
50
+ `--seal-draw` extent (100% = drawn → offset 0; 0% = undrawn → offset = full
51
+ length). pathLength="100" normalizes the glyph so the wipe is path-agnostic. */
52
+ stroke-dasharray: 100;
53
+ stroke-dashoffset: calc(100 - var(--seal-draw, 100%) / 1%);
54
+ /* The one-pass gold glint on settle — the W-AX-METAL-GLOW catch-light, scaled by
55
+ `--seal-glint` (0 at rest → 1 on settle-pass). A drop-shadow halo of the seal's
56
+ OWN gold ink at the metal-glow radius/strength — composed, never re-authored.
57
+ The seal is NOT a `.metal-*` element, so the bare `--metal-glow-blur`/`-opacity`
58
+ (declared scoped inside `.metal-{gold,silver,bronze}`) do not cascade here; the
59
+ seal CONSUMES THE REGISTER by chaining to the `:root` `-default` retune seam
60
+ (glass-fx.css), NOT a hardcoded magic-number copy — a consumer who retunes
61
+ `--metal-glow-blur-default` re-tunes the seal halo in lockstep. */
62
+ --metal-glow-blur: var(--metal-glow-blur-default, 0.5em);
63
+ --metal-glow-opacity: var(--metal-glow-opacity-default, 0.35);
64
+ filter: drop-shadow(
65
+ 0 0
66
+ calc(var(--metal-glow-blur) * var(--seal-glint, 0))
67
+ color-mix(
68
+ in oklab,
69
+ var(--seal-ink),
70
+ transparent
71
+ calc(100% - var(--metal-glow-opacity) * var(--seal-glint, 0) * 100%)
72
+ )
73
+ );
74
+ }
75
+
76
+ /* THE ONE-SHOT DRAW — fires ONCE on `play`, then holds static. PRM-gated: the whole
77
+ motion sits inside the no-preference gate (under reduce the seal is the static
78
+ fully-drawn mark, the @property initial-values). The draw is NOT a loop — a single
79
+ pass each on the stroke-reveal + the settle + the glint. */
80
+ @media (prefers-reduced-motion: no-preference) {
81
+ .completion-seal[data-play] {
82
+ animation: completion-seal-settle var(--spring-bouncy-duration, 0.57s)
83
+ var(--spring-bouncy) both;
84
+ }
85
+ .completion-seal[data-play] .completion-seal__mark {
86
+ animation:
87
+ completion-seal-draw var(--spring-snappy-duration, 0.34s)
88
+ var(--ease-out, ease-out) both,
89
+ completion-seal-glint var(--spring-snappy-duration, 0.34s)
90
+ var(--ease-out, ease-out)
91
+ var(--spring-snappy-duration, 0.34s) both;
92
+ }
93
+ }
94
+
95
+ /* The stroke-reveal: the gold INKS itself 0→full (a stroke-dashoffset paint wipe — the
96
+ editorial draw-on). The registered `--seal-draw` interpolates; the offset reads it. */
97
+ @keyframes completion-seal-draw {
98
+ from {
99
+ --seal-draw: 0%;
100
+ }
101
+ to {
102
+ --seal-draw: 100%;
103
+ }
104
+ }
105
+
106
+ /* The settle: the seal lands with a small overshoot (the SPATIAL enter-bounce). The
107
+ transform scale rides the `--seal-scale` spring; the keyframe nudges the scale once
108
+ (the §6 calm overshoot — an ENTER may overshoot on arrival). Compositor-only. */
109
+ @keyframes completion-seal-settle {
110
+ from {
111
+ --seal-scale: 0.92;
112
+ }
113
+ to {
114
+ --seal-scale: 1;
115
+ }
116
+ }
117
+
118
+ /* The glint: a ONE-PASS gold catch-light sweep on settle (0 → peak → 0). NOT a loop —
119
+ a single pass, then the seal holds static at glint 0 (the metal-glow whisper is the
120
+ resting register; the disco family stays gone). */
121
+ @keyframes completion-seal-glint {
122
+ 0% {
123
+ --seal-glint: 0;
124
+ }
125
+ 45% {
126
+ --seal-glint: 1;
127
+ }
128
+ 100% {
129
+ --seal-glint: 0;
130
+ }
131
+ }