nvis-fe-cms-libs 1.1.35 → 1.1.37

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.
@@ -577,7 +577,7 @@ const SectionWrapper = ({
577
577
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative z-10", children })
578
578
  ] });
579
579
  };
580
- const AboutCompanySection = ({ data, t, isDarkMode }) => {
580
+ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
581
581
  var _a, _b;
582
582
  const safeT = typeof t === "function" ? t : (key, options) => {
583
583
  console.warn(`Translation function not provided for key: ${key}`);
@@ -593,6 +593,13 @@ const AboutCompanySection = ({ data, t, isDarkMode }) => {
593
593
  const establishedYear = companyData.establishedYear || "----";
594
594
  const experienceYears = companyData.experienceYears || "0";
595
595
  const description = companyData.description || "";
596
+ const logo = companyData.logo || null;
597
+ const getLogoUrl = (logoUrl2) => {
598
+ if (!logoUrl2) return null;
599
+ if (logoUrl2.startsWith("http")) return logoUrl2;
600
+ return `${imageBaseUrl}${logoUrl2}`;
601
+ };
602
+ const logoUrl = getLogoUrl(logo);
596
603
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
597
604
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
598
605
  "section",
@@ -636,8 +643,22 @@ const AboutCompanySection = ({ data, t, isDarkMode }) => {
636
643
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-20 h-20 mx-auto rounded-full bg-gradient-to-r from-blue-500 to-purple-600 p-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
637
644
  "div",
638
645
  {
639
- className: `w-full h-full rounded-full flex items-center justify-center ${isDarkMode ? "bg-gray-900" : "bg-white"}`,
640
- children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-2xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent", children: shortName })
646
+ className: `w-full h-full rounded-full flex items-center justify-center overflow-hidden ${isDarkMode ? "bg-gray-900" : "bg-white"}`,
647
+ children: logoUrl ? /* @__PURE__ */ jsxRuntimeExports.jsx(
648
+ "img",
649
+ {
650
+ src: logoUrl,
651
+ alt: name || shortName,
652
+ className: "w-full h-full object-cover rounded-full",
653
+ onError: (e) => {
654
+ e.target.style.display = "none";
655
+ const fallbackDiv = document.createElement("div");
656
+ fallbackDiv.className = "text-2xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent";
657
+ fallbackDiv.textContent = shortName;
658
+ e.target.parentElement.appendChild(fallbackDiv);
659
+ }
660
+ }
661
+ ) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-2xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent", children: shortName })
641
662
  }
642
663
  ) }),
643
664
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -692,7 +713,7 @@ const AboutCompanySection = ({ data, t, isDarkMode }) => {
692
713
  children: [
693
714
  safeT("aboutCompany.story.title"),
694
715
  " ",
695
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent", children: name })
716
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent", children: shortName })
696
717
  ]
697
718
  }
698
719
  ),
@@ -894,72 +915,63 @@ const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
894
915
  return () => itemRef.current && observer.unobserve(itemRef.current);
895
916
  }, []);
896
917
  const logoSrc = getLogoUrl(partner.logoUrl);
897
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
898
- "div",
899
- {
900
- ref: itemRef,
901
- className: `partner-card relative flex flex-col items-center justify-center p-4 rounded-xl shadow-sm transition-all duration-700 ease-out cursor-pointer overflow-hidden
902
- ${isDarkMode ? "bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 border border-blue-800 hover:border-blue-500" : "bg-white border border-gray-200 hover:border-blue-300"}
903
- ${visible ? "opacity-100 scale-100" : "opacity-0 scale-75"}`,
904
- style: { transitionDelay: `${idx * 150}ms` },
905
- onClick: () => partner.websiteUrl && window.open(partner.websiteUrl, "_blank"),
906
- children: [
907
- isDarkMode && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
908
- /* @__PURE__ */ jsxRuntimeExports.jsx(
909
- "div",
910
- {
911
- className: "absolute w-12 h-12 bg-white/5 rounded-full",
912
- style: { left: "10%", top: "20%" }
913
- }
914
- ),
915
- /* @__PURE__ */ jsxRuntimeExports.jsx(
916
- "div",
917
- {
918
- className: "absolute w-10 h-10 bg-white/5 rounded-full",
919
- style: { right: "30%", bottom: "10%" }
920
- }
921
- ),
922
- /* @__PURE__ */ jsxRuntimeExports.jsx(
923
- "div",
924
- {
925
- className: "absolute w-14 h-14 bg-white/5 rounded-md",
926
- style: { left: "20%", bottom: "30%" }
927
- }
928
- ),
929
- /* @__PURE__ */ jsxRuntimeExports.jsx(
930
- "div",
931
- {
932
- className: 'absolute inset-0 bg-[url("data:image/svg+xml,%3Csvg width=\\\\\\"60\\\\\\" height=\\\\\\"60\\\\\\" viewBox=\\\\\\"0 0 60 60\\\\\\" xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"%3E%3Cg fill=\\\\\\"none\\\\\\" fill-rule=\\\\\\"evenodd\\\\\\"%3E%3Cg fill=\\\\\\"%23ffffff\\\\\\" fill-opacity=\\\\\\"0.05\\\\\\"%3E%3Ccircle cx=\\\\\\"30\\\\\\" cy=\\\\\\"30\\\\\\" r=\\\\\\"2\\\\\\"/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")] opacity-20'
933
- }
934
- )
935
- ] }),
936
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "logo-container w-20 h-14 flex items-center justify-center mb-4 rounded-lg overflow-hidden", children: logoSrc ? /* @__PURE__ */ jsxRuntimeExports.jsx(
937
- "img",
938
- {
939
- src: logoSrc,
940
- alt: partner.name,
941
- className: "logo-image max-w-full max-h-full object-contain"
942
- }
943
- ) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-full h-full bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white font-bold text-center text-sm px-1", children: partner.name }) }) }),
944
- /* @__PURE__ */ jsxRuntimeExports.jsx(
945
- "h4",
946
- {
947
- className: `font-bold text-center mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
948
- children: partner.name
949
- }
950
- ),
951
- /* @__PURE__ */ jsxRuntimeExports.jsx(
952
- "p",
953
- {
954
- className: `text-sm text-center mb-2 ${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
955
- children: partner.description
956
- }
957
- ),
958
- partner.websiteUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "website-hint", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-sm text-blue-600 font-medium", children: [
959
- t("partners.viewDetails") || "Xem chi tiết",
960
- " →"
961
- ] }) }),
962
- /* @__PURE__ */ jsxRuntimeExports.jsx("style", { jsx: true, children: `
918
+ const cardContent = /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
919
+ isDarkMode && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
920
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
921
+ "div",
922
+ {
923
+ className: "absolute w-12 h-12 bg-white/5 rounded-full",
924
+ style: { left: "10%", top: "20%" }
925
+ }
926
+ ),
927
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
928
+ "div",
929
+ {
930
+ className: "absolute w-10 h-10 bg-white/5 rounded-full",
931
+ style: { right: "30%", bottom: "10%" }
932
+ }
933
+ ),
934
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
935
+ "div",
936
+ {
937
+ className: "absolute w-14 h-14 bg-white/5 rounded-md",
938
+ style: { left: "20%", bottom: "30%" }
939
+ }
940
+ ),
941
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
942
+ "div",
943
+ {
944
+ className: 'absolute inset-0 bg-[url("data:image/svg+xml,%3Csvg width=\\\\\\"60\\\\\\" height=\\\\\\"60\\\\\\" viewBox=\\\\\\"0 0 60 60\\\\\\" xmlns=\\\\\\"http://www.w3.org/2000/svg\\\\\\"%3E%3Cg fill=\\\\\\"none\\\\\\" fill-rule=\\\\\\"evenodd\\\\\\"%3E%3Cg fill=\\\\\\"%23ffffff\\\\\\" fill-opacity=\\\\\\"0.05\\\\\\"%3E%3Ccircle cx=\\\\\\"30\\\\\\" cy=\\\\\\"30\\\\\\" r=\\\\\\"2\\\\\\"/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")] opacity-20'
945
+ }
946
+ )
947
+ ] }),
948
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "logo-container w-20 h-14 flex items-center justify-center mb-4 rounded-lg overflow-hidden", children: logoSrc ? /* @__PURE__ */ jsxRuntimeExports.jsx(
949
+ "img",
950
+ {
951
+ src: logoSrc,
952
+ alt: partner.name,
953
+ className: "logo-image max-w-full max-h-full object-contain"
954
+ }
955
+ ) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-full h-full bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white font-bold text-center text-sm px-1", children: partner.name }) }) }),
956
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
957
+ "h4",
958
+ {
959
+ className: `font-bold text-center mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
960
+ children: partner.name
961
+ }
962
+ ),
963
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
964
+ "p",
965
+ {
966
+ className: `text-sm text-center mb-2 ${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
967
+ children: partner.description
968
+ }
969
+ ),
970
+ partner.websiteUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "website-hint", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-sm text-blue-600 font-medium", children: [
971
+ t("partners.viewDetails") || "Xem chi tiết",
972
+ " →"
973
+ ] }) }),
974
+ /* @__PURE__ */ jsxRuntimeExports.jsx("style", { jsx: true, children: `
963
975
  .partner-card {
964
976
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
965
977
  }
@@ -994,7 +1006,32 @@ const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
994
1006
  transform: translateY(0);
995
1007
  }
996
1008
  ` })
997
- ]
1009
+ ] });
1010
+ if (partner.websiteUrl) {
1011
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
1012
+ "a",
1013
+ {
1014
+ ref: itemRef,
1015
+ href: partner.websiteUrl,
1016
+ target: "_blank",
1017
+ rel: "noopener noreferrer",
1018
+ className: `partner-card relative flex flex-col items-center justify-center p-4 rounded-xl shadow-sm transition-all duration-700 ease-out cursor-pointer overflow-hidden
1019
+ ${isDarkMode ? "bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 border border-blue-800 hover:border-blue-500" : "bg-white border border-gray-200 hover:border-blue-300"}
1020
+ ${visible ? "opacity-100 scale-100" : "opacity-0 scale-75"}`,
1021
+ style: { transitionDelay: `${idx * 150}ms`, textDecoration: "none" },
1022
+ children: cardContent
1023
+ }
1024
+ );
1025
+ }
1026
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
1027
+ "div",
1028
+ {
1029
+ ref: itemRef,
1030
+ className: `partner-card relative flex flex-col items-center justify-center p-4 rounded-xl shadow-sm transition-all duration-700 ease-out overflow-hidden
1031
+ ${isDarkMode ? "bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 border border-blue-800" : "bg-white border border-gray-200"}
1032
+ ${visible ? "opacity-100 scale-100" : "opacity-0 scale-75"}`,
1033
+ style: { transitionDelay: `${idx * 150}ms` },
1034
+ children: cardContent
998
1035
  }
999
1036
  );
1000
1037
  };
@@ -1010,13 +1047,14 @@ function useWindowSize$1() {
1010
1047
  }, []);
1011
1048
  return width;
1012
1049
  }
1013
- const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
1050
+ const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "", section }) => {
1014
1051
  var _a, _b;
1015
1052
  const partnersData = ((_b = (_a = data == null ? void 0 : data.sectionDataBindingItems) == null ? void 0 : _a.filter((item) => item == null ? void 0 : item.data)) == null ? void 0 : _b.map((item) => item.data)) || [];
1016
1053
  const [currentPartnerSlide, setCurrentPartnerSlide] = useState(0);
1017
1054
  const [partnersVisible, setPartnersVisible] = useState(false);
1018
1055
  const partnersRef = useRef(null);
1019
1056
  const windowWidth = useWindowSize$1();
1057
+ const sectionTitle = (section == null ? void 0 : section.title) || "...";
1020
1058
  const getLogoUrl = (logoUrl) => {
1021
1059
  if (!logoUrl) return null;
1022
1060
  if (logoUrl.startsWith("http")) return logoUrl;
@@ -1060,28 +1098,16 @@ const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
1060
1098
  }, []);
1061
1099
  if (!partnersData.length) return null;
1062
1100
  return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
1063
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12", children: [
1064
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
1065
- "div",
1066
- {
1067
- className: `inline-block px-4 py-2 rounded-full text-sm font-semibold mb-4 border shadow-sm ${isDarkMode ? "bg-blue-900/30 text-blue-300 border-blue-800" : "bg-blue-100 text-blue-800 border-blue-200"}`,
1068
- children: [
1069
- "🤝 ",
1070
- t("partners.header.badge")
1071
- ]
1072
- }
1073
- ),
1074
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
1075
- "h2",
1076
- {
1077
- className: `text-3xl lg:text-5xl font-bold leading-tight ${isDarkMode ? "text-white" : "text-gray-800"}`,
1078
- children: [
1079
- t("partners.header.title"),
1080
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block bg-gradient-to-r from-blue-500 to-purple-500 bg-clip-text text-transparent mt-2", children: t("partners.header.subtitle") })
1081
- ]
1082
- }
1083
- )
1084
- ] }),
1101
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
1102
+ "div",
1103
+ {
1104
+ className: `inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border shadow-sm ${isDarkMode ? "bg-blue-900/30 text-blue-300 border-blue-800" : "bg-blue-100 text-blue-800 border-blue-200"}`,
1105
+ children: [
1106
+ "🤝 ",
1107
+ sectionTitle
1108
+ ]
1109
+ }
1110
+ ) }),
1085
1111
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
1086
1112
  "div",
1087
1113
  {
@@ -1367,114 +1393,54 @@ const TestimonialsSection = ({ data, t, isDarkMode, section }) => {
1367
1393
  ] })
1368
1394
  ] }) });
1369
1395
  };
1370
- const PartnerListCard = ({ partner, idx = 0, t, isDarkMode, getLogoUrl }) => {
1371
- const itemRef = useRef(null);
1372
- const [visible, setVisible] = useState(false);
1373
- const [isHovered, setIsHovered] = useState(false);
1374
- if (!partner) return null;
1375
- useEffect(() => {
1376
- const observer = new IntersectionObserver(
1377
- (entries) => {
1378
- entries.forEach((entry) => {
1379
- if (entry.isIntersecting) {
1380
- setVisible(true);
1381
- observer.unobserve(entry.target);
1382
- }
1383
- });
1384
- },
1385
- { threshold: 0.2 }
1386
- );
1387
- if (itemRef.current) observer.observe(itemRef.current);
1388
- return () => itemRef.current && observer.unobserve(itemRef.current);
1389
- }, []);
1390
- const logoSrc = getLogoUrl ? getLogoUrl(partner.logoUrl) : null;
1391
- const handleImageError = (e) => {
1392
- e.target.style.display = "none";
1393
- e.target.nextSibling.style.display = "flex";
1394
- };
1395
- const handleClick = () => {
1396
- if (partner.websiteUrl) {
1397
- window.open(partner.websiteUrl, "_blank", "noopener,noreferrer");
1398
- }
1399
- };
1396
+ const PartnerListCard = ({ partner, idx, t, isDarkMode, getLogoUrl }) => {
1397
+ const logoUrl = getLogoUrl(partner.logo);
1400
1398
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
1401
- "div",
1399
+ "a",
1402
1400
  {
1403
- ref: itemRef,
1404
- className: `relative flex flex-col items-center justify-center p-4 rounded-xl shadow-sm transition-all duration-700 ease-out cursor-pointer overflow-hidden min-h-[180px] w-full
1405
- ${isDarkMode ? "bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 border border-blue-800" : "bg-white border border-gray-200"}
1406
- ${visible ? "opacity-100" : "opacity-0"}
1407
- ${isHovered ? isDarkMode ? "border-blue-500 shadow-lg shadow-blue-500/20" : "border-blue-300 shadow-lg shadow-blue-500/20" : ""}`,
1401
+ href: partner.website || partner.url || "#",
1402
+ target: partner.website || partner.url ? "_blank" : "_self",
1403
+ rel: partner.website || partner.url ? "noopener noreferrer" : "",
1404
+ className: `group relative overflow-hidden rounded-2xl transition-all duration-500 hover:-translate-y-2 hover:scale-105 ${isDarkMode ? "bg-gradient-to-br from-gray-800 to-gray-900 border border-gray-700 hover:border-blue-500/50" : "bg-gradient-to-br from-white to-gray-50 border border-gray-200 hover:border-blue-400/50"} shadow-lg hover:shadow-2xl`,
1408
1405
  style: {
1409
- transitionDelay: `${idx * 150}ms`,
1410
- transform: `translateY(${isHovered ? "-4px" : "0px"}) scale(${visible ? "1" : "0.75"})`,
1411
- position: "relative",
1412
- zIndex: isHovered ? 10 : 1
1406
+ animationDelay: `${idx * 0.1}s`,
1407
+ textDecoration: "none"
1413
1408
  },
1414
- onMouseEnter: () => setIsHovered(true),
1415
- onMouseLeave: () => setIsHovered(false),
1416
- onClick: handleClick,
1417
1409
  children: [
1418
- isDarkMode && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
1419
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute w-12 h-12 bg-white/5 rounded-full pointer-events-none", style: { left: "10%", top: "20%", zIndex: -1 } }),
1420
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute w-10 h-10 bg-white/5 rounded-full pointer-events-none", style: { right: "30%", bottom: "10%", zIndex: -1 } }),
1421
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute w-14 h-14 bg-white/5 rounded-md pointer-events-none", style: { left: "20%", bottom: "30%", zIndex: -1 } }),
1422
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 opacity-20 pointer-events-none", style: { zIndex: -1 }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
1410
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-blue-500/0 via-purple-500/0 to-pink-500/0 group-hover:from-blue-500/10 group-hover:via-purple-500/10 group-hover:to-pink-500/10 transition-all duration-700" }),
1411
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative p-6 flex flex-col items-center justify-center min-h-[180px]", children: [
1412
+ logoUrl ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-full h-24 flex items-center justify-center mb-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
1413
+ "img",
1414
+ {
1415
+ src: logoUrl,
1416
+ alt: partner.name || t("partners.logoAlt") || "Partner logo",
1417
+ className: "max-w-full max-h-full object-contain filter grayscale group-hover:grayscale-0 transition-all duration-500 group-hover:scale-110",
1418
+ loading: "lazy"
1419
+ }
1420
+ ) }) : /* @__PURE__ */ jsxRuntimeExports.jsx(
1423
1421
  "div",
1424
1422
  {
1425
- style: {
1426
- backgroundImage: `url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.05'%3E%3Ccircle cx='30' cy='30' r='2'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")`,
1427
- backgroundSize: "60px 60px"
1428
- },
1429
- className: "w-full h-full"
1423
+ className: `w-20 h-20 rounded-full flex items-center justify-center mb-4 ${isDarkMode ? "bg-gray-700" : "bg-gray-200"}`,
1424
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-3xl", children: "🤝" })
1425
+ }
1426
+ ),
1427
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
1428
+ "h3",
1429
+ {
1430
+ className: `text-base font-bold text-center line-clamp-2 ${isDarkMode ? "text-white" : "text-gray-800"} group-hover:text-transparent group-hover:bg-gradient-to-r group-hover:from-blue-500 group-hover:to-purple-500 group-hover:bg-clip-text transition-all duration-300`,
1431
+ children: partner.name || t("partners.unnamed") || "Partner"
1430
1432
  }
1431
- ) })
1433
+ ),
1434
+ partner.description && /* @__PURE__ */ jsxRuntimeExports.jsx(
1435
+ "p",
1436
+ {
1437
+ className: `text-xs text-center mt-2 line-clamp-2 ${isDarkMode ? "text-gray-400" : "text-gray-600"}`,
1438
+ children: partner.description
1439
+ }
1440
+ )
1432
1441
  ] }),
1433
- /* @__PURE__ */ jsxRuntimeExports.jsx(
1434
- "div",
1435
- {
1436
- className: `relative w-20 h-14 flex items-center justify-center mb-4 rounded-lg overflow-hidden border transition-all duration-300
1437
- ${isDarkMode ? "border-gray-600" : "border-gray-200"}
1438
- ${isHovered ? "border-blue-500" : ""}
1439
- `,
1440
- style: {
1441
- background: isDarkMode ? isHovered ? "linear-gradient(135deg, #4b5563 0%, #374151 100%)" : "linear-gradient(135deg, #374151 0%, #1f2937 100%)" : isHovered ? "linear-gradient(135deg, #ffffff 0%, #f8fafc 100%)" : "linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%)"
1442
- },
1443
- children: logoSrc ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
1444
- /* @__PURE__ */ jsxRuntimeExports.jsx(
1445
- "img",
1446
- {
1447
- src: logoSrc,
1448
- alt: partner.name || (t == null ? void 0 : t("partners.logoAlt")) || "Partner logo",
1449
- className: "max-w-full max-h-full object-contain transition-all duration-300",
1450
- style: {
1451
- filter: isDarkMode ? isHovered ? "grayscale(0) opacity(1)" : "grayscale(0.3) opacity(0.8)" : isHovered ? "grayscale(0) opacity(1)" : "grayscale(0.2) opacity(0.9)",
1452
- transform: isHovered ? "scale(1.05)" : "scale(1)"
1453
- },
1454
- onError: handleImageError,
1455
- loading: "lazy"
1456
- }
1457
- ),
1458
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center", style: { display: "none" }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white font-bold text-center text-sm px-1", children: partner.name }) })
1459
- ] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-full h-full bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white font-bold text-center text-sm px-1", children: partner.name }) })
1460
- }
1461
- ),
1462
- /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: `font-bold text-center mb-2 text-sm leading-tight ${isDarkMode ? "text-white" : "text-gray-900"}`, children: partner.name }),
1463
- partner.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-xs text-center mb-3 line-clamp-2 px-1 ${isDarkMode ? "text-gray-300" : "text-gray-600"}`, children: partner.description }),
1464
- partner.websiteUrl && /* @__PURE__ */ jsxRuntimeExports.jsx(
1465
- "div",
1466
- {
1467
- className: "transition-all duration-300 absolute bottom-4",
1468
- style: {
1469
- opacity: isHovered ? 1 : 0,
1470
- transform: `translateY(${isHovered ? "0px" : "4px"})`
1471
- },
1472
- children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-xs text-blue-600 font-medium", children: [
1473
- (t == null ? void 0 : t("partners.viewDetails")) || "Xem chi tiết",
1474
- " →"
1475
- ] })
1476
- }
1477
- )
1442
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute top-0 right-0 w-20 h-20 bg-gradient-to-br from-blue-500/20 to-purple-500/20 rounded-bl-full opacity-0 group-hover:opacity-100 transition-opacity duration-500" }),
1443
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute bottom-0 left-0 w-20 h-20 bg-gradient-to-tr from-purple-500/20 to-pink-500/20 rounded-tr-full opacity-0 group-hover:opacity-100 transition-opacity duration-500" })
1478
1444
  ]
1479
1445
  }
1480
1446
  );
@@ -1490,7 +1456,7 @@ function useWindowSize() {
1490
1456
  }, []);
1491
1457
  return width;
1492
1458
  }
1493
- const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "" }) => {
1459
+ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "", section }) => {
1494
1460
  const [partnersData, setPartnersData] = useState([]);
1495
1461
  const [error, setError] = useState(null);
1496
1462
  const [loading, setLoading] = useState(true);
@@ -1498,6 +1464,7 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "" }
1498
1464
  const [partnersVisible, setPartnersVisible] = useState(false);
1499
1465
  const partnersRef = useRef(null);
1500
1466
  const windowWidth = useWindowSize();
1467
+ const sectionTitle = (section == null ? void 0 : section.title) || "...";
1501
1468
  const getLogoUrl = (logoUrl) => {
1502
1469
  if (!logoUrl) return null;
1503
1470
  if (logoUrl.startsWith("http")) return logoUrl;
@@ -1578,28 +1545,16 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "" }
1578
1545
  }
1579
1546
  if (!partnersData.length) return null;
1580
1547
  return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
1581
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12", children: [
1582
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
1583
- "div",
1584
- {
1585
- className: `inline-block px-4 py-2 rounded-full text-sm font-semibold mb-4 border shadow-sm ${isDarkMode ? "bg-blue-900/30 text-blue-300 border-blue-800" : "bg-blue-100 text-blue-800 border-blue-200"}`,
1586
- children: [
1587
- "🤝 ",
1588
- t("partners.badge") || "ĐỐI TÁC CHIẾN LƯỢC"
1589
- ]
1590
- }
1591
- ),
1592
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
1593
- "h2",
1594
- {
1595
- className: `text-3xl lg:text-5xl font-bold leading-tight ${isDarkMode ? "text-white" : "text-gray-800"}`,
1596
- children: [
1597
- t("partners.title.part1") || "Đồng hành cùng",
1598
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block bg-gradient-to-r from-blue-500 to-purple-500 bg-clip-text text-transparent mt-2", children: t("partners.title.part2") || "Những thương hiệu hàng đầu" })
1599
- ]
1600
- }
1601
- )
1602
- ] }),
1548
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
1549
+ "div",
1550
+ {
1551
+ className: `inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border shadow-sm ${isDarkMode ? "bg-blue-900/30 text-blue-300 border-blue-800" : "bg-blue-100 text-blue-800 border-blue-200"}`,
1552
+ children: [
1553
+ "🤝 ",
1554
+ sectionTitle
1555
+ ]
1556
+ }
1557
+ ) }),
1603
1558
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
1604
1559
  "div",
1605
1560
  {
@@ -1753,42 +1708,42 @@ const createLucideIcon = (iconName, iconNode) => {
1753
1708
  * This source code is licensed under the ISC license.
1754
1709
  * See the LICENSE file in the root directory of this source tree.
1755
1710
  */
1756
- const __iconNode$B = [
1711
+ const __iconNode$z = [
1757
1712
  ["path", { d: "M5 12h14", key: "1ays0h" }],
1758
1713
  ["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
1759
1714
  ];
1760
- const ArrowRight = createLucideIcon("arrow-right", __iconNode$B);
1715
+ const ArrowRight = createLucideIcon("arrow-right", __iconNode$z);
1761
1716
  /**
1762
1717
  * @license lucide-react v0.536.0 - ISC
1763
1718
  *
1764
1719
  * This source code is licensed under the ISC license.
1765
1720
  * See the LICENSE file in the root directory of this source tree.
1766
1721
  */
1767
- const __iconNode$A = [
1722
+ const __iconNode$y = [
1768
1723
  ["path", { d: "M2 4v16", key: "vw9hq8" }],
1769
1724
  ["path", { d: "M2 8h18a2 2 0 0 1 2 2v10", key: "1dgv2r" }],
1770
1725
  ["path", { d: "M2 17h20", key: "18nfp3" }],
1771
1726
  ["path", { d: "M6 8v9", key: "1yriud" }]
1772
1727
  ];
1773
- const Bed = createLucideIcon("bed", __iconNode$A);
1728
+ const Bed = createLucideIcon("bed", __iconNode$y);
1774
1729
  /**
1775
1730
  * @license lucide-react v0.536.0 - ISC
1776
1731
  *
1777
1732
  * This source code is licensed under the ISC license.
1778
1733
  * See the LICENSE file in the root directory of this source tree.
1779
1734
  */
1780
- const __iconNode$z = [
1735
+ const __iconNode$x = [
1781
1736
  ["path", { d: "M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16", key: "jecpp" }],
1782
1737
  ["rect", { width: "20", height: "14", x: "2", y: "6", rx: "2", key: "i6l2r4" }]
1783
1738
  ];
1784
- const Briefcase = createLucideIcon("briefcase", __iconNode$z);
1739
+ const Briefcase = createLucideIcon("briefcase", __iconNode$x);
1785
1740
  /**
1786
1741
  * @license lucide-react v0.536.0 - ISC
1787
1742
  *
1788
1743
  * This source code is licensed under the ISC license.
1789
1744
  * See the LICENSE file in the root directory of this source tree.
1790
1745
  */
1791
- const __iconNode$y = [
1746
+ const __iconNode$w = [
1792
1747
  ["path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z", key: "1b4qmf" }],
1793
1748
  ["path", { d: "M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2", key: "i71pzd" }],
1794
1749
  ["path", { d: "M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2", key: "10jefs" }],
@@ -1797,14 +1752,14 @@ const __iconNode$y = [
1797
1752
  ["path", { d: "M10 14h4", key: "kelpxr" }],
1798
1753
  ["path", { d: "M10 18h4", key: "1ulq68" }]
1799
1754
  ];
1800
- const Building2 = createLucideIcon("building-2", __iconNode$y);
1755
+ const Building2 = createLucideIcon("building-2", __iconNode$w);
1801
1756
  /**
1802
1757
  * @license lucide-react v0.536.0 - ISC
1803
1758
  *
1804
1759
  * This source code is licensed under the ISC license.
1805
1760
  * See the LICENSE file in the root directory of this source tree.
1806
1761
  */
1807
- const __iconNode$x = [
1762
+ const __iconNode$v = [
1808
1763
  ["rect", { width: "16", height: "20", x: "4", y: "2", rx: "2", ry: "2", key: "76otgf" }],
1809
1764
  ["path", { d: "M9 22v-4h6v4", key: "r93iot" }],
1810
1765
  ["path", { d: "M8 6h.01", key: "1dz90k" }],
@@ -1817,14 +1772,14 @@ const __iconNode$x = [
1817
1772
  ["path", { d: "M8 10h.01", key: "19clt8" }],
1818
1773
  ["path", { d: "M8 14h.01", key: "6423bh" }]
1819
1774
  ];
1820
- const Building = createLucideIcon("building", __iconNode$x);
1775
+ const Building = createLucideIcon("building", __iconNode$v);
1821
1776
  /**
1822
1777
  * @license lucide-react v0.536.0 - ISC
1823
1778
  *
1824
1779
  * This source code is licensed under the ISC license.
1825
1780
  * See the LICENSE file in the root directory of this source tree.
1826
1781
  */
1827
- const __iconNode$w = [
1782
+ const __iconNode$u = [
1828
1783
  ["rect", { width: "16", height: "20", x: "4", y: "2", rx: "2", key: "1nb95v" }],
1829
1784
  ["line", { x1: "8", x2: "16", y1: "6", y2: "6", key: "x4nwl0" }],
1830
1785
  ["line", { x1: "16", x2: "16", y1: "14", y2: "18", key: "wjye3r" }],
@@ -1836,86 +1791,86 @@ const __iconNode$w = [
1836
1791
  ["path", { d: "M12 18h.01", key: "mhygvu" }],
1837
1792
  ["path", { d: "M8 18h.01", key: "lrp35t" }]
1838
1793
  ];
1839
- const Calculator = createLucideIcon("calculator", __iconNode$w);
1794
+ const Calculator = createLucideIcon("calculator", __iconNode$u);
1840
1795
  /**
1841
1796
  * @license lucide-react v0.536.0 - ISC
1842
1797
  *
1843
1798
  * This source code is licensed under the ISC license.
1844
1799
  * See the LICENSE file in the root directory of this source tree.
1845
1800
  */
1846
- const __iconNode$v = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
1847
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$v);
1801
+ const __iconNode$t = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
1802
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$t);
1848
1803
  /**
1849
1804
  * @license lucide-react v0.536.0 - ISC
1850
1805
  *
1851
1806
  * This source code is licensed under the ISC license.
1852
1807
  * See the LICENSE file in the root directory of this source tree.
1853
1808
  */
1854
- const __iconNode$u = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
1855
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$u);
1809
+ const __iconNode$s = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
1810
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$s);
1856
1811
  /**
1857
1812
  * @license lucide-react v0.536.0 - ISC
1858
1813
  *
1859
1814
  * This source code is licensed under the ISC license.
1860
1815
  * See the LICENSE file in the root directory of this source tree.
1861
1816
  */
1862
- const __iconNode$t = [
1817
+ const __iconNode$r = [
1863
1818
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1864
1819
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
1865
1820
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
1866
1821
  ];
1867
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$t);
1822
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$r);
1868
1823
  /**
1869
1824
  * @license lucide-react v0.536.0 - ISC
1870
1825
  *
1871
1826
  * This source code is licensed under the ISC license.
1872
1827
  * See the LICENSE file in the root directory of this source tree.
1873
1828
  */
1874
- const __iconNode$s = [
1829
+ const __iconNode$q = [
1875
1830
  ["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }],
1876
1831
  ["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }]
1877
1832
  ];
1878
- const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$s);
1833
+ const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$q);
1879
1834
  /**
1880
1835
  * @license lucide-react v0.536.0 - ISC
1881
1836
  *
1882
1837
  * This source code is licensed under the ISC license.
1883
1838
  * See the LICENSE file in the root directory of this source tree.
1884
1839
  */
1885
- const __iconNode$r = [
1840
+ const __iconNode$p = [
1886
1841
  ["path", { d: "M12 6v6l4 2", key: "mmk7yg" }],
1887
1842
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]
1888
1843
  ];
1889
- const Clock = createLucideIcon("clock", __iconNode$r);
1844
+ const Clock = createLucideIcon("clock", __iconNode$p);
1890
1845
  /**
1891
1846
  * @license lucide-react v0.536.0 - ISC
1892
1847
  *
1893
1848
  * This source code is licensed under the ISC license.
1894
1849
  * See the LICENSE file in the root directory of this source tree.
1895
1850
  */
1896
- const __iconNode$q = [
1851
+ const __iconNode$o = [
1897
1852
  ["path", { d: "M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z", key: "p7xjir" }]
1898
1853
  ];
1899
- const Cloud = createLucideIcon("cloud", __iconNode$q);
1854
+ const Cloud = createLucideIcon("cloud", __iconNode$o);
1900
1855
  /**
1901
1856
  * @license lucide-react v0.536.0 - ISC
1902
1857
  *
1903
1858
  * This source code is licensed under the ISC license.
1904
1859
  * See the LICENSE file in the root directory of this source tree.
1905
1860
  */
1906
- const __iconNode$p = [
1861
+ const __iconNode$n = [
1907
1862
  ["ellipse", { cx: "12", cy: "5", rx: "9", ry: "3", key: "msslwz" }],
1908
1863
  ["path", { d: "M3 5V19A9 3 0 0 0 21 19V5", key: "1wlel7" }],
1909
1864
  ["path", { d: "M3 12A9 3 0 0 0 21 12", key: "mv7ke4" }]
1910
1865
  ];
1911
- const Database = createLucideIcon("database", __iconNode$p);
1866
+ const Database = createLucideIcon("database", __iconNode$n);
1912
1867
  /**
1913
1868
  * @license lucide-react v0.536.0 - ISC
1914
1869
  *
1915
1870
  * This source code is licensed under the ISC license.
1916
1871
  * See the LICENSE file in the root directory of this source tree.
1917
1872
  */
1918
- const __iconNode$o = [
1873
+ const __iconNode$m = [
1919
1874
  ["path", { d: "M12 16h.01", key: "1drbdi" }],
1920
1875
  ["path", { d: "M16 16h.01", key: "1f9h7w" }],
1921
1876
  [
@@ -1927,40 +1882,40 @@ const __iconNode$o = [
1927
1882
  ],
1928
1883
  ["path", { d: "M8 16h.01", key: "18s6g9" }]
1929
1884
  ];
1930
- const Factory = createLucideIcon("factory", __iconNode$o);
1885
+ const Factory = createLucideIcon("factory", __iconNode$m);
1931
1886
  /**
1932
1887
  * @license lucide-react v0.536.0 - ISC
1933
1888
  *
1934
1889
  * This source code is licensed under the ISC license.
1935
1890
  * See the LICENSE file in the root directory of this source tree.
1936
1891
  */
1937
- const __iconNode$n = [
1892
+ const __iconNode$l = [
1938
1893
  ["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
1939
1894
  ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
1940
1895
  ["path", { d: "M10 9H8", key: "b1mrlr" }],
1941
1896
  ["path", { d: "M16 13H8", key: "t4e002" }],
1942
1897
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
1943
1898
  ];
1944
- const FileText = createLucideIcon("file-text", __iconNode$n);
1899
+ const FileText = createLucideIcon("file-text", __iconNode$l);
1945
1900
  /**
1946
1901
  * @license lucide-react v0.536.0 - ISC
1947
1902
  *
1948
1903
  * This source code is licensed under the ISC license.
1949
1904
  * See the LICENSE file in the root directory of this source tree.
1950
1905
  */
1951
- const __iconNode$m = [
1906
+ const __iconNode$k = [
1952
1907
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
1953
1908
  ["path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20", key: "13o1zl" }],
1954
1909
  ["path", { d: "M2 12h20", key: "9i4pu4" }]
1955
1910
  ];
1956
- const Globe = createLucideIcon("globe", __iconNode$m);
1911
+ const Globe = createLucideIcon("globe", __iconNode$k);
1957
1912
  /**
1958
1913
  * @license lucide-react v0.536.0 - ISC
1959
1914
  *
1960
1915
  * This source code is licensed under the ISC license.
1961
1916
  * See the LICENSE file in the root directory of this source tree.
1962
1917
  */
1963
- const __iconNode$l = [
1918
+ const __iconNode$j = [
1964
1919
  [
1965
1920
  "path",
1966
1921
  {
@@ -1971,14 +1926,14 @@ const __iconNode$l = [
1971
1926
  ["path", { d: "M22 10v6", key: "1lu8f3" }],
1972
1927
  ["path", { d: "M6 12.5V16a6 3 0 0 0 12 0v-3.5", key: "1r8lef" }]
1973
1928
  ];
1974
- const GraduationCap = createLucideIcon("graduation-cap", __iconNode$l);
1929
+ const GraduationCap = createLucideIcon("graduation-cap", __iconNode$j);
1975
1930
  /**
1976
1931
  * @license lucide-react v0.536.0 - ISC
1977
1932
  *
1978
1933
  * This source code is licensed under the ISC license.
1979
1934
  * See the LICENSE file in the root directory of this source tree.
1980
1935
  */
1981
- const __iconNode$k = [
1936
+ const __iconNode$i = [
1982
1937
  [
1983
1938
  "path",
1984
1939
  {
@@ -1987,14 +1942,14 @@ const __iconNode$k = [
1987
1942
  }
1988
1943
  ]
1989
1944
  ];
1990
- const Heart = createLucideIcon("heart", __iconNode$k);
1945
+ const Heart = createLucideIcon("heart", __iconNode$i);
1991
1946
  /**
1992
1947
  * @license lucide-react v0.536.0 - ISC
1993
1948
  *
1994
1949
  * This source code is licensed under the ISC license.
1995
1950
  * See the LICENSE file in the root directory of this source tree.
1996
1951
  */
1997
- const __iconNode$j = [
1952
+ const __iconNode$h = [
1998
1953
  ["path", { d: "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8", key: "5wwlr5" }],
1999
1954
  [
2000
1955
  "path",
@@ -2004,33 +1959,33 @@ const __iconNode$j = [
2004
1959
  }
2005
1960
  ]
2006
1961
  ];
2007
- const House = createLucideIcon("house", __iconNode$j);
1962
+ const House = createLucideIcon("house", __iconNode$h);
2008
1963
  /**
2009
1964
  * @license lucide-react v0.536.0 - ISC
2010
1965
  *
2011
1966
  * This source code is licensed under the ISC license.
2012
1967
  * See the LICENSE file in the root directory of this source tree.
2013
1968
  */
2014
- const __iconNode$i = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
2015
- const LoaderCircle = createLucideIcon("loader-circle", __iconNode$i);
1969
+ const __iconNode$g = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
1970
+ const LoaderCircle = createLucideIcon("loader-circle", __iconNode$g);
2016
1971
  /**
2017
1972
  * @license lucide-react v0.536.0 - ISC
2018
1973
  *
2019
1974
  * This source code is licensed under the ISC license.
2020
1975
  * See the LICENSE file in the root directory of this source tree.
2021
1976
  */
2022
- const __iconNode$h = [
1977
+ const __iconNode$f = [
2023
1978
  ["path", { d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7", key: "132q7q" }],
2024
1979
  ["rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", key: "izxlao" }]
2025
1980
  ];
2026
- const Mail = createLucideIcon("mail", __iconNode$h);
1981
+ const Mail = createLucideIcon("mail", __iconNode$f);
2027
1982
  /**
2028
1983
  * @license lucide-react v0.536.0 - ISC
2029
1984
  *
2030
1985
  * This source code is licensed under the ISC license.
2031
1986
  * See the LICENSE file in the root directory of this source tree.
2032
1987
  */
2033
- const __iconNode$g = [
1988
+ const __iconNode$e = [
2034
1989
  [
2035
1990
  "path",
2036
1991
  {
@@ -2041,39 +1996,7 @@ const __iconNode$g = [
2041
1996
  ["path", { d: "M6 14a12 12 0 0 0 2.4 7.2 2 2 0 0 0 3.2-2.4A8 8 0 0 1 10 14", key: "1853fq" }],
2042
1997
  ["path", { d: "M8 6v8", key: "15ugcq" }]
2043
1998
  ];
2044
- const Megaphone = createLucideIcon("megaphone", __iconNode$g);
2045
- /**
2046
- * @license lucide-react v0.536.0 - ISC
2047
- *
2048
- * This source code is licensed under the ISC license.
2049
- * See the LICENSE file in the root directory of this source tree.
2050
- */
2051
- const __iconNode$f = [
2052
- [
2053
- "path",
2054
- {
2055
- d: "M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",
2056
- key: "1sd12s"
2057
- }
2058
- ]
2059
- ];
2060
- const MessageCircle = createLucideIcon("message-circle", __iconNode$f);
2061
- /**
2062
- * @license lucide-react v0.536.0 - ISC
2063
- *
2064
- * This source code is licensed under the ISC license.
2065
- * See the LICENSE file in the root directory of this source tree.
2066
- */
2067
- const __iconNode$e = [
2068
- [
2069
- "path",
2070
- {
2071
- d: "M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",
2072
- key: "18887p"
2073
- }
2074
- ]
2075
- ];
2076
- const MessageSquare = createLucideIcon("message-square", __iconNode$e);
1999
+ const Megaphone = createLucideIcon("megaphone", __iconNode$e);
2077
2000
  /**
2078
2001
  * @license lucide-react v0.536.0 - ISC
2079
2002
  *
@@ -2419,316 +2342,252 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2419
2342
  });
2420
2343
  const inputBaseClasses = `w-full px-4 py-3 rounded-xl border transition-all duration-200 focus:ring-2 focus:ring-indigo-500/20 focus:outline-none ${isDarkMode ? "bg-gray-700 border-gray-600 text-white placeholder-gray-400 focus:border-indigo-500" : "bg-white border-slate-300 text-slate-900 placeholder-slate-500 focus:border-indigo-500"}`;
2421
2344
  const labelClasses = `block text-sm font-semibold mb-2 ${isDarkMode ? "text-gray-300" : "text-slate-700"}`;
2422
- return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid lg:grid-cols-3 gap-12", children: [
2423
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lg:col-span-2", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `rounded-2xl p-8 shadow-lg border transition-colors duration-200 ${isDarkMode ? "bg-gray-800 border-gray-700" : "bg-white border-slate-200"}`, children: [
2424
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center mb-6", children: [
2425
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-10 h-10 rounded-lg bg-gradient-to-r from-indigo-500 to-purple-600 flex items-center justify-center mr-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Send, { size: 20, className: "text-white" }) }),
2426
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2427
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: `text-2xl font-bold transition-colors duration-200 ${isDarkMode ? "text-white" : "text-slate-800"}`, children: t("form.title") || "Gửi yêu cầu tư vấn" }),
2428
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-sm transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-slate-600"}`, children: t("form.subtitle") || "Điền thông tin để nhận tư vấn miễn phí từ chuyên gia" })
2429
- ] })
2430
- ] }),
2431
- submitStatus && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `mb-6 p-4 rounded-xl border transition-colors duration-200 ${submitStatus === "success" ? isDarkMode ? "bg-emerald-900/50 border-emerald-700 text-emerald-300" : "bg-emerald-50 border-emerald-200 text-emerald-800" : isDarkMode ? "bg-red-900/50 border-red-700 text-red-300" : "bg-red-50 border-red-200 text-red-800"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center", children: [
2432
- submitStatus === "success" ? /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 20, className: "mr-2 flex-shrink-0" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 20, className: "mr-2 flex-shrink-0" }),
2433
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-medium", children: submitMessage })
2434
- ] }) }),
2435
- /* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, className: "space-y-6", children: [
2436
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
2437
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2438
- /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: labelClasses, children: [
2439
- t("form.fields.fullName") || "Họ và tên",
2440
- " *"
2441
- ] }),
2442
- /* @__PURE__ */ jsxRuntimeExports.jsx(
2443
- "input",
2444
- {
2445
- type: "text",
2446
- name: "fullName",
2447
- value: formData.fullName || "",
2448
- onChange: handleInputChange,
2449
- onBlur: handleBlur,
2450
- className: `${inputBaseClasses} ${formErrors.fullName ? "border-red-500" : ""}`,
2451
- placeholder: "Nguyễn Văn A",
2452
- required: true
2453
- }
2454
- ),
2455
- formErrors.fullName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2456
- /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2457
- formErrors.fullName
2458
- ] })
2459
- ] }),
2460
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2461
- /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: labelClasses, children: [
2462
- t("form.fields.workEmail") || "Email",
2463
- " *"
2464
- ] }),
2465
- /* @__PURE__ */ jsxRuntimeExports.jsx(
2466
- "input",
2467
- {
2468
- type: "email",
2469
- name: "workEmail",
2470
- value: formData.workEmail || "",
2471
- onChange: handleInputChange,
2472
- onBlur: handleBlur,
2473
- className: `${inputBaseClasses} ${formErrors.workEmail ? "border-red-500" : ""}`,
2474
- placeholder: "email@company.com",
2475
- required: true
2476
- }
2477
- ),
2478
- formErrors.workEmail && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2479
- /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2480
- formErrors.workEmail
2481
- ] })
2482
- ] })
2483
- ] }),
2484
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
2485
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2486
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.phoneNumber") || "Số điện thoại" }),
2487
- /* @__PURE__ */ jsxRuntimeExports.jsx(
2488
- "input",
2489
- {
2490
- type: "tel",
2491
- name: "phoneNumber",
2492
- value: formData.phoneNumber || "",
2493
- onChange: handleInputChange,
2494
- onBlur: handleBlur,
2495
- className: `${inputBaseClasses} ${formErrors.phoneNumber ? "border-red-500" : ""}`,
2496
- placeholder: "0901 234 567"
2497
- }
2498
- ),
2499
- formErrors.phoneNumber && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2500
- /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2501
- formErrors.phoneNumber
2502
- ] })
2503
- ] }),
2504
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2505
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.companyName") || "Công ty/Tổ chức" }),
2506
- /* @__PURE__ */ jsxRuntimeExports.jsx(
2507
- "input",
2508
- {
2509
- type: "text",
2510
- name: "companyName",
2511
- value: formData.companyName || "",
2512
- onChange: handleInputChange,
2513
- onBlur: handleBlur,
2514
- className: `${inputBaseClasses} ${formErrors.companyName ? "border-red-500" : ""}`,
2515
- placeholder: "ABC Company"
2516
- }
2517
- ),
2518
- formErrors.companyName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2519
- /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2520
- formErrors.companyName
2521
- ] })
2522
- ] })
2523
- ] }),
2524
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
2525
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2526
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.jobTitle") || "Chức vụ" }),
2527
- /* @__PURE__ */ jsxRuntimeExports.jsx(
2528
- "input",
2529
- {
2530
- type: "text",
2531
- name: "jobTitle",
2532
- value: formData.jobTitle || "",
2533
- onChange: handleInputChange,
2534
- onBlur: handleBlur,
2535
- className: `${inputBaseClasses} ${formErrors.jobTitle ? "border-red-500" : ""}`,
2536
- placeholder: "Giám đốc công nghệ"
2537
- }
2538
- ),
2539
- formErrors.jobTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2540
- /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2541
- formErrors.jobTitle
2542
- ] })
2543
- ] }),
2544
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2545
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.businessType") || "Loại hình kinh doanh" }),
2546
- /* @__PURE__ */ jsxRuntimeExports.jsx(
2547
- "input",
2548
- {
2549
- type: "text",
2550
- name: "businessType",
2551
- value: formData.businessType || "",
2552
- onChange: handleInputChange,
2553
- className: inputBaseClasses,
2554
- placeholder: "Công nghệ thông tin"
2555
- }
2556
- )
2557
- ] })
2558
- ] }),
2559
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
2560
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2561
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.expectedBudget") || "Ngân sách dự kiến" }),
2562
- /* @__PURE__ */ jsxRuntimeExports.jsx(
2563
- "input",
2564
- {
2565
- type: "text",
2566
- name: "expectedBudget",
2567
- value: formData.expectedBudget || "",
2568
- onChange: handleInputChange,
2569
- className: inputBaseClasses,
2570
- placeholder: "500,000,000 - 1,000,000,000 VNĐ"
2571
- }
2572
- )
2573
- ] }),
2574
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2575
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.expectedTimeline") || "Thời gian dự kiến" }),
2576
- /* @__PURE__ */ jsxRuntimeExports.jsx(
2577
- "input",
2578
- {
2579
- type: "text",
2580
- name: "expectedTimeline",
2581
- value: formData.expectedTimeline || "",
2582
- onChange: handleInputChange,
2583
- className: inputBaseClasses,
2584
- placeholder: "3-6 tháng"
2585
- }
2586
- )
2587
- ] })
2588
- ] }),
2345
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid lg:grid-cols-3 gap-12", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lg:col-span-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `rounded-2xl p-8 shadow-lg border transition-colors duration-200 ${isDarkMode ? "bg-gray-800 border-gray-700" : "bg-white border-slate-200"}`, children: [
2346
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center mb-6", children: [
2347
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-10 h-10 rounded-lg bg-gradient-to-r from-indigo-500 to-purple-600 flex items-center justify-center mr-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Send, { size: 20, className: "text-white" }) }),
2348
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2349
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: `text-2xl font-bold transition-colors duration-200 ${isDarkMode ? "text-white" : "text-slate-800"}`, children: t("form.title") || "Gửi yêu cầu tư vấn" }),
2350
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-sm transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-slate-600"}`, children: t("form.subtitle") || "Điền thông tin để nhận tư vấn miễn phí từ chuyên gia" })
2351
+ ] })
2352
+ ] }),
2353
+ submitStatus && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `mb-6 p-4 rounded-xl border transition-colors duration-200 ${submitStatus === "success" ? isDarkMode ? "bg-emerald-900/50 border-emerald-700 text-emerald-300" : "bg-emerald-50 border-emerald-200 text-emerald-800" : isDarkMode ? "bg-red-900/50 border-red-700 text-red-300" : "bg-red-50 border-red-200 text-red-800"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center", children: [
2354
+ submitStatus === "success" ? /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 20, className: "mr-2 flex-shrink-0" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 20, className: "mr-2 flex-shrink-0" }),
2355
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-medium", children: submitMessage })
2356
+ ] }) }),
2357
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, className: "space-y-6", children: [
2358
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
2589
2359
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2590
2360
  /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: labelClasses, children: [
2591
- t("form.fields.requestTitle") || "Tiêu đề yêu cầu",
2361
+ t("form.fields.fullName") || "Họ tên",
2592
2362
  " *"
2593
2363
  ] }),
2594
2364
  /* @__PURE__ */ jsxRuntimeExports.jsx(
2595
2365
  "input",
2596
2366
  {
2597
2367
  type: "text",
2598
- name: "requestTitle",
2599
- value: formData.requestTitle || "",
2368
+ name: "fullName",
2369
+ value: formData.fullName || "",
2600
2370
  onChange: handleInputChange,
2601
2371
  onBlur: handleBlur,
2602
- className: `${inputBaseClasses} ${formErrors.requestTitle ? "border-red-500" : ""}`,
2603
- placeholder: "Phát triển hệ thống quản lý bán hàng",
2372
+ className: `${inputBaseClasses} ${formErrors.fullName ? "border-red-500" : ""}`,
2373
+ placeholder: t("contact.form.namePlaceholder"),
2604
2374
  required: true
2605
2375
  }
2606
2376
  ),
2607
- formErrors.requestTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2377
+ formErrors.fullName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2608
2378
  /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2609
- formErrors.requestTitle
2379
+ formErrors.fullName
2610
2380
  ] })
2611
2381
  ] }),
2612
2382
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2613
2383
  /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: labelClasses, children: [
2614
- t("form.fields.requestDescription") || "Mô tả yêu cầu",
2384
+ t("form.fields.workEmail") || "Email",
2615
2385
  " *"
2616
2386
  ] }),
2617
2387
  /* @__PURE__ */ jsxRuntimeExports.jsx(
2618
- "textarea",
2388
+ "input",
2619
2389
  {
2620
- name: "requestDescription",
2621
- value: formData.requestDescription || "",
2390
+ type: "email",
2391
+ name: "workEmail",
2392
+ value: formData.workEmail || "",
2622
2393
  onChange: handleInputChange,
2623
2394
  onBlur: handleBlur,
2624
- rows: "5",
2625
- className: `${inputBaseClasses} resize-none ${formErrors.requestDescription ? "border-red-500" : ""}`,
2626
- placeholder: "Vui lòng mô tả chi tiết về nhu cầu của bạn...",
2395
+ className: `${inputBaseClasses} ${formErrors.workEmail ? "border-red-500" : ""}`,
2396
+ placeholder: "email@company.com",
2627
2397
  required: true
2628
2398
  }
2629
2399
  ),
2630
- formErrors.requestDescription && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2400
+ formErrors.workEmail && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2631
2401
  /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2632
- formErrors.requestDescription
2402
+ formErrors.workEmail
2633
2403
  ] })
2634
- ] }),
2635
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center space-x-4", children: [
2404
+ ] })
2405
+ ] }),
2406
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
2407
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2408
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.phoneNumber") || "Số điện thoại" }),
2636
2409
  /* @__PURE__ */ jsxRuntimeExports.jsx(
2637
- "button",
2410
+ "input",
2638
2411
  {
2639
- type: "submit",
2640
- disabled: isSubmitting,
2641
- className: "flex-1 bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-4 px-6 rounded-xl hover:from-indigo-700 hover:to-purple-700 transition-all transform hover:scale-105 disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none flex items-center justify-center font-semibold shadow-lg",
2642
- children: isSubmitting ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
2643
- /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "animate-spin h-5 w-5 mr-2" }),
2644
- t("form.submitting") || "Đang gửi..."
2645
- ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
2646
- /* @__PURE__ */ jsxRuntimeExports.jsx(Send, { size: 20, className: "mr-2" }),
2647
- t("form.submit") || "Gửi yêu cầu"
2648
- ] })
2412
+ type: "tel",
2413
+ name: "phoneNumber",
2414
+ value: formData.phoneNumber || "",
2415
+ onChange: handleInputChange,
2416
+ onBlur: handleBlur,
2417
+ className: `${inputBaseClasses} ${formErrors.phoneNumber ? "border-red-500" : ""}`,
2418
+ placeholder: "0901 234 567"
2649
2419
  }
2650
2420
  ),
2651
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
2652
- "button",
2421
+ formErrors.phoneNumber && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2422
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2423
+ formErrors.phoneNumber
2424
+ ] })
2425
+ ] }),
2426
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2427
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.companyName") || "Công ty/Tổ chức" }),
2428
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
2429
+ "input",
2653
2430
  {
2654
- type: "button",
2655
- className: `px-6 py-4 rounded-xl border-2 font-semibold transition-all hover:scale-105 ${isDarkMode ? "border-gray-600 text-gray-300 hover:bg-gray-700" : "border-slate-300 text-slate-700 hover:bg-slate-50"}`,
2656
- children: [
2657
- /* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 20, className: "inline mr-2" }),
2658
- t("form.callNow") || "Gọi ngay"
2659
- ]
2431
+ type: "text",
2432
+ name: "companyName",
2433
+ value: formData.companyName || "",
2434
+ onChange: handleInputChange,
2435
+ onBlur: handleBlur,
2436
+ className: `${inputBaseClasses} ${formErrors.companyName ? "border-red-500" : ""}`,
2437
+ placeholder: t("contact.form.fields.company")
2660
2438
  }
2661
- )
2662
- ] }),
2663
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `flex items-center space-x-2 text-sm transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-slate-600"}`, children: [
2664
- /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 16, className: "text-emerald-500" }),
2665
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t("form.privacy") || "Cam kết bảo mật thông tin và phản hồi trong 24 giờ" })
2439
+ ),
2440
+ formErrors.companyName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2441
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2442
+ formErrors.companyName
2443
+ ] })
2666
2444
  ] })
2667
- ] })
2668
- ] }) }),
2669
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
2670
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `rounded-2xl p-6 shadow-lg text-white transition-colors duration-200 ${isDarkMode ? "bg-gradient-to-br from-indigo-900 to-purple-900" : "bg-gradient-to-br from-indigo-600 to-purple-600"}`, children: [
2671
- /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "font-bold mb-3", children: t("sidebar.quickContact.title") || "Cần hỗ trợ ngay?" }),
2672
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-indigo-100 text-sm mb-4", children: t("sidebar.quickContact.description") || "Liên hệ trực tiếp để được tư vấn nhanh chóng" }),
2673
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3", children: [
2674
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
2675
- "a",
2445
+ ] }),
2446
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
2447
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2448
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.jobTitle") || "Chức vụ" }),
2449
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
2450
+ "input",
2676
2451
  {
2677
- href: "tel:19005588",
2678
- className: "flex items-center justify-center w-full bg-white/20 backdrop-blur-sm hover:bg-white/30 py-3 rounded-xl transition-all font-semibold",
2679
- children: [
2680
- /* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 18, className: "mr-2" }),
2681
- "1900 5588"
2682
- ]
2452
+ type: "text",
2453
+ name: "jobTitle",
2454
+ value: formData.jobTitle || "",
2455
+ onChange: handleInputChange,
2456
+ onBlur: handleBlur,
2457
+ className: `${inputBaseClasses} ${formErrors.jobTitle ? "border-red-500" : ""}`,
2458
+ placeholder: t("contact.form.positionPlaceholder")
2683
2459
  }
2684
2460
  ),
2685
- /* @__PURE__ */ jsxRuntimeExports.jsxs("button", { className: "flex items-center justify-center w-full border border-white/30 hover:bg-white/10 py-3 rounded-xl transition-all font-semibold", children: [
2686
- /* @__PURE__ */ jsxRuntimeExports.jsx(MessageSquare, { size: 18, className: "mr-2" }),
2687
- "Live Chat"
2461
+ formErrors.jobTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2462
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2463
+ formErrors.jobTitle
2688
2464
  ] })
2465
+ ] }),
2466
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2467
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.businessType") || "Loại hình kinh doanh" }),
2468
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
2469
+ "input",
2470
+ {
2471
+ type: "text",
2472
+ name: "businessType",
2473
+ value: formData.businessType || "",
2474
+ onChange: handleInputChange,
2475
+ className: inputBaseClasses,
2476
+ placeholder: "Công nghệ thông tin"
2477
+ }
2478
+ )
2689
2479
  ] })
2690
2480
  ] }),
2691
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `rounded-2xl p-6 shadow-lg border transition-colors duration-200 ${isDarkMode ? "bg-gray-800 border-gray-700" : "bg-white border-slate-200"}`, children: [
2692
- /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: `font-bold mb-4 transition-colors duration-200 ${isDarkMode ? "text-white" : "text-slate-800"}`, children: t("sidebar.contactInfo.title") || "Thông tin liên hệ" }),
2693
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
2694
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center space-x-3", children: [
2695
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-10 h-10 rounded-lg flex items-center justify-center ${isDarkMode ? "bg-indigo-900/50 text-indigo-400" : "bg-indigo-50 text-indigo-600"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 18 }) }),
2696
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2697
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `font-semibold transition-colors duration-200 ${isDarkMode ? "text-white" : "text-slate-800"}`, children: "1900 5588" }),
2698
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-sm transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-slate-600"}`, children: "Hotline 24/7" })
2699
- ] })
2700
- ] }),
2701
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center space-x-3", children: [
2702
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-10 h-10 rounded-lg flex items-center justify-center ${isDarkMode ? "bg-emerald-900/50 text-emerald-400" : "bg-emerald-50 text-emerald-600"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Mail, { size: 18 }) }),
2703
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2704
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `font-semibold transition-colors duration-200 ${isDarkMode ? "text-white" : "text-slate-800"}`, children: "support@asasystems.vn" }),
2705
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-sm transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-slate-600"}`, children: "Email hỗ trợ" })
2706
- ] })
2707
- ] }),
2708
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center space-x-3", children: [
2709
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-10 h-10 rounded-lg flex items-center justify-center ${isDarkMode ? "bg-purple-900/50 text-purple-400" : "bg-purple-50 text-purple-600"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageCircle, { size: 18 }) }),
2710
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2711
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `font-semibold transition-colors duration-200 ${isDarkMode ? "text-white" : "text-slate-800"}`, children: "Live Chat" }),
2712
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-sm transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-slate-600"}`, children: "T2-T6: 8:00-18:00" })
2713
- ] })
2714
- ] })
2481
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
2482
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2483
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.expectedBudget") || "Ngân sách dự kiến" }),
2484
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
2485
+ "input",
2486
+ {
2487
+ type: "text",
2488
+ name: "expectedBudget",
2489
+ value: formData.expectedBudget || "",
2490
+ onChange: handleInputChange,
2491
+ className: inputBaseClasses,
2492
+ placeholder: t("form.fields.expectedBudget")
2493
+ }
2494
+ )
2495
+ ] }),
2496
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2497
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.expectedTimeline") || "Thời gian dự kiến" }),
2498
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
2499
+ "input",
2500
+ {
2501
+ type: "text",
2502
+ name: "expectedTimeline",
2503
+ value: formData.expectedTimeline || "",
2504
+ onChange: handleInputChange,
2505
+ className: inputBaseClasses,
2506
+ placeholder: t("form.fields.expectedTimeline")
2507
+ }
2508
+ )
2715
2509
  ] })
2716
2510
  ] }),
2717
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `rounded-2xl p-6 shadow-lg border transition-colors duration-200 ${isDarkMode ? "bg-gray-800 border-gray-700" : "bg-white border-slate-200"}`, children: [
2718
- /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: `font-bold mb-4 transition-colors duration-200 ${isDarkMode ? "text-white" : "text-slate-800"}`, children: t("sidebar.faq.title") || "Câu hỏi thường gặp" }),
2719
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3", children: [
2720
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `p-3 rounded-lg transition-colors duration-200 ${isDarkMode ? "bg-gray-700" : "bg-slate-50"}`, children: [
2721
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `font-medium text-sm transition-colors duration-200 ${isDarkMode ? "text-white" : "text-slate-800"}`, children: t("sidebar.faq.responseTime.question") || "Thời gian phản hồi?" }),
2722
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-sm mt-1 transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-slate-600"}`, children: t("sidebar.faq.responseTime.answer") || "Trong vòng 24 giờ làm việc" })
2723
- ] }),
2724
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `p-3 rounded-lg transition-colors duration-200 ${isDarkMode ? "bg-gray-700" : "bg-slate-50"}`, children: [
2725
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `font-medium text-sm transition-colors duration-200 ${isDarkMode ? "text-white" : "text-slate-800"}`, children: t("sidebar.faq.consultationFree.question") || "Tư vấn có miễn phí?" }),
2726
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-sm mt-1 transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-slate-600"}`, children: t("sidebar.faq.consultationFree.answer") || "Hoàn toàn miễn phí" })
2727
- ] })
2511
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2512
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: labelClasses, children: [
2513
+ t("form.fields.requestTitle") || "Tiêu đề yêu cầu",
2514
+ " *"
2515
+ ] }),
2516
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
2517
+ "input",
2518
+ {
2519
+ type: "text",
2520
+ name: "requestTitle",
2521
+ value: formData.requestTitle || "",
2522
+ onChange: handleInputChange,
2523
+ onBlur: handleBlur,
2524
+ className: `${inputBaseClasses} ${formErrors.requestTitle ? "border-red-500" : ""}`,
2525
+ placeholder: t("contact.form.placeholders.subject"),
2526
+ required: true
2527
+ }
2528
+ ),
2529
+ formErrors.requestTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2530
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2531
+ formErrors.requestTitle
2728
2532
  ] })
2533
+ ] }),
2534
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2535
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: labelClasses, children: [
2536
+ t("form.fields.requestDescription") || "Mô tả yêu cầu",
2537
+ " *"
2538
+ ] }),
2539
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
2540
+ "textarea",
2541
+ {
2542
+ name: "requestDescription",
2543
+ value: formData.requestDescription || "",
2544
+ onChange: handleInputChange,
2545
+ onBlur: handleBlur,
2546
+ rows: "5",
2547
+ className: `${inputBaseClasses} resize-none ${formErrors.requestDescription ? "border-red-500" : ""}`,
2548
+ placeholder: t("contact.form.placeholders.message"),
2549
+ required: true
2550
+ }
2551
+ ),
2552
+ formErrors.requestDescription && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2553
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2554
+ formErrors.requestDescription
2555
+ ] })
2556
+ ] }),
2557
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center space-x-4", children: [
2558
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
2559
+ "button",
2560
+ {
2561
+ type: "submit",
2562
+ disabled: isSubmitting,
2563
+ className: "flex-1 bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-4 px-6 rounded-xl hover:from-indigo-700 hover:to-purple-700 transition-all transform hover:scale-105 disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none flex items-center justify-center font-semibold shadow-lg",
2564
+ children: isSubmitting ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
2565
+ /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "animate-spin h-5 w-5 mr-2" }),
2566
+ t("form.submitting") || "Đang gửi..."
2567
+ ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
2568
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Send, { size: 20, className: "mr-2" }),
2569
+ t("form.submit") || "Gửi yêu cầu"
2570
+ ] })
2571
+ }
2572
+ ),
2573
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
2574
+ "button",
2575
+ {
2576
+ type: "button",
2577
+ className: `px-6 py-4 rounded-xl border-2 font-semibold transition-all hover:scale-105 ${isDarkMode ? "border-gray-600 text-gray-300 hover:bg-gray-700" : "border-slate-300 text-slate-700 hover:bg-slate-50"}`,
2578
+ children: [
2579
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 20, className: "inline mr-2" }),
2580
+ t("form.callNow") || "Gọi ngay"
2581
+ ]
2582
+ }
2583
+ )
2584
+ ] }),
2585
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `flex items-center space-x-2 text-sm transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-slate-600"}`, children: [
2586
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 16, className: "text-emerald-500" }),
2587
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t("form.privacy") || "Cam kết bảo mật thông tin và phản hồi trong 24 giờ" })
2729
2588
  ] })
2730
2589
  ] })
2731
- ] }) }) });
2590
+ ] }) }) }) }) });
2732
2591
  };
2733
2592
  const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
2734
2593
  var _a, _b;
@@ -4286,7 +4145,7 @@ const FaqItem = ({ faq, index: index2, isActive, onToggle, isDarkMode, t }) => {
4286
4145
  }
4287
4146
  );
4288
4147
  };
4289
- const FaqSection = ({ data, t, isDarkMode }) => {
4148
+ const FaqSection = ({ data, t, isDarkMode, section }) => {
4290
4149
  const [activeIndex, setActiveIndex] = useState(-1);
4291
4150
  const faqs = useMemo(() => {
4292
4151
  if ((data == null ? void 0 : data.sectionDataBindingItems) && Array.isArray(data.sectionDataBindingItems)) {
@@ -4297,6 +4156,7 @@ const FaqSection = ({ data, t, isDarkMode }) => {
4297
4156
  const toggleFaq = (index2) => {
4298
4157
  setActiveIndex(activeIndex === index2 ? -1 : index2);
4299
4158
  };
4159
+ const sectionTitle = (section == null ? void 0 : section.title) || "...";
4300
4160
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(SectionWrapper, { isDarkMode, children: [
4301
4161
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto", children: [
4302
4162
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center mb-6 animate-fade-in", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `
@@ -4313,7 +4173,7 @@ const FaqSection = ({ data, t, isDarkMode }) => {
4313
4173
  }
4314
4174
  ) }) }),
4315
4175
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12 animate-fade-in", children: [
4316
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: `text-4xl font-bold mb-3 ${isDarkMode ? "text-white" : "text-gray-900"}`, children: (t == null ? void 0 : t("faq.title")) || "Frequently Asked Questions" }),
4176
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: `text-4xl font-bold mb-3 ${isDarkMode ? "text-white" : "text-gray-900"}`, children: sectionTitle }),
4317
4177
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `h-1 w-20 mx-auto rounded-full ${isDarkMode ? "bg-gradient-to-r from-blue-500 to-purple-500" : "bg-gradient-to-r from-blue-600 to-indigo-600"}` })
4318
4178
  ] }),
4319
4179
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-4", children: faqs.map((faq, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(