@mkbabb/glass-ui 0.2.0 → 2.0.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 (942) hide show
  1. package/README.md +170 -70
  2. package/dist/CardFooter-Yi0xtLLd.js +129 -0
  3. package/dist/CollapsibleContent-DHRuXE3P.js +52 -0
  4. package/dist/CommandShortcut-_INFUMu6.js +285 -0
  5. package/dist/ContextMenuContent-CvXfU5qz.js +85 -0
  6. package/dist/ContextMenuSubContent-DCkweFW9.js +250 -0
  7. package/dist/DataTable-Ce00dbHD.js +460 -0
  8. package/dist/DialogContent-CmCijgX9.js +93 -0
  9. package/dist/DialogFooter-DRdaCok0.js +165 -0
  10. package/dist/DiscoGlyph-wRA02zAJ.js +132 -0
  11. package/dist/GlyphFace-BnPMUZ16.js +51 -0
  12. package/dist/HoverCardContent-4nN5-5bz.js +83 -0
  13. package/dist/HoverPopover-Btv4RQfv.js +80 -0
  14. package/dist/IconTooltip-ge_mBSWR.js +25 -0
  15. package/dist/Input-CbakTe3B.js +32 -0
  16. package/dist/InstrumentChassis-DOaVYyWq.js +65 -0
  17. package/dist/InstrumentRail-jHDqXj70.js +44 -0
  18. package/dist/Label-C8QMJSsf.js +32 -0
  19. package/dist/MetricBadge-DRBB18Xq.js +78 -0
  20. package/dist/ModalOverlay-DKLVY-cj.js +53 -0
  21. package/dist/Notification-DrI1DT2v.js +99 -0
  22. package/dist/PaperBackdrop-Bc2drCqJ.js +31 -0
  23. package/dist/PopoverContent-BCH4eYs8.js +121 -0
  24. package/dist/Progress-CCH-2UBR.js +126 -0
  25. package/dist/ScrollingText-7P8skg5W.js +40 -0
  26. package/dist/SelectGroup-O69GTQ77.js +31 -0
  27. package/dist/SelectScrollDownButton-yu8EYUnu.js +235 -0
  28. package/dist/SelectSeparator-GTHxKO0a.js +49 -0
  29. package/dist/Separator-_NCypg_C.js +37 -0
  30. package/dist/Switch-CL0uxu8F.js +41 -0
  31. package/dist/Toaster-DY8_jtHv.js +255 -0
  32. package/dist/ToggleGroupItem-BYG_8M9M.js +152 -0
  33. package/dist/TooltipProvider-C5QLSPto.js +104 -0
  34. package/dist/UnderlineTabs-BtrUcXn-.js +64 -0
  35. package/dist/_plugin-vue_export-helper-n-_DRHWS.js +8 -0
  36. package/dist/animated-digit.d.ts +1 -0
  37. package/dist/animated-digit.js +44 -0
  38. package/dist/api/index.d.ts +30 -0
  39. package/dist/api.js +2 -0
  40. package/dist/aurora.d.ts +1 -0
  41. package/dist/aurora.js +541 -0
  42. package/dist/badge-BbxVKZfw.js +49 -0
  43. package/dist/badge.d.ts +1 -0
  44. package/dist/badge.js +2 -0
  45. package/dist/button-BlOW34DT.js +70 -0
  46. package/dist/button.d.ts +1 -0
  47. package/dist/button.js +2 -0
  48. package/dist/card.d.ts +1 -0
  49. package/dist/card.js +2 -0
  50. package/dist/carousel.d.ts +2 -0
  51. package/dist/carousel.js +394 -0
  52. package/dist/check-dwgetki8.js +7 -0
  53. package/dist/chevron-down-DILQA1t6.js +7 -0
  54. package/dist/chevron-right-fS7fal2t.js +7 -0
  55. package/dist/chevron-up-BtYjYQOS.js +7 -0
  56. package/dist/cn-DJXf4yaB.js +97 -0
  57. package/dist/collapsible.d.ts +1 -0
  58. package/dist/collapsible.js +2 -0
  59. package/dist/command.d.ts +1 -0
  60. package/dist/command.js +2 -0
  61. package/dist/components/custom/animated-digit/AnimatedDigit.vue.d.ts +48 -0
  62. package/dist/components/custom/animated-digit/index.d.ts +2 -0
  63. package/dist/components/custom/aurora/Aurora.vue.d.ts +95 -0
  64. package/dist/components/custom/aurora/composables/color.d.ts +39 -0
  65. package/dist/components/custom/aurora/composables/configSource.d.ts +10 -0
  66. package/dist/components/custom/aurora/composables/runtime.d.ts +54 -0
  67. package/dist/components/custom/aurora/composables/useAurora.d.ts +67 -0
  68. package/dist/components/custom/aurora/composables/useCursorInteraction.d.ts +25 -0
  69. package/dist/components/custom/aurora/index.d.ts +9 -0
  70. package/dist/components/custom/aurora/presets.d.ts +121 -0
  71. package/dist/components/custom/aurora/renderMode.d.ts +30 -0
  72. package/dist/components/custom/aurora/shaders/aurora.frag.d.ts +1 -0
  73. package/dist/components/custom/aurora/shaders/aurora.vert.d.ts +1 -0
  74. package/dist/components/custom/configurator/Configurator.vue.d.ts +102 -0
  75. package/dist/components/custom/configurator/ConfiguratorLayer.vue.d.ts +68 -0
  76. package/dist/components/custom/configurator/ConfiguratorRow.vue.d.ts +63 -0
  77. package/dist/components/custom/configurator/density.d.ts +30 -0
  78. package/dist/components/custom/configurator/index.d.ts +6 -0
  79. package/dist/components/custom/configurator/useConfiguratorState.d.ts +45 -0
  80. package/dist/components/custom/confirm-dialog/ConfirmDialog.vue.d.ts +32 -0
  81. package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +23 -0
  82. package/dist/components/custom/disco-glyph/DiscoGlyph.vue.d.ts +58 -0
  83. package/dist/components/custom/disco-glyph/index.d.ts +1 -0
  84. package/dist/components/custom/dock/DockDropdownTrigger.vue.d.ts +29 -0
  85. package/dist/components/custom/dock/DockIconButton.vue.d.ts +30 -0
  86. package/dist/components/custom/dock/DockLayer.vue.d.ts +34 -0
  87. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +43 -0
  88. package/dist/components/custom/dock/DockSelectTrigger.vue.d.ts +29 -0
  89. package/dist/components/custom/dock/DockTabButton.vue.d.ts +39 -0
  90. package/dist/components/custom/dock/GlassDock.vue.d.ts +96 -0
  91. package/dist/components/custom/dock/composables/dockContext.d.ts +40 -0
  92. package/dist/components/custom/dock/composables/dockLayerContext.d.ts +29 -0
  93. package/dist/components/custom/dock/composables/index.d.ts +7 -0
  94. package/dist/components/custom/dock/composables/isTeleportedTarget.d.ts +9 -0
  95. package/dist/components/custom/dock/composables/useDockState.d.ts +70 -0
  96. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +34 -0
  97. package/dist/components/custom/dock/index.d.ts +9 -0
  98. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +40 -0
  99. package/dist/components/custom/glass-carousel/GlassCarousel.vue.d.ts +36 -0
  100. package/dist/components/custom/glass-carousel/GlassCarouselItem.vue.d.ts +28 -0
  101. package/dist/components/custom/glass-carousel/index.d.ts +4 -0
  102. package/dist/components/custom/glass-carousel/useGlassCarousel.d.ts +30 -0
  103. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +41 -0
  104. package/dist/components/custom/glass-panel/index.d.ts +2 -0
  105. package/dist/components/custom/glyph-face/GlyphFace.vue.d.ts +64 -0
  106. package/dist/components/custom/glyph-face/index.d.ts +2 -0
  107. package/dist/components/custom/glyph-face/keys.d.ts +35 -0
  108. package/dist/components/custom/header-ribbon/HeaderRibbon.vue.d.ts +31 -0
  109. package/dist/components/custom/header-ribbon/index.d.ts +2 -0
  110. package/dist/components/custom/header-ribbon/types.d.ts +7 -0
  111. package/dist/components/custom/hover-popover/HoverPopover.vue.d.ts +71 -0
  112. package/dist/components/custom/hover-popover/index.d.ts +1 -0
  113. package/dist/components/custom/icon-tooltip/IconTooltip.vue.d.ts +16 -0
  114. package/dist/components/custom/infinite-scroll/InfiniteScroll.vue.d.ts +33 -0
  115. package/dist/components/custom/infinite-scroll/composables/types.d.ts +21 -0
  116. package/dist/components/custom/infinite-scroll/composables/useInfiniteScroll.d.ts +9 -0
  117. package/dist/components/custom/instrument-chassis/ChassisDivider.vue.d.ts +30 -0
  118. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +82 -0
  119. package/dist/components/custom/instrument-chassis/index.d.ts +3 -0
  120. package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +91 -0
  121. package/dist/components/custom/instrument-rail/index.d.ts +2 -0
  122. package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +36 -0
  123. package/dist/components/custom/labeled-field/LabeledInput.vue.d.ts +15 -0
  124. package/dist/components/custom/labeled-field/LabeledSelect.vue.d.ts +18 -0
  125. package/dist/components/custom/labeled-field/LabeledSlider.vue.d.ts +16 -0
  126. package/dist/components/custom/labeled-field/LabeledSwitch.vue.d.ts +13 -0
  127. package/dist/components/custom/labeled-field/index.d.ts +5 -0
  128. package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +39 -0
  129. package/dist/components/custom/metric-badge/index.d.ts +1 -0
  130. package/dist/components/custom/metric-cell/MetricCell.vue.d.ts +97 -0
  131. package/dist/components/custom/metric-cell/index.d.ts +2 -0
  132. package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +103 -0
  133. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +92 -0
  134. package/dist/components/custom/metric-stack/index.d.ts +4 -0
  135. package/dist/components/custom/paper-backdrop/PaperBackdrop.vue.d.ts +21 -0
  136. package/dist/components/custom/paper-backdrop/index.d.ts +2 -0
  137. package/dist/components/custom/pulse/Pulse.vue.d.ts +53 -0
  138. package/dist/components/custom/pulse/index.d.ts +1 -0
  139. package/dist/components/custom/responsive-tabs/ResponsiveTabs.vue.d.ts +67 -0
  140. package/dist/components/custom/responsive-tabs/index.d.ts +2 -0
  141. package/dist/components/custom/scrolling-text/ScrollingText.vue.d.ts +20 -0
  142. package/dist/components/custom/scrolling-text/index.d.ts +1 -0
  143. package/dist/components/custom/search/FuzzySearch.vue.d.ts +16 -0
  144. package/dist/components/custom/search/SearchBar.vue.d.ts +30 -0
  145. package/dist/components/custom/search/composables/fuzzySearchIndex.d.ts +42 -0
  146. package/dist/components/custom/search/composables/types.d.ts +31 -0
  147. package/dist/components/custom/search/composables/useFuzzySearch.d.ts +12 -0
  148. package/dist/components/custom/sortable-list/SortableHandle.vue.d.ts +32 -0
  149. package/dist/components/custom/sortable-list/SortableItem.vue.d.ts +38 -0
  150. package/dist/components/custom/sortable-list/SortableList.vue.d.ts +76 -0
  151. package/dist/components/custom/sortable-list/context.d.ts +26 -0
  152. package/dist/components/custom/sortable-list/index.d.ts +4 -0
  153. package/dist/components/custom/stacked-icons/StackedIconGroup.vue.d.ts +30 -0
  154. package/dist/components/custom/stacked-icons/index.d.ts +2 -0
  155. package/dist/components/custom/stacked-icons/types.d.ts +18 -0
  156. package/dist/components/custom/status-dot/StatusDot.vue.d.ts +18 -0
  157. package/dist/components/custom/status-dot/index.d.ts +1 -0
  158. package/dist/components/custom/tabs/BouncyTabs.vue.d.ts +24 -0
  159. package/dist/components/custom/tabs/BouncyToggle.vue.d.ts +56 -0
  160. package/dist/components/custom/tabs/UnderlineTabs.vue.d.ts +17 -0
  161. package/dist/components/custom/timeline/ContinuousTimeline.vue.d.ts +118 -0
  162. package/dist/components/custom/timeline/GlassTimeline.vue.d.ts +114 -0
  163. package/dist/components/custom/timeline/ScrubberTimeline.vue.d.ts +29 -0
  164. package/dist/components/custom/timeline/SegmentedTimeline.vue.d.ts +46 -0
  165. package/dist/components/custom/timeline/geometry.d.ts +100 -0
  166. package/dist/components/custom/timeline/index.d.ts +2 -0
  167. package/dist/components/custom/timeline/types.d.ts +57 -0
  168. package/dist/components/custom/toggle-chip/ToggleChip.vue.d.ts +39 -0
  169. package/dist/components/custom/toggle-chip/index.d.ts +17 -0
  170. package/dist/components/custom/typewriter/TypewriterText.vue.d.ts +85 -0
  171. package/dist/components/custom/typewriter/composables/useTypewriter.d.ts +22 -0
  172. package/dist/components/custom/typewriter/types.d.ts +137 -0
  173. package/dist/components/custom/typewriter/utils/keyboard.d.ts +15 -0
  174. package/dist/components/custom/typewriter/utils/pausePatterns.d.ts +28 -0
  175. package/dist/components/custom/typewriter/utils/timing.d.ts +17 -0
  176. package/dist/components/custom/typewriter/utils/typoStateMachine.d.ts +24 -0
  177. package/dist/components/ui/_shared/ModalOverlay.vue.d.ts +90 -0
  178. package/dist/components/ui/_shared/index.d.ts +2 -0
  179. package/dist/components/ui/_shared/menuItemVariants.d.ts +32 -0
  180. package/dist/components/ui/_shared/useStalePropWarning.d.ts +27 -0
  181. package/dist/components/ui/accordion/Accordion.vue.d.ts +19 -0
  182. package/dist/components/ui/accordion/AccordionContent.vue.d.ts +18 -0
  183. package/dist/components/ui/accordion/AccordionItem.vue.d.ts +18 -0
  184. package/dist/components/ui/accordion/AccordionTrigger.vue.d.ts +20 -0
  185. package/dist/components/ui/accordion/index.d.ts +4 -0
  186. package/dist/components/ui/alert/Alert.vue.d.ts +19 -0
  187. package/dist/components/ui/alert/AlertDescription.vue.d.ts +17 -0
  188. package/dist/components/ui/alert/AlertTitle.vue.d.ts +17 -0
  189. package/dist/components/ui/alert/index.d.ts +8 -0
  190. package/dist/components/ui/avatar/Avatar.vue.d.ts +23 -0
  191. package/dist/components/ui/avatar/AvatarFallback.vue.d.ts +14 -0
  192. package/dist/components/ui/avatar/AvatarImage.vue.d.ts +4 -0
  193. package/dist/components/ui/avatar/index.d.ts +9 -0
  194. package/dist/components/ui/badge/Badge.vue.d.ts +20 -0
  195. package/dist/components/ui/badge/index.d.ts +7 -0
  196. package/dist/components/ui/button/Button.vue.d.ts +23 -0
  197. package/dist/components/ui/button/index.d.ts +7 -0
  198. package/dist/components/ui/card/Card.vue.d.ts +56 -0
  199. package/dist/components/ui/card/CardContent.vue.d.ts +17 -0
  200. package/dist/components/ui/card/CardDescription.vue.d.ts +17 -0
  201. package/dist/components/ui/card/CardFooter.vue.d.ts +17 -0
  202. package/dist/components/ui/card/CardHeader.vue.d.ts +55 -0
  203. package/dist/components/ui/card/CardTitle.vue.d.ts +17 -0
  204. package/dist/components/ui/card/index.d.ts +6 -0
  205. package/dist/components/ui/carousel/Carousel.vue.d.ts +37 -0
  206. package/dist/components/ui/carousel/CarouselContent.vue.d.ts +16 -0
  207. package/dist/components/ui/carousel/CarouselDots.vue.d.ts +4 -0
  208. package/dist/components/ui/carousel/CarouselItem.vue.d.ts +14 -0
  209. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +22 -0
  210. package/dist/components/ui/carousel/CarouselPager.vue.d.ts +10 -0
  211. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +22 -0
  212. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +51 -0
  213. package/dist/components/ui/carousel/index.d.ts +10 -0
  214. package/dist/components/ui/carousel/interface.d.ts +20 -0
  215. package/dist/components/ui/carousel/useCarousel.d.ts +20 -0
  216. package/dist/components/ui/checkbox/Checkbox.vue.d.ts +22 -0
  217. package/dist/components/ui/checkbox/index.d.ts +1 -0
  218. package/dist/components/ui/collapsible/Collapsible.vue.d.ts +20 -0
  219. package/dist/components/ui/collapsible/CollapsibleContent.vue.d.ts +14 -0
  220. package/dist/components/ui/collapsible/CollapsibleTrigger.vue.d.ts +14 -0
  221. package/dist/components/ui/collapsible/index.d.ts +3 -0
  222. package/dist/components/ui/combobox/Combobox.vue.d.ts +29 -0
  223. package/dist/components/ui/combobox/ComboboxAnchor.vue.d.ts +18 -0
  224. package/dist/components/ui/combobox/ComboboxEmpty.vue.d.ts +18 -0
  225. package/dist/components/ui/combobox/ComboboxGroup.vue.d.ts +19 -0
  226. package/dist/components/ui/combobox/ComboboxInput.vue.d.ts +22 -0
  227. package/dist/components/ui/combobox/ComboboxItem.vue.d.ts +22 -0
  228. package/dist/components/ui/combobox/ComboboxItemIndicator.vue.d.ts +18 -0
  229. package/dist/components/ui/combobox/ComboboxList.vue.d.ts +32 -0
  230. package/dist/components/ui/combobox/ComboboxSeparator.vue.d.ts +18 -0
  231. package/dist/components/ui/combobox/ComboboxViewport.vue.d.ts +18 -0
  232. package/dist/components/ui/combobox/index.d.ts +11 -0
  233. package/dist/components/ui/command/Command.vue.d.ts +35 -0
  234. package/dist/components/ui/command/CommandDialog.vue.d.ts +18 -0
  235. package/dist/components/ui/command/CommandEmpty.vue.d.ts +18 -0
  236. package/dist/components/ui/command/CommandGroup.vue.d.ts +19 -0
  237. package/dist/components/ui/command/CommandInput.vue.d.ts +8 -0
  238. package/dist/components/ui/command/CommandItem.vue.d.ts +22 -0
  239. package/dist/components/ui/command/CommandList.vue.d.ts +30 -0
  240. package/dist/components/ui/command/CommandSeparator.vue.d.ts +18 -0
  241. package/dist/components/ui/command/CommandShortcut.vue.d.ts +17 -0
  242. package/dist/components/ui/command/index.d.ts +9 -0
  243. package/dist/components/ui/context-menu/ContextMenu.vue.d.ts +18 -0
  244. package/dist/components/ui/context-menu/ContextMenuCheckboxItem.vue.d.ts +24 -0
  245. package/dist/components/ui/context-menu/ContextMenuContent.vue.d.ts +30 -0
  246. package/dist/components/ui/context-menu/ContextMenuItem.vue.d.ts +23 -0
  247. package/dist/components/ui/context-menu/ContextMenuLabel.vue.d.ts +19 -0
  248. package/dist/components/ui/context-menu/ContextMenuRadioGroup.vue.d.ts +18 -0
  249. package/dist/components/ui/context-menu/ContextMenuRadioItem.vue.d.ts +22 -0
  250. package/dist/components/ui/context-menu/ContextMenuSeparator.vue.d.ts +8 -0
  251. package/dist/components/ui/context-menu/ContextMenuShortcut.vue.d.ts +17 -0
  252. package/dist/components/ui/context-menu/ContextMenuSubContent.vue.d.ts +34 -0
  253. package/dist/components/ui/context-menu/ContextMenuSubTrigger.vue.d.ts +19 -0
  254. package/dist/components/ui/context-menu/ContextMenuTrigger.vue.d.ts +14 -0
  255. package/dist/components/ui/context-menu/index.d.ts +12 -0
  256. package/dist/components/ui/data-table/DataTable.vue.d.ts +81 -0
  257. package/dist/components/ui/data-table/DataTablePagination.vue.d.ts +13 -0
  258. package/dist/components/ui/data-table/types.d.ts +56 -0
  259. package/dist/components/ui/dialog/Dialog.vue.d.ts +18 -0
  260. package/dist/components/ui/dialog/DialogClose.vue.d.ts +14 -0
  261. package/dist/components/ui/dialog/DialogContent.vue.d.ts +71 -0
  262. package/dist/components/ui/dialog/DialogDescription.vue.d.ts +18 -0
  263. package/dist/components/ui/dialog/DialogFooter.vue.d.ts +17 -0
  264. package/dist/components/ui/dialog/DialogHeader.vue.d.ts +17 -0
  265. package/dist/components/ui/dialog/DialogScrollContent.vue.d.ts +33 -0
  266. package/dist/components/ui/dialog/DialogTitle.vue.d.ts +18 -0
  267. package/dist/components/ui/dialog/DialogTrigger.vue.d.ts +14 -0
  268. package/dist/components/ui/dialog/index.d.ts +9 -0
  269. package/dist/components/ui/drawer/Drawer.vue.d.ts +30 -0
  270. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +32 -0
  271. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +18 -0
  272. package/dist/components/ui/drawer/DrawerFooter.vue.d.ts +17 -0
  273. package/dist/components/ui/drawer/DrawerHeader.vue.d.ts +17 -0
  274. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +8 -0
  275. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +18 -0
  276. package/dist/components/ui/drawer/index.d.ts +8 -0
  277. package/dist/components/ui/dropdown-menu/DropdownMenu.vue.d.ts +18 -0
  278. package/dist/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue.d.ts +24 -0
  279. package/dist/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +32 -0
  280. package/dist/components/ui/dropdown-menu/DropdownMenuGroup.vue.d.ts +14 -0
  281. package/dist/components/ui/dropdown-menu/DropdownMenuItem.vue.d.ts +19 -0
  282. package/dist/components/ui/dropdown-menu/DropdownMenuLabel.vue.d.ts +19 -0
  283. package/dist/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue.d.ts +18 -0
  284. package/dist/components/ui/dropdown-menu/DropdownMenuRadioItem.vue.d.ts +22 -0
  285. package/dist/components/ui/dropdown-menu/DropdownMenuSeparator.vue.d.ts +8 -0
  286. package/dist/components/ui/dropdown-menu/DropdownMenuShortcut.vue.d.ts +17 -0
  287. package/dist/components/ui/dropdown-menu/DropdownMenuSub.vue.d.ts +18 -0
  288. package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +34 -0
  289. package/dist/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue.d.ts +18 -0
  290. package/dist/components/ui/dropdown-menu/DropdownMenuTrigger.vue.d.ts +14 -0
  291. package/dist/components/ui/dropdown-menu/index.d.ts +15 -0
  292. package/dist/components/ui/hover-card/HoverCard.vue.d.ts +18 -0
  293. package/dist/components/ui/hover-card/HoverCardContent.vue.d.ts +20 -0
  294. package/dist/components/ui/hover-card/HoverCardTrigger.vue.d.ts +14 -0
  295. package/dist/components/ui/hover-card/index.d.ts +3 -0
  296. package/dist/components/ui/index.d.ts +41 -0
  297. package/dist/components/ui/input/Input.vue.d.ts +13 -0
  298. package/dist/components/ui/input/index.d.ts +1 -0
  299. package/dist/components/ui/label/Label.vue.d.ts +18 -0
  300. package/dist/components/ui/label/index.d.ts +1 -0
  301. package/dist/components/ui/metric-pill/MetricPill.vue.d.ts +43 -0
  302. package/dist/components/ui/metric-pill/index.d.ts +1 -0
  303. package/dist/components/ui/multi-select/MultiSelect.vue.d.ts +24 -0
  304. package/dist/components/ui/multi-select/index.d.ts +7 -0
  305. package/dist/components/ui/notification/Notification.vue.d.ts +16 -0
  306. package/dist/components/ui/notification/index.d.ts +1 -0
  307. package/dist/components/ui/number-field/NumberField.vue.d.ts +22 -0
  308. package/dist/components/ui/number-field/NumberFieldContent.vue.d.ts +17 -0
  309. package/dist/components/ui/number-field/NumberFieldDecrement.vue.d.ts +18 -0
  310. package/dist/components/ui/number-field/NumberFieldIncrement.vue.d.ts +18 -0
  311. package/dist/components/ui/number-field/NumberFieldInput.vue.d.ts +3 -0
  312. package/dist/components/ui/number-field/index.d.ts +5 -0
  313. package/dist/components/ui/popover/Popover.vue.d.ts +18 -0
  314. package/dist/components/ui/popover/PopoverContent.vue.d.ts +39 -0
  315. package/dist/components/ui/popover/PopoverTrigger.vue.d.ts +14 -0
  316. package/dist/components/ui/popover/index.d.ts +3 -0
  317. package/dist/components/ui/progress/Progress.vue.d.ts +111 -0
  318. package/dist/components/ui/progress/index.d.ts +2 -0
  319. package/dist/components/ui/radio-group/RadioGroup.vue.d.ts +22 -0
  320. package/dist/components/ui/radio-group/RadioGroupItem.vue.d.ts +8 -0
  321. package/dist/components/ui/radio-group/index.d.ts +2 -0
  322. package/dist/components/ui/section/Section.vue.d.ts +73 -0
  323. package/dist/components/ui/section/index.d.ts +1 -0
  324. package/dist/components/ui/select/Select.vue.d.ts +21 -0
  325. package/dist/components/ui/select/SelectContent.vue.d.ts +30 -0
  326. package/dist/components/ui/select/SelectGroup.vue.d.ts +18 -0
  327. package/dist/components/ui/select/SelectItem.vue.d.ts +21 -0
  328. package/dist/components/ui/select/SelectLabel.vue.d.ts +18 -0
  329. package/dist/components/ui/select/SelectScrollDownButton.vue.d.ts +18 -0
  330. package/dist/components/ui/select/SelectScrollUpButton.vue.d.ts +18 -0
  331. package/dist/components/ui/select/SelectSeparator.vue.d.ts +8 -0
  332. package/dist/components/ui/select/SelectTrigger.vue.d.ts +22 -0
  333. package/dist/components/ui/select/SelectValue.vue.d.ts +14 -0
  334. package/dist/components/ui/select/index.d.ts +10 -0
  335. package/dist/components/ui/separator/Separator.vue.d.ts +9 -0
  336. package/dist/components/ui/separator/index.d.ts +1 -0
  337. package/dist/components/ui/sheet/Sheet.vue.d.ts +18 -0
  338. package/dist/components/ui/sheet/SheetClose.vue.d.ts +14 -0
  339. package/dist/components/ui/sheet/SheetContent.vue.d.ts +53 -0
  340. package/dist/components/ui/sheet/SheetDescription.vue.d.ts +18 -0
  341. package/dist/components/ui/sheet/SheetFooter.vue.d.ts +17 -0
  342. package/dist/components/ui/sheet/SheetHeader.vue.d.ts +17 -0
  343. package/dist/components/ui/sheet/SheetTitle.vue.d.ts +18 -0
  344. package/dist/components/ui/sheet/SheetTrigger.vue.d.ts +14 -0
  345. package/dist/components/ui/sheet/index.d.ts +13 -0
  346. package/dist/components/ui/skeleton/Skeleton.vue.d.ts +32 -0
  347. package/dist/components/ui/skeleton/index.d.ts +1 -0
  348. package/dist/components/ui/slider/Slider.vue.d.ts +26 -0
  349. package/dist/components/ui/slider/index.d.ts +31 -0
  350. package/dist/components/ui/switch/Switch.vue.d.ts +12 -0
  351. package/dist/components/ui/switch/index.d.ts +1 -0
  352. package/dist/components/ui/table/Table.vue.d.ts +17 -0
  353. package/dist/components/ui/table/TableBody.vue.d.ts +17 -0
  354. package/dist/components/ui/table/TableCaption.vue.d.ts +17 -0
  355. package/dist/components/ui/table/TableCell.vue.d.ts +17 -0
  356. package/dist/components/ui/table/TableEmpty.vue.d.ts +20 -0
  357. package/dist/components/ui/table/TableHead.vue.d.ts +17 -0
  358. package/dist/components/ui/table/TableHeader.vue.d.ts +17 -0
  359. package/dist/components/ui/table/TableRow.vue.d.ts +17 -0
  360. package/dist/components/ui/table/index.d.ts +8 -0
  361. package/dist/components/ui/tabs/Tabs.vue.d.ts +19 -0
  362. package/dist/components/ui/tabs/TabsContent.vue.d.ts +18 -0
  363. package/dist/components/ui/tabs/TabsIndicator.vue.d.ts +8 -0
  364. package/dist/components/ui/tabs/TabsList.vue.d.ts +18 -0
  365. package/dist/components/ui/tabs/TabsTrigger.vue.d.ts +18 -0
  366. package/dist/components/ui/tabs/index.d.ts +5 -0
  367. package/dist/components/ui/tags-input/TagsInput.vue.d.ts +28 -0
  368. package/dist/components/ui/tags-input/TagsInputInput.vue.d.ts +8 -0
  369. package/dist/components/ui/tags-input/TagsInputItem.vue.d.ts +18 -0
  370. package/dist/components/ui/tags-input/TagsInputItemDelete.vue.d.ts +18 -0
  371. package/dist/components/ui/tags-input/TagsInputItemText.vue.d.ts +8 -0
  372. package/dist/components/ui/tags-input/index.d.ts +5 -0
  373. package/dist/components/ui/textarea/Textarea.vue.d.ts +13 -0
  374. package/dist/components/ui/textarea/index.d.ts +1 -0
  375. package/dist/components/ui/toast/Toast.vue.d.ts +104 -0
  376. package/dist/components/ui/toast/ToastAction.vue.d.ts +18 -0
  377. package/dist/components/ui/toast/ToastClose.vue.d.ts +8 -0
  378. package/dist/components/ui/toast/ToastDescription.vue.d.ts +18 -0
  379. package/dist/components/ui/toast/ToastTitle.vue.d.ts +18 -0
  380. package/dist/components/ui/toast/Toaster.vue.d.ts +3 -0
  381. package/dist/components/ui/toast/index.d.ts +8 -0
  382. package/dist/components/ui/toast/use-toast.d.ts +155 -0
  383. package/dist/components/ui/toggle/Toggle.vue.d.ts +29 -0
  384. package/dist/components/ui/toggle/index.d.ts +26 -0
  385. package/dist/components/ui/toggle-group/ToggleGroup.vue.d.ts +25 -0
  386. package/dist/components/ui/toggle-group/ToggleGroupItem.vue.d.ts +21 -0
  387. package/dist/components/ui/toggle-group/index.d.ts +2 -0
  388. package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +21 -0
  389. package/dist/components/ui/tooltip/Tooltip.vue.d.ts +18 -0
  390. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +26 -0
  391. package/dist/components/ui/tooltip/TooltipProvider.vue.d.ts +14 -0
  392. package/dist/components/ui/tooltip/TooltipTrigger.vue.d.ts +14 -0
  393. package/dist/components/ui/tooltip/index.d.ts +4 -0
  394. package/dist/composables/dark/index.d.ts +1 -0
  395. package/dist/composables/dark/useGlobalDark.d.ts +7 -0
  396. package/dist/composables/dom/index.d.ts +6 -0
  397. package/dist/composables/dom/useBreakpoint.d.ts +38 -0
  398. package/dist/composables/dom/useClipboard.d.ts +45 -0
  399. package/dist/composables/dom/useResizeObserver.d.ts +50 -0
  400. package/dist/composables/dom/useTokenColor.d.ts +27 -0
  401. package/dist/composables/dom/useTouchGate.d.ts +18 -0
  402. package/dist/composables/dom/useViewportReady.d.ts +87 -0
  403. package/dist/composables/glass/index.d.ts +1 -0
  404. package/dist/composables/glass/useGlassRenderer.d.ts +37 -0
  405. package/dist/composables/glass/webgl/frostShader.d.ts +27 -0
  406. package/dist/composables/index.d.ts +9 -0
  407. package/dist/composables/keyboard/index.d.ts +1 -0
  408. package/dist/composables/keyboard/useKeyboardShortcuts.d.ts +33 -0
  409. package/dist/composables/motion/constants.d.ts +19 -0
  410. package/dist/composables/motion/index.d.ts +14 -0
  411. package/dist/composables/motion/installDarkModeSync.d.ts +1 -0
  412. package/dist/composables/motion/useAnimatedNumber.d.ts +40 -0
  413. package/dist/composables/motion/useAnimatedNumberMap.d.ts +29 -0
  414. package/dist/composables/motion/useIntersectionPause.d.ts +33 -0
  415. package/dist/composables/motion/useNumericTransition.d.ts +32 -0
  416. package/dist/composables/motion/useRAFLoop.d.ts +43 -0
  417. package/dist/composables/motion/useScrollProgress.d.ts +23 -0
  418. package/dist/composables/motion/useSpring.d.ts +66 -0
  419. package/dist/composables/motion/useSpringMount.d.ts +52 -0
  420. package/dist/composables/motion/useSpringOrchestrator.d.ts +15 -0
  421. package/dist/composables/motion/useSpringPress.d.ts +46 -0
  422. package/dist/composables/motion/useStagger.d.ts +50 -0
  423. package/dist/composables/motion/useStaggerReveal.d.ts +22 -0
  424. package/dist/composables/reactive/index.d.ts +2 -0
  425. package/dist/composables/reactive/useInterval.d.ts +24 -0
  426. package/dist/composables/reactive/useTimer.d.ts +24 -0
  427. package/dist/composables/sidebar/index.d.ts +7 -0
  428. package/dist/composables/sidebar/types.d.ts +44 -0
  429. package/dist/composables/sidebar/useScrollTracker.d.ts +12 -0
  430. package/dist/composables/sidebar/useSidebarFollow.d.ts +16 -0
  431. package/dist/composables/sidebar/useSidebarState.d.ts +39 -0
  432. package/dist/composables/sidebar/useTreeIndex.d.ts +37 -0
  433. package/dist/composables/sortable/index.d.ts +1 -0
  434. package/dist/composables/sortable/useSortable.d.ts +149 -0
  435. package/dist/configurator.d.ts +1 -0
  436. package/dist/configurator.js +2 -0
  437. package/dist/confirm-dialog.d.ts +1 -0
  438. package/dist/confirm-dialog.js +69 -0
  439. package/dist/context-menu.d.ts +1 -0
  440. package/dist/context-menu.js +3 -0
  441. package/dist/controls.d.ts +1 -0
  442. package/dist/controls.js +51 -0
  443. package/dist/createLucideIcon-Bn9a1b70.js +43 -0
  444. package/dist/dark.d.ts +1 -0
  445. package/dist/dark.js +2 -0
  446. package/dist/data-table.d.ts +1 -0
  447. package/dist/data-table.js +2 -0
  448. package/dist/dialog.d.ts +1 -0
  449. package/dist/dialog.js +3 -0
  450. package/dist/disco-glyph.d.ts +1 -0
  451. package/dist/disco-glyph.js +2 -0
  452. package/dist/dock.d.ts +1 -0
  453. package/dist/dock.js +548 -0
  454. package/dist/dockContext-BDGSrwsV.js +16 -0
  455. package/dist/dom.d.ts +1 -0
  456. package/dist/dom.js +4 -0
  457. package/dist/dropdown-menu-2K-SGkZU.js +363 -0
  458. package/dist/dropdown-menu.d.ts +1 -0
  459. package/dist/dropdown-menu.js +2 -0
  460. package/dist/expandable-container.d.ts +1 -0
  461. package/dist/expandable-container.js +64 -0
  462. package/dist/fonts/README.md +95 -0
  463. package/dist/fonts/fira-code/OFL.txt +93 -0
  464. package/dist/fonts/fira-code/fira-code-latin-ext.woff2 +0 -0
  465. package/dist/fonts/fira-code/fira-code-latin.woff2 +0 -0
  466. package/dist/fonts/plus-jakarta-sans/OFL.txt +93 -0
  467. package/dist/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext.woff2 +0 -0
  468. package/dist/fonts/plus-jakarta-sans/plus-jakarta-sans-latin.woff2 +0 -0
  469. package/dist/forms.d.ts +3 -0
  470. package/dist/forms.js +311 -0
  471. package/dist/glass-carousel.d.ts +1 -0
  472. package/dist/glass-carousel.js +207 -0
  473. package/dist/glass-panel.d.ts +1 -0
  474. package/dist/glass-panel.js +44 -0
  475. package/dist/glass-ui.css +2 -1
  476. package/dist/glass-ui.js +1150 -10018
  477. package/dist/glyph-face.d.ts +1 -0
  478. package/dist/glyph-face.js +3 -0
  479. package/dist/header-ribbon.d.ts +1 -0
  480. package/dist/header-ribbon.js +63 -0
  481. package/dist/hover-card.d.ts +1 -0
  482. package/dist/hover-card.js +2 -0
  483. package/dist/hover-popover.d.ts +1 -0
  484. package/dist/hover-popover.js +2 -0
  485. package/dist/icon-tooltip.d.ts +1 -0
  486. package/dist/icon-tooltip.js +2 -0
  487. package/dist/index.d.ts +49 -6619
  488. package/dist/infinite-scroll.d.ts +2 -0
  489. package/dist/infinite-scroll.js +73 -0
  490. package/dist/instrument-chassis.d.ts +1 -0
  491. package/dist/instrument-chassis.js +2 -0
  492. package/dist/instrument-rail.d.ts +1 -0
  493. package/dist/instrument-rail.js +2 -0
  494. package/dist/keyboard.d.ts +1 -0
  495. package/dist/keyboard.js +2 -0
  496. package/dist/keys-DVkcUktU.js +11 -0
  497. package/dist/label.d.ts +1 -0
  498. package/dist/label.js +2 -0
  499. package/dist/labeled-field.d.ts +1 -0
  500. package/dist/labeled-field.js +194 -0
  501. package/dist/menuItemVariants-B2nDL7zH.js +30 -0
  502. package/dist/metric-badge.d.ts +1 -0
  503. package/dist/metric-badge.js +2 -0
  504. package/dist/metric-cell.d.ts +1 -0
  505. package/dist/metric-cell.js +54 -0
  506. package/dist/metric-stack.d.ts +1 -0
  507. package/dist/metric-stack.js +107 -0
  508. package/dist/minimize-2-LsCJ_eNt.js +38 -0
  509. package/dist/motion.d.ts +1 -0
  510. package/dist/motion.js +286 -0
  511. package/dist/notification.d.ts +1 -0
  512. package/dist/notification.js +2 -0
  513. package/dist/paper-backdrop.d.ts +1 -0
  514. package/dist/paper-backdrop.js +2 -0
  515. package/dist/popover.d.ts +1 -0
  516. package/dist/popover.js +2 -0
  517. package/dist/presets-BMzCDrmR.js +71 -0
  518. package/dist/progress.d.ts +1 -0
  519. package/dist/progress.js +2 -0
  520. package/dist/pulse.d.ts +1 -0
  521. package/dist/pulse.js +54 -0
  522. package/dist/reactive.d.ts +1 -0
  523. package/dist/reactive.js +3 -0
  524. package/dist/responsive-tabs.d.ts +1 -0
  525. package/dist/responsive-tabs.js +89 -0
  526. package/dist/scrolling-text.d.ts +1 -0
  527. package/dist/scrolling-text.js +2 -0
  528. package/dist/search-ocd8tmL9.js +12 -0
  529. package/dist/search.d.ts +1 -0
  530. package/dist/search.js +425 -0
  531. package/dist/select.d.ts +1 -0
  532. package/dist/select.js +4 -0
  533. package/dist/separator.d.ts +1 -0
  534. package/dist/separator.js +2 -0
  535. package/dist/sheet-CLVkb3AO.js +214 -0
  536. package/dist/sheet.d.ts +1 -0
  537. package/dist/sheet.js +2 -0
  538. package/dist/sidebar.d.ts +1 -0
  539. package/dist/sidebar.js +304 -0
  540. package/dist/slider-BQaLYFLh.js +133 -0
  541. package/dist/slider.d.ts +1 -0
  542. package/dist/slider.js +2 -0
  543. package/dist/sortable-list.d.ts +1 -0
  544. package/dist/sortable-list.js +82 -0
  545. package/dist/stacked-icons.d.ts +1 -0
  546. package/dist/stacked-icons.js +83 -0
  547. package/dist/status-dot.d.ts +1 -0
  548. package/dist/status-dot.js +55 -0
  549. package/dist/styles/animations.css +298 -0
  550. package/dist/styles/cards.css +44 -0
  551. package/dist/styles/disco-glyph.css +26 -0
  552. package/dist/styles/dock.css +1085 -0
  553. package/dist/styles/floating-panel.css +34 -0
  554. package/dist/styles/fonts.css +143 -0
  555. package/dist/styles/glass.css +277 -0
  556. package/dist/styles/glyph-face.css +92 -0
  557. package/dist/styles/hover-popover.css +44 -0
  558. package/dist/styles/index.css +96 -0
  559. package/dist/styles/instrument-chassis.css +313 -0
  560. package/dist/styles/instrument-rail.css +128 -0
  561. package/dist/styles/paper.css +68 -0
  562. package/dist/styles/theme.css +358 -0
  563. package/dist/styles/tokens.css +1495 -0
  564. package/dist/styles/transitions.css +245 -0
  565. package/dist/styles/typography.css +553 -0
  566. package/dist/styles/utilities.css +893 -0
  567. package/dist/tabs.d.ts +1 -0
  568. package/dist/tabs.js +206 -0
  569. package/dist/timeline.d.ts +1 -0
  570. package/dist/timeline.js +466 -0
  571. package/dist/toast.d.ts +1 -0
  572. package/dist/toast.js +2 -0
  573. package/dist/toggle-chip.d.ts +1 -0
  574. package/dist/toggle-chip.js +71 -0
  575. package/dist/toggle-group.d.ts +1 -0
  576. package/dist/toggle-group.js +2 -0
  577. package/dist/tokens.d.ts +53 -0
  578. package/dist/tokens.js +16 -0
  579. package/dist/tooltip.d.ts +1 -0
  580. package/dist/tooltip.js +2 -0
  581. package/dist/typewriter.d.ts +1 -0
  582. package/dist/typewriter.js +860 -0
  583. package/dist/useAnimatedNumber-DcvTR9B4.js +51 -0
  584. package/dist/useBreakpoint-BHlX-MhR.js +134 -0
  585. package/dist/useConfiguratorState-BlaevW0S.js +266 -0
  586. package/dist/useGlassRenderer-DMDdMH55.js +69 -0
  587. package/dist/useGlobalDark-PMiP5Jku.js +24 -0
  588. package/dist/useIntersectionPause-CXYfYg_C.js +39 -0
  589. package/dist/useInterval-COlTCeVa.js +18 -0
  590. package/dist/useKeyboardShortcuts-B1ev1YEC.js +99 -0
  591. package/dist/useResizeObserver-F4aRR4Cj.js +44 -0
  592. package/dist/useSortable-Ck0rBJ4g.js +175 -0
  593. package/dist/useSpringMount-BTRBNzXP.js +113 -0
  594. package/dist/useTimer-lp5NlH4w.js +20 -0
  595. package/dist/useTouchGate-BhhEMlwJ.js +84 -0
  596. package/dist/utils/cn.d.ts +27 -0
  597. package/dist/x-cdWAmO-q.js +10 -0
  598. package/package.json +514 -26
  599. package/src/fonts/README.md +95 -0
  600. package/src/fonts/fira-code/OFL.txt +93 -0
  601. package/src/fonts/fira-code/fira-code-latin-ext.woff2 +0 -0
  602. package/src/fonts/fira-code/fira-code-latin.woff2 +0 -0
  603. package/src/fonts/plus-jakarta-sans/OFL.txt +93 -0
  604. package/src/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext.woff2 +0 -0
  605. package/src/fonts/plus-jakarta-sans/plus-jakarta-sans-latin.woff2 +0 -0
  606. package/src/styles/animations.css +172 -107
  607. package/src/styles/cards.css +30 -52
  608. package/src/styles/disco-glyph.css +26 -0
  609. package/src/styles/dock.css +991 -127
  610. package/src/styles/floating-panel.css +22 -37
  611. package/src/styles/fonts.css +143 -0
  612. package/src/styles/glass.css +131 -120
  613. package/src/styles/glyph-face.css +92 -0
  614. package/src/styles/hover-popover.css +44 -0
  615. package/src/styles/index.css +73 -3
  616. package/src/styles/instrument-chassis.css +313 -0
  617. package/src/styles/instrument-rail.css +128 -0
  618. package/src/styles/paper.css +68 -0
  619. package/src/styles/theme.css +292 -72
  620. package/src/styles/tokens.css +1345 -183
  621. package/src/styles/transitions.css +227 -208
  622. package/src/styles/typography.css +498 -222
  623. package/src/styles/utilities.css +629 -433
  624. package/src/components/custom/aurora/Aurora.vue +0 -34
  625. package/src/components/custom/aurora/composables/color.ts +0 -122
  626. package/src/components/custom/aurora/composables/useAurora.ts +0 -355
  627. package/src/components/custom/aurora/index.ts +0 -8
  628. package/src/components/custom/confirm-dialog/ConfirmDialog.vue +0 -88
  629. package/src/components/custom/controls/DarkModeToggle.vue +0 -96
  630. package/src/components/custom/dock/DockLayerGroup.vue +0 -21
  631. package/src/components/custom/dock/DockPopover.vue +0 -263
  632. package/src/components/custom/dock/GlassDock.vue +0 -276
  633. package/src/components/custom/dock/composables/index.ts +0 -16
  634. package/src/components/custom/dock/composables/isTeleportedTarget.ts +0 -19
  635. package/src/components/custom/dock/composables/useDockActionBar.ts +0 -33
  636. package/src/components/custom/dock/composables/useDockState.ts +0 -301
  637. package/src/components/custom/dock/composables/useDockTransition.ts +0 -146
  638. package/src/components/custom/dock/composables/useLayerTransition.ts +0 -135
  639. package/src/components/custom/dock/composables/usePopupMutex.ts +0 -83
  640. package/src/components/custom/dock/index.ts +0 -9
  641. package/src/components/custom/expandable-container/ExpandableContainer.vue +0 -64
  642. package/src/components/custom/glass-panel/GlassPanel.vue +0 -98
  643. package/src/components/custom/glass-panel/index.ts +0 -2
  644. package/src/components/custom/icon-tooltip/IconTooltip.vue +0 -20
  645. package/src/components/custom/index.ts +0 -15
  646. package/src/components/custom/infinite-scroll/InfiniteScroll.vue +0 -55
  647. package/src/components/custom/infinite-scroll/composables/types.ts +0 -23
  648. package/src/components/custom/infinite-scroll/composables/useInfiniteScroll.ts +0 -73
  649. package/src/components/custom/labeled-field/LabeledInput.vue +0 -29
  650. package/src/components/custom/labeled-field/LabeledSelect.vue +0 -59
  651. package/src/components/custom/labeled-field/LabeledSlider.vue +0 -32
  652. package/src/components/custom/labeled-field/LabeledSwitch.vue +0 -27
  653. package/src/components/custom/labeled-field/index.ts +0 -4
  654. package/src/components/custom/metaballs/MetaballCanvas.vue +0 -23
  655. package/src/components/custom/metaballs/index.ts +0 -4
  656. package/src/components/custom/metaballs/shaders.ts +0 -63
  657. package/src/components/custom/metaballs/types.ts +0 -29
  658. package/src/components/custom/metaballs/useMetaballs.ts +0 -252
  659. package/src/components/custom/search/FuzzySearch.vue +0 -589
  660. package/src/components/custom/search/SearchBar.vue +0 -44
  661. package/src/components/custom/search/composables/fuzzySearchIndex.ts +0 -224
  662. package/src/components/custom/search/composables/types.ts +0 -34
  663. package/src/components/custom/search/composables/useFuzzySearch.ts +0 -115
  664. package/src/components/custom/sidebar/ProgressiveSidebar.vue +0 -256
  665. package/src/components/custom/sidebar/composables/index.ts +0 -6
  666. package/src/components/custom/sidebar/composables/useScrollTracker.ts +0 -242
  667. package/src/components/custom/sidebar/composables/useSidebarFollow.ts +0 -247
  668. package/src/components/custom/sidebar/composables/useSidebarState.ts +0 -72
  669. package/src/components/custom/sidebar/composables/useTreeIndex.ts +0 -152
  670. package/src/components/custom/sidebar/index.ts +0 -15
  671. package/src/components/custom/sidebar/types.ts +0 -50
  672. package/src/components/custom/tabs/BouncyTabs.vue +0 -39
  673. package/src/components/custom/tabs/BouncyToggle.vue +0 -352
  674. package/src/components/custom/tabs/UnderlineTabs.vue +0 -115
  675. package/src/components/custom/timeline/GlassTimeline.vue +0 -174
  676. package/src/components/custom/timeline/index.ts +0 -1
  677. package/src/components/custom/typewriter/TypewriterText.vue +0 -239
  678. package/src/components/custom/typewriter/composables/useTypewriter.ts +0 -413
  679. package/src/components/custom/typewriter/types.ts +0 -159
  680. package/src/components/custom/typewriter/utils/keyboard.ts +0 -213
  681. package/src/components/custom/typewriter/utils/pausePatterns.ts +0 -55
  682. package/src/components/custom/typewriter/utils/timing.ts +0 -104
  683. package/src/components/custom/typewriter/utils/typoStateMachine.ts +0 -197
  684. package/src/components/index.ts +0 -2
  685. package/src/components/ui/accordion/Accordion.vue +0 -19
  686. package/src/components/ui/accordion/AccordionContent.vue +0 -24
  687. package/src/components/ui/accordion/AccordionItem.vue +0 -24
  688. package/src/components/ui/accordion/AccordionTrigger.vue +0 -39
  689. package/src/components/ui/accordion/index.ts +0 -4
  690. package/src/components/ui/alert/Alert.vue +0 -20
  691. package/src/components/ui/alert/AlertDescription.vue +0 -17
  692. package/src/components/ui/alert/AlertTitle.vue +0 -17
  693. package/src/components/ui/alert/index.ts +0 -23
  694. package/src/components/ui/avatar/Avatar.vue +0 -21
  695. package/src/components/ui/avatar/AvatarFallback.vue +0 -11
  696. package/src/components/ui/avatar/AvatarImage.vue +0 -9
  697. package/src/components/ui/avatar/index.ts +0 -24
  698. package/src/components/ui/badge/Badge.vue +0 -16
  699. package/src/components/ui/badge/index.ts +0 -25
  700. package/src/components/ui/button/Button.vue +0 -26
  701. package/src/components/ui/button/index.ts +0 -43
  702. package/src/components/ui/card/Card.vue +0 -28
  703. package/src/components/ui/card/CardContent.vue +0 -14
  704. package/src/components/ui/card/CardDescription.vue +0 -14
  705. package/src/components/ui/card/CardFooter.vue +0 -14
  706. package/src/components/ui/card/CardHeader.vue +0 -14
  707. package/src/components/ui/card/CardTitle.vue +0 -21
  708. package/src/components/ui/card/index.ts +0 -6
  709. package/src/components/ui/carousel/Carousel.vue +0 -53
  710. package/src/components/ui/carousel/CarouselContent.vue +0 -35
  711. package/src/components/ui/carousel/CarouselItem.vue +0 -24
  712. package/src/components/ui/carousel/CarouselNext.vue +0 -40
  713. package/src/components/ui/carousel/CarouselPrevious.vue +0 -40
  714. package/src/components/ui/carousel/index.ts +0 -10
  715. package/src/components/ui/carousel/interface.ts +0 -26
  716. package/src/components/ui/carousel/useCarousel.ts +0 -56
  717. package/src/components/ui/checkbox/Checkbox.vue +0 -33
  718. package/src/components/ui/checkbox/index.ts +0 -1
  719. package/src/components/ui/collapsible/Collapsible.vue +0 -15
  720. package/src/components/ui/collapsible/CollapsibleContent.vue +0 -11
  721. package/src/components/ui/collapsible/CollapsibleTrigger.vue +0 -11
  722. package/src/components/ui/collapsible/index.ts +0 -3
  723. package/src/components/ui/combobox/Combobox.vue +0 -17
  724. package/src/components/ui/combobox/ComboboxAnchor.vue +0 -23
  725. package/src/components/ui/combobox/ComboboxEmpty.vue +0 -21
  726. package/src/components/ui/combobox/ComboboxGroup.vue +0 -27
  727. package/src/components/ui/combobox/ComboboxInput.vue +0 -41
  728. package/src/components/ui/combobox/ComboboxItem.vue +0 -24
  729. package/src/components/ui/combobox/ComboboxItemIndicator.vue +0 -23
  730. package/src/components/ui/combobox/ComboboxList.vue +0 -29
  731. package/src/components/ui/combobox/ComboboxSeparator.vue +0 -21
  732. package/src/components/ui/combobox/ComboboxViewport.vue +0 -23
  733. package/src/components/ui/combobox/index.ts +0 -12
  734. package/src/components/ui/command/Command.vue +0 -30
  735. package/src/components/ui/command/CommandDialog.vue +0 -21
  736. package/src/components/ui/command/CommandEmpty.vue +0 -20
  737. package/src/components/ui/command/CommandGroup.vue +0 -29
  738. package/src/components/ui/command/CommandInput.vue +0 -33
  739. package/src/components/ui/command/CommandItem.vue +0 -26
  740. package/src/components/ui/command/CommandList.vue +0 -27
  741. package/src/components/ui/command/CommandSeparator.vue +0 -23
  742. package/src/components/ui/command/CommandShortcut.vue +0 -14
  743. package/src/components/ui/command/index.ts +0 -9
  744. package/src/components/ui/context-menu/ContextMenu.vue +0 -15
  745. package/src/components/ui/context-menu/ContextMenuCheckboxItem.vue +0 -40
  746. package/src/components/ui/context-menu/ContextMenuContent.vue +0 -36
  747. package/src/components/ui/context-menu/ContextMenuGroup.vue +0 -11
  748. package/src/components/ui/context-menu/ContextMenuItem.vue +0 -34
  749. package/src/components/ui/context-menu/ContextMenuLabel.vue +0 -25
  750. package/src/components/ui/context-menu/ContextMenuPortal.vue +0 -11
  751. package/src/components/ui/context-menu/ContextMenuRadioGroup.vue +0 -19
  752. package/src/components/ui/context-menu/ContextMenuRadioItem.vue +0 -40
  753. package/src/components/ui/context-menu/ContextMenuSeparator.vue +0 -20
  754. package/src/components/ui/context-menu/ContextMenuShortcut.vue +0 -14
  755. package/src/components/ui/context-menu/ContextMenuSub.vue +0 -19
  756. package/src/components/ui/context-menu/ContextMenuSubContent.vue +0 -35
  757. package/src/components/ui/context-menu/ContextMenuSubTrigger.vue +0 -34
  758. package/src/components/ui/context-menu/ContextMenuTrigger.vue +0 -13
  759. package/src/components/ui/context-menu/index.ts +0 -14
  760. package/src/components/ui/data-table/DataTable.vue +0 -167
  761. package/src/components/ui/data-table/DataTablePagination.vue +0 -112
  762. package/src/components/ui/data-table/types.ts +0 -48
  763. package/src/components/ui/dialog/Dialog.vue +0 -14
  764. package/src/components/ui/dialog/DialogClose.vue +0 -11
  765. package/src/components/ui/dialog/DialogContent.vue +0 -61
  766. package/src/components/ui/dialog/DialogDescription.vue +0 -24
  767. package/src/components/ui/dialog/DialogFooter.vue +0 -19
  768. package/src/components/ui/dialog/DialogHeader.vue +0 -16
  769. package/src/components/ui/dialog/DialogScrollContent.vue +0 -65
  770. package/src/components/ui/dialog/DialogTitle.vue +0 -29
  771. package/src/components/ui/dialog/DialogTrigger.vue +0 -11
  772. package/src/components/ui/dialog/index.ts +0 -9
  773. package/src/components/ui/drawer/Drawer.vue +0 -19
  774. package/src/components/ui/drawer/DrawerContent.vue +0 -28
  775. package/src/components/ui/drawer/DrawerDescription.vue +0 -20
  776. package/src/components/ui/drawer/DrawerFooter.vue +0 -14
  777. package/src/components/ui/drawer/DrawerHeader.vue +0 -14
  778. package/src/components/ui/drawer/DrawerOverlay.vue +0 -18
  779. package/src/components/ui/drawer/DrawerTitle.vue +0 -20
  780. package/src/components/ui/drawer/index.ts +0 -8
  781. package/src/components/ui/dropdown-menu/DropdownMenu.vue +0 -14
  782. package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +0 -40
  783. package/src/components/ui/dropdown-menu/DropdownMenuContent.vue +0 -44
  784. package/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +0 -11
  785. package/src/components/ui/dropdown-menu/DropdownMenuItem.vue +0 -28
  786. package/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +0 -24
  787. package/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +0 -19
  788. package/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +0 -40
  789. package/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +0 -22
  790. package/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +0 -14
  791. package/src/components/ui/dropdown-menu/DropdownMenuSub.vue +0 -19
  792. package/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +0 -36
  793. package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +0 -33
  794. package/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +0 -13
  795. package/src/components/ui/dropdown-menu/index.ts +0 -16
  796. package/src/components/ui/hover-card/HoverCard.vue +0 -14
  797. package/src/components/ui/hover-card/HoverCardContent.vue +0 -41
  798. package/src/components/ui/hover-card/HoverCardTrigger.vue +0 -11
  799. package/src/components/ui/hover-card/index.ts +0 -3
  800. package/src/components/ui/index.ts +0 -41
  801. package/src/components/ui/input/Input.vue +0 -24
  802. package/src/components/ui/input/index.ts +0 -1
  803. package/src/components/ui/label/Label.vue +0 -27
  804. package/src/components/ui/label/index.ts +0 -1
  805. package/src/components/ui/multi-select/MultiSelect.vue +0 -141
  806. package/src/components/ui/multi-select/index.ts +0 -7
  807. package/src/components/ui/notification/Notification.vue +0 -85
  808. package/src/components/ui/notification/index.ts +0 -1
  809. package/src/components/ui/number-field/NumberField.vue +0 -23
  810. package/src/components/ui/number-field/NumberFieldContent.vue +0 -14
  811. package/src/components/ui/number-field/NumberFieldDecrement.vue +0 -25
  812. package/src/components/ui/number-field/NumberFieldIncrement.vue +0 -25
  813. package/src/components/ui/number-field/NumberFieldInput.vue +0 -8
  814. package/src/components/ui/number-field/index.ts +0 -5
  815. package/src/components/ui/popover/Popover.vue +0 -15
  816. package/src/components/ui/popover/PopoverContent.vue +0 -61
  817. package/src/components/ui/popover/PopoverTrigger.vue +0 -11
  818. package/src/components/ui/popover/index.ts +0 -3
  819. package/src/components/ui/progress/Progress.vue +0 -39
  820. package/src/components/ui/progress/index.ts +0 -1
  821. package/src/components/ui/radio-group/RadioGroup.vue +0 -25
  822. package/src/components/ui/radio-group/RadioGroupItem.vue +0 -39
  823. package/src/components/ui/radio-group/index.ts +0 -2
  824. package/src/components/ui/scroll-area/ScrollArea.vue +0 -29
  825. package/src/components/ui/scroll-area/ScrollBar.vue +0 -30
  826. package/src/components/ui/scroll-area/index.ts +0 -2
  827. package/src/components/ui/scroll-pane/ScrollPane.vue +0 -25
  828. package/src/components/ui/scroll-pane/ScrollPaneHeader.vue +0 -75
  829. package/src/components/ui/scroll-pane/index.ts +0 -2
  830. package/src/components/ui/select/Select.vue +0 -15
  831. package/src/components/ui/select/SelectContent.vue +0 -57
  832. package/src/components/ui/select/SelectGroup.vue +0 -19
  833. package/src/components/ui/select/SelectItem.vue +0 -47
  834. package/src/components/ui/select/SelectItemText.vue +0 -11
  835. package/src/components/ui/select/SelectLabel.vue +0 -13
  836. package/src/components/ui/select/SelectScrollDownButton.vue +0 -24
  837. package/src/components/ui/select/SelectScrollUpButton.vue +0 -24
  838. package/src/components/ui/select/SelectSeparator.vue +0 -17
  839. package/src/components/ui/select/SelectTrigger.vue +0 -45
  840. package/src/components/ui/select/SelectValue.vue +0 -11
  841. package/src/components/ui/select/index.ts +0 -11
  842. package/src/components/ui/separator/Separator.vue +0 -35
  843. package/src/components/ui/separator/index.ts +0 -1
  844. package/src/components/ui/sheet/Sheet.vue +0 -14
  845. package/src/components/ui/sheet/SheetClose.vue +0 -11
  846. package/src/components/ui/sheet/SheetContent.vue +0 -56
  847. package/src/components/ui/sheet/SheetDescription.vue +0 -22
  848. package/src/components/ui/sheet/SheetFooter.vue +0 -19
  849. package/src/components/ui/sheet/SheetHeader.vue +0 -16
  850. package/src/components/ui/sheet/SheetTitle.vue +0 -22
  851. package/src/components/ui/sheet/SheetTrigger.vue +0 -11
  852. package/src/components/ui/sheet/index.ts +0 -31
  853. package/src/components/ui/skeleton/Skeleton.vue +0 -14
  854. package/src/components/ui/skeleton/index.ts +0 -1
  855. package/src/components/ui/slider/Slider.vue +0 -66
  856. package/src/components/ui/slider/index.ts +0 -1
  857. package/src/components/ui/switch/Switch.vue +0 -37
  858. package/src/components/ui/switch/index.ts +0 -1
  859. package/src/components/ui/table/Table.vue +0 -16
  860. package/src/components/ui/table/TableBody.vue +0 -14
  861. package/src/components/ui/table/TableCaption.vue +0 -14
  862. package/src/components/ui/table/TableCell.vue +0 -14
  863. package/src/components/ui/table/TableEmpty.vue +0 -39
  864. package/src/components/ui/table/TableFooter.vue +0 -16
  865. package/src/components/ui/table/TableHead.vue +0 -21
  866. package/src/components/ui/table/TableHeader.vue +0 -14
  867. package/src/components/ui/table/TableRow.vue +0 -21
  868. package/src/components/ui/table/index.ts +0 -9
  869. package/src/components/ui/tabs/Tabs.vue +0 -15
  870. package/src/components/ui/tabs/TabsContent.vue +0 -22
  871. package/src/components/ui/tabs/TabsIndicator.vue +0 -22
  872. package/src/components/ui/tabs/TabsList.vue +0 -25
  873. package/src/components/ui/tabs/TabsTrigger.vue +0 -29
  874. package/src/components/ui/tabs/index.ts +0 -5
  875. package/src/components/ui/tags-input/TagsInput.vue +0 -22
  876. package/src/components/ui/tags-input/TagsInputInput.vue +0 -19
  877. package/src/components/ui/tags-input/TagsInputItem.vue +0 -22
  878. package/src/components/ui/tags-input/TagsInputItemDelete.vue +0 -24
  879. package/src/components/ui/tags-input/TagsInputItemText.vue +0 -19
  880. package/src/components/ui/tags-input/index.ts +0 -5
  881. package/src/components/ui/textarea/Textarea.vue +0 -24
  882. package/src/components/ui/textarea/index.ts +0 -1
  883. package/src/components/ui/toast/Toast.vue +0 -57
  884. package/src/components/ui/toast/ToastAction.vue +0 -30
  885. package/src/components/ui/toast/ToastClose.vue +0 -31
  886. package/src/components/ui/toast/ToastDescription.vue +0 -25
  887. package/src/components/ui/toast/ToastTitle.vue +0 -25
  888. package/src/components/ui/toast/Toaster.vue +0 -31
  889. package/src/components/ui/toast/index.ts +0 -8
  890. package/src/components/ui/toast/use-toast.ts +0 -136
  891. package/src/components/ui/toggle/Toggle.vue +0 -35
  892. package/src/components/ui/toggle/index.ts +0 -27
  893. package/src/components/ui/toggle-group/ToggleGroup.vue +0 -34
  894. package/src/components/ui/toggle-group/ToggleGroupItem.vue +0 -35
  895. package/src/components/ui/toggle-group/index.ts +0 -2
  896. package/src/components/ui/tooltip/Tooltip.vue +0 -14
  897. package/src/components/ui/tooltip/TooltipContent.vue +0 -31
  898. package/src/components/ui/tooltip/TooltipProvider.vue +0 -11
  899. package/src/components/ui/tooltip/TooltipTrigger.vue +0 -11
  900. package/src/components/ui/tooltip/index.ts +0 -4
  901. package/src/composables/glass/index.ts +0 -8
  902. package/src/composables/glass/useGlassRenderer.ts +0 -252
  903. package/src/composables/glass/webgl/frostShader.ts +0 -221
  904. package/src/composables/glass/webgpu/glassShader.wgsl +0 -173
  905. package/src/composables/index.ts +0 -32
  906. package/src/composables/infinite-scroll/index.ts +0 -2
  907. package/src/composables/infinite-scroll/types.ts +0 -25
  908. package/src/composables/infinite-scroll/useInfiniteScroll.ts +0 -101
  909. package/src/composables/interaction/index.ts +0 -5
  910. package/src/composables/interaction/useHeightTransition.ts +0 -82
  911. package/src/composables/interaction/useHoverPopover.ts +0 -64
  912. package/src/composables/interaction/useHoverToggle.ts +0 -103
  913. package/src/composables/interaction/useLeaveTimer.ts +0 -17
  914. package/src/composables/interaction/useTouchGate.ts +0 -207
  915. package/src/composables/pagination/index.ts +0 -2
  916. package/src/composables/pagination/useOffsetPagination.ts +0 -70
  917. package/src/composables/prng.ts +0 -32
  918. package/src/composables/useCharSplit.ts +0 -31
  919. package/src/composables/useClipboard.ts +0 -46
  920. package/src/composables/useGlobalDark.ts +0 -61
  921. package/src/composables/useKeyboardShortcuts.ts +0 -205
  922. package/src/composables/useWatercolorBlob.ts +0 -136
  923. package/src/composables/virtual/index.ts +0 -22
  924. package/src/composables/virtual/useVirtualSectionWindow.ts +0 -338
  925. package/src/composables/virtual/useWindowedStore.ts +0 -86
  926. package/src/composables/virtual/virtualSectionLayout.ts +0 -212
  927. package/src/index.ts +0 -9
  928. package/src/styles/scroll-pane.css +0 -10
  929. package/src/utils/cn.ts +0 -6
  930. /package/{src/components/custom/confirm-dialog/index.ts → dist/components/custom/confirm-dialog/index.d.ts} +0 -0
  931. /package/{src/components/custom/controls/index.ts → dist/components/custom/controls/index.d.ts} +0 -0
  932. /package/{src/components/custom/expandable-container/index.ts → dist/components/custom/expandable-container/index.d.ts} +0 -0
  933. /package/{src/components/custom/icon-tooltip/index.ts → dist/components/custom/icon-tooltip/index.d.ts} +0 -0
  934. /package/{src/components/custom/infinite-scroll/composables/index.ts → dist/components/custom/infinite-scroll/composables/index.d.ts} +0 -0
  935. /package/{src/components/custom/infinite-scroll/index.ts → dist/components/custom/infinite-scroll/index.d.ts} +0 -0
  936. /package/{src/components/custom/search/composables/index.ts → dist/components/custom/search/composables/index.d.ts} +0 -0
  937. /package/{src/components/custom/search/index.ts → dist/components/custom/search/index.d.ts} +0 -0
  938. /package/{src/components/custom/tabs/index.ts → dist/components/custom/tabs/index.d.ts} +0 -0
  939. /package/{src/components/custom/typewriter/composables/index.ts → dist/components/custom/typewriter/composables/index.d.ts} +0 -0
  940. /package/{src/components/custom/typewriter/index.ts → dist/components/custom/typewriter/index.d.ts} +0 -0
  941. /package/{src/components/ui/data-table/index.ts → dist/components/ui/data-table/index.d.ts} +0 -0
  942. /package/{src/utils/index.ts → dist/utils/index.d.ts} +0 -0
@@ -1,13 +1,67 @@
1
1
  /* Shared utility classes */
2
2
 
3
- @layer components {
4
- /* ── Popover/dropdown shared animation ── */
5
- .popover-animate {
6
- @apply data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95;
7
- }
3
+ /* ── Popover/dropdown shared animation ──
4
+ `@utility` form (V.W3.T8 / A5 §5.9 standardisation): data-state animation
5
+ pair for popover-class containers (Popover, DropdownMenu, ContextMenu,
6
+ Tooltip, HoverCard, Select). Composed alongside `.slide-in-from-side`
7
+ for direction-keyed entries. */
8
+ @utility popover-animate {
9
+ @apply data-[state=open]:animate-in data-[state=closed]:animate-out
10
+ data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0
11
+ data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95;
12
+ }
13
+
14
+ /* ── Slide-in entry by side data-attr ──
15
+ `@utility` form (V.W3.T8). Side-keyed slide entry that pairs with
16
+ reka-ui's `data-side` (`top|right|bottom|left`). The animation
17
+ direction inverts each side so panels enter from outside the
18
+ anchor's edge. */
19
+ @utility slide-in-from-side {
20
+ @apply data-[side=bottom]:slide-in-from-top-2
21
+ data-[side=left]:slide-in-from-right-2
22
+ data-[side=right]:slide-in-from-left-2
23
+ data-[side=top]:slide-in-from-bottom-2;
24
+ }
8
25
 
9
- .slide-in-from-side {
10
- @apply data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2;
26
+ @layer components {
27
+ /* ── Section description (V.W3.T7) ──────────────────────────────
28
+ Canonical recipe for the `<Section>` primitive's description
29
+ paragraph. Composes the body type + muted-foreground color in
30
+ one declaration so consumers don't fight twMerge's
31
+ typography-class collapse. */
32
+ .section-description {
33
+ font-size: var(--type-body);
34
+ color: var(--muted-foreground);
35
+ line-height: 1.5;
36
+ }
37
+
38
+ /* ── Labeled-field label (V.W3.T5 / A5 §5.5) ────────────────────
39
+ Canonical recipe for `<LabeledField>`'s tooltip-wrapped label
40
+ layer. Four sibling wrappers (LabeledInput, LabeledSelect,
41
+ LabeledSlider, LabeledSwitch) used to repeat this literal across
42
+ their templates; promoting it to a utility lets the parent SFC
43
+ own one canonical declaration. */
44
+ .labeled-field-label {
45
+ font-family: var(--font-display);
46
+ font-size: var(--type-body);
47
+ color: var(--muted-foreground);
48
+ cursor: help;
49
+ }
50
+
51
+ /* ── Popover-content recipe (V.W3.T3 / A5 §3.2) ─────────────────
52
+ Canonical recipe for floating-tier portal containers
53
+ (PopoverContent, DropdownMenuContent, SelectContent, etc.).
54
+ Covers radius + outline + popover-foreground; consumers compose
55
+ this with `.glass-floating` (bg + blur + border + shadow), with
56
+ `.popover-animate` (data-state animation), and with the per-host
57
+ z-rung. The floating-tier shadow comes from
58
+ `--glass-shadow-floating` via `.glass-floating`, replacing the
59
+ `shadow-md`/`shadow-lg` literals that bypassed the canonical
60
+ cascade. */
61
+ .popover-content {
62
+ border-radius: var(--radius-panel);
63
+ color: var(--popover-foreground);
64
+ outline: none;
11
65
  }
12
66
 
13
67
  /* ── Scrollbar ── */
@@ -30,34 +84,13 @@
30
84
  box-shadow: var(--focus-ring-shadow);
31
85
  }
32
86
 
33
- /* ── Button press/interactive states ── */
34
- .btn-press {
35
- transition: transform var(--duration-fast) var(--ease-standard);
36
- }
37
- .btn-press:active {
38
- transform: scale(var(--scale-press-btn));
39
- }
40
- .btn-press:disabled {
41
- opacity: 0.5;
42
- pointer-events: none;
43
- }
44
-
45
- .btn-interactive {
46
- transition: all var(--duration-fast) var(--ease-standard);
47
- }
48
- .btn-interactive:hover {
49
- transform: scale(var(--scale-hover));
50
- }
51
- .btn-interactive:active {
52
- transform: scale(var(--scale-press));
53
- }
54
- .btn-interactive:disabled {
55
- opacity: 0.5;
56
- pointer-events: none;
57
- }
58
- .btn-interactive:focus-visible {
59
- box-shadow: var(--focus-ring-shadow);
60
- outline: none;
87
+ /* ── Hairline-accent 0.5px catch-light + under-shadow pair ──
88
+ Composes the canonical `--border-hairline` token (tokens.css §
89
+ Glass-decorative). Adopt at any surface that wants the canonical
90
+ 2-stop hairline (dock surfaces, instrument-chassis). Auto-mirrors
91
+ in dark via the .dark token override. */
92
+ .hairline-accent {
93
+ box-shadow: var(--border-hairline);
61
94
  }
62
95
 
63
96
  /* ── Interactive item (hover bg + focus ring + active scale) ── */
@@ -81,9 +114,38 @@
81
114
  .interactive-item:active {
82
115
  transform: scale(0.98);
83
116
  }
84
- .interactive-item:disabled {
117
+ .interactive-item:disabled,
118
+ .interactive-item[data-disabled] {
85
119
  pointer-events: none;
86
- opacity: 0.5;
120
+ opacity: var(--opacity-disabled);
121
+ cursor: not-allowed;
122
+ }
123
+
124
+ /* ── Tap-squish — universal press-state choreography ──
125
+ AL-W10 SLIM (X6 §M-1 + Y7 §3 + DESIGN.md §L3). I compose this
126
+ class onto every interactive surface that wants the iOS tap-
127
+ squish idiom; the press scales to `--scale-press` (0.96, the
128
+ canonical iOS `.regular` control rung) and the spring carries
129
+ the return via `--spring-snappy` (the §L3 release-spring
130
+ contract). I keep this as a single canonical rung — NOT a
131
+ 3-rung ladder. The outliers I leave alone are button `0.97` and
132
+ dock control `0.92`, which consume their own scale tokens
133
+ directly.
134
+
135
+ Under PRM I retire the press transform entirely and lean on the
136
+ consumer's own hover/active bg-tint cascade to acknowledge the
137
+ press. */
138
+ .tap-squish {
139
+ transition: transform var(--duration-fast) var(--spring-snappy);
140
+ transform-origin: center center;
141
+ }
142
+ .tap-squish:active {
143
+ transform: scale(var(--scale-press));
144
+ }
145
+ @media (prefers-reduced-motion: reduce) {
146
+ .tap-squish:active {
147
+ transform: none;
148
+ }
87
149
  }
88
150
 
89
151
  /* ── Status dot indicator ── */
@@ -98,64 +160,6 @@
98
160
  background var(--duration-fast) var(--ease-standard),
99
161
  box-shadow var(--duration-fast) var(--ease-standard);
100
162
  }
101
- .status-dot--active {
102
- background: var(--color-status-active, hsl(142 71% 45%));
103
- }
104
- .status-dot--paused {
105
- background: var(--color-status-paused, hsl(48 96% 53%));
106
- }
107
- .status-dot--idle {
108
- background: var(--color-status-idle, var(--muted-foreground));
109
- }
110
-
111
- /* ── Paper texture backgrounds ── */
112
- .bg-paper-clean {
113
- background-image: var(--paper-clean-texture);
114
- background-repeat: repeat;
115
- background-size: var(--paper-texture-size);
116
- background-blend-mode: multiply;
117
- }
118
- .bg-paper-aged {
119
- background-image: var(--paper-aged-texture);
120
- background-repeat: repeat;
121
- background-size: var(--paper-texture-size);
122
- background-blend-mode: multiply;
123
- }
124
-
125
- /* ── Rainbow text ── */
126
- .rainbow-text {
127
- background: linear-gradient(
128
- 90deg,
129
- hsl(0 85% 70%),
130
- hsl(30 85% 65%),
131
- hsl(60 85% 60%),
132
- hsl(120 65% 55%),
133
- hsl(200 85% 60%),
134
- hsl(260 75% 65%),
135
- hsl(320 80% 65%)
136
- );
137
- background-clip: text;
138
- -webkit-text-fill-color: transparent;
139
- }
140
-
141
- /* ── Rainbow border ── */
142
- .rainbow-border {
143
- background:
144
- linear-gradient(var(--background), var(--background)) padding-box,
145
- linear-gradient(
146
- 135deg,
147
- hsl(0 85% 70%),
148
- hsl(60 85% 60%),
149
- hsl(120 65% 55%),
150
- hsl(200 85% 60%),
151
- hsl(260 75% 65%),
152
- hsl(320 80% 65%),
153
- hsl(0 85% 70%)
154
- )
155
- border-box;
156
- border: 2px solid transparent;
157
- }
158
-
159
163
  /* ── Depth text (layered shadow with customizable colors) ── */
160
164
  .depth-text {
161
165
  --depth-color-primary: var(--primary);
@@ -168,20 +172,10 @@
168
172
  3px 3px 0 var(--depth-color-shadow),
169
173
  4px 4px 0 var(--depth-color-shadow),
170
174
  5px 5px 0 var(--depth-color-shadow),
171
- 5px 5px 1px rgba(0, 0, 0, 0.1),
172
- 2px 2px 2px rgba(0, 0, 0, 0.2),
173
- 4px 4px 5px rgba(0, 0, 0, 0.25),
174
- 6px 6px 10px rgba(0, 0, 0, 0.15);
175
- }
176
-
177
- /* ── Touch gate (iOS Safari) ── */
178
- .touch-gate-target {
179
- outline: 2px solid transparent;
180
- outline-offset: -2px;
181
- transition: outline-color var(--duration-fast) var(--ease-standard);
182
- }
183
- .touch-gate-active {
184
- outline-color: color-mix(in srgb, var(--ring) 25%, transparent);
175
+ 5px 5px 1px color-mix(in srgb, var(--shadow-color) 10%, transparent),
176
+ 2px 2px 2px color-mix(in srgb, var(--shadow-color) 20%, transparent),
177
+ 4px 4px 5px color-mix(in srgb, var(--shadow-color) 25%, transparent),
178
+ 6px 6px 10px color-mix(in srgb, var(--shadow-color) 15%, transparent);
185
179
  }
186
180
 
187
181
  /* ── 3D preserve ── */
@@ -197,38 +191,63 @@
197
191
  font-size: max(1rem, 1em);
198
192
  }
199
193
 
200
- /* ── Scroll fade mask ── */
194
+ /* ── Scroll fade masks ── */
201
195
  .scroll-fade-mask {
202
196
  mask-image: linear-gradient(to right, transparent, black var(--mask-fade-width), black calc(100% - var(--mask-fade-width)), transparent);
203
197
  -webkit-mask-image: linear-gradient(to right, transparent, black var(--mask-fade-width), black calc(100% - var(--mask-fade-width)), transparent);
204
198
  }
205
199
 
206
- /* ── Shimmer text effects ── */
207
- .gold-shimmer {
208
- background: linear-gradient(90deg, var(--color-gold-dark), var(--color-gold-light), var(--color-gold), var(--color-gold-light), var(--color-gold-dark));
209
- background-size: 250% 100%;
210
- background-clip: text;
211
- -webkit-background-clip: text;
212
- color: transparent;
213
- animation: shimmer 5s linear infinite;
200
+ .scroll-fade-top {
201
+ mask-image: linear-gradient(to bottom, transparent, black var(--mask-fade-width));
202
+ -webkit-mask-image: linear-gradient(to bottom, transparent, black var(--mask-fade-width));
214
203
  }
215
204
 
216
- .blue-shimmer {
217
- background: linear-gradient(90deg, #1e40af, #60a5fa, #3b82f6, #60a5fa, #1e40af);
218
- background-size: 200% 100%;
219
- background-clip: text;
220
- -webkit-background-clip: text;
221
- color: transparent;
222
- animation: shimmer 3s linear infinite;
205
+ .scroll-fade-bottom {
206
+ mask-image: linear-gradient(to bottom, black calc(100% - var(--mask-fade-width)), transparent);
207
+ -webkit-mask-image: linear-gradient(to bottom, black calc(100% - var(--mask-fade-width)), transparent);
208
+ }
209
+
210
+ .scroll-fade-y {
211
+ mask-image: linear-gradient(to bottom, transparent, black var(--mask-fade-width), black calc(100% - var(--mask-fade-width)), transparent);
212
+ -webkit-mask-image: linear-gradient(to bottom, transparent, black var(--mask-fade-width), black calc(100% - var(--mask-fade-width)), transparent);
213
+ }
214
+
215
+ /* ── Card scroll-timeline host (AI.W1-α) ───────────────────────────────
216
+ Canonical scroll-overflow host that emits the `--card-scroll` named
217
+ scroll-timeline consumed by `<CardHeader shrink>`. Apply to the
218
+ scroll-overflow ancestor (typically the `<Card>` itself OR a wrapper
219
+ inside it that carries `overflow-y: auto`).
220
+
221
+ `contain: layout style paint` isolates the named timeline so child
222
+ animations respond to THIS host's scroll only — not to portal-
223
+ triggered layout shifts in ancestor containers (the load-bearing
224
+ isolation guarantee the value.js `PaneHeader.vue:18-29` comment
225
+ called out and the AI.W1 spec §1.2 ratified as canon).
226
+
227
+ Disambiguated from `.scroll-fade-*` (mask-image fade gradient at
228
+ the container's leading/trailing edge) — `.card-scroll-host` does
229
+ NOT paint any visual; it only emits the timeline. */
230
+ .card-scroll-host {
231
+ contain: layout style paint;
232
+ scroll-timeline: --card-scroll block;
223
233
  }
224
234
 
225
- .gold-shimmer-subtle {
226
- background: linear-gradient(90deg, var(--color-gold-dark), var(--color-gold-light), var(--color-gold-dark));
227
- background-size: 300% 100%;
235
+ /* ── Shimmer text effects ──
236
+ The text-fill + background-clip composition is load-bearing visual
237
+ (the gold gradient itself); only the `animation:` line is wrapped in
238
+ the PRM no-preference bracket so PRM users see the static gradient
239
+ without the slide animation. */
240
+ .gold-shimmer {
241
+ background: linear-gradient(90deg, var(--color-gold-dark), var(--color-gold-light), var(--color-gold), var(--color-gold-light), var(--color-gold-dark));
242
+ background-size: 250% 100%;
228
243
  background-clip: text;
229
244
  -webkit-background-clip: text;
230
245
  color: transparent;
231
- animation: shimmer 8s linear infinite;
246
+ }
247
+ @media (prefers-reduced-motion: no-preference) {
248
+ .gold-shimmer {
249
+ animation: gold-shimmer-slide var(--duration-shimmer) linear infinite;
250
+ }
232
251
  }
233
252
 
234
253
  /* ── Keyboard key ── */
@@ -248,24 +267,172 @@
248
267
  line-height: 1;
249
268
  }
250
269
 
251
- /* ── Code badge ── */
252
- .code-badge {
253
- font-family: var(--font-mono, monospace);
254
- font-size: 0.75rem;
255
- border-radius: var(--radius-md);
256
- border: 1px solid var(--border);
257
- padding: 0.125rem 0.375rem;
270
+ /* ── Metric badge pill — compact glass label for numeric telemetry ── */
271
+ .metric-badge {
272
+ display: inline-flex;
273
+ align-items: center;
274
+ justify-content: center;
275
+ text-align: center;
276
+ gap: var(--metric-badge-gap, 0.125rem);
277
+ max-width: var(--metric-badge-max-width, 8rem);
278
+ min-height: var(--metric-badge-min-height, 1.5rem);
279
+ padding:
280
+ var(--metric-badge-padding-block, 0.125rem)
281
+ var(--metric-badge-padding-inline, 0.5rem);
282
+ overflow: hidden;
283
+ flex-shrink: 0;
284
+ line-height: 1;
285
+ /* Canonical 5-tier glass surface: the `quiet` rung paints the badge
286
+ plate at the `--glass-bg-quiet` α (0.50) with `--glass-blur-quiet`.
287
+ Reduced-transparency / no-backdrop-filter fallbacks propagate
288
+ through the lazy custom-property resolution that `glass.css`
289
+ sets up — the badge no longer bypasses the canon.
290
+ (Per audit U.W0.C-c §7.2.) */
291
+ border: 1px solid var(--metric-badge-border, var(--glass-border-quiet));
292
+ border-radius: var(--metric-badge-radius, var(--radius-badge, var(--radius-pill)));
293
+ background: var(--metric-badge-bg, var(--glass-bg-quiet));
294
+ backdrop-filter: var(--metric-badge-blur, var(--glass-blur-quiet));
295
+ box-shadow: var(--metric-badge-shadow, 0 1px 6px color-mix(in srgb, var(--shadow-color) 8%, transparent), var(--glass-highlight));
296
+ transition:
297
+ background var(--duration-fast) var(--ease-standard),
298
+ border-color var(--duration-fast) var(--ease-standard),
299
+ box-shadow var(--duration-fast) var(--ease-standard),
300
+ transform var(--duration-fast) var(--ease-standard);
301
+ }
302
+
303
+ .metric-badge > span {
304
+ line-height: 1;
305
+ }
306
+
307
+ .metric-badge:hover {
308
+ /* Hover lifts to the `resting` rung — one step up the canonical
309
+ ladder (audit U.W0.C-c §7.2). */
310
+ border-color: var(--metric-badge-hover-border, var(--glass-border-resting));
311
+ background: var(--metric-badge-hover-bg, var(--glass-bg-resting));
312
+ box-shadow: var(--metric-badge-hover-shadow, 0 2px 10px color-mix(in srgb, var(--shadow-color) 12%, transparent), var(--glass-highlight));
313
+ transform: scale(var(--metric-badge-hover-scale, 1.02));
314
+ }
315
+
316
+ .metric-badge:active {
317
+ transform: scale(var(--metric-badge-press-scale, 0.96));
318
+ }
319
+
320
+ .metric-badge:focus-visible {
321
+ outline: none;
322
+ box-shadow: var(--focus-ring-shadow);
323
+ }
324
+
325
+ /* Phase-finish catch-light — the quieter cousin of --glass-specular.
326
+ Speedtest toggles `data-just-resolved="true"` on a metric pill once
327
+ its phase completes; the badge briefly carries a 1px catch-light
328
+ streak at the top edge. Reads as the pill catching club lighting at
329
+ the moment its result resolves. */
330
+ .metric-badge[data-just-resolved="true"] {
331
+ box-shadow:
332
+ inset 0 1px 0 0 rgb(255 255 255 / 0.18),
333
+ var(--metric-badge-shadow,
334
+ 0 1px 6px color-mix(in srgb, var(--shadow-color) 8%, transparent),
335
+ var(--glass-highlight));
336
+ }
337
+
338
+ /* ── Label-bearing variants ───────────────────────────────────────────
339
+ When the badge carries a `labelPosition`, the prose-style annotation
340
+ slot precedes the amount. Inline keeps the row baseline-aligned;
341
+ stacked breaks to a column with items flush-left. The label slot
342
+ carries its own tracked uppercase rules; the badge's max-width
343
+ relaxes so the wider register fits. */
344
+ .metric-badge--label-inline {
345
+ flex-direction: row;
346
+ align-items: baseline;
347
+ justify-content: flex-start;
348
+ gap: var(--metric-badge-label-gap, 0.375rem);
349
+ max-width: var(--metric-badge-label-max-width, none);
350
+ text-align: left;
351
+ }
352
+
353
+ .metric-badge--label-stacked {
354
+ flex-direction: column;
355
+ align-items: flex-start;
356
+ justify-content: center;
357
+ gap: var(--metric-badge-label-gap-stacked, 0.0625rem);
358
+ max-width: var(--metric-badge-label-max-width, none);
359
+ text-align: left;
360
+ min-height: var(--metric-badge-min-height-stacked, 2.625rem);
361
+ padding-block: var(--metric-badge-padding-block-stacked, 0.375rem);
362
+ }
363
+
364
+ /* T.W2.T2 — stacked variant pairs amount + unit on a single row (row 2)
365
+ below the label (row 1). The `.metric-badge__row` wrapper baseline-
366
+ aligns the value and unit so the quantity reads as one phrase, not as
367
+ three siblings split across three rows (the pre-T behaviour the
368
+ audit B-spec §2.1 flagged). */
369
+ .metric-badge--label-stacked .metric-badge__row {
370
+ display: inline-flex;
371
+ align-items: baseline;
372
+ gap: var(--metric-badge-row-gap-stacked, 0.25rem);
258
373
  }
259
374
 
260
- /* ── Input bar glassmorphic inline input container ── */
375
+ /* T.W2.T3 MetricPill density modifiers. The pill is a thin composition
376
+ over MetricBadge with `labelPosition="stacked"` defaults; the density
377
+ knob adjusts block padding + horizontal padding so the pill reads at
378
+ the right register for its dock host. `spacious` is the default
379
+ (chassis-strip rhythm), `comfortable` keeps the tighter compact
380
+ register for densely-packed dock clusters. The selectors compose with
381
+ `.metric-badge--label-stacked` so the inline ladder remains untouched
382
+ — these are stacked-only refinements. */
383
+ .metric-pill[data-density="spacious"].metric-badge--label-stacked {
384
+ --metric-badge-padding-block-stacked: 0.5rem;
385
+ --metric-badge-padding-inline: 0.75rem;
386
+ }
387
+
388
+ .metric-pill[data-density="comfortable"].metric-badge--label-stacked {
389
+ --metric-badge-padding-block-stacked: 0.25rem;
390
+ --metric-badge-padding-inline: 0.5rem;
391
+ }
392
+
393
+ .metric-badge__label {
394
+ letter-spacing: 0.18em;
395
+ line-height: 1;
396
+ }
397
+
398
+ /* Dual-slot default visibility (R2-spec):
399
+ The library renders both `--full` and `--abbr` siblings whenever both
400
+ props are passed. Default identity is the full label; the abbreviation
401
+ sits hidden until consumer container-query CSS flips it. The adjacent-
402
+ sibling selector preserves single-slot back-compat: when a consumer
403
+ passes only `abbreviation` (no `--full` sibling rendered), the abbr
404
+ reads at default visibility. */
405
+ .metric-badge__label--full + .metric-badge__label--abbr {
406
+ display: none;
407
+ }
408
+
409
+ /* sm-tier label tracking — tighter than the md/lg/xl 0.18em rung so the
410
+ compact register reads as a tighter annotation against the smaller
411
+ glyph rise. R2-spec D-Rec-2 (audit-D). */
412
+ .metric-badge[data-size="sm"] .metric-badge__label {
413
+ letter-spacing: 0.1em;
414
+ }
415
+
416
+ /* Q.W3 Lane A — the `.glass-dock[data-density="…"]` density rungs that
417
+ set `--dock-tab-h` + `--dock-label-size` were consolidated into
418
+ `dock.css` (their canonical dock-styles home). They formerly lived
419
+ here and resolved only by the index.css import order (utilities.css
420
+ after dock.css); the cascade-order dependency is now gone. */
421
+
422
+ /* ── Input bar — glassmorphic inline input container ──
423
+ Composes the canonical `floating` glass rung (--glass-bg-floating
424
+ ≈ 80% α, --glass-blur-floating ≈ 24px) — same surface read as the
425
+ prior raw composition but routed through the canonical 5-tier
426
+ ladder so PRT / no-backdrop-filter fallbacks propagate cleanly.
427
+ (Per audit U.W0.C-c §7.2.) */
261
428
  .input-bar {
262
429
  display: flex;
263
430
  align-items: center;
264
431
  gap: 0.5rem;
265
432
  border-radius: var(--radius-2xl);
266
- border: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
267
- background: color-mix(in srgb, var(--card) 80%, transparent);
268
- backdrop-filter: blur(24px);
433
+ border: 1px solid var(--glass-border-floating);
434
+ background: var(--glass-bg-floating);
435
+ backdrop-filter: var(--glass-blur-floating);
269
436
 
270
437
  padding: 0 0.75rem;
271
438
  height: 2.25rem;
@@ -276,7 +443,7 @@
276
443
  border-color var(--duration-fast) var(--ease-standard);
277
444
  }
278
445
  .input-bar:focus-within {
279
- box-shadow: 0 0 0 2px color-mix(in srgb, var(--ring) 40%, transparent);
446
+ box-shadow: var(--focus-ring-shadow);
280
447
  border-color: var(--border);
281
448
  }
282
449
 
@@ -293,24 +460,13 @@
293
460
  color: color-mix(in srgb, var(--muted-foreground) 50%, transparent);
294
461
  }
295
462
 
296
- /* ── Dashed well — muted container for adding/selecting items ── */
297
- .dashed-well {
298
- max-width: var(--max-width-input);
299
- border-radius: var(--radius-2xl);
300
- border: 2px dashed color-mix(in srgb, var(--primary) 30%, transparent);
301
- background: color-mix(in srgb, var(--primary) 5%, transparent);
302
- padding: 0.75rem;
303
- display: grid;
304
- gap: 0.5rem;
305
- }
306
-
307
463
  /* ── Hover lift — translate-y + shadow on hover (3 levels) ── */
308
464
  .hover-lift {
309
465
  transition-property: transform, box-shadow;
310
466
  transition-duration: var(--duration-normal);
311
- transition-timing-function: ease;
467
+ transition-timing-function: var(--ease-standard);
312
468
  }
313
- .hover-lift:hover {
469
+ .hover-lift:hover:not(:disabled):not([aria-disabled='true']) {
314
470
  transform: translateY(var(--lift-sm));
315
471
  box-shadow: var(--shadow-md);
316
472
  }
@@ -318,9 +474,9 @@
318
474
  .hover-lift-md {
319
475
  transition-property: transform, box-shadow;
320
476
  transition-duration: var(--duration-normal);
321
- transition-timing-function: ease;
477
+ transition-timing-function: var(--ease-standard);
322
478
  }
323
- .hover-lift-md:hover {
479
+ .hover-lift-md:hover:not(:disabled):not([aria-disabled='true']) {
324
480
  transform: translateY(var(--lift-md));
325
481
  box-shadow: var(--shadow-md);
326
482
  }
@@ -328,125 +484,41 @@
328
484
  .hover-lift-lg {
329
485
  transition-property: transform, box-shadow;
330
486
  transition-duration: var(--duration-normal);
331
- transition-timing-function: ease;
487
+ transition-timing-function: var(--ease-standard);
332
488
  }
333
- .hover-lift-lg:hover {
489
+ .hover-lift-lg:hover:not(:disabled):not([aria-disabled='true']) {
334
490
  transform: translateY(var(--lift-lg));
335
491
  box-shadow: var(--shadow-lg);
336
492
  }
337
493
 
338
- /* ── Hover shadow lift shadow-only hover ── */
339
- .hover-shadow-lift {
340
- transition-property: box-shadow;
341
- transition-duration: var(--duration-normal);
342
- transition-timing-function: var(--spring-smooth);
343
- }
344
- .hover-shadow-lift:hover {
345
- box-shadow: var(--shadow-xl);
346
- }
347
-
348
- /* ── Glass overlay — dark backdrop ── */
349
- .glass-overlay {
350
- background: rgb(0 0 0 / 0.6);
351
- backdrop-filter: blur(4px);
352
-
353
- }
354
-
355
- /* ── Cartoon shadows — multi-layer offset shadow + border + translateY ── */
494
+ /* ── Cartoon shadowstoken-driven box-shadow + bezel border + lift ──
495
+ The box-shadow stack reads from the canonical
496
+ `--shadow-cartoon-{sm,md,lg}` rungs declared at tokens.css:304-312.
497
+ Those rungs use `color-mix(in srgb, var(--shadow-color) N%, transparent)`
498
+ so dark-mode flips the cast through `--shadow-color` automatically.
499
+ The 2px bezel border + translateY are the cartoon-stamp geometry
500
+ atop the canonical depth — kept here so a single class delivers
501
+ the whole cartoon read.
502
+ (Per audit U.W0.C-c §1.3 / Union 1 — collapses the dual-system
503
+ drift onto the token-driven shadow.) */
356
504
  .shadow-cartoon-sm {
357
- box-shadow:
358
- -3px 2px 1px var(--shadow-cartoon-color),
359
- 0 3px 1px var(--shadow-cartoon-color),
360
- -3px 3px 1px var(--shadow-cartoon-color-soft);
505
+ box-shadow: var(--shadow-cartoon-sm);
361
506
  border: 2px solid var(--border);
362
507
  transform: translateY(-1px);
363
508
  }
364
509
 
365
510
  .shadow-cartoon-md {
366
- box-shadow:
367
- -4px 3px 1px var(--shadow-cartoon-color),
368
- 0 4px 1px var(--shadow-cartoon-color),
369
- -4px 4px 2px var(--shadow-cartoon-color-soft);
511
+ box-shadow: var(--shadow-cartoon-md);
370
512
  border: 2px solid var(--border);
371
513
  transform: translateY(-1px);
372
514
  }
373
515
 
374
516
  .shadow-cartoon-lg {
375
- box-shadow:
376
- -6px 4px 1px var(--shadow-cartoon-color),
377
- 0 6px 1px var(--shadow-cartoon-color),
378
- -6px 6px 2px var(--shadow-cartoon-color-soft);
517
+ box-shadow: var(--shadow-cartoon-lg);
379
518
  border: 2px solid var(--border);
380
519
  transform: translateY(-2px);
381
520
  }
382
521
 
383
- .shadow-cartoon-sm-hover {
384
- box-shadow:
385
- -4px 3px 1px var(--shadow-cartoon-color-hover),
386
- 0 4px 1px var(--shadow-cartoon-color-hover),
387
- -4px 4px 2px var(--shadow-cartoon-color-hover-soft);
388
- border: 2px solid var(--border);
389
- transform: translateY(-2px);
390
- }
391
-
392
- /* ── Shimmer text — background gradient sweep over text ── */
393
- .shimmer-text {
394
- background: linear-gradient(
395
- 90deg,
396
- currentColor 0%,
397
- currentColor 40%,
398
- rgba(255, 255, 255, 0.8) 50%,
399
- currentColor 60%,
400
- currentColor 100%
401
- );
402
- background-size: 200% 100%;
403
- background-clip: text;
404
- -webkit-background-clip: text;
405
- animation: shimmer-sweep var(--shimmer-duration, 2000ms) ease-in-out infinite;
406
- }
407
-
408
- .dark .shimmer-text {
409
- background: linear-gradient(
410
- 90deg,
411
- currentColor 0%,
412
- currentColor 40%,
413
- rgba(255, 255, 255, 0.9) 50%,
414
- currentColor 60%,
415
- currentColor 100%
416
- );
417
- background-size: 200% 100%;
418
- background-clip: text;
419
- -webkit-background-clip: text;
420
- animation: shimmer-sweep var(--shimmer-duration, 2000ms) ease-in-out infinite;
421
- }
422
-
423
- /* ── Rainbow gradients ── */
424
- .rainbow-pastel {
425
- background: linear-gradient(to right, var(--rainbow-pastel-red), var(--rainbow-pastel-orange), var(--rainbow-pastel-yellow), var(--rainbow-pastel-green), var(--rainbow-pastel-blue), var(--rainbow-pastel-indigo), var(--rainbow-pastel-violet));
426
- }
427
- .rainbow-vivid {
428
- background: linear-gradient(to right, var(--rainbow-red), var(--rainbow-orange), var(--rainbow-yellow), var(--rainbow-green), var(--rainbow-blue), var(--rainbow-indigo), var(--rainbow-violet));
429
- }
430
-
431
- /* ── Progress gradient (rainbow) ── */
432
- .progress-gradient {
433
- background: linear-gradient(90deg, #ef4444, #f97316, #eab308, #22c55e, #06b6d0, #3b82f6, #9333ea);
434
- }
435
-
436
- /* ── Glassmorphic checkbox ── */
437
- .checkbox-glass {
438
- height: 1.25rem;
439
- width: 1.25rem;
440
- border-radius: var(--radius-lg);
441
- border: 2px solid color-mix(in srgb, var(--border) 60%, transparent);
442
- backdrop-filter: blur(4px);
443
-
444
- box-shadow: var(--shadow-sm);
445
- transition-property: background-color, border-color, transform, box-shadow;
446
- transition-duration: var(--duration-normal);
447
- transition-timing-function: var(--spring-snappy);
448
- }
449
-
450
522
  /* ── Divider utilities ── */
451
523
  .divider-h {
452
524
  height: 2px;
@@ -470,208 +542,332 @@
470
542
  );
471
543
  }
472
544
 
473
- .divider-v {
474
- width: 2px;
475
- background: linear-gradient(
476
- to bottom,
477
- transparent 3%,
478
- var(--border) 15%,
479
- var(--border) 85%,
480
- transparent 97%
481
- );
545
+ }
546
+
547
+ /* ── Hover scale (O.W6 Lane C) ──
548
+ Canonical hover-transform utility consuming the `--scale-hover` token
549
+ (tokens.css §11). Promoted from consumer-side `hover:scale-105`
550
+ recipe — 13 sites in keyframes.js demo + 9 sites in words/frontend
551
+ per O11/d L3 + O11/a I4. Single-token recipe (no ladder); the dual
552
+ `--scale-press-{xs..lg}` ladder discussion is the press-axis cohort
553
+ (O-N-7), not hover. Consumers reach the utility via
554
+ `class="scale-on-hover"`; transition + easing bind to the canonical
555
+ `--duration-fast` + `--ease-standard` tokens. */
556
+ @utility scale-on-hover {
557
+ @apply transition-transform duration-fast ease-standard;
558
+
559
+ &:hover {
560
+ transform: scale(var(--scale-hover));
482
561
  }
562
+ }
483
563
 
484
- /* ── Shake error ── */
485
- .shake-error {
486
- animation: shake 0.5s ease-in-out;
564
+ /* ── Sheet/drawer slide-out animation grammar ──
565
+ Mirror of `.popover-animate` for sheet/drawer panels. Pairs with
566
+ `slide-in-from-{top,right,bottom,left}-N` to compose side-keyed entries.
567
+ The open path uses --duration-panel (slow, deliberate); the close path
568
+ uses --duration-fast so dismiss feels snappy. R5 vocab.γ gap row 6;
569
+ consumed by W2.A sheet/drawer migration. */
570
+ @utility sheet-animate {
571
+ @apply data-[state=open]:animate-in data-[state=closed]:animate-out
572
+ data-[state=open]:fade-in data-[state=closed]:fade-out
573
+ data-[state=open]:duration-[var(--duration-panel)]
574
+ data-[state=closed]:duration-[var(--duration-fast)];
575
+ }
576
+
577
+ /* ── Audacious primary CTA recipe (K.W6 HEADLINE) ────────────────────
578
+ Lifted from `dock.css` `.dock-tab-button[data-tier="primary"]` per
579
+ K.W6 spec §3 (Option B — drop phase-tinting from the canonical
580
+ variant; phase-tint stays as a dock-local extension). Composes three
581
+ at-rest marks (top-highlight via --glass-highlight, bottom under-shadow
582
+ via --border-hairline, baseline glass via --card surface) with three
583
+ disco accents on hover (specular swap via --glass-specular, sparkle
584
+ sweep via the ::after star, disco-grain via --paper-clean-texture
585
+ blended with a --primary radial). Reservation: disco fires on hover
586
+ only — at rest the button reads as a Vignelli-restrained composed
587
+ glass surface.
588
+
589
+ Pair with `bg-primary text-primary-foreground` for the canonical
590
+ Button variant; the utility owns the texture/highlight/sparkle
591
+ composition only. */
592
+ @utility btn-audacious {
593
+ position: relative;
594
+ isolation: isolate;
595
+ overflow: hidden;
596
+ border: 1px solid var(--glass-border-quiet);
597
+ box-shadow:
598
+ var(--border-hairline),
599
+ var(--glass-highlight);
600
+ transition:
601
+ background var(--duration-fast) var(--ease-standard),
602
+ color var(--duration-fast) var(--ease-standard),
603
+ transform var(--duration-fast) var(--ease-standard),
604
+ box-shadow var(--duration-fast) var(--ease-standard),
605
+ --ripple-radius var(--motion-duration-ripple, 340ms) var(--ease-out-expo);
606
+
607
+ /* Hover composition: paper-grain texture overlaid on a soft
608
+ --primary radial, with the specular catch-light replacing the
609
+ resting hairline highlight. The radial uses --primary at 18%
610
+ — same alpha rung the dock primary tier consumes for phase
611
+ tinting, just bound to the canonical CTA color instead. */
612
+ &:hover:not(:disabled) {
613
+ background-image:
614
+ var(--paper-clean-texture),
615
+ radial-gradient(
616
+ ellipse at 30% 30%,
617
+ color-mix(in srgb, var(--primary) 18%, transparent),
618
+ transparent 70%
619
+ );
620
+ background-blend-mode: overlay, normal;
621
+ background-size: var(--paper-texture-size), auto;
622
+ box-shadow:
623
+ var(--glass-specular),
624
+ 0 0.5px 0 0 rgb(0 0 0 / 0.06);
625
+ }
626
+
627
+ /* AI.W4-M.2 (Q5 — G-AI-D27 ratified) — press-ripple via a typed
628
+ `--ripple-radius` length custom property. The `::before`
629
+ element paints a radial gradient whose stop radius equals the
630
+ typed length; the `:active` rule sets the length to the cap
631
+ (`--ripple-radius-max`, 12rem), and the host's transition
632
+ (above) interpolates the radius via the @property registration
633
+ (tokens.css §18). Release returns the length to its 0px initial
634
+ value and the ripple retires. The ripple paints at z-index 0
635
+ (above the host's background, below the slot content which sits
636
+ in the default 0 stacking context but with text inheriting the
637
+ slot's foreground colour). */
638
+ &::before {
639
+ content: "";
640
+ position: absolute;
641
+ inset: 0;
642
+ pointer-events: none;
643
+ z-index: 0;
644
+ border-radius: inherit;
645
+ background: radial-gradient(
646
+ circle at center,
647
+ color-mix(in srgb, var(--primary-foreground, hsl(0 0% 100%)) 35%, transparent) 0,
648
+ color-mix(in srgb, var(--primary-foreground, hsl(0 0% 100%)) 18%, transparent)
649
+ calc(var(--ripple-radius, 0px) * 0.55),
650
+ transparent var(--ripple-radius, 0px)
651
+ );
652
+ transition: inherit;
653
+ will-change: background;
487
654
  }
488
655
 
489
- /* ── Input focus ring ── */
490
- .input-focus {
491
- outline: none;
492
- transition-property: box-shadow;
493
- transition-duration: var(--duration-normal);
494
- transition-timing-function: var(--spring-smooth);
656
+ &:active:not(:disabled) {
657
+ --ripple-radius: var(--ripple-radius-max, 12rem);
495
658
  }
496
- .input-focus:focus-visible {
497
- box-shadow: 0 0 0 2px color-mix(in srgb, var(--primary) 40%, transparent);
498
- outline: none;
659
+
660
+ /* Sparkle glyph hidden at rest, animated on hover. The star
661
+ sweeps diagonally from top-left to bottom-right per the canonical
662
+ sparkle-sweep keyframe (animations.css). */
663
+ &::after {
664
+ content: "✦";
665
+ position: absolute;
666
+ top: 0.25rem;
667
+ left: 0.5rem;
668
+ color: hsl(0 0% 100% / 0.7);
669
+ font-size: 0.75rem;
670
+ line-height: 1;
671
+ pointer-events: none;
672
+ opacity: 0;
673
+ will-change: transform, opacity;
674
+ z-index: 1;
499
675
  }
500
676
 
501
- /* ── Active scale — press feedback ── */
502
- .active-scale:active {
503
- transform: scale(0.97);
504
- transition-property: transform;
505
- transition-duration: var(--duration-fast);
506
- }
507
-
508
- /* ── Stagger children — cascading entrance for list/grid items ── */
509
- .stagger-children > * {
510
- animation: fade-in var(--duration-normal) var(--spring-smooth, ease) backwards;
511
- animation-delay: calc(var(--stagger-index, 0) * 50ms);
512
- }
513
- .stagger-children > *:nth-child(1) { --stagger-index: 0; }
514
- .stagger-children > *:nth-child(2) { --stagger-index: 1; }
515
- .stagger-children > *:nth-child(3) { --stagger-index: 2; }
516
- .stagger-children > *:nth-child(4) { --stagger-index: 3; }
517
- .stagger-children > *:nth-child(5) { --stagger-index: 4; }
518
- .stagger-children > *:nth-child(6) { --stagger-index: 5; }
519
- .stagger-children > *:nth-child(7) { --stagger-index: 6; }
520
- .stagger-children > *:nth-child(8) { --stagger-index: 7; }
521
- .stagger-children > *:nth-child(9) { --stagger-index: 8; }
522
- .stagger-children > *:nth-child(10) { --stagger-index: 9; }
523
- .stagger-children > *:nth-child(11) { --stagger-index: 10; }
524
- .stagger-children > *:nth-child(12) { --stagger-index: 11; }
525
-
526
- /* ── Scroll reveal — animate on viewport entry (zero JS) ── */
527
- @supports (animation-timeline: view()) {
528
- /* One-shot: fades in during entry, stays visible */
529
- .scroll-reveal {
530
- animation: fade-in linear both;
531
- animation-timeline: view();
532
- animation-range: entry 0% entry 100%;
677
+ @media (prefers-reduced-motion: no-preference) {
678
+ &:hover::after {
679
+ animation: sparkle-sweep var(--duration-sparkle) var(--ease-out-expo);
533
680
  }
681
+ }
534
682
 
535
- /* Reversible: fades in on scroll down, fades out on scroll back up */
536
- .scroll-reveal-reverse {
537
- animation: fade-in linear both;
538
- animation-timeline: view();
539
- animation-range: entry 0% cover 50%;
683
+ /* PRM bracket the press-ripple retires; the press still reads
684
+ via the audacious recipe's transform/scale beat (the ripple is
685
+ affirmation atop affirmation). */
686
+ @media (prefers-reduced-motion: reduce) {
687
+ transition:
688
+ background var(--duration-fast) var(--ease-standard),
689
+ color var(--duration-fast) var(--ease-standard),
690
+ transform var(--duration-fast) var(--ease-standard),
691
+ box-shadow var(--duration-fast) var(--ease-standard);
692
+
693
+ &:active:not(:disabled) {
694
+ --ripple-radius: 0px;
540
695
  }
541
696
  }
697
+ }
542
698
 
543
- /* ── Letter spacing hover spread ── */
544
- .text-hover-spread {
545
- letter-spacing: var(--tracking-tight);
546
- transition: letter-spacing var(--duration-normal) var(--spring-smooth, ease);
547
- }
548
- .text-hover-spread:hover {
549
- letter-spacing: var(--tracking-wide);
550
- }
699
+ /* ── Gold CTA shimmer modifier AN.R0 D9 ───────────────────────────────
700
+ `btn-audacious-gold` extends `btn-audacious` with a gold sweep shimmer
701
+ on hover. Pair as `btn-audacious btn-audacious-gold` (or use the Button
702
+ `variant="gold-audacious"` which composes both). The hover shimmer is a
703
+ translucent linear-gradient sweep (low alpha — tasteful, not garish)
704
+ that slides left-to-right via the existing `gold-shimmer-slide` keyframe
705
+ (animations.css). The gold gradient uses the canonical `--color-gold-*`
706
+ token triad (tokens.css §13).
707
+
708
+ Design register:
709
+ • PRM no-preference: shimmer sweeps continuously at `--duration-shimmer`
710
+ rate; the sparkle-sweep (from btn-audacious) coexists on hover.
711
+ • PRM reduce: static gold tint shows on hover; no animation.
712
+ • The gold shimmer is a background-image layer ABOVE the existing
713
+ btn-audacious paper-grain + primary-radial layers, blended with
714
+ `overlay` so the glass substrate reads through at partial opacity.
715
+ • The `::before` ripple and `::after` sparkle from btn-audacious are
716
+ unchanged; this modifier only retunes the hover background layers.
717
+ • Consumer applies: `<Button variant="gold-audacious">Next →</Button>` */
718
+ @utility btn-audacious-gold {
719
+ /* At rest: a faint warm gold tint over the glass surface reads as "warm
720
+ glass" without announcing the hover state prematurely. */
721
+ background-image:
722
+ linear-gradient(
723
+ 135deg,
724
+ color-mix(in srgb, var(--color-gold) 8%, transparent),
725
+ color-mix(in srgb, var(--color-gold-light) 5%, transparent) 50%,
726
+ color-mix(in srgb, var(--color-gold) 8%, transparent)
727
+ );
551
728
 
552
- /* ── Disabled base state ── */
553
- .disabled-base:disabled {
554
- pointer-events: none;
555
- cursor: not-allowed;
556
- opacity: 0.5;
729
+ /* Hover: replace the audacious primary-radial with a gold sweep shimmer.
730
+ The shimmer gradient rides above the paper-grain texture; the `overlay`
731
+ blend-mode concentrates the gold on bright grain facets and recedes on
732
+ dark ones — the same lens metaphor as the btn-audacious primary radial. */
733
+ &:hover:not(:disabled) {
734
+ background-image:
735
+ var(--paper-clean-texture),
736
+ linear-gradient(
737
+ 90deg,
738
+ transparent 0%,
739
+ color-mix(in srgb, var(--color-gold-dark) 22%, transparent) 25%,
740
+ color-mix(in srgb, var(--color-gold-light) 30%, transparent) 50%,
741
+ color-mix(in srgb, var(--color-gold-dark) 22%, transparent) 75%,
742
+ transparent 100%
743
+ );
744
+ background-blend-mode: overlay, normal;
745
+ background-size: var(--paper-texture-size), 250% 100%;
746
+ background-position: 0 0, 100% 0;
747
+ box-shadow:
748
+ var(--glass-specular),
749
+ 0 0 0 1px color-mix(in srgb, var(--color-gold) 30%, transparent),
750
+ 0 0.5px 0 0 rgb(0 0 0 / 0.06);
557
751
  }
558
752
 
559
- /* ── Card hover transitions ── */
560
- .card-hover {
561
- transition-property: color, background-color, border-color, box-shadow;
562
- transition-duration: var(--duration-normal);
563
- transition-timing-function: ease;
564
- }
565
- .card-hover:hover {
566
- border-color: color-mix(in srgb, var(--border) 50%, transparent);
567
- background-color: color-mix(in srgb, var(--muted) 30%, transparent);
753
+ @media (prefers-reduced-motion: no-preference) {
754
+ &:hover:not(:disabled) {
755
+ animation: btn-gold-bg-sweep var(--duration-shimmer) linear infinite;
756
+ }
568
757
  }
758
+ }
569
759
 
570
- .card-hover-interactive {
571
- transition-property: color, background-color, border-color, box-shadow;
572
- transition-duration: var(--duration-normal);
573
- transition-timing-function: ease;
574
- }
575
- .card-hover-interactive:hover {
576
- border-color: color-mix(in srgb, var(--primary) 30%, transparent);
577
- background-color: color-mix(in srgb, var(--primary) 5%, transparent);
578
- }
760
+ /* Background-position sweep for the gold CTA hover shimmer.
761
+ Distinct from `gold-shimmer-slide` (which animates background-position for
762
+ a text-clip gradient). This variant sweeps the `background-position` of the
763
+ 250% wide gradient across the button's bounding box. */
764
+ @keyframes btn-gold-bg-sweep {
765
+ 0% { background-position: 0 0, 100% 0; }
766
+ 100% { background-position: 0 0, -100% 0; }
767
+ }
579
768
 
580
- /* ── Sort button active state ── */
581
- .sort-button-active {
582
- background-color: color-mix(in srgb, var(--primary) 10%, transparent);
583
- color: var(--primary);
584
- border-color: color-mix(in srgb, var(--primary) 30%, transparent);
585
- }
769
+ /* ── Table density utilities AN.R0 ─────────────────────────────────────
770
+ `table-cell` and `table-head` replace the former Tailwind `p-4` / `h-12`
771
+ literals in TableCell.vue / TableHead.vue. Both read `--table-density`
772
+ (tokens.css §19) so a single CSS-var assignment on a wrapping element
773
+ scales all row padding + header height simultaneously. Default density=1
774
+ resolves to the identical geometry as the previous Tailwind literals. */
775
+ @utility table-cell {
776
+ padding-inline: var(--table-cell-px, 1rem);
777
+ padding-block: var(--table-cell-py, 1rem);
778
+ }
586
779
 
587
- /* ── Heatmap color scale (10 levels, light mode) ── */
588
- .heatmap-1 {
589
- background-color: rgb(254 226 226);
590
- color: rgb(127 29 29);
591
- }
592
- .heatmap-2 {
593
- background-color: rgb(254 202 202);
594
- color: rgb(127 29 29);
595
- }
596
- .heatmap-3 {
597
- background-color: rgb(252 165 165);
598
- color: rgb(127 29 29);
599
- }
600
- .heatmap-4 {
601
- background-color: rgb(248 113 113);
602
- color: rgb(127 29 29);
603
- }
604
- .heatmap-5 {
605
- background-color: rgb(239 68 68);
606
- color: rgb(220 38 38);
607
- }
608
- .heatmap-6 {
609
- background-color: rgb(220 38 38);
610
- color: rgb(254 226 226);
611
- }
612
- .heatmap-7 {
613
- background-color: rgb(185 28 28);
614
- color: rgb(254 226 226);
615
- }
616
- .heatmap-8 {
617
- background-color: rgb(153 27 27);
618
- color: rgb(254 226 226);
619
- }
620
- .heatmap-9 {
621
- background-color: rgb(127 29 29);
622
- color: rgb(254 226 226);
623
- }
624
- .heatmap-10 {
625
- background-color: rgb(69 10 10);
626
- color: rgb(254 226 226);
627
- }
780
+ @utility table-head {
781
+ height: var(--table-head-h, 3rem);
782
+ padding-inline: var(--table-head-px, 1rem);
783
+ }
628
784
 
629
- /* ── Heatmap color scale (dark mode) ── */
630
- .dark .heatmap-1 {
631
- background-color: rgb(30 10 10);
632
- color: rgb(156 163 175);
633
- }
634
- .dark .heatmap-2 {
635
- background-color: rgb(45 15 15);
636
- color: rgb(209 213 219);
637
- }
638
- .dark .heatmap-3 {
639
- background-color: rgb(69 10 10);
640
- color: rgb(229 231 235);
641
- }
642
- .dark .heatmap-4 {
643
- background-color: rgb(91 15 15);
644
- color: rgb(243 244 246);
645
- }
646
- .dark .heatmap-5 {
647
- background-color: rgb(127 29 29);
648
- color: rgb(249 250 251);
649
- }
650
- .dark .heatmap-6 {
651
- background-color: rgb(153 27 27);
652
- color: rgb(254 226 226);
653
- }
654
- .dark .heatmap-7 {
655
- background-color: rgb(185 28 28);
656
- color: rgb(254 242 242);
657
- }
658
- .dark .heatmap-8 {
659
- background-color: rgb(220 38 38);
660
- color: rgb(255 251 251);
785
+ /* ── Rainbow gradient backgrounds (Q.W3 Lane E re-promote) ──────────────
786
+ `.rainbow-vivid` + `.rainbow-pastel` paint a left-to-right 7-stop spectrum
787
+ from the canonical `--rainbow-*` / `--rainbow-pastel-*` token families
788
+ (tokens.css §14). They were retired at `b0debec` (D.W2.D, 2026-04-30)
789
+ under a zero-consumer audit that did not include keyframes.js in its
790
+ sweep corpus — keyframes.js's `AnimationMenuBar.vue` round play button
791
+ composes `rainbow-vivid` (playing) / `rainbow-pastel` (idle) and silently
792
+ lost its gradient when the recipes left the library. The `--rainbow-*`
793
+ color tokens survived the retiral; only the class recipes were dropped.
794
+
795
+ Re-promoted as `@utility` recipes — the token half is canonical, so the
796
+ class form that paints it belongs alongside it. Not a backwards-compat
797
+ alias: it is a substrate REVERT, the revert IS the consumer rediscovery
798
+ (≥ 1 consumer exists post-revert, satisfying L invariant 8). Faithful
799
+ to the pre-`b0debec` recipe bodies. */
800
+ @utility rainbow-vivid {
801
+ background: linear-gradient(
802
+ to right,
803
+ var(--rainbow-red),
804
+ var(--rainbow-orange),
805
+ var(--rainbow-yellow),
806
+ var(--rainbow-green),
807
+ var(--rainbow-blue),
808
+ var(--rainbow-indigo),
809
+ var(--rainbow-violet)
810
+ );
811
+ }
812
+
813
+ @utility rainbow-pastel {
814
+ background: linear-gradient(
815
+ to right,
816
+ var(--rainbow-pastel-red),
817
+ var(--rainbow-pastel-orange),
818
+ var(--rainbow-pastel-yellow),
819
+ var(--rainbow-pastel-green),
820
+ var(--rainbow-pastel-blue),
821
+ var(--rainbow-pastel-indigo),
822
+ var(--rainbow-pastel-violet)
823
+ );
824
+ }
825
+
826
+ /* ── Interactive-button four-state recipe (Q.W3 Lane E re-promote) ───────
827
+ `.btn-interactive` carries the canonical "Button-with-spring-hover"
828
+ four-state contract — transition + hover-scale (`--scale-hover`) +
829
+ active-press (`--scale-press`) + disabled-opacity (`--opacity-disabled`)
830
+ + focus-ring fade-in. Same shape as `.btn-audacious` (a composition-only
831
+ recipe a Button variant opts into). Retired at `b0debec` (D.W2.D)
832
+ alongside the rainbow recipes under the same incomplete audit corpus;
833
+ keyframes.js consumes it at 7 sites (CubeScene, EasingScene, demo/cube,
834
+ AnimationControlsGroup RIBBON_BUTTON_CLASS, PlaybackRibbon Reverse).
835
+
836
+ The Button primitive's own variants emit the four states except
837
+ `hover:scale-*` — `.btn-interactive` is the canonical opt-in that adds
838
+ the spring-hover lift. Faithful to the pre-`b0debec` recipe body. */
839
+ @utility btn-interactive {
840
+ transition:
841
+ background-color var(--duration-fast) var(--ease-standard),
842
+ color var(--duration-fast) var(--ease-standard),
843
+ transform var(--duration-fast) var(--ease-standard),
844
+ opacity var(--duration-fast) var(--ease-standard);
845
+
846
+ &:hover {
847
+ transform: scale(var(--scale-hover));
661
848
  }
662
- .dark .heatmap-9 {
663
- background-color: rgb(239 68 68);
664
- color: rgb(255 255 255);
849
+
850
+ &:active {
851
+ transform: scale(var(--scale-press));
665
852
  }
666
- .dark .heatmap-10 {
667
- background-color: rgb(248 113 113);
668
- color: rgb(255 255 255);
853
+
854
+ &:disabled {
855
+ opacity: var(--opacity-disabled);
856
+ pointer-events: none;
669
857
  }
670
- }
671
858
 
672
- @keyframes shimmer {
673
- 0% { background-position: 250% 0; }
674
- 100% { background-position: -250% 0; }
859
+ &:focus-visible {
860
+ box-shadow: var(--focus-ring-shadow);
861
+ outline: none;
862
+ /* Fade in; base state has no box-shadow transition → instant
863
+ removal */
864
+ transition:
865
+ background-color var(--duration-fast) var(--ease-standard),
866
+ color var(--duration-fast) var(--ease-standard),
867
+ transform var(--duration-fast) var(--ease-standard),
868
+ opacity var(--duration-fast) var(--ease-standard),
869
+ box-shadow var(--duration-fast) var(--ease-standard);
870
+ }
675
871
  }
676
872
 
677
873
  /* ── Reduced motion: nuanced — preserve opacity, remove spatial motion ── */