@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
@@ -24,7 +24,7 @@ body {
24
24
  font-family: var(--font-display);
25
25
  font-size: var(--type-display-audacious);
26
26
  line-height: var(--type-leading-display);
27
- letter-spacing: var(--type-tracking-tight);
27
+ letter-spacing: var(--type-tracking-display);
28
28
  font-optical-sizing: auto;
29
29
  font-weight: 600;
30
30
  /* AQ.W3 §W3.3 — balance multi-line display headlines. Text-only (no box) so
@@ -60,7 +60,7 @@ body {
60
60
  font-family: var(--font-display);
61
61
  font-size: var(--type-display-hero);
62
62
  line-height: var(--type-leading-display);
63
- letter-spacing: var(--type-tracking-tight);
63
+ letter-spacing: var(--type-tracking-display);
64
64
  font-optical-sizing: auto;
65
65
  font-weight: 600;
66
66
  text-wrap: balance; /* AQ.W3 §W3.3 */
@@ -70,7 +70,7 @@ body {
70
70
  font-family: var(--font-display);
71
71
  font-size: var(--type-display-mega);
72
72
  line-height: var(--type-leading-display);
73
- letter-spacing: var(--type-tracking-tight);
73
+ letter-spacing: var(--type-tracking-display);
74
74
  font-optical-sizing: auto;
75
75
  font-weight: 600;
76
76
  text-wrap: balance; /* AQ.W3 §W3.3 */
@@ -80,7 +80,7 @@ body {
80
80
  font-family: var(--font-display);
81
81
  font-size: var(--type-display-5);
82
82
  line-height: var(--type-leading-display);
83
- letter-spacing: var(--type-tracking-tight);
83
+ letter-spacing: var(--type-tracking-display);
84
84
  font-optical-sizing: auto;
85
85
  font-weight: 600;
86
86
  text-wrap: balance; /* AQ.W3 §W3.3 */
@@ -90,7 +90,7 @@ body {
90
90
  font-family: var(--font-display);
91
91
  font-size: var(--type-display-4);
92
92
  line-height: var(--type-leading-display);
93
- letter-spacing: var(--type-tracking-tight);
93
+ letter-spacing: var(--type-tracking-display);
94
94
  font-optical-sizing: auto;
95
95
  font-weight: 600;
96
96
  text-wrap: balance; /* AQ.W3 §W3.3 */
@@ -100,7 +100,7 @@ body {
100
100
  font-family: var(--font-display);
101
101
  font-size: var(--type-display-3);
102
102
  line-height: var(--type-leading-display);
103
- letter-spacing: var(--type-tracking-tight);
103
+ letter-spacing: var(--type-tracking-display);
104
104
  font-optical-sizing: auto;
105
105
  font-weight: 600;
106
106
  text-wrap: balance; /* AQ.W3 §W3.3 */
@@ -110,7 +110,7 @@ body {
110
110
  font-family: var(--font-display);
111
111
  font-size: var(--type-display-2);
112
112
  line-height: var(--type-leading-display);
113
- letter-spacing: var(--type-tracking-tight);
113
+ letter-spacing: var(--type-tracking-display);
114
114
  font-optical-sizing: auto;
115
115
  font-weight: 600;
116
116
  text-wrap: balance; /* AQ.W3 §W3.3 */
@@ -120,7 +120,7 @@ body {
120
120
  font-family: var(--font-display);
121
121
  font-size: var(--type-display-1);
122
122
  line-height: var(--type-leading-display);
123
- letter-spacing: var(--type-tracking-tight);
123
+ letter-spacing: var(--type-tracking-display);
124
124
  font-optical-sizing: auto;
125
125
  font-weight: 600;
126
126
  text-wrap: balance; /* AQ.W3 §W3.3 */
@@ -157,13 +157,26 @@ body {
157
157
  /* Canonical dock control label register — text labels INSIDE
158
158
  `.dock-tab-button` (Start, Next, Submit, …) that want an emphatic character
159
159
  without `.text-heading`'s `font-weight: 700` (which reads as literal bold in
160
- a dock pill). Composes the `--dock-label-size` knob when set (dock.css
161
- audacious mobile carve), else `--type-subheading`. Weight 400 — Plus Jakarta
162
- reads heavier than its numeric weight at pill size, so regular is the
163
- not-bold register. */
160
+ a dock pill). Weight 400 — Plus Jakarta reads heavier than its numeric weight
161
+ at pill size, so regular is the not-bold register.
162
+
163
+ BC.W-AX-DOCK-COCKPIT — the label TRACKS the control height by ratio (the
164
+ dock-oversize chronic close, speedtest A-9): the font is a PROPORTION of the
165
+ control (`calc(var(--dock-control-size) * var(--dock-label-ratio))`) so a
166
+ tighter control (the `[data-preset="cockpit"]` 2.75rem floor + compact chrome)
167
+ carries a proportionally tighter label — never the fixed `--type-subheading`
168
+ rung that read OVERSIZE on a tight pill. The explicit `--dock-label-size` knob
169
+ STILL wins when set (the dock.css audacious-mobile carve precedent, KEPT — the
170
+ ratio is the FALLBACK). The `--dock-label-ratio` default reproduces
171
+ `--type-subheading` at the comfortable `2.5rem` control (sizing.css), so the
172
+ bare default is byte-near-identical; the `--dock-control-size` fallback `2.5rem`
173
+ mirrors the comfortable rung for a label outside a density-painted scope. */
164
174
  @utility dock-label {
165
175
  font-family: var(--font-text);
166
- font-size: var(--dock-label-size, var(--type-subheading));
176
+ font-size: var(
177
+ --dock-label-size,
178
+ calc(var(--dock-control-size, 2.5rem) * var(--dock-label-ratio))
179
+ );
167
180
  line-height: var(--type-leading-body);
168
181
  font-weight: 400;
169
182
  letter-spacing: var(--type-tracking-normal);
@@ -26,12 +26,24 @@
26
26
  /* ═══════════════════════════════════════════════
27
27
  MONO variants
28
28
  ═══════════════════════════════════════════════ */
29
+ /* BB.W-EYEBROW-UNION — THE canonical mono-caption EYEBROW vocabulary, declared
30
+ ONCE. The pure color-agnostic register: mono · caption-size · uppercase ·
31
+ tracking-CAPS. The prior drift (tracking-WIDER 0.05em, weight-500, both off the
32
+ `.section-label` canon-by-usage) is RECONCILED onto the canon's secondary axes
33
+ (clean break, no alias): the tracking folds to `--type-tracking-caps` (0.1em),
34
+ the weight-500 drops (a per-use choice a site states inline via `font-medium`,
35
+ not a fork in the eyebrow register), and color stays UNBAKED so a consumer
36
+ pairs any ink (`text-foreground`/`text-muted-foreground`/an accent) — the 17
37
+ `text-mono-caption text-foreground` sites keep their ink. `.section-label`
38
+ (below) COMPOSES this vocabulary + bakes the muted ink (the colored canon);
39
+ the menu caption reads the `--menu-section-*` knobs that DEFAULT to these same
40
+ tokens (the sanctioned override layer). proof:eyebrow-union locks the
41
+ single-source-ness. */
29
42
  @utility text-mono-caption {
30
43
  font-family: var(--font-mono);
31
44
  font-size: var(--type-caption);
32
- letter-spacing: var(--type-tracking-wider);
45
+ letter-spacing: var(--type-tracking-caps);
33
46
  text-transform: uppercase;
34
- font-weight: 500;
35
47
  }
36
48
 
37
49
  @utility text-mono-small {
@@ -110,13 +122,16 @@
110
122
  }
111
123
  }
112
124
 
113
- /* Section label (mono, small caps) */
125
+ /* Section label (mono, small caps) — the COLORED eyebrow canon. Composes the
126
+ ONE `text-mono-caption` vocabulary (mono · caption · uppercase ·
127
+ tracking-caps) + bakes the muted ink. BB.W-EYEBROW-UNION: this is the
128
+ canon-by-usage register (the StorySection eyebrow column + Section.vue's
129
+ `label` tone + the `.section-label--tinted` accent build on it); it now
130
+ COMPOSES the vocabulary rather than re-declaring it, so a tracking/size
131
+ change to the eyebrow is ONE edit (the `text-mono-caption` rule). */
114
132
  .section-label {
115
- font-family: var(--font-mono);
116
- font-size: var(--type-caption);
133
+ @apply text-mono-caption;
117
134
  color: var(--muted-foreground);
118
- text-transform: uppercase;
119
- letter-spacing: var(--type-tracking-caps);
120
135
  }
121
136
 
122
137
  /* Section-accent eyebrow (AZ.W-SUFFUSE D3-7 / D1-8). ONE coherent
@@ -114,7 +114,7 @@ html.no-transition *:not([data-allow-motion])::after {
114
114
  `min-block/inline-size` only RAISES — a larger explicit size is never lost. */
115
115
  @media (pointer: coarse) {
116
116
  [data-size="icon"],
117
- .expandable-container__trigger,
117
+ [data-part="trigger"],
118
118
  .segmented-tabs__trigger {
119
119
  min-block-size: var(--touch-target, 2.75rem);
120
120
  min-inline-size: var(--touch-target, 2.75rem);
@@ -160,10 +160,25 @@ html.no-transition *:not([data-allow-motion])::after {
160
160
  translate: -50% -50%;
161
161
  min-width: var(--touch-target, 2.75rem);
162
162
  min-height: var(--touch-target, 2.75rem);
163
- /* Inherit the host's pointer-events so a tap within the halo
164
- registers on the atom; the overlay itself is decorative (no
165
- paint), so it never occludes the host's own interaction. */
166
- pointer-events: auto;
163
+ /* BC.W-RADIO-FIX — the swallow-fix (the §F headline binding bug).
164
+ An absolutely-positioned `::before` over the atom with
165
+ `pointer-events: auto` becomes the topmost hit target across the
166
+ whole 44px box and INTERCEPTS the real pointer event before it
167
+ reaches the host's listener — reka's RadioGroupItem / Checkbox /
168
+ Switch / SliderRoot bind their toggle/drag handler on the HOST
169
+ button (Radio.vue `onClick`), and the swallowing overlay was the
170
+ root of "radios don't work" (a synthetic .click() on the host
171
+ still fired, but a real coarse tap landed on the pseudo and
172
+ no-op'd). `pointer-events: none` frees the pointer to fall
173
+ through to the host so the tap reaches reka on EVERY input path,
174
+ while the 44px GEOMETRY still satisfies the WCAG-2.5.5 readback
175
+ (getComputedStyle reads min-width/height, not pointer-events —
176
+ the hit FLOOR is the box, never a pointer-swallowing overlay).
177
+ The same integrity discipline `useDockClickIntegrity` applies to
178
+ the dock + the Slider's own `.slider-thumb.touch-hit-area::before`
179
+ override already discovered (AY.W-SCALE2) — now ONE source for
180
+ the whole six-atom hit-area family. */
181
+ pointer-events: none;
167
182
  }
168
183
  }
169
184
  }
@@ -1,26 +1,29 @@
1
1
  /* utilities/animate.css
2
- The popover/dropdown shared @utility animation pair — popover-animate + slide-in-from-side (the data-state / data-side entry choreography for popover-class containers). FIRST (before the @layer components block, matching source order).
3
- Carved from the utilities.css cascade root; @import-ed by utilities.css in
4
- cascade order. See docs/precepts/design-idioms.md §cohesion-aware partials. */
5
- /* ── Popover/dropdown shared animation ──
6
- `@utility` form (V.W3.T8 / A5 §5.9 standardisation): data-state animation
7
- pair for popover-class containers (Popover, DropdownMenu, ContextMenu,
8
- Tooltip, HoverCard, Select). Composed alongside `.slide-in-from-side`
9
- for direction-keyed entries. */
10
- @utility popover-animate {
11
- @apply data-[state=open]:animate-in data-[state=closed]:animate-out
12
- data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0
13
- data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95;
14
- }
2
+ BB.W-LIQUID-REVEAL — the popover/dropdown shared enter recipe RETIRED.
3
+ @import-ed by utilities.css in cascade order. See
4
+ docs/precepts/design-idioms.md §cohesion-aware partials. */
15
5
 
16
- /* ── Slide-in entry by side data-attr ──
17
- `@utility` form (V.W3.T8). Side-keyed slide entry that pairs with
18
- reka-ui's `data-side` (`top|right|bottom|left`). The animation
19
- direction inverts each side so panels enter from outside the
20
- anchor's edge. */
21
- @utility slide-in-from-side {
22
- @apply data-[side=bottom]:slide-in-from-top-2
23
- data-[side=left]:slide-in-from-right-2
24
- data-[side=right]:slide-in-from-left-2
25
- data-[side=top]:slide-in-from-bottom-2;
26
- }
6
+ /* ── RETIRED at BB.W-LIQUID-REVEAL (clean break, no alias — BB inv-7 no-legacy) ──
7
+ *
8
+ * `@utility popover-animate` (the tw-animate-css fixed-bezier zoom-95 + fade-0 enter)
9
+ * AND `@utility slide-in-from-side` (the data-side directional slide) are DELETED.
10
+ * They were the generic cubic-bezier zoom-95 over the same `--duration-normal` wall
11
+ * clock for every surface — "presses spring, reveals don't" (the §6/W-MOTION-CANON
12
+ * half-applied enter). The SPRING-CLOCKED LIQUID-ENTER recipe `.glass-reveal`
13
+ * (src/styles/glass/reveal.css) REPLACES both:
14
+ * - the scale+fade ride `--spring-snappy` + `--spring-snappy-duration` (the
15
+ * W-GLASS-CAL Unit 3 per-spring clock) with the coupled `filter: blur(4px)→0`
16
+ * light-bending decongest (the iOS-27 bloom);
17
+ * - the directional `slide-in-from-side` folds onto `.glass-reveal`'s `data-side`
18
+ * compositor `translate` leg (on the SAME spring clock).
19
+ *
20
+ * The ≥8 reka portaled overlays (Dialog/Popover/Tooltip/HoverCard/DropdownMenu/
21
+ * ContextMenu/Combobox/Select) compose `.glass-reveal` directly; the
22
+ * `useLiquidReveal` JS leaf (composables/motion/useLiquidReveal.ts) is the
23
+ * source-rect bloom REFINEMENT (the dialog-from-button / dock-from-pill case).
24
+ *
25
+ * Do NOT re-add an unlayered `@utility popover-animate`/`slide-in-from-side` — the
26
+ * recipe is `@layer components` `.glass-reveal`; an unlayered utility would win the
27
+ * cascade over it (the AZ dock-rail `@layer`-loses-to-utility trap). Machine-locked
28
+ * by proof:liquid-reveal R3 (the negative — no enrolled surface retains
29
+ * popover-animate). */
@@ -0,0 +1,307 @@
1
+ /* utilities/base-misc.css
2
+ The @layer components FORM/INTERACTION TAIL — status-dot, depth-text,
3
+ preserve-3d, ios input fix, fading-scroll (scroll-state-driven edge fade) +
4
+ the @supports (animation-timeline: scroll()) native path, deferred-section,
5
+ card-scroll-host, gold-shimmer, kbd.
6
+ BB.W-CARVE3 carved this off utilities/base.css (the post-tap-squish tail) so
7
+ each partial stays under the no-god-module 500-line bound. @import-ed by
8
+ utilities.css IMMEDIATELY AFTER base.css — two adjacent same-`@layer
9
+ components` blocks compose identically, so the dist is byte-isomorphic. The
10
+ @property --fade-start/--fade-end registrations the .fading-scroll rules read
11
+ stay in base.css (source-order BEFORE this partial). See
12
+ docs/precepts/design-idioms.md §cohesion-aware partials. */
13
+
14
+ @layer components {
15
+ /* ── Status dot indicator ── */
16
+ .status-dot {
17
+ display: inline-block;
18
+ width: 0.5rem;
19
+ height: 0.5rem;
20
+ border-radius: var(--radius-pill);
21
+ flex-shrink: 0;
22
+ transition:
23
+ color var(--duration-fast) var(--ease-standard),
24
+ background var(--duration-fast) var(--ease-standard),
25
+ box-shadow var(--duration-fast) var(--ease-standard);
26
+ }
27
+ /* ── Depth text (layered offset stamp) ──
28
+ AW.W26 — composes the `--text-shadow-depth` @theme identity token (the
29
+ hard offset stack + soft ambient tail) instead of a hand-rolled multi-stop
30
+ literal. The token holds the stack inside the `@theme` defs (gate 4) and
31
+ re-tints under `.dark` via `--shadow`/`--shadow-color` BY CONSTRUCTION. */
32
+ .depth-text {
33
+ --depth-color-primary: var(--primary);
34
+
35
+ color: var(--depth-color-primary);
36
+ text-shadow: var(--text-shadow-depth);
37
+ }
38
+
39
+ /* ── 3D preserve ── */
40
+ .preserve-3d {
41
+ transform-style: preserve-3d;
42
+ }
43
+
44
+ /* ── iOS input font-size fix (prevent auto-zoom) ── */
45
+ .ios input,
46
+ .ios select,
47
+ .ios textarea,
48
+ .ios [contenteditable] {
49
+ font-size: max(1rem, 1em);
50
+ }
51
+
52
+ /* ── Fading scroll — the scroll-STATE-driven edge fade (BA.W-FADING-SCROLL) ──
53
+ `<FadingScroll>`'s recipe. Each edge's ramp width is a registered
54
+ `--fade-start` / `--fade-end` custom (above, default 0px = SHARP), driven
55
+ by the
56
+ `scroll(self)` timeline so the start edge feathers only past `scroll > 0`
57
+ and the end edge only while trailing overflow remains.
58
+
59
+ The root IS the scroll port (the component sets overflow via the consumer's
60
+ utilities — `overflow-x-auto` / `overflow-y-auto` come from the class the
61
+ consumer passes; the axis floor below sets the OTHER axis). The 4-stop
62
+ mask reads the two customs; at rest both are 0px so the gradient is a flat
63
+ opaque pass-through (no feather). */
64
+ .fading-scroll {
65
+ /* The base mask is axis-specialized by the modifier classes below. The
66
+ default-x case uses the inline ramp; the y case the block ramp. */
67
+ mask-image: linear-gradient(
68
+ to right,
69
+ transparent 0,
70
+ black var(--fade-start),
71
+ black calc(100% - var(--fade-end)),
72
+ transparent 100%
73
+ );
74
+ }
75
+ .fading-scroll--x {
76
+ overflow-x: auto;
77
+ mask-image: linear-gradient(
78
+ to right,
79
+ transparent 0,
80
+ black var(--fade-start),
81
+ black calc(100% - var(--fade-end)),
82
+ transparent 100%
83
+ );
84
+ }
85
+ .fading-scroll--y {
86
+ overflow-y: auto;
87
+ mask-image: linear-gradient(
88
+ to bottom,
89
+ transparent 0,
90
+ black var(--fade-start),
91
+ black calc(100% - var(--fade-end)),
92
+ transparent 100%
93
+ );
94
+ }
95
+
96
+ /* The NATIVE primary path: drive the per-edge customs off a `scroll(self)`
97
+ timeline — ZERO JS on a supporting engine (the `scroll-driven.css` /
98
+ Baseline-Newly-Available bar). UNLIKE `scroll-driven.css` this is NOT
99
+ wrapped in `prefers-reduced-motion: no-preference` — the fade is a
100
+ LEGIBILITY cue, not motion, so it stays present under PRM (it merely stops
101
+ interpolating; the discrete overflow-edge presence stays correct, and the
102
+ registered customs make even the static endpoints land right). */
103
+ @supports (animation-timeline: scroll()) {
104
+ /* The start edge: from sharp (0) to feathered, completing within the
105
+ first `--fade-scroll-width` of scroll — so at `scroll = 0` the start is
106
+ SHARP and it ramps in only once the user genuinely scrolls past. */
107
+ @keyframes gl-fade-start-in {
108
+ from {
109
+ --fade-start: 0px;
110
+ }
111
+ to {
112
+ --fade-start: var(--fade-scroll-width);
113
+ }
114
+ }
115
+ /* The end edge: feathered while trailing overflow remains, ramping OUT to
116
+ sharp over the last `--fade-scroll-width` of scroll — so at the scroll
117
+ end (no trailing overflow) the end is SHARP. */
118
+ @keyframes gl-fade-end-out {
119
+ from {
120
+ --fade-end: var(--fade-scroll-width);
121
+ }
122
+ to {
123
+ --fade-end: 0px;
124
+ }
125
+ }
126
+ /* x axis — `scroll(self inline)`; two animations on the ONE element, each
127
+ gated by `animation-range` to the start / end sliver of the scroll
128
+ distance. `fadeStart`/`fadeEnd` props toggle their respective
129
+ animation off via the `[data-fade-*]` presence attrs. */
130
+ .fading-scroll--x[data-fade-start] {
131
+ animation: gl-fade-start-in linear both;
132
+ animation-timeline: scroll(self inline);
133
+ animation-range: 0 var(--fade-scroll-width);
134
+ }
135
+ .fading-scroll--x[data-fade-end] {
136
+ animation: gl-fade-end-out linear both;
137
+ animation-timeline: scroll(self inline);
138
+ animation-range: calc(100% - var(--fade-scroll-width)) 100%;
139
+ }
140
+ /* BOTH edges on one element compose as two named animations. */
141
+ .fading-scroll--x[data-fade-start][data-fade-end] {
142
+ animation:
143
+ gl-fade-start-in linear both,
144
+ gl-fade-end-out linear both;
145
+ animation-timeline: scroll(self inline), scroll(self inline);
146
+ animation-range:
147
+ 0 var(--fade-scroll-width),
148
+ calc(100% - var(--fade-scroll-width)) 100%;
149
+ }
150
+ /* y axis — `scroll(self block)`. */
151
+ .fading-scroll--y[data-fade-start] {
152
+ animation: gl-fade-start-in linear both;
153
+ animation-timeline: scroll(self block);
154
+ animation-range: 0 var(--fade-scroll-width);
155
+ }
156
+ .fading-scroll--y[data-fade-end] {
157
+ animation: gl-fade-end-out linear both;
158
+ animation-timeline: scroll(self block);
159
+ animation-range: calc(100% - var(--fade-scroll-width)) 100%;
160
+ }
161
+ .fading-scroll--y[data-fade-start][data-fade-end] {
162
+ animation:
163
+ gl-fade-start-in linear both,
164
+ gl-fade-end-out linear both;
165
+ animation-timeline: scroll(self block), scroll(self block);
166
+ animation-range:
167
+ 0 var(--fade-scroll-width),
168
+ calc(100% - var(--fade-scroll-width)) 100%;
169
+ }
170
+ }
171
+
172
+ /* ── Deferred section — render-skip an offscreen subtree (AQ.W3 §5) ──────
173
+ `content-visibility: auto` skips layout/paint/style of an offscreen
174
+ subtree — the INP-under-load lever (fourier γ, muster, speedtest, words).
175
+ `contain-intrinsic-size: auto <estimate>` is measurement-safe: the `auto`
176
+ prefix makes the engine REMEMBER the last-rendered size (no scroll-jump on
177
+ re-entry); plain `<estimate>` freezes the section + thrashes the scrollbar
178
+ — the trap this closes. Estimate is token-driven (`--deferred-section-
179
+ size`, default 30rem). `.deferred-section--cached` →
180
+ `content-visibility: hidden` (always skipped, state CACHED — cheaper to
181
+ re-show than `display:none`). Baseline Widely; unsupporting engines render
182
+ normally. JS HOOK: the engine fires `contentvisibilityautostatechange`
183
+ { skipped } at the render-skip boundary — pair with `useRAFLoop`
184
+ pause/resume: `el.addEventListener('contentvisibilityautostatechange',
185
+ e => e.skipped ? loop.pause() : loop.resume())`. */
186
+ .deferred-section {
187
+ content-visibility: auto;
188
+ contain-intrinsic-size: auto var(--deferred-section-size, 30rem);
189
+ }
190
+ .deferred-section--cached {
191
+ content-visibility: hidden;
192
+ contain-intrinsic-size: auto var(--deferred-section-size, 30rem);
193
+ }
194
+
195
+ /* ── Card scroll-timeline host (AI.W1-α) ───────────────────────────────
196
+ Canonical scroll-overflow host that emits the `--card-scroll` named
197
+ scroll-timeline consumed by `<CardHeader shrink>`. Apply to the
198
+ scroll-overflow ancestor (typically the `<Card>` itself OR a wrapper
199
+ inside it that carries `overflow-y: auto`).
200
+
201
+ `contain: layout style paint` isolates the named timeline so child
202
+ animations respond to THIS host's scroll only — not to portal-
203
+ triggered layout shifts in ancestor containers (the load-bearing
204
+ isolation guarantee the value.js `PaneHeader.vue:18-29` comment
205
+ called out and the AI.W1 spec §1.2 ratified as canon).
206
+
207
+ Disambiguated from `.fading-scroll` (the `<FadingScroll>` mask-image
208
+ edge fade at the container's leading/trailing edge) — `.card-scroll-host`
209
+ does NOT paint any visual; it only emits the timeline. */
210
+ .card-scroll-host {
211
+ contain: layout style paint;
212
+ scroll-timeline: --card-scroll block;
213
+ }
214
+
215
+ /* ── Stable scroll gutter — the no-shift discipline for overlay-hosting
216
+ route scrollers (BC.W-DROPDOWN-FIX) ──────────────────────────────────
217
+ An app-shell route scroller that hosts portaled picker/menu overlays
218
+ (Select / DropdownMenu / any reka overlay that locks body scroll on open)
219
+ RESERVES a stable scrollbar gutter so the lock-induced scrollbar removal
220
+ removes no layout space — the centred content does not reflow and the
221
+ trigger does not twitch left/right (USER-DEFECTS §F, the classic
222
+ space-taking-scrollbar reflow).
223
+
224
+ PRESETS-IN-CONSUMERS: the library ships the named discipline; the CONSUMER
225
+ app-shell opts its OWN route scroller in (the demo `.demo-main-scroller`
226
+ is the reference adoption). glass-ui does not force `scrollbar-gutter` on
227
+ every consumer's scroller — it provides this utility + the canon note.
228
+
229
+ Baseline-newly-available: Chrome 94+, Firefox 97+, Safari 18.2+ — a
230
+ non-supporting engine ignores the property (the gutter just isn't
231
+ reserved, the legacy behaviour). */
232
+ .scroll-gutter-stable {
233
+ scrollbar-gutter: stable;
234
+ }
235
+
236
+ /* ── Shimmer text effects ──
237
+ BB.W-METAL-SHIMMER — the gold-only `gold-shimmer-slide` is RETIRED (clean
238
+ break, no alias); `.gold-shimmer` re-points onto the metal-PARAMETERIZED
239
+ `metal-shimmer-sweep` keyframe with `--metal-shimmer-color: gold`. The gold
240
+ gradient stops + the `background-size`/`background-clip` + the PRM bracket are
241
+ byte-PRESERVED — the gold READ is unchanged; only the keyframe NAME generalizes.
242
+ The text-fill + background-clip composition is load-bearing visual (the gold
243
+ gradient itself); only the `animation:` line is wrapped in the PRM no-preference
244
+ bracket so PRM users see the static gradient without the slide. */
245
+ .gold-shimmer {
246
+ --metal-shimmer-color: gold;
247
+ background: linear-gradient(90deg, var(--color-gold-dark), var(--color-gold-light), var(--color-gold), var(--color-gold-light), var(--color-gold-dark));
248
+ background-size: 250% 100%;
249
+ background-clip: text;
250
+ -webkit-background-clip: text;
251
+ color: transparent;
252
+ }
253
+ @media (prefers-reduced-motion: no-preference) {
254
+ .gold-shimmer {
255
+ animation: metal-shimmer-sweep var(--duration-shimmer) linear infinite;
256
+ }
257
+ }
258
+
259
+ /* ── Keyboard key ── */
260
+ .kbd {
261
+ display: inline-flex;
262
+ align-items: center;
263
+ justify-content: center;
264
+ min-height: 1.5rem;
265
+ min-width: 1.5rem;
266
+ padding: 0 0.375rem;
267
+ font-family: var(--font-mono);
268
+ font-size: var(--type-micro);
269
+ background: var(--muted);
270
+ border: 1px solid var(--border);
271
+ border-radius: var(--radius-sm);
272
+ box-shadow: 0 1px 0 1px color-mix(in srgb, var(--border) 30%, transparent);
273
+ line-height: 1;
274
+ }
275
+
276
+ }
277
+
278
+ /* ── @utility ghost-slot (BC.W-GHOST-DASHED) ────────────────────────────────
279
+ The ONE dashed-outline placeholder register: everywhere a slot is empty / a
280
+ thing is a placeholder / an affordance is "add something here", the surface
281
+ reads this — a dashed-outline plate, consistently rounded (--radius-card),
282
+ calm-muted, that reads unmistakably "this is a placeholder, not a filled
283
+ surface." The 6 ad-hoc `rounded-{md,2xl,card} border border-dashed
284
+ border-border bg-{card,background}` forks (three radii, three hosts, three
285
+ pads) COLLAPSE onto this ONE register: ONE radius, ONE faint-wash host, ONE
286
+ muted ink, ONE warm dashed hairline.
287
+
288
+ WARM-NOT-GREY (BA.W-NO-GRAY): the dashed hairline is the warm-ink at 22%
289
+ (a color-mix off --foreground, the warm identity), NEVER a grey
290
+ `border-border` — the ghost must read warm-material, not grey.
291
+
292
+ GLASS-ADJACENT, not opaque: the host is a faint glass-wash (the rebuilt W55
293
+ material reads THROUGH it), NOT a flat opaque `bg-card` slab — so the ghost
294
+ reads "empty," not "filled," and the D1 grey-plate regression cannot re-enter
295
+ through the placeholder.
296
+
297
+ THE FENCE (binding both ways): this is the RECTANGULAR-placeholder register.
298
+ The `WatercolorDot variant="ghost"` (the seeded-blob SILHOUETTE traced as a
299
+ dashed stroke — the empty-PALETTE-slot affordance) is a DISTINCT register;
300
+ neither forks the other. .ghost-slot is never applied to a blob-silhouette
301
+ slot, and the watercolor ghost never adopts this rectangle recipe. */
302
+ @utility ghost-slot {
303
+ border: 1px dashed color-mix(in srgb, var(--foreground) 22%, transparent);
304
+ border-radius: var(--radius-card);
305
+ background: color-mix(in oklab, var(--glass-bg-wash), transparent 40%);
306
+ color: var(--muted-foreground);
307
+ }