commit 4066e0bec6a266c487bd56f5aaec0d38d31c48a5 Author: Eduard Kuksa Date: Sun Feb 23 23:40:35 2025 +0700 initial commit diff --git a/.gitea/workflows/main.yml b/.gitea/workflows/main.yml new file mode 100644 index 0000000..a3b5751 --- /dev/null +++ b/.gitea/workflows/main.yml @@ -0,0 +1,93 @@ +name: Gitea Action Maven build + +on: + push: + branches: ['master'] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout the repo + uses: actions/checkout@v4 + + - name: Set up Maven + uses: stCarolas/setup-maven@v5 + with: + maven-version: 3.9.9 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: 21 + distribution: 'oracle' + cache: 'maven' + + - name: Build, Test and Package with Maven + run: mvn -B verify --file pom.xml -e + + - name: Upload artifact + uses: actions/upload-artifact@v3 + with: + name: searchengine-artifact + path: | + target/*.jar + Dockerfile + docker-compose.yml + + - name: Create Maven settings.xml + run: | + cat < ~/.m2/settings.xml + + + + gitea + ${{ vars.OWNER }} + ${{ secrets.ACCESS_TOKEN }} + + + + EOF + + - name: Replace {owner} in pom.xml + run: sed -i "s/{owner}/${{ vars.OWNER }}/g" pom.xml + + - name: Deploy to Gitea Packages + run: mvn deploy + + deploy: + runs-on: ubuntu-latest + needs: build + steps: + - name: Download artifact + uses: actions/download-artifact@v3 + with: + name: searchengine-artifact + path: artifact + + - name: Install SSH Key + uses: shimataro/ssh-key-action@v2 + with: + key: ${{ secrets.SSH_PRIVATE_KEY }} + known_hosts: ${{ secrets.KNOWN_HOSTS }} + - name: Create Directory on Local Server + run: ssh -T ${{ vars.DEPLOY_USER }}@${{ vars.DEPLOY_HOST }} mkdir -p ${{ vars.DEPLOY_PATH }} + + - name: Deploy to Local Server + run: scp -r artifact/* ${{ vars.DEPLOY_USER }}@${{ vars.DEPLOY_HOST }}:${{ vars.DEPLOY_PATH }} + + - name: Create .env file on Local Server + run: | + ssh -T ${{ vars.DEPLOY_USER }}@${{ vars.DEPLOY_HOST }} << EOF + echo "DB_USER=${{ secrets.DB_USER }}" > ${{ vars.DEPLOY_PATH }}/.env + echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> ${{ vars.DEPLOY_PATH }}/.env + echo "DB_URL=${{ vars.DB_URL }}" >> ${{ vars.DEPLOY_PATH }}/.env + EOF + + - name: Build and Run Docker Image with Docker Compose + run: | + ssh -T ${{ vars.DEPLOY_USER }}@${{ vars.DEPLOY_HOST }} << EOF + cd ${{ vars.DEPLOY_PATH }} + docker compose down + docker compose up -d --build + EOF \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6a3e31d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM openjdk:21-jdk-slim +WORKDIR /app +COPY target/searchengine-*.jar searchengine.jar +COPY .env . +EXPOSE 8080 +CMD ["java", "-jar", "searchengine.jar"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..ecc83f3 --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +## Описание проекта +**Searchengine** — поисковый движок, созданный с использованием фреймворка **Spring Boot** . Этот проект позволяет пользователям искать информацию на предложенных сайтах. Поисковый движок индексирует сайты заранее заданные администратором и предоставляет возможность быстрого поиска по ключевым словам. + +Основные функции: +- Индексация указанных сайтов. +- Выполнение полнотекстового поиска. +- Ранжирование результатов по релевантности. +- Простой пользовательский интерфейс для взаимодействия с системой. +## Технологии +Проект разработан с использованием следующих технологий: +- Java 21+ +- Spring Boot 3.x +- Spring Data JPA +- Thymeleaf (для простого веб-интерфейса) +- Maven (управление зависимостями) +- MySQL (база данных) \ No newline at end of file diff --git a/application.yaml b/application.yaml new file mode 100644 index 0000000..e68653b --- /dev/null +++ b/application.yaml @@ -0,0 +1,24 @@ +server: + port: 8080 + +spring: + datasource: + username: ${DB_USER} + password: ${DB_PASSWORD} + url: ${DB_URL} + jpa: + hibernate: +# ddl-auto: update +# Ниже - временный вариант, таблица удаляется после завершения работы приложения + ddl-auto: create-drop + show-sql: true + open-in-view: false + +indexing-settings: + sites: + - url: https://www.lenta.ru + name: Лента.ру + - url: https://www.skillbox.ru + name: Skillbox + - url: https://www.playback.ru + name: PlayBack.Ru \ No newline at end of file diff --git a/doc/Критерии оценивания.pdf b/doc/Критерии оценивания.pdf new file mode 100644 index 0000000..0883a79 Binary files /dev/null and b/doc/Критерии оценивания.pdf differ diff --git a/doc/ТЗ. Итоговый проект курса «Поисковый движок».pdf b/doc/ТЗ. Итоговый проект курса «Поисковый движок».pdf new file mode 100644 index 0000000..1b4390f Binary files /dev/null and b/doc/ТЗ. Итоговый проект курса «Поисковый движок».pdf differ diff --git a/doc/Техническая спецификация.pdf b/doc/Техническая спецификация.pdf new file mode 100644 index 0000000..031aaa8 Binary files /dev/null and b/doc/Техническая спецификация.pdf differ diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..670630d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,10 @@ +services: + app: + build: + context: . + dockerfile: Dockerfile + image: searchengine + container_name: searchengine + ports: + - "8090:8080" + restart: on-failure:3 \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..f28666a --- /dev/null +++ b/pom.xml @@ -0,0 +1,81 @@ + + + 4.0.0 + + dev.kuksa + searchengine + 0.0.1-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + org.springframework.boot + spring-boot-starter-parent + 3.3.5 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.projectlombok + lombok + 1.18.34 + + + com.mysql + mysql-connector-j + 8.4.0 + runtime + + + me.paulschwarz + spring-dotenv + 4.0.0 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + gitea + https://git.kuksa.dev/api/packages/{owner}/maven + + + + + + gitea + https://git.kuksa.dev/api/packages/{owner}/maven + + + gitea + https://git.kuksa.dev/api/packages/{owner}/maven + + + \ No newline at end of file diff --git a/src/main/java/searchengine/Application.java b/src/main/java/searchengine/Application.java new file mode 100644 index 0000000..5d519dd --- /dev/null +++ b/src/main/java/searchengine/Application.java @@ -0,0 +1,12 @@ +package searchengine; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + +@SpringBootApplication +public class Application { + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/src/main/java/searchengine/config/Site.java b/src/main/java/searchengine/config/Site.java new file mode 100644 index 0000000..419e000 --- /dev/null +++ b/src/main/java/searchengine/config/Site.java @@ -0,0 +1,11 @@ +package searchengine.config; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class Site { + private String url; + private String name; +} diff --git a/src/main/java/searchengine/config/SitesList.java b/src/main/java/searchengine/config/SitesList.java new file mode 100644 index 0000000..d8f8aa8 --- /dev/null +++ b/src/main/java/searchengine/config/SitesList.java @@ -0,0 +1,16 @@ +package searchengine.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Getter +@Setter +@Component +@ConfigurationProperties(prefix = "indexing-settings") +public class SitesList { + private List sites; +} diff --git a/src/main/java/searchengine/controllers/ApiController.java b/src/main/java/searchengine/controllers/ApiController.java new file mode 100644 index 0000000..04ab6ab --- /dev/null +++ b/src/main/java/searchengine/controllers/ApiController.java @@ -0,0 +1,31 @@ +package searchengine.controllers; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import searchengine.config.SitesList; +import searchengine.dto.statistics.StatisticsResponse; +import searchengine.services.StatisticsService; + +@RestController +@RequestMapping("/api") +public class ApiController { + + private final StatisticsService statisticsService; + + public ApiController(StatisticsService statisticsService) { + this.statisticsService = statisticsService; + } + + @GetMapping("/statistics") + public ResponseEntity statistics() { + return ResponseEntity.ok(statisticsService.getStatistics()); + } + + @GetMapping("/startIndexing") + public ResponseEntity startIndexing() { + System.out.println(new SitesList().getSites()); + return ResponseEntity.ok(statisticsService.getStatistics()); + } +} diff --git a/src/main/java/searchengine/controllers/DefaultController.java b/src/main/java/searchengine/controllers/DefaultController.java new file mode 100644 index 0000000..af604cb --- /dev/null +++ b/src/main/java/searchengine/controllers/DefaultController.java @@ -0,0 +1,18 @@ +package searchengine.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class DefaultController { + + /** + * Метод формирует страницу из HTML-файла index.html, + * который находится в папке resources/templates. + * Это делает библиотека Thymeleaf. + */ + @RequestMapping("/") + public String index() { + return "index"; + } +} diff --git a/src/main/java/searchengine/dto/statistics/DetailedStatisticsItem.java b/src/main/java/searchengine/dto/statistics/DetailedStatisticsItem.java new file mode 100644 index 0000000..5aa95eb --- /dev/null +++ b/src/main/java/searchengine/dto/statistics/DetailedStatisticsItem.java @@ -0,0 +1,14 @@ +package searchengine.dto.statistics; + +import lombok.Data; + +@Data +public class DetailedStatisticsItem { + private String url; + private String name; + private String status; + private long statusTime; + private String error; + private int pages; + private int lemmas; +} diff --git a/src/main/java/searchengine/dto/statistics/StatisticsData.java b/src/main/java/searchengine/dto/statistics/StatisticsData.java new file mode 100644 index 0000000..77b3b43 --- /dev/null +++ b/src/main/java/searchengine/dto/statistics/StatisticsData.java @@ -0,0 +1,11 @@ +package searchengine.dto.statistics; + +import lombok.Data; + +import java.util.List; + +@Data +public class StatisticsData { + private TotalStatistics total; + private List detailed; +} diff --git a/src/main/java/searchengine/dto/statistics/StatisticsResponse.java b/src/main/java/searchengine/dto/statistics/StatisticsResponse.java new file mode 100644 index 0000000..05c9bb9 --- /dev/null +++ b/src/main/java/searchengine/dto/statistics/StatisticsResponse.java @@ -0,0 +1,9 @@ +package searchengine.dto.statistics; + +import lombok.Data; + +@Data +public class StatisticsResponse { + private boolean result; + private StatisticsData statistics; +} diff --git a/src/main/java/searchengine/dto/statistics/TotalStatistics.java b/src/main/java/searchengine/dto/statistics/TotalStatistics.java new file mode 100644 index 0000000..c650d15 --- /dev/null +++ b/src/main/java/searchengine/dto/statistics/TotalStatistics.java @@ -0,0 +1,11 @@ +package searchengine.dto.statistics; + +import lombok.Data; + +@Data +public class TotalStatistics { + private int sites; + private int pages; + private int lemmas; + private boolean indexing; +} diff --git a/src/main/java/searchengine/model/PageEntity.java b/src/main/java/searchengine/model/PageEntity.java new file mode 100644 index 0000000..f5c4970 --- /dev/null +++ b/src/main/java/searchengine/model/PageEntity.java @@ -0,0 +1,30 @@ +package searchengine.model; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Entity +@Table(name = "page", indexes = @Index(columnList = "path")) +public class PageEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(nullable = false) + private int id; + + @ManyToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "site_id", nullable = false) + private SiteEntity site; + + @Column(columnDefinition = "TEXT NOT NULL, UNIQUE KEY INDEX_PATH (path(255))") // Unique index version +// @Column(columnDefinition = "TEXT NOT NULL, INDEX PATH_INDEX USING BTREE(path(255))") // Non-unique index version + private String path; + + @Column(nullable = false) + private int code; + + @Column(nullable = false, columnDefinition = "MEDIUMTEXT") + private String content; +} diff --git a/src/main/java/searchengine/model/SiteEntity.java b/src/main/java/searchengine/model/SiteEntity.java new file mode 100644 index 0000000..aa63c73 --- /dev/null +++ b/src/main/java/searchengine/model/SiteEntity.java @@ -0,0 +1,34 @@ +package searchengine.model; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Getter +@Setter +@Entity +@Table(name = "site") +public class SiteEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(nullable = false) + private int id; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private StatusType status; + + @Column(nullable = false) + private LocalDateTime status_time; + + @Column(columnDefinition = "TEXT") + private String last_error; + + @Column(nullable = false, columnDefinition = "VARCHAR(255)") + private String url; + + @Column(nullable = false, columnDefinition = "VARCHAR(255)") + private String name; +} diff --git a/src/main/java/searchengine/model/StatusType.java b/src/main/java/searchengine/model/StatusType.java new file mode 100644 index 0000000..0cf9d9b --- /dev/null +++ b/src/main/java/searchengine/model/StatusType.java @@ -0,0 +1,7 @@ +package searchengine.model; + +public enum StatusType { + INDEXING, + INDEXED, + FAILED +} diff --git a/src/main/java/searchengine/repository/PageRepository.java b/src/main/java/searchengine/repository/PageRepository.java new file mode 100644 index 0000000..a727f35 --- /dev/null +++ b/src/main/java/searchengine/repository/PageRepository.java @@ -0,0 +1,9 @@ +package searchengine.repository; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; +import searchengine.model.PageEntity; + +@Repository +public interface PageRepository extends CrudRepository { +} diff --git a/src/main/java/searchengine/repository/SiteRepository.java b/src/main/java/searchengine/repository/SiteRepository.java new file mode 100644 index 0000000..60dd735 --- /dev/null +++ b/src/main/java/searchengine/repository/SiteRepository.java @@ -0,0 +1,9 @@ +package searchengine.repository; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; +import searchengine.model.SiteEntity; + +@Repository +public interface SiteRepository extends CrudRepository { +} diff --git a/src/main/java/searchengine/services/IndexingService.java b/src/main/java/searchengine/services/IndexingService.java new file mode 100644 index 0000000..e4c6e20 --- /dev/null +++ b/src/main/java/searchengine/services/IndexingService.java @@ -0,0 +1,4 @@ +package searchengine.services; + +public interface IndexingService { +} diff --git a/src/main/java/searchengine/services/IndexingServiceImpl.java b/src/main/java/searchengine/services/IndexingServiceImpl.java new file mode 100644 index 0000000..59d00a3 --- /dev/null +++ b/src/main/java/searchengine/services/IndexingServiceImpl.java @@ -0,0 +1,16 @@ +package searchengine.services; + +public class IndexingServiceImpl implements IndexingService { + boolean indexingIsRunning = false; + + public void startIndexing() { + if (indexingIsRunning) { + System.out.println("Индексация уже запущена"); + return; + } + // Логика для запуска индексации или перенидексации сайтов + System.out.println("Запуск индексации"); + indexingIsRunning = true; + System.out.println("Индексация запущена"); + } +} diff --git a/src/main/java/searchengine/services/StatisticsService.java b/src/main/java/searchengine/services/StatisticsService.java new file mode 100644 index 0000000..2cb3d4b --- /dev/null +++ b/src/main/java/searchengine/services/StatisticsService.java @@ -0,0 +1,7 @@ +package searchengine.services; + +import searchengine.dto.statistics.StatisticsResponse; + +public interface StatisticsService { + StatisticsResponse getStatistics(); +} diff --git a/src/main/java/searchengine/services/StatisticsServiceImpl.java b/src/main/java/searchengine/services/StatisticsServiceImpl.java new file mode 100644 index 0000000..b9d42e6 --- /dev/null +++ b/src/main/java/searchengine/services/StatisticsServiceImpl.java @@ -0,0 +1,64 @@ +package searchengine.services; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import searchengine.config.Site; +import searchengine.config.SitesList; +import searchengine.dto.statistics.DetailedStatisticsItem; +import searchengine.dto.statistics.StatisticsData; +import searchengine.dto.statistics.StatisticsResponse; +import searchengine.dto.statistics.TotalStatistics; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +@Service +@RequiredArgsConstructor +public class StatisticsServiceImpl implements StatisticsService { + + private final Random random = new Random(); + private final SitesList sites; + + @Override + public StatisticsResponse getStatistics() { + String[] statuses = { "INDEXED", "FAILED", "INDEXING" }; + String[] errors = { + "Ошибка индексации: главная страница сайта не доступна", + "Ошибка индексации: сайт не доступен", + "" + }; + + TotalStatistics total = new TotalStatistics(); + total.setSites(sites.getSites().size()); + total.setIndexing(true); + + List detailed = new ArrayList<>(); + List sitesList = sites.getSites(); + for(int i = 0; i < sitesList.size(); i++) { + Site site = sitesList.get(i); + DetailedStatisticsItem item = new DetailedStatisticsItem(); + item.setName(site.getName()); + item.setUrl(site.getUrl()); + int pages = random.nextInt(1_000); + int lemmas = pages * random.nextInt(1_000); + item.setPages(pages); + item.setLemmas(lemmas); + item.setStatus(statuses[i % 3]); + item.setError(errors[i % 3]); + item.setStatusTime(System.currentTimeMillis() - + (random.nextInt(10_000))); + total.setPages(total.getPages() + pages); + total.setLemmas(total.getLemmas() + lemmas); + detailed.add(item); + } + + StatisticsResponse response = new StatisticsResponse(); + StatisticsData data = new StatisticsData(); + data.setTotal(total); + data.setDetailed(detailed); + response.setStatistics(data); + response.setResult(true); + return response; + } +} diff --git a/src/main/resources/static/assets/css/basic.css b/src/main/resources/static/assets/css/basic.css new file mode 100644 index 0000000..39a514e --- /dev/null +++ b/src/main/resources/static/assets/css/basic.css @@ -0,0 +1,2393 @@ +/* normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */ +/** + * 1. Change the default font family in all browsers (opinionated). + * 2. Prevent adjustments of font size after orientation changes in IE and iOS. + */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +/** + * Remove the margin in all browsers (opinionated). + */ +body { + margin: 0; +} +/* HTML5 display definitions + ========================================================================== */ +/* + * Add the correct display in IE 9-. + * 1. Add the correct display in Edge, IE and Firefox. + * 2. Add the correct display in IE. + */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +main, +menu, +nav, +section, +summary { + display: block; +} +/** + * Add the correct display in IE 9-. + */ +audio, +canvas, +progress, +video { + display: inline-block; +} +/** + * Add the correct display in iOS 4-7. + */ +audio:not([controls]) { + display: none; + height: 0; +} +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera + */ +progress { + vertical-align: baseline; +} +/** + * Add the correct display in IE 10-. + * 1. Add the correct display in IE. + */ +template, +[hidden] { + display: none; +} +/* Links + ========================================================================== */ +/** + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. + */ +a { + background-color: transparent; + -webkit-text-decoration-skip: objects; +} +/** + * Remove the outline on focused links when they are also active or hovered + * in all browsers (opinionated). + */ +a:active, +a:hover { + outline-width: 0; +} +/* Text-level semantics + ========================================================================== */ +/** + * 1. Remove the bottom border in Firefox 39-. + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + border-bottom: none; + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} +/** + * Prevent the duplicate appliclation of `bolder` by the next rule in Safari 6. + */ +b, +strong { + font-weight: inherit; +} +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} +/** + * Add the correct font style in Android 4.3-. + */ +dfn { + font-style: italic; +} +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} +/** + * Add the correct background and color in IE 9-. + */ +mark { + background-color: #ff0; + color: #000; +} +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sub { + bottom: -0.25em; +} +sup { + top: -0.5em; +} +/* Embedded content + ========================================================================== */ +/** + * Remove the border on images inside links in IE 10-. + */ +img { + border-style: none; +} +/** + * Hide the overflow in IE. + */ +svg:not(:root) { + overflow: hidden; +} +/* Grouping content + ========================================================================== */ +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers + */ +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +/** + * Add the correct marin in IE 8. + */ +figure { + margin: 1em 40px; +} +/** + * 1. Add the correct box sizing in Firefox + * 2. Show the overflow in Edge and IE. + */ +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} +/* Forms + ========================================================================== */ +/** + * 1. Change font properties to `inherit` in all browsers (opinionated). + * 2. Remove the margin in Firefox and Safari + */ +button, +input, +select, +textarea { + font: inherit; + margin: 0; +} +/** + * Restore the font weight unset by previous rule. + */ +optgroup { + font-weight: bold; +} +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ +button, +input { + overflow: visible; +} +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox + */ +button, +select { + text-transform: none; +} +/** + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. + */ +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} +/** + * Remove the inner border and padding in Firefox + */ +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} +/** + * Restore the focus styles unset by the previous rule. + */ +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} +/** + * Change the border, margin, and padding, in all browsers (opinionated). + */ +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; +} +/** + * Remove the default vertical scrollbar in IE. + */ +textarea { + overflow: auto; +} +/** + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + padding: 0; +} +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; +} +/** + * Remove the inner padding and cancel buttons in Chrome and Safari on OS X. + */ +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +/** + * Correct the text style of placeholders in Chrome, Edge, and Safari + */ +::-webkit-input-placeholder { + color: inherit; + opacity: 0.54; +} +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +.buttons { + display: flex; + flex-wrap: wrap; + margin-top: -10px; +} +.buttons .btn { + margin-top: 10px; + margin-right: 8px; +} +/*---------- Button ----------*/ +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 42px; + border: 1px solid #fff; + border-width: 1px !important; + border-color: #fff; + border-radius: 5px; + background: #fff; + padding: 3px 15px; + line-height: 1.2em; + text-align: center; + color: #2b2b2b; + text-decoration: none; + position: relative; + font-size: 13px; + border-color: #fff; + color: #2b2b2b; + background: #fff; + transition: all 200ms; + font-weight: 500; + text-transform: uppercase; + letter-spacing: 0.8px; + padding-left: 38px; + padding-right: 38px; +} +.btn.btn_outline { + background: transparent; + color: #fff; +} +@media screen and (min-width: 990px) { + .btn:hover { + transition: all 200ms; + cursor: pointer; + text-decoration: none; + background-color: #fff; + border-color: #fff; + } + .btn:hover.btn_outline { + background-color: #fff; + border-color: #fff; + color: #fff !important; + } +} +.btn.btn_check { + background-color: #fff; + border-color: #fff; +} +.btn.btn_check.btn_outline { + background-color: #fff; + border-color: #fff; + color: #fff !important; +} +.btn:focus { + outline: none; +} +.btnError { + color: #ba6347; + margin-top: 10px; + display: block; + font-size: 13px; +} +.btn-icon { + margin: 0 !important; + margin-right: 10px !important; + height: 24px; + min-width: 24px; +} +.btn-icon img { + max-height: 100%; + max-width: 100%; + display: block; +} +.btn-content { + position: relative; + display: inline-block; + padding-right: 5px; +} +.btn-content .btn-icon { + width: 0; + position: relative; + left: -17px; + top: -1px; + margin-right: 0; +} +.btn_icon { + padding: 0; + height: 24px; + min-height: 24px; + min-width: 24px; + display: inline-flex; + justify-content: center; + align-items: center; + border-radius: 100px; +} +.btn_round { + border-radius: 10px; +} +.btn_outline { + border-color: #fff; + color: #fff; + background: transparent; + transition: all 200ms; +} +@media screen and (min-width: 990px) { + .btn_outline:hover { + transition: all 200ms; + cursor: pointer; + text-decoration: none; + background-color: #fff; + border-color: #fff; + color: #fff !important; + } +} +.btn_outline.btn_check { + background-color: #fff; + border-color: #fff; + color: #fff !important; +} +.btn_default { + border-color: #fff; + color: #8e9096; + background: #fff; + transition: all 200ms; + border-color: #e0e0e0; +} +.btn_default.btn_outline { + background: transparent; + color: #fff; +} +@media screen and (min-width: 990px) { + .btn_default:hover { + transition: all 200ms; + cursor: pointer; + text-decoration: none; + background-color: #fff; + border-color: #fff; + } + .btn_default:hover.btn_outline { + background-color: #fff; + border-color: #fff; + color: #fff !important; + } +} +.btn_default.btn_check { + background-color: #fff; + border-color: #fff; +} +.btn_default.btn_check.btn_outline { + background-color: #fff; + border-color: #fff; + color: #fff !important; +} +.btn_white { + border-color: #fff; + color: #177db8; + background: #fff; + transition: all 200ms; + border-color: #fff; + padding-left: 10px; + padding-right: 10px; +} +.btn_white.btn_outline { + background: transparent; + color: #fff; +} +@media screen and (min-width: 990px) { + .btn_white:hover { + transition: all 200ms; + cursor: pointer; + text-decoration: none; + background-color: #fff; + border-color: #fff; + } + .btn_white:hover.btn_outline { + background-color: #fff; + border-color: #fff; + color: #fff !important; + } +} +.btn_white.btn_check { + background-color: #fff; + border-color: #fff; +} +.btn_white.btn_check.btn_outline { + background-color: #fff; + border-color: #fff; + color: #fff !important; +} +@media screen and (min-width: 990px) { + .btn_white:hover { + background-color: #c4e8fd; + } +} +.btn_white.btn_check { + background-color: #c4e8fd; +} +.btn_info { + border-color: #0fcabf; + color: #fff; + background: #0fcabf; + transition: all 200ms; +} +.btn_info.btn_outline { + background: transparent; + color: #0fcabf; +} +@media screen and (min-width: 990px) { + .btn_info:hover { + transition: all 200ms; + cursor: pointer; + text-decoration: none; + background-color: #18fff0; + border-color: #18fff0; + } + .btn_info:hover.btn_outline { + background-color: #cff; + border-color: #cff; + color: #0fcabf !important; + } +} +.btn_info.btn_check { + background-color: #18fff0; + border-color: #18fff0; +} +.btn_info.btn_check.btn_outline { + background-color: #cff; + border-color: #cff; + color: #0fcabf !important; +} +.btn_square { + border-radius: 0; +} +.btn_success { + border-color: #2aa73a; + color: #fff; + background: #2aa73a; + transition: all 200ms; +} +.btn_success.btn_outline { + background: transparent; + color: #2aa73a; +} +@media screen and (min-width: 990px) { + .btn_success:hover { + transition: all 200ms; + cursor: pointer; + text-decoration: none; + background-color: #31dc47; + border-color: #31dc47; + } + .btn_success:hover.btn_outline { + background-color: #d2fbd8; + border-color: #d2fbd8; + color: #2aa73a !important; + } +} +.btn_success.btn_check { + background-color: #31dc47; + border-color: #31dc47; +} +.btn_success.btn_check.btn_outline { + background-color: #d2fbd8; + border-color: #d2fbd8; + color: #2aa73a !important; +} +.btn_primary { + border-color: #177db8; + color: #fff; + background: #177db8; + transition: all 200ms; +} +.btn_primary.btn_outline { + background: transparent; + color: #177db8; +} +@media screen and (min-width: 990px) { + .btn_primary:hover { + transition: all 200ms; + cursor: pointer; + text-decoration: none; + background-color: #15a4f7; + border-color: #15a4f7; + } + .btn_primary:hover.btn_outline { + background-color: #cef; + border-color: #cef; + color: #177db8 !important; + } +} +.btn_primary.btn_check { + background-color: #15a4f7; + border-color: #15a4f7; +} +.btn_primary.btn_check.btn_outline { + background-color: #cef; + border-color: #cef; + color: #177db8 !important; +} +.btn_danger { + border-color: #ba6347; + color: #fff; + background: #ba6347; + transition: all 200ms; +} +.btn_danger.btn_outline { + background: transparent; + color: #ba6347; +} +@media screen and (min-width: 990px) { + .btn_danger:hover { + transition: all 200ms; + cursor: pointer; + text-decoration: none; + background-color: #d17d62; + border-color: #d17d62; + } + .btn_danger:hover.btn_outline { + background-color: #f8e4dd; + border-color: #f8e4dd; + color: #ba6347 !important; + } +} +.btn_danger.btn_check { + background-color: #d17d62; + border-color: #d17d62; +} +.btn_danger.btn_check.btn_outline { + background-color: #f8e4dd; + border-color: #f8e4dd; + color: #ba6347 !important; +} +.btn_muted { + border-color: #e8eaef; + color: #7c8088; + background: #e8eaef; + transition: all 200ms; +} +.btn_muted.btn_outline { + background: transparent; + color: #e8eaef; +} +@media screen and (min-width: 990px) { + .btn_muted:hover { + transition: all 200ms; + cursor: pointer; + text-decoration: none; + background-color: #eceef3; + border-color: #eceef3; + } + .btn_muted:hover.btn_outline { + background-color: #fbfcfd; + border-color: #fbfcfd; + color: #e8eaef !important; + } +} +.btn_muted.btn_check { + background-color: #eceef3; + border-color: #eceef3; +} +.btn_muted.btn_check.btn_outline { + background-color: #fbfcfd; + border-color: #fbfcfd; + color: #e8eaef !important; +} +.btn_dark { + border-color: #a5abba; + color: #fff; + background: #a5abba; + transition: all 200ms; +} +.btn_dark.btn_outline { + background: transparent; + color: #a5abba; +} +@media screen and (min-width: 990px) { + .btn_dark:hover { + transition: all 200ms; + cursor: pointer; + text-decoration: none; + background-color: #b5bbc9; + border-color: #b5bbc9; + } + .btn_dark:hover.btn_outline { + background-color: #f0f1f5; + border-color: #f0f1f5; + color: #a5abba !important; + } +} +.btn_dark.btn_check { + background-color: #b5bbc9; + border-color: #b5bbc9; +} +.btn_dark.btn_check.btn_outline { + background-color: #f0f1f5; + border-color: #f0f1f5; + color: #a5abba !important; +} +@media screen and (min-width: 990px) { + .btn_like.btn_white:hover, + .btn_dislike.btn_white:hover { + background-color: #fff; + } +} +.btn_like .btn-icon { + position: relative; + top: -3px; +} +.btn_dislike .btn-icon { + position: relative; + top: 4px; +} +.btn_narrow { + padding-left: 23px; + padding-right: 23px; +} +.btn_warning { + border-color: #f98561; + color: #fff; + background: #f98561; + transition: all 200ms; +} +.btn_warning.btn_outline { + background: transparent; + color: #f98561; +} +@media screen and (min-width: 990px) { + .btn_warning:hover { + transition: all 200ms; + cursor: pointer; + text-decoration: none; + background-color: #ff9775; + border-color: #ff9775; + } + .btn_warning:hover.btn_outline { + background-color: #ffe9e1; + border-color: #ffe9e1; + color: #f98561 !important; + } +} +.btn_warning.btn_check { + background-color: #ff9775; + border-color: #ff9775; +} +.btn_warning.btn_check.btn_outline { + background-color: #ffe9e1; + border-color: #ffe9e1; + color: #f98561 !important; +} +.btn[disabled="disabled"], +.btn[disabled=true], +.btn[disabled="true"] { + border-color: #e8eaef; + color: #7c8088; + background: #e8eaef; + transition: all 200ms; +} +.btn[disabled="disabled"].btn_outline, +.btn[disabled=true].btn_outline, +.btn[disabled="true"].btn_outline { + background: transparent; + color: #e8eaef; +} +@media screen and (min-width: 990px) { + .btn[disabled="disabled"]:hover, + .btn[disabled=true]:hover, + .btn[disabled="true"]:hover { + transition: all 200ms; + cursor: pointer; + text-decoration: none; + background-color: #eceef3; + border-color: #eceef3; + } + .btn[disabled="disabled"]:hover.btn_outline, + .btn[disabled=true]:hover.btn_outline, + .btn[disabled="true"]:hover.btn_outline { + background-color: #fbfcfd; + border-color: #fbfcfd; + color: #e8eaef !important; + } +} +.btn[disabled="disabled"].btn_check, +.btn[disabled=true].btn_check, +.btn[disabled="true"].btn_check { + background-color: #eceef3; + border-color: #eceef3; +} +.btn[disabled="disabled"].btn_check.btn_outline, +.btn[disabled=true].btn_check.btn_outline, +.btn[disabled="true"].btn_check.btn_outline { + background-color: #fbfcfd; + border-color: #fbfcfd; + color: #e8eaef !important; +} +@media screen and (min-width: 990px) { + .btn[disabled="disabled"]:hover, + .btn[disabled=true]:hover, + .btn[disabled="true"]:hover { + cursor: default; + } +} +.btn_sm { + font-size: 10px; + padding: 0px 9px; +} +.btn_nr { + font-size: 11px; + padding: 1px 11px; + padding-left: 20px; + padding-right: 20px; +} +.btn_md { + font-size: 16px; + padding: 6px 21px; +} +.btn_lg { + font-size: 20px; + padding: 10px 29px; +} +.btn_full { + width: 100%; + text-align: center; +} + +/*----------- Стилизация текстовых полей формы и текстовых областей -----------*/ +/*---------- Поля формы ----------*/ +label { + display: inline-block; +} +input[type="text"], +input[type="password"], +input[type="tel"], +input[type="email"] { + padding: 5px 15px; + min-height: 40px; + border-radius: 5px; + border: 1px solid #b8b8b8; + background-color: #fff; + display: block; + font-size: 16px; + box-sizing: border-box; + min-width: 250px; + line-height: 1.3em; +} +input[type="text"]:focus, +input[type="password"]:focus, +input[type="tel"]:focus, +input[type="email"]:focus { + outline: none; +} +input[type="text"] + input, +input[type="password"] + input, +input[type="tel"] + input, +input[type="email"] + input, +input[type="text"] + textarea, +input[type="password"] + textarea, +input[type="tel"] + textarea, +input[type="email"] + textarea, +input[type="text"] + select, +input[type="password"] + select, +input[type="tel"] + select, +input[type="email"] + select { + margin-top: 20px; +} +input[type="text"][disabled="true"], +input[type="password"][disabled="true"], +input[type="tel"][disabled="true"], +input[type="email"][disabled="true"] { + color: #b1b1b1; +} +textarea { + padding: 5px 15px; + min-height: 40px; + border-radius: 5px; + border: 1px solid #b8b8b8; + background-color: #fff; + display: block; + font-size: 16px; + box-sizing: border-box; + min-width: 250px; + line-height: 1.45em; +} +textarea:focus { + outline: none; +} +textarea + input, +textarea + textarea, +textarea + select { + margin-top: 20px; +} +select { + padding: 5px 15px; + min-height: 40px; + border-radius: 5px; + border: 1px solid #b8b8b8; + background-color: #fff; + display: block; + font-size: 16px; + box-sizing: border-box; + min-width: 250px; + color: #777; + padding-left: 15px; +} +select:focus { + outline: none; +} +select + input, +select + textarea, +select + select { + margin-top: 20px; +} +[type="checkbox"], +[type="radio"] { + width: 20px; + height: 20px; + position: relative; + z-index: 100; + border-radius: 5px; + border: 2px solid #aaa; + cursor: pointer; + margin-right: 5px; + margin-left: 5px; +} +[type="checkbox"]:first-child, +[type="radio"]:first-child { + margin-left: 0; +} +[type="checkbox"]:last-child, +[type="radio"]:last-child { + margin-left: 0; +} +[type="radio"] { + border-radius: 100px; +} +/*----------- Формы -----------*/ +.form { + margin-top: 39px; + display: block; + width: 100%; +} +.form .form-input { + width: 100%; + box-sizing: border-box; + padding: 5px 15px; + border-radius: 5px; + border: 1px solid #b8b8b8; + font-size: 16px; + background-color: #fff; + line-height: 30px; +} +.form .form-input_hide { + display: none; +} +.form .form-input_error { + border-color: #ba6347 !important; +} +.form .form-input_date { + width: 100px !important; + text-align: center; +} +.form .form-input:focus { + outline: none; +} +.form .form-textarea { + width: 100%; + height: 80px; + box-sizing: border-box; + padding: 5px 15px; + padding-top: 18px; + padding-bottom: 18px; + border-radius: 5px; + border: 1px solid #b8b8b8; + font-size: 16px; + background-color: #fff; + line-height: 1.2em; +} +.form .form-textarea:focus { + outline: none; +} +.form .form-textarea_error { + border-color: #ba6347 !important; +} +.form .form-select { + width: 100%; + height: 40px; + box-sizing: border-box; + padding: 5px 15px; + border-radius: 5px; + border: 1px solid #b8b8b8; + background: #fff; + background: transparent; + box-shadow: none !important; + background-image: none; + font-size: 16px; + line-height: 1.2em; +} +.form .form-select:focus { + outline: none; +} +.form .form-selectWrap { + position: relative; + width: 100%; +} +.form .form-selectWrap .form-select { + padding-right: 55px; +} +.form .form-selectWrap:after { + content: ''; + display: block; + pointer-events: none; + position: absolute; + right: 1px; + top: 1px; + bottom: 1px; + border-radius: 0 8px 8px 0; + width: 40px; + background: #fff url("../img/icons/arrow_hide.svg") center center no-repeat; + background-size: auto 15px; +} +.form .form-btn { + margin-top: 20px; +} +.form-error { + font-size: 13px; + color: #ba6347; +} +.form-info { + font-size: 13px; + color: #2aa73a; +} +.form-label { + display: block; + color: #b1b1b1; + font-size: 14px; + margin-bottom: 5px; +} +.form-label:focus { + outline: none; +} +.form-group_center { + text-align: center; +} +.form-group_right { + text-align: right; +} +.form-group + .form-group { + margin-top: 20px; +} +.form-group_row { + display: flex; + align-items: flex-start; + justify-content: space-between; +} +.form-group_row .form-input + .form-input, +.form-group_row .form-input + .form-btn { + margin-top: 0; + margin-left: 20px; +} +.form-group_row .form-input_code { + max-width: 150px; + width: 150px; + min-width: auto; +} +.form-group_row .form-btn { + margin-top: 5px; +} +@media screen and (max-width: 990px) { + .form-group_row { + flex-wrap: wrap; + } + .form-group_row .form-btn { + margin-left: 0 !important; + } + .form-group_row .form-input, + .form-group_row .form-btn { + margin-bottom: 20px; + } +} +@media screen and (max-width: 480px) { + .form-group_row .form-btn { + margin-left: auto !important; + margin-right: auto !important; + } +} +.form-group_key { + max-width: 200px; + min-width: auto; + margin-left: auto; + margin-right: auto; +} +.form-group_key .form-input { + text-align: center; + min-width: auto; + max-width: 100%; +} +.form-group_hide { + display: none; +} +.form_contacts .form-input { + min-width: auto; +} +.form_inline { + display: flex; + align-items: center; + flex-wrap: wrap; +} +.form_inline .form-group { + display: inline-flex; + justify-content: center; + align-items: center; + margin-right: 20px; +} +.form_inline .form-group:last-child { + margin-right: 0; +} +.form_inline .form-group + .form-group { + margin-top: 0; +} +.form_inline .form-input { + min-width: 100px; + width: auto; +} +.form_inline .form-label { + margin-right: 20px; + margin-left: 20px; +} +.form_inline .form-label:first-child { + margin-left: 0; +} +.form_close { + margin-top: 0; +} +.selectList { + position: relative; +} +.selectList-header { + display: flex; + justify-content: space-between; + align-items: center; +} +.selectList-icon { + display: block; + background: url("../img/icons/arrowMuted.svg") 0 0 no-repeat; + width: 12px; + height: 8px; + margin-left: 15px; +} +.selectList-dropdown { + position: absolute; + left: 50%; + top: 100%; + background: #fff; + z-index: 900; + display: none; + padding: 20px 15px; + box-shadow: 2px 2px 5px rgba(0,0,0,0.2); + border: 1px solid #b1b1b1; + border-radius: 10px; + width: 200px; + margin-left: -100px; +} +.selectList_sm .selectList-icon { + width: 8px; + height: 5px; + margin-left: 7px; + background-size: contain; +} +.selectList_OPEN .selectList-dropdown { + display: block; +} +.selectList-item { + display: flex; + align-items: center; +} +.selectList-item + .selectList-item { + margin-top: 7px; +} +.toggle { + position: relative; + z-index: 100; + width: auto; + height: auto; + display: inline-block; + cursor: default; + border-radius: 0; + vertical-align: middle; +} +.toggle[type="radio"], +.toggle[type="checkbox"] { + width: 17px; + height: 17px; + cursor: pointer; +} +.toggle[type="radio"] { + border-radius: 100px; +} +.toggle[type="checkbox"] { + border-radius: 3px; +} +label.toggle { + cursor: pointer; +} +.toggle .toggle-text { + display: inline; +} +.toggle .toggle-box { + position: relative; + display: inline-block; + top: 2px; + margin-left: 0; + z-index: 5; + width: 17px; + height: 17px; + border: 1px solid #b7b7b7; + border-radius: 3px; + margin-right: 4px; +} +.toggle .toggle-box:after { + content: ''; + display: block; + position: absolute; + width: 11px; + height: 11px; + background: transparent; + border-radius: 3px; + left: 2px; + top: 2px; +} +.toggle [type="radio"], +.toggle [type="checkbox"] { + opacity: 0; + width: 17px; + height: 17px; + position: absolute; + top: 2px; + left: 0; + z-index: 10; + cursor: pointer; + display: inline-block; +} +.toggle [type="radio"]:checked + .toggle-box, +.toggle [type="checkbox"]:checked + .toggle-box { + border-color: #177db8; +} +.toggle [type="radio"]:checked + .toggle-box:after, +.toggle [type="checkbox"]:checked + .toggle-box:after { + background: #177db8; +} +.toggle [type="radio"] { + visibility: visible; +} +.toggle [type="radio"] + .toggle-box { + border-radius: 100px; +} +.toggle [type="radio"] + .toggle-box:after { + border-radius: 100px; +} +::-webkit-input-placeholder { + color: #777; + font-size: 16px; + line-height: 1.5em; +} +::-moz-placeholder { + color: #777; + font-size: 16px; + line-height: 1.5em; +} +:-moz-placeholder { + color: #777; + font-size: 16px; + line-height: 1.5em; +} +:-ms-input-placeholder { + color: #777; + font-size: 16px; + line-height: 1.5em; +} + +/*---------- Меню ----------*/ +.menu { + width: 100%; + position: relative; + line-height: 1.2em; + margin: 0; + padding: 0; + display: block; + font-weight: bold; +/*----------- Начало стилей для меню -----------*/ +/*----------- Вертикальное меню -----------*/ +} +.menu:before, +.menu:after { + content: ""; + display: table; +} +.menu:after { + clear: both; +} +@media screen and (max-width: 990px) { + .menuModal { + height: 0px; + display: block; + transition: 300ms; + overflow: hidden; + } +} +.menuModal_OPEN { + transition: 300ms; +} +.menuTrigger { + background: none; + border: none !important; + box-shadow: none; + text-indent: -9999px; + padding-left: 5px !important; + padding-right: 0 !important; + min-width: 0; + margin-right: 0 !important; + min-height: 0; + z-index: 1000; + display: inline-block; + width: 30px; + height: 30px; + font-size: 0; + line-height: 0; + padding-top: 8px; + position: relative; +} +.menuTrigger span { + display: block; + height: 3px; + width: 20px; + border-radius: 100px; + background: #177db8; + transition: all 0.3s; + opacity: 1; +} +.menuTrigger span + span { + margin-top: 3px; +} +.menuTrigger_OPEN span { + position: absolute; + top: 45%; + margin-top: 0px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + box-shadow: none; + transition: all 0.3s; +} +.menuTrigger_OPEN span + span { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + margin-top: 0; +} +.menuTrigger_OPEN span:last-child { + opacity: 0; +} +.menu ul, +.menu li { + list-style: none; + padding: 0; + margin: 0; +} +.menu ul:after, +.menu li:after { + display: none; +} +.menu_vt { + visibility: visible; +} +.menu_vt .menu-item { + display: block; + font-weight: 800; + font-size: 14px; + line-height: 1.2em; +} +.menu_vt .menu-item_ACTIVE a, +.menu_vt .menu-item_trigger a { + color: #177db8; + cursor: default; +} +@media screen and (min-width: 990px) { + .menu_vt .menu-item_ACTIVE a:hover, + .menu_vt .menu-item_trigger a:hover { + text-decoration: none; + } + .menu_vt .menu-item_ACTIVE a:hover:after, + .menu_vt .menu-item_trigger a:hover:after { + display: none; + } +} +.menu_vt .menu-item + .menu-item { + margin-top: 10px; +} +.menu_vt .menu-link { + color: #2b2b2b; + position: relative; + display: inline-block; + padding-left: 0px; + padding-right: 0px; + padding-bottom: 5px; +} +.menu_hz, +.menu_main { + width: auto; +} +.menu_hz .menu-item, +.menu_main .menu-item { + float: left; + display: block; + text-align: center; + padding-left: 5px; + padding-right: 5px; + margin-bottom: 0; +} +.menu_hz .menu-item + .menu-item, +.menu_main .menu-item + .menu-item { + margin-left: 55px; +} +@media screen and (max-width: 990px) { + .menu_hz .menu-item + .menu-item, + .menu_main .menu-item + .menu-item { + margin-left: 35px; + } +} +.menu_hz .menu-item:last-child, +.menu_main .menu-item:last-child { + padding-right: 0; +} +.menu_hz .menu-item:first-child, +.menu_main .menu-item:first-child { + padding-left: 0; +} +.menu_hz .menu-item:first-child, +.menu_main .menu-item:first-child { + margin-left: 0; +} +.menu_split.menu_hz .menu-item { + position: relative; + padding-left: 9px; + padding-right: 9px; +} +.menu_split.menu_hz .menu-item + .menu-item { + margin-left: 0; +} +.menu_split.menu_hz .menu-item:after { + content: ''; + display: block; + position: absolute; + background: #b1b1b1; + height: 15px; + width: 1px; + left: 0; + top: 50%; + margin-top: -7.5px; +} +.menu_split.menu_hz .menu-item:first-child:after { + display: none; +} +.menu_img { + display: flex; + justify-content: center; + align-items: center; + margin-top: 94px; +} +.menu_img .menu-item { + width: 60px; + height: 60px; + display: block; + font-size: 0; + padding: 0; + margin-bottom: 0; + line-height: 0; + letter-spacing: 0; +} +.menu_img .menu-item:last-child { + margin-top: 0; +} +.menu_img .menu-item a { + padding: 0; + display: block; +} +.menu_img .menu-item a img { + -webkit-transform: scale(0.82); + transform: scale(0.82); + transition: all 100ms; +} +@media screen and (min-width: 990px) { + .menu_img .menu-item a:hover img { + -webkit-transform: none; + transform: none; + transition: all 100ms; + } +} +.menu_img .menu-item + .menu-item { + margin-left: 17px; +} +.menu_img .menu-link { + background: no-repeat center center; + background-size: 100%; + display: block; + width: 100%; + height: 100%; +} +@media screen and (min-width: 990px) { + .menu_img .menu-link:hover { + border: none !important; + } +} +.menu_smallImg { + margin-top: 0; + width: auto; + display: inline-flex; +} +.menu_smallImg .menu-item { + width: 16px; + height: 16px; +} +.menu_smallImg .menu-item a { + display: flex; + align-items: center; + justify-content: center; +} +.menu_smallImg .menu-item a img { + -webkit-transform: scale(1); + transform: scale(1); +} +@media screen and (min-width: 990px) { + .menu_smallImg .menu-item a:hover img { + -webkit-transform: scale(1.5); + transform: scale(1.5); + } +} +.menu_main { + display: flex; + align-items: center; + justify-content: center; +} +.menu_main .menu-label { + position: absolute; + left: 50%; + top: -33%; + color: #fff; + font-size: 11px; + font-weight: 500; + text-transform: uppercase; + letter-spacing: 1.65px; + line-height: 1.2em; + padding: 3px 5px 2px 7px; +} +.menu_main .menu-label:after { + content: ''; + display: block; + position: absolute; + left: 0; + bottom: -5px; + width: 0; + height: 0; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #fff; +} +.menu_main .menu-label_danger { + background-color: #ba6347; +} +.menu_main .menu-label_danger:after { + width: 0; + height: 0; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #ba6347; +} +.menu_main .menu-label_success { + background-color: #2aa73a; +} +.menu_main .menu-label_success:after { + width: 0; + height: 0; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #2aa73a; +} +.menu_main .menu-item { + display: flex; + align-items: center; + position: relative; + margin-left: 0; + margin-right: 0; + padding-right: 0; + padding-left: 0; +} +.menu_main .menu-item + .menu-item { + margin-left: 20px; +} +.menu_main .menu-item_ACTIVE { + position: relative; +} +.menu_main .menu-item_ACTIVE:after { + content: ''; + display: block; + position: absolute; + left: 0; + bottom: 0; + right: 0; + width: auto; + top: auto; + border-radius: 0; + height: 4px; + background-color: #177db8; +} +.menu_main .menu-item_ACTIVE a:hover { + text-decoration: none; + cursor: default; + color: #333; + text-shadow: none; +} +.menu_main .menu-link { + color: #333; + font-family: Montserrat, Verdana, Arial, "Helvetica CY", Helvetica, "Nimbus Sans L", sans-serif; + text-decoration: none; + font-weight: 500; + font-size: 16px; + padding: 20px 10px 15px; +} +@media screen and (min-width: 990px) { + .menu_main .menu-link:hover { + color: #177db8; + text-shadow: 1px 0px 0 #177db8; + border-color: transparent !important; + } +} +@media screen and (max-width: 990px) { + .menu_main { + margin-right: 0; + } +} +@media screen and (max-width: 800px) { + .menu_main { + display: block; + } + .menu_main .menu-item { + text-align: center; + width: 100%; + } + .menu_main .menu-item .menu-link { + width: 100%; + text-align: left; + } + .menu_main .menu-item + .menu-item { + margin-left: 0; + margin-top: 0 !important; + padding-left: 0; + } +} +.menu_column { + background: #313131; +} +.menu_column .menu-item { + border-bottom: 1px solid #f1f4f9; +} +.menu_column .menu-item_ACTIVE .menu-link, +.menu_column .menu-item:hover .menu-link { + color: #f0c519; + transition: all 300ms; + background: #505050; + text-decoration: none; +} +.menu_column .menu-link { + transition: all 300ms; + color: #fff; + display: block; + text-shadow: 0 1px 0 rgba(0,0,0,0.4); + text-decoration: none; + font-weight: normal; + padding: 0 8px 0px; + letter-spacing: -0.5px; + line-height: 35px; +} + +/*----------- media -----------*/ +.media { + display: flex; +} +.media_middle { + align-items: center; +} +.media-header { + display: block; + margin-bottom: 10px; +} +.media-title { + font-weight: bold; + font-size: 17px; + display: block; +} +.media-image { + display: block; + line-height: 0; +} +.media-content { + padding-left: 12px; + padding-right: 12px; + display: block; + flex-grow: 8; + flex-basis: 60px; + flex-shrink: 0; +} +.media-content:first-child { + padding-left: 0; +} +.media-content:last-child { + padding-right: 0; +} +.media_vt { + display: block; + text-align: center; +} +.media_vt .media-image { + margin-bottom: 10px; +} +.media_vt .media-content { + padding-left: 0; +} +.media_vt .media-header { + border-right: none; + padding-right: 0; +} + +/*----------- Обертка картинки -----------*/ +.pict { + display: inline-block; + font-size: 0; + line-height: 0; + overflow: hidden; +} +@media screen and (max-width: 990px) { + .pict { + text-align: center; + width: 100%; + display: block; + } +} +.pict img { + max-width: 100%; +} +.pict_full { + display: block; + width: 100%; +} +.pict_full img { + width: 100%; +} +.pict_right, +.pict_left { + float: left; + margin: 10px 25px 10px 0; + max-width: 40%; +} +.pict_right img, +.pict_left img { + max-width: 100%; +} +.pict_right { + float: right; + margin-right: 0; + margin-left: 32px; +} +@media screen and (max-width: 480px) { + .pict_right, + .pict_left { + display: block; + float: none; + margin-left: auto; + margin-right: auto; + max-width: 100%; + margin-bottom: 35px; + } +} +.pict-caption { + color: #2c2c2c; + font-size: 13px; + font-weight: 600; + line-height: 1.3em; + text-align: center; + background-color: #d9edee; + padding: 15px 25px; + width: 100%; +} + +.table { + visibility: visible; + margin-top: 20px; + margin-bottom: 20px; + border: none; + border-collapse: separate; +} +.tableWrap { + overflow: auto; +} +.tableWrap .table { + min-width: 500px; +} +.table_noMargin { + margin: 0; +} +.table th, +.table td { + background: none; + border: none; + padding: 10px; + text-align: left; + transition: all 200ms; +} +.table th:first-child, +.table td:first-child { + border-left: 1px solid transparent; +} +.table th { + font-size: 17px; + font-weight: 700; +} +.table td { + font-size: 13px; +} +.table thead th, +.table thead td { + padding-bottom: 18px; + border-bottom: 27px solid transparent; + position: relative; +} +.table thead th:after, +.table thead td:after { + content: ''; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 2px; + background: #e8ecee; +} +.table tbody td, +.table tbody th { + background: transparent; + transition: all 200ms; +} +.table tbody tr:first-child th, +.table tbody tr:first-child td { + border-top: none; +} +@media screen and (min-width: 990px) { + .table tbody tr:hover th, + .table tbody tr:hover td { + background-color: #eef2fb; + transition: all 200ms; + } + .table tbody tr:hover th:first-child, + .table tbody tr:hover td:first-child { + border-left: 1px solid #177db8; + transition: all 200ms; + } +} + +/*----------- Строки -----------*/ +.row { + width: 100%; + display: flex; + justify-content: space-between; +} +.row:before, +.row:after { + content: ""; + display: table; +} +.row:after { + clear: both; +} +.row-block { + display: block; + flex-grow: 0; + width: 100%; +} +.row-block_awayNext { + padding-right: 7rem; +} +@media screen and (max-width: 990px) { + .row-block_awayNext { + padding-right: 0; + } +} +.row-block_media { + max-width: 50%; +} +.row-block_media iframe { + width: 100%; +} +.row-block + .row-block { + margin-left: 2rem; +} +.row-block_fixed { + flex-grow: 0; +} +.row-block_right { + margin-left: auto !important; + width: auto; +} +.row-block_right + .row-block { + width: auto; +} +.row-left { + display: block; + min-width: 0; + flex-shrink: 0; +} +.row_col .row-block + .row-block { + margin-left: 3rem; +} +.row_verticalCenter { + align-items: center; +} +.row_alignCenter { + justify-content: center; +} +.row_maxHalf .row-block { + max-width: 50%; +} +.row_maxHalf .row-block img { + max-width: 100%; +} +@media screen and (max-width: 990px) { + .row_maxHalf .row-block { + max-width: none; + } +} +.row_space:after, +.row_space:before { + display: none; +} +.row_space .row-block { + width: auto; +} +@media screen and (max-width: 990px) { + .row { + display: block; + } + .row-block + .row-block { + margin-top: 2rem; + margin-left: 0; + } + .row-block_media { + max-width: 100%; + } +} +.row_responsive { + flex-wrap: wrap; + justify-content: center; +} +.row_responsive .row-block { + width: auto; +} +@media screen and (max-width: 990px) { + .row_responsive { + flex-wrap: wrap; + text-align: center; + } + .row_responsive .row-block { + display: inline-block; + width: auto; + text-align: left; + min-width: 20rem; + margin-top: 0rem; + margin-bottom: 1rem; + margin-right: 2rem; + } +} +@media screen and (max-width: 990px) { + .row_slider { + display: flex; + } + .row_slider .row-block img { + max-width: 100%; + } + .row_slider .row-block_awayNext { + padding-right: 7rem; + } +} +@media screen and (max-width: 600px) { + .row_slider .row-block_awayNext { + padding-right: 0rem; + } +} + +/*#################### Офомление базовых стилей ####################*/ +html { + height: 100%; + width: 100%; + display: block; + font-family: Montserrat, Verdana, Arial, "Helvetica CY", Helvetica, "Nimbus Sans L", sans-serif; + text-rendering: optimizeLegibility; +} +body { + min-height: 100%; + font-size: 14px; + color: #2b2b2b; + line-height: 1.3em; + text-align: left; + position: relative; + min-width: 320px; + background: #fff; + display: flex; + flex-direction: column; +} +* { + box-sizing: border-box; +} +.fontAddit { + font-family: Montserrat, Verdana, Arial, "Helvetica CY", Helvetica, "Nimbus Sans L", sans-serif; +} +/* Использовать только одиночные теги +в редких случаях допускается использовать классы, +только для стилизации стандартных элементов через скрипты */ +a { + text-decoration: none; + color: #177db8; + border-bottom: 1px solid #91cef1; + border-bottom: 1px solid rgba(23,125,184,0); + padding-bottom: 0; + cursor: pointer; +} +@media screen and (min-width: 990px) { + a:hover { + position: relative; + border-bottom: 1px solid #177db8; + transition: border 0.4s; + } +} +hr { + border: none; + margin-top: 14px; + margin-bottom: 5px; +} +p { + margin: 0; + margin-bottom: 20px; +} +p:last-child { + margin-bottom: 0; +} +ul { + margin: 20px 0; + padding: 0 0 0 8px; + list-style: none; + line-height: 1.5em; +} +ul li { + position: relative; + list-style: none; +} +ul li:after { + content: ' '; + width: 4px; + height: 4px; + position: absolute; + top: 10px; + left: -8px; + border-radius: 10px; +} +h1, +h2, +h3 { + text-align: left; + font-weight: bold; + margin-bottom: 20px; + line-height: 1.3em; +} +h1:first-child, +h2:first-child, +h3:first-child { + margin-top: 0; +} +h1 em, +h2 em, +h3 em { + text-decoration: underline; +} +h1 { + margin-bottom: 40px; + margin-top: 20px; +} +h1 + h2 { + margin-top: 0; +} +h2 { + margin-bottom: 25px; + margin-top: 49px; +} +table { + width: 100%; + margin-bottom: 35px; + margin-top: 58px; + clear: both; + line-height: 1.6em; + border-collapse: collapse; + border-left: 1px solid #f7f7f7; + border-right: 1px solid #f7f7f7; + border-bottom: 1px solid #f7f7f7; +} +table:last-child { + margin-bottom: 0; +} +table:first-child { + margin-top: 0; +} +table td, +table th { + padding: 5px 24px 5px; + letter-spacing: 0.1px; + text-align: left; + vertical-align: top; +} +table th { + font-weight: bold; + background: #f7f7f7; + padding: 5px 23px 0; + letter-spacing: 0.7px; +} +table tr.th + tr td, +table tr.th + tr th { + border-top: none; +} +table tr:first-child th { + border-top: 0; +} +.link { + color: #177db8; + border-bottom: 1px solid #91cef1; + border-bottom: 1px solid rgba(23,125,184,0); + padding-bottom: 0; + cursor: pointer; +} +@media screen and (min-width: 990px) { + .link:hover { + position: relative; + border-bottom: 1px solid #177db8; + transition: border 0.4s; + } +} +button.link { + border: none; + background: none; +} +.link_dk, +.link_text { + color: #2b2b2b; + border-bottom: 1px solid #a8a8a8; + border-bottom: 1px solid rgba(43,43,43,0); + padding-bottom: 0; + cursor: pointer; +} +@media screen and (min-width: 990px) { + .link_dk:hover, + .link_text:hover { + position: relative; + border-bottom: 1px solid #2b2b2b; + transition: border 0.4s; + } +} +.link_text { + border-bottom: none !important; +} +.link_muted { + color: #a3afb5; + border-bottom: 1px solid #4e5b61; + border-bottom: 1px solid rgba(163,175,181,0); + padding-bottom: 0; + cursor: pointer; +} +@media screen and (min-width: 990px) { + .link_muted:hover { + position: relative; + border-bottom: 1px solid #a3afb5; + transition: border 0.4s; + } +} +.link_dotted { + border-bottom-style: dotted !important; +} +.text_primary { + color: #177db8; +} +@media screen and (max-width: 990px) { + .hide_tablet { + display: none !important; + } +} +@media screen and (max-width: 480px) { + .hide_phone { + display: none !important; + } +} +@media screen and (max-width: 1200px) { + .hide_md { + display: none !important; + } +} +@media screen and (max-width: 1450px) { + .hide_1450 { + display: none !important; + } +} +@media screen and (max-width: 700px) { + .hide_700 { + display: none !important; + } +} +.Site-loadingIsComplete { + visibility: hidden; + overflow: hidden; +} +.Site-loader { + position: absolute; + left: 0; + bottom: 0; + right: 0; + top: 0; + display: flex; + justify-content: center; + align-items: center; +} +.Site-loader-block { + display: inline-block; + position: relative; + width: 80px; + height: 80px; +} +.Site-loader-block div { + box-sizing: border-box; + display: block; + position: absolute; + width: 64px; + height: 64px; + margin: 8px; + border: 8px solid #177db8; + border-radius: 50%; + -webkit-animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; + animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; + border-color: #177db8 transparent transparent transparent; +} +.Site-loader-block div:nth-child(2) { + -webkit-animation-delay: -0.45s; + animation-delay: -0.45s; +} +.Site-loader-block div:nth-child(3) { + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; +} +.Site-loader-block div:nth-child(4) { + -webkit-animation-delay: -0.15s; + animation-delay: -0.15s; +} +@-webkit-keyframes lds-ring { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes lds-ring { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes lds-ripple { + 0% { + top: 36px; + left: 36px; + width: 0; + height: 0; + opacity: 1; + } + 100% { + top: 0px; + left: 0px; + width: 72px; + height: 72px; + opacity: 0; + } +} +@keyframes lds-ripple { + 0% { + top: 36px; + left: 36px; + width: 0; + height: 0; + opacity: 1; + } + 100% { + top: 0px; + left: 0px; + width: 72px; + height: 72px; + opacity: 0; + } +} +#__bs_notify__ { + pointer-events: inherit !important; +} +#__bs_notify__ .errorView { + text-align: left !important; + font-size: 30px !important; + line-height: 1.4em !important; + white-space: pre-line !important; + position: fixed !important; + left: 0; + top: 0; + right: 0; + bottom: 0; + background: rgba(0,0,0,0.7); + padding: 30px; + overflow: auto; + font-family: monospace !important; +} +#__bs_notify__ .titleError { + color: #f00 !important; +} + +.wrap { + padding: 0 15px; + max-width: 1028px; + min-width: 320px; + width: 100%; + box-sizing: border-box; + margin: 0 auto; + position: relative; +} +.wrap-content { + margin: 0 auto; +} diff --git a/src/main/resources/static/assets/css/extra.css b/src/main/resources/static/assets/css/extra.css new file mode 100644 index 0000000..5233181 --- /dev/null +++ b/src/main/resources/static/assets/css/extra.css @@ -0,0 +1,1144 @@ +.API-error { + display: block; + margin-top: 5px; + color: #ba6347; + font-size: 13px; +} +.API-success { + display: block; + margin-top: 5px; + color: #2aa73a; + font-size: 13px; +} +@media screen and (max-width: 480px) { + .API-startIndexing { + margin-left: auto; + margin-right: auto; + display: flex; + } +} + +.Column { + padding-top: 40px; + padding-bottom: 40px; +} +.Column-section { + padding: 0; +} +.Column-section + .Column-section { + margin-top: 14px; +} +.Column-section_navigate { + background: #313131; + padding: 0; + padding-bottom: 25px; +} + +.HideBlock { + position: relative; + padding: 0 25px; + background-color: #fafafa; +} +@media screen and (max-width: 480px) { + .HideBlock { + padding: 0px 20px; + } +} +.HideBlock + .HideBlock { + margin-top: 10px; +} +.HideBlock-title { + color: #5e5e5e; + font-size: 17px; + font-weight: 500; + line-height: 1.2em; + letter-spacing: 0.51px; + display: inline-block; +} +.HideBlock-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px 25px; + background-color: #f1f1f1; + margin-left: -25px; + margin-right: -25px; +} +@media screen and (max-width: 480px) { + .HideBlock-header { + padding: 20px 20px; + margin-left: -20px; + margin-right: -20px; + } +} +.HideBlock-content { + line-height: 1.2em; + padding: 20px 0; + overflow: hidden; + transition: height 200ms, padding 150ms 50ms; + color: #505050; + font-size: 14px; + font-weight: 400; + letter-spacing: 0.42px; +} +@media screen and (max-width: 480px) { + .HideBlock-content { + padding: 20px 0; + } +} +.HideBlock-footer { + text-align: center; + margin-top: 3.8rem; +} +.HideBlock-trigger { + cursor: pointer; +} +.HideBlock-btn { + border: none; + font-weight: 600; + color: #177db8; + width: 30px; + cursor: pointer; + min-width: 30px; + height: 30px; + background: url("../img/icons/arrow_hide.svg") center center no-repeat; + background-size: auto 15px; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + transition: -webkit-transform 200ms; + transition: transform 200ms; + transition: transform 200ms, -webkit-transform 200ms; + margin-left: 20px; +} +.HideBlock-btn:focus { + outline: none; +} +.HideBlock_CLOSE .HideBlock-content { + height: 0 !important; + padding: 0; + transition: height 200ms, padding 150ms 50ms; +} +.HideBlock_CLOSE .HideBlock-btn { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + transition: -webkit-transform 200ms; + transition: transform 200ms; + transition: transform 200ms, -webkit-transform 200ms; +} + +.Middle { + overflow: hidden; + margin-bottom: 43px; +} +.Middle:before, +.Middle:after { + content: ""; + display: table; +} +.Middle:after { + clear: both; +} +.Middle-column { + float: left; + width: 200px; + margin-right: -100%; + margin-top: 20px; + position: relative; + z-index: 10; +} +@media screen and (max-width: 990px) { + .Middle-column { + float: none; + margin-right: 0; + width: auto; + margin-top: 50px; + } +} +.Middle-top { + padding: 20px 0 20px; + margin-bottom: 20px; + background: #177db8 url("../img/bg/books.png") left center repeat-x; + min-height: 130px; + display: flex; + align-items: center; + justify-content: center; +} +.Middle-top .Middle-title { + margin: 0 !important; + color: #fff; + text-align: center; + font-size: 28px; + font-weight: 400; + padding-bottom: 0; + line-height: 45px; + text-transform: uppercase; + letter-spacing: 1.12px; +} +.Middle-top .Middle-title:after { + display: none; +} +.Middle_form { + visibility: visible; + position: relative; +} +.Middle_form:after { + position: absolute; + content: ''; + display: block; + background: url("../img/bg/entry.jpg") center center no-repeat; + background-size: cover; + left: 0; + right: 0; + top: 0; + max-height: 40%; + height: 200px; + z-index: 1; +} +@media screen and (max-width: 480px) { + .Middle_form:after { + background: url("../img/bg/entry_phone.jpg") center center no-repeat; + } +} +.Middle_form:before { + position: absolute; + content: ''; + display: block; + background: linear-gradient(0deg, #fff 0%, rgba(255,255,255,0) 80%), rgba(0,0,0,0.35); + left: 0; + right: 0; + top: 0; + max-height: 40%; + height: 200px; + z-index: 2; +} +.Middle_form .Middle-top { + background: none; + position: relative; + z-index: 3; + margin-bottom: 0; +} +.Middle_form .Middle-main { + position: relative; + z-index: 3; + margin-top: 0; +} +.Middle-title { + font-size: 23px; + font-weight: 500; + display: block; + position: relative; + padding-bottom: 10px; + line-height: 1.2em; + margin-top: 60px; + margin-bottom: 0; +} +.Middle-title:first-child { + margin-top: 60px; +} +.Middle-title:after { + content: ''; + display: block; + position: absolute; + width: 57px; + height: 3px; + background-color: #177db8; + bottom: 0; + left: 0; +} +.Middle-footer { + margin-top: 19px; +} +.Middle-main { + position: relative; + margin-top: 20px; +} +@media screen and (max-width: 990px) { + .Middle-main { + float: none; + padding-left: 0; + } +} +.Middle-article { + box-shadow: 0 5px 15px rgba(0,0,0,0.3); + background-color: #f4f4f4; +} + +.SearchResult-title { + font-size: 17px; + font-weight: 500; + margin-bottom: 20px; + display: none; +} +.SearchResult_ACTIVE { + margin-top: 50px; +} +.SearchResult_ACTIVE .SearchResult-title { + display: block; +} +.SearchResult-block { + margin-top: 20px; +} +.SearchResult-siteTitle { + font-size: 15px; + font-weight: 500; +} +.SearchResult-description { + margin-top: 3px; + display: block; + color: #b1b1b1; +} +.SearchResult-remain { + display: inline-block; + margin-left: 5px; +} +.SearchResult-footer { + display: flex; + justify-content: center; + margin-top: 20px; +} +.SearchResult-footer_hide { + display: none; +} + +.ovHidden { + overflow-x: hidden; +} +.Section { + position: relative; + padding-top: 30px; + max-width: 100%; +} +.Section:first-child { + padding-top: 0px; +} +.Section + .Section { + margin-top: 77px; +} +@media screen and (max-width: 480px) { + .Section + .Section { + margin-top: 50px; + } +} +.Section .wrap { + position: relative; + z-index: 5; +} +.Section-bg { + z-index: 0; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + height: auto; +} +.Section-title { + margin-bottom: 28px; + margin-top: 45px; + font-size: 18px; + font-weight: 600; + line-height: 1.2em; + text-transform: uppercase; + letter-spacing: 3px; + display: block; +} +.Section-desc { + color: #0fcabf; + font-size: 18px; + font-weight: 300; + text-transform: uppercase; + font-style: italic; + line-height: 1.3em; + letter-spacing: -0.2px; + margin-bottom: 55px !important; +} +@media screen and (max-width: 990px) { + .Section-desc { + font-size: 12px; + margin-bottom: 25px !important; + } + .Section-desc_close { + margin-bottom: 22px !important; + } +} +.Section-header { + position: relative; + display: flex; + align-items: center; + flex-wrap: wrap; + margin-bottom: 28px; + margin-top: 35px; +} +.Section-header:first-child { + margin-top: 0; +} +.Section-header-form { + margin-top: 0; + width: auto; + margin-left: 30px; +} +@media screen and (max-width: 480px) { + .Section-header-form { + justify-content: center; + width: 100%; + margin-left: 0; + margin-top: 20px; + } +} +.Section-header-form .form-label { + color: #2b2b2b; +} +.Section-header-links { + margin-top: 0; + width: auto; + margin-left: 30px; +} +@media screen and (max-width: 480px) { + .Section-header-links { + justify-content: center; + width: 100%; + margin-left: 0; + margin-top: 20px; + } +} +.Section-header-link { + display: inline-block; + color: #177db8; + margin-right: 20px; + position: relative; +} +.Section-header-link:after { + display: block; + content: '|'; + color: #177db8; + position: absolute; + right: -15px; + height: 100%; + width: 10px; + text-align: center; + top: 0; +} +.Section-header-link_ACTIVE { + color: #2b2b2b; +} +.Section-header-link:last-child { + margin-right: 0; +} +.Section-header-link:last-child:after { + display: none; +} +.Section-header .Section-title { + margin-right: auto; + margin-bottom: 0; + margin-top: 0; +} +.Section-header_sm { + margin-bottom: 48px; +} +.Section-header_sm .Section-title { + font-size: 16px; +} +.Section-header_close { + margin-top: 0; +} +.Section-header_blank { + background: none; + margin-bottom: 20px; +} +@media screen and (max-width: 990px) { + .Section-header { + width: auto; + float: none; + } +} +@media screen and (max-width: 480px) { + .Section-header { + display: block; + background: none; + margin-bottom: 40px; + } + .Section-header:first-child { + margin-top: 0; + } + .Section-header .Section-title { + padding-right: 0; + text-align: center; + } + .Section-header .Section-control { + margin-top: 15px; + padding-left: 0; + } +} +.Section-header_product { + margin-top: 65px; + margin-bottom: 40px; +} +@media screen and (max-width: 480px) { + .Section-header_product:first-child { + margin-top: 65px; + } +} +.Section-footer { + margin-top: 30px; + display: flex; + justify-content: center; +} +.Section-filter { + visibility: visible; + padding-right: 26px; + background-color: #fff; + padding-left: 25px; +} +.Section-control { + display: block; + background-color: #fff; + padding-left: 17px; +} +.Section-tab { + color: #94979f; + font-size: 14px; + font-weight: 500; + line-height: 26px; + text-transform: uppercase; + letter-spacing: 0.8px; +} +.Section-tab + .Section-tab { + margin-left: 20px; + padding-left: 21px; + border-left: #e0e0e0 1px solid; +} +.Section-tabActive { + color: #177db8; +} +.Section-content { + color: #b1b1b1; + font-size: 16px; + line-height: 1.67em; + width: 100%; +} +.Section-content .Section-header { + margin-right: 0; +} +@media screen and (max-width: 990px) { + .Section-content { + padding-left: 0; + } +} +.Section-column { + min-width: 304px; + max-width: 304px; + flex-basis: 304px; + position: relative; + z-index: 1; +} +.Section-columnTitle { + color: #878a91; + font-size: 17px; + line-height: 26px; + text-transform: uppercase; + letter-spacing: 3px; + display: block; + font-weight: 600; + padding-top: 0px; +} +.Section-columnContent { + margin-top: 30px; +} +.Section-column .Section-header { + margin-bottom: 30px; +} +.Section-column .Section-title { + font-size: 16px; +} +.Section-columnHeader { + display: flex; + align-items: center; + padding-bottom: 12px; + border-bottom: 1px solid #e1e1e1; + justify-content: space-between; + padding-top: 17px; +} +.Section-columnButtons { + display: flex; +} +.Section-columnButtons .btn:last-child { + margin-left: 7px; + width: 100%; +} +.Section-columnRange { + margin-top: -20px; +} +.Section-columnSection { + padding-top: 10px; +} +.Section-columnSection + .Section-columnSection { + margin-top: 20px; +} +.Section-columnSection:first-child { + padding-top: 3px; +} +.Section-columnSection:first-child .Section-header { + margin-top: 0; +} +.Section-columnSection_mark { + padding: 24px 20px; + box-shadow: 0 3px 0 rgba(0,0,0,0.05); + border: 1px solid #e0e0e0; + background-color: #fff; +} +.Section-columnSection_mark:first-child { + padding-top: 24px; +} +.Section_column .wrap { + display: flex; +} +.Section_columnLeft .Section-content { + padding-left: 354px; +} +.Section_columnLeft .Section-column { + margin-right: -304px; +} +.Section_columnRight .Section-content { + padding-right: 354px; +} +.Section_columnRight .Section-column { + order: 10; + margin-left: -304px; +} +@media screen and (min-width: 1200px) { + .Section_columnWide .Section-column { + min-width: 374px; + max-width: 374px; + } +} +.Section_columnWide.Section_columnLeft .Section-column { + margin-right: -282px; +} +.Section_columnWide.Section_columnRight .Section-column { + margin-left: -282px; +} +@media screen and (max-width: 990px) { + .Section_column .wrap { + display: block; + } + .Section_column .Section-column { + width: 100%; + max-width: none; + margin-left: 0 !important; + margin-right: 0 !important; + margin-bottom: 35px; + min-width: auto; + } + .Section_column .Section-content { + padding-left: 0; + padding-right: 0; + } +} +@media screen and (max-width: 480px) { + .Section_column .Section-content { + margin-top: 50px; + } +} +@media screen and (max-width: 990px) { + .Section_columnDesktop .Section-column { + display: none; + } + .Section_columnDesktop .Section-content { + padding-left: 0; + } +} +@media screen and (max-width: 480px) { + .Section_columnDesktop .Section-content { + margin-top: 0; + } +} +.Section_dark { + background-color: #f7f7f7; + padding-bottom: 97px; +} +.Section_dark .Section-header { + margin-top: 87px; + margin-bottom: 66px; +} +.Section_dark .Section-header_blank { + margin-top: 80px; + margin-bottom: 20px; +} +@media screen and (max-width: 480px) { + .Section_dark .Section-header { + margin-top: 40px; + margin-bottom: 40px; + } +} +.Section_dark .Section-title, +.Section_dark .Section-filter, +.Section_dark .Section-control { + background-color: #f7f7f7; +} +@media screen and (max-width: 480px) { + .Section_dark { + padding-bottom: 50px; + } +} +.Section + .Section_close { + margin-top: 30px; +} + +.Spoiler-footer { + margin-top: 20px; + display: flex; + justify-content: flex-end; +} +.Spoiler-hide { + height: auto; +} +.Spoiler-trigger:after { + content: attr(data-showtext); +} +.Spoiler_CLOSE .Spoiler-hide { + display: none; +} +.Spoiler_CLOSE .Spoiler-trigger:after { + content: attr(data-hidetext); +} + +.Statistics-info { + display: flex; + font-size: 17px; + flex-wrap: wrap; +} +.Statistics-block { + margin-bottom: 20px; + display: block; + text-align: center; + padding: 20px 25px; + border: 1px solid #177db8; + border-radius: 5px; + margin-right: 20px; +} +@media screen and (max-width: 480px) { + .Statistics-block { + width: 100%; + margin-right: 0; + } +} +.Statistics-amount { + display: block; + font-size: 24px; + font-weight: 400; +} +.Statistics-title { + display: block; + margin-top: 10px; +} +.Statistics-description { + font-size: 16px; + line-height: 1.5em; +} +.Statistics-example { + display: none; +} +.Statistics-status { + font-size: 13px; + font-weight: 500; + min-height: 20px; + display: inline-block; + padding-left: 25px; + margin-left: 15px; +} +.Statistics-status_pause { + background: url("../img/icons/pause.svg") 0 center no-repeat; + background-size: auto 20px; +} +.Statistics-status_cancel { + background: url("../img/icons/cancel.svg") 0 center no-repeat; + background-size: auto 20px; +} +.Statistics-status_checked { + background: url("../img/icons/checked.svg") 0 center no-repeat; + background-size: auto 20px; +} +.Statistics-option { + position: relative; + display: flex; +} +.Statistics-option + .Statistics-option { + margin-top: 3px; +} +.Statistics-option strong { + font-weight: 500; + width: 150px; + min-width: 150px; + max-width: 150px; + margin-right: 10px; + display: block; +} +.Statistics-option_error { + color: #ba6347; +} +.Statistics-option_error strong { + color: #2b2b2b; +} +@media screen and (max-width: 480px) { + .Statistics-option { + display: block; + } + .Statistics-option strong { + width: auto; + min-width: auto; + max-width: none; + margin-right: 0; + } + .Statistics-option + .Statistics-option { + margin-top: 10px; + } +} + +.Tabs-links { + display: flex; +} +.Tabs-link { + min-width: 200px; + height: 46px; + display: flex; + justify-content: center; + align-items: center; +} +.Tabs-link + .Tabs-link { + margin-left: 2.3rem; +} +.Tabs-link_ACTIVE { + border-color: #177db8; +} +.Tabs-icon { + max-width: 35px; + display: block; + margin-right: 20px; +} +.Tabs-wrap { + padding: 40px; + border: 1px solid #e0e0e0; + border-top: none; + margin-top: 0; +} +@media screen and (max-width: 990px) { + .Tabs-wrap { + padding: 30px; + } +} +@media screen and (max-width: 480px) { + .Tabs-wrap { + padding: 15px; + } +} +.Tabs-block:before, +.Tabs-block:after { + content: ""; + display: table; +} +.Tabs-block:after { + clear: both; +} +.Tabs-block_update { + position: absolute; + left: -9999px; + display: block !important; +} +.Tabs .Tabs-block { + padding-bottom: 0; + overflow: visible; +} +.Tabs-title { + font-size: 20px; + margin-top: 0; +} +.Tabs_steps { + margin-top: 0; +} +.Tabs_steps .Tabs-wrap { + margin-top: 0; +} +.Tabs_steps .Tabs-links { + visibility: visible; + counter-reset: steps; +} +@media screen and (max-width: 480px) { + .Tabs_steps .Tabs-links { + justify-content: center; + align-items: center; + padding-left: 1.5rem; + padding-right: 1.5rem; + } +} +.Tabs_steps .Tabs-link { + color: #2c2d2e; + border: none; + height: auto; + width: auto; + position: relative; +} +@media screen and (max-width: 480px) { + .Tabs_steps .Tabs-link { + align-items: center; + flex-direction: column; + } +} +.Tabs_steps .Tabs-link span:after { + content: ''; + position: absolute; + background: #fff url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAALCAYAAACgR9dcAAAAq0lEQVQoU2NkIBEEzE8QYGD/6bAhavkGRlL0gjQysn/fz8DAaMD4n6GRaM3IGhkYGC7+/8nhANYctDSi4d8vjgkbEhd8wOYSbBpBahlBGv8zMtQzMPy/8P8npyO6Abg0gixhhEj+OMDAwKCPbgA+jWDNIAKbAWBJaODA/IjuKniAoRsA8TujAS6NcJthgYRqAFgUHKq4AhIjqpAMYMCnEcNmZBeA2LhshKkDAG7IdTpqX8axAAAAAElFTkSuQmCC") center center no-repeat; + border-radius: 100px; + left: 1.5rem; + top: -0.3rem; + width: 1.8rem; + height: 1.8rem; + display: block; +} +@media screen and (max-width: 480px) { + .Tabs_steps .Tabs-link span:after { + background-color: #f6f6f6; + top: 0; + left: 50%; + margin-left: -0.2rem; + } +} +.Tabs_steps .Tabs-link:before { + counter-increment: steps; + content: counter(steps); + width: 2.8rem; + height: 2.8rem; + color: #177db8; + font-family: Montserrat, 'Arial Black', "Helvetica CY", Helvetica, "Nimbus Sans L", sans-serif; + font-size: 13px; + font-weight: 700; + border: 0.2rem solid #177db8; + display: flex; + align-items: center; + justify-content: center; + border-radius: 100px; + margin-right: 1rem; +} +@media screen and (max-width: 480px) { + .Tabs_steps .Tabs-link:before { + margin-bottom: 0.9rem; + } +} +.Tabs_steps .Tabs-link + .Tabs-link { + position: relative; + margin-left: 9rem; +} +@media screen and (max-width: 480px) { + .Tabs_steps .Tabs-link + .Tabs-link { + margin-left: 4.8rem; + } +} +.Tabs_steps .Tabs-link + .Tabs-link:after { + height: 0.2rem; + width: 6rem; + left: -7.2rem; + top: 50%; + position: absolute; + background-color: #177db8; + content: ''; + display: block; + cursor: default; +} +@media screen and (max-width: 480px) { + .Tabs_steps .Tabs-link + .Tabs-link:after { + left: -5.3rem; + top: 1.6rem; + width: 5rem; + } +} +.Tabs_steps .Tabs-link_ACTIVE { + color: #2c2d2e; +} +.Tabs_steps .Tabs-link_ACTIVE span:after { + display: none; +} +.Tabs_steps .Tabs-link_ACTIVE:before { + background-color: #177db8; + color: #fff; +} +.Tabs_steps .Tabs-link_ACTIVE ~ .Tabs-link { + color: #b7b6b4; +} +.Tabs_steps .Tabs-link_ACTIVE ~ .Tabs-link:after { + background-color: #b7b6b4; +} +.Tabs_steps .Tabs-link_ACTIVE ~ .Tabs-link:before { + background-color: transparent; + border-color: #cbcccc; + color: #b7b6b4; +} +.Tabs_steps .Tabs-link_ACTIVE ~ .Tabs-link span:after { + display: none; +} +.Tabs_default { + margin-top: 30px; +} +.Tabs_default .Tabs-links { + border: 1px solid #e0e0e0; + border-bottom: none; + background: #f7f7f7; +} +@media screen and (max-width: 990px) { + .Tabs_default .Tabs-links { + flex-wrap: wrap; + } +} +.Tabs_default .Tabs-link { + height: 40px; + min-width: auto; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + font-size: 14px; + letter-spacing: 0.8px; + padding: 5px 55px; + font-weight: 400; + color: #93969d; + border-right: 1px solid #fff; +} +@media screen and (max-width: 480px) { + .Tabs_default .Tabs-link { + width: 100%; + border-right: none; + } +} +.Tabs_default .Tabs-link:before, +.Tabs_default .Tabs-link:after { + display: none; +} +.Tabs_default .Tabs-link + .Tabs-link { + margin-left: 0; +} +.Tabs_default .Tabs-link + .Tabs-link:after { + display: none; +} +.Tabs_default .Tabs-link_ACTIVE { + background-color: #177db8; + color: #fff; +} +.Tabs_column { + display: flex; + align-items: stretch; + justify-content: space-between; +} +.Tabs_column .Tabs-links { + margin-left: 0px; + display: block; + order: 2; +} +.Tabs_column .Tabs-link { + min-width: auto; + margin-left: 0; + font-weight: 400; + letter-spacing: 1px; + text-transform: uppercase; + padding: 20px 20px; + height: auto; + border: 2px solid #f7f7f7; + border-bottom: none; + justify-content: flex-start; + color: #999; + width: 100%; +} +.Tabs_column .Tabs-link:last-child { + border-bottom: 2px solid #f7f7f7; +} +.Tabs_column .Tabs-link_ACTIVE { + border-left-color: #177db8; + color: #177db8; + font-weight: 600; +} +.Tabs_column .Tabs-icon { + margin-right: 0; + display: block; + width: 35px; +} +.Tabs_column .Tabs-linkText { + display: block; + margin-left: 10px; +} +.Tabs_column .Tabs-title { + margin-bottom: 4rem; +} +.Tabs_column .Tabs-wrap { + margin-top: 0; + border-top: 1px solid #e0e0e0; + width: 100%; +} +@media screen and (max-width: 990px) { + .Tabs_column { + display: block; + } + .Tabs_column .Tabs-links { + margin-top: 0; + margin-bottom: 30px; + } +} +.Tabs_hz .Tabs-links { + border-radius: 0.2rem; + box-shadow: inset 0 0 0 1px #f7f7f7; + background-color: #fff; + overflow-x: auto; +} +.Tabs_hz .Tabs-links:after, +.Tabs_hz .Tabs-links:before { + min-width: 2.4rem; + min-height: 100%; + display: block; + content: ''; +} +@media screen and (max-width: 990px) { + .Tabs_hz .Tabs-links { + padding: 0; + border: none; + height: auto; + } +} +@media screen and (max-width: 990px) { + .Tabs_hz .Tabs-wrap { + margin-top: 3rem; + } +} +.Tabs_hz .Tabs-block > *:last-child { + margin-bottom: 0 !important; +} +.Tabs_hz .Tabs-link { + border: none; + height: auto; + width: auto; + color: #333; + font-family: Montserrat; + font-size: 13px; + font-weight: 600; + position: relative; + padding: 2.3rem 0 2.1rem; + white-space: nowrap; +} +.Tabs_hz .Tabs-link + .Tabs-link { + margin-left: 3.7rem; +} +@media screen and (max-width: 990px) { + .Tabs_hz .Tabs-link { + padding: 1rem 0 2rem; + } +} +.Tabs_hz .Tabs-link_ACTIVE, +.Tabs_hz .Tabs-link:hover { + color: #0064c9; +} +.Tabs_hz .Tabs-link_ACTIVE:after, +.Tabs_hz .Tabs-link:hover:after { + content: ''; + display: block; + position: absolute; + height: 0.4rem; + background-color: #3182d4; + left: 0; + bottom: 0rem; + right: 0; +} diff --git a/src/main/resources/static/assets/css/fonts.css b/src/main/resources/static/assets/css/fonts.css new file mode 100644 index 0000000..b0ea8a6 --- /dev/null +++ b/src/main/resources/static/assets/css/fonts.css @@ -0,0 +1,117 @@ +@font-face { + font-family: Montserrat; + src: url("../fonts/Montserrat/Montserrat-Black.eot"); + src: url("../fonts/Montserrat/Montserrat-Black.eot?#iefix") format("embedded-opentype"), + url("../fonts/Montserrat/Montserrat-Black.woff2") format("woff2"), + url("../fonts/Montserrat/Montserrat-Black.woff") format("woff"), + url("../fonts/Montserrat/Montserrat-Black.ttf") format("truetype"), + url("../fonts/Montserrat/Montserrat-Black.svg#Montserrat") format("svg"); + font-weight: 900; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Montserrat; + src: url("../fonts/Montserrat/Montserrat-ExtraBold.eot"); + src: url("../fonts/Montserrat/Montserrat-ExtraBold.eot?#iefix") format("embedded-opentype"), + url("../fonts/Montserrat/Montserrat-ExtraBold.woff2") format("woff2"), + url("../fonts/Montserrat/Montserrat-ExtraBold.woff") format("woff"), + url("../fonts/Montserrat/Montserrat-ExtraBold.ttf") format("truetype"), + url("../fonts/Montserrat/Montserrat-ExtraBold.svg#Montserrat") format("svg"); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Montserrat; + src: url("../fonts/Montserrat/Montserrat-ExtraLight.eot"); + src: url("../fonts/Montserrat/Montserrat-ExtraLight.eot?#iefix") format("embedded-opentype"), + url("../fonts/Montserrat/Montserrat-ExtraLight.woff2") format("woff2"), + url("../fonts/Montserrat/Montserrat-ExtraLight.woff") format("woff"), + url("../fonts/Montserrat/Montserrat-ExtraLight.ttf") format("truetype"), + url("../fonts/Montserrat/Montserrat-ExtraLight.svg#Montserrat") format("svg"); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Montserrat; + src: url("../fonts/Montserrat/Montserrat-Light.eot"); + src: url("../fonts/Montserrat/Montserrat-Light.eot?#iefix") format("embedded-opentype"), + url("../fonts/Montserrat/Montserrat-Light.woff2") format("woff2"), + url("../fonts/Montserrat/Montserrat-Light.woff") format("woff"), + url("../fonts/Montserrat/Montserrat-Light.ttf") format("truetype"), + url("../fonts/Montserrat/Montserrat-Light.svg#Montserrat") format("svg"); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Montserrat; + src: url("../fonts/Montserrat/Montserrat-Bold.eot"); + src: url("../fonts/Montserrat/Montserrat-Bold.eot?#iefix") format("embedded-opentype"), + url("data:font/woff2;base64,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") format("woff2"), + url("../fonts/Montserrat/Montserrat-Bold.woff") format("woff"), + url("../fonts/Montserrat/Montserrat-Bold.ttf") format("truetype"), + url("../fonts/Montserrat/Montserrat-Bold.svg#Montserrat") format("svg"); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Montserrat; + src: url("../fonts/Montserrat/Montserrat-Medium.eot"); + src: url("../fonts/Montserrat/Montserrat-Medium.eot?#iefix") format("embedded-opentype"), + url("../fonts/Montserrat/Montserrat-Medium.woff2") format("woff2"), + url("../fonts/Montserrat/Montserrat-Medium.woff") format("woff"), + url("../fonts/Montserrat/Montserrat-Medium.ttf") format("truetype"), + url("../fonts/Montserrat/Montserrat-Medium.svg#Montserrat") format("svg"); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Montserrat; + src: url("../fonts/Montserrat/Montserrat-Regular.eot"); + src: url("../fonts/Montserrat/Montserrat-Regular.eot?#iefix") format("embedded-opentype"), + url("data:font/woff2;base64,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") format("woff2"), + url("../fonts/Montserrat/Montserrat-Regular.woff") format("woff"), + url("../fonts/Montserrat/Montserrat-Regular.ttf") format("truetype"), + url("../fonts/Montserrat/Montserrat-Regular.svg#Montserrat") format("svg"); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Montserrat; + src: url("../fonts/Montserrat/Montserrat-SemiBold.eot"); + src: url("../fonts/Montserrat/Montserrat-SemiBold.eot?#iefix") format("embedded-opentype"), + url("../fonts/Montserrat/Montserrat-SemiBold.woff2") format("woff2"), + url("../fonts/Montserrat/Montserrat-SemiBold.woff") format("woff"), + url("../fonts/Montserrat/Montserrat-SemiBold.ttf") format("truetype"), + url("../fonts/Montserrat/Montserrat-SemiBold.svg#Montserrat") format("svg"); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Montserrat; + src: url("../fonts/Montserrat/Montserrat-Thin.eot"); + src: url("../fonts/Montserrat/Montserrat-Thin.eot?#iefix") format("embedded-opentype"), + url("../fonts/Montserrat/Montserrat-Thin.woff2") format("woff2"), + url("../fonts/Montserrat/Montserrat-Thin.woff") format("woff"), + url("../fonts/Montserrat/Montserrat-Thin.ttf") format("truetype"), + url("../fonts/Montserrat/Montserrat-Thin.svg#Montserrat") format("svg"); + font-weight: 100; + font-style: normal; + font-display: swap; +} + diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.css b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.css new file mode 100644 index 0000000..efc1d66 --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.css @@ -0,0 +1,12 @@ +@font-face { + font-family: "Montserrat Black"; + src: url("Montserrat-Black.eot"); /* IE9 */ + src: url("Montserrat-Black.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ + url("Montserrat-Black.woff") format("woff"), /* chrome, firefox */ + url("Montserrat-Black.ttf") format("truetype"), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url("Montserrat-Black.svg#Montserrat Black") format("svg"); /* iOS 4.1- */ + font-style: normal; + font-weight: normal; +} + + diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.eot b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.eot new file mode 100644 index 0000000..91906a7 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.eot differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.svg b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.svg new file mode 100644 index 0000000..c942034 --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.ttf b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.ttf new file mode 100644 index 0000000..c77ae8a Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.ttf differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.woff b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.woff new file mode 100644 index 0000000..4c4a69a Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.woff differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.woff2 b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.woff2 new file mode 100644 index 0000000..a6de30a Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Black.woff2 differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.css b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.css new file mode 100644 index 0000000..eeb92de --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.css @@ -0,0 +1,12 @@ +@font-face { + font-family: "Montserrat"; + src: url("Montserrat-Bold.eot"); /* IE9 */ + src: url("Montserrat-Bold.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ + url("Montserrat-Bold.woff") format("woff"), /* chrome, firefox */ + url("Montserrat-Bold.ttf") format("truetype"), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url("Montserrat-Bold.svg#Montserrat") format("svg"); /* iOS 4.1- */ + font-style: normal; + font-weight: normal; +} + + diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.eot b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.eot new file mode 100644 index 0000000..e7dcdb9 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.eot differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.svg b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.svg new file mode 100644 index 0000000..0645f21 --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.ttf b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.ttf new file mode 100644 index 0000000..0627c76 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.ttf differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.woff b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.woff new file mode 100644 index 0000000..e670c70 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.woff differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.woff2 b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.woff2 new file mode 100644 index 0000000..5037cdd Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Bold.woff2 differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.css b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.css new file mode 100644 index 0000000..41ffc67 --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.css @@ -0,0 +1,12 @@ +@font-face { + font-family: "Montserrat ExtraBold"; + src: url("Montserrat-ExtraBold.eot"); /* IE9 */ + src: url("Montserrat-ExtraBold.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ + url("Montserrat-ExtraBold.woff") format("woff"), /* chrome, firefox */ + url("Montserrat-ExtraBold.ttf") format("truetype"), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url("Montserrat-ExtraBold.svg#Montserrat ExtraBold") format("svg"); /* iOS 4.1- */ + font-style: normal; + font-weight: normal; +} + + diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.eot b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.eot new file mode 100644 index 0000000..938ccb2 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.eot differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.svg b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.svg new file mode 100644 index 0000000..20155c0 --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.ttf b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.ttf new file mode 100644 index 0000000..15a6416 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.ttf differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.woff b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.woff new file mode 100644 index 0000000..dc18dd4 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.woff differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.woff2 b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.woff2 new file mode 100644 index 0000000..9f5eee1 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraBold.woff2 differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.css b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.css new file mode 100644 index 0000000..4590433 --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.css @@ -0,0 +1,12 @@ +@font-face { + font-family: "Montserrat ExtraLight"; + src: url("Montserrat-ExtraLight.eot"); /* IE9 */ + src: url("Montserrat-ExtraLight.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ + url("Montserrat-ExtraLight.woff") format("woff"), /* chrome, firefox */ + url("Montserrat-ExtraLight.ttf") format("truetype"), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url("Montserrat-ExtraLight.svg#Montserrat ExtraLight") format("svg"); /* iOS 4.1- */ + font-style: normal; + font-weight: normal; +} + + diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.eot b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.eot new file mode 100644 index 0000000..2015641 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.eot differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.svg b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.svg new file mode 100644 index 0000000..780817a --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.ttf b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.ttf new file mode 100644 index 0000000..a6f1ee8 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.ttf differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.woff b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.woff new file mode 100644 index 0000000..9e96b3d Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.woff differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.woff2 b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.woff2 new file mode 100644 index 0000000..5715712 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-ExtraLight.woff2 differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.css b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.css new file mode 100644 index 0000000..0082110 --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.css @@ -0,0 +1,12 @@ +@font-face { + font-family: "Montserrat Light"; + src: url("Montserrat-Light.eot"); /* IE9 */ + src: url("Montserrat-Light.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ + url("Montserrat-Light.woff") format("woff"), /* chrome, firefox */ + url("Montserrat-Light.ttf") format("truetype"), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url("Montserrat-Light.svg#Montserrat Light") format("svg"); /* iOS 4.1- */ + font-style: normal; + font-weight: normal; +} + + diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.eot b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.eot new file mode 100644 index 0000000..017c265 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.eot differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.svg b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.svg new file mode 100644 index 0000000..62564d6 --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.ttf b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.ttf new file mode 100644 index 0000000..c02857e Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.ttf differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.woff b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.woff new file mode 100644 index 0000000..d0ba3c1 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.woff differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.woff2 b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.woff2 new file mode 100644 index 0000000..02dda7d Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Light.woff2 differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.css b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.css new file mode 100644 index 0000000..e18678f --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.css @@ -0,0 +1,12 @@ +@font-face { + font-family: "Montserrat Medium"; + src: url("Montserrat-Medium.eot"); /* IE9 */ + src: url("Montserrat-Medium.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ + url("Montserrat-Medium.woff") format("woff"), /* chrome, firefox */ + url("Montserrat-Medium.ttf") format("truetype"), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url("Montserrat-Medium.svg#Montserrat Medium") format("svg"); /* iOS 4.1- */ + font-style: normal; + font-weight: normal; +} + + diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.eot b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.eot new file mode 100644 index 0000000..2baaf93 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.eot differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.svg b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.svg new file mode 100644 index 0000000..8177266 --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.ttf b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.ttf new file mode 100644 index 0000000..790989d Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.ttf differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.woff b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.woff new file mode 100644 index 0000000..d708bbd Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.woff differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.woff2 b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.woff2 new file mode 100644 index 0000000..6d8b699 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Medium.woff2 differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.css b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.css new file mode 100644 index 0000000..a04084e --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.css @@ -0,0 +1,12 @@ +@font-face { + font-family: "Montserrat"; + src: url("Montserrat-Regular.eot"); /* IE9 */ + src: url("Montserrat-Regular.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ + url("Montserrat-Regular.woff") format("woff"), /* chrome, firefox */ + url("Montserrat-Regular.ttf") format("truetype"), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url("Montserrat-Regular.svg#Montserrat") format("svg"); /* iOS 4.1- */ + font-style: normal; + font-weight: normal; +} + + diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.eot b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.eot new file mode 100644 index 0000000..8833e21 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.eot differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.svg b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.svg new file mode 100644 index 0000000..43dbb74 --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.ttf b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.ttf new file mode 100644 index 0000000..992e9bd Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.ttf differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.woff b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.woff new file mode 100644 index 0000000..3f4c1d6 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.woff differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.woff2 b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.woff2 new file mode 100644 index 0000000..29df81f Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Regular.woff2 differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.css b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.css new file mode 100644 index 0000000..af840f1 --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.css @@ -0,0 +1,12 @@ +@font-face { + font-family: "Montserrat SemiBold"; + src: url("Montserrat-SemiBold.eot"); /* IE9 */ + src: url("Montserrat-SemiBold.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ + url("Montserrat-SemiBold.woff") format("woff"), /* chrome, firefox */ + url("Montserrat-SemiBold.ttf") format("truetype"), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url("Montserrat-SemiBold.svg#Montserrat SemiBold") format("svg"); /* iOS 4.1- */ + font-style: normal; + font-weight: normal; +} + + diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.eot b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.eot new file mode 100644 index 0000000..aa85134 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.eot differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.svg b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.svg new file mode 100644 index 0000000..3c2ceed --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.ttf b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.ttf new file mode 100644 index 0000000..ec73aa2 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.ttf differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.woff b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.woff new file mode 100644 index 0000000..abc6beb Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.woff differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.woff2 b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.woff2 new file mode 100644 index 0000000..57c211d Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-SemiBold.woff2 differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.css b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.css new file mode 100644 index 0000000..4671645 --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.css @@ -0,0 +1,12 @@ +@font-face { + font-family: "Montserrat Thin"; + src: url("Montserrat-Thin.eot"); /* IE9 */ + src: url("Montserrat-Thin.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ + url("Montserrat-Thin.woff") format("woff"), /* chrome, firefox */ + url("Montserrat-Thin.ttf") format("truetype"), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url("Montserrat-Thin.svg#Montserrat Thin") format("svg"); /* iOS 4.1- */ + font-style: normal; + font-weight: normal; +} + + diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.eot b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.eot new file mode 100644 index 0000000..cdadfef Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.eot differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.svg b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.svg new file mode 100644 index 0000000..3eb1788 --- /dev/null +++ b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.ttf b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.ttf new file mode 100644 index 0000000..8a3070e Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.ttf differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.woff b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.woff new file mode 100644 index 0000000..04c934f Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.woff differ diff --git a/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.woff2 b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.woff2 new file mode 100644 index 0000000..14a7046 Binary files /dev/null and b/src/main/resources/static/assets/fonts/Montserrat/Montserrat-Thin.woff2 differ diff --git a/src/main/resources/static/assets/img/icons/arrow_hide.svg b/src/main/resources/static/assets/img/icons/arrow_hide.svg new file mode 100644 index 0000000..b069b16 --- /dev/null +++ b/src/main/resources/static/assets/img/icons/arrow_hide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/img/icons/cancel.svg b/src/main/resources/static/assets/img/icons/cancel.svg new file mode 100644 index 0000000..582c537 --- /dev/null +++ b/src/main/resources/static/assets/img/icons/cancel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/img/icons/checked.svg b/src/main/resources/static/assets/img/icons/checked.svg new file mode 100644 index 0000000..2ae10aa --- /dev/null +++ b/src/main/resources/static/assets/img/icons/checked.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/img/icons/dashboard.svg b/src/main/resources/static/assets/img/icons/dashboard.svg new file mode 100644 index 0000000..56a81dd --- /dev/null +++ b/src/main/resources/static/assets/img/icons/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/img/icons/management.svg b/src/main/resources/static/assets/img/icons/management.svg new file mode 100644 index 0000000..e6510bf --- /dev/null +++ b/src/main/resources/static/assets/img/icons/management.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/img/icons/pause.svg b/src/main/resources/static/assets/img/icons/pause.svg new file mode 100644 index 0000000..e5f7e92 --- /dev/null +++ b/src/main/resources/static/assets/img/icons/pause.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/img/icons/search.svg b/src/main/resources/static/assets/img/icons/search.svg new file mode 100644 index 0000000..135cdf8 --- /dev/null +++ b/src/main/resources/static/assets/img/icons/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/static/assets/js/scripts.js b/src/main/resources/static/assets/js/scripts.js new file mode 100644 index 0000000..54917fe --- /dev/null +++ b/src/main/resources/static/assets/js/scripts.js @@ -0,0 +1,1954 @@ +'use strict'; +(function ($) { + + var px = ''; //'rt--' + + /** + * Функция для вывода набора jQuery по селектору, к селектору добавляются + * префиксы + * + * @param {string} selector Принимает селектор для формирования набора + * @return {jQuery} Возвращает новый jQuery набор по выбранным селекторам + */ + function $x(selector) { + return $(x(selector)); + } + + /** + * Функция для автоматического добавления префиксов к селекторы + * + * @param {string} selector Принимает селектор для формирования набора + * @return {string} Возвращает новый jQuery набор по выбранным селекторам + */ + function x(selector) { + var arraySelectors = selector.split('.'), + firstNotClass = !!arraySelectors[0]; + + selector = ''; + + for (var i = 0; i < arraySelectors.length; i++) { + if (!i) { + if (firstNotClass) selector += arraySelectors[i]; + continue; + } + selector += '.' + px + arraySelectors[i]; + } + + return selector; + } + + $(function () {var button = function(){ + return { + init: function(){ + $('.Site').on('click', 'a.btn[disabled="disabled"]', function(e){ + e.preventDefault(); + }); + } + }; +}; +button().init(); + +/*! + * jQuery Form Plugin + * version: 3.37.0-2013.07.11 + * @requires jQuery v1.5 or later + * Copyright (c) 2013 M. Alsup + * Examples and documentation at: http://malsup.com/jquery/form/ + * Project repository: https://github.com/malsup/form + * Dual licensed under the MIT and GPL licenses. + * https://github.com/malsup/form#copyright-and-license + */ +/*global ActiveXObject */ +;(function($) { +"use strict"; + +/* + Usage Note: + ----------- + Do not use both ajaxSubmit and ajaxForm on the same form. These + functions are mutually exclusive. Use ajaxSubmit if you want + to bind your own submit handler to the form. For example, + + $(document).ready(function() { + $('#myForm').on('submit', function(e) { + e.preventDefault(); // <-- important + $(this).ajaxSubmit({ + target: '#output' + }); + }); + }); + + Use ajaxForm when you want the plugin to manage all the event binding + for you. For example, + + $(document).ready(function() { + $('#myForm').ajaxForm({ + target: '#output' + }); + }); + + You can also use ajaxForm with delegation (requires jQuery v1.7+), so the + form does not have to exist when you invoke ajaxForm: + + $('#myForm').ajaxForm({ + delegation: true, + target: '#output' + }); + + When using ajaxForm, the ajaxSubmit function will be invoked for you + at the appropriate time. +*/ + +/** + * Feature detection + */ +var feature = {}; +feature.fileapi = $("").get(0).files !== undefined; +feature.formdata = window.FormData !== undefined; + +var hasProp = !!$.fn.prop; + +// attr2 uses prop when it can but checks the return type for +// an expected string. this accounts for the case where a form +// contains inputs with names like "action" or "method"; in those +// cases "prop" returns the element +$.fn.attr2 = function() { + if ( ! hasProp ) + return this.attr.apply(this, arguments); + var val = this.prop.apply(this, arguments); + if ( ( val && val.jquery ) || typeof val === 'string' ) + return val; + return this.attr.apply(this, arguments); +}; + +/** + * ajaxSubmit() provides a mechanism for immediately submitting + * an HTML form using AJAX. + */ +$.fn.ajaxSubmit = function(options) { + /*jshint scripturl:true */ + + // fast fail if nothing selected (http://dev.jquery.com/ticket/2752) + if (!this.length) { + log('ajaxSubmit: skipping submit process - no element selected'); + return this; + } + + var method, action, url, $form = this; + + if (typeof options == 'function') { + options = { success: options }; + } + else if ( options === undefined ) { + options = {}; + } + + method = options.type || this.attr2('method'); + action = options.url || this.attr2('action'); + + url = (typeof action === 'string') ? $.trim(action) : ''; + url = url || window.location.href || ''; + if (url) { + // clean url (don't include hash vaue) + url = (url.match(/^([^#]+)/)||[])[1]; + } + + options = $.extend(true, { + url: url, + success: $.ajaxSettings.success, + type: method || 'GET', + iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank' + }, options); + + // hook for manipulating the form data before it is extracted; + // convenient for use with rich editors like tinyMCE or FCKEditor + var veto = {}; + this.trigger('form-pre-serialize', [this, options, veto]); + if (veto.veto) { + log('ajaxSubmit: submit vetoed via form-pre-serialize trigger'); + return this; + } + + // provide opportunity to alter form data before it is serialized + if (options.beforeSerialize && options.beforeSerialize(this, options) === false) { + log('ajaxSubmit: submit aborted via beforeSerialize callback'); + return this; + } + + var traditional = options.traditional; + if ( traditional === undefined ) { + traditional = $.ajaxSettings.traditional; + } + + var elements = []; + var qx, a = this.formToArray(options.semantic, elements); + if (options.data) { + options.extraData = options.data; + qx = $.param(options.data, traditional); + } + + // give pre-submit callback an opportunity to abort the submit + if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) { + log('ajaxSubmit: submit aborted via beforeSubmit callback'); + return this; + } + + // fire vetoable 'validate' event + this.trigger('form-submit-validate', [a, this, options, veto]); + if (veto.veto) { + log('ajaxSubmit: submit vetoed via form-submit-validate trigger'); + return this; + } + + var q = $.param(a, traditional); + if (qx) { + q = ( q ? (q + '&' + qx) : qx ); + } + if (options.type.toUpperCase() == 'GET') { + options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q; + options.data = null; // data is null for 'get' + } + else { + options.data = q; // data is the query string for 'post' + } + + var callbacks = []; + if (options.resetForm) { + callbacks.push(function() { $form.resetForm(); }); + } + if (options.clearForm) { + callbacks.push(function() { $form.clearForm(options.includeHidden); }); + } + + // perform a load on the target only if dataType is not provided + if (!options.dataType && options.target) { + var oldSuccess = options.success || function(){}; + callbacks.push(function(data) { + var fn = options.replaceTarget ? 'replaceWith' : 'html'; + $(options.target)[fn](data).each(oldSuccess, arguments); + }); + } + else if (options.success) { + callbacks.push(options.success); + } + + options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg + var context = options.context || this ; // jQuery 1.4+ supports scope context + for (var i=0, max=callbacks.length; i < max; i++) { + callbacks[i].apply(context, [data, status, xhr || $form, $form]); + } + }; + + if (options.error) { + var oldError = options.error; + options.error = function(xhr, status, error) { + var context = options.context || this; + oldError.apply(context, [xhr, status, error, $form]); + }; + } + + if (options.complete) { + var oldComplete = options.complete; + options.complete = function(xhr, status) { + var context = options.context || this; + oldComplete.apply(context, [xhr, status, $form]); + }; + } + + // are there files to upload? + + // [value] (issue #113), also see comment: + // https://github.com/malsup/form/commit/588306aedba1de01388032d5f42a60159eea9228#commitcomment-2180219 + var fileInputs = $('input[type=file]:enabled[value!=""]', this); + + var hasFileInputs = fileInputs.length > 0; + var mp = 'multipart/form-data'; + var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp); + + var fileAPI = feature.fileapi && feature.formdata; + log("fileAPI :" + fileAPI); + var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI; + + var jqxhr; + + // options.iframe allows user to force iframe mode + // 06-NOV-09: now defaulting to iframe mode if file input is detected + if (options.iframe !== false && (options.iframe || shouldUseFrame)) { + // hack to fix Safari hang (thanks to Tim Molendijk for this) + // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d + if (options.closeKeepAlive) { + $.get(options.closeKeepAlive, function() { + jqxhr = fileUploadIframe(a); + }); + } + else { + jqxhr = fileUploadIframe(a); + } + } + else if ((hasFileInputs || multipart) && fileAPI) { + jqxhr = fileUploadXhr(a); + } + else { + jqxhr = $.ajax(options); + } + + $form.removeData('jqxhr').data('jqxhr', jqxhr); + + // clear element array + for (var k=0; k < elements.length; k++) + elements[k] = null; + + // fire 'notify' event + this.trigger('form-submit-notify', [this, options]); + return this; + + // utility fn for deep serialization + function deepSerialize(extraData){ + var serialized = $.param(extraData, options.traditional).split('&'); + var len = serialized.length; + var result = []; + var i, part; + for (i=0; i < len; i++) { + // #252; undo param space replacement + serialized[i] = serialized[i].replace(/\+/g,' '); + part = serialized[i].split('='); + // #278; use array instead of object storage, favoring array serializations + result.push([decodeURIComponent(part[0]), decodeURIComponent(part[1])]); + } + return result; + } + + // XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz) + function fileUploadXhr(a) { + var formdata = new FormData(); + + for (var i=0; i < a.length; i++) { + formdata.append(a[i].name, a[i].value); + } + + if (options.extraData) { + var serializedData = deepSerialize(options.extraData); + for (i=0; i < serializedData.length; i++) + if (serializedData[i]) + formdata.append(serializedData[i][0], serializedData[i][1]); + } + + options.data = null; + + var s = $.extend(true, {}, $.ajaxSettings, options, { + contentType: false, + processData: false, + cache: false, + type: method || 'POST' + }); + + if (options.uploadProgress) { + // workaround because jqXHR does not expose upload property + s.xhr = function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(event) { + var percent = 0; + var position = event.loaded || event.position; /*event.position is deprecated*/ + var total = event.total; + if (event.lengthComputable) { + percent = Math.ceil(position / total * 100); + } + options.uploadProgress(event, position, total, percent); + }, false); + } + return xhr; + }; + } + + s.data = null; + var beforeSend = s.beforeSend; + s.beforeSend = function(xhr, o) { + o.data = formdata; + if(beforeSend) + beforeSend.call(this, xhr, o); + }; + return $.ajax(s); + } + + // private function for handling file uploads (hat tip to YAHOO!) + function fileUploadIframe(a) { + var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle; + var deferred = $.Deferred(); + + if (a) { + // ensure that every serialized input is still enabled + for (i=0; i < elements.length; i++) { + el = $(elements[i]); + if ( hasProp ) + el.prop('disabled', false); + else + el.removeAttr('disabled'); + } + } + + s = $.extend(true, {}, $.ajaxSettings, options); + s.context = s.context || s; + id = 'jqFormIO' + (new Date().getTime()); + if (s.iframeTarget) { + $io = $(s.iframeTarget); + n = $io.attr2('name'); + if (!n) + $io.attr2('name', id); + else + id = n; + } + else { + $io = $('