+ );
+};
+
+export default MainPageLayout;
diff --git a/src/components/Layouts/index.ts b/src/components/Layouts/index.ts
new file mode 100644
index 00000000..a03812a2
--- /dev/null
+++ b/src/components/Layouts/index.ts
@@ -0,0 +1,7 @@
+import MainPageLayout from "./MainPageLayout/MainPageLayout";
+import AppLayout from "./AppLayout/AppLayout";
+
+export {
+ MainPageLayout,
+ AppLayout,
+};
diff --git a/src/components/MainPage/About/About.module.scss b/src/components/MainPage/About/About.module.scss
new file mode 100644
index 00000000..97753b31
--- /dev/null
+++ b/src/components/MainPage/About/About.module.scss
@@ -0,0 +1,9 @@
+.container {
+ padding: 0 24px;
+ margin-bottom: 24px;
+
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+}
\ No newline at end of file
diff --git a/src/components/MainPage/About/About.tsx b/src/components/MainPage/About/About.tsx
new file mode 100644
index 00000000..ef9af196
--- /dev/null
+++ b/src/components/MainPage/About/About.tsx
@@ -0,0 +1,45 @@
+
+import React from 'react';
+import styles from './About.module.scss';
+import { Typography, Button } from '@mui/material';
+import { useTheme } from '@mui/material/styles';
+import { textColor } from '../../../utils/ThemeConstants';
+import { NavLink } from 'react-router-dom';
+
+const About = () => {
+
+ const theme = useTheme();
+
+ return (
+
+
+ Работайте с результатами палеомагнитных исследований.
+
+
+ В любое время, в любом месте, с любого устройства.
+
+
+ И не беспокойтесь о защите данных.
+
+
+
+
+
+
+ );
+};
+
+const Description = () => {
+
+ const theme = useTheme();
+
+ const content: Content = [
+ {
+ text: 'PMTools — веб-приложение, включающее в себя множество инструментов для статистической обработки данных, полученных в ходе палеомагнитных исследований.',
+ icon: tools,
+ },
+ {
+ text: 'PMTools имеет открытый исходный код и не имеет связи ни с какими другими приложениями и серверами. Все данные хранятся и обрабатываются только на стороне пользователя.',
+ icon: privacy,
+ },
+ {
+ text: 'В PMTools имеются все необходимые инструменты для компонентного анализа (модуль PCA) и статистики векторов на сфере (модуль DIR).',
+ icon: modules,
+ },
+ {
+ text: 'PMTools поддерживает импорт таких форматов данных, как PMD, DIR, PMM. В этих же форматах может быть произведён экспорт любых табличных данных в PMTools. Более того, возможен экспорт данных в форматах XLSX и CSV.',
+ icon: table,
+ },
+ {
+ text: 'Все графики и диаграммы, генерируемые в ходе обработки данных в PMTools, могут быть экспортированы в векторном формате и имеют идеально подготовленную для редактирования внутреннюю структуру.',
+ icon: graph,
+ }
+ ];
+
+ return (
+
+
+
+ );
+};
+
+export default Description;
diff --git a/src/components/MainPage/Description/assets/graph.png b/src/components/MainPage/Description/assets/graph.png
new file mode 100644
index 00000000..92a5341d
Binary files /dev/null and b/src/components/MainPage/Description/assets/graph.png differ
diff --git a/src/components/MainPage/Description/assets/modules.png b/src/components/MainPage/Description/assets/modules.png
new file mode 100644
index 00000000..d2b7cf15
Binary files /dev/null and b/src/components/MainPage/Description/assets/modules.png differ
diff --git a/src/components/MainPage/Description/assets/privacy.png b/src/components/MainPage/Description/assets/privacy.png
new file mode 100644
index 00000000..15d14d59
Binary files /dev/null and b/src/components/MainPage/Description/assets/privacy.png differ
diff --git a/src/components/MainPage/Description/assets/table.png b/src/components/MainPage/Description/assets/table.png
new file mode 100644
index 00000000..577442f6
Binary files /dev/null and b/src/components/MainPage/Description/assets/table.png differ
diff --git a/src/components/MainPage/Description/assets/tools.png b/src/components/MainPage/Description/assets/tools.png
new file mode 100644
index 00000000..5eefd09c
Binary files /dev/null and b/src/components/MainPage/Description/assets/tools.png differ
diff --git a/src/components/Main/DynamicLogo/Coordinates.tsx b/src/components/MainPage/DynamicLogo/Coordinates.tsx
similarity index 100%
rename from src/components/Main/DynamicLogo/Coordinates.tsx
rename to src/components/MainPage/DynamicLogo/Coordinates.tsx
diff --git a/src/components/Main/DynamicLogo/DynamicLogo.module.scss b/src/components/MainPage/DynamicLogo/DynamicLogo.module.scss
similarity index 100%
rename from src/components/Main/DynamicLogo/DynamicLogo.module.scss
rename to src/components/MainPage/DynamicLogo/DynamicLogo.module.scss
diff --git a/src/components/Main/DynamicLogo/DynamicLogo.tsx b/src/components/MainPage/DynamicLogo/DynamicLogo.tsx
similarity index 95%
rename from src/components/Main/DynamicLogo/DynamicLogo.tsx
rename to src/components/MainPage/DynamicLogo/DynamicLogo.tsx
index 8fb8b422..e853d2f0 100644
--- a/src/components/Main/DynamicLogo/DynamicLogo.tsx
+++ b/src/components/MainPage/DynamicLogo/DynamicLogo.tsx
@@ -62,18 +62,20 @@ const Sphere = (props: JSX.IntrinsicElements['mesh'] & {themeMode: 'dark' | 'lig
hover(true)}
// onPointerOut={(event) => hover(false)}
>
-
+
);
diff --git a/src/components/Main/DynamicLogo/SetArc3D.tsx b/src/components/MainPage/DynamicLogo/SetArc3D.tsx
similarity index 100%
rename from src/components/Main/DynamicLogo/SetArc3D.tsx
rename to src/components/MainPage/DynamicLogo/SetArc3D.tsx
diff --git a/src/components/Main/DynamicLogo/SpherePath.tsx b/src/components/MainPage/DynamicLogo/SpherePath.tsx
similarity index 100%
rename from src/components/Main/DynamicLogo/SpherePath.tsx
rename to src/components/MainPage/DynamicLogo/SpherePath.tsx
diff --git a/src/components/Main/DynamicLogo/SphericalPoints.tsx b/src/components/MainPage/DynamicLogo/SphericalPoints.tsx
similarity index 100%
rename from src/components/Main/DynamicLogo/SphericalPoints.tsx
rename to src/components/MainPage/DynamicLogo/SphericalPoints.tsx
diff --git a/src/components/Main/DynamicLogo/Word.tsx b/src/components/MainPage/DynamicLogo/Word.tsx
similarity index 100%
rename from src/components/Main/DynamicLogo/Word.tsx
rename to src/components/MainPage/DynamicLogo/Word.tsx
diff --git a/src/components/MainPage/FeaturesCards/FeatureCard.tsx b/src/components/MainPage/FeaturesCards/FeatureCard.tsx
new file mode 100644
index 00000000..535f1fb3
--- /dev/null
+++ b/src/components/MainPage/FeaturesCards/FeatureCard.tsx
@@ -0,0 +1,51 @@
+import React, { useEffect, useState } from 'react';
+import styles from './FeaturesCards.module.scss';
+import { Typography, Button } from '@mui/material';
+import { useTheme } from '@mui/material/styles';
+import { textColor, bgColorBlocks } from '../../../utils/ThemeConstants';
+
+export type Content = {
+ text: {title: string, description: string};
+ image: string,
+ align: 'left' | 'right',
+};
+
+const FeatureCard = ({ text, image, align }: Content) => {
+
+ const theme = useTheme();
+
+ return (
+
+
+
+ {text.title}
+
+
+ {text.description}
+
+
+
+
+
+
+ );
+};
+
+export default FeatureCard;
+
diff --git a/src/components/MainPage/FeaturesCards/FeaturesCards.module.scss b/src/components/MainPage/FeaturesCards/FeaturesCards.module.scss
new file mode 100644
index 00000000..d34e413d
--- /dev/null
+++ b/src/components/MainPage/FeaturesCards/FeaturesCards.module.scss
@@ -0,0 +1,32 @@
+.container {
+ position: relative;
+ padding: 72px 120px 52px 120px;
+ margin: 48px 0;
+
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+}
+
+.card {
+ width: 100%;
+ height: 100%;
+
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+
+ padding: 32px 96px;
+
+ .cardText {
+ width: 80%;
+ height: 100%;
+ }
+
+ .cardImage {
+ width: 100%;
+ height: 100%;
+ }
+}
\ No newline at end of file
diff --git a/src/components/MainPage/FeaturesCards/FeaturesCards.tsx b/src/components/MainPage/FeaturesCards/FeaturesCards.tsx
new file mode 100644
index 00000000..b2f1b4d0
--- /dev/null
+++ b/src/components/MainPage/FeaturesCards/FeaturesCards.tsx
@@ -0,0 +1,110 @@
+
+import React, { useEffect, useState } from 'react';
+import styles from './FeaturesCards.module.scss';
+import { Typography, Button } from '@mui/material';
+import { useTheme } from '@mui/material/styles';
+import { textColor, bgColorBlocks } from '../../../utils/ThemeConstants';
+import FeatureCard, { Content } from './FeatureCard';
+import {
+ pca,
+ pcaDark,
+ dir,
+ dirDark,
+ vgp,
+ vgpDark,
+ selection,
+ selectionDark,
+ exportData,
+ exportDataDark,
+ exportGraphs,
+ exportGraphsDark,
+ darkTheme,
+ darkThemeDark,
+} from './assets';
+
+
+const Description = () => {
+
+ const theme = useTheme();
+
+ const content: Array = [
+ {
+ text: {
+ title: 'Проводите компонентный анализ',
+ description: 'Страница магнитных чисток (PCA) предоставляет классические инструменты для выделения компонент намагниченности. Работайте напрямую с коллекцией образцов и экспортируйте выделенные направления в любом удобном формате.'
+ },
+ image: theme.palette.mode === 'light' ? pca : pcaDark,
+ align: 'left'
+ },
+ {
+ text: {
+ title: 'Изучайте распределения направлений',
+ description: 'Страница статистики направлений (DIR) даёт возможность найти средние направления различными методами. И на этой же странице вы можете провести палеомагнитные статистические тесты для проверки своих гипотез.'
+ },
+ image: theme.palette.mode === 'light' ? dir : dirDark,
+ align: 'right'
+ },
+ {
+ text: {
+ title: 'Находите виртуальные геомагнитные полюса',
+ description: 'Для расчёта полюсов достаточно на странице DIR открыть соответствующий модуль и просто ввести или импортировать координаты точек отбора образцов (можно даже из XLSX файла). И полученные VGP можно тут же экспортировать в формате, подходящем для программы GPLates',
+ },
+ image: theme.palette.mode === 'light' ? vgp : vgpDark,
+ align: 'left'
+ },
+ {
+ text: {
+ title: 'Взаимодействие с данными ещё не было столь простым',
+ description: 'Все данные в PMTools представлены в виде таблиц и графиков, которые напрямую связаны между собой — вы можете выбирать нужные вам направления (точки) прямиком из таблиц, обводя их на графиках, или даже вводя их через в специальное поле.'
+ },
+ image: theme.palette.mode === 'light' ? selection : selectionDark,
+ align: 'right'
+ },
+ {
+ text: {
+ title: 'Работайте с данными в любом формате',
+ description: 'Встроенный в PMTools конвертер форматов хранения палеомагнитных данных позволяет вам импортировать классические форматы данных и экспортировать их в любой удобный формат, в том числе в Excel.'
+ },
+ image: theme.palette.mode === 'light' ? exportData : exportDataDark,
+ align: 'left'
+ },
+ {
+ text: {
+ title: 'Забудьте о трудностях при работе с графикой',
+ description: 'Все графики и диаграммы в PMTools написаны с нуля специально для отображения палеомагнитных данных — все они заранее подготовлены для использования в публикациях и презентациях, а при их экспорте вы получите SVG файл с понятной и легко редактируемой структурой.'
+ },
+ image: theme.palette.mode === 'light' ? exportGraphs : exportGraphsDark,
+ align: 'right'
+ },
+ {
+ text: {
+ title: 'Комфортная работа в любое время суток',
+ description: 'В PMTools вы можете переключиться на тёмную тему и комфортно работать в полной темноте.'
+ },
+ image: theme.palette.mode === 'light' ? darkTheme : darkThemeDark,
+ align: 'left'
+ },
+ ];
+
+ return (
+
+ {
+ content.map((card, index) => (
+
+ ))
+ }
+
+ );
+};
+
+export default Description;
diff --git a/src/components/MainPage/FeaturesCards/assets/darkTheme.png b/src/components/MainPage/FeaturesCards/assets/darkTheme.png
new file mode 100644
index 00000000..70056e98
Binary files /dev/null and b/src/components/MainPage/FeaturesCards/assets/darkTheme.png differ
diff --git a/src/components/MainPage/FeaturesCards/assets/darkThemeDark.png b/src/components/MainPage/FeaturesCards/assets/darkThemeDark.png
new file mode 100644
index 00000000..4eb48038
Binary files /dev/null and b/src/components/MainPage/FeaturesCards/assets/darkThemeDark.png differ
diff --git a/src/components/MainPage/FeaturesCards/assets/dir.png b/src/components/MainPage/FeaturesCards/assets/dir.png
new file mode 100644
index 00000000..e3646efe
Binary files /dev/null and b/src/components/MainPage/FeaturesCards/assets/dir.png differ
diff --git a/src/components/MainPage/FeaturesCards/assets/dirDark.png b/src/components/MainPage/FeaturesCards/assets/dirDark.png
new file mode 100644
index 00000000..e79e3265
Binary files /dev/null and b/src/components/MainPage/FeaturesCards/assets/dirDark.png differ
diff --git a/src/components/MainPage/FeaturesCards/assets/exportData.png b/src/components/MainPage/FeaturesCards/assets/exportData.png
new file mode 100644
index 00000000..e1e043a2
Binary files /dev/null and b/src/components/MainPage/FeaturesCards/assets/exportData.png differ
diff --git a/src/components/MainPage/FeaturesCards/assets/exportDataDark.png b/src/components/MainPage/FeaturesCards/assets/exportDataDark.png
new file mode 100644
index 00000000..d8f2f1df
Binary files /dev/null and b/src/components/MainPage/FeaturesCards/assets/exportDataDark.png differ
diff --git a/src/components/MainPage/FeaturesCards/assets/exportGraphs.png b/src/components/MainPage/FeaturesCards/assets/exportGraphs.png
new file mode 100644
index 00000000..2c5cb053
Binary files /dev/null and b/src/components/MainPage/FeaturesCards/assets/exportGraphs.png differ
diff --git a/src/components/MainPage/FeaturesCards/assets/exportGraphsDark.png b/src/components/MainPage/FeaturesCards/assets/exportGraphsDark.png
new file mode 100644
index 00000000..f81ed032
Binary files /dev/null and b/src/components/MainPage/FeaturesCards/assets/exportGraphsDark.png differ
diff --git a/src/components/MainPage/FeaturesCards/assets/index.ts b/src/components/MainPage/FeaturesCards/assets/index.ts
new file mode 100644
index 00000000..039d86f9
--- /dev/null
+++ b/src/components/MainPage/FeaturesCards/assets/index.ts
@@ -0,0 +1,31 @@
+import pca from './pca.png';
+import pcaDark from './pcaDark.png';
+import dir from './dir.png';
+import dirDark from './dirDark.png';
+import vgp from './vgp.png';
+import vgpDark from './vgpDark.png';
+import selection from './selection.png';
+import selectionDark from './selectionDark.png';
+import exportData from './exportData.png';
+import exportDataDark from './exportDataDark.png';
+import exportGraphs from './exportGraphs.png';
+import exportGraphsDark from './exportGraphsDark.png';
+import darkTheme from './darkTheme.png';
+import darkThemeDark from './darkThemeDark.png';
+
+export {
+ pca,
+ pcaDark,
+ dir,
+ dirDark,
+ vgp,
+ vgpDark,
+ selection,
+ selectionDark,
+ exportData,
+ exportDataDark,
+ exportGraphs,
+ exportGraphsDark,
+ darkTheme,
+ darkThemeDark,
+};
diff --git a/src/components/MainPage/FeaturesCards/assets/pca.png b/src/components/MainPage/FeaturesCards/assets/pca.png
new file mode 100644
index 00000000..7ed5bc18
Binary files /dev/null and b/src/components/MainPage/FeaturesCards/assets/pca.png differ
diff --git a/src/components/MainPage/FeaturesCards/assets/pcaDark.png b/src/components/MainPage/FeaturesCards/assets/pcaDark.png
new file mode 100644
index 00000000..45b8e808
Binary files /dev/null and b/src/components/MainPage/FeaturesCards/assets/pcaDark.png differ
diff --git a/src/components/MainPage/FeaturesCards/assets/selection.png b/src/components/MainPage/FeaturesCards/assets/selection.png
new file mode 100644
index 00000000..fab639c0
Binary files /dev/null and b/src/components/MainPage/FeaturesCards/assets/selection.png differ
diff --git a/src/components/MainPage/FeaturesCards/assets/selectionDark.png b/src/components/MainPage/FeaturesCards/assets/selectionDark.png
new file mode 100644
index 00000000..a1460aa4
Binary files /dev/null and b/src/components/MainPage/FeaturesCards/assets/selectionDark.png differ
diff --git a/src/components/MainPage/FeaturesCards/assets/vgp.png b/src/components/MainPage/FeaturesCards/assets/vgp.png
new file mode 100644
index 00000000..b7e15d71
Binary files /dev/null and b/src/components/MainPage/FeaturesCards/assets/vgp.png differ
diff --git a/src/components/MainPage/FeaturesCards/assets/vgpDark.png b/src/components/MainPage/FeaturesCards/assets/vgpDark.png
new file mode 100644
index 00000000..5b422270
Binary files /dev/null and b/src/components/MainPage/FeaturesCards/assets/vgpDark.png differ
diff --git a/src/components/MainPage/Footer/Footer.module.scss b/src/components/MainPage/Footer/Footer.module.scss
new file mode 100644
index 00000000..a7bacf60
--- /dev/null
+++ b/src/components/MainPage/Footer/Footer.module.scss
@@ -0,0 +1,21 @@
+.container {
+ width: 100%;
+ height: 100%;
+
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+
+ padding: 72px 240px 52px 240px;
+ margin: 48px 0 0 0;
+
+ box-sizing: border-box;
+}
+
+.rightBlock {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+}
\ No newline at end of file
diff --git a/src/components/MainPage/Footer/Footer.tsx b/src/components/MainPage/Footer/Footer.tsx
new file mode 100644
index 00000000..ca4bd0e6
--- /dev/null
+++ b/src/components/MainPage/Footer/Footer.tsx
@@ -0,0 +1,32 @@
+
+import React, { useEffect, useState } from 'react';
+import styles from './Footer.module.scss';
+import { Divider, Typography } from '@mui/material';
+import { useTheme } from '@mui/material/styles';
+import { textColor, bgColorBlocks } from '../../../utils/ThemeConstants';
+
+const Footer = () => {
+
+ const theme = useTheme();
+
+ return (
+