nvis-fe-cms-libs 1.1.41 → 2.0.0

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.
@@ -379,8 +379,7 @@ const CompanyValues = ({ companyData, t, isDarkMode }) => {
379
379
  tempDiv.innerHTML = html;
380
380
  let cleanText = tempDiv.textContent || tempDiv.innerText || "";
381
381
  return cleanText.replace(/&nbsp;/g, " ").replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/&#39;/g, "'").replace(/\s+/g, " ").trim();
382
- } catch (error) {
383
- console.error("Error cleaning HTML content:", error);
382
+ } catch (e) {
384
383
  return String(html || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim();
385
384
  }
386
385
  };
@@ -392,35 +391,28 @@ const CompanyValues = ({ companyData, t, isDarkMode }) => {
392
391
  const items = [
393
392
  {
394
393
  icon: "💡",
395
- bgLight: "bg-blue-100 text-blue-600",
396
- bgDark: "bg-blue-900/40 text-blue-300",
397
394
  title: t("about.companyValues.vision") || "Tầm nhìn",
398
- text: cleanHtmlContent(safeCompanyData.vision) || "Tầm nhìn của chúng tôi sẽ được cập nhật trong thời gian tới."
395
+ text: cleanHtmlContent(safeCompanyData.vision) || "Tầm nhìn của chúng tôi sẽ được cập nhật trong thời gian tới.",
396
+ bgClass: "bg-gradient-brand"
399
397
  },
400
398
  {
401
399
  icon: "🚀",
402
- bgLight: "bg-emerald-100 text-emerald-600",
403
- bgDark: "bg-emerald-900/40 text-emerald-300",
404
400
  title: t("about.companyValues.mission") || "Sứ mệnh",
405
- text: cleanHtmlContent(safeCompanyData.mission) || "Sứ mệnh của chúng tôi sẽ được cập nhật trong thời gian tới."
401
+ text: cleanHtmlContent(safeCompanyData.mission) || "Sứ mệnh của chúng tôi sẽ được cập nhật trong thời gian tới.",
402
+ bgClass: "bg-gradient-accent"
406
403
  },
407
404
  {
408
405
  icon: "💎",
409
- bgLight: "bg-purple-100 text-purple-600",
410
- bgDark: "bg-purple-900/40 text-purple-300",
411
406
  title: t("about.companyValues.coreValues") || "Giá trị cốt lõi",
412
- text: cleanHtmlContent(safeCompanyData.coreValues) || "Giá trị cốt lõi của chúng tôi sẽ được cập nhật trong thời gian tới."
407
+ text: cleanHtmlContent(safeCompanyData.coreValues) || "Giá trị cốt lõi của chúng tôi sẽ được cập nhật trong thời gian tới.",
408
+ bgClass: "bg-gradient-brand"
413
409
  }
414
410
  ];
415
- const validItems = items.filter((item) => {
416
- const originalText = item === items[0] ? safeCompanyData.vision : item === items[1] ? safeCompanyData.mission : safeCompanyData.coreValues;
417
- return originalText || true;
418
- });
419
411
  const refs = useRef([]);
420
412
  const [visible, setVisible] = useState([]);
421
413
  useEffect(() => {
422
- setVisible(new Array(validItems.length).fill(false));
423
- if (validItems.length === 0) return;
414
+ setVisible(new Array(items.length).fill(false));
415
+ if (items.length === 0) return;
424
416
  const observer = new IntersectionObserver(
425
417
  (entries) => {
426
418
  entries.forEach((entry) => {
@@ -440,142 +432,56 @@ const CompanyValues = ({ companyData, t, isDarkMode }) => {
440
432
  { threshold: 0.2 }
441
433
  );
442
434
  refs.current.forEach((el) => el && observer.observe(el));
443
- return () => {
444
- refs.current.forEach((el) => el && observer.unobserve(el));
445
- };
446
- }, [validItems.length]);
447
- if (!companyData || validItems.length === 0) {
448
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `text-center py-8 px-4 rounded-lg border ${isDarkMode ? "border-gray-700 bg-gray-800/50" : "border-gray-300 bg-gray-50"}`, children: [
449
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-16 h-16 mx-auto mb-4 rounded-full flex items-center justify-center ${isDarkMode ? "bg-gray-700" : "bg-gray-200"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: `w-8 h-8 ${isDarkMode ? "text-gray-500" : "text-gray-400"}`, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" }) }) }),
450
- /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-lg font-semibold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`, children: "Thông tin công ty" }),
451
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-sm ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: "Tầm nhìn, sứ mệnh và giá trị cốt lõi sẽ được cập nhật sớm." })
435
+ return () => refs.current.forEach((el) => el && observer.unobserve(el));
436
+ }, [items.length]);
437
+ if (!companyData) {
438
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card text-center", children: [
439
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-12 h-12 mx-auto mb-4 flex items-center justify-center rounded-full bg-gradient-brand text-white text-2xl", children: "🏢" }),
440
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-lg mb-2", children: "Thông tin công ty" }),
441
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text", children: "Tầm nhìn, sứ mệnh giá trị cốt lõi sẽ được cập nhật sớm." })
452
442
  ] });
453
443
  }
454
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-6", children: validItems.map((item, index2) => {
455
- try {
456
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
457
- "div",
458
- {
459
- ref: (el) => refs.current[index2] = el,
460
- className: `flex items-start space-x-4 rounded-2xl p-6 transform transition-all duration-700 ease-out border backdrop-blur-sm ${isDarkMode ? "border-blue-800/40 bg-gradient-to-br from-blue-900/30 via-indigo-900/20 to-purple-900/30 hover:from-blue-800/40 hover:to-purple-800/40" : "border-gray-200 bg-transparent hover:border-gray-300"} ${visible[index2] ? "opacity-100 scale-100" : "opacity-0 scale-75"}`,
461
- style: { transitionDelay: `${index2 * 200}ms` },
462
- children: [
463
- /* @__PURE__ */ jsxRuntimeExports.jsx(
464
- "div",
465
- {
466
- className: `w-10 h-10 rounded-lg flex items-center justify-center flex-shrink-0 ${isDarkMode ? item.bgDark : item.bgLight}`,
467
- children: item.icon
468
- }
469
- ),
470
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
471
- /* @__PURE__ */ jsxRuntimeExports.jsx(
472
- "h3",
473
- {
474
- className: `text-lg font-bold mb-1 ${isDarkMode ? "text-white" : "text-gray-900"}`,
475
- children: item.title
476
- }
477
- ),
478
- /* @__PURE__ */ jsxRuntimeExports.jsx(
479
- "p",
480
- {
481
- className: `leading-relaxed ${isDarkMode ? "text-gray-300" : "text-gray-600"} ${// Style khác nhau cho placeholder vs real content
482
- item.text.includes("sẽ được cập nhật") ? "italic opacity-75" : ""}`,
483
- children: item.text
484
- }
485
- )
486
- ] })
487
- ]
488
- },
489
- index2
490
- );
491
- } catch (error) {
492
- console.error("Error rendering company value item:", item, error);
493
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
494
- "div",
495
- {
496
- className: `flex items-start space-x-4 rounded-lg p-4 border opacity-50 ${isDarkMode ? "border-gray-700 bg-gray-800" : "border-gray-300 bg-gray-100"}`,
497
- children: [
498
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-10 h-10 rounded-lg flex items-center justify-center ${isDarkMode ? "bg-red-900/40 text-red-300" : "bg-red-100 text-red-600"}`, children: "❌" }),
499
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
500
- /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-lg font-bold mb-1 ${isDarkMode ? "text-white" : "text-gray-900"}`, children: "Lỗi hiển thị" }),
501
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: "Không thể hiển thị mục này do vấn đề dữ liệu." })
502
- ] })
503
- ]
504
- },
505
- `error-${index2}`
506
- );
507
- }
508
- }) });
444
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-6", children: items.map((item, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
445
+ "div",
446
+ {
447
+ ref: (el) => refs.current[index2] = el,
448
+ className: `card transition-all duration-700 ease-out transform ${visible[index2] ? "opacity-100 scale-100" : "opacity-0 scale-75"}`,
449
+ style: { transitionDelay: `${index2 * 200}ms` },
450
+ children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start space-x-4", children: [
451
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
452
+ "div",
453
+ {
454
+ className: `w-10 h-10 rounded-lg flex items-center justify-center text-white text-xl flex-shrink-0 ${item.bgClass}`,
455
+ children: item.icon
456
+ }
457
+ ),
458
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
459
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-lg mb-1", children: item.title }),
460
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
461
+ "p",
462
+ {
463
+ className: `card-text leading-relaxed ${item.text.includes("sẽ được cập nhật") ? "italic opacity-75" : ""}`,
464
+ children: item.text
465
+ }
466
+ )
467
+ ] })
468
+ ] })
469
+ },
470
+ index2
471
+ )) });
509
472
  };
510
473
  const SectionWrapper = ({
511
- variant,
512
- isDarkMode,
474
+ variant = "softLight",
513
475
  className = "",
514
476
  children
515
477
  }) => {
516
- const defaultVariant = "softLight";
517
- const currentVariant = variant || defaultVariant;
518
- const variants = {
519
- blue: {
520
- light: "bg-gradient-to-b from-white via-blue-100 to-white",
521
- dark: "bg-gradient-to-b from-gray-950 via-blue-900 to-gray-950",
522
- lightDecor1: "bg-blue-200/30",
523
- lightDecor2: "bg-blue-300/30",
524
- darkDecor1: "bg-blue-500/10",
525
- darkDecor2: "bg-blue-600/10"
526
- },
527
- purple: {
528
- light: "bg-gradient-to-b from-white via-purple-100 to-white",
529
- dark: "bg-gradient-to-b from-gray-950 via-purple-900 to-gray-950",
530
- lightDecor1: "bg-purple-200/30",
531
- lightDecor2: "bg-pink-200/30",
532
- darkDecor1: "bg-purple-500/10",
533
- darkDecor2: "bg-pink-500/10"
534
- },
535
- green: {
536
- light: "bg-gradient-to-b from-white via-emerald-100 to-white",
537
- dark: "bg-gradient-to-b from-gray-950 via-emerald-900 to-gray-950",
538
- lightDecor1: "bg-emerald-200/30",
539
- lightDecor2: "bg-teal-200/30",
540
- darkDecor1: "bg-emerald-500/10",
541
- darkDecor2: "bg-teal-500/10"
542
- },
543
- neutral: {
544
- light: "bg-gradient-to-b from-white via-gray-100 to-white",
545
- dark: "bg-gradient-to-b from-gray-950 via-gray-800 to-gray-950",
546
- lightDecor1: "bg-gray-200/30",
547
- lightDecor2: "bg-gray-300/30",
548
- darkDecor1: "bg-gray-600/10",
549
- darkDecor2: "bg-gray-700/10"
550
- },
551
- softLight: {
552
- light: "bg-gradient-to-b from-white via-blue-50 to-white",
553
- dark: "bg-gradient-to-b from-gray-950 via-blue-950 to-gray-950",
554
- lightDecor1: "bg-blue-100/25",
555
- lightDecor2: "bg-purple-100/25",
556
- darkDecor1: "bg-blue-500/10",
557
- darkDecor2: "bg-purple-500/10"
478
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
479
+ "section",
480
+ {
481
+ className: `section-wrapper section-wrapper--${variant} ${className}`,
482
+ children
558
483
  }
559
- };
560
- const current = variants[currentVariant] || variants[defaultVariant];
561
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: `relative py-32 ${isDarkMode ? current.dark : current.light} ${className}`, children: [
562
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0 overflow-hidden pointer-events-none", children: [
563
- /* @__PURE__ */ jsxRuntimeExports.jsx(
564
- "div",
565
- {
566
- className: `absolute top-10 left-1/4 w-72 h-72 ${isDarkMode ? current.darkDecor1 : current.lightDecor1} rounded-full blur-3xl animate-pulse`
567
- }
568
- ),
569
- /* @__PURE__ */ jsxRuntimeExports.jsx(
570
- "div",
571
- {
572
- className: `absolute bottom-10 right-1/4 w-80 h-80 ${isDarkMode ? current.darkDecor2 : current.lightDecor2} rounded-full blur-3xl animate-pulse`,
573
- style: { animationDelay: "2s" }
574
- }
575
- )
576
- ] }),
577
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative z-10", children })
578
- ] });
484
+ );
579
485
  };
580
486
  const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
581
487
  var _a, _b;
@@ -640,7 +546,7 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
640
546
  ] }),
641
547
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative z-10 max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
642
548
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
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(
549
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-20 h-20 mx-auto rounded-full bg-gradient-brand p-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
644
550
  "div",
645
551
  {
646
552
  className: `w-full h-full rounded-full flex items-center justify-center overflow-hidden ${isDarkMode ? "bg-gray-900" : "bg-white"}`,
@@ -658,16 +564,10 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
658
564
  e.target.parentElement.appendChild(fallbackDiv);
659
565
  }
660
566
  }
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 })
567
+ ) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-2xl font-bold text-gradient-brand", children: shortName })
662
568
  }
663
569
  ) }),
664
- /* @__PURE__ */ jsxRuntimeExports.jsx(
665
- "h1",
666
- {
667
- className: `text-5xl lg:text-6xl font-extrabold tracking-tight mb-4 ${isDarkMode ? "text-transparent bg-clip-text bg-gradient-to-r from-blue-400 via-indigo-300 to-purple-400 drop-shadow-[0_2px_8px_rgba(0,0,0,0.6)]" : "text-transparent bg-clip-text bg-gradient-to-r from-blue-100 via-indigo-50 to-purple-100 drop-shadow-[0_2px_6px_rgba(0,0,0,0.4)]"}`,
668
- children: name
669
- }
670
- )
570
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-5xl lg:text-6xl font-extrabold tracking-tight mb-4 text-gradient-brand drop-shadow-[0_2px_6px_rgba(0,0,0,0.4)]", children: name })
671
571
  ] }),
672
572
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto", children: [
673
573
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -696,32 +596,20 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
696
596
  ),
697
597
  /* @__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-2 gap-12 items-center", children: [
698
598
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
699
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
700
- "div",
701
- {
702
- className: `inline-block px-4 py-2 rounded-full text-sm font-semibold mb-4 ${isDarkMode ? "bg-blue-900/40 text-blue-300 border border-blue-700" : "bg-blue-100 text-blue-800"}`,
703
- children: [
704
- "📖 ",
705
- safeT("aboutCompany.story.badge")
706
- ]
707
- }
708
- ),
709
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
710
- "h2",
711
- {
712
- className: `text-3xl lg:text-4xl font-bold mb-6 ${isDarkMode ? "text-white" : "text-gray-800"}`,
713
- children: [
714
- safeT("aboutCompany.story.title"),
715
- " ",
716
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent", children: shortName })
717
- ]
718
- }
719
- ),
599
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full text-sm font-semibold mb-4 bg-surface text-brand-primary border border-[var(--border-color)]", children: [
600
+ "📖 ",
601
+ safeT("aboutCompany.story.badge")
602
+ ] }),
603
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("h2", { className: "text-3xl lg:text-4xl font-bold mb-6 text-main", children: [
604
+ safeT("aboutCompany.story.title"),
605
+ " ",
606
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-gradient-brand", children: shortName })
607
+ ] }),
720
608
  /* @__PURE__ */ jsxRuntimeExports.jsx(
721
609
  "div",
722
610
  {
723
611
  dangerouslySetInnerHTML: { __html: description },
724
- className: `prose max-w-none transition-colors ${isDarkMode ? "prose-invert text-gray-300" : "text-gray-600"}`
612
+ className: "prose max-w-none transition-colors text-muted"
725
613
  }
726
614
  )
727
615
  ] }),
@@ -742,12 +630,12 @@ const AboutCompanySection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
742
630
  ] }) }) })
743
631
  ] });
744
632
  };
745
- const TimelineSection = ({ data, t, isDarkMode, section }) => {
746
- var _a;
747
- const timelineData = ((_a = data == null ? void 0 : data.sectionDataBindingItems) == null ? void 0 : _a.filter((item) => item == null ? void 0 : item.data).map((item) => item.data)) || [];
633
+ const TimelineSection = ({ data, t, section }) => {
634
+ var _a, _b;
635
+ const timelineData = ((_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)) || [];
748
636
  const [timelineVisible, setTimelineVisible] = useState([]);
749
637
  const timelineRefs = useRef([]);
750
- const sectionTitle = (section == null ? void 0 : section.title) || "...";
638
+ const sectionTitle = (section == null ? void 0 : section.title) || "Timeline";
751
639
  useEffect(() => {
752
640
  setTimelineVisible(new Array(timelineData.length).fill(false));
753
641
  }, [timelineData.length]);
@@ -756,73 +644,38 @@ const TimelineSection = ({ data, t, isDarkMode, section }) => {
756
644
  (entries) => {
757
645
  entries.forEach((entry) => {
758
646
  if (entry.isIntersecting) {
759
- const index2 = timelineRefs.current.findIndex((el) => el === entry.target);
647
+ const index2 = timelineRefs.current.findIndex(
648
+ (el) => el === entry.target
649
+ );
760
650
  if (index2 !== -1) {
761
651
  setTimelineVisible((prev) => {
762
- const newVisible = [...prev];
763
- newVisible[index2] = true;
764
- return newVisible;
652
+ const updated = [...prev];
653
+ updated[index2] = true;
654
+ return updated;
765
655
  });
656
+ observer.unobserve(entry.target);
766
657
  }
767
- observer.unobserve(entry.target);
768
658
  }
769
659
  });
770
660
  },
771
661
  { threshold: 0.1 }
772
662
  );
773
663
  timelineRefs.current.forEach((el) => el && observer.observe(el));
774
- return () => {
775
- timelineRefs.current.forEach((el) => el && observer.unobserve(el));
776
- };
664
+ return () => timelineRefs.current.forEach((el) => el && observer.unobserve(el));
777
665
  }, [timelineData.length]);
778
666
  if (!timelineData.length) {
779
- return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: `py-20 ${isDarkMode ? "bg-gray-900/50" : "bg-white"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 text-center", children: [
780
- /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-lg font-semibold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`, children: t("timeline.noData.title") || "Chưa có dữ liệu" }),
781
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `${isDarkMode ? "text-gray-300" : "text-gray-600"}`, children: t("timeline.noData.description") || "Hiện tại chưa có milestone nào được thiết lập." })
667
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 bg-body", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 text-center", children: [
668
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-subtitle font-semibold mb-2 text-main", children: t("timeline.noData.title") || "Chưa có dữ liệu" }),
669
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-muted", children: t("timeline.noData.description") || "Hiện tại chưa có milestone nào được thiết lập." })
782
670
  ] }) });
783
671
  }
784
- 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: [
785
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
786
- "div",
787
- {
788
- className: `relative inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border transition-all duration-300 transform hover:scale-105 shadow-md hover:shadow-lg overflow-hidden ${isDarkMode ? "bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 text-emerald-300 border-blue-800" : "bg-white text-emerald-800 border-gray-200"}`,
789
- children: [
790
- "📈 ",
791
- sectionTitle,
792
- isDarkMode && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
793
- /* @__PURE__ */ jsxRuntimeExports.jsx(
794
- "div",
795
- {
796
- className: "absolute w-12 h-12 bg-white/5 rounded-full",
797
- style: { left: "10%", top: "20%" }
798
- }
799
- ),
800
- /* @__PURE__ */ jsxRuntimeExports.jsx(
801
- "div",
802
- {
803
- className: "absolute w-10 h-10 bg-white/5 rounded-full",
804
- style: { right: "30%", bottom: "10%" }
805
- }
806
- ),
807
- /* @__PURE__ */ jsxRuntimeExports.jsx(
808
- "div",
809
- {
810
- className: "absolute w-14 h-14 bg-white/5 rounded-md",
811
- style: { left: "20%", bottom: "30%" }
812
- }
813
- ),
814
- /* @__PURE__ */ jsxRuntimeExports.jsx(
815
- "div",
816
- {
817
- 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'
818
- }
819
- )
820
- ] })
821
- ]
822
- }
823
- ) }),
672
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
673
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold text-brand-primary shadow-sm hover:shadow-md transition-all duration-300", children: [
674
+ "📈 ",
675
+ sectionTitle
676
+ ] }) }),
824
677
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
825
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-to-b from-blue-500 to-purple-600 rounded-full" }),
678
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-brand rounded-full" }),
826
679
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-8", children: timelineData.map((milestone, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
827
680
  "div",
828
681
  {
@@ -830,64 +683,12 @@ const TimelineSection = ({ data, t, isDarkMode, section }) => {
830
683
  className: `flex items-center transition-all duration-700 ease-out ${index2 % 2 === 0 ? "flex-row" : "flex-row-reverse"} ${timelineVisible[index2] ? "opacity-100 scale-100" : "opacity-0 scale-75"}`,
831
684
  style: { transitionDelay: `${index2 * 200}ms` },
832
685
  children: [
833
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
834
- "div",
835
- {
836
- className: `relative p-5 rounded-xl shadow-lg transition-all duration-300 hover:shadow-xl overflow-hidden ${isDarkMode ? "bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 border border-blue-800 hover:border-blue-600" : "bg-gray-50 hover:shadow-2xl"}`,
837
- children: [
838
- isDarkMode && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
839
- /* @__PURE__ */ jsxRuntimeExports.jsx(
840
- "div",
841
- {
842
- className: "absolute w-12 h-12 bg-white/5 rounded-full",
843
- style: { left: "10%", top: "20%" }
844
- }
845
- ),
846
- /* @__PURE__ */ jsxRuntimeExports.jsx(
847
- "div",
848
- {
849
- className: "absolute w-10 h-10 bg-white/5 rounded-full",
850
- style: { right: "30%", bottom: "10%" }
851
- }
852
- ),
853
- /* @__PURE__ */ jsxRuntimeExports.jsx(
854
- "div",
855
- {
856
- className: "absolute w-14 h-14 bg-white/5 rounded-md",
857
- style: { left: "20%", bottom: "30%" }
858
- }
859
- ),
860
- /* @__PURE__ */ jsxRuntimeExports.jsx(
861
- "div",
862
- {
863
- 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'
864
- }
865
- )
866
- ] }),
867
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-blue-600 font-bold text-xl mb-2", children: milestone.time }),
868
- /* @__PURE__ */ jsxRuntimeExports.jsx(
869
- "h3",
870
- {
871
- className: `text-lg font-bold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
872
- children: milestone.title
873
- }
874
- ),
875
- /* @__PURE__ */ jsxRuntimeExports.jsx(
876
- "p",
877
- {
878
- className: `${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
879
- children: milestone.description
880
- }
881
- )
882
- ]
883
- }
884
- ) }),
885
- /* @__PURE__ */ jsxRuntimeExports.jsx(
886
- "div",
887
- {
888
- className: `w-6 h-6 bg-gradient-to-r from-blue-500 to-purple-600 rounded-full border-4 ${isDarkMode ? "border-gray-800" : "border-white"} shadow-[0_0_10px_5px_rgba(59,130,246,0.5)] flex-shrink-0 z-10 animate-pulse`
889
- }
890
- ),
686
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
687
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title text-brand-primary", children: milestone.time }),
688
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-main mb-1", children: milestone.title }),
689
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text", children: milestone.description })
690
+ ] }) }),
691
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-6 h-6 bg-gradient-brand rounded-full border-4 border-[var(--bg-body)] shadow-[0_0_10px_5px_rgba(37,99,235,0.4)] flex-shrink-0 z-10 animate-pulse" }),
891
692
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" })
892
693
  ]
893
694
  },
@@ -899,6 +700,7 @@ const TimelineSection = ({ data, t, isDarkMode, section }) => {
899
700
  const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
900
701
  const itemRef = useRef(null);
901
702
  const [visible, setVisible] = useState(false);
703
+ const [isHovered, setIsHovered] = useState(false);
902
704
  useEffect(() => {
903
705
  const observer = new IntersectionObserver(
904
706
  (entries) => {
@@ -920,93 +722,82 @@ const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
920
722
  /* @__PURE__ */ jsxRuntimeExports.jsx(
921
723
  "div",
922
724
  {
923
- className: "absolute w-12 h-12 bg-white/5 rounded-full",
924
- style: { left: "10%", top: "20%" }
725
+ className: "absolute w-12 h-12 rounded-full",
726
+ style: { left: "10%", top: "20%", background: "rgba(255,255,255,0.05)" }
925
727
  }
926
728
  ),
927
729
  /* @__PURE__ */ jsxRuntimeExports.jsx(
928
730
  "div",
929
731
  {
930
- className: "absolute w-10 h-10 bg-white/5 rounded-full",
931
- style: { right: "30%", bottom: "10%" }
732
+ className: "absolute w-10 h-10 rounded-full",
733
+ style: { right: "30%", bottom: "10%", background: "rgba(255,255,255,0.05)" }
932
734
  }
933
735
  ),
934
736
  /* @__PURE__ */ jsxRuntimeExports.jsx(
935
737
  "div",
936
738
  {
937
- className: "absolute w-14 h-14 bg-white/5 rounded-md",
938
- style: { left: "20%", bottom: "30%" }
739
+ className: "absolute w-14 h-14 rounded-md",
740
+ style: { left: "20%", bottom: "30%", background: "rgba(255,255,255,0.05)" }
939
741
  }
940
742
  ),
941
743
  /* @__PURE__ */ jsxRuntimeExports.jsx(
942
744
  "div",
943
745
  {
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'
746
+ className: "absolute inset-0 opacity-20",
747
+ style: {
748
+ 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")'
749
+ }
945
750
  }
946
751
  )
947
752
  ] }),
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
753
  /* @__PURE__ */ jsxRuntimeExports.jsx(
957
- "h4",
754
+ "div",
958
755
  {
959
- className: `font-bold text-center mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
960
- children: partner.name
756
+ className: "w-20 h-14 flex items-center justify-center mb-4 rounded-lg overflow-hidden bg-surface",
757
+ style: {
758
+ borderWidth: "1px",
759
+ borderStyle: "solid",
760
+ borderColor: isHovered ? "var(--brand-primary)" : "var(--border-color)",
761
+ backgroundColor: isHovered ? "var(--bg-body)" : "var(--bg-surface)",
762
+ transition: "all 0.3s ease"
763
+ },
764
+ children: logoSrc ? /* @__PURE__ */ jsxRuntimeExports.jsx(
765
+ "img",
766
+ {
767
+ src: logoSrc,
768
+ alt: partner.name,
769
+ className: "max-w-full max-h-full object-contain",
770
+ style: {
771
+ filter: isHovered ? "grayscale(0) opacity(1)" : isDarkMode ? "grayscale(0.3) opacity(0.8)" : "grayscale(0.2) opacity(0.9)",
772
+ transform: isHovered ? "scale(1.05)" : "scale(1)",
773
+ transition: "all 0.3s ease"
774
+ }
775
+ }
776
+ ) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-full h-full bg-gradient-brand flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white font-bold text-center text-small px-1", children: partner.name }) })
961
777
  }
962
778
  ),
963
- /* @__PURE__ */ jsxRuntimeExports.jsx(
964
- "p",
779
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "card-title text-center mb-2", children: partner.name }),
780
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text text-center mb-2", children: partner.description }),
781
+ partner.websiteUrl && /* @__PURE__ */ jsxRuntimeExports.jsxs(
782
+ "div",
965
783
  {
966
- className: `text-sm text-center mb-2 ${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
967
- children: partner.description
784
+ className: "card-link justify-center",
785
+ style: {
786
+ opacity: isHovered ? 1 : 0,
787
+ transform: isHovered ? "translateY(0)" : "translateY(4px)",
788
+ transition: "all 0.3s ease"
789
+ },
790
+ children: [
791
+ t("partners.viewDetails") || "Xem chi tiết",
792
+ " →"
793
+ ]
968
794
  }
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: `
975
- .partner-card {
976
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
977
- }
978
- .partner-card:hover {
979
- transform: translateY(-3px);
980
- box-shadow: 0 8px 20px ${isDarkMode ? "rgba(255,255,255,0.1)" : "rgba(0,0,0,0.1)"};
981
- }
982
- .logo-container {
983
- background: ${isDarkMode ? "linear-gradient(135deg, #374151 0%, #1f2937 100%)" : "linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%)"};
984
- border: 1px solid ${isDarkMode ? "#4b5563" : "#e2e8f0"};
985
- transition: all 0.3s ease;
986
- }
987
- .partner-card:hover .logo-container {
988
- border-color: #3b82f6;
989
- background: ${isDarkMode ? "linear-gradient(135deg, #4b5563 0%, #374151 100%)" : "linear-gradient(135deg, #ffffff 0%, #f8fafc 100%)"};
990
- }
991
- .logo-image {
992
- filter: ${isDarkMode ? "grayscale(0.3) opacity(0.8)" : "grayscale(0.2) opacity(0.9)"};
993
- transition: all 0.3s ease;
994
- }
995
- .partner-card:hover .logo-image {
996
- filter: grayscale(0) opacity(1);
997
- transform: scale(1.05);
998
- }
999
- .website-hint {
1000
- opacity: 0;
1001
- transform: translateY(4px);
1002
- transition: all 0.3s ease;
1003
- }
1004
- .partner-card:hover .website-hint {
1005
- opacity: 1;
1006
- transform: translateY(0);
1007
- }
1008
- ` })
795
+ )
1009
796
  ] });
797
+ const baseClasses = `card items-center justify-center transition-all duration-700 ease-out overflow-hidden ${visible ? "opacity-100 scale-100" : "opacity-0 scale-75"}`;
798
+ const dynamicStyles = {
799
+ transitionDelay: `${idx * 150}ms`
800
+ };
1010
801
  if (partner.websiteUrl) {
1011
802
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
1012
803
  "a",
@@ -1015,10 +806,12 @@ const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
1015
806
  href: partner.websiteUrl,
1016
807
  target: "_blank",
1017
808
  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" },
809
+ className: `${baseClasses} cursor-pointer`,
810
+ style: __spreadProps(__spreadValues({}, dynamicStyles), {
811
+ textDecoration: "none"
812
+ }),
813
+ onMouseEnter: () => setIsHovered(true),
814
+ onMouseLeave: () => setIsHovered(false),
1022
815
  children: cardContent
1023
816
  }
1024
817
  );
@@ -1027,10 +820,10 @@ const PartnerCard = ({ partner, idx, t, getLogoUrl, isDarkMode }) => {
1027
820
  "div",
1028
821
  {
1029
822
  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` },
823
+ className: baseClasses,
824
+ style: dynamicStyles,
825
+ onMouseEnter: () => setIsHovered(true),
826
+ onMouseLeave: () => setIsHovered(false),
1034
827
  children: cardContent
1035
828
  }
1036
829
  );
@@ -1047,14 +840,14 @@ function useWindowSize$1() {
1047
840
  }, []);
1048
841
  return width;
1049
842
  }
1050
- const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "", section }) => {
843
+ const PartnersSection = ({ data, t, imageBaseUrl = "", section }) => {
1051
844
  var _a, _b;
1052
845
  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)) || [];
1053
846
  const [currentPartnerSlide, setCurrentPartnerSlide] = useState(0);
1054
847
  const [partnersVisible, setPartnersVisible] = useState(false);
1055
848
  const partnersRef = useRef(null);
1056
849
  const windowWidth = useWindowSize$1();
1057
- const sectionTitle = (section == null ? void 0 : section.title) || "...";
850
+ const sectionTitle = (section == null ? void 0 : section.title) || t("partners.sectionTitle") || "Đối tác";
1058
851
  const getLogoUrl = (logoUrl) => {
1059
852
  if (!logoUrl) return null;
1060
853
  if (logoUrl.startsWith("http")) return logoUrl;
@@ -1097,17 +890,11 @@ const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "", section }) =>
1097
890
  return () => partnersRef.current && observer.unobserve(partnersRef.current);
1098
891
  }, []);
1099
892
  if (!partnersData.length) return null;
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: [
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
- ) }),
893
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
894
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold text-brand-primary shadow-sm", children: [
895
+ "🤝 ",
896
+ sectionTitle
897
+ ] }) }),
1111
898
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
1112
899
  "div",
1113
900
  {
@@ -1123,8 +910,7 @@ const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "", section }) =>
1123
910
  partner,
1124
911
  idx,
1125
912
  t,
1126
- getLogoUrl,
1127
- isDarkMode
913
+ getLogoUrl
1128
914
  },
1129
915
  partner.id || idx
1130
916
  )) })
@@ -1135,7 +921,8 @@ const PartnersSection = ({ data, t, isDarkMode, imageBaseUrl = "", section }) =>
1135
921
  "button",
1136
922
  {
1137
923
  onClick: () => setCurrentPartnerSlide(index2),
1138
- className: `w-3 h-3 rounded-full transition-all ${index2 === currentPartnerSlide ? "bg-blue-500 scale-125" : isDarkMode ? "bg-gray-600 hover:bg-blue-400" : "bg-gray-300 hover:bg-blue-500"}`
924
+ className: `w-3 h-3 rounded-full transition-all duration-300 ${index2 === currentPartnerSlide ? "bg-brand-primary scale-125 shadow-lg" : "bg-muted hover:bg-brand-primary/70"}`,
925
+ "aria-label": `Slide ${index2 + 1}`
1139
926
  },
1140
927
  index2
1141
928
  )) })
@@ -1157,12 +944,9 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
1157
944
  try {
1158
945
  setLoading(true);
1159
946
  const res = yield getMilestoneTimeline();
1160
- if (res.success) {
1161
- setMilestones(res.data || []);
1162
- } else {
1163
- setMilestones([]);
1164
- }
1165
- } catch (error) {
947
+ if (res.success) setMilestones(res.data || []);
948
+ else setMilestones([]);
949
+ } catch (e) {
1166
950
  setMilestones([]);
1167
951
  } finally {
1168
952
  setLoading(false);
@@ -1183,67 +967,39 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
1183
967
  (entries) => {
1184
968
  entries.forEach((entry) => {
1185
969
  if (entry.isIntersecting) {
1186
- const index2 = timelineRefs.current.findIndex(
1187
- (el) => el === entry.target
1188
- );
970
+ const index2 = timelineRefs.current.findIndex((el) => el === entry.target);
1189
971
  if (index2 !== -1) {
1190
972
  setTimelineVisible((prev) => {
1191
- const newVisible = [...prev];
1192
- newVisible[index2] = true;
1193
- return newVisible;
973
+ const updated = [...prev];
974
+ updated[index2] = true;
975
+ return updated;
1194
976
  });
977
+ observer.unobserve(entry.target);
1195
978
  }
1196
- observer.unobserve(entry.target);
1197
979
  }
1198
980
  });
1199
981
  },
1200
982
  { threshold: 0.1 }
1201
983
  );
1202
984
  timelineRefs.current.forEach((el) => el && observer.observe(el));
1203
- return () => {
1204
- timelineRefs.current.forEach((el) => el && observer.unobserve(el));
1205
- };
985
+ return () => timelineRefs.current.forEach((el) => el && observer.unobserve(el));
1206
986
  }, [milestones.length]);
1207
987
  if (loading) {
1208
- return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: isDarkMode ? "text-white" : "text-gray-800", children: t("milestone.status.loadingData") }) });
988
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-main", children: t("milestone.status.loadingData") }) });
1209
989
  }
1210
990
  if (!milestones.length) {
1211
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
1212
- "section",
1213
- {
1214
- className: `py-20 ${isDarkMode ? "bg-gray-900/50" : "bg-white"}`,
1215
- children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 text-center", children: [
1216
- /* @__PURE__ */ jsxRuntimeExports.jsx(
1217
- "h3",
1218
- {
1219
- className: `text-lg font-semibold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
1220
- children: t("milestone.status.noData")
1221
- }
1222
- ),
1223
- /* @__PURE__ */ jsxRuntimeExports.jsx(
1224
- "p",
1225
- {
1226
- className: `${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
1227
- children: t("milestone.noDataDescription")
1228
- }
1229
- )
1230
- ] })
1231
- }
1232
- );
991
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 bg-body", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 text-center", children: [
992
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-semibold mb-2 text-main", children: t("milestone.status.noData") }),
993
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted", children: t("milestone.noDataDescription") })
994
+ ] }) });
1233
995
  }
1234
996
  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: [
1235
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
1236
- "div",
1237
- {
1238
- className: `relative inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border transition-all duration-300 transform hover:scale-105 shadow-md hover:shadow-lg overflow-hidden ${isDarkMode ? "bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 text-emerald-300 border-blue-800" : "bg-white text-emerald-800 border-gray-200"}`,
1239
- children: [
1240
- "📈 ",
1241
- sectionTitle
1242
- ]
1243
- }
1244
- ) }),
997
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 border border-[var(--border-color)] bg-surface text-main shadow-sm hover:shadow-md transition-all duration-300", children: [
998
+ "📈 ",
999
+ sectionTitle
1000
+ ] }) }),
1245
1001
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
1246
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-to-b from-blue-500 to-purple-600 rounded-full" }),
1002
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute left-1/2 transform -translate-x-1/2 w-1 h-full bg-gradient-brand rounded-full" }),
1247
1003
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-8", children: milestones.map((milestone, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
1248
1004
  "div",
1249
1005
  {
@@ -1251,35 +1007,12 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
1251
1007
  className: `flex items-center transition-all duration-700 ease-out ${index2 % 2 === 0 ? "flex-row" : "flex-row-reverse"} ${timelineVisible[index2] ? "opacity-100 scale-100" : "opacity-0 scale-75"}`,
1252
1008
  style: { transitionDelay: `${index2 * 200}ms` },
1253
1009
  children: [
1254
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
1255
- "div",
1256
- {
1257
- className: `relative p-5 rounded-xl shadow-lg transition-all duration-300 hover:shadow-xl overflow-hidden ${isDarkMode ? "bg-gradient-to-br from-slate-900 via-blue-900 to-indigo-900 border border-blue-800 hover:border-blue-600" : "bg-gray-50 hover:shadow-2xl"}`,
1258
- children: [
1259
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-blue-600 font-bold text-xl mb-2", children: milestone.time }),
1260
- /* @__PURE__ */ jsxRuntimeExports.jsx(
1261
- "h3",
1262
- {
1263
- className: `text-lg font-bold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`,
1264
- children: milestone.title
1265
- }
1266
- ),
1267
- /* @__PURE__ */ jsxRuntimeExports.jsx(
1268
- "p",
1269
- {
1270
- className: `${isDarkMode ? "text-gray-300" : "text-gray-600"}`,
1271
- children: milestone.description
1272
- }
1273
- )
1274
- ]
1275
- }
1276
- ) }),
1277
- /* @__PURE__ */ jsxRuntimeExports.jsx(
1278
- "div",
1279
- {
1280
- className: `w-6 h-6 bg-gradient-to-r from-blue-500 to-purple-600 rounded-full border-4 ${isDarkMode ? "border-gray-800" : "border-white"} shadow-[0_0_10px_5px_rgba(59,130,246,0.5)] flex-shrink-0 z-10 animate-pulse`
1281
- }
1282
- ),
1010
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
1011
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-brand-primary font-bold text-xl mb-2", children: milestone.time }),
1012
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title", children: milestone.title }),
1013
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text", children: milestone.description })
1014
+ ] }) }),
1015
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-6 h-6 bg-gradient-brand rounded-full border-4 border-[var(--bg-body)] shadow-[0_0_10px_5px_rgba(37,99,235,0.4)] flex-shrink-0 z-10 animate-pulse" }),
1283
1016
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" })
1284
1017
  ]
1285
1018
  },
@@ -1288,105 +1021,81 @@ const MilestoneSection = ({ data, t, isDarkMode, getMilestoneTimeline, section }
1288
1021
  ] })
1289
1022
  ] }) });
1290
1023
  };
1291
- const TestimonialsSection = ({ data, t, isDarkMode, section }) => {
1292
- var _a;
1024
+ const TestimonialsSection = ({ data, t, section }) => {
1025
+ var _a, _b;
1293
1026
  const [currentIndex, setCurrentIndex] = useState(0);
1294
- const sectionTitle = (section == null ? void 0 : section.title) || "...";
1295
- const testimonials = ((_a = data == null ? void 0 : data.sectionDataBindingItems) == null ? void 0 : _a.filter((item) => item == null ? void 0 : item.data).map((item) => {
1296
- var _a2, _b, _c, _d;
1027
+ const [isTransitioning, setIsTransitioning] = useState(false);
1028
+ const sectionTitle = (section == null ? void 0 : section.title) || t("testimonials.sectionTitle") || "Cảm nhận khách hàng";
1029
+ const testimonials = ((_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) => {
1030
+ var _a2, _b2, _c, _d;
1297
1031
  return {
1298
1032
  quote: ((_a2 = item.data) == null ? void 0 : _a2.content) || "",
1299
- author: ((_b = item.data) == null ? void 0 : _b.customerName) || "",
1300
- position: ((_c = item.data) == null ? void 0 : _c.customerTitle) || t("testimonials.fallback.defaultPosition"),
1033
+ author: ((_b2 = item.data) == null ? void 0 : _b2.customerName) || "",
1034
+ position: ((_c = item.data) == null ? void 0 : _c.customerTitle) || "",
1301
1035
  company: ((_d = item.data) == null ? void 0 : _d.customerCompany) || ""
1302
1036
  };
1303
1037
  })) || [];
1304
- const fallbackTestimonials = [
1305
- {
1306
- quote: t("testimonials.fallback.testimonial1.quote"),
1307
- author: t("testimonials.fallback.testimonial1.author"),
1308
- position: t("testimonials.fallback.testimonial1.position"),
1309
- company: t("testimonials.fallback.testimonial1.company")
1310
- },
1311
- {
1312
- quote: t("testimonials.fallback.testimonial2.quote"),
1313
- author: t("testimonials.fallback.testimonial2.author"),
1314
- position: t("testimonials.fallback.testimonial2.position"),
1315
- company: t("testimonials.fallback.testimonial2.company")
1316
- },
1317
- {
1318
- quote: t("testimonials.fallback.testimonial3.quote"),
1319
- author: t("testimonials.fallback.testimonial3.author"),
1320
- position: t("testimonials.fallback.testimonial3.position"),
1321
- company: t("testimonials.fallback.testimonial3.company")
1322
- }
1323
- ];
1324
- const displayTestimonials = testimonials.length > 0 ? testimonials : fallbackTestimonials;
1325
1038
  useEffect(() => {
1326
- if (displayTestimonials.length > 1) {
1039
+ if (testimonials.length > 1) {
1327
1040
  const interval = setInterval(() => {
1328
- setCurrentIndex((prev) => (prev + 1) % displayTestimonials.length);
1041
+ setIsTransitioning(true);
1042
+ setTimeout(() => {
1043
+ setCurrentIndex((prev) => (prev + 1) % testimonials.length);
1044
+ setIsTransitioning(false);
1045
+ }, 300);
1329
1046
  }, 5e3);
1330
1047
  return () => clearInterval(interval);
1331
1048
  }
1332
- }, [displayTestimonials.length]);
1333
- return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center", children: [
1334
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
1335
- "div",
1336
- {
1337
- className: `inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 ${isDarkMode ? "bg-indigo-900/50 text-indigo-300 border border-indigo-800" : "bg-indigo-100 text-indigo-800"}`,
1338
- children: [
1339
- "💬 ",
1340
- sectionTitle
1341
- ]
1342
- }
1343
- ),
1049
+ }, [testimonials.length]);
1050
+ const handleIndicatorClick = (index2) => {
1051
+ if (index2 !== currentIndex) {
1052
+ setIsTransitioning(true);
1053
+ setTimeout(() => {
1054
+ setCurrentIndex(index2);
1055
+ setIsTransitioning(false);
1056
+ }, 300);
1057
+ }
1058
+ };
1059
+ if (testimonials.length === 0) {
1060
+ return null;
1061
+ }
1062
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center", children: [
1063
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold mb-8 text-brand-primary shadow-sm", children: [
1064
+ "💬 ",
1065
+ sectionTitle
1066
+ ] }),
1344
1067
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
1345
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
1068
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
1346
1069
  "div",
1347
1070
  {
1348
- className: `p-6 rounded-2xl transition-all duration-500 transform ${isDarkMode ? "bg-gray-800/80 backdrop-blur-sm border border-gray-700" : "bg-white"}`,
1071
+ style: {
1072
+ opacity: isTransitioning ? 0 : 1,
1073
+ transform: isTransitioning ? "translateY(10px)" : "translateY(0)",
1074
+ transition: "opacity 0.3s ease-in-out, transform 0.3s ease-in-out"
1075
+ },
1349
1076
  children: [
1350
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
1351
- "blockquote",
1352
- {
1353
- className: `text-lg lg:text-xl italic mb-6 animate-fadeIn transition-colors duration-200 ${isDarkMode ? "text-gray-300" : "text-gray-700"}`,
1354
- children: [
1355
- '"',
1356
- displayTestimonials[currentIndex].quote,
1357
- '"'
1358
- ]
1359
- }
1360
- ),
1361
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4 animate-fadeIn", children: [
1077
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("blockquote", { className: "card-text text-body italic mb-6", children: [
1078
+ '"',
1079
+ testimonials[currentIndex].quote,
1080
+ '"'
1081
+ ] }),
1082
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4", children: [
1362
1083
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: "👤" }),
1363
1084
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
1364
- /* @__PURE__ */ jsxRuntimeExports.jsx(
1365
- "div",
1366
- {
1367
- className: `font-bold text-base transition-colors duration-200 ${isDarkMode ? "text-white" : "text-gray-900"}`,
1368
- children: displayTestimonials[currentIndex].author
1369
- }
1370
- ),
1371
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-blue-600 font-medium text-sm", children: displayTestimonials[currentIndex].position }),
1372
- displayTestimonials[currentIndex].company && /* @__PURE__ */ jsxRuntimeExports.jsx(
1373
- "div",
1374
- {
1375
- className: `text-xs transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-gray-600"}`,
1376
- children: displayTestimonials[currentIndex].company
1377
- }
1378
- )
1085
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title", children: testimonials[currentIndex].author }),
1086
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-text", children: testimonials[currentIndex].position }),
1087
+ testimonials[currentIndex].company && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-link", children: testimonials[currentIndex].company })
1379
1088
  ] })
1380
1089
  ] })
1381
1090
  ]
1382
- },
1383
- currentIndex
1384
- ),
1385
- displayTestimonials.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-2 mt-4", children: displayTestimonials.map((_, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
1091
+ }
1092
+ ) }),
1093
+ testimonials.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-2 mt-4", children: testimonials.map((_, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
1386
1094
  "button",
1387
1095
  {
1388
- onClick: () => setCurrentIndex(index2),
1389
- className: `w-2.5 h-2.5 rounded-full transition-all duration-300 ${index2 === currentIndex ? "bg-blue-600" : isDarkMode ? "bg-gray-600 hover:bg-gray-500" : "bg-gray-300 hover:bg-gray-400"}`
1096
+ onClick: () => handleIndicatorClick(index2),
1097
+ className: `w-2.5 h-2.5 rounded-full transition-all duration-300 ${index2 === currentIndex ? "bg-brand-secondary" : "bg-surface hover:bg-brand-primary"}`,
1098
+ "aria-label": `Slide ${index2 + 1}`
1390
1099
  },
1391
1100
  index2
1392
1101
  )) })
@@ -1394,54 +1103,82 @@ const TestimonialsSection = ({ data, t, isDarkMode, section }) => {
1394
1103
  ] }) });
1395
1104
  };
1396
1105
  const PartnerListCard = ({ partner, idx, t, isDarkMode, getLogoUrl }) => {
1397
- const logoUrl = getLogoUrl(partner.logo);
1398
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
1106
+ const logoUrl = getLogoUrl(partner.logoUrl);
1107
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
1399
1108
  "a",
1400
1109
  {
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`,
1110
+ href: partner.websiteUrl || "#",
1111
+ target: partner.websiteUrl ? "_blank" : "_self",
1112
+ rel: partner.websiteUrl ? "noopener noreferrer" : "",
1113
+ className: "card",
1405
1114
  style: {
1406
1115
  animationDelay: `${idx * 0.1}s`,
1407
- textDecoration: "none"
1116
+ textDecoration: "none",
1117
+ overflow: "hidden",
1118
+ minHeight: "280px",
1119
+ padding: "1.5rem",
1120
+ display: "flex",
1121
+ flexDirection: "column"
1408
1122
  },
1409
- children: [
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(
1421
- "div",
1422
- {
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"
1432
- }
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
- )
1441
- ] }),
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" })
1444
- ]
1123
+ children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
1124
+ display: "flex",
1125
+ flexDirection: "column",
1126
+ alignItems: "center",
1127
+ justifyContent: "center",
1128
+ flex: 1
1129
+ }, children: [
1130
+ logoUrl ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
1131
+ width: "100%",
1132
+ height: "100px",
1133
+ display: "flex",
1134
+ alignItems: "center",
1135
+ justifyContent: "center",
1136
+ marginBottom: "1rem"
1137
+ }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
1138
+ "img",
1139
+ {
1140
+ src: logoUrl,
1141
+ alt: partner.name || t("partners.logoAlt") || "Partner logo",
1142
+ style: {
1143
+ maxWidth: "100%",
1144
+ maxHeight: "100%",
1145
+ objectFit: "contain",
1146
+ transition: "transform 300ms cubic-bezier(0.4, 0, 0.2, 1)"
1147
+ },
1148
+ onMouseEnter: (e) => {
1149
+ e.currentTarget.style.transform = "scale(1.05)";
1150
+ },
1151
+ onMouseLeave: (e) => {
1152
+ e.currentTarget.style.transform = "scale(1)";
1153
+ },
1154
+ loading: "lazy"
1155
+ }
1156
+ ) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-surface", style: {
1157
+ width: "5rem",
1158
+ height: "5rem",
1159
+ borderRadius: "9999px",
1160
+ display: "flex",
1161
+ alignItems: "center",
1162
+ justifyContent: "center",
1163
+ marginBottom: "1rem"
1164
+ }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: { fontSize: "1.875rem" }, children: "🤝" }) }),
1165
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-main", style: {
1166
+ fontSize: "1rem",
1167
+ textAlign: "center",
1168
+ marginBottom: "0.5rem",
1169
+ lineHeight: "1.4"
1170
+ }, children: partner.name || t("partners.unnamed") || "Partner" }),
1171
+ partner.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text", style: {
1172
+ textAlign: "center",
1173
+ marginTop: "0.5rem",
1174
+ fontSize: "0.875rem",
1175
+ lineHeight: "1.5",
1176
+ display: "-webkit-box",
1177
+ WebkitLineClamp: 3,
1178
+ WebkitBoxOrient: "vertical",
1179
+ overflow: "hidden"
1180
+ }, children: partner.description })
1181
+ ] })
1445
1182
  }
1446
1183
  );
1447
1184
  };
@@ -1456,7 +1193,7 @@ function useWindowSize() {
1456
1193
  }, []);
1457
1194
  return width;
1458
1195
  }
1459
- const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "", section }) => {
1196
+ const PartnerListSection = ({ t, getPartnerList, imageBaseUrl = "", section }) => {
1460
1197
  const [partnersData, setPartnersData] = useState([]);
1461
1198
  const [error, setError] = useState(null);
1462
1199
  const [loading, setLoading] = useState(true);
@@ -1464,7 +1201,7 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
1464
1201
  const [partnersVisible, setPartnersVisible] = useState(false);
1465
1202
  const partnersRef = useRef(null);
1466
1203
  const windowWidth = useWindowSize();
1467
- const sectionTitle = (section == null ? void 0 : section.title) || "...";
1204
+ const sectionTitle = (section == null ? void 0 : section.title) || t("partners.sectionTitle");
1468
1205
  const getLogoUrl = (logoUrl) => {
1469
1206
  if (!logoUrl) return null;
1470
1207
  if (logoUrl.startsWith("http")) return logoUrl;
@@ -1509,9 +1246,7 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
1509
1246
  }
1510
1247
  }, [partners.length]);
1511
1248
  useEffect(() => {
1512
- const fallbackTimer = setTimeout(() => {
1513
- setPartnersVisible(true);
1514
- }, 500);
1249
+ const fallbackTimer = setTimeout(() => setPartnersVisible(true), 500);
1515
1250
  const observer = new IntersectionObserver(
1516
1251
  (entries) => {
1517
1252
  entries.forEach((entry) => {
@@ -1524,54 +1259,46 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
1524
1259
  },
1525
1260
  { threshold: 0.1, rootMargin: "50px" }
1526
1261
  );
1527
- if (partnersRef.current) {
1528
- observer.observe(partnersRef.current);
1529
- } else {
1262
+ if (partnersRef.current) observer.observe(partnersRef.current);
1263
+ else {
1530
1264
  clearTimeout(fallbackTimer);
1531
1265
  setPartnersVisible(true);
1532
1266
  }
1533
1267
  return () => {
1534
1268
  clearTimeout(fallbackTimer);
1535
- if (partnersRef.current) {
1536
- observer.unobserve(partnersRef.current);
1537
- }
1269
+ if (partnersRef.current) observer.unobserve(partnersRef.current);
1538
1270
  };
1539
1271
  }, []);
1540
1272
  if (loading) {
1541
- return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: isDarkMode ? "text-white" : "text-gray-800", children: t("partners.loading") || "Đang tải danh sách đối tác..." }) });
1273
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center bg-body", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-muted", children: t("partners.loading") || "Đang tải danh sách đối tác..." }) });
1542
1274
  }
1543
1275
  if (error) {
1544
- return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-red-500", children: t("partners.error") || error }) });
1276
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 text-center bg-body", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-brand-secondary", children: t("partners.error") || error }) });
1545
1277
  }
1546
1278
  if (!partnersData.length) return null;
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: [
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
- ) }),
1279
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
1280
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-block px-4 py-2 rounded-full border border-[var(--border-color)] bg-surface text-subtitle font-semibold text-brand-primary shadow-sm", children: [
1281
+ "🤝 ",
1282
+ sectionTitle
1283
+ ] }) }),
1558
1284
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: partnersRef, className: "relative", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
1559
1285
  "div",
1560
1286
  {
1561
1287
  className: `transition-all duration-1000 ease-out ${partnersVisible ? "opacity-100 scale-100" : "opacity-0 scale-95"}`,
1562
1288
  children: [
1563
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative overflow-hidden mb-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-[220px]", children: partners.map((group, slideIndex) => /* @__PURE__ */ jsxRuntimeExports.jsx(
1289
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative overflow-hidden mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { minHeight: "320px" }, children: partners.map((group, slideIndex) => /* @__PURE__ */ jsxRuntimeExports.jsx(
1564
1290
  "div",
1565
1291
  {
1566
1292
  className: `absolute inset-0 w-full transition-all duration-1000 ease-in-out ${slideIndex === currentPartnerSlide ? "opacity-100 translate-x-0" : slideIndex < currentPartnerSlide ? "opacity-0 -translate-x-full" : "opacity-0 translate-x-full"}`,
1567
- style: { zIndex: slideIndex === currentPartnerSlide ? 10 : 1 },
1568
- children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-6 px-2", children: group.map((partner, idx) => /* @__PURE__ */ jsxRuntimeExports.jsx(
1293
+ style: {
1294
+ zIndex: slideIndex === currentPartnerSlide ? 10 : 1
1295
+ },
1296
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-8 px-2", children: group.map((partner, idx) => /* @__PURE__ */ jsxRuntimeExports.jsx(
1569
1297
  PartnerListCard,
1570
1298
  {
1571
1299
  partner,
1572
1300
  idx,
1573
1301
  t,
1574
- isDarkMode,
1575
1302
  getLogoUrl
1576
1303
  },
1577
1304
  partner.id || `${slideIndex}-${idx}`
@@ -1579,11 +1306,34 @@ const PartnerListSection = ({ t, isDarkMode, getPartnerList, imageBaseUrl = "",
1579
1306
  },
1580
1307
  slideIndex
1581
1308
  )) }) }),
1582
- partners.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-2", style: { zIndex: 50 }, children: partners.map((_, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
1309
+ partners.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center space-x-3", style: {
1310
+ position: "relative",
1311
+ zIndex: 100,
1312
+ paddingTop: "1rem"
1313
+ }, children: partners.map((_, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
1583
1314
  "button",
1584
1315
  {
1585
1316
  onClick: () => setCurrentPartnerSlide(index2),
1586
- className: `w-3 h-3 rounded-full transition-all duration-300 ${index2 === currentPartnerSlide ? "bg-blue-500 scale-125 shadow-lg" : isDarkMode ? "bg-gray-600 hover:bg-blue-400" : "bg-gray-300 hover:bg-blue-500"}`,
1317
+ style: {
1318
+ width: "12px",
1319
+ height: "12px",
1320
+ borderRadius: "50%",
1321
+ border: "none",
1322
+ cursor: "pointer",
1323
+ transition: "all 0.3s ease",
1324
+ backgroundColor: index2 === currentPartnerSlide ? "var(--brand-primary)" : "rgba(255, 255, 255, 0.3)",
1325
+ transform: index2 === currentPartnerSlide ? "scale(1.3)" : "scale(1)"
1326
+ },
1327
+ onMouseEnter: (e) => {
1328
+ if (index2 !== currentPartnerSlide) {
1329
+ e.currentTarget.style.backgroundColor = "rgba(255, 255, 255, 0.5)";
1330
+ }
1331
+ },
1332
+ onMouseLeave: (e) => {
1333
+ if (index2 !== currentPartnerSlide) {
1334
+ e.currentTarget.style.backgroundColor = "rgba(255, 255, 255, 0.3)";
1335
+ }
1336
+ },
1587
1337
  "aria-label": `Slide ${index2 + 1}`
1588
1338
  },
1589
1339
  index2
@@ -2340,24 +2090,30 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2340
2090
  setIsSubmitting(false);
2341
2091
  }
2342
2092
  });
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"}`;
2344
- const labelClasses = `block text-sm font-semibold mb-2 ${isDarkMode ? "text-gray-300" : "text-slate-700"}`;
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: [
2093
+ const inputBaseClasses = `
2094
+ w-full px-4 py-3 rounded-xl border
2095
+ transition-all duration-200
2096
+ focus:ring-2 focus:outline-none
2097
+ bg-surface
2098
+ text-main
2099
+ placeholder-text-muted
2100
+ `;
2101
+ 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: "bg-surface rounded-2xl p-8 shadow-lg border transition-colors duration-200", style: { borderColor: "var(--border-color)" }, children: [
2346
2102
  /* @__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" }) }),
2103
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-10 h-10 rounded-lg bg-gradient-brand flex items-center justify-center mr-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Send, { size: 20, className: "text-white" }) }),
2348
2104
  /* @__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" })
2105
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-subtitle font-bold text-main", children: t("form.title") || "Gửi yêu cầu tư vấn" }),
2106
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", children: t("form.subtitle") || "Điền thông tin để nhận tư vấn miễn phí từ chuyên gia" })
2351
2107
  ] })
2352
2108
  ] }),
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: [
2109
+ submitStatus && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `mb-6 p-4 rounded-xl border transition-colors duration-200 ${submitStatus === "success" ? "bg-emerald-50 dark:bg-emerald-900/30 text-emerald-800 dark:text-emerald-300" : "bg-red-50 dark:bg-red-900/30 text-red-800 dark:text-red-300"}`, style: { borderColor: submitStatus === "success" ? "#10b981" : "#ef4444" }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center", children: [
2354
2110
  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 })
2111
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small font-medium", children: submitMessage })
2356
2112
  ] }) }),
2357
2113
  /* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, className: "space-y-6", children: [
2358
2114
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
2359
2115
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2360
- /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: labelClasses, children: [
2116
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
2361
2117
  t("form.fields.fullName") || "Họ và tên",
2362
2118
  " *"
2363
2119
  ] }),
@@ -2369,18 +2125,19 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2369
2125
  value: formData.fullName || "",
2370
2126
  onChange: handleInputChange,
2371
2127
  onBlur: handleBlur,
2372
- className: `${inputBaseClasses} ${formErrors.fullName ? "border-red-500" : ""}`,
2128
+ className: inputBaseClasses,
2129
+ style: { borderColor: formErrors.fullName ? "#ef4444" : "var(--border-color)" },
2373
2130
  placeholder: t("contact.form.namePlaceholder"),
2374
2131
  required: true
2375
2132
  }
2376
2133
  ),
2377
- formErrors.fullName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2134
+ formErrors.fullName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
2378
2135
  /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2379
2136
  formErrors.fullName
2380
2137
  ] })
2381
2138
  ] }),
2382
2139
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2383
- /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: labelClasses, children: [
2140
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
2384
2141
  t("form.fields.workEmail") || "Email",
2385
2142
  " *"
2386
2143
  ] }),
@@ -2392,12 +2149,13 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2392
2149
  value: formData.workEmail || "",
2393
2150
  onChange: handleInputChange,
2394
2151
  onBlur: handleBlur,
2395
- className: `${inputBaseClasses} ${formErrors.workEmail ? "border-red-500" : ""}`,
2152
+ className: inputBaseClasses,
2153
+ style: { borderColor: formErrors.workEmail ? "#ef4444" : "var(--border-color)" },
2396
2154
  placeholder: "email@company.com",
2397
2155
  required: true
2398
2156
  }
2399
2157
  ),
2400
- formErrors.workEmail && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2158
+ formErrors.workEmail && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
2401
2159
  /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2402
2160
  formErrors.workEmail
2403
2161
  ] })
@@ -2405,7 +2163,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2405
2163
  ] }),
2406
2164
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
2407
2165
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2408
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.phoneNumber") || "Số điện thoại" }),
2166
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.phoneNumber") || "Số điện thoại" }),
2409
2167
  /* @__PURE__ */ jsxRuntimeExports.jsx(
2410
2168
  "input",
2411
2169
  {
@@ -2414,17 +2172,18 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2414
2172
  value: formData.phoneNumber || "",
2415
2173
  onChange: handleInputChange,
2416
2174
  onBlur: handleBlur,
2417
- className: `${inputBaseClasses} ${formErrors.phoneNumber ? "border-red-500" : ""}`,
2175
+ className: inputBaseClasses,
2176
+ style: { borderColor: formErrors.phoneNumber ? "#ef4444" : "var(--border-color)" },
2418
2177
  placeholder: "0901 234 567"
2419
2178
  }
2420
2179
  ),
2421
- formErrors.phoneNumber && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2180
+ formErrors.phoneNumber && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
2422
2181
  /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2423
2182
  formErrors.phoneNumber
2424
2183
  ] })
2425
2184
  ] }),
2426
2185
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2427
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.companyName") || "Công ty/Tổ chức" }),
2186
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.companyName") || "Công ty/Tổ chức" }),
2428
2187
  /* @__PURE__ */ jsxRuntimeExports.jsx(
2429
2188
  "input",
2430
2189
  {
@@ -2433,11 +2192,12 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2433
2192
  value: formData.companyName || "",
2434
2193
  onChange: handleInputChange,
2435
2194
  onBlur: handleBlur,
2436
- className: `${inputBaseClasses} ${formErrors.companyName ? "border-red-500" : ""}`,
2195
+ className: inputBaseClasses,
2196
+ style: { borderColor: formErrors.companyName ? "#ef4444" : "var(--border-color)" },
2437
2197
  placeholder: t("contact.form.fields.company")
2438
2198
  }
2439
2199
  ),
2440
- formErrors.companyName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2200
+ formErrors.companyName && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
2441
2201
  /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2442
2202
  formErrors.companyName
2443
2203
  ] })
@@ -2445,7 +2205,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2445
2205
  ] }),
2446
2206
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
2447
2207
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2448
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.jobTitle") || "Chức vụ" }),
2208
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.jobTitle") || "Chức vụ" }),
2449
2209
  /* @__PURE__ */ jsxRuntimeExports.jsx(
2450
2210
  "input",
2451
2211
  {
@@ -2454,17 +2214,18 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2454
2214
  value: formData.jobTitle || "",
2455
2215
  onChange: handleInputChange,
2456
2216
  onBlur: handleBlur,
2457
- className: `${inputBaseClasses} ${formErrors.jobTitle ? "border-red-500" : ""}`,
2217
+ className: inputBaseClasses,
2218
+ style: { borderColor: formErrors.jobTitle ? "#ef4444" : "var(--border-color)" },
2458
2219
  placeholder: t("contact.form.positionPlaceholder")
2459
2220
  }
2460
2221
  ),
2461
- formErrors.jobTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2222
+ formErrors.jobTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
2462
2223
  /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2463
2224
  formErrors.jobTitle
2464
2225
  ] })
2465
2226
  ] }),
2466
2227
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2467
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.businessType") || "Loại hình kinh doanh" }),
2228
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.businessType") || "Loại hình kinh doanh" }),
2468
2229
  /* @__PURE__ */ jsxRuntimeExports.jsx(
2469
2230
  "input",
2470
2231
  {
@@ -2473,6 +2234,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2473
2234
  value: formData.businessType || "",
2474
2235
  onChange: handleInputChange,
2475
2236
  className: inputBaseClasses,
2237
+ style: { borderColor: "var(--border-color)" },
2476
2238
  placeholder: t("form.fields.businessType")
2477
2239
  }
2478
2240
  )
@@ -2480,7 +2242,7 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2480
2242
  ] }),
2481
2243
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-6", children: [
2482
2244
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2483
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.expectedBudget") || "Ngân sách dự kiến" }),
2245
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.expectedBudget") || "Ngân sách dự kiến" }),
2484
2246
  /* @__PURE__ */ jsxRuntimeExports.jsx(
2485
2247
  "input",
2486
2248
  {
@@ -2489,12 +2251,13 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2489
2251
  value: formData.expectedBudget || "",
2490
2252
  onChange: handleInputChange,
2491
2253
  className: inputBaseClasses,
2254
+ style: { borderColor: "var(--border-color)" },
2492
2255
  placeholder: t("form.fields.expectedBudget")
2493
2256
  }
2494
2257
  )
2495
2258
  ] }),
2496
2259
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2497
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: labelClasses, children: t("form.fields.expectedTimeline") || "Thời gian dự kiến" }),
2260
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-small font-semibold mb-2 text-main", children: t("form.fields.expectedTimeline") || "Thời gian dự kiến" }),
2498
2261
  /* @__PURE__ */ jsxRuntimeExports.jsx(
2499
2262
  "input",
2500
2263
  {
@@ -2503,13 +2266,14 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2503
2266
  value: formData.expectedTimeline || "",
2504
2267
  onChange: handleInputChange,
2505
2268
  className: inputBaseClasses,
2269
+ style: { borderColor: "var(--border-color)" },
2506
2270
  placeholder: t("form.fields.expectedTimeline")
2507
2271
  }
2508
2272
  )
2509
2273
  ] })
2510
2274
  ] }),
2511
2275
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2512
- /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: labelClasses, children: [
2276
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
2513
2277
  t("form.fields.requestTitle") || "Tiêu đề yêu cầu",
2514
2278
  " *"
2515
2279
  ] }),
@@ -2521,18 +2285,19 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2521
2285
  value: formData.requestTitle || "",
2522
2286
  onChange: handleInputChange,
2523
2287
  onBlur: handleBlur,
2524
- className: `${inputBaseClasses} ${formErrors.requestTitle ? "border-red-500" : ""}`,
2288
+ className: inputBaseClasses,
2289
+ style: { borderColor: formErrors.requestTitle ? "#ef4444" : "var(--border-color)" },
2525
2290
  placeholder: t("contact.form.placeholders.subject"),
2526
2291
  required: true
2527
2292
  }
2528
2293
  ),
2529
- formErrors.requestTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2294
+ formErrors.requestTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
2530
2295
  /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2531
2296
  formErrors.requestTitle
2532
2297
  ] })
2533
2298
  ] }),
2534
2299
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2535
- /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: labelClasses, children: [
2300
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-small font-semibold mb-2 text-main", children: [
2536
2301
  t("form.fields.requestDescription") || "Mô tả yêu cầu",
2537
2302
  " *"
2538
2303
  ] }),
@@ -2544,116 +2309,145 @@ const ContactFormSection = ({ data, t, isDarkMode, consultationRequestService })
2544
2309
  onChange: handleInputChange,
2545
2310
  onBlur: handleBlur,
2546
2311
  rows: "5",
2547
- className: `${inputBaseClasses} resize-none ${formErrors.requestDescription ? "border-red-500" : ""}`,
2312
+ className: `${inputBaseClasses} resize-none`,
2313
+ style: { borderColor: formErrors.requestDescription ? "#ef4444" : "var(--border-color)" },
2548
2314
  placeholder: t("contact.form.placeholders.message"),
2549
2315
  required: true
2550
2316
  }
2551
2317
  ),
2552
- formErrors.requestDescription && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-sm text-red-500 flex items-center", children: [
2318
+ formErrors.requestDescription && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-1 text-small text-red-500 flex items-center", children: [
2553
2319
  /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { size: 14, className: "mr-1" }),
2554
2320
  formErrors.requestDescription
2555
2321
  ] })
2556
2322
  ] }),
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ờ" })
2588
- ] })
2323
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center space-x-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
2324
+ "button",
2325
+ {
2326
+ type: "submit",
2327
+ disabled: isSubmitting,
2328
+ className: "flex-1 btn-primary text-white py-4 px-6 rounded-xl transition-all disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center font-semibold",
2329
+ children: isSubmitting ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
2330
+ /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "animate-spin h-5 w-5 mr-2" }),
2331
+ t("form.submitting") || "Đang gửi..."
2332
+ ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
2333
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Send, { size: 20, className: "mr-2" }),
2334
+ t("form.submit") || "Gửi yêu cầu"
2335
+ ] })
2336
+ }
2337
+ ) })
2589
2338
  ] })
2590
2339
  ] }) }) }) }) });
2591
2340
  };
2592
2341
  const ContactInfoSection = ({ data, t, isDarkMode, section }) => {
2593
2342
  var _a, _b;
2594
2343
  const contactData = ((_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)) || [];
2595
- const sectionTitle = (section == null ? void 0 : section.title) || "...";
2596
- if (!contactData.length) return null;
2597
- 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: [
2598
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `inline-flex items-center px-4 py-2 rounded-full text-lg font-semibold mb-4 ${isDarkMode ? "bg-indigo-900/50 text-indigo-300" : "bg-indigo-50 text-indigo-700"}`, children: [
2599
- /* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 22, className: "mr-2" }),
2600
- sectionTitle
2601
- ] }) }),
2602
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid md:grid-cols-2 lg:grid-cols-3 gap-8", children: contactData.map((contact, index2) => {
2603
- var _a2;
2604
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
2605
- "div",
2606
- {
2607
- className: `rounded-2xl p-8 shadow-lg transition-all duration-300 hover:shadow-xl hover:-translate-y-1 border ${isDarkMode ? "bg-gray-800 border-gray-700" : "bg-white border-slate-200"}`,
2608
- children: [
2609
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-6", children: [
2610
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-20 h-20 rounded-full mx-auto mb-4 flex items-center justify-center text-2xl font-bold text-white bg-gradient-to-br from-indigo-500 to-purple-600", children: ((_a2 = contact.name) == null ? void 0 : _a2.charAt(0)) || "A" }),
2611
- /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-xl font-bold mb-2 ${isDarkMode ? "text-white" : "text-slate-800"}`, children: contact.name }),
2612
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `inline-block px-3 py-1 rounded-full text-sm font-semibold ${isDarkMode ? "bg-indigo-900/50 text-indigo-300" : "bg-indigo-50 text-indigo-700"}`, children: contact.position })
2613
- ] }),
2614
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
2615
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
2616
- "a",
2617
- {
2618
- href: `tel:${contact.phone}`,
2619
- className: `flex items-center p-3 rounded-xl transition-all hover:scale-105 ${isDarkMode ? "bg-gray-700 hover:bg-gray-600" : "bg-slate-50 hover:bg-slate-100"} group`,
2620
- children: [
2621
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-10 h-10 rounded-lg flex items-center justify-center mr-3 group-hover:scale-110 transition-transform ${isDarkMode ? "bg-green-900/50 text-green-400" : "bg-green-50 text-green-600"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 18 }) }),
2622
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1", children: [
2623
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-sm font-medium ${isDarkMode ? "text-gray-400" : "text-slate-500"}`, children: t("contact.info.phone") || "Điện thoại" }),
2624
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `font-semibold ${isDarkMode ? "text-white" : "text-slate-800"}`, children: contact.phone })
2625
- ] })
2626
- ]
2627
- }
2628
- ),
2629
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
2630
- "a",
2631
- {
2632
- href: `mailto:${contact.email}`,
2633
- className: `flex items-center p-3 rounded-xl transition-all hover:scale-105 ${isDarkMode ? "bg-gray-700 hover:bg-gray-600" : "bg-slate-50 hover:bg-slate-100"} group`,
2634
- children: [
2635
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-10 h-10 rounded-lg flex items-center justify-center mr-3 group-hover:scale-110 transition-transform ${isDarkMode ? "bg-indigo-900/50 text-indigo-400" : "bg-indigo-50 text-indigo-600"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Mail, { size: 18 }) }),
2636
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1", children: [
2637
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-sm font-medium ${isDarkMode ? "text-gray-400" : "text-slate-500"}`, children: "Email" }),
2638
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `font-semibold ${isDarkMode ? "text-white" : "text-slate-800"}`, children: contact.email })
2639
- ] })
2640
- ]
2641
- }
2642
- ),
2643
- contact.workingHours && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `flex items-center p-3 rounded-xl ${isDarkMode ? "bg-gray-700" : "bg-slate-50"}`, children: [
2644
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-10 h-10 rounded-lg flex items-center justify-center mr-3 ${isDarkMode ? "bg-purple-900/50 text-purple-400" : "bg-purple-50 text-purple-600"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { size: 18 }) }),
2645
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1", children: [
2646
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-sm font-medium ${isDarkMode ? "text-gray-400" : "text-slate-500"}`, children: t("contact.info.workingHours") || "Giờ làm việc" }),
2647
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `font-semibold ${isDarkMode ? "text-white" : "text-slate-800"}`, children: contact.workingHours || t("contact.info.defaultWorkingHours") || "T2-T6: 8:00-18:00" })
2648
- ] })
2344
+ const sectionTitle = (section == null ? void 0 : section.title) || "...";
2345
+ if (!contactData.length) return null;
2346
+ 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: [
2347
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-flex items-center px-4 py-2 rounded-full text-lg font-semibold mb-4 bg-surface", style: { borderWidth: "1px", borderColor: "var(--border-color)" }, children: [
2348
+ /* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 22, className: "mr-2 text-brand-primary" }),
2349
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-main", children: sectionTitle })
2350
+ ] }) }),
2351
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid md:grid-cols-2 lg:grid-cols-3 gap-8", children: contactData.map((contact, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
2352
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-6", children: [
2353
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
2354
+ width: "5rem",
2355
+ height: "5rem",
2356
+ borderRadius: "9999px",
2357
+ margin: "0 auto 1rem",
2358
+ display: "flex",
2359
+ alignItems: "center",
2360
+ justifyContent: "center"
2361
+ }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 32, style: { color: "white" } }) }),
2362
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle mb-2", children: contact.name }),
2363
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "inline-block px-3 py-1 rounded-full text-small font-semibold bg-surface text-brand-primary", style: { borderWidth: "1px", borderColor: "var(--border-color)" }, children: contact.position })
2364
+ ] }),
2365
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "1rem" }, children: [
2366
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
2367
+ "a",
2368
+ {
2369
+ href: `tel:${contact.phone}`,
2370
+ className: "card-link",
2371
+ style: {
2372
+ padding: "0.75rem",
2373
+ borderRadius: "0.75rem",
2374
+ backgroundColor: "var(--bg-body)",
2375
+ borderWidth: "1px",
2376
+ borderColor: "var(--border-color)",
2377
+ transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
2378
+ },
2379
+ children: [
2380
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
2381
+ width: "2.5rem",
2382
+ height: "2.5rem",
2383
+ borderRadius: "0.5rem",
2384
+ display: "flex",
2385
+ alignItems: "center",
2386
+ justifyContent: "center",
2387
+ marginRight: "0.75rem"
2388
+ }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 18, style: { color: "white" } }) }),
2389
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
2390
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contact.info.phone") || "Điện thoại" }),
2391
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.phone })
2649
2392
  ] })
2650
- ] }),
2651
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-6", children: /* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "w-full py-3 px-4 rounded-xl font-semibold transition-all transform hover:scale-105 bg-gradient-to-r from-indigo-600 to-purple-600 hover:from-indigo-700 hover:to-purple-700 text-white shadow-lg", children: t("contact.buttons.contactNow") || "Liên hệ ngay" }) })
2652
- ]
2653
- },
2654
- contact.id || index2
2655
- );
2656
- }) })
2393
+ ]
2394
+ }
2395
+ ),
2396
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
2397
+ "a",
2398
+ {
2399
+ href: `mailto:${contact.email}`,
2400
+ className: "card-link",
2401
+ style: {
2402
+ padding: "0.75rem",
2403
+ borderRadius: "0.75rem",
2404
+ backgroundColor: "var(--bg-body)",
2405
+ borderWidth: "1px",
2406
+ borderColor: "var(--border-color)",
2407
+ transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
2408
+ },
2409
+ children: [
2410
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-accent", style: {
2411
+ width: "2.5rem",
2412
+ height: "2.5rem",
2413
+ borderRadius: "0.5rem",
2414
+ display: "flex",
2415
+ alignItems: "center",
2416
+ justifyContent: "center",
2417
+ marginRight: "0.75rem"
2418
+ }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Mail, { size: 18, style: { color: "white" } }) }),
2419
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
2420
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: "Email" }),
2421
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.email })
2422
+ ] })
2423
+ ]
2424
+ }
2425
+ ),
2426
+ contact.workingHours && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
2427
+ display: "flex",
2428
+ alignItems: "center",
2429
+ padding: "0.75rem",
2430
+ borderRadius: "0.75rem",
2431
+ backgroundColor: "var(--bg-body)",
2432
+ borderWidth: "1px",
2433
+ borderColor: "var(--border-color)"
2434
+ }, children: [
2435
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
2436
+ width: "2.5rem",
2437
+ height: "2.5rem",
2438
+ borderRadius: "0.5rem",
2439
+ display: "flex",
2440
+ alignItems: "center",
2441
+ justifyContent: "center",
2442
+ marginRight: "0.75rem"
2443
+ }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { size: 18, style: { color: "white" } }) }),
2444
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
2445
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contact.info.workingHours") || "Giờ làm việc" }),
2446
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.workingHours || t("contact.info.defaultWorkingHours") || "T2-T6: 8:00-18:00" })
2447
+ ] })
2448
+ ] })
2449
+ ] })
2450
+ ] }, contact.id || index2)) })
2657
2451
  ] }) });
2658
2452
  };
2659
2453
  const ContactListAutoSection = ({ data, t, isDarkMode, getContactList, section }) => {
@@ -2681,89 +2475,136 @@ const ContactListAutoSection = ({ data, t, isDarkMode, getContactList, section }
2681
2475
  }
2682
2476
  });
2683
2477
  if (loading) {
2684
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `py-16 px-5 text-center ${isDarkMode ? "bg-gray-900" : "bg-gray-50"}`, children: [
2685
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `inline-block w-10 h-10 border-4 ${isDarkMode ? "border-gray-600 border-t-blue-500" : "border-gray-300 border-t-blue-500"} rounded-full animate-spin` }),
2686
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `mt-4 ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: t("contactList.status.loading") || "Đang tải danh sách liên hệ..." })
2478
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "py-16 px-5 text-center bg-body", children: [
2479
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "inline-block w-10 h-10 border-4 border-color rounded-full animate-spin", style: { borderTopColor: "var(--brand-primary)" } }),
2480
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-4 text-muted", children: t("contactList.status.loading") || "Đang tải danh sách liên hệ..." })
2687
2481
  ] });
2688
2482
  }
2689
2483
  if (error) {
2690
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `py-16 px-5 text-center ${isDarkMode ? "bg-gray-900" : "bg-gray-50"}`, children: [
2691
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `${isDarkMode ? "text-red-400" : "text-red-500"} text-base mb-2`, children: [
2484
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "py-16 px-5 text-center bg-body", children: [
2485
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-base mb-2", style: { color: "#ef4444" }, children: [
2692
2486
  "⚠️ ",
2693
2487
  t("contactList.error.title") || "Lỗi tải dữ liệu"
2694
2488
  ] }),
2695
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: error })
2489
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted", children: error })
2696
2490
  ] });
2697
2491
  }
2698
2492
  if (!contacts || contacts.length === 0) {
2699
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `py-16 px-5 text-center ${isDarkMode ? "bg-gray-900" : "bg-gray-50"}`, children: [
2493
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "py-16 px-5 text-center bg-body", children: [
2700
2494
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-5xl mb-5", children: "📞" }),
2701
- /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `${isDarkMode ? "text-gray-400" : "text-gray-600"} mb-2`, children: t("contactList.status.noData.title") || "Chưa có thông tin liên hệ" }),
2702
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `${isDarkMode ? "text-gray-500" : "text-gray-500"}`, children: t("contactList.status.noData.description") || "Danh sách liên hệ sẽ hiển thị tại đây" })
2495
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-muted mb-2", children: t("contactList.status.noData.title") || "Chưa có thông tin liên hệ" }),
2496
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted opacity-75", children: t("contactList.status.noData.description") || "Danh sách liên hệ sẽ hiển thị tại đây" })
2703
2497
  ] });
2704
2498
  }
2705
- return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-6xl mx-auto px-5", children: [
2706
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-16", children: /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: `text-4xl font-bold ${isDarkMode ? "text-white" : "text-gray-900"} mb-4`, children: sectionTitle }) }),
2707
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 mt-10", children: contacts.map((contact, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(ContactCard, { contact, t, isDarkMode }, contact.id || index2)) })
2499
+ 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: [
2500
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-flex items-center px-4 py-2 rounded-full text-lg font-semibold mb-4 bg-surface", style: { borderWidth: "1px", borderColor: "var(--border-color)" }, children: [
2501
+ /* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 22, className: "mr-2 text-brand-primary" }),
2502
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-main", children: sectionTitle })
2503
+ ] }) }),
2504
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid md:grid-cols-2 lg:grid-cols-3 gap-8", children: contacts.map((contact, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(ContactCard, { contact, t, isDarkMode }, contact.id || index2)) })
2708
2505
  ] }) });
2709
2506
  };
2710
2507
  const ContactCard = ({ contact, t, isDarkMode }) => {
2711
- var _a, _b;
2712
- const [isHovered, setIsHovered] = useState(false);
2713
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
2714
- "div",
2715
- {
2716
- className: `
2717
- ${isDarkMode ? "bg-gray-800 border-gray-700" : "bg-white border-gray-200"} rounded-2xl p-8 border cursor-pointer transition-all duration-300
2718
- ${isHovered ? `shadow-xl ${isDarkMode ? "shadow-gray-900/40" : "shadow-gray-500/20"} -translate-y-2` : `shadow-lg ${isDarkMode ? "shadow-gray-900/20" : "shadow-gray-500/10"}`}
2719
- `,
2720
- onMouseEnter: () => setIsHovered(true),
2721
- onMouseLeave: () => setIsHovered(false),
2722
- children: [
2723
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center mb-6", children: [
2724
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-15 h-15 rounded-full ${isDarkMode ? "bg-blue-600" : "bg-blue-500"} flex items-center justify-center text-white text-2xl font-bold mr-4`, children: ((_b = (_a = contact.name) == null ? void 0 : _a.charAt(0)) == null ? void 0 : _b.toUpperCase()) || "?" }),
2725
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2726
- /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-xl font-semibold ${isDarkMode ? "text-white" : "text-gray-900"} mb-1`, children: contact.name || t("contactList.card.noName") || "Không có tên" }),
2727
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-base ${isDarkMode ? "text-gray-400" : "text-gray-600"}`, children: contact.position || t("contactList.card.noPosition") || "Chưa có chức vụ" })
2728
- ] })
2729
- ] }),
2730
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2731
- /* @__PURE__ */ jsxRuntimeExports.jsx(
2732
- ContactInfo,
2733
- {
2734
- icon: "📧",
2735
- label: t("contactList.card.email") || "Email",
2736
- value: contact.email,
2737
- href: `mailto:${contact.email}`
2738
- }
2739
- ),
2740
- /* @__PURE__ */ jsxRuntimeExports.jsx(
2741
- ContactInfo,
2742
- {
2743
- icon: "📱",
2744
- label: t("contactList.card.phone") || "Điện thoại",
2745
- value: contact.phone,
2746
- href: `tel:${contact.phone}`
2747
- }
2748
- )
2508
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
2509
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-6", children: [
2510
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
2511
+ width: "5rem",
2512
+ height: "5rem",
2513
+ borderRadius: "9999px",
2514
+ margin: "0 auto 1rem",
2515
+ display: "flex",
2516
+ alignItems: "center",
2517
+ justifyContent: "center"
2518
+ }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(User, { size: 32, style: { color: "white" } }) }),
2519
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle mb-2", children: contact.name || t("contactList.card.noName") || "Không có tên" }),
2520
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "inline-block px-3 py-1 rounded-full text-small font-semibold bg-surface text-brand-primary", style: { borderWidth: "1px", borderColor: "var(--border-color)" }, children: contact.position || t("contactList.card.noPosition") || "Chưa có chức vụ" })
2521
+ ] }),
2522
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "1rem" }, children: [
2523
+ contact.phone && /* @__PURE__ */ jsxRuntimeExports.jsxs(
2524
+ "a",
2525
+ {
2526
+ href: `tel:${contact.phone}`,
2527
+ className: "card-link",
2528
+ style: {
2529
+ padding: "0.75rem",
2530
+ borderRadius: "0.75rem",
2531
+ backgroundColor: "var(--bg-body)",
2532
+ borderWidth: "1px",
2533
+ borderColor: "var(--border-color)",
2534
+ transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
2535
+ },
2536
+ children: [
2537
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
2538
+ width: "2.5rem",
2539
+ height: "2.5rem",
2540
+ borderRadius: "0.5rem",
2541
+ display: "flex",
2542
+ alignItems: "center",
2543
+ justifyContent: "center",
2544
+ marginRight: "0.75rem"
2545
+ }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 18, style: { color: "white" } }) }),
2546
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
2547
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contactList.card.phone") || "Điện thoại" }),
2548
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.phone })
2549
+ ] })
2550
+ ]
2551
+ }
2552
+ ),
2553
+ contact.email && /* @__PURE__ */ jsxRuntimeExports.jsxs(
2554
+ "a",
2555
+ {
2556
+ href: `mailto:${contact.email}`,
2557
+ className: "card-link",
2558
+ style: {
2559
+ padding: "0.75rem",
2560
+ borderRadius: "0.75rem",
2561
+ backgroundColor: "var(--bg-body)",
2562
+ borderWidth: "1px",
2563
+ borderColor: "var(--border-color)",
2564
+ transition: "all 300ms cubic-bezier(0.4, 0, 0.2, 1)"
2565
+ },
2566
+ children: [
2567
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-accent", style: {
2568
+ width: "2.5rem",
2569
+ height: "2.5rem",
2570
+ borderRadius: "0.5rem",
2571
+ display: "flex",
2572
+ alignItems: "center",
2573
+ justifyContent: "center",
2574
+ marginRight: "0.75rem"
2575
+ }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Mail, { size: 18, style: { color: "white" } }) }),
2576
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
2577
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: "Email" }),
2578
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.email })
2579
+ ] })
2580
+ ]
2581
+ }
2582
+ ),
2583
+ contact.workingHours && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
2584
+ display: "flex",
2585
+ alignItems: "center",
2586
+ padding: "0.75rem",
2587
+ borderRadius: "0.75rem",
2588
+ backgroundColor: "var(--bg-body)",
2589
+ borderWidth: "1px",
2590
+ borderColor: "var(--border-color)"
2591
+ }, children: [
2592
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-gradient-brand", style: {
2593
+ width: "2.5rem",
2594
+ height: "2.5rem",
2595
+ borderRadius: "0.5rem",
2596
+ display: "flex",
2597
+ alignItems: "center",
2598
+ justifyContent: "center",
2599
+ marginRight: "0.75rem"
2600
+ }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { size: 18, style: { color: "white" } }) }),
2601
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { flex: 1 }, children: [
2602
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-muted", style: { marginBottom: "0.25rem" }, children: t("contactList.card.workingHours") || "Giờ làm việc" }),
2603
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-main", style: { fontWeight: 600 }, children: contact.workingHours || t("contactList.card.defaultWorkingHours") || "T2-T6: 8:00-18:00" })
2749
2604
  ] })
2750
- ]
2751
- }
2752
- );
2753
- };
2754
- const ContactInfo = ({ icon, label, value, href, isDarkMode }) => {
2755
- if (!value) return null;
2756
- const content = /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `flex items-center py-3 border-b ${isDarkMode ? "border-gray-600" : "border-gray-100"} last:border-b-0`, children: [
2757
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-lg mr-3 w-6 text-center", children: icon }),
2758
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1", children: [
2759
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `text-sm ${isDarkMode ? "text-gray-400" : "text-gray-600"} mb-0.5`, children: label }),
2760
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `text-base font-medium ${href ? `${isDarkMode ? "text-blue-400 hover:text-blue-300" : "text-blue-500 hover:text-blue-600"}` : `${isDarkMode ? "text-white" : "text-gray-900"}`} transition-colors duration-200`, children: value })
2605
+ ] })
2761
2606
  ] })
2762
2607
  ] });
2763
- if (href) {
2764
- return /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href, className: `no-underline text-inherit block ${isDarkMode ? "hover:bg-gray-700/50" : "hover:bg-gray-50"} rounded-lg -mx-2 px-2 transition-colors duration-200`, children: content });
2765
- }
2766
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "-mx-2 px-2", children: content });
2767
2608
  };
2768
2609
  const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback, section }) => {
2769
2610
  const [feedbacks, setFeedbacks] = useState([]);
@@ -2847,7 +2688,7 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
2847
2688
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
2848
2689
  "div",
2849
2690
  {
2850
- className: `inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 ${isDarkMode ? "bg-indigo-900/50 text-indigo-300 border border-indigo-800" : "bg-indigo-100 text-indigo-800"}`,
2691
+ className: "\r\n inline-block px-4 py-2 rounded-full text-lg font-semibold mb-4 \r\n border shadow-sm \r\n section-badge\r\n ",
2851
2692
  children: [
2852
2693
  "💬 ",
2853
2694
  sectionTitle
@@ -2858,37 +2699,19 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
2858
2699
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
2859
2700
  "div",
2860
2701
  {
2861
- className: `p-6 rounded-2xl transition-all duration-500 transform ${isDarkMode ? "bg-gray-800/80 backdrop-blur-sm border border-gray-700" : "bg-white shadow-lg"}`,
2702
+ className: "card",
2862
2703
  children: [
2863
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
2864
- "blockquote",
2865
- {
2866
- className: `text-lg lg:text-xl italic mb-6 animate-fadeIn transition-colors duration-200 leading-relaxed ${isDarkMode ? "text-gray-300" : "text-gray-700"}`,
2867
- children: [
2868
- '"',
2869
- currentFeedback.content,
2870
- '"'
2871
- ]
2872
- }
2873
- ),
2874
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4 animate-fadeIn", children: [
2704
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("blockquote", { className: "card-text text-lg lg:text-xl italic mb-6 leading-relaxed", children: [
2705
+ '"',
2706
+ currentFeedback.content,
2707
+ '"'
2708
+ ] }),
2709
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center space-x-4", children: [
2875
2710
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-3xl", children: "👤" }),
2876
2711
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
2877
- /* @__PURE__ */ jsxRuntimeExports.jsx(
2878
- "div",
2879
- {
2880
- className: `font-bold text-base transition-colors duration-200 ${isDarkMode ? "text-white" : "text-gray-900"}`,
2881
- children: currentFeedback.customerName
2882
- }
2883
- ),
2884
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-blue-600 font-medium text-sm", children: currentFeedback.customerTitle }),
2885
- currentFeedback.customerCompany && /* @__PURE__ */ jsxRuntimeExports.jsx(
2886
- "div",
2887
- {
2888
- className: `text-xs transition-colors duration-200 ${isDarkMode ? "text-gray-400" : "text-gray-600"}`,
2889
- children: currentFeedback.customerCompany
2890
- }
2891
- )
2712
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-title text-base mb-1", children: currentFeedback.customerName }),
2713
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-link text-sm", children: currentFeedback.customerTitle }),
2714
+ currentFeedback.customerCompany && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-text text-xs mt-1", children: currentFeedback.customerCompany })
2892
2715
  ] })
2893
2716
  ] })
2894
2717
  ]
@@ -2899,8 +2722,11 @@ const CustomerFeedbackAutoSection = ({ data, t, isDarkMode, loadCustomerFeedback
2899
2722
  "button",
2900
2723
  {
2901
2724
  onClick: () => setCurrentIndex(index2),
2902
- className: `w-2.5 h-2.5 rounded-full transition-all duration-300 ${index2 === currentIndex ? "bg-blue-600" : isDarkMode ? "bg-gray-600 hover:bg-gray-500" : "bg-gray-300 hover:bg-gray-400"}`,
2903
- "aria-label": t("customerFeedback.switchToFeedback", { number: index2 + 1 }) || `Chuyển đến phản hồi ${index2 + 1}`
2725
+ "aria-label": t("customerFeedback.switchToFeedback", { number: index2 + 1 }) || `Chuyển đến phản hồi ${index2 + 1}`,
2726
+ className: `
2727
+ w-2.5 h-2.5 rounded-full transition-all duration-300
2728
+ ${index2 === currentIndex ? "bg-brand-secondary" : "bg-surface hover:bg-brand-primary"}
2729
+ `
2904
2730
  },
2905
2731
  index2
2906
2732
  )) })
@@ -3154,28 +2980,12 @@ const TextWithTitleSection = ({ section, data, isDarkMode }) => {
3154
2980
  const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
3155
2981
  const title = ((_a = textItems[0]) == null ? void 0 : _a.value) || "";
3156
2982
  const descriptions = textItems.slice(1);
3157
- return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { maxWidth: "1200px", margin: "0 auto" }, children: [
3158
- title && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { style: {
3159
- fontSize: "36px",
3160
- fontWeight: "700",
3161
- color: isDarkMode ? "#ffffff" : "#000000",
3162
- marginBottom: "16px",
3163
- lineHeight: "1.2",
3164
- textAlign: "left",
3165
- fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'
3166
- }, children: title }),
2983
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-6xl mx-auto", children: [
2984
+ title && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title font-black mb-4 leading-tight text-left text-main", children: title }),
3167
2985
  descriptions.map((item, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
3168
2986
  "div",
3169
2987
  {
3170
- style: {
3171
- fontSize: "16px",
3172
- lineHeight: "1.6",
3173
- color: isDarkMode ? "#9ca3af" : "#6b7280",
3174
- textAlign: "left",
3175
- fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
3176
- fontWeight: "400",
3177
- marginBottom: index2 < descriptions.length - 1 ? "16px" : "0"
3178
- },
2988
+ className: `text-body leading-relaxed text-left font-normal text-muted ${index2 < descriptions.length - 1 ? "mb-4" : ""}`,
3179
2989
  children: item.value
3180
2990
  },
3181
2991
  item.id || index2
@@ -3184,19 +2994,10 @@ const TextWithTitleSection = ({ section, data, isDarkMode }) => {
3184
2994
  };
3185
2995
  const TextSection = ({ data, isDarkMode }) => {
3186
2996
  const textItems = (data == null ? void 0 : data.sectionDataBindingItems) || [];
3187
- return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { maxWidth: "800px", margin: "0 auto" }, children: textItems.map((item, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
2997
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(SectionWrapper, { isDarkMode, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-3xl mx-auto", children: textItems.map((item, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
3188
2998
  "div",
3189
2999
  {
3190
- style: {
3191
- padding: "0",
3192
- marginBottom: "20px",
3193
- fontSize: "28px",
3194
- fontWeight: "700",
3195
- lineHeight: "1.3",
3196
- color: isDarkMode ? "#f9fafb" : "#111827",
3197
- textAlign: "left",
3198
- fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'
3199
- },
3000
+ className: "mb-5 text-subtitle font-black leading-snug text-left text-main",
3200
3001
  children: item.value
3201
3002
  },
3202
3003
  item.id || index2
@@ -3243,25 +3044,23 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
3243
3044
  };
3244
3045
  return icons[iconName] || Settings;
3245
3046
  };
3246
- const getColorClasses = (index2) => {
3047
+ const getColorStyles = (index2) => {
3247
3048
  const isCyan = index2 % 2 === 0;
3248
3049
  if (isCyan) {
3249
3050
  return {
3250
- border: "border-cyan-400/40",
3251
- bg: "bg-gradient-to-r from-blue-900/90 to-cyan-900/90",
3252
- glow: "shadow-cyan-500/20",
3253
- hoverGlow: "hover:shadow-cyan-400/50",
3254
- line: "#22d3ee",
3255
- iconBg: "bg-cyan-500/20"
3051
+ gradient: "linear-gradient(to right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
3052
+ border: "var(--gradient-brand-soft-start)",
3053
+ line: "var(--gradient-brand-soft-start)",
3054
+ iconBg: "var(--gradient-brand-soft-start)",
3055
+ shadow: "rgba(59, 130, 246, 0.2)"
3256
3056
  };
3257
3057
  }
3258
3058
  return {
3259
- border: "border-purple-400/40",
3260
- bg: "bg-gradient-to-r from-purple-900/90 to-pink-900/90",
3261
- glow: "shadow-purple-500/20",
3262
- hoverGlow: "hover:shadow-purple-400/50",
3263
- line: "#c084fc",
3264
- iconBg: "bg-purple-500/20"
3059
+ gradient: "linear-gradient(to right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
3060
+ border: "var(--gradient-accent-soft-start)",
3061
+ line: "var(--gradient-accent-soft-start)",
3062
+ iconBg: "var(--gradient-accent-soft-start)",
3063
+ shadow: "rgba(139, 92, 246, 0.2)"
3265
3064
  };
3266
3065
  };
3267
3066
  const calculateAngles = (count) => {
@@ -3271,12 +3070,13 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
3271
3070
  };
3272
3071
  const angles = calculateAngles(modules.length);
3273
3072
  if (isMobile) {
3274
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `w-full ${isDarkMode ? "bg-gradient-to-br from-slate-900 via-blue-950 to-purple-950" : "bg-gradient-to-br from-blue-50 via-indigo-50 to-purple-50"} p-4 relative overflow-hidden`, children: [
3073
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "w-full p-4 relative overflow-hidden bg-section-soft", children: [
3275
3074
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 overflow-hidden pointer-events-none opacity-20", children: [...Array(50)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(
3276
3075
  "div",
3277
3076
  {
3278
- className: `absolute ${isDarkMode ? "bg-blue-400" : "bg-blue-600"} rounded-full opacity-20`,
3077
+ className: "absolute rounded-full bg-brand-primary",
3279
3078
  style: {
3079
+ opacity: 0.2,
3280
3080
  width: Math.random() * 3 + 1 + "px",
3281
3081
  height: Math.random() * 3 + 1 + "px",
3282
3082
  top: Math.random() * 100 + "%",
@@ -3297,26 +3097,38 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
3297
3097
  to { opacity: 1; transform: translateY(0); }
3298
3098
  }
3299
3099
  ` }),
3300
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `mb-6 ${isDarkMode ? "bg-gradient-to-br from-blue-900/90 via-blue-700/90 to-cyan-600/90" : "bg-gradient-to-br from-blue-600 via-indigo-600 to-cyan-500"} backdrop-blur-md rounded-2xl border-2 ${isDarkMode ? "border-cyan-400/40" : "border-white/40"} p-6 shadow-2xl text-center`, children: [
3301
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-2xl font-bold text-white mb-1 tracking-wide", children: diagramName }),
3302
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-lg text-white/90", children: diagramDescription })
3100
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-6 backdrop-blur-md rounded-2xl border-2 p-6 shadow-2xl text-center bg-gradient-brand border-brand-primary", children: [
3101
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-inverse mb-1 tracking-wide", children: diagramName }),
3102
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-inverse", children: diagramDescription })
3303
3103
  ] }),
3304
3104
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-3", children: modules.map((module, index2) => {
3305
3105
  const Icon2 = getIconComponent(module.icon);
3306
- const colors = getColorClasses(index2);
3106
+ const colors = getColorStyles(index2);
3307
3107
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
3308
3108
  "a",
3309
3109
  {
3310
3110
  href: module.url || "#",
3311
- className: `block ${colors.bg} backdrop-blur-md rounded-2xl border-2 ${colors.border} p-4 flex items-center gap-3 shadow-lg active:scale-95 transition-all duration-200`,
3111
+ className: "block backdrop-blur-md rounded-2xl border-2 p-4 flex items-center gap-3 shadow-lg active:scale-95 transition-all duration-200",
3312
3112
  style: {
3113
+ background: colors.gradient,
3114
+ borderColor: colors.border,
3313
3115
  animation: `slideUp 0.5s ease-out ${index2 * 0.1}s both`
3314
3116
  },
3315
3117
  children: [
3316
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `flex-shrink-0 ${colors.iconBg} p-3 rounded-xl ${colors.border} border`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-6 h-6 text-white", strokeWidth: 2 }) }),
3118
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3119
+ "div",
3120
+ {
3121
+ className: "flex-shrink-0 p-3 rounded-xl border",
3122
+ style: {
3123
+ backgroundColor: `${colors.iconBg}33`,
3124
+ borderColor: colors.border
3125
+ },
3126
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-6 h-6 text-inverse", strokeWidth: 2 })
3127
+ }
3128
+ ),
3317
3129
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1", children: [
3318
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-white font-semibold text-sm tracking-wide mb-1", children: module.name }),
3319
- module.description && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-white/70 text-xs", children: module.description })
3130
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-inverse text-small tracking-wide mb-1", children: module.name }),
3131
+ module.description && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-inverse text-caption", children: module.description })
3320
3132
  ] })
3321
3133
  ]
3322
3134
  },
@@ -3325,12 +3137,13 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
3325
3137
  }) })
3326
3138
  ] });
3327
3139
  }
3328
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `w-full ${isDarkMode ? "bg-gradient-to-br from-slate-900 via-blue-950 to-purple-950" : "bg-gradient-to-br from-blue-50 via-indigo-50 to-purple-50"} py-12 px-4 sm:px-8 relative overflow-hidden transition-colors duration-300`, children: [
3140
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "section-wrapper w-full py-24 px-4 sm:px-8 relative overflow-visible bg-section-soft", children: [
3329
3141
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 overflow-hidden pointer-events-none", children: [...Array(100)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(
3330
3142
  "div",
3331
3143
  {
3332
- className: `absolute ${isDarkMode ? "bg-blue-400" : "bg-blue-600"} rounded-full ${isDarkMode ? "opacity-20" : "opacity-10"}`,
3144
+ className: "absolute rounded-full bg-brand-primary",
3333
3145
  style: {
3146
+ opacity: isDarkMode ? 0.2 : 0.1,
3334
3147
  width: Math.random() * 4 + 1 + "px",
3335
3148
  height: Math.random() * 4 + 1 + "px",
3336
3149
  top: Math.random() * 100 + "%",
@@ -3341,11 +3154,26 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
3341
3154
  },
3342
3155
  i
3343
3156
  )) }),
3344
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 ${isDarkMode ? "opacity-10" : "opacity-5"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: "100%", height: "100%", xmlns: "http://www.w3.org/2000/svg", children: [
3345
- /* @__PURE__ */ jsxRuntimeExports.jsx("defs", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("pattern", { id: "grid", width: "40", height: "40", patternUnits: "userSpaceOnUse", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M 40 0 L 0 0 0 40", fill: "none", stroke: isDarkMode ? "cyan" : "blue", strokeWidth: "0.5" }) }) }),
3346
- /* @__PURE__ */ jsxRuntimeExports.jsx("rect", { width: "100%", height: "100%", fill: "url(#grid)" })
3347
- ] }) }),
3348
- /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: `absolute inset-0 w-full h-full pointer-events-none ${isDarkMode ? "opacity-30" : "opacity-20"}`, children: [
3157
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3158
+ "div",
3159
+ {
3160
+ className: "absolute inset-0",
3161
+ style: { opacity: isDarkMode ? 0.1 : 0.05 },
3162
+ children: /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: "100%", height: "100%", xmlns: "http://www.w3.org/2000/svg", children: [
3163
+ /* @__PURE__ */ jsxRuntimeExports.jsx("defs", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("pattern", { id: "grid", width: "40", height: "40", patternUnits: "userSpaceOnUse", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
3164
+ "path",
3165
+ {
3166
+ d: "M 40 0 L 0 0 0 40",
3167
+ fill: "none",
3168
+ stroke: "var(--brand-primary)",
3169
+ strokeWidth: "0.5"
3170
+ }
3171
+ ) }) }),
3172
+ /* @__PURE__ */ jsxRuntimeExports.jsx("rect", { width: "100%", height: "100%", fill: "url(#grid)" })
3173
+ ] })
3174
+ }
3175
+ ),
3176
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "absolute inset-0 w-full h-full pointer-events-none", style: { opacity: isDarkMode ? 0.3 : 0.2 }, children: [
3349
3177
  /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "0", y1: "20%", x2: "100%", y2: "20%", stroke: "url(#grad1)", strokeWidth: "1", strokeDasharray: "10 5", className: "animate-pulse" }),
3350
3178
  /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "0", y1: "40%", x2: "100%", y2: "40%", stroke: "url(#grad2)", strokeWidth: "1", strokeDasharray: "15 8", className: "animate-pulse", style: { animationDelay: "0.5s" } }),
3351
3179
  /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "0", y1: "60%", x2: "100%", y2: "60%", stroke: "url(#grad1)", strokeWidth: "1", strokeDasharray: "12 6", className: "animate-pulse", style: { animationDelay: "1s" } }),
@@ -3354,20 +3182,20 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
3354
3182
  /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "35%", y1: "0", x2: "35%", y2: "100%", stroke: "url(#grad2)", strokeWidth: "1", strokeDasharray: "15 8", className: "animate-pulse", style: { animationDelay: "0.8s" } }),
3355
3183
  /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "65%", y1: "0", x2: "65%", y2: "100%", stroke: "url(#grad1)", strokeWidth: "1", strokeDasharray: "12 6", className: "animate-pulse", style: { animationDelay: "1.3s" } }),
3356
3184
  /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "85%", y1: "0", x2: "85%", y2: "100%", stroke: "url(#grad2)", strokeWidth: "1", strokeDasharray: "8 4", className: "animate-pulse", style: { animationDelay: "1.8s" } }),
3357
- /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "15%", cy: "20%", r: "3", fill: "#22d3ee", opacity: "0.6", className: "animate-pulse" }),
3358
- /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "35%", cy: "40%", r: "3", fill: "#c084fc", opacity: "0.6", className: "animate-pulse", style: { animationDelay: "0.5s" } }),
3359
- /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "65%", cy: "60%", r: "3", fill: "#22d3ee", opacity: "0.6", className: "animate-pulse", style: { animationDelay: "1s" } }),
3360
- /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "85%", cy: "80%", r: "3", fill: "#c084fc", opacity: "0.6", className: "animate-pulse", style: { animationDelay: "1.5s" } }),
3185
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "15%", cy: "20%", r: "3", fill: "var(--gradient-brand-soft-start)", opacity: "0.6", className: "animate-pulse" }),
3186
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "35%", cy: "40%", r: "3", fill: "var(--gradient-accent-soft-start)", opacity: "0.6", className: "animate-pulse", style: { animationDelay: "0.5s" } }),
3187
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "65%", cy: "60%", r: "3", fill: "var(--gradient-brand-soft-start)", opacity: "0.6", className: "animate-pulse", style: { animationDelay: "1s" } }),
3188
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "85%", cy: "80%", r: "3", fill: "var(--gradient-accent-soft-start)", opacity: "0.6", className: "animate-pulse", style: { animationDelay: "1.5s" } }),
3361
3189
  /* @__PURE__ */ jsxRuntimeExports.jsxs("defs", { children: [
3362
3190
  /* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "grad1", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
3363
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "#22d3ee", stopOpacity: 0 } }),
3364
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "#22d3ee", stopOpacity: 1 } }),
3365
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "#22d3ee", stopOpacity: 0 } })
3191
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 0 } }),
3192
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 1 } }),
3193
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 0 } })
3366
3194
  ] }),
3367
3195
  /* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "grad2", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
3368
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "#c084fc", stopOpacity: 0 } }),
3369
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "#c084fc", stopOpacity: 1 } }),
3370
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "#c084fc", stopOpacity: 0 } })
3196
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--gradient-accent-soft-start)", stopOpacity: 0 } }),
3197
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-accent-soft-start)", stopOpacity: 1 } }),
3198
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-accent-soft-start)", stopOpacity: 0 } })
3371
3199
  ] })
3372
3200
  ] })
3373
3201
  ] }),
@@ -3428,41 +3256,77 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
3428
3256
  }
3429
3257
  }
3430
3258
  ` }),
3431
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "diagram-container relative w-full max-w-5xl mx-auto h-[700px] flex items-center justify-center transition-transform duration-300", children: [
3259
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "diagram-container relative w-full max-w-5xl mx-auto h-[800px] flex items-center justify-center transition-transform duration-300", style: { paddingTop: "80px", paddingBottom: "80px" }, children: [
3432
3260
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2", children: [
3433
3261
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0 w-[320px] h-[320px] -translate-x-1/2 -translate-y-1/2 top-1/2 left-1/2", children: [
3434
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 rounded-full border-2 border-cyan-500/30 animate-pulse-ring" }),
3435
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-4 rounded-full border-2 border-purple-500/30 animate-pulse-ring", style: { animationDelay: "0.5s" } })
3262
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3263
+ "div",
3264
+ {
3265
+ className: "absolute inset-0 rounded-full border-2 animate-pulse-ring",
3266
+ style: { borderColor: "var(--brand-primary)", opacity: 0.3 }
3267
+ }
3268
+ ),
3269
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3270
+ "div",
3271
+ {
3272
+ className: "absolute inset-4 rounded-full border-2 animate-pulse-ring",
3273
+ style: {
3274
+ borderColor: "var(--brand-secondary)",
3275
+ opacity: 0.3,
3276
+ animationDelay: "0.5s"
3277
+ }
3278
+ }
3279
+ )
3436
3280
  ] }),
3437
3281
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative animate-float", children: [
3438
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `w-64 h-64 rounded-full border-8 ${isDarkMode ? "border-slate-600/50 bg-gradient-to-br from-slate-800/50 to-slate-900/50" : "border-gray-300/50 bg-gradient-to-br from-white/50 to-gray-100/50"} flex items-center justify-center backdrop-blur-sm shadow-2xl`, children: [
3439
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 rounded-full", style: { animation: "rotate 20s linear infinite" }, children: [0, 90, 180, 270].map((angle) => /* @__PURE__ */ jsxRuntimeExports.jsx(
3440
- "div",
3441
- {
3442
- className: "absolute w-3 h-3 bg-cyan-400 rounded-full shadow-lg shadow-cyan-400/50",
3443
- style: {
3444
- top: "50%",
3445
- left: "50%",
3446
- transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-125px)`
3447
- }
3282
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
3283
+ "div",
3284
+ {
3285
+ className: "w-64 h-64 rounded-full border-8 flex items-center justify-center backdrop-blur-sm shadow-2xl bg-surface",
3286
+ style: {
3287
+ borderColor: "var(--border-color)"
3448
3288
  },
3449
- angle
3450
- )) }),
3451
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `w-52 h-52 rounded-full ${isDarkMode ? "bg-gradient-to-br from-blue-900/90 via-blue-700/90 to-cyan-600/90 border-cyan-400/40" : "bg-gradient-to-br from-blue-600 via-indigo-600 to-cyan-500 border-white/40"} flex items-center justify-center shadow-2xl relative overflow-hidden border-2 backdrop-blur-md`, children: [
3452
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-white/10 to-transparent" }),
3453
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center relative z-10 px-4", children: [
3454
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-2xl font-bold text-white mb-2 tracking-wide", children: diagramName }),
3455
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-white/90", children: diagramDescription })
3456
- ] })
3457
- ] })
3458
- ] }),
3289
+ children: [
3290
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 rounded-full", style: { animation: "rotate 20s linear infinite" }, children: [0, 90, 180, 270].map((angle) => /* @__PURE__ */ jsxRuntimeExports.jsx(
3291
+ "div",
3292
+ {
3293
+ className: "absolute w-3 h-3 rounded-full shadow-lg bg-brand-primary",
3294
+ style: {
3295
+ boxShadow: "0 0 10px var(--brand-primary)",
3296
+ top: "50%",
3297
+ left: "50%",
3298
+ transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-125px)`
3299
+ }
3300
+ },
3301
+ angle
3302
+ )) }),
3303
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
3304
+ "div",
3305
+ {
3306
+ className: "w-52 h-52 rounded-full flex items-center justify-center shadow-2xl relative overflow-hidden border-2 backdrop-blur-md bg-gradient-brand",
3307
+ style: {
3308
+ borderColor: isDarkMode ? "var(--gradient-brand-soft-start)" : "rgba(255, 255, 255, 0.4)"
3309
+ },
3310
+ children: [
3311
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-white/10 to-transparent" }),
3312
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center relative z-10 px-4", children: [
3313
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-inverse mb-2 tracking-wide", children: diagramName }),
3314
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-small text-inverse", children: diagramDescription })
3315
+ ] })
3316
+ ]
3317
+ }
3318
+ )
3319
+ ]
3320
+ }
3321
+ ),
3459
3322
  modules.map((module, i) => {
3460
3323
  const angle = angles[i];
3461
3324
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
3462
3325
  "div",
3463
3326
  {
3464
- className: `absolute w-4 h-4 ${isDarkMode ? "bg-slate-400 border-slate-600" : "bg-gray-400 border-gray-600"} rounded-full border-2 shadow-lg animate-pulse`,
3327
+ className: "absolute w-4 h-4 rounded-full border-2 shadow-lg animate-pulse bg-muted",
3465
3328
  style: {
3329
+ borderColor: "var(--border-color)",
3466
3330
  top: "50%",
3467
3331
  left: "50%",
3468
3332
  transform: `translate(-50%, -50%) rotate(${angle}deg) translateY(-132px)`,
@@ -3475,7 +3339,7 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
3475
3339
  ] })
3476
3340
  ] }),
3477
3341
  /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-none", width: "1000", height: "900", style: { overflow: "visible" }, children: modules.map((module, index2) => {
3478
- const colors = getColorClasses(index2);
3342
+ const colors = getColorStyles(index2);
3479
3343
  const angle = angles[index2] * Math.PI / 180;
3480
3344
  const circleRadius = 132;
3481
3345
  const moduleRadius = 360;
@@ -3516,7 +3380,7 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
3516
3380
  }) }),
3517
3381
  modules.map((module, index2) => {
3518
3382
  const Icon2 = getIconComponent(module.icon);
3519
- const colors = getColorClasses(index2);
3383
+ const colors = getColorStyles(index2);
3520
3384
  const angle = angles[index2] * Math.PI / 180;
3521
3385
  const radius = 360;
3522
3386
  const x = Math.cos(angle) * radius;
@@ -3538,19 +3402,11 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
3538
3402
  children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
3539
3403
  "div",
3540
3404
  {
3541
- className: `
3542
- ${colors.bg} backdrop-blur-md rounded-full
3543
- border-2 ${colors.border} ${colors.glow}
3544
- px-5 py-3 flex items-center gap-3
3545
- shadow-xl ${colors.hoverGlow}
3546
- transition-all duration-300
3547
- group-hover:scale-110 group-hover:-translate-y-3 group-hover:shadow-2xl
3548
- cursor-pointer
3549
- relative
3550
- ${isRightSide ? "flex-row-reverse" : "flex-row"}
3551
- `,
3405
+ className: `backdrop-blur-md rounded-full border-2 px-5 py-3 flex items-center gap-3 shadow-xl transition-all duration-300 group-hover:scale-110 group-hover:-translate-y-3 group-hover:shadow-2xl cursor-pointer relative ${isRightSide ? "flex-row-reverse" : "flex-row"}`,
3552
3406
  style: {
3553
- boxShadow: "0 10px 40px rgba(0, 0, 0, 0.3)",
3407
+ background: colors.gradient,
3408
+ borderColor: colors.border,
3409
+ boxShadow: `0 10px 40px ${colors.shadow}`,
3554
3410
  width: "240px",
3555
3411
  height: "56px",
3556
3412
  minWidth: "240px",
@@ -3558,14 +3414,49 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
3558
3414
  },
3559
3415
  children: [
3560
3416
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 rounded-full bg-gradient-to-r from-transparent via-white/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300" }),
3561
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 rounded-full border-2 ${colors.border} opacity-0 group-hover:opacity-100 transition-all duration-300 scale-110 blur-sm` }),
3562
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `flex-shrink-0 ${colors.iconBg} p-2.5 rounded-lg ${colors.border} border transition-all duration-300 group-hover:rotate-12 group-hover:scale-125 relative z-10`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-5 h-5 text-white", strokeWidth: 2 }) }),
3563
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `flex-1 text-white font-semibold text-sm tracking-wide overflow-hidden text-ellipsis whitespace-nowrap ${isRightSide ? "text-right" : "text-left"} relative z-10 min-w-0`, children: module.name }),
3564
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `absolute bottom-full left-1/2 -translate-x-1/2 mb-3 px-4 py-2 ${isDarkMode ? "bg-slate-800 border-slate-600" : "bg-white border-gray-300"} ${isDarkMode ? "text-white" : "text-gray-800"} text-sm rounded-lg shadow-xl opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none whitespace-nowrap z-50 border max-w-xs`, children: [
3565
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-semibold", children: module.name }),
3566
- module.description && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `text-xs mt-1 ${isDarkMode ? "text-gray-300" : "text-gray-600"}`, children: module.description }),
3567
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute top-full left-1/2 -translate-x-1/2 -mt-px border-4 border-transparent ${isDarkMode ? "border-t-slate-800" : "border-t-white"}` })
3568
- ] })
3417
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3418
+ "div",
3419
+ {
3420
+ className: "absolute inset-0 rounded-full border-2 opacity-0 group-hover:opacity-100 transition-all duration-300 scale-110 blur-sm",
3421
+ style: { borderColor: colors.border }
3422
+ }
3423
+ ),
3424
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3425
+ "div",
3426
+ {
3427
+ className: "flex-shrink-0 p-2.5 rounded-lg border transition-all duration-300 group-hover:rotate-12 group-hover:scale-125 relative z-10",
3428
+ style: {
3429
+ backgroundColor: `${colors.iconBg}33`,
3430
+ borderColor: colors.border
3431
+ },
3432
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-5 h-5 text-inverse", strokeWidth: 2 })
3433
+ }
3434
+ ),
3435
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `flex-1 text-inverse text-small tracking-wide overflow-hidden text-ellipsis whitespace-nowrap ${isRightSide ? "text-right" : "text-left"} relative z-10 min-w-0`, children: module.name }),
3436
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
3437
+ "div",
3438
+ {
3439
+ className: `absolute bottom-full left-1/2 -translate-x-1/2 mb-3 px-4 py-2 rounded-lg shadow-xl opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none whitespace-nowrap z-50 border max-w-xs ${isDarkMode ? "bg-surface" : "bg-body"}`,
3440
+ style: {
3441
+ borderColor: "var(--border-color)",
3442
+ maxHeight: "120px",
3443
+ overflowY: "auto"
3444
+ },
3445
+ children: [
3446
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-small text-main", children: module.name }),
3447
+ module.description && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-caption text-muted mt-1", children: module.description }),
3448
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3449
+ "div",
3450
+ {
3451
+ className: "absolute top-full left-1/2 -translate-x-1/2 -mt-px border-4 border-transparent",
3452
+ style: {
3453
+ borderTopColor: isDarkMode ? "var(--bg-surface)" : "var(--bg-body)"
3454
+ }
3455
+ }
3456
+ )
3457
+ ]
3458
+ }
3459
+ )
3569
3460
  ]
3570
3461
  }
3571
3462
  )
@@ -3573,24 +3464,82 @@ const DiagramSection = ({ data, t, isDarkMode }) => {
3573
3464
  module.id
3574
3465
  );
3575
3466
  }),
3576
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute bottom-12 right-12 sm:bottom-16 sm:right-20", style: { animation: "rotate 10s linear infinite" }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: "80", height: "80", viewBox: "0 0 60 60", className: `${isDarkMode ? "text-purple-300" : "text-purple-400"} opacity-40`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M30 0 L35 25 L60 30 L35 35 L30 60 L25 35 L0 30 L25 25 Z", fill: "currentColor" }) }) }),
3577
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute top-12 left-12 w-16 h-16 border-2 border-cyan-400/30 rounded-lg animate-pulse", style: { animation: "rotate 8s linear infinite reverse" } }),
3578
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute top-20 right-16 w-12 h-12 border-2 border-purple-400/30 rounded-full animate-pulse" })
3467
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3468
+ "div",
3469
+ {
3470
+ className: "absolute bottom-12 right-12 sm:bottom-16 sm:right-20 opacity-40 text-brand-secondary",
3471
+ style: { animation: "rotate 10s linear infinite" },
3472
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: "80", height: "80", viewBox: "0 0 60 60", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M30 0 L35 25 L60 30 L35 35 L30 60 L25 35 L0 30 L25 25 Z", fill: "currentColor" }) })
3473
+ }
3474
+ ),
3475
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3476
+ "div",
3477
+ {
3478
+ className: "absolute top-12 left-12 w-16 h-16 border-2 rounded-lg animate-pulse border-brand-primary",
3479
+ style: {
3480
+ opacity: 0.3,
3481
+ animation: "rotate 8s linear infinite reverse"
3482
+ }
3483
+ }
3484
+ ),
3485
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3486
+ "div",
3487
+ {
3488
+ className: "absolute top-20 right-16 w-12 h-12 border-2 rounded-full animate-pulse border-brand-secondary",
3489
+ style: {
3490
+ opacity: 0.3
3491
+ }
3492
+ }
3493
+ )
3579
3494
  ] })
3580
3495
  ] });
3581
3496
  };
3582
- const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDragStart, isDragging, onClick, description }) => {
3497
+ const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDragStart, isDragging, onClick, description, isDarkMode }) => {
3583
3498
  const [isHovered, setIsHovered] = useState(false);
3584
3499
  const [dragStartPos, setDragStartPos] = useState(null);
3585
3500
  const [hasMoved, setHasMoved] = useState(false);
3586
- const colorClasses = {
3587
- blue: "bg-gradient-to-br from-blue-600 to-blue-700 hover:from-blue-500 hover:to-blue-600 border-blue-400/50 shadow-blue-500/30",
3588
- teal: "bg-gradient-to-br from-teal-600 to-teal-700 hover:from-teal-500 hover:to-teal-600 border-teal-400/50 shadow-teal-500/30",
3589
- purple: "bg-gradient-to-br from-purple-600 to-purple-700 hover:from-purple-500 hover:to-purple-600 border-purple-400/50 shadow-purple-500/30",
3590
- orange: "bg-gradient-to-br from-orange-500 to-orange-600 hover:from-orange-400 hover:to-orange-500 border-orange-300/50 shadow-orange-500/30",
3591
- cyan: "bg-gradient-to-br from-cyan-600 to-cyan-700 hover:from-cyan-500 hover:to-cyan-600 border-cyan-400/50 shadow-cyan-500/30",
3592
- indigo: "bg-gradient-to-br from-indigo-600 to-indigo-700 hover:from-indigo-500 hover:to-indigo-600 border-indigo-400/50 shadow-indigo-500/30"
3501
+ const getColorStyles = (colorName) => {
3502
+ const styles = {
3503
+ blue: {
3504
+ gradient: "linear-gradient(to bottom right, var(--brand-primary), var(--brand-primary))",
3505
+ gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
3506
+ border: "var(--brand-primary)",
3507
+ shadowColor: "var(--brand-primary)"
3508
+ },
3509
+ teal: {
3510
+ gradient: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
3511
+ gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))",
3512
+ border: "var(--gradient-brand-soft-start)",
3513
+ shadowColor: "var(--gradient-brand-soft-start)"
3514
+ },
3515
+ purple: {
3516
+ gradient: "linear-gradient(to bottom right, var(--brand-secondary), var(--gradient-accent-soft-start))",
3517
+ gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
3518
+ border: "var(--brand-secondary)",
3519
+ shadowColor: "var(--brand-secondary)"
3520
+ },
3521
+ orange: {
3522
+ gradient: "linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))",
3523
+ gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
3524
+ border: "var(--gradient-accent-strong-start)",
3525
+ shadowColor: "var(--gradient-accent-strong-start)"
3526
+ },
3527
+ cyan: {
3528
+ gradient: "linear-gradient(to bottom right, var(--gradient-brand-strong-start), var(--gradient-brand-strong-end))",
3529
+ gradientHover: "linear-gradient(to bottom right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))",
3530
+ border: "var(--gradient-brand-strong-start)",
3531
+ shadowColor: "var(--gradient-brand-strong-start)"
3532
+ },
3533
+ indigo: {
3534
+ gradient: "linear-gradient(to bottom right, var(--gradient-accent-soft-start), var(--gradient-accent-soft-end))",
3535
+ gradientHover: "linear-gradient(to bottom right, var(--gradient-accent-strong-start), var(--gradient-accent-strong-end))",
3536
+ border: "var(--gradient-accent-soft-start)",
3537
+ shadowColor: "var(--gradient-accent-soft-start)"
3538
+ }
3539
+ };
3540
+ return styles[colorName] || styles.blue;
3593
3541
  };
3542
+ const colorStyle = getColorStyles(color);
3594
3543
  const handleMouseDown = (e) => {
3595
3544
  setDragStartPos({ x: e.clientX, y: e.clientY });
3596
3545
  setHasMoved(false);
@@ -3673,12 +3622,45 @@ const MindMapNode = ({ id, icon: Icon2, text, color, position, delay = 0, onDrag
3673
3622
  onTouchMove: handleTouchMove,
3674
3623
  onTouchEnd: handleTouchEnd,
3675
3624
  children: [
3676
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `${colorClasses[color]} backdrop-blur-md px-4 py-2.5 rounded-2xl shadow-2xl border-2 flex items-center gap-2.5 cursor-pointer transform transition-all duration-300 ${isHovered || isDragging ? "scale-110 shadow-2xl brightness-110" : ""} ${isDragging ? "rotate-2" : ""}`, children: [
3677
- /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-4 h-4 text-white flex-shrink-0" }),
3678
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white font-medium whitespace-nowrap text-xs sm:text-sm", children: text })
3679
- ] }),
3680
- isDragging && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-white/10 rounded-2xl blur-xl animate-pulse", style: { transform: "scale(1.5)" } }),
3681
- (isHovered || isDragging) && description && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute top-full left-1/2 -translate-x-1/2 mt-2 px-3 py-2 bg-slate-900/95 text-white text-xs rounded-lg shadow-xl border border-slate-700 whitespace-nowrap z-50 max-w-xs", children: description })
3625
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
3626
+ "div",
3627
+ {
3628
+ className: "backdrop-blur-md px-4 py-2.5 rounded-2xl shadow-2xl border-2 flex items-center gap-2.5 cursor-pointer transform transition-all duration-300",
3629
+ style: {
3630
+ background: isHovered || isDragging ? colorStyle.gradientHover : colorStyle.gradient,
3631
+ borderColor: colorStyle.border + "80",
3632
+ boxShadow: `0 10px 40px ${colorStyle.shadowColor}4D`,
3633
+ transform: isHovered || isDragging ? "scale(1.1)" : "scale(1)",
3634
+ filter: isHovered || isDragging ? "brightness(1.1)" : "brightness(1)",
3635
+ rotate: isDragging ? "2deg" : "0deg"
3636
+ },
3637
+ children: [
3638
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "w-4 h-4 flex-shrink-0 text-inverse" }),
3639
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-inverse text-small whitespace-nowrap", children: text })
3640
+ ]
3641
+ }
3642
+ ),
3643
+ isDragging && /* @__PURE__ */ jsxRuntimeExports.jsx(
3644
+ "div",
3645
+ {
3646
+ className: "absolute inset-0 rounded-2xl blur-xl animate-pulse",
3647
+ style: {
3648
+ background: "rgba(255, 255, 255, 0.1)",
3649
+ transform: "scale(1.5)"
3650
+ }
3651
+ }
3652
+ ),
3653
+ (isHovered || isDragging) && description && /* @__PURE__ */ jsxRuntimeExports.jsx(
3654
+ "div",
3655
+ {
3656
+ className: `absolute top-full left-1/2 -translate-x-1/2 mt-2 px-3 py-2 text-caption rounded-lg shadow-xl border whitespace-nowrap z-50 max-w-xs ${isDarkMode ? "bg-surface text-inverse" : "bg-body text-main"}`,
3657
+ style: {
3658
+ borderColor: "var(--border-color)",
3659
+ opacity: 0.95
3660
+ },
3661
+ children: description
3662
+ }
3663
+ )
3682
3664
  ]
3683
3665
  }
3684
3666
  );
@@ -3899,49 +3881,108 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
3899
3881
  "div",
3900
3882
  {
3901
3883
  ref: containerRef,
3902
- className: `mind-map-container relative w-full h-screen ${isDarkMode ? "bg-gradient-to-br from-slate-950 via-indigo-950 to-purple-950" : "bg-gradient-to-br from-blue-50 via-indigo-50 to-purple-50"} overflow-hidden transition-colors duration-300`,
3903
- style: { touchAction: "none" },
3884
+ className: "mind-map-container relative w-full h-screen overflow-hidden bg-section-soft",
3885
+ style: {
3886
+ touchAction: "none"
3887
+ },
3904
3888
  children: [
3905
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `absolute inset-0 ${isDarkMode ? "opacity-30" : "opacity-20"}`, children: [
3906
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 ${isDarkMode ? "bg-gradient-to-tr from-blue-600/20 via-purple-600/20 to-pink-600/20" : "bg-gradient-to-tr from-blue-400/20 via-purple-400/20 to-pink-400/20"}` }),
3907
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,_var(--tw-gradient-stops))] from-cyan-500/10 via-transparent to-transparent" }),
3908
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-[radial-gradient(ellipse_at_bottom_left,_var(--tw-gradient-stops))] from-purple-500/10 via-transparent to-transparent" })
3909
- ] }),
3910
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 pointer-events-none ${isDarkMode ? "opacity-60" : "opacity-40"}`, children: [...Array(150)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(
3889
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
3890
+ "div",
3891
+ {
3892
+ className: "absolute inset-0",
3893
+ style: { opacity: isDarkMode ? 0.3 : 0.2 },
3894
+ children: [
3895
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3896
+ "div",
3897
+ {
3898
+ className: "absolute inset-0 bg-gradient-brand",
3899
+ style: {
3900
+ opacity: 0.2
3901
+ }
3902
+ }
3903
+ ),
3904
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3905
+ "div",
3906
+ {
3907
+ className: "absolute inset-0 bg-gradient-accent",
3908
+ style: {
3909
+ opacity: 0.1
3910
+ }
3911
+ }
3912
+ )
3913
+ ]
3914
+ }
3915
+ ),
3916
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3911
3917
  "div",
3912
3918
  {
3913
- className: "absolute rounded-full animate-twinkle",
3914
- style: {
3915
- left: `${Math.random() * 100}%`,
3916
- top: `${Math.random() * 100}%`,
3917
- width: `${Math.random() * 3 + 1}px`,
3918
- height: `${Math.random() * 3 + 1}px`,
3919
- background: isDarkMode ? ["#60a5fa", "#818cf8", "#a78bfa", "#c084fc", "#e879f9"][Math.floor(Math.random() * 5)] : ["#3b82f6", "#6366f1", "#8b5cf6", "#a855f7", "#d946ef"][Math.floor(Math.random() * 5)],
3920
- animationDelay: `${Math.random() * 5}s`,
3921
- animationDuration: `${4 + Math.random() * 6}s`
3922
- }
3923
- },
3924
- i
3925
- )) }),
3926
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 ${isDarkMode ? "opacity-10" : "opacity-5"} pointer-events-none`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0", style: {
3927
- backgroundImage: `radial-gradient(circle at 1px 1px, ${isDarkMode ? "rgba(255,255,255,0.15)" : "rgba(0,0,0,0.1)"} 1px, transparent 0)`,
3928
- backgroundSize: "40px 40px"
3929
- } }) }),
3919
+ className: "absolute inset-0 pointer-events-none",
3920
+ style: { opacity: isDarkMode ? 0.6 : 0.4 },
3921
+ children: [...Array(150)].map((_, i) => {
3922
+ const colors = ["bg-brand-primary", "bg-brand-secondary"];
3923
+ const randomColor = colors[Math.floor(Math.random() * colors.length)];
3924
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
3925
+ "div",
3926
+ {
3927
+ className: `absolute rounded-full ${randomColor}`,
3928
+ style: {
3929
+ left: `${Math.random() * 100}%`,
3930
+ top: `${Math.random() * 100}%`,
3931
+ width: `${Math.random() * 3 + 1}px`,
3932
+ height: `${Math.random() * 3 + 1}px`,
3933
+ animationName: "twinkle",
3934
+ animationDelay: `${Math.random() * 5}s`,
3935
+ animationDuration: `${4 + Math.random() * 6}s`,
3936
+ animationIterationCount: "infinite",
3937
+ animationTimingFunction: "ease-in-out"
3938
+ }
3939
+ },
3940
+ i
3941
+ );
3942
+ })
3943
+ }
3944
+ ),
3945
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3946
+ "div",
3947
+ {
3948
+ className: "absolute inset-0 pointer-events-none",
3949
+ style: { opacity: isDarkMode ? 0.1 : 0.05 },
3950
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(
3951
+ "div",
3952
+ {
3953
+ className: "absolute inset-0",
3954
+ style: {
3955
+ backgroundImage: isDarkMode ? "radial-gradient(circle at 1px 1px, var(--text-inverse) 1px, transparent 0)" : "radial-gradient(circle at 1px 1px, var(--text-main) 1px, transparent 0)",
3956
+ backgroundSize: "40px 40px",
3957
+ opacity: 0.15
3958
+ }
3959
+ }
3960
+ )
3961
+ }
3962
+ ),
3930
3963
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute right-4 sm:right-16 bottom-4 sm:bottom-16 z-0 pointer-events-none", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
3931
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-r from-blue-500/20 to-purple-500/20 blur-3xl w-20 h-20 sm:w-32 sm:h-32" }),
3964
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
3965
+ "div",
3966
+ {
3967
+ className: "absolute inset-0 blur-3xl w-20 h-20 sm:w-32 sm:h-32 bg-gradient-brand",
3968
+ style: {
3969
+ opacity: 0.2
3970
+ }
3971
+ }
3972
+ ),
3932
3973
  /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: "60", height: "60", viewBox: "0 0 80 80", className: "relative sm:w-24 sm:h-24", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M40 0 L45 35 L80 40 L45 45 L40 80 L35 45 L0 40 L35 35 Z", fill: "url(#sparkle-gradient)", opacity: "0.4" }) })
3933
3974
  ] }) }),
3934
3975
  /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "absolute inset-0 w-full h-full pointer-events-none", style: { zIndex: 1 }, children: [
3935
3976
  /* @__PURE__ */ jsxRuntimeExports.jsxs("defs", { children: [
3936
3977
  /* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "circuit-gradient", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
3937
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", stopColor: "#60a5fa", stopOpacity: "0.6" }),
3938
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", stopColor: "#a78bfa", stopOpacity: "0.9" }),
3939
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", stopColor: "#c084fc", stopOpacity: "0.6" })
3978
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--brand-primary)", stopOpacity: 0.6 } }),
3979
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-brand-soft-start)", stopOpacity: 0.9 } }),
3980
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-brand-soft-end)", stopOpacity: 0.6 } })
3940
3981
  ] }),
3941
3982
  /* @__PURE__ */ jsxRuntimeExports.jsxs("linearGradient", { id: "sparkle-gradient", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
3942
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", stopColor: "#60a5fa" }),
3943
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", stopColor: "#a78bfa" }),
3944
- /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", stopColor: "#c084fc" })
3983
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "0%", style: { stopColor: "var(--brand-primary)" } }),
3984
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "50%", style: { stopColor: "var(--gradient-brand-soft-start)" } }),
3985
+ /* @__PURE__ */ jsxRuntimeExports.jsx("stop", { offset: "100%", style: { stopColor: "var(--gradient-brand-soft-end)" } })
3945
3986
  ] }),
3946
3987
  /* @__PURE__ */ jsxRuntimeExports.jsxs("filter", { id: "glow", children: [
3947
3988
  /* @__PURE__ */ jsxRuntimeExports.jsx("feGaussianBlur", { stdDeviation: "4", result: "coloredBlur" }),
@@ -3956,11 +3997,11 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
3956
3997
  "path",
3957
3998
  {
3958
3999
  d: line.path,
3959
- stroke: "rgba(167, 139, 250, 0.2)",
4000
+ stroke: "var(--gradient-brand-soft-start)",
3960
4001
  strokeWidth: "6",
3961
4002
  fill: "none",
3962
4003
  className: "transition-all duration-200",
3963
- style: { filter: "blur(8px)" }
4004
+ style: { filter: "blur(8px)", opacity: 0.2 }
3964
4005
  }
3965
4006
  ),
3966
4007
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -3992,7 +4033,8 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
3992
4033
  delay: node.delay,
3993
4034
  onDragStart: handleNodeDragStart,
3994
4035
  isDragging: draggingNodeId === node.id,
3995
- onClick: handleNodeClick
4036
+ onClick: handleNodeClick,
4037
+ isDarkMode
3996
4038
  },
3997
4039
  node.id
3998
4040
  )) }),
@@ -4026,15 +4068,52 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
4026
4068
  },
4027
4069
  onTouchEnd: () => setIsDragging(false),
4028
4070
  children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
4029
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-indigo-400/30 rounded-full blur-2xl", style: { transform: "scale(1.5)" } }),
4030
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `relative bg-gradient-to-br from-indigo-500 via-blue-500 to-cyan-500 px-6 sm:px-10 py-3 sm:py-5 rounded-3xl shadow-2xl border-4 border-indigo-300/50 flex items-center gap-3 sm:gap-4 transition-transform backdrop-blur-md ${isDragging ? "scale-110" : ""}`, children: [
4031
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-white/25 p-2 sm:p-3 rounded-xl backdrop-blur-sm", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Briefcase, { className: "w-5 h-5 sm:w-7 sm:h-7 text-white" }) }),
4032
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center", children: [
4033
- /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-white font-bold text-sm sm:text-xl leading-tight tracking-wide", children: diagramName }),
4034
- diagramDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-white/90 font-medium text-xs sm:text-base leading-tight", children: diagramDescription })
4035
- ] })
4036
- ] }),
4037
- !isDragging && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute -bottom-8 left-1/2 transform -translate-x-1/2 ${isDarkMode ? "text-indigo-300/60" : "text-indigo-600/60"} text-xs whitespace-nowrap`, children: safeT("diagram.dragToMove") })
4071
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4072
+ "div",
4073
+ {
4074
+ className: "absolute inset-0 rounded-full blur-2xl bg-brand-primary",
4075
+ style: {
4076
+ opacity: 0.3,
4077
+ transform: "scale(1.5)"
4078
+ }
4079
+ }
4080
+ ),
4081
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
4082
+ "div",
4083
+ {
4084
+ className: "relative px-6 sm:px-10 py-3 sm:py-5 rounded-3xl shadow-2xl border-4 flex items-center gap-3 sm:gap-4 backdrop-blur-md bg-gradient-brand",
4085
+ style: {
4086
+ borderColor: "var(--brand-primary)",
4087
+ borderOpacity: 0.5,
4088
+ transform: isDragging ? "scale(1.1)" : "scale(1)",
4089
+ transition: "transform 0.3s ease"
4090
+ },
4091
+ children: [
4092
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4093
+ "div",
4094
+ {
4095
+ className: "p-2 sm:p-3 rounded-xl backdrop-blur-sm",
4096
+ style: { backgroundColor: "rgba(255, 255, 255, 0.25)" },
4097
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Briefcase, { className: "w-5 h-5 sm:w-7 sm:h-7 text-inverse" })
4098
+ }
4099
+ ),
4100
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center", children: [
4101
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-inverse text-body sm:text-subtitle", children: diagramName }),
4102
+ diagramDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-inverse text-caption sm:text-small opacity-90", children: diagramDescription })
4103
+ ] })
4104
+ ]
4105
+ }
4106
+ ),
4107
+ !isDragging && /* @__PURE__ */ jsxRuntimeExports.jsx(
4108
+ "div",
4109
+ {
4110
+ className: `absolute -bottom-8 left-1/2 transform -translate-x-1/2 text-caption whitespace-nowrap ${isDarkMode ? "text-brand-primary" : "text-brand-secondary"}`,
4111
+ style: {
4112
+ opacity: 0.6
4113
+ },
4114
+ children: safeT("diagram.dragToMove")
4115
+ }
4116
+ )
4038
4117
  ] })
4039
4118
  }
4040
4119
  ),
@@ -4054,13 +4133,12 @@ const DiagramSection2 = ({ data, t, isDarkMode }) => {
4054
4133
  animation: fadeIn 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;
4055
4134
  opacity: 0;
4056
4135
  }
4057
- .animate-twinkle { animation: twinkle 5s ease-in-out infinite; }
4058
4136
  ` })
4059
4137
  ]
4060
4138
  }
4061
4139
  );
4062
4140
  };
4063
- const FaqItem = ({ faq, index: index2, isActive, onToggle, isDarkMode, t }) => {
4141
+ const FaqItem = ({ faq, index: index2, isActive, onToggle, t }) => {
4064
4142
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
4065
4143
  "div",
4066
4144
  {
@@ -4069,79 +4147,69 @@ const FaqItem = ({ faq, index: index2, isActive, onToggle, isDarkMode, t }) => {
4069
4147
  animationFillMode: "both"
4070
4148
  },
4071
4149
  className: "animate-slide-up",
4072
- children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
4073
- "div",
4074
- {
4075
- className: `
4076
- rounded-xl border transition-all duration-500 ease-out transform
4077
- ${isDarkMode ? "bg-gradient-to-br from-gray-800 to-gray-800/50 border-gray-700/50" : "bg-white border-gray-200"}
4078
- ${isActive ? `scale-[1.02] ${isDarkMode ? "shadow-2xl shadow-blue-500/20 border-blue-500/30" : "shadow-xl shadow-blue-100 border-blue-200"}` : "shadow-md hover:shadow-lg"}
4079
- hover:scale-[1.01]
4080
- `,
4081
- children: [
4082
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
4083
- "button",
4084
- {
4085
- onClick: onToggle,
4086
- className: `
4087
- w-full px-6 py-5 text-left flex items-start justify-between gap-4
4088
- transition-all duration-300
4089
- ${isDarkMode ? "hover:bg-gray-700/30" : "hover:bg-gray-50/50"}
4090
- rounded-xl
4091
- group
4092
- `,
4093
- children: [
4094
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `
4095
- text-lg font-semibold flex-1 transition-colors duration-300
4096
- ${isActive ? isDarkMode ? "text-blue-400" : "text-blue-600" : isDarkMode ? "text-white group-hover:text-blue-300" : "text-gray-900 group-hover:text-blue-600"}
4097
- `, children: faq.question }),
4098
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `
4150
+ children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", style: { padding: 0 }, children: [
4151
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
4152
+ "button",
4153
+ {
4154
+ onClick: onToggle,
4155
+ className: "w-full px-6 py-5 text-left flex items-start justify-between gap-4 rounded-xl group",
4156
+ children: [
4157
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-title flex-1", children: faq.question }),
4158
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `
4099
4159
  flex-shrink-0 w-10 h-10 rounded-full flex items-center justify-center
4100
4160
  transition-all duration-500 transform
4101
- ${isActive ? `bg-gradient-to-br from-blue-500 to-purple-600 text-white shadow-lg ${isDarkMode ? "shadow-blue-500/50" : "shadow-blue-300"} rotate-180 scale-110` : `${isDarkMode ? "bg-gray-700/50 text-gray-400 group-hover:bg-gray-600" : "bg-gray-100 text-gray-500 group-hover:bg-gray-200"} group-hover:scale-110`}
4161
+ ${isActive ? "bg-gradient-to-br from-blue-500 to-purple-600 text-white shadow-lg shadow-blue-500/50 rotate-180 scale-110" : "bg-gray-700/50 text-gray-400 group-hover:bg-gray-600 group-hover:scale-110"}
4102
4162
  `, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: `w-5 h-5 transition-transform duration-500 ${isActive ? "rotate-180" : ""}` }) })
4103
- ]
4104
- }
4105
- ),
4106
- /* @__PURE__ */ jsxRuntimeExports.jsx(
4163
+ ]
4164
+ }
4165
+ ),
4166
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4167
+ "div",
4168
+ {
4169
+ style: {
4170
+ maxHeight: isActive ? "500px" : "0",
4171
+ opacity: isActive ? "1" : "0",
4172
+ overflow: "hidden",
4173
+ transition: "all 500ms ease-in-out"
4174
+ },
4175
+ children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
4107
4176
  "div",
4108
4177
  {
4109
- className: `
4110
- overflow-hidden transition-all duration-500 ease-in-out
4111
- ${isActive ? "max-h-[500px] opacity-100" : "max-h-0 opacity-0"}
4112
- `,
4113
- children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `
4114
- px-6 pb-6 pt-2
4115
- ${isDarkMode ? "text-gray-300" : "text-gray-600"}
4116
- transition-all duration-500
4117
- ${isActive ? "translate-y-0" : "-translate-y-4"}
4118
- `, children: [
4119
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `h-px w-full mb-4 ${isDarkMode ? "bg-gradient-to-r from-transparent via-gray-700 to-transparent" : "bg-gradient-to-r from-transparent via-gray-200 to-transparent"}` }),
4120
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `prose prose-sm max-w-none leading-relaxed ${isDarkMode ? "prose-invert" : ""}`, children: faq.answer }),
4178
+ className: "px-6 pb-6 pt-2",
4179
+ style: {
4180
+ transform: isActive ? "translateY(0)" : "translateY(-10px)",
4181
+ transition: "transform 500ms ease-in-out"
4182
+ },
4183
+ children: [
4184
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4185
+ "div",
4186
+ {
4187
+ className: "h-px w-full mb-4",
4188
+ style: {
4189
+ background: "linear-gradient(to right, transparent, var(--border-color), transparent)"
4190
+ }
4191
+ }
4192
+ ),
4193
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-text leading-relaxed", children: faq.answer }),
4121
4194
  faq.url && /* @__PURE__ */ jsxRuntimeExports.jsxs(
4122
4195
  "a",
4123
4196
  {
4124
4197
  href: faq.url,
4125
4198
  target: "_blank",
4126
4199
  rel: "noopener noreferrer",
4127
- className: `
4128
- inline-flex items-center gap-2 mt-5 px-4 py-2 rounded-lg text-sm font-medium
4129
- transition-all duration-300 transform hover:scale-105
4130
- ${isDarkMode ? "text-blue-400 hover:text-blue-300 bg-blue-500/10 hover:bg-blue-500/20" : "text-blue-600 hover:text-blue-700 bg-blue-50 hover:bg-blue-100"}
4131
- group/link
4132
- `,
4200
+ className: "card-link mt-4",
4133
4201
  children: [
4134
4202
  (t == null ? void 0 : t("faq.learn_more")) || "Learn more",
4135
- /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-4 h-4 transition-transform duration-300 group-hover/link:translate-x-1", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
4203
+ /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
4136
4204
  ]
4137
4205
  }
4138
4206
  )
4139
- ] })
4207
+ ]
4140
4208
  }
4141
4209
  )
4142
- ]
4143
- }
4144
- )
4210
+ }
4211
+ )
4212
+ ] })
4145
4213
  }
4146
4214
  );
4147
4215
  };
@@ -4159,22 +4227,39 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
4159
4227
  const sectionTitle = (section == null ? void 0 : section.title) || "...";
4160
4228
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(SectionWrapper, { isDarkMode, children: [
4161
4229
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-4xl mx-auto", children: [
4162
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center mb-6 animate-fade-in", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `
4163
- w-10 h-10 rounded-lg flex items-center justify-center
4164
- ${isDarkMode ? "bg-gradient-to-br from-blue-500 to-purple-600 shadow-lg shadow-blue-500/20" : "bg-gradient-to-br from-blue-600 to-indigo-600 shadow-lg shadow-blue-200"}
4165
- transform hover:scale-110 transition-all duration-300
4166
- `, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
4167
- "svg",
4230
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center mb-6 animate-fade-in", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
4231
+ "div",
4168
4232
  {
4169
- className: "w-6 h-6 text-white",
4170
- fill: "currentColor",
4171
- viewBox: "0 0 24 24",
4172
- children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z" })
4233
+ className: "w-10 h-10 rounded-lg flex items-center justify-center",
4234
+ style: {
4235
+ background: "linear-gradient(to bottom right, var(--brand-primary), var(--brand-secondary))",
4236
+ boxShadow: "0 10px 15px -3px var(--card-shadow)",
4237
+ transition: "transform 300ms cubic-bezier(0.4, 0, 0.2, 1)"
4238
+ },
4239
+ onMouseEnter: (e) => e.currentTarget.style.transform = "scale(1.1)",
4240
+ onMouseLeave: (e) => e.currentTarget.style.transform = "scale(1)",
4241
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(
4242
+ "svg",
4243
+ {
4244
+ className: "w-6 h-6 text-white",
4245
+ fill: "currentColor",
4246
+ viewBox: "0 0 24 24",
4247
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z" })
4248
+ }
4249
+ )
4173
4250
  }
4174
- ) }) }),
4251
+ ) }),
4175
4252
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12 animate-fade-in", children: [
4176
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: `text-4xl font-bold mb-3 ${isDarkMode ? "text-white" : "text-gray-900"}`, children: sectionTitle }),
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"}` })
4253
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-main mb-3", children: sectionTitle }),
4254
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4255
+ "div",
4256
+ {
4257
+ className: "h-1 w-20 mx-auto rounded-full",
4258
+ style: {
4259
+ background: "linear-gradient(to right, var(--gradient-brand-soft-start), var(--gradient-brand-soft-end))"
4260
+ }
4261
+ }
4262
+ )
4178
4263
  ] }),
4179
4264
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-4", children: faqs.map((faq, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
4180
4265
  FaqItem,
@@ -4183,7 +4268,6 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
4183
4268
  index: index2,
4184
4269
  isActive: activeIndex === index2,
4185
4270
  onToggle: () => toggleFaq(index2),
4186
- isDarkMode,
4187
4271
  t
4188
4272
  },
4189
4273
  faq.id || index2
@@ -4200,7 +4284,6 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
4200
4284
  transform: translateY(0);
4201
4285
  }
4202
4286
  }
4203
-
4204
4287
  @keyframes slide-up {
4205
4288
  from {
4206
4289
  opacity: 0;
@@ -4211,11 +4294,9 @@ const FaqSection = ({ data, t, isDarkMode, section }) => {
4211
4294
  transform: translateY(0);
4212
4295
  }
4213
4296
  }
4214
-
4215
4297
  .animate-fade-in {
4216
4298
  animation: fade-in 0.8s ease-out;
4217
4299
  }
4218
-
4219
4300
  .animate-slide-up {
4220
4301
  animation: slide-up 0.6s ease-out;
4221
4302
  }
@@ -4256,141 +4337,147 @@ const PageHighlightSection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
4256
4337
  return () => clearInterval(interval);
4257
4338
  }, [highlightData.length]);
4258
4339
  const gradientClasses = [
4259
- "from-blue-600 to-purple-600",
4260
- "from-purple-600 to-pink-600",
4261
- "from-blue-500 to-purple-500",
4262
- "from-purple-500 to-pink-500",
4263
- "from-emerald-600 to-teal-600",
4264
- "from-orange-500 to-red-500"
4340
+ "btn-primary"
4265
4341
  ];
4266
4342
  const defaultImage = "https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=1200&h=800&fit=crop&q=80";
4267
4343
  if (!highlightData.length) {
4268
4344
  return /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: `py-20 ${isDarkMode ? "bg-slate-950" : "bg-white"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-4 text-center", children: [
4269
- /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-lg font-semibold mb-2 ${isDarkMode ? "text-white" : "text-gray-900"}`, children: t("highlight.noData.title") || "Chưa có dữ liệu" }),
4270
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `${isDarkMode ? "text-gray-300" : "text-gray-600"}`, children: t("highlight.noData.description") || "Hiện tại chưa có sản phẩm nào được thiết lập." })
4345
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: `text-lg font-semibold mb-2 text-main`, children: t("highlight.noData.title") || "Chưa có dữ liệu" }),
4346
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted", children: t("highlight.noData.description") || "Hiện tại chưa có sản phẩm nào được thiết lập." })
4271
4347
  ] }) });
4272
4348
  }
4273
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: `relative overflow-hidden ${isDarkMode ? "bg-gradient-to-br from-slate-950 via-slate-900 to-slate-950" : "bg-gradient-to-br from-white via-blue-50/30 to-purple-50/30"}`, children: [
4274
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 overflow-hidden pointer-events-none opacity-30", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute top-0 left-0 w-full h-full ${isDarkMode ? "bg-grid-white" : "bg-grid-slate"}` }) }),
4275
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0 overflow-hidden pointer-events-none", children: [
4276
- /* @__PURE__ */ jsxRuntimeExports.jsx(
4277
- "div",
4278
- {
4279
- className: `absolute top-20 right-10 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob ${isDarkMode ? "bg-blue-500" : "bg-blue-400"}`
4280
- }
4281
- ),
4282
- /* @__PURE__ */ jsxRuntimeExports.jsx(
4283
- "div",
4284
- {
4285
- className: `absolute top-40 -left-20 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-2000 ${isDarkMode ? "bg-purple-500" : "bg-purple-400"}`
4286
- }
4287
- ),
4288
- /* @__PURE__ */ jsxRuntimeExports.jsx(
4289
- "div",
4290
- {
4291
- className: `absolute -bottom-20 right-40 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-4000 ${isDarkMode ? "bg-pink-500" : "bg-pink-400"}`
4292
- }
4293
- )
4294
- ] }),
4295
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative w-full px-4 sm:px-6 lg:px-8 py-16 sm:py-24", children: [
4296
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative w-full", children: highlightData.map((item, index2) => {
4297
- const color = gradientClasses[index2 % gradientClasses.length];
4298
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
4299
- "div",
4300
- {
4301
- className: `transition-opacity duration-700 ${activeTab === index2 ? "opacity-100" : "opacity-0 absolute inset-0 pointer-events-none"}`,
4302
- children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `${isDarkMode ? "bg-gradient-to-br from-slate-900/30 to-slate-950/30 border-slate-700/20" : "bg-white/40 border-white/30"} backdrop-blur-md rounded-3xl shadow-lg overflow-hidden border transition-colors duration-500`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-0 min-h-[420px] lg:h-auto", children: [
4303
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative h-[280px] lg:h-full overflow-hidden group", children: [
4304
- /* @__PURE__ */ jsxRuntimeExports.jsx(
4305
- "img",
4306
- {
4307
- src: item.image || defaultImage,
4308
- alt: item.title,
4309
- className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-110",
4310
- onError: (e) => {
4311
- e.target.src = defaultImage;
4312
- }
4313
- }
4314
- ),
4315
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 bg-gradient-to-br ${color} opacity-20` }),
4316
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent" })
4317
- ] }),
4318
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5 lg:p-8 flex flex-col justify-center", children: [
4319
- /* @__PURE__ */ jsxRuntimeExports.jsx(
4320
- "h1",
4321
- {
4322
- className: `text-3xl lg:text-4xl font-black mb-3 bg-gradient-to-r ${color} bg-clip-text text-transparent`,
4323
- children: item.title
4324
- }
4325
- ),
4326
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-description mb-6", children: item.description }),
4327
- item.features && item.features.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-2 mb-6", children: item.features.map((feature, idx) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-2 group", children: [
4328
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `mt-0.5 w-4 h-4 rounded-full bg-gradient-to-r ${color} flex items-center justify-center flex-shrink-0`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-2.5 h-2.5 text-white", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 3, d: "M5 13l4 4L19 7" }) }) }),
4329
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `${isDarkMode ? "text-gray-300 group-hover:text-white" : "text-gray-700 group-hover:text-gray-900"} font-medium text-xs transition-colors`, children: feature })
4330
- ] }, idx)) }),
4331
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
4332
- "a",
4333
- {
4334
- href: item.slug,
4335
- rel: "noopener noreferrer",
4336
- className: `group relative px-6 py-3 rounded-xl font-bold text-sm transition-all duration-300 transform hover:scale-105 hover:shadow-2xl overflow-hidden bg-gradient-to-r ${color} text-white shadow-xl w-full text-center`,
4337
- onClick: (e) => {
4338
- if (!e.ctrlKey && !e.metaKey && e.button !== 1) {
4339
- e.preventDefault();
4340
- window.location.href = item.slug;
4349
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
4350
+ "section",
4351
+ {
4352
+ className: "relative overflow-hidden",
4353
+ style: {
4354
+ background: isDarkMode ? "linear-gradient(to bottom right, var(--color-gray-950), var(--color-gray-900), var(--color-gray-950))" : "linear-gradient(to bottom right, var(--bg-primary), #eff6ff50, #f3e8ff50)"
4355
+ },
4356
+ children: [
4357
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0 overflow-hidden pointer-events-none", children: [
4358
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4359
+ "div",
4360
+ {
4361
+ className: "absolute top-20 right-10 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob",
4362
+ style: {
4363
+ backgroundColor: isDarkMode ? "var(--gradient-brand-soft-start)" : "var(--gradient-brand-soft-start)"
4364
+ }
4365
+ }
4366
+ ),
4367
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4368
+ "div",
4369
+ {
4370
+ className: "absolute top-40 -left-20 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-2000",
4371
+ style: {
4372
+ backgroundColor: isDarkMode ? "var(--gradient-accent-soft-start)" : "var(--gradient-accent-soft-start)",
4373
+ animationDelay: "2s"
4374
+ }
4375
+ }
4376
+ ),
4377
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4378
+ "div",
4379
+ {
4380
+ className: "absolute -bottom-20 right-40 w-96 h-96 rounded-full blur-3xl opacity-20 animate-blob animation-delay-4000",
4381
+ style: {
4382
+ backgroundColor: isDarkMode ? "var(--gradient-accent-soft-end)" : "var(--gradient-accent-soft-end)",
4383
+ animationDelay: "4s"
4384
+ }
4385
+ }
4386
+ )
4387
+ ] }),
4388
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative w-full px-4 sm:px-6 lg:px-8 py-16 sm:py-24", children: [
4389
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative w-full", children: highlightData.map((item, index2) => {
4390
+ const color = gradientClasses[index2 % gradientClasses.length];
4391
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
4392
+ "div",
4393
+ {
4394
+ className: `transition-opacity duration-700 ${activeTab === index2 ? "opacity-100" : "opacity-0 absolute inset-0 pointer-events-none"}`,
4395
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `${isDarkMode ? "bg-gradient-to-br from-slate-900/30 to-slate-950/30 border-slate-700/20" : "bg-white/40 border-white/30"} backdrop-blur-md rounded-3xl shadow-lg overflow-hidden border transition-colors duration-500`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-0 min-h-[420px] lg:h-auto", children: [
4396
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative h-[280px] lg:h-full overflow-hidden group", children: [
4397
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4398
+ "img",
4399
+ {
4400
+ src: item.image || defaultImage,
4401
+ alt: item.title,
4402
+ className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-110",
4403
+ onError: (e) => {
4404
+ e.target.src = defaultImage;
4405
+ }
4341
4406
  }
4342
- },
4343
- children: [
4344
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "relative z-10 flex items-center justify-center gap-2", children: [
4345
- t("highlight.cta") || "Khám phá",
4346
- " ",
4347
- item.title,
4348
- /* @__PURE__ */ jsxRuntimeExports.jsx(
4349
- "svg",
4350
- {
4351
- className: "w-5 h-5 group-hover:translate-x-1 transition-transform",
4352
- fill: "none",
4353
- viewBox: "0 0 24 24",
4354
- stroke: "currentColor",
4355
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(
4356
- "path",
4407
+ ),
4408
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 bg-gradient-to-br ${color} opacity-20` }),
4409
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent" })
4410
+ ] }),
4411
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5 lg:p-8 flex flex-col justify-center", children: [
4412
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-3xl lg:text-4xl font-black mb-3 text-gradient-brand", children: item.title }),
4413
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-6 text-muted", children: item.description }),
4414
+ item.features && item.features.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-2 mb-6", children: item.features.map((feature, idx) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-2 group", children: [
4415
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-0.5 w-4 h-4 rounded-full bg-gradient-accent flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-2.5 h-2.5 text-inverse", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 3, d: "M5 13l4 4L19 7" }) }) }),
4416
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted group-hover:text-main font-medium text-xs transition-colors", children: feature })
4417
+ ] }, idx)) }),
4418
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
4419
+ "a",
4420
+ {
4421
+ href: item.slug,
4422
+ rel: "noopener noreferrer",
4423
+ className: `group relative px-6 py-3 rounded-xl font-bold text-sm transition-all duration-300 transform hover:scale-105 hover:shadow-2xl overflow-hidden bg-gradient-to-r ${color} text-white shadow-xl w-full text-center`,
4424
+ onClick: (e) => {
4425
+ if (!e.ctrlKey && !e.metaKey && e.button !== 1) {
4426
+ e.preventDefault();
4427
+ window.location.href = item.slug;
4428
+ }
4429
+ },
4430
+ children: [
4431
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "relative z-10 flex items-center justify-center gap-2", children: [
4432
+ t("highlight.cta") || "Khám phá",
4433
+ " ",
4434
+ item.title,
4435
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4436
+ "svg",
4357
4437
  {
4358
- strokeLinecap: "round",
4359
- strokeLinejoin: "round",
4360
- strokeWidth: 2,
4361
- d: "M17 8l4 4m0 0l-4 4m4-4H3"
4438
+ className: "w-5 h-5 group-hover:translate-x-1 transition-transform",
4439
+ fill: "none",
4440
+ viewBox: "0 0 24 24",
4441
+ stroke: "currentColor",
4442
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(
4443
+ "path",
4444
+ {
4445
+ strokeLinecap: "round",
4446
+ strokeLinejoin: "round",
4447
+ strokeWidth: 2,
4448
+ d: "M17 8l4 4m0 0l-4 4m4-4H3"
4449
+ }
4450
+ )
4362
4451
  }
4363
4452
  )
4364
- }
4365
- )
4366
- ] }),
4367
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-white/20 transform scale-x-0 group-hover:scale-x-100 transition-transform origin-left" })
4368
- ]
4369
- }
4370
- )
4371
- ] })
4372
- ] }) })
4373
- },
4374
- index2
4375
- );
4376
- }) }),
4377
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-wrap justify-center gap-4 mt-12", children: highlightData.map((item, index2) => {
4378
- const color = gradientClasses[index2 % gradientClasses.length];
4379
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
4380
- "button",
4381
- {
4382
- onClick: () => setActiveTab(index2),
4383
- className: `group relative px-8 py-4 rounded-xl font-bold text-lg transition-all duration-300 transform hover:scale-105 overflow-hidden ${activeTab === index2 ? `bg-gradient-to-r ${color} text-white shadow-xl` : isDarkMode ? "bg-gray-800/50 text-gray-300 hover:shadow-xl shadow-lg border border-gray-700/50 backdrop-blur-sm" : "bg-white text-gray-700 hover:shadow-xl shadow-lg"}`,
4384
- children: [
4385
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "relative z-10", children: item.title }),
4386
- activeTab !== index2 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 bg-gradient-to-r ${color} opacity-0 group-hover:opacity-100 transition-opacity duration-300` })
4387
- ]
4388
- },
4389
- index2
4390
- );
4391
- }) })
4392
- ] }),
4393
- /* @__PURE__ */ jsxRuntimeExports.jsx("style", { jsx: true, children: `
4453
+ ] }),
4454
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-white/20 transform scale-x-0 group-hover:scale-x-100 transition-transform origin-left" })
4455
+ ]
4456
+ }
4457
+ )
4458
+ ] })
4459
+ ] }) })
4460
+ },
4461
+ index2
4462
+ );
4463
+ }) }),
4464
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-wrap justify-center gap-4 mt-12", children: highlightData.map((item, index2) => {
4465
+ const color = gradientClasses[index2 % gradientClasses.length];
4466
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
4467
+ "button",
4468
+ {
4469
+ onClick: () => setActiveTab(index2),
4470
+ className: `group relative px-8 py-4 rounded-xl font-bold text-lg transition-all duration-300 transform hover:scale-105 overflow-hidden ${activeTab === index2 ? `bg-gradient-to-r ${color} text-white shadow-xl` : isDarkMode ? "bg-gray-800/50 text-gray-300 hover:shadow-xl shadow-lg border border-gray-700/50 backdrop-blur-sm" : "bg-white text-gray-700 hover:shadow-xl shadow-lg"}`,
4471
+ children: [
4472
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "relative z-10", children: item.title }),
4473
+ activeTab !== index2 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute inset-0 bg-gradient-to-r ${color} opacity-0 group-hover:opacity-100 transition-opacity duration-300` })
4474
+ ]
4475
+ },
4476
+ index2
4477
+ );
4478
+ }) })
4479
+ ] }),
4480
+ /* @__PURE__ */ jsxRuntimeExports.jsx("style", { jsx: true, children: `
4394
4481
  @keyframes blob {
4395
4482
  0%, 100% {
4396
4483
  transform: translate(0px, 0px) scale(1);
@@ -4427,7 +4514,9 @@ const PageHighlightSection = ({ data, t, isDarkMode, imageBaseUrl = "" }) => {
4427
4514
  background-size: 50px 50px;
4428
4515
  }
4429
4516
  ` })
4430
- ] });
4517
+ ]
4518
+ }
4519
+ );
4431
4520
  };
4432
4521
  const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl = "" }) => {
4433
4522
  var _a;
@@ -4452,23 +4541,9 @@ const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl
4452
4541
  maxWidth: "1400px",
4453
4542
  margin: "0 auto"
4454
4543
  }, children: [
4455
- sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
4456
- marginBottom: "50px",
4457
- textAlign: "center"
4458
- }, children: [
4459
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { style: {
4460
- fontSize: "36px",
4461
- fontWeight: "700",
4462
- marginBottom: "16px",
4463
- color: isDarkMode ? "#f9fafb" : "#4b5563"
4464
- }, children: sectionTitle }),
4465
- sectionDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: {
4466
- fontSize: "16px",
4467
- lineHeight: "1.6",
4468
- color: isDarkMode ? "#d1d5db" : "#6b7280",
4469
- maxWidth: "900px",
4470
- margin: "0 auto"
4471
- }, children: sectionDescription })
4544
+ sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12", children: [
4545
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-main mb-4", children: sectionTitle }),
4546
+ sectionDescription && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-body text-muted max-w-3xl mx-auto", children: sectionDescription })
4472
4547
  ] }),
4473
4548
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
4474
4549
  display: "grid",
@@ -4481,30 +4556,13 @@ const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl
4481
4556
  "a",
4482
4557
  {
4483
4558
  href: page.slug,
4559
+ className: "card",
4484
4560
  style: {
4485
- backgroundColor: isDarkMode ? "#1f2937" : "#ffffff",
4486
- borderRadius: "12px",
4487
- padding: "32px 20px",
4488
- cursor: "pointer",
4489
- transition: "all 0.3s",
4490
- border: `1px solid ${isDarkMode ? "#374151" : "#e5e7eb"}`,
4491
- boxShadow: isDarkMode ? "0 4px 6px -1px rgba(0, 0, 0, 0.3)" : "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
4492
- display: "flex",
4493
- flexDirection: "column",
4494
4561
  alignItems: "center",
4495
4562
  textAlign: "center",
4496
4563
  gap: "16px",
4497
- textDecoration: "none"
4498
- },
4499
- onMouseEnter: (e) => {
4500
- e.currentTarget.style.transform = "translateY(-8px)";
4501
- e.currentTarget.style.boxShadow = isDarkMode ? "0 20px 25px -5px rgba(0, 0, 0, 0.5)" : "0 20px 25px -5px rgba(0, 0, 0, 0.15)";
4502
- e.currentTarget.style.borderColor = "#361985ff";
4503
- },
4504
- onMouseLeave: (e) => {
4505
- e.currentTarget.style.transform = "translateY(0)";
4506
- e.currentTarget.style.boxShadow = isDarkMode ? "0 4px 6px -1px rgba(0, 0, 0, 0.3)" : "0 4px 6px -1px rgba(0, 0, 0, 0.1)";
4507
- e.currentTarget.style.borderColor = isDarkMode ? "#374151" : "#e5e7eb";
4564
+ textDecoration: "none",
4565
+ padding: "32px 20px"
4508
4566
  },
4509
4567
  children: [
4510
4568
  iconUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
@@ -4525,13 +4583,7 @@ const PageChildrenSelectSection = ({ data, isDarkMode, t, section, imageBaseUrl
4525
4583
  }
4526
4584
  }
4527
4585
  ) }),
4528
- /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { style: {
4529
- fontSize: "16px",
4530
- fontWeight: "600",
4531
- color: isDarkMode ? "#f9fafb" : "#4b5563",
4532
- margin: 0,
4533
- lineHeight: "1.4"
4534
- }, children: page.title })
4586
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-body", style: { margin: 0 }, children: page.title })
4535
4587
  ]
4536
4588
  },
4537
4589
  page.id
@@ -4595,44 +4647,25 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
4595
4647
  maxWidth: "1280px",
4596
4648
  margin: "0 auto"
4597
4649
  }, children: [
4598
- sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { style: {
4599
- fontSize: "28px",
4600
- fontWeight: "700",
4601
- marginBottom: "40px",
4602
- color: isDarkMode ? "#f9fafb" : "#1e40af",
4603
- textTransform: "uppercase",
4604
- letterSpacing: "0.5px"
4605
- }, children: sectionTitle }),
4650
+ sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title text-main mb-10 uppercase tracking-wide", children: sectionTitle }),
4606
4651
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
4607
4652
  display: "flex",
4608
4653
  flexDirection: "column",
4609
4654
  gap: "24px"
4610
4655
  }, children: visiblePages.map((page) => {
4611
- var _a2, _b;
4656
+ var _a2, _b, _c;
4612
4657
  const mainImage = ((_b = (_a2 = page.pageImages) == null ? void 0 : _a2.find((img) => img.isMain)) == null ? void 0 : _b.url) || page.icon;
4613
4658
  const imageUrl = getImageUrl(mainImage);
4614
4659
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
4615
4660
  "a",
4616
4661
  {
4617
4662
  href: page.slug,
4663
+ className: "card",
4618
4664
  style: {
4619
- display: "flex",
4665
+ flexDirection: "row",
4620
4666
  gap: "20px",
4621
- backgroundColor: isDarkMode ? "#1f2937" : "#ffffff",
4622
- borderRadius: "8px",
4623
- overflow: "hidden",
4624
- cursor: "pointer",
4625
- transition: "all 0.2s",
4626
- border: `1px solid ${isDarkMode ? "#374151" : "#e5e7eb"}`,
4627
- padding: "16px",
4628
4667
  textDecoration: "none"
4629
4668
  },
4630
- onMouseEnter: (e) => {
4631
- e.currentTarget.style.backgroundColor = isDarkMode ? "#374151" : "#f9fafb";
4632
- },
4633
- onMouseLeave: (e) => {
4634
- e.currentTarget.style.backgroundColor = isDarkMode ? "#1f2937" : "#ffffff";
4635
- },
4636
4669
  children: [
4637
4670
  imageUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
4638
4671
  width: "200px",
@@ -4652,33 +4685,10 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
4652
4685
  }
4653
4686
  }
4654
4687
  ) }),
4655
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
4656
- flex: 1,
4657
- display: "flex",
4658
- flexDirection: "column",
4659
- justifyContent: "center"
4660
- }, children: [
4661
- page.tagKeys && page.tagKeys.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
4662
- fontSize: "12px",
4663
- fontWeight: "600",
4664
- color: isDarkMode ? "#60a5fa" : "#2563eb",
4665
- marginBottom: "8px",
4666
- textTransform: "uppercase",
4667
- letterSpacing: "0.5px"
4668
- }, children: page.tagKeys[0].key }),
4669
- /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { style: {
4670
- fontSize: "18px",
4671
- fontWeight: "700",
4672
- marginBottom: "8px",
4673
- color: isDarkMode ? "#f9fafb" : "#1f2937",
4674
- lineHeight: "1.4"
4675
- }, children: page.title }),
4676
- page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: {
4677
- fontSize: "14px",
4678
- lineHeight: "1.6",
4679
- color: isDarkMode ? "#d1d5db" : "#6b7280",
4680
- margin: 0
4681
- }, children: page.description })
4688
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col justify-center flex-1", children: [
4689
+ ((_c = page.tagKeys) == null ? void 0 : _c.length) > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "card-link ", children: page.tagKeys[0].key }),
4690
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title mb-2 leading-snug", children: page.title }),
4691
+ page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text m-0", children: page.description })
4682
4692
  ] }),
4683
4693
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
4684
4694
  display: "flex",
@@ -4688,10 +4698,7 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
4688
4698
  ChevronRight,
4689
4699
  {
4690
4700
  size: 20,
4691
- style: {
4692
- color: isDarkMode ? "#9ca3af" : "#d1d5db",
4693
- transition: "color 0.2s"
4694
- }
4701
+ className: "card-text"
4695
4702
  }
4696
4703
  ) })
4697
4704
  ]
@@ -4703,6 +4710,7 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
4703
4710
  "button",
4704
4711
  {
4705
4712
  onClick: handleLoadMore,
4713
+ className: "btn-primary",
4706
4714
  style: {
4707
4715
  display: "inline-flex",
4708
4716
  alignItems: "center",
@@ -4711,20 +4719,9 @@ const PageChildrenSelectSection1 = ({ data, isDarkMode, t, section, imageBaseUrl
4711
4719
  fontSize: "16px",
4712
4720
  fontWeight: "600",
4713
4721
  color: "#fff",
4714
- backgroundColor: "#361985ff",
4715
4722
  border: "none",
4716
4723
  borderRadius: "9999px",
4717
- cursor: "pointer",
4718
- transition: "all 0.3s",
4719
- boxShadow: "0 4px 6px -1px rgba(37, 99, 235, 0.3)"
4720
- },
4721
- onMouseEnter: (e) => {
4722
- e.currentTarget.style.backgroundColor = "#361985ff";
4723
- e.currentTarget.style.transform = "translateY(-2px)";
4724
- },
4725
- onMouseLeave: (e) => {
4726
- e.currentTarget.style.backgroundColor = "#361985ff";
4727
- e.currentTarget.style.transform = "translateY(0)";
4724
+ cursor: "pointer"
4728
4725
  },
4729
4726
  children: [
4730
4727
  t("pageChildrenSelect.moreInsights"),
@@ -4756,12 +4753,7 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
4756
4753
  maxWidth: "1400px",
4757
4754
  margin: "0 auto"
4758
4755
  }, children: [
4759
- sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { style: {
4760
- fontSize: "36px",
4761
- fontWeight: "700",
4762
- marginBottom: "50px",
4763
- color: isDarkMode ? "#f1f5f9" : "#1e293b"
4764
- }, children: sectionTitle }),
4756
+ sectionTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-title mb-12 text-main", children: sectionTitle }),
4765
4757
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
4766
4758
  display: "grid",
4767
4759
  gridTemplateColumns: "repeat(auto-fit, minmax(350px, 1fr))",
@@ -4775,24 +4767,12 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
4775
4767
  "a",
4776
4768
  {
4777
4769
  href: page.slug,
4770
+ className: "card",
4778
4771
  style: {
4779
- backgroundColor: isDarkMode ? "#1e293b" : "#ffffff",
4780
- borderRadius: "16px",
4781
- overflow: "hidden",
4782
- cursor: "pointer",
4783
- transition: "all 0.3s",
4784
- boxShadow: isDarkMode ? "0 4px 6px -1px rgba(0, 0, 0, 0.5)" : "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
4785
- border: `1px solid ${isDarkMode ? "#334155" : "#e2e8f0"}`,
4786
4772
  textDecoration: "none",
4787
- display: "block"
4788
- },
4789
- onMouseEnter: (e) => {
4790
- e.currentTarget.style.transform = "translateY(-8px)";
4791
- e.currentTarget.style.boxShadow = isDarkMode ? "0 20px 25px -5px rgba(0, 0, 0, 0.6)" : "0 20px 25px -5px rgba(0, 0, 0, 0.15)";
4792
- },
4793
- onMouseLeave: (e) => {
4794
- e.currentTarget.style.transform = "translateY(0)";
4795
- e.currentTarget.style.boxShadow = isDarkMode ? "0 4px 6px -1px rgba(0, 0, 0, 0.5)" : "0 4px 6px -1px rgba(0, 0, 0, 0.1)";
4773
+ display: "block",
4774
+ padding: "0",
4775
+ overflow: "hidden"
4796
4776
  },
4797
4777
  children: [
4798
4778
  imageUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
@@ -4819,26 +4799,13 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
4819
4799
  }
4820
4800
  }
4821
4801
  ) }),
4822
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: {
4823
- padding: "24px"
4824
- }, children: [
4825
- /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { style: {
4826
- fontSize: "20px",
4827
- fontWeight: "700",
4828
- marginBottom: "12px",
4829
- color: isDarkMode ? "#f1f5f9" : "#1e293b",
4830
- lineHeight: "1.4",
4831
- minHeight: "56px"
4802
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { padding: "1.5rem" }, children: [
4803
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "card-title text-subtitle", style: {
4804
+ minHeight: "56px",
4805
+ marginBottom: "0.75rem"
4832
4806
  }, children: page.title }),
4833
- page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { style: {
4834
- fontSize: "14px",
4835
- lineHeight: "1.6",
4836
- color: isDarkMode ? "#cbd5e1" : "#64748b",
4837
- marginBottom: "16px",
4838
- display: "-webkit-box",
4839
- WebkitLineClamp: 2,
4840
- WebkitBoxOrient: "vertical",
4841
- overflow: "hidden"
4807
+ page.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "card-text line-clamp-2", style: {
4808
+ marginBottom: "1rem"
4842
4809
  }, children: page.description })
4843
4810
  ] })
4844
4811
  ]
@@ -4853,6 +4820,7 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
4853
4820
  "button",
4854
4821
  {
4855
4822
  onClick: handleLoadMore,
4823
+ className: "btn-primary",
4856
4824
  style: {
4857
4825
  display: "inline-flex",
4858
4826
  alignItems: "center",
@@ -4861,22 +4829,9 @@ const PageChildrenSelectSection2 = ({ data, isDarkMode, t, section, imageBaseUrl
4861
4829
  fontSize: "16px",
4862
4830
  fontWeight: "600",
4863
4831
  color: "#ffffff",
4864
- backgroundColor: "#361985ff",
4865
4832
  border: "none",
4866
4833
  borderRadius: "50px",
4867
- cursor: "pointer",
4868
- transition: "all 0.3s",
4869
- boxShadow: "0 4px 6px -1px rgba(239, 68, 68, 0.3)"
4870
- },
4871
- onMouseEnter: (e) => {
4872
- e.currentTarget.style.backgroundColor = "#361985ff";
4873
- e.currentTarget.style.transform = "translateY(-2px)";
4874
- e.currentTarget.style.boxShadow = "0 10px 15px -3px rgba(239, 68, 68, 0.4)";
4875
- },
4876
- onMouseLeave: (e) => {
4877
- e.currentTarget.style.backgroundColor = "#361985ff";
4878
- e.currentTarget.style.transform = "translateY(0)";
4879
- e.currentTarget.style.boxShadow = "0 4px 6px -1px rgba(239, 68, 68, 0.3)";
4834
+ cursor: "pointer"
4880
4835
  },
4881
4836
  children: [
4882
4837
  t("pageChildrenSelect.moreInsights"),