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