feat: integrate Framer Motion scroll entrance animations for Heritage Story, Menu Items, Chef Showcase details, and Events Accordion sections
This commit is contained in:
parent
21d327d33c
commit
899400173d
@ -145,7 +145,13 @@ export default function ChefShowcase() {
|
|||||||
<div className="grid grid-cols-1 lg:grid-cols-12 gap-12 lg:gap-16 items-center">
|
<div className="grid grid-cols-1 lg:grid-cols-12 gap-12 lg:gap-16 items-center">
|
||||||
|
|
||||||
{/* Left Column: Chef Details */}
|
{/* Left Column: Chef Details */}
|
||||||
<div className="lg:col-span-7 flex flex-col items-center lg:items-start text-center lg:text-left justify-center select-text">
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: -45 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true, margin: "-100px" }}
|
||||||
|
transition={{ duration: 0.8, ease: "easeOut" }}
|
||||||
|
className="lg:col-span-7 flex flex-col items-center lg:items-start text-center lg:text-left justify-center select-text"
|
||||||
|
>
|
||||||
|
|
||||||
<div className="flex flex-col items-center lg:items-start mb-2">
|
<div className="flex flex-col items-center lg:items-start mb-2">
|
||||||
<ChefLotusOrnament />
|
<ChefLotusOrnament />
|
||||||
@ -187,10 +193,16 @@ export default function ChefShowcase() {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Right Column: Chef Cooking Portrait with Overlay Badge */}
|
{/* Right Column: Chef Cooking Portrait with Overlay Badge */}
|
||||||
<div className="lg:col-span-5 flex justify-center relative">
|
<motion.div
|
||||||
|
initial={{ opacity: 0, scale: 0.95, y: 30 }}
|
||||||
|
whileInView={{ opacity: 1, scale: 1, y: 0 }}
|
||||||
|
viewport={{ once: true, margin: "-100px" }}
|
||||||
|
transition={{ duration: 0.85, ease: "easeOut" }}
|
||||||
|
className="lg:col-span-5 flex justify-center relative"
|
||||||
|
>
|
||||||
|
|
||||||
{/* 30+ Years Experience Badge Overlay */}
|
{/* 30+ Years Experience Badge Overlay */}
|
||||||
<div className="absolute -top-6 -right-6 w-24 h-24 sm:w-28 sm:h-28 rounded-full border border-[#bc9e65]/80 bg-black/45 backdrop-blur-md z-30 shadow-2xl flex flex-col items-center justify-center text-center p-3 select-none pointer-events-none">
|
<div className="absolute -top-6 -right-6 w-24 h-24 sm:w-28 sm:h-28 rounded-full border border-[#bc9e65]/80 bg-black/45 backdrop-blur-md z-30 shadow-2xl flex flex-col items-center justify-center text-center p-3 select-none pointer-events-none">
|
||||||
@ -224,12 +236,18 @@ export default function ChefShowcase() {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</motion.div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Middle Highlights Card Section */}
|
{/* Middle Highlights Card Section */}
|
||||||
<div className="bg-black/25 backdrop-blur-sm border border-[#d8c396]/30 rounded-2xl p-6 sm:p-8 mt-4 shadow-2xl relative z-10 divide-y md:divide-y-0 md:divide-x divide-[#d8c396]/20 grid grid-cols-2 md:grid-cols-4 gap-6 md:gap-0 select-text">
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 25 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.7, delay: 0.1, ease: "easeOut" }}
|
||||||
|
className="bg-black/25 backdrop-blur-sm border border-[#d8c396]/30 rounded-2xl p-6 sm:p-8 mt-4 shadow-2xl relative z-10 divide-y md:divide-y-0 md:divide-x divide-[#d8c396]/20 grid grid-cols-2 md:grid-cols-4 gap-6 md:gap-0 select-text"
|
||||||
|
>
|
||||||
|
|
||||||
{/* Feature 1: Authentic Recipes */}
|
{/* Feature 1: Authentic Recipes */}
|
||||||
<div className="flex flex-col items-center text-center px-4 py-3 md:py-0 select-text">
|
<div className="flex flex-col items-center text-center px-4 py-3 md:py-0 select-text">
|
||||||
@ -274,13 +292,19 @@ export default function ChefShowcase() {
|
|||||||
<p className="font-sans text-[10px] sm:text-[11px] text-stone-300 leading-relaxed max-w-[150px] mx-auto">Every dish is prepared with care, devotion & warmth.</p>
|
<p className="font-sans text-[10px] sm:text-[11px] text-stone-300 leading-relaxed max-w-[150px] mx-auto">Every dish is prepared with care, devotion & warmth.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Bottom Section: Quote on the Left & Spices Parchment Card on the Right */}
|
{/* Bottom Section: Quote on the Left & Spices Parchment Card on the Right */}
|
||||||
<div className="grid grid-cols-1 lg:grid-cols-12 gap-12 lg:gap-16 items-center mt-6">
|
<div className="grid grid-cols-1 lg:grid-cols-12 gap-12 lg:gap-16 items-center mt-6">
|
||||||
|
|
||||||
{/* Bottom Left: Gopuram Sketch Background & Large Narrative Quote */}
|
{/* Bottom Left: Gopuram Sketch Background & Large Narrative Quote */}
|
||||||
<div className="lg:col-span-5 relative flex flex-col justify-center min-h-[160px] pl-4 sm:pl-6 select-text">
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: -35 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.8, ease: "easeOut" }}
|
||||||
|
className="lg:col-span-5 relative flex flex-col justify-center min-h-[160px] pl-4 sm:pl-6 select-text"
|
||||||
|
>
|
||||||
{/* Quote details */}
|
{/* Quote details */}
|
||||||
<div className="relative z-10 select-text text-left">
|
<div className="relative z-10 select-text text-left">
|
||||||
<span className="text-[#c62828] text-7xl font-serif leading-none select-none block -mb-4">“</span>
|
<span className="text-[#c62828] text-7xl font-serif leading-none select-none block -mb-4">“</span>
|
||||||
@ -297,10 +321,16 @@ export default function ChefShowcase() {
|
|||||||
<div className="h-[1px] flex-1 bg-gradient-to-l from-[#bc9e65] to-transparent" />
|
<div className="h-[1px] flex-1 bg-gradient-to-l from-[#bc9e65] to-transparent" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Bottom Right: Spices Parchment Card */}
|
{/* Bottom Right: Spices Parchment Card */}
|
||||||
<div className="lg:col-span-7 flex justify-end">
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: 35 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.8, ease: "easeOut" }}
|
||||||
|
className="lg:col-span-7 flex justify-end"
|
||||||
|
>
|
||||||
<div className="w-full max-w-[620px] relative bg-[#fdfcf7]/95 border border-[#d8c396]/55 rounded-none p-5 sm:p-8 min-h-[160px] shadow-[0_15px_30px_rgba(0,0,0,0.5)] flex flex-col justify-center overflow-visible select-text text-left">
|
<div className="w-full max-w-[620px] relative bg-[#fdfcf7]/95 border border-[#d8c396]/55 rounded-none p-5 sm:p-8 min-h-[160px] shadow-[0_15px_30px_rgba(0,0,0,0.5)] flex flex-col justify-center overflow-visible select-text text-left">
|
||||||
|
|
||||||
{/* Inner border line overlay */}
|
{/* Inner border line overlay */}
|
||||||
@ -340,7 +370,7 @@ export default function ChefShowcase() {
|
|||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</motion.div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
import { motion } from "framer-motion";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
|
|
||||||
// Custom Ornate Gold Category SVG Icons
|
// Custom Ornate Gold Category SVG Icons
|
||||||
@ -150,7 +151,13 @@ export default function EventsAccordion() {
|
|||||||
<div className="container max-w-6xl mx-auto relative z-10 flex flex-col h-full">
|
<div className="container max-w-6xl mx-auto relative z-10 flex flex-col h-full">
|
||||||
|
|
||||||
{/* Title Block Header */}
|
{/* Title Block Header */}
|
||||||
<div className="mb-12 flex flex-col items-center text-center select-text">
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 35 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true, margin: "-80px" }}
|
||||||
|
transition={{ duration: 0.75, ease: "easeOut" }}
|
||||||
|
className="mb-12 flex flex-col items-center text-center select-text"
|
||||||
|
>
|
||||||
{/* Gold Star/Diamond Emblem header */}
|
{/* Gold Star/Diamond Emblem header */}
|
||||||
<div className="flex flex-col items-center mb-2 pointer-events-none select-none">
|
<div className="flex flex-col items-center mb-2 pointer-events-none select-none">
|
||||||
<svg className="w-5 h-5 text-[#bc9e65] mb-2" viewBox="0 0 24 24" fill="currentColor">
|
<svg className="w-5 h-5 text-[#bc9e65] mb-2" viewBox="0 0 24 24" fill="currentColor">
|
||||||
@ -184,10 +191,16 @@ export default function EventsAccordion() {
|
|||||||
<p className="font-sans text-xs sm:text-sm text-stone-700 leading-relaxed tracking-wider max-w-xl mx-auto">
|
<p className="font-sans text-xs sm:text-sm text-stone-700 leading-relaxed tracking-wider max-w-xl mx-auto">
|
||||||
From intimate royal gatherings to grand celebrations, experience curated culinary journeys that leave lasting impressions.
|
From intimate royal gatherings to grand celebrations, experience curated culinary journeys that leave lasting impressions.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Horizontal Accordion Track */}
|
{/* Horizontal Accordion Track */}
|
||||||
<div className="flex flex-col lg:flex-row gap-5 h-[620px] lg:h-[460px] w-full items-stretch relative z-20">
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 30 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.8, delay: 0.1, ease: "easeOut" }}
|
||||||
|
className="flex flex-col lg:flex-row gap-5 h-[620px] lg:h-[460px] w-full items-stretch relative z-20"
|
||||||
|
>
|
||||||
{events.map((event, idx) => {
|
{events.map((event, idx) => {
|
||||||
const isActive = idx === activeIdx;
|
const isActive = idx === activeIdx;
|
||||||
const CategoryIcon = event.icon;
|
const CategoryIcon = event.icon;
|
||||||
@ -322,7 +335,7 @@ export default function EventsAccordion() {
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</motion.div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@ -97,10 +97,13 @@ const CategoryPill = ({ tag, type }: { tag: string; type: "green" | "gold" | "or
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const MenuItemCard = ({ name, desc, tag, type, img }: MenuItemProps) => (
|
const MenuItemCard = ({ name, desc, tag, type, img, index }: MenuItemProps & { index: number }) => (
|
||||||
<motion.div
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true, margin: "-50px" }}
|
||||||
|
transition={{ duration: 0.5, delay: (index % 5) * 0.08, ease: "easeOut" }}
|
||||||
whileHover={{ y: -2, scale: 1.01 }}
|
whileHover={{ y: -2, scale: 1.01 }}
|
||||||
transition={{ duration: 0.25 }}
|
|
||||||
className="group relative bg-[#fdfcf9] border border-[#d8c396]/45 rounded-none p-4 pl-22 pr-4 min-h-[96px] shadow-[0_4px_12px_rgba(10,74,43,0.03)] hover:shadow-[0_8px_20px_rgba(10,74,43,0.07)] hover:border-[#bc9e65] flex flex-col justify-center select-text overflow-visible"
|
className="group relative bg-[#fdfcf9] border border-[#d8c396]/45 rounded-none p-4 pl-22 pr-4 min-h-[96px] shadow-[0_4px_12px_rgba(10,74,43,0.03)] hover:shadow-[0_8px_20px_rgba(10,74,43,0.07)] hover:border-[#bc9e65] flex flex-col justify-center select-text overflow-visible"
|
||||||
>
|
>
|
||||||
{/* Inner decorative inset line */}
|
{/* Inner decorative inset line */}
|
||||||
@ -319,14 +322,14 @@ export default function MenuPreview() {
|
|||||||
{/* Left Column Item Cards */}
|
{/* Left Column Item Cards */}
|
||||||
<div className="flex flex-col gap-6 pl-2 pr-2 md:pl-4">
|
<div className="flex flex-col gap-6 pl-2 pr-2 md:pl-4">
|
||||||
{leftColumnItems.map((item, index) => (
|
{leftColumnItems.map((item, index) => (
|
||||||
<MenuItemCard key={index} {...item} />
|
<MenuItemCard key={index} {...item} index={index} />
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Right Column Item Cards */}
|
{/* Right Column Item Cards */}
|
||||||
<div className="flex flex-col gap-6 pl-2 pr-2 md:pr-4">
|
<div className="flex flex-col gap-6 pl-2 pr-2 md:pr-4">
|
||||||
{rightColumnItems.map((item, index) => (
|
{rightColumnItems.map((item, index) => (
|
||||||
<MenuItemCard key={index} {...item} />
|
<MenuItemCard key={index} {...item} index={index} />
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
|
import { motion } from "framer-motion";
|
||||||
|
|
||||||
const StoryPreTitleOrnament = () => (
|
const StoryPreTitleOrnament = () => (
|
||||||
<svg className="w-4 h-4 text-[#bc9e65] mb-2" viewBox="0 0 24 24" fill="currentColor">
|
<svg className="w-4 h-4 text-[#bc9e65] mb-2" viewBox="0 0 24 24" fill="currentColor">
|
||||||
@ -38,7 +39,13 @@ export default function RestaurantStory() {
|
|||||||
<div className="max-w-7xl mx-auto flex flex-col lg:flex-row items-center justify-between gap-12 lg:gap-8 relative z-10">
|
<div className="max-w-7xl mx-auto flex flex-col lg:flex-row items-center justify-between gap-12 lg:gap-8 relative z-10">
|
||||||
|
|
||||||
{/* Left Side: Story & Features Details (Fully Center-Aligned) */}
|
{/* Left Side: Story & Features Details (Fully Center-Aligned) */}
|
||||||
<div className="w-full lg:w-[50%] flex flex-col items-center text-center justify-center">
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: 35 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true, margin: "-80px" }}
|
||||||
|
transition={{ duration: 0.75, ease: "easeOut" }}
|
||||||
|
className="w-full lg:w-[50%] flex flex-col items-center text-center justify-center"
|
||||||
|
>
|
||||||
|
|
||||||
{/* Pre-title with Gold Crest */}
|
{/* Pre-title with Gold Crest */}
|
||||||
<div className="flex flex-col items-center mb-2">
|
<div className="flex flex-col items-center mb-2">
|
||||||
@ -69,7 +76,13 @@ export default function RestaurantStory() {
|
|||||||
<div className="grid grid-cols-2 sm:grid-cols-4 gap-6 sm:gap-4 w-full mt-4">
|
<div className="grid grid-cols-2 sm:grid-cols-4 gap-6 sm:gap-4 w-full mt-4">
|
||||||
|
|
||||||
{/* Feature 1: Veg */}
|
{/* Feature 1: Veg */}
|
||||||
<div className="flex flex-col items-center text-center group select-text">
|
<motion.div
|
||||||
|
initial={{ opacity: 0, scale: 0.9, y: 15 }}
|
||||||
|
whileInView={{ opacity: 1, scale: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: 0.1, ease: "easeOut" }}
|
||||||
|
className="flex flex-col items-center text-center group select-text"
|
||||||
|
>
|
||||||
<div className="w-14 h-14 rounded-full border border-[#d8c396] flex items-center justify-center mb-3 bg-[#fcfaf2]/70 shadow-sm transition-transform duration-300 group-hover:scale-110 pointer-events-none select-none">
|
<div className="w-14 h-14 rounded-full border border-[#d8c396] flex items-center justify-center mb-3 bg-[#fcfaf2]/70 shadow-sm transition-transform duration-300 group-hover:scale-110 pointer-events-none select-none">
|
||||||
<svg className="w-6 h-6 text-[#188754]" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round">
|
<svg className="w-6 h-6 text-[#188754]" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round">
|
||||||
<circle cx="12" cy="12" r="10" />
|
<circle cx="12" cy="12" r="10" />
|
||||||
@ -84,10 +97,16 @@ export default function RestaurantStory() {
|
|||||||
<p className="font-sans text-[10px] sm:text-[11px] text-stone-550 leading-relaxed max-w-[130px] mx-auto">
|
<p className="font-sans text-[10px] sm:text-[11px] text-stone-550 leading-relaxed max-w-[130px] mx-auto">
|
||||||
Pure vegetarian food made with the finest ingredients.
|
Pure vegetarian food made with the finest ingredients.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Feature 2: Recipes */}
|
{/* Feature 2: Recipes */}
|
||||||
<div className="flex flex-col items-center text-center group select-text">
|
<motion.div
|
||||||
|
initial={{ opacity: 0, scale: 0.9, y: 15 }}
|
||||||
|
whileInView={{ opacity: 1, scale: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: 0.2, ease: "easeOut" }}
|
||||||
|
className="flex flex-col items-center text-center group select-text"
|
||||||
|
>
|
||||||
<div className="w-14 h-14 rounded-full border border-[#d8c396] flex items-center justify-center mb-3 bg-[#fcfaf2]/70 shadow-sm transition-transform duration-300 group-hover:scale-110 pointer-events-none select-none">
|
<div className="w-14 h-14 rounded-full border border-[#d8c396] flex items-center justify-center mb-3 bg-[#fcfaf2]/70 shadow-sm transition-transform duration-300 group-hover:scale-110 pointer-events-none select-none">
|
||||||
<svg className="w-6 h-6 text-[#bc9e65]" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8">
|
<svg className="w-6 h-6 text-[#bc9e65]" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8">
|
||||||
<path d="M4 10h16c0 5-2.5 8-8 8s-8-3-8-8z" />
|
<path d="M4 10h16c0 5-2.5 8-8 8s-8-3-8-8z" />
|
||||||
@ -102,10 +121,16 @@ export default function RestaurantStory() {
|
|||||||
<p className="font-sans text-[10px] sm:text-[11px] text-stone-550 leading-relaxed max-w-[130px] mx-auto">
|
<p className="font-sans text-[10px] sm:text-[11px] text-stone-550 leading-relaxed max-w-[130px] mx-auto">
|
||||||
Traditional recipes crafted with authentic South Indian flavors.
|
Traditional recipes crafted with authentic South Indian flavors.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Feature 3: Hospitality */}
|
{/* Feature 3: Hospitality */}
|
||||||
<div className="flex flex-col items-center text-center group select-text">
|
<motion.div
|
||||||
|
initial={{ opacity: 0, scale: 0.9, y: 15 }}
|
||||||
|
whileInView={{ opacity: 1, scale: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: 0.3, ease: "easeOut" }}
|
||||||
|
className="flex flex-col items-center text-center group select-text"
|
||||||
|
>
|
||||||
<div className="w-14 h-14 rounded-full border border-[#d8c396] flex items-center justify-center mb-3 bg-[#fcfaf2]/70 shadow-sm transition-transform duration-300 group-hover:scale-110 pointer-events-none select-none">
|
<div className="w-14 h-14 rounded-full border border-[#d8c396] flex items-center justify-center mb-3 bg-[#fcfaf2]/70 shadow-sm transition-transform duration-300 group-hover:scale-110 pointer-events-none select-none">
|
||||||
<svg className="w-6 h-6 text-[#bc9e65]" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8">
|
<svg className="w-6 h-6 text-[#bc9e65]" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8">
|
||||||
<path d="M12 20V4" />
|
<path d="M12 20V4" />
|
||||||
@ -120,10 +145,16 @@ export default function RestaurantStory() {
|
|||||||
<p className="font-sans text-[10px] sm:text-[11px] text-stone-550 leading-relaxed max-w-[130px] mx-auto">
|
<p className="font-sans text-[10px] sm:text-[11px] text-stone-550 leading-relaxed max-w-[130px] mx-auto">
|
||||||
A homely environment with friendly service and a smile.
|
A homely environment with friendly service and a smile.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Feature 4: Love */}
|
{/* Feature 4: Love */}
|
||||||
<div className="flex flex-col items-center text-center group select-text">
|
<motion.div
|
||||||
|
initial={{ opacity: 0, scale: 0.9, y: 15 }}
|
||||||
|
whileInView={{ opacity: 1, scale: 1, y: 0 }}
|
||||||
|
viewport={{ once: true }}
|
||||||
|
transition={{ duration: 0.5, delay: 0.4, ease: "easeOut" }}
|
||||||
|
className="flex flex-col items-center text-center group select-text"
|
||||||
|
>
|
||||||
<div className="w-14 h-14 rounded-full border border-[#d8c396] flex items-center justify-center mb-3 bg-[#fcfaf2]/70 shadow-sm transition-transform duration-300 group-hover:scale-110 pointer-events-none select-none">
|
<div className="w-14 h-14 rounded-full border border-[#d8c396] flex items-center justify-center mb-3 bg-[#fcfaf2]/70 shadow-sm transition-transform duration-300 group-hover:scale-110 pointer-events-none select-none">
|
||||||
<svg className="w-6 h-6 text-[#bc9e65]" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8">
|
<svg className="w-6 h-6 text-[#bc9e65]" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8">
|
||||||
<circle cx="12" cy="12" r="10" />
|
<circle cx="12" cy="12" r="10" />
|
||||||
@ -136,14 +167,20 @@ export default function RestaurantStory() {
|
|||||||
<p className="font-sans text-[10px] sm:text-[11px] text-stone-550 leading-relaxed max-w-[130px] mx-auto">
|
<p className="font-sans text-[10px] sm:text-[11px] text-stone-550 leading-relaxed max-w-[130px] mx-auto">
|
||||||
Every dish is prepared with love, care and traditional values.
|
Every dish is prepared with love, care and traditional values.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</motion.div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Right Side: Mockup Gopuram Archway thali frame */}
|
{/* Right Side: Mockup Gopuram Archway thali frame */}
|
||||||
<div className="w-full lg:w-[46%] flex justify-center lg:justify-end relative z-10">
|
<motion.div
|
||||||
|
initial={{ opacity: 0, x: 45, scale: 0.96 }}
|
||||||
|
whileInView={{ opacity: 1, x: 0, scale: 1 }}
|
||||||
|
viewport={{ once: true, margin: "-80px" }}
|
||||||
|
transition={{ duration: 0.85, ease: "easeOut" }}
|
||||||
|
className="w-full lg:w-[46%] flex justify-center lg:justify-end relative z-10"
|
||||||
|
>
|
||||||
{/* Crop-extracted story thali arch image */}
|
{/* Crop-extracted story thali arch image */}
|
||||||
<div className="w-[340px] h-[340px] sm:w-[480px] sm:h-[480px] md:w-[500px] md:h-[500px] relative pointer-events-none select-none">
|
<div className="w-[340px] h-[340px] sm:w-[480px] sm:h-[480px] md:w-[500px] md:h-[500px] relative pointer-events-none select-none">
|
||||||
<Image
|
<Image
|
||||||
@ -155,7 +192,7 @@ export default function RestaurantStory() {
|
|||||||
priority
|
priority
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</motion.div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user