add mobile version
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
.idea
|
||||
node_modules
|
||||
.parcel-cache
|
||||
dist
|
||||
19
package.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "cirulnik",
|
||||
"version": "1.0.0",
|
||||
"source": "src/index.html",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@parcel/transformer-sass": "2.8.3",
|
||||
"autoprefixer": "^10.4.14",
|
||||
"parcel": "^2.8.3",
|
||||
"postcss": "^8.1.0"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "parcel src/index.html",
|
||||
"build": "parcel build src/index.html"
|
||||
},
|
||||
"engines": {
|
||||
"node": "18.13.0"
|
||||
}
|
||||
}
|
||||
BIN
public/fonts/Calibri/calibri.ttf
Normal file
BIN
public/fonts/Calibri/calibri_bold.ttf
Normal file
BIN
public/fonts/Cambria/Cambria-Bold.eot
Normal file
BIN
public/fonts/Cambria/Cambria-Bold.ttf
Normal file
BIN
public/fonts/Cambria/Cambria-Bold.woff
Normal file
BIN
public/fonts/Cambria/Cambria-Bold.woff2
Normal file
BIN
public/fonts/Cambria/Cambria-BoldItalic.eot
Normal file
BIN
public/fonts/Cambria/Cambria-BoldItalic.ttf
Normal file
BIN
public/fonts/Cambria/Cambria-BoldItalic.woff
Normal file
BIN
public/fonts/Cambria/Cambria-BoldItalic.woff2
Normal file
BIN
public/fonts/Cambria/Cambria-Italic.eot
Normal file
BIN
public/fonts/Cambria/Cambria-Italic.ttf
Normal file
BIN
public/fonts/Cambria/Cambria-Italic.woff
Normal file
BIN
public/fonts/Cambria/Cambria-Italic.woff2
Normal file
BIN
public/fonts/Cambria/Cambria.eot
Normal file
BIN
public/fonts/Cambria/Cambria.ttf
Normal file
BIN
public/fonts/Cambria/Cambria.woff
Normal file
BIN
public/fonts/Cambria/Cambria.woff2
Normal file
3
public/icons/arrow.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="46" height="22" viewBox="0 0 46 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M44.9268 1.40713C45.8065 2.4713 45.657 4.04714 44.5928 4.92685L25.238 20.9269C24.3363 21.6722 23.0383 21.6926 22.1137 20.976L1.4685 4.97603C0.377167 4.13025 0.178108 2.5599 1.0239 1.46856C1.86968 0.377229 3.44003 0.178171 4.53136 1.02396L23.5947 15.798L41.4071 1.07314C42.4712 0.193424 44.0471 0.342955 44.9268 1.40713Z" fill="#DA0041"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 490 B |
BIN
public/images/arrow.png
Normal file
|
After Width: | Height: | Size: 201 B |
BIN
public/images/decorations/cut.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
public/images/decorations/cut2.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/images/decorations/gift.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
public/images/decorations/gift2.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/images/description_card.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
public/images/footer.png
Normal file
|
After Width: | Height: | Size: 458 KiB |
BIN
public/images/gift.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
public/images/logo.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
public/images/main_card.png
Normal file
|
After Width: | Height: | Size: 832 KiB |
BIN
public/images/text_logo.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/images/whatsapp.png
Normal file
|
After Width: | Height: | Size: 349 KiB |
320
src/index.html
Normal file
@ -0,0 +1,320 @@
|
||||
<!doctype html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport"
|
||||
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<meta name="description" content="ЦирюльникЪ">
|
||||
<title>ЦирюльникЪ</title>
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="../public/images/logo.png">
|
||||
<link rel="stylesheet" type="text/css" href="./styles/fonts.css" />
|
||||
<link rel="stylesheet" href="./styles/main.scss">
|
||||
</head>
|
||||
<body>
|
||||
<header class="header">
|
||||
<img src="../public/images/logo.png" alt="ЦирюльникЪ" class="header__logo">
|
||||
|
||||
<img src="../public/images/text_logo.png" alt="федеральная сеть салонов красоты" class="header__text_logo">
|
||||
|
||||
<div class="header__gift">
|
||||
<img src="../public/images/gift.png" alt="Подарок">
|
||||
</div>
|
||||
|
||||
</header>
|
||||
|
||||
<div class="whatsapp">
|
||||
<a href="https://api.whatsapp.com/send?phone=79995441212">
|
||||
<img src="../public/images/whatsapp.png" alt="whatsapp">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="container-wrapper">
|
||||
<div class="main-card wow animate__animated animate__zoomIn">
|
||||
<div class="open-label marquee3k" data-speed="1.25" data-reverse="false" data-pausable="false">
|
||||
<div class="open-label__text"> открытие в июне - открытие в июне - открытие в июне - </div>
|
||||
</div>
|
||||
|
||||
<h1 class="main-card__title">ЦирюльникЪ</h1>
|
||||
|
||||
<p class="main-card__description">
|
||||
крупнейшая в России сеть салонов красоты полного обслуживания
|
||||
</p>
|
||||
|
||||
<img src="../public/images/main_card.png" alt="ЦирюльникЪ" class="main-card__img">
|
||||
</div>
|
||||
|
||||
<div class="arrow-down">
|
||||
<img src="../public/icons/arrow.svg" alt="Дальше" id="arrow-down">
|
||||
</div>
|
||||
|
||||
<div class="statistic" id="statistic">
|
||||
<div class="statistic_item">
|
||||
<p>Работаем с <span>2009</span> года</p>
|
||||
</div>
|
||||
|
||||
<div class="statistic_item">
|
||||
<p>Более <span>500</span> салонов в сети</p>
|
||||
</div>
|
||||
|
||||
<div class="statistic_item">
|
||||
<p>Более <span>2 млн</span> довольных клиентов ежемесячно</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
<h2 class="description__title">
|
||||
«ЦирюльникЪ» - это:
|
||||
</h2>
|
||||
|
||||
<div class="description__card">
|
||||
<div class="description__card__list">
|
||||
<ul>
|
||||
<li>Мужской зал</li>
|
||||
<li>Женский зал</li>
|
||||
<li>Маникюрный зал</li>
|
||||
<li>Косметологический кабинет</li>
|
||||
<li>Массажный кабинет</li>
|
||||
<li>Солярий</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<img src="../public/images/description_card.png" alt="«ЦирюльникЪ» - это:" class="description__card__img">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clients">
|
||||
<h2 class="clients__title">
|
||||
Клиентам
|
||||
</h2>
|
||||
|
||||
<div class="clients__card">
|
||||
<img src="../public/images/decorations/gift.png" alt="" class="clients__card__decor_img">
|
||||
<p class="clients__card__text">
|
||||
Оставьте номер телефона и получите подарок при первом посещении
|
||||
</p>
|
||||
|
||||
<button class="clients__card__btn" id="clients__card__btn">
|
||||
Оставить заявку
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="employees">
|
||||
<h2 class="employees__title">
|
||||
Сотрудникам
|
||||
</h2>
|
||||
|
||||
<div class="employees__card">
|
||||
<img src="../public/images/decorations/cut.png" alt="" class="employees__card__decor_img">
|
||||
<p class="clients__card__text">
|
||||
Устройся на работу и зарабатывай с лидером бьюти-индустрии
|
||||
</p>
|
||||
|
||||
<button class="employees__card__btn" id="employees__card__btn">
|
||||
Оставить заявку
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="services">
|
||||
<h2 class="services__title">
|
||||
Популярные услуги
|
||||
</h2>
|
||||
|
||||
<div class="services__block">
|
||||
<div class="services__block__haircut">
|
||||
<h3>СТРИЖКА / МАНИКЮР <span class="services__price">249 <span>₽</span></span></h3>
|
||||
</div>
|
||||
|
||||
<div class="services__block__pedicure">
|
||||
<h3>
|
||||
<span class="services__price">799 <span>₽</span></span>
|
||||
<br>
|
||||
ПЕДИКЮР
|
||||
</h3>
|
||||
<h3>
|
||||
<span class="services__price">
|
||||
799 <span>₽</span>
|
||||
</span>
|
||||
ПОКРЫТИЕ
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
<div class="services__block__coloring">
|
||||
<h3>ОКРАШИВАНИЕ <br> <span class="services__price"><span>от</span> 689 <span>₽</span></span></h3>
|
||||
</div>
|
||||
|
||||
<div class="services__block__solaris">
|
||||
<h3>СОЛЯРИЙ <br> <span class="services__price">20 <span>₽/мин</span></span></h3>
|
||||
</div>
|
||||
|
||||
<div class="services__block__massage">
|
||||
<h3><span class="services__price">1299 <span>₽</span></span><br> ОБЩИЙ МАССАЖ</h3>
|
||||
</div>
|
||||
|
||||
<div class="services__block__full_price">
|
||||
Ознакомиться <img src="../public/images/arrow.png" alt="стрелка">
|
||||
с полным прайсом
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="faq" id="faq">
|
||||
<h2 class="faq__title">
|
||||
Часто задаваемые вопросы
|
||||
</h2>
|
||||
|
||||
<div class="faq__block">
|
||||
<div class="faq__block__item" id="faq__block__item">
|
||||
<div class="faq__block__item__question">
|
||||
<h3 class="faq__block__item__title">Цены указаны реальные?</h3>
|
||||
|
||||
<button class="faq__block__item__btn">+</button>
|
||||
</div>
|
||||
|
||||
<p class="faq__block__item__answer" id="faq__block__item__answer">
|
||||
Да, цены в Цирюльнике - это реальность. При этом мы всегда следим за уровнем обслуживания наших сотрудников, качеством предоставляемых услуг и стерилизацией инструментов.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="faq__block__item" id="faq__block__item">
|
||||
<div class="faq__block__item__question">
|
||||
<h3 class="faq__block__item__title">Как получить подарок при открытии?</h3>
|
||||
|
||||
<button class="faq__block__item__btn">+</button>
|
||||
</div>
|
||||
|
||||
<p class="faq__block__item__answer" id="faq__block__item__answer">
|
||||
Для начала оставьте заявку в графе «Клиентам» выше. Администратор свяжется с Вами, когда до открытия салона останется меньше недели, и предложит записаться на услугу. Для получения подарка Вам необходимо посетить салон в течение 14 дней после открытия
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="faq__block__item" id="faq__block__item">
|
||||
<div class="faq__block__item__question">
|
||||
<h3 class="faq__block__item__title">Как записаться на услугу?</h3>
|
||||
|
||||
<button class="faq__block__item__btn">+</button>
|
||||
</div>
|
||||
|
||||
<p class="faq__block__item__answer" id="faq__block__item__answer">
|
||||
Самостоятельная онлайн-запись на услуги будет доступна примерно за 14 дней до открытия салона. Также Вы можете оставить свой контакт в форме обратно связи. Также Вы можете позвонить нам и попросить добавить Вас в лист ожидания.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="faq__block__item" id="faq__block__item">
|
||||
<div class="faq__block__item__question">
|
||||
<h3 class="faq__block__item__title">По какому адресу открывается салон?</h3>
|
||||
|
||||
<button class="faq__block__item__btn">+</button>
|
||||
</div>
|
||||
|
||||
<p class="faq__block__item__answer" id="faq__block__item__answer">
|
||||
Мы будем ждать Вас по адресу: Бульвар Адмирала Ушакова, 12, цокольный этаж. Здание - культурный центр ЛИРА. У нас общий вход с магазином FIX PRICE.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="faq__block__item" id="faq__block__item">
|
||||
<div class="faq__block__item__question">
|
||||
<h3 class="faq__block__item__title">Как получить консультацию по услугам?</h3>
|
||||
|
||||
<button class="faq__block__item__btn">+</button>
|
||||
</div>
|
||||
|
||||
<p class="faq__block__item__answer" id="faq__block__item__answer">
|
||||
Сделать это Вы можете уже сейчас. Позвоните нам по номеру
|
||||
+7 (999) 544-12-12, и администратор с радостью ответит на все вопросы.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="faq__block__item" id="faq__block__item">
|
||||
<div class="faq__block__item__question">
|
||||
<h3 class="faq__block__item__title">Где подробнее почитать о вашей сети?</h3>
|
||||
|
||||
<button class="faq__block__item__btn">+</button>
|
||||
</div>
|
||||
|
||||
<p class="faq__block__item__answer" id="faq__block__item__answer">
|
||||
В интернете огромное количество информации о нас. Можете ознакомиться с информацией и отзывами на нашем официальном сайте: Главная страница | Цирюльникъ (salon-hair.ru).
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="contacts">
|
||||
<h2 class="contacts__title">
|
||||
Контакты
|
||||
</h2>
|
||||
|
||||
<div class="contacts__card">
|
||||
<span class="contacts__card__address">
|
||||
Москва, <br> Бульвар Адмирала Ушакова, 12 <br> м. Скобелевская
|
||||
</span>
|
||||
|
||||
<div class="contacts__card__phone_block">
|
||||
<a href="tel:+79995441212" class="contacts__card__phone">+7 (999) 544-12-12</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
<img src="../public/images/footer.png" alt="Качество">
|
||||
|
||||
<div class="footer__text">
|
||||
<span>
|
||||
© Все права защищены
|
||||
</span>
|
||||
<span>
|
||||
2009 - 2023
|
||||
</span>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<div class="modal" id="client_modal">
|
||||
<div class="overlay"></div>
|
||||
|
||||
<div class="modal__content client_modal">
|
||||
<img src="../public/images/decorations/gift2.png" alt="подарки" class="client_modal__img">
|
||||
<form action="mailers/mail_client_handler.php" method="POST">
|
||||
<input required name="name" type="text" placeholder="Имя">
|
||||
<input required name="phone" type="text" placeholder="+7 000 000 00 00">
|
||||
|
||||
<button type="submit">Отправить</button>
|
||||
</form>
|
||||
|
||||
<p class="modal__agreement">
|
||||
Нажимая кнопку «Отправить» Вы соглашаетесь с политикой конфиденциальности
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal" id="employee_modal">
|
||||
<div class="overlay"></div>
|
||||
|
||||
<div class="modal__content employee_modal">
|
||||
<img src="../public/images/decorations/cut2.png" alt="подарки" class="employee_modal__img">
|
||||
<form action="mailers/mail_employee_handler.php" method="POST">
|
||||
<input required name="name" type="text" placeholder="Имя">
|
||||
<input required name="phone" type="text" placeholder="+7 000 000 00 00">
|
||||
<input required name="job" type="text" placeholder="Желаемая должность">
|
||||
|
||||
<button type="submit">Отправить</button>
|
||||
</form>
|
||||
|
||||
<p class="modal__agreement">
|
||||
Нажимая кнопку «Отправить» Вы соглашаетесь с политикой конфиденциальности
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://unpkg.com/@popperjs/core@2"></script>
|
||||
<script src="https://unpkg.com/tippy.js@6"></script>
|
||||
|
||||
<script src="./libs/marquee3000/marquee3k.js"></script>
|
||||
<script src="./libs/wow.js/dist/wow.min.js"></script>
|
||||
<script src="./scripts/index.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
7
src/libs/animate.css/animate.min.css
vendored
Normal file
202
src/libs/marquee3000/marquee3k.js
Normal file
@ -0,0 +1,202 @@
|
||||
/**
|
||||
* MARQUEE 3000 MARQUEE 3000 MARQUEE 3000 MARQUEE 3000 MARQUEE 3000
|
||||
* http://github.com/ezekielaquino/marquee3000
|
||||
* Marquees for the new millennium v1.0
|
||||
* MIT License
|
||||
*/
|
||||
|
||||
;(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define([], factory);
|
||||
} else if (typeof exports === 'object') {
|
||||
module.exports = factory();
|
||||
} else {
|
||||
root.Marquee3k = factory();
|
||||
}
|
||||
}(this, function() {
|
||||
'use strict';
|
||||
|
||||
let animationId = 0;
|
||||
|
||||
class Marquee3k {
|
||||
constructor(element, options) {
|
||||
|
||||
if (element.children.length === 0) {
|
||||
throw new Error("Encountered a marquee element without children, please supply a wrapper for your content");
|
||||
}
|
||||
|
||||
this.element = element;
|
||||
this.selector = options.selector;
|
||||
this.speed = element.dataset.speed || 0.25;
|
||||
this.pausable = element.dataset.pausable === 'true' ? true : false;
|
||||
this.reverse = element.dataset.reverse === 'true' ? true : false;
|
||||
this.paused = false;
|
||||
this.parent = element.parentElement;
|
||||
this.parentProps = this.parent.getBoundingClientRect();
|
||||
this.content = element.children[0];
|
||||
this.innerContent = this.content.innerHTML;
|
||||
this.wrapStyles = '';
|
||||
this.offset = 0;
|
||||
|
||||
this._setupWrapper();
|
||||
this._setupContent();
|
||||
this._setupEvents();
|
||||
|
||||
this.wrapper.appendChild(this.content);
|
||||
this.element.appendChild(this.wrapper);
|
||||
}
|
||||
|
||||
_setupWrapper() {
|
||||
this.wrapper = document.createElement('div');
|
||||
this.wrapper.classList.add('marquee3k__wrapper');
|
||||
this.wrapper.style.whiteSpace = 'nowrap';
|
||||
}
|
||||
|
||||
_setupContent() {
|
||||
this.content.classList.add(`${this.selector}__copy`);
|
||||
this.content.style.display = 'inline-block';
|
||||
this.contentWidth = this.content.offsetWidth;
|
||||
|
||||
this.requiredReps = this.contentWidth > this.parentProps.width ? 2 : Math.ceil((this.parentProps.width - this.contentWidth) / this.contentWidth) + 1;
|
||||
|
||||
for (let i = 0; i < this.requiredReps; i++) {
|
||||
this._createClone();
|
||||
}
|
||||
|
||||
if (this.reverse) {
|
||||
this.offset = this.contentWidth * -1;
|
||||
}
|
||||
|
||||
this.element.classList.add('is-init');
|
||||
}
|
||||
|
||||
_setupEvents() {
|
||||
this.element.addEventListener('mouseenter', () => {
|
||||
if (this.pausable) this.paused = true;
|
||||
});
|
||||
|
||||
this.element.addEventListener('mouseleave', () => {
|
||||
if (this.pausable) this.paused = false;
|
||||
});
|
||||
}
|
||||
|
||||
_createClone() {
|
||||
const clone = this.content.cloneNode(true);
|
||||
clone.style.display = 'inline-block';
|
||||
clone.classList.add(`${this.selector}__copy`);
|
||||
this.wrapper.appendChild(clone);
|
||||
}
|
||||
|
||||
animate() {
|
||||
if (!this.paused) {
|
||||
const isScrolled = this.reverse ? this.offset < 0 : this.offset > this.contentWidth * -1;
|
||||
const direction = this.reverse ? -1 : 1;
|
||||
const reset = this.reverse ? this.contentWidth * -1 : 0;
|
||||
|
||||
if (isScrolled) this.offset -= this.speed * direction;
|
||||
else this.offset = reset;
|
||||
|
||||
this.wrapper.style.whiteSpace = 'nowrap';
|
||||
this.wrapper.style.transform = `translate(${this.offset}px, 0) translateZ(0)`;
|
||||
}
|
||||
}
|
||||
|
||||
_refresh() {
|
||||
this.contentWidth = this.content.offsetWidth;
|
||||
}
|
||||
|
||||
repopulate(difference, isLarger) {
|
||||
this.contentWidth = this.content.offsetWidth;
|
||||
|
||||
if (isLarger) {
|
||||
const amount = Math.ceil(difference / this.contentWidth) + 1;
|
||||
|
||||
for (let i = 0; i < amount; i++) {
|
||||
this._createClone();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static refresh(index) {
|
||||
MARQUEES[index]._refresh();
|
||||
}
|
||||
|
||||
static pause(index) {
|
||||
MARQUEES[index].paused = true;
|
||||
}
|
||||
|
||||
static play(index) {
|
||||
MARQUEES[index].paused = false;
|
||||
}
|
||||
|
||||
static toggle(index) {
|
||||
MARQUEES[index].paused = !MARQUEES[index].paused;
|
||||
}
|
||||
|
||||
static refreshAll() {
|
||||
for (let i = 0; i < MARQUEES.length; i++) {
|
||||
MARQUEES[i]._refresh();
|
||||
}
|
||||
}
|
||||
|
||||
static pauseAll() {
|
||||
for (let i = 0; i < MARQUEES.length; i++) {
|
||||
MARQUEES[i].paused = true;
|
||||
}
|
||||
}
|
||||
|
||||
static playAll() {
|
||||
for (let i = 0; i < MARQUEES.length; i++) {
|
||||
MARQUEES[i].paused = false;
|
||||
}
|
||||
}
|
||||
|
||||
static toggleAll() {
|
||||
for (let i = 0; i < MARQUEES.length; i++) {
|
||||
MARQUEES[i].paused = !MARQUEES[i].paused;
|
||||
}
|
||||
}
|
||||
|
||||
static init(options = { selector: 'marquee3k' }) {
|
||||
if (animationId) window.cancelAnimationFrame(animationId);
|
||||
|
||||
window.MARQUEES = [];
|
||||
const marquees = Array.from(document.querySelectorAll(`.${options.selector}`));
|
||||
let previousWidth = window.innerWidth;
|
||||
let timer;
|
||||
|
||||
for (let i = 0; i < marquees.length; i++) {
|
||||
const marquee = marquees[i];
|
||||
const instance = new Marquee3k(marquee, options);
|
||||
MARQUEES.push(instance);
|
||||
}
|
||||
|
||||
animate();
|
||||
|
||||
function animate() {
|
||||
for (let i = 0; i < MARQUEES.length; i++) {
|
||||
MARQUEES[i].animate();
|
||||
}
|
||||
animationId = window.requestAnimationFrame(animate);
|
||||
}
|
||||
|
||||
window.addEventListener('resize', () => {
|
||||
clearTimeout(timer);
|
||||
|
||||
timer = setTimeout(() => {
|
||||
const isLarger = previousWidth < window.innerWidth;
|
||||
const difference = window.innerWidth - previousWidth;
|
||||
|
||||
for (let i = 0; i < MARQUEES.length; i++) {
|
||||
MARQUEES[i].repopulate(difference, isLarger);
|
||||
}
|
||||
|
||||
previousWidth = this.innerWidth;
|
||||
}, 250);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return Marquee3k;
|
||||
|
||||
}));
|
||||
1
src/libs/marquee3000/marquee3k.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?module.exports=e():t.Marquee3k=e()}(this,function(){"use strict";let t=0;class e{constructor(t,e){this.element=t,this.selector=e.selector,this.speed=t.dataset.speed||.25,this.pausable=t.dataset.pausable,this.reverse=t.dataset.reverse,this.paused=!1,this.parent=t.parentElement,this.parentProps=this.parent.getBoundingClientRect(),this.content=t.children[0],this.innerContent=this.content.innerHTML,this.wrapStyles="",this.offset=0,this._setupWrapper(),this._setupContent(),this._setupEvents(),this.wrapper.appendChild(this.content),this.element.appendChild(this.wrapper)}_setupWrapper(){this.wrapper=document.createElement("div"),this.wrapper.classList.add("marquee3k__wrapper"),this.wrapper.style.whiteSpace="nowrap"}_setupContent(){this.content.classList.add(`${this.selector}__copy`),this.content.style.display="inline-block",this.contentWidth=this.content.offsetWidth,this.requiredReps=this.contentWidth>this.parentProps.width?2:Math.ceil((this.parentProps.width-this.contentWidth)/this.contentWidth)+1;for(let t=0;t<this.requiredReps;t++)this._createClone();this.reverse&&(this.offset=-1*this.contentWidth),this.element.classList.add("is-init")}_setupEvents(){this.element.addEventListener("mouseenter",()=>{this.pausable&&(this.paused=!0)}),this.element.addEventListener("mouseleave",()=>{this.pausable&&(this.paused=!1)})}_createClone(){const t=this.content.cloneNode(!0);t.style.display="inline-block",t.classList.add(`${this.selector}__copy`),this.wrapper.appendChild(t)}animate(){if(!this.paused){const t=this.reverse?this.offset<0:this.offset>-1*this.contentWidth,e=this.reverse?-1:1,s=this.reverse?-1*this.contentWidth:0;t?this.offset-=this.speed*e:this.offset=s,this.wrapper.style.whiteSpace="nowrap",this.wrapper.style.transform=`translate(${this.offset}px, 0) translateZ(0)`}}_refresh(){this.contentWidth=this.content.offsetWidth}repopulate(t,e){if(this.contentWidth=this.content.offsetWidth,e){const e=Math.ceil(t/this.contentWidth)+1;for(let t=0;t<e;t++)this._createClone()}}static refresh(t){MARQUEES[t]._refresh()}static pause(t){MARQUEES[t].paused=!0}static play(t){MARQUEES[t].paused=!1}static toggle(t){MARQUEES[t].paused=!MARQUEES[t].paused}static refreshAll(){for(let t=0;t<MARQUEES.length;t++)MARQUEES[t]._refresh()}static pauseAll(){for(let t=0;t<MARQUEES.length;t++)MARQUEES[t].paused=!0}static playAll(){for(let t=0;t<MARQUEES.length;t++)MARQUEES[t].paused=!1}static toggleAll(){for(let t=0;t<MARQUEES.length;t++)MARQUEES[t].paused=!MARQUEES[t].paused}static init(s={selector:"marquee3k"}){t&&window.cancelAnimationFrame(t),window.MARQUEES=[];const i=Array.from(document.querySelectorAll(`.${s.selector}`));let n,r=window.innerWidth;for(let t=0;t<i.length;t++){const n=i[t],r=new e(n,s);MARQUEES.push(r)}!function e(){for(let t=0;t<MARQUEES.length;t++)MARQUEES[t].animate();t=window.requestAnimationFrame(e)}(),window.addEventListener("resize",()=>{clearTimeout(n),n=setTimeout(()=>{const t=r<window.innerWidth,e=window.innerWidth-r;for(let s=0;s<MARQUEES.length;s++)MARQUEES[s].repopulate(e,t);r=this.innerWidth},250)})}}return e});
|
||||
355
src/libs/normalize.css/normalize.css
vendored
Normal file
@ -0,0 +1,355 @@
|
||||
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
|
||||
|
||||
/* Document
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Correct the line height in all browsers.
|
||||
* 2. Prevent adjustments of font size after orientation changes in iOS.
|
||||
*/
|
||||
|
||||
html {
|
||||
line-height: 1.15; /* 1 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/* Sections
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the margin in all browsers.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the `main` element consistently in IE.
|
||||
*/
|
||||
|
||||
main {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Add the correct box sizing in Firefox.
|
||||
* 2. Show the overflow in Edge and IE.
|
||||
*/
|
||||
|
||||
hr {
|
||||
box-sizing: content-box; /* 1 */
|
||||
height: 0; /* 1 */
|
||||
overflow: visible; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||
* 2. Correct the odd `em` font sizing in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
font-family: monospace, monospace; /* 1 */
|
||||
font-size: 1em; /* 2 */
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background on active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Remove the bottom border in Chrome 57-
|
||||
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: none; /* 1 */
|
||||
text-decoration: underline; /* 2 */
|
||||
text-decoration: underline dotted; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct font weight in Chrome, Edge, and Safari.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||
* 2. Correct the odd `em` font sizing in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: monospace, monospace; /* 1 */
|
||||
font-size: 1em; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Change the font styles in all browsers.
|
||||
* 2. Remove the margin in Firefox and Safari.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
font-family: inherit; /* 1 */
|
||||
font-size: 100%; /* 1 */
|
||||
line-height: 1.15; /* 1 */
|
||||
margin: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the overflow in IE.
|
||||
* 1. Show the overflow in Edge.
|
||||
*/
|
||||
|
||||
button,
|
||||
input { /* 1 */
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inheritance of text transform in Edge, Firefox, and IE.
|
||||
* 1. Remove the inheritance of text transform in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select { /* 1 */
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the inability to style clickable types in iOS and Safari.
|
||||
*/
|
||||
|
||||
button,
|
||||
[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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the padding in Firefox.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
padding: 0.35em 0.75em 0.625em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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; /* 1 */
|
||||
color: inherit; /* 2 */
|
||||
display: table; /* 1 */
|
||||
max-width: 100%; /* 1 */
|
||||
padding: 0; /* 3 */
|
||||
white-space: normal; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the default vertical scrollbar in IE 10+.
|
||||
*/
|
||||
|
||||
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; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 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; /* 1 */
|
||||
outline-offset: -2px; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inner padding in Chrome and Safari on macOS.
|
||||
*/
|
||||
|
||||
[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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; /* 1 */
|
||||
font: inherit; /* 2 */
|
||||
}
|
||||
|
||||
/* Interactive
|
||||
========================================================================== */
|
||||
|
||||
/*
|
||||
* Add the correct display in Edge, IE 10+, and Firefox.
|
||||
*/
|
||||
|
||||
details {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add the correct display in all browsers.
|
||||
*/
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
/* Misc
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 10+.
|
||||
*/
|
||||
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 10.
|
||||
*/
|
||||
|
||||
[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
1
src/libs/tippy.js/animations/perspective-extreme.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-animation=perspective-extreme][data-placement^=top]{transform-origin:bottom}.tippy-box[data-animation=perspective-extreme][data-placement^=top][data-state=visible]{transform:perspective(700px)}.tippy-box[data-animation=perspective-extreme][data-placement^=top][data-state=hidden]{transform:perspective(700px) translateY(10px) rotateX(90deg)}.tippy-box[data-animation=perspective-extreme][data-placement^=bottom]{transform-origin:top}.tippy-box[data-animation=perspective-extreme][data-placement^=bottom][data-state=visible]{transform:perspective(700px)}.tippy-box[data-animation=perspective-extreme][data-placement^=bottom][data-state=hidden]{transform:perspective(700px) translateY(-10px) rotateX(-90deg)}.tippy-box[data-animation=perspective-extreme][data-placement^=left]{transform-origin:right}.tippy-box[data-animation=perspective-extreme][data-placement^=left][data-state=visible]{transform:perspective(700px)}.tippy-box[data-animation=perspective-extreme][data-placement^=left][data-state=hidden]{transform:perspective(700px) translateX(10px) rotateY(-90deg)}.tippy-box[data-animation=perspective-extreme][data-placement^=right]{transform-origin:left}.tippy-box[data-animation=perspective-extreme][data-placement^=right][data-state=visible]{transform:perspective(700px)}.tippy-box[data-animation=perspective-extreme][data-placement^=right][data-state=hidden]{transform:perspective(700px) translateX(-10px) rotateY(90deg)}.tippy-box[data-animation=perspective-extreme][data-state=hidden]{opacity:.5}
|
||||
1
src/libs/tippy.js/animations/perspective-subtle.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-animation=perspective-subtle][data-placement^=top]{transform-origin:bottom}.tippy-box[data-animation=perspective-subtle][data-placement^=top][data-state=visible]{transform:perspective(700px)}.tippy-box[data-animation=perspective-subtle][data-placement^=top][data-state=hidden]{transform:perspective(700px) translateY(5px) rotateX(30deg)}.tippy-box[data-animation=perspective-subtle][data-placement^=bottom]{transform-origin:top}.tippy-box[data-animation=perspective-subtle][data-placement^=bottom][data-state=visible]{transform:perspective(700px)}.tippy-box[data-animation=perspective-subtle][data-placement^=bottom][data-state=hidden]{transform:perspective(700px) translateY(-5px) rotateX(-30deg)}.tippy-box[data-animation=perspective-subtle][data-placement^=left]{transform-origin:right}.tippy-box[data-animation=perspective-subtle][data-placement^=left][data-state=visible]{transform:perspective(700px)}.tippy-box[data-animation=perspective-subtle][data-placement^=left][data-state=hidden]{transform:perspective(700px) translateX(5px) rotateY(-30deg)}.tippy-box[data-animation=perspective-subtle][data-placement^=right]{transform-origin:left}.tippy-box[data-animation=perspective-subtle][data-placement^=right][data-state=visible]{transform:perspective(700px)}.tippy-box[data-animation=perspective-subtle][data-placement^=right][data-state=hidden]{transform:perspective(700px) translateX(-5px) rotateY(30deg)}.tippy-box[data-animation=perspective-subtle][data-state=hidden]{opacity:0}
|
||||
1
src/libs/tippy.js/animations/perspective.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-animation=perspective][data-placement^=top]{transform-origin:bottom}.tippy-box[data-animation=perspective][data-placement^=top][data-state=visible]{transform:perspective(700px)}.tippy-box[data-animation=perspective][data-placement^=top][data-state=hidden]{transform:perspective(700px) translateY(8px) rotateX(60deg)}.tippy-box[data-animation=perspective][data-placement^=bottom]{transform-origin:top}.tippy-box[data-animation=perspective][data-placement^=bottom][data-state=visible]{transform:perspective(700px)}.tippy-box[data-animation=perspective][data-placement^=bottom][data-state=hidden]{transform:perspective(700px) translateY(-8px) rotateX(-60deg)}.tippy-box[data-animation=perspective][data-placement^=left]{transform-origin:right}.tippy-box[data-animation=perspective][data-placement^=left][data-state=visible]{transform:perspective(700px)}.tippy-box[data-animation=perspective][data-placement^=left][data-state=hidden]{transform:perspective(700px) translateX(8px) rotateY(-60deg)}.tippy-box[data-animation=perspective][data-placement^=right]{transform-origin:left}.tippy-box[data-animation=perspective][data-placement^=right][data-state=visible]{transform:perspective(700px)}.tippy-box[data-animation=perspective][data-placement^=right][data-state=hidden]{transform:perspective(700px) translateX(-8px) rotateY(60deg)}.tippy-box[data-animation=perspective][data-state=hidden]{opacity:0}
|
||||
1
src/libs/tippy.js/animations/scale-extreme.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-animation=scale-extreme][data-placement^=top]{transform-origin:bottom}.tippy-box[data-animation=scale-extreme][data-placement^=bottom]{transform-origin:top}.tippy-box[data-animation=scale-extreme][data-placement^=left]{transform-origin:right}.tippy-box[data-animation=scale-extreme][data-placement^=right]{transform-origin:left}.tippy-box[data-animation=scale-extreme][data-state=hidden]{transform:scale(0);opacity:.25}
|
||||
1
src/libs/tippy.js/animations/scale-subtle.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-animation=scale-subtle][data-placement^=top]{transform-origin:bottom}.tippy-box[data-animation=scale-subtle][data-placement^=bottom]{transform-origin:top}.tippy-box[data-animation=scale-subtle][data-placement^=left]{transform-origin:right}.tippy-box[data-animation=scale-subtle][data-placement^=right]{transform-origin:left}.tippy-box[data-animation=scale-subtle][data-state=hidden]{transform:scale(.8);opacity:0}
|
||||
1
src/libs/tippy.js/animations/scale.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-animation=scale][data-placement^=top]{transform-origin:bottom}.tippy-box[data-animation=scale][data-placement^=bottom]{transform-origin:top}.tippy-box[data-animation=scale][data-placement^=left]{transform-origin:right}.tippy-box[data-animation=scale][data-placement^=right]{transform-origin:left}.tippy-box[data-animation=scale][data-state=hidden]{transform:scale(.5);opacity:0}
|
||||
1
src/libs/tippy.js/animations/shift-away-extreme.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-animation=shift-away-extreme][data-state=hidden]{opacity:0}.tippy-box[data-animation=shift-away-extreme][data-state=hidden][data-placement^=top]{transform:translateY(20px)}.tippy-box[data-animation=shift-away-extreme][data-state=hidden][data-placement^=bottom]{transform:translateY(-20px)}.tippy-box[data-animation=shift-away-extreme][data-state=hidden][data-placement^=left]{transform:translateX(20px)}.tippy-box[data-animation=shift-away-extreme][data-state=hidden][data-placement^=right]{transform:translateX(-20px)}
|
||||
1
src/libs/tippy.js/animations/shift-away-subtle.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-animation=shift-away-subtle][data-state=hidden]{opacity:0}.tippy-box[data-animation=shift-away-subtle][data-state=hidden][data-placement^=top]{transform:translateY(5px)}.tippy-box[data-animation=shift-away-subtle][data-state=hidden][data-placement^=bottom]{transform:translateY(-5px)}.tippy-box[data-animation=shift-away-subtle][data-state=hidden][data-placement^=left]{transform:translateX(5px)}.tippy-box[data-animation=shift-away-subtle][data-state=hidden][data-placement^=right]{transform:translateX(-5px)}
|
||||
1
src/libs/tippy.js/animations/shift-away.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-animation=shift-away][data-state=hidden]{opacity:0}.tippy-box[data-animation=shift-away][data-state=hidden][data-placement^=top]{transform:translateY(10px)}.tippy-box[data-animation=shift-away][data-state=hidden][data-placement^=bottom]{transform:translateY(-10px)}.tippy-box[data-animation=shift-away][data-state=hidden][data-placement^=left]{transform:translateX(10px)}.tippy-box[data-animation=shift-away][data-state=hidden][data-placement^=right]{transform:translateX(-10px)}
|
||||
1
src/libs/tippy.js/animations/shift-toward-extreme.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-animation=shift-toward-extreme][data-state=hidden]{opacity:0}.tippy-box[data-animation=shift-toward-extreme][data-state=hidden][data-placement^=top]{transform:translateY(-20px)}.tippy-box[data-animation=shift-toward-extreme][data-state=hidden][data-placement^=bottom]{transform:translateY(20px)}.tippy-box[data-animation=shift-toward-extreme][data-state=hidden][data-placement^=left]{transform:translateX(-20px)}.tippy-box[data-animation=shift-toward-extreme][data-state=hidden][data-placement^=right]{transform:translateX(20px)}
|
||||
1
src/libs/tippy.js/animations/shift-toward-subtle.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-animation=shift-toward-subtle][data-state=hidden]{opacity:0}.tippy-box[data-animation=shift-toward-subtle][data-state=hidden][data-placement^=top][data-state=hidden]{transform:translateY(-5px)}.tippy-box[data-animation=shift-toward-subtle][data-state=hidden][data-placement^=bottom][data-state=hidden]{transform:translateY(5px)}.tippy-box[data-animation=shift-toward-subtle][data-state=hidden][data-placement^=left][data-state=hidden]{transform:translateX(-5px)}.tippy-box[data-animation=shift-toward-subtle][data-state=hidden][data-placement^=right][data-state=hidden]{transform:translateX(5px)}
|
||||
1
src/libs/tippy.js/animations/shift-toward.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-animation=shift-toward][data-state=hidden]{opacity:0}.tippy-box[data-animation=shift-toward][data-state=hidden][data-placement^=top]{transform:translateY(-10px)}.tippy-box[data-animation=shift-toward][data-state=hidden][data-placement^=bottom]{transform:translateY(10px)}.tippy-box[data-animation=shift-toward][data-state=hidden][data-placement^=left]{transform:translateX(-10px)}.tippy-box[data-animation=shift-toward][data-state=hidden][data-placement^=right]{transform:translateX(10px)}
|
||||
16
src/libs/tippy.js/headless/package.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "tippy-headless",
|
||||
"private": true,
|
||||
"version": "0.1.0",
|
||||
"description": "Headless rendering for Tippy.js",
|
||||
"types": "../index.d.ts",
|
||||
"main": "dist/tippy-headless.cjs.js",
|
||||
"module": "dist/tippy-headless.esm.js",
|
||||
"unpkg": "dist/tippy-headless.umd.min.js",
|
||||
"sideEffects": false,
|
||||
"files": [
|
||||
"dist/"
|
||||
],
|
||||
"author": "atomiks",
|
||||
"license": "MIT"
|
||||
}
|
||||
1
src/libs/tippy.js/themes/light-border.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-theme~=light-border]{background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,8,16,.15);color:#333;box-shadow:0 4px 14px -2px rgba(0,8,16,.08)}.tippy-box[data-theme~=light-border]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light-border]>.tippy-arrow:after,.tippy-box[data-theme~=light-border]>.tippy-svg-arrow:after{content:"";position:absolute;z-index:-1}.tippy-box[data-theme~=light-border]>.tippy-arrow:after{border-color:transparent;border-style:solid}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-arrow:after{border-top-color:rgba(0,8,16,.2);border-width:7px 7px 0;top:17px;left:1px}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-svg-arrow>svg{top:16px}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-svg-arrow:after{top:17px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff;bottom:16px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:rgba(0,8,16,.2);border-width:0 7px 7px;bottom:17px;left:1px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:16px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-svg-arrow:after{bottom:17px}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-arrow:after{border-left-color:rgba(0,8,16,.2);border-width:7px 0 7px 7px;left:17px;top:1px}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-svg-arrow>svg{left:11px}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-svg-arrow:after{left:12px}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff;right:16px}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-arrow:after{border-width:7px 7px 7px 0;right:17px;top:1px;border-right-color:rgba(0,8,16,.2)}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-svg-arrow>svg{right:11px}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-svg-arrow:after{right:12px}.tippy-box[data-theme~=light-border]>.tippy-svg-arrow{fill:#fff}.tippy-box[data-theme~=light-border]>.tippy-svg-arrow:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=);background-size:16px 6px;width:16px;height:6px}
|
||||
1
src/libs/tippy.js/themes/light.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-theme~=light]{color:#26323d;box-shadow:0 0 20px 4px rgba(154,161,177,.15),0 4px 80px -8px rgba(36,40,47,.25),0 4px 4px -2px rgba(91,94,105,.15);background-color:#fff}.tippy-box[data-theme~=light][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff}.tippy-box[data-theme~=light][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff}.tippy-box[data-theme~=light]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light]>.tippy-svg-arrow{fill:#fff}
|
||||
1
src/libs/tippy.js/themes/material.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-theme~=material]{background-color:#505355;font-weight:600}.tippy-box[data-theme~=material][data-placement^=top]>.tippy-arrow:before{border-top-color:#505355}.tippy-box[data-theme~=material][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#505355}.tippy-box[data-theme~=material][data-placement^=left]>.tippy-arrow:before{border-left-color:#505355}.tippy-box[data-theme~=material][data-placement^=right]>.tippy-arrow:before{border-right-color:#505355}.tippy-box[data-theme~=material]>.tippy-backdrop{background-color:#505355}.tippy-box[data-theme~=material]>.tippy-svg-arrow{fill:#505355}
|
||||
1
src/libs/tippy.js/themes/translucent.css
Normal file
@ -0,0 +1 @@
|
||||
.tippy-box[data-theme~=translucent]{background-color:rgba(0,0,0,.7)}.tippy-box[data-theme~=translucent]>.tippy-arrow{width:14px;height:14px}.tippy-box[data-theme~=translucent][data-placement^=top]>.tippy-arrow:before{border-width:7px 7px 0;border-top-color:rgba(0,0,0,.7)}.tippy-box[data-theme~=translucent][data-placement^=bottom]>.tippy-arrow:before{border-width:0 7px 7px;border-bottom-color:rgba(0,0,0,.7)}.tippy-box[data-theme~=translucent][data-placement^=left]>.tippy-arrow:before{border-width:7px 0 7px 7px;border-left-color:rgba(0,0,0,.7)}.tippy-box[data-theme~=translucent][data-placement^=right]>.tippy-arrow:before{border-width:7px 7px 7px 0;border-right-color:rgba(0,0,0,.7)}.tippy-box[data-theme~=translucent]>.tippy-backdrop{background-color:rgba(0,0,0,.7)}.tippy-box[data-theme~=translucent]>.tippy-svg-arrow{fill:rgba(0,0,0,.7)}
|
||||
2744
src/libs/wow.js/css/libs/animate.css
vendored
Normal file
36
src/libs/wow.js/css/site.css
Normal file
@ -0,0 +1,36 @@
|
||||
h1 {
|
||||
font-size: 72px;
|
||||
line-height: 1.5;
|
||||
color: #2c3e50;
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
#container {
|
||||
width: 980px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
section {
|
||||
height: 300px;
|
||||
margin: 60px 0;
|
||||
}
|
||||
|
||||
.section--purple {
|
||||
background-color: #9b59b6;
|
||||
}
|
||||
|
||||
.section--blue {
|
||||
background-color: #3498db;
|
||||
}
|
||||
|
||||
.section--green {
|
||||
background-color: #2ecc71;
|
||||
}
|
||||
|
||||
#main {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#more {
|
||||
margin: 20px auto 48px;
|
||||
}
|
||||
45
src/mailers/mail_client_handler.php
Normal file
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
use PHPMailer\PHPMailer\PHPMailer;
|
||||
use PHPMailer\PHPMailer\Exception;
|
||||
|
||||
require '../PHPMailer/src/Exception.php';
|
||||
require '../PHPMailer/src/PHPMailer.php';
|
||||
require '../PHPMailer/src/SMTP.php';
|
||||
|
||||
$mail = new PHPMailer(true);
|
||||
$mail->isSMTP(); // Set mailer to use SMTP
|
||||
$mail->Host = 'ssl://smtp.yandex.ru'; // Specify main and backup SMTP servers
|
||||
$mail->SMTPAuth = true; // Enable SMTP authentication
|
||||
$mail->Username = 'cirulnik.bu@yandex.ru'; // SMTP username
|
||||
$mail->Password = 'iuuvjocyidcgkkpw'; // SMTP password
|
||||
$mail->Port = 465;
|
||||
$mail->CharSet = "utf-8";
|
||||
|
||||
$mail->From = 'cirulnik.bu@yandex.ru';
|
||||
$mail->FromName = 'Цирюльникъ';
|
||||
$mail->addAddress('cirulnik.bu@yandex.ru', 'Цирюльникъ'); // Add a recipient
|
||||
|
||||
$name = $_POST['name'];
|
||||
$phone = $_POST['phone'];
|
||||
|
||||
$mail->WordWrap = 50; // Set word wrap to 50 characters
|
||||
$mail->isHTML(true); // Set email format to HTML
|
||||
|
||||
$mail->addCustomHeader('Content-type', 'text/html; charset=utf-8');
|
||||
|
||||
$mail->Subject = 'Заявка на подарок';
|
||||
$mail->Body = '<b>Имя:</b> ' . $name . '<br/>' .
|
||||
'<b>Телефон:</b> ' . $phone . '<br/>';
|
||||
|
||||
|
||||
if(!$mail->send()) {
|
||||
echo 'Message could not be sent.';
|
||||
echo 'Mailer Error: ' . $mail->ErrorInfo;
|
||||
} else {
|
||||
echo "<script>
|
||||
window.history.go(-1);
|
||||
window.history.pushState({success: true}, '');
|
||||
</script>";
|
||||
}
|
||||
|
||||
?>
|
||||
47
src/mailers/mail_employee_handler.php
Normal file
@ -0,0 +1,47 @@
|
||||
<?php
|
||||
use PHPMailer\PHPMailer\PHPMailer;
|
||||
use PHPMailer\PHPMailer\Exception;
|
||||
|
||||
require '../PHPMailer/src/Exception.php';
|
||||
require '../PHPMailer/src/PHPMailer.php';
|
||||
require '../PHPMailer/src/SMTP.php';
|
||||
|
||||
$mail = new PHPMailer(true);
|
||||
$mail->isSMTP(); // Set mailer to use SMTP
|
||||
$mail->Host = 'ssl://smtp.yandex.ru'; // Specify main and backup SMTP servers
|
||||
$mail->SMTPAuth = true; // Enable SMTP authentication
|
||||
$mail->Username = 'cirulnik.bu@yandex.ru'; // SMTP username
|
||||
$mail->Password = 'iuuvjocyidcgkkpw'; // SMTP password
|
||||
$mail->Port = 465;
|
||||
$mail->CharSet = "utf-8";
|
||||
|
||||
$mail->From = 'cirulnik.bu@yandex.ru';
|
||||
$mail->FromName = 'Цирюльникъ';
|
||||
$mail->addAddress('cirulnik.bu@yandex.ru', 'Цирюльникъ'); // Add a recipient
|
||||
|
||||
$name = $_POST['name'];
|
||||
$phone = $_POST['phone'];
|
||||
$job = $_POST['job'];
|
||||
|
||||
$mail->WordWrap = 50; // Set word wrap to 50 characters
|
||||
$mail->isHTML(true); // Set email format to HTML
|
||||
|
||||
$mail->addCustomHeader('Content-type', 'text/html; charset=utf-8');
|
||||
|
||||
$mail->Subject = 'Заявка на работу';
|
||||
$mail->Body = '<b>Имя:</b> ' . $name . '<br/>' .
|
||||
'<b>Телефон:</b> ' . $phone . '<br/>' .
|
||||
'<b>Должность:</b> ' . $job . '<br/>';
|
||||
|
||||
|
||||
if(!$mail->send()) {
|
||||
echo 'Message could not be sent.';
|
||||
echo 'Mailer Error: ' . $mail->ErrorInfo;
|
||||
}else {
|
||||
echo "<script>
|
||||
window.history.go(-1);
|
||||
window.history.pushState({success: true}, '');
|
||||
</script>";
|
||||
}
|
||||
|
||||
?>
|
||||
115
src/scripts/index.js
Normal file
@ -0,0 +1,115 @@
|
||||
wow = new WOW({
|
||||
boxClass: 'wow', // default
|
||||
animateClass: 'animated', // default
|
||||
offset: 0, // default
|
||||
mobile: true,
|
||||
live: true // default
|
||||
})
|
||||
wow.init();
|
||||
|
||||
Marquee3k.init();
|
||||
|
||||
const faqElem = document.getElementById('faq');
|
||||
const arrowDownElem = document.getElementById('arrow-down');
|
||||
const statisticElem = document.getElementById('statistic');
|
||||
|
||||
const clientBtn = document.getElementById('clients__card__btn');
|
||||
const employeeBtn = document.getElementById('employees__card__btn');
|
||||
|
||||
const clientModal = document.getElementById('client_modal');
|
||||
const employeeModal = document.getElementById('employee_modal');
|
||||
|
||||
const headerGiftImg = document.querySelector('.header__gift>img');
|
||||
|
||||
const tooltip = document.getElementById('tooltip');
|
||||
|
||||
const faqClickHandler = (event) => {
|
||||
const target = event.target;
|
||||
const question = target.closest('.faq__block__item__question');
|
||||
if (!question) {
|
||||
return;
|
||||
}
|
||||
|
||||
const item = question.closest('#faq__block__item');
|
||||
const answer = item.querySelector('#faq__block__item__answer');
|
||||
|
||||
const isOpened = item.classList.contains('open');
|
||||
|
||||
if (isOpened) {
|
||||
answer.style.height = 0;
|
||||
} else {
|
||||
answer.style.height = answer.scrollHeight + 'px';
|
||||
}
|
||||
|
||||
item.classList.toggle('open');
|
||||
|
||||
}
|
||||
|
||||
faqElem.addEventListener('click', faqClickHandler)
|
||||
|
||||
const arrowDownClickHandler = () => {
|
||||
statisticElem.scrollIntoView({behavior: 'smooth', block: 'nearest'})
|
||||
}
|
||||
|
||||
arrowDownElem.addEventListener('click', arrowDownClickHandler)
|
||||
|
||||
const clientModalClickHandler = (event) => {
|
||||
const target = event.target;
|
||||
|
||||
if (target.closest('.overlay')) {
|
||||
clientModal.classList.remove('open');
|
||||
document.body.style.overflow = 'auto'
|
||||
}
|
||||
}
|
||||
|
||||
clientModal.addEventListener('click', clientModalClickHandler)
|
||||
|
||||
const employeeModalClickHandler = (event) => {
|
||||
const target = event.target;
|
||||
|
||||
if (target.closest('.overlay')) {
|
||||
employeeModal.classList.remove('open');
|
||||
document.body.style.overflow = 'auto'
|
||||
}
|
||||
};
|
||||
|
||||
employeeModal.addEventListener('click', employeeModalClickHandler)
|
||||
|
||||
|
||||
const employeeBtnClickHandler = () => {
|
||||
employeeModal.classList.add('open');
|
||||
document.body.style.overflow = 'hidden'
|
||||
}
|
||||
|
||||
employeeBtn.addEventListener('click', employeeBtnClickHandler)
|
||||
|
||||
const clientBtnClickHandler = () => {
|
||||
clientModal.classList.add('open');
|
||||
document.body.style.overflow = 'hidden'
|
||||
}
|
||||
|
||||
clientBtn.addEventListener('click', clientBtnClickHandler)
|
||||
|
||||
|
||||
employeeModal.querySelector('form').addEventListener('submit', (event) => {
|
||||
console.log('event', event);
|
||||
employeeModal.classList.remove('open');
|
||||
document.body.style.overflow = 'auto'
|
||||
})
|
||||
|
||||
clientModal.querySelector('form').addEventListener('submit', (event) => {
|
||||
console.log('event', event);
|
||||
clientModal.classList.remove('open');
|
||||
document.body.style.overflow = 'auto'
|
||||
})
|
||||
|
||||
tippy('.header__gift>img', {
|
||||
content: `
|
||||
<div class="tooltip" id="tooltip">
|
||||
<p>
|
||||
Оставьте заявку на сайте в форме ниже, чтобы получить подарок при оказании услуги в июне. Мы позвоним Вам ближе к открытию и запишем на желаемую процедуру
|
||||
</p>
|
||||
</div>`,
|
||||
allowHTML: true,
|
||||
theme: 'light',
|
||||
});
|
||||
10
src/styles/constants/colors.scss
Normal file
@ -0,0 +1,10 @@
|
||||
$color_white: #FFFFFF;
|
||||
$color_grey: #D9D9D9;
|
||||
$color_grey_light: #EEEEEE;
|
||||
$color_red: #DA0041;
|
||||
$color_black_light: #1E1E1E;
|
||||
$color_black: #000000;
|
||||
|
||||
|
||||
$color_gradient_orange: linear-gradient(151.35deg, #FFCF86 0%, #F47784 100%);
|
||||
$color_gradient_green: linear-gradient(235.85deg, #BFD7A0 0%, #FFE86C 100%);
|
||||
50
src/styles/constants/fonts.scss
Normal file
@ -0,0 +1,50 @@
|
||||
$font_family_Cambria: 'Cambria';
|
||||
$font_family_Calibri: 'Calibri';
|
||||
|
||||
@mixin text_gradient($gradient) {
|
||||
color: transparent;
|
||||
-webkit-background-clip: text;
|
||||
background-clip: text;
|
||||
background-image: $gradient;
|
||||
}
|
||||
|
||||
@mixin title_font () {
|
||||
font-family: $font_family_Cambria;
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-size: 48px;
|
||||
}
|
||||
|
||||
@mixin subtitle_font () {
|
||||
font-family: $font_family_Cambria;
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-size: 28px;
|
||||
line-height: 120%;
|
||||
}
|
||||
|
||||
@mixin description_font() {
|
||||
font-family: $font_family_Calibri;
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-size: 20px;
|
||||
line-height: 120%;
|
||||
}
|
||||
|
||||
@mixin open-label_font() {
|
||||
font-family: $font_family_Cambria;
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-size: 24px;
|
||||
line-height: 120%;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
@mixin statistic_item_font() {
|
||||
font-family: $font_family_Calibri;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-size: 20px;
|
||||
line-height: 140%;
|
||||
}
|
||||
|
||||
4
src/styles/constants/z-index.scss
Normal file
@ -0,0 +1,4 @@
|
||||
$z_index_header: 10;
|
||||
$z_index_tooltip: 20;
|
||||
$z_index_modal_overlay: 999999999999;
|
||||
$z_index_modal_content: 999999999999;
|
||||
23
src/styles/fonts.css
Normal file
@ -0,0 +1,23 @@
|
||||
@font-face {
|
||||
font-family: "Cambria";
|
||||
src: url("../../public/fonts/Cambria/Cambria.ttf") format("truetype");
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Cambria";
|
||||
src: url("../../public/fonts/Cambria/Cambria-Bold.ttf") format("truetype");
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Calibri";
|
||||
src: url("../../public/fonts/Calibri/calibri.ttf") format("truetype");
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Calibri";
|
||||
src: url("../../public/fonts/Calibri/calibri_bold.ttf") format("truetype");
|
||||
font-weight: bold;
|
||||
}
|
||||
629
src/styles/main.scss
Normal file
@ -0,0 +1,629 @@
|
||||
@import "../libs/normalize.css/normalize.css";
|
||||
@import "../libs/animate.css/animate.min.css";
|
||||
@import "../libs/tippy.js/themes/light.css";
|
||||
@import "./constants/colors";
|
||||
@import "./constants/fonts";
|
||||
@import "./constants/z-index";
|
||||
|
||||
.header {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
background: $color_white;
|
||||
padding: 10px 15px;
|
||||
gap: 10px;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: $z_index_header;
|
||||
|
||||
&__logo {
|
||||
height: 45px;
|
||||
width: 45px;
|
||||
}
|
||||
|
||||
&__text_logo {
|
||||
width: 156px;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.header__gift {
|
||||
margin-right: 0;
|
||||
margin-left: auto;
|
||||
position: relative;
|
||||
z-index: 99;
|
||||
img {
|
||||
width: 38px;
|
||||
height: 46px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.whatsapp {
|
||||
position: fixed;
|
||||
bottom: 60px;
|
||||
right: 25px;
|
||||
z-index: $z_index_header;
|
||||
|
||||
animation: headShake;
|
||||
animation-duration: 2s;
|
||||
animation-iteration-count: infinite;
|
||||
|
||||
img {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
}
|
||||
|
||||
.container-wrapper {
|
||||
overflow: hidden;
|
||||
padding: 0 15px;
|
||||
background: $color_grey_light;
|
||||
position: relative;
|
||||
z-index: $z_index_header - 2;
|
||||
}
|
||||
|
||||
.main-card {
|
||||
position: relative;
|
||||
background: $color_gradient_orange;
|
||||
box-shadow: 0 5px 25px rgba(0, 0, 0, 0.2);
|
||||
border-radius: 0 0 30px 30px;
|
||||
z-index: $z_index_header - 2;
|
||||
padding-top: 80px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
&__title {
|
||||
@include title_font;
|
||||
|
||||
text-align: center;
|
||||
color: $color_black;
|
||||
}
|
||||
|
||||
&__description {
|
||||
@include description_font;
|
||||
|
||||
text-align: center;
|
||||
color: $color_white;
|
||||
max-width: 320px;
|
||||
margin: 15px auto 27px;
|
||||
}
|
||||
|
||||
&__img {
|
||||
width: 350px;
|
||||
height: 272px;
|
||||
margin: 0 auto;
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.open-label {
|
||||
background: $color_red;
|
||||
position: absolute;
|
||||
transform: rotate(-5deg) translateX(-25%);
|
||||
top: 5px;
|
||||
left: 0;
|
||||
width: 750px;
|
||||
height: 60px;
|
||||
padding: 15px 5px;
|
||||
overflow: hidden;
|
||||
z-index: calc($z_index_header - 2);
|
||||
|
||||
.marquee3k__wrapper {
|
||||
z-index: calc($z_index_header - 2);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
&__text {
|
||||
@include open-label_font;
|
||||
|
||||
z-index: calc($z_index_header - 2);
|
||||
text-align: center;
|
||||
color: $color_white;
|
||||
height: 60px;
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
.arrow-down {
|
||||
margin-top: 58px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.statistic {
|
||||
margin-top: 58px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 30px;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
&_item {
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.05);
|
||||
border-radius: 20px;
|
||||
background: $color_white;
|
||||
padding: 33px 50px;
|
||||
width: 100%;
|
||||
|
||||
p {
|
||||
@include statistic_item_font;
|
||||
|
||||
color: $color_black_light;
|
||||
text-align: center;
|
||||
|
||||
span {
|
||||
@include statistic_item_font;
|
||||
@include text_gradient($color_gradient_orange);
|
||||
|
||||
font-weight: 600;
|
||||
font-size: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.description {
|
||||
margin-top: 60px;
|
||||
|
||||
&__title {
|
||||
@include subtitle_font;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
&__card {
|
||||
margin-top: 30px;
|
||||
background: $color_gradient_orange;
|
||||
border-radius: 20px;
|
||||
padding-top: 30px;
|
||||
padding-left: 20px;
|
||||
|
||||
ul {
|
||||
list-style: none;
|
||||
|
||||
li {
|
||||
@include statistic_item_font;
|
||||
padding-left: 20px;
|
||||
|
||||
&::before {
|
||||
content: '\2022';
|
||||
position: absolute;
|
||||
left: 35px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__img {
|
||||
transform: translateY(6px);
|
||||
width: 300px;
|
||||
height: 258.33px;
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
&__img {
|
||||
transform: translateY(5px);
|
||||
}
|
||||
}
|
||||
|
||||
.clients {
|
||||
margin-top: 60px;
|
||||
|
||||
&__title {
|
||||
@include subtitle_font;
|
||||
}
|
||||
|
||||
&__card {
|
||||
margin-top: 30px;
|
||||
background: $color_gradient_green;
|
||||
border-radius: 20px;
|
||||
padding: 30px 20px;
|
||||
position: relative;
|
||||
|
||||
&__decor_img {
|
||||
position: absolute;
|
||||
top: -86px;
|
||||
right: 57px;
|
||||
}
|
||||
|
||||
&__text {
|
||||
@include statistic_item_font;
|
||||
}
|
||||
|
||||
&__btn {
|
||||
@include statistic_item_font;
|
||||
|
||||
background: $color_white;
|
||||
color: $color_black;
|
||||
border-radius: 15px;
|
||||
margin-top: 24px;
|
||||
padding-top: 11px;
|
||||
padding-bottom: 11px;
|
||||
outline: none;
|
||||
border: none;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.employees {
|
||||
margin-top: 60px;
|
||||
|
||||
&__title {
|
||||
@include subtitle_font;
|
||||
}
|
||||
|
||||
&__card {
|
||||
margin-top: 30px;
|
||||
background: $color_gradient_orange;
|
||||
border-radius: 20px;
|
||||
padding: 30px 20px;
|
||||
position: relative;
|
||||
|
||||
&__decor_img {
|
||||
position: absolute;
|
||||
top: -60px;
|
||||
right: 35px;
|
||||
}
|
||||
|
||||
&__text {
|
||||
@include statistic_item_font;
|
||||
}
|
||||
|
||||
&__btn {
|
||||
@include statistic_item_font;
|
||||
|
||||
background: $color_white;
|
||||
color: $color_black;
|
||||
border-radius: 15px;
|
||||
margin-top: 24px;
|
||||
padding-top: 11px;
|
||||
padding-bottom: 11px;
|
||||
outline: none;
|
||||
border: none;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.services {
|
||||
margin-top: 60px;
|
||||
|
||||
&__title {
|
||||
@include subtitle_font;
|
||||
}
|
||||
|
||||
&__block {
|
||||
margin-top: 30px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-template-rows: 130px 140px repeat(3, 70px);
|
||||
grid-column-gap: 20px;
|
||||
grid-row-gap: 20px;
|
||||
|
||||
h3 {
|
||||
@include statistic_item_font;
|
||||
}
|
||||
|
||||
.services__price {
|
||||
@include statistic_item_font;
|
||||
font-size: 45px;
|
||||
font-weight: 700;
|
||||
|
||||
span {
|
||||
font-size: 20px;
|
||||
font-weight: 400;
|
||||
margin-left: -7px;
|
||||
}
|
||||
}
|
||||
|
||||
&__haircut {
|
||||
grid-area: 1 / 1 / 2 / 3;
|
||||
border-radius: 10px;
|
||||
background: $color_gradient_green;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
h3 span {
|
||||
margin-left: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
&__pedicure {
|
||||
grid-area: 2 / 1 / 4 / 2;
|
||||
border-radius: 10px;
|
||||
background: $color_gradient_orange;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
gap: 28px;
|
||||
text-align: center;
|
||||
|
||||
h3 {
|
||||
line-height: 25px;
|
||||
|
||||
span {
|
||||
line-height: 20px !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__coloring {
|
||||
grid-area: 2 / 2 / 3 / 3;
|
||||
border: 2px solid $color_black;
|
||||
border-radius: 10px;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
&__solaris {
|
||||
grid-area: 4 / 1 / 6 / 2;
|
||||
border: 2px solid $color_black;
|
||||
border-radius: 10px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
&__massage {
|
||||
grid-area: 3 / 2 / 5 / 3;
|
||||
border-radius: 10px;
|
||||
background: $color_gradient_green;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
&__full_price {
|
||||
@include statistic_item_font;
|
||||
|
||||
grid-area: 5 / 2 / 6 / 3;
|
||||
background: $color_black;
|
||||
border-radius: 15px;
|
||||
color: $color_white;
|
||||
font-size: 16px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
padding: 16px 20px;
|
||||
|
||||
img {
|
||||
display: inline-block;
|
||||
margin-left: 10px;
|
||||
width: 21px;
|
||||
height: 7.36px;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.faq {
|
||||
margin-top: 60px;
|
||||
|
||||
&__title {
|
||||
@include subtitle_font;
|
||||
}
|
||||
|
||||
&__block {
|
||||
margin-top: 30px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
|
||||
&__item {
|
||||
padding-top: 10px;
|
||||
border-top: 1px solid $color_grey;
|
||||
|
||||
&__question {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
&__title {
|
||||
@include statistic_item_font;
|
||||
font-weight: 700;
|
||||
max-width: 250px;
|
||||
}
|
||||
|
||||
&__btn {
|
||||
border: none;
|
||||
outline: none;
|
||||
font-size: 34px;
|
||||
color: $color_red;
|
||||
background: transparent;
|
||||
transition: 200ms;
|
||||
}
|
||||
|
||||
&__answer {
|
||||
@include statistic_item_font;
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
transition: 200ms;
|
||||
}
|
||||
|
||||
&.open {
|
||||
.faq__block__item__btn {
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
.faq__block__item__answer {
|
||||
margin-top: 10px;
|
||||
overflow: visible;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.contacts {
|
||||
margin-top: 60px;
|
||||
|
||||
&__title {
|
||||
@include subtitle_font;
|
||||
}
|
||||
|
||||
&__card {
|
||||
margin-top: 30px;
|
||||
border-radius: 20px;
|
||||
background: $color_gradient_green;
|
||||
padding: 20px;
|
||||
|
||||
&__address {
|
||||
@include statistic_item_font;
|
||||
}
|
||||
|
||||
&__phone_block {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
&__phone {
|
||||
@include statistic_item_font;
|
||||
font-weight: 700;
|
||||
color: $color_black;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer {
|
||||
margin-top: 60px;
|
||||
background: $color_black;
|
||||
box-shadow: 0px -5px 10px rgba(0, 0, 0, 0.1);
|
||||
border-radius: 30px 30px 0 0;
|
||||
padding: 20px;
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&__text {
|
||||
@include statistic_item_font;
|
||||
margin-top: 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
color: $color_white;
|
||||
}
|
||||
}
|
||||
|
||||
.modal {
|
||||
&.open {
|
||||
transform: translateY(0);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
transform: translateY(-100%);
|
||||
opacity: 0;
|
||||
transition: 200ms;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 20px;
|
||||
z-index: $z_index_modal_overlay;
|
||||
|
||||
.overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: $color_black;
|
||||
opacity: 0.25;
|
||||
z-index: $z_index_modal_overlay;
|
||||
}
|
||||
|
||||
&__content {
|
||||
z-index: $z_index_modal_content;
|
||||
background: $color_white;
|
||||
box-shadow: 0 0 35px rgba(0, 0, 0, 0.25);
|
||||
border-radius: 30px;
|
||||
padding: 150px 20px 20px;
|
||||
|
||||
form {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
gap: 20px;
|
||||
|
||||
input {
|
||||
@include statistic_item_font;
|
||||
|
||||
z-index: calc($z_index_modal_content + 1);
|
||||
outline: none;
|
||||
border: 1px solid $color_black;
|
||||
border-radius: 10px;
|
||||
padding: 12px 30px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
button {
|
||||
@include statistic_item_font;
|
||||
color: $color_white;
|
||||
background: $color_black;
|
||||
border-radius: 15px;
|
||||
width: 100%;
|
||||
padding: 16px;
|
||||
margin-top: 40px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__agreement {
|
||||
@include statistic_item_font;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
margin-top: 55px;
|
||||
}
|
||||
}
|
||||
|
||||
.client_modal {
|
||||
position: relative;
|
||||
|
||||
&__img {
|
||||
position: absolute;
|
||||
top: 24px;
|
||||
right: 38px;
|
||||
}
|
||||
}
|
||||
|
||||
.employee_modal {
|
||||
position: relative;
|
||||
|
||||
&__img {
|
||||
position: absolute;
|
||||
top: 18px;
|
||||
left: 46px;
|
||||
}
|
||||
}
|
||||
|
||||
.tooltip {
|
||||
display: flex;
|
||||
width: 300px;
|
||||
background: $color_white;
|
||||
border-radius: 15px;
|
||||
padding: 15px;
|
||||
z-index: $z_index_tooltip;
|
||||
|
||||
p {
|
||||
@include statistic_item_font;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||