Footer.tsx 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import React from 'react';
  2. import { CONTENT, PHONE_NUMBER } from '../constants.ts';
  3. import { Instagram, Facebook, Twitter, Youtube } from 'lucide-react';
  4. import VistaLogo from './VistaLogo.tsx';
  5. import { useLanguage } from '../contexts/LanguageContext.tsx';
  6. import { useTheme } from '../contexts/ThemeContext.tsx';
  7. const Footer: React.FC = () => {
  8. const { language } = useLanguage();
  9. const { customFooterLogo } = useTheme();
  10. const t = CONTENT[language];
  11. return (
  12. <footer className="bg-white text-vista-darkblue pt-16 pb-12 border-t border-vista-darkblue/5">
  13. <div className="max-w-7xl mx-auto px-6">
  14. {/* Top Section: Flex Layout for tighter control over spacing */}
  15. <div className="flex flex-col lg:flex-row flex-wrap justify-center items-start gap-10 lg:gap-16 mb-12">
  16. {/* Logo Column */}
  17. <div className="w-full lg:w-auto flex flex-col items-center lg:items-start text-center lg:text-left">
  18. <div className="mb-6">
  19. <VistaLogo color="#0a1f35" src={customFooterLogo} />
  20. </div>
  21. {/* Description with whitespace-nowrap to prevent wrapping as requested */}
  22. <p className="text-vista-darkblue/80 text-sm leading-relaxed mb-6 font-medium whitespace-nowrap">
  23. {t.footer.desc}
  24. </p>
  25. <div className="flex space-x-4 justify-center lg:justify-start">
  26. <Instagram size={20} className="text-vista-darkblue/80 hover:text-vista-gold cursor-pointer transition-colors" />
  27. <Facebook size={20} className="text-vista-darkblue/80 hover:text-vista-gold cursor-pointer transition-colors" />
  28. <Twitter size={20} className="text-vista-darkblue/80 hover:text-vista-gold cursor-pointer transition-colors" />
  29. <Youtube size={20} className="text-vista-darkblue/80 hover:text-vista-gold cursor-pointer transition-colors" />
  30. </div>
  31. </div>
  32. {/* Menu Columns - Flex items */}
  33. {t.nav.menu.slice(1, 5).map((item) => (
  34. <div key={item.title} className="w-1/2 md:w-auto flex flex-col items-center min-w-[100px]">
  35. <h4 className="font-serif text-lg font-bold mb-4 border-b border-vista-darkblue/10 pb-2 inline-block text-center whitespace-nowrap">{item.title}</h4>
  36. <ul className="space-y-2 text-center">
  37. {item.submenu?.map((sub) => (
  38. <li key={sub.title}>
  39. <a href={sub.link} className="text-sm text-vista-darkblue/80 hover:text-vista-gold transition-colors font-medium whitespace-nowrap">
  40. {sub.title}
  41. </a>
  42. </li>
  43. ))}
  44. </ul>
  45. </div>
  46. ))}
  47. </div>
  48. {/* Contact Strip */}
  49. <div className="border-t border-vista-darkblue/10 pt-8 flex flex-col md:flex-row justify-between items-center">
  50. <div className="mb-6 md:mb-0 text-center md:text-left">
  51. <p className="text-xs tracking-widest text-vista-darkblue/70 uppercase mb-2 font-bold">{t.footer.hotline}</p>
  52. <a href={`tel:${PHONE_NUMBER}`} className="text-3xl md:text-4xl font-serif font-bold text-vista-darkblue hover:text-vista-gold transition-colors">
  53. {PHONE_NUMBER}
  54. </a>
  55. </div>
  56. <div className="flex flex-col md:flex-row space-y-4 md:space-y-0 md:space-x-8 text-xs text-vista-darkblue/60 font-medium items-center">
  57. <a href="#" className="hover:text-vista-darkblue transition-colors">{t.footer.privacy}</a>
  58. <a href="#" className="hover:text-vista-darkblue transition-colors">{t.footer.terms}</a>
  59. <a href="#" className="hover:text-vista-darkblue transition-colors">{t.footer.cookies}</a>
  60. <span>© {new Date().getFullYear()} {t.footer.rights}</span>
  61. </div>
  62. </div>
  63. </div>
  64. </footer>
  65. );
  66. };
  67. export default Footer;