@mkbabb/glass-ui 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/README.md +172 -0
  2. package/dist/glass-ui.css +1 -0
  3. package/dist/glass-ui.js +10019 -0
  4. package/dist/index.d.ts +6619 -0
  5. package/package.json +65 -0
  6. package/src/components/custom/aurora/Aurora.vue +34 -0
  7. package/src/components/custom/aurora/composables/color.ts +122 -0
  8. package/src/components/custom/aurora/composables/useAurora.ts +355 -0
  9. package/src/components/custom/aurora/index.ts +8 -0
  10. package/src/components/custom/confirm-dialog/ConfirmDialog.vue +88 -0
  11. package/src/components/custom/confirm-dialog/index.ts +1 -0
  12. package/src/components/custom/controls/DarkModeToggle.vue +96 -0
  13. package/src/components/custom/controls/index.ts +1 -0
  14. package/src/components/custom/dock/DockLayerGroup.vue +21 -0
  15. package/src/components/custom/dock/DockPopover.vue +263 -0
  16. package/src/components/custom/dock/GlassDock.vue +276 -0
  17. package/src/components/custom/dock/composables/index.ts +16 -0
  18. package/src/components/custom/dock/composables/isTeleportedTarget.ts +19 -0
  19. package/src/components/custom/dock/composables/useDockActionBar.ts +33 -0
  20. package/src/components/custom/dock/composables/useDockState.ts +301 -0
  21. package/src/components/custom/dock/composables/useDockTransition.ts +146 -0
  22. package/src/components/custom/dock/composables/useLayerTransition.ts +135 -0
  23. package/src/components/custom/dock/composables/usePopupMutex.ts +83 -0
  24. package/src/components/custom/dock/index.ts +9 -0
  25. package/src/components/custom/expandable-container/ExpandableContainer.vue +64 -0
  26. package/src/components/custom/expandable-container/index.ts +1 -0
  27. package/src/components/custom/glass-panel/GlassPanel.vue +98 -0
  28. package/src/components/custom/glass-panel/index.ts +2 -0
  29. package/src/components/custom/icon-tooltip/IconTooltip.vue +20 -0
  30. package/src/components/custom/icon-tooltip/index.ts +1 -0
  31. package/src/components/custom/index.ts +15 -0
  32. package/src/components/custom/infinite-scroll/InfiniteScroll.vue +55 -0
  33. package/src/components/custom/infinite-scroll/composables/index.ts +2 -0
  34. package/src/components/custom/infinite-scroll/composables/types.ts +23 -0
  35. package/src/components/custom/infinite-scroll/composables/useInfiniteScroll.ts +73 -0
  36. package/src/components/custom/infinite-scroll/index.ts +1 -0
  37. package/src/components/custom/labeled-field/LabeledInput.vue +29 -0
  38. package/src/components/custom/labeled-field/LabeledSelect.vue +59 -0
  39. package/src/components/custom/labeled-field/LabeledSlider.vue +32 -0
  40. package/src/components/custom/labeled-field/LabeledSwitch.vue +27 -0
  41. package/src/components/custom/labeled-field/index.ts +4 -0
  42. package/src/components/custom/metaballs/MetaballCanvas.vue +23 -0
  43. package/src/components/custom/metaballs/index.ts +4 -0
  44. package/src/components/custom/metaballs/shaders.ts +63 -0
  45. package/src/components/custom/metaballs/types.ts +29 -0
  46. package/src/components/custom/metaballs/useMetaballs.ts +252 -0
  47. package/src/components/custom/search/FuzzySearch.vue +589 -0
  48. package/src/components/custom/search/SearchBar.vue +44 -0
  49. package/src/components/custom/search/composables/fuzzySearchIndex.ts +224 -0
  50. package/src/components/custom/search/composables/index.ts +5 -0
  51. package/src/components/custom/search/composables/types.ts +34 -0
  52. package/src/components/custom/search/composables/useFuzzySearch.ts +115 -0
  53. package/src/components/custom/search/index.ts +7 -0
  54. package/src/components/custom/sidebar/ProgressiveSidebar.vue +256 -0
  55. package/src/components/custom/sidebar/composables/index.ts +6 -0
  56. package/src/components/custom/sidebar/composables/useScrollTracker.ts +242 -0
  57. package/src/components/custom/sidebar/composables/useSidebarFollow.ts +247 -0
  58. package/src/components/custom/sidebar/composables/useSidebarState.ts +72 -0
  59. package/src/components/custom/sidebar/composables/useTreeIndex.ts +152 -0
  60. package/src/components/custom/sidebar/index.ts +15 -0
  61. package/src/components/custom/sidebar/types.ts +50 -0
  62. package/src/components/custom/tabs/BouncyTabs.vue +39 -0
  63. package/src/components/custom/tabs/BouncyToggle.vue +352 -0
  64. package/src/components/custom/tabs/UnderlineTabs.vue +115 -0
  65. package/src/components/custom/tabs/index.ts +5 -0
  66. package/src/components/custom/timeline/GlassTimeline.vue +174 -0
  67. package/src/components/custom/timeline/index.ts +1 -0
  68. package/src/components/custom/typewriter/TypewriterText.vue +239 -0
  69. package/src/components/custom/typewriter/composables/index.ts +1 -0
  70. package/src/components/custom/typewriter/composables/useTypewriter.ts +413 -0
  71. package/src/components/custom/typewriter/index.ts +7 -0
  72. package/src/components/custom/typewriter/types.ts +159 -0
  73. package/src/components/custom/typewriter/utils/keyboard.ts +213 -0
  74. package/src/components/custom/typewriter/utils/pausePatterns.ts +55 -0
  75. package/src/components/custom/typewriter/utils/timing.ts +104 -0
  76. package/src/components/custom/typewriter/utils/typoStateMachine.ts +197 -0
  77. package/src/components/index.ts +2 -0
  78. package/src/components/ui/accordion/Accordion.vue +19 -0
  79. package/src/components/ui/accordion/AccordionContent.vue +24 -0
  80. package/src/components/ui/accordion/AccordionItem.vue +24 -0
  81. package/src/components/ui/accordion/AccordionTrigger.vue +39 -0
  82. package/src/components/ui/accordion/index.ts +4 -0
  83. package/src/components/ui/alert/Alert.vue +20 -0
  84. package/src/components/ui/alert/AlertDescription.vue +17 -0
  85. package/src/components/ui/alert/AlertTitle.vue +17 -0
  86. package/src/components/ui/alert/index.ts +23 -0
  87. package/src/components/ui/avatar/Avatar.vue +21 -0
  88. package/src/components/ui/avatar/AvatarFallback.vue +11 -0
  89. package/src/components/ui/avatar/AvatarImage.vue +9 -0
  90. package/src/components/ui/avatar/index.ts +24 -0
  91. package/src/components/ui/badge/Badge.vue +16 -0
  92. package/src/components/ui/badge/index.ts +25 -0
  93. package/src/components/ui/button/Button.vue +26 -0
  94. package/src/components/ui/button/index.ts +43 -0
  95. package/src/components/ui/card/Card.vue +28 -0
  96. package/src/components/ui/card/CardContent.vue +14 -0
  97. package/src/components/ui/card/CardDescription.vue +14 -0
  98. package/src/components/ui/card/CardFooter.vue +14 -0
  99. package/src/components/ui/card/CardHeader.vue +14 -0
  100. package/src/components/ui/card/CardTitle.vue +21 -0
  101. package/src/components/ui/card/index.ts +6 -0
  102. package/src/components/ui/carousel/Carousel.vue +53 -0
  103. package/src/components/ui/carousel/CarouselContent.vue +35 -0
  104. package/src/components/ui/carousel/CarouselItem.vue +24 -0
  105. package/src/components/ui/carousel/CarouselNext.vue +40 -0
  106. package/src/components/ui/carousel/CarouselPrevious.vue +40 -0
  107. package/src/components/ui/carousel/index.ts +10 -0
  108. package/src/components/ui/carousel/interface.ts +26 -0
  109. package/src/components/ui/carousel/useCarousel.ts +56 -0
  110. package/src/components/ui/checkbox/Checkbox.vue +33 -0
  111. package/src/components/ui/checkbox/index.ts +1 -0
  112. package/src/components/ui/collapsible/Collapsible.vue +15 -0
  113. package/src/components/ui/collapsible/CollapsibleContent.vue +11 -0
  114. package/src/components/ui/collapsible/CollapsibleTrigger.vue +11 -0
  115. package/src/components/ui/collapsible/index.ts +3 -0
  116. package/src/components/ui/combobox/Combobox.vue +17 -0
  117. package/src/components/ui/combobox/ComboboxAnchor.vue +23 -0
  118. package/src/components/ui/combobox/ComboboxEmpty.vue +21 -0
  119. package/src/components/ui/combobox/ComboboxGroup.vue +27 -0
  120. package/src/components/ui/combobox/ComboboxInput.vue +41 -0
  121. package/src/components/ui/combobox/ComboboxItem.vue +24 -0
  122. package/src/components/ui/combobox/ComboboxItemIndicator.vue +23 -0
  123. package/src/components/ui/combobox/ComboboxList.vue +29 -0
  124. package/src/components/ui/combobox/ComboboxSeparator.vue +21 -0
  125. package/src/components/ui/combobox/ComboboxViewport.vue +23 -0
  126. package/src/components/ui/combobox/index.ts +12 -0
  127. package/src/components/ui/command/Command.vue +30 -0
  128. package/src/components/ui/command/CommandDialog.vue +21 -0
  129. package/src/components/ui/command/CommandEmpty.vue +20 -0
  130. package/src/components/ui/command/CommandGroup.vue +29 -0
  131. package/src/components/ui/command/CommandInput.vue +33 -0
  132. package/src/components/ui/command/CommandItem.vue +26 -0
  133. package/src/components/ui/command/CommandList.vue +27 -0
  134. package/src/components/ui/command/CommandSeparator.vue +23 -0
  135. package/src/components/ui/command/CommandShortcut.vue +14 -0
  136. package/src/components/ui/command/index.ts +9 -0
  137. package/src/components/ui/context-menu/ContextMenu.vue +15 -0
  138. package/src/components/ui/context-menu/ContextMenuCheckboxItem.vue +40 -0
  139. package/src/components/ui/context-menu/ContextMenuContent.vue +36 -0
  140. package/src/components/ui/context-menu/ContextMenuGroup.vue +11 -0
  141. package/src/components/ui/context-menu/ContextMenuItem.vue +34 -0
  142. package/src/components/ui/context-menu/ContextMenuLabel.vue +25 -0
  143. package/src/components/ui/context-menu/ContextMenuPortal.vue +11 -0
  144. package/src/components/ui/context-menu/ContextMenuRadioGroup.vue +19 -0
  145. package/src/components/ui/context-menu/ContextMenuRadioItem.vue +40 -0
  146. package/src/components/ui/context-menu/ContextMenuSeparator.vue +20 -0
  147. package/src/components/ui/context-menu/ContextMenuShortcut.vue +14 -0
  148. package/src/components/ui/context-menu/ContextMenuSub.vue +19 -0
  149. package/src/components/ui/context-menu/ContextMenuSubContent.vue +35 -0
  150. package/src/components/ui/context-menu/ContextMenuSubTrigger.vue +34 -0
  151. package/src/components/ui/context-menu/ContextMenuTrigger.vue +13 -0
  152. package/src/components/ui/context-menu/index.ts +14 -0
  153. package/src/components/ui/data-table/DataTable.vue +167 -0
  154. package/src/components/ui/data-table/DataTablePagination.vue +112 -0
  155. package/src/components/ui/data-table/index.ts +3 -0
  156. package/src/components/ui/data-table/types.ts +48 -0
  157. package/src/components/ui/dialog/Dialog.vue +14 -0
  158. package/src/components/ui/dialog/DialogClose.vue +11 -0
  159. package/src/components/ui/dialog/DialogContent.vue +61 -0
  160. package/src/components/ui/dialog/DialogDescription.vue +24 -0
  161. package/src/components/ui/dialog/DialogFooter.vue +19 -0
  162. package/src/components/ui/dialog/DialogHeader.vue +16 -0
  163. package/src/components/ui/dialog/DialogScrollContent.vue +65 -0
  164. package/src/components/ui/dialog/DialogTitle.vue +29 -0
  165. package/src/components/ui/dialog/DialogTrigger.vue +11 -0
  166. package/src/components/ui/dialog/index.ts +9 -0
  167. package/src/components/ui/drawer/Drawer.vue +19 -0
  168. package/src/components/ui/drawer/DrawerContent.vue +28 -0
  169. package/src/components/ui/drawer/DrawerDescription.vue +20 -0
  170. package/src/components/ui/drawer/DrawerFooter.vue +14 -0
  171. package/src/components/ui/drawer/DrawerHeader.vue +14 -0
  172. package/src/components/ui/drawer/DrawerOverlay.vue +18 -0
  173. package/src/components/ui/drawer/DrawerTitle.vue +20 -0
  174. package/src/components/ui/drawer/index.ts +8 -0
  175. package/src/components/ui/dropdown-menu/DropdownMenu.vue +14 -0
  176. package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +40 -0
  177. package/src/components/ui/dropdown-menu/DropdownMenuContent.vue +44 -0
  178. package/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +11 -0
  179. package/src/components/ui/dropdown-menu/DropdownMenuItem.vue +28 -0
  180. package/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +24 -0
  181. package/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +19 -0
  182. package/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +40 -0
  183. package/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +22 -0
  184. package/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +14 -0
  185. package/src/components/ui/dropdown-menu/DropdownMenuSub.vue +19 -0
  186. package/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +36 -0
  187. package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +33 -0
  188. package/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +13 -0
  189. package/src/components/ui/dropdown-menu/index.ts +16 -0
  190. package/src/components/ui/hover-card/HoverCard.vue +14 -0
  191. package/src/components/ui/hover-card/HoverCardContent.vue +41 -0
  192. package/src/components/ui/hover-card/HoverCardTrigger.vue +11 -0
  193. package/src/components/ui/hover-card/index.ts +3 -0
  194. package/src/components/ui/index.ts +41 -0
  195. package/src/components/ui/input/Input.vue +24 -0
  196. package/src/components/ui/input/index.ts +1 -0
  197. package/src/components/ui/label/Label.vue +27 -0
  198. package/src/components/ui/label/index.ts +1 -0
  199. package/src/components/ui/multi-select/MultiSelect.vue +141 -0
  200. package/src/components/ui/multi-select/index.ts +7 -0
  201. package/src/components/ui/notification/Notification.vue +85 -0
  202. package/src/components/ui/notification/index.ts +1 -0
  203. package/src/components/ui/number-field/NumberField.vue +23 -0
  204. package/src/components/ui/number-field/NumberFieldContent.vue +14 -0
  205. package/src/components/ui/number-field/NumberFieldDecrement.vue +25 -0
  206. package/src/components/ui/number-field/NumberFieldIncrement.vue +25 -0
  207. package/src/components/ui/number-field/NumberFieldInput.vue +8 -0
  208. package/src/components/ui/number-field/index.ts +5 -0
  209. package/src/components/ui/popover/Popover.vue +15 -0
  210. package/src/components/ui/popover/PopoverContent.vue +61 -0
  211. package/src/components/ui/popover/PopoverTrigger.vue +11 -0
  212. package/src/components/ui/popover/index.ts +3 -0
  213. package/src/components/ui/progress/Progress.vue +39 -0
  214. package/src/components/ui/progress/index.ts +1 -0
  215. package/src/components/ui/radio-group/RadioGroup.vue +25 -0
  216. package/src/components/ui/radio-group/RadioGroupItem.vue +39 -0
  217. package/src/components/ui/radio-group/index.ts +2 -0
  218. package/src/components/ui/scroll-area/ScrollArea.vue +29 -0
  219. package/src/components/ui/scroll-area/ScrollBar.vue +30 -0
  220. package/src/components/ui/scroll-area/index.ts +2 -0
  221. package/src/components/ui/scroll-pane/ScrollPane.vue +25 -0
  222. package/src/components/ui/scroll-pane/ScrollPaneHeader.vue +75 -0
  223. package/src/components/ui/scroll-pane/index.ts +2 -0
  224. package/src/components/ui/select/Select.vue +15 -0
  225. package/src/components/ui/select/SelectContent.vue +57 -0
  226. package/src/components/ui/select/SelectGroup.vue +19 -0
  227. package/src/components/ui/select/SelectItem.vue +47 -0
  228. package/src/components/ui/select/SelectItemText.vue +11 -0
  229. package/src/components/ui/select/SelectLabel.vue +13 -0
  230. package/src/components/ui/select/SelectScrollDownButton.vue +24 -0
  231. package/src/components/ui/select/SelectScrollUpButton.vue +24 -0
  232. package/src/components/ui/select/SelectSeparator.vue +17 -0
  233. package/src/components/ui/select/SelectTrigger.vue +45 -0
  234. package/src/components/ui/select/SelectValue.vue +11 -0
  235. package/src/components/ui/select/index.ts +11 -0
  236. package/src/components/ui/separator/Separator.vue +35 -0
  237. package/src/components/ui/separator/index.ts +1 -0
  238. package/src/components/ui/sheet/Sheet.vue +14 -0
  239. package/src/components/ui/sheet/SheetClose.vue +11 -0
  240. package/src/components/ui/sheet/SheetContent.vue +56 -0
  241. package/src/components/ui/sheet/SheetDescription.vue +22 -0
  242. package/src/components/ui/sheet/SheetFooter.vue +19 -0
  243. package/src/components/ui/sheet/SheetHeader.vue +16 -0
  244. package/src/components/ui/sheet/SheetTitle.vue +22 -0
  245. package/src/components/ui/sheet/SheetTrigger.vue +11 -0
  246. package/src/components/ui/sheet/index.ts +31 -0
  247. package/src/components/ui/skeleton/Skeleton.vue +14 -0
  248. package/src/components/ui/skeleton/index.ts +1 -0
  249. package/src/components/ui/slider/Slider.vue +66 -0
  250. package/src/components/ui/slider/index.ts +1 -0
  251. package/src/components/ui/switch/Switch.vue +37 -0
  252. package/src/components/ui/switch/index.ts +1 -0
  253. package/src/components/ui/table/Table.vue +16 -0
  254. package/src/components/ui/table/TableBody.vue +14 -0
  255. package/src/components/ui/table/TableCaption.vue +14 -0
  256. package/src/components/ui/table/TableCell.vue +14 -0
  257. package/src/components/ui/table/TableEmpty.vue +39 -0
  258. package/src/components/ui/table/TableFooter.vue +16 -0
  259. package/src/components/ui/table/TableHead.vue +21 -0
  260. package/src/components/ui/table/TableHeader.vue +14 -0
  261. package/src/components/ui/table/TableRow.vue +21 -0
  262. package/src/components/ui/table/index.ts +9 -0
  263. package/src/components/ui/tabs/Tabs.vue +15 -0
  264. package/src/components/ui/tabs/TabsContent.vue +22 -0
  265. package/src/components/ui/tabs/TabsIndicator.vue +22 -0
  266. package/src/components/ui/tabs/TabsList.vue +25 -0
  267. package/src/components/ui/tabs/TabsTrigger.vue +29 -0
  268. package/src/components/ui/tabs/index.ts +5 -0
  269. package/src/components/ui/tags-input/TagsInput.vue +22 -0
  270. package/src/components/ui/tags-input/TagsInputInput.vue +19 -0
  271. package/src/components/ui/tags-input/TagsInputItem.vue +22 -0
  272. package/src/components/ui/tags-input/TagsInputItemDelete.vue +24 -0
  273. package/src/components/ui/tags-input/TagsInputItemText.vue +19 -0
  274. package/src/components/ui/tags-input/index.ts +5 -0
  275. package/src/components/ui/textarea/Textarea.vue +24 -0
  276. package/src/components/ui/textarea/index.ts +1 -0
  277. package/src/components/ui/toast/Toast.vue +57 -0
  278. package/src/components/ui/toast/ToastAction.vue +30 -0
  279. package/src/components/ui/toast/ToastClose.vue +31 -0
  280. package/src/components/ui/toast/ToastDescription.vue +25 -0
  281. package/src/components/ui/toast/ToastTitle.vue +25 -0
  282. package/src/components/ui/toast/Toaster.vue +31 -0
  283. package/src/components/ui/toast/index.ts +8 -0
  284. package/src/components/ui/toast/use-toast.ts +136 -0
  285. package/src/components/ui/toggle/Toggle.vue +35 -0
  286. package/src/components/ui/toggle/index.ts +27 -0
  287. package/src/components/ui/toggle-group/ToggleGroup.vue +34 -0
  288. package/src/components/ui/toggle-group/ToggleGroupItem.vue +35 -0
  289. package/src/components/ui/toggle-group/index.ts +2 -0
  290. package/src/components/ui/tooltip/Tooltip.vue +14 -0
  291. package/src/components/ui/tooltip/TooltipContent.vue +31 -0
  292. package/src/components/ui/tooltip/TooltipProvider.vue +11 -0
  293. package/src/components/ui/tooltip/TooltipTrigger.vue +11 -0
  294. package/src/components/ui/tooltip/index.ts +4 -0
  295. package/src/composables/glass/index.ts +8 -0
  296. package/src/composables/glass/useGlassRenderer.ts +252 -0
  297. package/src/composables/glass/webgl/frostShader.ts +221 -0
  298. package/src/composables/glass/webgpu/glassShader.wgsl +173 -0
  299. package/src/composables/index.ts +32 -0
  300. package/src/composables/infinite-scroll/index.ts +2 -0
  301. package/src/composables/infinite-scroll/types.ts +25 -0
  302. package/src/composables/infinite-scroll/useInfiniteScroll.ts +101 -0
  303. package/src/composables/interaction/index.ts +5 -0
  304. package/src/composables/interaction/useHeightTransition.ts +82 -0
  305. package/src/composables/interaction/useHoverPopover.ts +64 -0
  306. package/src/composables/interaction/useHoverToggle.ts +103 -0
  307. package/src/composables/interaction/useLeaveTimer.ts +17 -0
  308. package/src/composables/interaction/useTouchGate.ts +207 -0
  309. package/src/composables/pagination/index.ts +2 -0
  310. package/src/composables/pagination/useOffsetPagination.ts +70 -0
  311. package/src/composables/prng.ts +32 -0
  312. package/src/composables/useCharSplit.ts +31 -0
  313. package/src/composables/useClipboard.ts +46 -0
  314. package/src/composables/useGlobalDark.ts +61 -0
  315. package/src/composables/useKeyboardShortcuts.ts +205 -0
  316. package/src/composables/useWatercolorBlob.ts +136 -0
  317. package/src/composables/virtual/index.ts +22 -0
  318. package/src/composables/virtual/useVirtualSectionWindow.ts +338 -0
  319. package/src/composables/virtual/useWindowedStore.ts +86 -0
  320. package/src/composables/virtual/virtualSectionLayout.ts +212 -0
  321. package/src/index.ts +9 -0
  322. package/src/styles/animations.css +233 -0
  323. package/src/styles/cards.css +66 -0
  324. package/src/styles/dock.css +221 -0
  325. package/src/styles/floating-panel.css +49 -0
  326. package/src/styles/glass.css +266 -0
  327. package/src/styles/index.css +26 -0
  328. package/src/styles/scroll-pane.css +10 -0
  329. package/src/styles/theme.css +138 -0
  330. package/src/styles/tokens.css +333 -0
  331. package/src/styles/transitions.css +226 -0
  332. package/src/styles/typography.css +277 -0
  333. package/src/styles/utilities.css +697 -0
  334. package/src/utils/cn.ts +6 -0
  335. package/src/utils/index.ts +1 -0
@@ -0,0 +1,138 @@
1
+ /*
2
+ * theme.css — Tailwind CSS v4 @theme block
3
+ *
4
+ * Maps CSS custom properties to Tailwind utility-generating tokens.
5
+ * Import AFTER tokens.css and tailwindcss.
6
+ */
7
+
8
+ @theme {
9
+ /* Container */
10
+ --container-center: true;
11
+ --container-padding-x: 2rem;
12
+ --container-2xl: 1400px;
13
+
14
+ /* ── Typography: golden-ratio scale (√φ ≈ 1.272) ── */
15
+ --font-size-2xs: var(--type-micro);
16
+ --font-size-xs: var(--type-caption);
17
+ --font-size-sm: var(--type-small);
18
+ --font-size-base: var(--type-body);
19
+ --font-size-lg: var(--type-prose);
20
+ --font-size-xl: var(--type-subheading);
21
+ --font-size-2xl: var(--type-heading);
22
+ --font-size-3xl: var(--type-title);
23
+ --font-size-4xl: var(--type-display-1);
24
+ --font-size-5xl: var(--type-display-2);
25
+ --font-size-6xl: var(--type-display-3);
26
+
27
+ /* ── Font families (overridden by presets) ── */
28
+ --font-display: "Fraunces", Georgia, serif;
29
+ --font-serif: "Fraunces", Georgia, serif;
30
+ --font-sans: system-ui, -apple-system, sans-serif;
31
+ --font-mono: "Fira Code", "Fira Mono", monospace;
32
+
33
+ /* ── Colors: reference dynamic CSS vars so .dark overrides work ── */
34
+ --color-border: var(--border);
35
+ --color-input: var(--input);
36
+ --color-ring: var(--ring);
37
+ --color-background: var(--background);
38
+ --color-foreground: var(--foreground);
39
+
40
+ --color-primary: var(--primary);
41
+ --color-primary-foreground: var(--primary-foreground);
42
+
43
+ --color-secondary: var(--secondary);
44
+ --color-secondary-foreground: var(--secondary-foreground);
45
+
46
+ --color-muted: var(--muted);
47
+ --color-muted-foreground: var(--muted-foreground);
48
+
49
+ --color-accent: var(--accent);
50
+ --color-accent-foreground: var(--accent-foreground);
51
+
52
+ --color-destructive: var(--destructive);
53
+ --color-destructive-foreground: var(--destructive-foreground);
54
+
55
+ --color-popover: var(--popover);
56
+ --color-popover-foreground: var(--popover-foreground);
57
+
58
+ --color-card: var(--card);
59
+ --color-card-foreground: var(--card-foreground);
60
+
61
+ --color-shadow: var(--shadow);
62
+
63
+ --color-gold: var(--color-gold);
64
+ --color-gold-light: var(--color-gold-light);
65
+ --color-gold-dark: var(--color-gold-dark);
66
+
67
+ /* ── Z-index: map design tokens → Tailwind z-* utilities ── */
68
+ --z-index-background: var(--z-background);
69
+ --z-index-content: var(--z-content);
70
+ --z-index-controls: var(--z-controls);
71
+ --z-index-bar: var(--z-bar);
72
+ --z-index-dock: var(--z-dock);
73
+ --z-index-overlay: var(--z-overlay);
74
+ --z-index-hovercard: var(--z-hovercard);
75
+ --z-index-popover: var(--z-popover);
76
+ --z-index-modal: var(--z-modal);
77
+ --z-index-fullscreen: var(--z-fullscreen);
78
+ --z-index-toast: var(--z-toast);
79
+ --z-index-toggle: var(--z-toggle);
80
+ --z-index-max: var(--z-max);
81
+
82
+ /* ── Border radius ── */
83
+ --radius: 0.5rem;
84
+ --radius-sm: 4px;
85
+ --radius-md: 6px;
86
+ --radius-lg: var(--radius);
87
+ --radius-xl: 12px;
88
+ --radius-2xl: 1rem;
89
+ --radius-pill: 9999px;
90
+
91
+ /* Semantic radius */
92
+ --radius-card: var(--radius-card);
93
+ --radius-panel: var(--radius-panel);
94
+ --radius-dialog: var(--radius-dialog);
95
+ --radius-input: var(--radius-input);
96
+ --radius-button: var(--radius-button);
97
+ --radius-badge: var(--radius-badge);
98
+ --radius-dock: var(--radius-dock);
99
+
100
+ /* ── Box shadows: map tokens → Tailwind shadow-* utilities ── */
101
+ --shadow-card: var(--shadow-card);
102
+ --shadow-card-hover: var(--shadow-card-hover);
103
+ --shadow-dock: var(--shadow-dock);
104
+ --shadow-dock-collapsed: var(--shadow-dock-collapsed);
105
+ --shadow-glass-subtle: var(--glass-shadow-subtle);
106
+ --shadow-glass-default: var(--glass-shadow-default);
107
+ --shadow-glass-medium: var(--glass-shadow-medium);
108
+ --shadow-glass-elevated: var(--glass-shadow-elevated);
109
+ --shadow-cartoon-sm: var(--shadow-cartoon-sm);
110
+ --shadow-cartoon-md: var(--shadow-cartoon-md);
111
+ --shadow-cartoon-lg: var(--shadow-cartoon-lg);
112
+
113
+ /* ── Backdrop blur: glass tokens use full backdrop-filter values
114
+ (blur + saturate), so they can't map to Tailwind's backdrop-blur-*
115
+ utility directly. Use [backdrop-filter:var(--glass-blur-*)] instead. ── */
116
+
117
+ /* ── Easing: spring curves → ease-spring-* utilities ── */
118
+ --transition-timing-function-spring-smooth: var(--spring-smooth);
119
+ --transition-timing-function-spring-snappy: var(--spring-snappy);
120
+ --transition-timing-function-spring-bouncy: var(--spring-bouncy);
121
+ --transition-timing-function-spring-gentle: var(--spring-gentle);
122
+
123
+ /* ── Easing: cubic-bezier → ease-* utilities ── */
124
+ --transition-timing-function-standard: var(--ease-standard);
125
+ --transition-timing-function-out: var(--ease-out);
126
+ --transition-timing-function-in: var(--ease-in);
127
+ --transition-timing-function-out-expo: var(--ease-out-expo);
128
+
129
+ /* ── Duration: map tokens → Tailwind duration-* utilities ── */
130
+ --transition-duration-instant: var(--duration-instant);
131
+ --transition-duration-fast: var(--duration-fast);
132
+ --transition-duration-normal: var(--duration-normal);
133
+ --transition-duration-slow: var(--duration-slow);
134
+ --transition-duration-panel: var(--duration-panel);
135
+ }
136
+
137
+ /* Class-based dark mode */
138
+ @variant dark (&:where(.dark, .dark *));
@@ -0,0 +1,333 @@
1
+ /*
2
+ * tokens.css — Unified design tokens for @mkbabb/glass-ui
3
+ *
4
+ * Shared structural tokens used by all consumer projects.
5
+ * Project-specific colors/fonts are overridden in each consumer's local CSS.
6
+ */
7
+
8
+ :root {
9
+ /* ═══════════════════════════════════════════════
10
+ §1 DURATION
11
+ ═══════════════════════════════════════════════ */
12
+ --duration-instant: 0.1s;
13
+ --duration-fast: 0.2s;
14
+ --duration-normal: 0.3s;
15
+ --duration-slow: 0.45s;
16
+ --duration-panel: 0.55s;
17
+ --duration-xl: 1s;
18
+ --duration-xxl: 1.5s;
19
+ --duration-linger: 2.5s;
20
+
21
+ /* ═══════════════════════════════════════════════
22
+ §2 EASING — Spring curves via linear()
23
+ ═══════════════════════════════════════════════
24
+
25
+ Generated from damped spring physics:
26
+ x(t) = 1 - e^(-ζωt)(cos(ωd·t) + (ζ/√(1-ζ²))sin(ωd·t))
27
+
28
+ smooth: ζ=1.0 — critically damped, no overshoot
29
+ snappy: ζ=0.65 — 7% overshoot, quick settle
30
+ bouncy: ζ=0.45 — 20% overshoot, visible bounce-settle
31
+ gentle: ζ=0.85 — barely perceptible overshoot, slow ease
32
+ */
33
+
34
+ /* Spring curves (primary — use for entrances) */
35
+ --spring-smooth: linear(0, 0.0974, 0.2816, 0.4656, 0.6189, 0.7361, 0.821, 0.8806, 0.9213, 0.9487, 0.9668, 0.9787, 0.9864, 0.9914, 0.9945, 0.9966, 0.9978, 0.9987, 0.9992, 0.9995, 0.9997, 0.9998, 0.9999, 0.9999, 1);
36
+ --spring-snappy: linear(0, 0.0727, 0.2386, 0.4363, 0.6262, 0.7861, 0.9075, 0.9902, 1.0395, 1.0628, 1.068, 1.0619, 1.0501, 1.0366, 1.0239, 1.0133, 1.0054, 1.0001, 0.997, 0.9956, 0.9954, 0.9959, 0.9967, 0.9976, 0.9985, 0.9992, 0.9997, 1, 1.0002, 1.0003, 1.0003);
37
+ --spring-bouncy: linear(0, 0.0492, 0.1748, 0.3455, 0.5335, 0.7169, 0.8796, 1.0117, 1.1087, 1.1706, 1.2005, 1.2039, 1.1874, 1.1575, 1.1206, 1.0818, 1.0454, 1.0141, 0.9895, 0.9723, 0.962, 0.958, 0.959, 0.9635, 0.9703, 0.9781, 0.986, 0.9931, 0.9991, 1.0036, 1.0066, 1.0082, 1.0087, 1.0082, 1.007, 1.0055, 1.0039, 1.0023, 1.0009);
38
+ --spring-gentle: linear(0, 0.1018, 0.3031, 0.5094, 0.6812, 0.8083, 0.8945, 0.9486, 0.98, 0.9964, 1.0038, 1.0061, 1.006, 1.0049, 1.0036, 1.0024, 1.0015, 1.0008, 1.0004, 1.0002, 1.0001, 1, 1, 1, 1);
39
+
40
+ /* Core cubic-bezier (for exits, fallback, non-spring uses) */
41
+ --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
42
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
43
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
44
+ --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
45
+
46
+ /* ═══════════════════════════════════════════════
47
+ §3 Z-INDEX SCALE
48
+ ═══════════════════════════════════════════════ */
49
+ --z-background: 0;
50
+ --z-content: 10;
51
+ --z-controls: 20;
52
+ --z-bar: 30;
53
+ --z-dock: 40;
54
+ --z-overlay: 50;
55
+ --z-hovercard: 60;
56
+ --z-popover: 70;
57
+ --z-modal: 80;
58
+ --z-fullscreen: 90;
59
+ --z-toast: 100;
60
+ --z-toggle: 999;
61
+ --z-max: 9999;
62
+ --z-debug: 99999;
63
+
64
+ /* ═══════════════════════════════════════════════
65
+ §4 BORDER RADIUS
66
+ ═══════════════════════════════════════════════ */
67
+ --radius: 0.5rem;
68
+ --radius-sm: 4px;
69
+ --radius-md: 6px;
70
+ --radius-lg: var(--radius);
71
+ --radius-xl: 12px;
72
+ --radius-2xl: 1rem;
73
+ --radius-pill: 9999px;
74
+
75
+ /* Semantic aliases */
76
+ --radius-card: var(--radius-2xl);
77
+ --radius-panel: var(--radius-xl);
78
+ --radius-dialog: var(--radius-2xl);
79
+ --radius-input: var(--radius);
80
+ --radius-button: var(--radius);
81
+ --radius-badge: var(--radius-pill);
82
+ --radius-dock: var(--radius-pill);
83
+
84
+ /* ═══════════════════════════════════════════════
85
+ §5 BOX SHADOWS
86
+ Projects define --shadow-color in their preset.
87
+ ═══════════════════════════════════════════════ */
88
+ --shadow-color: hsl(0 0% 0%);
89
+
90
+ /* Elevation scale */
91
+ --shadow-xs: 0 1px 3px color-mix(in srgb, var(--shadow-color) 4%, transparent),
92
+ 0 1px 2px color-mix(in srgb, var(--shadow-color) 6%, transparent);
93
+ --shadow-sm: 0 2px 8px color-mix(in srgb, var(--shadow-color) 6%, transparent);
94
+ --shadow-md: 0 4px 16px color-mix(in srgb, var(--shadow-color) 8%, transparent);
95
+ --shadow-lg: 0 4px 20px color-mix(in srgb, var(--shadow-color) 12%, transparent);
96
+ --shadow-xl: 0 8px 24px color-mix(in srgb, var(--shadow-color) 14%, transparent);
97
+ --shadow-2xl: 0 25px 50px -12px color-mix(in srgb, var(--shadow-color) 25%, transparent);
98
+
99
+ /* Cartoon / offset shadows */
100
+ --shadow-cartoon-sm: -3px 2px 1px color-mix(in srgb, var(--shadow-color) 10%, transparent),
101
+ 0 3px 1px color-mix(in srgb, var(--shadow-color) 10%, transparent),
102
+ -3px 3px 1px color-mix(in srgb, var(--shadow-color) 6%, transparent);
103
+ --shadow-cartoon-md: -4px 3px 1px color-mix(in srgb, var(--shadow-color) 12%, transparent),
104
+ 0 4px 1px color-mix(in srgb, var(--shadow-color) 12%, transparent),
105
+ -4px 4px 2px color-mix(in srgb, var(--shadow-color) 8%, transparent);
106
+ --shadow-cartoon-lg: -6px 4px 1px color-mix(in srgb, var(--shadow-color) 12%, transparent),
107
+ 0 6px 1px color-mix(in srgb, var(--shadow-color) 12%, transparent),
108
+ -6px 6px 2px color-mix(in srgb, var(--shadow-color) 8%, transparent);
109
+
110
+ /* Card offset shadow */
111
+ --shadow-card: 4px 4px 0px 0px color-mix(in srgb, var(--shadow-color) 50%, transparent);
112
+ --shadow-card-hover: 5px 5px 0px 0px color-mix(in srgb, var(--shadow-color) 60%, transparent);
113
+
114
+ /* Dock shadows */
115
+ --shadow-dock: 0 4px 20px color-mix(in srgb, var(--shadow-color) 25%, transparent), 0 0 0 1px color-mix(in srgb, var(--shadow-color) 15%, transparent);
116
+ --shadow-dock-collapsed: 0 2px 12px color-mix(in srgb, var(--shadow-color) 20%, transparent), 0 0 0 1px color-mix(in srgb, var(--shadow-color) 15%, transparent);
117
+
118
+ /* Cartoon shadow colors */
119
+ --shadow-cartoon-color: rgb(0 0 0 / 0.12);
120
+ --shadow-cartoon-color-soft: rgb(0 0 0 / 0.06);
121
+ --shadow-cartoon-color-hover: rgb(0 0 0 / 0.16);
122
+ --shadow-cartoon-color-hover-soft: rgb(0 0 0 / 0.08);
123
+
124
+ /* ═══════════════════════════════════════════════
125
+ §6 GLASSMORPHISM — Four-tier surface system
126
+ subtle → lightest (dock bg, input bg, hover overlays)
127
+ default → standard (cards, content containers, select triggers)
128
+ medium → heavier (popovers, dropdowns, floating panels)
129
+ elevated → heaviest (dialogs, command palette, modal overlays)
130
+ ═══════════════════════════════════════════════ */
131
+
132
+ /* Opacity primitives */
133
+ --glass-opacity-subtle: 0.30;
134
+ --glass-opacity-default: 0.50;
135
+ --glass-opacity-medium: 0.65;
136
+ --glass-opacity-elevated: 0.80;
137
+
138
+ /* Blur primitives */
139
+ --glass-blur-subtle: blur(4px) saturate(1.05);
140
+ --glass-blur-default: blur(8px) saturate(1.2);
141
+ --glass-blur-medium: blur(12px) saturate(1.3);
142
+ --glass-blur-elevated: blur(16px) saturate(1.4);
143
+
144
+ /* Composed backgrounds */
145
+ --glass-bg-subtle: color-mix(in srgb, var(--card) calc(var(--glass-opacity-subtle) * 100%), transparent);
146
+ --glass-bg-default: color-mix(in srgb, var(--card) calc(var(--glass-opacity-default) * 100%), transparent);
147
+ --glass-bg-medium: color-mix(in srgb, var(--card) calc(var(--glass-opacity-medium) * 100%), transparent);
148
+ --glass-bg-elevated: color-mix(in srgb, var(--card) calc(var(--glass-opacity-elevated) * 100%), transparent);
149
+
150
+ /* Composed borders — foreground-tinted for Apple-like luminosity */
151
+ --glass-border-subtle: color-mix(in srgb, var(--foreground) 8%, transparent);
152
+ --glass-border-default: color-mix(in srgb, var(--foreground) 10%, transparent);
153
+ --glass-border-medium: color-mix(in srgb, var(--foreground) 12%, transparent);
154
+ --glass-border-elevated: color-mix(in srgb, var(--foreground) 15%, transparent);
155
+
156
+ /* Shadow per tier */
157
+ --glass-shadow-subtle: var(--shadow-sm);
158
+ --glass-shadow-default: var(--shadow-md);
159
+ --glass-shadow-medium: var(--shadow-lg);
160
+ --glass-shadow-elevated: var(--shadow-xl),
161
+ 0 0 0 0.5px color-mix(in srgb, var(--shadow-color) 5%, transparent);
162
+
163
+ /* Shared decorative */
164
+ --glass-grain-opacity: 0.035;
165
+ --glass-highlight: inset 0 0.5px 0 0 hsl(0 0% 100% / 0.25);
166
+
167
+ /* ═══════════════════════════════════════════════
168
+ §7 ANIMATION OFFSETS
169
+ ═══════════════════════════════════════════════ */
170
+ --animation-slide-sm: 3px;
171
+ --animation-slide-md: 6px;
172
+ --animation-slide-lg: 8px;
173
+ --popover-offset: 0.375rem;
174
+
175
+ /* ═══════════════════════════════════════════════
176
+ §7b HOVER LIFT OFFSETS
177
+ ═══════════════════════════════════════════════ */
178
+ --lift-sm: -1px;
179
+ --lift-md: -2px;
180
+ --lift-lg: -4px;
181
+
182
+ /* ═══════════════════════════════════════════════
183
+ §7c LAYOUT TOKENS
184
+ ═══════════════════════════════════════════════ */
185
+ --mask-fade-width: 1rem;
186
+ --max-width-input: 24rem;
187
+ --paper-texture-size: 200px 200px;
188
+
189
+ /* ═══════════════════════════════════════════════
190
+ §7d BORDER OPACITY SCALE
191
+ ═══════════════════════════════════════════════ */
192
+ --border-opacity-light: 0.15;
193
+ --border-opacity-medium: 0.25;
194
+ --border-opacity-strong: 0.6;
195
+
196
+ /* ═══════════════════════════════════════════════
197
+ §8 SIZING
198
+ ═══════════════════════════════════════════════ */
199
+ --size-icon-btn: 2.5rem;
200
+
201
+ /* Dock geometry — consumers may override locally */
202
+ --dock-h: calc(var(--size-icon-btn) + 0.75rem + 3px);
203
+ --dock-margin: 0.5rem;
204
+ --dock-menubar-reserve: 4rem;
205
+
206
+ /* ═══════════════════════════════════════════════
207
+ §8b COMPONENT FONT OVERRIDES
208
+ Consumers override these locally.
209
+ ═══════════════════════════════════════════════ */
210
+ --select-font: inherit;
211
+
212
+ /* ═══════════════════════════════════════════════
213
+ §9 INTERACTIVE SCALE TRANSFORMS
214
+ ═══════════════════════════════════════════════ */
215
+ --scale-hover: 1.08;
216
+ --scale-hover-dock: 1.1;
217
+ --scale-press: 0.95;
218
+ --scale-press-dock: 0.92;
219
+ --scale-press-btn: 0.97;
220
+
221
+ /* ═══════════════════════════════════════════════
222
+ §10 FOCUS RING
223
+ ═══════════════════════════════════════════════ */
224
+ --focus-ring-width: 2px;
225
+ --focus-ring-shadow: 0 0 0 var(--focus-ring-width) color-mix(in srgb, var(--ring) 30%, transparent),
226
+ 0 0 8px color-mix(in srgb, var(--ring) 15%, transparent);
227
+
228
+ /* ═══════════════════════════════════════════════
229
+ §11 PAPER TEXTURES
230
+ ═══════════════════════════════════════════════ */
231
+ --paper-clean-texture: url("data:image/svg+xml,%3Csvg width='200' height='200' viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
232
+ --paper-aged-texture: url("data:image/svg+xml,%3Csvg width='200' height='200' viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.5' numOctaves='5' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.06'/%3E%3C/svg%3E");
233
+
234
+ /* ═══════════════════════════════════════════════
235
+ §9 DEFAULT COLOR PALETTE (consumers override locally)
236
+ ═══════════════════════════════════════════════ */
237
+ --background: hsl(0 0% 100%);
238
+ --foreground: hsl(222.2 84% 4.9%);
239
+ --muted: hsl(210 40% 96.1%);
240
+ --muted-foreground: hsl(215.4 16.3% 46.9%);
241
+ --popover: hsl(0 0% 100%);
242
+ --popover-foreground: hsl(222.2 84% 4.9%);
243
+ --card: hsl(0 0% 100%);
244
+ --card-foreground: hsl(222.2 84% 4.9%);
245
+ --border: hsl(214.3 31.8% 91.4%);
246
+ --input: hsl(214.3 31.8% 91.4%);
247
+ --primary: hsl(222.2 47.4% 11.2%);
248
+ --primary-foreground: hsl(210 40% 98%);
249
+ --secondary: hsl(210 40% 96.1%);
250
+ --secondary-foreground: hsl(222.2 47.4% 11.2%);
251
+ --accent: hsl(210 40% 96.1%);
252
+ --accent-foreground: hsl(222.2 47.4% 11.2%);
253
+ --destructive: hsl(0 84.2% 60.2%);
254
+ --destructive-foreground: hsl(210 40% 98%);
255
+ --ring: hsl(222.2 84% 4.9%);
256
+ --shadow: hsl(0 0% 65%);
257
+
258
+ /* ═══════════════════════════════════════════════
259
+ §12 GOLD PALETTE
260
+ ═══════════════════════════════════════════════ */
261
+ --color-gold: hsl(43 74% 49%);
262
+ --color-gold-light: hsl(51 100% 50%);
263
+ --color-gold-dark: hsl(34 87% 38%);
264
+
265
+ /* ═══════════════════════════════════════════════
266
+ §13 RAINBOW PALETTE
267
+ ═══════════════════════════════════════════════ */
268
+
269
+ /* Rainbow vivid */
270
+ --rainbow-red: hsl(0 85% 60%);
271
+ --rainbow-orange: hsl(30 90% 55%);
272
+ --rainbow-yellow: hsl(55 90% 55%);
273
+ --rainbow-green: hsl(130 70% 50%);
274
+ --rainbow-blue: hsl(210 80% 55%);
275
+ --rainbow-indigo: hsl(260 70% 60%);
276
+ --rainbow-violet: hsl(300 75% 60%);
277
+
278
+ /* Rainbow pastel */
279
+ --rainbow-pastel-red: hsl(0 50% 78%);
280
+ --rainbow-pastel-orange: hsl(25 55% 76%);
281
+ --rainbow-pastel-yellow: hsl(50 55% 78%);
282
+ --rainbow-pastel-green: hsl(130 35% 74%);
283
+ --rainbow-pastel-blue: hsl(220 45% 76%);
284
+ --rainbow-pastel-indigo: hsl(260 35% 76%);
285
+ --rainbow-pastel-violet: hsl(280 40% 78%);
286
+ }
287
+
288
+ /* ═══════════════════════════════════════════════
289
+ §10 DEFAULT DARK MODE (consumers override locally)
290
+ ═══════════════════════════════════════════════ */
291
+ .dark {
292
+ /* Glass opacity boosted for dark backgrounds */
293
+ --glass-opacity-subtle: 0.42;
294
+ --glass-opacity-default: 0.58;
295
+ --glass-opacity-medium: 0.72;
296
+ --glass-opacity-elevated: 0.88;
297
+
298
+ --glass-grain-opacity: 0.06;
299
+ --glass-highlight: inset 0 0.5px 0 0 hsl(0 0% 100% / 0.08);
300
+
301
+ --background: hsl(224 71% 4%);
302
+ --foreground: hsl(210 40% 98%);
303
+ --muted: hsl(217.2 32.6% 17.5%);
304
+ --muted-foreground: hsl(215 20.2% 65.1%);
305
+ --popover: hsl(224 71% 4%);
306
+ --popover-foreground: hsl(210 40% 98%);
307
+ --card: hsl(224 50% 10%);
308
+ --card-foreground: hsl(210 40% 98%);
309
+ --border: hsl(216 34% 17%);
310
+ --input: hsl(216 34% 17%);
311
+ --primary: hsl(210 40% 98%);
312
+ --primary-foreground: hsl(222.2 47.4% 11.2%);
313
+ --secondary: hsl(217.2 32.6% 17.5%);
314
+ --secondary-foreground: hsl(210 40% 98%);
315
+ --accent: hsl(217.2 32.6% 17.5%);
316
+ --accent-foreground: hsl(210 40% 98%);
317
+ --destructive: hsl(0 72% 50%);
318
+ --destructive-foreground: hsl(210 40% 98%);
319
+ --ring: hsl(212.7 26.8% 83.9%);
320
+ --shadow: hsl(0 0% 10%);
321
+ --shadow-card: 4px 4px 0px 0px color-mix(in srgb, var(--shadow-color) 85%, transparent);
322
+ --shadow-card-hover: 5px 5px 0px 0px color-mix(in srgb, var(--shadow-color) 95%, transparent);
323
+
324
+ --shadow-cartoon-color: rgb(255 255 255 / 0.07);
325
+ --shadow-cartoon-color-soft: rgb(255 255 255 / 0.03);
326
+ --shadow-cartoon-color-hover: rgb(255 255 255 / 0.10);
327
+ --shadow-cartoon-color-hover-soft: rgb(255 255 255 / 0.05);
328
+
329
+ /* Gold — boosted for dark backgrounds */
330
+ --color-gold: hsl(43 74% 55%);
331
+ --color-gold-light: hsl(51 100% 55%);
332
+ --color-gold-dark: hsl(34 87% 45%);
333
+ }