-
-
- Давайте обсудим ваши задачи
-
-
-
-
-
-
+
+
+
+
diff --git a/src/views/home/ui/license/license.module.scss b/src/views/home/ui/license/license.module.scss
index 2c6e2dc..3f7eb35 100644
--- a/src/views/home/ui/license/license.module.scss
+++ b/src/views/home/ui/license/license.module.scss
@@ -1,87 +1,44 @@
.License {
margin: 0 auto;
- width: rem(1340px);
- padding: rem(120px) 0 rem(160px);
+ padding: rem(32px) 0 rem(32px);
+
+ @include iftablet {
+ margin: 0 auto;
+ width: rem(712px);
+ padding: 0 0 rem(40px);
+ }
+
+ @include iflaptop {
+ width: rem(930px);
+ padding: 0 0 rem(60px);
+ }
+
+ @include ifdesktop {
+ width: rem(1340px);
+ padding: 0 0 rem(160px);
+ }
.Header {
font-family: $font-open-sans;
font-weight: $font-semi-bold;
- font-size: rem(60px);
+ font-size: rem(28px);
line-height: 100%;
color: $color-text;
- margin-bottom: rem(80px);
+ padding: 0 rem(20px) 0;
+ margin-bottom: rem(40px);
+
+ @include iftablet {
+ padding: unset;
+ }
+
+ @include iflaptop {
+ font-size: rem(36px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(60px);
+ margin-bottom: rem(80px);
+ }
}
- .Slider {
- margin-bottom: rem(80px);
- }
-
- .Form {
- position: relative;
- background: #292E3D;
- padding: rem(40px) rem(60px);
- border-radius: rem(28px);
- overflow: hidden;
-
- display: flex;
- flex-direction: row;
- gap: rem(40px);
-
- &: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(48px);
- line-height: 110%;
- color: $color-white;
- margin: 0 0 rem(50px);
- }
-
- .SubTitle {
- position: relative;
- z-index: 2;
- font-family: $font-open-sans;
- font-weight: $font-light;
- font-size: rem(30px);
- line-height: 100%;
- color: $color-white;
- margin-bottom: rem(16px);
- max-width: rem(820px);
- }
- }
-
- .Inputs {
- position: relative;
- z-index: 2;
- flex: 1;
- display: flex;
- flex-direction: column;
- justify-content: center;
- gap: rem(20px);
- }
-
- }
}
\ No newline at end of file
diff --git a/src/views/home/ui/license/license.tsx b/src/views/home/ui/license/license.tsx
index 82502dd..027d945 100644
--- a/src/views/home/ui/license/license.tsx
+++ b/src/views/home/ui/license/license.tsx
@@ -1,10 +1,7 @@
import s from './license.module.scss';
+import { Mark } from '@shared/ui';
+import { LicenseForm, LicenseSlider } from '@/widgets';
-import { Button, Input, Mark } from '@shared/ui';
-import { LicenseSlider } from '@/widgets';
-import Image from 'next/image';
-
-import bgForm from '@public/images/bg-form.jpg';
import emptyPaper from '@public/svg/empty-paper.svg';
export default function License() {
@@ -13,39 +10,8 @@ export default function License() {
Наши услуги подтверждены лицензиями и сертификатами
-
-
-
-
-
-
-
-
-
- Заключите договор до 1 июля и получите скидку на проведение пожарной
- экспертизы 15 %
-
-
- Оставьте свои контактные данные и мы закрепим скидку до 1 июля за
- вами
-
-
-
-
-
-
-
-
+
+
);
}
diff --git a/src/views/home/ui/main/main.module.scss b/src/views/home/ui/main/main.module.scss
index da8eef0..904c847 100644
--- a/src/views/home/ui/main/main.module.scss
+++ b/src/views/home/ui/main/main.module.scss
@@ -1,7 +1,20 @@
.Main {
margin: 0 auto;
- width: rem(1340px);
- //padding: 0 rem(160px) 0;
+ width: 90vw;
+
+ @include iftablet {
+ margin: 0 auto;
+ width: rem(712px);
+ }
+
+ @include iflaptop {
+ width: rem(930px);
+ }
+
+ @include ifdesktop {
+ width: rem(1340px);
+ }
+
&_BgWrapper {
position: absolute;
@@ -38,17 +51,46 @@
gap: rem(30px);
.Icon {
- width: rem(60px);
- height: rem(60px);
+ display: none;
cursor: pointer;
+
+ @include iftablet {
+ display: block;
+ width: rem(40px);
+ height: rem(40px);
+ }
+
+ @include ifdesktop {
+ width: rem(60px);
+ height: rem(60px);
+ }
}
.Button {
- display: flex;
- flex-direction: row;
- gap: rem(16px);
- height: rem(48px);
- padding: rem(24px);
+ display: none;
+
+ @include iflaptop {
+ display: flex;
+ flex-direction: row;
+ gap: rem(16px);
+ height: rem(40px);
+ padding: rem(20px);
+ }
+
+ @include ifdesktop {
+ gap: rem(16px);
+ height: rem(48px);
+ padding: rem(24px);
+ }
+
+ img {
+ width: rem(30px);
+ height: rem(30px);
+ @include ifdesktop {
+ width: rem(40px);
+ height: rem(40px);
+ }
+ }
}
}
}
@@ -56,50 +98,134 @@
.Info {
margin: 0 auto;
display: flex;
- flex-direction: row;
- padding: rem(160px) 0 rem(200px);
+ flex-direction: column;
+ padding: rem(64px) 0 rem(160px);
+ gap: rem(100px);
+
+ @include iftablet {
+ flex-direction: row;
+ gap: unset;
+ padding: rem(130px) 0 rem(160px);
+ }
+
+ @include iflaptop {
+ padding: rem(130px) 0 rem(160px);
+ }
+
+ @include ifdesktop {
+ padding: rem(160px) 0 rem(120px);
+ }
.Content {
display: flex;
flex-direction: column;
justify-content: flex-start;
- gap: rem(60px);
+ gap: rem(50px);
+
+ @include iftablet {
+ gap: rem(40px);
+ }
+
+ @include iflaptop {
+ gap: rem(50px);
+ }
+
+ @include ifdesktop {
+ gap: rem(60px);
+ }
.Title {
font-family: $font-open-sans;
font-weight: $font-regular;
- font-size: rem(60px);
- line-height: 1;
+ font-size: rem(24px);
+ line-height: 120%;
color: $color-white;
- max-width: rem(960px);
+ //max-width: rem(960px);
+
+ @include iftablet {
+ font-size: rem(28px);
+ max-width: rem(360px);
+ }
+
+ @include iflaptop {
+ font-size: rem(32px);
+ max-width: rem(508px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(60px);
+ max-width: rem(960px);
+ }
}
.List {
display: flex;
flex-direction: column;
justify-content: flex-start;
- gap: rem(16px);
+ gap: rem(18px);
+
+ @include iftablet {
+ gap: rem(20px);
+ }
+
+ @include ifdesktop {
+ gap: rem(16px);
+ }
}
.ListItem {
position: relative;
font-family: $font-open-sans;
font-weight: $font-semi-bold;
- font-size: rem(26px);
+ font-size: rem(16px);
line-height: 1;
color: $color-white;
- margin-left: rem(36px);
+ margin-left: rem(24px);
+
+ @include iftablet {
+ font-size: rem(18px);
+ margin-left: rem(36px);
+ max-width: rem(360px);
+ }
+
+ @include iflaptop {
+ font-size: rem(20px);
+ margin-left: rem(36px);
+ max-width: rem(400px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(26px);
+ margin-left: rem(36px);
+ max-width: rem(730px);
+ }
&:after {
position: absolute;
- top: rem(2px);
+ top: 0;
left: 0;
content: '';
- width: rem(24px);
- height: rem(24px);
+ width: rem(16px);
+ height: rem(16px);
background: url("/svg/check.svg") no-repeat;
- background-size: rem(24px) rem(24px);
- margin-left: rem(-36px);
+ background-size: rem(16px) rem(16px);
+ margin-left: rem(-24px);
+
+ @include iftablet {
+ top: rem(2px);
+ width: rem(20px);
+ height: rem(20px);
+ background-size: rem(20px) rem(20px);
+ margin-left: rem(-36px);
+ }
+
+ @include ifdesktop {
+ top: rem(2px);
+ width: rem(24px);
+ height: rem(24px);
+ background-size: rem(24px) rem(24px);
+ margin-left: rem(-36px);
+ }
}
}
}
@@ -111,13 +237,38 @@
align-items: center;
flex-basis: 40%;
gap: rem(40px);
+ text-wrap: nowrap;
+
+ @include iftablet {
+ gap: rem(40px);
+ }
+
+ @include iflaptop {
+ gap: rem(40px);
+ }
+
+ @include ifdesktop {
+ gap: rem(40px);
+ }
.Title {
font-family: $font-open-sans;
font-weight: $font-semi-bold;
- font-size: rem(60px);
- line-height: 1;
+ font-size: rem(36px);
+ line-height: 100%;
color: $color-white;
+
+ @include iftablet {
+ font-size: rem(40px);
+ }
+
+ @include iflaptop {
+ font-size: rem(40px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(60px);
+ }
}
}
}
\ No newline at end of file
diff --git a/src/views/home/ui/main/main.tsx b/src/views/home/ui/main/main.tsx
index 9ea1431..7127e71 100644
--- a/src/views/home/ui/main/main.tsx
+++ b/src/views/home/ui/main/main.tsx
@@ -1,6 +1,7 @@
import s from './main.module.scss';
import { Button } from '@shared/ui';
+import { ConsultationOrder } from '@/entities/home/ConsultationOrder';
import Image from 'next/image';
import bgStart from '@public/images/bg-start-desktop.jpg';
@@ -51,7 +52,7 @@ export default function Main() {
+7 988 400 93 93
-
+
diff --git a/src/views/home/ui/offer/offer.module.scss b/src/views/home/ui/offer/offer.module.scss
index 0fc4b37..61b9d1a 100644
--- a/src/views/home/ui/offer/offer.module.scss
+++ b/src/views/home/ui/offer/offer.module.scss
@@ -1,91 +1,208 @@
-.Offer {
+.Container {
background: $color-lightgray;
border-radius: rem(28px);
- padding: rem(160px) 0;
-}
+ padding: rem(32px) 0 0;
-.InnerContainer {
- margin: 0 auto;
- width: rem(1340px);
-}
+ @include iftablet {
+ padding: rem(60px) 0 rem(40px);
+ }
-.Title {
- font-family: $font-open-sans;
- font-weight: $font-semi-bold;
- font-size: rem(60px);
- line-height: 100%;
- color: $color-text;
- max-width: rem(1330px);
- margin-bottom: rem(80px);
-}
+ @include iflaptop {
+ padding: rem(60px) 0 rem(60px);
+ }
-.Text {
- font-family: $font-open-sans;
- font-weight: $font-regular;
- font-size: rem(32px);
- line-height: 100%;
- color: $color-text;
- margin-bottom: rem(20px);
-}
-
-.List {
- display: flex;
- flex-direction: column;
- align-items: flex-start;
- max-width: rem(1330px);
- margin-bottom: rem(60px);
-
- .ListItem {
- font-family: $font-open-sans;
- font-weight: $font-regular;
- font-size: rem(32px);
- line-height: 160%;
- color: $color-text;
- list-style-type: decimal;
- margin-left: rem(40px);
+ @include ifdesktop {
+ padding: rem(160px) 0;
}
}
-.RowForm {
- display: flex;
- flex-direction: row;
- gap: rem(40px);
- justify-content: center;
- margin-bottom: rem(80px);
+.Offer {
+ margin: 0 auto;
+
+ @include iftablet {
+ width: rem(712px);
+ }
+
+ @include iflaptop {
+ width: rem(930px);
+ }
+
+ @include ifdesktop {
+ width: rem(1340px);
+ }
+}
+
+.Top {
+ padding: 0 rem(20px) rem(30px);
+
+ @include iftablet {
+ padding: 0;
+ }
+
+ .Header {
+ font-family: $font-open-sans;
+ font-weight: $font-semi-bold;
+ font-size: rem(26px);
+ line-height: 120%;
+ color: $color-text;
+ margin-bottom: rem(40px);
+
+ @include iftablet {
+ font-size: rem(28px);
+ }
+
+ @include iflaptop {
+ font-size: rem(32px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(60px);
+ margin-bottom: rem(80px);
+ }
+ }
+
+ .Text {
+ font-family: $font-open-sans;
+ font-weight: $font-regular;
+ font-size: rem(18px);
+ line-height: 100%;
+ color: $color-text;
+ margin-bottom: rem(20px);
+
+ @include iflaptop {
+ font-size: rem(20px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(32px);
+ }
+ }
+
+ .List {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ margin-bottom: rem(30px);
+
+ @include iftablet {
+ margin-bottom: rem(40px);
+ }
+
+ @include ifdesktop {
+ margin-bottom: rem(60px);
+ }
+
+ .ListItem {
+ font-family: $font-open-sans;
+ font-weight: $font-regular;
+ font-size: rem(18px);
+ line-height: 160%;
+ color: $color-text;
+ list-style-type: decimal;
+ margin-left: rem(40px);
+
+ @include iflaptop {
+ font-size: rem(20px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(32px);
+ margin-left: rem(40px);
+ }
+ }
+ }
}
.Inner {
display: flex;
flex-direction: column;
- align-items: flex-start;
+ align-items: center;
background-color: $color-white;
border-radius: rem(28px);
- padding: rem(80px) rem(40px);
- margin-bottom: rem(130px);
+ padding: rem(30px) rem(20px);
+ margin-bottom: rem(40px);
+
+ @include iftablet {
+ align-items: flex-start;
+ padding: rem(28px) rem(20px);
+ }
+
+ @include iflaptop {
+ padding: rem(40px);
+ margin-bottom: rem(80px);
+ }
+
+ @include ifdesktop {
+ border-radius: rem(28px);
+ padding: rem(80px) rem(40px);
+ margin-bottom: rem(130px);
+ }
.Title {
font-family: $font-open-sans;
font-weight: $font-semi-bold;
- font-size: rem(60px);
+ font-size: rem(26px);
line-height: 100%;
color: $color-text;
+ max-width: rem(320px);
+
+ @include iftablet {
+ font-size: rem(28px);
+ max-width: unset;
+ }
+
+ @include iflaptop {
+ font-size: rem(36px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(60px);
+ margin-bottom: rem(40px);
+ }
}
.Grid {
display: grid;
- grid-template-rows: repeat(2, 1fr);
- grid-template-columns: repeat(3, 1fr);
- gap: rem(40px);
- padding: rem(40px) 0;
+ grid-template-columns: rem(320px);
+ gap: rem(20px);
+ padding: rem(20px) 0;
+
+ @include iftablet {
+ grid-template-rows: repeat(3, 1fr);
+ grid-template-columns: repeat(2, 1fr);
+ gap: rem(25px);
+ padding: rem(20px) 0;
+ }
+
+ @include iflaptop {
+ gap: rem(30px);
+ padding: rem(40px) 0;
+ }
+
+ @include ifdesktop {
+ grid-template-rows: repeat(2, 1fr);
+ grid-template-columns: repeat(3, 1fr);
+ gap: rem(40px);
+ padding: rem(40px) 0;
+ }
}
.Tile {
position: relative;
- padding: rem(25px);
- height: rem(352px);
+ height: rem(220px);
+ padding: rem(20px);
border-radius: rem(28px);
overflow: hidden;
+ @include iflaptop {
+ height: rem(260px);
+ }
+
+ @include ifdesktop {
+ height: rem(352px);
+ padding: rem(25px);
+ }
+
&:after {
content: '';
display: block;
@@ -127,9 +244,21 @@
z-index: 2;
font-family: $font-open-sans;
font-weight: $font-regular;
- font-size: rem(42px);
+ font-size: rem(24px);
line-height: 100%;
color: $color-white;
+
+ @include iftablet {
+ font-size: rem(28px);
+ }
+
+ @include iflaptop {
+ font-size: rem(32px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(42px);
+ }
}
.Description {
@@ -138,82 +267,48 @@
display: none;
font-family: $font-open-sans;
font-weight: $font-regular;
- font-size: rem(24px);
+ font-size: rem(18px);
line-height: 130%;
color: $color-white;
+
+ @include iftablet {
+ font-size: rem(18px);
+ }
+
+ @include iflaptop {
+ font-size: rem(20px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(24px);
+ }
}
.Arrow {
position: absolute;
z-index: 2;
- right: rem(25px);
- bottom: rem(25px);
- width: rem(64px);
- height: rem(64px);
+ right: rem(10px);
+ bottom: rem(10px);
+ width: rem(40px);
+ height: rem(40px);
transform: rotate(-135deg);
transition: transform 250ms ease-in-out;
+
+ @include iflaptop {
+ right: rem(16px);
+ bottom: rem(16px);
+ width: rem(48px);
+ height: rem(48px);
+ }
+
+ @include ifdesktop {
+ right: rem(25px);
+ bottom: rem(25px);
+ width: rem(64px);
+ height: rem(64px);
+ }
}
}
}
-.Form {
- position: relative;
- padding: rem(40px) rem(60px);
- background: #292E3D;
- border-radius: rem(28px);
- overflow: hidden;
- display: grid;
- grid-template-columns: 1fr 1fr;
- &: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 {
- width: 100%;
- place-self: end end;
- }
-
- .SubTitle {
- position: relative;
- z-index: 2;
- font-family: $font-open-sans;
- font-weight: $font-light;
- font-size: rem(30px);
- line-height: 100%;
- color: $color-white;
- margin-bottom: rem(16px);
- }
-
- .Title {
- position: relative;
- z-index: 2;
- font-family: $font-open-sans;
- font-weight: $font-regular;
- font-size: rem(48px);
- line-height: 130%;
- color: $color-white;
- max-width: rem(660px);
- margin: 0;
- }
-}
diff --git a/src/views/home/ui/offer/offer.tsx b/src/views/home/ui/offer/offer.tsx
index b3d24e1..1273d22 100644
--- a/src/views/home/ui/offer/offer.tsx
+++ b/src/views/home/ui/offer/offer.tsx
@@ -1,7 +1,6 @@
-'use client';
import s from './offer.module.scss';
-
-import { Button, Mark, Input, AdvancedPhoneInput } from '@shared/ui';
+import { Mark } from '@shared/ui';
+import { OfferForm, OfferRequestForm } from '@/widgets';
import Image from 'next/image';
import arrow from '@public/svg/arrow-tile.svg';
@@ -11,47 +10,38 @@ import gridThree from '@public/images/grid-3.png';
import gridFour from '@public/images/grid-4.png';
import gridFive from '@public/images/grid-5.png';
import gridSix from '@public/images/grid-6.png';
-import bgForm from '@public/images/bg-form.jpg';
-import { useState } from 'react';
export default function Offer() {
- const [name, setName] = useState('');
-
return (
-
-
-
- Помогаем выявить недостатки и привести{' '}
- систему Охранно-Пожарной
- сигнализации в соответствие со всеми нормативами
-
-
Методика работы:
-
- -
- Экспертиза (аудит) выявляет нарушения ОПС
-
- -
- На основании экспертизы оформляется заключение
-
- -
- На основании выявленных нарушений производится устранение
- недостатков
-
- -
- Производится проверка проекта по замене старых пожарных систем на
- новые, что позволяет сократить стоимость сметы на модернизацию.
-
-
-
+
+
+
+
+ Помогаем выявить недостатки и привести{' '}
+ систему Охранно-Пожарной
+ сигнализации в соответствие со всеми нормативами
+
+
Методика работы:
+
+ -
+ Экспертиза (аудит) выявляет нарушения ОПС
+
+ -
+ На основании экспертизы оформляется заключение
+
+ -
+ На основании выявленных нарушений производится устранение
+ недостатков
+
+ -
+ Производится проверка проекта по замене старых пожарных систем на
+ новые, что позволяет сократить стоимость сметы на модернизацию.
+
+
+
+
+
+
Возьмем на себя все заботы
@@ -75,29 +65,8 @@ export default function Offer() {
))}
-
-
-
-
Нужна помощь?
-
- Оставьте заявку на бесплатную консультацию
-
-
-
-
+
+
);
diff --git a/src/views/home/ui/result/result.module.scss b/src/views/home/ui/result/result.module.scss
index 719c026..1d1010d 100644
--- a/src/views/home/ui/result/result.module.scss
+++ b/src/views/home/ui/result/result.module.scss
@@ -1,58 +1,135 @@
.Result {
margin: 0 auto;
- width: rem(1340px);
- padding: rem(160px) 0 rem(80px);
+ width: rem(320px);
+ padding: rem(60px) 0;
+
+ @include iftablet {
+ margin: 0 auto;
+ width: rem(712px);
+ }
+
+ @include iflaptop {
+ width: rem(930px);
+ padding: rem(80px) 0;
+ }
+
+ @include ifdesktop {
+ width: rem(1340px);
+ padding: rem(160px) 0 rem(80px);
+ }
.Header {
font-family: $font-open-sans;
font-weight: $font-semi-bold;
- font-size: rem(60px);
+ font-size: rem(28px);
line-height: 100%;
color: $color-text;
- margin-bottom: rem(96px);
+ margin-bottom: rem(40px);
+
+ @include iftablet {
+ font-size: rem(36px);
+ margin-bottom: rem(60px);
+ }
+
+ @include iflaptop {
+ font-size: rem(36px);
+ margin-bottom: rem(80px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(60px);
+ margin-bottom: rem(96px);
+ }
}
.Row {
width: 100%;
display: flex;
- flex-direction: row;
- justify-content: space-between;
- gap: rem(48px);
- margin-bottom: rem(80px);
+ flex-direction: column-reverse;
+ gap: rem(20px);
+ margin-bottom: rem(40px);
+
+ @include iftablet {
+ flex-direction: row;
+ justify-content: space-between;
+ gap: rem(80px);
+ margin-bottom: rem(80px);
+ }
+
+ @include ifdesktop {
+ gap: rem(60px);
+ margin-bottom: rem(160px);
+ }
&:nth-child(odd) {
- flex-direction: row-reverse;
+ flex-direction: column-reverse;
+
+ @include iftablet {
+ flex-direction: row-reverse;
+ }
}
.Review {
- flex: 1;
+ flex: 1 0;
.Title {
font-family: $font-open-sans;
font-weight: $font-regular;
- font-size: rem(48px);
+ font-size: rem(28px);
line-height: 100%;
color: $color-text;
- margin-bottom: rem(40px);
+ margin-bottom: rem(20px);
+
+ @include iftablet {
+ margin-bottom: rem(36px);
+ }
+
+ @include iflaptop {
+ font-size: rem(32px);
+ margin-bottom: rem(40px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(48px);
+ }
}
.Description {
font-family: $font-open-sans;
font-weight: $font-regular;
- font-size: 24px;
+ font-size: rem(18px);
line-height: 100%;
color: $color-text;
+
+ @include iflaptop {
+ font-size: rem(20px);
+ }
+
+ @include ifdesktop {
+ font-size: rem(24px);
+ }
}
}
.Picture {
- flex: 1;
+ flex: 1 rem(220px);
position: relative;
- overflow: hidden;
border-radius: rem(28px);
object-fit: contain;
- max-width: rem(720px);
- height: rem(540px);
+ max-width: rem(320px);
+ height: rem(220px);
+ overflow: hidden;
+
+ @include iflaptop {
+ flex: 1 0;
+ max-width: rem(440px);
+ height: rem(260px);
+ }
+ @include ifdesktop {
+ max-width: rem(720px);
+ height: rem(540px);
+ }
+
&:after {
content: '';
display: block;
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 e1541b7..0000000
--- a/src/widgets/license-slider/license-slider.module.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-.Slider {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
-}
-
-.Slide {
- cursor: pointer;
-}
\ 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 53%
rename from src/widgets/license-slider/license-slider.tsx
rename to src/widgets/license-slider/ui.tsx
index f5869df..7c31feb 100644
--- a/src/widgets/license-slider/license-slider.tsx
+++ b/src/widgets/license-slider/ui.tsx
@@ -1,13 +1,15 @@
'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';
+import 'swiper/css/navigation';
+import 'swiper/css/grid';
type LicenseSliderProps = {
className?: string;
@@ -20,16 +22,33 @@ type LicenseSliderProps = {
const mockFullSizeImage = 'images/empty-image.jpg';
-export default function LicenseSlider({
- className,
- images,
-}: LicenseSliderProps) {
+const swiperBreakpoints = {
+ 360: {
+ slidesPerView: 1,
+ spaceBetween: 10,
+ },
+ 768: {
+ slidesPerView: 2,
+ spaceBetween: 30,
+ },
+ 1024: {
+ slidesPerView: 3,
+ spaceBetween: 30,
+ },
+ 1440: {
+ slidesPerView: 3,
+ spaceBetween: 30,
+ },
+};
+
+export default function Ui({ className, images }: LicenseSliderProps) {
return (
console.log('slide change')}
- onSwiper={(swiper) => console.log(swiper)}
+ modules={[Grid]}
+ breakpoints={swiperBreakpoints}
+ // onSlideChange={() => console.log('slide change')}
+ // onSwiper={(swiper) => console.log(swiper)}
>
{images.map(({ id, name, image }) => (
diff --git a/src/widgets/offer-form/index.ts b/src/widgets/offer-form/index.ts
new file mode 100644
index 0000000..bc82dfd
--- /dev/null
+++ b/src/widgets/offer-form/index.ts
@@ -0,0 +1 @@
+export { default as OfferForm } from './ui';
diff --git a/src/widgets/offer-form/styles.module.scss b/src/widgets/offer-form/styles.module.scss
new file mode 100644
index 0000000..ee8cc85
--- /dev/null
+++ b/src/widgets/offer-form/styles.module.scss
@@ -0,0 +1,31 @@
+.RowForm {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-around;
+ align-items: center;
+ gap: rem(10px);
+ margin-bottom: rem(80px);
+
+ @include iftablet {
+ flex-direction: row;
+ justify-content: center;
+ gap: rem(10px);
+ }
+
+ @include iflaptop {
+ justify-content: center;
+ gap: rem(20px);
+ }
+
+ @include ifdesktop {
+ justify-content: center;
+ gap: rem(40px);
+ }
+
+ .Unit {
+ width: 300px;
+ @include iftablet {
+ width: unset;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/widgets/offer-form/ui.tsx b/src/widgets/offer-form/ui.tsx
new file mode 100644
index 0000000..5c9a3d9
--- /dev/null
+++ b/src/widgets/offer-form/ui.tsx
@@ -0,0 +1,27 @@
+'use client';
+
+import s from './styles.module.scss';
+import { Button, Input } from '@shared/ui';
+import { useState } from 'react';
+import toast from 'react-hot-toast';
+
+export default function OfferForm() {
+ const [name, setName] = useState('');
+ const notify = () => 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 (
+
+
+
+
Нужна помощь?
+
Оставьте заявку на бесплатную консультацию
+
+
+
+ );
+}