@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
@@ -13,6 +13,54 @@ import * as TabsPrimitive from '@radix-ui/react-tabs';
13
13
  function cn(...inputs) {
14
14
  return twMerge(clsx(inputs));
15
15
  }
16
+ function getTextColor(parentBg, variant = "default", options) {
17
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
18
+ if (isDark) {
19
+ switch (variant) {
20
+ case "default":
21
+ return "text-foreground";
22
+ case "muted":
23
+ return "text-foreground/80";
24
+ case "subtle":
25
+ return "text-foreground/60";
26
+ case "accent":
27
+ return "text-accent-foreground";
28
+ }
29
+ } else {
30
+ switch (variant) {
31
+ case "default":
32
+ return "text-foreground";
33
+ case "muted":
34
+ return "text-muted-foreground";
35
+ case "subtle":
36
+ return "text-muted-foreground/70";
37
+ case "accent":
38
+ return "text-primary";
39
+ }
40
+ }
41
+ }
42
+ function getBorderColor(parentBg, variant = "default", options) {
43
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
44
+ if (isDark) {
45
+ switch (variant) {
46
+ case "default":
47
+ return "border-foreground/20";
48
+ case "muted":
49
+ return "border-foreground/10";
50
+ case "accent":
51
+ return "border-accent-foreground";
52
+ }
53
+ } else {
54
+ switch (variant) {
55
+ case "default":
56
+ return "border-border";
57
+ case "muted":
58
+ return "border-muted";
59
+ case "accent":
60
+ return "border-primary";
61
+ }
62
+ }
63
+ }
16
64
  var svgCache = /* @__PURE__ */ new Map();
17
65
  function DynamicIcon({
18
66
  name,
@@ -1112,7 +1160,8 @@ function FeatureIconTabsContent({
1112
1160
  {
1113
1161
  value: tab.value,
1114
1162
  className: cn(
1115
- "flex shrink-0 items-center gap-2 rounded-lg border border-border px-4 py-2.5 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground data-[state=active]:border-primary data-[state=active]:bg-primary data-[state=active]:text-primary-foreground",
1163
+ "flex shrink-0 items-center gap-2 rounded-lg border border-border px-4 py-2.5 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground data-[state=active]:bg-primary data-[state=active]:text-primary-foreground",
1164
+ `data-[state=active]:${getBorderColor(background, "accent")}`,
1116
1165
  tabTriggerClassName,
1117
1166
  tab.className
1118
1167
  ),
@@ -1191,7 +1240,8 @@ function FeatureIconTabsContent({
1191
1240
  "p",
1192
1241
  {
1193
1242
  className: cn(
1194
- "text-muted-foreground lg:text-lg",
1243
+ "lg:text-lg",
1244
+ getTextColor(background, "muted"),
1195
1245
  content.descriptionClassName
1196
1246
  ),
1197
1247
  children: content.description
@@ -1200,7 +1250,8 @@ function FeatureIconTabsContent({
1200
1250
  "div",
1201
1251
  {
1202
1252
  className: cn(
1203
- "text-muted-foreground lg:text-lg",
1253
+ "lg:text-lg",
1254
+ getTextColor(background, "muted"),
1204
1255
  content.descriptionClassName
1205
1256
  ),
1206
1257
  children: content.description
@@ -1268,10 +1319,10 @@ function FeatureIconTabsContent({
1268
1319
  children: heading
1269
1320
  }
1270
1321
  )),
1271
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsx(
1322
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn(getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx(
1272
1323
  "div",
1273
1324
  {
1274
- className: cn("text-muted-foreground", descriptionClassName),
1325
+ className: cn(getTextColor(background, "muted"), descriptionClassName),
1275
1326
  children: description
1276
1327
  }
1277
1328
  ))
@@ -34,6 +34,32 @@ var AvatarPrimitive__namespace = /*#__PURE__*/_interopNamespace(AvatarPrimitive)
34
34
  function cn(...inputs) {
35
35
  return tailwindMerge.twMerge(clsx.clsx(inputs));
36
36
  }
37
+ function getTextColor(parentBg, variant = "default", options) {
38
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
39
+ if (isDark) {
40
+ switch (variant) {
41
+ case "default":
42
+ return "text-foreground";
43
+ case "muted":
44
+ return "text-foreground/80";
45
+ case "subtle":
46
+ return "text-foreground/60";
47
+ case "accent":
48
+ return "text-accent-foreground";
49
+ }
50
+ } else {
51
+ switch (variant) {
52
+ case "default":
53
+ return "text-foreground";
54
+ case "muted":
55
+ return "text-muted-foreground";
56
+ case "subtle":
57
+ return "text-muted-foreground/70";
58
+ case "accent":
59
+ return "text-primary";
60
+ }
61
+ }
62
+ }
37
63
  var svgCache = /* @__PURE__ */ new Map();
38
64
  function DynamicIcon({
39
65
  name,
@@ -1056,7 +1082,7 @@ function FeatureImageCardsThreeColumn({
1056
1082
  containerClassName,
1057
1083
  children: [
1058
1084
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("mb-4 text-center text-4xl font-semibold", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-4 text-center text-4xl font-semibold", titleClassName), children: title })),
1059
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-center text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-center text-muted-foreground", descriptionClassName), children: description })),
1085
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-center", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-center", getTextColor(background, "muted"), descriptionClassName), children: description })),
1060
1086
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("grid gap-5 pt-14 xl:grid-cols-3", gridClassName), children: cardsContent })
1061
1087
  ]
1062
1088
  }
@@ -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 svgCache = /* @__PURE__ */ new Map();
16
42
  function DynamicIcon({
17
43
  name,
@@ -1034,7 +1060,7 @@ function FeatureImageCardsThreeColumn({
1034
1060
  containerClassName,
1035
1061
  children: [
1036
1062
  title && (typeof title === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("mb-4 text-center text-4xl font-semibold", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: cn("mb-4 text-center text-4xl font-semibold", titleClassName), children: title })),
1037
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-center text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("text-center text-muted-foreground", descriptionClassName), children: description })),
1063
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-center", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("text-center", getTextColor(background, "muted"), descriptionClassName), children: description })),
1038
1064
  /* @__PURE__ */ jsx("div", { className: cn("grid gap-5 pt-14 xl:grid-cols-3", gridClassName), children: cardsContent })
1039
1065
  ]
1040
1066
  }
@@ -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
  var svgCache = /* @__PURE__ */ new Map();
36
62
  function DynamicIcon({
37
63
  name,
@@ -984,7 +1010,7 @@ function FeatureIntegrationCards({
984
1010
  ] }),
985
1011
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
986
1012
  integration.title && (typeof integration.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("font-medium md:text-lg", integration.titleClassName), children: integration.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("font-medium md:text-lg", integration.titleClassName), children: integration.title })),
987
- integration.description && (typeof integration.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm text-muted-foreground md:text-base", integration.descriptionClassName), children: integration.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm text-muted-foreground md:text-base", integration.descriptionClassName), children: integration.description }))
1013
+ integration.description && (typeof integration.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm md:text-base", getTextColor(background, "muted"), integration.descriptionClassName), children: integration.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm md:text-base", getTextColor(background, "muted"), integration.descriptionClassName), children: integration.description }))
988
1014
  ] })
989
1015
  ] });
990
1016
  if (integration.link) {
@@ -1021,7 +1047,7 @@ function FeatureIntegrationCards({
1021
1047
  children: [
1022
1048
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto mb-12 flex max-w-3xl flex-col items-center gap-4 text-center", headerClassName), children: [
1023
1049
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-3xl font-semibold md:text-4xl", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-3xl font-semibold md:text-4xl", titleClassName), children: title })),
1024
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-muted-foreground", descriptionClassName), children: description }))
1050
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn(getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(getTextColor(background, "muted"), descriptionClassName), children: description }))
1025
1051
  ] }),
1026
1052
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("grid gap-6 sm:grid-cols-2 lg:grid-cols-4", gridClassName), children: integrationsContent })
1027
1053
  ]
@@ -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
  var svgCache = /* @__PURE__ */ new Map();
15
41
  function DynamicIcon({
16
42
  name,
@@ -963,7 +989,7 @@ function FeatureIntegrationCards({
963
989
  ] }),
964
990
  /* @__PURE__ */ jsxs("div", { children: [
965
991
  integration.title && (typeof integration.title === "string" ? /* @__PURE__ */ jsx("h3", { className: cn("font-medium md:text-lg", integration.titleClassName), children: integration.title }) : /* @__PURE__ */ jsx("div", { className: cn("font-medium md:text-lg", integration.titleClassName), children: integration.title })),
966
- integration.description && (typeof integration.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm text-muted-foreground md:text-base", integration.descriptionClassName), children: integration.description }) : /* @__PURE__ */ jsx("div", { className: cn("text-sm text-muted-foreground md:text-base", integration.descriptionClassName), children: integration.description }))
992
+ integration.description && (typeof integration.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm md:text-base", getTextColor(background, "muted"), integration.descriptionClassName), children: integration.description }) : /* @__PURE__ */ jsx("div", { className: cn("text-sm md:text-base", getTextColor(background, "muted"), integration.descriptionClassName), children: integration.description }))
967
993
  ] })
968
994
  ] });
969
995
  if (integration.link) {
@@ -1000,7 +1026,7 @@ function FeatureIntegrationCards({
1000
1026
  children: [
1001
1027
  /* @__PURE__ */ jsxs("div", { className: cn("mx-auto mb-12 flex max-w-3xl flex-col items-center gap-4 text-center", headerClassName), children: [
1002
1028
  title && (typeof title === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-semibold md:text-4xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: cn("text-3xl font-semibold md:text-4xl", titleClassName), children: title })),
1003
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("text-muted-foreground", descriptionClassName), children: description }))
1029
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn(getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn(getTextColor(background, "muted"), descriptionClassName), children: description }))
1004
1030
  ] }),
1005
1031
  /* @__PURE__ */ jsx("div", { className: cn("grid gap-6 sm:grid-cols-2 lg:grid-cols-4", gridClassName), children: integrationsContent })
1006
1032
  ]
@@ -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
  var svgCache = /* @__PURE__ */ new Map();
35
61
  function DynamicIcon({
36
62
  name,
@@ -975,14 +1001,14 @@ function FeaturePatternGridLinks({
975
1001
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
976
1002
  renderFeatureIcon(feature),
977
1003
  feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("mt-6 mb-2 font-medium", feature.titleClassName), children: feature.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-6 mb-2 font-medium", feature.titleClassName), children: feature.title })),
978
- feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm text-muted-foreground", feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm text-muted-foreground", feature.descriptionClassName), children: feature.description }))
1004
+ feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm", getTextColor(background, "muted"), feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm", getTextColor(background, "muted"), feature.descriptionClassName), children: feature.description }))
979
1005
  ] }),
980
1006
  renderFeatureLink(feature)
981
1007
  ]
982
1008
  },
983
1009
  index
984
1010
  ));
985
- }, [featuresSlot, features, cardClassName, renderFeatureIcon, renderFeatureLink]);
1011
+ }, [featuresSlot, features, cardClassName, renderFeatureIcon, renderFeatureLink, background]);
986
1012
  return /* @__PURE__ */ jsxRuntime.jsx(
987
1013
  Section,
988
1014
  {
@@ -10,6 +10,32 @@ import { cva } from 'class-variance-authority';
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
  var svgCache = /* @__PURE__ */ new Map();
14
40
  function DynamicIcon({
15
41
  name,
@@ -954,14 +980,14 @@ function FeaturePatternGridLinks({
954
980
  /* @__PURE__ */ jsxs("div", { children: [
955
981
  renderFeatureIcon(feature),
956
982
  feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsx("h3", { className: cn("mt-6 mb-2 font-medium", feature.titleClassName), children: feature.title }) : /* @__PURE__ */ jsx("div", { className: cn("mt-6 mb-2 font-medium", feature.titleClassName), children: feature.title })),
957
- feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm text-muted-foreground", feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsx("div", { className: cn("text-sm text-muted-foreground", feature.descriptionClassName), children: feature.description }))
983
+ feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm", getTextColor(background, "muted"), feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsx("div", { className: cn("text-sm", getTextColor(background, "muted"), feature.descriptionClassName), children: feature.description }))
958
984
  ] }),
959
985
  renderFeatureLink(feature)
960
986
  ]
961
987
  },
962
988
  index
963
989
  ));
964
- }, [featuresSlot, features, cardClassName, renderFeatureIcon, renderFeatureLink]);
990
+ }, [featuresSlot, features, cardClassName, renderFeatureIcon, renderFeatureLink, background]);
965
991
  return /* @__PURE__ */ jsx(
966
992
  Section,
967
993
  {
@@ -34,6 +34,10 @@ var SeparatorPrimitive__namespace = /*#__PURE__*/_interopNamespace(SeparatorPrim
34
34
  function cn(...inputs) {
35
35
  return tailwindMerge.twMerge(clsx.clsx(inputs));
36
36
  }
37
+ function getAccentColor(parentBg, options) {
38
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
39
+ return isDark ? "text-accent-foreground" : "text-primary";
40
+ }
37
41
  var svgCache = /* @__PURE__ */ new Map();
38
42
  function DynamicIcon({
39
43
  name,
@@ -993,9 +997,9 @@ function FeatureUtilityCardsGrid({
993
997
  const renderLabelIcon = React.useMemo(() => {
994
998
  if (labelIcon) return labelIcon;
995
999
  if (labelIconName)
996
- return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: labelIconName, size: 20, className: "text-primary" });
1000
+ return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: labelIconName, size: 20, className: getAccentColor(background) });
997
1001
  return null;
998
- }, [labelIcon, labelIconName]);
1002
+ }, [labelIcon, labelIconName, background]);
999
1003
  const learnMoreContent = React.useMemo(() => {
1000
1004
  if (learnMoreSlot) return learnMoreSlot;
1001
1005
  if (!learnMoreAction) return null;
@@ -1006,7 +1010,8 @@ function FeatureUtilityCardsGrid({
1006
1010
  href: learnMoreAction.href,
1007
1011
  onClick: learnMoreAction.onClick,
1008
1012
  className: cn(
1009
- "hover:text-primary hover:underline",
1013
+ "hover:underline",
1014
+ `hover:${getAccentColor(background)}`,
1010
1015
  learnMoreAction.className
1011
1016
  ),
1012
1017
  "aria-label": learnMoreAction["aria-label"],
@@ -1028,7 +1033,7 @@ function FeatureUtilityCardsGrid({
1028
1033
  ]
1029
1034
  }
1030
1035
  );
1031
- }, [learnMoreSlot, learnMoreAction]);
1036
+ }, [learnMoreSlot, learnMoreAction, background]);
1032
1037
  const renderUtilityImage = React__namespace.useCallback(
1033
1038
  (utility) => {
1034
1039
  if (utility.imageSlot) return utility.imageSlot;
@@ -12,6 +12,10 @@ import * as SeparatorPrimitive from '@radix-ui/react-separator';
12
12
  function cn(...inputs) {
13
13
  return twMerge(clsx(inputs));
14
14
  }
15
+ function getAccentColor(parentBg, options) {
16
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
17
+ return isDark ? "text-accent-foreground" : "text-primary";
18
+ }
15
19
  var svgCache = /* @__PURE__ */ new Map();
16
20
  function DynamicIcon({
17
21
  name,
@@ -971,9 +975,9 @@ function FeatureUtilityCardsGrid({
971
975
  const renderLabelIcon = useMemo(() => {
972
976
  if (labelIcon) return labelIcon;
973
977
  if (labelIconName)
974
- return /* @__PURE__ */ jsx(DynamicIcon, { name: labelIconName, size: 20, className: "text-primary" });
978
+ return /* @__PURE__ */ jsx(DynamicIcon, { name: labelIconName, size: 20, className: getAccentColor(background) });
975
979
  return null;
976
- }, [labelIcon, labelIconName]);
980
+ }, [labelIcon, labelIconName, background]);
977
981
  const learnMoreContent = useMemo(() => {
978
982
  if (learnMoreSlot) return learnMoreSlot;
979
983
  if (!learnMoreAction) return null;
@@ -984,7 +988,8 @@ function FeatureUtilityCardsGrid({
984
988
  href: learnMoreAction.href,
985
989
  onClick: learnMoreAction.onClick,
986
990
  className: cn(
987
- "hover:text-primary hover:underline",
991
+ "hover:underline",
992
+ `hover:${getAccentColor(background)}`,
988
993
  learnMoreAction.className
989
994
  ),
990
995
  "aria-label": learnMoreAction["aria-label"],
@@ -1006,7 +1011,7 @@ function FeatureUtilityCardsGrid({
1006
1011
  ]
1007
1012
  }
1008
1013
  );
1009
- }, [learnMoreSlot, learnMoreAction]);
1014
+ }, [learnMoreSlot, learnMoreAction, background]);
1010
1015
  const renderUtilityImage = React.useCallback(
1011
1016
  (utility) => {
1012
1017
  if (utility.imageSlot) return utility.imageSlot;