diff --git a/package-lock.json b/package-lock.json
index 59440c8..df7ece4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,6 +11,7 @@
"next": "15.3.2",
"react": "^19.0.0",
"react-dom": "^19.0.0",
+ "react-hot-toast": "^2.5.2",
"swiper": "^11.2.8"
},
"devDependencies": {
@@ -2101,7 +2102,6 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "dev": true,
"license": "MIT"
},
"node_modules/damerau-levenshtein": {
@@ -3227,6 +3227,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/goober": {
+ "version": "2.1.16",
+ "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.16.tgz",
+ "integrity": "sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==",
+ "license": "MIT",
+ "peerDependencies": {
+ "csstype": "^3.0.10"
+ }
+ },
"node_modules/gopd": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
@@ -4759,6 +4768,23 @@
"react": "^19.1.0"
}
},
+ "node_modules/react-hot-toast": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.5.2.tgz",
+ "integrity": "sha512-Tun3BbCxzmXXM7C+NI4qiv6lT0uwGh4oAfeJyNOjYUejTsm35mK9iCaYLGv8cBz9L5YxZLx/2ii7zsIwPtPUdw==",
+ "license": "MIT",
+ "dependencies": {
+ "csstype": "^3.1.3",
+ "goober": "^2.1.16"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "react": ">=16",
+ "react-dom": ">=16"
+ }
+ },
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
diff --git a/package.json b/package.json
index b17420c..b7dc14a 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,7 @@
"next": "15.3.2",
"react": "^19.0.0",
"react-dom": "^19.0.0",
+ "react-hot-toast": "^2.5.2",
"swiper": "^11.2.8"
},
"devDependencies": {
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 97409e4..ed599af 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -2,6 +2,7 @@ import type { Metadata } from 'next';
import { Open_Sans } from 'next/font/google';
import '@core/styles/reset.scss';
import '@core/styles/globals.scss';
+import { Toaster } from 'react-hot-toast';
const openSans = Open_Sans({
subsets: ['cyrillic'],
@@ -32,7 +33,10 @@ export default function RootLayout({
}: Readonly<{ children: React.ReactNode }>) {
return (
-
{children}
+
+ {children}
+
+
);
}
diff --git a/src/entities/home/ConsultationOrder/index.ts b/src/entities/home/ConsultationOrder/index.ts
new file mode 100644
index 0000000..dac7ffd
--- /dev/null
+++ b/src/entities/home/ConsultationOrder/index.ts
@@ -0,0 +1 @@
+export { default as ConsultationOrder } from './ui';
diff --git a/src/entities/home/ConsultationOrder/ui.tsx b/src/entities/home/ConsultationOrder/ui.tsx
new file mode 100644
index 0000000..5a410bb
--- /dev/null
+++ b/src/entities/home/ConsultationOrder/ui.tsx
@@ -0,0 +1,13 @@
+'use client';
+import { Button } from '@shared/ui';
+import toast from 'react-hot-toast';
+
+export default function ConsultationOrder() {
+ const notify = () => toast.success('Заявка на консультацию принята');
+
+ return (
+
+ );
+}
diff --git a/src/views/home/ui/contacts/contacts.module.scss b/src/views/home/ui/contacts/contacts.module.scss
index a1e480c..e25a581 100644
--- a/src/views/home/ui/contacts/contacts.module.scss
+++ b/src/views/home/ui/contacts/contacts.module.scss
@@ -96,127 +96,6 @@
}
}
-.Form {
- position: relative;
- background: #292E3D;
- display: flex;
- flex-direction: column;
- gap: rem(40px);
- overflow: hidden;
- padding: rem(60px) rem(50px);
- border-radius: rem(28px);
- margin-bottom: rem(80px);
-
- @include iftablet {
- flex-direction: row;
- gap: unset;
- padding: rem(60px) rem(50px);
- border-radius: rem(28px);
- margin-bottom: rem(120px);
- }
-
- @include iflaptop {
- padding: rem(60px) rem(50px);
- border-radius: rem(28px);
- margin-bottom: rem(100px);
- }
-
- @include ifdesktop {
- padding: rem(60px) rem(50px);
- border-radius: rem(28px);
- margin-bottom: rem(160px);
- }
-
- &:after {
- content: '';
- display: block;
- width: 100%;
- height: 100%;
- position: absolute;
- z-index: 1;
- left: 0;
- top: 0;
- background-color: rgba(#163055, .6);
- transition: 250ms background-color;
- }
-
- .Background {
- position: absolute;
- object-fit: cover;
- z-index: 1;
- }
-
- .Offer {
- flex: 2;
- display: flex;
- flex-direction: column;
-
- .Title {
- position: relative;
- z-index: 2;
- font-family: $font-open-sans;
- font-weight: $font-semi-bold;
- font-size: rem(26px);
- line-height: 100%;
- color: $color-white;
- margin-bottom: rem(16px);
-
- @include iftablet {
- font-size: rem(28px);
- margin-bottom: rem(60px);
- }
-
- @include iflaptop {
- font-size: rem(36px);
- margin-bottom: rem(80px);
- }
-
- @include ifdesktop {
- font-size: rem(48px);
- margin-bottom: rem(80px);
- }
- }
-
- .SubTitle {
- position: relative;
- z-index: 2;
- font-family: $font-open-sans;
- font-weight: $font-light;
- font-size: rem(16px);
- line-height: 100%;
- color: $color-white;
-
- @include iftablet {
- font-size: rem(18px);
- }
-
- @include iflaptop {
- font-size: rem(20px);
- }
-
- @include ifdesktop {
- font-size: rem(32px);
- max-width: rem(720px);
- }
- }
- }
-
- .Inputs {
- position: relative;
- z-index: 2;
- flex: 1;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-self: center;
- gap: rem(20px);
-
- @include iftablet {
- align-self: unset;
- }
- }
-}
-
.Map {
position: relative;
diff --git a/src/views/home/ui/contacts/contacts.tsx b/src/views/home/ui/contacts/contacts.tsx
index f55aad6..3bbc273 100644
--- a/src/views/home/ui/contacts/contacts.tsx
+++ b/src/views/home/ui/contacts/contacts.tsx
@@ -1,5 +1,6 @@
import s from './contacts.module.scss';
-import { Button, Input, Mark } from '@shared/ui';
+import { Mark } from '@shared/ui';
+import { ContactsForm } from '@/widgets';
import Image from 'next/image';
import bogatyrLogo from '@public/images/logo-bogatyr.png';
@@ -7,7 +8,6 @@ import sochiparkLogo from '@public/images/logo-sochipark.png';
import chateauLogo from '@public/images/logo-chateau-de-talu.png';
import gazpromLogo from '@public/images/logo-gazprom.png';
import kraspolLogo from '@public/images/logo-kraspol.png';
-import bgForm from '@public/images/bg-form.jpg';
import ledOn from '@public/svg/led-on.svg';
import phoneCall from '@public/svg/phone-call.svg';
import map from '@public/svg/map.svg';
@@ -28,31 +28,7 @@ export default function Contacts() {
))}
-
-
-
-
Остались вопросы?
-
- Наш эксперт свяжется с вами для уточнения подробностей и
- определения точной стоимости работ
-
-
-
-
-
-
-
-
+
-
-
-
-
Нужна помощь?
-
- Оставьте заявку на бесплатную консультацию
-
-
-
-
+
);
diff --git a/src/views/home/ui/result/result.tsx b/src/views/home/ui/result/result.tsx
index 0dfc441..f0180cf 100644
--- a/src/views/home/ui/result/result.tsx
+++ b/src/views/home/ui/result/result.tsx
@@ -1,6 +1,5 @@
import s from './result.module.scss';
import { Mark } from '@shared/ui';
-
import Image from 'next/image';
import bogatyrImg from '@public/images/bogatyr.png';
diff --git a/src/widgets/contacts-form/index.ts b/src/widgets/contacts-form/index.ts
new file mode 100644
index 0000000..b3f7605
--- /dev/null
+++ b/src/widgets/contacts-form/index.ts
@@ -0,0 +1 @@
+export { default as ContactsForm } from './ui';
diff --git a/src/widgets/contacts-form/styles.module.scss b/src/widgets/contacts-form/styles.module.scss
new file mode 100644
index 0000000..fe4a729
--- /dev/null
+++ b/src/widgets/contacts-form/styles.module.scss
@@ -0,0 +1,120 @@
+.Form {
+ position: relative;
+ background: #292E3D;
+ display: flex;
+ flex-direction: column;
+ gap: rem(40px);
+ overflow: hidden;
+ padding: rem(60px) rem(50px);
+ border-radius: rem(28px);
+ margin-bottom: rem(80px);
+
+ @include iftablet {
+ flex-direction: row;
+ gap: unset;
+ padding: rem(60px) rem(50px);
+ border-radius: rem(28px);
+ margin-bottom: rem(120px);
+ }
+
+ @include iflaptop {
+ padding: rem(60px) rem(50px);
+ border-radius: rem(28px);
+ margin-bottom: rem(100px);
+ }
+
+ @include ifdesktop {
+ padding: rem(60px) rem(50px);
+ border-radius: rem(28px);
+ margin-bottom: rem(160px);
+ }
+
+ &:after {
+ content: '';
+ display: block;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ z-index: 1;
+ left: 0;
+ top: 0;
+ background-color: rgba(#163055, .6);
+ transition: 250ms background-color;
+ }
+
+ .Background {
+ position: absolute;
+ object-fit: cover;
+ z-index: 1;
+ }
+
+ .Offer {
+ flex: 2;
+ display: flex;
+ flex-direction: column;
+
+ .Title {
+ position: relative;
+ z-index: 2;
+ font-family: $font-open-sans;
+ font-weight: $font-semi-bold;
+ font-size: rem(26px);
+ line-height: 100%;
+ color: $color-white;
+ margin-bottom: rem(16px);
+
+ @include iftablet {
+ font-size: rem(28px);
+ margin-bottom: rem(60px);
+ }
+
+ @include iflaptop {
+ font-size: rem(36px);
+ margin-bottom: rem(80px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(48px);
+ margin-bottom: rem(80px);
+ }
+ }
+
+ .SubTitle {
+ position: relative;
+ z-index: 2;
+ font-family: $font-open-sans;
+ font-weight: $font-light;
+ font-size: rem(16px);
+ line-height: 100%;
+ color: $color-white;
+
+ @include iftablet {
+ font-size: rem(18px);
+ }
+
+ @include iflaptop {
+ font-size: rem(20px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(32px);
+ max-width: rem(720px);
+ }
+ }
+ }
+
+ .Inputs {
+ position: relative;
+ z-index: 2;
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-self: center;
+ gap: rem(20px);
+
+ @include iftablet {
+ align-self: unset;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/widgets/contacts-form/ui.tsx b/src/widgets/contacts-form/ui.tsx
new file mode 100644
index 0000000..d5d9db8
--- /dev/null
+++ b/src/widgets/contacts-form/ui.tsx
@@ -0,0 +1,40 @@
+'use client';
+
+import s from './styles.module.scss';
+import { Button, Input } from '@shared/ui';
+import Image from 'next/image';
+import toast from 'react-hot-toast';
+
+import bgForm from '@public/images/bg-form.jpg';
+
+export default function ContactsForm() {
+ const notify = () => toast.success('Заявка на консультацию принята');
+
+ return (
+
+
+
+
Остались вопросы?
+
+ Наш эксперт свяжется с вами для уточнения подробностей и определения
+ точной стоимости работ
+
+
+
+
+ );
+}
diff --git a/src/widgets/footer-form/index.ts b/src/widgets/footer-form/index.ts
new file mode 100644
index 0000000..d4e9620
--- /dev/null
+++ b/src/widgets/footer-form/index.ts
@@ -0,0 +1 @@
+export { default as FooterForm } from './ui';
diff --git a/src/widgets/footer-form/styles.module.scss b/src/widgets/footer-form/styles.module.scss
new file mode 100644
index 0000000..1996348
--- /dev/null
+++ b/src/widgets/footer-form/styles.module.scss
@@ -0,0 +1,45 @@
+.Form {
+ display: flex;
+ flex-direction: column;
+ gap: rem(20px);
+ width: 100%;
+
+ @include iftablet {
+ width: unset;
+ max-width: 100%;
+ }
+
+ @include iflaptop {
+ max-width: 60%;
+ }
+
+ @include ifdesktop {
+ max-width: 60%;
+ }
+
+ .Header {
+ font-family: $font-open-sans;
+ font-weight: $font-semi-bold;
+ font-size: rem(28px);
+ line-height: 100%;
+ color: $color-white;
+ margin-bottom: rem(30px);
+
+ @include iflaptop {
+ font-size: rem(42px);
+ margin-bottom: rem(30px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(60px);
+ margin-bottom: rem(40px);
+ }
+ }
+
+ .SendBtn {
+ align-self: flex-end;
+ max-width: 33%;
+ }
+}
+
+
diff --git a/src/widgets/footer-form/ui.tsx b/src/widgets/footer-form/ui.tsx
new file mode 100644
index 0000000..b8ae3f0
--- /dev/null
+++ b/src/widgets/footer-form/ui.tsx
@@ -0,0 +1,30 @@
+'use client';
+
+import s from './styles.module.scss';
+import { Button, Input, Mark, TextArea } from '@shared/ui';
+import toast from 'react-hot-toast';
+
+export default function FooterForm() {
+ const notify = () => toast.success('Заявка на консультацию принята');
+
+ return (
+
+ );
+}
diff --git a/src/widgets/index.ts b/src/widgets/index.ts
index 3b69a03..7fc6c26 100644
--- a/src/widgets/index.ts
+++ b/src/widgets/index.ts
@@ -1 +1,6 @@
+export { ContactsForm } from './contacts-form';
+export { FooterForm } from './footer-form';
+export { LicenseForm } from './license-form';
export { LicenseSlider } from './license-slider';
+export { OfferForm } from './offer-form';
+export { OfferRequestForm } from './offer-request';
diff --git a/src/widgets/license-form/index.ts b/src/widgets/license-form/index.ts
new file mode 100644
index 0000000..5357392
--- /dev/null
+++ b/src/widgets/license-form/index.ts
@@ -0,0 +1 @@
+export { default as LicenseForm } from './ui';
diff --git a/src/widgets/license-form/styles.module.scss b/src/widgets/license-form/styles.module.scss
new file mode 100644
index 0000000..1b661ec
--- /dev/null
+++ b/src/widgets/license-form/styles.module.scss
@@ -0,0 +1,113 @@
+.Form {
+ position: relative;
+ background: #292E3D;
+ padding: rem(20px) rem(20px);
+ border-radius: rem(28px);
+ overflow: hidden;
+
+ display: flex;
+ flex-direction: column;
+ gap: rem(40px);
+
+ @include iftablet {
+ flex-direction: row;
+ padding: rem(40px) rem(40px);
+ gap: rem(20px);
+ }
+
+ @include iflaptop {
+ padding: rem(40px) rem(60px);
+ gap: rem(40px);
+ }
+
+ @include ifdesktop {
+ }
+
+ &:after {
+ content: '';
+ display: block;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ z-index: 1;
+ left: 0;
+ top: 0;
+ background-color: rgba(#163055, .6);
+ transition: 250ms background-color;
+ }
+
+ .Background {
+ position: absolute;
+ object-fit: cover;
+ z-index: 1;
+ }
+
+ .Offer {
+ flex: 2;
+
+ .Title {
+ position: relative;
+ z-index: 2;
+ font-family: $font-open-sans;
+ font-weight: $font-regular;
+ font-size: rem(26px);
+ line-height: 110%;
+ color: $color-white;
+ margin: 0 0 rem(20px);
+
+ @include iftablet {
+ font-size: rem(28px);
+ margin: 0 0 rem(36px);
+ }
+
+ @include iflaptop {
+ font-size: rem(32px);
+ margin: 0 0 rem(40px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(48px);
+ margin: 0 0 rem(50px);
+ }
+ }
+
+ .SubTitle {
+ position: relative;
+ z-index: 2;
+ font-family: $font-open-sans;
+ font-weight: $font-light;
+ font-size: rem(16px);
+ line-height: 100%;
+ color: $color-white;
+
+ @include iftablet {
+ font-size: rem(20px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(30px);
+ margin-bottom: rem(16px);
+ max-width: rem(820px);
+ }
+ }
+ }
+
+ .Inputs {
+ position: relative;
+ z-index: 2;
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-self: center;
+ gap: rem(16px);
+
+ @include iftablet {
+ }
+
+ @include ifdesktop {
+ gap: rem(20px);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/widgets/license-form/ui.tsx b/src/widgets/license-form/ui.tsx
new file mode 100644
index 0000000..28a7f6f
--- /dev/null
+++ b/src/widgets/license-form/ui.tsx
@@ -0,0 +1,42 @@
+'use client';
+
+import s from './styles.module.scss';
+import { Button, Input } from '@shared/ui';
+import Image from 'next/image';
+import toast from 'react-hot-toast';
+
+import bgForm from '@public/images/bg-form.jpg';
+
+export default function LicenseForm() {
+ const notify = () => toast.success('Заявка на консультацию принята');
+
+ return (
+
+
+
+
+ Заключите договор до 1 июля и получите скидку на проведение пожарной
+ экспертизы 15 %
+
+
+ Оставьте свои контактные данные и мы закрепим скидку до 1 июля за вами
+
+
+
+
+ );
+}
diff --git a/src/widgets/license-slider/index.ts b/src/widgets/license-slider/index.ts
index 99b8748..d97f1c3 100644
--- a/src/widgets/license-slider/index.ts
+++ b/src/widgets/license-slider/index.ts
@@ -1 +1 @@
-export { default as LicenseSlider } from './license-slider';
+export { default as LicenseSlider } from './ui';
diff --git a/src/widgets/license-slider/license-slider.module.scss b/src/widgets/license-slider/license-slider.module.scss
deleted file mode 100644
index 6f1e61d..0000000
--- a/src/widgets/license-slider/license-slider.module.scss
+++ /dev/null
@@ -1,10 +0,0 @@
-.Slider {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
-}
-
-.Slide {
- cursor: pointer;
- width: 100%;
-}
\ No newline at end of file
diff --git a/src/widgets/license-slider/styles.module.scss b/src/widgets/license-slider/styles.module.scss
new file mode 100644
index 0000000..f7561c9
--- /dev/null
+++ b/src/widgets/license-slider/styles.module.scss
@@ -0,0 +1,20 @@
+.Slider {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ margin-bottom: rem(40px);
+ padding: 0 rem(20px) 0;
+
+ @include iftablet {
+ padding: unset;
+ }
+
+ @include ifdesktop {
+ margin-bottom: rem(80px);
+ }
+}
+
+.Slide {
+ cursor: pointer;
+ width: 100%;
+}
\ No newline at end of file
diff --git a/src/widgets/license-slider/license-slider.tsx b/src/widgets/license-slider/ui.tsx
similarity index 90%
rename from src/widgets/license-slider/license-slider.tsx
rename to src/widgets/license-slider/ui.tsx
index c70d249..7c31feb 100644
--- a/src/widgets/license-slider/license-slider.tsx
+++ b/src/widgets/license-slider/ui.tsx
@@ -1,11 +1,10 @@
'use client';
-import s from './license-slider.module.scss';
+import s from './styles.module.scss';
import Image from 'next/image';
import { StaticImport } from 'next/dist/shared/lib/get-img-props';
import { clsx } from 'clsx';
-
import { Swiper, SwiperSlide } from 'swiper/react';
import { Grid } from 'swiper/modules';
import 'swiper/css';
@@ -42,10 +41,7 @@ const swiperBreakpoints = {
},
};
-export default function LicenseSlider({
- className,
- images,
-}: LicenseSliderProps) {
+export default function Ui({ className, images }: LicenseSliderProps) {
return (
toast.success('Заявка на консультацию принята');
+
+ return (
+
+ );
+}
diff --git a/src/widgets/offer-request/index.ts b/src/widgets/offer-request/index.ts
new file mode 100644
index 0000000..5e9d0ca
--- /dev/null
+++ b/src/widgets/offer-request/index.ts
@@ -0,0 +1 @@
+export { default as OfferRequestForm } from './ui';
diff --git a/src/widgets/offer-request/styles.module.scss b/src/widgets/offer-request/styles.module.scss
new file mode 100644
index 0000000..ef0e549
--- /dev/null
+++ b/src/widgets/offer-request/styles.module.scss
@@ -0,0 +1,129 @@
+.Form {
+ position: relative;
+ background: #292E3D;
+ overflow: hidden;
+
+ display: grid;
+ grid-template-rows: auto 1fr;
+ grid-template-columns: 1fr;
+ gap: rem(20px);
+ padding: rem(25px) rem(20px);
+ border-radius: rem(28px);
+
+ @include iftablet {
+ padding: rem(30px);
+ }
+
+ @include iflaptop {
+ grid-template-rows: 1fr;
+ grid-template-columns: auto rem(400px);
+ padding: rem(40px);
+ }
+ @include ifdesktop {
+ grid-template-columns: auto rem(550px);
+ padding: rem(40px) rem(60px);
+ }
+
+ &:after {
+ content: '';
+ display: block;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ z-index: 1;
+ left: 0;
+ top: 0;
+ background-color: rgba(#163055, .6);
+ transition: 250ms background-color;
+ }
+
+ .Background {
+ position: absolute;
+ object-fit: cover;
+ z-index: 1;
+ }
+
+ .PanelLeft {
+ display: flex;
+ flex-direction: column;
+ }
+
+ .PanelRight {
+ place-self: center center;
+
+ @include iftablet{
+ width: rem(400px);
+ place-self: end end;
+ }
+ @include iflaptop{
+ width: 100%;
+ }
+
+ .AdvPhoneInput{
+ display: none;
+ @include iftablet{
+ display: block;
+ }
+ }
+ .MobileBtns {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ gap: rem(12px);
+ z-index: 2;
+ max-width: rem(400px);
+ @include iftablet{
+ display: none;
+ }
+ }
+ }
+
+
+ .SubTitle {
+ position: relative;
+ z-index: 2;
+ font-family: $font-open-sans;
+ font-weight: $font-light;
+ font-size: rem(22px);
+ line-height: 100%;
+ color: $color-white;
+ margin-bottom: rem(16px);
+
+ @include iftablet {
+ margin-bottom: rem(20px);
+ }
+
+ @include iflaptop {
+ font-size: rem(24px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(30px);
+ margin-bottom: rem(16px);
+ }
+ }
+
+ .Title {
+ position: relative;
+ z-index: 2;
+ font-family: $font-open-sans;
+ font-weight: $font-regular;
+ font-size: rem(26px);
+ line-height: 130%;
+ color: $color-white;
+ max-width: rem(660px);
+ margin: 0;
+
+ @include iftablet {
+ font-size: rem(28px);
+ }
+
+ @include iflaptop {
+ font-size: rem(32px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(48px);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/widgets/offer-request/ui.tsx b/src/widgets/offer-request/ui.tsx
new file mode 100644
index 0000000..711f7c8
--- /dev/null
+++ b/src/widgets/offer-request/ui.tsx
@@ -0,0 +1,46 @@
+'use client';
+
+import s from './styles.module.scss';
+import { AdvancedPhoneInput, Button, Input } from '@shared/ui';
+import Image from 'next/image';
+import toast from 'react-hot-toast';
+
+import bgForm from '@public/images/bg-form.jpg';
+
+export default function OfferRequest() {
+ const notify = () => toast.success('Заявка на консультацию принята');
+
+ return (
+
+
+
+
Нужна помощь?
+
Оставьте заявку на бесплатную консультацию
+
+
+
+ );
+}