"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 } }, }; const translations = { tr: { navReserve: "Rezervasyon", navHours: "Çalışma Saatleri", navCurator: "Kokteyl Menüsü", navReviews: "Değerlendirmeler", bookTable: "Masa Ayırt", exclusiveLounge: "ÖZEL KOKTEYL SALONU", cocktailStage: "KOKTEYL SAHNESİ", evenings: "geceleri", heroDesc: "Noir Velvet Lounge'a adım atın. Klasik karışımlar, botanik aromalar ve yıllanmış özel içkilerin loş kehribar akustiği altındaki benzersiz sunumunu keşfedin.", discoverMenu: "MENÜYÜ KEŞFET", reserveTableTitle: "Stage Booking", reserveTableHeader: "MASA AYIRTIN", reserveTableDesc: "Ana sahne akustik çizgilerinin altında, size özel bar tezgahı veya lounge masanızı şimdiden ayırtın.", fieldsName: "İsim Soyisim", fieldsPhone: "İletişim Numarası", fieldsDate: "Tarih", fieldsTime: "Saat", guarantee: "Bu formu doldurarak doğrulanmış bir rezervasyon sağlarsınız. Masalar, rezervasyon saatinden itibaren 15 dakika boyunca adınıza tutulur.", secureRes: "REZERVASYON YAP", curatorSpecials: "Küratörün Seçtikleri", weRecommend: "TAVSİYE EDİLENLER", signature: "İmza", loungeStories: "LOUNGE HİKAYELERİ", loungeStoriesDesc: "Seçkin miksolojistlerin ve caz akustiği kuratörlerinin salon hakkındaki yorumlarını keşfedin.", loungeHours: "ÇALIŞMA SAATLERİ", loungeDials: "İMZA KOKTEYLLER", privacyRegs: "Gizlilik Sözleşmesi", termsStay: "Salon Koşulları", dismiss: "KAPAT", enquiryActive: "REZERVASYON YAPILDI", ambassadorActive: "Sahne Mihmandarı Aktif", enquirySuccess: "Bar tezgahı veya lounge masası rezervasyonunuzu başarıyla kaydettik. Özel mihmandarımız giriş koordinatlarınızı doğrulamak için sizinle iletişime geçecektir. Teşekkürler!", }, en: { navReserve: "Reserve Table", navHours: "Hours", navCurator: "Curator's Specials", navReviews: "Reviews", bookTable: "Book a table", exclusiveLounge: "EXCLUSIVE LOUNGE SERVICE", cocktailStage: "COCKTAIL STAGE", evenings: "evenings", heroDesc: "Step into Noir Velvet Lounge. Indulge in classic mixes, botanic blends, and aged private reserve spirits staged under moody amber acoustics.", discoverMenu: "DISCOVER STAGE MENU", reserveTableTitle: "Stage Booking", reserveTableHeader: "RESERVE A TABLE", reserveTableDesc: "Allocate your private counter or lounge table under the main stage acoustic lines.", fieldsName: "Name", fieldsPhone: "Phone", fieldsDate: "Date", fieldsTime: "Time", guarantee: "By submitting this form, you secure a verified reservation. Tables are held for 15 minutes past the booking coordinates.", secureRes: "SECURE RESERVATION", curatorSpecials: "Curator's Specials", weRecommend: "WE RECOMMEND", signature: "Signature", loungeStories: "LOUNGE STORIES", loungeStoriesDesc: "Hear what prominent mixologists and jazz acoustic curators write about the lounge.", loungeHours: "OPEN HOURS", loungeDials: "SPECIAL DIALS", privacyRegs: "Privacy Regulations", termsStay: "Terms of Lounge", dismiss: "DISMISS", enquiryActive: "TABLE RESERVED", ambassadorActive: "Stage Concierge Active", enquirySuccess: "We have secured your counter or lounge table reservation. A private host has registered your parameters. Thank you!", } }; export default function BarTemplate({ data }: { data: DemoData }) { const { firma, istatistikler = [], hizmetler = [], yorumlar = [] } = data; const [showBookingModal, setShowBookingModal] = useState(false); 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); }, []); // Localized statistics/hours const getLocalizedStat = (deger: string, etiket: string) => { if (deger.toLowerCase().includes("weekdays") || etiket.toLowerCase().includes("weekdays") || etiket.toLowerCase().includes("pazartesi")) { return { deger: lang === "tr" ? "Hafta İçi" : "Weekdays", etiket: lang === "tr" ? "Pazartesi - Cuma · 16:00 - 02:00" : "Monday - Friday · 4:00 PM - 2:00 AM" }; } if (deger.toLowerCase().includes("weekends") || etiket.toLowerCase().includes("weekends") || etiket.toLowerCase().includes("cumartesi")) { return { deger: lang === "tr" ? "Hafta Sonu" : "Weekends", etiket: lang === "tr" ? "Cumartesi - Pazar · 16:00 - 04:00" : "Saturday - Sunday · 4:00 PM - 4:00 AM" }; } if (deger.toLowerCase().includes("happy") || etiket.toLowerCase().includes("happy")) { return { deger: lang === "tr" ? "Happy Hour" : "Happy Hour", etiket: lang === "tr" ? "Her gün 17:00 - 19:00 arası imza kokteyllerde %20 indirim" : "Daily 5:00 PM - 7:00 PM · 20% off signature mixology" }; } return { deger: lang === "tr" ? "Özel Karışımlar" : deger, etiket: lang === "tr" ? "Taze botanik şuruplar ve el yapımı bitters infüzyonları." : etiket }; }; // Localized services/beverages const getLocalizedService = (baslik: string, aciklama: string) => { if (baslik.toLowerCase().includes("velvet") || baslik.toLowerCase().includes("velvet kiss")) { return { title: lang === "tr" ? "VELVET KISS KOKTEYLİ" : "VELVET KISS COCKTAIL", desc: lang === "tr" ? "Kendi yapımımız taze vişne likörü, vanilya şurubu ve dumanlanmış ardıç aromaları ile hazırlanan imza içkimiz." : aciklama }; } if (baslik.toLowerCase().includes("amber") || baslik.toLowerCase().includes("amber smoke") || baslik.toLowerCase().includes("smoke")) { return { title: lang === "tr" ? "KEHRİBAR DUMANI" : "AMBER SMOKE", desc: lang === "tr" ? "Ağaç talaşı isi ile tütsülenmiş viski, botanik acı otlar ve karamelize portakal dilimi." : aciklama }; } return { title: lang === "tr" ? "BOTANİK RÜYA" : "BOTANICAL DREAM", desc: lang === "tr" ? "Taze biberiye infüzyonu, narenciye asidi ve organik zencefil gazozu ile canlandırıcı hafif bir karışım." : aciklama }; }; // Custom visual styles & Google Fonts for our Classic Noir Velvet 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-velvet-gold: #D4AF37; --color-velvet-black: #09090C; --color-velvet-card: #14141A; --color-text-white: #E8E8E8; --color-text-muted: rgba(232, 232, 232, 0.6); } .font-serif-editorial { font-family: 'Cormorant Garamond', Georgia, serif; } .font-serif-lux { font-family: 'Cormorant Garamond', Georgia, serif; font-weight: 700; } .font-sans-clean { font-family: 'Space Grotesk', sans-serif; } .bg-mesh-velvet { background-image: radial-gradient(circle at 5% 5%, rgba(212, 175, 55, 0.03) 0%, transparent 40%), radial-gradient(circle at 95% 95%, rgba(212, 175, 55, 0.02) 0%, transparent 50%); } .gold-glow { box-shadow: 0 0 20px rgba(212, 175, 55, 0.15); } /* Slow pulse for active indicators */ .pulse-gold { animation: goldPulse 2.5s infinite; } @keyframes goldPulse { 0% { box-shadow: 0 0 0 0 rgba(212, 175, 55, 0.4); } 70% { box-shadow: 0 0 0 10px rgba(212, 175, 55, 0); } 100% { box-shadow: 0 0 0 0 rgba(212, 175, 55, 0); } } .hero-title-clamp { font-size: clamp(48px, 8vw, 110px); letter-spacing: -0.03em; line-height: 0.9; } `; return ( <> {/* ── IMZA AN: CURTAIN REVEAL PRELOADER ── */} {preloader && (
NOIR VELVET LOUNGE
mixology & acoustic lounge
)}
{/* ── NOIR VELVET LOUNGE ── */}
{/* Floating Ambient Gold Orbs */}
{/* ── MANDATORY FLOATING DEMO BANNER ── */}
{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."}
{/* ── GOLD FLOATING NAVBAR ── */}
{/* Logo */} {firma.adi} {/* Navigation Links */} {/* Action button */}
{/* Language Switcher */}
setShowBookingModal(true)} className="text-[10px] font-bold tracking-[2.5px] uppercase text-black bg-[#D4AF37] hover:bg-white px-6 py-3.5 rounded-xl transition-all cursor-pointer shadow-[0_5px_15px_rgba(212,175,55,0.15)] hidden sm:block" whileHover={{ scale: 1.02 }} whileTap={{ scale: 0.98 }} > {t.bookTable}
{/* ── HERO & HOURS BLOCK ── */}
{/* Left Column: Headings & Hours details */} {t.exclusiveLounge} {t.cocktailStage}
{t.evenings}
{t.heroDesc} {/* Grid details (Open Hours & Happy Hour) */} {istatistikler.map((stat, idx) => { const locStat = getLocalizedStat(stat.deger, stat.etiket); return (

{locStat.deger}

{locStat.etiket}

); })}
{/* Action CTA */} {t.discoverMenu}
{/* Right Column: Parallax Moody Graphic Counter */}
{/* Outer glowing gold ring */}
{/* Using 8k Fresh Citrus flatlay to represent natural ingredients and botanical prep */} {/* eslint-disable-next-line @next/next/no-img-element */} Noir Velvet Fresh Citrus & Botanical Garnishes {/* Overlay velvet glow */}
{/* ── RESERVATION TABLE BUILDER ── */}
{/* Thin gold line connector indicator */}
{t.reserveTableTitle}

{t.reserveTableHeader}

{t.reserveTableDesc}

{/* Form Grid */}
{[ { label: t.fieldsName, placeholder: lang === "tr" ? "Adınız Soyadınız" : "Your Name", type: "text" }, { label: t.fieldsPhone, placeholder: lang === "tr" ? "İrtibat Numarası" : "Contact Number", type: "tel" }, { label: t.fieldsDate, placeholder: "", type: "date" }, { label: t.fieldsTime, placeholder: "", type: "time" }, ].map((field, idx) => (
))}
{/* Form Submit Row */}

{t.guarantee}

setShowBookingModal(true)} className="w-full md:w-auto px-10 py-4.5 rounded-xl bg-[#D4AF37] hover:bg-white text-black font-bold text-[10px] tracking-[2px] uppercase transition-all cursor-pointer shadow-[0_5px_15px_rgba(212,175,55,0.2)] shrink-0" whileHover={{ scale: 1.02 }} whileTap={{ scale: 0.98 }} > {t.secureRes}
{/* ── CURATOR'S SPECIALS MENU (DOTTED CONNECTORS) ── */}
{/* Left Column: Fine dotted Menu lists */} {t.curatorSpecials} {t.weRecommend} {/* Dotted menu */}
{hizmetler.map((item, idx) => { const locBeverage = getLocalizedService(item.baslik, item.aciklama); return (
{locBeverage.title} {/* Fine dotted line */}
$19

{locBeverage.desc}

); })}
{/* Right Column: Close-up action image counter */}
{/* Using 8k Chef Plating Smoke image to represent curator mixology and smoky vapor */} {/* eslint-disable-next-line @next/next/no-img-element */} Curator liquid smoke mixology stage
{/* ── TESTIMONIALS ── */}
{t.navReviews}

{t.loungeStories}

{t.loungeStoriesDesc}

{/* Testimonials 2-Column Grid */}
{yorumlar.map((y, yIdx) => ( {/* Rating Stars SVG */}
{[...Array(y.puan)].map((_, starIdx) => ( ))}

“{y.yorum}”

{y.yazar.charAt(0)}

{y.yazar}

{y.tarih}
))}
{/* ── FOOTER ── */}
{/* About Column */}
NoirVelvet

{firma.slogan} — Classic dark luxury lounge delivering organic mixology under curated acoustic stage lines.

{firma.adres}

{firma.email}

{/* Hours Column */}

{t.loungeHours}

{lang === "tr" ? "Pazartesi - Cuma" : "Monday - Friday"}
4:00 PM - 2:00 AM

{lang === "tr" ? "Cumartesi - Pazar" : "Saturday - Sunday"}
4:00 PM - 4:00 AM

{/* Specials Column */}

{t.loungeDials}

{hizmetler.map((h, hIdx) => { const locB = getLocalizedService(h.baslik, h.aciklama); return ( {locB.title} {t.signature} ); })}

© 2026 {firma.adi}. All rights reserved.

{/* ── FAST TABLE SUCCESS MODAL ── */} {showBookingModal && ( {/* Close Button */} {/* Success check indicator */}

{t.enquiryActive}

{t.ambassadorActive}

{t.enquirySuccess}

setShowBookingModal(false)} > {t.dismiss}
)}
); }