@opensite/ui 1.4.0 → 1.4.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 (51) hide show
  1. package/dist/components.cjs +90 -90
  2. package/dist/components.js +90 -90
  3. package/dist/feature-bento-image-grid.cjs +219 -114
  4. package/dist/feature-bento-image-grid.js +219 -114
  5. package/dist/feature-icon-grid-bordered.cjs +1 -1
  6. package/dist/feature-icon-grid-bordered.js +1 -1
  7. package/dist/footer-accordion-social.cjs +6 -6
  8. package/dist/footer-accordion-social.js +6 -6
  9. package/dist/footer-animated-social.cjs +7 -7
  10. package/dist/footer-animated-social.js +7 -7
  11. package/dist/footer-background-card.cjs +13 -13
  12. package/dist/footer-background-card.js +13 -13
  13. package/dist/footer-brand-description.cjs +12 -10
  14. package/dist/footer-brand-description.d.cts +5 -1
  15. package/dist/footer-brand-description.d.ts +5 -1
  16. package/dist/footer-brand-description.js +12 -10
  17. package/dist/footer-brand-links-contact.cjs +9 -9
  18. package/dist/footer-brand-links-contact.js +9 -9
  19. package/dist/footer-comprehensive-links.cjs +1 -1
  20. package/dist/footer-comprehensive-links.js +1 -1
  21. package/dist/footer-contact-card.cjs +7 -39
  22. package/dist/footer-contact-card.js +7 -39
  23. package/dist/footer-cta-banner.cjs +10 -10
  24. package/dist/footer-cta-banner.js +10 -10
  25. package/dist/footer-cta-social.cjs +7 -7
  26. package/dist/footer-cta-social.js +7 -7
  27. package/dist/footer-info-cards-accordion.cjs +9 -9
  28. package/dist/footer-info-cards-accordion.js +9 -9
  29. package/dist/footer-links-grid.cjs +1 -1
  30. package/dist/footer-links-grid.js +1 -1
  31. package/dist/footer-nav-social.cjs +8 -8
  32. package/dist/footer-nav-social.js +8 -8
  33. package/dist/footer-newsletter-contact.cjs +5 -5
  34. package/dist/footer-newsletter-contact.js +5 -5
  35. package/dist/footer-newsletter-grid.cjs +9 -9
  36. package/dist/footer-newsletter-grid.js +9 -9
  37. package/dist/footer-newsletter-minimal.cjs +6 -6
  38. package/dist/footer-newsletter-minimal.js +6 -6
  39. package/dist/footer-simple-centered.cjs +6 -6
  40. package/dist/footer-simple-centered.js +6 -6
  41. package/dist/footer-social-apps.cjs +2 -2
  42. package/dist/footer-social-apps.js +2 -2
  43. package/dist/footer-social-newsletter.cjs +2 -2
  44. package/dist/footer-social-newsletter.js +2 -2
  45. package/dist/footer-split-image-accordion.cjs +6 -6
  46. package/dist/footer-split-image-accordion.js +6 -6
  47. package/dist/index.cjs +90 -90
  48. package/dist/index.js +90 -90
  49. package/dist/registry.cjs +346 -215
  50. package/dist/registry.js +346 -215
  51. package/package.json +1 -1
@@ -11,32 +11,6 @@ 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
- }
40
14
  var svgCache = /* @__PURE__ */ new Map();
41
15
  function DynamicIcon({
42
16
  name,
@@ -954,87 +928,203 @@ function FeatureBentoImageGrid({
954
928
  patternOpacity,
955
929
  patternClassName
956
930
  }) {
957
- const renderItemIcon = React.useCallback((item) => {
958
- if (item.icon) return item.icon;
959
- if (item.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: item.iconName, size: 24 });
960
- return null;
961
- }, []);
962
- const renderItemImage = React.useCallback((item, imageClassName) => {
963
- if (item.imageSlot) return item.imageSlot;
964
- if (item.imageSrc) {
965
- return /* @__PURE__ */ jsx(
966
- Img,
967
- {
968
- src: item.imageSrc,
969
- alt: item.imageAlt || (typeof item.title === "string" ? item.title : "Feature image"),
970
- className: cn(imageClassName, item.imageClassName),
971
- loading: "lazy",
972
- optixFlowConfig
973
- }
974
- );
975
- }
976
- return null;
977
- }, [optixFlowConfig]);
978
- const renderLargeCard = React.useCallback((item) => {
979
- const iconContent = renderItemIcon(item);
980
- const hasIconBadgeContent = iconContent || item.iconBadge;
981
- const cardContent = /* @__PURE__ */ jsxs(Fragment, { children: [
982
- renderItemImage(item, "h-full max-h-[580px] w-full rounded-xl object-cover object-center"),
983
- /* @__PURE__ */ jsx("div", { className: "absolute top-0 right-0 bottom-0 left-0 translate-y-20 rounded-xl bg-linear-to-t from-primary to-transparent transition-transform duration-300 group-hover:translate-y-0" }),
984
- /* @__PURE__ */ jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
985
- hasIconBadgeContent && /* @__PURE__ */ jsxs("span", { className: cn("ml-auto flex w-fit items-center gap-1 p-2.5 text-sm font-semibold text-background", item.iconBadgeClassName), children: [
986
- iconContent,
987
- item.iconBadge
988
- ] }),
989
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-5 text-background", children: [
990
- item.title && (typeof item.title === "string" ? /* @__PURE__ */ jsx("h4", { className: cn("text-2xl font-semibold lg:text-3xl", item.titleClassName), children: item.title }) : /* @__PURE__ */ jsx("div", { className: cn("text-2xl font-semibold lg:text-3xl", item.titleClassName), children: item.title })),
991
- item.linkText && /* @__PURE__ */ jsxs("p", { className: cn("flex items-center gap-1 font-medium", item.linkTextClassName), children: [
992
- item.linkText,
993
- /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
931
+ const renderItemIcon = React.useCallback(
932
+ (item) => {
933
+ if (item.icon) return item.icon;
934
+ if (item.iconName) return /* @__PURE__ */ jsx(DynamicIcon, { name: item.iconName, size: 24 });
935
+ return null;
936
+ },
937
+ []
938
+ );
939
+ const renderItemImage = React.useCallback(
940
+ (item, imageClassName) => {
941
+ if (item.imageSlot) return item.imageSlot;
942
+ if (item.imageSrc) {
943
+ return /* @__PURE__ */ jsx(
944
+ Img,
945
+ {
946
+ src: item.imageSrc,
947
+ alt: item.imageAlt || (typeof item.title === "string" ? item.title : "Feature image"),
948
+ className: cn(imageClassName, item.imageClassName),
949
+ loading: "lazy",
950
+ optixFlowConfig
951
+ }
952
+ );
953
+ }
954
+ return null;
955
+ },
956
+ [optixFlowConfig]
957
+ );
958
+ const renderLargeCard = React.useCallback(
959
+ (item) => {
960
+ const iconContent = renderItemIcon(item);
961
+ const hasIconBadgeContent = iconContent || item.iconBadge;
962
+ const cardContent = /* @__PURE__ */ jsxs(Fragment, { children: [
963
+ renderItemImage(
964
+ item,
965
+ "h-full max-h-[580px] w-full rounded-xl object-cover object-center"
966
+ ),
967
+ /* @__PURE__ */ jsx("div", { className: "absolute top-0 right-0 bottom-0 left-0 translate-y-10 rounded-xl bg-linear-to-t from-black to-transparent transition-transform duration-300 group-hover:translate-y-0" }),
968
+ /* @__PURE__ */ jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between px-5 md:px-8 py-6 md:py-6", children: [
969
+ hasIconBadgeContent && /* @__PURE__ */ jsxs(
970
+ "span",
971
+ {
972
+ className: cn(
973
+ "ml-auto flex w-fit items-center gap-2 p-0 text-sm font-semibold text-white",
974
+ item.iconBadgeClassName
975
+ ),
976
+ children: [
977
+ iconContent,
978
+ item.iconBadge
979
+ ]
980
+ }
981
+ ),
982
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 md:gap-5 text-white", children: [
983
+ item.title && (typeof item.title === "string" ? /* @__PURE__ */ jsx(
984
+ "h4",
985
+ {
986
+ className: cn(
987
+ "text-2xl font-medium lg:text-3xl",
988
+ item.titleClassName
989
+ ),
990
+ children: item.title
991
+ }
992
+ ) : /* @__PURE__ */ jsx(
993
+ "div",
994
+ {
995
+ className: cn(
996
+ "text-2xl font-medium lg:text-3xl",
997
+ item.titleClassName
998
+ ),
999
+ children: item.title
1000
+ }
1001
+ )),
1002
+ item.linkText && /* @__PURE__ */ jsxs(
1003
+ "p",
1004
+ {
1005
+ className: cn(
1006
+ "flex items-center gap-1 font-bold text-sm uppercase",
1007
+ item.linkTextClassName
1008
+ ),
1009
+ children: [
1010
+ item.linkText,
1011
+ /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
1012
+ ]
1013
+ }
1014
+ )
994
1015
  ] })
995
1016
  ] })
996
- ] })
997
- ] });
998
- if (item.link) {
1017
+ ] });
1018
+ if (item.link) {
1019
+ return /* @__PURE__ */ jsx(
1020
+ Pressable,
1021
+ {
1022
+ href: item.link,
1023
+ className: cn(
1024
+ "group relative col-span-2 row-span-3 overflow-hidden rounded-xl",
1025
+ largeCardClassName,
1026
+ item.className
1027
+ ),
1028
+ children: cardContent
1029
+ }
1030
+ );
1031
+ }
999
1032
  return /* @__PURE__ */ jsx(
1000
- Pressable,
1033
+ "div",
1001
1034
  {
1002
- href: item.link,
1003
- className: cn("group relative col-span-2 row-span-3 overflow-hidden rounded-xl", largeCardClassName, item.className),
1035
+ className: cn(
1036
+ "group relative col-span-2 row-span-3 overflow-hidden rounded-xl",
1037
+ largeCardClassName,
1038
+ item.className
1039
+ ),
1004
1040
  children: cardContent
1005
1041
  }
1006
1042
  );
1007
- }
1008
- return /* @__PURE__ */ jsx("div", { className: cn("group relative col-span-2 row-span-3 overflow-hidden rounded-xl", largeCardClassName, item.className), children: cardContent });
1009
- }, [largeCardClassName, renderItemImage, renderItemIcon]);
1010
- const renderSmallCard = React.useCallback((item, index) => {
1011
- const iconContent = renderItemIcon(item);
1012
- const hasIconBadgeContent = iconContent || item.iconBadge;
1013
- const cardContent = /* @__PURE__ */ jsxs(Fragment, { children: [
1014
- renderItemImage(item, cn(
1015
- "h-full w-full rounded-xl object-cover object-center",
1016
- index === 0 ? "max-h-44" : "max-h-96"
1017
- )),
1018
- /* @__PURE__ */ jsx("div", { className: "absolute top-0 right-0 bottom-0 left-0 translate-y-10 rounded-xl bg-linear-to-t from-primary to-transparent opacity-80 transition-transform duration-300 group-hover:translate-y-0" }),
1019
- /* @__PURE__ */ jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
1020
- hasIconBadgeContent && /* @__PURE__ */ jsxs("span", { className: cn("ml-auto flex w-fit items-center gap-1 p-2.5 text-sm font-semibold text-background", item.iconBadgeClassName), children: [
1021
- iconContent,
1022
- item.iconBadge
1023
- ] }),
1024
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-5 text-background", children: [
1025
- item.title && (typeof item.title === "string" ? /* @__PURE__ */ jsx("h4", { className: cn("text-2xl font-semibold lg:text-3xl", item.titleClassName), children: item.title }) : /* @__PURE__ */ jsx("div", { className: cn("text-2xl font-semibold lg:text-3xl", item.titleClassName), children: item.title })),
1026
- item.linkText && /* @__PURE__ */ jsxs("p", { className: cn("flex items-center gap-1 font-medium", item.linkTextClassName), children: [
1027
- item.linkText,
1028
- /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
1043
+ },
1044
+ [largeCardClassName, renderItemImage, renderItemIcon]
1045
+ );
1046
+ const renderSmallCard = React.useCallback(
1047
+ (item, index) => {
1048
+ const iconContent = renderItemIcon(item);
1049
+ const hasIconBadgeContent = iconContent || item.iconBadge;
1050
+ const cardContent = /* @__PURE__ */ jsxs(Fragment, { children: [
1051
+ renderItemImage(
1052
+ item,
1053
+ cn(
1054
+ "h-full w-full rounded-xl object-cover object-center",
1055
+ index === 0 ? "max-h-44" : "max-h-96"
1056
+ )
1057
+ ),
1058
+ /* @__PURE__ */ jsx("div", { className: "absolute top-0 right-0 bottom-0 left-0 translate-y-10 rounded-xl bg-linear-to-t from-black to-transparent opacity-80 transition-transform duration-300 group-hover:translate-y-0" }),
1059
+ /* @__PURE__ */ jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-7", children: [
1060
+ hasIconBadgeContent && /* @__PURE__ */ jsxs(
1061
+ "span",
1062
+ {
1063
+ className: cn(
1064
+ "ml-auto flex w-fit items-center gap-1 p-2.5 text-sm font-semibold ",
1065
+ item.iconBadgeClassName
1066
+ ),
1067
+ children: [
1068
+ iconContent,
1069
+ item.iconBadge
1070
+ ]
1071
+ }
1072
+ ),
1073
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-5 ", children: [
1074
+ item.title && (typeof item.title === "string" ? /* @__PURE__ */ jsx(
1075
+ "h4",
1076
+ {
1077
+ className: cn(
1078
+ "text-2xl font-semibold lg:text-3xl",
1079
+ item.titleClassName
1080
+ ),
1081
+ children: item.title
1082
+ }
1083
+ ) : /* @__PURE__ */ jsx(
1084
+ "div",
1085
+ {
1086
+ className: cn(
1087
+ "text-2xl font-semibold lg:text-3xl",
1088
+ item.titleClassName
1089
+ ),
1090
+ children: item.title
1091
+ }
1092
+ )),
1093
+ item.linkText && /* @__PURE__ */ jsxs(
1094
+ "p",
1095
+ {
1096
+ className: cn(
1097
+ "flex items-center gap-1 font-medium",
1098
+ item.linkTextClassName
1099
+ ),
1100
+ children: [
1101
+ item.linkText,
1102
+ /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
1103
+ ]
1104
+ }
1105
+ )
1029
1106
  ] })
1030
1107
  ] })
1031
- ] })
1032
- ] });
1033
- if (item.link) {
1108
+ ] });
1109
+ if (item.link) {
1110
+ return /* @__PURE__ */ jsx(
1111
+ Pressable,
1112
+ {
1113
+ href: item.link,
1114
+ className: cn(
1115
+ "group relative overflow-hidden rounded-xl",
1116
+ index === 1 && "row-span-2",
1117
+ smallCardClassName,
1118
+ item.className
1119
+ ),
1120
+ children: cardContent
1121
+ },
1122
+ index
1123
+ );
1124
+ }
1034
1125
  return /* @__PURE__ */ jsx(
1035
- Pressable,
1126
+ "div",
1036
1127
  {
1037
- href: item.link,
1038
1128
  className: cn(
1039
1129
  "group relative overflow-hidden rounded-xl",
1040
1130
  index === 1 && "row-span-2",
@@ -1045,21 +1135,9 @@ function FeatureBentoImageGrid({
1045
1135
  },
1046
1136
  index
1047
1137
  );
1048
- }
1049
- return /* @__PURE__ */ jsx(
1050
- "div",
1051
- {
1052
- className: cn(
1053
- "group relative overflow-hidden rounded-xl",
1054
- index === 1 && "row-span-2",
1055
- smallCardClassName,
1056
- item.className
1057
- ),
1058
- children: cardContent
1059
- },
1060
- index
1061
- );
1062
- }, [smallCardClassName, renderItemImage, renderItemIcon]);
1138
+ },
1139
+ [smallCardClassName, renderItemImage, renderItemIcon]
1140
+ );
1063
1141
  const itemsContent = useMemo(() => {
1064
1142
  if (itemsSlot) return itemsSlot;
1065
1143
  if (!items || items.length === 0) return null;
@@ -1081,9 +1159,36 @@ function FeatureBentoImageGrid({
1081
1159
  className,
1082
1160
  containerClassName,
1083
1161
  children: [
1084
- 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 })),
1085
- 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 })),
1086
- /* @__PURE__ */ jsx("div", { className: cn("grid grid-cols-1 gap-y-5 pt-14 xl:grid-cols-3 xl:grid-rows-2 xl:gap-x-5 xl:gap-y-0", gridClassName), children: itemsContent })
1162
+ title && (typeof title === "string" ? /* @__PURE__ */ jsx(
1163
+ "h2",
1164
+ {
1165
+ className: cn(
1166
+ "mb-4 text-center text-4xl font-semibold text-balance",
1167
+ titleClassName
1168
+ ),
1169
+ children: title
1170
+ }
1171
+ ) : /* @__PURE__ */ jsx(
1172
+ "div",
1173
+ {
1174
+ className: cn(
1175
+ "mb-4 text-center text-4xl font-semibold text-balance",
1176
+ titleClassName
1177
+ ),
1178
+ children: title
1179
+ }
1180
+ )),
1181
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-center text-balance", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("text-center text-balance", descriptionClassName), children: description })),
1182
+ /* @__PURE__ */ jsx(
1183
+ "div",
1184
+ {
1185
+ className: cn(
1186
+ "grid grid-cols-1 gap-y-5 pt-14 xl:grid-cols-3 xl:grid-rows-2 xl:gap-x-5 xl:gap-y-0",
1187
+ gridClassName
1188
+ ),
1189
+ children: itemsContent
1190
+ }
1191
+ )
1087
1192
  ]
1088
1193
  }
1089
1194
  );
@@ -969,7 +969,7 @@ function FeatureIconGridBordered({
969
969
  "div",
970
970
  {
971
971
  className: cn(
972
- "flex size-10 shrink-0 items-center justify-center rounded-lg md:size-12 text-accent-foreground bg-primary shadow-xl",
972
+ "flex size-10 shrink-0 items-center justify-center rounded-lg md:size-12 text-primary-foreground bg-primary shadow-xl",
973
973
  feature.iconClassName
974
974
  ),
975
975
  children: renderIcon(feature)
@@ -948,7 +948,7 @@ function FeatureIconGridBordered({
948
948
  "div",
949
949
  {
950
950
  className: cn(
951
- "flex size-10 shrink-0 items-center justify-center rounded-lg md:size-12 text-accent-foreground bg-primary shadow-xl",
951
+ "flex size-10 shrink-0 items-center justify-center rounded-lg md:size-12 text-primary-foreground bg-primary shadow-xl",
952
952
  feature.iconClassName
953
953
  ),
954
954
  children: renderIcon(feature)
@@ -1816,7 +1816,7 @@ function FooterAccordionSocial({
1816
1816
  ),
1817
1817
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
1818
1818
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-2xl font-semibold", children: newsletterTitle }),
1819
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground", children: newsletterDescription })
1819
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "opacity-80", children: newsletterDescription })
1820
1820
  ] }),
1821
1821
  /* @__PURE__ */ jsxRuntime.jsxs(
1822
1822
  forms.Form,
@@ -1833,7 +1833,7 @@ function FooterAccordionSocial({
1833
1833
  type: "email",
1834
1834
  placeholder: "Email Address",
1835
1835
  error: meta.touched && !!meta.error,
1836
- className: "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
1836
+ className: "flex h-10 w-full rounded-md border border-input px-3 py-2 text-sm ring-offset-background placeholder:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
1837
1837
  "aria-label": "Email Address"
1838
1838
  }
1839
1839
  ) }),
@@ -1854,18 +1854,18 @@ function FooterAccordionSocial({
1854
1854
  ] }),
1855
1855
  footerLinks && footerLinks.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-x-16 gap-y-8 lg:grid-cols-3", children: footerLinks.map((section) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1856
1856
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-4 text-lg font-bold", children: section.title }),
1857
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "space-y-2 text-sm text-muted-foreground", children: section.items.map((item, idx) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
1857
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "space-y-2 text-sm opacity-80", children: section.items.map((item, idx) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
1858
1858
  Pressable,
1859
1859
  {
1860
1860
  href: item.href,
1861
- className: "hover:text-primary",
1861
+ className: "hover:opacity-100",
1862
1862
  children: item.text
1863
1863
  }
1864
1864
  ) }, idx)) })
1865
1865
  ] }, section.id)) })
1866
1866
  ] }),
1867
1867
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-6 border-t pt-8", children: [
1868
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 text-sm text-muted-foreground md:flex-row md:items-center md:gap-4", children: [
1868
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 text-sm opacity-80 md:flex-row md:items-center md:gap-4", children: [
1869
1869
  /* @__PURE__ */ jsxRuntime.jsx(FooterCopyright, { copyright }),
1870
1870
  /* @__PURE__ */ jsxRuntime.jsx(
1871
1871
  BrandAttribution,
@@ -1873,7 +1873,7 @@ function FooterAccordionSocial({
1873
1873
  internalBrandSlug: "open_site_ai",
1874
1874
  optionIndex: 1,
1875
1875
  variant: "span",
1876
- linkClassName: "hover:text-primary"
1876
+ linkClassName: "hover:opacity-100"
1877
1877
  }
1878
1878
  )
1879
1879
  ] }),
@@ -1795,7 +1795,7 @@ function FooterAccordionSocial({
1795
1795
  ),
1796
1796
  /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
1797
1797
  /* @__PURE__ */ jsx("h3", { className: "text-2xl font-semibold", children: newsletterTitle }),
1798
- /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: newsletterDescription })
1798
+ /* @__PURE__ */ jsx("p", { className: "opacity-80", children: newsletterDescription })
1799
1799
  ] }),
1800
1800
  /* @__PURE__ */ jsxs(
1801
1801
  Form,
@@ -1812,7 +1812,7 @@ function FooterAccordionSocial({
1812
1812
  type: "email",
1813
1813
  placeholder: "Email Address",
1814
1814
  error: meta.touched && !!meta.error,
1815
- className: "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
1815
+ className: "flex h-10 w-full rounded-md border border-input px-3 py-2 text-sm ring-offset-background placeholder:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
1816
1816
  "aria-label": "Email Address"
1817
1817
  }
1818
1818
  ) }),
@@ -1833,18 +1833,18 @@ function FooterAccordionSocial({
1833
1833
  ] }),
1834
1834
  footerLinks && footerLinks.length > 0 && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-x-16 gap-y-8 lg:grid-cols-3", children: footerLinks.map((section) => /* @__PURE__ */ jsxs("div", { children: [
1835
1835
  /* @__PURE__ */ jsx("h3", { className: "mb-4 text-lg font-bold", children: section.title }),
1836
- /* @__PURE__ */ jsx("ul", { className: "space-y-2 text-sm text-muted-foreground", children: section.items.map((item, idx) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
1836
+ /* @__PURE__ */ jsx("ul", { className: "space-y-2 text-sm opacity-80", children: section.items.map((item, idx) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
1837
1837
  Pressable,
1838
1838
  {
1839
1839
  href: item.href,
1840
- className: "hover:text-primary",
1840
+ className: "hover:opacity-100",
1841
1841
  children: item.text
1842
1842
  }
1843
1843
  ) }, idx)) })
1844
1844
  ] }, section.id)) })
1845
1845
  ] }),
1846
1846
  /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-6 border-t pt-8", children: [
1847
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 text-sm text-muted-foreground md:flex-row md:items-center md:gap-4", children: [
1847
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 text-sm opacity-80 md:flex-row md:items-center md:gap-4", children: [
1848
1848
  /* @__PURE__ */ jsx(FooterCopyright, { copyright }),
1849
1849
  /* @__PURE__ */ jsx(
1850
1850
  BrandAttribution,
@@ -1852,7 +1852,7 @@ function FooterAccordionSocial({
1852
1852
  internalBrandSlug: "open_site_ai",
1853
1853
  optionIndex: 1,
1854
1854
  variant: "span",
1855
- linkClassName: "hover:text-primary"
1855
+ linkClassName: "hover:opacity-100"
1856
1856
  }
1857
1857
  )
1858
1858
  ] }),
@@ -1603,7 +1603,7 @@ function FooterAnimatedSocial({
1603
1603
  label: link.label,
1604
1604
  iconNameOverride: link.iconNameOverride,
1605
1605
  iconSize: 24,
1606
- className: cn("group flex items-center gap-2 py-2 transition-colors hover:text-muted-foreground", socialLinkClassName)
1606
+ className: cn("group flex items-center gap-2 py-2 transition-colors hover:opacity-70", socialLinkClassName)
1607
1607
  }
1608
1608
  )
1609
1609
  },
@@ -1631,13 +1631,13 @@ function FooterAnimatedSocial({
1631
1631
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("space-y-8", leftColumnClassName), children: [
1632
1632
  /* @__PURE__ */ jsxRuntime.jsxs(framerMotion.motion.div, { variants: itemVariants, className: "space-y-6", children: [
1633
1633
  /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-4xl leading-tight font-bold lg:text-5xl", headingClassName), children: heading }),
1634
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("max-w-md text-lg leading-relaxed text-muted-foreground", descriptionClassName), children: description })
1634
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("max-w-md text-lg leading-relaxed opacity-80", descriptionClassName), children: description })
1635
1635
  ] }),
1636
1636
  ctaUrl && ctaText && /* @__PURE__ */ jsxRuntime.jsx(framerMotion.motion.div, { variants: itemVariants, children: /* @__PURE__ */ jsxRuntime.jsx(
1637
1637
  Pressable,
1638
1638
  {
1639
1639
  href: ctaUrl,
1640
- className: cn("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-11 px-8", ctaClassName),
1640
+ className: cn("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border h-11 px-8 hover:opacity-80", ctaClassName),
1641
1641
  children: ctaText
1642
1642
  }
1643
1643
  ) })
@@ -1655,21 +1655,21 @@ function FooterAnimatedSocial({
1655
1655
  viewport: { once: true },
1656
1656
  className: cn("mt-16", bottomClassName),
1657
1657
  children: [
1658
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.motion.div, { variants: itemVariants, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-8 h-px w-full bg-border", separatorClassName) }) }),
1658
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.motion.div, { variants: itemVariants, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-8 h-px w-full opacity-20", separatorClassName), style: { backgroundColor: "currentColor" } }) }),
1659
1659
  /* @__PURE__ */ jsxRuntime.jsxs(
1660
1660
  framerMotion.motion.div,
1661
1661
  {
1662
1662
  variants: itemVariants,
1663
1663
  className: cn("flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center", copyrightClassName),
1664
1664
  children: [
1665
- /* @__PURE__ */ jsxRuntime.jsx(FooterCopyright, { copyright, className: "text-sm text-muted-foreground" }),
1666
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-6 text-sm text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(
1665
+ /* @__PURE__ */ jsxRuntime.jsx(FooterCopyright, { copyright, className: "text-sm opacity-70" }),
1666
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-6 text-sm opacity-70", children: /* @__PURE__ */ jsxRuntime.jsx(
1667
1667
  BrandAttribution,
1668
1668
  {
1669
1669
  internalBrandSlug: "open_site_ai",
1670
1670
  optionIndex: 2,
1671
1671
  variant: "span",
1672
- linkClassName: "underline underline-offset-4 transition-colors hover:text-primary"
1672
+ linkClassName: "underline underline-offset-4 transition-colors hover:opacity-100"
1673
1673
  }
1674
1674
  ) })
1675
1675
  ]
@@ -1582,7 +1582,7 @@ function FooterAnimatedSocial({
1582
1582
  label: link.label,
1583
1583
  iconNameOverride: link.iconNameOverride,
1584
1584
  iconSize: 24,
1585
- className: cn("group flex items-center gap-2 py-2 transition-colors hover:text-muted-foreground", socialLinkClassName)
1585
+ className: cn("group flex items-center gap-2 py-2 transition-colors hover:opacity-70", socialLinkClassName)
1586
1586
  }
1587
1587
  )
1588
1588
  },
@@ -1610,13 +1610,13 @@ function FooterAnimatedSocial({
1610
1610
  /* @__PURE__ */ jsxs("div", { className: cn("space-y-8", leftColumnClassName), children: [
1611
1611
  /* @__PURE__ */ jsxs(motion.div, { variants: itemVariants, className: "space-y-6", children: [
1612
1612
  /* @__PURE__ */ jsx("h2", { className: cn("text-4xl leading-tight font-bold lg:text-5xl", headingClassName), children: heading }),
1613
- /* @__PURE__ */ jsx("p", { className: cn("max-w-md text-lg leading-relaxed text-muted-foreground", descriptionClassName), children: description })
1613
+ /* @__PURE__ */ jsx("p", { className: cn("max-w-md text-lg leading-relaxed opacity-80", descriptionClassName), children: description })
1614
1614
  ] }),
1615
1615
  ctaUrl && ctaText && /* @__PURE__ */ jsx(motion.div, { variants: itemVariants, children: /* @__PURE__ */ jsx(
1616
1616
  Pressable,
1617
1617
  {
1618
1618
  href: ctaUrl,
1619
- className: cn("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-11 px-8", ctaClassName),
1619
+ className: cn("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border h-11 px-8 hover:opacity-80", ctaClassName),
1620
1620
  children: ctaText
1621
1621
  }
1622
1622
  ) })
@@ -1634,21 +1634,21 @@ function FooterAnimatedSocial({
1634
1634
  viewport: { once: true },
1635
1635
  className: cn("mt-16", bottomClassName),
1636
1636
  children: [
1637
- /* @__PURE__ */ jsx(motion.div, { variants: itemVariants, children: /* @__PURE__ */ jsx("div", { className: cn("mb-8 h-px w-full bg-border", separatorClassName) }) }),
1637
+ /* @__PURE__ */ jsx(motion.div, { variants: itemVariants, children: /* @__PURE__ */ jsx("div", { className: cn("mb-8 h-px w-full opacity-20", separatorClassName), style: { backgroundColor: "currentColor" } }) }),
1638
1638
  /* @__PURE__ */ jsxs(
1639
1639
  motion.div,
1640
1640
  {
1641
1641
  variants: itemVariants,
1642
1642
  className: cn("flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center", copyrightClassName),
1643
1643
  children: [
1644
- /* @__PURE__ */ jsx(FooterCopyright, { copyright, className: "text-sm text-muted-foreground" }),
1645
- /* @__PURE__ */ jsx("div", { className: "flex items-center gap-6 text-sm text-muted-foreground", children: /* @__PURE__ */ jsx(
1644
+ /* @__PURE__ */ jsx(FooterCopyright, { copyright, className: "text-sm opacity-70" }),
1645
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-6 text-sm opacity-70", children: /* @__PURE__ */ jsx(
1646
1646
  BrandAttribution,
1647
1647
  {
1648
1648
  internalBrandSlug: "open_site_ai",
1649
1649
  optionIndex: 2,
1650
1650
  variant: "span",
1651
- linkClassName: "underline underline-offset-4 transition-colors hover:text-primary"
1651
+ linkClassName: "underline underline-offset-4 transition-colors hover:opacity-100"
1652
1652
  }
1653
1653
  ) })
1654
1654
  ]