@mkbabb/glass-ui 4.0.0 → 4.0.1

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 (394) hide show
  1. package/README.md +3 -1
  2. package/dist/CardAction-CW7a0m8M.js +253 -0
  3. package/dist/{CommandShortcut-DdtWXxOK.js → CommandShortcut-DvZNQ_HF.js} +4 -4
  4. package/dist/ConfiguratorRow-BR4l-ixA.js +143 -0
  5. package/dist/{ContextMenuContent-ON3x7cuk.js → ContextMenuContent-uWnVxDab.js} +1 -1
  6. package/dist/{ContextMenuSubContent-B0Vs6atR.js → ContextMenuSubContent-xol4sD2q.js} +32 -37
  7. package/dist/{DataTable-C464Zbqd.js → DataTable-CuKwF7wr.js} +4 -4
  8. package/dist/{DialogContent-DDE6pQBU.js → DialogContent-DcKK8k9i.js} +5 -5
  9. package/dist/{DialogFooter-8eZbdmPc.js → DialogFooter-BZNX5aVr.js} +3 -3
  10. package/dist/{FadingScroll-DwNnvKMs.js → FadingScroll-DI6hQhT9.js} +1 -1
  11. package/dist/{HoverCardContent-DkMaQzH5.js → HoverCardContent-b2uaAMRR.js} +1 -1
  12. package/dist/{HoverPopover-Dpzwvc4t.js → HoverPopover-CbqbNwgU.js} +2 -2
  13. package/dist/{IconChip-BDw1j5mu.js → IconChip-BTD-nay5.js} +3 -2
  14. package/dist/{IconTooltip-DSjasZIt.js → IconTooltip-Bl8gFZ8d.js} +1 -1
  15. package/dist/{Input-DVG_J0ne.js → Input-h9v5LeXf.js} +1 -1
  16. package/dist/{MetricBadge-BpC0R_Ec.js → MetricBadge-RHdBP72w.js} +1 -1
  17. package/dist/Notification-VUwexFUf.js +43 -0
  18. package/dist/NumberFieldContent-Cq7EzX-U.js +138 -0
  19. package/dist/{PopoverContent-BTorlp--.js → PopoverContent-DL7E6vJP.js} +4 -4
  20. package/dist/{Progress-hAT4gqGH.js → Progress-DctG61iZ.js} +4 -4
  21. package/dist/{ScrollingText-CUVFTWk2.js → ScrollingText-yOpBzFYq.js} +2 -2
  22. package/dist/{SelectScrollDownButton-C1jb3b3K.js → SelectScrollDownButton-CrA8F0iV.js} +18 -19
  23. package/dist/Toaster-Bw4xR8xV.js +274 -0
  24. package/dist/{ToggleGroupItem-Dzk9hWsF.js → ToggleGroupItem-pEM9vIhs.js} +50 -37
  25. package/dist/{TooltipProvider-B3MkB_8P.js → TooltipProvider-rzvnXz60.js} +1 -1
  26. package/dist/animated-digit.js +2 -2
  27. package/dist/api/index.d.ts +8 -3
  28. package/dist/api/types-extra.d.ts +6 -0
  29. package/dist/aurora.js +885 -242
  30. package/dist/badge.js +1 -1
  31. package/dist/border-progress.d.ts +1 -0
  32. package/dist/border-progress.js +106 -0
  33. package/dist/{button-BNDWhAZb.js → button-DYCUa-tH.js} +71 -26
  34. package/dist/button.js +1 -1
  35. package/dist/canvas.js +2 -2
  36. package/dist/card.js +2 -2
  37. package/dist/carousel.js +93 -110
  38. package/dist/collapsible.js +1 -1
  39. package/dist/command.js +1 -1
  40. package/dist/compile-CQEFRTmx.js +19 -0
  41. package/dist/components/custom/aurora/composables/atoms-fields.d.ts +39 -0
  42. package/dist/components/custom/aurora/composables/auroraFallbackGround.d.ts +108 -0
  43. package/dist/components/custom/aurora/composables/runtime.d.ts +19 -0
  44. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +5 -1
  45. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +51 -0
  46. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +29 -0
  47. package/dist/components/custom/aurora/constants/budget.d.ts +21 -0
  48. package/dist/components/custom/aurora/constants/presets.d.ts +2 -2
  49. package/dist/components/custom/aurora/constants/renderMode.d.ts +63 -12
  50. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -0
  51. package/dist/components/custom/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -0
  52. package/dist/components/custom/aurora/constants/shaders/procedural-color.wgsl.d.ts +4 -0
  53. package/dist/components/custom/aurora/index.d.ts +2 -1
  54. package/dist/components/custom/border-progress/BorderProgress.vue.d.ts +46 -0
  55. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +22 -0
  56. package/dist/components/custom/border-progress/constants.d.ts +59 -0
  57. package/dist/components/custom/border-progress/index.d.ts +4 -0
  58. package/dist/components/custom/concentric/Concentric.vue.d.ts +39 -0
  59. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +11 -0
  60. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +13 -0
  61. package/dist/components/custom/concentric/composables/ringField.d.ts +44 -0
  62. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +13 -0
  63. package/dist/components/custom/concentric/composables/useConcentric.d.ts +35 -0
  64. package/dist/components/custom/concentric/constants.d.ts +43 -0
  65. package/dist/components/custom/concentric/index.d.ts +5 -0
  66. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +4 -0
  67. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -0
  68. package/dist/components/custom/dock/DockIconButton.vue.d.ts +13 -4
  69. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +10 -2
  70. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +75 -0
  71. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -0
  72. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +38 -0
  73. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +41 -0
  74. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +24 -0
  75. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +34 -0
  76. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -0
  77. package/dist/components/custom/dot-flow-field/constants.d.ts +48 -0
  78. package/dist/components/custom/dot-flow-field/index.d.ts +5 -0
  79. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -0
  80. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +20 -0
  81. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -0
  82. package/dist/components/custom/easing/EasingConfigurator.vue.d.ts +33 -0
  83. package/dist/components/custom/easing/EasingPicker.vue.d.ts +49 -0
  84. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +75 -0
  85. package/dist/components/custom/easing/constants.d.ts +28 -0
  86. package/dist/components/custom/easing/index.d.ts +3 -0
  87. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +12 -2
  88. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +39 -0
  89. package/dist/components/custom/fourier-field/constants.d.ts +7 -0
  90. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +1 -1
  91. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +4 -2
  92. package/dist/components/custom/goo-blob/composables/uniformBridgeWGPU.d.ts +24 -0
  93. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +18 -11
  94. package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +23 -0
  95. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -0
  96. package/dist/components/custom/handmark/HandMark.vue.d.ts +1 -1
  97. package/dist/components/custom/icon-chip/types.d.ts +11 -1
  98. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +3 -1
  99. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
  100. package/dist/components/custom/spa-view/SpaView.vue.d.ts +50 -0
  101. package/dist/components/custom/spa-view/index.d.ts +2 -0
  102. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +10 -0
  103. package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +42 -0
  104. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +1 -1
  105. package/dist/components/ui/_shared/menuItemVariants.d.ts +1 -1
  106. package/dist/components/ui/badge/index.d.ts +1 -1
  107. package/dist/components/ui/button/Button.vue.d.ts +5 -2
  108. package/dist/components/ui/button/index.d.ts +2 -2
  109. package/dist/components/ui/card/Card.vue.d.ts +34 -4
  110. package/dist/components/ui/card/CardHeader.vue.d.ts +42 -16
  111. package/dist/components/ui/card/ScrollCard.vue.d.ts +33 -0
  112. package/dist/components/ui/card/ScrollCardHeader.vue.d.ts +17 -0
  113. package/dist/components/ui/card/index.d.ts +2 -0
  114. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
  115. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
  116. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +2 -2
  117. package/dist/components/ui/command/Command.vue.d.ts +1 -1
  118. package/dist/components/ui/drawer/Drawer.vue.d.ts +46 -33
  119. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +7 -8
  120. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +2 -2
  121. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +1 -1
  122. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +2 -2
  123. package/dist/components/ui/drawer/composables/drawerSnapContext.d.ts +26 -0
  124. package/dist/components/ui/drawer/composables/useDrawerSnap.d.ts +17 -0
  125. package/dist/components/ui/drawer/constants.d.ts +45 -0
  126. package/dist/components/ui/drawer/index.d.ts +23 -15
  127. package/dist/components/ui/focus-scope/FocusScope.vue.d.ts +20 -0
  128. package/dist/components/ui/focus-scope/index.d.ts +2 -0
  129. package/dist/components/ui/index.d.ts +1 -0
  130. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +3 -2
  131. package/dist/components/ui/select/SelectContent.vue.d.ts +1 -1
  132. package/dist/components/ui/sheet/index.d.ts +1 -1
  133. package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
  134. package/dist/components/ui/toast/Toast.vue.d.ts +5 -2
  135. package/dist/components/ui/toast/use-toast.d.ts +14 -0
  136. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  137. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +13 -6
  138. package/dist/composables/glass/index.d.ts +5 -2
  139. package/dist/composables/glass/useSpecularPointer.d.ts +33 -0
  140. package/dist/composables/glass/useSpecularTracking.d.ts +20 -0
  141. package/dist/composables/glass/vSpecular.d.ts +2 -0
  142. package/dist/composables/glass/webgl/shaders/flow.glsl.d.ts +1 -0
  143. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -0
  144. package/dist/composables/glass/webgpu/index.d.ts +2 -0
  145. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +54 -0
  146. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +84 -0
  147. package/dist/composables/motion/core/index.d.ts +1 -0
  148. package/dist/composables/motion/index.d.ts +4 -0
  149. package/dist/composables/motion/useDockCtaReceive.d.ts +59 -0
  150. package/dist/composables/motion/useDragMorph.d.ts +77 -0
  151. package/dist/composables/motion/useLiquidFlex.d.ts +11 -0
  152. package/dist/composables/motion/useLiquidPress.d.ts +71 -0
  153. package/dist/composables/motion/useLiquidReveal.d.ts +51 -0
  154. package/dist/composables/motion/useNumericTransition.d.ts +3 -3
  155. package/dist/composables/motion/usePointerVelocityField.d.ts +98 -0
  156. package/dist/concentric.d.ts +1 -0
  157. package/dist/concentric.js +562 -0
  158. package/dist/configurator.js +3 -2
  159. package/dist/confirm-dialog.js +22 -24
  160. package/dist/constellation.js +11 -11
  161. package/dist/context-menu.js +3 -3
  162. package/dist/controls.js +1 -1
  163. package/dist/createCanvasLifecycle-CHD5XrDW.js +82 -0
  164. package/dist/data-table.js +1 -1
  165. package/dist/dialog.js +2 -2
  166. package/dist/dock.js +564 -457
  167. package/dist/{dockContext-Bu1Avy-a.js → dockContext-BNfyPLe9.js} +1 -1
  168. package/dist/dom.js +5 -5
  169. package/dist/dot-flow-field.d.ts +1 -0
  170. package/dist/dot-flow-field.js +604 -0
  171. package/dist/drawer.d.ts +1 -0
  172. package/dist/drawer.js +380 -0
  173. package/dist/{dropdown-menu-BJ7E9js_.js → dropdown-menu-CofSZuk8.js} +14 -15
  174. package/dist/dropdown-menu.js +1 -1
  175. package/dist/easing.d.ts +1 -0
  176. package/dist/easing.js +463 -0
  177. package/dist/expandable-container.js +7 -4
  178. package/dist/fading-scroll.js +1 -1
  179. package/dist/focus-scope.d.ts +1 -0
  180. package/dist/focus-scope.js +23 -0
  181. package/dist/forms.js +7 -7
  182. package/dist/fourier-field.js +128 -116
  183. package/dist/fourier-math.js +1 -1
  184. package/dist/glass-panel.js +2 -2
  185. package/dist/glass-ui.css +1 -1
  186. package/dist/glass-ui.js +149 -341
  187. package/dist/goo-blob.js +830 -224
  188. package/dist/handmark.js +2 -2
  189. package/dist/header-ribbon.js +1 -1
  190. package/dist/hover-card.js +1 -1
  191. package/dist/hover-popover.js +1 -1
  192. package/dist/icon-chip.js +1 -1
  193. package/dist/icon-tooltip.js +1 -1
  194. package/dist/index.d.ts +1 -1
  195. package/dist/instrument-chassis.js +1 -1
  196. package/dist/label.js +1 -1
  197. package/dist/labeled-field.js +6 -6
  198. package/dist/metric-badge.js +1 -1
  199. package/dist/metric-cell.js +1 -1
  200. package/dist/metric-stack.js +4 -8
  201. package/dist/motion-core.js +36 -36
  202. package/dist/motion-curves.js +1 -1
  203. package/dist/motion.js +157 -55
  204. package/dist/notification.js +1 -1
  205. package/dist/number-field.js +1 -1
  206. package/dist/pager-dots.js +1 -1
  207. package/dist/paper-backdrop.js +1 -1
  208. package/dist/popover.js +1 -1
  209. package/dist/{compile-EXXzEr1q.js → procedural-color.glsl-CIFsJhwI.js} +1 -155
  210. package/dist/procedural-color.wgsl-CToRHugY.js +224 -0
  211. package/dist/progress.js +1 -1
  212. package/dist/pulse.js +1 -1
  213. package/dist/reactive.js +2 -2
  214. package/dist/scrolling-text.js +1 -1
  215. package/dist/search.js +9 -11
  216. package/dist/select.js +3 -3
  217. package/dist/separator.js +1 -1
  218. package/dist/{sheet-CquRYOAw.js → sheet-tZMg0E0w.js} +5 -5
  219. package/dist/sheet.js +1 -1
  220. package/dist/{slider-DQ95MET2.js → slider-DVb4HXU-.js} +3 -3
  221. package/dist/slider.js +1 -1
  222. package/dist/sortable-list.js +3 -3
  223. package/dist/spa-view.d.ts +1 -0
  224. package/dist/spa-view.js +46 -0
  225. package/dist/styles/animations.css +33 -9
  226. package/dist/styles/border-progress.css +109 -0
  227. package/dist/styles/cards.css +76 -0
  228. package/dist/styles/components.css +1 -1
  229. package/dist/styles/critical-partition.mjs +140 -0
  230. package/dist/styles/critical.css +12 -0
  231. package/dist/styles/deferred.css +31 -0
  232. package/dist/styles/dock/density.css +45 -0
  233. package/dist/styles/dock/layers.css +54 -30
  234. package/dist/styles/dock/morph.css +124 -7
  235. package/dist/styles/dock/overflow.css +16 -2
  236. package/dist/styles/dock/shell.css +54 -16
  237. package/dist/styles/dock.css +32 -0
  238. package/dist/styles/drawer.css +81 -35
  239. package/dist/styles/glass/deep.css +44 -0
  240. package/dist/styles/glass/ladder.css +87 -31
  241. package/dist/styles/glass/material.css +78 -15
  242. package/dist/styles/glass/reveal.css +136 -0
  243. package/dist/styles/glass/rim.css +100 -0
  244. package/dist/styles/glass/surfaces.css +101 -3
  245. package/dist/styles/glass-refract.css +96 -44
  246. package/dist/styles/glass-specular-track.css +7 -0
  247. package/dist/styles/glass.css +3 -0
  248. package/dist/styles/hover-popover.css +7 -6
  249. package/dist/styles/icon-chip.css +77 -15
  250. package/dist/styles/index.css +21 -9
  251. package/dist/styles/instrument-chassis.css +66 -3
  252. package/dist/styles/scroll-choreography.css +300 -0
  253. package/dist/styles/segmented-tabs.css +31 -0
  254. package/dist/styles/theme/bridges.css +11 -0
  255. package/dist/styles/theme/literals.css +11 -2
  256. package/dist/styles/theme/radius.css +6 -1
  257. package/dist/styles/tokens/dark-arm.css +98 -26
  258. package/dist/styles/tokens/glass-deep.css +75 -0
  259. package/dist/styles/tokens/glass-fx.css +333 -0
  260. package/dist/styles/tokens/glass.css +39 -319
  261. package/dist/styles/tokens/light-dark.css +15 -2
  262. package/dist/styles/tokens/offsets.css +116 -0
  263. package/dist/styles/tokens/on-glass-fg.css +39 -0
  264. package/dist/styles/tokens/property-regs.css +127 -0
  265. package/dist/styles/tokens/scale-paper.css +117 -89
  266. package/dist/styles/tokens/scheme-motion.css +70 -32
  267. package/dist/styles/tokens/scroll-tokens.css +123 -0
  268. package/dist/styles/tokens/{offsets-sizing.css → sizing.css} +37 -100
  269. package/dist/styles/tokens.css +9 -3
  270. package/dist/styles/typography/semantic.css +8 -8
  271. package/dist/styles/typography/utilities.css +22 -7
  272. package/dist/styles/utilities/animate.css +27 -24
  273. package/dist/styles/utilities/base-misc.css +255 -0
  274. package/dist/styles/utilities/base.css +47 -261
  275. package/dist/styles/utilities/btn.css +3 -1
  276. package/dist/styles/utilities/metal.css +189 -0
  277. package/dist/styles/utilities.css +14 -7
  278. package/dist/switch.js +1 -1
  279. package/dist/tabs.js +220 -107
  280. package/dist/timeline.js +2 -2
  281. package/dist/toast.js +1 -1
  282. package/dist/toggle-group.js +1 -1
  283. package/dist/tooltip.js +1 -1
  284. package/dist/typewriter.js +1 -1
  285. package/dist/useCanvas2D-B8w_E3Rr.js +83 -0
  286. package/dist/useConfiguratorState-DNlOh6c8.js +161 -0
  287. package/dist/useDragMorph-DgxnsVJz.js +102 -0
  288. package/dist/useLiquidPress-kfb4KX79.js +39 -0
  289. package/dist/usePointerVelocityField-JbRd5CrM.js +137 -0
  290. package/dist/useSpring-C0jyvEJB.js +40 -0
  291. package/dist/useSpringMount-q1amq1SJ.js +71 -0
  292. package/dist/useSpringPress-BsqPr7FJ.js +34 -0
  293. package/dist/{useTouchGate-28Tk2-t2.js → useTouchGate-CBZTD4SD.js} +1 -1
  294. package/dist/vSpecular-CQFmLNzA.js +68 -0
  295. package/dist/vendor-CKmzio-i.js +226 -0
  296. package/dist/watercolor-dot.js +2 -2
  297. package/package.json +126 -22
  298. package/src/styles/animations.css +33 -9
  299. package/src/styles/border-progress.css +109 -0
  300. package/src/styles/cards.css +76 -0
  301. package/src/styles/critical-partition.mjs +140 -0
  302. package/src/styles/dock/density.css +45 -0
  303. package/src/styles/dock/layers.css +54 -30
  304. package/src/styles/dock/morph.css +124 -7
  305. package/src/styles/dock/overflow.css +16 -2
  306. package/src/styles/dock/shell.css +54 -16
  307. package/src/styles/dock.css +32 -0
  308. package/src/styles/drawer.css +81 -35
  309. package/src/styles/glass/deep.css +44 -0
  310. package/src/styles/glass/ladder.css +87 -31
  311. package/src/styles/glass/material.css +78 -15
  312. package/src/styles/glass/reveal.css +136 -0
  313. package/src/styles/glass/rim.css +100 -0
  314. package/src/styles/glass/surfaces.css +101 -3
  315. package/src/styles/glass-refract.css +96 -44
  316. package/src/styles/glass-specular-track.css +7 -0
  317. package/src/styles/glass.css +3 -0
  318. package/src/styles/hover-popover.css +7 -6
  319. package/src/styles/icon-chip.css +77 -15
  320. package/src/styles/index.css +12 -0
  321. package/src/styles/instrument-chassis.css +66 -3
  322. package/src/styles/scroll-choreography.css +300 -0
  323. package/src/styles/segmented-tabs.css +31 -0
  324. package/src/styles/theme/bridges.css +11 -0
  325. package/src/styles/theme/literals.css +11 -2
  326. package/src/styles/theme/radius.css +6 -1
  327. package/src/styles/tokens/dark-arm.css +98 -26
  328. package/src/styles/tokens/glass-deep.css +75 -0
  329. package/src/styles/tokens/glass-fx.css +333 -0
  330. package/src/styles/tokens/glass.css +39 -319
  331. package/src/styles/tokens/light-dark.css +15 -2
  332. package/src/styles/tokens/offsets.css +116 -0
  333. package/src/styles/tokens/on-glass-fg.css +39 -0
  334. package/src/styles/tokens/property-regs.css +127 -0
  335. package/src/styles/tokens/scale-paper.css +117 -89
  336. package/src/styles/tokens/scheme-motion.css +70 -32
  337. package/src/styles/tokens/scroll-tokens.css +123 -0
  338. package/src/styles/tokens/{offsets-sizing.css → sizing.css} +37 -100
  339. package/src/styles/tokens.css +9 -3
  340. package/src/styles/typography/semantic.css +8 -8
  341. package/src/styles/typography/utilities.css +22 -7
  342. package/src/styles/utilities/animate.css +27 -24
  343. package/src/styles/utilities/base-misc.css +255 -0
  344. package/src/styles/utilities/base.css +47 -261
  345. package/src/styles/utilities/btn.css +3 -1
  346. package/src/styles/utilities/metal.css +189 -0
  347. package/src/styles/utilities.css +14 -7
  348. package/dist/CardAction-XH4YBVEK.js +0 -158
  349. package/dist/Notification-DKjKsQq8.js +0 -100
  350. package/dist/NumberFieldContent-1VtwDSgf.js +0 -145
  351. package/dist/Toaster-Bm_HQSpc.js +0 -263
  352. package/dist/check-njhk-vfu.js +0 -7
  353. package/dist/chevron-down-DKkxb4VV.js +0 -7
  354. package/dist/chevron-right-CPXbqQQz.js +0 -7
  355. package/dist/chevron-up-n_24SqI-.js +0 -7
  356. package/dist/createLucideIcon-DydS2qgk.js +0 -43
  357. package/dist/minimize-2-BV31Ob_h.js +0 -38
  358. package/dist/search-BSGrf2Sk.js +0 -12
  359. package/dist/useCanvas2D-ClrQuZtp.js +0 -96
  360. package/dist/useConfiguratorState-kiIlun8I.js +0 -303
  361. package/dist/useSpecularTracking-Bo5su68i.js +0 -32
  362. package/dist/useSpringMount-CvopqiFr.js +0 -108
  363. package/dist/useViewTransition-COsPjQVZ.js +0 -47
  364. package/dist/x-BUwTKe50.js +0 -10
  365. /package/dist/{CollapsibleContent-C_s6fG7r.js → CollapsibleContent-68dEXIAl.js} +0 -0
  366. /package/dist/{InstrumentChassis-UUJX0-mW.js → InstrumentChassis-Bx0F_q5g.js} +0 -0
  367. /package/dist/{Label-Ck9SWEKM.js → Label-C2ejNWeC.js} +0 -0
  368. /package/dist/{ModalOverlay-CkPRRgl_.js → ModalOverlay-D1VrWyoi.js} +0 -0
  369. /package/dist/{PaperBackdrop-nBKe0vkB.js → PaperBackdrop-Vf3tlpvd.js} +0 -0
  370. /package/dist/{SelectGroup-Dcczq44n.js → SelectGroup-DwwjicPY.js} +0 -0
  371. /package/dist/{SelectSeparator-DK2y1Bun.js → SelectSeparator-DXswVdRz.js} +0 -0
  372. /package/dist/{Separator-BArl4OaB.js → Separator-pKF0oA4M.js} +0 -0
  373. /package/dist/{Switch-Dr--uLGH.js → Switch-CwYNf8bo.js} +0 -0
  374. /package/dist/{_plugin-vue_export-helper-CBt_VvXa.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
  375. /package/dist/{badge-UILT_3pZ.js → badge-D9XWW4GT.js} +0 -0
  376. /package/dist/{createContext-B2RaZ-b8.js → createContext-CpBNTRMI.js} +0 -0
  377. /package/dist/{math-DeuJwLFx.js → math-BINYmg5z.js} +0 -0
  378. /package/dist/{menuItemVariants-DWRQXBxJ.js → menuItemVariants-D8VNHq22.js} +0 -0
  379. /package/dist/{prng-Cg22zv8g.js → prng-Za0Rmgag.js} +0 -0
  380. /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CUyHr5Uu.js} +0 -0
  381. /package/dist/{springPresets-WXaLbu8u.js → springPresets-CFQGQfdl.js} +0 -0
  382. /package/dist/{useAnimatedNumber-C_3wZLx4.js → useAnimatedNumber-BfUq2bUM.js} +0 -0
  383. /package/dist/{useInterval-CNdua40W.js → useInterval-CvK1mL92.js} +0 -0
  384. /package/dist/{useLiquidFlex-C12hXwOZ.js → useLiquidFlex-mZPMiNXh.js} +0 -0
  385. /package/dist/{useRAFLoop-CdwJ7284.js → useRAFLoop-UYa4zoiN.js} +0 -0
  386. /package/dist/{useResizeObserver-V6nq5gJb.js → useResizeObserver-Bpoi7tRE.js} +0 -0
  387. /package/dist/{useResolveTokenColor-NUG2zYAW.js → useResolveTokenColor-vAylyR0x.js} +0 -0
  388. /package/dist/{useSortable-BVqlJRBR.js → useSortable-DHjtZSEd.js} +0 -0
  389. /package/dist/{useSurfaceAxis-CMnF2zHb.js → useSurfaceAxis-g0NloYEF.js} +0 -0
  390. /package/dist/{useTextHighlight-NmBM5V_4.js → useTextHighlight-CWEi25hf.js} +0 -0
  391. /package/dist/{useTimer-B_PAasDL.js → useTimer-BHJOKr35.js} +0 -0
  392. /package/dist/{useUserInvalidAria-CDfJuakL.js → useUserInvalidAria-y5namzeE.js} +0 -0
  393. /package/dist/{useViewportReady-CvBcCYDf.js → useViewportReady-anbac3m6.js} +0 -0
  394. /package/dist/{vReveal-D9k0jADx.js → vReveal-Czsb7zQC.js} +0 -0
@@ -0,0 +1,255 @@
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
+ /* ── Shimmer text effects ──
216
+ BB.W-METAL-SHIMMER — the gold-only `gold-shimmer-slide` is RETIRED (clean
217
+ break, no alias); `.gold-shimmer` re-points onto the metal-PARAMETERIZED
218
+ `metal-shimmer-sweep` keyframe with `--metal-shimmer-color: gold`. The gold
219
+ gradient stops + the `background-size`/`background-clip` + the PRM bracket are
220
+ byte-PRESERVED — the gold READ is unchanged; only the keyframe NAME generalizes.
221
+ The text-fill + background-clip composition is load-bearing visual (the gold
222
+ gradient itself); only the `animation:` line is wrapped in the PRM no-preference
223
+ bracket so PRM users see the static gradient without the slide. */
224
+ .gold-shimmer {
225
+ --metal-shimmer-color: gold;
226
+ background: linear-gradient(90deg, var(--color-gold-dark), var(--color-gold-light), var(--color-gold), var(--color-gold-light), var(--color-gold-dark));
227
+ background-size: 250% 100%;
228
+ background-clip: text;
229
+ -webkit-background-clip: text;
230
+ color: transparent;
231
+ }
232
+ @media (prefers-reduced-motion: no-preference) {
233
+ .gold-shimmer {
234
+ animation: metal-shimmer-sweep var(--duration-shimmer) linear infinite;
235
+ }
236
+ }
237
+
238
+ /* ── Keyboard key ── */
239
+ .kbd {
240
+ display: inline-flex;
241
+ align-items: center;
242
+ justify-content: center;
243
+ min-height: 1.5rem;
244
+ min-width: 1.5rem;
245
+ padding: 0 0.375rem;
246
+ font-family: var(--font-mono);
247
+ font-size: var(--type-micro);
248
+ background: var(--muted);
249
+ border: 1px solid var(--border);
250
+ border-radius: var(--radius-sm);
251
+ box-shadow: 0 1px 0 1px color-mix(in srgb, var(--border) 30%, transparent);
252
+ line-height: 1;
253
+ }
254
+
255
+ }
@@ -1,5 +1,12 @@
1
1
  /* utilities/base.css
2
- The @layer components base half — section-description, labeled-field, popover-content, scrollbar, focus-ring, hairline-accent, interactive-item, tap-squish, status-dot, depth-text, preserve-3d, ios input fix, scroll-fade masks, fading-scroll (scroll-state-driven edge fade), deferred-section, scroll-timeline host, shimmer text, keyboard key.
2
+ The @layer components FORM/INTERACTION half — the @property fade pair (read by
3
+ the .fading-scroll rules in base-misc.css), section-description, labeled-field
4
+ (incl. the width-contract + error region), popover-content, scrollbar,
5
+ focus-ring, hairline-accent, interactive-item, tap-squish.
6
+ BB.W-CARVE3 carved the post-tap-squish tail (status-dot → kbd, incl. the
7
+ fading-scroll recipe) into the adjacent base-misc.css partial so each stays
8
+ under the no-god-module 500-line bound. The two adjacent same-`@layer
9
+ components` blocks compose identically — the dist is byte-isomorphic.
3
10
  Carved from the utilities.css cascade root; @import-ed by utilities.css in
4
11
  cascade order. See docs/precepts/design-idioms.md §cohesion-aware partials. */
5
12
 
@@ -127,8 +134,9 @@
127
134
  (PopoverContent, DropdownMenuContent, SelectContent, etc.).
128
135
  Covers radius + outline + popover-foreground; consumers compose
129
136
  this with `.glass-floating` (bg + blur + border + shadow), with
130
- `.popover-animate` (data-state animation), and with the per-host
131
- z-rung. The floating-tier shadow comes from
137
+ `.glass-reveal` (the spring-clocked data-state LIQUID-ENTER —
138
+ BB.W-LIQUID-REVEAL, off the retired `popover-animate`), and with the
139
+ per-host z-rung. The floating-tier shadow comes from
132
140
  `--glass-shadow-floating` via `.glass-floating`, replacing the
133
141
  `shadow-md`/`shadow-lg` literals that bypassed the canonical
134
142
  cascade. */
@@ -278,264 +286,42 @@
278
286
  }
279
287
  }
280
288
 
281
- /* ── Status dot indicator ── */
282
- .status-dot {
283
- display: inline-block;
284
- width: 0.5rem;
285
- height: 0.5rem;
286
- border-radius: var(--radius-pill);
287
- flex-shrink: 0;
288
- transition:
289
- color var(--duration-fast) var(--ease-standard),
290
- background var(--duration-fast) var(--ease-standard),
291
- box-shadow var(--duration-fast) var(--ease-standard);
292
- }
293
- /* ── Depth text (layered offset stamp) ──
294
- AW.W26 — composes the `--text-shadow-depth` @theme identity token (the
295
- hard offset stack + soft ambient tail) instead of a hand-rolled multi-stop
296
- literal. The token holds the stack inside the `@theme` defs (gate 4) and
297
- re-tints under `.dark` via `--shadow`/`--shadow-color` BY CONSTRUCTION. */
298
- .depth-text {
299
- --depth-color-primary: var(--primary);
300
-
301
- color: var(--depth-color-primary);
302
- text-shadow: var(--text-shadow-depth);
303
- }
304
-
305
- /* ── 3D preserve ── */
306
- .preserve-3d {
307
- transform-style: preserve-3d;
308
- }
309
-
310
- /* ── iOS input font-size fix (prevent auto-zoom) ── */
311
- .ios input,
312
- .ios select,
313
- .ios textarea,
314
- .ios [contenteditable] {
315
- font-size: max(1rem, 1em);
316
- }
317
-
318
- /* ── Scroll fade masks ──
319
- Single-source `mask-image` (AV.W16 TW7): the `-webkit-` companion is
320
- dropped — Tailwind v4's Lightning CSS build pipeline auto-prefixes per
321
- the browserslist targets, mirroring the glass ladder's single-source
322
- `backdrop-filter` (glass.css). NOTE: this is the consistency cut; it
323
- does NOT conflict with W15's `@supports`-gated older-Safari mask
324
- fallback (that fallback is the distinct case where the companion is
325
- genuinely needed and W15 gates it). */
326
- .scroll-fade-mask {
327
- mask-image: linear-gradient(to right, transparent, black var(--mask-fade-width), black calc(100% - var(--mask-fade-width)), transparent);
328
- }
329
-
330
- .scroll-fade-top {
331
- mask-image: linear-gradient(to bottom, transparent, black var(--mask-fade-width));
332
- }
333
-
334
- .scroll-fade-bottom {
335
- mask-image: linear-gradient(to bottom, black calc(100% - var(--mask-fade-width)), transparent);
336
- }
337
-
338
- .scroll-fade-y {
339
- mask-image: linear-gradient(to bottom, transparent, black var(--mask-fade-width), black calc(100% - var(--mask-fade-width)), transparent);
340
- }
341
-
342
- /* ── Fading scroll — the scroll-STATE-driven edge fade (BA.W-FADING-SCROLL) ──
343
- `<FadingScroll>`'s recipe. SUPERSEDES the scroll-BLIND `.scroll-fade-*`
344
- masks above (which feathered both edges unconditionally — the R8-08 "Shy"
345
- defect). Here each edge's ramp width is a registered `--fade-start` /
346
- `--fade-end` custom (above, default 0px = SHARP), driven by the
347
- `scroll(self)` timeline so the start edge feathers only past `scroll > 0`
348
- and the end edge only while trailing overflow remains.
349
-
350
- The root IS the scroll port (the component sets overflow via the consumer's
351
- utilities — `overflow-x-auto` / `overflow-y-auto` come from the class the
352
- consumer passes; the axis floor below sets the OTHER axis). The 4-stop
353
- mask reads the two customs; at rest both are 0px so the gradient is a flat
354
- opaque pass-through (no feather). */
355
- .fading-scroll {
356
- /* The base mask is axis-specialized by the modifier classes below. The
357
- default-x case uses the inline ramp; the y case the block ramp. */
358
- mask-image: linear-gradient(
359
- to right,
360
- transparent 0,
361
- black var(--fade-start),
362
- black calc(100% - var(--fade-end)),
363
- transparent 100%
364
- );
365
- }
366
- .fading-scroll--x {
367
- overflow-x: auto;
368
- mask-image: linear-gradient(
369
- to right,
370
- transparent 0,
371
- black var(--fade-start),
372
- black calc(100% - var(--fade-end)),
373
- transparent 100%
374
- );
375
- }
376
- .fading-scroll--y {
377
- overflow-y: auto;
378
- mask-image: linear-gradient(
379
- to bottom,
380
- transparent 0,
381
- black var(--fade-start),
382
- black calc(100% - var(--fade-end)),
383
- transparent 100%
384
- );
385
- }
386
-
387
- /* The NATIVE primary path: drive the per-edge customs off a `scroll(self)`
388
- timeline — ZERO JS on a supporting engine (the `scroll-driven.css` /
389
- Baseline-Newly-Available bar). UNLIKE `scroll-driven.css` this is NOT
390
- wrapped in `prefers-reduced-motion: no-preference` — the fade is a
391
- LEGIBILITY cue, not motion, so it stays present under PRM (it merely stops
392
- interpolating; the discrete overflow-edge presence stays correct, and the
393
- registered customs make even the static endpoints land right). */
394
- @supports (animation-timeline: scroll()) {
395
- /* The start edge: from sharp (0) to feathered, completing within the
396
- first `--fade-scroll-width` of scroll — so at `scroll = 0` the start is
397
- SHARP and it ramps in only once the user genuinely scrolls past. */
398
- @keyframes gl-fade-start-in {
399
- from {
400
- --fade-start: 0px;
401
- }
402
- to {
403
- --fade-start: var(--fade-scroll-width);
404
- }
405
- }
406
- /* The end edge: feathered while trailing overflow remains, ramping OUT to
407
- sharp over the last `--fade-scroll-width` of scroll — so at the scroll
408
- end (no trailing overflow) the end is SHARP. */
409
- @keyframes gl-fade-end-out {
410
- from {
411
- --fade-end: var(--fade-scroll-width);
412
- }
413
- to {
414
- --fade-end: 0px;
415
- }
416
- }
417
- /* x axis — `scroll(self inline)`; two animations on the ONE element, each
418
- gated by `animation-range` to the start / end sliver of the scroll
419
- distance. `fadeStart`/`fadeEnd` props toggle their respective
420
- animation off via the `[data-fade-*]` presence attrs. */
421
- .fading-scroll--x[data-fade-start] {
422
- animation: gl-fade-start-in linear both;
423
- animation-timeline: scroll(self inline);
424
- animation-range: 0 var(--fade-scroll-width);
425
- }
426
- .fading-scroll--x[data-fade-end] {
427
- animation: gl-fade-end-out linear both;
428
- animation-timeline: scroll(self inline);
429
- animation-range: calc(100% - var(--fade-scroll-width)) 100%;
430
- }
431
- /* BOTH edges on one element compose as two named animations. */
432
- .fading-scroll--x[data-fade-start][data-fade-end] {
433
- animation:
434
- gl-fade-start-in linear both,
435
- gl-fade-end-out linear both;
436
- animation-timeline: scroll(self inline), scroll(self inline);
437
- animation-range:
438
- 0 var(--fade-scroll-width),
439
- calc(100% - var(--fade-scroll-width)) 100%;
440
- }
441
- /* y axis — `scroll(self block)`. */
442
- .fading-scroll--y[data-fade-start] {
443
- animation: gl-fade-start-in linear both;
444
- animation-timeline: scroll(self block);
445
- animation-range: 0 var(--fade-scroll-width);
446
- }
447
- .fading-scroll--y[data-fade-end] {
448
- animation: gl-fade-end-out linear both;
449
- animation-timeline: scroll(self block);
450
- animation-range: calc(100% - var(--fade-scroll-width)) 100%;
451
- }
452
- .fading-scroll--y[data-fade-start][data-fade-end] {
453
- animation:
454
- gl-fade-start-in linear both,
455
- gl-fade-end-out linear both;
456
- animation-timeline: scroll(self block), scroll(self block);
457
- animation-range:
458
- 0 var(--fade-scroll-width),
459
- calc(100% - var(--fade-scroll-width)) 100%;
460
- }
461
- }
462
-
463
- /* ── Deferred section — render-skip an offscreen subtree (AQ.W3 §5) ──────
464
- `content-visibility: auto` skips layout/paint/style of an offscreen
465
- subtree — the INP-under-load lever (fourier γ, muster, speedtest, words).
466
- `contain-intrinsic-size: auto <estimate>` is measurement-safe: the `auto`
467
- prefix makes the engine REMEMBER the last-rendered size (no scroll-jump on
468
- re-entry); plain `<estimate>` freezes the section + thrashes the scrollbar
469
- — the trap this closes. Estimate is token-driven (`--deferred-section-
470
- size`, default 30rem). `.deferred-section--cached` →
471
- `content-visibility: hidden` (always skipped, state CACHED — cheaper to
472
- re-show than `display:none`). Baseline Widely; unsupporting engines render
473
- normally. JS HOOK: the engine fires `contentvisibilityautostatechange`
474
- { skipped } at the render-skip boundary — pair with `useRAFLoop`
475
- pause/resume: `el.addEventListener('contentvisibilityautostatechange',
476
- e => e.skipped ? loop.pause() : loop.resume())`. */
477
- .deferred-section {
478
- content-visibility: auto;
479
- contain-intrinsic-size: auto var(--deferred-section-size, 30rem);
480
- }
481
- .deferred-section--cached {
482
- content-visibility: hidden;
483
- contain-intrinsic-size: auto var(--deferred-section-size, 30rem);
484
- }
485
-
486
- /* ── Card scroll-timeline host (AI.W1-α) ───────────────────────────────
487
- Canonical scroll-overflow host that emits the `--card-scroll` named
488
- scroll-timeline consumed by `<CardHeader shrink>`. Apply to the
489
- scroll-overflow ancestor (typically the `<Card>` itself OR a wrapper
490
- inside it that carries `overflow-y: auto`).
491
-
492
- `contain: layout style paint` isolates the named timeline so child
493
- animations respond to THIS host's scroll only — not to portal-
494
- triggered layout shifts in ancestor containers (the load-bearing
495
- isolation guarantee the value.js `PaneHeader.vue:18-29` comment
496
- called out and the AI.W1 spec §1.2 ratified as canon).
497
-
498
- Disambiguated from `.scroll-fade-*` (mask-image fade gradient at
499
- the container's leading/trailing edge) — `.card-scroll-host` does
500
- NOT paint any visual; it only emits the timeline. */
501
- .card-scroll-host {
502
- contain: layout style paint;
503
- scroll-timeline: --card-scroll block;
504
- }
505
-
506
- /* ── Shimmer text effects ──
507
- The text-fill + background-clip composition is load-bearing visual
508
- (the gold gradient itself); only the `animation:` line is wrapped in
509
- the PRM no-preference bracket so PRM users see the static gradient
510
- without the slide animation. */
511
- .gold-shimmer {
512
- background: linear-gradient(90deg, var(--color-gold-dark), var(--color-gold-light), var(--color-gold), var(--color-gold-light), var(--color-gold-dark));
513
- background-size: 250% 100%;
514
- background-clip: text;
515
- -webkit-background-clip: text;
516
- color: transparent;
517
- }
518
- @media (prefers-reduced-motion: no-preference) {
519
- .gold-shimmer {
520
- animation: gold-shimmer-slide var(--duration-shimmer) linear infinite;
521
- }
522
- }
523
-
524
- /* ── Keyboard key ── */
525
- .kbd {
526
- display: inline-flex;
527
- align-items: center;
528
- justify-content: center;
529
- min-height: 1.5rem;
530
- min-width: 1.5rem;
531
- padding: 0 0.375rem;
532
- font-family: var(--font-mono);
533
- font-size: var(--type-micro);
534
- background: var(--muted);
535
- border: 1px solid var(--border);
536
- border-radius: var(--radius-sm);
537
- box-shadow: 0 1px 0 1px color-mix(in srgb, var(--border) 30%, transparent);
538
- line-height: 1;
289
+ /* ── Glass-press — the interactive press register (BB.W-PRESS-UNIFY) ──
290
+ The CSS half of the `<Card :pressable>` / interactive-glass press. Two
291
+ coupled legs on ONE `--card-press-t` drive (the `useLiquidPress` writes the
292
+ JS-driven value; the CSS `:active` is the no-JS / SSR floor):
293
+
294
+ • The SCALE leg is the co-composed `.tap-squish` (the Card binds both
295
+ classes), so the no-JS press already scales to `--scale-press` on the
296
+ `--spring-smooth` clock and the JS reciprocal squish wins while engaged.
297
+ • The BRIGHTNESS leg reads the `--card-press-t` drive directly — a sub-
298
+ perceptual `filter: brightness()` lift so the glass reads as DEFORMING +
299
+ catching light under the press, not just shrinking (the W-MOTION-CANON P3
300
+ coupling — fade/brightness coupled WITH the transform on the same drive).
301
+ `filter` is compositor-safe (the P5 ban targets layout props only —
302
+ `proof:no-layout-animation` greens it), so the lift never re-layouts.
303
+
304
+ The brightness leg rides the `--card-press-t` VALUE (the typed press drive),
305
+ NOT a CSS transition — it tracks the JS spring frame-for-frame and degrades to
306
+ the resting 0 (no lift) when JS is off. The press surface is INTERACTIVE: the
307
+ cursor + a WCAG-2.5.5 touch floor (`min-block-size`) read here, not on the
308
+ static-card register. The interruptibility + the PRM-instant snap are the JS
309
+ driver's (`useLiquidPress` → the kf `SpringProgress` re-seat + the PRM policy);
310
+ this is the CSS floor the JS enhances. */
311
+ .glass-press {
312
+ cursor: pointer;
313
+ min-block-size: max(0px, var(--control-floor, 0px));
314
+ /* The coupled brightness lift on the press drive (rest 0 → ~4% at full
315
+ press). The drive is the JS-written `--card-press-t`; with JS off it stays
316
+ the `@property` 0 initial so the filter is a no-op (`brightness(1)`). */
317
+ filter: brightness(calc(1 + var(--card-press-t, 0) * 0.04));
318
+ }
319
+ /* The press-drive typed registration so a downstream `calc()` interpolates the
320
+ VALUE (number) and an unwired/SSR card is the static rest frame. */
321
+ @property --card-press-t {
322
+ syntax: "<number>";
323
+ inherits: true;
324
+ initial-value: 0;
539
325
  }
540
326
 
541
327
  }
@@ -69,7 +69,9 @@
69
69
  }
70
70
 
71
71
  /* ── Sheet/drawer slide-out animation grammar ──
72
- Mirror of `.popover-animate` for sheet/drawer panels. Pairs with
72
+ The sheet/drawer-panel analogue of the overlay enter (the popover-class
73
+ surfaces now ride the spring-clocked `.glass-reveal`, BB.W-LIQUID-REVEAL).
74
+ Pairs with
73
75
  `slide-in-from-{top,right,bottom,left}-N` to compose side-keyed entries.
74
76
  The open path uses --duration-panel (slow, deliberate); the close path
75
77
  uses --duration-fast so dismiss feels snappy. R5 vocab.γ gap row 6;