@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
@@ -1,5 +1,12 @@
1
1
  /* utilities/base.css
2
- The @layer components base half — section-description, labeled-field, popover-content, scrollbar, focus-ring, hairline-accent, interactive-item, tap-squish, status-dot, depth-text, preserve-3d, ios input fix, scroll-fade masks, fading-scroll (scroll-state-driven edge fade), deferred-section, scroll-timeline host, shimmer text, keyboard key.
2
+ The @layer components FORM/INTERACTION half — the @property fade pair (read by
3
+ the .fading-scroll rules in base-misc.css), section-description, labeled-field
4
+ (incl. the width-contract + error region), popover-content, scrollbar,
5
+ focus-ring, hairline-accent, interactive-item, tap-squish.
6
+ BB.W-CARVE3 carved the post-tap-squish tail (status-dot → kbd, incl. the
7
+ fading-scroll recipe) into the adjacent base-misc.css partial so each stays
8
+ under the no-god-module 500-line bound. The two adjacent same-`@layer
9
+ components` blocks compose identically — the dist is byte-isomorphic.
3
10
  Carved from the utilities.css cascade root; @import-ed by utilities.css in
4
11
  cascade order. See docs/precepts/design-idioms.md §cohesion-aware partials. */
5
12
 
@@ -127,8 +134,9 @@
127
134
  (PopoverContent, DropdownMenuContent, SelectContent, etc.).
128
135
  Covers radius + outline + popover-foreground; consumers compose
129
136
  this with `.glass-floating` (bg + blur + border + shadow), with
130
- `.popover-animate` (data-state animation), and with the per-host
131
- z-rung. The floating-tier shadow comes from
137
+ `.glass-reveal` (the spring-clocked data-state LIQUID-ENTER —
138
+ BB.W-LIQUID-REVEAL, off the retired `popover-animate`), and with the
139
+ per-host z-rung. The floating-tier shadow comes from
132
140
  `--glass-shadow-floating` via `.glass-floating`, replacing the
133
141
  `shadow-md`/`shadow-lg` literals that bypassed the canonical
134
142
  cascade. */
@@ -278,264 +286,42 @@
278
286
  }
279
287
  }
280
288
 
281
- /* ── Status dot indicator ── */
282
- .status-dot {
283
- display: inline-block;
284
- width: 0.5rem;
285
- height: 0.5rem;
286
- border-radius: var(--radius-pill);
287
- flex-shrink: 0;
288
- transition:
289
- color var(--duration-fast) var(--ease-standard),
290
- background var(--duration-fast) var(--ease-standard),
291
- box-shadow var(--duration-fast) var(--ease-standard);
292
- }
293
- /* ── Depth text (layered offset stamp) ──
294
- AW.W26 — composes the `--text-shadow-depth` @theme identity token (the
295
- hard offset stack + soft ambient tail) instead of a hand-rolled multi-stop
296
- literal. The token holds the stack inside the `@theme` defs (gate 4) and
297
- re-tints under `.dark` via `--shadow`/`--shadow-color` BY CONSTRUCTION. */
298
- .depth-text {
299
- --depth-color-primary: var(--primary);
300
-
301
- color: var(--depth-color-primary);
302
- text-shadow: var(--text-shadow-depth);
303
- }
304
-
305
- /* ── 3D preserve ── */
306
- .preserve-3d {
307
- transform-style: preserve-3d;
308
- }
309
-
310
- /* ── iOS input font-size fix (prevent auto-zoom) ── */
311
- .ios input,
312
- .ios select,
313
- .ios textarea,
314
- .ios [contenteditable] {
315
- font-size: max(1rem, 1em);
316
- }
317
-
318
- /* ── Scroll fade masks ──
319
- Single-source `mask-image` (AV.W16 TW7): the `-webkit-` companion is
320
- dropped — Tailwind v4's Lightning CSS build pipeline auto-prefixes per
321
- the browserslist targets, mirroring the glass ladder's single-source
322
- `backdrop-filter` (glass.css). NOTE: this is the consistency cut; it
323
- does NOT conflict with W15's `@supports`-gated older-Safari mask
324
- fallback (that fallback is the distinct case where the companion is
325
- genuinely needed and W15 gates it). */
326
- .scroll-fade-mask {
327
- mask-image: linear-gradient(to right, transparent, black var(--mask-fade-width), black calc(100% - var(--mask-fade-width)), transparent);
328
- }
329
-
330
- .scroll-fade-top {
331
- mask-image: linear-gradient(to bottom, transparent, black var(--mask-fade-width));
332
- }
333
-
334
- .scroll-fade-bottom {
335
- mask-image: linear-gradient(to bottom, black calc(100% - var(--mask-fade-width)), transparent);
336
- }
337
-
338
- .scroll-fade-y {
339
- mask-image: linear-gradient(to bottom, transparent, black var(--mask-fade-width), black calc(100% - var(--mask-fade-width)), transparent);
340
- }
341
-
342
- /* ── Fading scroll — the scroll-STATE-driven edge fade (BA.W-FADING-SCROLL) ──
343
- `<FadingScroll>`'s recipe. SUPERSEDES the scroll-BLIND `.scroll-fade-*`
344
- masks above (which feathered both edges unconditionally — the R8-08 "Shy"
345
- defect). Here each edge's ramp width is a registered `--fade-start` /
346
- `--fade-end` custom (above, default 0px = SHARP), driven by the
347
- `scroll(self)` timeline so the start edge feathers only past `scroll > 0`
348
- and the end edge only while trailing overflow remains.
349
-
350
- The root IS the scroll port (the component sets overflow via the consumer's
351
- utilities — `overflow-x-auto` / `overflow-y-auto` come from the class the
352
- consumer passes; the axis floor below sets the OTHER axis). The 4-stop
353
- mask reads the two customs; at rest both are 0px so the gradient is a flat
354
- opaque pass-through (no feather). */
355
- .fading-scroll {
356
- /* The base mask is axis-specialized by the modifier classes below. The
357
- default-x case uses the inline ramp; the y case the block ramp. */
358
- mask-image: linear-gradient(
359
- to right,
360
- transparent 0,
361
- black var(--fade-start),
362
- black calc(100% - var(--fade-end)),
363
- transparent 100%
364
- );
365
- }
366
- .fading-scroll--x {
367
- overflow-x: auto;
368
- mask-image: linear-gradient(
369
- to right,
370
- transparent 0,
371
- black var(--fade-start),
372
- black calc(100% - var(--fade-end)),
373
- transparent 100%
374
- );
375
- }
376
- .fading-scroll--y {
377
- overflow-y: auto;
378
- mask-image: linear-gradient(
379
- to bottom,
380
- transparent 0,
381
- black var(--fade-start),
382
- black calc(100% - var(--fade-end)),
383
- transparent 100%
384
- );
385
- }
386
-
387
- /* The NATIVE primary path: drive the per-edge customs off a `scroll(self)`
388
- timeline — ZERO JS on a supporting engine (the `scroll-driven.css` /
389
- Baseline-Newly-Available bar). UNLIKE `scroll-driven.css` this is NOT
390
- wrapped in `prefers-reduced-motion: no-preference` — the fade is a
391
- LEGIBILITY cue, not motion, so it stays present under PRM (it merely stops
392
- interpolating; the discrete overflow-edge presence stays correct, and the
393
- registered customs make even the static endpoints land right). */
394
- @supports (animation-timeline: scroll()) {
395
- /* The start edge: from sharp (0) to feathered, completing within the
396
- first `--fade-scroll-width` of scroll — so at `scroll = 0` the start is
397
- SHARP and it ramps in only once the user genuinely scrolls past. */
398
- @keyframes gl-fade-start-in {
399
- from {
400
- --fade-start: 0px;
401
- }
402
- to {
403
- --fade-start: var(--fade-scroll-width);
404
- }
405
- }
406
- /* The end edge: feathered while trailing overflow remains, ramping OUT to
407
- sharp over the last `--fade-scroll-width` of scroll — so at the scroll
408
- end (no trailing overflow) the end is SHARP. */
409
- @keyframes gl-fade-end-out {
410
- from {
411
- --fade-end: var(--fade-scroll-width);
412
- }
413
- to {
414
- --fade-end: 0px;
415
- }
416
- }
417
- /* x axis — `scroll(self inline)`; two animations on the ONE element, each
418
- gated by `animation-range` to the start / end sliver of the scroll
419
- distance. `fadeStart`/`fadeEnd` props toggle their respective
420
- animation off via the `[data-fade-*]` presence attrs. */
421
- .fading-scroll--x[data-fade-start] {
422
- animation: gl-fade-start-in linear both;
423
- animation-timeline: scroll(self inline);
424
- animation-range: 0 var(--fade-scroll-width);
425
- }
426
- .fading-scroll--x[data-fade-end] {
427
- animation: gl-fade-end-out linear both;
428
- animation-timeline: scroll(self inline);
429
- animation-range: calc(100% - var(--fade-scroll-width)) 100%;
430
- }
431
- /* BOTH edges on one element compose as two named animations. */
432
- .fading-scroll--x[data-fade-start][data-fade-end] {
433
- animation:
434
- gl-fade-start-in linear both,
435
- gl-fade-end-out linear both;
436
- animation-timeline: scroll(self inline), scroll(self inline);
437
- animation-range:
438
- 0 var(--fade-scroll-width),
439
- calc(100% - var(--fade-scroll-width)) 100%;
440
- }
441
- /* y axis — `scroll(self block)`. */
442
- .fading-scroll--y[data-fade-start] {
443
- animation: gl-fade-start-in linear both;
444
- animation-timeline: scroll(self block);
445
- animation-range: 0 var(--fade-scroll-width);
446
- }
447
- .fading-scroll--y[data-fade-end] {
448
- animation: gl-fade-end-out linear both;
449
- animation-timeline: scroll(self block);
450
- animation-range: calc(100% - var(--fade-scroll-width)) 100%;
451
- }
452
- .fading-scroll--y[data-fade-start][data-fade-end] {
453
- animation:
454
- gl-fade-start-in linear both,
455
- gl-fade-end-out linear both;
456
- animation-timeline: scroll(self block), scroll(self block);
457
- animation-range:
458
- 0 var(--fade-scroll-width),
459
- calc(100% - var(--fade-scroll-width)) 100%;
460
- }
461
- }
462
-
463
- /* ── Deferred section — render-skip an offscreen subtree (AQ.W3 §5) ──────
464
- `content-visibility: auto` skips layout/paint/style of an offscreen
465
- subtree — the INP-under-load lever (fourier γ, muster, speedtest, words).
466
- `contain-intrinsic-size: auto <estimate>` is measurement-safe: the `auto`
467
- prefix makes the engine REMEMBER the last-rendered size (no scroll-jump on
468
- re-entry); plain `<estimate>` freezes the section + thrashes the scrollbar
469
- — the trap this closes. Estimate is token-driven (`--deferred-section-
470
- size`, default 30rem). `.deferred-section--cached` →
471
- `content-visibility: hidden` (always skipped, state CACHED — cheaper to
472
- re-show than `display:none`). Baseline Widely; unsupporting engines render
473
- normally. JS HOOK: the engine fires `contentvisibilityautostatechange`
474
- { skipped } at the render-skip boundary — pair with `useRAFLoop`
475
- pause/resume: `el.addEventListener('contentvisibilityautostatechange',
476
- e => e.skipped ? loop.pause() : loop.resume())`. */
477
- .deferred-section {
478
- content-visibility: auto;
479
- contain-intrinsic-size: auto var(--deferred-section-size, 30rem);
480
- }
481
- .deferred-section--cached {
482
- content-visibility: hidden;
483
- contain-intrinsic-size: auto var(--deferred-section-size, 30rem);
484
- }
485
-
486
- /* ── Card scroll-timeline host (AI.W1-α) ───────────────────────────────
487
- Canonical scroll-overflow host that emits the `--card-scroll` named
488
- scroll-timeline consumed by `<CardHeader shrink>`. Apply to the
489
- scroll-overflow ancestor (typically the `<Card>` itself OR a wrapper
490
- inside it that carries `overflow-y: auto`).
491
-
492
- `contain: layout style paint` isolates the named timeline so child
493
- animations respond to THIS host's scroll only — not to portal-
494
- triggered layout shifts in ancestor containers (the load-bearing
495
- isolation guarantee the value.js `PaneHeader.vue:18-29` comment
496
- called out and the AI.W1 spec §1.2 ratified as canon).
497
-
498
- Disambiguated from `.scroll-fade-*` (mask-image fade gradient at
499
- the container's leading/trailing edge) — `.card-scroll-host` does
500
- NOT paint any visual; it only emits the timeline. */
501
- .card-scroll-host {
502
- contain: layout style paint;
503
- scroll-timeline: --card-scroll block;
504
- }
505
-
506
- /* ── Shimmer text effects ──
507
- The text-fill + background-clip composition is load-bearing visual
508
- (the gold gradient itself); only the `animation:` line is wrapped in
509
- the PRM no-preference bracket so PRM users see the static gradient
510
- without the slide animation. */
511
- .gold-shimmer {
512
- background: linear-gradient(90deg, var(--color-gold-dark), var(--color-gold-light), var(--color-gold), var(--color-gold-light), var(--color-gold-dark));
513
- background-size: 250% 100%;
514
- background-clip: text;
515
- -webkit-background-clip: text;
516
- color: transparent;
517
- }
518
- @media (prefers-reduced-motion: no-preference) {
519
- .gold-shimmer {
520
- animation: gold-shimmer-slide var(--duration-shimmer) linear infinite;
521
- }
522
- }
523
-
524
- /* ── Keyboard key ── */
525
- .kbd {
526
- display: inline-flex;
527
- align-items: center;
528
- justify-content: center;
529
- min-height: 1.5rem;
530
- min-width: 1.5rem;
531
- padding: 0 0.375rem;
532
- font-family: var(--font-mono);
533
- font-size: var(--type-micro);
534
- background: var(--muted);
535
- border: 1px solid var(--border);
536
- border-radius: var(--radius-sm);
537
- box-shadow: 0 1px 0 1px color-mix(in srgb, var(--border) 30%, transparent);
538
- line-height: 1;
289
+ /* ── Glass-press — the interactive press register (BB.W-PRESS-UNIFY) ──
290
+ The CSS half of the `<Card :pressable>` / interactive-glass press. Two
291
+ coupled legs on ONE `--card-press-t` drive (the `useLiquidPress` writes the
292
+ JS-driven value; the CSS `:active` is the no-JS / SSR floor):
293
+
294
+ • The SCALE leg is the co-composed `.tap-squish` (the Card binds both
295
+ classes), so the no-JS press already scales to `--scale-press` on the
296
+ `--spring-smooth` clock and the JS reciprocal squish wins while engaged.
297
+ • The BRIGHTNESS leg reads the `--card-press-t` drive directly — a sub-
298
+ perceptual `filter: brightness()` lift so the glass reads as DEFORMING +
299
+ catching light under the press, not just shrinking (the W-MOTION-CANON P3
300
+ coupling — fade/brightness coupled WITH the transform on the same drive).
301
+ `filter` is compositor-safe (the P5 ban targets layout props only —
302
+ `proof:no-layout-animation` greens it), so the lift never re-layouts.
303
+
304
+ The brightness leg rides the `--card-press-t` VALUE (the typed press drive),
305
+ NOT a CSS transition — it tracks the JS spring frame-for-frame and degrades to
306
+ the resting 0 (no lift) when JS is off. The press surface is INTERACTIVE: the
307
+ cursor + a WCAG-2.5.5 touch floor (`min-block-size`) read here, not on the
308
+ static-card register. The interruptibility + the PRM-instant snap are the JS
309
+ driver's (`useLiquidPress` → the kf `SpringProgress` re-seat + the PRM policy);
310
+ this is the CSS floor the JS enhances. */
311
+ .glass-press {
312
+ cursor: pointer;
313
+ min-block-size: max(0px, var(--control-floor, 0px));
314
+ /* The coupled brightness lift on the press drive (rest 0 → ~4% at full
315
+ press). The drive is the JS-written `--card-press-t`; with JS off it stays
316
+ the `@property` 0 initial so the filter is a no-op (`brightness(1)`). */
317
+ filter: brightness(calc(1 + var(--card-press-t, 0) * 0.04));
318
+ }
319
+ /* The press-drive typed registration so a downstream `calc()` interpolates the
320
+ VALUE (number) and an unwired/SSR card is the static rest frame. */
321
+ @property --card-press-t {
322
+ syntax: "<number>";
323
+ inherits: true;
324
+ initial-value: 0;
539
325
  }
540
326
 
541
327
  }
@@ -49,12 +49,23 @@
49
49
  Shared compound transition for interactive controls that animate their
50
50
  surface (background-color/color/box-shadow/border-color) on the four-state
51
51
  contract. Replaces the per-site
52
- `transition-[background-color,color,box-shadow,border-color] duration-[var(--duration-fast)] ease-[var(--ease-standard)]`
52
+ `transition-[background-color,color,box-shadow,border-color] duration-[var(--duration-control)] ease-[var(--ease-standard)]`
53
53
  arbitrary wraps at ≥2 sites (TabsTrigger, SelectTrigger, Toggle `card`
54
- variant). Binds the canonical --duration-fast + --ease-standard tokens. */
54
+ variant).
55
+
56
+ BC.W-CONTROL-SMOOTH — the surface legs read the QUICK control clock
57
+ `--duration-control` (0.12s, the named iOS control-press surface beat,
58
+ scheme-motion.css), NOT the 0.2s calm `--duration-fast`. A control the user
59
+ actively pokes wants the ~100-120ms quick beat that tracks the cursor; the
60
+ prior 0.2s dragged the colour/border/shadow VISIBLY behind the press (the §F
61
+ "super laggy" read). The bezier `--ease-standard` STAYS (a colour cross-fade
62
+ on a spring wobbles — §6 binding); the property list stays SURFACE-ONLY (no
63
+ `transform` leg — the press-squish is `.tap-squish`/`useSpringPress`'s spring
64
+ job, the canonical split). One token re-times the whole 12-consumer control
65
+ family. */
55
66
  @utility transition-control {
56
67
  transition-property: background-color, color, box-shadow, border-color;
57
- transition-duration: var(--duration-fast);
68
+ transition-duration: var(--duration-control);
58
69
  transition-timing-function: var(--ease-standard);
59
70
  }
60
71
 
@@ -69,7 +80,9 @@
69
80
  }
70
81
 
71
82
  /* ── Sheet/drawer slide-out animation grammar ──
72
- Mirror of `.popover-animate` for sheet/drawer panels. Pairs with
83
+ The sheet/drawer-panel analogue of the overlay enter (the popover-class
84
+ surfaces now ride the spring-clocked `.glass-reveal`, BB.W-LIQUID-REVEAL).
85
+ Pairs with
73
86
  `slide-in-from-{top,right,bottom,left}-N` to compose side-keyed entries.
74
87
  The open path uses --duration-panel (slow, deliberate); the close path
75
88
  uses --duration-fast so dismiss feels snappy. R5 vocab.γ gap row 6;
@@ -31,11 +31,17 @@
31
31
  background: var(--metric-badge-bg, var(--glass-bg-quiet));
32
32
  backdrop-filter: var(--metric-badge-blur, var(--glass-blur-quiet));
33
33
  box-shadow: var(--metric-badge-shadow, 0 1px 6px color-mix(in srgb, var(--shadow-color) 8%, transparent), var(--glass-highlight));
34
+ /* SPATIAL/EFFECTS split (motion-canon P1): the EFFECTS legs
35
+ (background/border-color/box-shadow) ride the bezier --ease-standard;
36
+ the SPATIAL hover-lift legs (translate/scale) ride the --spring-smooth
37
+ hover register on its own settle clock --spring-smooth-duration (the
38
+ ONE interactive transform register .btn-pill/.glass-btn settle on). */
34
39
  transition:
35
40
  background var(--duration-fast) var(--ease-standard),
36
41
  border-color var(--duration-fast) var(--ease-standard),
37
42
  box-shadow var(--duration-fast) var(--ease-standard),
38
- scale var(--duration-fast) var(--ease-standard);
43
+ translate var(--spring-smooth-duration) var(--spring-smooth),
44
+ scale var(--spring-smooth-duration) var(--spring-smooth);
39
45
  }
40
46
 
41
47
  .metric-badge > span {
@@ -49,11 +55,17 @@
49
55
 
50
56
  .metric-badge:hover {
51
57
  /* Hover lifts to the `resting` rung — one step up the canonical
52
- ladder (audit U.W0.C-c §7.2). */
58
+ ladder (audit U.W0.C-c §7.2). BC.W-AX-METRIC-HOVER lifts the badge
59
+ into a tactile VALUE-LIFT: it nudges UP (--metric-badge-hover-translate
60
+ -2px) + scales a hair more (1.04) + casts the cartoon-sticker offset
61
+ shadow (--shadow-cartoon-sm) — token-first, so a consumer zeroes the
62
+ lift from :root (--metric-badge-hover-translate: 0). Compositor-only
63
+ (translate/scale/box-shadow — proof:no-layout-animation holds). */
53
64
  border-color: var(--metric-badge-hover-border, var(--glass-border-resting));
54
65
  background: var(--metric-badge-hover-bg, var(--glass-bg-resting));
55
- box-shadow: var(--metric-badge-hover-shadow, 0 2px 10px color-mix(in srgb, var(--shadow-color) 12%, transparent), var(--glass-highlight));
56
- scale: var(--metric-badge-hover-scale, 1.02);
66
+ box-shadow: var(--metric-badge-hover-shadow, var(--shadow-cartoon-sm), var(--glass-highlight));
67
+ translate: 0 var(--metric-badge-hover-translate, -2px);
68
+ scale: var(--metric-badge-hover-scale, 1.04);
57
69
  }
58
70
 
59
71
  .metric-badge:active {
@@ -212,7 +224,14 @@
212
224
  backdrop-filter: var(--glass-blur-floating);
213
225
 
214
226
  padding: 0 0.75rem;
215
- height: 2.25rem;
227
+ /* BC.W-SEARCH-CUSTOM — the height reads the shared `--control-pill-h`
228
+ element-override seam (the SAME rung `.input-pill` reads), DEFAULTING to
229
+ `--control-h-sm` so a bare search bar is byte-identical to the HEAD
230
+ 2.25rem pill. `controlSizeClass(size)` (_shared/useControlSize.ts) re-points
231
+ the seam per rung (sm→`--control-h-xs`-ish via the cohort, lg→`--control-h-lg`),
232
+ so the SearchBar/FuzzySearch `size` prop retunes the field height WITHOUT a
233
+ recipe fork — ONE substitution rung, the cohort is still the source. */
234
+ height: var(--control-pill-h, var(--control-h-sm));
216
235
  max-width: var(--max-width-input);
217
236
  width: 100%;
218
237
  transition:
@@ -226,7 +245,13 @@
226
245
 
227
246
  .input-bar-field {
228
247
  font-family: var(--font-mono, monospace);
229
- font-size: var(--type-small);
248
+ /* BC.W-SEARCH-CUSTOM — the field font reads the shared `--control-pill-text`
249
+ seam (the SAME rung `.input-pill` reads), DEFAULTING to `--control-text`
250
+ (≈ the prior `--type-small` register at scale 1 — byte-near-identical). The
251
+ `controlSizeClass("sm")` rung re-points it to `--control-text-sm` (quieter);
252
+ `default`/`lg` keep `--control-text`. So the search field type tracks the
253
+ cohort under `--ui-scale`, NOT a static `--type-small` literal. */
254
+ font-size: var(--control-pill-text, var(--control-text));
230
255
  background: transparent;
231
256
  border: none;
232
257
  outline: none;
@@ -0,0 +1,215 @@
1
+ /* ═══════════════════════════════════════════════════════════════════════════
2
+ BB.W-METAL-SHIMMER — the brand-metal utility family
3
+ ═══════════════════════════════════════════════════════════════════════════
4
+ ONE single-home partial for the gold·silver·bronze metal register (so a new
5
+ metal pop is ONE class, not a re-paste — the W-SUFFUSE icon-chip consolidation
6
+ discipline). Three registers, ALL metal-PARAMETERIZED off the SAME shared recipe
7
+ reading the `--metal-shimmer-color` channel + its four resolved stop slots:
8
+
9
+ • `.metal-{gold,silver,bronze}` — the text-clip metal gradient (the
10
+ `.gold-shimmer` recipe GENERALIZED): a `linear-gradient(90deg, dark, light,
11
+ base, light, dark)` band off the bound metal quad, `background-clip: text`.
12
+ • `.metal-{gold,silver,bronze}-border` — the swept metallic RIM (the §N6
13
+ selected-item-border consumer): the SAME `--metal-shimmer-color`-bound
14
+ gradient on a `border-image`-sliced rim, swept by the SAME keyframe.
15
+ • `.metal-rainbow-rim` — the prismatic gilt-figure / record-badge rim: it
16
+ COMPOSES W-GLASS-ACCENT's `--glass-accent` rim seam (it does NOT re-author
17
+ the rim) by binding the accent channel to a swept rainbow hue.
18
+
19
+ The PARAMETERIZATION: `--metal-shimmer-color` is the metal-NAME marker each
20
+ `.metal-{name}` SETS (`gold`/`silver`/`bronze`); the shared recipe resolves the
21
+ gradient off the four `--metal-stop-*` slots each class binds to its quad. The
22
+ `metal-shimmer-sweep` keyframe (animations.css) is PURE position — ZERO baked
23
+ metal color — so the SAME keyframe sweeps any of the three metals depending only
24
+ on which slots the class bound. A silver/bronze sweep is a NEW CLASS that binds
25
+ the slots, NEVER a forked keyframe (the N-copy this wave exists to kill).
26
+
27
+ THE PRM-STATIC BRACKET (the §6 calm register, the `.gold-shimmer` model byte-
28
+ faithfully): every utility paints the FULL static metal gradient at REST (the
29
+ load-bearing visual — the metal sheen itself); ONLY the `animation:` line sits
30
+ inside `@media (prefers-reduced-motion: no-preference)`. A PRM user sees the
31
+ full static metal gradient WITHOUT the slide — the metal still READS as metal,
32
+ the motion is the only thing gated. The sweep is a slow `--duration-metal` (6s)
33
+ one-pass — the disco family is GONE and STAYS gone (no sparkle/grain/ripple). */
34
+
35
+ @layer components {
36
+ /* ── The shared metal recipe (the metal-agnostic engine) ─────────────────
37
+ The four stop slots default to GOLD (the neutral metal — so a bare
38
+ `--metal-shimmer-color`-bearing surface paints gold, matching the
39
+ `.gold-shimmer` precedent); each `.metal-{name}` re-binds them to its quad.
40
+ The `--metal-shimmer-color` marker carries the metal NAME for the gate's
41
+ parameterization assert + for any consumer query. */
42
+ .metal-gold,
43
+ .metal-silver,
44
+ .metal-bronze {
45
+ --metal-stop-dark: var(--color-gold-dark);
46
+ --metal-stop-light: var(--color-gold-light);
47
+ --metal-stop-base: var(--color-gold);
48
+ background: linear-gradient(
49
+ 90deg,
50
+ var(--metal-stop-dark),
51
+ var(--metal-stop-light),
52
+ var(--metal-stop-base),
53
+ var(--metal-stop-light),
54
+ var(--metal-stop-dark)
55
+ );
56
+ background-size: 250% 100%;
57
+ background-clip: text;
58
+ -webkit-background-clip: text;
59
+ color: transparent;
60
+
61
+ /* ── BC.W-AX-METAL-GLOW — the gold catch-light (the lit-metal halo) ──────
62
+ A soft glow halo of the metal's OWN base hue behind the gradient text-clip
63
+ so the gold reads as LIT metal (light catching its surface), not a flat
64
+ gradient fill. Because `background-clip: text` makes the text transparent,
65
+ a `filter: drop-shadow` follows the clipped glyph shape — the halo hugs the
66
+ letters. ONE recipe on the shared selector (every metal lit, never a per-
67
+ metal re-paste); the glow reads `--metal-stop-base` so gold halos gold,
68
+ silver halos silver, bronze halos bronze (NOT a fixed gold-on-every-metal
69
+ mismatch). The earned-gold register (Q2): `.metal-gold`'s base is
70
+ `--color-gold`, so the gold catch-light is the earned-gold warm glow.
71
+
72
+ PRM-STATIC: the glow paints HERE, at rest, OUTSIDE the no-preference
73
+ bracket — the lit metal reads for PRM users; ONLY the sweep `animation:`
74
+ is gated (the §6 calm register; the disco family stays gone — this is a
75
+ soft warm whisper bounded by `--metal-glow-opacity`, not a neon bloom). */
76
+ --metal-glow-blur: var(--metal-glow-blur-default, 0.5em);
77
+ --metal-glow-opacity: var(--metal-glow-opacity-default, 0.35);
78
+ filter: drop-shadow(
79
+ 0 0 var(--metal-glow-blur)
80
+ color-mix(
81
+ in srgb,
82
+ var(--metal-stop-base) calc(var(--metal-glow-opacity) * 100%),
83
+ transparent
84
+ )
85
+ );
86
+ }
87
+
88
+ /* Per-metal: set the channel marker + re-bind the stop slots to the quad. */
89
+ .metal-gold {
90
+ --metal-shimmer-color: gold;
91
+ --metal-stop-dark: var(--color-gold-dark);
92
+ --metal-stop-light: var(--color-gold-light);
93
+ --metal-stop-base: var(--color-gold);
94
+ }
95
+ .metal-silver {
96
+ --metal-shimmer-color: silver;
97
+ --metal-stop-dark: var(--color-silver-dark);
98
+ --metal-stop-light: var(--color-silver-light);
99
+ --metal-stop-base: var(--color-silver);
100
+ }
101
+ .metal-bronze {
102
+ --metal-shimmer-color: bronze;
103
+ --metal-stop-dark: var(--color-bronze-dark);
104
+ --metal-stop-light: var(--color-bronze-light);
105
+ --metal-stop-base: var(--color-bronze);
106
+ }
107
+
108
+ /* ── The swept metallic RIM (the §N6 selected-item-border consumer) ───────
109
+ The SAME `--metal-shimmer-color`-bound gradient applied to a `border-image`
110
+ slice — a swept metallic RIM, not a text fill. `border-image` reads the same
111
+ `background`-position-swept gradient (the metal-shimmer-sweep keyframe drives
112
+ the `background-position`; the `border-image-source` references the SAME
113
+ gradient via the stop slots), so ONE keyframe drives both registers. The rim
114
+ sits over the surface's own background (no `background-clip: text`). */
115
+ .metal-gold-border,
116
+ .metal-silver-border,
117
+ .metal-bronze-border {
118
+ --metal-stop-dark: var(--color-gold-dark);
119
+ --metal-stop-light: var(--color-gold-light);
120
+ --metal-stop-base: var(--color-gold);
121
+ border: var(--metal-border-width, 2px) solid transparent;
122
+ border-image: linear-gradient(
123
+ 90deg,
124
+ var(--metal-stop-dark),
125
+ var(--metal-stop-light),
126
+ var(--metal-stop-base),
127
+ var(--metal-stop-light),
128
+ var(--metal-stop-dark)
129
+ )
130
+ 1;
131
+ /* The sweep rides a backing gradient `background-position` on the same band
132
+ (the `border-image` slice tracks the host's background extent); the
133
+ 250% size + the position sweep give the rim its travelling sheen. */
134
+ background-image: linear-gradient(
135
+ 90deg,
136
+ var(--metal-stop-dark),
137
+ var(--metal-stop-light),
138
+ var(--metal-stop-base),
139
+ var(--metal-stop-light),
140
+ var(--metal-stop-dark)
141
+ );
142
+ background-size: 250% 100%;
143
+ background-clip: border-box;
144
+ }
145
+ .metal-gold-border {
146
+ --metal-shimmer-color: gold;
147
+ --metal-stop-dark: var(--color-gold-dark);
148
+ --metal-stop-light: var(--color-gold-light);
149
+ --metal-stop-base: var(--color-gold);
150
+ }
151
+ .metal-silver-border {
152
+ --metal-shimmer-color: silver;
153
+ --metal-stop-dark: var(--color-silver-dark);
154
+ --metal-stop-light: var(--color-silver-light);
155
+ --metal-stop-base: var(--color-silver);
156
+ }
157
+ .metal-bronze-border {
158
+ --metal-shimmer-color: bronze;
159
+ --metal-stop-dark: var(--color-bronze-dark);
160
+ --metal-stop-light: var(--color-bronze-light);
161
+ --metal-stop-base: var(--color-bronze);
162
+ }
163
+
164
+ /* ── The prismatic rainbow rim (the gilt-figure / record-badge sheen) ─────
165
+ COMPOSES W-GLASS-ACCENT's `--glass-accent` rim seam (it binds the accent
166
+ channel, it does NOT re-author the rim `color-mix`/`::before`). The host is
167
+ a glass surface (carrying the `--glass-material-rim` ring + the
168
+ `--glass-border-accent` border W-GLASS-ACCENT minted); this utility drives
169
+ the accent through the spectrum so the rim sheen SHIFTS through the rainbow.
170
+ `--glass-accent` is a typed `<color>` `@property` (NOT animatable as a
171
+ conic per-frame), so the prismatic shift is the swept metal-gradient overlay
172
+ PLUS the accent engaged at a metal-warm hue — the rim reads as a shifting
173
+ metallic sheen over the W-GLASS-ACCENT rim. The accent STRENGTH lifts to a
174
+ rim whisper (the demo specimen engages ~45%, the accent's documented ceiling
175
+ for the rim/glint). The sweep is the SAME `metal-shimmer-sweep` over the
176
+ rainbow band on the host's own background. */
177
+ .metal-rainbow-rim {
178
+ /* Engage W-GLASS-ACCENT's rim seam at a warm-metal hue + the rim whisper
179
+ strength (the accent channel — NOT a second rim recipe). */
180
+ --glass-accent: var(--color-gold);
181
+ --glass-accent-strength: 45%;
182
+ --metal-shimmer-color: rainbow;
183
+ /* The swept prismatic band rides the host's own background-image (the rim
184
+ ring + border come from the W-GLASS-ACCENT seam the host already carries). */
185
+ background-image: linear-gradient(
186
+ 90deg,
187
+ var(--rainbow-red),
188
+ var(--rainbow-orange),
189
+ var(--rainbow-yellow),
190
+ var(--rainbow-green),
191
+ var(--rainbow-blue),
192
+ var(--rainbow-indigo),
193
+ var(--rainbow-violet),
194
+ var(--rainbow-red)
195
+ );
196
+ background-size: 250% 100%;
197
+ background-clip: border-box;
198
+ }
199
+
200
+ /* ── The PRM-static bracket: the ONLY motion declaration ──────────────────
201
+ Every metal utility paints the static gradient above (un-bracketed — the
202
+ metal READS for PRM users); the `animation:` is the sole thing gated. The
203
+ slow `--duration-metal` (6s) clock — the calm dignified pass. */
204
+ @media (prefers-reduced-motion: no-preference) {
205
+ .metal-gold,
206
+ .metal-silver,
207
+ .metal-bronze,
208
+ .metal-gold-border,
209
+ .metal-silver-border,
210
+ .metal-bronze-border,
211
+ .metal-rainbow-rim {
212
+ animation: metal-shimmer-sweep var(--duration-metal) linear infinite;
213
+ }
214
+ }
215
+ }