16 Commits

Author SHA1 Message Date
9e508b3017 Update src/app/page.tsx 2026-02-17 19:42:35 +00:00
57011d2561 Update src/app/layout.tsx 2026-02-17 19:42:34 +00:00
20db4ce23c Merge version_10 into main
Merge version_10 into main
2026-02-17 14:29:34 +00:00
3bcb4a8cbc Update src/app/page.tsx 2026-02-17 14:29:30 +00:00
cdbffe8972 Update src/app/layout.tsx 2026-02-17 14:29:29 +00:00
a0b3a3a81b Merge version_9 into main
Merge version_9 into main
2026-02-17 12:46:39 +00:00
1f7255ad55 Update src/app/page.tsx 2026-02-17 12:46:35 +00:00
b6942a80f6 Update src/app/layout.tsx 2026-02-17 12:46:34 +00:00
e802d56421 Merge version_8 into main
Merge version_8 into main
2026-02-17 12:43:19 +00:00
a4777db3f0 Update src/app/page.tsx 2026-02-17 12:43:15 +00:00
f6e6dd8d87 Merge version_8 into main
Merge version_8 into main
2026-02-17 12:40:30 +00:00
03bbe6b0b6 Update src/app/page.tsx 2026-02-17 12:40:25 +00:00
9419484b0a Update src/app/layout.tsx 2026-02-17 12:40:24 +00:00
15e8371216 Merge version_7 into main
Merge version_7 into main
2026-02-17 12:27:53 +00:00
e31abcaf2e Update src/app/styles/variables.css 2026-02-17 12:27:49 +00:00
09155f7364 Merge version_6 into main
Merge version_6 into main
2026-02-17 12:12:41 +00:00
3 changed files with 210 additions and 121 deletions

View File

@@ -9,7 +9,8 @@ const inter = Inter({
}); });
export const metadata: Metadata = { export const metadata: Metadata = {
title: "Kazkovyy Dim - Authentic Ukrainian Banquets & Family Dining", description: "Experience warmth, tradition, and ethno-cultural heritage at Kazkovyy Dim. Premium banquet spaces, authentic cuisine, and unforgettable celebrations."}; title: "Сіль Землі - Автентичні українські бенкети та сімейні обіди", description: "Відчуйте тепло, традицію та етнокультурну спадщину в Солі Землі. Преміум простори для бенкетів, автентична кухня та незабутні святкування."
};
export default function RootLayout({ export default function RootLayout({
children, children,
@@ -17,7 +18,7 @@ export default function RootLayout({
children: React.ReactNode; children: React.ReactNode;
}) { }) {
return ( return (
<html lang="en"> <html lang="uk">
<body className={`${inter.variable}`}>{children} <body className={`${inter.variable}`}>{children}
<script <script
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
@@ -412,6 +413,20 @@ export default function RootLayout({
originalContent = element.textContent; originalContent = element.textContent;
element.contentEditable = 'true'; element.contentEditable = 'true';
if (!element.dataset.webildOriginalWhiteSpace) {
const computedStyle = window.getComputedStyle(element);
element.dataset.webildOriginalWhiteSpace = computedStyle.whiteSpace;
element.dataset.webildOriginalWordWrap = computedStyle.wordWrap;
element.dataset.webildOriginalOverflowWrap = computedStyle.overflowWrap;
element.dataset.webildOriginalOverflow = computedStyle.overflow;
}
element.style.whiteSpace = 'pre-wrap';
element.style.wordWrap = 'break-word';
element.style.overflowWrap = 'break-word';
element.style.overflow = 'visible';
element.focus(); element.focus();
isEditing = true; isEditing = true;
@@ -521,6 +536,23 @@ export default function RootLayout({
element.contentEditable = 'false'; element.contentEditable = 'false';
isEditing = false; isEditing = false;
if (element.dataset.webildOriginalWhiteSpace) {
element.style.whiteSpace = element.dataset.webildOriginalWhiteSpace === 'normal' ? '' : element.dataset.webildOriginalWhiteSpace;
delete element.dataset.webildOriginalWhiteSpace;
}
if (element.dataset.webildOriginalWordWrap) {
element.style.wordWrap = element.dataset.webildOriginalWordWrap === 'normal' ? '' : element.dataset.webildOriginalWordWrap;
delete element.dataset.webildOriginalWordWrap;
}
if (element.dataset.webildOriginalOverflowWrap) {
element.style.overflowWrap = element.dataset.webildOriginalOverflowWrap === 'normal' ? '' : element.dataset.webildOriginalOverflowWrap;
delete element.dataset.webildOriginalOverflowWrap;
}
if (element.dataset.webildOriginalOverflow) {
element.style.overflow = element.dataset.webildOriginalOverflow === 'visible' ? '' : element.dataset.webildOriginalOverflow;
delete element.dataset.webildOriginalOverflow;
}
if (element.dataset.beforeInputHandler === 'true') { if (element.dataset.beforeInputHandler === 'true') {
element.removeEventListener('beforeinput', () => {}); element.removeEventListener('beforeinput', () => {});
delete element.dataset.beforeInputHandler; delete element.dataset.beforeInputHandler;
@@ -826,6 +858,9 @@ export default function RootLayout({
const handleScroll = () => { const handleScroll = () => {
if (!isActive) return; if (!isActive) return;
if (isEditing) return;
if (selectedElement) { if (selectedElement) {
makeUneditable(selectedElement, false); makeUneditable(selectedElement, false);
selectedElement.classList.remove(selectedClass); selectedElement.classList.remove(selectedClass);
@@ -1199,6 +1234,31 @@ export default function RootLayout({
window.addEventListener('scroll', handleScroll, true); window.addEventListener('scroll', handleScroll, true);
window.addEventListener('message', handleMessage, true); window.addEventListener('message', handleMessage, true);
let lastPathname = window.location.pathname;
const notifyPageChange = () => {
window.parent.postMessage({
type: 'webild-page-changed',
data: { pathname: window.location.pathname }
}, '*');
};
window.addEventListener('popstate', () => {
if (lastPathname !== window.location.pathname) {
lastPathname = window.location.pathname;
notifyPageChange();
}
}, true);
const urlCheckInterval = setInterval(() => {
if (lastPathname !== window.location.pathname) {
lastPathname = window.location.pathname;
notifyPageChange();
}
}, 500);
notifyPageChange();
window.webildCleanup = () => { window.webildCleanup = () => {
isActive = false; isActive = false;
@@ -1209,6 +1269,10 @@ export default function RootLayout({
removeHoverOverlay(); removeHoverOverlay();
removeElementTypeLabel(); removeElementTypeLabel();
if (urlCheckInterval) {
clearInterval(urlCheckInterval);
}
document.removeEventListener('mouseover', handleMouseOver, true); document.removeEventListener('mouseover', handleMouseOver, true);
document.removeEventListener('mouseout', handleMouseOut, true); document.removeEventListener('mouseout', handleMouseOut, true);
document.removeEventListener('click', handleClick, true); document.removeEventListener('click', handleClick, true);

View File

@@ -2,17 +2,18 @@
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarLayoutFloatingInline from '@/components/navbar/NavbarLayoutFloatingInline'; import NavbarLayoutFloatingInline from '@/components/navbar/NavbarLayoutFloatingInline';
import HeroSplitDualMedia from '@/components/sections/hero/HeroSplitDualMedia'; import HeroLogoBillboardSplit from '@/components/sections/hero/HeroLogoBillboardSplit';
import TestimonialAboutCard from '@/components/sections/about/TestimonialAboutCard'; import TestimonialAboutCard from '@/components/sections/about/TestimonialAboutCard';
import FeatureCardNineteen from '@/components/sections/feature/FeatureCardNineteen'; import FeatureCardNineteen from '@/components/sections/feature/FeatureCardNineteen';
import ProductCardThree from '@/components/sections/product/ProductCardThree'; import ProductCardThree from '@/components/sections/product/ProductCardThree';
import TestimonialCardTwo from '@/components/sections/testimonial/TestimonialCardTwo'; import TestimonialCardTwo from '@/components/sections/testimonial/TestimonialCardTwo';
import ContactSplitForm from '@/components/sections/contact/ContactSplitForm'; import ContactSplitForm from '@/components/sections/contact/ContactSplitForm';
import FooterMedia from '@/components/sections/footer/FooterMedia'; import FooterMedia from '@/components/sections/footer/FooterMedia';
import FaqSplitText from '@/components/sections/faq/FaqSplitText';
import { Castle, Flame, Heart, Leaf, Quote, UtensilsCrossed, X } from "lucide-react"; import { Castle, Flame, Heart, Leaf, Quote, UtensilsCrossed, X } from "lucide-react";
import { useState } from "react"; import { useState } from "react";
export default function KazkovyyDimPage() { export default function SilZemliPage() {
const [isModalOpen, setIsModalOpen] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false);
const [formData, setFormData] = useState({ const [formData, setFormData] = useState({
name: "", email: "", phone: "", eventDate: "", guestCount: "", message: "" name: "", email: "", phone: "", eventDate: "", guestCount: "", message: ""
@@ -50,18 +51,17 @@ export default function KazkovyyDimPage() {
> >
<div id="nav" data-section="nav"> <div id="nav" data-section="nav">
<NavbarLayoutFloatingInline <NavbarLayoutFloatingInline
brandName="Kazkovyy Dim" brandName="Сіль Землі"
navItems={[ navItems={[
{ name: "Philosophy", id: "philosophy" }, { name: "Філософія", id: "philosophy" },
{ name: "Menu", id: "menu" }, { name: "Меню", id: "menu" },
{ name: "Banquets", id: "banquets" }, { name: "Бенкети", id: "banquets" },
{ name: "Delivery", id: "delivery" }, { name: "Доставка", id: "delivery" },
{ name: "Blog", id: "/blog" }, { name: "FAQ", id: "faq" },
{ name: "Shop", id: "/shop" }, { name: "Контакти", id: "contacts" }
{ name: "Contacts", id: "contacts" }
]} ]}
button={{ button={{
text: "Book a Table", onClick: () => setIsModalOpen(true) text: "Замовити стіл", onClick: () => setIsModalOpen(true)
}} }}
navItemClassName="text-sm font-medium hover:text-primary-cta transition-colors" navItemClassName="text-sm font-medium hover:text-primary-cta transition-colors"
buttonClassName="bg-primary-cta hover:bg-accent text-white px-6 py-2 rounded-soft transition-all" buttonClassName="bg-primary-cta hover:bg-accent text-white px-6 py-2 rounded-soft transition-all"
@@ -69,31 +69,22 @@ export default function KazkovyyDimPage() {
</div> </div>
<div id="hero" data-section="hero"> <div id="hero" data-section="hero">
<HeroSplitDualMedia <HeroLogoBillboardSplit
tag="Welcome to Kazkovyy Dim" logoText="СІЛЬ ЗЕМЛІ"
tagIcon={Flame} description="Відчуйте тепло, традицію та етнокультурну спадщину у нашому чудово оформленому бенкетному комплексі. Від інтимних сімейних зібрань до грандіозних святкувань, ми створюємо незабутні моменти біля вогню."
title="Authentic Ukrainian Banquets & Family Dining"
description="Experience warmth, tradition, and ethno-cultural heritage in our beautifully designed banquet complex. From intimate family gatherings to grand celebrations, we create unforgettable moments around the fire."
background={{ variant: "plain" }} background={{ variant: "plain" }}
mediaItems={[ imageSrc="https://img.b2bpic.net/free-photo/full-shot-woman-getting-warmer-by-fire_23-2149172517.jpg"
{ imageAlt="Тепло каміна в традиційному українському інтер'єрі"
imageSrc: "https://img.b2bpic.net/free-photo/full-shot-woman-getting-warmer-by-fire_23-2149172517.jpg", imageAlt: "Warm fireplace in traditional Ukrainian interior"
},
{
imageSrc: "https://img.b2bpic.net/free-photo/traditional-house-interior-design_23-2151050931.jpg", imageAlt: "Authentic wooden interior with ethno decoration"
}
]}
rating={5}
ratingText="Loved by families and event organizers"
buttons={[{ buttons={[{
text: "Book a Table", onClick: () => setIsModalOpen(true) text: "Замовити стіл", onClick: () => setIsModalOpen(true)
}]} }]}
tagAnimation="slide-up" layoutOrder="default"
frameStyle="card"
buttonAnimation="slide-up" buttonAnimation="slide-up"
mediaAnimation="slide-up" mediaAnimation="slide-up"
className="py-20 lg:py-32" className="py-20 lg:py-32"
containerClassName="max-w-7xl" containerClassName="max-w-7xl"
titleClassName="text-4xl md:text-6xl font-bold text-foreground" logoClassName="text-6xl md:text-8xl font-bold text-foreground"
descriptionClassName="text-lg text-foreground/80" descriptionClassName="text-lg text-foreground/80"
buttonClassName="bg-primary-cta hover:bg-accent text-white" buttonClassName="bg-primary-cta hover:bg-accent text-white"
mediaWrapperClassName="rounded-soft overflow-hidden" mediaWrapperClassName="rounded-soft overflow-hidden"
@@ -102,14 +93,14 @@ export default function KazkovyyDimPage() {
<div id="philosophy" data-section="philosophy"> <div id="philosophy" data-section="philosophy">
<TestimonialAboutCard <TestimonialAboutCard
tag="Our Heritage" tag="Наша спадщина"
tagIcon={Leaf} tagIcon={Leaf}
title="A Family Tradition of Ukrainian Hospitality" title="Сімейна традиція українського гостинства"
description="Kazkovyy Dim embodies the essence of authentic Ukrainian culture, warmth, and familial bonds." description="Сіль Землі втілює сутність автентичної української культури, тепла та сімейних зв'язків."
subdescription="Every detail from custom-designed interiors to carefully curated menus reflects our commitment to preserving ethno-cultural traditions." subdescription="Кожна деталь від спеціально розроблених інтер'єрів до ретельно дібраних меню відображає нашу прихильність до збереження етнокультурних традицій."
icon={Heart} icon={Heart}
imageSrc="https://img.b2bpic.net/free-photo/traditional-house-interior-design_23-2151050931.jpg" imageSrc="https://img.b2bpic.net/free-photo/traditional-house-interior-design_23-2151050931.jpg"
imageAlt="Ukrainian traditional interior with wooden elements and ethno decoration" imageAlt="Український традиційний інтер'єр з дерев'яними елементами та етно-декором"
mediaAnimation="slide-up" mediaAnimation="slide-up"
useInvertedBackground={true} useInvertedBackground={true}
tagAnimation="slide-up" tagAnimation="slide-up"
@@ -123,41 +114,41 @@ export default function KazkovyyDimPage() {
<div id="banquets" data-section="banquets"> <div id="banquets" data-section="banquets">
<FeatureCardNineteen <FeatureCardNineteen
tag="Banquet Spaces" tag="Простори для бенкетів"
tagIcon={Castle} tagIcon={Castle}
title="Discover Our Versatile Venues" title="Відкрийте наші універсальні місця проведення"
description="Each space is uniquely designed to celebrate your special moments with authentic charm and comfort." description="Кожен простір унікально розроблений для святкування ваших спеціальних моментів із автентичним чармом та комфортом."
textboxLayout="default" textboxLayout="default"
useInvertedBackground={false} useInvertedBackground={false}
tagAnimation="slide-up" tagAnimation="slide-up"
buttonAnimation="slide-up" buttonAnimation="slide-up"
buttons={[{ buttons={[{
text: "Inquire About Events", onClick: () => setIsModalOpen(true) text: "Запитати про заходи", onClick: () => setIsModalOpen(true)
}]} }]}
features={[ features={[
{ {
id: 1, id: 1,
tag: "Grand Hall", title: "Main Banquet Hall", subtitle: "80+ Guests", description: "Our flagship venue features a stage for performances, a magnificent fireplace, and elegant decorations that blend tradition with contemporary comfort. Perfect for weddings, anniversaries, and large celebrations.", imageSrc: "https://img.b2bpic.net/free-photo/stylish-interior-modern-luxurious-banquet-hall-decorated-white-illuminated-by-crystal-chandeliers-with-round-tables-served-with-plates-glasses-background-stage-performance_639032-2605.jpg", imageAlt: "Main banquet hall with stage and fireplace" tag: "Головний зал", title: "Головна бенкетна зала", subtitle: "80+ гостей", description: "Наша флагманська площадка з сценою для виступів, чудовим каміном та елегантним декором, що поєднує традиції з сучасним комфортом. Ідеальна для весіль, ювілеїв та великих святкувань.", imageSrc: "https://img.b2bpic.net/free-photo/stylish-interior-modern-luxurious-banquet-hall-decorated-white-illuminated-by-crystal-chandeliers-with-round-tables-served-with-plates-glasses-background-stage-performance_639032-2605.jpg", imageAlt: "Головна бенкетна зала зі сценою та каміном"
}, },
{ {
id: 2, id: 2,
tag: "Relaxation", title: "Lounge Zone", subtitle: "Intimate Setting", description: "A cozy retreat with hookah lounge and terrace access. Ideal for informal gatherings, business meetings, or pre-banquet receptions where guests can unwind in comfort.", imageSrc: "https://img.b2bpic.net/free-photo/wedding-reception-hall-with-elegant-table-setting-with-candles_181624-15206.jpg", imageAlt: "Lounge zone with comfortable seating and hookah" tag: "Відпочинок", title: "Зона лаунжу", subtitle: "Інтимна обстановка", description: "Затишна область з кальян-лаунжем та доступом на терасу. Ідеально для неформальних зібрань, ділових зустрічей або прийому перед бенкетом, де гості можуть розслабитися в комфорті.", imageSrc: "https://img.b2bpic.net/free-photo/wedding-reception-hall-with-elegant-table-setting-with-candles_181624-15206.jpg", imageAlt: "Зона лаунжу з зручним сидінням та кальяном"
}, },
{ {
id: 3, id: 3,
tag: "Exclusive", title: "VIP Private Room", subtitle: "Premium Experience", description: "Intimate and luxurious, our VIP room accommodates select groups seeking privacy and personalized service. Custom menus and dedicated staff ensure an unforgettable experience.", imageSrc: "https://img.b2bpic.net/free-photo/wedding-reception-hall-with-elegant-table-setting-with-candles_181624-9932.jpg", imageAlt: "VIP private dining room with elegant decor" tag: "Виключно", title: "VIP приватна кімната", subtitle: "Преміум досвід", description: "Інтимна та розкішна, наша VIP-кімната розміщує вибраних гостей, які шукають приватність та персоналізований сервіс. Спеціальні меню та виділений персонал гарантують незабутній досвід.", imageSrc: "https://img.b2bpic.net/free-photo/wedding-reception-hall-with-elegant-table-setting-with-candles_181624-9932.jpg", imageAlt: "VIP приватна їдальня з елегантним декором"
}, },
{ {
id: 4, id: 4,
tag: "Family", title: "Kids' Room", subtitle: "Family-Friendly", description: "A dedicated, safe space for children with entertainment and activities. Allows parents to celebrate while children enjoy supervised, age-appropriate fun.", imageSrc: "https://img.b2bpic.net/free-photo/beautifully-decorated-venue-interior-wedding_181624-58530.jpg", imageAlt: "Colorful kids room with entertainment activities" tag: "Сім'я", title: "Дитяча кімната", subtitle: "Сімейне місце", description: "Виділений безпечний простір для дітей із розвагами та заняттями. Дозволяє батькам святкувати, поки діти відпочивають у контрольованому, віковому середовищі.", imageSrc: "https://img.b2bpic.net/free-photo/beautifully-decorated-venue-interior-wedding_181624-58530.jpg", imageAlt: "Барвиста дитяча кімната з розвагами"
}, },
{ {
id: 5, id: 5,
tag: "Spacious", title: "Second Floor Hall", subtitle: "Large Events", description: "Our expansive second-floor venue provides ample space for major celebrations. Flexible layout accommodates various table arrangements and entertainment setups.", imageSrc: "https://img.b2bpic.net/free-photo/wedding-reception-hall-with-elegant-table-setting-with-candles_181624-16776.jpg", imageAlt: "Spacious second floor banquet hall" tag: "Просторе", title: "Зал другого поверху", subtitle: "Великі заходи", description: "Наша просторіччя площадка другого поверху забезпечує достатньо місця для великих святкувань. Гнучке розташування підходить для різних розташувань столів та розваг.", imageSrc: "https://img.b2bpic.net/free-photo/wedding-reception-hall-with-elegant-table-setting-with-candles_181624-16776.jpg", imageAlt: "Просторий бенкетний зал другого поверху"
}, },
{ {
id: 6, id: 6,
tag: "Outdoor", title: "Terrace", subtitle: "Seasonal Dining", description: "Beautiful outdoor terrace perfect for spring through autumn celebrations. Natural surroundings combined with authentic decor create magical evening events.", imageSrc: "https://img.b2bpic.net/free-photo/classic-restaurant-witn-red-curtains-stage_140725-9392.jpg", imageAlt: "Outdoor terrace with garden atmosphere" tag: "На відкритому повітрі", title: "Тераса", subtitle: "Сезонні обіди", description: "Красива відкрита тераса ідеальна для святкувань від весни до осені. Природне оточення, поєднане з автентичним декором, створює чарівні вечірні заходи.", imageSrc: "https://img.b2bpic.net/free-photo/classic-restaurant-witn-red-curtains-stage_140725-9392.jpg", imageAlt: "Відкрита тераса із садовою атмосферою"
} }
]} ]}
className="py-16 lg:py-24" className="py-16 lg:py-24"
@@ -170,9 +161,9 @@ export default function KazkovyyDimPage() {
<div id="menu" data-section="menu"> <div id="menu" data-section="menu">
<ProductCardThree <ProductCardThree
title="Our Culinary Offerings" title="Наші кулінарні пропозиції"
description="Explore traditional Ukrainian cuisine and modern interpretations prepared with authentic ingredients and family recipes." description="Дослідіть традиційну українську кухню та сучасні інтерпретації, приготовані з автентичними інгредієнтами та сімейними рецептами."
tag="Menu" tag="Меню"
tagIcon={UtensilsCrossed} tagIcon={UtensilsCrossed}
tagAnimation="slide-up" tagAnimation="slide-up"
textboxLayout="default" textboxLayout="default"
@@ -181,16 +172,16 @@ export default function KazkovyyDimPage() {
gridVariant="four-items-2x2-equal-grid" gridVariant="four-items-2x2-equal-grid"
products={[ products={[
{ {
id: "1", name: "Traditional Kitchen Menu", price: "View PDF", imageSrc: "https://img.b2bpic.net/free-photo/side-view-roasted-meat-pieces-wooden-board_141793-1393.jpg", imageAlt: "Traditional Ukrainian dishes" id: "1", name: "Меню традиційної кухні", price: "Переглянути PDF", imageSrc: "https://img.b2bpic.net/free-photo/side-view-roasted-meat-pieces-wooden-board_141793-1393.jpg", imageAlt: "Традиційні українські страви"
}, },
{ {
id: "2", name: "Bar & Beverage Selection", price: "View PDF", imageSrc: "https://img.b2bpic.net/free-photo/side-view-lamb-kebab-grilled-lamb-ribs-with-lettuce-tomato-greens-red-onion-grilled-corn-dried-barberry-glass-red-wine-table_141793-4982.jpg", imageAlt: "Premium bar selections" id: "2", name: "Вибір барів та напоїв", price: "Переглянути PDF", imageSrc: "https://img.b2bpic.net/free-photo/side-view-lamb-kebab-grilled-lamb-ribs-with-lettuce-tomato-greens-red-onion-grilled-corn-dried-barberry-glass-red-wine-table_141793-4982.jpg", imageAlt: "Преміум вибір для барів"
}, },
{ {
id: "3", name: "Wine List", price: "View PDF", imageSrc: "https://img.b2bpic.net/free-photo/wedding-reception-hall-with-elegant-table-setting-with-candles_181624-15206.jpg", imageAlt: "Curated wine collection" id: "3", name: "Винна карта", price: "Переглянути PDF", imageSrc: "https://img.b2bpic.net/free-photo/wedding-reception-hall-with-elegant-table-setting-with-candles_181624-15206.jpg", imageAlt: "Курована винна колекція"
}, },
{ {
id: "4", name: "Takeaway Options", price: "View PDF", imageSrc: "https://img.b2bpic.net/free-photo/kebab-served-with-chopped-onion-piece-lemon-red-wine_140725-4164.jpg", imageAlt: "Takeaway prepared dishes" id: "4", name: "Варіанти доставки", price: "Переглянути PDF", imageSrc: "https://img.b2bpic.net/free-photo/kebab-served-with-chopped-onion-piece-lemon-red-wine_140725-4164.jpg", imageAlt: "Приготовані страви для доставки"
} }
]} ]}
className="py-16 lg:py-24" className="py-16 lg:py-24"
@@ -202,9 +193,9 @@ export default function KazkovyyDimPage() {
<div id="delivery" data-section="delivery"> <div id="delivery" data-section="delivery">
<ProductCardThree <ProductCardThree
title="From the Fire Delivery Service" title="Послуга доставки З вогню"
description="Experience our authentic fire-roasted meats and traditional Ukrainian dishes delivered to your doorstep." description="Відчуйте наш автентичний посмажений на вогні м'ясо та традиційні українські страви, доставлені на ваш поріг."
tag="Catering" tag="Кейтеринг"
tagIcon={Flame} tagIcon={Flame}
tagAnimation="slide-up" tagAnimation="slide-up"
textboxLayout="default" textboxLayout="default"
@@ -213,13 +204,13 @@ export default function KazkovyyDimPage() {
gridVariant="three-columns-all-equal-width" gridVariant="three-columns-all-equal-width"
products={[ products={[
{ {
id: "1", name: "Grilled Pork Ribs", price: "$45/kg", imageSrc: "https://img.b2bpic.net/free-photo/side-view-roasted-meat-pieces-wooden-board_141793-1393.jpg", imageAlt: "Fire-roasted pork ribs", initialQuantity: 1 id: "1", name: "Посмажене на вогні реберце", price: "$45/кг", imageSrc: "https://img.b2bpic.net/free-photo/side-view-roasted-meat-pieces-wooden-board_141793-1393.jpg", imageAlt: "Посмажене на вогні реберце", initialQuantity: 1
}, },
{ {
id: "2", name: "Smoked Chicken Feast", price: "$38/kg", imageSrc: "https://img.b2bpic.net/free-photo/side-view-lamb-kebab-grilled-lamb-ribs-with-lettuce-tomato-greens-red-onion-grilled-corn-dried-barberry-glass-red-wine-table_141793-4982.jpg", imageAlt: "Smoked chicken portions", initialQuantity: 1 id: "2", name: "Копчена курячаня гірлянда", price: "$38/кг", imageSrc: "https://img.b2bpic.net/free-photo/side-view-lamb-kebab-grilled-lamb-ribs-with-lettuce-tomato-greens-red-onion-grilled-corn-dried-barberry-glass-red-wine-table_141793-4982.jpg", imageAlt: "Копчена курячаня порція", initialQuantity: 1
}, },
{ {
id: "3", name: "Traditional Kebab Mix", price: "$52/kg", imageSrc: "https://img.b2bpic.net/free-photo/kebab-served-with-chopped-onion-piece-lemon-red-wine_140725-4164.jpg", imageAlt: "Assorted fire-roasted kebabs", initialQuantity: 1 id: "3", name: "Традиційний мікс шашличка", price: "$52/кг", imageSrc: "https://img.b2bpic.net/free-photo/kebab-served-with-chopped-onion-piece-lemon-red-wine_140725-4164.jpg", imageAlt: "Асортиментний посмажений на вогні шашличок", initialQuantity: 1
} }
]} ]}
className="py-16 lg:py-24" className="py-16 lg:py-24"
@@ -227,17 +218,51 @@ export default function KazkovyyDimPage() {
textBoxTitleClassName="text-4xl md:text-5xl font-bold text-foreground" textBoxTitleClassName="text-4xl md:text-5xl font-bold text-foreground"
textBoxDescriptionClassName="text-lg text-foreground/80" textBoxDescriptionClassName="text-lg text-foreground/80"
buttons={[{ buttons={[{
text: "Order Now", onClick: () => setIsModalOpen(true) text: "Замовити зараз", onClick: () => setIsModalOpen(true)
}]} }]}
buttonAnimation="slide-up" buttonAnimation="slide-up"
/> />
</div> </div>
<div id="faq" data-section="faq">
<FaqSplitText
faqs={[
{
id: "1", title: "Яка вартість оренди простору для бенкету?", content: "Вартість оренди залежить від розміру площадки, дати та тривалості заходу. Головна бенкетна зала для 80+ гостей має базову ставку, а VIP приватна кімната має преміум цінування. Зв'яжіться з нами для детального кошторису."
},
{
id: "2", title: "Чи доступна кейтеринг та послуга доставки?", content: "Так, ми пропонуємо комплексні кейтеринг послуги та доставку. Наші меню включають традиційні українські страви та посмажене на вогні м'ясо. Доставка доступна в межах міста та прилеглих районів."
},
{
id: "3", title: "Скільки людей може розместити найбільша зала?", content: "Наша головна бенкетна зала вміщує 80+ гостей, а другий поверх можна налаштувати для більших святкувань. Зв'яжіться з нами для деталей щодо максимальної кількості людей та гнучких розташувань."
},
{
id: "4", title: "Чи є детальні зони для дітей на заходах?", content: "Так, у нас є виділена дитяча кімната зі спеціальним наглядом та розвагами. Це дозволяє дорослим насолоджуватися святкуванням, поки діти знаходяться в безпечному, контрольованому середовищі."
},
{
id: "5", title: "Яких типів святкувань ви приймаєте?", content: "Ми приймаємо весілля, дні народження, ювілеї, корпоративні заходи, сімейні зібрання та інші спеціальні випадки. Кожен захід розроблюється персоналізовано, щоб відповідати вашим унікальним потребам."
},
{
id: "6", title: "Як забронювати послугу або дізнатися більше?", content: "Ви можете зв'язатися з нами через форму контакту на нашому сайті, виконавши замовлення на столик, або звернутися безпосередньо. Наша команда готова обговорити деталі вашого заходу та надати рекомендації."
}
]}
sideTitle="Часто задавані питання"
sideDescription="Все, що вам потрібно знати про святкування в Солі Землі"
useInvertedBackground={true}
faqsAnimation="slide-up"
textPosition="left"
className="py-16 lg:py-24"
containerClassName="max-w-7xl"
sideTitleClassName="text-4xl md:text-5xl font-bold text-foreground"
sideDescriptionClassName="text-lg text-foreground/80"
/>
</div>
<div id="testimonials" data-section="testimonials"> <div id="testimonials" data-section="testimonials">
<TestimonialCardTwo <TestimonialCardTwo
title="Voices of Our Guests" title="Голоси наших гостей"
description="Hear from families and event organizers who have celebrated with us." description="Слухайте від сімей та організаторів заходів, які святкували разом з нами."
tag="Testimonials" tag="Відгуки"
tagIcon={Quote} tagIcon={Quote}
tagAnimation="slide-up" tagAnimation="slide-up"
textboxLayout="default" textboxLayout="default"
@@ -245,16 +270,16 @@ export default function KazkovyyDimPage() {
animationType="slide-up" animationType="slide-up"
testimonials={[ testimonials={[
{ {
id: "1", name: "Oksana Kovalenko", role: "Wedding Host", testimonial: "Kazkovyy Dim transformed our wedding dreams into reality. The authentic atmosphere, delicious food, and warmth of the staff made our day truly magical. Our guests still talk about it!", imageSrc: "https://img.b2bpic.net/free-photo/smiling-senior-businessman-sitting-stairs_1262-3109.jpg", imageAlt: "Oksana Kovalenko" id: "1", name: "Оксана Коваленко", role: "Організаторка весілля", testimonial: "Сіль Землі втілила наші весільні мрії в реальність. Автентична атмосфера, смачна їжа та теплота персоналу зробили наш день справді чарівним. Наші гості все ще про нього говорять!", imageSrc: "https://img.b2bpic.net/free-photo/smiling-senior-businessman-sitting-stairs_1262-3109.jpg", imageAlt: "Оксана Коваленко"
}, },
{ {
id: "2", name: "Dmitri Petrov", role: "Corporate Event Organizer", testimonial: "The versatile spaces and professional service made our company celebration perfect. From the main hall setup to the catering, everything exceeded expectations. Highly recommended!", imageSrc: "https://img.b2bpic.net/free-photo/black-businessman-happy-expression_1194-2533.jpg", imageAlt: "Dmitri Petrov" id: "2", name: "Дмитро Петров", role: "Організатор корпоративних заходів", testimonial: "Універсальні простори та професійний сервіс зробили наше святкування компанії ідеальним. Від організації головного залу до кейтерингу все перевищило очікування. Дуже рекомендую!", imageSrc: "https://img.b2bpic.net/free-photo/black-businessman-happy-expression_1194-2533.jpg", imageAlt: "Дмитро Петров"
}, },
{ {
id: "3", name: "Maria Shevchenko", role: "Family Celebration Planner", testimonial: "Three generations celebrated our family anniversary here. The kids loved the dedicated space, adults enjoyed the relaxed lounge, and everyone appreciated the home-like comfort. Simply wonderful!", imageSrc: "https://img.b2bpic.net/free-photo/attractive-blond-business-woman-white-shirt-eyeglasses-crossed-arms-grey-background_613910-11786.jpg", imageAlt: "Maria Shevchenko" id: "3", name: "Марія Шевченко", role: "Організаторка сімейних святкувань", testimonial: "Три покоління святкували наш сімейний ювілей тут. Дітям сподобалася виділена кімната, дорослим - розслаблене лаунжу, і всім подобалося домашнє теплоти комфорту. Просто чудово!", imageSrc: "https://img.b2bpic.net/free-photo/attractive-blond-business-woman-white-shirt-eyeglasses-crossed-arms-grey-background_613910-11786.jpg", imageAlt: "Марія Шевченко"
}, },
{ {
id: "4", name: "Ivan Zelensky", role: "Regular Guest", testimonial: "We've hosted countless events here over the years. The consistency in quality, warmth, and authenticity keeps us coming back. This is where real Ukrainian hospitality lives.", imageSrc: "https://img.b2bpic.net/free-photo/successful-senior-businessman-standing-window_1262-3120.jpg", imageAlt: "Ivan Zelensky" id: "4", name: "Іван Зеленський", role: "Постійний гість", testimonial: "Ми провели тут безліч заходів протягом років. Послідовність якості, теплоти та автентичності постійно нас повертає. Тут живе справжнє українське гостинство.", imageSrc: "https://img.b2bpic.net/free-photo/successful-senior-businessman-standing-window_1262-3120.jpg", imageAlt: "Іван Зеленський"
} }
]} ]}
className="py-16 lg:py-24" className="py-16 lg:py-24"
@@ -266,32 +291,32 @@ export default function KazkovyyDimPage() {
<div id="contacts" data-section="contacts"> <div id="contacts" data-section="contacts">
<ContactSplitForm <ContactSplitForm
title="Get in Touch With Us" title="Зв'яжіться з нами"
description="Ready to celebrate your special moment at Kazkovyy Dim? Reach out to our team to discuss your event, ask questions, or make a reservation. We're here to make your gathering unforgettable." description="Готові святкувати ваш спеціальний момент у Солі Землі? Звернітися до нашої команди, щоб обговорити ваш захід, поставити запитання чи зробити резервування. Ми тут, щоб зробити вашу зустріч незабутною."
inputs={[ inputs={[
{ {
name: "name", type: "text", placeholder: "Your Full Name", required: true name: "name", type: "text", placeholder: "Ваше повне ім'я", required: true
}, },
{ {
name: "email", type: "email", placeholder: "your@email.com", required: true name: "email", type: "email", placeholder: "ваша@пошта.com", required: true
}, },
{ {
name: "phone", type: "tel", placeholder: "+380 (XX) XXXX-XXXX", required: true name: "phone", type: "tel", placeholder: "+380 (XX) XXXX-XXXX", required: true
}, },
{ {
name: "eventDate", type: "date", placeholder: "Preferred Event Date", required: false name: "eventDate", type: "date", placeholder: "Бажана дата заходу", required: false
} }
]} ]}
textarea={{ textarea={{
name: "message", placeholder: "Tell us about your event, venue preference, and any special requests...", rows: 5, name: "message", placeholder: "Розповідіть нам про ваш захід, вибір площадки та будь-які спеціальні запити...", rows: 5,
required: true required: true
}} }}
useInvertedBackground={false} useInvertedBackground={false}
imageSrc="https://img.b2bpic.net/free-photo/christmas-interior-decorated-with-christmas-wreath-made-fir-branches-two-armchairs-genuine-animal-fur-floor-front-electric-fireplace_132075-6151.jpg" imageSrc="https://img.b2bpic.net/free-photo/christmas-interior-decorated-with-christmas-wreath-made-fir-branches-two-armchairs-genuine-animal-fur-floor-front-electric-fireplace_132075-6151.jpg"
imageAlt="Warm gathering at Kazkovyy Dim" imageAlt="Тепла зустріч у Солі Землі"
mediaAnimation="slide-up" mediaAnimation="slide-up"
mediaPosition="right" mediaPosition="right"
buttonText="Send Inquiry" buttonText="Надіслати запит"
className="py-16 lg:py-24" className="py-16 lg:py-24"
containerClassName="max-w-7xl" containerClassName="max-w-7xl"
titleClassName="text-4xl md:text-5xl font-bold text-foreground" titleClassName="text-4xl md:text-5xl font-bold text-foreground"
@@ -303,32 +328,32 @@ export default function KazkovyyDimPage() {
<div id="footer" data-section="footer"> <div id="footer" data-section="footer">
<FooterMedia <FooterMedia
imageSrc="https://img.b2bpic.net/free-photo/young-woman-burning-fireplace-with-matchstick-home_23-2147904496.jpg" imageSrc="https://img.b2bpic.net/free-photo/young-woman-burning-fireplace-with-matchstick-home_23-2147904496.jpg"
imageAlt="Natural wooden texture background" imageAlt="Природна дерев'яна текстура фону"
logoText="Kazkovyy Dim" logoText="Сіль Землі"
copyrightText="© 2025 Kazkovyy Dim. All rights reserved. | Authentic Ukrainian Hospitality Since Tradition." copyrightText="© 2025 Сіль Землі. Всі права захищені. | Автентичне українське гостинство Традицією."
columns={[ columns={[
{ {
title: "Locations", items: [ title: "Локації", items: [
{ label: "Main Hall", href: "#banquets" }, { label: "Головний зал", href: "#banquets" },
{ label: "VIP Room", href: "#banquets" }, { label: "VIP кімната", href: "#banquets" },
{ label: "Lounge Zone", href: "#banquets" }, { label: "Зона лаунжу", href: "#banquets" },
{ label: "Terrace", href: "#banquets" } { label: "Тераса", href: "#banquets" }
] ]
}, },
{ {
title: "Services", items: [ title: "Послуги", items: [
{ label: "Banquet Planning", href: "#banquets" }, { label: "Планування бенкетів", href: "#banquets" },
{ label: "Catering & Delivery", href: "#delivery" }, { label: "Кейтеринг та доставка", href: "#delivery" },
{ label: "Menu", href: "#menu" }, { label: "Меню", href: "#menu" },
{ label: "Reservation", href: "#contacts" } { label: "Резервування", href: "#contacts" }
] ]
}, },
{ {
title: "Contact", items: [ title: "Контакт", items: [
{ label: "Phone: +380 (44) 123-4567", href: "tel:+380441234567" }, { label: "Телефон: +380 (44) 123-4567", href: "tel:+380441234567" },
{ label: "Email: info@kazkovyydim.ua", href: "mailto:info@kazkovyydim.ua" }, { label: "Пошта: info@silzemli.ua", href: "mailto:info@silzemli.ua" },
{ label: "Hours: Daily 12:00 - 23:00", href: "#" }, { label: "Час роботи: Щодня 12:00 - 23:00", href: "#" },
{ label: "Address: Kyiv, Ukraine", href: "#" } { label: "Адреса: Київ, Україна", href: "#" }
] ]
} }
]} ]}
@@ -350,19 +375,19 @@ export default function KazkovyyDimPage() {
<X className="w-6 h-6 text-foreground" /> <X className="w-6 h-6 text-foreground" />
</button> </button>
<h2 className="text-2xl md:text-3xl font-bold text-foreground mb-2">Book a Table</h2> <h2 className="text-2xl md:text-3xl font-bold text-foreground mb-2">Замовити стіл</h2>
<p className="text-foreground/70 text-sm mb-6">Reserve your special moment at Kazkovyy Dim</p> <p className="text-foreground/70 text-sm mb-6">Зарезервуйте ваш спеціальний момент у Солі Землі</p>
<form onSubmit={handleSubmit} className="space-y-4"> <form onSubmit={handleSubmit} className="space-y-4">
<div> <div>
<label htmlFor="modal-name" className="block text-sm font-medium text-foreground mb-2"> <label htmlFor="modal-name" className="block text-sm font-medium text-foreground mb-2">
Full Name * Повне ім'я *
</label> </label>
<input <input
id="modal-name" id="modal-name"
type="text" type="text"
name="name" name="name"
placeholder="Your Full Name" placeholder="Ваше повне ім'я"
value={formData.name} value={formData.name}
onChange={handleInputChange} onChange={handleInputChange}
required required
@@ -372,13 +397,13 @@ export default function KazkovyyDimPage() {
<div> <div>
<label htmlFor="modal-email" className="block text-sm font-medium text-foreground mb-2"> <label htmlFor="modal-email" className="block text-sm font-medium text-foreground mb-2">
Email Address * Адреса електронної пошти *
</label> </label>
<input <input
id="modal-email" id="modal-email"
type="email" type="email"
name="email" name="email"
placeholder="your@email.com" placeholder="ваша@пошта.com"
value={formData.email} value={formData.email}
onChange={handleInputChange} onChange={handleInputChange}
required required
@@ -388,7 +413,7 @@ export default function KazkovyyDimPage() {
<div> <div>
<label htmlFor="modal-phone" className="block text-sm font-medium text-foreground mb-2"> <label htmlFor="modal-phone" className="block text-sm font-medium text-foreground mb-2">
Phone Number * Номер телефону *
</label> </label>
<input <input
id="modal-phone" id="modal-phone"
@@ -404,7 +429,7 @@ export default function KazkovyyDimPage() {
<div> <div>
<label htmlFor="modal-date" className="block text-sm font-medium text-foreground mb-2"> <label htmlFor="modal-date" className="block text-sm font-medium text-foreground mb-2">
Preferred Event Date Бажана дата заходу
</label> </label>
<input <input
id="modal-date" id="modal-date"
@@ -418,13 +443,13 @@ export default function KazkovyyDimPage() {
<div> <div>
<label htmlFor="modal-guests" className="block text-sm font-medium text-foreground mb-2"> <label htmlFor="modal-guests" className="block text-sm font-medium text-foreground mb-2">
Number of Guests Кількість гостей
</label> </label>
<input <input
id="modal-guests" id="modal-guests"
type="number" type="number"
name="guestCount" name="guestCount"
placeholder="Expected number of guests" placeholder="Очікувана кількість гостей"
value={formData.guestCount} value={formData.guestCount}
onChange={handleInputChange} onChange={handleInputChange}
className="w-full px-4 py-2 rounded-soft bg-background border border-accent/20 text-foreground placeholder-foreground/50 focus:outline-none focus:border-primary-cta transition-colors" className="w-full px-4 py-2 rounded-soft bg-background border border-accent/20 text-foreground placeholder-foreground/50 focus:outline-none focus:border-primary-cta transition-colors"
@@ -433,12 +458,12 @@ export default function KazkovyyDimPage() {
<div> <div>
<label htmlFor="modal-message" className="block text-sm font-medium text-foreground mb-2"> <label htmlFor="modal-message" className="block text-sm font-medium text-foreground mb-2">
Additional Details Додаткова інформація
</label> </label>
<textarea <textarea
id="modal-message" id="modal-message"
name="message" name="message"
placeholder="Tell us about your event, venue preference, and any special requests..." placeholder="Розповідіть нам про ваш захід, вибір площадки та будь-які спеціальні запити..."
value={formData.message} value={formData.message}
onChange={handleInputChange} onChange={handleInputChange}
rows={4} rows={4}
@@ -452,13 +477,13 @@ export default function KazkovyyDimPage() {
onClick={() => setIsModalOpen(false)} onClick={() => setIsModalOpen(false)}
className="flex-1 px-4 py-2 rounded-soft bg-background border border-accent/20 text-foreground hover:bg-accent/10 transition-colors" className="flex-1 px-4 py-2 rounded-soft bg-background border border-accent/20 text-foreground hover:bg-accent/10 transition-colors"
> >
Cancel Скасувати
</button> </button>
<button <button
type="submit" type="submit"
className="flex-1 px-4 py-2 rounded-soft bg-primary-cta hover:bg-accent text-white font-medium transition-colors" className="flex-1 px-4 py-2 rounded-soft bg-primary-cta hover:bg-accent text-white font-medium transition-colors"
> >
Send Booking Надіслати замовлення
</button> </button>
</div> </div>
</form> </form>

View File

@@ -2,21 +2,21 @@
/* Base units */ /* Base units */
/* --vw is set by ThemeProvider */ /* --vw is set by ThemeProvider */
/* --background: #010912;;;;;;; /* --background: #d4a574;;;;;;;
--card: #152840;;;;;;; --card: #e8c4a0;;;;;;;
--foreground: #e6f0ff;;;;;;; --foreground: #2b1810;;;;;;;
--primary-cta: #cee7ff;;;;;;; --primary-cta: #8b5a2b;;;;;;;
--secondary-cta: #0e1a29;;;;;;; --secondary-cta: #f5deb3;;;;;;;
--accent: #3f5c79;;;;;;; --accent: #d4a574;;;;;;;
--background-accent: #004a93;;;;;;; */ --background-accent: #c19a6b;;;;;;; */
--background: #010912;;;;;;; --background: #d4a574;;;;;;;
--card: #152840;;;;;;; --card: #e8c4a0;;;;;;;
--foreground: #e6f0ff;;;;;;; --foreground: #2b1810;;;;;;;
--primary-cta: #cee7ff;;;;;;; --primary-cta: #8b5a2b;;;;;;;
--secondary-cta: #0e1a29;;;;;;; --secondary-cta: #f5deb3;;;;;;;
--accent: #3f5c79;;;;;;; --accent: #d4a574;;;;;;;
--background-accent: #004a93;;;;;;; --background-accent: #c19a6b;;;;;;;
/* text sizing - set by ThemeProvider */ /* text sizing - set by ThemeProvider */
/* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem); /* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem);