@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
@@ -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:")) {
@@ -973,7 +999,7 @@ function HeroProductivityLauncherVideo({
973
999
  const renderVersionInfo = React.useMemo(() => {
974
1000
  if (versionInfoSlot) return versionInfoSlot;
975
1001
  if (!versionInfo) return null;
976
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-6 text-xs text-muted-foreground", children: [
1002
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex gap-6 text-xs", getTextColor(background, "muted")), children: [
977
1003
  versionInfo.version && /* @__PURE__ */ jsxRuntime.jsx("span", { children: versionInfo.version }),
978
1004
  versionInfo.osRequirement && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative before:absolute before:-left-3 before:content-['|']", children: versionInfo.osRequirement }),
979
1005
  versionInfo.installMethod && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative before:absolute before:-left-3 before:content-['|']", children: /* @__PURE__ */ jsxRuntime.jsx("button", { onClick: versionInfo.installAction, children: versionInfo.installMethod }) })
@@ -989,7 +1015,7 @@ function HeroProductivityLauncherVideo({
989
1015
  className: "group relative mt-10 flex h-8 items-center gap-3 overflow-hidden rounded-full border border-border/50 bg-background px-3 py-1 text-sm font-medium",
990
1016
  children: [
991
1017
  secondaryCta.primaryText && /* @__PURE__ */ jsxRuntime.jsx("span", { children: secondaryCta.primaryText }),
992
- secondaryCta.secondaryText && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1 text-muted-foreground", children: [
1018
+ secondaryCta.secondaryText && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("flex items-center gap-1", getTextColor(background, "muted")), children: [
993
1019
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: secondaryCta.secondaryText }),
994
1020
  /* @__PURE__ */ jsxRuntime.jsx(
995
1021
  DynamicIcon,
@@ -1029,7 +1055,7 @@ function HeroProductivityLauncherVideo({
1029
1055
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative z-20 container max-w-204.5", contentClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center", children: [
1030
1056
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-8 px-4 pt-52 pb-32 md:pb-52", children: [
1031
1057
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-100 sm:max-w-135", children: heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-center text-4xl leading-tight font-semibold [text-shadow:0_4px_4px_rgba(0,0,0,0.15)] sm:text-5xl md:text-[4rem]", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-center text-4xl leading-tight font-semibold [text-shadow:0_4px_4px_rgba(0,0,0,0.15)] sm:text-5xl md:text-[4rem]", headingClassName), children: heading })) }),
1032
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-90 md:max-w-full", children: description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-center text-sm leading-normal tracking-tight text-balance text-muted-foreground [text-shadow:0_4px_4px_rgba(0,0,0,0.25)] md:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })) })
1058
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-90 md:max-w-full", children: description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-center text-sm leading-normal tracking-tight text-balance [text-shadow:0_4px_4px_rgba(0,0,0,0.25)] md:text-lg", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })) })
1033
1059
  ] }),
1034
1060
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-4", children: [
1035
1061
  renderActions,
@@ -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:")) {
@@ -952,7 +978,7 @@ function HeroProductivityLauncherVideo({
952
978
  const renderVersionInfo = useMemo(() => {
953
979
  if (versionInfoSlot) return versionInfoSlot;
954
980
  if (!versionInfo) return null;
955
- return /* @__PURE__ */ jsxs("div", { className: "flex gap-6 text-xs text-muted-foreground", children: [
981
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex gap-6 text-xs", getTextColor(background, "muted")), children: [
956
982
  versionInfo.version && /* @__PURE__ */ jsx("span", { children: versionInfo.version }),
957
983
  versionInfo.osRequirement && /* @__PURE__ */ jsx("span", { className: "relative before:absolute before:-left-3 before:content-['|']", children: versionInfo.osRequirement }),
958
984
  versionInfo.installMethod && /* @__PURE__ */ jsx("span", { className: "relative before:absolute before:-left-3 before:content-['|']", children: /* @__PURE__ */ jsx("button", { onClick: versionInfo.installAction, children: versionInfo.installMethod }) })
@@ -968,7 +994,7 @@ function HeroProductivityLauncherVideo({
968
994
  className: "group relative mt-10 flex h-8 items-center gap-3 overflow-hidden rounded-full border border-border/50 bg-background px-3 py-1 text-sm font-medium",
969
995
  children: [
970
996
  secondaryCta.primaryText && /* @__PURE__ */ jsx("span", { children: secondaryCta.primaryText }),
971
- secondaryCta.secondaryText && /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1 text-muted-foreground", children: [
997
+ secondaryCta.secondaryText && /* @__PURE__ */ jsxs("span", { className: cn("flex items-center gap-1", getTextColor(background, "muted")), children: [
972
998
  /* @__PURE__ */ jsx("span", { children: secondaryCta.secondaryText }),
973
999
  /* @__PURE__ */ jsx(
974
1000
  DynamicIcon,
@@ -1008,7 +1034,7 @@ function HeroProductivityLauncherVideo({
1008
1034
  /* @__PURE__ */ jsx("div", { className: cn("relative z-20 container max-w-204.5", contentClassName), children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center", children: [
1009
1035
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-8 px-4 pt-52 pb-32 md:pb-52", children: [
1010
1036
  /* @__PURE__ */ jsx("div", { className: "max-w-100 sm:max-w-135", children: heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("text-center text-4xl leading-tight font-semibold [text-shadow:0_4px_4px_rgba(0,0,0,0.15)] sm:text-5xl md:text-[4rem]", headingClassName), children: heading }) : /* @__PURE__ */ jsx("h1", { className: cn("text-center text-4xl leading-tight font-semibold [text-shadow:0_4px_4px_rgba(0,0,0,0.15)] sm:text-5xl md:text-[4rem]", headingClassName), children: heading })) }),
1011
- /* @__PURE__ */ jsx("div", { className: "max-w-90 md:max-w-full", children: description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-center text-sm leading-normal tracking-tight text-balance text-muted-foreground [text-shadow:0_4px_4px_rgba(0,0,0,0.25)] md:text-lg", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })) })
1037
+ /* @__PURE__ */ jsx("div", { className: "max-w-90 md:max-w-full", children: description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-center text-sm leading-normal tracking-tight text-balance [text-shadow:0_4px_4px_rgba(0,0,0,0.25)] md:text-lg", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })) })
1012
1038
  ] }),
1013
1039
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-4", children: [
1014
1040
  renderActions,
@@ -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:")) {
@@ -1010,7 +1040,7 @@ function HeroSaasDashboardPreview({
1010
1040
  {
1011
1041
  name: badgeIcon,
1012
1042
  size: 16,
1013
- className: "text-primary"
1043
+ className: getAccentColor(background)
1014
1044
  }
1015
1045
  ),
1016
1046
  badgeText && /* @__PURE__ */ jsxRuntime.jsx("span", { children: badgeText })
@@ -1040,7 +1070,7 @@ function HeroSaasDashboardPreview({
1040
1070
  }
1041
1071
  )
1042
1072
  ] }) }),
1043
- emailForm.helperText && (typeof emailForm.helperText === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 text-sm text-muted-foreground", children: emailForm.helperText }) : emailForm.helperText)
1073
+ emailForm.helperText && (typeof emailForm.helperText === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-4 text-sm", getTextColor(background, "muted")), children: emailForm.helperText }) : emailForm.helperText)
1044
1074
  ] });
1045
1075
  }, [emailFormSlot, emailForm]);
1046
1076
  const renderBrowserPreview = React.useMemo(() => {
@@ -1061,7 +1091,7 @@ function HeroSaasDashboardPreview({
1061
1091
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-3 w-3 rounded-full bg-accent" }),
1062
1092
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-3 w-3 rounded-full bg-success" })
1063
1093
  ] }),
1064
- browserPreview.url && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 text-center text-sm text-muted-foreground", children: browserPreview.url })
1094
+ browserPreview.url && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex-1 text-center text-sm", getTextColor(background, "muted")), children: browserPreview.url })
1065
1095
  ] }),
1066
1096
  browserPreview.image && /* @__PURE__ */ jsxRuntime.jsx(
1067
1097
  img.Img,
@@ -1087,7 +1117,7 @@ function HeroSaasDashboardPreview({
1087
1117
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto max-w-4xl text-center", headerClassName), children: [
1088
1118
  renderBadge,
1089
1119
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("mt-8 text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("mt-8 text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading })),
1090
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-6 text-lg text-muted-foreground md:text-xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
1120
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-6 text-lg md:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
1091
1121
  renderEmailForm
1092
1122
  ] }),
1093
1123
  renderBrowserPreview
@@ -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:")) {
@@ -989,7 +1019,7 @@ function HeroSaasDashboardPreview({
989
1019
  {
990
1020
  name: badgeIcon,
991
1021
  size: 16,
992
- className: "text-primary"
1022
+ className: getAccentColor(background)
993
1023
  }
994
1024
  ),
995
1025
  badgeText && /* @__PURE__ */ jsx("span", { children: badgeText })
@@ -1019,7 +1049,7 @@ function HeroSaasDashboardPreview({
1019
1049
  }
1020
1050
  )
1021
1051
  ] }) }),
1022
- emailForm.helperText && (typeof emailForm.helperText === "string" ? /* @__PURE__ */ jsx("p", { className: "mt-4 text-sm text-muted-foreground", children: emailForm.helperText }) : emailForm.helperText)
1052
+ emailForm.helperText && (typeof emailForm.helperText === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-sm", getTextColor(background, "muted")), children: emailForm.helperText }) : emailForm.helperText)
1023
1053
  ] });
1024
1054
  }, [emailFormSlot, emailForm]);
1025
1055
  const renderBrowserPreview = useMemo(() => {
@@ -1040,7 +1070,7 @@ function HeroSaasDashboardPreview({
1040
1070
  /* @__PURE__ */ jsx("div", { className: "h-3 w-3 rounded-full bg-accent" }),
1041
1071
  /* @__PURE__ */ jsx("div", { className: "h-3 w-3 rounded-full bg-success" })
1042
1072
  ] }),
1043
- browserPreview.url && /* @__PURE__ */ jsx("div", { className: "flex-1 text-center text-sm text-muted-foreground", children: browserPreview.url })
1073
+ browserPreview.url && /* @__PURE__ */ jsx("div", { className: cn("flex-1 text-center text-sm", getTextColor(background, "muted")), children: browserPreview.url })
1044
1074
  ] }),
1045
1075
  browserPreview.image && /* @__PURE__ */ jsx(
1046
1076
  Img,
@@ -1066,7 +1096,7 @@ function HeroSaasDashboardPreview({
1066
1096
  /* @__PURE__ */ jsxs("div", { className: cn("mx-auto max-w-4xl text-center", headerClassName), children: [
1067
1097
  renderBadge,
1068
1098
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("mt-8 text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("h1", { className: cn("mt-8 text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", headingClassName), children: heading })),
1069
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-6 text-lg text-muted-foreground md:text-xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
1099
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-6 text-lg md:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
1070
1100
  renderEmailForm
1071
1101
  ] }),
1072
1102
  renderBrowserPreview
@@ -35,6 +35,54 @@ var AspectRatioPrimitive__namespace = /*#__PURE__*/_interopNamespace(AspectRatio
35
35
  function cn(...inputs) {
36
36
  return tailwindMerge.twMerge(clsx.clsx(inputs));
37
37
  }
38
+ function getTextColor(parentBg, variant = "default", options) {
39
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
40
+ if (isDark) {
41
+ switch (variant) {
42
+ case "default":
43
+ return "text-foreground";
44
+ case "muted":
45
+ return "text-foreground/80";
46
+ case "subtle":
47
+ return "text-foreground/60";
48
+ case "accent":
49
+ return "text-accent-foreground";
50
+ }
51
+ } else {
52
+ switch (variant) {
53
+ case "default":
54
+ return "text-foreground";
55
+ case "muted":
56
+ return "text-muted-foreground";
57
+ case "subtle":
58
+ return "text-muted-foreground/70";
59
+ case "accent":
60
+ return "text-primary";
61
+ }
62
+ }
63
+ }
64
+ function getBorderColor(parentBg, variant = "default", options) {
65
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
66
+ if (isDark) {
67
+ switch (variant) {
68
+ case "default":
69
+ return "border-foreground/20";
70
+ case "muted":
71
+ return "border-foreground/10";
72
+ case "accent":
73
+ return "border-accent-foreground";
74
+ }
75
+ } else {
76
+ switch (variant) {
77
+ case "default":
78
+ return "border-border";
79
+ case "muted":
80
+ return "border-muted";
81
+ case "accent":
82
+ return "border-primary";
83
+ }
84
+ }
85
+ }
38
86
  function AspectRatio({
39
87
  ...props
40
88
  }) {
@@ -460,12 +508,12 @@ function HeroSharedInboxLayered({
460
508
  return /* @__PURE__ */ jsxRuntime.jsx(
461
509
  Section,
462
510
  {
463
- className: cn("relative border-b border-muted bg-background", className),
511
+ className: cn("relative border-b bg-background", getBorderColor(background, "muted"), className),
464
512
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("container pt-10", containerClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 items-center gap-2 md:gap-4 lg:grid-cols-2", children: [
465
513
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex w-full max-w-125 flex-col gap-9 lg:max-w-150 lg:py-[20%] xl:py-[26%]", contentClassName), children: [
466
- subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-mono text-[clamp(0.875rem,0.875vw,1rem)] text-muted-foreground", children: subtitle }) : subtitle),
514
+ subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("font-mono text-[clamp(0.875rem,0.875vw,1rem)]", getTextColor(background, "muted")), children: subtitle }) : subtitle),
467
515
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-[clamp(3.5rem,calc(6.5vw+2.3rem),9.5rem)] leading-[0.85] tracking-[-0.03em] ", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-[clamp(3.5rem,calc(6.5vw+2.3rem),9.5rem)] leading-[0.85] tracking-[-0.03em] ", headingClassName), children: heading })),
468
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-[clamp(1.125rem,1.125vw,1.4rem)] leading-normal text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
516
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-[clamp(1.125rem,1.125vw,1.4rem)] leading-normal", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
469
517
  ] }),
470
518
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: renderLayeredImages })
471
519
  ] }) })
@@ -10,6 +10,54 @@ import { jsx, jsxs } 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
+ }
39
+ function getBorderColor(parentBg, variant = "default", options) {
40
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
41
+ if (isDark) {
42
+ switch (variant) {
43
+ case "default":
44
+ return "border-foreground/20";
45
+ case "muted":
46
+ return "border-foreground/10";
47
+ case "accent":
48
+ return "border-accent-foreground";
49
+ }
50
+ } else {
51
+ switch (variant) {
52
+ case "default":
53
+ return "border-border";
54
+ case "muted":
55
+ return "border-muted";
56
+ case "accent":
57
+ return "border-primary";
58
+ }
59
+ }
60
+ }
13
61
  function AspectRatio({
14
62
  ...props
15
63
  }) {
@@ -435,12 +483,12 @@ function HeroSharedInboxLayered({
435
483
  return /* @__PURE__ */ jsx(
436
484
  Section,
437
485
  {
438
- className: cn("relative border-b border-muted bg-background", className),
486
+ className: cn("relative border-b bg-background", getBorderColor(background, "muted"), className),
439
487
  children: /* @__PURE__ */ jsx("div", { className: cn("container pt-10", containerClassName), children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 items-center gap-2 md:gap-4 lg:grid-cols-2", children: [
440
488
  /* @__PURE__ */ jsxs("div", { className: cn("flex w-full max-w-125 flex-col gap-9 lg:max-w-150 lg:py-[20%] xl:py-[26%]", contentClassName), children: [
441
- subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsx("p", { className: "font-mono text-[clamp(0.875rem,0.875vw,1rem)] text-muted-foreground", children: subtitle }) : subtitle),
489
+ subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsx("p", { className: cn("font-mono text-[clamp(0.875rem,0.875vw,1rem)]", getTextColor(background, "muted")), children: subtitle }) : subtitle),
442
490
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("text-[clamp(3.5rem,calc(6.5vw+2.3rem),9.5rem)] leading-[0.85] tracking-[-0.03em] ", headingClassName), children: heading }) : /* @__PURE__ */ jsx("h1", { className: cn("text-[clamp(3.5rem,calc(6.5vw+2.3rem),9.5rem)] leading-[0.85] tracking-[-0.03em] ", headingClassName), children: heading })),
443
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-[clamp(1.125rem,1.125vw,1.4rem)] leading-normal text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
491
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-[clamp(1.125rem,1.125vw,1.4rem)] leading-normal", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
444
492
  ] }),
445
493
  /* @__PURE__ */ jsx("div", { children: renderLayeredImages })
446
494
  ] }) })
@@ -32,6 +32,32 @@ 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
+ }
35
61
  function normalizePhoneNumber(input) {
36
62
  const trimmed = input.trim();
37
63
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -878,7 +904,7 @@ function HeroSimpleCenteredImage({
878
904
  children: [
879
905
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("container flex flex-col items-center text-center", containerClassName, contentClassName), children: [
880
906
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("my-3 text-3xl font-bold text-pretty sm:text-4xl md:my-6 lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
881
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-6 max-w-xl text-muted-foreground lg:mb-12 lg:text-2xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
907
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-6 max-w-xl lg:mb-12 lg:text-2xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
882
908
  (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-6 flex gap-2 lg:mb-12", actionsClassName), children: renderActions })
883
909
  ] }),
884
910
  imageSrc && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "container", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("aspect-video mask-[linear-gradient(#000_80%,transparent_100%)]", imageWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -11,6 +11,32 @@ import { Img } from '@page-speed/img';
11
11
  function cn(...inputs) {
12
12
  return twMerge(clsx(inputs));
13
13
  }
14
+ function getTextColor(parentBg, variant = "default", options) {
15
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
16
+ if (isDark) {
17
+ switch (variant) {
18
+ case "default":
19
+ return "text-foreground";
20
+ case "muted":
21
+ return "text-foreground/80";
22
+ case "subtle":
23
+ return "text-foreground/60";
24
+ case "accent":
25
+ return "text-accent-foreground";
26
+ }
27
+ } else {
28
+ switch (variant) {
29
+ case "default":
30
+ return "text-foreground";
31
+ case "muted":
32
+ return "text-muted-foreground";
33
+ case "subtle":
34
+ return "text-muted-foreground/70";
35
+ case "accent":
36
+ return "text-primary";
37
+ }
38
+ }
39
+ }
14
40
  function normalizePhoneNumber(input) {
15
41
  const trimmed = input.trim();
16
42
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -857,7 +883,7 @@ function HeroSimpleCenteredImage({
857
883
  children: [
858
884
  /* @__PURE__ */ jsxs("div", { className: cn("container flex flex-col items-center text-center", containerClassName, contentClassName), children: [
859
885
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("my-3 text-3xl font-bold text-pretty sm:text-4xl md:my-6 lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
860
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mb-6 max-w-xl text-muted-foreground lg:mb-12 lg:text-2xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
886
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mb-6 max-w-xl lg:mb-12 lg:text-2xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
861
887
  (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mb-6 flex gap-2 lg:mb-12", actionsClassName), children: renderActions })
862
888
  ] }),
863
889
  imageSrc && /* @__PURE__ */ jsx("div", { className: "container", children: /* @__PURE__ */ jsx("div", { className: cn("aspect-video mask-[linear-gradient(#000_80%,transparent_100%)]", imageWrapperClassName), children: /* @__PURE__ */ jsx(
@@ -36,6 +36,54 @@ var DialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(DialogPrimitive)
36
36
  function cn(...inputs) {
37
37
  return tailwindMerge.twMerge(clsx.clsx(inputs));
38
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
+ }
65
+ function getBorderColor(parentBg, variant = "default", options) {
66
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
67
+ if (isDark) {
68
+ switch (variant) {
69
+ case "default":
70
+ return "border-foreground/20";
71
+ case "muted":
72
+ return "border-foreground/10";
73
+ case "accent":
74
+ return "border-accent-foreground";
75
+ }
76
+ } else {
77
+ switch (variant) {
78
+ case "default":
79
+ return "border-border";
80
+ case "muted":
81
+ return "border-muted";
82
+ case "accent":
83
+ return "border-primary";
84
+ }
85
+ }
86
+ }
39
87
  function normalizePhoneNumber(input) {
40
88
  const trimmed = input.trim();
41
89
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -1106,7 +1154,7 @@ function HeroSoftwareGrowthVideoDialog({
1106
1154
  { index: 2, className: "absolute -bottom-[14%] left-[51%] w-[38.19%] max-w-137.5", ratio: 1.686153846 / 1 },
1107
1155
  { index: 3, className: "absolute -bottom-[30%] left-[10.7%] w-[38.19%] max-w-137.5", ratio: 1.415041783 / 1 }
1108
1156
  ];
1109
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full py-[16%]", showcaseClassName), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-muted2 relative aspect-[2.716981132/1] w-full border", children: imageConfigs.map(({ index, className: posClassName, ratio }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: posClassName, children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio, children: /* @__PURE__ */ jsxRuntime.jsx(
1157
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full py-[16%]", showcaseClassName), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative aspect-[2.716981132/1] w-full border", getBorderColor(background, "muted")), children: imageConfigs.map(({ index, className: posClassName, ratio }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: posClassName, children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio, children: /* @__PURE__ */ jsxRuntime.jsx(
1110
1158
  img.Img,
1111
1159
  {
1112
1160
  src: showcaseImages[index].src,
@@ -1124,7 +1172,7 @@ function HeroSoftwareGrowthVideoDialog({
1124
1172
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("container max-w-[1440px]", containerClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
1125
1173
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center gap-8", children: [
1126
1174
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("max-w-[1000px] text-center text-[3.125rem] leading-none md:text-[4.25rem] lg:text-[5.5rem]", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("max-w-[1000px] text-center text-[3.125rem] leading-none md:text-[4.25rem] lg:text-[5.5rem]", headingClassName), children: heading })),
1127
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("max-w-212.5 text-center text-lg leading-snug text-muted-foreground md:text-xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
1175
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("max-w-212.5 text-center text-lg leading-snug md:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
1128
1176
  renderActions
1129
1177
  ] }),
1130
1178
  renderShowcaseImages