diff --git a/.gitignore b/.gitignore
index d298d9f..a320e4b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,3 +31,4 @@ coverage
*.sw?
*.tsbuildinfo
+*.node_modules
\ No newline at end of file
diff --git a/spa/vue/.gitignore b/spa/vue/.gitignore
new file mode 100644
index 0000000..12669a9
--- /dev/null
+++ b/spa/vue/.gitignore
@@ -0,0 +1,32 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+.DS_Store
+dist-ssr
+coverage
+*.local
+
+/cypress/videos/
+/cypress/screenshots/
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+*.tsbuildinfo
+
+.idea
+.node_modules
diff --git a/spa/vue/Makefile b/spa/vue/Makefile
new file mode 100644
index 0000000..762e428
--- /dev/null
+++ b/spa/vue/Makefile
@@ -0,0 +1,13 @@
+build:
+ npm run build
+
+run:
+ npm run dev
+
+deploy:
+ npm run build
+ git add .
+ git commit -m 'build deploy'
+ git push
+
+.DEFAULT_GOAL := run
\ No newline at end of file
diff --git a/spa/vue/README.md b/spa/vue/README.md
new file mode 100644
index 0000000..176ef95
--- /dev/null
+++ b/spa/vue/README.md
@@ -0,0 +1,24 @@
+### Есть задания для фрилансеров. Каждое задание 1000 рублей.
+
+1. Задача настроить авторизацию через coocky no javaScript.
+2. Хранение состояния через vuex.
+3. Создать Makefile для работы со сборкой деплоем.
+
+
+## Project Setup
+
+```sh
+npm install
+```
+
+### Compile and Hot-Reload for Development
+
+```sh
+npm run dev
+```
+
+### Compile and Minify for Production
+
+```sh
+npm run build
+```
diff --git a/spa/vue/advices.txt b/spa/vue/advices.txt
new file mode 100644
index 0000000..6c26fb9
--- /dev/null
+++ b/spa/vue/advices.txt
@@ -0,0 +1,30 @@
+Выбор шрифтов и размеров для мобильных устройств и десктопа зависит от множества факторов, таких как целевая аудитория, дизайн сайта/приложения и цели использования. Тем не менее, есть несколько общих рекомендаций, которые помогут обеспечить хорошую читаемость текста на разных устройствах.
+
+### Шрифты
+
+#### Для мобильных устройств:
+- **Roboto**: Один из самых популярных шрифтов для Android. Он имеет четкий и чистый вид, хорошо подходит для чтения на небольших экранах.
+- **San Francisco**: Стандартный шрифт для iOS. Хорошо сбалансирован и удобен для чтения.
+- **Open Sans**: Универсальный шрифт, который отлично смотрится на любых устройствах благодаря своей нейтральной стилистике.
+
+#### Для десктопных устройств:
+- **Georgia**: Классический шрифт с засечками, который идеально подходит для длинных текстов. Обеспечивает комфортное чтение даже на больших экранах.
+- **Lato**: Современный шрифт без засечек, легкий и элегантный. Подходит для заголовков и основного текста.
+- **Merriweather**: Отличный выбор для длинных статей и блогов. Имеет хорошие пропорции и контрастность.
+
+### Размеры шрифта
+
+#### Мобильные устройства:
+- **Основной текст**: 16px–18px. Это оптимальный размер для комфортного чтения на маленьких экранах.
+- **Заголовки**: 20px–24px для h2, 18px–22px для h3, 16px–20px для h4.
+
+#### Десктопные устройства:
+- **Основной текст**: 18px–20px. Такой размер обеспечивает удобство чтения на больших экранах.
+- **Заголовки**: 28px–32px для h2, 24px–28px для h3, 20px–24px для h4.
+
+### Дополнительные советы:
+- Используйте **относительные единицы измерения** (em, rem) вместо абсолютных (px), чтобы шрифт масштабировался вместе с изменением размера экрана.
+- Следите за **межстрочным интервалом** (line-height). Оптимальное значение — около 1.5–1.6 для основного текста.
+- Убедитесь, что у вас достаточно **контраста между текстом и фоном**. Черный текст на белом фоне — классический пример хорошего сочетания.
+
+Эти рекомендации помогут создать удобный интерфейс как для мобильных пользователей, так и для тех, кто работает за компьютером.
\ No newline at end of file
diff --git a/spa/vue/index.html b/spa/vue/index.html
new file mode 100644
index 0000000..397c0e5
--- /dev/null
+++ b/spa/vue/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/spa/vue/src/assets/colors.css b/spa/vue/src/assets/colors.css
new file mode 100644
index 0000000..de76b95
--- /dev/null
+++ b/spa/vue/src/assets/colors.css
@@ -0,0 +1,23 @@
+/* Светлая тема (по умолчанию) */
+:root {
+ --background-color: #ffffff;
+ --text-color: #1c1d1d;
+ --light-dark-background-color: #ffffff;
+ --light-dark-text-color: #273f2c;
+ --disabled-backgroud-color: rgba(23, 62, 31, 0.281);
+ --button-text-color: #bac677;
+ --disabled-dark-background-color: rgba(55, 64, 62, 0.2);
+ --button-dark-background-color: #3cbf40;
+ --light-dark-background-color: #8cd68f;
+ }
+
+ /* Темная тема */
+ [data-theme="dark"] {
+ --background-color: #282828;
+ --text-color: #3cb756;
+ --light-dark-background-color: #4e5e49;
+ --light-dark-text-color: #59f37b;
+ --disabled-dark-background-color: rgba(159, 193, 185, 0.2);
+ --button-dark-background-color: #395e3a;
+ }
+
\ No newline at end of file
diff --git a/spa/vue/src/assets/fonts.css b/spa/vue/src/assets/fonts.css
new file mode 100644
index 0000000..bbad225
--- /dev/null
+++ b/spa/vue/src/assets/fonts.css
@@ -0,0 +1,56 @@
+@font-face {
+ font-family: 'OpenSansVariableFont';
+ src: url('./fonts/Open_Sans/hinted-OpenSans-Regular.ttf') format('truetype-variations'),
+ url('./fonts/Open_Sans/OpenSans-Regular.woff') format('woff'),
+ url('./fonts/Open_Sans/OpenSans-Regular.woff2') format('woff2');
+ font-weight: 100 900;
+ font-stretch: 50% 200%;
+}
+
+@font-face {
+ font-family: 'OpenSansItalicVariableFont';
+ src: url('./fonts/Open_Sans/hinted-OpenSans-Italic.ttf') format('truetype-variations'),
+ url('./fonts/Open_Sans/OpenSans-Italic.woff') format('woff'),
+ url('./fonts/Open_Sans/OpenSans-Italic.woff2') format('woff2');
+ font-style: italic;
+ font-weight: 100 900;
+ font-stretch: 50% 200%;
+}
+
+@font-face {
+ font-family: 'RobotoVariableFont';
+ src: url('./fonts/Roboto/hinted-Roboto-Regular.ttf') format('truetype-variations'),
+ url('./fonts/Roboto/Roboto-Regular.woff') format('woff'),
+ url('./fonts/Roboto/Roboto-Regular.woff2') format('woff2');
+ font-weight: 100 900;
+ font-stretch: 50% 200%;
+}
+
+@font-face {
+ font-family: 'RobotoItalicVarFont';
+ src: url('./fonts/Roboto/hinted-Roboto-Italic.ttf') format('truetype-variations'),
+ url('./fonts/Roboto/Roboto-Italic.woff') format('woff'),
+ url('./fonts/Roboto/Roboto-Italic.woff2') format('woff2');
+ font-style: italic;
+ font-weight: 100 900;
+ font-stretch: 50% 200%;
+}
+
+:root {
+ --font-primary: 'OpenSansVariableFont', Arial, sans-serif;
+ --font-secondary: 'RobotoItalicVarFont', Arial, sans-serif;
+
+ --weight-light: 300;
+ --weight-normal: 400;
+ --weight-bold: 700;
+}
+
+body {
+ font-family: var(--font-primary);
+ font-weight: var(--weight-normal);
+}
+
+h1, h2, h3 {
+ font-family: var(--font-secondary);
+ font-weight: var(--weight-light);
+}
\ No newline at end of file
diff --git a/spa/vue/src/assets/fonts/Open_Sans/OFL.txt b/spa/vue/src/assets/fonts/Open_Sans/OFL.txt
new file mode 100644
index 0000000..cb7002a
--- /dev/null
+++ b/spa/vue/src/assets/fonts/Open_Sans/OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2020 The Open Sans Project Authors (https://github.com/googlefonts/opensans)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://openfontlicense.org
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Italic-VariableFont_wdth,wght.ttf b/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Italic-VariableFont_wdth,wght.ttf
new file mode 100644
index 0000000..8312b2c
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Italic-VariableFont_wdth,wght.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Italic.woff b/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Italic.woff
new file mode 100644
index 0000000..4776faf
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Italic.woff differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Italic.woff2 b/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Italic.woff2
new file mode 100644
index 0000000..43b0685
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Italic.woff2 differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Regular.woff b/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Regular.woff
new file mode 100644
index 0000000..33e8eac
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Regular.woff differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Regular.woff2 b/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Regular.woff2
new file mode 100644
index 0000000..5f2441b
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/OpenSans-Regular.woff2 differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf b/spa/vue/src/assets/fonts/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf
new file mode 100644
index 0000000..ac587b4
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/README.txt b/spa/vue/src/assets/fonts/Open_Sans/README.txt
new file mode 100644
index 0000000..2548322
--- /dev/null
+++ b/spa/vue/src/assets/fonts/Open_Sans/README.txt
@@ -0,0 +1,100 @@
+Open Sans Variable Font
+=======================
+
+This download contains Open Sans as both variable fonts and static fonts.
+
+Open Sans is a variable font with these axes:
+ wdth
+ wght
+
+This means all the styles are contained in these files:
+ OpenSans-VariableFont_wdth,wght.ttf
+ OpenSans-Italic-VariableFont_wdth,wght.ttf
+
+If your app fully supports variable fonts, you can now pick intermediate styles
+that aren’t available as static fonts. Not all apps support variable fonts, and
+in those cases you can use the static font files for Open Sans:
+ static/OpenSans_Condensed-Light.ttf
+ static/OpenSans_Condensed-Regular.ttf
+ static/OpenSans_Condensed-Medium.ttf
+ static/OpenSans_Condensed-SemiBold.ttf
+ static/OpenSans_Condensed-Bold.ttf
+ static/OpenSans_Condensed-ExtraBold.ttf
+ static/OpenSans_SemiCondensed-Light.ttf
+ static/OpenSans_SemiCondensed-Regular.ttf
+ static/OpenSans_SemiCondensed-Medium.ttf
+ static/OpenSans_SemiCondensed-SemiBold.ttf
+ static/OpenSans_SemiCondensed-Bold.ttf
+ static/OpenSans_SemiCondensed-ExtraBold.ttf
+ static/OpenSans-Light.ttf
+ static/OpenSans-Regular.ttf
+ static/OpenSans-Medium.ttf
+ static/OpenSans-SemiBold.ttf
+ static/OpenSans-Bold.ttf
+ static/OpenSans-ExtraBold.ttf
+ static/OpenSans_Condensed-LightItalic.ttf
+ static/OpenSans_Condensed-Italic.ttf
+ static/OpenSans_Condensed-MediumItalic.ttf
+ static/OpenSans_Condensed-SemiBoldItalic.ttf
+ static/OpenSans_Condensed-BoldItalic.ttf
+ static/OpenSans_Condensed-ExtraBoldItalic.ttf
+ static/OpenSans_SemiCondensed-LightItalic.ttf
+ static/OpenSans_SemiCondensed-Italic.ttf
+ static/OpenSans_SemiCondensed-MediumItalic.ttf
+ static/OpenSans_SemiCondensed-SemiBoldItalic.ttf
+ static/OpenSans_SemiCondensed-BoldItalic.ttf
+ static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf
+ static/OpenSans-LightItalic.ttf
+ static/OpenSans-Italic.ttf
+ static/OpenSans-MediumItalic.ttf
+ static/OpenSans-SemiBoldItalic.ttf
+ static/OpenSans-BoldItalic.ttf
+ static/OpenSans-ExtraBoldItalic.ttf
+
+Get started
+-----------
+
+1. Install the font files you want to use
+
+2. Use your app's font picker to view the font family and all the
+available styles
+
+Learn more about variable fonts
+-------------------------------
+
+ https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
+ https://variablefonts.typenetwork.com
+ https://medium.com/variable-fonts
+
+In desktop apps
+
+ https://theblog.adobe.com/can-variable-fonts-illustrator-cc
+ https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
+
+Online
+
+ https://developers.google.com/fonts/docs/getting_started
+ https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
+ https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
+
+Installing fonts
+
+ MacOS: https://support.apple.com/en-us/HT201749
+ Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
+ Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
+
+Android Apps
+
+ https://developers.google.com/fonts/docs/android
+ https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
+
+License
+-------
+Please read the full license text (OFL.txt) to understand the permissions,
+restrictions and requirements for usage, redistribution, and modification.
+
+You can use them in your products & projects – print or digital,
+commercial or otherwise.
+
+This isn't legal advice, please consider consulting a lawyer and see the full
+license for all details.
diff --git a/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Italic.eot b/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Italic.eot
new file mode 100644
index 0000000..65fc2f2
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Italic.eot differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Italic.svg b/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Italic.svg
new file mode 100644
index 0000000..266a253
--- /dev/null
+++ b/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Italic.svg
@@ -0,0 +1,3335 @@
+
+
+
diff --git a/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Italic.ttf b/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Italic.ttf
new file mode 100644
index 0000000..6960e72
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Italic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Regular.eot b/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Regular.eot
new file mode 100644
index 0000000..e9f791e
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Regular.eot differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Regular.svg b/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Regular.svg
new file mode 100644
index 0000000..38c06cf
--- /dev/null
+++ b/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Regular.svg
@@ -0,0 +1,3096 @@
+
+
+
diff --git a/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Regular.ttf b/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Regular.ttf
new file mode 100644
index 0000000..6022f6c
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/hinted-OpenSans-Regular.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Bold.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Bold.ttf
new file mode 100644
index 0000000..98c74e0
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Bold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-BoldItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-BoldItalic.ttf
new file mode 100644
index 0000000..8558928
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-BoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-ExtraBold.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-ExtraBold.ttf
new file mode 100644
index 0000000..4eb3393
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-ExtraBold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-ExtraBoldItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..75789b4
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-ExtraBoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Italic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Italic.ttf
new file mode 100644
index 0000000..29ff693
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Italic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Light.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Light.ttf
new file mode 100644
index 0000000..ea175cc
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Light.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-LightItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-LightItalic.ttf
new file mode 100644
index 0000000..edbfe0b
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-LightItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Medium.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Medium.ttf
new file mode 100644
index 0000000..ae71693
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Medium.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-MediumItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-MediumItalic.ttf
new file mode 100644
index 0000000..6d1e09b
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-MediumItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Regular.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Regular.ttf
new file mode 100644
index 0000000..67803bb
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-Regular.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-SemiBold.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-SemiBold.ttf
new file mode 100644
index 0000000..e5ab464
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-SemiBold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-SemiBoldItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-SemiBoldItalic.ttf
new file mode 100644
index 0000000..cd23e15
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans-SemiBoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Bold.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Bold.ttf
new file mode 100644
index 0000000..525397d
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Bold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-BoldItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-BoldItalic.ttf
new file mode 100644
index 0000000..d6c9bc0
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-BoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-ExtraBold.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-ExtraBold.ttf
new file mode 100644
index 0000000..3e600b9
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-ExtraBold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..0393650
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Italic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Italic.ttf
new file mode 100644
index 0000000..fdf0a52
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Italic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Light.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Light.ttf
new file mode 100644
index 0000000..459be7b
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Light.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-LightItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-LightItalic.ttf
new file mode 100644
index 0000000..5f05d08
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-LightItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Medium.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Medium.ttf
new file mode 100644
index 0000000..802200d
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Medium.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-MediumItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-MediumItalic.ttf
new file mode 100644
index 0000000..b43786b
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-MediumItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Regular.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Regular.ttf
new file mode 100644
index 0000000..a2a83ac
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Regular.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-SemiBold.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-SemiBold.ttf
new file mode 100644
index 0000000..75bcd43
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-SemiBold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-SemiBoldItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-SemiBoldItalic.ttf
new file mode 100644
index 0000000..9fcaa52
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-SemiBoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Bold.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Bold.ttf
new file mode 100644
index 0000000..dc927fc
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Bold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-BoldItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-BoldItalic.ttf
new file mode 100644
index 0000000..7601048
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-BoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-ExtraBold.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-ExtraBold.ttf
new file mode 100644
index 0000000..d6864b1
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-ExtraBold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..ec7ade5
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Italic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Italic.ttf
new file mode 100644
index 0000000..7fc00c8
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Italic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Light.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Light.ttf
new file mode 100644
index 0000000..5936496
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Light.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-LightItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-LightItalic.ttf
new file mode 100644
index 0000000..7ced21a
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-LightItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Medium.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Medium.ttf
new file mode 100644
index 0000000..25b1aad
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Medium.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-MediumItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-MediumItalic.ttf
new file mode 100644
index 0000000..fd87f78
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-MediumItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Regular.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Regular.ttf
new file mode 100644
index 0000000..5b09b35
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Regular.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-SemiBold.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-SemiBold.ttf
new file mode 100644
index 0000000..fff3a37
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-SemiBold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf
new file mode 100644
index 0000000..3874205
Binary files /dev/null and b/spa/vue/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/OFL.txt b/spa/vue/src/assets/fonts/Roboto/OFL.txt
new file mode 100644
index 0000000..9c48e05
--- /dev/null
+++ b/spa/vue/src/assets/fonts/Roboto/OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2011 The Roboto Project Authors (https://github.com/googlefonts/roboto-classic)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://openfontlicense.org
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/spa/vue/src/assets/fonts/Roboto/README.txt b/spa/vue/src/assets/fonts/Roboto/README.txt
new file mode 100644
index 0000000..26368fa
--- /dev/null
+++ b/spa/vue/src/assets/fonts/Roboto/README.txt
@@ -0,0 +1,118 @@
+Roboto Variable Font
+====================
+
+This download contains Roboto as both variable fonts and static fonts.
+
+Roboto is a variable font with these axes:
+ wdth
+ wght
+
+This means all the styles are contained in these files:
+ Roboto-VariableFont_wdth,wght.ttf
+ Roboto-Italic-VariableFont_wdth,wght.ttf
+
+If your app fully supports variable fonts, you can now pick intermediate styles
+that aren’t available as static fonts. Not all apps support variable fonts, and
+in those cases you can use the static font files for Roboto:
+ static/Roboto_Condensed-Thin.ttf
+ static/Roboto_Condensed-ExtraLight.ttf
+ static/Roboto_Condensed-Light.ttf
+ static/Roboto_Condensed-Regular.ttf
+ static/Roboto_Condensed-Medium.ttf
+ static/Roboto_Condensed-SemiBold.ttf
+ static/Roboto_Condensed-Bold.ttf
+ static/Roboto_Condensed-ExtraBold.ttf
+ static/Roboto_Condensed-Black.ttf
+ static/Roboto_SemiCondensed-Thin.ttf
+ static/Roboto_SemiCondensed-ExtraLight.ttf
+ static/Roboto_SemiCondensed-Light.ttf
+ static/Roboto_SemiCondensed-Regular.ttf
+ static/Roboto_SemiCondensed-Medium.ttf
+ static/Roboto_SemiCondensed-SemiBold.ttf
+ static/Roboto_SemiCondensed-Bold.ttf
+ static/Roboto_SemiCondensed-ExtraBold.ttf
+ static/Roboto_SemiCondensed-Black.ttf
+ static/Roboto-Thin.ttf
+ static/Roboto-ExtraLight.ttf
+ static/Roboto-Light.ttf
+ static/Roboto-Regular.ttf
+ static/Roboto-Medium.ttf
+ static/Roboto-SemiBold.ttf
+ static/Roboto-Bold.ttf
+ static/Roboto-ExtraBold.ttf
+ static/Roboto-Black.ttf
+ static/Roboto_Condensed-ThinItalic.ttf
+ static/Roboto_Condensed-ExtraLightItalic.ttf
+ static/Roboto_Condensed-LightItalic.ttf
+ static/Roboto_Condensed-Italic.ttf
+ static/Roboto_Condensed-MediumItalic.ttf
+ static/Roboto_Condensed-SemiBoldItalic.ttf
+ static/Roboto_Condensed-BoldItalic.ttf
+ static/Roboto_Condensed-ExtraBoldItalic.ttf
+ static/Roboto_Condensed-BlackItalic.ttf
+ static/Roboto_SemiCondensed-ThinItalic.ttf
+ static/Roboto_SemiCondensed-ExtraLightItalic.ttf
+ static/Roboto_SemiCondensed-LightItalic.ttf
+ static/Roboto_SemiCondensed-Italic.ttf
+ static/Roboto_SemiCondensed-MediumItalic.ttf
+ static/Roboto_SemiCondensed-SemiBoldItalic.ttf
+ static/Roboto_SemiCondensed-BoldItalic.ttf
+ static/Roboto_SemiCondensed-ExtraBoldItalic.ttf
+ static/Roboto_SemiCondensed-BlackItalic.ttf
+ static/Roboto-ThinItalic.ttf
+ static/Roboto-ExtraLightItalic.ttf
+ static/Roboto-LightItalic.ttf
+ static/Roboto-Italic.ttf
+ static/Roboto-MediumItalic.ttf
+ static/Roboto-SemiBoldItalic.ttf
+ static/Roboto-BoldItalic.ttf
+ static/Roboto-ExtraBoldItalic.ttf
+ static/Roboto-BlackItalic.ttf
+
+Get started
+-----------
+
+1. Install the font files you want to use
+
+2. Use your app's font picker to view the font family and all the
+available styles
+
+Learn more about variable fonts
+-------------------------------
+
+ https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
+ https://variablefonts.typenetwork.com
+ https://medium.com/variable-fonts
+
+In desktop apps
+
+ https://theblog.adobe.com/can-variable-fonts-illustrator-cc
+ https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
+
+Online
+
+ https://developers.google.com/fonts/docs/getting_started
+ https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
+ https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
+
+Installing fonts
+
+ MacOS: https://support.apple.com/en-us/HT201749
+ Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
+ Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
+
+Android Apps
+
+ https://developers.google.com/fonts/docs/android
+ https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
+
+License
+-------
+Please read the full license text (OFL.txt) to understand the permissions,
+restrictions and requirements for usage, redistribution, and modification.
+
+You can use them in your products & projects – print or digital,
+commercial or otherwise.
+
+This isn't legal advice, please consider consulting a lawyer and see the full
+license for all details.
diff --git a/spa/vue/src/assets/fonts/Roboto/Roboto-Italic-VariableFont_wdth,wght.ttf b/spa/vue/src/assets/fonts/Roboto/Roboto-Italic-VariableFont_wdth,wght.ttf
new file mode 100644
index 0000000..978e53a
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/Roboto-Italic-VariableFont_wdth,wght.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/Roboto-Italic.woff b/spa/vue/src/assets/fonts/Roboto/Roboto-Italic.woff
new file mode 100644
index 0000000..763b5ec
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/Roboto-Italic.woff differ
diff --git a/spa/vue/src/assets/fonts/Roboto/Roboto-Italic.woff2 b/spa/vue/src/assets/fonts/Roboto/Roboto-Italic.woff2
new file mode 100644
index 0000000..3128ff4
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/Roboto-Italic.woff2 differ
diff --git a/spa/vue/src/assets/fonts/Roboto/Roboto-Regular.woff b/spa/vue/src/assets/fonts/Roboto/Roboto-Regular.woff
new file mode 100644
index 0000000..9c1fb03
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/Roboto-Regular.woff differ
diff --git a/spa/vue/src/assets/fonts/Roboto/Roboto-Regular.woff2 b/spa/vue/src/assets/fonts/Roboto/Roboto-Regular.woff2
new file mode 100644
index 0000000..1a14ac5
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/Roboto-Regular.woff2 differ
diff --git a/spa/vue/src/assets/fonts/Roboto/Roboto-VariableFont_wdth,wght.ttf b/spa/vue/src/assets/fonts/Roboto/Roboto-VariableFont_wdth,wght.ttf
new file mode 100644
index 0000000..bba55f6
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/Roboto-VariableFont_wdth,wght.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Italic.eot b/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Italic.eot
new file mode 100644
index 0000000..08e1bb5
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Italic.eot differ
diff --git a/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Italic.svg b/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Italic.svg
new file mode 100644
index 0000000..9235bd4
--- /dev/null
+++ b/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Italic.svg
@@ -0,0 +1,7031 @@
+
+
+
diff --git a/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Italic.ttf b/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Italic.ttf
new file mode 100644
index 0000000..2fcd7d0
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Italic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Regular.eot b/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Regular.eot
new file mode 100644
index 0000000..f424e6b
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Regular.eot differ
diff --git a/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Regular.svg b/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Regular.svg
new file mode 100644
index 0000000..b6efbf4
--- /dev/null
+++ b/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Regular.svg
@@ -0,0 +1,6944 @@
+
+
+
diff --git a/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Regular.ttf b/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Regular.ttf
new file mode 100644
index 0000000..603493e
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/hinted-Roboto-Regular.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-Black.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-Black.ttf
new file mode 100644
index 0000000..d51221a
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-Black.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-BlackItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-BlackItalic.ttf
new file mode 100644
index 0000000..c71c549
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-BlackItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-Bold.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-Bold.ttf
new file mode 100644
index 0000000..9d7cf22
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-Bold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-BoldItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-BoldItalic.ttf
new file mode 100644
index 0000000..f73d681
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-BoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-ExtraBold.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-ExtraBold.ttf
new file mode 100644
index 0000000..7092a88
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-ExtraBold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-ExtraBoldItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..a5536f5
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-ExtraBoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-ExtraLight.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-ExtraLight.ttf
new file mode 100644
index 0000000..75608c6
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-ExtraLight.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-ExtraLightItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-ExtraLightItalic.ttf
new file mode 100644
index 0000000..23dbbef
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-ExtraLightItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-Italic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-Italic.ttf
new file mode 100644
index 0000000..c3abaef
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-Italic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-Light.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-Light.ttf
new file mode 100644
index 0000000..6fcd5f9
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-Light.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-LightItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-LightItalic.ttf
new file mode 100644
index 0000000..a6e5047
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-LightItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-Medium.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-Medium.ttf
new file mode 100644
index 0000000..d629e98
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-Medium.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-MediumItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-MediumItalic.ttf
new file mode 100644
index 0000000..ef9ed1b
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-MediumItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-Regular.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-Regular.ttf
new file mode 100644
index 0000000..7e3bb2f
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-Regular.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-SemiBold.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-SemiBold.ttf
new file mode 100644
index 0000000..3f34834
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-SemiBold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-SemiBoldItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-SemiBoldItalic.ttf
new file mode 100644
index 0000000..132cca1
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-SemiBoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-Thin.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-Thin.ttf
new file mode 100644
index 0000000..6ee97b8
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-Thin.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto-ThinItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto-ThinItalic.ttf
new file mode 100644
index 0000000..0381198
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto-ThinItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Black.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Black.ttf
new file mode 100644
index 0000000..7529d1b
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Black.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-BlackItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-BlackItalic.ttf
new file mode 100644
index 0000000..0c31e9f
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-BlackItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Bold.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Bold.ttf
new file mode 100644
index 0000000..c3ccd49
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Bold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-BoldItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-BoldItalic.ttf
new file mode 100644
index 0000000..d269187
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-BoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ExtraBold.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ExtraBold.ttf
new file mode 100644
index 0000000..782442a
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ExtraBold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ExtraBoldItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..aeff7c2
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ExtraBoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ExtraLight.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ExtraLight.ttf
new file mode 100644
index 0000000..16a1560
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ExtraLight.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ExtraLightItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ExtraLightItalic.ttf
new file mode 100644
index 0000000..0f6fe70
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ExtraLightItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Italic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Italic.ttf
new file mode 100644
index 0000000..3b387eb
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Italic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Light.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Light.ttf
new file mode 100644
index 0000000..e70c357
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Light.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-LightItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-LightItalic.ttf
new file mode 100644
index 0000000..9f623e0
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-LightItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Medium.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Medium.ttf
new file mode 100644
index 0000000..dd2842b
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Medium.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-MediumItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-MediumItalic.ttf
new file mode 100644
index 0000000..80ff64e
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-MediumItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Regular.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Regular.ttf
new file mode 100644
index 0000000..5af42d4
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Regular.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-SemiBold.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-SemiBold.ttf
new file mode 100644
index 0000000..4297f17
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-SemiBold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-SemiBoldItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-SemiBoldItalic.ttf
new file mode 100644
index 0000000..6cb4656
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-SemiBoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Thin.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Thin.ttf
new file mode 100644
index 0000000..1ccebcc
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-Thin.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ThinItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ThinItalic.ttf
new file mode 100644
index 0000000..e58e966
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_Condensed-ThinItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Black.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Black.ttf
new file mode 100644
index 0000000..8eedb64
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Black.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-BlackItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-BlackItalic.ttf
new file mode 100644
index 0000000..19a5096
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-BlackItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Bold.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Bold.ttf
new file mode 100644
index 0000000..98d7b0d
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Bold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-BoldItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-BoldItalic.ttf
new file mode 100644
index 0000000..8604aee
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-BoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ExtraBold.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ExtraBold.ttf
new file mode 100644
index 0000000..36423c3
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ExtraBold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ExtraBoldItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..b40ce77
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ExtraBoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ExtraLight.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ExtraLight.ttf
new file mode 100644
index 0000000..e1c25a0
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ExtraLight.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ExtraLightItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ExtraLightItalic.ttf
new file mode 100644
index 0000000..929a093
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ExtraLightItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Italic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Italic.ttf
new file mode 100644
index 0000000..23454ff
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Italic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Light.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Light.ttf
new file mode 100644
index 0000000..b9aedcd
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Light.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-LightItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-LightItalic.ttf
new file mode 100644
index 0000000..c096473
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-LightItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Medium.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Medium.ttf
new file mode 100644
index 0000000..e9c34d6
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Medium.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-MediumItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-MediumItalic.ttf
new file mode 100644
index 0000000..ab34b70
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-MediumItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Regular.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Regular.ttf
new file mode 100644
index 0000000..36109ba
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Regular.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-SemiBold.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-SemiBold.ttf
new file mode 100644
index 0000000..6d10b33
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-SemiBold.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-SemiBoldItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-SemiBoldItalic.ttf
new file mode 100644
index 0000000..e88bc4a
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-SemiBoldItalic.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Thin.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Thin.ttf
new file mode 100644
index 0000000..8ed8d79
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-Thin.ttf differ
diff --git a/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ThinItalic.ttf b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ThinItalic.ttf
new file mode 100644
index 0000000..81afeea
Binary files /dev/null and b/spa/vue/src/assets/fonts/Roboto/static/Roboto_SemiCondensed-ThinItalic.ttf differ
diff --git a/spa/vue/src/assets/linksStyle.css b/spa/vue/src/assets/linksStyle.css
new file mode 100644
index 0000000..4362ae4
--- /dev/null
+++ b/spa/vue/src/assets/linksStyle.css
@@ -0,0 +1,17 @@
+
+a {
+ color: inherit;
+ text-decoration: none;
+ }
+
+ a:visited {
+ color: inherit;
+ }
+
+ a:hover {
+ text-decoration: none;
+ }
+
+ a:active {
+ color: inherit;
+ }
\ No newline at end of file
diff --git a/spa/vue/src/assets/main.css b/spa/vue/src/assets/main.css
new file mode 100644
index 0000000..2ce5ed1
--- /dev/null
+++ b/spa/vue/src/assets/main.css
@@ -0,0 +1,52 @@
+@import url('./fonts.css');
+@import url('./colors.css');
+@import url('./linksStyle.css');
+
+/* Общие стили */
+html,
+body {
+ background-color: var(--background-color);
+ color: var(--text-color);
+ margin: 0;
+ padding: 0;
+ height: fit-content;
+ width: 100%;
+ font-family: Arial, sans-serif;
+ transition: background-color 0.3s, color 0.3s;
+ min-width: 320px;
+}
+
+body {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+
+.main {
+ margin: 2rem;
+ min-height: 90vh;
+ min-width: 320px;
+ max-width: 1024px;
+ height: 100%;
+ width: 100%;
+ border-radius: 1rem;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ justify-content: space-between;
+ padding: 1rem 0 0 0;
+}
+
+/* Адаптивные стили для мобильных устройств */
+@media only screen and (max-width: 600px) {
+ .main {
+ margin: 0.5rem;
+ min-height: 80vh;
+ min-width: auto;
+ max-width: 90vw;
+ width: 90%; /* Можно сделать еще меньше, если требуется */
+ border-radius: 0.5rem;
+ }
+}
+
diff --git a/spa/vue/src/auth/axios.js b/spa/vue/src/auth/axios.js
new file mode 100644
index 0000000..de3b73a
--- /dev/null
+++ b/spa/vue/src/auth/axios.js
@@ -0,0 +1,9 @@
+// axios.js
+import axios from 'axios';
+
+const instance = axios.create({
+ baseURL: 'http://yalarba.ru',
+ withCredentials: true, // Это важно для работы с HTTP-only куки
+});
+
+export default instance;
\ No newline at end of file
diff --git a/spa/vue/src/auth/services/auth.service.js b/spa/vue/src/auth/services/auth.service.js
new file mode 100644
index 0000000..0524160
--- /dev/null
+++ b/spa/vue/src/auth/services/auth.service.js
@@ -0,0 +1,20 @@
+// src/auth/services/auth.service.js
+import axios from 'axios';
+
+const API_URL = 'https://yalarba.ru/api';
+
+const login = async (credentials) => {
+ const response = await axios.post(`${API_URL}/auth/login`, credentials, {
+ 'Content-Type': 'application/json'
+ });
+ return response.data;
+};
+
+const checkAuth = async (token) => {
+ const response = await axios.get(`${API_URL}/auth/check`, {
+ headers: { Authorization: `Bearer ${token}` },
+ });
+ return response.data;
+};
+
+export default { login, checkAuth };
\ No newline at end of file
diff --git a/spa/vue/src/auth/services/authService.js b/spa/vue/src/auth/services/authService.js
new file mode 100644
index 0000000..0524160
--- /dev/null
+++ b/spa/vue/src/auth/services/authService.js
@@ -0,0 +1,20 @@
+// src/auth/services/auth.service.js
+import axios from 'axios';
+
+const API_URL = 'https://yalarba.ru/api';
+
+const login = async (credentials) => {
+ const response = await axios.post(`${API_URL}/auth/login`, credentials, {
+ 'Content-Type': 'application/json'
+ });
+ return response.data;
+};
+
+const checkAuth = async (token) => {
+ const response = await axios.get(`${API_URL}/auth/check`, {
+ headers: { Authorization: `Bearer ${token}` },
+ });
+ return response.data;
+};
+
+export default { login, checkAuth };
\ No newline at end of file
diff --git a/spa/vue/src/auth/stores/auth.store.js b/spa/vue/src/auth/stores/auth.store.js
new file mode 100644
index 0000000..a9679e2
--- /dev/null
+++ b/spa/vue/src/auth/stores/auth.store.js
@@ -0,0 +1,55 @@
+// src/auth/stores/auth.store.js
+import { defineStore } from 'pinia';
+import { reactive, ref } from 'vue';
+import AuthService from '../services/auth.service.js';
+import { jwtDecode } from 'jwt-decode';
+
+export const useAuthStore = defineStore('auth', () => {
+ const user = reactive({username: '', email: '', id: 0, token: ''});
+ const isAuthenticated = ref(false);
+
+ const login = async (credentials) => {
+ try {
+ const response = await AuthService.login(credentials);
+ const decodedToken = jwtDecode(response.token);
+ user.name = decodedToken.user.username;
+ user.id = decodedToken.user.id;
+ user.email = decodedToken.user.email;
+ isAuthenticated.value = true;
+ user.token = response.token;
+
+ } catch (error) {
+ console.error('Login failed', error);
+ throw error;
+ }
+ };
+
+ const logout = () => {
+ isAuthenticated.value = false;
+ user.name = '';
+ user.token = '';
+ user.email = '';
+ user.id = 0;
+ };
+
+ const checkAuth = async () => {
+ try {
+ const token = user.token;
+ if (token) {
+ try {
+ const response = await AuthService.checkAuth(token);
+ user.value = response.user;
+ isAuthenticated.value = true;
+ } catch (error) {
+ logout();
+ }
+ }
+ } catch (error) {
+ console.error('Check auth failed', error);
+ throw error;
+
+ }
+ };
+
+ return { user, isAuthenticated, login, logout, checkAuth };
+});
\ No newline at end of file
diff --git a/spa/vue/src/auth/stores/store.js b/spa/vue/src/auth/stores/store.js
new file mode 100644
index 0000000..7170eff
--- /dev/null
+++ b/spa/vue/src/auth/stores/store.js
@@ -0,0 +1,46 @@
+// store.js
+import { createStore } from 'vuex';
+import axios from 'axios';
+
+export default createStore({
+ state: {
+ user: null,
+ isAuthenticated: false,
+ },
+ mutations: {
+ SET_USER(state, user) {
+ state.user = user;
+ state.isAuthenticated = !!user;
+ },
+ },
+ actions: {
+ async login({ commit }, credentials) {
+ try {
+ const response = await axios.post('/api/login', credentials);
+ commit('SET_USER', response.data.user);
+ } catch (error) {
+ throw error;
+ }
+ },
+ async logout({ commit }) {
+ try {
+ await axios.post('/api/logout');
+ commit('SET_USER', null);
+ } catch (error) {
+ throw error;
+ }
+ },
+ async checkAuth({ commit }) {
+ try {
+ const response = await axios.get('/api/user');
+ commit('SET_USER', response.data.user);
+ } catch (error) {
+ commit('SET_USER', null);
+ }
+ },
+ },
+ getters: {
+ isAuthenticated: (state) => state.isAuthenticated,
+ user: (state) => state.user,
+ },
+});
\ No newline at end of file
diff --git a/spa/vue/src/auth/vueauth/auth.js b/spa/vue/src/auth/vueauth/auth.js
new file mode 100644
index 0000000..563af64
--- /dev/null
+++ b/spa/vue/src/auth/vueauth/auth.js
@@ -0,0 +1,45 @@
+import Vue from 'vue';
+import router from '@/router/index.js'; // Подключаем роутер
+import store from '@/auth/stores/store.js'; // Подключаем стор
+import VueAxios from 'vue-axios';
+import axios from 'axios';
+import VueAuth from '@websanova/vue-auth';
+import Cookie from '@websanova/vue-auth/drivers/auth/cookie';
+import HttpAxios from '@websanova/vue-auth/drivers/http/axios.1.x';
+import Router from '@websanova/vue-auth/drivers/router/vue-router.2.x';
+
+Vue.use(VueAxios, axios);
+
+const options = {
+ auth: Cookie,
+ http: HttpAxios,
+ router: Router,
+};
+
+Vue.use(VueAuth, options);
+
+// Настройки API
+Vue.axios.defaults.baseURL = 'http://yalarba.ru/api';
+
+// Добавляем авторизацию через куки в заголовки запросов
+Vue.axios.interceptors.request.use(config => {
+ return config;
+}, error => Promise.reject(error));
+
+// Обработчик ошибок при получении ответа от сервера
+Vue.axios.interceptors.response.use(response => response, error => {
+ const { statusCode, message } = error.response.data;
+
+ switch (statusCode) {
+ case 401:
+ store.dispatch('clearAuthData'); // Очистка данных об аутентификации
+ router.push('/login'); // Переход на страницу логина
+ break;
+ default:
+ console.error(message); // Логирование ошибки
+ }
+
+ return Promise.reject(error);
+});
+
+export default options;
\ No newline at end of file
diff --git a/spa/vue/src/auth/watch.js b/spa/vue/src/auth/watch.js
new file mode 100644
index 0000000..8bf316f
--- /dev/null
+++ b/spa/vue/src/auth/watch.js
@@ -0,0 +1,22 @@
+import { watch } from 'vue';
+import { useAuthStore } from '../stores/auth.store';
+
+export default {
+ setup() {
+ const authStore = useAuthStore();
+ const { user, isAuthenticated } = storeToRefs(authStore);
+
+ watch(isAuthenticated, (newVal) => {
+ console.log('isAuthenticated changed:', newVal);
+ });
+
+ watch(user, (newVal) => {
+ console.log('user changed:', newVal);
+ });
+
+ return {
+ user,
+ isAuthenticated,
+ };
+ },
+};
\ No newline at end of file
diff --git a/spa/vue/src/components/about/about.vue b/spa/vue/src/components/about/about.vue
new file mode 100644
index 0000000..a5e65bd
--- /dev/null
+++ b/spa/vue/src/components/about/about.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
diff --git a/spa/vue/src/components/header/logo-rl-about.vue b/spa/vue/src/components/header/logo-rl-about.vue
new file mode 100644
index 0000000..b43e817
--- /dev/null
+++ b/spa/vue/src/components/header/logo-rl-about.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spa/vue/src/components/header/toggleMenu.vue b/spa/vue/src/components/header/toggleMenu.vue
new file mode 100644
index 0000000..4e9b120
--- /dev/null
+++ b/spa/vue/src/components/header/toggleMenu.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spa/vue/src/components/images/icons/arrow_back_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg b/spa/vue/src/components/images/icons/arrow_back_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg
new file mode 100644
index 0000000..c67ba8a
--- /dev/null
+++ b/spa/vue/src/components/images/icons/arrow_back_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/spa/vue/src/components/images/icons/arrow_forward_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg b/spa/vue/src/components/images/icons/arrow_forward_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg
new file mode 100644
index 0000000..4f079d2
--- /dev/null
+++ b/spa/vue/src/components/images/icons/arrow_forward_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/spa/vue/src/components/images/icons/close_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg b/spa/vue/src/components/images/icons/close_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg
new file mode 100644
index 0000000..8c71124
--- /dev/null
+++ b/spa/vue/src/components/images/icons/close_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/spa/vue/src/components/images/icons/home_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg b/spa/vue/src/components/images/icons/home_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg
new file mode 100644
index 0000000..ef54108
--- /dev/null
+++ b/spa/vue/src/components/images/icons/home_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/spa/vue/src/components/images/icons/menu_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg b/spa/vue/src/components/images/icons/menu_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg
new file mode 100644
index 0000000..702a828
--- /dev/null
+++ b/spa/vue/src/components/images/icons/menu_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/spa/vue/src/components/images/logo150x150.png b/spa/vue/src/components/images/logo150x150.png
new file mode 100644
index 0000000..86c638e
Binary files /dev/null and b/spa/vue/src/components/images/logo150x150.png differ
diff --git a/spa/vue/src/components/images/photo_2025-01-25_05-57-24.jpg b/spa/vue/src/components/images/photo_2025-01-25_05-57-24.jpg
new file mode 100644
index 0000000..3894bcf
Binary files /dev/null and b/spa/vue/src/components/images/photo_2025-01-25_05-57-24.jpg differ
diff --git a/spa/vue/src/components/images/restObject.jpg b/spa/vue/src/components/images/restObject.jpg
new file mode 100644
index 0000000..38c5d7f
Binary files /dev/null and b/spa/vue/src/components/images/restObject.jpg differ
diff --git a/spa/vue/src/components/inout/inout.vue b/spa/vue/src/components/inout/inout.vue
new file mode 100644
index 0000000..bca1dc7
--- /dev/null
+++ b/spa/vue/src/components/inout/inout.vue
@@ -0,0 +1,148 @@
+
+
{{ t('messages.load') }} . . .
+
+
+
Good by {{ authStore.user.name }}!
+
+
+
+
+
+ {{ t('messages.inout.login') }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spa/vue/src/components/inout/registration.vue b/spa/vue/src/components/inout/registration.vue
new file mode 100644
index 0000000..ca9b5c7
--- /dev/null
+++ b/spa/vue/src/components/inout/registration.vue
@@ -0,0 +1,152 @@
+
+
+
+ {{ t('messages.inout.registration') }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spa/vue/src/components/profile/profile.vue b/spa/vue/src/components/profile/profile.vue
new file mode 100644
index 0000000..19955fc
--- /dev/null
+++ b/spa/vue/src/components/profile/profile.vue
@@ -0,0 +1,165 @@
+
+