Files
demo-ayristech/components/templates/BarTemplate2/index.tsx
T
2026-06-06 00:43:39 +03:00

874 lines
41 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use client";
import { motion, AnimatePresence } from "framer-motion";
import { useRef, useState, useEffect } from "react";
import type { DemoData } from "@/data/demos";
const fadeUp = {
hidden: { opacity: 0, y: 40 },
show: { opacity: 1, y: 0, transition: { duration: 0.7, ease: [0.25, 0.46, 0.45, 0.94] as [number, number, number, number] } },
};
const stagger = {
hidden: {},
show: { transition: { staggerChildren: 0.1 } },
};
interface DrinkSpec {
name: string;
desc: string;
capacity: string;
alcohol: string;
relax: string;
color: string;
}
const translations = {
tr: {
navSpecials: "İmza Serisi",
navReserve: "Etkinlik Planla",
navFlights: "Tadım Serileri",
navReviews: "Gurme Yorumları",
scheduleCall: "Görüşme Planla",
ultimateExp: "EŞSİZ KOKTEYL DENEYİMİ",
dedicationTitle: "PROFESYONEL MİKSOLOJİ VE",
dedicationTail: "EL YAPIMI BAĞLILIK",
heroDesc: "Zanaatkar viski tadım uçuşları, kişisel miksoloji eğitimleri ve kurumsal atölye buluşmalarına dahil olun. Ham meşe ağacı ve oyma taş tezgahlar üzerinde hazırlanır.",
scheduleCallBtn: "GÖRÜŞME AYARLA",
artisanalSelections: "SANATSAL SEÇENEKLER",
signatureLiquors: "İmza İksirler",
chooseDrink: "FAVORİ İÇKİNİZİ SEÇİN",
sliderDesc: "Ustalıkla hazırlanan reçetelerimizi inceleyin. Aktif hacim, alkol derecesi ve gevşeme oranlarını görüntüleyin.",
capacity: "HACİM",
alcohol: "ALKOL",
relax: "GEVŞEME",
barrelhouseEvents: "Fıçı Evi Etkinlikleri",
featuredServices: "SEÇKİN HİZMETLER",
learnMore: "DAHA FAZLA KEŞFET →",
masterclassBooking: "Rezervasyon",
scheduleEvent: "BİR ETKİNLİK PLANLAYIN",
formDesc: "Viski tadım serileri veya miksoloji dersleri organize etmek için sommelier koordinatörümüzle iletişime geçin.",
fieldsName: "İsim Soyisim",
fieldsEmail: "E-Posta Adresi",
fieldsPhone: "İrtibat Numarası",
fieldsEvent: "Etkinlik Kategorisi",
fieldsNotes: "Özel İstekler",
fieldsNotesPlaceholder: "Aroma tercihleri veya VIP mihmandar gereksinimleri...",
dispatchRequest: "ETKİNLİK TALEBİNİ GÖNDER",
sommelierReviews: "Gurme Yorumları",
happyGuests: "MİSAFİR DENEYİMLERİ",
happyGuestsDesc: "Yıllanmış tek malt ve fıçı serisi tadım etkinliklerimiz hakkında ne yazdıklarını keşfedin.",
artisanalDials: "SANATSAL SERİ",
vipServices: "VIP HİZMETLER",
privacyRegs: "Gizlilik Sözleşmesi",
termsStay: "Fıçı Koşulları",
dismiss: "KAPAT",
enquiryActive: "TALEBİNİZ GÖNDERİLDİ",
ambassadorActive: "Mihmandar Sommelier Aktif",
enquirySuccess: "Özel fıçı evi tadım/etkinlik talebinizi başarıyla kaydettik. Sertifikalı mihmandarımız tadım parametrelerinizi kesinleştirmek için sizinle iletişime geçecektir. Teşekkürler!",
},
en: {
navSpecials: "Specials",
navReserve: "Book experience",
navFlights: "Sommelier flights",
navReviews: "Sommelier reviews",
scheduleCall: "Schedule call",
ultimateExp: "THE ULTIMATE COCKTAIL EXPERIENCE",
dedicationTitle: "DEDICATION TO",
dedicationTail: "PROFESSIONAL CRAFT & SPIRIT",
heroDesc: "Indulge in artisanal whiskey flights, custom mixology, and corporate masterclass gatherings. Staged on heavy raw oak and carved stones.",
scheduleCallBtn: "SCHEDULE A CALL",
artisanalSelections: "ARTISANAL SELECTIONS",
signatureLiquors: "Signature Liquors",
chooseDrink: "CHOOSE FAVORITE DRINK",
sliderDesc: "Cycle through our mastercraft recipes. Toggle active stats, proof, and relax levels.",
capacity: "CAPACITY",
alcohol: "ALCOHOL",
relax: "RELAX",
barrelhouseEvents: "Barrelhouse Events",
featuredServices: "FEATURED SERVICES",
learnMore: "LEARN MORE →",
masterclassBooking: "Masterclass booking",
scheduleEvent: "SCHEDULE AN EVENT",
formDesc: "Connect with our sommelier coordinator to arrange whiskey flights or mixology classes.",
fieldsName: "Name",
fieldsEmail: "Email",
fieldsPhone: "Phone",
fieldsEvent: "Event Type",
fieldsNotes: "Special notes",
fieldsNotesPlaceholder: "Flavor preferences or VIP requirements...",
dispatchRequest: "DISPATCH EVENT REQUEST",
sommelierReviews: "Sommelier Reviews",
happyGuests: "HAPPY GUESTS",
happyGuestsDesc: "Hear what craft enthusiasts write about our private aged single malt coordinates.",
artisanalDials: "ARTISANAL DIALS",
vipServices: "VIP SERVICES",
privacyRegs: "Privacy Regulations",
termsStay: "Terms of Cask",
dismiss: "DISMISS",
enquiryActive: "EVENT DISPATCHED",
ambassadorActive: "Barrelhouse Sommelier Active",
enquirySuccess: "We have registered your private barrelhouse coordinate request. A certified somatic host will contact you shortly to confirm whiskey flights or mixology parameters. Thank you!",
}
};
export default function BarTemplate2({ data }: { data: DemoData }) {
const { firma, istatistikler = [], hizmetler = [], yorumlar = [] } = data;
const [showBookingModal, setShowBookingModal] = useState(false);
const [activeDrink, setActiveDrink] = useState<number>(1); // Mai Tai active by default
const [menuOpen, setMenuOpen] = useState(false);
const [lang, setLang] = useState<"tr" | "en">("tr");
const [preloader, setPreloader] = useState(true);
const t = translations[lang];
// 1. Lenis Smooth Scroll Integration
useEffect(() => {
let lenis: any;
import("@studio-freight/lenis").then(({ default: Lenis }) => {
lenis = new Lenis({ duration: 1.2, easing: (t: number) => Math.min(1, 1.001 - Math.pow(2, -10 * t)) });
function raf(time: number) { lenis.raf(time); requestAnimationFrame(raf); }
requestAnimationFrame(raf);
});
return () => lenis?.destroy();
}, []);
// 2. Preloader Curtain Timer
useEffect(() => {
const timer = setTimeout(() => {
setPreloader(false);
}, 1500);
return () => clearTimeout(timer);
}, []);
const getLocalizedDrinks = () => {
return [
{
name: lang === "tr" ? "Mojito" : "Mojito",
desc: lang === "tr" ? "Taze beyaz Küba romu, el ezmesi nane yaprakları, organik misket limonu suyu, ham kamış şekeri ve soğuk maden suyu." : "Fresh white cuban rum, hand-crushed spearmint, organic lime juice reduction, raw cane sugar, chilled splash of soda.",
capacity: "350ml",
alcohol: "12%",
relax: "80%",
color: "#00E5FF"
},
{
name: lang === "tr" ? "Mai Tai" : "Mai Tai",
desc: lang === "tr" ? "Premium Jamaika kehribar romu, üç kez damıtılmış portakal likörü, organik badem şurubu ve taze sıkılmış misket limonu." : "Premium Jamaican amber rum, triple-distilled orange curaçao, organic almond orgeat syrup, fresh lime squeeze.",
capacity: "280ml",
alcohol: "18%",
relax: "90%",
color: "#FF9F00"
},
{
name: lang === "tr" ? "Rum Cosmo" : "Rum Cosmo",
desc: lang === "tr" ? "Fıçıda yıllanmış koyu rom, dağ kızılcığı infüzyonu, organik portakal likörü ve portakal yağı buğusu." : "Cask-aged dark rum, wild mountain cranberry infusion, organic triple sec, orange oil mist garnish.",
capacity: "200ml",
alcohol: "22%",
relax: "95%",
color: "#FF007A"
}
];
};
const getLocalizedService = (baslik: string, aciklama: string) => {
if (baslik.toLowerCase().includes("whiskey") || baslik.toLowerCase().includes("flight") || baslik.toLowerCase().includes("tadim")) {
return {
title: lang === "tr" ? "VİSKİ TADIM UÇUŞLARI" : "WHISKEY FLIGHTS",
desc: lang === "tr" ? "Dünyanın en seçkin fıçılarından gelen yıllanmış tek malt ve burbon viski serilerinin özel sunumu." : aciklama
};
}
if (baslik.toLowerCase().includes("mixology") || baslik.toLowerCase().includes("class") || baslik.toLowerCase().includes("ders")) {
return {
title: lang === "tr" ? "MİKSOLOJİ EĞİTİMLERİ" : "MIXOLOGY CLASSES",
desc: lang === "tr" ? "Profesyonel barmenlerimiz eşliğinde kendi taze şuruplarınızı ve kokteyllerinizi yapmayı öğrenin." : aciklama
};
}
return {
title: lang === "tr" ? "ÖZEL KOKTEYL HİZMETİ" : "PRIVATE COCKTAIL CATERING",
desc: lang === "tr" ? "Kurumsal lansmanlar, VIP davetler ve butik etkinlikler için özel miksoloji menüsü ve servis ekibi." : aciklama
};
};
const drinks = getLocalizedDrinks();
// Custom visual styles & Google Fonts for our Rustic Chalk & Char aesthetic
const css = `
@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,600;0,700;1,400&family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
:root {
--color-char-red: #E63946;
--color-char-slate: #111215;
--color-char-card: #18191E;
--color-text-white: #FCFAF7;
--color-text-muted: rgba(252, 252, 247, 0.5);
}
.font-industrial {
font-family: 'Cormorant Garamond', Georgia, serif;
font-weight: 700;
}
.font-sans-clean {
font-family: 'Space Grotesk', sans-serif;
}
.bg-mesh-char {
background-image:
radial-gradient(circle at 10% 20%, rgba(230, 57, 70, 0.04) 0%, transparent 45%),
radial-gradient(circle at 90% 80%, rgba(229, 169, 0, 0.03) 0%, transparent 50%),
linear-gradient(rgba(255, 255, 255, 0.005) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.005) 1px, transparent 1px);
background-size: 100% 100%, 100% 100%, 40px 40px, 40px 40px;
}
.crimson-glow {
box-shadow: 0 0 20px rgba(230, 57, 70, 0.25);
}
/* Pulse animation for CTA strip */
.pulse-glow-crimson {
animation: crimsonPulse 2s infinite;
}
@keyframes crimsonPulse {
0% { box-shadow: 0 0 0 0 rgba(230, 57, 70, 0.4); }
70% { box-shadow: 0 0 0 12px rgba(230, 57, 70, 0); }
100% { box-shadow: 0 0 0 0 rgba(230, 57, 70, 0); }
}
.hero-title-clamp {
font-size: clamp(42px, 7.5vw, 100px);
letter-spacing: -0.02em;
line-height: 0.95;
}
`;
return (
<>
<style>{css}</style>
{/* ── IMZA AN: CURTAIN REVEAL PRELOADER ── */}
<AnimatePresence>
{preloader && (
<motion.div
className="fixed inset-0 z-50 bg-[#111215] flex flex-col items-center justify-center p-6"
exit={{
clipPath: "polygon(0 0, 100% 0, 100% 0, 0 0)",
transition: { duration: 0.85, ease: [0.16, 1, 0.3, 1] }
}}
>
<div className="max-w-md text-center space-y-6">
<motion.span
className="text-[9px] font-black tracking-[4px] uppercase text-[#E63946] block font-sans-clean"
initial={{ opacity: 0, y: 10 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.5 }}
>
CHAR BARRELHOUSE
</motion.span>
<div className="h-[1px] w-48 bg-white/10 mx-auto relative overflow-hidden">
<motion.div
className="absolute inset-y-0 left-0 bg-[#E63946]"
initial={{ width: "0%" }}
animate={{ width: "100%" }}
transition={{ duration: 1.2, ease: "easeInOut" }}
/>
</div>
<motion.h2
className="font-industrial text-white text-lg font-light tracking-wider"
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ delay: 0.4, duration: 0.5 }}
>
barrel aged mixology
</motion.h2>
</div>
</motion.div>
)}
</AnimatePresence>
{/* ── CHALK & CHAR BARRELHOUSE ── */}
<div className="bg-[#111215] text-[#FCFAF7] min-h-screen font-sans-clean selection:bg-[#E63946] selection:text-white overflow-hidden relative bg-mesh-char pb-20">
{/* Floating Ambient Red Orbs */}
<div className="absolute top-[15%] left-[-15%] w-[600px] h-[600px] bg-[#E63946]/4 blur-[130px] rounded-full pointer-events-none z-0" />
<div className="absolute bottom-[15%] right-[-15%] w-[600px] h-[600px] bg-[#E5A900]/2 blur-[140px] rounded-full pointer-events-none z-0" />
{/* ── MANDATORY FLOATING DEMO BANNER ── */}
<div className="fixed bottom-4 left-4 z-40 bg-[#18191E]/95 backdrop-blur-md border border-white/5 px-4 py-2.5 rounded-xl shadow-2xl flex items-center gap-2.5 max-w-sm pointer-events-none select-none">
<div className="w-1.5 h-1.5 rounded-full bg-[#E63946] animate-pulse" />
<span className="text-[9px] font-black uppercase tracking-[1.5px] text-white/90">
{lang === "tr" ? "Bu web sitesi Ayris Tech tarafından hazırlanmış bir konsept çalışmasıdır." : "This website is a premium concept prototype designed by Ayris Tech."}
</span>
</div>
{/* ── HIGH CONTRAST NAVBAR ── */}
<motion.header
className="fixed top-4 left-4 right-4 z-50 px-4"
initial={{ y: -80, opacity: 0 }}
animate={{ y: 0, opacity: 1 }}
transition={{ duration: 0.7, ease: "easeOut" }}
>
<div className="mx-auto max-w-7xl h-20 flex items-center justify-between px-8 bg-[#18191E]/95 backdrop-blur-xl border border-white/5 rounded-2xl shadow-[0_15px_30px_rgba(0,0,0,0.5)]">
{/* Logo */}
<a href="#" className="flex items-center gap-2 group">
<span className="text-xl font-bold tracking-[1.5px] text-white font-industrial flex items-center gap-2.5 uppercase">
<svg className="w-5 h-5 text-[#E63946]" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M5 3l1.5 15.5a2 2 0 0 0 2 1.5h7a2 2 0 0 0 2-1.5L19 3H5Z" />
<path d="M6 10h12" />
</svg>
{firma.adi}
</span>
</a>
{/* Navigation Links */}
<nav className="hidden lg:flex items-center gap-8">
{[
{ label: t.navSpecials, href: "#drink-selector" },
{ label: t.navReserve, href: "#booking-flow" },
{ label: t.navFlights, href: "#experiences" },
{ label: t.navReviews, href: "#testimonials" }
].map(item => (
<a
key={item.label}
href={item.href}
className="text-[10px] font-bold tracking-[2px] uppercase text-[#FCFAF7]/70 hover:text-[#E63946] transition-colors relative py-1 cursor-pointer group"
>
{item.label}
<span className="absolute bottom-0 left-0 w-0 h-0.5 bg-[#E63946] transition-all group-hover:w-full" />
</a>
))}
</nav>
{/* Action button */}
<div className="flex items-center gap-4">
{/* Language Switcher */}
<div className="flex items-center gap-1 bg-white/5 border border-white/10 rounded-xl p-1 shrink-0">
<button
onClick={() => setLang("tr")}
className={`text-[9px] font-black px-2 py-1.5 rounded-lg transition-all cursor-pointer ${
lang === "tr" ? "bg-[#E63946] text-white shadow-sm" : "text-white/60 hover:text-white"
}`}
>
TR
</button>
<button
onClick={() => setLang("en")}
className={`text-[9px] font-black px-2 py-1.5 rounded-lg transition-all cursor-pointer ${
lang === "en" ? "bg-[#E63946] text-white shadow-sm" : "text-white/60 hover:text-white"
}`}
>
EN
</button>
</div>
<motion.button
onClick={() => setShowBookingModal(true)}
className="text-[10px] font-bold tracking-[2.5px] uppercase text-white bg-[#E63946] hover:bg-white hover:text-black px-6 py-3.5 rounded-xl transition-all cursor-pointer shadow-[0_5px_15px_rgba(230,57,70,0.2)] hidden sm:block"
whileHover={{ scale: 1.02 }}
whileTap={{ scale: 0.98 }}
>
{t.scheduleCall}
</motion.button>
</div>
</div>
</motion.header>
{/* ── HERO SECTION ── */}
<section className="relative min-h-screen pt-32 pb-20 flex items-center z-10 px-6">
<div className="max-w-7xl mx-auto w-full">
<div className="grid lg:grid-cols-12 gap-12 items-center">
{/* Left Column: Heading and description */}
<motion.div
className="lg:col-span-7 z-20"
variants={stagger}
initial="hidden"
animate="show"
>
<motion.div
variants={fadeUp}
className="inline-flex items-center gap-2 text-[10px] font-bold uppercase tracking-widest text-[#E63946] mb-6 bg-[#E63946]/10 border border-[#E63946]/20 px-4 py-2 rounded-full"
>
<span className="w-1.5 h-1.5 rounded-full bg-[#E63946]" />
{t.ultimateExp}
</motion.div>
<motion.h1
variants={fadeUp}
className="font-industrial text-white leading-[0.95] tracking-tight mb-6 uppercase hero-title-clamp"
>
{t.dedicationTitle}
<br />
<span className="text-[#E63946]">{t.dedicationTail}</span>
</motion.h1>
<motion.p
variants={fadeUp}
className="text-white/60 text-xs lg:text-sm leading-relaxed max-w-xl mb-10 font-medium"
>
{t.heroDesc}
</motion.p>
{/* Quick actions */}
<motion.div variants={fadeUp} className="flex gap-4">
<motion.button
onClick={() => setShowBookingModal(true)}
className="px-8 py-4 rounded-xl bg-[#E63946] hover:bg-white hover:text-black text-white font-bold text-[10px] tracking-[2px] uppercase transition-all shadow-[0_5px_15px_rgba(230,57,70,0.25)] cursor-pointer"
whileHover={{ scale: 1.02 }}
>
{t.scheduleCallBtn}
</motion.button>
<a
href="#drink-selector"
className="px-8 py-4 rounded-xl border border-white/10 bg-white/5 hover:bg-white/10 text-white font-bold text-[10px] tracking-[2px] uppercase transition-all cursor-pointer text-center"
>
{t.artisanalSelections}
</a>
</motion.div>
</motion.div>
{/* Right Column: High-fidelity image (steak/drink counter) */}
<div className="lg:col-span-5 relative flex justify-center lg:justify-end">
<motion.div
className="relative w-full max-w-md lg:max-w-lg h-[400px] lg:h-[480px] rounded-3xl overflow-hidden shadow-2xl border border-white/5 group"
initial={{ opacity: 0, scale: 0.95 }}
animate={{ opacity: 1, scale: 1 }}
transition={{ duration: 0.8, ease: "easeOut" }}
>
{/* Using 8k Chef Plating Smoke image to represent premium cask smoking counter */}
{/* eslint-disable-next-line @next/next/no-img-element */}
<img
src="/chef_plating_smoke.png"
alt="Char Barrelhouse Cask-Aged Spirits Smoking Counter"
className="w-full h-full object-cover scale-102 group-hover:scale-105 transition-transform duration-[4000ms]"
/>
<div className="absolute inset-0 bg-gradient-to-t from-black via-transparent to-transparent opacity-50" />
</motion.div>
</div>
</div>
</div>
</section>
{/* ── ARTISANAL CAROUSEL SLIDER ── */}
<section id="drink-selector" className="py-28 relative z-10 px-6 bg-[#18191E]/60 border-t border-white/5">
<div className="max-w-7xl mx-auto">
<div className="text-center max-w-xl mx-auto mb-20">
<span className="text-[#E63946] font-bold text-xs uppercase tracking-widest block mb-2 font-industrial">{t.signatureLiquors}</span>
<h2 className="font-industrial text-3xl lg:text-4xl font-black uppercase text-white">
{t.chooseDrink}
</h2>
<p className="text-white/40 text-xs mt-2 font-medium">
{t.sliderDesc}
</p>
</div>
{/* Slider container */}
<div className="grid lg:grid-cols-12 gap-12 items-center">
{/* Left Column: Drink Tabs & Specifications */}
<div className="lg:col-span-7 space-y-8">
{/* Tabs */}
<div className="flex gap-3 flex-wrap">
{drinks.map((d, dIdx) => (
<button
key={d.name}
onClick={() => setActiveDrink(dIdx)}
className={`px-6 py-3.5 rounded-xl border text-xs font-bold uppercase tracking-widest transition-all cursor-pointer ${
activeDrink === dIdx
? "bg-[#E63946] text-white border-[#E63946] shadow-[0_4px_12px_rgba(230,57,70,0.2)]"
: "bg-white/[0.02] text-white/60 border-white/5 hover:border-white/10"
}`}
>
{d.name}
</button>
))}
</div>
{/* Active Drink Info */}
<AnimatePresence mode="wait">
<motion.div
key={activeDrink}
initial={{ opacity: 0, y: 15 }}
animate={{ opacity: 1, y: 0 }}
exit={{ opacity: 0, y: -15 }}
transition={{ duration: 0.3 }}
className="space-y-6"
>
<h3 className="font-industrial text-4xl font-black text-white uppercase tracking-wider">
{drinks[activeDrink].name}
</h3>
<p className="text-white/60 text-xs lg:text-sm leading-relaxed max-w-xl font-medium">
{drinks[activeDrink].desc}
</p>
{/* Circular Dials Indicators */}
<div className="grid grid-cols-3 gap-4 pt-6 max-w-md">
{/* Dial 1: Capacity */}
<div className="bg-white/[0.02] border border-white/5 p-4 rounded-xl flex flex-col items-center text-center">
<span className="text-[#FCFAF7] font-industrial text-xl font-bold">{drinks[activeDrink].capacity}</span>
<span className="text-white/30 text-[9px] uppercase tracking-widest font-bold mt-1">{t.capacity}</span>
</div>
{/* Dial 2: Alcohol */}
<div className="bg-white/[0.02] border border-white/5 p-4 rounded-xl flex flex-col items-center text-center">
<span className="text-[#E63946] font-industrial text-xl font-bold">{drinks[activeDrink].alcohol}</span>
<span className="text-white/30 text-[9px] uppercase tracking-widest font-bold mt-1">{t.alcohol}</span>
</div>
{/* Dial 3: Relax */}
<div className="bg-white/[0.02] border border-white/5 p-4 rounded-xl flex flex-col items-center text-center">
<span className="text-[#E5A900] font-industrial text-xl font-bold">{drinks[activeDrink].relax}</span>
<span className="text-white/30 text-[9px] uppercase tracking-widest font-bold mt-1">{t.relax}</span>
</div>
</div>
</motion.div>
</AnimatePresence>
</div>
{/* Right Column: Large closeup beverage display */}
<div className="lg:col-span-5 relative flex justify-center lg:justify-end">
<motion.div
className="relative w-full max-w-xs h-[420px] rounded-3xl overflow-hidden shadow-2xl border border-white/5 group"
initial={{ opacity: 0, x: 40 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.7 }}
>
{/* Using 8k lemon/citrus flatlay to represent fresh botanical drink prep */}
{/* eslint-disable-next-line @next/next/no-img-element */}
<img
src="/sicilia_lemon_heritage.png"
alt="Fresh citrus botanic preparation"
className="w-full h-full object-cover scale-102 group-hover:scale-105 transition-transform duration-[4000ms]"
/>
<div className="absolute inset-0 bg-gradient-to-t from-black via-transparent to-transparent opacity-40" />
</motion.div>
</div>
</div>
</div>
</section>
{/* ── FEATURED EXPERIENCES ── */}
<section id="experiences" className="py-28 relative z-10 px-6 bg-[#111215]">
<div className="max-w-7xl mx-auto">
<div className="text-center max-w-xl mx-auto mb-20">
<span className="text-[#E63946] font-bold text-xs uppercase tracking-widest block mb-2 font-industrial">{t.barrelhouseEvents}</span>
<h2 className="font-industrial text-3xl lg:text-4xl font-black uppercase text-white">
{t.featuredServices}
</h2>
<p className="text-white/40 text-xs mt-2 font-medium">
{lang === "tr" ? "Özel viski tadım uçuşları ve sommelier eğitim paketleri ayırtın." : "Reserve custom whiskey flights and private sommelier masterclass packages."}
</p>
</div>
{/* Bento Grid layout */}
<div className="grid md:grid-cols-3 gap-8">
{hizmetler.map((experience, idx) => {
const locServ = getLocalizedService(experience.baslik, experience.aciklama);
return (
<motion.div
key={idx}
className="bg-[#18191E] rounded-3xl border border-white/5 overflow-hidden transition-all duration-300 hover:border-[#E63946]/30 flex flex-col justify-between group shadow-sm"
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.5, delay: idx * 0.1 }}
whileHover={{ y: -4 }}
>
{/* Header cover using chef smoke image to represent luxury experience */}
<div className="h-48 overflow-hidden relative border-b border-white/5">
{/* eslint-disable-next-line @next/next/no-img-element */}
<img
src={idx === 1 ? "/sicilia_lemon_heritage.png" : "/chef_plating_smoke.png"}
alt={locServ.title}
className="w-full h-full object-cover scale-102 group-hover:scale-105 transition-transform duration-1000"
/>
<div className="absolute inset-0 bg-black/40" />
</div>
<div className="p-8 space-y-4">
<h3 className="font-industrial font-black text-xl text-white tracking-wider uppercase leading-snug">
{locServ.title}
</h3>
<p className="text-white/50 text-[11px] leading-relaxed font-medium">
{locServ.desc}
</p>
</div>
<div className="px-8 pb-8">
<motion.button
onClick={() => setShowBookingModal(true)}
className="text-[#E63946] group-hover:text-white transition-colors text-[10px] font-bold tracking-[2px] uppercase flex items-center gap-1.5 cursor-pointer"
>
{t.learnMore}
</motion.button>
</div>
</motion.div>
);
})}
</div>
</div>
</section>
{/* ── RESERVATION RESERVATION RESERVATION ── */}
<section id="booking-flow" className="py-24 relative z-10 px-6 border-t border-white/5 bg-[#18191E]/40">
<div className="max-w-3xl mx-auto">
<div className="bg-[#18191E] rounded-3xl p-8 md:p-12 shadow-2xl border border-white/5 relative">
<div className="absolute top-0 left-12 right-12 h-0.5 bg-gradient-to-r from-transparent via-[#E63946] to-transparent glowing-bar" />
<div className="text-center mb-10">
<span className="text-[#E63946] font-bold text-xs uppercase tracking-widest block mb-2 font-industrial">{t.masterclassBooking}</span>
<h2 className="font-industrial text-3xl md:text-4xl font-black uppercase text-white">
{t.scheduleEvent}
</h2>
<p className="text-white/40 text-xs mt-2 font-medium">
{t.formDesc}
</p>
</div>
<div className="grid grid-cols-2 gap-5">
{[
{ label: t.fieldsName, placeholder: lang === "tr" ? "Adınız Soyadınız" : "Your Name", type: "text", full: false },
{ label: t.fieldsEmail, placeholder: "you@company.com", type: "email", full: false },
{ label: t.fieldsPhone, placeholder: lang === "tr" ? "İrtibat Numarası" : "Contact Number", type: "tel", full: false },
{ label: t.fieldsEvent, placeholder: lang === "tr" ? "Viski Tadım Serisi" : "Whiskey Tasting Flight", type: "text", full: false },
{ label: t.fieldsNotes, placeholder: t.fieldsNotesPlaceholder, type: "text", full: true },
].map((field, idx) => (
<div key={idx} className={field.full ? "col-span-2" : "col-span-1"}>
<label className="block text-[10px] font-bold text-white/50 mb-1.5 uppercase tracking-widest">{field.label}</label>
<input
type={field.type}
placeholder={field.placeholder}
className="w-full px-4 py-3 rounded-xl border border-white/5 bg-[#111215] text-xs text-white placeholder-white/20 focus:outline-none focus:border-[#E63946] focus:ring-1 focus:ring-[#E63946] transition-all font-medium cursor-pointer"
/>
</div>
))}
</div>
<motion.button
onClick={() => setShowBookingModal(true)}
className="mt-8 w-full py-4.5 rounded-xl bg-[#E63946] hover:bg-white hover:text-black text-white font-bold text-[10px] tracking-[2.5px] uppercase transition-colors cursor-pointer"
whileHover={{ scale: 1.02 }}
whileTap={{ scale: 0.98 }}
>
{t.dispatchRequest}
</motion.button>
</div>
</div>
</section>
{/* ── TESTIMONIALS ── */}
<section id="testimonials" className="py-28 relative z-10 px-6 bg-[#111215] border-t border-white/5">
<div className="max-w-7xl mx-auto">
<div className="text-center max-w-xl mx-auto mb-20">
<span className="text-[#E63946] font-bold text-xs uppercase tracking-widest block mb-2 font-industrial">{t.sommelierReviews}</span>
<h2 className="font-industrial text-3xl lg:text-4xl font-black uppercase text-white font-industrial tracking-widest">
{t.happyGuests}
</h2>
<p className="text-white/40 text-xs mt-2 font-medium">
{t.happyGuestsDesc}
</p>
</div>
{/* Testimonials 2-Column Grid */}
<div className="grid md:grid-cols-2 gap-8">
{yorumlar.map((y, yIdx) => (
<motion.div
key={yIdx}
className="bg-[#18191E] border border-white/5 rounded-3xl p-8 flex flex-col justify-between transition-all duration-300 hover:border-[#E63946]/30 group shadow-lg"
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.5, delay: yIdx * 0.1 }}
whileHover={{ y: -4 }}
>
{/* Rating Stars SVG */}
<div className="flex gap-1.5 mb-6">
{[...Array(5)].map((_, starIdx) => (
<svg key={starIdx} className="w-4.5 h-4.5 fill-[#E63946]" viewBox="0 0 24 24">
<path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
))}
</div>
<p className="text-white/70 text-xs leading-relaxed italic mb-8 font-medium font-serif-editorial">
&ldquo;{y.yorum}&rdquo;
</p>
<div className="flex items-center gap-3">
<div className="w-10 h-10 rounded-full border border-white/10 flex items-center justify-center text-lg bg-[#111215] font-sans-clean select-none font-bold">
{y.yazar.charAt(0)}
</div>
<div>
<h4 className="font-industrial text-white text-xs font-black uppercase tracking-wider">
{y.yazar}
</h4>
<span className="text-[9px] text-white/40 uppercase tracking-widest font-bold font-sans-clean">
{y.tarih}
</span>
</div>
</div>
</motion.div>
))}
</div>
</div>
</section>
{/* ── FOOTER ── */}
<footer className="bg-[#18191E] border-t border-white/5 pt-24 pb-8 px-6 relative z-10">
<div className="max-w-7xl mx-auto">
<div className="grid md:grid-cols-4 gap-12 pb-16 border-b border-white/5">
{/* About Column */}
<div className="md:col-span-2">
<span className="font-industrial text-2xl font-black text-white tracking-wider uppercase mb-4 block">
Char<span className="text-[#E63946]">Barrel</span>
</span>
<p className="text-white/50 text-xs leading-relaxed max-w-sm mb-8 font-medium">
{firma.slogan} Heavy rustic slate-crimson themed barrelhouse coordinates offering masterclass mixology and corporate single malt tastings.
</p>
<div className="text-white/60 text-xs font-medium space-y-3">
<p className="flex items-center gap-2">
<svg className="w-4 h-4 text-[#E63946] shrink-0" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z" />
<circle cx="12" cy="10" r="3" />
</svg>
<span className="text-white/80">{firma.adres}</span>
</p>
<p className="flex items-center gap-2">
<svg className="w-4 h-4 text-[#E63946] shrink-0" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<rect width="20" height="16" x="2" y="4" rx="2" />
<path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7" />
</svg>
<span className="text-white/80">{firma.email}</span>
</p>
</div>
</div>
{/* Dials Column */}
<div>
<h4 className="font-industrial text-[#E63946] text-xs font-black uppercase tracking-wider mb-6">
{t.artisanalDials}
</h4>
<div className="space-y-4">
{drinks.map(d => (
<a
key={d.name}
href="#drink-selector"
className="block text-white/50 hover:text-[#E63946] text-xs transition-colors font-medium uppercase tracking-wider font-industrial"
>
{d.name} Signature
</a>
))}
</div>
</div>
{/* Experiences Column */}
<div>
<h4 className="font-industrial text-[#E63946] text-xs font-black uppercase tracking-wider mb-6">
{t.vipServices}
</h4>
<div className="space-y-4">
{hizmetler.map((h, hIdx) => {
const locS = getLocalizedService(h.baslik, h.aciklama);
return (
<a
key={hIdx}
href="#experiences"
className="block text-white/50 hover:text-[#E63946] text-xs transition-colors font-medium"
>
{locS.title}
</a>
);
})}
</div>
</div>
</div>
<div className="flex flex-col md:flex-row justify-between items-center pt-8 gap-4 text-white/30 text-xs font-medium">
<p>© 2026 {firma.adi}. All rights reserved.</p>
<div className="flex gap-4">
<a href="#" className="hover:text-white transition-colors">{t.privacyRegs}</a>
<span>·</span>
<a href="#" className="hover:text-white transition-colors">{t.termsStay}</a>
</div>
</div>
</div>
</footer>
{/* ── FAST BOOKING SUCCESS MODAL ── */}
<AnimatePresence>
{showBookingModal && (
<motion.div
className="fixed inset-0 z-50 flex items-center justify-center p-6 bg-black/80 backdrop-blur-sm"
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
>
<motion.div
className="bg-[#18191E] rounded-3xl p-8 max-w-md w-full relative shadow-2xl border border-[#E63946]/20"
initial={{ scale: 0.95, y: 20 }}
animate={{ scale: 1, y: 0 }}
exit={{ scale: 0.95, y: 20 }}
>
{/* Close Button */}
<button
className="absolute top-6 right-6 w-8 h-8 rounded-full bg-[#111215] border border-white/5 flex items-center justify-center text-white/40 hover:text-[#E63946] hover:border-[#E63946]/20 transition-all cursor-pointer font-bold"
onClick={() => setShowBookingModal(false)}
>
</button>
{/* Success check indicator */}
<div className="w-16 h-16 rounded-2xl bg-[#E63946]/10 border border-[#E63946]/20 flex items-center justify-center mb-6">
<svg className="w-8 h-8 stroke-[#E63946] fill-none" viewBox="0 0 24 24" strokeWidth="1.5">
<path strokeLinecap="round" strokeLinejoin="round" d="M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
</svg>
</div>
<h3 className="font-industrial font-black text-white text-2xl mb-1 uppercase tracking-wider">
{t.enquiryActive}
</h3>
<p className="text-[#E63946] font-mono text-[10px] mb-6 uppercase tracking-widest font-bold">
{t.ambassadorActive}
</p>
<p className="text-white/60 text-xs leading-relaxed mb-8 font-medium">
{t.enquirySuccess}
</p>
<motion.button
className="w-full py-4.5 rounded-xl bg-[#E63946] hover:bg-black hover:text-white text-white font-bold text-[10px] tracking-[2.5px] uppercase cursor-pointer shadow-md shadow-[#E63946]/15"
whileHover={{ scale: 1.02 }}
whileTap={{ scale: 0.98 }}
onClick={() => setShowBookingModal(false)}
>
{t.dismiss}
</motion.button>
</motion.div>
</motion.div>
)}
</AnimatePresence>
</div>
</>
);
}