@mkbabb/glass-ui 4.0.1 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (606) hide show
  1. package/dist/{CardAction-CW7a0m8M.js → CardAction-DlVP2evz.js} +72 -53
  2. package/dist/{CommandShortcut-DvZNQ_HF.js → CommandShortcut-By-VQcLO.js} +25 -14
  3. package/dist/{ConfiguratorRow-BR4l-ixA.js → ConfiguratorRow-YMXdINHx.js} +14 -14
  4. package/dist/ContextMenuContent-CMWn6huB.js +90 -0
  5. package/dist/{ContextMenuSubContent-xol4sD2q.js → ContextMenuSubContent-DvwWCUc0.js} +16 -16
  6. package/dist/{DataTable-CuKwF7wr.js → DataTable-C4tG3eIJ.js} +4 -4
  7. package/dist/DialogContent-D8U9ZfWS.js +121 -0
  8. package/dist/DialogFooter-DoLy0ewI.js +80 -0
  9. package/dist/DialogScrollContent-BMekN7gq.js +93 -0
  10. package/dist/{FadingScroll-DI6hQhT9.js → FadingScroll-P8B30rAD.js} +1 -1
  11. package/dist/HoverCardContent-DAmGYglo.js +88 -0
  12. package/dist/{HoverPopover-CbqbNwgU.js → HoverPopover-DYpBOzzF.js} +1 -1
  13. package/dist/{IconChip-BTD-nay5.js → IconChip-CQa7XZYc.js} +7 -5
  14. package/dist/{IconTooltip-Bl8gFZ8d.js → IconTooltip-_df8M3xm.js} +1 -1
  15. package/dist/Input-CyU4_hIC.js +57 -0
  16. package/dist/{MetricBadge-RHdBP72w.js → MetricBadge-DQt_dGah.js} +1 -1
  17. package/dist/{Notification-VUwexFUf.js → Notification-BlSPJhtZ.js} +4 -4
  18. package/dist/NumberFieldContent-Z3VxGu_6.js +140 -0
  19. package/dist/PagerDots-CYlqVFd4.js +196 -0
  20. package/dist/PaperBackdrop-DYWgrnh8.js +42 -0
  21. package/dist/{PopoverContent-DL7E6vJP.js → PopoverContent-BuKyHZSz.js} +2 -2
  22. package/dist/{Progress-DctG61iZ.js → Progress-C9SsdwIZ.js} +1 -1
  23. package/dist/{ScrollingText-yOpBzFYq.js → ScrollingText-DY3W1Jfh.js} +2 -2
  24. package/dist/SelectScrollDownButton-3mFHX_R-.js +260 -0
  25. package/dist/{SelectSeparator-DXswVdRz.js → SelectSeparator-CNRGG7Ew.js} +1 -1
  26. package/dist/Separator-Cf9-JFgi.js +44 -0
  27. package/dist/Switch-uf-UKPA2.js +49 -0
  28. package/dist/{Toaster-Bw4xR8xV.js → Toaster-ozrsR4mP.js} +2 -2
  29. package/dist/{ToggleGroupItem-pEM9vIhs.js → ToggleGroupItem-BpzaVzNm.js} +6 -6
  30. package/dist/TooltipProvider-QQVM_80r.js +109 -0
  31. package/dist/animated-digit.js +2 -2
  32. package/dist/api/index.d.ts +16 -32
  33. package/dist/api/types-extra.d.ts +33 -0
  34. package/dist/api.js +2 -2
  35. package/dist/aurora.js +629 -269
  36. package/dist/badge-Bt14yURi.js +72 -0
  37. package/dist/badge.js +1 -1
  38. package/dist/border-progress.js +49 -57
  39. package/dist/button-D1W9PrzI.js +130 -0
  40. package/dist/button.js +1 -1
  41. package/dist/canvas.js +2 -3
  42. package/dist/card.js +1 -1
  43. package/dist/carousel.js +235 -106
  44. package/dist/chipVariants-BJQ0I2kB.js +18 -0
  45. package/dist/collapsible.js +1 -1
  46. package/dist/color-B9jZdhJX.js +116 -0
  47. package/dist/color.js +2 -2
  48. package/dist/command.js +1 -1
  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/color.d.ts +13 -0
  53. package/dist/components/custom/aurora/composables/frameLoop.d.ts +9 -0
  54. package/dist/components/custom/aurora/composables/glSetup.d.ts +1 -1
  55. package/dist/components/custom/aurora/composables/runtime.d.ts +12 -0
  56. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +12 -3
  57. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +8 -0
  58. package/dist/components/custom/aurora/constants/presets.d.ts +47 -0
  59. package/dist/components/custom/aurora/constants/renderMode.d.ts +16 -8
  60. package/dist/components/custom/aurora/constants/shaders/aurora-mediums.wgsl.d.ts +1 -0
  61. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -1
  62. package/dist/components/custom/aurora/index.d.ts +1 -1
  63. package/dist/components/custom/border-progress/composables/spectrum-walk.d.ts +25 -0
  64. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +14 -18
  65. package/dist/components/custom/border-progress/index.d.ts +1 -1
  66. package/dist/components/custom/completion-seal/CompletionSeal.vue.d.ts +21 -0
  67. package/dist/components/custom/completion-seal/composables/useCompletionSeal.d.ts +37 -0
  68. package/dist/components/custom/completion-seal/constants.d.ts +46 -0
  69. package/dist/components/custom/completion-seal/index.d.ts +4 -0
  70. package/dist/components/custom/concentric/Concentric.vue.d.ts +15 -12
  71. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +12 -0
  72. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +13 -0
  73. package/dist/components/custom/concentric/composables/levelField.d.ts +50 -0
  74. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +7 -3
  75. package/dist/components/custom/concentric/composables/useConcentric.d.ts +3 -3
  76. package/dist/components/custom/concentric/constants.d.ts +69 -24
  77. package/dist/components/custom/concentric/index.d.ts +2 -2
  78. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +2 -2
  79. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -1
  80. package/dist/components/custom/configurator/Configurator.vue.d.ts +23 -2
  81. package/dist/components/custom/configurator/index.d.ts +1 -1
  82. package/dist/components/custom/confirm-dialog/ConfirmDialog.vue.d.ts +3 -3
  83. package/dist/components/custom/constellation/Constellation.vue.d.ts +5 -4
  84. package/dist/components/custom/constellation/composables/constellationGLSetup.d.ts +10 -0
  85. package/dist/components/custom/constellation/composables/constellationWGPUSetup.d.ts +19 -0
  86. package/dist/components/custom/constellation/composables/uniformBridgeWGPU.d.ts +66 -0
  87. package/dist/components/custom/constellation/composables/useConstellation.d.ts +3 -10
  88. package/dist/components/custom/constellation/constants.d.ts +33 -0
  89. package/dist/components/custom/constellation/constellationField.d.ts +31 -1
  90. package/dist/components/custom/constellation/constellationInteraction.d.ts +23 -14
  91. package/dist/components/custom/constellation/constellationRender.d.ts +25 -0
  92. package/dist/components/custom/constellation/constellationTypes.d.ts +38 -0
  93. package/dist/components/custom/constellation/constellationWell.d.ts +15 -0
  94. package/dist/components/custom/constellation/index.d.ts +5 -5
  95. package/dist/components/custom/constellation/shaders/constellation-lines.glsl.d.ts +2 -0
  96. package/dist/components/custom/constellation/shaders/constellation-lines.wgsl.d.ts +1 -0
  97. package/dist/components/custom/constellation/shaders/constellation-points.glsl.d.ts +2 -0
  98. package/dist/components/custom/constellation/shaders/constellation-points.wgsl.d.ts +1 -0
  99. package/dist/components/custom/deck/DeckPager.vue.d.ts +29 -0
  100. package/dist/components/custom/deck/composables/useDeck.d.ts +27 -0
  101. package/dist/components/custom/deck/composables/useDeckKeyboard.d.ts +25 -0
  102. package/dist/components/custom/deck/composables/useDeckSpring.d.ts +22 -0
  103. package/dist/components/custom/deck/constants.d.ts +14 -0
  104. package/dist/components/custom/deck/index.d.ts +8 -0
  105. package/dist/components/custom/dock/DockDropdownTrigger.vue.d.ts +4 -3
  106. package/dist/components/custom/dock/DockIconButton.vue.d.ts +22 -0
  107. package/dist/components/custom/dock/DockPopoverTrigger.vue.d.ts +19 -0
  108. package/dist/components/custom/dock/DockStack.vue.d.ts +78 -0
  109. package/dist/components/custom/dock/GlassDock.vue.d.ts +21 -3
  110. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +18 -32
  111. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +78 -67
  112. package/dist/components/custom/dock/composables/index.d.ts +3 -0
  113. package/dist/components/custom/dock/composables/railProjection.d.ts +45 -0
  114. package/dist/components/custom/dock/composables/useDockContextSilhouette.d.ts +192 -0
  115. package/dist/components/custom/dock/composables/useDockFission.d.ts +158 -0
  116. package/dist/components/custom/dock/composables/useDockItemDrag.d.ts +18 -0
  117. package/dist/components/custom/dock/composables/useDockSearch.d.ts +85 -0
  118. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +49 -0
  119. package/dist/components/custom/dock/constants.d.ts +32 -17
  120. package/dist/components/custom/dock/index.d.ts +8 -2
  121. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +15 -11
  122. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +69 -6
  123. package/dist/components/custom/dot-flow-field/composables/flowGLProgram.d.ts +8 -0
  124. package/dist/components/custom/dot-flow-field/composables/flowSetupGL.d.ts +9 -0
  125. package/dist/components/custom/dot-flow-field/composables/flowSetupGLFlow.d.ts +12 -0
  126. package/dist/components/custom/dot-flow-field/composables/flowSetupWGPU.d.ts +7 -0
  127. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +50 -9
  128. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +6 -5
  129. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +23 -9
  130. package/dist/components/custom/dot-flow-field/constants.d.ts +92 -20
  131. package/dist/components/custom/dot-flow-field/index.d.ts +2 -2
  132. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -1
  133. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +31 -18
  134. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +2 -1
  135. package/dist/components/custom/dot-matrix/DotMatrix.vue.d.ts +43 -0
  136. package/dist/components/custom/dot-matrix/composables/dotMatrixField.d.ts +89 -0
  137. package/dist/components/custom/dot-matrix/composables/uniformBridgeWGPU.d.ts +61 -0
  138. package/dist/components/custom/dot-matrix/composables/useDotMatrix.d.ts +34 -0
  139. package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +34 -0
  140. package/dist/components/custom/dot-matrix/constants.d.ts +72 -0
  141. package/dist/components/custom/dot-matrix/index.d.ts +5 -0
  142. package/dist/components/custom/dot-matrix/shaders/dot-matrix.glsl.d.ts +4 -0
  143. package/dist/components/custom/dot-matrix/shaders/dot-matrix.wgsl.d.ts +1 -0
  144. package/dist/components/custom/easing/EasingPicker.vue.d.ts +2 -2
  145. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +5 -0
  146. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +11 -0
  147. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +44 -47
  148. package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +24 -0
  149. package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +31 -0
  150. package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +56 -0
  151. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +61 -37
  152. package/dist/components/custom/fourier-field/constants.d.ts +114 -4
  153. package/dist/components/custom/fourier-field/index.d.ts +23 -18
  154. package/dist/components/custom/fourier-field/shaders/fourier-field.compute.wgsl.d.ts +1 -0
  155. package/dist/components/custom/fourier-field/shaders/fourier-field.glsl.d.ts +4 -0
  156. package/dist/components/custom/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -0
  157. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +9 -1
  158. package/dist/components/custom/goo-blob/composables/easing.d.ts +1 -0
  159. package/dist/components/custom/goo-blob/composables/useBlobSatellites.d.ts +1 -0
  160. package/dist/components/custom/goo-blob/constants.d.ts +26 -1
  161. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  162. package/dist/components/custom/goo-blob/shaders/metaball-noise.wgsl.d.ts +1 -0
  163. package/dist/components/custom/goo-blob/shaders/metaball-palette.wgsl.d.ts +1 -0
  164. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -1
  165. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -1
  166. package/dist/components/custom/goo-blob/types.d.ts +86 -1
  167. package/dist/components/custom/goo-dot-matrix/GooDotMatrix.vue.d.ts +49 -0
  168. package/dist/components/custom/goo-dot-matrix/composables/gooDotLattice.d.ts +24 -0
  169. package/dist/components/custom/goo-dot-matrix/composables/gooDotSetup.d.ts +79 -0
  170. package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +45 -0
  171. package/dist/components/custom/goo-dot-matrix/composables/useGooDotMatrix.d.ts +31 -0
  172. package/dist/components/custom/goo-dot-matrix/constants.d.ts +115 -0
  173. package/dist/components/custom/goo-dot-matrix/index.d.ts +5 -0
  174. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.frag.d.ts +13 -0
  175. package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +4 -0
  176. package/dist/components/custom/goo-filter/GooFilter.vue.d.ts +22 -0
  177. package/dist/components/custom/goo-filter/index.d.ts +1 -0
  178. package/dist/components/custom/handmark/brush.d.ts +17 -17
  179. package/dist/components/custom/handmark/constants.d.ts +28 -8
  180. package/dist/components/custom/handmark/geometry.d.ts +34 -1
  181. package/dist/components/custom/handmark/index.d.ts +1 -1
  182. package/dist/components/custom/icon-chip/types.d.ts +10 -0
  183. package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +21 -2
  184. package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +15 -0
  185. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +9 -0
  186. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  187. package/dist/components/custom/pager-dots/pagerWindow.d.ts +9 -0
  188. package/dist/components/custom/paper-backdrop/PaperBackdrop.vue.d.ts +18 -0
  189. package/dist/components/custom/paper-grid/PaperGrid.vue.d.ts +42 -0
  190. package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +105 -0
  191. package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +18 -0
  192. package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +21 -0
  193. package/dist/components/custom/paper-grid/composables/uniformBridgeWGPU.d.ts +16 -0
  194. package/dist/components/custom/paper-grid/composables/usePaperGrid.d.ts +31 -0
  195. package/dist/components/custom/paper-grid/constants.d.ts +95 -0
  196. package/dist/components/custom/paper-grid/index.d.ts +5 -0
  197. package/dist/components/custom/paper-grid/shaders/paper-grid.glsl.d.ts +4 -0
  198. package/dist/components/custom/paper-grid/shaders/paper-grid.wgsl.d.ts +1 -0
  199. package/dist/components/custom/search/FuzzySearch.vue.d.ts +8 -2
  200. package/dist/components/custom/search/SearchBar.vue.d.ts +8 -0
  201. package/dist/components/custom/search/index.d.ts +2 -0
  202. package/dist/components/custom/search/searchVariants.d.ts +19 -0
  203. package/dist/components/custom/selectable-chip/SelectableChip.vue.d.ts +50 -0
  204. package/dist/components/custom/selectable-chip/chipVariants.d.ts +39 -0
  205. package/dist/components/custom/selectable-chip/index.d.ts +2 -0
  206. package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +15 -0
  207. package/dist/components/custom/split-chars/SplitChars.vue.d.ts +39 -0
  208. package/dist/components/custom/split-chars/index.d.ts +1 -0
  209. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +8 -6
  210. package/dist/components/custom/tabs/constants.d.ts +28 -2
  211. package/dist/components/custom/timeline/ScrubberTimeline.vue.d.ts +16 -0
  212. package/dist/components/custom/timeline/geometry.d.ts +0 -8
  213. package/dist/components/custom/toggle-chip/index.d.ts +15 -4
  214. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +32 -17
  215. package/dist/components/custom/watercolor-dot/useWatercolorBlob.d.ts +10 -5
  216. package/dist/components/ui/_shared/index.d.ts +2 -0
  217. package/dist/components/ui/_shared/useControlSize.d.ts +46 -0
  218. package/dist/components/ui/_shared/useSurfaceAxis.d.ts +17 -3
  219. package/dist/components/ui/badge/Badge.vue.d.ts +14 -0
  220. package/dist/components/ui/badge/index.d.ts +1 -0
  221. package/dist/components/ui/button/Button.vue.d.ts +1 -0
  222. package/dist/components/ui/button/index.d.ts +1 -1
  223. package/dist/components/ui/card/Card.vue.d.ts +46 -1
  224. package/dist/components/ui/card/ScrollCard.vue.d.ts +1 -1
  225. package/dist/components/ui/card/index.d.ts +1 -1
  226. package/dist/components/ui/carousel/CarouselContent.vue.d.ts +2 -4
  227. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +1 -1
  228. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +1 -1
  229. package/dist/components/ui/command/CommandDialog.vue.d.ts +9 -3
  230. package/dist/components/ui/command/CommandList.vue.d.ts +3 -0
  231. package/dist/components/ui/context-menu/ContextMenuContent.vue.d.ts +5 -1
  232. package/dist/components/ui/dialog/DialogContent.vue.d.ts +9 -0
  233. package/dist/components/ui/drawer/Drawer.vue.d.ts +33 -14
  234. package/dist/components/ui/drawer/constants.d.ts +8 -6
  235. package/dist/components/ui/drawer/index.d.ts +12 -2
  236. package/dist/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +4 -0
  237. package/dist/components/ui/hover-card/HoverCardContent.vue.d.ts +3 -0
  238. package/dist/components/ui/input/Input.vue.d.ts +3 -0
  239. package/dist/components/ui/number-field/NumberFieldInput.vue.d.ts +6 -1
  240. package/dist/components/ui/select/SelectContent.vue.d.ts +12 -0
  241. package/dist/components/ui/slider/Slider.vue.d.ts +9 -0
  242. package/dist/components/ui/switch/Switch.vue.d.ts +2 -0
  243. package/dist/components/ui/textarea/Textarea.vue.d.ts +3 -0
  244. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +3 -0
  245. package/dist/composables/color/index.d.ts +2 -0
  246. package/dist/composables/color/useAccentTone.d.ts +34 -0
  247. package/dist/composables/dom/index.d.ts +1 -0
  248. package/dist/composables/dom/useDragVelocity.d.ts +46 -0
  249. package/dist/composables/glass/useVizChoreography.d.ts +123 -0
  250. package/dist/composables/glass/wave/index.d.ts +4 -0
  251. package/dist/composables/glass/wave/waveField.d.ts +115 -0
  252. package/dist/composables/glass/wave/waveField.glsl.d.ts +1 -0
  253. package/dist/composables/glass/wave/waveField.wgsl.d.ts +1 -0
  254. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +105 -2
  255. package/dist/composables/glass/webgl/shaders/flow.wgsl.d.ts +1 -0
  256. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +40 -2
  257. package/dist/composables/glass/webgpu/index.d.ts +2 -1
  258. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +65 -7
  259. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +50 -2
  260. package/dist/composables/glass/webgpu/webgpuDevice.d.ts +42 -0
  261. package/dist/composables/motion/core/index.d.ts +7 -0
  262. package/dist/composables/motion/core/useHaptic.d.ts +48 -0
  263. package/dist/composables/motion/core/writeVelocityWeight.d.ts +31 -0
  264. package/dist/composables/motion/index.d.ts +2 -0
  265. package/dist/composables/motion/scrollReader.d.ts +25 -0
  266. package/dist/composables/motion/springPresets.d.ts +19 -1
  267. package/dist/composables/motion/suite.d.ts +2 -2
  268. package/dist/composables/motion/useBloomUp.d.ts +97 -0
  269. package/dist/composables/motion/useCelebrationBurst.d.ts +50 -0
  270. package/dist/composables/motion/useCharStagger.d.ts +44 -0
  271. package/dist/composables/motion/useDockCtaReceive.d.ts +29 -22
  272. package/dist/composables/motion/useGooMorph.d.ts +72 -0
  273. package/dist/composables/motion/useLiquidFlex.d.ts +18 -0
  274. package/dist/composables/motion/useLiquidMorph.d.ts +108 -0
  275. package/dist/composables/motion/useLiquidPress.d.ts +12 -0
  276. package/dist/composables/motion/useLiquidReveal.d.ts +7 -4
  277. package/dist/composables/motion/useMorphField.d.ts +157 -0
  278. package/dist/composables/motion/useScrollChrome.d.ts +58 -0
  279. package/dist/composables/motion/useScrollPin.d.ts +49 -0
  280. package/dist/composables/motion/useScrollScene.d.ts +67 -0
  281. package/dist/composables/motion/useScrollTrigger.d.ts +67 -0
  282. package/dist/composables/motion/useSpringPress.d.ts +5 -5
  283. package/dist/composables/motion/useStaggerReveal.d.ts +24 -0
  284. package/dist/composables/sidebar/index.d.ts +4 -1
  285. package/dist/composables/sidebar/types.d.ts +68 -3
  286. package/dist/composables/sidebar/useClickDelegate.d.ts +4 -0
  287. package/dist/composables/sidebar/useLazyLoader.d.ts +5 -0
  288. package/dist/composables/sidebar/useScrollTo.d.ts +5 -0
  289. package/dist/composables/virtual/index.d.ts +4 -0
  290. package/dist/composables/virtual/useVirtualSectionWindow.d.ts +72 -0
  291. package/dist/composables/virtual/useWindowedStore.d.ts +43 -0
  292. package/dist/composables/virtual/virtualSectionLayout.d.ts +103 -0
  293. package/dist/concentric.js +552 -309
  294. package/dist/configurator.js +2 -2
  295. package/dist/confirm-dialog.js +62 -47
  296. package/dist/constellation.js +635 -235
  297. package/dist/context-menu.js +2 -2
  298. package/dist/controls.js +2 -2
  299. package/dist/createCanvasLifecycle-CuCrGRfq.js +173 -0
  300. package/dist/dark.js +1 -1
  301. package/dist/data-table.js +1 -1
  302. package/dist/deck.d.ts +1 -0
  303. package/dist/deck.js +105 -0
  304. package/dist/dialog.js +4 -3
  305. package/dist/dock.js +1320 -631
  306. package/dist/dockContext-gFVS2gMg.js +18 -0
  307. package/dist/dom.js +7 -6
  308. package/dist/dot-flow-field.js +1268 -387
  309. package/dist/dot-matrix.d.ts +1 -0
  310. package/dist/dot-matrix.js +774 -0
  311. package/dist/dotMatrixField-CRO0ZFk4.js +48 -0
  312. package/dist/drawer.js +106 -96
  313. package/dist/{dropdown-menu-CofSZuk8.js → dropdown-menu-CCfcCQ68.js} +83 -79
  314. package/dist/dropdown-menu.js +1 -1
  315. package/dist/easing.js +188 -176
  316. package/dist/expandable-container.js +43 -21
  317. package/dist/fading-scroll.js +1 -1
  318. package/dist/flow.glsl-DqEGRpl4.js +4 -0
  319. package/dist/forms.js +64 -62
  320. package/dist/fourier-field.js +1069 -178
  321. package/dist/fourier-math.js +1 -1
  322. package/dist/glass-panel.js +2 -2
  323. package/dist/glass-ui.css +1 -1
  324. package/dist/glass-ui.js +164 -119
  325. package/dist/goo-blob.js +175 -1230
  326. package/dist/goo-dot-matrix.d.ts +1 -0
  327. package/dist/goo-dot-matrix.js +811 -0
  328. package/dist/handmark.js +137 -94
  329. package/dist/header-ribbon.js +1 -1
  330. package/dist/hover-card.js +1 -1
  331. package/dist/hover-popover.js +1 -1
  332. package/dist/icon-chip.js +1 -1
  333. package/dist/icon-tooltip.js +1 -1
  334. package/dist/index.d.ts +5 -0
  335. package/dist/instrument-chassis.js +1 -1
  336. package/dist/keyboard.js +1 -1
  337. package/dist/label.js +1 -1
  338. package/dist/labeled-field.js +70 -60
  339. package/dist/metric-badge.js +1 -1
  340. package/dist/metric-cell.js +1 -1
  341. package/dist/metric-stack.js +12 -3
  342. package/dist/motion-core.js +59 -34
  343. package/dist/motion-curves.js +30 -14
  344. package/dist/motion.js +231 -96
  345. package/dist/notification.js +1 -1
  346. package/dist/number-field.js +1 -1
  347. package/dist/pager-dots.js +2 -91
  348. package/dist/paper-backdrop.js +1 -1
  349. package/dist/paper-grid.d.ts +1 -0
  350. package/dist/paper-grid.js +761 -0
  351. package/dist/paperGrid-CXCSMbZ1.js +191 -0
  352. package/dist/popover.js +1 -1
  353. package/dist/{presets-BW2b-fr1.js → presets-QvYgnFIZ.js} +14 -13
  354. package/dist/{procedural-color.glsl-CIFsJhwI.js → procedural-color.wgsl-C1Y5PkM6.js} +2 -2
  355. package/dist/progress.js +1 -1
  356. package/dist/pulse.js +2 -2
  357. package/dist/reactive.js +2 -2
  358. package/dist/{useCanvas2D-B8w_E3Rr.js → resolveCanvasColor-DsSJk06I.js} +16 -6
  359. package/dist/scrollReader-rc3Ns_NM.js +42 -0
  360. package/dist/scrolling-text.js +1 -1
  361. package/dist/search.js +162 -306
  362. package/dist/select.js +3 -3
  363. package/dist/selectable-chip.d.ts +1 -0
  364. package/dist/selectable-chip.js +48 -0
  365. package/dist/separator.js +1 -1
  366. package/dist/{sheet-tZMg0E0w.js → sheet-DUCIoOe0.js} +4 -4
  367. package/dist/sheet.js +1 -1
  368. package/dist/sidebar.js +216 -114
  369. package/dist/slider-CcICPe3u.js +149 -0
  370. package/dist/slider.js +1 -1
  371. package/dist/sortable-list.js +3 -3
  372. package/dist/spectrum-walk-cBNSx_zm.js +33 -0
  373. package/dist/springPresets-DfoQ6XRY.js +64 -0
  374. package/dist/stacked-icons.js +54 -39
  375. package/dist/styles/animations.css +13 -3
  376. package/dist/styles/cards.css +271 -2
  377. package/dist/styles/completion-seal.css +131 -0
  378. package/dist/styles/components.css +1 -4
  379. package/dist/styles/configurator.css +221 -1
  380. package/dist/styles/critical-partition.mjs +66 -11
  381. package/dist/styles/deferred.css +4 -0
  382. package/dist/styles/dock/adaptive-legibility.css +119 -0
  383. package/dist/styles/dock/cta-seat.css +87 -0
  384. package/dist/styles/dock/density.css +167 -6
  385. package/dist/styles/dock/fission-bridge.css +552 -0
  386. package/dist/styles/dock/layers.css +90 -78
  387. package/dist/styles/dock/morph-bridge.css +67 -18
  388. package/dist/styles/dock/morph.css +57 -118
  389. package/dist/styles/dock/overflow.css +12 -0
  390. package/dist/styles/dock/search.css +68 -0
  391. package/dist/styles/dock/shape.css +250 -0
  392. package/dist/styles/dock/shell.css +24 -8
  393. package/dist/styles/dock/stack-rail.css +352 -0
  394. package/dist/styles/dock-controls/dark-mode-toggle.css +17 -4
  395. package/dist/styles/dock-controls/icon-button.css +46 -0
  396. package/dist/styles/dock-controls/triggers.css +23 -1
  397. package/dist/styles/dock-controls.css +18 -0
  398. package/dist/styles/dock.css +27 -2
  399. package/dist/styles/drawer.css +166 -0
  400. package/dist/styles/glass/accent-tone.css +66 -0
  401. package/dist/styles/glass/control-surfaces.css +167 -0
  402. package/dist/styles/glass/glass-atom.css +244 -0
  403. package/dist/styles/glass/glass-capsule.css +143 -0
  404. package/dist/styles/glass/glass-chip.css +215 -0
  405. package/dist/styles/glass/ladder.css +67 -17
  406. package/dist/styles/glass/liquid-enter.css +252 -0
  407. package/dist/styles/glass/liquid-morph.css +850 -0
  408. package/dist/styles/glass/material.css +70 -1
  409. package/dist/styles/glass/reveal.css +22 -2
  410. package/dist/styles/glass/rim.css +31 -9
  411. package/dist/styles/glass/surfaces.css +81 -150
  412. package/dist/styles/glass.css +21 -0
  413. package/dist/styles/icon-chip.css +45 -0
  414. package/dist/styles/index.css +26 -0
  415. package/dist/styles/jubilance.css +65 -0
  416. package/dist/styles/motion/morph-field.css +229 -0
  417. package/dist/styles/paper.css +230 -14
  418. package/dist/styles/scroll-choreography.css +135 -78
  419. package/dist/styles/scroll-chrome.css +123 -0
  420. package/dist/styles/scroll-driven.css +38 -0
  421. package/dist/styles/segmented-tabs.css +110 -40
  422. package/dist/styles/select.css +151 -0
  423. package/dist/styles/theme/bridges.css +22 -0
  424. package/dist/styles/theme/radius.css +18 -1
  425. package/dist/styles/tokens/color-radius.css +14 -4
  426. package/dist/styles/tokens/dark-arm.css +94 -12
  427. package/dist/styles/tokens/glass-deep.css +33 -4
  428. package/dist/styles/tokens/glass-fx.css +122 -1
  429. package/dist/styles/tokens/glass.css +226 -34
  430. package/dist/styles/tokens/light-dark.css +3 -3
  431. package/dist/styles/tokens/offsets.css +27 -0
  432. package/dist/styles/tokens/property-regs.css +277 -0
  433. package/dist/styles/tokens/scale-paper.css +86 -30
  434. package/dist/styles/tokens/scheme-motion.css +106 -133
  435. package/dist/styles/tokens/scheme-spring.css +239 -0
  436. package/dist/styles/tokens/scroll-tokens.css +15 -15
  437. package/dist/styles/tokens/shadow.css +73 -13
  438. package/dist/styles/tokens/sizing-config.css +110 -0
  439. package/dist/styles/tokens/sizing.css +55 -104
  440. package/dist/styles/tokens.css +14 -2
  441. package/dist/styles/typography/semantic.css +18 -5
  442. package/dist/styles/utilities/a11y-overrides.css +20 -5
  443. package/dist/styles/utilities/base-misc.css +52 -0
  444. package/dist/styles/utilities/btn.css +84 -3
  445. package/dist/styles/utilities/components.css +31 -6
  446. package/dist/styles/utilities/metal.css +26 -0
  447. package/dist/switch.js +1 -1
  448. package/dist/tabs.js +199 -182
  449. package/dist/timeline.js +241 -206
  450. package/dist/toast.js +1 -1
  451. package/dist/toggle-chip.js +14 -41
  452. package/dist/toggle-group.js +1 -1
  453. package/dist/tooltip.js +1 -1
  454. package/dist/typewriter.js +2 -2
  455. package/dist/uniformBridgeWGPU-BCse1SHU.js +1268 -0
  456. package/dist/{useAnimatedNumber-BfUq2bUM.js → useAnimatedNumber-BntskVdQ.js} +1 -1
  457. package/dist/{useConfiguratorState-DNlOh6c8.js → useConfiguratorState-22BcULzF.js} +41 -38
  458. package/dist/useControlSize-DAZ062x7.js +9 -0
  459. package/dist/useDockCtaReceive-DX7RDb6_.js +88 -0
  460. package/dist/{useDragMorph-DgxnsVJz.js → useDragMorph-DGLSewwB.js} +4 -4
  461. package/dist/useDragVelocity-CjcfX3dA.js +57 -0
  462. package/dist/useFuzzySearch-0fTYOhS4.js +177 -0
  463. package/dist/useGooMorph-Cs13NgYL.js +104 -0
  464. package/dist/useGpuSubstrate-Ceet70xq.js +347 -0
  465. package/dist/useHaptic-CPz5BT9I.js +134 -0
  466. package/dist/{useLiquidFlex-mZPMiNXh.js → useLiquidFlex-Cc6PjVJD.js} +8 -3
  467. package/dist/useLiquidPress-CtOQ8Z0_.js +43 -0
  468. package/dist/useMorphField-ogBM7ubT.js +141 -0
  469. package/dist/usePointerVelocityField-BrkqZFhj.js +91 -0
  470. package/dist/useScrollChrome-JuImi1DM.js +258 -0
  471. package/dist/{useSpringMount-q1amq1SJ.js → useSpringMount-DFxtzmkR.js} +1 -1
  472. package/dist/useSpringPress-VM9RgVq3.js +36 -0
  473. package/dist/{useSurfaceAxis-g0NloYEF.js → useSurfaceAxis-Ci7Dnaw2.js} +1 -1
  474. package/dist/{useTouchGate-CBZTD4SD.js → useTouchGate-B1Lf9XqN.js} +1 -1
  475. package/dist/{vendor-CKmzio-i.js → vendor-B2qOlYY3.js} +24 -11
  476. package/dist/virtual.d.ts +1 -0
  477. package/dist/virtual.js +225 -0
  478. package/dist/watercolor-dot.js +107 -74
  479. package/dist/writeVelocityWeight-Bh83xZfs.js +19 -0
  480. package/package.json +140 -9
  481. package/src/styles/animations.css +13 -3
  482. package/src/styles/cards.css +271 -2
  483. package/src/styles/completion-seal.css +131 -0
  484. package/src/styles/configurator.css +221 -1
  485. package/src/styles/critical-partition.mjs +66 -11
  486. package/src/styles/dock/adaptive-legibility.css +119 -0
  487. package/src/styles/dock/cta-seat.css +87 -0
  488. package/src/styles/dock/density.css +167 -6
  489. package/src/styles/dock/fission-bridge.css +552 -0
  490. package/src/styles/dock/layers.css +90 -78
  491. package/src/styles/dock/morph-bridge.css +67 -18
  492. package/src/styles/dock/morph.css +57 -118
  493. package/src/styles/dock/overflow.css +12 -0
  494. package/src/styles/dock/search.css +68 -0
  495. package/src/styles/dock/shape.css +250 -0
  496. package/src/styles/dock/shell.css +24 -8
  497. package/src/styles/dock/stack-rail.css +352 -0
  498. package/src/styles/dock-controls/dark-mode-toggle.css +17 -4
  499. package/src/styles/dock-controls/icon-button.css +46 -0
  500. package/src/styles/dock-controls/triggers.css +23 -1
  501. package/src/styles/dock-controls.css +18 -0
  502. package/src/styles/dock.css +27 -2
  503. package/src/styles/drawer.css +164 -0
  504. package/src/styles/glass/accent-tone.css +66 -0
  505. package/src/styles/glass/control-surfaces.css +167 -0
  506. package/src/styles/glass/glass-atom.css +244 -0
  507. package/src/styles/glass/glass-capsule.css +143 -0
  508. package/src/styles/glass/glass-chip.css +215 -0
  509. package/src/styles/glass/ladder.css +67 -17
  510. package/src/styles/glass/liquid-enter.css +252 -0
  511. package/src/styles/glass/liquid-morph.css +850 -0
  512. package/src/styles/glass/material.css +70 -1
  513. package/src/styles/glass/reveal.css +22 -2
  514. package/src/styles/glass/rim.css +31 -9
  515. package/src/styles/glass/surfaces.css +81 -150
  516. package/src/styles/glass.css +21 -0
  517. package/src/styles/icon-chip.css +45 -0
  518. package/src/styles/index.css +26 -0
  519. package/src/styles/jubilance.css +65 -0
  520. package/src/styles/motion/morph-field.css +229 -0
  521. package/src/styles/paper.css +230 -14
  522. package/src/styles/scroll-choreography.css +135 -78
  523. package/src/styles/scroll-chrome.css +123 -0
  524. package/src/styles/scroll-driven.css +38 -0
  525. package/src/styles/segmented-tabs.css +110 -36
  526. package/src/styles/select.css +151 -0
  527. package/src/styles/theme/bridges.css +22 -0
  528. package/src/styles/theme/radius.css +18 -1
  529. package/src/styles/tokens/color-radius.css +14 -4
  530. package/src/styles/tokens/dark-arm.css +94 -12
  531. package/src/styles/tokens/glass-deep.css +33 -4
  532. package/src/styles/tokens/glass-fx.css +122 -1
  533. package/src/styles/tokens/glass.css +226 -34
  534. package/src/styles/tokens/light-dark.css +3 -3
  535. package/src/styles/tokens/offsets.css +27 -0
  536. package/src/styles/tokens/property-regs.css +277 -0
  537. package/src/styles/tokens/scale-paper.css +86 -30
  538. package/src/styles/tokens/scheme-motion.css +106 -133
  539. package/src/styles/tokens/scheme-spring.css +239 -0
  540. package/src/styles/tokens/scroll-tokens.css +15 -15
  541. package/src/styles/tokens/shadow.css +73 -13
  542. package/src/styles/tokens/sizing-config.css +110 -0
  543. package/src/styles/tokens/sizing.css +55 -104
  544. package/src/styles/tokens.css +14 -2
  545. package/src/styles/typography/semantic.css +18 -5
  546. package/src/styles/utilities/a11y-overrides.css +20 -5
  547. package/src/styles/utilities/base-misc.css +52 -0
  548. package/src/styles/utilities/btn.css +84 -3
  549. package/src/styles/utilities/components.css +31 -6
  550. package/src/styles/utilities/metal.css +26 -0
  551. package/dist/ContextMenuContent-uWnVxDab.js +0 -85
  552. package/dist/DialogContent-DcKK8k9i.js +0 -103
  553. package/dist/DialogFooter-BZNX5aVr.js +0 -165
  554. package/dist/HoverCardContent-b2uaAMRR.js +0 -83
  555. package/dist/Input-h9v5LeXf.js +0 -55
  556. package/dist/NumberFieldContent-Cq7EzX-U.js +0 -138
  557. package/dist/PaperBackdrop-Vf3tlpvd.js +0 -31
  558. package/dist/SelectScrollDownButton-CrA8F0iV.js +0 -252
  559. package/dist/Separator-pKF0oA4M.js +0 -37
  560. package/dist/Switch-CwYNf8bo.js +0 -47
  561. package/dist/TooltipProvider-rzvnXz60.js +0 -104
  562. package/dist/badge-D9XWW4GT.js +0 -53
  563. package/dist/button-DYCUa-tH.js +0 -126
  564. package/dist/color-DweYl7pE.js +0 -86
  565. package/dist/components/custom/concentric/composables/ringField.d.ts +0 -44
  566. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +0 -35
  567. package/dist/components/custom/constellation/constellationDraw.d.ts +0 -30
  568. package/dist/components/custom/dock/DockRail.vue.d.ts +0 -89
  569. package/dist/createCanvasLifecycle-CHD5XrDW.js +0 -82
  570. package/dist/dockContext-BNfyPLe9.js +0 -17
  571. package/dist/procedural-color.wgsl-CToRHugY.js +0 -224
  572. package/dist/resolveCanvasColor-CUyHr5Uu.js +0 -11
  573. package/dist/slider-DVb4HXU-.js +0 -142
  574. package/dist/springPresets-CFQGQfdl.js +0 -40
  575. package/dist/styles/dock/rail-extend.css +0 -397
  576. package/dist/useLiquidPress-kfb4KX79.js +0 -39
  577. package/dist/usePointerVelocityField-JbRd5CrM.js +0 -137
  578. package/dist/useRAFLoop-UYa4zoiN.js +0 -109
  579. package/dist/useSpringPress-BsqPr7FJ.js +0 -34
  580. package/src/styles/dock/rail-extend.css +0 -397
  581. /package/dist/{CollapsibleContent-68dEXIAl.js → CollapsibleContent-D7UNsXQr.js} +0 -0
  582. /package/dist/{InstrumentChassis-Bx0F_q5g.js → InstrumentChassis-UUJX0-mW.js} +0 -0
  583. /package/dist/{Label-C2ejNWeC.js → Label-B_HPqi_q.js} +0 -0
  584. /package/dist/{ModalOverlay-D1VrWyoi.js → ModalOverlay-DfAf7o15.js} +0 -0
  585. /package/dist/{SelectGroup-DwwjicPY.js → SelectGroup-Dcczq44n.js} +0 -0
  586. /package/dist/{_plugin-vue_export-helper-C1je1s0u.js → _plugin-vue_export-helper-gLzyemvl.js} +0 -0
  587. /package/dist/{compile-CQEFRTmx.js → compile-INR_tPk_.js} +0 -0
  588. /package/dist/{constants-BPOqYJAm.js → constants-BWj7DkMn.js} +0 -0
  589. /package/dist/{createContext-CpBNTRMI.js → createContext-Cd23P9j0.js} +0 -0
  590. /package/dist/{math-BINYmg5z.js → math-5RcIgCB4.js} +0 -0
  591. /package/dist/{menuItemVariants-D8VNHq22.js → menuItemVariants-DAXquKja.js} +0 -0
  592. /package/dist/{prng-Za0Rmgag.js → prng-B5tIXTtj.js} +0 -0
  593. /package/dist/{useGlobalDark-C28t0VWJ.js → useGlobalDark-B4HO9LXG.js} +0 -0
  594. /package/dist/{useIntersectionPause-Bj4sPkMh.js → useIntersectionPause-DO8Vl4gs.js} +0 -0
  595. /package/dist/{useInterval-CvK1mL92.js → useInterval-BVUI-sez.js} +0 -0
  596. /package/dist/{useKeyboardShortcuts-BXWXOZ-9.js → useKeyboardShortcuts-BEut54Tk.js} +0 -0
  597. /package/dist/{useResizeObserver-Bpoi7tRE.js → useResizeObserver-DdEn3v2f.js} +0 -0
  598. /package/dist/{useResolveTokenColor-vAylyR0x.js → useResolveTokenColor-ChOnCckA.js} +0 -0
  599. /package/dist/{useScrollProgress-D7bYU2RK.js → useScrollProgress-A0M6qRl7.js} +0 -0
  600. /package/dist/{useSortable-DHjtZSEd.js → useSortable-DQV_UNDw.js} +0 -0
  601. /package/dist/{useTextHighlight-CWEi25hf.js → useTextHighlight-Bma3UlKA.js} +0 -0
  602. /package/dist/{useTimer-BHJOKr35.js → useTimer-BBLGPXR8.js} +0 -0
  603. /package/dist/{useUserInvalidAria-y5namzeE.js → useUserInvalidAria-EmmwWPOl.js} +0 -0
  604. /package/dist/{useViewportReady-anbac3m6.js → useViewportReady-C9pYnn7K.js} +0 -0
  605. /package/dist/{vReveal-Czsb7zQC.js → vReveal-CT1KtwZA.js} +0 -0
  606. /package/dist/{vSpecular-CQFmLNzA.js → vSpecular-EX7loENl.js} +0 -0
@@ -26,6 +26,46 @@
26
26
  initial-value: 1;
27
27
  }
28
28
 
29
+ /* BD.W-OVERLAY-STAGE-COUPLE — `--stage-t`, the ONE registered STAGING scalar (0 =
30
+ * closed/un-staged → 1 = fully staged). The whole modal band rides this ONE knob:
31
+ * the drawer's surface FREEZE (A), the scrim DEEPEN (B), the page RECEDE+SCALE (C),
32
+ * the opt-in blur ENGAGE (D) are all pure `calc()` reads OF it. `inherits: true` so
33
+ * a single writer at `:root` reaches the portaled scrim AND the page-wrapper sibling
34
+ * AND the sheet descendants from ONE write (the scrim is NOT a descendant of the
35
+ * content, so a content-local mirror could never reach it — the `:root` write is the
36
+ * cross-subtree path).
37
+ *
38
+ * THE SINGLE WRITER (fold C1·R2 — no dual scalar desync). `useDrawerSnap.writeScalar`
39
+ * writes BOTH `--glass-drawer-t` (the sheet's per-element translate) AND `--stage-t`
40
+ * (the scene scalar at `:root`) in the SAME call — atomically, never separately, so
41
+ * the two can never desync on a drag-cancel / fling-overshoot / interrupted snap. A
42
+ * plain modal (Dialog/Command) flips `--stage-t` 0→1 on `--spring-snappy` at open;
43
+ * the close-write removes the inline value so the registered property reverts to its
44
+ * `initial-value: 0` (the stale-latch fix). `initial-value: 0` so an un-staged page never
45
+ * recedes. EVERY consumer `clamp(0, …, 1)`-bounds it (a `--ease-cartoon-punch` fling
46
+ * can overshoot >1 — the page-scale / radius / scrim must not run past their
47
+ * endpoints). */
48
+ @property --stage-t {
49
+ syntax: "<number>";
50
+ inherits: true;
51
+ initial-value: 0;
52
+ }
53
+
54
+ /* The stage-t transition + close-write reset (the registered-property stale-latch
55
+ * fix, fold C3·R7).
56
+ *
57
+ * The drawer's single writer (useDrawerSnap) drives `--stage-t` per frame and
58
+ * REMOVES the inline value on close → the registered property reverts to its
59
+ * `initial-value: 0`. The centered modal (DialogContent) flips it 0→1 on open via the
60
+ * `data-stage-flip` marker on `:root`; this rule owns the FLIP TRANSITION (a snappy
61
+ * spring) so the dialog's `:root --stage-t` value glides 0→1 rather than snapping — a
62
+ * CSS-owned transition, NOT an inline `transition` shorthand on `:root` (which would
63
+ * clobber unrelated root transitions). On close the marker is dropped and the inline
64
+ * value removed → the property reverts to 0 (no stale full-staged latch on re-open). */
65
+ :root[data-stage-flip] {
66
+ transition: --stage-t var(--spring-snappy-duration, 0.4s) var(--spring-snappy, ease);
67
+ }
68
+
29
69
  :root {
30
70
  /* Detent grammar knobs — overridable per-consumer */
31
71
  --drawer-handle-w: 2.25rem;
@@ -131,6 +171,80 @@
131
171
  margin-top: 0;
132
172
  }
133
173
 
174
+ /*
175
+ * BD.W-OVERLAY-STAGE-COUPLE — coupling (A): the surface FREEZE, composed AT THE
176
+ * ELEMENT. A detented sheet is SEE-THROUGH at peek/half (the page bleeds) and
177
+ * SOLIDIFIES toward a warm-tinted card at full (page does not bleed, blur → 0). This
178
+ * is the iOS-27 bottom-sheet crown the live α-0.95-at-every-detent flattened.
179
+ *
180
+ * A TWO-SEGMENT lerp on the ONE `--stage-t` knob (the self-standing crown — the wave
181
+ * owns BOTH endpoints so it does not block on BE.W-SHEET-TRANSLUCENT, fold C3·R1):
182
+ * • DESCENT t ∈ [0, 0.85] — the transmissive crown sinks `--glass-bg-overlay` α
183
+ * toward the shipped see-through `--glass-bg-sheet` floor (`--glass-opacity-sheet:
184
+ * 0.74`). At peek/half the page bleeds through.
185
+ * • SOLIDIFY t ∈ [0.85, 1] — `--sheet-freeze` lerps the descended plate toward a
186
+ * WARM-TINTED card-mix (NOT bare `--card` — the gray-at-full carve hole, fold
187
+ * C1·R4); `backdrop-filter` blur decays to 0 (a solid plate has no backdrop to
188
+ * bend — a Safari win, no wasted sample behind an opaque plate).
189
+ *
190
+ * Composed AT THE ELEMENT (the `[data-surface=opaque]` substitution-safe path) via
191
+ * element-level `color-mix` — NEVER an ancestor `filter` (which would clobber the
192
+ * sheet's own backdrop-filter, the dock-hub goo-tear lesson, §7). `--stage-t` reads
193
+ * the `:root` scalar the single writer drives (mirrored from `--glass-drawer-t`).
194
+ */
195
+ .glass-drawer[data-glass-drawer-snap-points="true"] {
196
+ /* the DESCENT fraction — 0 at closed → 1 at the commit floor (t=0.85). */
197
+ --sheet-descent: clamp(0, calc(var(--stage-t) / 0.85), 1);
198
+ /* the SOLIDIFY fraction — 0 below the commit floor → 1 at full (t=1). */
199
+ --sheet-freeze: clamp(0, calc((var(--stage-t) - 0.85) / 0.15), 1);
200
+ /* the transmissive crown plate: the warm overlay fill sunk toward the shipped
201
+ see-through `--glass-bg-sheet` floor across the descent. */
202
+ --sheet-crown: color-mix(
203
+ in oklab,
204
+ color-mix(
205
+ in oklab,
206
+ var(--glass-bg-overlay),
207
+ var(--glass-tint-source) var(--glass-tint-strength)
208
+ ),
209
+ var(--glass-bg-sheet) calc(var(--sheet-descent) * 100%)
210
+ );
211
+ /* the warm-tinted SOLID escape (fold C1·R4 — a warm card-mix toward the EXPLICIT
212
+ warm `--glass-capsule-warm` amber, NEVER bare `--card` and NEVER the
213
+ `--glass-tint-source` alias which resolves back to `--card` and would be a
214
+ no-op warm; build-trap-(d) safe — a warm oklch color, never bare `transparent`).
215
+ At the shared 16% warm floor a dark full sheet stays C ≥ 0.02 warm — no
216
+ charcoal holiday at full. */
217
+ --sheet-solid: color-mix(
218
+ in oklab,
219
+ var(--card),
220
+ var(--glass-capsule-warm) var(--glass-capsule-warm-floor, 16%)
221
+ );
222
+ background: color-mix(
223
+ in oklab,
224
+ var(--sheet-crown),
225
+ var(--sheet-solid) calc(var(--sheet-freeze) * 100%)
226
+ );
227
+ backdrop-filter: blur(
228
+ calc(var(--glass-blur-overlay-radius, 20px) * (1 - var(--sheet-freeze)))
229
+ )
230
+ saturate(1.6);
231
+ -webkit-backdrop-filter: blur(
232
+ calc(var(--glass-blur-overlay-radius, 20px) * (1 - var(--sheet-freeze)))
233
+ )
234
+ saturate(1.6);
235
+ }
236
+
237
+ /* The `surface=opaque` explicit escape still wins (it sets the solid plate
238
+ unconditionally regardless of detent) — the freeze is the DEFAULT glass crown; the
239
+ opt-out plate is the consumer's hard override. Source order keeps the opaque rule
240
+ (declared above) — re-assert it here so it beats the snap-points freeze at equal
241
+ specificity for a detented opaque sheet. */
242
+ .glass-drawer[data-glass-drawer-snap-points="true"][data-surface="opaque"] {
243
+ background: color-mix(in srgb, var(--card), transparent 0%);
244
+ backdrop-filter: none;
245
+ -webkit-backdrop-filter: none;
246
+ }
247
+
134
248
  /* Direction variants — the content root tags itself with the drag axis
135
249
  (`data-glass-drawer-direction`). Bottom is the default; the others ride the same
136
250
  surface so a top/side sheet inherits the grammar. The side-lens (left/right) is
@@ -222,6 +336,56 @@
222
336
  background-color: var(--drawer-snap-rule-color);
223
337
  }
224
338
 
339
+ /*
340
+ * BD.W-OVERLAY-STAGE-COUPLE — coupling (B): the scrim DEEPEN. The scrim α tracks
341
+ * `--stage-t` so a peek drawer barely dims and a full drawer commits hard (the live
342
+ * fixed-α-0.8 at every detent is the born-RED). Reuses the SHIPPED warm
343
+ * `--overlay-scrim-ink` (the F7 warm near-black, never flat black), now t-coupled.
344
+ * `clamp(0,…,1)` bounds the fling overshoot. The scrim element gains
345
+ * `[data-stage-scrim]` (DrawerOverlay.vue) and reads the inherited `:root` scalar.
346
+ */
347
+ [data-stage-scrim] {
348
+ background: color-mix(
349
+ in srgb,
350
+ var(--overlay-scrim-ink)
351
+ calc((0.28 + clamp(0, var(--stage-t), 1) * 0.44) * 100%),
352
+ transparent
353
+ );
354
+ }
355
+
356
+ /*
357
+ * BD.W-OVERLAY-STAGE-COUPLE — coupling (C): the page RECEDE + SCALE. The page wrapper
358
+ * scales `1 → 0.95` + corner-radius blooms as `--stage-t → 1` (the iOS "card recedes"
359
+ * depth cue), retiring the dead `shouldScaleBackground` boolean. `scale` +
360
+ * `border-radius` ONLY — NO `filter` (the ancestor-filter trap: `filter` on the app
361
+ * root establishes a containing block for `position:fixed` and force-rasterizes the
362
+ * page subtree every frame — fold C2·R1; §7). The wrapper is the consumer's app-root
363
+ * marker (`demo/App.vue` mounts `[data-stage-wrapper]`); when the honest
364
+ * `stage="none|dim"` enum is set the marker carries no `--stage-t` drive (or the
365
+ * `data-stage-scale` gate is absent) so (C) is a real no-op, never a lie. Under PRM
366
+ * `stage="scale"` degrades to `dim` at the SFC (no `data-stage-scale` attr) so the
367
+ * page never transforms (fold C1·R6) — this rule only fires when the scale gate is on.
368
+ */
369
+ [data-stage-wrapper][data-stage-scale] {
370
+ scale: calc(1 - 0.05 * clamp(0, var(--stage-t), 1));
371
+ border-radius: calc(var(--radius-panel) * clamp(0, var(--stage-t), 1));
372
+ transform-origin: 50% 0; /* recede toward the top, iOS */
373
+ overflow: clip;
374
+ }
375
+
376
+ /*
377
+ * BD.W-OVERLAY-STAGE-COUPLE — coupling (D): the blur ENGAGE (opt-in `immersive`, the
378
+ * Command spotlight). The scrim's `backdrop-filter` radius ramps `0 → deep` on
379
+ * `--stage-t`. ONE-SHOT over the open window (gated to the modal-flip 0→1 via
380
+ * `[data-stage-immersive]`, NEVER the drawer's per-frame scalar — the §L7 Safari
381
+ * fence: a per-frame full-viewport re-blur is the cardinal sin, fold C2·R). WebKit
382
+ * pays the sample once as the flip lands. Default OFF.
383
+ */
384
+ [data-stage-scrim][data-stage-immersive] {
385
+ backdrop-filter: blur(calc(clamp(0, var(--stage-t), 1) * 16px));
386
+ -webkit-backdrop-filter: blur(calc(clamp(0, var(--stage-t), 1) * 16px));
387
+ }
388
+
225
389
  /* Reduced-motion — the house `SpringProgress` snaps the detent deterministically
226
390
  under `prefers-reduced-motion: reduce` (its `respectReducedMotion` jumps the
227
391
  `--glass-drawer-t` scalar to target in one frame, zero motion frames); here we
@@ -0,0 +1,66 @@
1
+ /* glass/accent-tone.css
2
+ BC.W-ACCENT-TONE — the contrast-floored 3-channel tonal-accent register.
3
+
4
+ ONE `--tone` (a complete `<color>`, default `var(--primary)`) → a coherent,
5
+ contrast-SAFE four-channel tonal set:
6
+
7
+ --accent-fill idle FILL — faint but FLOORED (≥3:1 at rest, the load-bearing
8
+ new behavior fourier named: "not just hover/active").
9
+ --accent-band active BAND — the bolder selected fill.
10
+ --accent-edge active EDGE — the active rim hairline.
11
+ --accent-ink label INK — the contrast-SAFE label colour ON the band, written
12
+ by useAccentTone (the JS half) via value.js
13
+ safeAccentColor; the CSS fallback is the warm ink.
14
+
15
+ The mix space is `in oklab` (the perceptual glass-tint family, W55/W-NO-GRAY) —
16
+ NOT `in srgb` (the `--surface-tint-*` brand-overlay fence, AW.W26). This is the
17
+ CONTROL tonal-FILL register (the plate background + the contrast-safe ink), a
18
+ DISTINCT seam from the BB `--glass-accent` glass-RIM axis (decoration on a glass
19
+ plate) — the two COMPOSE on a chip that is both a glass surface and a tonal
20
+ control (the rim from `--glass-accent`, the fill from `--accent-tone`); they
21
+ never fork, never write each other's channels.
22
+
23
+ The strength MAGNITUDES are TOKENS a `:root`/scope override retunes (NOT props —
24
+ the no-over-prop fence, component-customizability §5): `--accent-fill-strength`
25
+ (idle, the ~6-8% fourier names) / `--accent-band-strength` (active) /
26
+ `--accent-edge-strength` (rim). The idle floor is the strength default — the
27
+ 8% over the warm-cream `--card` clears ≥3:1; proof:accent-tone A4 measures the
28
+ resolved idle fill against the surface (a strength that drops it below 3:1 reds).
29
+
30
+ @import-ed by glass.css in cascade order IMMEDIATELY AFTER ladder.css (the same
31
+ @layer components; this is the SOLE writer of the `--accent-*` channels, read at
32
+ use-time on the chip elements, so the placement is cascade-order-invariant). */
33
+ @layer components {
34
+ .accent-tone {
35
+ /* `--surface` is an OPTIONAL consumer-retarget hook (NOT a declared HEAD
36
+ token) — a consumer sets it on the scope to point the accent at a
37
+ non-`--card` surface; it defaults to the declared `--card` so the recipe
38
+ resolves at HEAD with zero consumer wiring. */
39
+ --accent-fill-strength: 8%;
40
+ --accent-band-strength: 18%;
41
+ --accent-edge-strength: 55%;
42
+
43
+ /* idle: faint but FLOORED — the resting tint stays ≥3:1 by the strength
44
+ floor + the perceptual `in oklab` mix (the glass-tint family). */
45
+ --accent-fill: color-mix(
46
+ in oklab,
47
+ var(--surface, var(--card)),
48
+ var(--tone, var(--primary)) var(--accent-fill-strength)
49
+ );
50
+ --accent-band: color-mix(
51
+ in oklab,
52
+ var(--surface, var(--card)),
53
+ var(--tone, var(--primary)) var(--accent-band-strength)
54
+ );
55
+ --accent-edge: color-mix(
56
+ in oklab,
57
+ transparent,
58
+ var(--tone, var(--primary)) var(--accent-edge-strength)
59
+ );
60
+ /* ink is the contrast-SAFE label colour ON the active band — written by
61
+ useAccentTone (the JS half) via safeAccentColor onto
62
+ `--accent-ink-resolved`; the CSS fallback is the warm ink (CSS cannot
63
+ call value.js at the token tier). */
64
+ --accent-ink: var(--accent-ink-resolved, var(--foreground));
65
+ }
66
+ }
@@ -0,0 +1,167 @@
1
+ /* glass/control-surfaces.css
2
+ The form-control REST register carved from glass/surfaces.css — the
3
+ `.input-pill` family (Input/Textarea/NumberField), the shared `.control-surface`
4
+ class (Select default + TagsInput), the validity vocabulary, and the Select
5
+ trigger resting-border lift. A cohesive sub-concern of surfaces.css (the
6
+ no-god-module re-drain), @import-ed by glass.css in cascade order IMMEDIATELY
7
+ AFTER surfaces.css and BEFORE surface-axis.css — same `@layer components`, same
8
+ source order, so the carve is byte-isomorphic.
9
+ See docs/precepts/design-idioms.md §cohesion-aware partials. */
10
+ @layer components {
11
+ /* ── Pill input ───────────────────────────────── */
12
+ .input-pill {
13
+ @apply flex w-full;
14
+
15
+ /* AX.W51 D18 — the input pill rides the ONE `--ui-scale` comfort axis: the
16
+ height reads the `--control-h-md` cohort (`max(calc(2.5rem * --ui-scale),
17
+ --control-floor)`, the h-10 register with the WCAG-44px coarse clamp), the
18
+ font reads `--control-text`, the inline padding scales — so ONE override
19
+ grows the field's height + padding + font in lockstep. Desktop default is
20
+ the identity. */
21
+ /* BC.W-CONTROL-CUSTOM — the height reads the `--control-pill-h` element-
22
+ override seam, DEFAULTING to the cohort `--control-h-md` so a bare
23
+ control is byte-identical to HEAD. The shared `controlSizeClass(size)`
24
+ (_shared/useControlSize.ts) re-points the seam per rung
25
+ (sm→`--control-h-sm`, lg→`--control-h-lg`), so the `size` prop retunes
26
+ the field height WITHOUT a recipe fork — ONE substitution rung, the
27
+ cohort is still the source. */
28
+ height: var(--control-pill-h, var(--control-h-md));
29
+ border-radius: var(--radius-pill);
30
+ /* AW.W13 — the resting field edge reads as an enclosed control at rest
31
+ (~15%α — ~2× the prior 8% glass-wash floor that vanished on cream). The
32
+ `:focus-visible` accent ring + the `:user-invalid`/`[aria-invalid]`
33
+ destructive ring below still win by order + specificity.
34
+ AX.W54 — moved off the srgb `--surface-tint-15` fork onto the glass
35
+ border seam so the pill is ONE glass model with the rest of the ladder.
36
+ BA.W-SURFACE-AXIS scope 7 — re-pointed onto the SHARED `--control-surface-*`
37
+ REST register so Input/Textarea/NumberField/Select/Combobox/TagsInput are
38
+ ONE material at rest (the input rung was the warmer of the two; Select rode
39
+ the `glass-wash` gray — the no-gray control-family seam). The register reads
40
+ the same `--glass-*` ladder, so `--glass-level`/the W55 bright bucket retune
41
+ the whole form family in lockstep (--control-surface-border defaults to the
42
+ `--glass-border-floating` 15%α rung, --control-surface-bg to `--glass-bg-quiet`,
43
+ --control-surface-blur to `--glass-blur-quiet`). */
44
+ border: 1.5px solid var(--control-surface-border);
45
+ background: var(--control-surface-bg);
46
+ /* The control's REAL glass blur — the shared register's quiet-tier radius
47
+ (the same `--control-surface-blur` pairs with `--control-surface-bg`); the
48
+ `--glass-level` knob clarifies it in lockstep with every surface. */
49
+ backdrop-filter: var(--control-surface-blur);
50
+ padding: 0 calc(1rem * var(--ui-scale));
51
+ /* BC.W-CONTROL-CUSTOM — the font reads the `--control-pill-text` seam,
52
+ DEFAULTING to `--control-text` (byte-identical at unset). The `sm` rung
53
+ re-points it to `--control-text-sm` (the quieter register); `default`/`lg`
54
+ keep `--control-text`. This is the C1 close — the input register reads
55
+ `--control-text` via the recipe, NOT a bare `text-sm` literal. */
56
+ font-size: var(--control-pill-text, var(--control-text));
57
+ color: var(--foreground);
58
+ transition:
59
+ background-color var(--duration-fast) var(--ease-standard),
60
+ border-color var(--duration-fast) var(--ease-standard),
61
+ box-shadow var(--duration-fast) var(--ease-standard),
62
+ color var(--duration-fast) var(--ease-standard),
63
+ opacity var(--duration-fast) var(--ease-standard);
64
+ }
65
+
66
+ .input-pill::placeholder {
67
+ color: var(--surface-tint-35);
68
+ }
69
+
70
+ /* BA.W-SURFACE-AXIS scope 7 — the shared control REST surface class. The
71
+ NON-pill control families (the Select trigger, the TagsInput root) that do
72
+ NOT compose `.input-pill` but want the SAME resting material read this — so
73
+ the whole form band is ONE register at rest (the Select default rode the
74
+ lighter `glass-wash` gray before; this is the no-gray control-family seam).
75
+ It carries the bg/border/blur ONLY (each control owns its own height/radius/
76
+ padding/font), so a non-pill control composes `.control-surface` + its own
77
+ geometry. The hover lift brightens the fill one step toward the resting rung. */
78
+ .control-surface {
79
+ background: var(--control-surface-bg);
80
+ border: 1px solid var(--control-surface-border);
81
+ backdrop-filter: var(--control-surface-blur);
82
+ -webkit-backdrop-filter: var(--control-surface-blur);
83
+ }
84
+ .control-surface:hover:not(:disabled, [data-disabled]) {
85
+ background: var(--control-surface-bg-hover);
86
+ }
87
+
88
+ /* AQ.W4 §W4.6 — keyboard-focus ring only. Was bare `:focus` (showed the
89
+ accent ring on a mouse click); `:focus-visible` matches the
90
+ `.focus-ring` / `.glass-btn` / dock-control discipline. Ordered BEFORE
91
+ the `:user-invalid` rungs so an invalid focused field shows destructive,
92
+ not accent (the `:user-invalid:focus-visible` rule below wins by order +
93
+ specificity). `:focus-visible` Baseline Widely — no fallback. */
94
+ .input-pill:focus-visible {
95
+ outline: none;
96
+ border-color: var(--color-accent-opaque, var(--ring));
97
+ box-shadow: 0 0 0 2px var(--color-accent, color-mix(in srgb, var(--ring) 30%, transparent));
98
+ }
99
+
100
+ /* AQ.W4 §W4.1 — validity vocabulary on `.input-pill` (Input + Textarea).
101
+ The forgiving `:where(:user-invalid, .user-invalid-fallback,
102
+ [aria-invalid="true"])` group is ONE rule covering THREE trigger surfaces:
103
+ native constraint-validation (`:user-invalid`), the `useUserInvalidAria`
104
+ fallback class for engines without `:user-invalid` (css §3.2; NOT a
105
+ live+dead alias — the class is the SOLE fallback), AND (AW.W18) the
106
+ imperative `[aria-invalid="true"]` attribute. The `[aria-invalid]` arm
107
+ serves APP-DRIVEN validity — a custom key match, an async server check —
108
+ where there is no native constraint to trip `:user-invalid`, so the app
109
+ sets the ARIA attribute and the library's own ring paints with no
110
+ `:deep()` re-paint at the consumer. The destructive/success tints reuse
111
+ the semantic tokens via `color-mix` per the house pattern (W2). Non-color
112
+ reinforcement is the error TEXT (W4.5 `error` slot) + the `required`
113
+ asterisk — the border/bg shift is the supplementary cue, never the sole
114
+ one. `:user-valid` is intentionally subtle (border only, no bg fill) so
115
+ a long valid form is not a wall of green. */
116
+ .input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]) {
117
+ border-color: var(--destructive);
118
+ background: color-mix(in srgb, var(--destructive) 8%, var(--glass-bg-quiet));
119
+ }
120
+ .input-pill:where(:user-valid, .user-valid-fallback) {
121
+ border-color: var(--success);
122
+ }
123
+ /* Invalid + keyboard-focused → destructive ring (overrides the accent
124
+ `:focus-visible` ring above by order + the extra invalid compound). The
125
+ `[aria-invalid]` arm rides the same widened group so an app-driven
126
+ invalid field shows the destructive ring on focus too. */
127
+ .input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]):focus-visible {
128
+ border-color: var(--destructive);
129
+ /* BB.W-INVALID-RING — the shared destructive ring register (the
130
+ --focus-ring-shadow sibling). The byte-identical recipe is now ONE
131
+ token; the `8%` at-rest bg arm above stays `.input-pill`-local (a
132
+ glass-tint substrate the bare-ring surfaces do not carry). */
133
+ box-shadow: var(--invalid-ring);
134
+ }
135
+
136
+ /* AQ.W4 §W4.3 — `field-sizing: content` autosize (opt-in via the Textarea
137
+ `autosize` prop → `[data-autosize]`). The textarea grows vertically with
138
+ content between a 3-line floor and a token-driven ceiling, then scrolls.
139
+ `field-sizing` Baseline Newly (Chromium 2024) — on a non-supporting
140
+ engine the declaration is ignored and the element keeps the
141
+ `min/max-block-size` bounds + standard scroll (no JS, no `@supports`,
142
+ no grid-mirror polyfill). The fixed-size path (default, `min-h-20`) is
143
+ the unchanged no-op fallback. */
144
+ .input-pill[data-autosize] {
145
+ field-sizing: content;
146
+ width: 100%;
147
+ min-block-size: 3lh;
148
+ max-block-size: var(--textarea-autosize-max, 12lh);
149
+ resize: vertical;
150
+ }
151
+
152
+ .input-pill:disabled {
153
+ opacity: 0.5;
154
+ cursor: not-allowed;
155
+ }
156
+
157
+ /* AW.W13 — the Select trigger mirrors the input pill's resting border lift.
158
+ The reka-ui SelectTrigger renders `role="combobox"` over the `.glass-wash`
159
+ surface; its 8%α `--glass-border-wash` field edge vanished on cream just
160
+ like the input pill, so the same `--surface-tint-15` lift makes the
161
+ trigger read as an enclosed control at rest. Scoped to the combobox role
162
+ so the lift reaches ONLY the Select trigger, not every `.glass-wash`
163
+ surface. */
164
+ .glass-wash[role="combobox"] {
165
+ border-color: var(--surface-tint-15);
166
+ }
167
+ }
@@ -0,0 +1,244 @@
1
+ /* ════════════════════════════════════════════════════════════════════════
2
+ .glass-atom — BD.W-GLASS-ATOM-REGISTER: the ONE shared warm-glass register
3
+ the four small atoms (Badge-glass · metric-badge · slider fill · the `+N`
4
+ chip) consume in two registers (loud opaque identity vs quiet transmissive
5
+ glass).
6
+
7
+ CONSUME-ONLY — declares ZERO own glass tokens (the no-fork fence, Fence 1).
8
+ It COMPOSES:
9
+ · `.glass-capsule` — the warm-transmissive lozenge BODY (warm floor +
10
+ rim + lift). `.glass-atom` is a PEER of any
11
+ sized chip, NEVER `.glass-chip` itself (Fence 2):
12
+ both compose `.glass-capsule`. A consumer applies
13
+ BOTH classes (`class="glass-capsule glass-atom"`)
14
+ or composes the capsule body via the glass tier
15
+ the host already wears.
16
+ · `--glass-fill-tint` / `--glass-fill-strength` (BE.W-TINTED-CHIP, glass.css)
17
+ — the per-instance plate-fill data hue. The atom
18
+ is its ≥Nth consumer; it APPLIES the axis on the
19
+ quiet register, never re-mints a tint.
20
+ · `--glass-material-rim` — the keyed directional rim (the defined edge), the
21
+ SHIPPED two-stop rim re-pointed by `--glass-key`.
22
+ · the inert `.cartoon-cast` child + `--cartoon-ink` / `--shadow-cartoon-*`
23
+ (BD.W-CARTOON-CASTER / -CEL-INK) — the warm cel
24
+ stamp; the loud register intensifies on `data-cast`.
25
+ · `--motion-weight` × `--ease-cartoon-punch` (BD.W-MOTION-WEIGHT /
26
+ -CARTOON-PUNCH) — the non-uniform press squash +
27
+ the weight-coupled smear/settle.
28
+
29
+ @layer components, @import-ed by icon-chip.css (in-lane) AFTER glass.css (so
30
+ `.glass-capsule` + the `--glass-*` axes resolve) and BEFORE the consuming
31
+ recipes. Every channel is compositor-only + Safari-native (no
32
+ `backdrop-filter: url()`, no goo — Fence 8). The warm 0-alpha sources are
33
+ explicit `oklch(L C H / 0)` (NEVER bare `transparent` — the WebKit
34
+ black-premultiply hole, build-trap-(d)).
35
+ ════════════════════════════════════════════════════════════════════════ */
36
+
37
+ @layer components {
38
+ /* ── The warm idle floor (the #2 dormant-tint cure) ──
39
+ The atom carries chroma BEFORE any field paints + on a dead ground. The
40
+ floor is NON-self-referential (build-trap-(b): a property reading ITSELF in
41
+ its own `max()` resolves to guaranteed-invalid and the term drops). A
42
+ SEPARATE input var is the source: a consumer (the accent ramp) writes
43
+ `--accent-fill-strength-in`, and the resolved fill strength floors at
44
+ `--atom-tint-floor` — PLAIN per-mode (12% light / 15% dark), NEVER
45
+ `light-dark()` (the inset-shadow trap). */
46
+ .glass-atom {
47
+ --atom-tint-floor: 12%;
48
+ --accent-fill-strength: max(
49
+ var(--accent-fill-strength-in, 0%),
50
+ var(--atom-tint-floor)
51
+ );
52
+ /* The quiet register's tint application — the plate body mixes toward the
53
+ per-instance data hue ON TOP of the capsule's warm composite. At the
54
+ `@property` defaults (`--glass-fill-tint: transparent` / strength 0%)
55
+ this is the byte-identical no-op floor; the warm floor above keeps the
56
+ idle body warm even at a transparent tint. The mix is `in oklab` (the
57
+ perceptual glass-tint family — NOT the in-srgb brand fence). */
58
+ --glass-atom-tinted: color-mix(
59
+ in oklab,
60
+ var(--glass-capsule-warm) calc(var(--atom-tint-floor) + var(--glass-fill-strength)),
61
+ oklch(0.9 0.05 75 / 0)
62
+ );
63
+ /* The motion register — the press/hover deform rides
64
+ `--motion-weight × --ease-cartoon-punch`. The atom inherits the rest
65
+ `--motion-weight: 0.618`; the loud register (`data-cast`, below) pushes
66
+ it to 1 so the punch is never muted (the loud-register coupling). The
67
+ SPATIAL legs (scale/translate) settle on the punch clock; the EFFECTS
68
+ legs (background/box-shadow) stay on the bezier (motion-canon P1). */
69
+ transition:
70
+ background var(--duration-fast) var(--ease-standard),
71
+ box-shadow var(--duration-fast) var(--ease-standard),
72
+ scale var(--duration-normal) var(--ease-cartoon-punch),
73
+ translate var(--duration-normal) var(--ease-cartoon-punch);
74
+ }
75
+ .dark .glass-atom {
76
+ --atom-tint-floor: 15%;
77
+ }
78
+
79
+ /* ── The non-uniform PRESS squash (the punch, NOT a shrink) ──
80
+ Widen X, compress Y (`scale: 1.04 0.94`) — real squash & stretch. The
81
+ `:active` is the no-JS floor; a consumer's `useLiquidPress` may drive a
82
+ continuous ramp via `--cartoon-press-t` (the caster reads it). The
83
+ `border-radius` is the pill, so under non-uniform scale the end-caps track
84
+ the scaled box (challenge #2 R4 — the capsule radius stays circle-tolerant). */
85
+ .glass-atom:active:not([data-disabled]):not(:disabled) {
86
+ scale: 1.04 0.94;
87
+ }
88
+
89
+ /* ── The cel cast — UNIVERSAL-but-GRADED (challenge #1 R5 / #3 R5) ──
90
+ Every atom carries a hairline warm rim-cast at rest (the family floor); the
91
+ loud flagships (`data-cast`) INTENSIFY to the loud layered-offset stamp.
92
+ The cast rides the inert `.cartoon-cast` child (BD.W-CARTOON-CASTER) — the
93
+ child carries `--shadow-cartoon-md` at rest and moves on `translate`/`scale`
94
+ only; here the atom only RE-POINTS the loud register's resting/hover rung
95
+ (it does not re-author the caster). The loud register pushes
96
+ `--motion-weight: 1` so the punch reads at full amplitude. */
97
+ .glass-atom[data-cast] {
98
+ --motion-weight: 1;
99
+ }
100
+ .glass-atom[data-cast] .cartoon-cast {
101
+ box-shadow: var(--shadow-cartoon-sm);
102
+ }
103
+ @media (hover: hover) {
104
+ .glass-atom[data-cast]:hover:not(:active) .cartoon-cast {
105
+ box-shadow: var(--shadow-cartoon-md);
106
+ }
107
+ }
108
+
109
+ /* ── The QUIET register (`[data-surface="glass"]`) — the transmissive tint ──
110
+ The quiet capsule applies the per-instance fill tint over the warm floor.
111
+ This is where the warm-not-gray read is won (badge-glass, the `+N` chip).
112
+ The body composes `.glass-capsule` (the consumer applies both classes); the
113
+ atom only LAYERS the tinted fill on top of the capsule's warm composite via
114
+ `background-image` (a later layer over the capsule's `background:` shorthand
115
+ — the proven `.paper-grid` coexistence seam, paints OVER the translucent
116
+ fill, UNDER content). The 0-alpha stop is warm `oklch(… / 0)`, never bare
117
+ `transparent` (challenge #1 R4 / #2 R4 — the WebKit desaturation fix). */
118
+ .glass-atom[data-surface="glass"] {
119
+ background-image: linear-gradient(
120
+ var(--glass-atom-tinted),
121
+ var(--glass-atom-tinted)
122
+ );
123
+ }
124
+
125
+ /* ── PRM/PRT carve ──
126
+ Under reduced-motion `--motion-weight: 0` zeroes the squash + the cast
127
+ travel/lag in ONE assignment (every `calc(… * --motion-weight)` in the
128
+ caster collapses to rest); the press scale collapses to 1. The warm tint +
129
+ the rim + the STATIC cel STAMP persist (a still frame, never a frozen
130
+ mid-animation — the legibility floor). */
131
+ @media (prefers-reduced-motion: reduce) {
132
+ .glass-atom {
133
+ --motion-weight: 0;
134
+ }
135
+ .glass-atom:active:not([data-disabled]):not(:disabled) {
136
+ scale: 1;
137
+ }
138
+ }
139
+
140
+ /* ── prefers-contrast: more — the rim α floors UP (WCAG 1.4.11 non-text) ──
141
+ The keyed rim is the legibility CONTRACT (the cast is a supplement,
142
+ challenge #2 R6). Under more-contrast the atom floors its border ink so the
143
+ lit edge clears ≥3:1 vs the OPAQUE body, not only the glass body. */
144
+ @media (prefers-contrast: more) {
145
+ .glass-atom {
146
+ border-color: color-mix(in srgb, var(--foreground) 24%, transparent);
147
+ }
148
+ }
149
+
150
+ /* ════════════════════════════════════════════════════════════════════════
151
+ .badge-atom — the Badge consumer of the register (loud + quiet).
152
+
153
+ The LOUD register (the default opaque identity pill): the family signature
154
+ WITHOUT the glass body — the keyed warm rim (the defined edge, the
155
+ `border-transparent` melt fix), the non-uniform press-squish, the
156
+ universal-but-graded cel. The badge applies `.badge-atom` on EVERY variant
157
+ (the CVA base); `surface="glass"` ALSO applies `.glass-capsule .glass-atom`
158
+ for the quiet transmissive body.
159
+ ════════════════════════════════════════════════════════════════════════ */
160
+ .badge-atom {
161
+ position: relative;
162
+ /* AQ.W3 identity base — `scale`/`translate` longhands mint the stacking
163
+ context once so the press squash + the cast child compose cleanly. */
164
+ scale: 1;
165
+ translate: 0;
166
+ /* The DEFINED EDGE — the SHIPPED keyed two-stop rim (re-pointed by
167
+ `--glass-key`) as the pill's silhouette, so a sand `secondary` no longer
168
+ melts into a cream panel (the live `border-transparent` melt). It is a
169
+ box-shadow rim, NOT a `border` (the base CVA retired the `border`
170
+ keyword), so it adds zero layout box + reads warm. The press/lift scale
171
+ rides the punch register `× --motion-weight`. */
172
+ box-shadow: var(--glass-material-rim);
173
+ transition:
174
+ background var(--duration-fast) var(--ease-standard),
175
+ box-shadow var(--duration-fast) var(--ease-standard),
176
+ scale var(--duration-normal) var(--ease-cartoon-punch),
177
+ translate var(--duration-normal) var(--ease-cartoon-punch);
178
+ }
179
+
180
+ /* The non-uniform PRESS squash (widen X, compress Y — NOT a uniform shrink). */
181
+ .badge-atom:active:not([data-disabled]):not([aria-disabled='true']) {
182
+ scale: 1.04 0.94;
183
+ }
184
+
185
+ /* `outline` variant — the rim reads a louder warm-ink edge (it IS the edge). */
186
+ .badge-atom--outline {
187
+ box-shadow: var(--glass-material-rim);
188
+ border: 1px solid color-mix(in srgb, var(--foreground) 14%, transparent);
189
+ }
190
+
191
+ /* The LOUD cel stamp (opt-in, `data-cast`) — pushes the weight to 1 so the
192
+ punch reads at full amplitude + intensifies the inert child's cast. The
193
+ hairline rim-cast family floor is the rim above; this is the LOUD layered
194
+ offset (the flagship sticker stamp). */
195
+ .badge-atom[data-cast] {
196
+ --motion-weight: 1;
197
+ }
198
+ .badge-atom[data-cast] .cartoon-cast {
199
+ box-shadow: var(--shadow-cartoon-sm);
200
+ }
201
+ @media (hover: hover) {
202
+ .badge-atom[data-cast]:hover:not(:active) .cartoon-cast {
203
+ box-shadow: var(--shadow-cartoon-md);
204
+ }
205
+ }
206
+
207
+ /* The QUIET glass register — retire the opaque `bg-*` plate so the warm-glass
208
+ `.glass-capsule` body + the `.glass-atom` tinted `background-image` paint the
209
+ surface (no double-fill). The variant `bg-*` utility sets `background-color`;
210
+ this resets it to transparent so the capsule fill + the data-hue tint win.
211
+ The text color (the variant's `text-*`) is kept — the label still reads. */
212
+ .badge-atom--glass {
213
+ background-color: transparent !important;
214
+ /* The quiet capsule tints toward the variant's SEMANTIC hue via the shared
215
+ `--glass-fill-tint` axis (BE.W-TINTED-CHIP) — colored glass, never a
216
+ forked tint. The strength is a calm stop (the body ink stays legible).
217
+ A consumer overrides `--glass-fill-tint` per-instance for a bespoke hue. */
218
+ --glass-fill-strength: var(--badge-glass-strength, 16%);
219
+ }
220
+ /* Per-variant glass tint — the data hue the quiet body mixes toward. The
221
+ semantic plate token becomes the tint source (the loud fill demoted to a
222
+ transmissive hue). `secondary`/`outline` are the calm/neutral routes. */
223
+ .badge-atom--glass[data-variant='default'] { --glass-fill-tint: var(--primary); }
224
+ .badge-atom--glass[data-variant='secondary'] { --glass-fill-tint: var(--glass-capsule-warm); }
225
+ .badge-atom--glass[data-variant='outline'] { --glass-fill-tint: var(--glass-capsule-warm); }
226
+ .badge-atom--glass[data-variant='destructive'] { --glass-fill-tint: var(--destructive); }
227
+ .badge-atom--glass[data-variant='success'] { --glass-fill-tint: var(--success); }
228
+ .badge-atom--glass[data-variant='warning'] { --glass-fill-tint: var(--warning); }
229
+ .badge-atom--glass[data-variant='info'] { --glass-fill-tint: var(--info); }
230
+
231
+ @media (prefers-reduced-motion: reduce) {
232
+ .badge-atom {
233
+ --motion-weight: 0;
234
+ }
235
+ .badge-atom:active:not([data-disabled]) {
236
+ scale: 1;
237
+ }
238
+ }
239
+ @media (prefers-contrast: more) {
240
+ .badge-atom {
241
+ border: 1px solid color-mix(in srgb, var(--foreground) 28%, transparent);
242
+ }
243
+ }
244
+ }