upd
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 532 KiB After Width: | Height: | Size: 721 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -32,9 +32,9 @@ export default function TourPopup({ visible }: { visible: boolean }) {
|
||||
style={{ opacity: 0 }}
|
||||
animate={{ y: -40, opacity: 1 }}
|
||||
transition={{ type: "spring" }}
|
||||
className="absolute z-[9] bottom-[-40px] left-0 p-[1.111vw] flex flex-col justify-between bg-[#37393B99] backdrop-blur w-[23.611vw] h-auto gap-[1.389vw] rounded-[1.111vw]
|
||||
md:max-lg:w-[44.271vw] md:max-lg:h-[47.917vw] md:max-lg:rounded-[2.083vw] md:max-lg:p-[2.083vw]
|
||||
max-md:relative max-md:w-full max-md:mt-[6.667vw] max-md:rounded-[4.444vw] max-md:p-[4.444vw] max-md:h-[102.222vw]"
|
||||
className="absolute z-[9] bottom-[-40px] left-0 p-[1.111vw] flex flex-col justify-between bg-[#37393B99] backdrop-blur w-[23.611vw] gap-[1.111vw] md:max-lg:gap-[2.083vw] max-md:gap-[4.444vw] rounded-[1.111vw]
|
||||
md:max-lg:w-[44.271vw] md:max-lg:rounded-[2.083vw] md:max-lg:p-[2.083vw]
|
||||
max-md:relative max-md:w-full max-md:mt-[6.667vw] max-md:rounded-[4.444vw] max-md:p-[4.444vw]"
|
||||
>
|
||||
<span
|
||||
className="text-start text-[1.389vw] leading-[1.656vw] tracking-[-0.02em] font-medium
|
||||
@@ -62,7 +62,7 @@ export default function TourPopup({ visible }: { visible: boolean }) {
|
||||
src="/videos/pages/web/demo/popup.mp4"
|
||||
/>
|
||||
<Button
|
||||
className="w-full rounded-[1.111vw] py-[1.111vw] text-[0.966vw] md:max-lg:rounded-[2.083vw] md:max-lg:py-[2.083vw] md:max-lg:text-[1.823vw] max-md:rounded-[4.444vw] max-md:py-[4.444vw] max-md:text-[3.889vw]"
|
||||
className="w-full rounded-[1.111vw] py-[1.111vw] text-[0.966vw] md:max-lg:rounded-[2.083vw] md:max-lg:py-[1.111vw] md:max-lg:text-[1.823vw] max-md:rounded-[4.444vw] max-md:py-[4.444vw] max-md:text-[3.889vw]"
|
||||
onClick={handlePopupBtnClick}
|
||||
>
|
||||
Оставить заявку
|
||||
|
||||
@@ -8,16 +8,19 @@ import EventLogo2 from "../../../../public/img/pages/about/experience/EventLogo2
|
||||
import { ArticleCard } from "../BlogPage/ArticleCard";
|
||||
import { useSearchParams } from "next/navigation";
|
||||
import { useGetArticlesQuery } from "@/queries/getArticles";
|
||||
import AchievementsCardsMobile from "./AchievementsCardsMobile";
|
||||
import { motion } from "framer-motion";
|
||||
import DisplacementCard from "../../displacement/DisplacementCard";
|
||||
import DisplacementCardsWrapper from "../../displacement/DisplacementCardsWrapper";
|
||||
import { useGetProjectsCountQuery } from "@/queries/getProjectsCount";
|
||||
import { getProjectsCountWithGenitive } from "@/utils/getProjectsCount";
|
||||
|
||||
export default function AboutExperience() {
|
||||
const searchParams = useSearchParams();
|
||||
|
||||
const { data: articles } = useGetArticlesQuery(searchParams.getAll("tags"));
|
||||
|
||||
const { data: projectsCount } = useGetProjectsCountQuery();
|
||||
|
||||
return (
|
||||
<>
|
||||
{/* Плитка */}
|
||||
@@ -29,7 +32,8 @@ export default function AboutExperience() {
|
||||
>
|
||||
За 15 лет работы мы реализовали более{" "}
|
||||
<span className="text-transparent bg-clip-text">
|
||||
65 проектов в сфере интерактивных технологий
|
||||
{projectsCount && getProjectsCountWithGenitive(projectsCount)} в
|
||||
сфере интерактивных технологий
|
||||
</span>
|
||||
</h2>
|
||||
|
||||
@@ -190,8 +194,8 @@ export default function AboutExperience() {
|
||||
/>
|
||||
<AboutEventCard
|
||||
logo={EventLogo2}
|
||||
place={"Москва, GOELRO"}
|
||||
date={"10 сентября – 12 сентября"}
|
||||
place={"Екатеринбург, ЭКСПО"}
|
||||
date={"30 сентября – 3 октября"}
|
||||
color={"#3F58FF"}
|
||||
/>
|
||||
</div>
|
||||
@@ -223,7 +227,7 @@ export default function AboutExperience() {
|
||||
/>
|
||||
<p className="z-10 text-center btns md:max-lg:text-[1.563vw] max-md:text-[3.333vw]">
|
||||
Наш продукт зарегистрирован{" "}
|
||||
<br className="block min-md:hidden" /> и включен в реестр{" "}
|
||||
<br className="min-md:hidden block" /> и включен в реестр{" "}
|
||||
<br className="nidden md:max-lg:block" />
|
||||
отечественного ПО
|
||||
</p>
|
||||
@@ -239,8 +243,8 @@ export default function AboutExperience() {
|
||||
alt="Заняли 1 место на WOW AWARDS 2024 совместно с застройщиком Upside Development"
|
||||
/>
|
||||
<p className="z-10 text-center btns md:max-lg:text-[1.563vw] max-md:text-[3.333vw]">
|
||||
Заняли 1 место на <br className="block min-md:hidden" /> WOW
|
||||
AWARDS 2024 совместно с застройщиком Upside Development
|
||||
Мы заняли 1 место на WOW AWARDS 2024 совместно c застройщиком
|
||||
Upside Development
|
||||
</p>
|
||||
</DisplacementCard>
|
||||
|
||||
@@ -249,19 +253,19 @@ export default function AboutExperience() {
|
||||
className="lg:bottom-0 lg:left-[8.194vw]"
|
||||
>
|
||||
<img
|
||||
src={"/img/pages/about/experience/cards/sk.png"}
|
||||
className="lg:w-[9.444vw] lg:h-[9.444vw] md:w-[25.708vw] md:h-[25.708vw] w-[45.556vw] h-[45.556vw] my-auto object-cover hover:scale-[1.15] transition-all duration-300"
|
||||
alt="Мы резиденты Сколково"
|
||||
src={"/img/pages/about/experience/cards/build_up.png"}
|
||||
className="lg:w-[9.444vw] lg:h-[9.444vw] md:w-[17.708vw] md:h-[17.708vw] w-[25.556vw] h-[25.556vw] my-auto object-cover hover:scale-[1.15] transition-all duration-300"
|
||||
alt="В 2023 году мы выиграли Build UP в категории IT"
|
||||
/>
|
||||
<p className="z-10 text-center btns md:max-lg:text-[1.563vw] max-md:text-[3.333vw]">
|
||||
Мы резиденты Сколково
|
||||
В 2023 году мы выиграли Build UP в категории IT
|
||||
</p>
|
||||
</DisplacementCard>
|
||||
|
||||
<DisplacementCard index={3} className="lg:top-0 lg:right-[8.194vw]">
|
||||
<img
|
||||
src={"/img/pages/about/experience/cards/map.png"}
|
||||
className="lg:w-[9.444vw] lg:h-[9.444vw] md:w-[20.708vw] md:h-[20.708vw] w-[35.556vw] h-[35.556vw] my-auto object-cover hover:scale-[1.15] transition-all duration-300"
|
||||
className="lg:w-[9.444vw] lg:h-[9.444vw] md:w-[20.708vw] md:h-[20.708vw] w-[35.556vw] h-[35.556vw] my-auto object-cover hover:scale-[1.35] scale-[1.25] transition-all duration-300"
|
||||
alt="Наши интерактивные столы стоят уже в 16 городах России"
|
||||
/>
|
||||
<p className="z-10 text-center btns md:max-lg:text-[1.563vw] max-md:text-[3.333vw]">
|
||||
@@ -279,8 +283,8 @@ export default function AboutExperience() {
|
||||
alt="Каждый наш проект, получил одну или несколько наград на платформе Dprofile"
|
||||
/>
|
||||
<p className="z-10 text-center btns md:max-lg:text-[1.563vw] max-md:text-[3.333vw]">
|
||||
Каждый наш проект, получил одну или несколько наград на
|
||||
платформе Dprofile
|
||||
Каждый наш проект получил одну или несколько наград на платформе
|
||||
Dprofile
|
||||
</p>
|
||||
</DisplacementCard>
|
||||
|
||||
@@ -289,12 +293,12 @@ export default function AboutExperience() {
|
||||
className="lg:bottom-0 lg:right-[16.389vw]"
|
||||
>
|
||||
<img
|
||||
src={"/img/pages/about/experience/cards/build_up.png"}
|
||||
className="lg:w-[9.444vw] lg:h-[9.444vw] md:w-[17.708vw] md:h-[17.708vw] w-[25.556vw] h-[25.556vw] my-auto object-cover hover:scale-[1.15] transition-all duration-300"
|
||||
alt="В 2023 году мы выиграли Build UP в категории IT"
|
||||
src={"/img/pages/about/experience/cards/sk.png"}
|
||||
className="lg:w-[9.444vw] lg:h-[9.444vw] md:w-[25.708vw] md:h-[25.708vw] w-[45.556vw] h-[45.556vw] my-auto object-cover hover:scale-[1.15] transition-all duration-300"
|
||||
alt="Мы резиденты Сколково"
|
||||
/>
|
||||
<p className="z-10 text-center btns md:max-lg:text-[1.563vw] max-md:text-[3.333vw]">
|
||||
В 2023 году мы выиграли Build UP в категории IT
|
||||
Мы - резиденты Сколково
|
||||
</p>
|
||||
</DisplacementCard>
|
||||
</DisplacementCardsWrapper>
|
||||
|
||||
@@ -6,22 +6,29 @@ import { motion, useInView } from "framer-motion";
|
||||
function TeamCarousel() {
|
||||
return (
|
||||
<div className="lg:right-[-11vw] lg:top-[-11vw] -right-1/3 -top-1/3 absolute lg:w-[29.611vw] md:w-[50.271vw] w-[95.444vw] aspect-square ">
|
||||
|
||||
<motion.div
|
||||
animate={{ rotate: 360 }}
|
||||
transition={{ ease: "linear", duration: 50, repeat: Infinity }}
|
||||
className="w-full h-full aspect-square relative flex items-center justify-center"
|
||||
className="aspect-square flex relative justify-center items-center w-full h-full"
|
||||
>
|
||||
<img src="/img/pages/about/team/3ds_outer.png" alt="" className="w-full h-full" />
|
||||
<img
|
||||
src="/img/pages/about/team/3ds_outer.png"
|
||||
alt=""
|
||||
className="w-full h-full"
|
||||
/>
|
||||
</motion.div>
|
||||
|
||||
<motion.div
|
||||
animate={{ rotate: -360 }}
|
||||
transition={{ ease: "linear", duration: 50, repeat: Infinity }}
|
||||
className="absolute inset-0 flex items-center justify-center"
|
||||
>
|
||||
<img src="/img/pages/about/team/3ds_inner.png" alt="" className="lg:w-[12.708vw] md:w-[20.828vw] w-[40.833vw]" />
|
||||
</motion.div>
|
||||
<motion.div
|
||||
animate={{ rotate: -360 }}
|
||||
transition={{ ease: "linear", duration: 50, repeat: Infinity }}
|
||||
className="flex absolute inset-0 justify-center items-center"
|
||||
>
|
||||
<img
|
||||
src="/img/pages/about/team/3ds_inner.png"
|
||||
alt=""
|
||||
className="lg:w-[12.708vw] md:w-[20.828vw] w-[40.833vw]"
|
||||
/>
|
||||
</motion.div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -80,7 +87,7 @@ export default function AboutTeam() {
|
||||
Георгий Уморин
|
||||
</h3>
|
||||
<span className="caption md:max-lg:text-[1.302vw] max-md:text-[2.778vw]">
|
||||
Генеральный директор
|
||||
Генеральный директор, основатель
|
||||
</span>
|
||||
</motion.div>
|
||||
<motion.div
|
||||
@@ -120,7 +127,7 @@ export default function AboutTeam() {
|
||||
<div className="mt-auto space-y-[1.667vw] max-md:space-y-[3.333vw]">
|
||||
<span className="line1 md:max-lg:text-[12.5vw]">3</span>
|
||||
<h3 className="headline2">
|
||||
PMa этим цирком <br /> руководят
|
||||
3 проджект-менеджера руководят и улучшают проекты
|
||||
</h3>
|
||||
</div>
|
||||
</motion.div>
|
||||
|
||||
@@ -33,7 +33,7 @@ export default function AchievementsCardsMobile({
|
||||
}
|
||||
title={
|
||||
web
|
||||
? "Люди гуляют в окрестностях ЖК"
|
||||
? "Люди гуляют в окрестностях ЖК"
|
||||
: "Наш продукт зарегистрирован и включен в реестр отечественного ПО"
|
||||
}
|
||||
className="relative w-full md:max-lg:translate-y-[3.125vw] max-md:aspect-[165/240]"
|
||||
|
||||
@@ -64,7 +64,7 @@ export default function ContentSlideCards({
|
||||
exit={{ x: "4.167vw", y: "-4.167vw" }}
|
||||
transition={{ duration: 0.5, type: "just" }}
|
||||
className="lg:w-[13.403vw] md:w-[18.229vw] w-[38.889vw] flex flex-col lg:gap-[0.694vw] gap-2 lg:p-[1.389vw] p-4 bg-[#37393B99] backdrop-blur-[5px] rounded-[1.111vw] absolute lg:left-[5.25vw] lg:bottom-[2.625vw] left-0 bottom-0
|
||||
max-md:bottom-[15vw] max-md:left-[5vw] max-md:rounded-[4.444vw] md:max-lg:p-[2.083vw] md:max-lg:left-[2.083vw] md:max-lg:bottom-[2.083vw]"
|
||||
max-md:bottom-[15vw] max-md:left-[5vw] max-md:rounded-[4.444vw] md:max-lg:p-[2.083vw] md:max-lg:left-[2.083vw] md:max-lg:bottom-[10vw]"
|
||||
>
|
||||
<span className="headline2 z-[3]">Для соцсетей:</span>
|
||||
<p className="text2 text-[#FFFFFF60]">
|
||||
@@ -78,7 +78,7 @@ export default function ContentSlideCards({
|
||||
exit={{ x: "-4.167vw", y: "4.167vw" }}
|
||||
transition={{ duration: 0.5, type: "just" }}
|
||||
className="lg:w-[13.403vw] md:w-[18.229vw] w-[38.889vw] flex flex-col lg:gap-[0.694vw] gap-2 lg:p-[1.389vw] p-4 bg-[#37393B99] backdrop-blur-[5px] rounded-[1.111vw] absolute lg:right-[5.25vw] lg:top-[2.625vw] right-0 top-0
|
||||
max-md:top-[15vw] max-md:right-[5vw] max-md:rounded-[4.444vw] md:max-lg:p-[2.083vw] md:max-lg:right-[2.083vw] md:max-lg:top-[2.083vw]"
|
||||
max-md:top-[15vw] max-md:right-[5vw] max-md:rounded-[4.444vw] md:max-lg:p-[2.083vw] md:max-lg:right-[2.083vw] md:max-lg:top-[10vw]"
|
||||
>
|
||||
<span className="headline2">Для наружной рекламы:</span>
|
||||
<p className="text2 text-[#FFFFFF60]">
|
||||
|
||||
@@ -42,7 +42,6 @@ export default function ContentSlideHall({
|
||||
|
||||
return (
|
||||
<motion.div
|
||||
// key={id}
|
||||
initial={{
|
||||
maxWidth: isLg
|
||||
? index === 1
|
||||
@@ -79,7 +78,7 @@ export default function ContentSlideHall({
|
||||
opacity: active ? 1 : 0,
|
||||
}}
|
||||
className="lg:w-[13.403vw] md:w-[18.229vw] w-[38.889vw] flex flex-col lg:gap-[0.694vw] gap-2 lg:p-[1.389vw] p-4 bg-[#37393B99] backdrop-blur-[5px] lg:rounded-[1.111vw] rounded-2xl absolute lg:left-[5.25vw] lg:bottom-[2.625vw] left-0 bottom-0
|
||||
max-md:bottom-[15vw] max-md:left-[5vw] md:max-lg:p-[2.083vw] md:max-lg:left-[2.083vw] md:max-lg:bottom-[6.083vw]"
|
||||
max-md:bottom-[15vw] max-md:left-[5vw] md:max-lg:p-[2.083vw] md:max-lg:left-[2.083vw] md:max-lg:bottom-[10vw]"
|
||||
>
|
||||
<span className="headline2 z-[3]">По двору:</span>
|
||||
<p className="text2 text-[#FFFFFF60] ">
|
||||
@@ -92,7 +91,7 @@ export default function ContentSlideHall({
|
||||
opacity: active ? 1 : 0,
|
||||
}}
|
||||
className="lg:w-[13.403vw] md:w-[18.229vw] w-[38.889vw] flex flex-col lg:gap-[0.694vw] gap-2 lg:p-[1.389vw] p-4 bg-[#37393B99] backdrop-blur-[5px] lg:rounded-[1.111vw] rounded-2xl absolute lg:right-[5.25vw] lg:top-[2.625vw] right-0 top-0
|
||||
max-md:top-[15vw] max-md:right-[5vw] md:max-lg:p-[2.083vw] md:max-lg:right-[2.083vw] md:max-lg:top-[6.083vw]"
|
||||
max-md:top-[15vw] max-md:right-[5vw] md:max-lg:p-[2.083vw] md:max-lg:right-[2.083vw] md:max-lg:top-[10vw]"
|
||||
>
|
||||
<span className="headline2">По квартире:</span>
|
||||
<p className="text2 text-[#FFFFFF60] ">
|
||||
|
||||
+29
-27
@@ -4,7 +4,7 @@ import { motion, AnimatePresence } from "framer-motion";
|
||||
import { useRef } from "react";
|
||||
|
||||
function Iphone({ active }: { active: boolean }) {
|
||||
return active ? (
|
||||
return (
|
||||
<div className="relative w-[17vw] h-auto aspect-[576/1182] items-center mx-auto my-auto md:max-lg:w-[24.881vw] max-md:w-[50vw]">
|
||||
<motion.img
|
||||
initial={{ opacity: 0 }}
|
||||
@@ -14,26 +14,32 @@ function Iphone({ active }: { active: boolean }) {
|
||||
className="absolute w-full h-full z-[8]"
|
||||
alt=""
|
||||
/>
|
||||
<motion.video
|
||||
initial={{ opacity: 0 }}
|
||||
animate={{ opacity: 1 }}
|
||||
exit={{ opacity: 0 }}
|
||||
src={"/videos/pages/web/iphone_vid.mp4"}
|
||||
muted
|
||||
autoPlay
|
||||
loop
|
||||
className="mx-auto w-[98%] h-[99%] translate-y-[0.5%] z-[7] lg:rounded-[3vw] rounded-2xl md:max-lg:rounded-[4vw] max-md:rounded-[8vw]"
|
||||
/>
|
||||
<AnimatePresence mode="popLayout">
|
||||
{active ? (
|
||||
<motion.video
|
||||
key={1}
|
||||
initial={{ opacity: 0 }}
|
||||
animate={{ opacity: 1 }}
|
||||
exit={{ opacity: 0 }}
|
||||
src={"/videos/pages/web/iphone_vid.mp4"}
|
||||
muted
|
||||
autoPlay
|
||||
loop
|
||||
className="mx-auto w-[98%] h-[99%] translate-y-[0.5%] z-[7] lg:rounded-[3vw] rounded-2xl md:max-lg:rounded-[4vw] max-md:rounded-[8vw]"
|
||||
/>
|
||||
) : (
|
||||
<motion.img
|
||||
key={2}
|
||||
initial={{ opacity: 0 }}
|
||||
animate={{ opacity: 1 }}
|
||||
exit={{ opacity: 0 }}
|
||||
src={"/img/pages/web/content/iphone_new.png"}
|
||||
alt=""
|
||||
className="mx-auto w-auto h-full lg:rounded-[3.333vw] md:rounded-[4.444vw] rounded-3xl"
|
||||
/>
|
||||
)}
|
||||
</AnimatePresence>
|
||||
</div>
|
||||
) : (
|
||||
<motion.img
|
||||
initial={{ opacity: 0 }}
|
||||
animate={{ opacity: 1, scale: 0.7 }}
|
||||
exit={{ opacity: 0 }}
|
||||
src={"/img/pages/web/content/iphone_disabled.png"}
|
||||
alt=""
|
||||
className="mx-auto w-auto h-full lg:rounded-[0.417vw] rounded-2xl"
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -47,7 +53,6 @@ export default function ContentSlideIphone({
|
||||
index?: number;
|
||||
}) {
|
||||
const IphoneRef = useRef(null);
|
||||
// useParallax(IphoneRef);
|
||||
|
||||
const { isMd, isLg } = useMediaQueries();
|
||||
|
||||
@@ -78,7 +83,7 @@ export default function ContentSlideIphone({
|
||||
: "94.444vw",
|
||||
}}
|
||||
transition={{ duration: 0.5, type: "just" }}
|
||||
className="lg:h-[37.361vw] md:h-[68.448vw] h-[151.111vw] relative flex-shrink-0 w-full select-none pointer-events-none"
|
||||
className="lg:h-[37.361vw] md:max-lg:h-[68.448vw] h-[151.111vw] relative flex-shrink-0 w-full select-none pointer-events-none"
|
||||
>
|
||||
<div ref={IphoneRef} className="flex absolute inset-0 items-center">
|
||||
<motion.div
|
||||
@@ -86,7 +91,7 @@ export default function ContentSlideIphone({
|
||||
opacity: active ? 1 : 0,
|
||||
top:
|
||||
(isLg && (active ? "1.528vw" : "0.528vw")) ||
|
||||
(isMd && (active ? "6.528vw" : "0.528vw")) ||
|
||||
(isMd && (active ? "10vw" : "15.528vw")) ||
|
||||
"11.111vw",
|
||||
left: isLg ? (active ? "5.694vw" : "20.694vw") : "0vw",
|
||||
}}
|
||||
@@ -164,10 +169,7 @@ export default function ContentSlideIphone({
|
||||
</p>
|
||||
</motion.div>
|
||||
</div>
|
||||
|
||||
<AnimatePresence>
|
||||
<Iphone active={active} />
|
||||
</AnimatePresence>
|
||||
<Iphone active={active} />
|
||||
</motion.div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -53,15 +53,17 @@ export default function InfiniteSlider() {
|
||||
});
|
||||
|
||||
return (
|
||||
<div className="lg:-mx-[3vw] md:-mx-[2.083vw] -mx-[2.778vw] border border-red-500">
|
||||
<div className="flex overflow-hidden relative w-full " {...handlers}>
|
||||
<div className="lg:-mx-[3vw] md:-mx-[2.083vw] -mx-[2.778vw]">
|
||||
<div className="overflow-hidden relative w-full" {...handlers}>
|
||||
<div
|
||||
onTransitionEnd={() => setIsAnimating(false)}
|
||||
className="flex lg:gap-[2vw] md:gap-[2.083vw] gap-[2.778vw]"
|
||||
style={{
|
||||
transform: `translateX(${slideOffset}vw)`,
|
||||
transitionDuration: `${
|
||||
slideOffset % (-2 * slideWidth) === -offset ? 0 : 0.5
|
||||
Math.abs((slideOffset % (-2 * slideWidth)) + offset) < 0.1
|
||||
? 0
|
||||
: 0.5
|
||||
}s`,
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -12,10 +12,10 @@ import { useMediaQuery } from "usehooks-ts";
|
||||
const cloudsAnimationStyles = `
|
||||
@keyframes cloudMove {
|
||||
0% {
|
||||
transform: translateX(-100%);
|
||||
transform: translateX(-200%);
|
||||
}
|
||||
100% {
|
||||
transform: translateX(0%);
|
||||
transform: translateX(-0%);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,10 +80,7 @@ export default function WebDemo() {
|
||||
|
||||
return (
|
||||
<>
|
||||
<div
|
||||
className="w-full aspect-[140/68] flex items-center justify-center relative
|
||||
md:max-lg:items-start "
|
||||
>
|
||||
<div className="w-full aspect-[140/68] flex items-center justify-center relative md:max-lg:items-start">
|
||||
<div className="flex flex-col gap-y-[1.667vw] text-center w-[68.333vw] md:max-lg:w-full md:max-lg:gap-y-[3.125vw] max-md:w-full max-md:gap-[6.667vw]">
|
||||
<p className="headline1 text-[#7A7A7A] md:max-lg:mb-[calc(4.557vw-3.125vw)] max-md:w-[94.444vw] md:max-lg:mt-[3.125vw]">
|
||||
С помощью интерактивного сайта
|
||||
@@ -109,7 +106,7 @@ export default function WebDemo() {
|
||||
</div>
|
||||
|
||||
<p className="z-10 text-center btns md:max-lg:text-[1.563vw] max-md:text-[3.333vw]">
|
||||
Люди гуляют в окрестностях ЖК
|
||||
Люди гуляют в окрестностях ЖК
|
||||
</p>
|
||||
</DisplacementCard>
|
||||
|
||||
@@ -129,7 +126,7 @@ export default function WebDemo() {
|
||||
</div>
|
||||
|
||||
<p className="z-10 text-center btns md:max-lg:text-[1.563vw] max-md:text-[3.333vw]">
|
||||
Машины ездят по основным магистралям
|
||||
Машины ездят по основным магистралям
|
||||
</p>
|
||||
</DisplacementCard>
|
||||
|
||||
@@ -165,8 +162,8 @@ export default function WebDemo() {
|
||||
"z-10 text-center btns md:max-lg:text-[1.563vw] max-md:text-[3.333vw] mt-auto"
|
||||
}
|
||||
>
|
||||
Облака движутся в нужом направлении, как в реальном времени на
|
||||
вашей локации
|
||||
Облака движутся в нужном направлении, как в реальном времени
|
||||
на вашей локации
|
||||
</p>
|
||||
</DisplacementCard>
|
||||
|
||||
@@ -203,7 +200,7 @@ export default function WebDemo() {
|
||||
"z-10 text-center btns md:max-lg:text-[1.563vw] max-md:text-[3.333vw]"
|
||||
}
|
||||
>
|
||||
Вся инфраструктура будет отмечена на карте ближайшего окружения
|
||||
Вся инфраструктура будет отмечена на карте ближайшего окружения
|
||||
</p>
|
||||
</DisplacementCard>
|
||||
|
||||
@@ -238,7 +235,7 @@ export default function WebDemo() {
|
||||
width: demoActive ? "100vw" : isMobile ? "100%" : "80vw",
|
||||
}}
|
||||
className="relative max-w-full aspect-[1400/784] mx-auto rounded-[1.111vw] overflow-clip
|
||||
md:max-lg:aspect-[736/1028] md:max-lg:rounded-[2.083vw]
|
||||
md:max-lg:h-screen md:max-lg:rounded-[2.083vw]
|
||||
max-md:w-[94.444vw] max-md:aspect-[340/600] max-md:rounded-[4.444vw]"
|
||||
>
|
||||
<div className="relative w-full h-full overflow-clip rounded-[1.111vw] md:max-lg:rounded-[2.083vw] max-md:rounded-[4.444vw]">
|
||||
@@ -260,11 +257,11 @@ export default function WebDemo() {
|
||||
) : (
|
||||
<button
|
||||
onClick={() => setDemoActive(false)}
|
||||
className="bg-[#37393B99] absolute z-10 top-[1.111vw] right-[1.111vw] backdrop-blur-[20px] btn-l p-[1.389vw] rounded-[1.111vw] text-[1.111vw]
|
||||
md:max-lg:rounded-[2.083vw] md:max-lg:text-[2.083vw] md:max-lg:p-[2.604vw] md:max-lg:top-[2.083vw] md:max-lg:right-[2.083vw]
|
||||
max-md:rounded-[4.444vw] max-md:text-[4.444vw] max-md:p-[2.778vw] max-md:top-[4.444vw] max-md:right-[4.444vw]"
|
||||
className="bg-[#37393B99] absolute z-10 top-[1.111vw] right-[1.111vw] backdrop-blur-[20px] btn-l p-[1.111vw] rounded-[1.111vw] text-[1.111vw]
|
||||
md:max-lg:rounded-[1.111vw] md:max-lg:text-[2.083vw] md:max-lg:p-[1.111vw] md:max-lg:top-[1.111vw] md:max-lg:right-[1.111vw]
|
||||
max-md:rounded-[4.444vw] max-md:text-[4.444vw] max-md:p-[2.778vw] max-md:top-[2.222vw] max-md:right-[2.222vw]"
|
||||
>
|
||||
<div className="size-10">
|
||||
<div className="lg:size-[1.111vw] size-5">
|
||||
<CloseIcon />
|
||||
</div>
|
||||
</button>
|
||||
|
||||
@@ -109,7 +109,7 @@ export default function WebExperience() {
|
||||
md:max-lg:p-[4.167vw] md:max-lg:text-[3.125vw]
|
||||
max-md:rounded-[4.444vw] max-md:p-[8.889vw]"
|
||||
>
|
||||
<span className="headline1 z-[1]">Выбор кладовых и паркинга</span>
|
||||
<span className="headline1 z-[1]">Выбор кладовых и паркинга</span>
|
||||
<img
|
||||
src="/img/pages/web/experience/parking.png"
|
||||
alt=""
|
||||
|
||||
@@ -49,9 +49,9 @@ export default function WebMain() {
|
||||
max-md:text-[8.889vw] max-md:mb-[6.667vw]"
|
||||
>
|
||||
<span className="text-transparent bg-clip-text">
|
||||
Берем создание контента на себя,{" "}
|
||||
Берем создание контента на себя,
|
||||
</span>
|
||||
берем <br /> классно и в две строчки
|
||||
используем материалы из основного проекта
|
||||
</h2>
|
||||
<InfiniteSlider />
|
||||
</div>
|
||||
|
||||
@@ -1,3 +1,23 @@
|
||||
export function getProjectsCount(count: number) {
|
||||
return `${count}\xa0проект${count > 10 && count < 15 ? 'ов' : count % 10 === 1 ? '' : count % 10 === 2 || count % 10 === 3 || count % 10 === 4 ? 'а' : 'ов'}`;
|
||||
return `${count}\xa0проект${
|
||||
count > 10 && count < 15
|
||||
? "ов"
|
||||
: count % 10 === 1
|
||||
? ""
|
||||
: count % 10 === 2 || count % 10 === 3 || count % 10 === 4
|
||||
? "а"
|
||||
: "ов"
|
||||
}`;
|
||||
}
|
||||
|
||||
export function getProjectsCountWithGenitive(count: number) {
|
||||
return `${count}\xa0проект${
|
||||
count > 10 && count < 15
|
||||
? "ов"
|
||||
: count % 10 === 1
|
||||
? "а"
|
||||
: count % 10 === 2 || count % 10 === 3 || count % 10 === 4
|
||||
? "а"
|
||||
: "ов"
|
||||
}`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user