astro-component-kit 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +262 -0
  3. package/dist/AnimatedInput.astro +82 -0
  4. package/dist/Badge.astro +52 -0
  5. package/dist/GlassButton.astro +87 -0
  6. package/dist/GlassCard.astro +72 -0
  7. package/dist/GlassNavbar.astro +65 -0
  8. package/dist/GlowButton.astro +60 -0
  9. package/dist/buttons/3dPushButton.astro +136 -0
  10. package/dist/buttons/AnimatedIconButton.astro +146 -0
  11. package/dist/buttons/BorderDrawButton.astro +112 -0
  12. package/dist/buttons/CyberpunkButton.astro +148 -0
  13. package/dist/buttons/DoubleBorderButton.astro +131 -0
  14. package/dist/buttons/GhostOutlineButton.astro +109 -0
  15. package/dist/buttons/GlassButton.astro +165 -0
  16. package/dist/buttons/GlowButton.astro +119 -0
  17. package/dist/buttons/LiquidButton.astro +167 -0
  18. package/dist/buttons/LoadingButton.astro +148 -0
  19. package/dist/buttons/MagneticButton.astro +134 -0
  20. package/dist/buttons/MinimalPillButton.astro +102 -0
  21. package/dist/buttons/NeumorphicButton.astro +158 -0
  22. package/dist/buttons/PulseButton.astro +111 -0
  23. package/dist/buttons/RetroArcadeButton.astro +105 -0
  24. package/dist/buttons/RetroShadowButton.astro +82 -0
  25. package/dist/buttons/ShimmerButton.astro +113 -0
  26. package/dist/buttons/ShinyButton.astro +121 -0
  27. package/dist/buttons/TiltGlowButton.astro +145 -0
  28. package/dist/buttons/index.mjs +19 -0
  29. package/dist/buttons/index.ts +19 -0
  30. package/dist/cards/BlogHorizontalCard.astro +18 -0
  31. package/dist/cards/CyberFeatureCard.astro +12 -0
  32. package/dist/cards/EcommerceProductCard.astro +24 -0
  33. package/dist/cards/GlassCard.astro +17 -0
  34. package/dist/cards/GlassEventCard.astro +19 -0
  35. package/dist/cards/GlowPortfolioCard.astro +16 -0
  36. package/dist/cards/InteractiveTiltCard.astro +25 -0
  37. package/dist/cards/KanbanItemCard.astro +15 -0
  38. package/dist/cards/MinimalLinkCard.astro +12 -0
  39. package/dist/cards/MusicPlayerMini.astro +21 -0
  40. package/dist/cards/NeumorphicCard.astro +6 -0
  41. package/dist/cards/NotificationCard.astro +15 -0
  42. package/dist/cards/PricingCard.astro +17 -0
  43. package/dist/cards/ProfileCard.astro +17 -0
  44. package/dist/cards/RetroGameCard.astro +15 -0
  45. package/dist/cards/StatCard.astro +15 -0
  46. package/dist/cards/TaskKanbanCard.astro +18 -0
  47. package/dist/cards/TestimonialCardClean.astro +20 -0
  48. package/dist/cards/WeatherWidgetCard.astro +17 -0
  49. package/dist/cards/index.mjs +19 -0
  50. package/dist/cards/index.ts +19 -0
  51. package/dist/data/AccordionGroupGlass.astro +21 -0
  52. package/dist/data/AvatarGroupStack.astro +15 -0
  53. package/dist/data/CalendarGridView.astro +18 -0
  54. package/dist/data/DataChipsGroup.astro +16 -0
  55. package/dist/data/DescriptionListHoriz.astro +14 -0
  56. package/dist/data/FileTreeView.astro +22 -0
  57. package/dist/data/GanttChartMinimal.astro +12 -0
  58. package/dist/data/GlassTable.astro +23 -0
  59. package/dist/data/KeyValuePillGroup.astro +12 -0
  60. package/dist/data/PriceCompareTable.astro +22 -0
  61. package/dist/data/ProgressListSmall.astro +17 -0
  62. package/dist/data/RatingBreakdownBar.astro +13 -0
  63. package/dist/data/SparklineStatCard.astro +16 -0
  64. package/dist/data/StatsGridDashboard.astro +16 -0
  65. package/dist/data/StepperDataVertical.astro +15 -0
  66. package/dist/data/TagCloudData.astro +14 -0
  67. package/dist/data/TimelineHorizSteps.astro +18 -0
  68. package/dist/data/TreeItemInteractive.astro +18 -0
  69. package/dist/data/UserDirectoryItem.astro +15 -0
  70. package/dist/data/VerticalTimeline.astro +21 -0
  71. package/dist/data/index.mjs +20 -0
  72. package/dist/data/index.ts +20 -0
  73. package/dist/feedback/AnimatedCheckmark.astro +13 -0
  74. package/dist/feedback/Badge.astro +19 -0
  75. package/dist/feedback/CircleProgress.astro +22 -0
  76. package/dist/feedback/ConfettiFeedback.astro +18 -0
  77. package/dist/feedback/CyberGlitchAlert.astro +11 -0
  78. package/dist/feedback/EmptyStateCard.astro +13 -0
  79. package/dist/feedback/GlassAlert.astro +20 -0
  80. package/dist/feedback/GlassModal.astro +19 -0
  81. package/dist/feedback/GlassProgress.astro +10 -0
  82. package/dist/feedback/IndicatorBadgeMinimal.astro +10 -0
  83. package/dist/feedback/NeonSpinner.astro +7 -0
  84. package/dist/feedback/PulseDot.astro +12 -0
  85. package/dist/feedback/RatingPill.astro +13 -0
  86. package/dist/feedback/ShakeErrorGroup.astro +7 -0
  87. package/dist/feedback/SimpleTooltip.astro +10 -0
  88. package/dist/feedback/SkeletonList.astro +20 -0
  89. package/dist/feedback/Spotlight.astro +9 -0
  90. package/dist/feedback/StepProgress.astro +14 -0
  91. package/dist/feedback/ToastNotif.astro +11 -0
  92. package/dist/feedback/TypingIndicator.astro +12 -0
  93. package/dist/feedback/index.mjs +20 -0
  94. package/dist/feedback/index.ts +20 -0
  95. package/dist/forms/AnimatedInput.astro +16 -0
  96. package/dist/forms/ChipInput.astro +13 -0
  97. package/dist/forms/ColorPickerInput.astro +13 -0
  98. package/dist/forms/CurrencyInput.astro +11 -0
  99. package/dist/forms/CustomRadioGroup.astro +13 -0
  100. package/dist/forms/CyberpunkCheckbox.astro +15 -0
  101. package/dist/forms/DragDropUpload.astro +12 -0
  102. package/dist/forms/ErrorInput.astro +11 -0
  103. package/dist/forms/FloatingPassword.astro +20 -0
  104. package/dist/forms/FormGroupVertical.astro +14 -0
  105. package/dist/forms/GlassSlider.astro +7 -0
  106. package/dist/forms/GlassTextarea.astro +14 -0
  107. package/dist/forms/ModernSelect.astro +16 -0
  108. package/dist/forms/NeumorphicSwitch.astro +55 -0
  109. package/dist/forms/OTPInput.astro +22 -0
  110. package/dist/forms/RatingStars.astro +15 -0
  111. package/dist/forms/SearchReveal.astro +13 -0
  112. package/dist/forms/SegmentedControl.astro +13 -0
  113. package/dist/forms/SimpleFileInput.astro +11 -0
  114. package/dist/forms/StepperInput.astro +14 -0
  115. package/dist/forms/index.mjs +20 -0
  116. package/dist/forms/index.ts +20 -0
  117. package/dist/index.js +1 -0
  118. package/dist/index.mjs +1 -0
  119. package/dist/layout/BentoGrid3.astro +14 -0
  120. package/dist/layout/CenterFixedBox.astro +6 -0
  121. package/dist/layout/CenteredContainer.astro +8 -0
  122. package/dist/layout/ClusterHorizontal.astro +6 -0
  123. package/dist/layout/FeatureHero.astro +17 -0
  124. package/dist/layout/FooterCenteredMinimal.astro +11 -0
  125. package/dist/layout/FullBleedSection.astro +6 -0
  126. package/dist/layout/GalleryGrid4.astro +7 -0
  127. package/dist/layout/GlassCardGrid.astro +6 -0
  128. package/dist/layout/GlassSectionHeader.astro +15 -0
  129. package/dist/layout/LandingSectionSplit.astro +13 -0
  130. package/dist/layout/MasonryGrid.astro +7 -0
  131. package/dist/layout/MinimalFooterGrid.astro +20 -0
  132. package/dist/layout/ScrollSnapSection.astro +7 -0
  133. package/dist/layout/SectionDividerText.astro +7 -0
  134. package/dist/layout/SidebarLayoutWrapper.astro +11 -0
  135. package/dist/layout/SplitScreenLayout.astro +11 -0
  136. package/dist/layout/StepLayoutVertical.astro +21 -0
  137. package/dist/layout/StickySidebarWrapper.astro +10 -0
  138. package/dist/layout/VerticalStack.astro +8 -0
  139. package/dist/layout/index.mjs +20 -0
  140. package/dist/layout/index.ts +20 -0
  141. package/dist/navigation/AnchorSideNav.astro +13 -0
  142. package/dist/navigation/BottomNavMobile.astro +13 -0
  143. package/dist/navigation/BreadcrumbsMinimal.astro +16 -0
  144. package/dist/navigation/BurgerMorphIcon.astro +12 -0
  145. package/dist/navigation/CommandPaletteUI.astro +17 -0
  146. package/dist/navigation/DotNavigationSlider.astro +13 -0
  147. package/dist/navigation/FloatingTabBar.astro +12 -0
  148. package/dist/navigation/GlassNavbar.astro +19 -0
  149. package/dist/navigation/LangSwitcherPill.astro +17 -0
  150. package/dist/navigation/MegaMenuGlass.astro +25 -0
  151. package/dist/navigation/MinimalSidebar.astro +18 -0
  152. package/dist/navigation/PaginationGlass.astro +20 -0
  153. package/dist/navigation/PaginationInfiniteUI.astro +11 -0
  154. package/dist/navigation/RadialIconMenu.astro +15 -0
  155. package/dist/navigation/RetroArcadeMenu.astro +12 -0
  156. package/dist/navigation/ScrollProgressTop.astro +15 -0
  157. package/dist/navigation/SimpleFooterGlass.astro +21 -0
  158. package/dist/navigation/TabUnderline.astro +14 -0
  159. package/dist/navigation/UserProfileNav.astro +21 -0
  160. package/dist/navigation/VerticalTabs.astro +14 -0
  161. package/dist/navigation/index.mjs +20 -0
  162. package/dist/navigation/index.ts +20 -0
  163. package/dist/overlays/AgeVerificationOverlay.astro +20 -0
  164. package/dist/overlays/BackdropBlurMask.astro +6 -0
  165. package/dist/overlays/BottomSheetMobile.astro +16 -0
  166. package/dist/overlays/CommandDialog.astro +19 -0
  167. package/dist/overlays/ContextMenuOverlay.astro +17 -0
  168. package/dist/overlays/CookieBannerGlass.astro +14 -0
  169. package/dist/overlays/ExitIntentOverlay.astro +19 -0
  170. package/dist/overlays/FloatingTrayActions.astro +13 -0
  171. package/dist/overlays/HelpBubbleOverlay.astro +11 -0
  172. package/dist/overlays/LightboxOverlay.astro +13 -0
  173. package/dist/overlays/LoadingOverlayFull.astro +10 -0
  174. package/dist/overlays/MobileNavOverlay.astro +18 -0
  175. package/dist/overlays/OverlayModal.astro +24 -0
  176. package/dist/overlays/PopoverMenuGlass.astro +17 -0
  177. package/dist/overlays/SearchOverlayFullscreen.astro +15 -0
  178. package/dist/overlays/SideDrawerRight.astro +16 -0
  179. package/dist/overlays/SplashIntroOverlay.astro +11 -0
  180. package/dist/overlays/SpotlightIndicator.astro +6 -0
  181. package/dist/overlays/ToastStackOverlay.astro +12 -0
  182. package/dist/overlays/TooltipActionTray.astro +14 -0
  183. package/dist/overlays/index.mjs +20 -0
  184. package/dist/overlays/index.ts +20 -0
  185. package/dist/styles/global.css +142 -0
  186. package/dist/typography/AnimatedUnderlineLink.astro +10 -0
  187. package/dist/typography/BackgroundClipMask.astro +7 -0
  188. package/dist/typography/CodeInlineGlass.astro +6 -0
  189. package/dist/typography/CyberpunkGlitchText.astro +20 -0
  190. package/dist/typography/DropCapParagraph.astro +7 -0
  191. package/dist/typography/FadedVerticalText.astro +6 -0
  192. package/dist/typography/FloatingTextLabel.astro +10 -0
  193. package/dist/typography/GlassBlockQuote.astro +13 -0
  194. package/dist/typography/GlassTextReveal.astro +7 -0
  195. package/dist/typography/GradientHeading.astro +9 -0
  196. package/dist/typography/GradientUnderlineLink.astro +7 -0
  197. package/dist/typography/KbdIndicator.astro +6 -0
  198. package/dist/typography/LetterSpacingWide.astro +6 -0
  199. package/dist/typography/MinimalListMarkers.astro +10 -0
  200. package/dist/typography/MonospaceStatLine.astro +6 -0
  201. package/dist/typography/NeonTextHighlight.astro +6 -0
  202. package/dist/typography/ShadowRevealText.astro +7 -0
  203. package/dist/typography/StrokeHeadingOutline.astro +8 -0
  204. package/dist/typography/Text3DLayer.astro +7 -0
  205. package/dist/typography/TypewriterText.astro +15 -0
  206. package/dist/typography/index.mjs +20 -0
  207. package/dist/typography/index.ts +20 -0
  208. package/dist/utilities/AspectRatioBox.astro +11 -0
  209. package/dist/utilities/BackgroundDotPattern.astro +6 -0
  210. package/dist/utilities/CircularMask.astro +7 -0
  211. package/dist/utilities/ClickRippleWrapper.astro +7 -0
  212. package/dist/utilities/FadeInWrapper.astro +11 -0
  213. package/dist/utilities/FixedRatioImage.astro +7 -0
  214. package/dist/utilities/GlassBlurLayer.astro +6 -0
  215. package/dist/utilities/GradientBorderMask.astro +7 -0
  216. package/dist/utilities/HoverLift.astro +7 -0
  217. package/dist/utilities/ResponsiveSpacer.astro +15 -0
  218. package/dist/utilities/ResponsiveVisToggle.astro +11 -0
  219. package/dist/utilities/ScrollLockParent.astro +11 -0
  220. package/dist/utilities/ScrollMarginTarget.astro +10 -0
  221. package/dist/utilities/SlideUpReveal.astro +7 -0
  222. package/dist/utilities/SmoothAnchorLink.astro +22 -0
  223. package/dist/utilities/StackLayering.astro +12 -0
  224. package/dist/utilities/StickyObserver.astro +8 -0
  225. package/dist/utilities/TextTruncate.astro +10 -0
  226. package/dist/utilities/TruncateSingleLine.astro +6 -0
  227. package/dist/utilities/VisuallyHidden.astro +6 -0
  228. package/dist/utilities/index.mjs +20 -0
  229. package/dist/utilities/index.ts +20 -0
  230. package/package.json +108 -0
  231. package/src/components/lib/AnimatedInput.astro +82 -0
  232. package/src/components/lib/Badge.astro +52 -0
  233. package/src/components/lib/GlassButton.astro +87 -0
  234. package/src/components/lib/GlassCard.astro +72 -0
  235. package/src/components/lib/GlassNavbar.astro +65 -0
  236. package/src/components/lib/GlowButton.astro +60 -0
  237. package/src/components/lib/buttons/3dPushButton.astro +136 -0
  238. package/src/components/lib/buttons/AnimatedIconButton.astro +146 -0
  239. package/src/components/lib/buttons/BorderDrawButton.astro +112 -0
  240. package/src/components/lib/buttons/CyberpunkButton.astro +148 -0
  241. package/src/components/lib/buttons/DoubleBorderButton.astro +131 -0
  242. package/src/components/lib/buttons/GhostOutlineButton.astro +109 -0
  243. package/src/components/lib/buttons/GlassButton.astro +165 -0
  244. package/src/components/lib/buttons/GlowButton.astro +119 -0
  245. package/src/components/lib/buttons/LiquidButton.astro +167 -0
  246. package/src/components/lib/buttons/LoadingButton.astro +148 -0
  247. package/src/components/lib/buttons/MagneticButton.astro +134 -0
  248. package/src/components/lib/buttons/MinimalPillButton.astro +102 -0
  249. package/src/components/lib/buttons/NeumorphicButton.astro +158 -0
  250. package/src/components/lib/buttons/PulseButton.astro +111 -0
  251. package/src/components/lib/buttons/RetroArcadeButton.astro +105 -0
  252. package/src/components/lib/buttons/RetroShadowButton.astro +82 -0
  253. package/src/components/lib/buttons/ShimmerButton.astro +113 -0
  254. package/src/components/lib/buttons/ShinyButton.astro +121 -0
  255. package/src/components/lib/buttons/TiltGlowButton.astro +145 -0
  256. package/src/components/lib/buttons/index.ts +19 -0
  257. package/src/components/lib/cards/BlogHorizontalCard.astro +18 -0
  258. package/src/components/lib/cards/CyberFeatureCard.astro +12 -0
  259. package/src/components/lib/cards/EcommerceProductCard.astro +24 -0
  260. package/src/components/lib/cards/GlassCard.astro +17 -0
  261. package/src/components/lib/cards/GlassEventCard.astro +19 -0
  262. package/src/components/lib/cards/GlowPortfolioCard.astro +16 -0
  263. package/src/components/lib/cards/InteractiveTiltCard.astro +25 -0
  264. package/src/components/lib/cards/KanbanItemCard.astro +15 -0
  265. package/src/components/lib/cards/MinimalLinkCard.astro +12 -0
  266. package/src/components/lib/cards/MusicPlayerMini.astro +21 -0
  267. package/src/components/lib/cards/NeumorphicCard.astro +6 -0
  268. package/src/components/lib/cards/NotificationCard.astro +15 -0
  269. package/src/components/lib/cards/PricingCard.astro +17 -0
  270. package/src/components/lib/cards/ProfileCard.astro +17 -0
  271. package/src/components/lib/cards/RetroGameCard.astro +15 -0
  272. package/src/components/lib/cards/StatCard.astro +15 -0
  273. package/src/components/lib/cards/TaskKanbanCard.astro +18 -0
  274. package/src/components/lib/cards/TestimonialCardClean.astro +20 -0
  275. package/src/components/lib/cards/WeatherWidgetCard.astro +17 -0
  276. package/src/components/lib/cards/index.ts +19 -0
  277. package/src/components/lib/data/AccordionGroupGlass.astro +21 -0
  278. package/src/components/lib/data/AvatarGroupStack.astro +15 -0
  279. package/src/components/lib/data/CalendarGridView.astro +18 -0
  280. package/src/components/lib/data/DataChipsGroup.astro +16 -0
  281. package/src/components/lib/data/DescriptionListHoriz.astro +14 -0
  282. package/src/components/lib/data/FileTreeView.astro +22 -0
  283. package/src/components/lib/data/GanttChartMinimal.astro +12 -0
  284. package/src/components/lib/data/GlassTable.astro +23 -0
  285. package/src/components/lib/data/KeyValuePillGroup.astro +12 -0
  286. package/src/components/lib/data/PriceCompareTable.astro +22 -0
  287. package/src/components/lib/data/ProgressListSmall.astro +17 -0
  288. package/src/components/lib/data/RatingBreakdownBar.astro +13 -0
  289. package/src/components/lib/data/SparklineStatCard.astro +16 -0
  290. package/src/components/lib/data/StatsGridDashboard.astro +16 -0
  291. package/src/components/lib/data/StepperDataVertical.astro +15 -0
  292. package/src/components/lib/data/TagCloudData.astro +14 -0
  293. package/src/components/lib/data/TimelineHorizSteps.astro +18 -0
  294. package/src/components/lib/data/TreeItemInteractive.astro +18 -0
  295. package/src/components/lib/data/UserDirectoryItem.astro +15 -0
  296. package/src/components/lib/data/VerticalTimeline.astro +21 -0
  297. package/src/components/lib/data/index.ts +20 -0
  298. package/src/components/lib/feedback/AnimatedCheckmark.astro +13 -0
  299. package/src/components/lib/feedback/Badge.astro +19 -0
  300. package/src/components/lib/feedback/CircleProgress.astro +22 -0
  301. package/src/components/lib/feedback/ConfettiFeedback.astro +18 -0
  302. package/src/components/lib/feedback/CyberGlitchAlert.astro +11 -0
  303. package/src/components/lib/feedback/EmptyStateCard.astro +13 -0
  304. package/src/components/lib/feedback/GlassAlert.astro +20 -0
  305. package/src/components/lib/feedback/GlassModal.astro +19 -0
  306. package/src/components/lib/feedback/GlassProgress.astro +10 -0
  307. package/src/components/lib/feedback/IndicatorBadgeMinimal.astro +10 -0
  308. package/src/components/lib/feedback/NeonSpinner.astro +7 -0
  309. package/src/components/lib/feedback/PulseDot.astro +12 -0
  310. package/src/components/lib/feedback/RatingPill.astro +13 -0
  311. package/src/components/lib/feedback/ShakeErrorGroup.astro +7 -0
  312. package/src/components/lib/feedback/SimpleTooltip.astro +10 -0
  313. package/src/components/lib/feedback/SkeletonList.astro +20 -0
  314. package/src/components/lib/feedback/Spotlight.astro +9 -0
  315. package/src/components/lib/feedback/StepProgress.astro +14 -0
  316. package/src/components/lib/feedback/ToastNotif.astro +11 -0
  317. package/src/components/lib/feedback/TypingIndicator.astro +12 -0
  318. package/src/components/lib/feedback/index.ts +20 -0
  319. package/src/components/lib/forms/AnimatedInput.astro +16 -0
  320. package/src/components/lib/forms/ChipInput.astro +13 -0
  321. package/src/components/lib/forms/ColorPickerInput.astro +13 -0
  322. package/src/components/lib/forms/CurrencyInput.astro +11 -0
  323. package/src/components/lib/forms/CustomRadioGroup.astro +13 -0
  324. package/src/components/lib/forms/CyberpunkCheckbox.astro +15 -0
  325. package/src/components/lib/forms/DragDropUpload.astro +12 -0
  326. package/src/components/lib/forms/ErrorInput.astro +11 -0
  327. package/src/components/lib/forms/FloatingPassword.astro +20 -0
  328. package/src/components/lib/forms/FormGroupVertical.astro +14 -0
  329. package/src/components/lib/forms/GlassSlider.astro +7 -0
  330. package/src/components/lib/forms/GlassTextarea.astro +14 -0
  331. package/src/components/lib/forms/ModernSelect.astro +16 -0
  332. package/src/components/lib/forms/NeumorphicSwitch.astro +55 -0
  333. package/src/components/lib/forms/OTPInput.astro +22 -0
  334. package/src/components/lib/forms/RatingStars.astro +15 -0
  335. package/src/components/lib/forms/SearchReveal.astro +13 -0
  336. package/src/components/lib/forms/SegmentedControl.astro +13 -0
  337. package/src/components/lib/forms/SimpleFileInput.astro +11 -0
  338. package/src/components/lib/forms/StepperInput.astro +14 -0
  339. package/src/components/lib/forms/index.ts +20 -0
  340. package/src/components/lib/index.ts +6 -0
  341. package/src/components/lib/layout/BentoGrid3.astro +14 -0
  342. package/src/components/lib/layout/CenterFixedBox.astro +6 -0
  343. package/src/components/lib/layout/CenteredContainer.astro +8 -0
  344. package/src/components/lib/layout/ClusterHorizontal.astro +6 -0
  345. package/src/components/lib/layout/FeatureHero.astro +17 -0
  346. package/src/components/lib/layout/FooterCenteredMinimal.astro +11 -0
  347. package/src/components/lib/layout/FullBleedSection.astro +6 -0
  348. package/src/components/lib/layout/GalleryGrid4.astro +7 -0
  349. package/src/components/lib/layout/GlassCardGrid.astro +6 -0
  350. package/src/components/lib/layout/GlassSectionHeader.astro +15 -0
  351. package/src/components/lib/layout/LandingSectionSplit.astro +13 -0
  352. package/src/components/lib/layout/MasonryGrid.astro +7 -0
  353. package/src/components/lib/layout/MinimalFooterGrid.astro +20 -0
  354. package/src/components/lib/layout/ScrollSnapSection.astro +7 -0
  355. package/src/components/lib/layout/SectionDividerText.astro +7 -0
  356. package/src/components/lib/layout/SidebarLayoutWrapper.astro +11 -0
  357. package/src/components/lib/layout/SplitScreenLayout.astro +11 -0
  358. package/src/components/lib/layout/StepLayoutVertical.astro +21 -0
  359. package/src/components/lib/layout/StickySidebarWrapper.astro +10 -0
  360. package/src/components/lib/layout/VerticalStack.astro +8 -0
  361. package/src/components/lib/layout/index.ts +20 -0
  362. package/src/components/lib/navigation/AnchorSideNav.astro +13 -0
  363. package/src/components/lib/navigation/BottomNavMobile.astro +13 -0
  364. package/src/components/lib/navigation/BreadcrumbsMinimal.astro +16 -0
  365. package/src/components/lib/navigation/BurgerMorphIcon.astro +12 -0
  366. package/src/components/lib/navigation/CommandPaletteUI.astro +17 -0
  367. package/src/components/lib/navigation/DotNavigationSlider.astro +13 -0
  368. package/src/components/lib/navigation/FloatingTabBar.astro +12 -0
  369. package/src/components/lib/navigation/GlassNavbar.astro +19 -0
  370. package/src/components/lib/navigation/LangSwitcherPill.astro +17 -0
  371. package/src/components/lib/navigation/MegaMenuGlass.astro +25 -0
  372. package/src/components/lib/navigation/MinimalSidebar.astro +18 -0
  373. package/src/components/lib/navigation/PaginationGlass.astro +20 -0
  374. package/src/components/lib/navigation/PaginationInfiniteUI.astro +11 -0
  375. package/src/components/lib/navigation/RadialIconMenu.astro +15 -0
  376. package/src/components/lib/navigation/RetroArcadeMenu.astro +12 -0
  377. package/src/components/lib/navigation/ScrollProgressTop.astro +15 -0
  378. package/src/components/lib/navigation/SimpleFooterGlass.astro +21 -0
  379. package/src/components/lib/navigation/TabUnderline.astro +14 -0
  380. package/src/components/lib/navigation/UserProfileNav.astro +21 -0
  381. package/src/components/lib/navigation/VerticalTabs.astro +14 -0
  382. package/src/components/lib/navigation/index.ts +20 -0
  383. package/src/components/lib/overlays/AgeVerificationOverlay.astro +20 -0
  384. package/src/components/lib/overlays/BackdropBlurMask.astro +6 -0
  385. package/src/components/lib/overlays/BottomSheetMobile.astro +16 -0
  386. package/src/components/lib/overlays/CommandDialog.astro +19 -0
  387. package/src/components/lib/overlays/ContextMenuOverlay.astro +17 -0
  388. package/src/components/lib/overlays/CookieBannerGlass.astro +14 -0
  389. package/src/components/lib/overlays/ExitIntentOverlay.astro +19 -0
  390. package/src/components/lib/overlays/FloatingTrayActions.astro +13 -0
  391. package/src/components/lib/overlays/HelpBubbleOverlay.astro +11 -0
  392. package/src/components/lib/overlays/LightboxOverlay.astro +13 -0
  393. package/src/components/lib/overlays/LoadingOverlayFull.astro +10 -0
  394. package/src/components/lib/overlays/MobileNavOverlay.astro +18 -0
  395. package/src/components/lib/overlays/OverlayModal.astro +24 -0
  396. package/src/components/lib/overlays/PopoverMenuGlass.astro +17 -0
  397. package/src/components/lib/overlays/SearchOverlayFullscreen.astro +15 -0
  398. package/src/components/lib/overlays/SideDrawerRight.astro +16 -0
  399. package/src/components/lib/overlays/SplashIntroOverlay.astro +11 -0
  400. package/src/components/lib/overlays/SpotlightIndicator.astro +6 -0
  401. package/src/components/lib/overlays/ToastStackOverlay.astro +12 -0
  402. package/src/components/lib/overlays/TooltipActionTray.astro +14 -0
  403. package/src/components/lib/overlays/index.ts +20 -0
  404. package/src/components/lib/typography/AnimatedUnderlineLink.astro +10 -0
  405. package/src/components/lib/typography/BackgroundClipMask.astro +7 -0
  406. package/src/components/lib/typography/CodeInlineGlass.astro +6 -0
  407. package/src/components/lib/typography/CyberpunkGlitchText.astro +20 -0
  408. package/src/components/lib/typography/DropCapParagraph.astro +7 -0
  409. package/src/components/lib/typography/FadedVerticalText.astro +6 -0
  410. package/src/components/lib/typography/FloatingTextLabel.astro +10 -0
  411. package/src/components/lib/typography/GlassBlockQuote.astro +13 -0
  412. package/src/components/lib/typography/GlassTextReveal.astro +7 -0
  413. package/src/components/lib/typography/GradientHeading.astro +9 -0
  414. package/src/components/lib/typography/GradientUnderlineLink.astro +7 -0
  415. package/src/components/lib/typography/KbdIndicator.astro +6 -0
  416. package/src/components/lib/typography/LetterSpacingWide.astro +6 -0
  417. package/src/components/lib/typography/MinimalListMarkers.astro +10 -0
  418. package/src/components/lib/typography/MonospaceStatLine.astro +6 -0
  419. package/src/components/lib/typography/NeonTextHighlight.astro +6 -0
  420. package/src/components/lib/typography/ShadowRevealText.astro +7 -0
  421. package/src/components/lib/typography/StrokeHeadingOutline.astro +8 -0
  422. package/src/components/lib/typography/Text3DLayer.astro +7 -0
  423. package/src/components/lib/typography/TypewriterText.astro +15 -0
  424. package/src/components/lib/typography/index.ts +20 -0
  425. package/src/components/lib/utilities/AspectRatioBox.astro +11 -0
  426. package/src/components/lib/utilities/BackgroundDotPattern.astro +6 -0
  427. package/src/components/lib/utilities/CircularMask.astro +7 -0
  428. package/src/components/lib/utilities/ClickRippleWrapper.astro +7 -0
  429. package/src/components/lib/utilities/FadeInWrapper.astro +11 -0
  430. package/src/components/lib/utilities/FixedRatioImage.astro +7 -0
  431. package/src/components/lib/utilities/GlassBlurLayer.astro +6 -0
  432. package/src/components/lib/utilities/GradientBorderMask.astro +7 -0
  433. package/src/components/lib/utilities/HoverLift.astro +7 -0
  434. package/src/components/lib/utilities/ResponsiveSpacer.astro +15 -0
  435. package/src/components/lib/utilities/ResponsiveVisToggle.astro +11 -0
  436. package/src/components/lib/utilities/ScrollLockParent.astro +11 -0
  437. package/src/components/lib/utilities/ScrollMarginTarget.astro +10 -0
  438. package/src/components/lib/utilities/SlideUpReveal.astro +7 -0
  439. package/src/components/lib/utilities/SmoothAnchorLink.astro +22 -0
  440. package/src/components/lib/utilities/StackLayering.astro +12 -0
  441. package/src/components/lib/utilities/StickyObserver.astro +8 -0
  442. package/src/components/lib/utilities/TextTruncate.astro +10 -0
  443. package/src/components/lib/utilities/TruncateSingleLine.astro +6 -0
  444. package/src/components/lib/utilities/VisuallyHidden.astro +6 -0
  445. package/src/components/lib/utilities/index.ts +20 -0
@@ -0,0 +1,109 @@
1
+ ---
2
+ interface Props {
3
+ href?: string;
4
+ type?: 'button' | 'submit' | 'reset';
5
+ primaryColor?: string;
6
+ secondaryColor?: string;
7
+ size?: 'sm' | 'md' | 'lg';
8
+ disabled?: boolean;
9
+ }
10
+
11
+ const {
12
+ href,
13
+ type = 'button',
14
+ primaryColor = '#6366f1',
15
+ secondaryColor = '#c084fc',
16
+ size = 'md',
17
+ disabled = false
18
+ } = Astro.props;
19
+
20
+ const Tag = href ? 'a' : 'button';
21
+ ---
22
+
23
+ <Tag
24
+ href={href}
25
+ type={href ? undefined : type}
26
+ disabled={disabled}
27
+ class={`ghost-grad-btn ghost-grad-btn--${size}`}
28
+ style={`--primary-color: ${primaryColor}; --secondary-color: ${secondaryColor};`}
29
+ >
30
+ <span class="ghost-grad-btn__text"><slot /></span>
31
+ </Tag>
32
+
33
+ <style>
34
+ .ghost-grad-btn {
35
+ position: relative;
36
+ display: inline-flex;
37
+ align-items: center;
38
+ justify-content: center;
39
+ background: #0f172a;
40
+ color: #fff;
41
+ padding: 2px;
42
+ border: none;
43
+ border-radius: var(--r-md, 12px);
44
+ cursor: pointer;
45
+ text-decoration: none;
46
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
47
+ font-weight: 700;
48
+ user-select: none;
49
+ white-space: nowrap;
50
+ overflow: hidden;
51
+ font-family: var(--font-sans, inherit);
52
+ }
53
+
54
+ .ghost-grad-btn::before {
55
+ content: '';
56
+ position: absolute;
57
+ inset: 0;
58
+ background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
59
+ z-index: 1;
60
+ transition: opacity 0.3s ease;
61
+ }
62
+
63
+ .ghost-grad-btn:hover:not(:disabled)::before {
64
+ opacity: 0.8;
65
+ }
66
+
67
+ .ghost-grad-btn__text {
68
+ position: relative;
69
+ display: block;
70
+ width: 100%;
71
+ height: 100%;
72
+ background: #0f172a;
73
+ padding: 0.7rem 1.8rem;
74
+ border-radius: calc(var(--r-md, 12px) - 2px);
75
+ z-index: 2;
76
+ transition: background 0.3s ease, color 0.3s ease;
77
+ }
78
+
79
+ .ghost-grad-btn:hover:not(:disabled) .ghost-grad-btn__text {
80
+ background: transparent;
81
+ color: #fff;
82
+ }
83
+
84
+ .ghost-grad-btn:hover:not(:disabled) {
85
+ box-shadow: 0 10px 25px -5px color-mix(in srgb, var(--primary-color), transparent 50%);
86
+ transform: translateY(-1px);
87
+ }
88
+
89
+ .ghost-grad-btn:active:not(:disabled) {
90
+ transform: scale(0.98);
91
+ }
92
+
93
+ .ghost-grad-btn:disabled {
94
+ opacity: 0.5;
95
+ cursor: not-allowed;
96
+ filter: grayscale(1);
97
+ }
98
+
99
+ /* Sizes */
100
+ .ghost-grad-btn--sm { font-size: 0.85rem; }
101
+ .ghost-grad-btn--sm .ghost-grad-btn__text { padding: 0.45rem 1.2rem; }
102
+
103
+ .ghost-grad-btn--md { font-size: 1rem; }
104
+ .ghost-grad-btn--md .ghost-grad-btn__text { padding: 0.75rem 1.8rem; }
105
+
106
+ .ghost-grad-btn--lg { font-size: 1.15rem; }
107
+ .ghost-grad-btn--lg .ghost-grad-btn__text { padding: 1.1rem 2.5rem; }
108
+ </style>
109
+
@@ -0,0 +1,165 @@
1
+ ---
2
+ interface Props {
3
+ href?: string;
4
+ type?: 'button' | 'submit' | 'reset';
5
+ variant?: 'primary' | 'secondary' | 'ghost';
6
+ size?: 'sm' | 'md' | 'lg';
7
+ disabled?: boolean;
8
+ }
9
+
10
+ const { href, type = 'button', variant = 'primary', size = 'md', disabled = false } = Astro.props;
11
+ const Tag = href ? 'a' : 'button';
12
+ ---
13
+ <Tag
14
+ href={href}
15
+ type={href ? undefined : type}
16
+ disabled={disabled}
17
+ class={`glass-btn glass-btn--${variant} glass-btn--${size}`}
18
+ >
19
+ <slot />
20
+ </Tag>
21
+
22
+ <style>
23
+ ---
24
+ interface Props {
25
+ href?: string;
26
+ type?: 'button' | 'submit' | 'reset';
27
+ variant?: 'primary' | 'secondary' | 'ghost';
28
+ size?: 'sm' | 'md' | 'lg';
29
+ disabled?: boolean;
30
+ }
31
+
32
+ const { href, type = 'button', variant = 'primary', size = 'md', disabled = false } = Astro.props;
33
+ const Tag = href ? 'a' : 'button';
34
+ ---
35
+ <Tag
36
+ href={href}
37
+ type={href ? undefined : type}
38
+ disabled={disabled}
39
+ class={`glass-btn glass-btn--${variant} glass-btn--${size}`}
40
+ >
41
+ <span class="glass-btn__shimmer"></span>
42
+ <span class="glass-btn__content">
43
+ <slot />
44
+ </span>
45
+ </Tag>
46
+
47
+ <style>
48
+ .glass-btn {
49
+ --btn-bg: rgba(255, 255, 255, 0.05);
50
+ --btn-border: rgba(255, 255, 255, 0.1);
51
+ --btn-text: var(--c-text-1, #d4d4d4);
52
+ --btn-glow: rgba(184, 134, 11, 0);
53
+
54
+ display: inline-flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ gap: 0.6rem;
58
+ font-family: var(--font-sans, inherit);
59
+ font-weight: 600;
60
+ letter-spacing: 0.02em;
61
+ border-radius: var(--r-md, 12px);
62
+ cursor: pointer;
63
+ text-decoration: none;
64
+ border: 1px solid var(--btn-border);
65
+ background: var(--btn-bg);
66
+ backdrop-filter: blur(12px);
67
+ -webkit-backdrop-filter: blur(12px);
68
+ position: relative;
69
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
70
+ white-space: nowrap;
71
+ user-select: none;
72
+ overflow: hidden;
73
+ color: var(--btn-text);
74
+ }
75
+
76
+ /* Shimmer Effect */
77
+ .glass-btn__shimmer {
78
+ position: absolute;
79
+ inset: 0;
80
+ background: linear-gradient(
81
+ 90deg,
82
+ transparent,
83
+ rgba(255, 255, 255, 0.05),
84
+ rgba(255, 255, 255, 0.15),
85
+ rgba(255, 255, 255, 0.05),
86
+ transparent
87
+ );
88
+ transform: translateX(-100%);
89
+ transition: transform 0.6s ease;
90
+ pointer-events: none;
91
+ }
92
+
93
+ .glass-btn:hover:not(:disabled) .glass-btn__shimmer {
94
+ transform: translateX(100%);
95
+ }
96
+
97
+ /* Glass Border Glow */
98
+ .glass-btn::after {
99
+ content: '';
100
+ position: absolute;
101
+ inset: 0;
102
+ border-radius: inherit;
103
+ padding: 1px;
104
+ background: linear-gradient(135deg, rgba(255,255,255,0.2), transparent, rgba(255,255,255,0.05));
105
+ -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
106
+ -webkit-mask-composite: xor;
107
+ mask-composite: exclude;
108
+ pointer-events: none;
109
+ opacity: 0.5;
110
+ transition: opacity 0.3s ease;
111
+ }
112
+
113
+ .glass-btn:hover:not(:disabled)::after {
114
+ opacity: 1;
115
+ }
116
+
117
+ .glass-btn:hover:not(:disabled) {
118
+ transform: translateY(-2px);
119
+ border-color: rgba(255, 255, 255, 0.2);
120
+ box-shadow: 0 10px 30px -10px var(--btn-glow);
121
+ }
122
+
123
+ .glass-btn:active:not(:disabled) {
124
+ transform: translateY(0) scale(0.98);
125
+ }
126
+
127
+ .glass-btn:disabled {
128
+ opacity: 0.4;
129
+ cursor: not-allowed;
130
+ filter: grayscale(1);
131
+ }
132
+
133
+ /* Variants */
134
+ .glass-btn--primary {
135
+ --btn-bg: linear-gradient(135deg, rgba(184, 134, 11, 0.7), rgba(212, 160, 23, 0.7));
136
+ --btn-text: #0a0a0a;
137
+ --btn-glow: rgba(184, 134, 11, 0.4);
138
+ border-color: rgba(255, 255, 255, 0.1);
139
+ }
140
+
141
+ .glass-btn--secondary {
142
+ --btn-bg: rgba(255, 255, 255, 0.03);
143
+ --btn-glow: rgba(255, 255, 255, 0.1);
144
+ }
145
+
146
+ .glass-btn--ghost {
147
+ --btn-bg: transparent;
148
+ --btn-text: var(--c-primary-light, #d4a017);
149
+ --btn-border: rgba(184, 134, 11, 0.25);
150
+ --btn-glow: rgba(184, 134, 11, 0.15);
151
+ backdrop-filter: none;
152
+ }
153
+
154
+ .glass-btn--ghost:hover:not(:disabled) {
155
+ background: rgba(184, 134, 11, 0.08);
156
+ border-color: rgba(184, 134, 11, 0.4);
157
+ }
158
+
159
+ /* Sizes */
160
+ .glass-btn--sm { padding: 0.45rem 1.1rem; font-size: 0.85rem; }
161
+ .glass-btn--md { padding: 0.75rem 1.6rem; font-size: 0.95rem; }
162
+ .glass-btn--lg { padding: 1.1rem 2.4rem; font-size: 1.1rem; }
163
+ </style>
164
+ </style>
165
+
@@ -0,0 +1,119 @@
1
+ ---
2
+ interface Props {
3
+ color?: string;
4
+ href?: string;
5
+ type?: 'button' | 'submit' | 'reset';
6
+ size?: 'sm' | 'md' | 'lg';
7
+ disabled?: boolean;
8
+ }
9
+
10
+ const { color = '#6366f1', href, type = 'button', size = 'md', disabled = false } = Astro.props;
11
+ const Tag = href ? 'a' : 'button';
12
+ ---
13
+ <Tag
14
+ href={href}
15
+ type={href ? undefined : type}
16
+ disabled={disabled}
17
+ class={`glow-btn glow-btn--${size}`}
18
+ style={`--btn-color: ${color}`}
19
+ >
20
+ <span class="glow-btn__content"><slot /></span>
21
+ </Tag>
22
+
23
+ <style>
24
+ .glow-btn {
25
+ --glow-color: var(--btn-color);
26
+ --glow-opacity: 0.4;
27
+
28
+ display: inline-flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ font-family: var(--font-sans, inherit);
32
+ font-weight: 700;
33
+ letter-spacing: 0.05em;
34
+ text-transform: uppercase;
35
+ color: #fff;
36
+ background: var(--btn-color);
37
+ border: none;
38
+ border-radius: 10px;
39
+ cursor: pointer;
40
+ text-decoration: none;
41
+ position: relative;
42
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
43
+ white-space: nowrap;
44
+ user-select: none;
45
+ z-index: 1;
46
+
47
+ /* Layered Glow */
48
+ box-shadow:
49
+ 0 0 10px color-mix(in srgb, var(--glow-color), transparent 60%),
50
+ 0 0 20px color-mix(in srgb, var(--glow-color), transparent 80%);
51
+ }
52
+
53
+ .glow-btn__content {
54
+ position: relative;
55
+ z-index: 2;
56
+ }
57
+
58
+ .glow-btn::before {
59
+ content: '';
60
+ position: absolute;
61
+ inset: -2px;
62
+ background: var(--btn-color);
63
+ border-radius: inherit;
64
+ z-index: -1;
65
+ opacity: 0;
66
+ filter: blur(8px);
67
+ transition: opacity 0.3s ease;
68
+ }
69
+
70
+ .glow-btn::after {
71
+ content: '';
72
+ position: absolute;
73
+ inset: -8px;
74
+ background: var(--btn-color);
75
+ border-radius: 14px;
76
+ opacity: 0;
77
+ filter: blur(25px);
78
+ transition: opacity 0.4s ease;
79
+ z-index: -2;
80
+ }
81
+
82
+ .glow-btn:hover:not(:disabled) {
83
+ transform: translateY(-3px) scale(1.03);
84
+ box-shadow:
85
+ 0 0 20px color-mix(in srgb, var(--glow-color), transparent 40%),
86
+ 0 0 40px color-mix(in srgb, var(--glow-color), transparent 70%);
87
+ }
88
+
89
+ .glow-btn:hover:not(:disabled)::before {
90
+ opacity: 0.4;
91
+ }
92
+
93
+ .glow-btn:hover:not(:disabled)::after {
94
+ opacity: 0.7;
95
+ animation: animate-glow 2.5s ease-in-out infinite;
96
+ }
97
+
98
+ .glow-btn:active:not(:disabled) {
99
+ transform: translateY(1px) scale(0.98);
100
+ }
101
+
102
+ .glow-btn:disabled {
103
+ opacity: 0.5;
104
+ cursor: not-allowed;
105
+ filter: grayscale(1);
106
+ box-shadow: none;
107
+ }
108
+
109
+ @keyframes animate-glow {
110
+ 0%, 100% { opacity: 0.5; filter: blur(20px); transform: scale(1); }
111
+ 50% { opacity: 0.8; filter: blur(30px); transform: scale(1.1); }
112
+ }
113
+
114
+ /* Sizes */
115
+ .glow-btn--sm { padding: 0.5rem 1.4rem; font-size: 0.75rem; }
116
+ .glow-btn--md { padding: 0.8rem 2.2rem; font-size: 0.875rem; }
117
+ .glow-btn--lg { padding: 1.1rem 3rem; font-size: 1rem; }
118
+ </style>
119
+
@@ -0,0 +1,167 @@
1
+ ---
2
+ interface Props {
3
+ href?: string;
4
+ type?: 'button' | 'submit' | 'reset';
5
+ color?: string;
6
+ size?: 'sm' | 'md' | 'lg';
7
+ disabled?: boolean;
8
+ }
9
+
10
+ const {
11
+ href,
12
+ type = 'button',
13
+ color = '#6366f1',
14
+ size = 'md',
15
+ disabled = false
16
+ } = Astro.props;
17
+
18
+ const Tag = href ? 'a' : 'button';
19
+ // Create a unique filter ID to avoid conflicts when multiple buttons are on screen
20
+ const filterId = `gooey-${Math.random().toString(36).substr(2, 9)}`;
21
+ ---
22
+
23
+ <Tag
24
+ href={href}
25
+ type={href ? undefined : type}
26
+ disabled={disabled}
27
+ class={`liquid-btn liquid-btn--${size}`}
28
+ style={`--liquid-color: ${color}`}
29
+ >
30
+ <span class="liquid-btn__text"><slot /></span>
31
+
32
+ <div class="liquid-wrapper">
33
+ <div class="liquid-main"></div>
34
+ <div class="liquid-container">
35
+ <div class="liquid-blob"></div>
36
+ <div class="liquid-blob"></div>
37
+ <div class="liquid-blob"></div>
38
+ <div class="liquid-blob"></div>
39
+ </div>
40
+ </div>
41
+
42
+ <svg style="position: absolute; width: 0; height: 0; pointer-events: none;">
43
+ <defs>
44
+ <filter id={filterId}>
45
+ <feGaussianBlur in="SourceGraphic" stdDeviation="10" result="blur" />
46
+ <feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9" result="goo" />
47
+ <feComposite in="SourceGraphic" in2="goo" operator="atop" />
48
+ </filter>
49
+ </defs>
50
+ </svg>
51
+ </Tag>
52
+
53
+ <style define:vars={{ filterId: `url(#${filterId})` }}>
54
+ .liquid-btn {
55
+ position: relative;
56
+ display: inline-flex;
57
+ align-items: center;
58
+ justify-content: center;
59
+ background: #080b14;
60
+ color: #fff;
61
+ border: none;
62
+ border-radius: var(--r-md, 14px);
63
+ cursor: pointer;
64
+ text-decoration: none;
65
+ overflow: hidden;
66
+ transition: all 0.4s cubic-bezier(0.23, 1, 0.320, 1);
67
+ z-index: 1;
68
+ font-family: var(--font-sans, inherit);
69
+ font-weight: 800;
70
+ letter-spacing: 0.1em;
71
+ text-transform: uppercase;
72
+ user-select: none;
73
+ white-space: nowrap;
74
+ border: 1px solid rgba(255, 255, 255, 0.05);
75
+ }
76
+
77
+ .liquid-btn__text {
78
+ position: relative;
79
+ z-index: 10;
80
+ padding: 0 4px;
81
+ transition: color 0.4s ease;
82
+ }
83
+
84
+ .liquid-wrapper {
85
+ position: absolute;
86
+ inset: 0;
87
+ z-index: 2;
88
+ pointer-events: none;
89
+ filter: var(--filterId);
90
+ border-radius: inherit;
91
+ /* Subtle base fill */
92
+ opacity: 0.95;
93
+ }
94
+
95
+ .liquid-main {
96
+ position: absolute;
97
+ bottom: -100%;
98
+ left: 0;
99
+ width: 100%;
100
+ height: 100%;
101
+ background: var(--liquid-color);
102
+ transition: transform 0.8s cubic-bezier(0.19, 1, 0.22, 1);
103
+ }
104
+
105
+ .liquid-container {
106
+ position: absolute;
107
+ inset: 0;
108
+ z-index: 3;
109
+ }
110
+
111
+ .liquid-blob {
112
+ position: absolute;
113
+ top: 100%;
114
+ background: var(--liquid-color);
115
+ border-radius: 50%;
116
+ transition: transform 0.7s cubic-bezier(0.19, 1, 0.22, 1);
117
+ }
118
+
119
+ .liquid-blob:nth-child(1) { left: 10%; width: 60px; height: 60px; transition-delay: 0s; }
120
+ .liquid-blob:nth-child(2) { left: 40%; width: 80px; height: 80px; transition-delay: 0.05s; }
121
+ .liquid-blob:nth-child(3) { left: 70%; width: 50px; height: 50px; transition-delay: 0.02s; }
122
+ .liquid-blob:nth-child(4) { left: 30%; width: 70px; height: 70px; transition-delay: 0.08s; }
123
+
124
+ /* Hover States */
125
+ .liquid-btn:hover:not(:disabled) {
126
+ border-color: rgba(255, 255, 255, 0.1);
127
+ transform: translateY(-2px);
128
+ box-shadow: 0 20px 40px -10px color-mix(in srgb, var(--liquid-color), transparent 70%);
129
+ }
130
+
131
+ .liquid-btn:hover:not(:disabled) .liquid-main {
132
+ transform: translateY(-100%);
133
+ }
134
+
135
+ .liquid-btn:hover:not(:disabled) .liquid-blob {
136
+ transform: translateY(-180%) scale(1.4);
137
+ }
138
+
139
+ /* Movement animation for blobs when hovered */
140
+ .liquid-btn:hover:not(:disabled) .liquid-blob:nth-child(odd) {
141
+ animation: liquid-wiggle 3s ease-in-out infinite alternate;
142
+ }
143
+ .liquid-btn:hover:not(:disabled) .liquid-blob:nth-child(even) {
144
+ animation: liquid-wiggle 4s ease-in-out infinite alternate-reverse;
145
+ }
146
+
147
+ @keyframes liquid-wiggle {
148
+ 0% { margin-left: -5px; }
149
+ 100% { margin-left: 5px; }
150
+ }
151
+
152
+ .liquid-btn:active:not(:disabled) {
153
+ transform: scale(0.96);
154
+ }
155
+
156
+ .liquid-btn:disabled {
157
+ opacity: 0.4;
158
+ cursor: not-allowed;
159
+ filter: grayscale(1);
160
+ }
161
+
162
+ /* Sizes */
163
+ .liquid-btn--sm { padding: 0.6rem 1.6rem; font-size: 0.8rem; }
164
+ .liquid-btn--md { padding: 0.9rem 2.4rem; font-size: 0.95rem; }
165
+ .liquid-btn--lg { padding: 1.2rem 3.5rem; font-size: 1.1rem; }
166
+ </style>
167
+
@@ -0,0 +1,148 @@
1
+ ---
2
+ interface Props {
3
+ isLoading?: boolean;
4
+ href?: string;
5
+ type?: 'button' | 'submit' | 'reset';
6
+ variant?: 'primary' | 'secondary' | 'ghost';
7
+ size?: 'sm' | 'md' | 'lg';
8
+ disabled?: boolean;
9
+ }
10
+
11
+ const {
12
+ isLoading = false,
13
+ href,
14
+ type = 'button',
15
+ variant = 'primary',
16
+ size = 'md',
17
+ disabled = false
18
+ } = Astro.props;
19
+
20
+ const Tag = href ? 'a' : 'button';
21
+ ---
22
+
23
+ <Tag
24
+ href={href}
25
+ type={href ? undefined : type}
26
+ disabled={disabled || isLoading}
27
+ class:list={[
28
+ "load-btn",
29
+ `load-btn--${variant}`,
30
+ `load-btn--${size}`,
31
+ { "is-loading": isLoading }
32
+ ]}
33
+ >
34
+ <span class="load-btn__content">
35
+ <slot />
36
+ </span>
37
+ <span class="load-btn__spinner">
38
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
39
+ <path d="M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83"/>
40
+ </svg>
41
+ </span>
42
+ </Tag>
43
+
44
+ <style>
45
+ .load-btn {
46
+ position: relative;
47
+ display: inline-flex;
48
+ align-items: center;
49
+ justify-content: center;
50
+ font-family: var(--font-sans, inherit);
51
+ font-weight: 600;
52
+ letter-spacing: 0.02em;
53
+ border-radius: var(--r-md, 12px);
54
+ cursor: pointer;
55
+ text-decoration: none;
56
+ border: 1px solid transparent;
57
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
58
+ overflow: hidden;
59
+ white-space: nowrap;
60
+ user-select: none;
61
+ }
62
+
63
+ .load-btn__content {
64
+ display: flex;
65
+ align-items: center;
66
+ gap: 0.5rem;
67
+ transition: opacity 0.2s ease, transform 0.2s ease;
68
+ }
69
+
70
+ .load-btn__spinner {
71
+ position: absolute;
72
+ inset: 0;
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ opacity: 0;
77
+ transform: scale(0.5);
78
+ transition: all 0.2s ease;
79
+ pointer-events: none;
80
+ }
81
+
82
+ .load-btn__spinner svg {
83
+ width: 1.25em;
84
+ height: 1.25em;
85
+ animation: spin 1s linear infinite;
86
+ }
87
+
88
+ /* Loading State */
89
+ .load-btn.is-loading {
90
+ cursor: wait;
91
+ }
92
+
93
+ .load-btn.is-loading .load-btn__content {
94
+ opacity: 0;
95
+ transform: translateY(5px);
96
+ }
97
+
98
+ .load-btn.is-loading .load-btn__spinner {
99
+ opacity: 1;
100
+ transform: scale(1);
101
+ }
102
+
103
+ @keyframes spin {
104
+ from { transform: rotate(0deg); }
105
+ to { transform: rotate(360deg); }
106
+ }
107
+
108
+ /* Variants */
109
+ .load-btn--primary {
110
+ background: var(--c-primary, #6366f1);
111
+ color: #fff;
112
+ box-shadow: 0 4px 15px rgba(99, 102, 241, 0.2);
113
+ }
114
+ .load-btn--primary:hover:not(:disabled) {
115
+ background: var(--c-primary-light, #818cf8);
116
+ transform: translateY(-1px);
117
+ }
118
+
119
+ .load-btn--secondary {
120
+ background: rgba(255, 255, 255, 0.05);
121
+ color: var(--c-text-1, #f8fafc);
122
+ border-color: var(--c-border, rgba(255, 255, 255, 0.1));
123
+ }
124
+ .load-btn--secondary:hover:not(:disabled) {
125
+ background: rgba(255, 255, 255, 0.08);
126
+ }
127
+
128
+ .load-btn--ghost {
129
+ background: transparent;
130
+ color: var(--c-primary-light, #818cf8);
131
+ border-color: rgba(99, 102, 241, 0.3);
132
+ }
133
+ .load-btn--ghost:hover:not(:disabled) {
134
+ background: rgba(99, 102, 241, 0.05);
135
+ }
136
+
137
+ /* Sizes / Layout */
138
+ .load-btn--sm { padding: 0.45rem 1rem; font-size: 0.825rem; min-width: 100px; }
139
+ .load-btn--md { padding: 0.75rem 1.6rem; font-size: 0.95rem; min-width: 140px; }
140
+ .load-btn--lg { padding: 1rem 2.2rem; font-size: 1.1rem; min-width: 180px; }
141
+
142
+ .load-btn:disabled {
143
+ opacity: 0.5;
144
+ cursor: not-allowed;
145
+ filter: grayscale(1);
146
+ }
147
+ </style>
148
+