This commit is contained in:
2026-04-16 17:56:10 +05:00
parent c8b62e3283
commit b6bc0214ca
7 changed files with 26 additions and 27 deletions
+7 -9
View File
@@ -63,7 +63,7 @@ export default function AvailableDemos() {
</h2> </h2>
<div <div
className="grid lg:hidden md:hidden grid-cols-4 gap-3 px-5 [scrollbar-width:none] relative max-md:aspect-[340/344] [transform-style:preserve-3d] items-stretch mb-[5.556vw]" className="grid lg:hidden md:hidden grid-cols-3 gap-3 px-[5vw] [scrollbar-width:none] relative max-md:aspect-[340/344] [transform-style:preserve-3d] items-stretch mb-[5.556vw]"
{...handlers} {...handlers}
> >
{projects.map((project, index, { length }) => ( {projects.map((project, index, { length }) => (
@@ -81,23 +81,21 @@ export default function AvailableDemos() {
className={`bg-gradient-to-r from-[#232425] to-[#1A1A1C] [background:linear-gradient(to_right,#232425,#1A1A1C)] p-0.5 rounded-2xl flex flex-1 justify-center !duration-500 items-center group max-md:absolute max-md:inset-x-5 max-md:w-auto self-stretch max-md:h-full transition-[scale,transform] will-change-[transform,scale] select-none ${ className={`bg-gradient-to-r from-[#232425] to-[#1A1A1C] [background:linear-gradient(to_right,#232425,#1A1A1C)] p-0.5 rounded-2xl flex flex-1 justify-center !duration-500 items-center group max-md:absolute max-md:inset-x-5 max-md:w-auto self-stretch max-md:h-full transition-[scale,transform] will-change-[transform,scale] select-none ${
slideCount - 1 === current slideCount - 1 === current
? "max-md:[transform:translateZ(40px)]" ? "max-md:[transform:translateZ(40px)]"
: "max-md:[scale:85%]" : slideCount - 1 === (current + 1) % slideCount
} ${ ? "max-md:[transform:translateX(calc(7.5%+20px))_scale(0.85)]"
slideCount - 1 === (current + 1) % slideCount
? "max-md:translate-x-[calc(7.5%+20px)]"
: slideCount - 1 === (current - 1 + slideCount) % slideCount : slideCount - 1 === (current - 1 + slideCount) % slideCount
? "max-md:translate-x-[calc(-7.5%-20px)]" ? "max-md:[transform:translateX(calc(-7.5%-20px))_scale(0.85)]"
: "" : "max-md:[transform:scale(0.85)]"
}`} }`}
> >
<div className="md:bg-[#0F1011] h-full w-full lg:rounded-[1.111vw] rounded-2xl flex items-center p-6"> <div className="md:bg-[#0F1011] h-full w-full lg:rounded-[1.111vw] rounded-2xl flex items-center justify-center p-6">
<div className="flex flex-col items-center space-y-6"> <div className="flex flex-col items-center space-y-6">
<p className="heading2 font-medium text-center"> <p className="heading2 font-medium text-center">
{t("demos.ctaTitle")} {t("demos.ctaTitle")}
</p> </p>
<a <a
href="#contacts" href="#contacts"
className="btnm font-medium group-hover:scale-105 duration-500 lg:px-[1.667vw] lg:py-[1.181vw] px-6 py-[17px] transition-transform lg:rounded-[0.833vw] rounded-xl bg-gradient" className="btnm font-medium group-hover:scale-105 duration-500 lg:px-[1.667vw] lg:py-[1.181vw] px-6 py-[17px] transition-transform lg:rounded-[0.833vw] rounded-xl bg-gradient-saturated"
> >
{t("demos.ctaButton")} {t("demos.ctaButton")}
</a> </a>
+1 -3
View File
@@ -1,13 +1,11 @@
import { Feedback } from "@/components/Layout/Feedback"; import { Feedback } from "@/components/Layout/Feedback";
import AvailableDemos from "./AvailableDemos"; import AvailableDemos from "./AvailableDemos";
import RequestForDemo from "./RequestForDemo";
import StreamPlayer from "./StreamPlayer"; import StreamPlayer from "./StreamPlayer";
export default function StreamDemo() { export default function StreamDemo() {
return ( return (
<div className="lg:space-y-[9.722vw] md:space-y-[13.021vw] space-y-[27.778vw]"> <div className="lg:space-y-[140px] space-y-[100px]">
<AvailableDemos /> <AvailableDemos />
<RequestForDemo />
<div className="w-full shrink-0 aspect-[340/600] max-h-[85dvh] md:max-lg:aspect-[736/480] md:max-lg:max-h-[80dvh] lg:aspect-auto lg:h-[44.444vw] lg:max-h-none"> <div className="w-full shrink-0 aspect-[340/600] max-h-[85dvh] md:max-lg:aspect-[736/480] md:max-lg:max-h-[80dvh] lg:aspect-auto lg:h-[44.444vw] lg:max-h-none">
<StreamPlayer className="h-full min-h-[12rem]" /> <StreamPlayer className="h-full min-h-[12rem]" />
</div> </div>
+1 -1
View File
@@ -20,7 +20,7 @@ export default function StreamPlayer({ className }: { className?: string }) {
muted muted
className="lg:aspect-[1400/640] max-h-dvh md:max-lg:aspect-[736/480] aspect-[340/600]" className="lg:aspect-[1400/640] max-h-dvh md:max-lg:aspect-[736/480] aspect-[340/600]"
> >
<p className="absolute font-medium md:bottom-6 md:left-6 bottom-4 left-4 lg:max-w-[40%] md:max-lg:max-w-[80%] accent"> <p className="absolute font-medium md:bottom-6 md:left-6 bottom-4 left-4 lg:max-w-[40%] md:max-lg:max-w-[80%] w-[85vw] accent">
{t("streamPlayer.caption")} {t("streamPlayer.caption")}
</p> </p>
</VideoPlayer> </VideoPlayer>
+9 -10
View File
@@ -28,17 +28,16 @@ export function StreamingProject({
const streamHref = build ? streamDemoUrlFromBuild(build) : href; const streamHref = build ? streamDemoUrlFromBuild(build) : href;
return ( return (
<div <a
className={`lg:aspect-[344/396] aspect-[300/344] flex-1 md:max-lg:min-w-[300px] transition-[scale,transform] will-change-[transform,scale] lg:rounded-[1.111vw] rounded-2xl lg:p-[1.111vw] p-4 flex duration-500 relative overflow-hidden group max-md:absolute max-md:inset-x-5 max-md:w-auto select-none h-full ${ href={streamHref}
className={`lg:aspect-[344/396] max-md:aspect-none flex-1 md:max-lg:min-w-[300px] transition-transform will-change-transform lg:rounded-[1.111vw] rounded-2xl lg:p-[1.111vw] p-4 flex duration-500 relative overflow-hidden group max-md:absolute max-md:inset-x-5 max-md:w-auto select-none h-full ${
index === current index === current
? "max-md:[transform:translateZ(40px)]" ? "max-md:[transform:translateZ(40px)]"
: "max-md:[scale:85%]" : index === (current + 1) % count
} ${ ? "max-md:[transform:translateX(calc(7.5%+20px))_scale(0.85)]"
index === (current + 1) % count
? "max-md:[transform:translateX(calc(7.5%+20px))]"
: index === (current - 1 + count) % count : index === (current - 1 + count) % count
? "max-md:[transform:translateX(calc(-7.5%-20px))]" ? "max-md:[transform:translateX(calc(-7.5%-20px))_scale(0.85)]"
: "" : "max-md:[transform:scale(0.85)]"
} ${className ?? ""}`} } ${className ?? ""}`}
> >
<div className="z-0 rounded-2xl absolute inset-0 overflow-hidden transition-transform duration-500 group-hover:scale-110"> <div className="z-0 rounded-2xl absolute inset-0 overflow-hidden transition-transform duration-500 group-hover:scale-110">
@@ -74,7 +73,7 @@ export function StreamingProject({
</div> </div>
<div className="z-[2] lg:hidden absolute right-4 bottom-4"> <div className="z-[2] lg:hidden absolute right-4 bottom-4">
<a <a
className="bg-gradient btns flex gap-2 items-center px-3 py-2 font-medium rounded-xl" className="bg-gradient-saturated btns flex gap-2 items-center px-3 py-2 font-medium rounded-xl"
href={streamHref} href={streamHref}
> >
{t("streamingProject.watch")} {t("streamingProject.watch")}
@@ -94,6 +93,6 @@ export function StreamingProject({
</div> </div>
</div> </div>
</a> </a>
</div> </a>
); );
} }
+1 -1
View File
@@ -48,7 +48,7 @@
"cta": "Request a call" "cta": "Request a call"
}, },
"streamPlayer": { "streamPlayer": {
"caption": "GRAFF.estate remote demo module works on\u00a0any device; all you need is an internet connection" "caption": "GRAFF.estate Stream is available on\u00a0any device all you need for a demo is an internet connection."
}, },
"feedback": { "feedback": {
"titleLead": "Want to improve conversion?", "titleLead": "Want to improve conversion?",
+1 -1
View File
@@ -48,7 +48,7 @@
"cta": "Оставить заявку" "cta": "Оставить заявку"
}, },
"streamPlayer": { "streamPlayer": {
"caption": "GRAFF.estate — модуль удаленной демонстрации — доступен на\u00a0любых устройствах, для\u00a0демонстрации нужен только интернет" "caption": "Модуль удаленных продаж GRAFF.estate доступен на\u00a0любых устройствах, для\u00a0демонстрации нужен только\u00a0интернет."
}, },
"feedback": { "feedback": {
"titleLead": "Хотите увеличить конверсию?", "titleLead": "Хотите увеличить конверсию?",
+6 -2
View File
@@ -35,9 +35,13 @@ export function Button({
className={`group cursor-pointer relative px-6 py-2${ className={`group cursor-pointer relative px-6 py-2${
rounded ? " rounded-" + rounded : "" rounded ? " rounded-" + rounded : ""
} min-w-fit ${ } min-w-fit ${
(color === "primary" ? "bg-gradient" : "") || (color === "primary" ? "bg-gradient-saturated" : "") ||
(color === "secondary" ? " outline-1 outline-[#3D425C]" : "") (color === "secondary" ? " outline-1 outline-[#3D425C]" : "")
} ${icon ? "pr-4" : ""} flex gap-1 items-center overflow-hidden ${widthClass} ${className ?? ""} justify-between`} } ${
icon ? "pr-4" : ""
} flex gap-1 items-center overflow-hidden ${widthClass} ${
className ?? ""
} justify-between`}
> >
<span className="group-hover:opacity-10 absolute top-0 left-0 w-full h-full transition-opacity bg-black opacity-0"></span> <span className="group-hover:opacity-10 absolute top-0 left-0 w-full h-full transition-opacity bg-black opacity-0"></span>
<span className={"relative font-medium" + (icon ? "" : " m-auto")}> <span className={"relative font-medium" + (icon ? "" : " m-auto")}>