@opensite/ui 0.8.9 → 0.9.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 (367) hide show
  1. package/dist/about-company-profile.cjs +32 -4
  2. package/dist/about-company-profile.js +32 -4
  3. package/dist/about-culture-tabs.cjs +38 -8
  4. package/dist/about-culture-tabs.js +38 -8
  5. package/dist/about-developer-profile.cjs +37 -5
  6. package/dist/about-developer-profile.js +37 -5
  7. package/dist/about-developer-story.cjs +31 -3
  8. package/dist/about-developer-story.js +31 -3
  9. package/dist/about-expandable-values.cjs +43 -9
  10. package/dist/about-expandable-values.js +43 -9
  11. package/dist/about-interactive-tabs.cjs +63 -4
  12. package/dist/about-interactive-tabs.js +63 -4
  13. package/dist/about-location-info-hero.cjs +28 -2
  14. package/dist/about-location-info-hero.js +28 -2
  15. package/dist/about-minimal-story.cjs +35 -4
  16. package/dist/about-minimal-story.js +35 -4
  17. package/dist/about-mission-dual-image.cjs +30 -2
  18. package/dist/about-mission-dual-image.js +30 -2
  19. package/dist/about-mission-features.cjs +36 -4
  20. package/dist/about-mission-features.js +36 -4
  21. package/dist/about-mission-principles.cjs +39 -6
  22. package/dist/about-mission-principles.js +39 -6
  23. package/dist/about-network-spotlight.cjs +33 -5
  24. package/dist/about-network-spotlight.js +33 -5
  25. package/dist/about-startup-team.cjs +47 -6
  26. package/dist/about-startup-team.js +47 -6
  27. package/dist/about-stats-showcase.cjs +31 -4
  28. package/dist/about-stats-showcase.js +31 -4
  29. package/dist/about-stats-sidebar.cjs +29 -3
  30. package/dist/about-stats-sidebar.js +29 -3
  31. package/dist/about-story-expertise.cjs +44 -8
  32. package/dist/about-story-expertise.js +44 -8
  33. package/dist/about-story-gallery.cjs +28 -1
  34. package/dist/about-story-gallery.js +28 -1
  35. package/dist/about-story-hero.cjs +36 -4
  36. package/dist/about-story-hero.js +36 -4
  37. package/dist/about-streamline-team.cjs +32 -4
  38. package/dist/about-streamline-team.js +32 -4
  39. package/dist/about-vision-gallery.cjs +32 -3
  40. package/dist/about-vision-gallery.js +32 -3
  41. package/dist/alternating-blocks.cjs +5 -1
  42. package/dist/alternating-blocks.js +5 -1
  43. package/dist/banner-announcement-dismissible.cjs +377 -1
  44. package/dist/banner-announcement-dismissible.d.cts +7 -1
  45. package/dist/banner-announcement-dismissible.d.ts +7 -1
  46. package/dist/banner-announcement-dismissible.js +378 -2
  47. package/dist/banner-countdown-sale.cjs +388 -8
  48. package/dist/banner-countdown-sale.d.cts +11 -1
  49. package/dist/banner-countdown-sale.d.ts +11 -1
  50. package/dist/banner-countdown-sale.js +379 -3
  51. package/dist/banner-delivery-countdown.cjs +377 -1
  52. package/dist/banner-delivery-countdown.d.cts +11 -1
  53. package/dist/banner-delivery-countdown.d.ts +11 -1
  54. package/dist/banner-delivery-countdown.js +378 -2
  55. package/dist/banner-event-promo.cjs +377 -1
  56. package/dist/banner-event-promo.d.cts +7 -1
  57. package/dist/banner-event-promo.d.ts +7 -1
  58. package/dist/banner-event-promo.js +378 -2
  59. package/dist/banner-floating-offer.cjs +379 -3
  60. package/dist/banner-floating-offer.d.cts +7 -1
  61. package/dist/banner-floating-offer.d.ts +7 -1
  62. package/dist/banner-floating-offer.js +380 -4
  63. package/dist/banner-gdpr-rights.cjs +398 -31
  64. package/dist/banner-gdpr-rights.d.cts +7 -1
  65. package/dist/banner-gdpr-rights.d.ts +7 -1
  66. package/dist/banner-gdpr-rights.js +399 -32
  67. package/dist/banner-privacy-notice.cjs +399 -32
  68. package/dist/banner-privacy-notice.d.cts +7 -1
  69. package/dist/banner-privacy-notice.d.ts +7 -1
  70. package/dist/banner-privacy-notice.js +400 -33
  71. package/dist/banner-promo-cta.cjs +382 -12
  72. package/dist/banner-promo-cta.d.cts +7 -1
  73. package/dist/banner-promo-cta.d.ts +7 -1
  74. package/dist/banner-promo-cta.js +383 -13
  75. package/dist/banner-social-follow.cjs +395 -28
  76. package/dist/banner-social-follow.d.cts +7 -1
  77. package/dist/banner-social-follow.d.ts +7 -1
  78. package/dist/banner-social-follow.js +396 -29
  79. package/dist/banner-survey-incentive.cjs +377 -1
  80. package/dist/banner-survey-incentive.d.cts +7 -1
  81. package/dist/banner-survey-incentive.d.ts +7 -1
  82. package/dist/banner-survey-incentive.js +378 -2
  83. package/dist/community-initiatives.cjs +43 -10
  84. package/dist/community-initiatives.js +43 -10
  85. package/dist/components.cjs +76 -36
  86. package/dist/components.js +76 -36
  87. package/dist/contact-floating-banner.cjs +378 -2
  88. package/dist/contact-floating-banner.d.cts +7 -1
  89. package/dist/contact-floating-banner.d.ts +7 -1
  90. package/dist/contact-floating-banner.js +379 -2
  91. package/dist/cta-accent-background.cjs +28 -1
  92. package/dist/cta-accent-background.js +28 -1
  93. package/dist/cta-app-download-newsletter.cjs +30 -2
  94. package/dist/cta-app-download-newsletter.js +30 -2
  95. package/dist/cta-documentation-links.cjs +28 -2
  96. package/dist/cta-documentation-links.js +28 -2
  97. package/dist/cta-feature-cards-grid.cjs +34 -3
  98. package/dist/cta-feature-cards-grid.js +34 -3
  99. package/dist/cta-feature-checklist.cjs +27 -1
  100. package/dist/cta-feature-checklist.js +27 -1
  101. package/dist/cta-feature-list.cjs +33 -2
  102. package/dist/cta-feature-list.js +33 -2
  103. package/dist/cta-gradient-logos-floating.cjs +28 -1
  104. package/dist/cta-gradient-logos-floating.js +28 -1
  105. package/dist/cta-minimal-separator.cjs +27 -1
  106. package/dist/cta-minimal-separator.js +27 -1
  107. package/dist/cta-platform-demo.cjs +28 -1
  108. package/dist/cta-platform-demo.js +28 -1
  109. package/dist/cta-simple-centered.cjs +28 -1
  110. package/dist/cta-simple-centered.js +28 -1
  111. package/dist/cta-split-gradient-image.cjs +28 -1
  112. package/dist/cta-split-gradient-image.js +28 -1
  113. package/dist/cta-split-image-logos.cjs +29 -2
  114. package/dist/cta-split-image-logos.js +29 -2
  115. package/dist/cta-split-image.cjs +29 -2
  116. package/dist/cta-split-image.js +29 -2
  117. package/dist/cta-stacked-cards.cjs +28 -1
  118. package/dist/cta-stacked-cards.js +28 -1
  119. package/dist/faq-badge-support.cjs +33 -5
  120. package/dist/faq-badge-support.js +33 -5
  121. package/dist/faq-bordered-badge.cjs +31 -3
  122. package/dist/faq-bordered-badge.js +31 -3
  123. package/dist/faq-card-categories.cjs +60 -4
  124. package/dist/faq-card-categories.js +60 -4
  125. package/dist/faq-categorized-sections.cjs +31 -3
  126. package/dist/faq-categorized-sections.js +31 -3
  127. package/dist/faq-centered-accordion.cjs +31 -3
  128. package/dist/faq-centered-accordion.js +31 -3
  129. package/dist/faq-gradient-categories.cjs +31 -3
  130. package/dist/faq-gradient-categories.js +31 -3
  131. package/dist/faq-icon-benefits.cjs +40 -5
  132. package/dist/faq-icon-benefits.js +40 -5
  133. package/dist/faq-muted-cards.cjs +29 -2
  134. package/dist/faq-muted-cards.js +29 -2
  135. package/dist/faq-numbered-grid.cjs +32 -3
  136. package/dist/faq-numbered-grid.js +32 -3
  137. package/dist/faq-numbered-list.cjs +32 -3
  138. package/dist/faq-numbered-list.js +32 -3
  139. package/dist/faq-profile-sidebar.cjs +36 -6
  140. package/dist/faq-profile-sidebar.js +36 -6
  141. package/dist/faq-sidebar-navigation.cjs +30 -3
  142. package/dist/faq-sidebar-navigation.js +30 -3
  143. package/dist/faq-simple-accordion.cjs +29 -2
  144. package/dist/faq-simple-accordion.js +29 -2
  145. package/dist/feature-accordion-image.cjs +28 -2
  146. package/dist/feature-accordion-image.js +28 -2
  147. package/dist/feature-badge-grid-six.cjs +27 -1
  148. package/dist/feature-badge-grid-six.js +27 -1
  149. package/dist/feature-bento-image-grid.cjs +27 -1
  150. package/dist/feature-bento-image-grid.js +27 -1
  151. package/dist/feature-bento-utilities.cjs +56 -4
  152. package/dist/feature-bento-utilities.js +56 -4
  153. package/dist/feature-capabilities-grid.cjs +29 -3
  154. package/dist/feature-capabilities-grid.js +29 -3
  155. package/dist/feature-card-grid-linked.cjs +29 -2
  156. package/dist/feature-card-grid-linked.js +29 -2
  157. package/dist/feature-carousel-progress.cjs +28 -2
  158. package/dist/feature-carousel-progress.js +28 -2
  159. package/dist/feature-category-image-cards.cjs +28 -2
  160. package/dist/feature-category-image-cards.js +28 -2
  161. package/dist/feature-checklist-image.cjs +30 -2
  162. package/dist/feature-checklist-image.js +30 -2
  163. package/dist/feature-checklist-three-column.cjs +35 -5
  164. package/dist/feature-checklist-three-column.js +35 -5
  165. package/dist/feature-icon-grid-accent.cjs +28 -2
  166. package/dist/feature-icon-grid-accent.js +28 -2
  167. package/dist/feature-icon-grid-bordered.cjs +9 -4
  168. package/dist/feature-icon-grid-bordered.js +9 -4
  169. package/dist/feature-icon-grid-muted.cjs +28 -2
  170. package/dist/feature-icon-grid-muted.js +28 -2
  171. package/dist/feature-icon-tabs-content.cjs +56 -5
  172. package/dist/feature-icon-tabs-content.js +56 -5
  173. package/dist/feature-image-cards-three-column.cjs +27 -1
  174. package/dist/feature-image-cards-three-column.js +27 -1
  175. package/dist/feature-integration-cards.cjs +28 -2
  176. package/dist/feature-integration-cards.js +28 -2
  177. package/dist/feature-pattern-grid-links.cjs +28 -2
  178. package/dist/feature-pattern-grid-links.js +28 -2
  179. package/dist/feature-utility-cards-grid.cjs +9 -4
  180. package/dist/feature-utility-cards-grid.js +9 -4
  181. package/dist/footer-comprehensive-links.cjs +231 -151
  182. package/dist/footer-comprehensive-links.js +231 -151
  183. package/dist/hero-ad-campaign-expert.cjs +24 -2
  184. package/dist/hero-ad-campaign-expert.js +24 -2
  185. package/dist/hero-adaptable-product-grid.cjs +27 -1
  186. package/dist/hero-adaptable-product-grid.js +27 -1
  187. package/dist/hero-ai-powered-carousel.cjs +27 -1
  188. package/dist/hero-ai-powered-carousel.js +27 -1
  189. package/dist/hero-announcement-badge.cjs +27 -1
  190. package/dist/hero-announcement-badge.js +27 -1
  191. package/dist/hero-architecture-fullscreen.cjs +50 -2
  192. package/dist/hero-architecture-fullscreen.js +50 -2
  193. package/dist/hero-badge-image-split.cjs +27 -1
  194. package/dist/hero-badge-image-split.js +27 -1
  195. package/dist/hero-business-carousel-dots.cjs +27 -1
  196. package/dist/hero-business-carousel-dots.js +27 -1
  197. package/dist/hero-centered-gradient-cta.cjs +28 -2
  198. package/dist/hero-centered-gradient-cta.js +28 -2
  199. package/dist/hero-centered-image-grid.cjs +27 -1
  200. package/dist/hero-centered-image-grid.js +27 -1
  201. package/dist/hero-centered-screenshot.cjs +50 -2
  202. package/dist/hero-centered-screenshot.js +50 -2
  203. package/dist/hero-coming-soon-countdown.cjs +37 -7
  204. package/dist/hero-coming-soon-countdown.js +37 -7
  205. package/dist/hero-community-survey-cta.cjs +27 -1
  206. package/dist/hero-community-survey-cta.js +27 -1
  207. package/dist/hero-conversation-intelligence.cjs +50 -2
  208. package/dist/hero-conversation-intelligence.js +50 -2
  209. package/dist/hero-conversion-video-play.cjs +55 -3
  210. package/dist/hero-conversion-video-play.js +55 -3
  211. package/dist/hero-creative-studio-stacked.cjs +28 -2
  212. package/dist/hero-creative-studio-stacked.js +28 -2
  213. package/dist/hero-crm-streamlined.cjs +27 -1
  214. package/dist/hero-crm-streamlined.js +27 -1
  215. package/dist/hero-customer-support-layered.cjs +51 -3
  216. package/dist/hero-customer-support-layered.js +51 -3
  217. package/dist/hero-dashed-border-features.cjs +27 -1
  218. package/dist/hero-dashed-border-features.js +27 -1
  219. package/dist/hero-design-showcase-logos.cjs +27 -1
  220. package/dist/hero-design-showcase-logos.js +27 -1
  221. package/dist/hero-design-system-3d.cjs +32 -2
  222. package/dist/hero-design-system-3d.js +32 -2
  223. package/dist/hero-developer-tools-code.cjs +27 -1
  224. package/dist/hero-developer-tools-code.js +27 -1
  225. package/dist/hero-digital-agency-fullscreen.cjs +33 -3
  226. package/dist/hero-digital-agency-fullscreen.js +33 -3
  227. package/dist/hero-ecommerce-product-showcase.cjs +32 -6
  228. package/dist/hero-ecommerce-product-showcase.js +32 -6
  229. package/dist/hero-enterprise-security.cjs +34 -4
  230. package/dist/hero-enterprise-security.js +34 -4
  231. package/dist/hero-event-registration.cjs +35 -5
  232. package/dist/hero-event-registration.js +35 -5
  233. package/dist/hero-feature-cards-grid.cjs +82 -4
  234. package/dist/hero-feature-cards-grid.js +82 -4
  235. package/dist/hero-gradient-avatars-rating.cjs +30 -4
  236. package/dist/hero-gradient-avatars-rating.js +30 -4
  237. package/dist/hero-gradient-client-focused.cjs +27 -1
  238. package/dist/hero-gradient-client-focused.js +27 -1
  239. package/dist/hero-grid-pattern-efficiency.cjs +28 -2
  240. package/dist/hero-grid-pattern-efficiency.js +28 -2
  241. package/dist/hero-grid-pattern-solutions.cjs +27 -1
  242. package/dist/hero-grid-pattern-solutions.js +27 -1
  243. package/dist/hero-image-left-content.cjs +27 -1
  244. package/dist/hero-image-left-content.js +27 -1
  245. package/dist/hero-innovation-image-grid.cjs +27 -1
  246. package/dist/hero-innovation-image-grid.js +27 -1
  247. package/dist/hero-logo-centered-screenshot.cjs +27 -1
  248. package/dist/hero-logo-centered-screenshot.js +27 -1
  249. package/dist/hero-marketplace-scattered-images.cjs +27 -1
  250. package/dist/hero-marketplace-scattered-images.js +27 -1
  251. package/dist/hero-mentorship-video-split.cjs +7 -3
  252. package/dist/hero-mentorship-video-split.js +7 -3
  253. package/dist/hero-minimal-centered-dark.cjs +55 -3
  254. package/dist/hero-minimal-centered-dark.js +55 -3
  255. package/dist/hero-mobile-app-download.cjs +34 -4
  256. package/dist/hero-mobile-app-download.js +34 -4
  257. package/dist/hero-newsletter-minimal.cjs +29 -3
  258. package/dist/hero-newsletter-minimal.js +29 -3
  259. package/dist/hero-overlay-cta-grid.cjs +33 -3
  260. package/dist/hero-overlay-cta-grid.js +33 -3
  261. package/dist/hero-pattern-badge-logos.cjs +28 -2
  262. package/dist/hero-pattern-badge-logos.js +28 -2
  263. package/dist/hero-pattern-logo-tech-stack.cjs +33 -3
  264. package/dist/hero-pattern-logo-tech-stack.js +33 -3
  265. package/dist/hero-platform-features-grid.cjs +28 -2
  266. package/dist/hero-platform-features-grid.js +28 -2
  267. package/dist/hero-portfolio-creative.cjs +29 -3
  268. package/dist/hero-portfolio-creative.js +29 -3
  269. package/dist/hero-pricing-comparison.cjs +52 -4
  270. package/dist/hero-pricing-comparison.js +52 -4
  271. package/dist/hero-product-showcase-floating.cjs +34 -4
  272. package/dist/hero-product-showcase-floating.js +34 -4
  273. package/dist/hero-productivity-launcher-video.cjs +29 -3
  274. package/dist/hero-productivity-launcher-video.js +29 -3
  275. package/dist/hero-saas-dashboard-preview.cjs +34 -4
  276. package/dist/hero-saas-dashboard-preview.js +34 -4
  277. package/dist/hero-shared-inbox-layered.cjs +51 -3
  278. package/dist/hero-shared-inbox-layered.js +51 -3
  279. package/dist/hero-simple-centered-image.cjs +27 -1
  280. package/dist/hero-simple-centered-image.js +27 -1
  281. package/dist/hero-software-growth-video-dialog.cjs +50 -2
  282. package/dist/hero-software-growth-video-dialog.js +50 -2
  283. package/dist/hero-spiral-pattern-cards.cjs +28 -2
  284. package/dist/hero-spiral-pattern-cards.js +28 -2
  285. package/dist/hero-split-icon-cards.cjs +34 -4
  286. package/dist/hero-split-icon-cards.js +34 -4
  287. package/dist/hero-split-image-newsletter.cjs +28 -2
  288. package/dist/hero-split-image-newsletter.js +28 -2
  289. package/dist/hero-split-spiral-shapes.cjs +28 -2
  290. package/dist/hero-split-spiral-shapes.js +28 -2
  291. package/dist/hero-startup-launch-cta.cjs +28 -2
  292. package/dist/hero-startup-launch-cta.js +28 -2
  293. package/dist/hero-stats-social-proof.cjs +34 -4
  294. package/dist/hero-stats-social-proof.js +34 -4
  295. package/dist/hero-tech-carousel.cjs +27 -1
  296. package/dist/hero-tech-carousel.js +27 -1
  297. package/dist/hero-ui-library-showcase.cjs +27 -1
  298. package/dist/hero-ui-library-showcase.js +27 -1
  299. package/dist/hero-video-background-dark.cjs +28 -2
  300. package/dist/hero-video-background-dark.js +28 -2
  301. package/dist/hero-video-dialog-gradient.cjs +27 -1
  302. package/dist/hero-video-dialog-gradient.js +27 -1
  303. package/dist/hero-welcome-asymmetric-images.cjs +30 -2
  304. package/dist/hero-welcome-asymmetric-images.js +30 -2
  305. package/dist/index.cjs +104 -36
  306. package/dist/index.d.cts +1 -1
  307. package/dist/index.d.ts +1 -1
  308. package/dist/index.js +102 -37
  309. package/dist/link-page-bento-layout.cjs +57 -28
  310. package/dist/link-page-bento-layout.d.cts +1 -5
  311. package/dist/link-page-bento-layout.d.ts +1 -5
  312. package/dist/link-page-bento-layout.js +57 -28
  313. package/dist/link-page-grid-cards.cjs +52 -23
  314. package/dist/link-page-grid-cards.d.cts +1 -5
  315. package/dist/link-page-grid-cards.d.ts +1 -5
  316. package/dist/link-page-grid-cards.js +52 -23
  317. package/dist/link-page-minimal-profile.cjs +46 -18
  318. package/dist/link-page-minimal-profile.d.cts +1 -5
  319. package/dist/link-page-minimal-profile.d.ts +1 -5
  320. package/dist/link-page-minimal-profile.js +46 -18
  321. package/dist/link-page-newsletter-social.cjs +53 -28
  322. package/dist/link-page-newsletter-social.d.cts +1 -5
  323. package/dist/link-page-newsletter-social.d.ts +1 -5
  324. package/dist/link-page-newsletter-social.js +53 -28
  325. package/dist/link-tree-block.cjs +122 -34
  326. package/dist/link-tree-block.d.cts +1 -8
  327. package/dist/link-tree-block.d.ts +1 -8
  328. package/dist/link-tree-block.js +122 -34
  329. package/dist/media-hover-ctas.cjs +28 -2
  330. package/dist/media-hover-ctas.js +28 -2
  331. package/dist/process-expandable-timeline.cjs +66 -10
  332. package/dist/process-expandable-timeline.js +66 -10
  333. package/dist/process-hover-cards.cjs +39 -6
  334. package/dist/process-hover-cards.js +39 -6
  335. package/dist/process-icon-timeline.cjs +53 -3
  336. package/dist/process-icon-timeline.js +53 -3
  337. package/dist/process-mission-principles.cjs +44 -6
  338. package/dist/process-mission-principles.js +44 -6
  339. package/dist/process-numbered-services.cjs +76 -22
  340. package/dist/process-numbered-services.js +76 -22
  341. package/dist/process-roadmap-timeline.cjs +63 -9
  342. package/dist/process-roadmap-timeline.js +63 -9
  343. package/dist/process-scroll-image.cjs +71 -32
  344. package/dist/process-scroll-image.js +71 -32
  345. package/dist/process-steps-grid.cjs +61 -5
  346. package/dist/process-steps-grid.js +61 -5
  347. package/dist/process-sticky-steps.cjs +49 -69
  348. package/dist/process-sticky-steps.d.cts +1 -13
  349. package/dist/process-sticky-steps.d.ts +1 -13
  350. package/dist/process-sticky-steps.js +49 -69
  351. package/dist/project-zigzag-layout.cjs +379 -3
  352. package/dist/project-zigzag-layout.d.cts +8 -1
  353. package/dist/project-zigzag-layout.d.ts +8 -1
  354. package/dist/project-zigzag-layout.js +380 -3
  355. package/dist/registry.cjs +2759 -2476
  356. package/dist/registry.js +2759 -2476
  357. package/dist/team-media-showcase.cjs +59 -4
  358. package/dist/team-media-showcase.d.cts +4 -0
  359. package/dist/team-media-showcase.d.ts +4 -0
  360. package/dist/team-media-showcase.js +59 -4
  361. package/dist/testimonials-carousel-image.d.cts +6 -0
  362. package/dist/testimonials-carousel-image.d.ts +6 -0
  363. package/dist/utils.cjs +58 -0
  364. package/dist/utils.d.cts +113 -1
  365. package/dist/utils.d.ts +113 -1
  366. package/dist/utils.js +56 -1
  367. package/package.json +1 -1
@@ -10,6 +10,58 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
10
10
  function cn(...inputs) {
11
11
  return twMerge(clsx(inputs));
12
12
  }
13
+ function getNestedCardBg(parentBg, variant = "muted", options) {
14
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
15
+ if (isDark) {
16
+ switch (variant) {
17
+ case "muted":
18
+ return "bg-background";
19
+ case "card":
20
+ return "bg-card";
21
+ case "accent":
22
+ return "bg-accent";
23
+ case "subtle":
24
+ return "bg-background/50";
25
+ }
26
+ } else {
27
+ switch (variant) {
28
+ case "muted":
29
+ return "bg-muted";
30
+ case "card":
31
+ return "bg-card";
32
+ case "accent":
33
+ return "bg-accent";
34
+ case "subtle":
35
+ return "bg-muted/50";
36
+ }
37
+ }
38
+ }
39
+ function getTextColor(parentBg, variant = "default", options) {
40
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
41
+ if (isDark) {
42
+ switch (variant) {
43
+ case "default":
44
+ return "text-foreground";
45
+ case "muted":
46
+ return "text-foreground/80";
47
+ case "subtle":
48
+ return "text-foreground/60";
49
+ case "accent":
50
+ return "text-accent-foreground";
51
+ }
52
+ } else {
53
+ switch (variant) {
54
+ case "default":
55
+ return "text-foreground";
56
+ case "muted":
57
+ return "text-muted-foreground";
58
+ case "subtle":
59
+ return "text-muted-foreground/70";
60
+ case "accent":
61
+ return "text-primary";
62
+ }
63
+ }
64
+ }
13
65
  function normalizePhoneNumber(input) {
14
66
  const trimmed = input.trim();
15
67
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -862,7 +914,7 @@ function HeroMinimalCenteredDark({
862
914
  className
863
915
  ),
864
916
  children: /* @__PURE__ */ jsxs("div", { className: cn("container flex flex-col items-center justify-center text-center", containerClassName), children: [
865
- badge && /* @__PURE__ */ jsxs("div", { className: cn("inline-flex items-center gap-2 rounded-full border border-border/50 bg-muted/30 px-4 py-2 text-sm text-muted-foreground", badgeClassName), children: [
917
+ badge && /* @__PURE__ */ jsxs("div", { className: cn("inline-flex items-center gap-2 rounded-full border border-border/50 px-4 py-2 text-sm", `${getNestedCardBg(background, "muted")}/30`, getTextColor(background, "muted"), badgeClassName), children: [
866
918
  showStatusDot && /* @__PURE__ */ jsxs("span", { className: "relative flex h-2 w-2", children: [
867
919
  /* @__PURE__ */ jsx("span", { className: "absolute inline-flex h-full w-full animate-ping rounded-full bg-success opacity-75" }),
868
920
  /* @__PURE__ */ jsx("span", { className: "relative inline-flex h-2 w-2 rounded-full bg-success" })
@@ -876,9 +928,9 @@ function HeroMinimalCenteredDark({
876
928
  " ",
877
929
  "is here"
878
930
  ] }) : null),
879
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-6 max-w-2xl text-lg text-muted-foreground md:text-xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
931
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-6 max-w-2xl text-lg md:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
880
932
  (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-10 flex flex-col gap-4 sm:flex-row", actionsClassName), children: renderActions }),
881
- (statsSlot || stats && stats.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-16 flex items-center gap-8 text-sm text-muted-foreground", statsClassName), children: renderStats })
933
+ (statsSlot || stats && stats.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-16 flex items-center gap-8 text-sm", getTextColor(background, "muted"), statsClassName), children: renderStats })
882
934
  ] })
883
935
  }
884
936
  );
@@ -62,6 +62,36 @@ function getNestedCardTextColor(parentBg, options) {
62
62
  const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
63
63
  return isDark ? "text-foreground" : "";
64
64
  }
65
+ function getTextColor(parentBg, variant = "default", options) {
66
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
67
+ if (isDark) {
68
+ switch (variant) {
69
+ case "default":
70
+ return "text-foreground";
71
+ case "muted":
72
+ return "text-foreground/80";
73
+ case "subtle":
74
+ return "text-foreground/60";
75
+ case "accent":
76
+ return "text-accent-foreground";
77
+ }
78
+ } else {
79
+ switch (variant) {
80
+ case "default":
81
+ return "text-foreground";
82
+ case "muted":
83
+ return "text-muted-foreground";
84
+ case "subtle":
85
+ return "text-muted-foreground/70";
86
+ case "accent":
87
+ return "text-primary";
88
+ }
89
+ }
90
+ }
91
+ function getAccentColor(parentBg, options) {
92
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
93
+ return isDark ? "text-accent-foreground" : "text-primary";
94
+ }
65
95
  function normalizePhoneNumber(input) {
66
96
  const trimmed = input.trim();
67
97
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -1025,8 +1055,8 @@ function HeroMobileAppDownload({
1025
1055
  const renderRating = React.useMemo(() => {
1026
1056
  if (ratingSlot) return ratingSlot;
1027
1057
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4 pt-4", children: [
1028
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1", children: [...Array(starCount)].map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/star", size: 16, className: "fill-primary text-primary" }, i)) }),
1029
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm text-muted-foreground", children: [
1058
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1", children: [...Array(starCount)].map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/star", size: 16, className: cn("fill-current", getAccentColor(background)) }, i)) }),
1059
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-sm", getTextColor(background, "muted")), children: [
1030
1060
  ratingValue,
1031
1061
  " ",
1032
1062
  ratingLabel
@@ -1044,7 +1074,7 @@ function HeroMobileAppDownload({
1044
1074
  notification.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex h-10 w-10 items-center justify-center rounded-full", notification.iconBgClass), children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: notification.icon, size: 20, className: notification.iconColorClass }) }),
1045
1075
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1046
1076
  notification.title && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold ", children: notification.title }),
1047
- notification.subtitle && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-muted-foreground", children: notification.subtitle })
1077
+ notification.subtitle && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-xs", getTextColor(background, "muted")), children: notification.subtitle })
1048
1078
  ] })
1049
1079
  ] }) });
1050
1080
  }, [notificationSlot, notification]);
@@ -1076,7 +1106,7 @@ function HeroMobileAppDownload({
1076
1106
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-8", contentClassName), children: [
1077
1107
  renderBadge,
1078
1108
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading })),
1079
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
1109
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
1080
1110
  renderStoreActions,
1081
1111
  renderRating
1082
1112
  ] }),
@@ -41,6 +41,36 @@ function getNestedCardTextColor(parentBg, options) {
41
41
  const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
42
42
  return isDark ? "text-foreground" : "";
43
43
  }
44
+ function getTextColor(parentBg, variant = "default", options) {
45
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
46
+ if (isDark) {
47
+ switch (variant) {
48
+ case "default":
49
+ return "text-foreground";
50
+ case "muted":
51
+ return "text-foreground/80";
52
+ case "subtle":
53
+ return "text-foreground/60";
54
+ case "accent":
55
+ return "text-accent-foreground";
56
+ }
57
+ } else {
58
+ switch (variant) {
59
+ case "default":
60
+ return "text-foreground";
61
+ case "muted":
62
+ return "text-muted-foreground";
63
+ case "subtle":
64
+ return "text-muted-foreground/70";
65
+ case "accent":
66
+ return "text-primary";
67
+ }
68
+ }
69
+ }
70
+ function getAccentColor(parentBg, options) {
71
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
72
+ return isDark ? "text-accent-foreground" : "text-primary";
73
+ }
44
74
  function normalizePhoneNumber(input) {
45
75
  const trimmed = input.trim();
46
76
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -1004,8 +1034,8 @@ function HeroMobileAppDownload({
1004
1034
  const renderRating = useMemo(() => {
1005
1035
  if (ratingSlot) return ratingSlot;
1006
1036
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4 pt-4", children: [
1007
- /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1", children: [...Array(starCount)].map((_, i) => /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/star", size: 16, className: "fill-primary text-primary" }, i)) }),
1008
- /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground", children: [
1037
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1", children: [...Array(starCount)].map((_, i) => /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/star", size: 16, className: cn("fill-current", getAccentColor(background)) }, i)) }),
1038
+ /* @__PURE__ */ jsxs("span", { className: cn("text-sm", getTextColor(background, "muted")), children: [
1009
1039
  ratingValue,
1010
1040
  " ",
1011
1041
  ratingLabel
@@ -1023,7 +1053,7 @@ function HeroMobileAppDownload({
1023
1053
  notification.icon && /* @__PURE__ */ jsx("div", { className: cn("flex h-10 w-10 items-center justify-center rounded-full", notification.iconBgClass), children: /* @__PURE__ */ jsx(DynamicIcon, { name: notification.icon, size: 20, className: notification.iconColorClass }) }),
1024
1054
  /* @__PURE__ */ jsxs("div", { children: [
1025
1055
  notification.title && /* @__PURE__ */ jsx("div", { className: "font-semibold ", children: notification.title }),
1026
- notification.subtitle && /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground", children: notification.subtitle })
1056
+ notification.subtitle && /* @__PURE__ */ jsx("div", { className: cn("text-xs", getTextColor(background, "muted")), children: notification.subtitle })
1027
1057
  ] })
1028
1058
  ] }) });
1029
1059
  }, [notificationSlot, notification]);
@@ -1055,7 +1085,7 @@ function HeroMobileAppDownload({
1055
1085
  /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-8", contentClassName), children: [
1056
1086
  renderBadge,
1057
1087
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("h1", { className: cn("text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading })),
1058
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-lg text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
1088
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-lg", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
1059
1089
  renderStoreActions,
1060
1090
  renderRating
1061
1091
  ] }),
@@ -31,6 +31,32 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
31
31
  function cn(...inputs) {
32
32
  return tailwindMerge.twMerge(clsx.clsx(inputs));
33
33
  }
34
+ function getTextColor(parentBg, variant = "default", options) {
35
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
36
+ if (isDark) {
37
+ switch (variant) {
38
+ case "default":
39
+ return "text-foreground";
40
+ case "muted":
41
+ return "text-foreground/80";
42
+ case "subtle":
43
+ return "text-foreground/60";
44
+ case "accent":
45
+ return "text-accent-foreground";
46
+ }
47
+ } else {
48
+ switch (variant) {
49
+ case "default":
50
+ return "text-foreground";
51
+ case "muted":
52
+ return "text-muted-foreground";
53
+ case "subtle":
54
+ return "text-muted-foreground/70";
55
+ case "accent":
56
+ return "text-primary";
57
+ }
58
+ }
59
+ }
34
60
  function normalizePhoneNumber(input) {
35
61
  const trimmed = input.trim();
36
62
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -865,7 +891,7 @@ function HeroNewsletterMinimal({
865
891
  const renderStats = React.useMemo(() => {
866
892
  if (statsSlot) return statsSlot;
867
893
  if (!stats || stats.length === 0) return null;
868
- return stats.map((stat, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-2 text-sm text-muted-foreground", stat.className), children: [
894
+ return stats.map((stat, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-2 text-sm", getTextColor(background, "muted"), stat.className), children: [
869
895
  stat.icon,
870
896
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: stat.value })
871
897
  ] }, index));
@@ -907,9 +933,9 @@ function HeroNewsletterMinimal({
907
933
  ),
908
934
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("container flex flex-col items-center justify-center text-center", containerClassName), children: [
909
935
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("max-w-3xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
910
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-6 max-w-xl text-lg text-muted-foreground md:text-xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
936
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-6 max-w-xl text-lg md:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
911
937
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-10 flex w-full max-w-md flex-col gap-4 sm:flex-row", formClassName), children: renderForm }),
912
- disclaimer && (typeof disclaimer === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-4 text-sm text-muted-foreground", disclaimerClassName), children: disclaimer }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: disclaimerClassName, children: disclaimer })),
938
+ disclaimer && (typeof disclaimer === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-4 text-sm", getTextColor(background, "muted"), disclaimerClassName), children: disclaimer }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: disclaimerClassName, children: disclaimer })),
913
939
  (statsSlot || stats && stats.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-16 flex flex-wrap items-center justify-center gap-8", statsClassName), children: renderStats })
914
940
  ] })
915
941
  }
@@ -10,6 +10,32 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
10
10
  function cn(...inputs) {
11
11
  return twMerge(clsx(inputs));
12
12
  }
13
+ function getTextColor(parentBg, variant = "default", options) {
14
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
15
+ if (isDark) {
16
+ switch (variant) {
17
+ case "default":
18
+ return "text-foreground";
19
+ case "muted":
20
+ return "text-foreground/80";
21
+ case "subtle":
22
+ return "text-foreground/60";
23
+ case "accent":
24
+ return "text-accent-foreground";
25
+ }
26
+ } else {
27
+ switch (variant) {
28
+ case "default":
29
+ return "text-foreground";
30
+ case "muted":
31
+ return "text-muted-foreground";
32
+ case "subtle":
33
+ return "text-muted-foreground/70";
34
+ case "accent":
35
+ return "text-primary";
36
+ }
37
+ }
38
+ }
13
39
  function normalizePhoneNumber(input) {
14
40
  const trimmed = input.trim();
15
41
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -844,7 +870,7 @@ function HeroNewsletterMinimal({
844
870
  const renderStats = useMemo(() => {
845
871
  if (statsSlot) return statsSlot;
846
872
  if (!stats || stats.length === 0) return null;
847
- return stats.map((stat, index) => /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2 text-sm text-muted-foreground", stat.className), children: [
873
+ return stats.map((stat, index) => /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2 text-sm", getTextColor(background, "muted"), stat.className), children: [
848
874
  stat.icon,
849
875
  /* @__PURE__ */ jsx("span", { children: stat.value })
850
876
  ] }, index));
@@ -886,9 +912,9 @@ function HeroNewsletterMinimal({
886
912
  ),
887
913
  children: /* @__PURE__ */ jsxs("div", { className: cn("container flex flex-col items-center justify-center text-center", containerClassName), children: [
888
914
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("max-w-3xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
889
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-6 max-w-xl text-lg text-muted-foreground md:text-xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
915
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-6 max-w-xl text-lg md:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
890
916
  /* @__PURE__ */ jsx("div", { className: cn("mt-10 flex w-full max-w-md flex-col gap-4 sm:flex-row", formClassName), children: renderForm }),
891
- disclaimer && (typeof disclaimer === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-sm text-muted-foreground", disclaimerClassName), children: disclaimer }) : /* @__PURE__ */ jsx("div", { className: disclaimerClassName, children: disclaimer })),
917
+ disclaimer && (typeof disclaimer === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-sm", getTextColor(background, "muted"), disclaimerClassName), children: disclaimer }) : /* @__PURE__ */ jsx("div", { className: disclaimerClassName, children: disclaimer })),
892
918
  (statsSlot || stats && stats.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-16 flex flex-wrap items-center justify-center gap-8", statsClassName), children: renderStats })
893
919
  ] })
894
920
  }
@@ -33,6 +33,36 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
33
33
  function cn(...inputs) {
34
34
  return tailwindMerge.twMerge(clsx.clsx(inputs));
35
35
  }
36
+ function getTextColor(parentBg, variant = "default", options) {
37
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
38
+ if (isDark) {
39
+ switch (variant) {
40
+ case "default":
41
+ return "text-foreground";
42
+ case "muted":
43
+ return "text-foreground/80";
44
+ case "subtle":
45
+ return "text-foreground/60";
46
+ case "accent":
47
+ return "text-accent-foreground";
48
+ }
49
+ } else {
50
+ switch (variant) {
51
+ case "default":
52
+ return "text-foreground";
53
+ case "muted":
54
+ return "text-muted-foreground";
55
+ case "subtle":
56
+ return "text-muted-foreground/70";
57
+ case "accent":
58
+ return "text-primary";
59
+ }
60
+ }
61
+ }
62
+ function getAccentColor(parentBg, options) {
63
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
64
+ return isDark ? "text-accent-foreground" : "text-primary";
65
+ }
36
66
  var svgCache = /* @__PURE__ */ new Map();
37
67
  function DynamicIcon({
38
68
  name,
@@ -980,17 +1010,17 @@ function HeroOverlayCtaGrid({
980
1010
  href: card.href,
981
1011
  className: "group flex items-center gap-4 px-6 py-6 transition-colors hover:bg-primary/5",
982
1012
  children: [
983
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex h-12 w-12 flex-none items-center justify-center rounded-full bg-primary/10 text-primary transition-colors group-hover:bg-primary group-hover:text-primary-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: card.icon, size: 22 }) }),
1013
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative flex h-12 w-12 flex-none items-center justify-center rounded-full transition-colors group-hover:text-primary-foreground", `${getAccentColor(background)}/10`, getAccentColor(background), `group-hover:${getAccentColor(background)}`), children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: card.icon, size: 22 }) }),
984
1014
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
985
1015
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base font-semibold ", children: card.label }),
986
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: card.subtitle })
1016
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm", getTextColor(background, "muted")), children: card.subtitle })
987
1017
  ] }),
988
1018
  /* @__PURE__ */ jsxRuntime.jsx(
989
1019
  DynamicIcon,
990
1020
  {
991
1021
  name: "lucide/arrow-right",
992
1022
  size: 18,
993
- className: "ml-auto flex-none text-primary"
1023
+ className: cn("ml-auto flex-none", getAccentColor(background))
994
1024
  }
995
1025
  )
996
1026
  ]
@@ -12,6 +12,36 @@ import { cva } from 'class-variance-authority';
12
12
  function cn(...inputs) {
13
13
  return twMerge(clsx(inputs));
14
14
  }
15
+ function getTextColor(parentBg, variant = "default", options) {
16
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
17
+ if (isDark) {
18
+ switch (variant) {
19
+ case "default":
20
+ return "text-foreground";
21
+ case "muted":
22
+ return "text-foreground/80";
23
+ case "subtle":
24
+ return "text-foreground/60";
25
+ case "accent":
26
+ return "text-accent-foreground";
27
+ }
28
+ } else {
29
+ switch (variant) {
30
+ case "default":
31
+ return "text-foreground";
32
+ case "muted":
33
+ return "text-muted-foreground";
34
+ case "subtle":
35
+ return "text-muted-foreground/70";
36
+ case "accent":
37
+ return "text-primary";
38
+ }
39
+ }
40
+ }
41
+ function getAccentColor(parentBg, options) {
42
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
43
+ return isDark ? "text-accent-foreground" : "text-primary";
44
+ }
15
45
  var svgCache = /* @__PURE__ */ new Map();
16
46
  function DynamicIcon({
17
47
  name,
@@ -959,17 +989,17 @@ function HeroOverlayCtaGrid({
959
989
  href: card.href,
960
990
  className: "group flex items-center gap-4 px-6 py-6 transition-colors hover:bg-primary/5",
961
991
  children: [
962
- /* @__PURE__ */ jsx("div", { className: "relative flex h-12 w-12 flex-none items-center justify-center rounded-full bg-primary/10 text-primary transition-colors group-hover:bg-primary group-hover:text-primary-foreground", children: /* @__PURE__ */ jsx(DynamicIcon, { name: card.icon, size: 22 }) }),
992
+ /* @__PURE__ */ jsx("div", { className: cn("relative flex h-12 w-12 flex-none items-center justify-center rounded-full transition-colors group-hover:text-primary-foreground", `${getAccentColor(background)}/10`, getAccentColor(background), `group-hover:${getAccentColor(background)}`), children: /* @__PURE__ */ jsx(DynamicIcon, { name: card.icon, size: 22 }) }),
963
993
  /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
964
994
  /* @__PURE__ */ jsx("p", { className: "text-base font-semibold ", children: card.label }),
965
- /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: card.subtitle })
995
+ /* @__PURE__ */ jsx("p", { className: cn("text-sm", getTextColor(background, "muted")), children: card.subtitle })
966
996
  ] }),
967
997
  /* @__PURE__ */ jsx(
968
998
  DynamicIcon,
969
999
  {
970
1000
  name: "lucide/arrow-right",
971
1001
  size: 18,
972
- className: "ml-auto flex-none text-primary"
1002
+ className: cn("ml-auto flex-none", getAccentColor(background))
973
1003
  }
974
1004
  )
975
1005
  ]
@@ -33,6 +33,32 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
33
33
  function cn(...inputs) {
34
34
  return tailwindMerge.twMerge(clsx.clsx(inputs));
35
35
  }
36
+ function getTextColor(parentBg, variant = "default", options) {
37
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
38
+ if (isDark) {
39
+ switch (variant) {
40
+ case "default":
41
+ return "text-foreground";
42
+ case "muted":
43
+ return "text-foreground/80";
44
+ case "subtle":
45
+ return "text-foreground/60";
46
+ case "accent":
47
+ return "text-accent-foreground";
48
+ }
49
+ } else {
50
+ switch (variant) {
51
+ case "default":
52
+ return "text-foreground";
53
+ case "muted":
54
+ return "text-muted-foreground";
55
+ case "subtle":
56
+ return "text-muted-foreground/70";
57
+ case "accent":
58
+ return "text-primary";
59
+ }
60
+ }
61
+ }
36
62
  var badgeVariants = classVarianceAuthority.cva(
37
63
  "inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
38
64
  {
@@ -968,11 +994,11 @@ function HeroPatternBadgeLogos({
968
994
  badge && /* @__PURE__ */ jsxRuntime.jsx("div", { className: badgeClassName, children: typeof badge === "string" ? /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "outline", className: "transition-colors hover:bg-secondary/20", children: badge }) : badge }),
969
995
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
970
996
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("mb-6 text-4xl font-bold tracking-tight text-pretty md:text-5xl lg:text-7xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
971
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mx-auto max-w-2xl text-muted-foreground md:text-lg lg:text-xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
997
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mx-auto max-w-2xl md:text-lg lg:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
972
998
  ] }),
973
999
  (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-6 flex items-center gap-4", actionsClassName), children: renderActions }),
974
1000
  (logosSlot || logos && logos.length > 0 || logosTagline) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mt-12 flex flex-col items-center gap-4 lg:mt-16", logosClassName), children: [
975
- logosTagline && (typeof logosTagline === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-center text-sm text-muted-foreground", children: logosTagline }) : logosTagline),
1001
+ logosTagline && (typeof logosTagline === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-center text-sm", getTextColor(background, "muted")), children: logosTagline }) : logosTagline),
976
1002
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 place-items-center items-center justify-center gap-6 opacity-80 sm:grid-cols-4 sm:gap-4", children: renderLogos })
977
1003
  ] })
978
1004
  ] }) }) })
@@ -12,6 +12,32 @@ import { Img } from '@page-speed/img';
12
12
  function cn(...inputs) {
13
13
  return twMerge(clsx(inputs));
14
14
  }
15
+ function getTextColor(parentBg, variant = "default", options) {
16
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
17
+ if (isDark) {
18
+ switch (variant) {
19
+ case "default":
20
+ return "text-foreground";
21
+ case "muted":
22
+ return "text-foreground/80";
23
+ case "subtle":
24
+ return "text-foreground/60";
25
+ case "accent":
26
+ return "text-accent-foreground";
27
+ }
28
+ } else {
29
+ switch (variant) {
30
+ case "default":
31
+ return "text-foreground";
32
+ case "muted":
33
+ return "text-muted-foreground";
34
+ case "subtle":
35
+ return "text-muted-foreground/70";
36
+ case "accent":
37
+ return "text-primary";
38
+ }
39
+ }
40
+ }
15
41
  var badgeVariants = cva(
16
42
  "inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
17
43
  {
@@ -947,11 +973,11 @@ function HeroPatternBadgeLogos({
947
973
  badge && /* @__PURE__ */ jsx("div", { className: badgeClassName, children: typeof badge === "string" ? /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "transition-colors hover:bg-secondary/20", children: badge }) : badge }),
948
974
  /* @__PURE__ */ jsxs("div", { children: [
949
975
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("mb-6 text-4xl font-bold tracking-tight text-pretty md:text-5xl lg:text-7xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
950
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mx-auto max-w-2xl text-muted-foreground md:text-lg lg:text-xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
976
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mx-auto max-w-2xl md:text-lg lg:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
951
977
  ] }),
952
978
  (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-6 flex items-center gap-4", actionsClassName), children: renderActions }),
953
979
  (logosSlot || logos && logos.length > 0 || logosTagline) && /* @__PURE__ */ jsxs("div", { className: cn("mt-12 flex flex-col items-center gap-4 lg:mt-16", logosClassName), children: [
954
- logosTagline && (typeof logosTagline === "string" ? /* @__PURE__ */ jsx("p", { className: "text-center text-sm text-muted-foreground", children: logosTagline }) : logosTagline),
980
+ logosTagline && (typeof logosTagline === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-center text-sm", getTextColor(background, "muted")), children: logosTagline }) : logosTagline),
955
981
  /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 place-items-center items-center justify-center gap-6 opacity-80 sm:grid-cols-4 sm:gap-4", children: renderLogos })
956
982
  ] })
957
983
  ] }) }) })
@@ -32,6 +32,36 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
32
32
  function cn(...inputs) {
33
33
  return tailwindMerge.twMerge(clsx.clsx(inputs));
34
34
  }
35
+ function getTextColor(parentBg, variant = "default", options) {
36
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
37
+ if (isDark) {
38
+ switch (variant) {
39
+ case "default":
40
+ return "text-foreground";
41
+ case "muted":
42
+ return "text-foreground/80";
43
+ case "subtle":
44
+ return "text-foreground/60";
45
+ case "accent":
46
+ return "text-accent-foreground";
47
+ }
48
+ } else {
49
+ switch (variant) {
50
+ case "default":
51
+ return "text-foreground";
52
+ case "muted":
53
+ return "text-muted-foreground";
54
+ case "subtle":
55
+ return "text-muted-foreground/70";
56
+ case "accent":
57
+ return "text-primary";
58
+ }
59
+ }
60
+ }
61
+ function getAccentColor(parentBg, options) {
62
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
63
+ return isDark ? "text-accent-foreground" : "text-primary";
64
+ }
35
65
  function normalizePhoneNumber(input) {
36
66
  const trimmed = input.trim();
37
67
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -889,7 +919,7 @@ function HeroPatternLogoTechStack({
889
919
  if (techLogosSlot) return techLogosSlot;
890
920
  if (!techLogos || techLogos.length === 0) return null;
891
921
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mt-20 flex flex-col items-center gap-5", techLogosClassName), children: [
892
- techStackLabel && (typeof techStackLabel === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-medium text-muted-foreground lg:text-left", children: techStackLabel }) : techStackLabel),
922
+ techStackLabel && (typeof techStackLabel === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("font-medium lg:text-left", getTextColor(background, "muted")), children: techStackLabel }) : techStackLabel),
893
923
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center justify-center gap-4", children: techLogos.map((techLogo, index) => {
894
924
  const techLogoSrc = typeof techLogo.src === "string" ? techLogo.src : techLogo.src.light;
895
925
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -940,9 +970,9 @@ function HeroPatternLogoTechStack({
940
970
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsxs("h1", { className: cn("mb-6 text-2xl font-bold tracking-tight text-pretty lg:text-5xl", headingClassName), children: [
941
971
  heading,
942
972
  " ",
943
- highlightedWord && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary", children: highlightedWord })
973
+ highlightedWord && /* @__PURE__ */ jsxRuntime.jsx("span", { className: getAccentColor(background), children: highlightedWord })
944
974
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("mb-6 text-2xl font-bold tracking-tight text-pretty lg:text-5xl", headingClassName), children: heading })),
945
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mx-auto max-w-3xl text-muted-foreground lg:text-xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
975
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mx-auto max-w-3xl lg:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
946
976
  ] }),
947
977
  renderActions,
948
978
  renderTechLogos