feat(dyvolis): shift cat right, 60+ badge, real photos, colorful logo

- Hero: move cat panel right (left 15%, ellipse 20%) so it doesn't
  cover the left text column; adjust badge text Х→60+ with proper
  font size (50px) for 3-character label
- Gallery: replace 4 placeholder images with 24 real Dyvolis park
  photos (March 2026 shoot)
- WhyVisit carousel: use 5 real park photos as posters, increase
  card size from 505px to 600px with 4:3 aspect ratio
- Header: replace 3-SVG fallback logo with full-color brand PNG

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Vadym Samoilenko 2026-05-13 13:36:22 +01:00
parent 722db0bb76
commit 1cd26c1749
29 changed files with 40 additions and 36 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View file

@ -7,9 +7,6 @@ import { useState } from 'react'
import { NavLink } from '@/components/ui/NavLink'
import { BtnPrimary } from '@/components/ui/BtnPrimary'
const LOGO_G1 = '/images/figma/logo-g1.svg'
const LOGO_G2 = '/images/figma/logo-g2.svg'
const LOGO_G3 = '/images/figma/logo-g3.svg'
export interface NavLinkItem {
label: string
@ -71,26 +68,11 @@ export function HeaderClient({ navLinks, ctaLabel, ctaHref, logo }: HeaderClient
className="object-contain"
/>
) : (
<div className="relative h-[44px] w-[50px] lg:h-[62px] lg:w-[71px]">
<div
className="absolute"
style={{ top: '91.32%', right: '21.81%', bottom: '0.97%', left: '22.26%' }}
>
<img src={LOGO_G1} alt="" aria-hidden="true" className="block h-full w-full" />
</div>
<div
className="absolute"
style={{ top: '71.76%', right: '2.82%', bottom: '7.3%', left: '1.41%' }}
>
<img src={LOGO_G2} alt="" aria-hidden="true" className="block h-full w-full" />
</div>
<div
className="absolute"
style={{ top: '1.61%', right: '2.82%', bottom: '38.73%', left: '21.27%' }}
>
<img src={LOGO_G3} alt="" aria-hidden="true" className="block h-full w-full" />
</div>
</div>
<img
src="/images/figma/logo-color.png"
alt="Шуміленд"
className="h-[44px] w-auto object-contain lg:h-[62px]"
/>
)}
</Link>

View file

@ -7,10 +7,30 @@ const QUOTE =
'Це місце де малеча зустрічає героїв улюблених казок. Простір справжнього дитинства.'
const GALLERY = [
'/images/dyvolis/gallery-1.jpg',
'/images/dyvolis/gallery-2.jpg',
'/images/dyvolis/gallery-3.jpg',
'/images/dyvolis/gallery-4.jpg',
'/images/dyvolis/photo-01.jpg',
'/images/dyvolis/photo-02.jpg',
'/images/dyvolis/photo-03.jpg',
'/images/dyvolis/photo-04.jpg',
'/images/dyvolis/photo-05.jpg',
'/images/dyvolis/photo-06.jpg',
'/images/dyvolis/photo-07.jpg',
'/images/dyvolis/photo-08.jpg',
'/images/dyvolis/photo-09.jpg',
'/images/dyvolis/photo-10.jpg',
'/images/dyvolis/photo-11.jpg',
'/images/dyvolis/photo-12.jpg',
'/images/dyvolis/photo-13.jpg',
'/images/dyvolis/photo-14.jpg',
'/images/dyvolis/photo-15.jpg',
'/images/dyvolis/photo-16.jpg',
'/images/dyvolis/photo-17.jpg',
'/images/dyvolis/photo-18.jpg',
'/images/dyvolis/photo-19.jpg',
'/images/dyvolis/photo-20.jpg',
'/images/dyvolis/photo-21.jpg',
'/images/dyvolis/photo-22.jpg',
'/images/dyvolis/photo-23.jpg',
'/images/dyvolis/photo-24.jpg',
]
export function DyvoLisGallery() {

View file

@ -52,11 +52,11 @@ export function DyvoLisHero() {
fontFamily: 'Inter, sans-serif',
fontWeight: 800,
lineHeight: 1,
fontSize: 'clamp(40px, 6.67vw, 96px)',
fontSize: 'clamp(20px, 3.47vw, 50px)',
}}
aria-hidden="true"
>
Х
60+
</div>
<div
className="flex-1 rounded-[20px] text-[16px] leading-[1.3] font-medium text-white lg:text-[24px]"
@ -110,7 +110,7 @@ export function DyvoLisHero() {
<div
className="absolute"
style={{
left: '-12.5%',
left: '20%',
top: '8%',
width: '184.6%',
height: '184.6%',
@ -135,7 +135,7 @@ export function DyvoLisHero() {
alt="Топіарна фігура ДивоЛісу"
className="absolute"
style={{
left: '-20.1%',
left: '15%',
top: '-20.7%',
width: '126.9%',
height: 'auto',

View file

@ -25,9 +25,11 @@ const ITEMS = [
]
const VIDEO_REVIEWS = [
{ poster: '/images/review-video-poster.jpg' },
{ poster: '/images/review-video-poster.jpg' },
{ poster: '/images/review-video-poster.jpg' },
{ poster: '/images/dyvolis/photo-22.jpg' },
{ poster: '/images/dyvolis/photo-14.jpg' },
{ poster: '/images/dyvolis/photo-07.jpg' },
{ poster: '/images/dyvolis/photo-18.jpg' },
{ poster: '/images/dyvolis/photo-03.jpg' },
]
export function DyvoLisWhyVisit() {
@ -136,8 +138,8 @@ export function DyvoLisWhyVisit() {
{/* Right: video review carousel */}
<div className="w-full flex-1">
<div
className="relative mx-auto max-w-[505px] overflow-hidden rounded-[20px] lg:mx-0"
style={{ aspectRatio: '505/546' }}
className="relative mx-auto max-w-[600px] overflow-hidden rounded-[20px] lg:mx-0"
style={{ aspectRatio: '4/3' }}
onMouseEnter={() => {
videoPausedRef.current = true
}}