diff --git a/public/img/pages/home/projectmanagment/Datamining 1.png b/public/img/pages/home/projectmanagment/Datamining 1.png index c4eda2e9..7d605660 100644 Binary files a/public/img/pages/home/projectmanagment/Datamining 1.png and b/public/img/pages/home/projectmanagment/Datamining 1.png differ diff --git a/src/components/Layout/Header.tsx b/src/components/Layout/Header.tsx index 624c0116..c90123c8 100644 --- a/src/components/Layout/Header.tsx +++ b/src/components/Layout/Header.tsx @@ -13,6 +13,8 @@ import { motion } from 'framer-motion'; import Link from 'next/link'; import { useRef, useState } from 'react'; import { useOnClickOutside } from 'usehooks-ts'; +import { BurgerIcon } from '../icons/BurgerIcon'; +import { CloseIcon } from '../icons/CloseIcon'; import { ProductsList } from './ProductsList'; export function Header() { @@ -34,8 +36,13 @@ export function Header() {
- } /> - {width >= 1024 && } + } /> + {width >= 640 && ( + } + /> + )}
@@ -48,10 +55,20 @@ export function Header() {
+
{menuOpen && ( @@ -69,8 +86,8 @@ export function Header() { (menuOpen ? ' shadow-[0_0_0_9999px_rgba(0,0,0,.4)]' : '') } > - - О компании + + О нас Блог Проекты
diff --git a/src/components/Layout/ModalWithProducts.tsx b/src/components/Layout/ModalWithProducts.tsx index 90ce0874..2c9704ff 100644 --- a/src/components/Layout/ModalWithProducts.tsx +++ b/src/components/Layout/ModalWithProducts.tsx @@ -51,7 +51,7 @@ export function ModalWithProducts({ exit={{ opacity: 0, }} - className="pt-10 p-6 bg-[#14161F] bg-opacity-90 z-100 aspect-[1600/720] top-16 relative space-y-6 backdrop-blur-3xl" + className="pt-10 p-6 bg-[#14161F] bg-opacity-90 z-100 aspect-[1600/720] lg:top-16 top-12 relative space-y-6 backdrop-blur-3xl" > (null); @@ -18,8 +18,11 @@ export function ProductsList() { setModal(, 'products'); }} className={ - 'btn-text font-medium px-8 flex gap-x-2 items-center text-[#9299BD] border-r border-[#3D425C] hover:bg-[#3D425C] outline-none' + - (name === 'products' ? ' relative z-[101]' : '') + 'btn-text font-medium flex gap-x-2 items-center border-[#3D425C] outline-none' + + (name === 'products' ? ' relative z-[101]' : '') + + (inBurger + ? ' py-6 w-full active:bg-[#3D425C] justify-between px-10 bg-[#14161F] border-b border-l' + : ' hover:bg-[#3D425C] px-8 text-[#9299BD] border-r') } > Продукты diff --git a/src/components/icons/BurgerIcon.tsx b/src/components/icons/BurgerIcon.tsx index 145dad57..fb93dae6 100644 --- a/src/components/icons/BurgerIcon.tsx +++ b/src/components/icons/BurgerIcon.tsx @@ -1,19 +1,15 @@ export function BurgerIcon() { return ( - + + + ); } diff --git a/src/components/pages/MainPage/Availables/AvailableItem.tsx b/src/components/pages/MainPage/Availables/AvailableItem.tsx index 891887ff..ff2118fe 100644 --- a/src/components/pages/MainPage/Availables/AvailableItem.tsx +++ b/src/components/pages/MainPage/Availables/AvailableItem.tsx @@ -10,7 +10,7 @@ export interface IAvailable { export const AvailableItem = forwardRef( ({ img, text, title }, ref) => (
diff --git a/src/components/pages/MainPage/Availables/AvailablesSlider.tsx b/src/components/pages/MainPage/Availables/AvailablesSlider.tsx index 6b9da37d..cabba187 100644 --- a/src/components/pages/MainPage/Availables/AvailablesSlider.tsx +++ b/src/components/pages/MainPage/Availables/AvailablesSlider.tsx @@ -1,28 +1,37 @@ 'use client'; +import { useWindowWidth } from '@/hooks/useWindowWidth'; import { SliderWithScaling } from '@/ui/SliderWithScaling'; import { Title } from '@/ui/Title'; import { AvailableItem, IAvailable } from './AvailableItem'; export function AvailablesSlider({ availables }: { availables: IAvailable[] }) { + const width = useWindowWidth(); + return ( -
- + <div className="lg:pt-[200px] sm:pt-[120px] pt-20 lg:pb-16 pb-8"> + <Title className="lg:mb-20 sm:mb-12 mb-8"> Интерактивная презентация увлекает покупателей, <span className="text-gradient"> {' '} показывает актуальные особенности и преимущества объекта </span> -

Функциональные возможности

+

Функциональные возможности

= 1024 + ? ['31.6vw', '17.6vw', '64.3125vw', '35.5vw'] + : width >= 640 + ? ['66vw', '36.72vw', '93.75vw', '51.82vw'] + : ['96.47vw', '58.82vw', '96.47vw', '58.82vw'] + } + childClassName="flex h-full w-full" + controlsPosition={width >= 1024 ? 'top' : 'bottom'} />
); diff --git a/src/components/pages/MainPage/Calculator/Calculator.tsx b/src/components/pages/MainPage/Calculator/Calculator.tsx index e8464e13..3b7c34fe 100644 --- a/src/components/pages/MainPage/Calculator/Calculator.tsx +++ b/src/components/pages/MainPage/Calculator/Calculator.tsx @@ -2,6 +2,7 @@ import { api } from '@/api'; import regionsData from '@/consts/regionsData.json'; +import { useWindowWidth } from '@/hooks/useWindowWidth'; import { Descriptor } from '@/ui/Descriptor'; import { useEffect, useState } from 'react'; import Slider from 'react-rangeslider'; @@ -18,6 +19,8 @@ interface Region { } export function Calculator() { + const width = useWindowWidth(); + const [selectedRegion, setSelectedRegion] = useState(); const [consultations, setConsultations] = useState(100); const [implementationPeriod, setImplementationPeriod] = useState( @@ -35,6 +38,7 @@ export function Calculator() { const [oldReservation, setOldReservation] = useState(); const [sales, setSales] = useState(); const [oldSales, setOldSales] = useState(); + const [calculated, setCalculated] = useState(width >= 1024); async function getRegionName() { const result: any = await api.get('getRegionName').json(); @@ -134,18 +138,18 @@ export function Calculator() { }, [oldImplementationPeriod]); return ( -
+
-

+

Мы изучили отчеты об использовании приложения, отраслевую аналитику и на основе данных собрали  калькулятор эффективности продукта

-
-
-
+
+
+
{selectedRegion && (
-
+

Усредненные параметры ЖК


@@ -214,7 +218,7 @@ export function Calculator() {
-
+

Расчет

diff --git a/src/components/pages/MainPage/Datamining.tsx b/src/components/pages/MainPage/Datamining.tsx index cac10e97..f0f3edc9 100644 --- a/src/components/pages/MainPage/Datamining.tsx +++ b/src/components/pages/MainPage/Datamining.tsx @@ -5,32 +5,38 @@ import Image from 'next/image'; export function Datamining() { return ( -
+
Graff.estate имеет интеграцию с CRM-системой застройщика{' '} <span className="text-gradient"> - и собирает данные о пользователе и его поведении + и собирает данные о пользователе и его поведении </span> -
-

- Graff.estate легко встраивается в существующую цепочку продаж -

-
+
+
+

+ Graff.estate легко встраивается в существующую цепочку продаж +

+
+
-

Актуальная информация о квартирах

-

+

+ Актуальная информация о квартирах +

+

Клиент всегда видит актуальные данные об интересующем его лоте, включая статус и стоимость

-
+
-

Создание карточки клиента

-

+

+ Создание карточки клиента +

+

Инструмент продаж сам создаст карточку клиента в вашей CRM-системе и назначит ответственного менеджера

@@ -38,7 +44,7 @@ export function Datamining() {
Datamining diff --git a/src/components/pages/MainPage/Integrations/IntegrationsSlider.tsx b/src/components/pages/MainPage/Integrations/IntegrationsSlider.tsx index 3ea0cb33..8521ab82 100644 --- a/src/components/pages/MainPage/Integrations/IntegrationsSlider.tsx +++ b/src/components/pages/MainPage/Integrations/IntegrationsSlider.tsx @@ -1,5 +1,6 @@ 'use client'; +import { useWindowWidth } from '@/hooks/useWindowWidth'; import { SliderWithScaling } from '@/ui/SliderWithScaling'; import { IIntegration, IntegrationItem } from './IntegrationItem'; @@ -8,15 +9,23 @@ export function IntegrationsSlider({ }: { integrations: IIntegration[]; }) { + const width = useWindowWidth(); + return ( -
+

Интеграции в офисы продаж

= 1024 + ? ['31.69vw', '31.56vw', '48vw', '48vw'] + : width >= 640 + ? ['66.01vw', '66vw', '93.75vw', '93.75vw'] + : ['91.11vw', '91.11vw', '91.11vw', '91.11vw'] + } controlsPosition="bottom" />
diff --git a/src/components/pages/MainPage/Motivation.tsx b/src/components/pages/MainPage/Motivation.tsx index b9bb6994..922e6dc5 100644 --- a/src/components/pages/MainPage/Motivation.tsx +++ b/src/components/pages/MainPage/Motivation.tsx @@ -7,9 +7,8 @@ export function Motivation() {

Интерактивный инструмент -
- продаж - для застройщиков +
продаж + для застройщиков

} />
diff --git a/src/components/pages/MainPage/ProjectsMap.tsx b/src/components/pages/MainPage/ProjectsMap.tsx index 1b3db0d3..db8070a4 100644 --- a/src/components/pages/MainPage/ProjectsMap.tsx +++ b/src/components/pages/MainPage/ProjectsMap.tsx @@ -10,7 +10,7 @@ export function ProjectsMap() { const width = useWindowWidth(); return ( -
+
{'Карта - + <div className="lg:pt-[200px] sm:pt-[120px] pt-20 lg:space-y-20"> + <Title className="sm:max-lg:mb-16 max-sm:mb-8"> Наша цель — разработать эффективный продукт, <span className="text-gradient"> которым будут пользоваться</span> +
- {reviewsData.map((review, index) => ( - - ))} -
+
setTab(0)} active={tab === 0} @@ -43,6 +37,13 @@ export function Reviews() { title="ЖК «Айвазовский»" />
+ {reviewsData.map((review, index) => ( + + ))}
); @@ -86,18 +87,29 @@ function ReviewContent({ animate={{ opacity: 1 }} transition={{ duration: 1 }} className={ - 'bg-cover bg-top bg-no-repeat h-full flex justify-center items-center ' + 'bg-cover bg-top bg-no-repeat h-full flex justify-center items-center' } style={{ backgroundImage: `url(${image})` }} > -
- -
{text}
-
{author}
+
+
+ +
{text}
+
+ {author} +
+
+ +
+
+

{text}

+

{text}

- )} diff --git a/src/components/pages/MainPage/Showreel.tsx b/src/components/pages/MainPage/Showreel.tsx index 4ab7fc7a..f9d5ac8f 100644 --- a/src/components/pages/MainPage/Showreel.tsx +++ b/src/components/pages/MainPage/Showreel.tsx @@ -8,13 +8,13 @@ export function Showreel() { const { setModal } = useModalStore(); return ( -
+