diff --git a/src/app/(frontend)/lokatsii/dyvolis/page.tsx b/src/app/(frontend)/lokatsii/dyvolis/page.tsx index 84213ac..685648d 100644 --- a/src/app/(frontend)/lokatsii/dyvolis/page.tsx +++ b/src/app/(frontend)/lokatsii/dyvolis/page.tsx @@ -12,7 +12,7 @@ export const metadata: Metadata = { export default function DyvoLisPage() { return ( -
+
diff --git a/src/components/sections/DyvoLisGallery.tsx b/src/components/sections/DyvoLisGallery.tsx index 6d28d27..18cdaf8 100644 --- a/src/components/sections/DyvoLisGallery.tsx +++ b/src/components/sections/DyvoLisGallery.tsx @@ -1,5 +1,8 @@ +'use client' /* eslint-disable @next/next/no-img-element */ +import { useState, useEffect } from 'react' + const QUOTE = 'Це місце – де малеча зустрічає героїв улюблених казок. Простір справжнього дитинства.' @@ -11,42 +14,134 @@ const GALLERY = [ ] export function DyvoLisGallery() { + const [active, setActive] = useState(0) + const n = GALLERY.length + + useEffect(() => { + const t = setInterval(() => setActive((p) => (p + 1) % n), 3500) + return () => clearInterval(t) + }, [n]) + + function getOffset(i: number): number { + const d = ((i - active) % n + n) % n + return d > n / 2 ? d - n : d + } + return ( -
+
{/* Quote banner */} -
+

{QUOTE}

- {/* Gallery row — overlaps banner on desktop */} -
+ {/* 3D Coverflow */} +
- {GALLERY.map((src, i) => ( -
- {`ДивоЛіс { + const d = getOffset(i) + const absD = Math.abs(d) + const sign = d >= 0 ? 1 : -1 + + const cfg = + absD === 0 + ? { tx: 0, ry: 0, scale: 1, opacity: 1, z: 20 } + : absD === 1 + ? { tx: sign * 270, ry: -sign * 48, scale: 0.82, opacity: 0.62, z: 10 } + : { tx: sign * 440, ry: -sign * 62, scale: 0.6, opacity: 0.18, z: 1 } + + return ( +
d !== 0 && setActive(i)} + onKeyDown={(e) => e.key === 'Enter' && d !== 0 && setActive(i)} + style={{ + position: 'absolute', + top: '50%', + left: '50%', + width: 'clamp(200px, 30vw, 370px)', + aspectRatio: '4/3', + transform: `translate(calc(-50% + ${cfg.tx}px), -50%) rotateY(${cfg.ry}deg) scale(${cfg.scale})`, + opacity: cfg.opacity, + zIndex: cfg.z, + transition: 'transform 0.65s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.65s ease', + borderRadius: '16px', + overflow: 'hidden', + cursor: d !== 0 ? 'pointer' : 'default', + boxShadow: + d === 0 + ? '0 20px 60px rgba(57,104,23,0.28)' + : '0 8px 24px rgba(0,0,0,0.14)', + }} + > + {d +
+ ) + })} +
+ + {/* Navigation */} +
+
- ))} + + + +
+ {GALLERY.map((_, i) => ( +
+ +
diff --git a/src/components/sections/DyvoLisHero.tsx b/src/components/sections/DyvoLisHero.tsx index 8f24ac4..7d96f40 100644 --- a/src/components/sections/DyvoLisHero.tsx +++ b/src/components/sections/DyvoLisHero.tsx @@ -10,29 +10,29 @@ const TIPS = [ export function DyvoLisHero() { return ( -
+
- {/* Left: text + info tips */}
- {/* Text block */}

ДивоЛіс – територія магії та фантазії

- Топіарні фігури зроблені з урахуванням важливих деталей, тому ви одразу впізнаєте в них улюблених казкових героїв. Тут можна бігати, стрибати, лазити по фігурках і ставати героями власної казки. + Топіарні фігури зроблені з урахуванням важливих деталей, тому ви одразу впізнаєте в + них улюблених казкових героїв. Тут можна бігати, стрибати, лазити по фігурках і + ставати героями власної казки.

Купити квиток @@ -41,11 +41,10 @@ export function DyvoLisHero() { {/* Info tips */}
- {/* Main tip with X badge */}
- атракціонів з безпечних
для дітей матеріалів + атракціонів з безпечних +
+ для дітей матеріалів
{TIPS.map((tip, i) => (
{tip}
@@ -78,9 +85,14 @@ export function DyvoLisHero() { {/* Right: hero image (desktop) */}