commit a5fa5962440765221e5052a45e85480cc25e2abf Author: Adel Kadi Date: Sun Jun 28 14:24:41 2026 +0100 initial version diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..29c1269 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,17 @@ +.git +.github + +venv +.env + +__pycache__ +*.pyc + +media + +.idea +.vscode + +*.sqlite3 + +node_modules \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..53a52d2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,84 @@ +############################ +# Python +############################ + +__pycache__/ +*.py[cod] + +*.so + +############################ +# Virtual Environment +############################ + +venv/ +env/ +ENV/ + +############################ +# VSCode +############################ + +.vscode/ + +############################ +# PyCharm +############################ + +.idea/ + +############################ +# macOS +############################ + +.DS_Store + +############################ +# Database +############################ + +db.sqlite3 + +############################ +# Logs +############################ + +*.log + +############################ +# Media +############################ + +media/ + +############################ +# Static files +############################ + +staticfiles/ + +############################ +# dotenv +############################ + +.env + +############################ +# Migrations +############################ + +**/__pycache__/ + +############################ +# Coverage +############################ + +.coverage + +htmlcov/ + +############################ +# pytest +############################ + +.pytest_cache/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..48c4d01 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,34 @@ +FROM python:3.12-slim + +# Evite les fichiers .pyc +ENV PYTHONDONTWRITEBYTECODE=1 + +# Affiche directement les logs +ENV PYTHONUNBUFFERED=1 + +WORKDIR /app + +# Dépendances système +RUN apt-get update && apt-get install -y \ + gcc \ + libpq-dev \ + && rm -rf /var/lib/apt/lists/* + + COPY requirements.txt . + + RUN pip install --upgrade pip + + RUN pip install --no-cache-dir -r requirements.txt + + COPY . . + +# Création du dossier media +RUN mkdir -p /app/media + +# Script de démarrage +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +EXPOSE 8000 + +CMD ["/entrypoint.sh"] diff --git a/authentication/__init__.py b/authentication/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/authentication/admin.py b/authentication/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/authentication/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/authentication/apps.py b/authentication/apps.py new file mode 100644 index 0000000..8bab8df --- /dev/null +++ b/authentication/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class AuthenticationConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'authentication' diff --git a/authentication/migrations/0001_initial.py b/authentication/migrations/0001_initial.py new file mode 100644 index 0000000..7f7053b --- /dev/null +++ b/authentication/migrations/0001_initial.py @@ -0,0 +1,67 @@ +# Generated by Django 4.2.17 on 2025-12-27 12:09 + +from django.conf import settings +import django.contrib.auth.models +import django.contrib.auth.validators +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import phonenumber_field.modelfields + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('auth', '0012_alter_user_first_name_max_length'), + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), + ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), + ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), + ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), + ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), + ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), + ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), + ('profile_photo', models.ImageField(blank=True, null=True, upload_to='authentication/images/')), + ('phone_number', phonenumber_field.modelfields.PhoneNumberField(max_length=128, region=None)), + ('address', models.TextField()), + ('role', models.CharField(blank=True, choices=[('CREATOR', 'Creator'), ('SUBSCRIBER', 'Subscriber')], max_length=30)), + ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')), + ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')), + ], + options={ + 'verbose_name': 'user', + 'verbose_name_plural': 'users', + 'abstract': False, + }, + managers=[ + ('objects', django.contrib.auth.models.UserManager()), + ], + ), + migrations.CreateModel( + name='Phone', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('phone', phonenumber_field.modelfields.PhoneNumberField(max_length=128, region=None)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Addresse', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('addresse', models.TextField()), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/authentication/migrations/__init__.py b/authentication/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/authentication/models.py b/authentication/models.py new file mode 100755 index 0000000..c4dd896 --- /dev/null +++ b/authentication/models.py @@ -0,0 +1,31 @@ +from django.db import models +from django.contrib.auth.models import AbstractUser +from PIL import Image +from phonenumber_field.modelfields import PhoneNumberField + +class User(AbstractUser): + CREATOR = 'CREATOR' + SUBSCRIBER = 'SUBSCRIBER' + ROLE_CHOICES = ( + (CREATOR, 'Creator'), + (SUBSCRIBER, 'Subscriber'), + ) + profile_photo = models.ImageField(upload_to='authentication/images/', null=True, blank=True) + phone_number = PhoneNumberField() + address = models.TextField() + role = models.CharField(max_length=30, choices=ROLE_CHOICES, blank=True) + IMAGE_MAX_SIZE = (800,800) + def resize_image(self): + image = Image.open(self.image) + image.thumbnail(self.IMAGE_MAX_SIZE) + image.save(self.image.path) + def save(self,*args, **kwargs): + super().save(*args, **kwargs) + self.resize_image +class Addresse(models.Model): + addresse = models.TextField() + user = models.ForeignKey(User, on_delete=models.CASCADE) + +class Phone(models.Model): + phone = PhoneNumberField() + user = models.ForeignKey(User, on_delete=models.CASCADE) \ No newline at end of file diff --git a/authentication/tests.py b/authentication/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/authentication/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/authentication/views.py b/authentication/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/authentication/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/blog/__init__.py b/blog/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blog/admin.py b/blog/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/blog/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/blog/apps.py b/blog/apps.py new file mode 100644 index 0000000..94788a5 --- /dev/null +++ b/blog/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class BlogConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'blog' diff --git a/blog/migrations/0001_initial.py b/blog/migrations/0001_initial.py new file mode 100644 index 0000000..9b82348 --- /dev/null +++ b/blog/migrations/0001_initial.py @@ -0,0 +1,78 @@ +# Generated by Django 4.2.17 on 2024-12-18 21:32 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Articles', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=200)), + ('slug', models.SlugField(blank=True, null=True, unique=True)), + ('image', models.ImageField(upload_to='blog/images')), + ('content', models.TextField(blank=True)), + ('date_created', models.DateTimeField(auto_now_add=True)), + ('date_updated', models.DateTimeField(auto_now=True)), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name_plural': 'Articles', + }, + ), + migrations.CreateModel( + name='Images', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=33)), + ('file', models.ImageField(blank=True, null=True, upload_to='dashboard/images')), + ('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='articles', to='blog.articles')), + ], + options={ + 'verbose_name_plural': 'Images', + }, + ), + migrations.CreateModel( + name='Comment', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('commentaire', models.TextField(blank=True)), + ('created', models.DateTimeField(auto_now_add=True)), + ('active', models.BooleanField(default=False)), + ('article', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='blog.articles')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name_plural': 'Comments', + }, + ), + migrations.CreateModel( + name='BlogCategories', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=100)), + ('slug', models.SlugField(blank=True, null=True, unique=True)), + ('picture', models.ImageField(blank=True, null=True, upload_to='blog/images')), + ('citation', models.TextField(blank=True)), + ('parentcategory', models.ManyToManyField(blank=True, to='blog.blogcategories')), + ], + options={ + 'verbose_name_plural': 'Blog Categories', + }, + ), + migrations.AddField( + model_name='articles', + name='category', + field=models.ManyToManyField(to='blog.blogcategories'), + ), + ] diff --git a/blog/migrations/__init__.py b/blog/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blog/models.py b/blog/models.py new file mode 100755 index 0000000..819fed6 --- /dev/null +++ b/blog/models.py @@ -0,0 +1,110 @@ +from django.db import models +from django.utils.text import slugify +from django.urls import reverse +from django.core.validators import FileExtensionValidator +from PIL import Image + +class BlogCategories(models.Model): + title = models.CharField(max_length=100, blank=True) + slug = models.SlugField(unique=True, blank=True, null=True) + picture = models.ImageField(upload_to='blog/images', null=True, blank=True) + citation = models.TextField(blank=True) + parentcategory = models.ManyToManyField('self', symmetrical=False, blank=True) + + class Meta: + verbose_name_plural = 'Blog Categories' + + IMAGE_MAX_SIZE = (500,350) + def resize_image(self): + if self.picture: + picture = Image.open(self.picture) + picture.thumbnail(self.IMAGE_MAX_SIZE) + picture.save(self.picture.path) + + def save(self, *args, **kwargs): + if not self.slug: + base_slug = slugify(self.title) + slug = base_slug + counter = 1 + while Articles.objects.filter(slug=slug).exists(): + slug = '{}-{}'.format(base_slug, counter) + counter += 1 + self.slug = slug + self.resize_image() + super().save(*args, **kwargs) + + + def __str__(self): + return self.title + +class Articles(models.Model): + title = models.CharField(max_length=200) + author = models.ForeignKey('authentication.User', on_delete=models.CASCADE) + slug = models.SlugField(unique=True, blank=True, null=True) + category = models.ManyToManyField('BlogCategories') + image = models.ImageField(upload_to='blog/images') + content = models.TextField(blank=True) + date_created = models.DateTimeField(auto_now_add=True) + date_updated = models.DateTimeField(auto_now=True) + + class Meta: + verbose_name_plural = 'Articles' + + IMAGE_MAX_SIZE = (600, 400) + + def resize_image(self): + image = Image.open(self.image) + image.thumbnail(self.IMAGE_MAX_SIZE) + image.save(self.image.path) + + def save(self, *args, **kwargs): + if not self.slug: + base_slug = slugify(self.title) + slug = base_slug + counter = 1 + while Articles.objects.filter(slug=slug).exists(): + slug = '{}-{}'.format(base_slug, counter) + counter += 1 + self.slug = slug + self.resize_image() + super().save(*args, **kwargs) + + def get_absolute_url(self): + return reverse('blog:article_detail', kwargs={'slug': self.slug}) + + def __str__(self): + return self.title + +class Images(models.Model): + title = models.CharField(max_length=33, blank=True) + article = models.ForeignKey('Articles', related_name="articles", on_delete=models.CASCADE) + file = models.ImageField(upload_to='dashboard/images', blank=True, null=True) + + class Meta: + verbose_name_plural = 'Images' + + IMAGE_MAX_SIZE = (500, 350) + + def resize_image(self): + file = Image.open(self.file) + file.thumbnail(self.IMAGE_MAX_SIZE) + file.save(self.file.path) + + def save(self, *args, **kwargs): + super().save(*args, **kwargs) + self.resize_image() + + def __str__(self): + return self.title + +class Comment(models.Model): + commentaire = models.TextField(blank=True) + article = models.ForeignKey(Articles, null=True, on_delete=models.CASCADE) + user = models.ForeignKey('authentication.User', on_delete=models.CASCADE) + created = models.DateTimeField(auto_now_add=True) + active = models.BooleanField(default=False) + class Meta: + verbose_name_plural = 'Comments' + def __str__(self): + return self.commentaire + diff --git a/blog/templates/blog/blog.html b/blog/templates/blog/blog.html new file mode 100755 index 0000000..580e52b --- /dev/null +++ b/blog/templates/blog/blog.html @@ -0,0 +1,294 @@ +{% extends 'base.html' %} +{% load static %} +{% block headblock %} +Blog + + +{% endblock %} +{% block content %} + + + + + +
+
+
+ +
+
+
+
close filter
+
+
+
+
+ +
+
+
+
+
+
+

Category

+
+
    +
  • +
    + + +
    +
    (20)
    +
  • +
  • +
    + + +
    +
    (99)
    +
  • +
  • +
    + + +
    +
    (56)
    +
  • +
  • +
    + + +
    +
    (48)
    +
  • +
  • +
    + + +
    +
    (75)
    +
  • +
  • +
    + + +
    +
    (18)
    +
  • +
  • +
    + + +
    +
    (09)
    +
  • +
  • +
    + + +
    +
    (67)
    +
  • +
  • +
    + + +
    +
    (08)
    +
  • +
  • +
    + + +
    +
    (18)
    +
  • +
+
+
+
+
+
+

Recent Posts

+ + + +
+
+
+
+

Our Archives

+
    +
  • +
    + + +
    +
    2022
    +
  • +
  • +
    + + +
    +
    2022
    +
  • +
  • +
    + + +
    +
    2022
    +
  • +
  • +
    + + +
    +
    2022
    +
  • +
  • +
    + + +
    +
    2022
    +
  • +
+
+
+
+
+

Gallery post

+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+
+
+
+
+
+
+
+
+
blog
+
+

Scottish Creatives To Receive Funded Business.

+ +

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus hendrerit. Pellentesque aliquet

read more +
+
+
+
+
+
blog
+
+

Designing Better Link Web Site and Emailsite

+ +

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus hendrerit. Pellentesque aliquet

read more +
+
+
+
+
+
blog
+
+

Variables In The Hugo Seen Static Site Generator

+ +

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus hendrerit. Pellentesque aliquet

read more +
+
+
+
+
+
blog
+
+

Expand Your Career Opportunities With Python

+ +

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus hendrerit. Pellentesque aliquet

read more +
+
+
+
+
+
blog
+
+

Complete PHP Programming Career Guideline

+ +

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus hendrerit. Pellentesque aliquet

read more +
+
+
+
+
+
blog
+
+

Learn Webs Applications Development from Experts

+ +

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus hendrerit. Pellentesque aliquet

read more +
+
+
+
+
+
+
+
+ + + {% endblock %} \ No newline at end of file diff --git a/blog/tests.py b/blog/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/blog/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/blog/urls.py b/blog/urls.py new file mode 100755 index 0000000..cdc9ec2 --- /dev/null +++ b/blog/urls.py @@ -0,0 +1,11 @@ +from django.urls import path +from . import views + + +app_name = 'blog' +urlpatterns = [ + + path('articles/', views.articles, name='articles'), + + + ] diff --git a/blog/views.py b/blog/views.py new file mode 100755 index 0000000..bbe0b3c --- /dev/null +++ b/blog/views.py @@ -0,0 +1,9 @@ +from django.shortcuts import render, redirect, get_object_or_404 +from django.core.paginator import Paginator +from django.db.models import Q +from django.contrib.auth.decorators import login_required + +def articles(request): + + return render(request, 'blog/blog.html') + diff --git a/cart/__init__.py b/cart/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cart/admin.py b/cart/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/cart/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/cart/apps.py b/cart/apps.py new file mode 100644 index 0000000..f3e3ec9 --- /dev/null +++ b/cart/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class CartConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'cart' diff --git a/cart/migrations/__init__.py b/cart/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cart/models.py b/cart/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/cart/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/cart/templates/cart/cart_summary.html b/cart/templates/cart/cart_summary.html new file mode 100755 index 0000000..5080241 --- /dev/null +++ b/cart/templates/cart/cart_summary.html @@ -0,0 +1,158 @@ +{% extends 'base.html' %} +{% load static %} +{% block content %} + + + + + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProductProduct nameQuantityPriceTotalAction
+
herointro image
+
Learn Python: The Complete Python Programming Course +
+ +
+
DZD150DZD200 + +
+
+
Photoshop Master Course: From Beginner to Photoshop Pro +
+ +
+
DZD80DZD320 + +
+
+
Data Science and Machine Learning Bootcamp with R +
+ +
+
DZD180 DZD180 + +
+
+
User Experience (UX): The Ultimate Guide to Usability and UX +
+ +
+
DZD300 DZD600 + +
+
+ +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
DiscountsDZD 1600.00
Special Offer SavingDZD 0.00
Subtotal exc VATDZD 14.80
VATDZD 140.00
Grand Total inc VATDZD 1660.80
Proceed to checkout
+
+
+
+
+
+
+
+ + +{% endblock %} diff --git a/cart/templates/cart/checkout.html b/cart/templates/cart/checkout.html new file mode 100755 index 0000000..70e689c --- /dev/null +++ b/cart/templates/cart/checkout.html @@ -0,0 +1,173 @@ +{% extends 'base.html' %} +{% load static %} +{% block content %} + + + + + +
+
+
+
+
+
+
+

Billing Address

+

Login orRegisterfor faster payment.

+
+
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+
+

Payment Method

+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
+ + +
+
+
+
+
+ + +
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+ +
+
+
+
+
+
+
+
+ +{% endblock %} diff --git a/cart/templates/cart/plans.html b/cart/templates/cart/plans.html new file mode 100755 index 0000000..ca6cda4 --- /dev/null +++ b/cart/templates/cart/plans.html @@ -0,0 +1,100 @@ +{% extends 'base.html' %} +{% load static %} +{% block headblock %} +Membership Plans + + +{% endblock %} +{% block content %} + + + + + +
+
+
+
+
+

Our Plans

+

Membership Levels

+
+
+
+
+
+
+
+

Basic

$19.99/ Month +
+
+
    +
  • 20 Courses Access +
  • +
  • Course Certificate
  • +
  • Exercise File
  • +
  • Lifetime Access
  • +
  • Dedicated Support
  • +
+
+ +
+
+
+
+
popular
+
+

Standard

$29.99/ Month +
+
+
    +
  • 50 Courses Access +
  • +
  • Course Certificate
  • +
  • Exercise File
  • +
  • Lifetime Access
  • +
  • Dedicated Support
  • +
+
+ +
+
+
+
+
+

Premium

$49.99/ Month +
+
+
    +
  • all Courses Access +
  • +
  • Course Certificate
  • +
  • Exercise File
  • +
  • Lifetime Access
  • +
  • Dedicated Support
  • +
+
+ +
+
+
+
+
+ + + + {% endblock %}} diff --git a/cart/templates/cart/wishlist.html b/cart/templates/cart/wishlist.html new file mode 100755 index 0000000..6116405 --- /dev/null +++ b/cart/templates/cart/wishlist.html @@ -0,0 +1,101 @@ +{% extends 'base.html' %} +{% load static %} +{% block content %} + + + + + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProductProduct name PriceStock StatusAdd to cartAction
+
+
Learn Python: The Complete Python Programming Course$356in stock Add to cart + +
+
+
Photoshop Master Course: From Beginner To Photoshop Pro$150in stock Add to cart + +
+
+
Data Science And Machine Learning Bootcamp With R$220in stock Add to cart + +
+
+
User Experience (UX): The Ultimate Guide To Usability And UX$300in stock Add to cart + +
+
+
+
+
+
+
+
+ + +{% endblock %} diff --git a/cart/tests.py b/cart/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/cart/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/cart/urls.py b/cart/urls.py new file mode 100755 index 0000000..03d70b2 --- /dev/null +++ b/cart/urls.py @@ -0,0 +1,13 @@ +from django.urls import path +from . import views + + +app_name = 'cart' +urlpatterns = [ + path('plans/', views.plans, name='plans'), + path('cart_summary/', views.cart_summary, name='cart_summary'), + path('order/', views.order, name='order'), + path('wishlist/', views.wishlist, name='wishlist'), + + ] + diff --git a/cart/views.py b/cart/views.py new file mode 100644 index 0000000..a3a18c0 --- /dev/null +++ b/cart/views.py @@ -0,0 +1,26 @@ +from django.urls import reverse +from django.http import JsonResponse +from django.shortcuts import render, get_object_or_404, redirect +from django.contrib.auth.decorators import login_required +from django.core.paginator import Paginator +from decimal import Decimal + +def plans(request): + + return render(request, 'cart/plans.html') + +def cart_summary(request): + + + return render(request, 'cart/cart_summary.html') + +@login_required +def order(request): + + + return render(request, 'cart/checkout.html') + +def wishlist(request): + + + return render(request, 'cart/wishlist.html') diff --git a/creativeschool/__init__.py b/creativeschool/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/creativeschool/asgi.py b/creativeschool/asgi.py new file mode 100644 index 0000000..79774fe --- /dev/null +++ b/creativeschool/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for creativeschool project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'creativeschool.settings') + +application = get_asgi_application() diff --git a/creativeschool/nginx.conf b/creativeschool/nginx.conf new file mode 100644 index 0000000..69f5394 --- /dev/null +++ b/creativeschool/nginx.conf @@ -0,0 +1,82 @@ +user nginx; +worker_processes auto; + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + + # 🔥 Sécurité basique + server_tokens off; + + # 🔥 Logs (Coolify les capte automatiquement) + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log warn; + + # =============================== + # 🔁 HTTP → HTTPS (obligatoire) + # =============================== + server { + listen 80; + server_name example.com www.example.com; + + return 301 https://$host$request_uri; + } + + # =============================== + # 🔐 HTTPS – Django production + # =============================== + server { + listen 443 ssl http2; + server_name example.com www.example.com; + + # 🔥 Certificats (gérés par Coolify / Let's Encrypt) + ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; + + # 🔥 Sécurité SSL minimale + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers on; + + # =============================== + # 📦 Fichiers statiques + # =============================== + location /static/ { + alias /static/; + expires 30d; + access_log off; + } + + # =============================== + # 🖼️ Médias uploadés + # =============================== + location /media/ { + alias /media/; + expires 30d; + access_log off; + } + + # =============================== + # 🧠 Django via Gunicorn + # =============================== + location / { + proxy_pass http://web:8000; + + # 🔥 Headers indispensables pour Django + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto https; + + proxy_redirect off; + } + } +} diff --git a/creativeschool/settings.py b/creativeschool/settings.py new file mode 100644 index 0000000..623748d --- /dev/null +++ b/creativeschool/settings.py @@ -0,0 +1,195 @@ +import os +import dj_database_url + +from pathlib import Path +from dotenv import load_dotenv + +load_dotenv() + +BASE_DIR = Path(__file__).resolve().parent.parent + + + + +SECRET_KEY = os.getenv("DJANGO_SECRET_KEY") + + +DEBUG = os.getenv("DJANGO_DEBUG") == "False" +ALLOWED_HOSTS = os.getenv("DJANGO_ALLOWED_HOSTS", "").split(",") + + + + +INSTALLED_APPS = [ + 'jazzmin', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + "django.contrib.sites", + 'main', + 'authentication', + 'blog', + 'cart', + 'dashboard', + 'allauth', + 'allauth.account', + "allauth.socialaccount", + 'phonenumber_field', + +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + "whitenoise.middleware.WhiteNoiseMiddleware", + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'allauth.account.middleware.AccountMiddleware', +] + +ROOT_URLCONF = 'creativeschool.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [BASE_DIR.joinpath('templates')], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + 'main.context_processors.categories', + ], + }, + }, +] + +AUTHENTICATION_BACKENDS = [ + + 'django.contrib.auth.backends.ModelBackend', + 'allauth.account.auth_backends.AuthenticationBackend', +] + +WSGI_APPLICATION = 'creativeschool.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/3.0/ref/settings/#databases + +DATABASES = { + "default": dj_database_url.parse( + os.environ["DATABASE_URL"], + conn_max_age=600, + ) +} + + +# Password validation +# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + +SITE_ID = 1 + +LOGIN_REDIRECT_URL = 'main:home' +ACCOUNT_AUTHENTICATION_METHOD = 'email' +ACCOUNT_EMAIL_REQUIRED = True +ACCOUNT_EMAIL_VERIFICATION = 'mandatory' +ACCOUNT_USERNAME_REQUIRED = False +ACCOUNT_EMAIL_UNIQUE = True +EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' + + +# Internationalization +# https://docs.djangoproject.com/en/3.0/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = "Africa/Algiers" + +USE_I18N = True + +USE_TZ = True + +AUTH_USER_MODEL = 'authentication.User' + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/3.0/howto/static-files/ + +STATIC_URL = "/static/" + +STATIC_ROOT = BASE_DIR / "staticfiles" + +STATICFILES_STORAGE = ( + "whitenoise.storage.CompressedManifestStaticFilesStorage" +) +MEDIA_URL = "/media/" + +MEDIA_ROOT = "/app/media" +# ========================================= +# 📧 Email (via .env) +# ========================================= +EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" +EMAIL_HOST = os.getenv("EMAIL_HOST") +EMAIL_PORT = int(os.getenv("EMAIL_PORT", 587)) +EMAIL_USE_TLS = os.getenv("EMAIL_USE_TLS") == "True" +EMAIL_HOST_USER = os.getenv("EMAIL_HOST_USER") +EMAIL_HOST_PASSWORD = os.getenv("EMAIL_HOST_PASSWORD") + +DEFAULT_FROM_EMAIL = EMAIL_HOST_USER + +# ========================================= +# HTTPS / Nginx / Coolify +# ========================================= + +#SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https") + +#SESSION_COOKIE_SECURE = not DEBUG +#CSRF_COOKIE_SECURE = not DEBUG + +#CSRF_TRUSTED_ORIGINS = [ +# f"https://{host}" for host in ALLOWED_HOSTS if host +#] + +# Optionnel mais recommandé +#SECURE_HSTS_SECONDS = 31536000 if not DEBUG else 0 +#SECURE_HSTS_INCLUDE_SUBDOMAINS = not DEBUG +#SECURE_HSTS_PRELOAD = not DEBUG +CSRF_TRUSTED_ORIGINS = os.getenv( + "CSRF_TRUSTED_ORIGINS", + "" +).split(",") + +SECURE_PROXY_SSL_HEADER = ( + ("HTTP_X_FORWARDED_PROTO", "https") +) + +USE_X_FORWARDED_HOST = True + +SESSION_COOKIE_SECURE = not DEBUG + +CSRF_COOKIE_SECURE = not DEBUG + +SECURE_SSL_REDIRECT = not DEBUG + diff --git a/creativeschool/urls.py b/creativeschool/urls.py new file mode 100644 index 0000000..7de609b --- /dev/null +++ b/creativeschool/urls.py @@ -0,0 +1,16 @@ +from django.contrib import admin +from django.urls import path, include +from django.conf.urls.static import static +from django.conf import settings + + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', include('main.urls')), + path('cart/', include('cart.urls')), + path('blog/', include('blog.urls')), + path('accounts/', include('allauth.urls')), +] + +urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) +urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) diff --git a/creativeschool/wsgi.py b/creativeschool/wsgi.py new file mode 100644 index 0000000..d8599ae --- /dev/null +++ b/creativeschool/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for creativeschool project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'creativeschool.settings') + +application = get_wsgi_application() diff --git a/dashboard/__init__.py b/dashboard/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dashboard/admin.py b/dashboard/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/dashboard/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/dashboard/apps.py b/dashboard/apps.py new file mode 100644 index 0000000..7b1cc05 --- /dev/null +++ b/dashboard/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class DashboardConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'dashboard' diff --git a/dashboard/migrations/__init__.py b/dashboard/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dashboard/models.py b/dashboard/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/dashboard/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/dashboard/tests.py b/dashboard/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/dashboard/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/dashboard/views.py b/dashboard/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/dashboard/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..e040cf2 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +echo "Collecting static files..." +python manage.py collectstatic --noinput + +echo "Applying migrations..." +python manage.py migrate --noinput + +echo "Starting Gunicorn..." +exec gunicorn creativeschool.wsgi:application \ + --bind 0.0.0.0:8000 \ + --workers 3 \ + --timeout 120 \ No newline at end of file diff --git a/main/__init__.py b/main/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/main/admin.py b/main/admin.py new file mode 100644 index 0000000..e0b3f58 --- /dev/null +++ b/main/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from .models import Categories, Contact + + +admin.site.register(Categories) +admin.site.register(Contact) \ No newline at end of file diff --git a/main/apps.py b/main/apps.py new file mode 100644 index 0000000..167f044 --- /dev/null +++ b/main/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class MainConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'main' diff --git a/main/context_processors.py b/main/context_processors.py new file mode 100755 index 0000000..d44bfb0 --- /dev/null +++ b/main/context_processors.py @@ -0,0 +1,7 @@ + +from .models import Categories + +def categories(request): + return {'parent_categories': Categories.objects.filter(parentcategory__isnull=True)} + + diff --git a/main/forms.py b/main/forms.py new file mode 100755 index 0000000..5ea3729 --- /dev/null +++ b/main/forms.py @@ -0,0 +1,18 @@ +from django import forms +from .models import Contact + +class ContactForm(forms.ModelForm): + message = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control','rows':8,'placeholder': 'Message'})) + class Meta(forms.ModelForm): + model = Contact + fields = [ 'name', 'email', 'subject', 'phone_number','message'] + + widgets = { + 'name': forms.TextInput(attrs={'class': 'form-control ', 'placeholder': 'Name'}), + 'email': forms.EmailInput(attrs={'class': 'form-control', 'placeholder': 'Email'}), + 'subject': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Objet'}), + 'phone_number': forms.TextInput(attrs={'class': 'form-control ', 'placeholder': 'Mobile e.g. +213 665 26 45 08'}), + + + } + \ No newline at end of file diff --git a/main/migrations/0001_initial.py b/main/migrations/0001_initial.py new file mode 100644 index 0000000..bc57b3c --- /dev/null +++ b/main/migrations/0001_initial.py @@ -0,0 +1,30 @@ +# Generated by Django 4.2.17 on 2024-12-14 18:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Categories', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=100)), + ('slug', models.SlugField(blank=True, null=True, unique=True)), + ('picture', models.ImageField(blank=True, null=True, upload_to='main/images')), + ('citation', models.TextField(blank=True)), + ('date_created', models.DateTimeField(auto_now_add=True, null=True)), + ('parentcategory', models.ManyToManyField(blank=True, related_name='children', to='main.categories')), + ], + options={ + 'verbose_name_plural': 'Categories', + 'ordering': ['id'], + }, + ), + ] diff --git a/main/migrations/0002_contact.py b/main/migrations/0002_contact.py new file mode 100644 index 0000000..98cdd57 --- /dev/null +++ b/main/migrations/0002_contact.py @@ -0,0 +1,30 @@ +# Generated by Django 4.2.17 on 2024-12-18 12:08 + +from django.db import migrations, models +import phonenumber_field.modelfields + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Contact', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=50)), + ('email', models.EmailField(max_length=254)), + ('subject', models.CharField(max_length=50)), + ('phone_number', phonenumber_field.modelfields.PhoneNumberField(max_length=128, region=None)), + ('message', models.TextField()), + ('date_created', models.DateTimeField(auto_now_add=True)), + ], + options={ + 'verbose_name_plural': 'Contacts', + 'ordering': ['id'], + }, + ), + ] diff --git a/main/migrations/0003_codes_countries_courses_partners_wilayas_and_more.py b/main/migrations/0003_codes_countries_courses_partners_wilayas_and_more.py new file mode 100644 index 0000000..fc83b32 --- /dev/null +++ b/main/migrations/0003_codes_countries_courses_partners_wilayas_and_more.py @@ -0,0 +1,196 @@ +# Generated by Django 4.2.17 on 2024-12-18 18:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import phonenumber_field.modelfields + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('main', '0002_contact'), + ] + + operations = [ + migrations.CreateModel( + name='Codes', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('code', models.CharField(blank=True, max_length=200)), + ], + options={ + 'verbose_name_plural': 'code Zip', + 'ordering': ['id'], + }, + ), + migrations.CreateModel( + name='Countries', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('country', models.CharField(blank=True, max_length=200)), + ], + options={ + 'verbose_name_plural': 'Pays', + 'ordering': ['id'], + }, + ), + migrations.CreateModel( + name='Courses', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=33)), + ('slug', models.SlugField(blank=True, null=True, unique=True)), + ('price', models.DecimalField(decimal_places=2, default=0.0, max_digits=19)), + ('description', models.TextField(blank=True)), + ('status', models.CharField(blank=True, choices=[('Online', 'Online'), ('Facetoface', 'Facetoface'), ('Blended', 'Blended')], default='Online', max_length=30, null=True)), + ('date_created', models.DateTimeField(auto_now_add=True)), + ('date_updated', models.DateTimeField(auto_now=True)), + ('active', models.BooleanField(default=False)), + ('category', models.ManyToManyField(to='main.categories')), + ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name_plural': 'Courses', + 'ordering': ['date_created'], + }, + ), + migrations.CreateModel( + name='Partners', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=50)), + ('slug', models.SlugField(blank=True, null=True, unique=True)), + ('image', models.ImageField(upload_to='main/images')), + ], + options={ + 'verbose_name_plural': 'Partners', + 'ordering': ['id'], + }, + ), + migrations.CreateModel( + name='Wilayas', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('slug', models.SlugField(blank=True, null=True, unique=True)), + ('size', models.IntegerField(blank=True, null=True)), + ('image', models.ImageField(blank=True, null=True, upload_to='main/images')), + ], + options={ + 'verbose_name_plural': 'Wilayas', + 'ordering': ['id'], + }, + ), + migrations.CreateModel( + name='Testimonials', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=200)), + ('testimonial', models.TextField()), + ('date_created', models.DateTimeField(auto_now_add=True)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name_plural': 'Testimonials', + 'ordering': ['date_created'], + }, + ), + migrations.CreateModel( + name='School', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=33)), + ('city', models.CharField(blank=True, max_length=33)), + ('slug', models.SlugField(blank=True, null=True, unique=True)), + ('description', models.TextField(blank=True)), + ('logo', models.ImageField(upload_to='main/images')), + ('banner', models.ImageField(upload_to='main/images')), + ('email', models.EmailField(max_length=254)), + ('facebook', models.URLField(blank=True, null=True)), + ('instagram', models.URLField(blank=True, null=True)), + ('linkedin', models.URLField(blank=True, null=True)), + ('youtube', models.URLField(blank=True, null=True)), + ('website', models.URLField(blank=True, null=True)), + ('whatsapp', phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None)), + ('maps', models.URLField(blank=True, null=True)), + ('location', models.TextField(blank=True)), + ('date_created', models.DateTimeField(auto_now_add=True)), + ('date_updated', models.DateTimeField(auto_now=True)), + ('active', models.BooleanField(default=False)), + ('sponsored', models.BooleanField(default=False)), + ('category', models.ManyToManyField(related_name='product_categories', to='main.categories')), + ('code', models.ManyToManyField(blank=True, related_name='code_store', to='main.codes')), + ('country', models.ManyToManyField(blank=True, related_name='country_store', to='main.countries')), + ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('partner', models.ManyToManyField(blank=True, to='main.partners')), + ('wilaya', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='main.wilayas')), + ], + options={ + 'verbose_name_plural': 'Schools', + 'ordering': ['date_created'], + }, + ), + migrations.CreateModel( + name='Phones', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('phone', phonenumber_field.modelfields.PhoneNumberField(max_length=128, region=None)), + ('school', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='main.school')), + ], + options={ + 'verbose_name_plural': 'Numéros Téléphone', + 'ordering': ['id'], + }, + ), + migrations.CreateModel( + name='Images', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=33)), + ('file', models.ImageField(blank=True, null=True, upload_to='main/images')), + ('course', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='main.courses')), + ], + options={ + 'verbose_name_plural': 'Images', + 'ordering': ['id'], + }, + ), + migrations.AddField( + model_name='courses', + name='partner', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='main.partners'), + ), + migrations.AddField( + model_name='courses', + name='school', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='main.school'), + ), + migrations.CreateModel( + name='Cities', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('city', models.CharField(blank=True, max_length=200)), + ('wilaya', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='main.wilayas')), + ], + options={ + 'verbose_name_plural': 'Villes', + 'ordering': ['id'], + }, + ), + migrations.CreateModel( + name='Addresses', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('address', models.TextField()), + ('school', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='main.school')), + ], + options={ + 'verbose_name_plural': 'Adresses', + 'ordering': ['id'], + }, + ), + ] diff --git a/main/migrations/__init__.py b/main/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/main/models.py b/main/models.py new file mode 100644 index 0000000..16c8c8a --- /dev/null +++ b/main/models.py @@ -0,0 +1,313 @@ +from django.db import models +from django.core.validators import FileExtensionValidator +from django.utils import timezone +from django.utils.text import slugify +from django.urls import reverse +from django.core.files import File +from PIL import Image, ImageDraw +from io import BytesIO +from phonenumber_field.modelfields import PhoneNumberField + + + +class Categories(models.Model): + title = models.CharField(max_length=100, blank=True) + slug = models.SlugField(unique=True, blank=True, null=True) + picture = models.ImageField(upload_to='main/images', null=True, blank=True) + citation = models.TextField(blank=True) + date_created = models.DateTimeField(auto_now_add=True, null=True, blank=True) + parentcategory = models.ManyToManyField('self', symmetrical=False, blank=True, related_name='children') + + class Meta: + verbose_name_plural = 'Categories' + ordering = ['id'] + + def save(self, *args, **kwargs): + if not self.slug: + self.slug = slugify(self.title) + super(Categories, self).save(*args, **kwargs) + + def __str__(self): + return self.title + +class Images(models.Model): + title = models.CharField(max_length=33, blank=True) + course = models.ForeignKey('Courses', on_delete=models.CASCADE, blank=True, null=True) + file = models.ImageField(upload_to='main/images', blank=True, null=True) + + class Meta: + verbose_name_plural = 'Images' + ordering = ['id'] + + IMAGE_MAX_SIZE = (900, 484) + + def resize_image(self): + file = Image.open(self.file) + file.thumbnail(self.IMAGE_MAX_SIZE) + file.save(self.file.path) + + def save(self, *args, **kwargs): + super().save(*args, **kwargs) + self.resize_image() + + def __str__(self): + return self.title + + +class Partners(models.Model): + title = models.CharField(max_length=50) + slug = models.SlugField(unique=True, blank=True, null=True) + image = models.ImageField(upload_to='main/images') + + class Meta: + verbose_name_plural = 'Partners' + ordering = ['id'] + + IMAGE_MAX_SIZE = (300, 300) + + def resize_image(self): + image = Image.open(self.image) + image.thumbnail(self.IMAGE_MAX_SIZE) + image.save(self.image.path) + + def save(self, *args, **kwargs): + + + if not self.slug: + base_slug = slugify(self.title) + slug = base_slug + counter = 1 + while Products.objects.filter(slug=slug).exists(): + slug = f'{base_slug}-{counter}' + counter += 1 + self.slug = slug + + super().save(*args, **kwargs) + self.resize_image() + + def __str__(self): + return self.title + +class Cities(models.Model): + city = models.CharField(max_length=200, blank=True) + wilaya = models.ForeignKey('Wilayas', on_delete=models.CASCADE, blank=True, null=True) + + class Meta: + verbose_name_plural = 'Villes' + ordering = ['id'] + + def __str__(self): + return self.city + +class Wilayas(models.Model): + title = models.CharField(max_length=200, blank=True) + slug = models.SlugField(unique=True, blank=True, null=True) + size = models.IntegerField(blank=True, null=True) + image = models.ImageField(upload_to='main/images', blank=True, null=True) + + class Meta: + verbose_name_plural = 'Wilayas' + ordering = ['id'] + + IMAGE_MAX_SIZE = (500, 350) + + def save(self, *args, **kwargs): + if not self.slug: + base_slug = slugify(self.title) + slug = base_slug + counter = 1 + while Store.objects.filter(slug=slug).exists(): + slug = f'{base_slug}-{counter}' + counter += 1 + self.slug = slug + + super().save(*args, **kwargs) + + def __str__(self): + return self.title + +class Codes(models.Model): + code = models.CharField(max_length=200, blank=True) + + class Meta: + verbose_name_plural = 'code Zip' + ordering = ['id'] + + def __str__(self): + return self.code + +class Countries(models.Model): + country = models.CharField(max_length=200, blank=True) + + class Meta: + verbose_name_plural = 'Pays' + ordering = ['id'] + + def __str__(self): + return self.country + + +class School(models.Model): + title = models.CharField(max_length=33) + owner = models.ForeignKey('authentication.User', on_delete=models.CASCADE) + category = models.ManyToManyField('Categories', related_name="product_categories") + partner = models.ManyToManyField('Partners', blank=True) + city = models.CharField(max_length=33, blank=True) + wilaya = models.ForeignKey('Wilayas', blank=True, null=True, on_delete=models.CASCADE) + code = models.ManyToManyField('Codes', related_name="code_store", blank=True) + country = models.ManyToManyField('Countries', related_name="country_store", blank=True) + slug = models.SlugField(unique=True, blank=True, null=True) + description = models.TextField(blank=True) + logo = models.ImageField(upload_to='main/images') + banner = models.ImageField(upload_to='main/images') + email = models.EmailField() + facebook = models.URLField(blank=True, null=True) + instagram = models.URLField(blank=True, null=True) + linkedin = models.URLField(blank=True, null=True) + youtube = models.URLField(blank=True, null=True) + website = models.URLField(blank=True, null=True) + whatsapp = PhoneNumberField(blank=True, null=True) + maps = models.URLField(blank=True, null=True) + location = models.TextField(blank=True) + date_created = models.DateTimeField(auto_now_add=True) + date_updated = models.DateTimeField(auto_now=True) + active = models.BooleanField(default=False) + sponsored = models.BooleanField(default=False) + + class Meta: + verbose_name_plural = 'Schools' + ordering = ['date_created'] + + LOGO_MAX_SIZE = (370, 200) + BANNER_MAX_SIZE = (1920, 550) + def resize_image(self): + if self.logo: + logo = Image.open(self.logo.path) + logo.thumbnail(self.LOGO_MAX_SIZE) + logo.save(self.logo.path) + if self.banner: + banner = Image.open(self.banner.path) + banner.thumbnail(self.BANNER_MAX_SIZE) + banner.save(self.banner.path) + + def save(self, *args, **kwargs): + if not self.slug: + base_slug = slugify(self.title) + slug = base_slug + counter = 1 + while Store.objects.filter(slug=slug).exists(): + slug = f'{base_slug}-{counter}' + counter += 1 + self.slug = slug + super().save(*args, **kwargs) + self.resize_image() + + def get_absolute_url(self): + return reverse('main:seller_shop', kwargs={'slug': self.slug}) + + def __str__(self): + return self.title + +class Addresses(models.Model): + title = models.CharField(max_length=200, blank=True) # Par exemple, "Maison", "Bureau", etc. + school = models.ForeignKey(School, on_delete=models.SET_NULL, null=True, blank=True) + address = models.TextField() + + class Meta: + verbose_name_plural = 'Adresses' + ordering = ['id'] + + + def __str__(self): + return self.title + +class Phones(models.Model): + title = models.CharField(max_length=200, blank=True) # Par exemple, "Portable", "Bureau", etc. + phone = PhoneNumberField() # Champ pour stocker le numéro de téléphone + school = models.ForeignKey(School, on_delete=models.SET_NULL, null=True, blank=True) + + class Meta: + verbose_name_plural = 'Numéros Téléphone' + ordering = ['id'] + + def __str__(self): + return self.title + +class Courses(models.Model): + Online = 'Online' + Facetoface = 'Facetoface' + Blended = 'Blended' + + ROLE_CHOICES = ( + (Online, 'Online'), + (Facetoface, 'Facetoface'), + (Blended, 'Blended'), + ) + title = models.CharField(max_length=33) + owner = models.ForeignKey('authentication.User', on_delete=models.CASCADE) + school = models.ForeignKey(School, on_delete=models.CASCADE, null=True, blank=True) + category = models.ManyToManyField('Categories') + slug = models.SlugField(unique=True, blank=True, null=True) + partner = models.ForeignKey('Partners', on_delete=models.CASCADE) + price = models.DecimalField(max_digits=19, decimal_places=2, default=0.0) + description = models.TextField(blank=True) + status = models.CharField(max_length=30, choices=ROLE_CHOICES, default=Online, blank=True, null=True) + date_created = models.DateTimeField(auto_now_add=True) + date_updated = models.DateTimeField(auto_now=True) + active = models.BooleanField(default=False) + + class Meta: + verbose_name_plural = 'Courses' + ordering = ['date_created'] + + IMAGE_MAX_SIZE = (500, 350) + + + + def save(self, *args, **kwargs): + if not self.slug: + base_slug = slugify(self.title) + slug = base_slug + counter = 1 + while Products.objects.filter(slug=slug).exists(): + slug = f'{base_slug}-{counter}' + counter += 1 + self.slug = slug + + super().save(*args, **kwargs) + + + def get_absolute_url(self): + return reverse('main:product_detail', kwargs={'slug': self.slug}) + + def __str__(self): + return self.title + + +class Contact(models.Model): + name = models.CharField(max_length=50) + email = models.EmailField() + subject = models.CharField(max_length=50) + phone_number = PhoneNumberField() + message = models.TextField() + date_created = models.DateTimeField(auto_now_add=True) + + class Meta: + verbose_name_plural = 'Contacts' + ordering = ['id'] + + + def __str__(self): + return self.subject + +class Testimonials(models.Model): + title = models.CharField(max_length=200) + testimonial = models.TextField() + date_created = models.DateTimeField(auto_now_add=True) + user = models.ForeignKey('authentication.User', on_delete=models.CASCADE) + class Meta: + verbose_name_plural = 'Testimonials' + ordering = ['date_created'] + + def __str__(self): + return self.title \ No newline at end of file diff --git a/main/static/main/assets/css/style.css b/main/static/main/assets/css/style.css new file mode 100755 index 0000000..9e3a0f1 --- /dev/null +++ b/main/static/main/assets/css/style.css @@ -0,0 +1,8666 @@ +/* +! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #e5e7eb; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +*/ + +html { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ + font-feature-settings: normal; + /* 5 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font family by default. +2. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", 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; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-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. +*/ + +::-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 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, +textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden] { + display: none; +} + +*, +::before, +::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +.container { + width: 100%; +} + +@media (min-width: 640px) { + .container { + max-width: 640px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 768px; + } +} + +@media (min-width: 1024px) { + .container { + max-width: 1024px; + } +} + +@media (min-width: 1280px) { + .container { + max-width: 1280px; + } +} + +@media (min-width: 1536px) { + .container { + max-width: 1536px; + } +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +.visible { + visibility: visible; +} + +.static { + position: static; +} + +.fixed { + position: fixed; +} + +.absolute { + position: absolute; +} + +.relative { + position: relative; +} + +.sticky { + position: sticky; +} + +.bottom-1 { + bottom: 0.25rem; +} + +.col-span-12 { + grid-column: span 12 / span 12; +} + +.col-span-4 { + grid-column: span 4 / span 4; +} + +.col-span-6 { + grid-column: span 6 / span 6; +} + +.col-span-10 { + grid-column: span 10 / span 10; +} + +.col-start-auto { + grid-column-start: auto; +} + +.mb-0 { + margin-bottom: 0px; +} + +.mt-0 { + margin-top: 0px; +} + +.block { + display: block; +} + +.inline-block { + display: inline-block; +} + +.inline { + display: inline; +} + +.flex { + display: flex; +} + +.inline-flex { + display: inline-flex; +} + +.table { + display: table; +} + +.grid { + display: grid; +} + +.contents { + display: contents; +} + +.hidden { + display: none; +} + +.w-80 { + width: 20rem; +} + +.w-20 { + width: 5rem; +} + +.w-5 { + width: 1.25rem; +} + +.flex-shrink { + flex-shrink: 1; +} + +.flex-grow { + flex-grow: 1; +} + +.grow { + flex-grow: 1; +} + +.transform { + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.resize { + resize: both; +} + +.grid-cols-12 { + grid-template-columns: repeat(12, minmax(0, 1fr)); +} + +.flex-wrap { + flex-wrap: wrap; +} + +.items-center { + align-items: center; +} + +.justify-center { + justify-content: center; +} + +.overflow-hidden { + overflow: hidden; +} + +.overflow-visible { + overflow: visible; +} + +.overflow-x-auto { + overflow-x: auto; +} + +.border { + border-width: 1px; +} + +.bg-transparent { + background-color: transparent; +} + +.bg-cover { + background-size: cover; +} + +.p-1 { + padding: 0.25rem; +} + +.pb-0 { + padding-bottom: 0px; +} + +.text-center { + text-align: center; +} + +.font-light { + font-weight: 300; +} + +.uppercase { + text-transform: uppercase; +} + +.capitalize { + text-transform: capitalize; +} + +.italic { + font-style: italic; +} + +.text-white { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + +.underline { + text-decoration-line: underline; +} + +.antialiased { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.shadow-none { + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow { + --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.outline { + outline-style: solid; +} + +.ring { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} + +.blur { + --tw-blur: blur(8px); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.drop-shadow { + --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06)); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.grayscale { + --tw-grayscale: grayscale(100%); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.invert { + --tw-invert: invert(100%); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.filter { + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.transition { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.ease-in-out { + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} + +.ease-in { + transition-timing-function: cubic-bezier(0.4, 0, 1, 1); +} + +.ease-out { + transition-timing-function: cubic-bezier(0, 0, 0.2, 1); +} + +/*** 01 TYPOGRAPHY ***/ + +/*** 02 COMMON ***/ + +/*** 03 BUTTON ***/ + +/*** 04 BADGE ***/ + +/*** 05 FORM ***/ + +/*** 06 CARD ***/ + +/*** 07 DROPDOWN ***/ + +/*** 08 HEADER ***/ + +/*** 09 HEROINTRO ***/ + +/*** 10 CATEGORY ***/ + +/*** 11 COURSES ***/ + +/*** 12 ABOUTUS ***/ + +/*** 13 DISCOUNTBANNER ***/ + +/*** 14 COUNTER ***/ + +/*** 15 PRICING PALAN ***/ + +/*** 16 FAQS ***/ + +/*** 17 TEAM ***/ + +/*** 18 VIDEO BANNER ***/ + +/*** 19 TESTIMONIAL ***/ + +/*** 20 NEWSLATTER ***/ + +/*** 21 WHY CHOOSES ***/ + +/*** 22 WORK STEP ***/ + +/*** 23 AUTHINTICATION ***/ + +/*** 24 EVENT ***/ + +/*** 25 BLOG ***/ + +/*** 26 CART ***/ + +/*** 27 CHECKOUT ***/ + +/*** 28 404 ***/ + +/*** 29 GALLERY ***/ + +/*** 30 COMING SOON ***/ + +/*** 31 PRIVACY POLICY ***/ + +/*** 32 CHATBAR ***/ + +/*** 33 POPUP ***/ + +/*** 34 FOOTER ***/ + +/*** 35 RESPONSIVE ***/ + +/*** 36 LANDING ***/ + +/******************* + 01 TYPOGRAPHY START +********************/ + +* { + margin: 0; + padding: 0; +} + +body { + font-family: "Rajdhani", sans-serif; + font-weight: 500; + color: #181e43; + font-size: 14px; +} + +ul { + margin: 0; + padding: 0; +} + +li { + list-style: none; +} + +a, +button { + transition: all 0.3s ease; +} + +button { + cursor: pointer; +} + +button:focus { + outline: 0; +} + +a { + color: #181e43; + text-decoration: none; + outline: none; +} + +a:visited, +a:focus, +a:active, +a:hover { + text-decoration: none; + outline: none; + color: #181e43; +} + +h1, +h2, +h3, +h4, +h5, +h6, +p { + margin-bottom: 0; +} + +h1 { + font-size: 70px; +} + +h2 { + font-size: 45px; +} + +h3 { + font-size: 24px; +} + +h4 { + font-size: 22px; +} + +h5 { + font-size: 18px; +} + +h6 { + font-size: 16px; +} + +p { + font-size: calc(16px + 2 * (100vw - 420px) / 1500); + font-weight: 400; + color: #99a4b1; + font-family: "Rubik", sans-serif; +} + +.img-fluid { + width: 100%; +} + +img { + display: inline-block; +} + +svg { + display: inline-block; +} + +h6, +.h6, +h5, +.h5, +h4, +.h4, +h3, +.h3, +h2, +.h2, +h1, +.h1 { + line-height: 1.2; +} + +/******************* + 02 COMMON CSS START +********************/ + +.btn-default a { + display: inline-block; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 1px; + color: #ffffff; + background-color: #f45303; + padding: 14px 30px; + border-radius: 4px; + margin-top: 50px; +} + +.btn-default a:hover { + background-color: #181e43; +} + +.cdx-overlay { + position: relative; +} + +.cdx-overlay:before { + content: ""; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(24, 30, 67, 0.8); +} + +.bg-light { + background-color: #f7f7f7 !important; +} + +.font-light { + color: #99a4b1 !important; +} + +.shadow-none { + box-shadow: 0 0 !important; +} + +.bg-cover { + background-repeat: no-repeat; + background-position: center; + background-size: cover; +} + +.rating-list li { + display: inline-block; +} + +.rating-list li i { + color: #f4c150; +} + +[class^=col] { + position: relative; +} + +.button-center { + text-align: center; + margin-top: 45px; +} + +/*space class*/ + +section { + overflow: hidden; +} + +.space-py-100 { + padding-top: 100px; + padding-bottom: 100px; +} + +.space-pt-100 { + padding-top: 100px; +} + +.space-pb-100 { + padding-bottom: 100px; +} + +.cdx-gap { + gap: 24px; +} + +.font-primary { + color: #f45303; +} + +/*title*/ + +.title { + margin-bottom: 40px; +} + +.title h4 { + font-size: calc(18px + 4 * (100vw - 320px) / 1600); + font-weight: 600; + text-transform: uppercase; + color: #f45303; + letter-spacing: 1px; +} + +.title h2 { + font-size: calc(32px + 13 * (100vw - 320px) / 1600); + font-weight: 700; +} + +/*media */ + +.media { + display: flex; + align-items: center; +} + +/*breadcrumb*/ + +.breadcrumb { + position: relative; + text-align: center; + padding-top: 100px; + padding-bottom: 100px; + margin-bottom: 0; +} + +.breadcrumb:before { + content: ""; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(24, 30, 67, 0.8); +} + +.breadcrumb .breadcrumb-contain h1 { + font-size: calc(42px + 18 * (100vw - 320px) / 1600); + margin-bottom: 20px; + color: #ffffff; + font-weight: 700; + text-transform: capitalize; + line-height: 1; +} + +.breadcrumb .breadcrumb-contain ul { + display: flex; + align-items: center; + justify-content: center; +} + +.breadcrumb .breadcrumb-contain ul li a { + color: #ffffff; + font-size: 20px; + font-weight: 600; + text-transform: capitalize; +} + +.breadcrumb .breadcrumb-contain ul li i { + margin-left: 12px; +} + +.breadcrumb .breadcrumb-contain ul li+li { + margin-left: 10px; +} + +/*social link*/ + +.social-link { + display: flex; + align-items: center; +} + +.social-link li { + display: inline-block; +} + +.social-link li a { + width: 38px; + height: 38px; + color: #ffffff; + background-color: #f45303; + border-radius: 5px; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.5s ease; +} + +.social-link li:hover a { + background-color: #181e43; +} + +.social-link li+li { + margin-left: 10px; +} + +/*custom scrollbar*/ + +[data-simplebar] .simplebar-scrollbar::before { + border-radius: 3px; + background-color: rgba(244, 83, 3, 0.6); +} + +/* TAP TO TOP START */ + +.scroll-top { + font-size: 20px; + border: none; + outline: none; + background: #f45303; + color: #ffffff; + cursor: pointer; + width: 50px; + height: 40px; + border-radius: 3px; + text-align: center; + transition: all 0.5s ease; + display: flex; + align-items: center; + justify-content: center; +} + +.scroll-top.show { + opacity: 1; + visibility: visible; +} + +.scroll-top:hover { + color: #ffffff; +} + +/*theme tabs*/ + +.cdx-tabs { + align-items: center; + justify-content: center; + border-bottom: none; + margin-bottom: 30px; +} + +.cdx-tabs .nav-link { + border: 1px solid #f45303; + font-size: 16px; + font-weight: 600; + color: #99a4b1; + text-transform: capitalize; + border-radius: 5px; +} + +.cdx-tabs .nav-link.active { + color: #ffffff; + background-color: #f45303; +} + +.cdx-tabs li:nth-child(n+2) { + margin-left: 15px; +} + +/*Loader*/ + +.codex-loader { + position: fixed; + top: 0; + left: 0; + background-color: #181e43; + z-index: 99999; + direction: ltr; + width: 100%; + height: 100vh; + overflow: hidden; + display: flex; + align-items: center; + justify-content: center; +} + +.codex-loader .loader-item { + position: relative; + width: 250px; + height: 250px; + filter: url(#glowfloxs); +} + +.codex-loader .loader-item span { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + transform: rotate(calc(45deg * var(--i))); + display: block; +} + +.codex-loader .loader-item span::before { + content: ""; + position: absolute; + top: 0; + left: calc(50% - 20px); + width: 40px; + height: 40px; + border-radius: 50%; + background: linear-gradient(to right, #14E572, #A1FFCB); + box-shadow: 0 0 30px #13B65C; +} + +.codex-loader svg { + width: 0; + height: 0; +} + +.codex-loader .rotate { + animation: waterflox 4s ease-out infinite; + animation-delay: calc(-0.2s * var(--watet)); +} + +@keyframes waterflox { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +.codex-loader .loader { + width: 60px; + height: 60px; + position: relative; +} + +.codex-loader .loader-item1, +.codex-loader .loader-item2 { + width: 100%; + height: 100%; + border-radius: 50%; + background-color: #f45303; + opacity: 0.6; + position: absolute; + top: 0; + left: 0; + animation: loader-bounce 2s infinite ease-in-out; +} + +.codex-loader .loader-item2 { + animation-delay: -1s; +} + +@keyframes loader-bounce { + 0%, + 100% { + transform: scale(0); + } + 50% { + transform: scale(1); + } +} + +/*theme customizer*/ + +.theme-customizer { + position: fixed; + top: 48%; + right: 0; + width: 50px; + height: 50px; + background-color: #ffffff; + border-top-left-radius: 8px; + border-bottom-left-radius: 8px; + box-shadow: 0 0 40px 5px rgba(24, 30, 67, 0.1); + overflow: hidden; + z-index: 999; +} + +.theme-customizer i { + color: #f45303; + font-size: 26px; +} + +.theme-customizer svg { + height: 26px; + color: #f45303; +} + +.theme-customizer>div { + display: flex; + align-items: center; + justify-content: center; + height: 100%; +} + +.container { + margin-left: auto; + margin-right: auto; + padding-left: 20px; + padding-right: 20px; +} + +/******************* + 03 BUTTON START +********************/ + +.btn { + font-size: 16px; + cursor: pointer; + text-align: center; + padding: 15px 30px; + transition: all 0.5s ease; + text-transform: capitalize; + border: none; + outline: none; + box-shadow: none; + border-radius: 30px; + font-weight: 600; + letter-spacing: 1px; + display: inline-block; +} + +.btn.btn-md { + padding: 12px 25px; + font-size: 14px; +} + +.btn.btn-sm { + padding: 8px 20px; + font-size: 14px; +} + +.btn.btn-xs { + padding: 5px 12px; + font-size: 12px; +} + +.btn:focus { + box-shadow: none; + outline: none; +} + +.btn-primary { + color: #ffffff !important; + background-color: #f45303 !important; + box-shadow: 5px 10px 30px rgba(244, 83, 3, 0.3); +} + +.btn-white { + color: #f45303 !important; + background-color: #ffffff !important; + box-shadow: 5px 10px 30px rgba(255, 255, 255, 0.3); +} + +.btn-white:hover { + color: #ffffff !important; + background-color: #f45303 !important; +} + +.btn-outline-primary { + border: 1px solid #f45303; + color: #f45303; +} + +.btn-outline-primary:hover { + color: #ffffff; + background-color: #f45303 !important; + border-color: #f45303 !important; +} + +/******************* +04 BADGE START +********************/ + +.badge { + text-transform: capitalize; + font-weight: 400; +} + +.badge+ :nth-child(n+2) { + -webkit-margin-start: 5px; + margin-inline-start: 5px; +} + +/* bg color */ + +.badge-primary { + background-color: rgba(244, 83, 3, 0.1) !important; + color: #f45303 !important; + font-size: 12px; + padding: 7px 10px; +} + +.badge-rounded-primary { + background-color: rgba(244, 83, 3, 0.1) !important; + color: #f45303 !important; + border: 1px solid #f45303; + font-size: 12px; + border-radius: 50%; +} + +/**************** + BADGE END +******************/ + +/**************** + 05 FORM START +*****************/ + +.input-group { + position: relative; + display: flex; + align-items: stretch; + width: 100%; +} + +.input-group .input-group-text { + display: flex; + align-items: center; + border: 1px solid #E5E5E5; + line-height: inherit; + padding: 0px 15px; + border-radius: 5px; + white-space: nowrap; +} + +.input-group .input-group-text svg { + width: 16px; + height: auto; +} + +.input-group> :not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group> :not(:first-child) { + margin-left: -1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.form-control, +.form-select { + border: 1px solid #E5E5E5; + padding: 12px 18px; + font-weight: 500; + color: #99a4b1; + border-radius: 5px; + transition: all 0.5s ease; + display: block; + width: 100%; + outline: none; +} + +.form-control:focus, +.form-select:focus { + border-color: #f45303; + box-shadow: none; +} + +.form-control:focus~.input-group-text, +.form-select:focus~.input-group-text { + border-color: #f45303; +} + +.form-control::-moz-placeholder, +.form-select::-moz-placeholder { + color: #99a4b1; +} + +.form-control::placeholder, +.form-select::placeholder { + color: #99a4b1; +} + +.form-group { + margin-bottom: 20px; +} + +.form-label { + text-transform: capitalize; + font-weight: 600; + font-size: 16px; +} + +.group-small { + display: flex; + align-items: center; +} + +.group-small>div { + width: 100%; +} + +.group-small>div:nth-child(n+2) { + margin-left: 15px; +} + +select.form-control { + position: relative; + -webkit-appearance: auto; + -moz-appearance: auto; + appearance: auto; +} + +.input-group-text { + border-color: #E5E5E5; + color: #99a4b1; + transition: all 0.5s ease; +} + +/* Chrome, Safari, Edge, Opera */ + +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +/* Firefox */ + +input[type=number] { + -moz-appearance: textfield; +} + +/* custom chekbox start*/ + +.custom-chek { + margin-bottom: 0; + display: flex; + align-items: center; +} + +.custom-chek .form-check-input { + width: 1.5em; + height: 1.5em; + border: 1px solid #E5E5E5; + outline: none; + box-shadow: none; + margin-top: 1px; +} + +.custom-chek .form-check-input:checked { + background-color: #f45303; + border-color: #f45303; + accent-color: #f45303; +} + +.custom-chek label { + font-size: 16px; + font-weight: 600; + margin-left: 10px; + margin-bottom: 0 !important; +} + +/**************** + FORM END +*****************/ + +/********************* +06 CARD START +**********************/ + +.card { + background-color: #ffffff; + border-radius: 8px; + border: none; + box-shadow: 0 0 40px 5px rgba(24, 30, 67, 0.05); + transition: all 0.5s ease; + margin-bottom: 24px; +} + +.card .card-header { + background-color: transparent; + padding: 25px; + padding-bottom: 0 !important; + border: none; + display: flex; + justify-content: space-between; +} + +.card .card-header h4 { + text-transform: capitalize; + margin-bottom: 15px; + font-weight: 600; +} + +.card .card-body { + padding: 25px; +} + +/******************* + 07 DROPDOWN START +*******************/ + +.dropdownmenu { + position: relative; +} + +.dropdownmenu .dropdownitem-list { + position: absolute; + top: 100%; + right: 0; + z-index: 2; + background-color: #ffffff; + visibility: hidden; + opacity: 0; + transform: translateY(10px); + transition: all 0.5s ease; + border-radius: 5px; + box-shadow: 0 0 4px #E5E5E5; +} + +.dropdownmenu .dropdownitem-list.open { + visibility: visible; + opacity: 1; + transform: translateY(0); +} + +.dropdownmenu .dropdownitem-list>li { + display: block; +} + +.dropdownmenu .dropdownitem-list>li>a { + color: #99a4b1; + text-transform: capitalize; + font-weight: 500; + padding: 10px 20px; + display: block; + width: 100%; + font-family: "Rubik", sans-serif; + transition: all 0.5s ease; +} + +.dropdownmenu .dropdownitem-list>li+li { + border-top: 1px solid #E5E5E5; +} + +.dropdownmenu .dropdownitem-list>li:hover a, +.dropdownmenu .dropdownitem-list>li:focus a { + background-color: #f7f7f7; +} + +.hover-dropdownmenu { + position: relative; +} + +.hover-dropdownmenu .dropdownitem-list { + position: absolute; + top: 100%; + right: 0; + z-index: 2; + background-color: #ffffff; + visibility: hidden; + opacity: 0; + transform: translateY(10px); + transition: all 0.5s ease; + border-radius: 5px; + box-shadow: 0 0 4px #E5E5E5; +} + +.hover-dropdownmenu .dropdownitem-list>li { + display: block; +} + +.hover-dropdownmenu .dropdownitem-list>li>a { + color: #99a4b1; + text-transform: capitalize; + font-weight: 500; + padding: 10px 20px; + display: block; + width: 100%; + font-family: "Rubik", sans-serif; +} + +.hover-dropdownmenu .dropdownitem-list>li+li { + border-top: 1px solid #E5E5E5; +} + +.hover-dropdownmenu:hover .dropdownitem-list { + visibility: visible; + opacity: 1; + transform: translateY(0); +} + +/******************* + DROPDOWN END +*******************/ + +/******************* +08 HEADER START +********************/ + +.top-header { + background-color: #181e43; + z-index: 6; + position: relative; +} + +.top-header.primary-header { + background-color: #f45303; +} + +.top-header .header-list>li { + padding-top: 15px; + padding-bottom: 15px; + display: inline-block; +} + +.top-header .header-list>li .nice-select { + background-color: transparent; + border: none; + height: auto; + float: unset; + line-height: 1; +} + +.top-header .header-list>li .nice-select span.current { + color: #ffffff; + font-family: "Rubik", sans-serif; + font-weight: 400; +} + +.top-header .header-list>li .nice-select ul.list { + min-width: 180px; + right: 0; +} + +.top-header .header-list>li .nice-select li { + color: #99a4b1; + text-transform: capitalize; + font-weight: 500; + padding: 10px 20px; + display: block; + width: 100%; + font-family: "Rubik", sans-serif; + line-height: initial; + height: auto; +} + +.top-header .header-list>li>a { + color: #ffffff; + font-family: "Rubik", sans-serif; + letter-spacing: 0.03em; + font-weight: 400; +} + +.top-header .header-list>li>a i { + margin-right: 10px; +} + +.top-header .header-list>li+li { + margin-left: 20px; + padding-left: 20px; + border-left: 1px solid rgba(255, 255, 255, 0.2); +} + +.top-header .header-right .header-list { + justify-content: flex-end; + text-align: right; +} + +.top-header .social-list>li+li { + margin-left: 8px; +} + +.top-header .dropdownmenu .dropdownitem-list { + min-width: 180px; +} + +.top-header .dropdownmenu .dropdownitem-list li { + text-align: left; +} + +.menu-list { + display: flex; + align-items: center; +} + +.menu-list a { + color: #181e43; + font-weight: 700; +} + +.menu-list>li { + position: relative; +} + +.menu-list>li>a { + display: flex; + align-items: center; + transition: all 0.5s ease; + font-size: 18px; +} + +.menu-list>li>a i { + font-weight: 600; + margin-left: 10px; +} + +.menu-list li { + text-transform: capitalize; +} + +.menu-list li .close-menu .menu-brand .dark-logo { + display: none; +} + +header { + padding-top: 25px; + padding-bottom: 25px; + background-color: #ffffff; + z-index: 5; + position: relative; +} + +header .header-contain { + display: flex; + align-items: center; + justify-content: space-between; +} + +header .codex-brand a { + display: block; +} + +header .codex-brand img { + width: 140px; + height: auto; +} + +header .codex-brand .dark-logo { + display: none; +} + +header .menu-action { + margin-left: 20px; + display: none; + position: relative; + width: 28px; + height: 30px; +} + +header .menu-action span { + margin: 0 auto; + position: relative; + top: 12px; + transition-duration: 0s; + transition-delay: 0.2s; + transition: background-color 0.3s; + width: 28px; + height: 4px; + background-color: #181e43; + display: block; + opacity: 1; +} + +header .menu-action span::before, +header .menu-action span::after { + position: absolute; + content: ""; + width: 28px; + height: 4px; + background-color: #181e43; + display: block; + opacity: 1; + transition-property: margin, transform; + transition-duration: 0.2s; + transition-delay: 0.2s, 0; +} + +header .menu-action span::before { + margin-top: -8px; +} + +header .menu-action span::after { + margin-top: 8px; +} + +header .menu-action.toggle-active span { + background-color: transparent; + transition: 0.3s background-color; +} + +header .menu-action.toggle-active span::after, +header .menu-action.toggle-active span::before { + margin-top: 0; + transition-delay: 0, 0.2s; +} + +header .menu-action.toggle-active span::before { + transform: rotate(45deg); +} + +header .menu-action.toggle-active span::after { + transform: rotate(-45deg); +} + +header .nav-iconlist { + display: flex; + align-items: center; +} + +header .nav-iconlist>ul { + display: flex; + align-items: center; +} + +header .nav-iconlist>ul>li a svg { + width: 25px; + height: 25px; + color: #181e43; +} + +header .nav-iconlist>ul>li a svg path { + stroke: #181e43; +} + +header .nav-iconlist>ul>li a i { + font-size: 26px; + color: #f45303; +} + +header .nav-iconlist>ul>li a .nav-notification { + position: absolute; + top: -7px; + right: -5px; + width: 15px; + height: 15px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + background-color: #f45303; + color: #ffffff; + font-size: 10px; +} + +header .nav-iconlist>ul>li+li { + margin-left: 20px; +} + +header .nav-iconlist>ul>li:hover .cart-dropdown { + visibility: visible; + opacity: 1; + transform: translateY(0); +} + +header .nav-iconlist .mobilemenu-toggle { + margin-left: 20px; +} + +header .nav-iconlist>.btn { + padding: 12px 30px; + font-size: 16px; + margin-left: 40px; +} + +header .nav-iconlist>.button-group { + margin-left: 45px; +} + +header .nav-iconlist .button-group .btn+.btn { + margin-left: 15px; +} + +header .nav-iconlist .hover-dropdownmenu .dropdownitem-list { + min-width: 150px; +} + +header .cart-dropdown { + min-width: 350px; + background-color: #ffffff; + padding: 20px; + position: absolute; + top: 100%; + right: 0; + box-shadow: 0 0 3px #E5E5E5; + border-radius: 10px; + opacity: 0; + visibility: hidden; + transition: all 0.5s ease; + transform: translateY(15px); + z-index: 1; +} + +header .cart-dropdown .dropdown-list { + height: 235px; + overflow: auto; +} + +header .cart-dropdown .dropdown-list .media img { + width: 80px; + height: auto; + border-radius: 10px; +} + +header .cart-dropdown .dropdown-list .media .media-body { + margin-left: 15px; +} + +header .cart-dropdown .dropdown-list .media .media-body h6 a { + font-size: 16px; + font-weight: 600; +} + +header .cart-dropdown .dropdown-list .media .media-body span { + color: #f45303; + font-size: 16px; + font-weight: 600; +} + +header .cart-dropdown .dropdown-list .media .media-body span del { + color: #99a4b1; + font-size: 14px; + margin-right: 10px; +} + +header .cart-dropdown .dropdown-list li { + position: relative; +} + +header .cart-dropdown .dropdown-list li .close-pro { + position: absolute; + top: 10px; + right: 10px; +} + +header .cart-dropdown .dropdown-list li+li { + margin-top: 15px; + padding-top: 15px; + border-top: 1px solid #E5E5E5; +} + +header .cart-dropdown .button-group { + display: flex; + align-items: center; + padding-top: 20px; +} + +header .cart-dropdown .button-group .btn { + width: 100%; +} + +header .cart-dropdown .button-group .btn+.btn { + margin-left: 15px; +} + +header .course-search .form-control { + font-weight: 500; + width: 440px; + padding: 10px 15px; +} + +header .course-search .input-group-text { + background-color: #f45303; + padding: 0 15px; + border: none; +} + +header .course-search .input-group-text i { + color: #ffffff; + font-size: 14px; +} + +header.sticky { + position: fixed; + top: 0; + width: 100%; + animation: fadeInDown 1s ease; + box-shadow: 0 0 10px 0 rgba(24, 30, 67, 0.1); +} + +header.header2 { + padding-top: 18px; + padding-bottom: 18px; +} + +header.header2 .codex-brand img { + width: 115px; +} + +.category-header { + padding-top: 18px; + margin-top: 18px; + border-top: 1px solid #E5E5E5; +} + +.category-header .dropdownmenu { + margin-right: 30px; +} + +.category-header .dropdownmenu .dropdown-action { + padding: 10px 18px; + color: #ffffff; + background-color: #f45303; + display: block; + font-size: 16px; + font-weight: 600; + border-radius: 5px; +} + +.category-header .dropdownmenu .dropdown-action i { + margin-right: 10px; +} + +.category-header .dropdownmenu .dropdownitem-list { + width: 170px; + right: unset; + left: 0; +} + +.category-header .header-contain { + display: flex; + align-items: center; +} + +.category-header .header-contain .contact-action { + margin-left: auto; +} + +.category-header .header-contain .contact-action svg { + color: #f45303; + width: 30px; + height: auto; + margin-right: 15px; +} + +.category-header .header-contain .contact-action span { + font-size: 16px; + font-weight: 600; + color: #99a4b1; +} + +.category-header .header-contain .contact-action h6 { + font-weight: 700; + font-size: 18px; +} + +.cdx-layer { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(24, 30, 67, 0.8); + z-index: 1; + opacity: 0; + visibility: hidden; + transition: all 0.5s ease; +} + +.cdx-layer.active { + opacity: 1; + visibility: visible; +} + +/*search bar*/ + +.search-bar { + position: fixed; + top: 0; + left: 0; + background-color: rgba(24, 30, 67, 0.9); + width: 100%; + height: 100vh; + padding: 20px; + transform: translateY(-100%); + transition: all 0.5s ease; + z-index: 9; + display: flex; + align-items: center; + justify-content: center; +} + +.search-bar .input-group { + width: 40%; +} + +.search-bar .input-group .form-control { + padding-left: 30px; + height: 60px; + border: none !important; + border-top-left-radius: 30px; + border-bottom-left-radius: 30px; +} + +.search-bar .input-group .input-group-text { + padding: 0; + border: none !important; + border-top-right-radius: 30px; + border-bottom-right-radius: 30px; +} + +.search-bar .input-group .input-group-text .btn { + height: 100%; + font-weight: 500; + text-transform: capitalize; + border-top-left-radius: unset; + border-bottom-left-radius: unset; + display: flex; + align-items: center; + border: none !important; +} + +.search-bar .input-group .input-group-text .btn:focus, +.search-bar .input-group .input-group-text .btn:hover { + border: none !important; + color: #ffffff; + background-color: #f45303 !important; +} + +.search-bar .clsoe-search { + position: absolute; + top: 15px; + right: 15px; + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + background-color: #f45303; + border-radius: 5px; +} + +.search-bar .clsoe-search i { + color: #ffffff; +} + +.search-bar.open { + transform: translateY(0); +} + +/******************* + 09 HERO INTRO START +********************/ + +.hero-intro { + position: relative; +} + +.hero-intro:before { + content: ""; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(24, 30, 67, 0.7); +} + +.hero-intro .hero-contain { + position: relative; + height: calc(100vh - 149px); + display: flex; + align-items: center; +} + +.hero-intro .hero-contain h4 { + color: #f45303; + text-transform: uppercase; + font-size: calc(24px + 6 * (100vw - 420px) / 1500); + letter-spacing: 2px; + font-weight: 600; + margin-bottom: 10px; +} + +.hero-intro .hero-contain h2 { + font-size: calc(34px + 36 * (100vw - 420px) / 1500); + color: #ffffff; + font-weight: 700; + margin-bottom: 15px; +} + +.hero-intro .hero-contain p { + font-size: calc(20px + 4 * (100vw - 420px) / 1500); + color: #ffffff; + font-family: "Rubik", sans-serif; +} + +.hero-intro .hero-contain ul.btn-list { + margin-top: 60px; +} + +.hero-intro .hero-contain ul.btn-list li { + display: inline-block; +} + +.hero-intro .hero-contain ul.btn-list li+li { + margin-left: 19px; +} + +.hero-intro.intro-two { + text-align: center; +} + +.hero-intro.intro-two p { + margin-left: auto; + margin-right: auto; +} + +.hero-intro.intro-three .hero-contain h2 { + text-align: center; + margin-bottom: 0; +} + +.hero-intro.intro-three .hero-contain p { + width: auto; +} + +.hero-intro.intro-three .hero-contain .input-group { + margin-top: 45px; + width: 70%; + margin-left: auto; + margin-right: auto; +} + +.hero-intro.intro-three .hero-contain .input-group .form-control { + height: 60px; + padding-left: 20px; + font-family: "Rubik", sans-serif; + border-top-left-radius: 10px; + border-bottom-left-radius: 10px; +} + +.hero-intro.intro-three .hero-contain .input-group .input-group-text { + height: 60px; + background-color: #f45303; + border-color: #f45303; + border-top-right-radius: 10px; + border-bottom-right-radius: 10px; + padding: 0; +} + +.hero-intro.intro-three .hero-contain .input-group .input-group-text .dropdown-action { + padding: 0 30px; + height: 100%; + display: flex; + align-items: center; +} + +.hero-intro.intro-three .hero-contain .input-group .input-group-text select { + width: 100%; + height: 100%; + background-color: transparent; + color: #ffffff; +} + +.hero-intro.intro-three .hero-contain .input-group .input-group-text button { + background-color: transparent; + outline: none; + border: none; + width: 100%; + height: 100%; + color: #ffffff; +} + +.hero-intro.intro-three .hero-contain .input-group .dropdown-action { + color: #ffffff; + font-size: 20px; + font-weight: 600; +} + +.hero-intro.intro-three .hero-contain .input-group .dropdown-action i { + margin-right: 10px; +} + +.hero-intro.intro-three .hero-contain .btn-list { + margin-top: 55px; + text-align: center; +} + +/******************* + 10 CATEGORY START +********************/ + +.category-grid { + padding: 20px; + box-shadow: 0 0 10px rgba(24, 30, 67, 0.1); + border-radius: 10px; + transition: all 0.5s ease; +} + +.category-grid:hover { + box-shadow: 0 10px 30px rgba(24, 30, 67, 0.1); +} + +.category-grid .img-wrap { + margin-bottom: 20px; +} + +.category-grid .img-wrap img { + border-radius: 8px; +} + +.category-grid h4 { + margin-bottom: 10px; + font-size: 24px; + font-weight: 700; +} + +.category-grid h4 a:hover { + color: #f45303; +} + +.category-grid.cate-two { + overflow: hidden; + background-color: #ffffff; + padding: 20px 25px; + display: flex; + align-items: center; +} + +.category-grid.cate-two .img-wrap { + margin-right: 20px; + margin-bottom: 0; +} + +.category-grid.cate-two .img-wrap a { + width: 65px; + height: 65px; + border-radius: 50%; + background-color: rgba(244, 83, 3, 0.1); + display: flex; + align-items: center; + justify-content: center; +} + +.category-grid.cate-two .img-wrap a img { + width: 48%; + height: auto; +} + +.category-grid.cate-two h4 { + margin-bottom: 5px; +} + +.category-grid.cate-three { + padding: 45px; + box-shadow: 0 0 30px 0 rgba(24, 30, 67, 0.05) !important; + background-color: #ffffff; +} + +.category-grid.cate-three img { + width: 50px; +} + +.category-grid.cate-three h4 { + margin-bottom: 10px; +} + +.category-grid.cate-three p a { + color: #f45303; +} + +.category-grid.cate-three p a:hover { + color: #f45303; +} + +.category-grid.cate-three:hover { + box-shadow: 0px 20px 30px 0 rgba(24, 30, 67, 0.1) !important; +} + +/******************* + 11 COURSES START +********************/ + +.course-grid { + border-radius: 10px; + box-shadow: 0 0 10px rgba(24, 30, 67, 0.1); + overflow: hidden; + transition: all 0.5s ease; + background-color: #ffffff; + position: relative; +} + +.course-grid:hover { + box-shadow: 0 10px 40px rgba(24, 30, 67, 0.1); +} + +.course-grid .img-wrap img { + width: 100%; +} + +.course-grid .icon-wrap { + position: absolute; + top: 15px; + right: 15px; + padding: 6px; + background-color: #ffffff; + border-radius: 4px; +} + +.course-grid .icon-wrap img { + width: 15px; +} + +.course-grid .course-detail .course-rating { + display: flex; + align-items: center; +} + +.course-grid .course-detail .course-rating .rating-list li i { + font-size: 18px; + margin-right: 2px; +} + +.course-grid .course-detail .course-rating .course-review { + margin-left: 5px; + font-size: 16px; + font-weight: 400; + font-family: "Rubik", sans-serif; + color: #99a4b1; +} + +.course-grid .course-detail .profile-plan { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; +} + +.course-grid .course-detail .teacher-profile { + display: flex; + align-items: center; +} + +.course-grid .course-detail .teacher-profile img { + width: 45px; + height: 45px; + border-radius: 50%; + margin-right: 12px; +} + +.course-grid .course-detail .teacher-profile .teacher-detail { + font-family: "Rubik", sans-serif; +} + +.course-grid .course-detail .teacher-profile .teacher-detail span { + color: #99a4b1; +} + +.course-grid .course-detail .course-price { + color: #f45303; + font-size: 22px; + font-weight: 600; +} + +.course-grid .course-detail .course-price del { + font-size: 16px; + margin-right: 10px; + color: #99a4b1; +} + +.course-grid .course-detail .course-title { + padding-bottom: 10px; +} + +.course-grid .course-detail .course-title a { + font-size: calc(20px + 4 * (100vw - 420px) / 1500); + font-weight: 700; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} + +.course-grid .course-detail .course-title a:hover { + color: #f45303; +} + +.course-grid .course-detail .course-meta li { + display: inline-block; + margin-right: 20px; + font-family: "Rubik", sans-serif; + font-size: 16px; +} + +.course-grid .course-detail .course-meta li i { + margin-right: 2px; + color: #99a4b1; +} + +.course-grid .course-detail .detail-body { + padding: 25px; +} + +.course-grid .course-footer { + border-top: 1px solid #E5E5E5; +} + +.course-grid .course-footer ul { + display: flex; + justify-content: space-between; +} + +.course-grid .course-footer ul li { + padding-top: 15px; + padding-bottom: 15px; + width: 100%; + text-align: center; + font-family: "Rubik", sans-serif; + color: #99a4b1; +} + +.course-grid .course-footer ul li i { + font-weight: 500; + color: #99a4b1; + margin-right: 10px; +} + +.course-grid .course-footer ul li:nth-child(n+2) { + border-left: 1px solid #E5E5E5; +} + +.course-grid.course2 { + box-shadow: none; + border: 1px solid #E5E5E5; +} + +.course-grid.course2:hover { + box-shadow: none; +} + +.team-group h3 { + font-weight: 700; + font-size: calc(22px + 6 * (100vw - 420px) / 1500); + margin-bottom: 15px; +} + +.team-group p:nth-child(n+2) { + margin-top: 15px; +} + +.team-group .counter-grid p { + margin-top: 0; +} + +.team-group .progress-group h4 { + display: flex; + align-items: center; + justify-content: space-between; + font-family: "Rubik", sans-serif; + color: #99a4b1; + font-size: calc(14px + 2 * (100vw - 420px) / 1500); + margin-bottom: 5px; +} + +.team-group .progress-group .progress { + border-radius: 100px; + height: 10px; + background-color: rgba(244, 83, 3, 0.08); +} + +.team-group .progress-group .progress .progress-bar { + background-color: #f45303; +} + +.team-group .instructor-counter { + margin-top: 25px; +} + +.team-group:nth-child(n+2) { + margin-top: 40px; +} + +.arrow-style1 { + position: unset; + overflow: hidden; +} + +.arrow-style1 .swiper-button-next, +.arrow-style1 .swiper-button-prev { + background-color: #181e43; + width: 40px; + height: 40px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + visibility: hidden; + transition: all 0.3s ease; +} + +.arrow-style1 .swiper-button-next:after, +.arrow-style1 .swiper-button-prev:after { + font-family: "FontAwesome"; + color: #ffffff; + font-size: 24px; +} + +.arrow-style1 .swiper-button-next:hover, +.arrow-style1 .swiper-button-next:focus, +.arrow-style1 .swiper-button-next:active, +.arrow-style1 .swiper-button-prev:hover, +.arrow-style1 .swiper-button-prev:focus, +.arrow-style1 .swiper-button-prev:active { + background-color: #f45303; +} + +.arrow-style1 .swiper-button-next { + right: -60px; +} + +.arrow-style1 .swiper-button-next::after { + content: "\f105"; +} + +.arrow-style1 .swiper-button-prev { + left: -60px; +} + +.arrow-style1 .swiper-button-prev::after { + content: "\f104"; +} + +.arrow-style1:hover .swiper-button-next, +.arrow-style1:hover .swiper-button-prev { + opacity: 1; + visibility: visible; +} + +.arrow-style1:hover .swiper-button-prev { + left: 0; +} + +.arrow-style1:hover .swiper-button-next { + right: 0; +} + +/*course pages*/ + +.coursesearch-grid { + display: flex; + align-items: center; + justify-content: space-between; + font-family: "Rubik", sans-serif; +} + +.coursesearch-grid .dropdown-action { + color: #99a4b1; + padding: 10px 25px; + font-size: 16px; + border: 1px solid #E5E5E5; + border-radius: 5px; + text-transform: capitalize; + display: block; +} + +.coursesearch-grid .dropdownitem-list { + min-width: 175px; +} + +.coursesearch-grid .gridfilter-list { + margin-left: -10px; +} + +.coursesearch-grid .gridfilter-list li { + display: inline-block; + margin-left: 10px; +} + +.coursesearch-grid .gridfilter-list li a { + font-size: 18px; + padding: 8px 15px; + color: #99a4b1; + border-radius: 5px; + border: 1px solid #E5E5E5; + display: inline-block; +} + +.coursesearch-grid .gridfilter-list li a svg { + width: 22px; +} + +.coursesearch-grid .gridfilter-list li a:focus { + color: #ffffff; + border-color: #f45303; + background-color: #f45303; +} + +.coursesearch-grid h5 { + margin-right: 15px; +} + +.coursesearch-grid .form-select { + width: -moz-fit-content; + width: fit-content; + padding-right: 40px; +} + +.coursesearch-grid .form-select option { + padding: 20px 0; +} + +.list-view [class^=col] { + grid-column: span 12/span 12; +} + +.list-view .course-grid { + display: flex; + align-items: center; + padding: 35px; +} + +.list-view .course-grid .img-wrap { + width: 45%; +} + +.list-view .course-grid .img-wrap img { + border-radius: 10px; +} + +.list-view .course-grid .course-detail { + padding-left: 30px; + width: 65%; +} + +.list-view .course-grid .course-detail .detail-body { + padding: 0; +} + +.list-view .course-grid .course-footer { + margin-top: 30px; + border-bottom: 1px solid #E5E5E5; +} + +.filter-toggle { + display: none !important; +} + +.close-filter { + display: none !important; +} + +.primary-pagination { + margin-top: 60px; + display: flex; +} + +.primary-pagination li { + display: flex; + align-items: center; +} + +.primary-pagination li a { + display: flex; + align-items: center; + justify-content: center; + width: 45px; + height: 45px; + border-radius: 4px; + font-weight: 700; + font-size: 18px; + color: #99a4b1; + border: none; + background-color: #f7f7f7; +} + +.primary-pagination li a i { + font-weight: 600; +} + +.primary-pagination li+li { + margin-left: 15px; +} + +.primary-pagination li.active a { + color: #ffffff !important; + background-color: #f45303 !important; +} + +.primary-pagination li:hover a, +.primary-pagination li:focus a, +.primary-pagination li:active a { + color: #ffffff; + background-color: #f45303 !important; +} + +.course-info .img-wrap { + margin-bottom: 25px; +} + +.course-info .img-wrap img { + border-radius: 10px; +} + +.course-info .categori-list { + margin-bottom: 15px; +} + +.course-info .categori-list li { + display: inline-block; + font-family: "Rubik", sans-serif; + color: #99a4b1; + font-size: 16px; +} + +.course-info .categori-list li a { + background-color: rgba(244, 83, 3, 0.1); + padding: 5px 10px; + border-radius: 4px; + color: #f45303; + font-size: 14px; + display: inline-block; +} + +.course-info .categori-list li a:hover { + background-color: #f45303; + color: #ffffff; +} + +.course-info .categori-list li+li { + margin-left: 10px; +} + +.course-info h2 { + font-weight: 700; + font-size: calc(28px + 6 * (100vw - 420px) / 1500); +} + +.coursetab-detail .tabs { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20px; +} + +.coursetab-detail .tabs .tab-link { + font-weight: 600; + font-size: calc(16px + 2 * (100vw - 420px) / 1500); + padding: 10px 0; + color: #99a4b1; + text-transform: capitalize; + border-radius: 5px; + display: block; + border: 1px solid #E5E5E5; +} + +.coursetab-detail .tabs li { + width: calc(25% - 15px); + text-align: center; +} + +.coursetab-detail .tabs li.active a { + color: #ffffff; + background-color: #f45303; + border-color: #f45303; +} + +.coursetab-detail .tabs li:nth-child(n+2) { + margin-left: 15px; +} + +.coursetab-detail .tab-contents>div:not(:first-child) { + display: none; +} + +.coursetab-detail .course-group h3 { + font-weight: 500; + font-family: "Rubik", sans-serif; + font-size: 20px; + margin-bottom: 10px; +} + +.coursetab-detail .course-group .teacher-info { + display: flex; + align-items: center; +} + +.coursetab-detail .course-group .teacher-info .img-wrap { + margin-right: 30px; +} + +.coursetab-detail .course-group .teacher-info .img-wrap img { + border-radius: 10px; +} + +.coursetab-detail .course-group .teacher-info .teacher-detail h4 { + margin-bottom: 10px; + font-weight: 700; +} + +.coursetab-detail .course-group .teacher-info .teacher-detail p { + margin-bottom: 10px; +} + +.coursetab-detail .course-group .teacher-info .teacher-detail ul.teachermeta-list { + display: flex; + align-items: center; +} + +.coursetab-detail .course-group .teacher-info .teacher-detail ul.teachermeta-list li { + display: flex; + align-items: center; + font-weight: 600; + color: #99a4b1; + font-size: 16px; +} + +.coursetab-detail .course-group .teacher-info .teacher-detail ul.teachermeta-list li i { + font-weight: 600; + margin-right: 5px; +} + +.coursetab-detail .course-group .teacher-info .teacher-detail ul.teachermeta-list li+li { + margin-left: 15px; +} + +.coursetab-detail .course-group .teacher-info .teacher-detail .social-link { + margin-top: 20px; +} + +.coursetab-detail .course-group .topic-list { + padding-left: 20px; +} + +.coursetab-detail .course-group .topic-list li { + font-family: "Rubik", sans-serif; + color: #99a4b1; + font-size: 16px; + list-style: disc; +} + +.coursetab-detail .course-group .topic-list li:nth-child(n+2) { + margin-top: 10px; +} + +.coursetab-detail .course-group .cdx-faq .accordion-action { + border: 1px solid #E5E5E5; + border-radius: 4px; +} + +.coursetab-detail .course-group .cdx-faq .accordion-collapace { + padding: 0; +} + +.coursetab-detail .course-group .cdx-faq .course-item { + border: 1px solid #E5E5E5; + padding: 15px 25px; +} + +.coursetab-detail .course-group .cdx-faq .course-item p { + display: flex; + align-items: center; + justify-content: space-between; +} + +.coursetab-detail .course-group .cdx-faq .course-item i { + color: #f45303; + padding-right: 10px; +} + +.coursetab-detail .course-group .cdx-faq .course-item .curriculum-houres i { + margin-left: 15px; + padding-right: unset !important; +} + +.coursetab-detail .course-group .course-review { + border: 1px solid #E5E5E5; + border-radius: 8px; + padding: 30px; + overflow: hidden; +} + +.coursetab-detail .course-group .course-review .review-wrap { + text-align: center; + padding: 30px 0; + border-radius: 10px; + background-color: rgba(244, 83, 3, 0.08); +} + +.coursetab-detail .course-group .course-review .review-wrap h2 { + font-weight: 700; + font-size: 65px; + letter-spacing: 6px; + line-height: 1; + margin-bottom: 5px; +} + +.coursetab-detail .course-group .course-review .review-wrap p { + margin-top: 3px; +} + +.coursetab-detail .course-group .course-review .ratingprogress-list { + display: flex; + align-items: center; + height: 100%; +} + +.coursetab-detail .course-group .course-review .ratingprogress-list ul { + width: 100%; +} + +.coursetab-detail .course-group .course-review .ratingprogress-list li { + display: flex; + align-items: center; + justify-content: space-between; + text-transform: capitalize; + color: #99a4b1; + font-family: "Rubik", sans-serif; + font-size: 14px; +} + +.coursetab-detail .course-group .course-review .ratingprogress-list li .rating-star { + min-width: 50px; +} + +.coursetab-detail .course-group .course-review .ratingprogress-list li .review-text { + min-width: 50px; + text-align: right; +} + +.coursetab-detail .course-group .course-review .ratingprogress-list li .rating-progress { + background-color: #f7f7f7; + height: 8px; + border-radius: 4px; + position: relative; + width: 100%; +} + +.coursetab-detail .course-group .course-review .ratingprogress-list li .rating-progress .progress-value { + background-color: #f4c150; + position: absolute; + height: 8px; + left: 0; + border-radius: 4px; +} + +.coursetab-detail .course-group .course-review .ratingprogress-list li .rating-progress .progress-value.w-80 { + width: 80%; +} + +.coursetab-detail .course-group .course-review .ratingprogress-list li .rating-progress .progress-value.w-30 { + width: 30%; +} + +.coursetab-detail .course-group .course-review .ratingprogress-list li .rating-progress .progress-value.w-20 { + width: 20%; +} + +.coursetab-detail .course-group .course-review .ratingprogress-list li .rating-progress .progress-value.w-5 { + width: 5%; +} + +.coursetab-detail .course-group .course-review .ratingprogress-list li:nth-child(n+2) { + margin-top: 10px; +} + +.coursetab-detail .course-group:nth-child(n+2) { + margin-top: 20px; +} + +/******************* + 12 ABOUT US START +********************/ + +.about-us .aboutimg-wrapper img { + border-radius: 20px; +} + +.about-us .about-contain { + display: flex; + align-items: center; + height: 100%; + padding-left: 35px; +} + +.about-us .about-contain h4 { + font-size: calc(20px + 2 * (100vw - 320px) / 1600); + font-weight: 600; + text-transform: uppercase; + color: #f45303; + letter-spacing: 1px; + margin-bottom: 8px; +} + +.about-us .about-contain h2 { + font-size: calc(32px + 13 * (100vw - 320px) / 1600); + font-weight: 700; + margin-bottom: 20px; +} + +.about-us .about-contain p+p { + margin-top: 15px; +} + +.about-us .about-contain .btn { + margin-top: 30px; +} + +.about-us.two .img-wrap img { + border-radius: 20px; +} + +.about-us.two .about-contain { + padding-left: unset; + margin-bottom: 55px; + display: block; + height: auto; + text-align: center; +} + +.about-counter { + margin-top: 60px; +} + +/******************************* + 13 DISCOUNT BANNER START +********************************/ + +.discount-upcoming { + background-color: #181e43; +} + +.discount-upcoming .discount-wrap { + border-radius: 10px; + overflow: hidden; + position: relative; +} + +.discount-upcoming .discount-wrap .img-wrap { + border: 10px solid #ffffff; + border-radius: 10px; +} + +.discount-upcoming .discount-detail { + display: flex; + align-items: center; + height: 100%; + padding-left: 40px; +} + +.discount-upcoming .discount-detail h2 { + font-size: calc(32px + 13 * (100vw - 420px) / 1500); + font-weight: 700; + margin-bottom: 15px; + color: #ffffff; +} + +.discount-upcoming .discount-detail h4 { + color: #f45303; + font-size: calc(18px + 4 * (100vw - 420px) / 1500); + font-weight: 600; + text-transform: uppercase; + letter-spacing: 1px; + margin-bottom: 10px; +} + +.discount-upcoming .discount-detail p { + color: #ffffff; +} + +.discount-upcoming .discount-detail .cdx-timer { + margin-top: 40px; +} + +.discount-upcoming .discount-detail .btn { + margin-top: 50px; +} + +.discount-upcoming.two { + background: none; +} + +.discount-upcoming.two .discount-wrap { + border-radius: 50px; + position: relative; + margin-top: unset; +} + +.discount-upcoming.two .discount-detail { + width: auto; + float: none; + margin-top: 0; + padding: 100px 15%; + text-align: center; + position: relative; + z-index: 1; +} + +.discount-upcoming.two .discount-detail:before { + content: ""; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: #181e43; + opacity: 0.86; + z-index: -1; +} + +.discount-upcoming.three { + background-color: #ffffff; +} + +.discount-upcoming.three .discount-wrap { + box-shadow: 0px 0px 30px 0px rgba(24, 30, 67, 0.1); + padding: 40px; + border-radius: 20px; +} + +.discount-upcoming.three .discount-wrap .img-wrap { + border: none; + overflow: hidden; +} + +.discount-upcoming.three .discount-detail { + padding-left: 30px; +} + +.discount-upcoming.three .discount-detail h2 { + font-size: calc(28px + 17 * (100vw - 420px) / 1500); + color: #181e43; + padding-bottom: 0; +} + +.discount-call { + padding: 90px 0 100px; + position: relative; +} + +.discount-call::before { + content: ""; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(24, 30, 67, 0.8); +} + +.discount-call .discount-contain { + text-align: center; +} + +.discount-call .discount-contain h4 { + font-size: calc(18px + 4 * (100vw - 420px) / 1500); + font-weight: 600; + text-transform: uppercase; + color: #f45303; + letter-spacing: 1px; + margin-bottom: 15px; +} + +.discount-call .discount-contain h2 { + font-size: calc(32px + 13 * (100vw - 420px) / 1500); + font-weight: 700; + color: #ffffff; + margin-bottom: 20px; +} + +.discount-call .discount-contain p { + color: #ffffff; +} + +.discount-call .discount-contain .btn { + margin-top: 45px; +} + +/******************* + 14 COUNTER START +********************/ + +.cdx-counter { + background-color: #181e43; + padding: 95px 0 80px; + position: relative; +} + +.counter-title.two p { + color: #ffffff; +} + +.counter-grid h2 { + color: #f45303; + font-size: calc(38px + 12 * (100vw - 420px) / 1500); + font-weight: 700; +} + +.counter-grid p { + color: #181e43; + font-size: calc(18px + 2 * (100vw - 420px) / 1500); +} + +.counter-grid.two p { + color: #ffffff; +} + +.counter-grid.three { + padding: 25px; + background-color: #f7f7f7; + border-radius: 10px; +} + +.counter-grid.four { + background-color: #ffffff; + padding: 25px; + border-radius: 10px; +} + +/********************** +15 PRICING PALAN START +***********************/ + +.pricing-grid { + padding: 40px; + border-radius: 10px; + box-shadow: 0 0 15px rgba(24, 30, 67, 0.1); + position: relative; + transition: all 0.5s ease; +} + +.pricing-grid:hover { + box-shadow: 0 20px 40px rgba(24, 30, 67, 0.1); +} + +.pricing-grid h2 { + font-size: 23px; + font-weight: 700; + color: #f45303; + text-transform: capitalize; +} + +.pricing-grid .price-lable { + position: absolute; + top: 30px; + right: 30px; + color: #f45303; + background-color: rgba(244, 83, 3, 0.1); + padding: 7px 20px; + border-radius: 10px; + font-family: "Rubik", sans-serif; + text-transform: capitalize; +} + +.pricing-grid .pricing-header { + border-bottom: 1px solid #E5E5E5; + padding-bottom: 10px; + margin-bottom: 30px; +} + +.pricing-grid .pricing-header .pricing-currency { + font-size: calc(20px + 4 * (100vw - 420px) / 1500); + font-weight: 700; + color: #181e43; + margin-right: 5px; +} + +.pricing-grid .pricing-header .pricing-price { + color: #181e43; + font-family: "Rajdhani", sans-serif; + font-size: calc(45px + 5 * (100vw - 420px) / 1500); + font-weight: 700; +} + +.pricing-grid .pricing-header .month { + color: #99a4b1; + margin-left: 5px; + font-size: calc(16px + 2 * (100vw - 420px) / 1500); + font-weight: 700; +} + +.pricing-grid .pricing-body li { + color: #99a4b1; + font-family: "Rubik", sans-serif; + font-size: 16px; + font-weight: 500; +} + +.pricing-grid .pricing-body li svg { + margin-right: 10px; + width: 20px; +} + +.pricing-grid .pricing-body li:nth-child(n+2) { + margin-top: 15px; +} + +.pricing-grid .btn { + margin-top: 30px; + width: 100%; +} + +/******************* + 16 FAQ START +********************/ + +.cdx-faq .img-wrap img { + border-radius: 20px; +} + +.cdx-faq .accordion-grid { + background-color: #ffffff; + border-radius: 8px; +} + +.cdx-faq .accordion-grid .accordion-action { + position: relative; + letter-spacing: 1px; + font-size: calc(18px + 2 * (100vw - 420px) / 1500); + font-weight: 700; + text-transform: capitalize; + color: #181e43; + display: block; + padding: 20px 25px; + padding-right: 45px; + width: 100%; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + transition: all 0.3s ease; +} + +.cdx-faq .accordion-grid .accordion-action:before { + content: "\f067"; + font-family: "FontAwesome"; + position: absolute; + color: #f45303; + right: 25px; + top: 22px; + font-weight: 400; +} + +.cdx-faq .accordion-grid .accordion-action.active { + color: #ffffff; + background-color: #f45303; +} + +.cdx-faq .accordion-grid .accordion-action.active:before { + content: "\f068"; + color: #ffffff; +} + +.cdx-faq .accordion-grid .accordion-collapace { + color: #99a4b1; + font-size: 16px; + font-weight: 400; + font-family: "Rubik", sans-serif; + padding: 25px; + display: none; +} + +.cdx-faq .accordian-info { + display: flex; + align-items: center; + height: 100%; + padding-left: 30px; +} + +/******************* + 17 TEAM START +********************/ + +.team-grid { + text-align: center; + border-radius: 10px; + box-shadow: 0 0 10px rgba(24, 30, 67, 0.1); + overflow: hidden; + padding: 20px; + background-color: #ffffff; + transition: all 0.5s ease; +} + +.team-grid.shadow-none { + box-shadow: 0 0; +} + +.team-grid.shadow-none:hover { + box-shadow: 0 0; +} + +.team-grid .img-wrap { + position: relative; +} + +.team-grid .img-wrap img { + border-radius: 10px; +} + +.team-grid .img-wrap::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(24, 30, 67, 0.5); + opacity: 0; + visibility: hidden; + transition: all 0.5s ease; +} + +.team-grid .team-detail { + padding-top: 25px; + padding-bottom: 8px; +} + +.team-grid .team-detail h4 { + color: #181e43; + font-size: 24px; + font-weight: 700; + margin-bottom: 5px; +} + +.team-grid .social-link { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + visibility: hidden; +} + +.team-grid .social-link li { + display: inline-block; +} + +.team-grid .social-link li a { + width: 38px; + height: 38px; + color: #ffffff; + background-color: #f45303; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.5s ease; +} + +.team-grid .social-link li:hover a { + background-color: #181e43; +} + +.team-grid .social-link li+li { + margin-left: 5px; +} + +.team-grid:hover { + box-shadow: 10px 0 30px rgba(24, 30, 67, 0.15); +} + +.team-grid:hover .img-wrap::before { + opacity: 1; + visibility: visible; +} + +.team-grid:hover .social-link { + visibility: visible; + opacity: 1; +} + +.team-grid:hover .social-link li:first-child { + animation: fadeInUp 0.5s ease; +} + +.team-grid:hover .social-link li:nth-child(2) { + animation: fadeInUp 0.7s ease; +} + +.team-grid:hover .social-link li:nth-child(3) { + animation: fadeInUp 0.9s ease; +} + +.team-grid:hover .social-link li:nth-child(4) { + animation: fadeInUp 1.1s ease; +} + +.team-grid2 { + padding: 20px; + box-shadow: 0 0 15px rgba(24, 30, 67, 0.1); + border-radius: 10px; + transition: all 0.5s ease; + background-color: #ffffff; + position: relative; + text-align: center; +} + +.team-grid2 .img-wrap img { + border-radius: 8px; +} + +.team-grid2 .team-detail { + padding-top: 30px; + padding-bottom: 15px; +} + +.team-grid2 .team-detail h3 { + font-size: calc(24px + 6 * (100vw - 420px) / 1500); + font-weight: 700; + margin-bottom: 10px; +} + +.team-grid2 .team-detail p { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +.team-grid2 .team-detail .btn { + margin-top: 25px; +} + +.team-grid2:hover { + box-shadow: 0 10px 50px rgba(24, 30, 67, 0.1); +} + +/******************* +18 VIDEO BANNER START +********************/ + +.video-banner { + padding: 200px 0px 240px 0px; + border: 15px solid #ffffff; + border-radius: 15px; + box-shadow: 0 10px 40px rgba(24, 30, 67, 0.2); + position: relative; + display: flex !important; + align-items: center; + justify-content: center; +} + +.video-banner:before { + content: ""; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(24, 30, 67, 0.6); +} + +.video-banner2 { + padding: 190px 0; + border-radius: 10px; + display: flex !important; + justify-content: center; + align-items: center; + position: relative; + overflow: hidden; +} + +.video-banner2:before { + content: ""; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(24, 30, 67, 0.6); +} + +.video-contain { + background-color: #ffffff; + padding: 50px; + margin-top: -90px; + border-radius: 10px; +} + +.video-contain h2 { + font-size: calc(26px + 19 * (100vw - 320px) / 1600); + font-weight: 700; + margin: 0; +} + +.video-contain2 { + display: flex; + align-items: center; + height: 100%; + padding-left: 30px; +} + +.video-contain2 h4 { + font-size: calc(16px + 6 * (100vw - 420px) / 1500); + font-weight: 600; + text-transform: uppercase; + color: #f45303; + letter-spacing: 1px; +} + +.video-contain2 h2 { + font-size: calc(32px + 13 * (100vw - 420px) / 1500); + font-weight: 700; + margin-bottom: 20px; +} + +.video-contain2 .btn { + margin-top: 35px; +} + +.video-btn { + display: flex; + align-items: center; + justify-content: center; + width: 75px; + height: 75px; + font-size: 26px; + border-radius: 50%; + background-color: #ffffff; + color: #f45303 !important; + position: relative; + transition: all 0.5s ease; + animation: ripple 3s infinite ease-in-out; +} + +.video-btn:hover { + background-color: #f45303; + color: #ffffff !important; +} + +@keyframes ripple { + 0% { + box-shadow: 0 0 0 0 rgba(244, 83, 3, 0.2), 0 0 0 20px rgba(244, 83, 3, 0.2), 0 0 0 40px rgba(244, 83, 3, 0.2); + } + 100% { + box-shadow: 0 0 0 20px rgba(244, 83, 3, 0.2), 0 0 0 40px rgba(244, 83, 3, 0.1), 0 0 0 60px rgba(244, 83, 3, 0); + } +} + +/*timer*/ + +.cdx-timer { + display: flex; + align-items: center; +} + +.cdx-timer .timer-grid .timer-count { + font-size: 36px; + font-size: calc(30px + 6 * (100vw - 320px) / 1600); + font-weight: 700; + letter-spacing: 2px; + line-height: 1; +} + +.cdx-timer .timer-grid .timer-title { + font-weight: 400; + font-size: 14px; + font-family: "Rubik", sans-serif; + text-transform: uppercase; +} + +.cdx-timer .timer-grid:nth-child(n+2) { + margin-left: 60px; +} + +.cdx-timer.timer1 .timer-grid .timer-count { + color: #f45303; +} + +.cdx-timer.timer1 .timer-grid .timer-title { + color: #ffffff; +} + +.cdx-timer.timer2 { + margin-left: -10px; +} + +.cdx-timer.timer2 .timer-grid { + width: 25%; + background-color: #f45303; + border-radius: 10px; + box-shadow: 0px 0px 0px 0px rgba(24, 30, 67, 0.5); + text-align: center; + padding-top: 30px; + padding-bottom: 30px; + margin-left: 10px; +} + +.cdx-timer.timer2 .timer-grid .timer-count { + color: #ffffff; +} + +.cdx-timer.timer2 .timer-grid .timer-title { + color: #ffffff; +} + +.cdx-timer.timer4 .timer-grid { + box-shadow: 0 0 30px rgba(24, 30, 67, 0.1); + width: 160px; + height: 160px; + border-radius: 50%; + text-align: center; + display: flex; + align-items: center; + justify-content: center; +} + +/******************* + 19 TESTIMONIAL START +********************/ + +.testi-grid { + background-color: #ffffff; + transition: all 0.5s ease; + box-shadow: 0 0 15px rgba(24, 30, 67, 0.1); + padding: 35px 30px; + border-radius: 10px; + position: relative; + overflow: hidden; + z-index: 1; +} + +.testi-grid::before { + content: ""; + position: absolute; + right: -50px; + bottom: -50px; + background-color: rgba(244, 83, 3, 0.1); + width: 100px; + height: 100px; + border-radius: 50%; + z-index: -1; + transition: all 0.5s ease; +} + +.testi-grid .media { + margin-bottom: 20px; +} + +.testi-grid .media .img-wrap { + width: 60px; + height: 60px; + border-radius: 50%; + overflow: hidden; + border: 2px solid #E5E5E5; + margin-right: 20px; +} + +.testi-grid .media .img-wrap img { + border-radius: 50%; + height: 100%; + width: 100%; +} + +.testi-grid .media .media-body h4 { + font-size: 20px; + font-weight: 700; +} + +.testi-grid .media .media-body h6 { + font-family: "Rubik", sans-serif; + font-weight: 400; + color: #99a4b1; +} + +.testi-grid p { + margin-bottom: 15px; +} + +.testi-grid .testiquote { + position: absolute; + top: 33px; + right: 30px; +} + +.testi-grid .testiquote i { + line-height: 1; + color: #f45303; + font-size: 40px; +} + +.testi-grid .rating-list li i { + font-size: 22px; +} + +.testi-grid:hover { + box-shadow: 0 10px 40px rgba(24, 30, 67, 0.05); +} + +.testi-grid:hover::before { + right: 0; + bottom: 0; + width: 100%; + height: 100%; + border-radius: 10px; +} + +.testi-grid.testi-two { + border: 1px solid #E5E5E5; + box-shadow: none; + border-radius: 20px; + margin: 0; +} + +.arrow-dot .swiper { + padding-bottom: 70px; +} + +.arrow-dot .swiper-pagination-bullet { + opacity: 1; + background-color: #181e43; + width: 15px; + height: 15px; +} + +.arrow-dot .swiper-pagination-bullet.swiper-pagination-bullet-active { + background-color: #f45303; +} + +.cdx-testimonial { + overflow: hidden; +} + +/******************* + 20 NEWSLATTER START +********************/ + +.newsletter-wrap { + background-color: #181e43; + padding: 50px; + border-radius: 50px; +} + +.newsletter-wrap.cdx-overlay:before { + border-radius: 50px; +} + +.newsletter-wrap h2 { + color: #ffffff; + font-size: calc(26px + 19 * (100vw - 420px) / 1500); + font-weight: 700; +} + +.subscribe-form input { + padding-left: 25px; + height: 55px; + font-size: 16px; + font-weight: 500; + width: 100%; + border: 0; + border-top-left-radius: 30px; + border-bottom-left-radius: 30px; +} + +.subscribe-form .input-group-text { + padding: 0; + border: none; + background-color: transparent; +} + +.subscribe-form .input-group-text button { + height: 55px; + background-color: #f45303; + color: #ffffff; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 1px; + padding: 0 20px; + font-size: 16px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.subscribe-form .input-group-text button:hover { + background-color: #f45303 !important; + color: #ffffff !important; +} + +.newsletter-subscribe { + z-index: 1; + position: relative; +} + +.newsletter-subscribe.newsletter2 { + padding: 100px 0; +} + +.newsletter-subscribe.newsletter2::before { + content: ""; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(24, 30, 67, 0.8); +} + +/********************* + 21 WHY CHOOSES START +**********************/ + +.whychoose-info h4 { + font-size: calc(18px + 4 * (100vw - 420px) / 1500); + font-weight: 600; + text-transform: uppercase; + color: #f45303; + letter-spacing: 1px; + margin-bottom: 10px; +} + +.whychoose-info h2 { + font-size: calc(28px + 17 * (100vw - 420px) / 1500); + font-weight: 700; + margin-bottom: 15px; +} + +.whychoose-info p+p { + margin-top: 15px; +} + +.whychoose-info .btn { + margin-top: 30px; +} + +.whychoose-wrap { + display: flex; + align-items: center; + height: 100%; +} + +.whychoose-wrap .whychoose-info { + margin-bottom: 50px; +} + +.whychoose-wrap .whychoose-grid:nth-child(n+2) { + margin-top: 35px; +} + +.whychoose-imgwrap { + padding-right: 35px; +} + +.whychoose-imgwrap img { + border-radius: 20px; +} + +.whychoose-grid { + overflow: hidden; + display: flex; + align-items: flex-start; + border-radius: 10px; + padding: 30px; + box-shadow: 0 0 30px rgba(24, 30, 67, 0.1); +} + +.whychoose-grid .icon-wrap { + margin-top: 5px; +} + +.whychoose-grid .icon-wrap img { + min-width: 65px; + width: 65px; + height: auto; +} + +.whychoose-grid .whychoose-detail { + padding-left: 15px; +} + +.whychoose-grid .whychoose-detail h3 { + font-weight: 700; + margin-bottom: 5px; +} + +.whychoose-grid.three { + padding: 30px; + background-color: #ffffff; + border-radius: 10px; + transition: all 0.5s ease; + display: block; +} + +.whychoose-grid.three .icon-wrap { + width: 100%; + margin-top: unset; + margin-bottom: 20px; +} + +.whychoose-grid.three .whychoose-detail { + padding-left: unset; + margin-left: auto; + margin-right: auto; +} + +.whychoose-grid.three .whychoose-detail h3 { + margin-bottom: 15px; +} + +.whychoose-grid.three:hover { + box-shadow: 0 20px 30px rgba(24, 30, 67, 0.1); +} + +/******************* +22 WORK STEP START +********************/ + +.work-step { + padding: 30px; + box-shadow: 0 0 20px rgba(24, 30, 67, 0.1); + border-radius: 10px; +} + +.work-step .icon-wrap { + position: relative; + background-color: rgba(244, 83, 3, 0.1); + border-radius: 50%; + width: 100px; + height: 100px; + display: flex; + align-items: center; + justify-content: center; + margin-left: auto; + margin-right: auto; + margin-bottom: 20px; +} + +.work-step .icon-wrap img { + width: 40px; + height: auto; +} + +.work-step h2 { + color: #181e43; + font-family: "Rajdhani", sans-serif; + font-size: 24px; + font-weight: 700; + margin-bottom: 10px; +} + +.countdown-steps { + margin-left: 67px; +} + +.revenue-share .img-wrap img { + border-radius: 20px; +} + +.revenue-share .revenue-detail { + display: flex; + align-items: center; + height: 100%; +} + +.revenue-share .revenue-detail h2 { + font-weight: 700; + font-size: calc(32px + 13 * (100vw - 420px) / 1500); + margin-bottom: 10px; +} + +.revenue-share .revenue-detail .btn { + margin-top: 45px; +} + +/************************** +23 AUHTENTICATION START +***************************/ + +.auth-main { + display: flex; + align-items: center; + height: 100vh; + justify-content: center; +} + +.codex-authbox { + min-width: 630px; + width: 630px; + margin: auto; + background-color: #ffffff; + padding: 50px; + border-radius: 10px; + box-shadow: 0 0 40px 5px rgba(24, 30, 67, 0.05); +} + +.codex-authbox .auth-header { + text-align: center; + margin-bottom: 35px; + text-transform: capitalize; +} + +.codex-authbox .auth-header p b { + font-weight: 500; +} + +.codex-authbox .auth-header .codex-brand { + margin-bottom: 15px; +} + +.codex-authbox .auth-header .codex-brand img { + width: 160px; + height: auto; +} + +.codex-authbox .auth-header .codex-brand .dark-logo { + display: none; +} + +.codex-authbox .auth-header h3 { + font-size: calc(26px + 6 * (100vw - 420px) / 1500); + font-weight: 700; + margin-bottom: 5px; +} + +.codex-authbox .auth-header h6 { + color: #99a4b1; + font-weight: 600; +} + +.codex-authbox .form-label { + text-transform: capitalize; + display: block; +} + +.codex-authbox .group-input .input-group-text { + background-color: transparent; + border-top-right-radius: 8px; + border-bottom-right-radius: 8px; + color: #f45303; + font-size: 18px; +} + +.codex-authbox .auth-remember { + display: flex; + align-items: center; + justify-content: space-between; + font-weight: 600; +} + +.codex-authbox .form-group .form-control { + transition: all 0.5s ease; +} + +.codex-authbox .form-group .form-control:focus~.input-group-text { + border-color: #f45303; +} + +.codex-authbox .form-group .input-group .input-group-text { + transition: all 0.5s ease; +} + +.codex-authbox .form-group .input-group .form-control { + border-right: none; +} + +.codex-authbox .form-group .group-btn { + background-color: transparent; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; +} + +.codex-authbox .btn { + margin-top: 40px; + display: block; + width: 100%; + font-size: 20px; + padding: 10px 35px; +} + +.codex-authbox .btn i { + margin-right: 10px; +} + +.codex-authbox .auth-footer { + margin-top: 40px; +} + +.codex-authbox .auth-footer .auth-with { + color: #99a4b1; + position: relative; + text-align: center; + margin: 0 auto; + width: -moz-fit-content; + width: fit-content; + margin-bottom: 30px; + text-transform: capitalize; +} + +.codex-authbox .auth-footer .login-list { + display: flex; + justify-content: center; +} + +.codex-authbox .auth-footer .login-list li a { + padding: 10px 30px; + border-radius: 30px; + text-transform: capitalize; + display: block; + font-family: "Rajdhani", sans-serif; + font-weight: 600; +} + +.codex-authbox .auth-footer .login-list li a img { + width: 18px; + height: auto; + margin-right: 10px; +} + +.codex-authbox .auth-footer .login-list li .bg-fb { + color: #ffffff !important; + background-color: #385196; +} + +.codex-authbox .auth-footer .login-list li .bg-google { + box-shadow: 0 0 30px 5px rgba(24, 30, 67, 0.07); + color: #181e43; +} + +.codex-authbox .auth-footer .login-list li+li { + margin-left: 15px; +} + +.codex-authbox .auth-icon { + margin-bottom: 30px; + width: 90px; + height: 90px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + background-color: rgba(244, 83, 3, 0.08); + margin-left: auto; + margin-right: auto; +} + +.codex-authbox .auth-icon i { + font-size: 45px; + color: #f45303; +} + +.codex-authbox .cdxsocial-link { + justify-content: center; +} + +.codex-authbox .cdxsocial-link li a i { + color: #ffffff; +} + +.codex-authbox .auth-pin { + display: flex; + margin-bottom: 45px; +} + +.codex-authbox .auth-pin .form-control:nth-child(n+2) { + margin-left: 10px; +} + +.codex-authbox.auth-emailverify h5 { + font-size: 16px; +} + +/*contact*/ + +.contact-grid { + padding: 30px; + position: relative; + border-radius: 10px; + display: flex; + align-items: center; + box-shadow: 0 0 40px 5px rgba(24, 30, 67, 0.05); +} + +.contact-grid h4 { + margin-bottom: 5px; + font-weight: 700; +} + +.contact-grid p { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; +} + +.contact-grid p a { + color: #99a4b1; +} + +.contact-grid .icon-wrap { + width: 65px; + height: 65px; + background: #f45303; + border-radius: 50px; + display: flex; + align-items: center; + justify-content: center; + margin-right: 15px; +} + +.contact-grid .icon-wrap i { + font-size: 30px; + color: #ffffff; +} + +.contact-grid .icon-wrap svg { + color: #ffffff; +} + +.getin-touch .img-wrap img { + border-radius: 10px; +} + +.getin-touch .contact-form { + padding: 30px; + border-radius: 10px; + box-shadow: 0 0 40px 5px rgba(24, 30, 67, 0.05); +} + +.getin-touch .contact-form .touch-header { + margin-bottom: 25px; +} + +.getin-touch .contact-form .touch-header h2 { + font-weight: 700; + font-size: 30px; + margin-bottom: 10px; +} + +.getin-touch .contact-form .form-group .form-control { + padding: 12px 20px; + border-radius: 8px; + box-shadow: none; + transition: all 0.5s ease; +} + +.getin-touch .contact-form .form-group .form-control:focus { + border-color: #f45303; +} + +.getin-touch .contact-form .form-group textarea { + min-height: 170px; +} + +.getin-touch .contact-form .btn { + margin-top: 35px; +} + +.getin-touch .contact-form .btn i { + margin-right: 5px; +} + +/******************* + 24 EVENT START +********************/ + +.career-grid { + padding: 20px; + border-radius: 10px; + box-shadow: 0 0 10px rgba(24, 30, 67, 0.1); + transition: all 0.5s ease; + overflow: hidden; + display: flex; + align-items: center; +} + +.career-grid .img-wrap { + max-width: 45%; +} + +.career-grid .img-wrap img { + border-radius: 10px; +} + +.career-grid .career-detail { + padding-left: 30px; + width: 55%; +} + +.career-grid .career-detail h3 { + margin-bottom: 10px; +} + +.career-grid .career-detail h3 a { + font-size: 24px; + font-weight: 700; + text-transform: capitalize; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} + +.career-grid .career-detail h3 a:hover { + color: #f45303; +} + +.career-grid .career-detail .careerdata-list { + padding-bottom: 15px; + margin-bottom: 15px; + border-bottom: 1px solid #E5E5E5; +} + +.career-grid .career-detail .careerdata-list li { + display: inline-block; +} + +.career-grid .career-detail .careerdata-list li i { + color: #f45303; + margin-right: 5px; +} + +.career-grid .career-detail .careerdata-list li span { + color: #99a4b1; + font-size: 15px; + font-weight: 700; + margin-left: 5px; +} + +.career-grid .career-detail .careerdata-list li+li { + margin-left: 10px; +} + +.career-grid .career-detail .btn { + margin-top: 20px; +} + +.career-grid:hover { + box-shadow: 0 10px 40px rgba(24, 30, 67, 0.1); +} + +/*career page*/ + +.career-group h2 { + font-size: calc(24px + 6 * (100vw - 420px) / 1500); + font-weight: 700; + margin-bottom: 10px; +} + +.career-group .img-wrap { + margin-bottom: 20px; +} + +.career-group .img-wrap img { + border-radius: 10px; +} + +.career-group p+p { + margin-top: 15px; +} + +.career-group .topic-list { + margin-top: 25px; +} + +.career-group .topic-list li { + font-family: "Rubik", sans-serif; + font-size: calc(16px + 2 * (100vw - 420px) / 1500); + color: #99a4b1; + font-weight: 400; +} + +.career-group .topic-list li i { + color: #f45303; + padding-right: 8px; +} + +.career-group .topic-list li+li { + margin-top: 8px; +} + +.career-group:nth-child(n+2) { + margin-top: 40px; +} + +/******************* + 25 BLOG START +********************/ + +.blog-grid { + box-shadow: 0 0 15px rgba(24, 30, 67, 0.1); + border-radius: 5px; + transition: all 0.5s ease; + overflow: hidden; +} + +.blog-grid:hover { + box-shadow: 0 10px 40px rgba(24, 30, 67, 0.1); +} + +.blog-grid .blog-detail { + padding: 30px; +} + +.blog-grid .blog-detail h3 { + margin-bottom: 15px; +} + +.blog-grid .blog-detail h3 a { + font-weight: 700; + text-transform: capitalize; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + font-size: calc(22px + 4 * (100vw - 420px) / 1500); +} + +.blog-grid .blog-detail h3 a:hover { + color: #f45303; +} + +.blog-grid .blog-detail .post-meta { + margin-bottom: 15px; + padding-bottom: 15px; + border-bottom: 1px solid #E5E5E5; +} + +.blog-grid .blog-detail .post-meta li { + display: inline-block; + margin-right: 15px; +} + +.blog-grid .blog-detail .post-meta li a { + font-size: 18px; +} + +.blog-grid .blog-detail .post-meta li a i { + color: #f45303; +} + +.blog-grid .blog-detail .post-meta li a span { + margin-left: 8px; + text-transform: uppercase; + font-weight: 600; + letter-spacing: 1px; + color: #99a4b1; +} + +.blog-grid .blog-detail .post-meta li a span:hover { + color: #f45303; +} + +.blog-grid .blog-detail .btn { + margin-top: 25px; +} + +/*blog page*/ + +.btn-filter { + display: block; + width: -moz-fit-content; + width: fit-content; + border-radius: 5px; + padding: 10px 20px; + font-size: calc(16px + 2 * (100vw - 420px) / 1500); + line-height: 1; +} + +.btn-filter svg { + width: 18px; + height: 18px; + margin-right: 10px; +} + +.cdx-sidebar .filter-title { + font-weight: 700; + margin-bottom: 20px; +} + +.cdx-sidebar .input-group .form-control { + border-right: none; +} + +.cdx-sidebar .input-group .input-group-text { + padding-right: 18px; + color: #99a4b1; + font-weight: 600; +} + +.cdx-sidebar .card .card-header h4 { + margin-bottom: 15px; +} + +.cdx-sidebar .card .card-body .filter-title { + font-weight: 700; + margin-bottom: 15px; +} + +.cdx-sidebar .teamimg-wrap { + margin-bottom: 30px; +} + +.cdx-sidebar .teamimg-wrap img { + border-radius: 5px; +} + +.cdx-sidebar .filter-list>li:nth-child(n+2) { + margin-top: 10px; +} + +.cdx-sidebar .filter-list li { + color: #99a4b1; + font-family: "Rubik", sans-serif; + display: flex; + align-items: center; + justify-content: space-between; + font-weight: 400; +} + +.cdx-sidebar .filter-list .rating-list { + display: flex; + align-items: center; +} + +.cdx-sidebar .filter-list .rating-list li { + margin-left: 3px; +} + +.cdx-sidebar .filter-list .rating-list li i { + font-size: 16px; +} + +.cdx-sidebar .gallery-post { + margin-bottom: -10px; + margin-left: -10px; +} + +.cdx-sidebar .gallery-post li { + width: calc(33.33% - 13px); + display: inline-block; + margin-bottom: 10px; + margin-left: 10px; +} + +.cdx-sidebar .gallery-post li img { + border-radius: 10px; +} + +.cdx-sidebar .media .img-wrap img { + border-radius: 5px; + width: 160px; + height: auto; +} + +.cdx-sidebar .media .media-body { + margin-left: 15px; +} + +.cdx-sidebar .media .media-body h6 { + margin-bottom: 5px; +} + +.cdx-sidebar .media .media-body h6 a { + font-weight: 600; +} + +.cdx-sidebar .media .media-body span { + font-family: "Rubik", sans-serif; + color: #99a4b1; + font-weight: 400; +} + +.cdx-sidebar .media+.media { + margin-top: 15px; +} + +.cdx-sidebar .course-price { + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 30px; +} + +.cdx-sidebar .course-price span { + color: #181e43; + font-size: calc(28px + 8 * (100vw - 420px) / 1500); + font-weight: 700; + display: inline-block; +} + +.cdx-sidebar .course-price .badge { + font-size: 16px; +} + +.cdx-sidebar .coursevideo-info { + position: relative; + border-radius: 10px; + overflow: hidden; +} + +.cdx-sidebar .coursevideo-info img { + width: 100%; +} + +.cdx-sidebar .coursevideo-info .video-btn { + position: absolute; + top: 50%; + left: 50%; + margin-right: -50%; + transform: translate(-50%, -50%); + width: 55px; + height: 55px; + font-size: 16px; +} + +.cdx-sidebar .courseinfo-list { + margin-top: 20px; + padding-top: 25px; + border-top: 1px solid #E5E5E5; +} + +.cdx-sidebar .courseinfo-list li { + color: #181e43; + font-family: "Rubik", sans-serif; + font-size: calc(14px + 2 * (100vw - 420px) / 1500); + text-transform: capitalize; +} + +.cdx-sidebar .courseinfo-list li i { + margin-right: 10px; + color: #f45303; +} + +.cdx-sidebar .courseinfo-list li .corse-info { + float: right; + color: #99a4b1; + font-weight: 400; +} + +.cdx-sidebar .courseinfo-list li+li { + margin-top: 15px; + padding-top: 15px; + border-top: 1px solid #E5E5E5; +} + +.cdx-sidebar .button-group { + margin-top: 30px; + display: flex; + align-items: center; + justify-content: space-between; +} + +.cdx-sidebar .button-group .btn { + width: 100%; +} + +.cdx-sidebar .button-group .btn+.btn { + margin-left: 15px; +} + +.cdx-sidebar .contact-list li { + font-size: 16px; + font-weight: 600; + color: #99a4b1; +} + +.cdx-sidebar .contact-list li a { + color: #99a4b1; +} + +.cdx-sidebar .contact-list li span { + color: #181e43; + font-weight: 700; + text-transform: capitalize; + min-width: 90px; + display: inline-block; +} + +.cdx-sidebar .contact-list li+li { + margin-top: 10px; +} + +.cdx-sidebar .team-detail h4 { + font-weight: 700; + font-size: calc(24px + 2 * (100vw - 420px) / 1500); + margin-bottom: 5px; +} + +.cdx-sidebar .team-detail p { + font-size: calc(18px + 2 * (100vw - 420px) / 1500); + margin-bottom: 20px; +} + +.cdx-sidebar .team-detail .social-link { + justify-content: center; +} + +.cdx-sidebar .custom-chek label { + font-weight: 400; +} + +.blogsingle-detail .blogpost-group .img-wrap { + margin-bottom: 30px; +} + +.blogsingle-detail .blogpost-group .img-wrap img { + border-radius: 5px; + overflow: hidden; +} + +.blogsingle-detail .blogpost-group .blog-data-list { + padding-bottom: 10px; +} + +.blogsingle-detail .blogpost-group .blog-data-list li { + display: inline-block; +} + +.blogsingle-detail .blogpost-group .blog-data-list li a { + color: #99a4b1; + text-transform: uppercase; + font-weight: 700; + letter-spacing: 1px; + font-size: 15px; +} + +.blogsingle-detail .blogpost-group .blog-data-list li a i { + margin-right: 6px; + font-size: 16px; + color: #f45303; +} + +.blogsingle-detail .blogpost-group .blog-data-list li a:hover { + color: #f45303; +} + +.blogsingle-detail .blogpost-group .blog-data-list li+li { + margin-left: 15px; +} + +.blogsingle-detail .blogpost-group h3 { + margin-bottom: 15px; + padding-bottom: 15px; + border-bottom: 1px solid #E5E5E5; +} + +.blogsingle-detail .blogpost-group h3 a { + font-weight: 700; + font-size: calc(22px + 10 * (100vw - 420px) / 1500); +} + +.blogsingle-detail .blogpost-group p+p { + margin-top: 15px; +} + +.blogsingle-detail .blogpost-group .btn { + margin-top: 30px; +} + +.blogsingle-detail .blockqoute { + background-color: rgba(244, 83, 3, 0.04); + border-left: 5px solid #f45303; + padding: 30px; + margin-bottom: 0; + font-style: italic; + border-radius: 8px; +} + +.blogsingle-detail .blockqoute h6 { + margin-top: 20px; + padding-left: 60px; + position: relative; + font-weight: 600; +} + +.blogsingle-detail .blockqoute h6::before { + content: ""; + position: absolute; + height: 2px; + width: 40px; + background: #181e43; + left: 0; + top: 10px; +} + +.blogsingle-detail .detail-title { + margin-bottom: 15px; + font-weight: 700; +} + +.blogsingle-detail .blog-comments .comments-list li .media { + display: flex; + align-items: flex-start; +} + +.blogsingle-detail .blog-comments .comments-list li .media .img-wrap { + border-radius: 8px; + overflow: hidden; +} + +.blogsingle-detail .blog-comments .comments-list li .media .media-body { + padding-left: 25px; +} + +.blogsingle-detail .blog-comments .comments-list li .media .media-body h5 { + font-family: "Rubik", sans-serif; + margin-bottom: 5px; +} + +.blogsingle-detail .blog-comments .comments-list li .media .media-body span { + font-weight: 600; + font-size: 16px; +} + +.blogsingle-detail .blog-comments .comments-list li .media .media-body .blog-actionlist { + float: right; + display: flex; +} + +.blogsingle-detail .blog-comments .comments-list li .media .media-body .blog-actionlist li { + color: #99a4b1; + font-weight: 600; + font-size: calc(14px + 2 * (100vw - 420px) / 1500); + display: flex; + align-items: center; +} + +.blogsingle-detail .blog-comments .comments-list li .media .media-body .blog-actionlist li svg { + width: auto; + height: 16px; + margin-right: 5px; +} + +.blogsingle-detail .blog-comments .comments-list li .media .media-body .blog-actionlist li+li { + margin-left: 10px; +} + +.blogsingle-detail .blog-comments .comments-list li .media .media-body span { + display: inline-block; + margin-bottom: 5px; + color: #99a4b1; +} + +.blogsingle-detail .blog-comments .comments-list li .media .media-body .btn { + border-radius: 8px; + margin-top: 15px; +} + +.blogsingle-detail .blog-comments .comments-list li .media .media-body .btn i { + margin-right: 5px; +} + +.blogsingle-detail .blog-comments .comments-list li+.comments-detail { + margin-top: 30px; +} + +.blogsingle-detail .blog-comments .comments-list li.comments-reply { + padding-left: 50px; +} + +.blogsingle-detail .blog-comments .comments-list>li+li { + margin-top: 30px; + padding-top: 30px; + border-top: 1px solid #E5E5E5; +} + +.blogsingle-detail .comments-form .btn { + margin-top: 35px; +} + +/*********************** + 26 CART START +************************/ + +.cdxshopping-cart th { + font-size: 18px; + font-weight: 700; + border-bottom: none !important; + text-align: left; +} + +.cdxshopping-cart td { + font-size: 16px; + font-weight: 600; + padding: 10px 10px; + text-transform: capitalize; +} + +.cdxshopping-cart td.cart-title { + font-weight: 700; +} + +.cdxshopping-cart .cart-tbl th { + background-color: #f45303; + color: #ffffff !important; +} + +.cdxshopping-cart .cart-tbl th:nth-child(n+2) { + border-left: 1px solid rgba(255, 255, 255, 0.2); +} + +.cdxshopping-cart .cart-tbl td { + border: 1px solid #E5E5E5; +} + +.cdxshopping-cart .cart-tbl th, +.cdxshopping-cart .cart-tbl td { + vertical-align: middle; + min-width: 180px; + text-align: center; + padding-top: 15px; + padding-bottom: 15px; +} + +.cdxshopping-cart .cart-tbl th .pro-quantity, +.cdxshopping-cart .cart-tbl td .pro-quantity { + margin-left: auto; + margin-right: auto; +} + +.cdxshopping-cart .cart-tbl .product-imgwrap img { + width: auto; + height: 90px; + border-radius: 5px; +} + +.cdxshopping-cart .cart-tbl tbody tr:first-child td { + border-top: none; +} + +.cdxshopping-cart .cart-tbl .cart-action svg { + width: auto; + height: 22px; +} + +.cdxshopping-cart .group-btn .btn:nth-child(n+2) { + margin-left: 15px; +} + +.cdxshopping-cart .cartbtn-group { + display: flex; + justify-content: space-between; + margin-top: 20px; +} + +.cdxshopping-cart .pro-quantity .form-control { + padding: 7px 10px; +} + +.cdxshopping-cart .pro-quantity span svg { + width: auto; + height: 20px; +} + +.chekout-tbl tr:first-child td { + padding-top: 0; +} + +.chekout-tbl tr td, +.chekout-tbl tr th { + background-color: transparent; + border-bottom: 1px solid #E5E5E5 !important; + -webkit-padding-start: 5px; + padding-inline-start: 5px; + padding-right: 5px; +} + +.chekout-tbl tr:last-child td { + border-bottom: none !important; + padding-bottom: unset; + padding-top: 25px; +} + +.chekout-tbl tr td { + text-align: right; + color: #99a4b1; +} + +.table { + width: 100%; +} + +/*qty counter*/ + +.pro-quantity { + width: 170px; +} + +.pro-quantity span { + background-color: transparent; +} + +.pro-quantity span i { + font-size: 18px; +} + +.pro-quantity .form-control { + background-color: transparent; + text-align: center; + -webkit-padding-start: 20px; + padding-inline-start: 20px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +/******************* + 27 CHECKOUT +******************/ + +.cdx-checkout .card-header h4 { + margin-bottom: 5px; + font-weight: 700; +} + +.cdx-checkout textarea { + min-height: 184px; +} + +.cdx-checkout .cvc-group p { + margin-top: 10px; +} + +/******************* + 28 404 ERROR +******************/ + +.error-main { + background-color: rgba(244, 83, 3, 0.08); +} + +.codex-error { + text-align: center; + display: flex; + align-items: center; + justify-content: center; + height: 100vh; +} + +.codex-error h1 { + font-size: calc(120px + 40 * (100vw - 320px) / 1600); + font-weight: 700; + margin-bottom: 15px; + line-height: 1; + text-transform: uppercase; +} + +.codex-error h1 span { + color: #f45303; +} + +.codex-error h2 { + font-size: calc(38px + 7 * (100vw - 320px) / 1600); + font-weight: 700; + margin-bottom: 10px; +} + +.codex-error p { + width: 65%; + margin: auto; +} + +.codex-error .btn { + margin-top: 30px; +} + +.codex-error .btn i { + margin-right: 5px; +} + +.codex-error .error-detail { + margin-top: -27px; +} + +/******************* + 29 GALLERY START +******************/ + +.gallery-grid { + position: relative; +} + +.gallery-grid:hover .gallery-link { + opacity: 1; +} + +.gallery-grid .img-wrap { + position: relative; +} + +.gallery-grid .img-wrap img { + border-radius: 10px; +} + +.gallery-grid .gallery-link { + position: absolute; + top: 10px; + bottom: 10px; + right: 10px; + left: 10px; + opacity: 0; + border-radius: 10px; + background-color: rgba(244, 83, 3, 0.8); + display: flex; + align-items: center; + justify-content: center; + transition: all 0.5s ease; +} + +.gallery-grid .gallery-link i { + width: 50px; + height: 50px; + font-weight: 800; + font-size: 20px; + color: #f45303 !important; + background-color: #ffffff; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; +} + +.gallery-tabs { + text-align: center; + margin-bottom: 40px; +} + +.gallery-tabs li { + font-size: 16px; + display: inline-block; + font-weight: 600; + color: #f45303; + cursor: pointer; + padding-bottom: 5px; + padding: 8px 20px; + border-radius: 8px; + transition: all 0.5s ease; + border: 1px solid #f45303; + text-transform: capitalize; +} + +.gallery-tabs li.active { + color: #ffffff; + background-color: #f45303; +} + +.gallery-tabs li+li { + margin-left: 15px; +} + +/******************* + 30 COMING SOON +******************/ + +.coming-soon { + height: 100vh; + width: 100%; + display: flex !important; + align-items: center; +} + +.coming-soon:before { + position: absolute; + content: ""; + background: rgba(24, 30, 67, 0.7); + width: 100%; + height: 100%; + top: 0; + left: 0; +} + +.coming-soon .newsletter-form { + position: relative; + margin-top: 55px; + width: 450px; + margin-left: auto; + margin-right: auto; +} + +.coming-soon .newsletter-form .input-group { + overflow: hidden; + border-radius: 30px; +} + +.coming-soon .newsletter-form .input-group .form-control { + height: 50px; + display: block; + border: none; + border-radius: 50px; + font-size: 14px; + padding-top: 0; + padding-right: 0; + padding-bottom: 0; + padding-left: 25px; +} + +.coming-soon .newsletter-form .input-group span { + padding: 0; + border: none; + position: absolute; + top: 0; + right: 0; + height: 100%; +} + +.coming-soon .newsletter-form .input-group span button { + border: none; + height: 100%; + background: #f45303; + display: inline-block; + color: #ffffff; + padding-left: 30px; + padding-right: 30px; + border-top-right-radius: 30px; + border-bottom-right-radius: 30px; +} + +.coming-soon .newsletter-form .input-group span button:hover { + background-color: #181e43; + color: #ffffff; +} + +.coming-soon .social-link { + margin-top: 35px; + justify-content: center; +} + +.coming-soon .social-link a { + color: #f45303; + background: #ffffff; +} + +.coming-soon .social-link a:hover { + background: #f45303; + color: #ffffff; +} + +.coming-soon .social-link li+li { + margin-left: 10px; +} + +.coming-soon .countdown-wrap { + margin-top: 30px; +} + +.coming-soon .countdown-grid { + background: #f45303; + border-radius: 10px; + padding: 20px; + position: relative; + z-index: 1; +} + +.coming-soon .countdown-grid h2 { + color: #ffffff; + font-weight: 700; +} + +.coming-soon .countdown-grid h5 { + color: #ffffff; + font-family: "Rubik", sans-serif; +} + +.coming-soon h1 { + font-weight: 700; + font-size: calc(42px + 13 * (100vw - 320px) / 1600); + margin-bottom: 15px; +} + +.coming-soon p { + font-size: calc(18px + 2 * (100vw - 320px) / 1600); + font-weight: 300; + margin-left: auto; + margin-right: auto; + color: #ffffff; +} + +/******************* +31 PRIVECY POLICY +******************/ + +.policy-group h3 { + font-size: 24px; + font-weight: 700; + text-transform: capitalize; + margin-bottom: 10px; +} + +.policy-group p+p { + margin-top: 5px; +} + +.policy-group:nth-child(n+2) { + margin-top: 30px; +} + +.policy-group .terms-list { + margin-top: 15px; + margin-left: 40px; +} + +.policy-group .terms-list li { + font-size: calc(16px + 2 * (100vw - 420px) / 1500); + font-weight: 400; + color: #99a4b1; + display: list-item; + list-style-type: auto; + font-family: "Rubik", sans-serif; +} + +.policy-group .terms-list li+li { + margin-top: 5px; +} + +/******************* +32 CHATBAR +********************/ + +.livechat-bar .chat-toggle { + position: fixed; + bottom: 60px; + right: 60px; + width: 50px; + height: 50px; + border-radius: 50%; + box-shadow: 5px 10px 30px rgba(244, 83, 3, 0.5); + background-color: #f45303; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.5s ease; + animation: ripple 3s infinite ease-in-out; +} + +.livechat-bar .chat-toggle svg { + color: #ffffff; + transition: all 0.5s ease; + animation: tada 1s ease infinite; +} + +.livechat-bar .livechat-box { + background-color: #ffffff; + box-shadow: 0 0 40px 5px rgba(24, 30, 67, 0.05); + position: fixed; + bottom: 30px; + right: 30px; + border-radius: 10px; + width: 0; + height: 0; + overflow: hidden; + z-index: 99; + transition: all 0.5s ease; +} + +.livechat-bar .livechat-box.show { + width: 380px; + height: 354px; + transition: all 0.5s ease; +} + +.livechat-bar .livechat-box .chat-header { + background-color: #f45303; + display: flex; + align-items: center; + justify-content: space-between; + padding: 15px 20px; +} + +.livechat-bar .livechat-box .chat-header .chat-logo img { + width: 35px; + height: 35px; +} + +.livechat-bar .livechat-box .chat-header h6 { + font-size: 20px; + color: #ffffff; + font-weight: 600; + text-transform: capitalize; +} + +.livechat-bar .livechat-box .chat-header .close-chat { + color: #ffffff; +} + +.livechat-bar .livechat-box .chat-body { + padding: 20px 25px; + background-color: #f7f7f7; + height: 235px; + overflow: auto; + position: relative; +} + +.livechat-bar .livechat-box .chat-body .chat-list li:nth-child(n+2) { + margin-top: 15px; +} + +.livechat-bar .livechat-box .chat-body .user-chat, +.livechat-bar .livechat-box .chat-body .admin-chat { + width: -moz-fit-content; + width: fit-content; + max-width: 80%; +} + +.livechat-bar .livechat-box .chat-body .user-chat .media, +.livechat-bar .livechat-box .chat-body .admin-chat .media { + align-items: flex-start; +} + +.livechat-bar .livechat-box .chat-body .user-chat .media .admintitle, +.livechat-bar .livechat-box .chat-body .admin-chat .media .admintitle { + font-weight: 600; + margin-bottom: 8px; + text-transform: capitalize; +} + +.livechat-bar .livechat-box .chat-body .user-chat .media .admintitle .msg-time, +.livechat-bar .livechat-box .chat-body .admin-chat .media .admintitle .msg-time { + margin-left: 10px; +} + +.livechat-bar .livechat-box .chat-body .user-chat figure, +.livechat-bar .livechat-box .chat-body .admin-chat figure { + margin-bottom: 0; +} + +.livechat-bar .livechat-box .chat-body .user-chat img, +.livechat-bar .livechat-box .chat-body .admin-chat img { + width: 28px; + height: 28px; + border-radius: 50%; +} + +.livechat-bar .livechat-box .chat-body .user-chat .chat-contain, +.livechat-bar .livechat-box .chat-body .admin-chat .chat-contain { + display: flex; + align-items: center; + justify-content: flex-end; +} + +.livechat-bar .livechat-box .chat-body .user-chat .chat-contain h6, +.livechat-bar .livechat-box .chat-body .admin-chat .chat-contain h6 { + font-size: 14px; +} + +.livechat-bar .livechat-box .chat-body .user-chat .chat-contain h6 .chat-seen, +.livechat-bar .livechat-box .chat-body .admin-chat .chat-contain h6 .chat-seen { + color: #99a4b1; +} + +.livechat-bar .livechat-box .chat-body .user-chat .chat-contain h6 .chat-seen .msg-check, +.livechat-bar .livechat-box .chat-body .admin-chat .chat-contain h6 .chat-seen .msg-check { + margin-left: 5px; + font-size: 12px; +} + +.livechat-bar .livechat-box .chat-body .user-chat .chat-contain img, +.livechat-bar .livechat-box .chat-body .admin-chat .chat-contain img { + width: 26px; + height: 26px; + border-radius: 5px; +} + +.livechat-bar .livechat-box .chat-body .user-chat .chat-contain p, +.livechat-bar .livechat-box .chat-body .admin-chat .chat-contain p { + padding: 10px 13px; + border-radius: 5px; + font-size: 12px; +} + +.livechat-bar .livechat-box .chat-body .user-chat .chat-contain p+p, +.livechat-bar .livechat-box .chat-body .admin-chat .chat-contain p+p { + margin-top: 5px; +} + +.livechat-bar .livechat-box .chat-body .user-chat .media .media-body { + margin-left: 10px; +} + +.livechat-bar .livechat-box .chat-body .user-chat .chat-contain p { + background-color: #ffffff; + border-radius: 0 15px 15px 15px; +} + +.livechat-bar .livechat-box .chat-body .admin-chat { + margin-left: auto; + text-align: right; +} + +.livechat-bar .livechat-box .chat-body .admin-chat .chat-contain p { + color: #ffffff; + background-color: #f45303; + border-radius: 15px 0 15px 15px; +} + +.livechat-bar .livechat-box .chat-footer .input-group-text { + background-color: transparent; + border: none; + padding-right: 20px; +} + +.livechat-bar .livechat-box .chat-footer .input-group-text svg { + width: 18px; + height: auto; + transform: rotate(45deg); +} + +.livechat-bar .livechat-box .chat-footer .form-control { + border: none; + font-weight: 500; + padding: 15px 18px; +} + +.typing-loader { + background-color: #f45303; + text-transform: capitalize; +} + +.typing-loader .typedot { + display: inline-block; + width: 6px; + height: 6px; + border-radius: 50%; + background-color: rgba(24, 30, 67, 0.6); + animation: typeanimat 1.3s linear infinite; +} + +.typing-loader .typedot:nth-child(2) { + animation-delay: -1.1s; +} + +.typing-loader .typedot:nth-child(3) { + animation-delay: -0.9s; +} + +.typing-loader .typedot:nth-child(n+2) { + margin-left: 3px; +} + +@keyframes typeanimat { + 0%, + 100%, + 60% { + transform: initial; + } + 30% { + transform: translateY(-5px); + } +} + +/******************* +33 POPUP START +********************/ + +.modal { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + background-color: rgba(24, 30, 67, 0.7); + z-index: 9; + display: none; + height: 0; + width: 0; + transition: all 0.5s ease; +} + +.modal.active { + display: flex; + width: 100%; + height: 100%; +} + +.modal-content { + max-width: 800px; + width: 100%; + background-color: #ffffff; + border-radius: 15px; + position: relative; +} + +.modal-content .btn-close { + position: absolute; + top: -30px; + right: -30px; +} + +.cookie-grid { + width: 305px; + padding: 20px; + background-color: #ffffff; + border-radius: 10px; + box-shadow: 0 0 40px 5px rgba(24, 30, 67, 0.05); + position: fixed; + bottom: -100%; + left: 20px; + transition: all 1s ease; + z-index: 2; +} + +.cookie-grid.active { + bottom: 20px; + transition: all 1s ease; +} + +.cookie-grid p { + font-size: 14px; + margin-bottom: 15px; +} + +.cookie-grid p a { + color: #f45303; +} + +.cookie-grid .btn+.btn { + margin-left: 15px; +} + +.cookie-grid.bottom { + width: 100%; + text-align: center; + border-radius: 0; + display: flex; + align-items: center; + justify-content: center; +} + +.cookie-grid.bottom p { + margin-right: 30px; +} + +.cookie-grid.bottom.active { + bottom: 0; + left: 0; +} + +.cookie-grid.right { + left: unset; + right: 20px; +} + +.cookie-grid.dark { + background-color: #181e43; +} + +.cookie-grid.dark p { + color: #ffffff; +} + +.language-group { + display: inline-block; + width: calc(33.33% - 15px); +} + +.language-group:nth-child(n+2) { + margin-left: 15px; +} + +.language-group .language-list li a { + color: #99a4b1; + font-size: 16px; + text-transform: capitalize; + padding: 10px; + border: 1px solid #E5E5E5; + border-radius: 10px; + display: block; + text-align: center; +} + +.language-group .language-list li+li { + margin-top: 15px; +} + +.language-modal .modal-header { + background-color: #f45303; + padding: 15px 25px; +} + +.language-modal .modal-header .modal-title { + font-weight: 700; + color: #ffffff; +} + +.language-modal .modal-header .btn-close { + color: #ffffff; + opacity: 1; + background-image: none; +} + +.language-modal .modal-header .btn-close i { + color: #ffffff; +} + +.language-modal .modal-content { + border: none; +} + +.language-modal .modal-body { + padding: 25px; + background-color: #ffffff; +} + +.theme-modal .modal-content { + background-color: transparent; + border: none; +} + +.theme-modal .btn-close { + position: absolute; + top: -40px; + right: -25px; + color: #ffffff; + opacity: 1; + z-index: 1; + font-size: 23px; +} + +.festival-popup .modal-body { + padding: 9% 5%; + text-align: center; + border-radius: 15px; +} + +.festival-popup .modal-body span { + border-radius: 30px; + border: 1px solid #f45303; + padding: 8px 25px; + color: #ffffff; + font-weight: 600; + display: block; + width: -moz-fit-content; + width: fit-content; + margin: auto; + margin-bottom: 20px; + text-transform: capitalize; +} + +.festival-popup .modal-body h2, +.festival-popup .modal-body h3 { + font-weight: 700; + text-transform: uppercase; + line-height: 1; +} + +.festival-popup .modal-body h2 { + color: #ffffff; + text-shadow: 5px 10px 30px rgba(244, 83, 3, 0.3); +} + +.festival-popup .modal-body h3 { + color: #f45303; + text-shadow: 5px 10px 30px rgba(244, 83, 3, 0.3); +} + +.festival-popup .modal-body h4 { + color: #ffffff; + font-weight: 700; + text-transform: capitalize; + font-size: calc(26px + 10 * (100vw - 420px) / 1500); +} + +.festival-popup .modal-body .btn { + margin-top: 30px; +} + +/*black friday*/ + +.black-friday .modal-body h2, +.black-friday .modal-body h3 { + font-style: italic; + font-size: calc(80px + 60 * (100vw - 420px) / 1500); +} + +/*cyber monday*/ + +.cyber-monday .modal-body h2, +.cyber-monday .modal-body h3 { + font-size: calc(68px + 27 * (100vw - 420px) / 1500); +} + +.cyber-monday .modal-body h2 { + color: #181e43; + box-shadow: none; +} + +.cyber-monday .modal-body h4 { + color: #181e43; +} + +/*Happy new yaer*/ + +.happy-newyear .modal-body h3, +.happy-newyear .modal-body h2 { + font-size: calc(65px + 55 * (100vw - 420px) / 1500); +} + +/*merri cristmas*/ + +.merry-christmas .modal-body h2 { + font-size: calc(70px + 50 * (100vw - 420px) / 1500); +} + +.merry-christmas .modal-body h3 { + font-size: calc(60px + 40 * (100vw - 420px) / 1500); +} + +/******************* +34 FOOTER START +********************/ + +footer { + background: #181e43; + padding-top: 90px; + padding-bottom: 90px; + font-family: "Rubik", sans-serif; + position: relative; +} + +footer .footer-grid .codex-brand { + margin-bottom: 30px; +} + +footer .footer-grid .codex-brand img { + width: 160px; +} + +footer .footer-grid h4 { + color: #ffffff; + position: relative; + padding-bottom: 20px; + margin-bottom: 30px; + z-index: 1; +} + +footer .footer-grid h4::before { + position: absolute; + content: ""; + z-index: -1; + width: 30px; + height: 2px; + background-color: #f45303; + bottom: 0; + left: 0; +} + +footer .footer-grid h4::after { + position: absolute; + content: ""; + z-index: -1; + width: 10px; + height: 2px; + background-color: #f45303; + bottom: 0; + left: 35px; +} + +footer .footer-grid p { + color: #ffffff; + padding-right: 18px; + margin-bottom: 20px; +} + +footer .input-group .form-control { + padding-left: 25px; + color: #ffffff; + background-color: transparent; + border: 1px solid #f45303; + border-top-left-radius: 30px; + border-bottom-left-radius: 30px; +} + +footer .input-group .form-control::-moz-placeholder { + color: #ffffff; + opacity: 1; +} + +footer .input-group .form-control::placeholder { + color: #ffffff; + opacity: 1; +} + +footer .input-group .input-group-text { + padding: 0; + background-color: transparent; + border: none; +} + +footer .input-group .btn { + border-top-left-radius: unset; + border-bottom-left-radius: unset; + height: 100%; +} + +footer .input-group .btn i { + margin-right: 10px; +} + +footer .input-group .btn:hover { + background-color: #f45303; +} + +footer .follow-us { + margin-top: 40px; +} + +footer .follow-us h6 { + color: #ffffff; + margin-bottom: 15px; +} + +footer .follow-us .footer-social { + display: flex; + align-items: center; +} + +footer .follow-us .footer-social li a { + display: flex; + align-items: center; + justify-content: center; + height: 40px; + width: 40px; + text-align: center; + background: #f45303; + border-radius: 50%; + transition: all 0.5s ease; +} + +footer .follow-us .footer-social li a i { + color: #ffffff; + transition: all 0.5s ease; +} + +footer .follow-us .footer-social li a:hover { + background: #ffffff; +} + +footer .follow-us .footer-social li a:hover i { + color: #f45303; +} + +footer .follow-us .footer-social li+li { + margin-left: 15px; +} + +footer .footer-list { + display: flex; + flex-direction: column; +} + +footer .footer-list li { + transition: all 0.5s ease; + font-size: 16px; +} + +footer .footer-list li a { + color: #ffffff; + transition: all 0.5s ease; +} + +footer .footer-list li a i { + margin-right: 8px; + color: #f45303; + font-weight: 800; +} + +footer .footer-list li:hover { + transform: translateX(10px); +} + +footer .footer-list li:hover a { + color: #f45303; +} + +footer .footer-list li+li { + margin-top: 15px; +} + +footer .footer-contact li { + position: relative; + display: flex; + justify-content: start; + align-items: center; + color: #ffffff; + font-size: 16px; +} + +footer .footer-contact li+li { + margin-top: 15px; +} + +footer .footer-contact li a { + color: #ffffff; + transition: all 0.5s ease; + display: flex; + align-items: center; +} + +footer .footer-contact li a i { + font-size: 14px; + color: #ffffff; + width: 30px; + height: 30px; + background-color: #f45303; + margin-right: 15px; + border-radius: 5px; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.5s ease; +} + +footer .footer-contact li:hover a i { + background-color: #ffffff; + color: #f45303; +} + +footer .scroll-top { + position: absolute; + bottom: -22px; + left: 0; + right: 0; + margin: auto; +} + +.subfooter { + padding: 25px 0; + border-top: 1px solid rgba(255, 255, 255, 0.1); + background: #181e43; + overflow: hidden; +} + +.subfooter .footer-contain { + display: flex; + align-items: center; + justify-content: space-between; +} + +.subfooter ul li { + display: inline-block; + font-size: 16px; +} + +.subfooter ul li a { + color: #ffffff; + transition: all 0.5s ease; +} + +.subfooter ul li a:hover { + color: #f45303; +} + +.subfooter ul li+li { + margin-left: 25px; +} + +.subfooter p { + color: #ffffff; + font-size: 16px; +} + +.subfooter p a { + color: #f45303; + font-weight: 500; +} + +/******************* +35 RESPONSIVE START +********************/ + +@media screen and (min-width: 1200px) { + .menu-list { + position: relative; + z-index: 1; + } + .menu-list>li { + padding: 10px 0; + } + .menu-list>li:hover>a { + color: #f45303; + } + .menu-list>li:hover .submenu-list { + opacity: 1; + visibility: visible; + transform: translateY(0); + } + .menu-list>li:nth-child(n+3) { + margin-left: 40px; + } + .menu-list li { + position: relative; + } + .menu-list li .submenu-list, + .menu-list li .secodnmenu-list { + position: absolute; + min-width: 220px; + background-color: #ffffff; + box-shadow: 0 0 10px 0 rgba(24, 30, 67, 0.1); + border-radius: 5px; + border-top: 4px solid #f45303; + opacity: 0; + visibility: hidden; + transition: all 0.5s ease; + } + .menu-list li .submenu-list li:last-child a, + .menu-list li .secodnmenu-list li:last-child a { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + } + .menu-list li .submenu-list { + top: 100%; + left: 0; + transform: translateY(10px); + } + .menu-list li .submenu-list a { + font-size: 16px; + padding: 10px 20px; + display: block; + width: 100%; + } + .menu-list li .submenu-list a i { + top: 16px; + position: absolute; + right: 15px; + font-weight: 600; + } + .menu-list li .submenu-list>li:hover>a { + background-color: #f45303; + color: #ffffff; + } + .menu-list li .submenu-list li { + width: 100%; + } + .menu-list li .submenu-list li:hover .secodnmenu-list { + opacity: 1; + visibility: visible; + } + .menu-list li .submenu-list li+li { + border-top: 1px solid #E5E5E5; + } + .menu-list li .submenu-list li .secodnmenu-list { + left: 100%; + top: 0; + } + .menu-list li .submenu-list li .secodnmenu-list li:hover>a { + background-color: #f45303; + color: #ffffff; + } +} + +@media screen and (min-width: 1400px) { + .container { + max-width: 1320px; + } +} + +@media screen and (max-width: 1399px) { + /*hero intro*/ + .hero-intro .hero-contain ul.btn-list { + margin-top: 45px; + } + /*discount banner*/ + .discount-upcoming .discount-detail { + padding-left: 15px; + } + .discount-upcoming.three .discount-detail { + padding-left: 15px; + } + /*why choose*/ + .whychoose-imgwrap { + padding-right: 15px; + } + /*video banner*/ + .video-contain2 { + padding-left: 15px; + } + /*faq */ + .cdx-faq .accordian-info { + padding-left: 15px; + } + .about-faq .title { + margin-bottom: 25px; + } + /*about*/ + .about-us .about-contain { + padding-left: 15px; + } +} + +@media screen and (max-width: 1199px) { + body.overflow-hidden .top-header { + z-index: 5; + } + body.dark-mode .menu-list { + background-color: #111630; + } + body.dark-mode .menu-list li+li { + border-color: #401601; + } + body.dark-mode .menu-list li .submenu-list { + border-color: #401601; + } + body.dark-mode .menu-list li .submenu-list a { + color: #b5b5b5; + } + body.dark-mode .menu-list li .submenu-list li .secodnmenu-list { + border-color: #401601; + } + body.dark-mode .filter-sidebar .cdx-sidebar { + background-color: #100601; + } + body.dark-mode .filter-sidebar .cdx-sidebar .close-filter { + border-color: #401601; + } + .space-py-100 { + padding-top: 80px; + padding-bottom: 80px; + } + .space-pt-100 { + padding-top: 80px; + } + .space-pb-100 { + padding-bottom: 80px; + } + /*header */ + .top-header .header-list>li+li { + margin-left: 10px; + padding-left: 15px; + } + .menu-list { + position: fixed; + top: 0; + right: -320px; + width: 320px; + height: 100%; + overflow: auto; + background-color: #ffffff; + display: block; + z-index: 9; + opacity: 0; + visibility: hidden; + transition: all 0.5s ease; + } + .menu-list.open { + right: 0; + opacity: 1; + visibility: visible; + border-top: 1px solid #E5E5E5; + } + .menu-list li { + display: block; + position: relative; + } + .menu-list li .close-menu { + padding: 25px 20px; + } + .menu-list li .close-menu .menu-brand { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + } + .menu-list li .close-menu .menu-brand img { + width: 130px; + height: auto; + } + .menu-list li .close-menu .menu-brand svg { + width: 30px; + height: 30px; + } + .menu-list li+li { + border-top: 1px solid #E5E5E5; + } + .menu-list li a { + padding: 10px 20px; + width: 100%; + display: flex; + align-items: center; + font-size: 16px; + } + .menu-list li .submenu-list { + border-top: 1px solid #E5E5E5; + } + .menu-list li .submenu-list a { + padding-left: 30px; + color: #99a4b1; + font-size: 14px; + } + .menu-list li .submenu-list a i { + position: absolute; + top: 15px; + right: 20px; + transform: rotate(90deg); + font-weight: 600; + font-size: 16px; + } + .menu-list li .submenu-list li .secodnmenu-list { + border-top: 1px solid #E5E5E5; + } + .menu-list li .submenu-list li .secodnmenu-list a { + padding-left: 45px; + } + .menu-list>li>a i { + margin-left: auto; + } + header { + padding-top: 20px; + padding-bottom: 20px; + } + header .codex-brand img { + width: 120px; + } + header .menu-action { + display: block; + } + header .nav-iconlist>.btn { + padding: 10px 25px; + font-size: 14px; + margin-left: 35px; + } + header .course-search .form-control { + width: 310px; + } + .cdx-layer { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(24, 30, 67, 0.8); + z-index: 3; + opacity: 0; + visibility: hidden; + transition: all 0.5s ease; + } + .cdx-layer.open { + opacity: 1; + visibility: visible; + } + .search-bar .input-group { + width: 60%; + } + /*discount banner*/ + .discount-upcoming .discount-detail { + padding-left: unset; + } + .discount-upcoming .discount-detail h4 { + margin-bottom: 5px; + } + .discount-upcoming .discount-detail h2 { + margin-bottom: 10px; + } + .discount-upcoming .discount-detail .cdx-timer { + margin-top: 25px; + } + .discount-upcoming .discount-detail .btn { + margin-top: 30px; + } + .discount-upcoming.three .discount-wrap { + padding: 35px; + } + .discount-upcoming.three .discount-detail { + padding-left: unset; + } + .discount-upcoming.three .discount-detail .cdx-timer { + margin-top: 20px; + } + .cdx-timer .timer-grid:nth-child(n+2) { + margin-left: 40px; + } + /*category */ + .category-grid.cate-three { + padding: 25px; + } + /*team*/ + .team-grid2 .team-detail p { + width: auto; + } + /*whychoose */ + .whychoose-imgwrap { + padding-right: unset; + } + .whychoose-wrap .whychoose-info { + margin-bottom: 30px; + } + /*pricing table*/ + .pricing-grid { + padding: 35px; + } + /*video banner*/ + .video-contain { + padding: 30px; + margin-top: -60px; + } + .video-contain2 { + padding-left: unset; + } + /*faq start*/ + .cdx-faq .accordian-info { + padding-left: unset; + } + /*work step*/ + .work-step .icon-wrap { + width: 80px; + height: 80px; + } + .work-step .icon-wrap img { + width: 32px; + } +} + +@media screen and (max-width: 1023px) { + .breadcrumb { + padding-top: 60px; + padding-bottom: 60px; + } + .breadcrumb .breadcrumb-contain h1 { + margin-bottom: 10px; + } + .modal-content { + max-width: calc(100% - 100px); + } + /*filter sidebar*/ + .filter-toggle { + display: inline-flex !important; + } + .filter-sidebar .cdx-layer { + z-index: 9; + } + .filter-sidebar .cdx-sidebar { + position: fixed; + top: 0; + left: -350px; + width: 320px; + height: 100%; + overflow: auto; + padding: 20px; + z-index: 9; + background-color: #ffffff; + transition: all 0.5s ease; + } + .filter-sidebar .cdx-sidebar.active { + left: 0; + } + .filter-sidebar .cdx-sidebar .close-filter { + font-size: 28px; + font-weight: 600; + text-transform: capitalize; + border-bottom: 1px solid #E5E5E5; + margin-top: -20px; + margin-left: -20px; + margin-right: -20px; + padding: 20px; + display: flex !important; + align-items: center; + justify-content: space-between; + margin-bottom: 25px; + cursor: pointer; + } + .filter-sidebar .cdx-sidebar .close-filter svg { + width: 30px; + height: 30px; + } + /*header*/ + header .course-search { + display: none; + } + .category-header { + margin-top: unset; + padding-top: unset; + border-top: unset; + } + .category-header .dropdownmenu, + .category-header .contact-action { + display: none; + } + /*discount banner*/ + .discount-upcoming.two .discount-detail { + padding: 40px; + } + .discount-call .discount-contain h4 { + margin-bottom: 10px; + } + .discount-call .discount-contain h2 { + margin-bottom: 15px; + } + .discount-call .discount-contain .btn { + margin-top: 30px; + } + /*whychoose*/ + .whychoose-wrap { + margin-top: 30px; + height: auto; + } + .whychoose-wrap .whychoose-grid:nth-child(n+2) { + margin-top: 25px; + } + /*video banner*/ + .video-banner { + padding: 140px 0 200px 0; + } + /*aboout us*/ + .about-us .about-contain { + padding-left: unset; + margin-top: 30px; + height: auto; + } + /*event grid*/ + .career-grid { + display: block; + } + .career-grid .img-wrap { + max-width: 100%; + } + .career-grid .career-detail { + padding-left: unset; + width: 100%; + padding-top: 15px; + } + .arrow-style1 .swiper-button-next, + .arrow-style1 .swiper-button-prev { + opacity: 1; + visibility: visible; + } + .arrow-style1 .swiper-button-prev { + left: 0; + } + .arrow-style1 .swiper-button-next { + right: 0; + } + /*news latter*/ + .newsletter-wrap { + text-align: center; + } + .newsletter-wrap h2 { + margin-bottom: 20px; + } + /*video banner*/ + .video-contain2 { + padding-left: unset; + } + /*faq */ + .about-faq .accordian-info { + margin-top: 30px; + height: auto; + } + .about-faq .title { + margin-bottom: 20px; + } + /*footer start*/ + .footer-row { + margin-bottom: -45px; + } + .footer-row>div { + margin-bottom: 45px; + } + /*gallery*/ + .gallery-tabs { + margin-bottom: 20px; + } + .gallery-tabs li { + margin-bottom: 15px; + } + /*course*/ + .coursesearch-grid h5 { + display: none; + } + .coursesearch-grid .dropdown-action { + padding: 10px 15px; + } + .primary-pagination { + margin-top: 35px; + } + .primary-pagination li a { + width: 40px; + height: 40px; + } + .cdx-sidebar .teamimg-wrap { + margin-bottom: 20px; + } + .cdx-sidebar .team-detail p { + margin-bottom: 15px; + } + /*revenue */ + .revenue-share .revenue-detail { + height: auto; + display: block; + } + .revenue-share .revenue-detail .btn { + margin-top: 30px; + } + /*team start*/ + .team-grid2 .team-detail { + padding-top: 20px; + padding-bottom: 10px; + } + .team-grid2 .team-detail .btn { + margin-top: 20px; + } + /*contact */ + .contact-grid { + display: block; + text-align: center; + } + .contact-grid .icon-wrap { + width: 55px; + height: 55px; + margin: auto; + margin-bottom: 15px; + } +} + +@media screen and (max-width: 767px) { + .btn.btn-md { + padding: 10px 20px; + font-size: 12px; + } + .space-py-100 { + padding-top: 60px; + padding-bottom: 60px; + } + .space-pt-100 { + padding-top: 60px; + } + .space-pb-100 { + padding-bottom: 60px; + } + .btn { + padding: 12px 25px; + } + .codex-loader .loader-item { + width: 200px; + height: 200px; + } + .codex-loader .loader-item span::before { + width: 30px; + height: 30px; + box-shadow: 0 0 20px #13B65C; + } + /*header*/ + .top-header .header-left { + display: none; + } + .top-header .header-right .header-list { + text-align: center; + } + header .nav-iconlist>.btn { + display: none; + } + header .nav-iconlist>ul>li+li { + margin-left: 12px; + } + /*hero intro*/ + .hero-intro .hero-contain { + text-align: center; + } + .hero-intro .hero-contain p { + width: auto; + } + .hero-intro .hero-contain h4 { + margin-bottom: 15px; + } + .hero-intro.intro-three .hero-contain .input-group { + margin-top: 20px; + } + .hero-intro.intro-three .hero-contain .input-group .dropdown-action { + font-size: 0; + } + .hero-intro.intro-three .hero-contain .input-group .dropdown-action i { + font-size: 20px; + margin-right: unset; + } + .hero-intro.intro-three .hero-contain .btn-list { + margin-top: 45px; + } + /*video banner*/ + .video-btn { + width: 60px; + height: 60px; + font-size: 22px; + } + .video-banner { + padding: 90px 0 130px 0; + } + .video-banner2 { + padding: 100px 0; + } + .video-contain2 { + margin-top: 30px; + height: auto; + } + .video-contain2 h2 { + margin-bottom: 15px; + } + /*chat bar*/ + .livechat-bar .chat-toggle { + width: 42px; + height: 42px; + bottom: 10px; + right: 10px; + z-index: 9; + } + .livechat-bar .chat-toggle svg { + width: 20px; + } + /*subscribe newsslatter*/ + .newsletter-wrap { + padding: 40px; + } + .newsletter-subscribe.newsletter2 { + padding: 65px 0; + } + /*discount banner*/ + .discount-upcoming.three .discount-wrap { + padding: 25px; + } + .discount-upcoming.three .discount-detail h4 { + margin-bottom: 15px; + } + .discount-upcoming.three .discount-detail .cdx-timer { + margin-top: 25px; + } + .discount-upcoming.three .discount-detail .btn { + margin-top: 30px; + } + /*about us*/ + .about-us .about-contain h2 { + margin-bottom: 10px; + } + .about-us .about-contain p+p { + margin-top: 10px; + } + /*footer*/ + footer .footer-grid .codex-brand { + margin-bottom: 25px; + } + footer .footer-grid h4 { + margin-bottom: 25px; + padding-bottom: 15px; + } + footer .footer-list li+li { + margin-top: 10px; + } + footer .scroll-top { + left: unset; + right: 20px; + bottom: 0; + } + .subfooter .footer-contain { + display: block; + } + .subfooter .footer-contain ul { + margin-top: 15px; + } + .footer-row { + margin-bottom: -35px; + } + .footer-row>div { + margin-bottom: 35px; + } + /*live chat bar*/ + .livechat-bar .livechat-box.show { + width: 300px; + } + /*popup*/ + .cookie-grid { + width: 100%; + left: 0; + border-radius: 0; + text-align: center; + } + .cookie-grid.bottom p { + margin-bottom: 15px; + margin-right: unset; + } + .cookie-grid.right { + right: 0; + } + .cookie-grid.active { + bottom: 0; + } + .cyber-monday .modal-body .btn { + margin-top: 20px; + } + /*error 404*/ + .codex-error p { + width: 100%; + } + /*gallery*/ + .gallery-tabs li { + font-size: 14px; + padding: 5px 15px; + margin-bottom: 10px; + } + .gallery-tabs li+li { + margin-left: 10px; + } + /*authentication*/ + .auth-main { + padding: 0 50px; + } + .codex-authbox { + width: 100%; + min-width: 100%; + padding: 35px; + } + .codex-authbox .auth-header { + margin-bottom: 25px; + } + .codex-authbox .auth-icon { + width: 75px; + height: 75px; + margin-bottom: 20px; + } + .codex-authbox .auth-icon i { + font-size: 32px; + } + .codex-authbox .auth-pin { + margin-bottom: 35px; + } + /*course */ + .btn-filter { + padding: 8px 15px; + } + .coursesearch-grid .gridfilter-list li.gridview-toggle, + .coursesearch-grid .gridfilter-list li.listview-toggle { + display: none; + } + .coursetab-detail .course-group .teacher-info { + display: block; + } + .coursetab-detail .course-group .teacher-info .img-wrap { + margin-bottom: 20px; + margin-right: unset; + } + .team-group h3 { + margin-bottom: 10px; + } + .team-group p:nth-child(n+2) { + margin-top: 10px; + } + /*revenue*/ + .revenue-share .revenue-detail h2 { + margin-bottom: 5px; + } + .revenue-share .revenue-detail .btn { + margin-top: 25px; + } + /*event career*/ + .career-group h2 { + margin-bottom: 5px; + } + .career-group p+p { + margin-top: 10px; + } + .career-group .topic-list { + margin-top: 10px; + } + .career-group .topic-list li+li { + margin-top: 5px; + } + /*blog*/ + .blogsingle-detail .blog-comments .comments-list li.comments-reply { + padding-left: 30px; + } + .blogsingle-detail .blog-comments .comments-list li .media .media-body { + padding-left: 15px; + } +} + +@media screen and (max-width: 575px) { + .title { + margin-bottom: 30px; + } + .container { + padding-left: 20px; + padding-right: 20px; + } + .card .card-body { + padding: 20px; + } + .modal-content { + max-width: calc(100% - 30px); + } + /*header*/ + .top-header .dropdownmenu .dropdownitem-list { + right: -100%; + } + .search-bar .input-group { + width: 100%; + } + header .cart-dropdown { + min-width: 300px; + } + /*hero intro*/ + .hero-intro .hero-contain ul.btn-list li+li { + margin-left: 15px; + } + .hero-intro.intro-three .hero-contain .input-group { + width: 85%; + } + /*discount banner*/ + .cdx-timer .timer-grid:nth-child(n+2) { + margin-left: 25px; + } + .cdx-timer.timer2 { + display: block; + margin-left: -15px; + } + .cdx-timer.timer2 .timer-grid { + width: calc(48% - 15px); + display: inline-block; + margin-left: 15px; + margin-top: 15px; + } + .discount-upcoming.two .discount-wrap { + border-radius: 15px; + } + .discount-upcoming.two .discount-detail .cdx-timer { + margin-top: 10px; + } + .discount-upcoming.three .discount-detail h4 { + margin-bottom: 10px; + } + /*subscribe newsslatter*/ + .subscribe-form input { + height: 45px; + } + .subscribe-form .input-group { + display: block; + } + .subscribe-form .input-group .form-control { + width: 100%; + border-radius: 30px !important; + } + .subscribe-form .input-group .input-group-text { + margin-top: 30px; + } + .subscribe-form .input-group .input-group-text button { + height: 45px; + border-radius: 30px !important; + margin: auto; + } + /*pricng table*/ + .pricing-grid { + padding: 30px; + } + .pricing-grid .price-lable { + padding: 5px 15px; + } + .pricing-grid .pricing-header { + margin-bottom: 20px; + padding-bottom: 5px; + } + .pricing-grid .pricing-body li:nth-child(n+2) { + margin-top: 10px; + } + /*video banner*/ + .video-contain { + padding: 20px 0; + } + /*popup*/ + .theme-modal .btn-close { + right: 0; + } + .festival-popup .modal-body .btn { + margin-top: 20px; + } + /*coming soonn*/ + .coming-soon h1 { + margin-bottom: 5px; + } + .coming-soon .countdown-wrap { + margin-top: 25px; + } + .coming-soon .newsletter-form { + width: auto; + margin-top: 40px; + } + .coming-soon .social-link { + margin-top: 25px; + } + /*shoppin cart*/ + .cdxshopping-cart .cartbtn-group { + display: block; + } + .cdxshopping-cart .group-btn { + margin-top: 15px; + } + .chekout-tbl tr:last-child td { + padding-top: 20px; + } + .cdx-checkout .payment-card { + display: block; + text-align: center; + } + .cdx-checkout .payment-card>div { + width: auto; + display: inline-block; + } + /*authentication*/ + .auth-main { + padding: 0 20px; + } + .codex-authbox .auth-icon { + margin-bottom: 15px; + } + .codex-authbox .auth-header { + margin-bottom: 20px; + } + .codex-authbox .auth-header .codex-brand img { + width: 145px; + } + .codex-authbox .btn { + margin-top: 25px; + font-size: 18px; + padding: 10px 25px; + } + .codex-authbox .btn i { + margin-right: 5px; + } + .codex-authbox .auth-footer { + margin-top: 25px; + } + .codex-authbox .auth-footer .auth-with { + margin-bottom: 25px; + } + .codex-authbox .auth-pin { + margin-bottom: 30px; + } + .codex-authbox .auth-pin .form-control { + padding: 0; + height: 50px; + text-align: center; + } + /*course*/ + .coursetab-detail .nav-tabs { + display: block; + margin-bottom: 5px; + text-align: center; + } + .coursetab-detail .nav-tabs li { + width: auto; + display: inline-block; + margin-bottom: 10px; + } + .coursetab-detail .nav-tabs li:nth-child(n+2) { + margin-left: 10px; + } + .coursetab-detail .nav-tabs .nav-link { + padding: 8px 15px; + } + .coursetab-detail .course-group .course-review { + padding: 20px; + } + .coursetab-detail .course-group .course-review .ratingprogress-list { + margin-top: 20px; + display: block; + height: auto; + } + .coursetab-detail .course-group .cdx-faq .course-item { + padding: 12px 20px; + } + .coursetab-detail .course-group .cdx-faq .course-item .curriculum-houres { + width: 55px; + } + .coursetab-detail .course-group .cdx-faq .course-item .curriculum-houres i { + margin-left: 5px; + } + .cdx-sidebar .course-price { + margin-top: 15px; + } + .cdx-sidebar .courseinfo-list { + margin-top: 12px; + padding-top: 12px; + } + .cdx-sidebar .courseinfo-list li+li { + margin-top: 12px; + padding-top: 12px; + } + /*faq*/ + .cdx-faq .card .card-header a { + padding: 15px 20px; + padding-right: 40px; + } + .cdx-faq .card .card-header a::before { + right: 20px; + top: 18px; + } + .cdx-faq .card .card-body { + padding: 15px 20px; + } + /*revenue*/ + .revenue-share .revenue-detail h2 { + margin-bottom: 5px; + } + .revenue-share .revenue-detail .btn { + margin-top: 20px; + } + /*blog*/ + .blogsingle-detail .blogpost-group p+p { + margin-top: 10px; + } + .blogsingle-detail .blogpost-group .btn { + margin-top: 20px; + } + .blogsingle-detail .blockqoute { + padding: 20px; + } + .blogsingle-detail .blockqoute h6 { + margin-top: 5px; + } +} + +@media screen and (max-width: 400px) { + /*discount banner*/ + .cdx-timer .timer-grid:nth-child(n+2) { + margin-left: 18px; + } + /*shopping cart */ + .cdxshopping-cart .cartbtn-group { + text-align: center; + } + .cdxshopping-cart .group-btn { + margin-top: 15px; + } + .cdxshopping-cart .group-btn .btn { + display: block; + width: -moz-fit-content; + width: fit-content; + margin: auto; + } + .cdxshopping-cart .group-btn .btn:nth-child(n+2) { + margin-left: auto; + margin-top: 15px; + } + /*authentication*/ + .codex-authbox { + padding: 25px; + } +} + +@media screen and (max-width: 374px) { + /*hero intro*/ + .hero-intro .hero-contain ul.btn-list li+li { + margin-left: unset; + margin-top: 15px; + } + /*authentication*/ + .codex-authbox .auth-footer .login-list li a { + font-size: 0; + border-radius: 5px; + padding: 12px 20px; + } + .codex-authbox .auth-footer .login-list li a img { + margin-right: unset; + } + .codex-authbox .auth-remember { + display: block; + } + .codex-authbox .auth-pin .form-control { + height: 38px; + } + .codex-authbox .auth-pin .form-control:nth-child(n+2) { + margin-left: 3px; + } +} + +/*************** + 36 LANDING PAGE +****************/ + +.land-title { + margin-bottom: 40px; + text-align: center; +} + +.land-title h2 { + color: #f45303; + font-size: calc(32px + 8 * (100vw - 420px) / 1500); + font-weight: 700; + text-transform: capitalize; + margin-bottom: 0; +} + +.land-title p { + margin-left: auto; + margin-right: auto; + margin-top: 5px; +} + +.land-header.fixed { + position: fixed; + width: 100%; + background-color: transparent; +} + +.land-header.fixed .codex-brand .light-logo { + display: none; +} + +.land-header.fixed .codex-brand .dark-logo { + display: block; +} + +.land-header.fixed .menu-list a { + color: #ffffff; +} + +.land-header.fixed .menu-action span { + background-color: #ffffff; +} + +.land-header.fixed .menu-action span::after, +.land-header.fixed .menu-action span::before { + background-color: #ffffff; +} + +.land-header.fixed .menu-action.toggle-active span { + background-color: transparent; +} + +.intro { + height: 100vh; + position: relative; + background-color: #181e43; +} + +.intro::before { + content: ""; + position: absolute; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(24, 30, 67, 0.9); +} + +.intro .intro-contain { + height: 100vh; + position: relative; + z-index: 1; + color: #ffffff; + padding-top: 70px; + text-align: center; + display: flex; + align-items: center; +} + +.intro .intro-contain h1 { + font-weight: 700; + font-size: calc(32px + 18 * (100vw - 420px) / 1500); + margin-bottom: 15px; +} + +.intro .intro-contain p { + color: #ffffff; + font-size: calc(16px + 2 * (100vw - 420px) / 1500); +} + +.intro .intro-contain .btn { + display: flex; + width: -moz-fit-content; + width: fit-content; + align-items: center; + font-size: 18px; + margin-top: 45px; + margin-left: auto; + margin-right: auto; +} + +.intro .intro-contain .btn i { + margin-right: 10px; +} + +/* DEMO */ + +.cdx-demos .cdx-gap { + justify-content: center; +} + +.demo-grid { + text-align: center; +} + +.demo-grid .img-wrap { + overflow: hidden; + border-radius: 8px; + box-shadow: 0 0 10px rgba(24, 30, 67, 0.1); + position: relative; +} + +.demo-grid .img-wrap .hover-link { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + width: 100%; + height: 100%; + margin: auto; + background-color: rgba(24, 30, 67, 0.8); + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + visibility: hidden; + transition: all 0.5s ease; + border-radius: 8px; +} + +.demo-grid .img-wrap .hover-link i { + color: #ffffff; + background-color: #ffffff; + width: 50px; + height: 50px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; +} + +.demo-grid .img-wrap .hover-link i::before { + color: #f45303; + font-size: 18px; +} + +.demo-grid .img-wrap img { + width: 100%; + height: auto; +} + +.demo-grid .demo-detail { + margin-top: 20px; +} + +.demo-grid .demo-detail h3 { + font-size: calc(22px + 4 * (100vw - 420px) / 1500); + font-weight: 700; + text-transform: capitalize; +} + +.demo-grid:hover .hover-link { + opacity: 1; + visibility: visible; +} + +/* landing footer*/ + +.landheader-comp .img-wrap { + border: 5px solid #ffffff; + border-radius: 10px; +} + +.landheader-comp .header-detail { + padding-right: 60px; + position: sticky; + top: 280px; + width: 100%; + margin-top: 100px; +} + +.landheader-comp .header-detail h2 { + font-size: calc(32px + 14 * (100vw - 420px) / 1500); + font-weight: 700; + color: #ffffff; + margin-bottom: 10px; +} + +.landheader-comp .header-detail p { + color: #ffffff; + font-size: calc(16px + 2 * (100vw - 420px) / 1500); +} + +.landheader-comp .header-detail p+p { + margin-top: 15px; +} + +.landheader-comp .header-detail .btn { + margin-top: 45px; +} + +/* FEATHURES */ + +.feathure-grid { + text-align: center; + box-shadow: 0 0 20px rgba(24, 30, 67, 0.1); + padding: 45px 0; + border-radius: 8px; + transition: all 0.5s ease; +} + +.feathure-grid:hover { + box-shadow: 0 0 30px rgba(24, 30, 67, 0.1); +} + +.feathure-grid .icon-wrap { + background-color: rgba(244, 83, 3, 0.1); + width: 75px; + height: 75px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + margin-left: auto; + margin-right: auto; +} + +.feathure-grid .icon-wrap i { + color: #f45303; +} + +.feathure-grid .icon-wrap img { + width: auto; + height: 35px; +} + +.feathure-grid h5 { + font-weight: 600; + margin-top: 15px; + text-transform: uppercase; +} + +/* landing footer*/ + +.lan-footer { + text-align: center; +} + +.lan-footer .codex-brand { + margin-bottom: 30px; +} + +.lan-footer .codex-brand img { + width: 205px; + height: auto; +} + +.lan-footer .support-contain { + margin-left: auto; + margin-right: auto; +} + +.lan-footer .support-contain h2 { + font-size: calc(22px + 14 * (100vw - 420px) / 1500); + font-weight: 700; + color: #ffffff; + margin-bottom: 15px; + line-height: 1.4; +} + +.lan-footer .support-contain p { + color: rgba(255, 255, 255, 0.9); +} + +.lan-footer .support-contain .btn { + margin-top: 40px; +} + +/**landing responive**/ + +@media screen and (max-width: 1199px) { + /*header*/ + header.land-header .menu-list li .close-menu .menu-brand svg { + color: #181e43; + } + header.land-header .menu-list li a { + color: #181e43; + } + header.land-header.fixed .menu-list a { + color: #181e43; + } +} + +@media screen and (max-width: 991px) { + .land-title { + margin-bottom: 30px; + } + /*landing hero*/ + .intro { + background-position: left !important; + } + .intro .intro-contain { + text-align: center; + } + .intro .intro-contain .btn { + margin-left: auto; + margin-right: auto; + margin-top: 30px; + } + /*header option*/ + .landheader-comp .header-detail { + margin-top: unset; + position: static; + padding-right: unset; + margin-bottom: 40px; + } + .landheader-comp .header-detail h2 { + margin-bottom: 5px; + } + .landheader-comp .header-detail p+p { + margin-top: 10px; + } + .landheader-comp .header-detail .btn { + margin-top: 25px; + } + /*landing footer*/ + .lan-footer .codex-brand { + margin-bottom: 20px; + } + .lan-footer .codex-brand img { + width: 180px; + } + .lan-footer .support-contain .btn { + margin-top: 30px; + } +} + +@media screen and (max-width: 575px) { + .land-title { + margin-bottom: 20px; + } + .intro .intro-contain h1 { + margin-bottom: 10px; + } + .intro .intro-contain .btn { + margin-top: 25px; + } + /*demo grid*/ + .demo-grid .demo-detail { + margin-top: 15px; + } + /*feathurs*/ + .feathure-grid { + padding: 30px 10px; + } + .feathure-grid .icon-wrap { + width: 60px; + height: 60px; + } + .feathure-grid .icon-wrap img { + height: 24px; + } + .feathure .cdx-gap { + margin-bottom: -30px; + } + .feathure .cdx-gap>div { + margin-bottom: 30px; + } + /*fotoer*/ + .lan-footer .codex-brand img { + width: 160px; + } +} + +/******************* + 01 DARK MODE START +********************/ + +body.dark-mode { + background-color: #100601; + color: #fdfdfd; + /*card*/ + /*from*/ + /*chat bar*/ + /*dropdown*/ + /*header*/ + /*category*/ + /*course*/ + /*testimonial*/ + /*whychoose*/ + /*team*/ + /*blog*/ + /*event*/ + /*video banner*/ + /*counter banner*/ + /*discount banenr*/ + /*pricing plan*/ + /*faq*/ + /*wrok step*/ + /*shopping cart*/ + /*privacy policy*/ + /*authentication*/ + /*dark mode*/ + /*landing page*/ +} + +body.dark-mode.bg-light { + background-color: #18110f !important; +} + +body.dark-mode p { + color: #b5b5b5; +} + +body.dark-mode a { + color: #fdfdfd; +} + +body.dark-mode .bg-light { + background-color: #18110f !important; +} + +body.dark-mode .card { + background-color: #111630; + box-shadow: 0 0 40px 5px rgba(17, 22, 48, 0.05); +} + +body.dark-mode .form-check-input { + background-color: #100601; + border-color: #401601; +} + +body.dark-mode .input-group-text { + color: #fdfdfd; + border-color: #401601; +} + +body.dark-mode .form-control, +body.dark-mode .form-select { + background-color: #100601; + border-color: #401601; + color: #fdfdfd; +} + +body.dark-mode .form-control:focus, +body.dark-mode .form-select:focus { + border-color: #f45303; +} + +body.dark-mode .form-control::-moz-placeholder, +body.dark-mode .form-select::-moz-placeholder { + color: #b5b5b5; +} + +body.dark-mode .form-control::placeholder, +body.dark-mode .form-select::placeholder { + color: #b5b5b5; +} + +body.dark-mode .codex-authbox { + background-color: #111630; +} + +body.dark-mode .codex-authbox .form-group .form-control:focus~.input-group-text { + border-color: #f45303; +} + +body.dark-mode .codex-authbox .auth-header h6 { + color: #b5b5b5; +} + +body.dark-mode .codex-authbox .auth-header .codex-brand .light-logo { + display: none; +} + +body.dark-mode .codex-authbox .auth-header .codex-brand .dark-logo { + display: inline-block; +} + +body.dark-mode .codex-authbox .auth-footer .auth-with { + color: #b5b5b5; +} + +body.dark-mode .codex-authbox .auth-footer .login-list li .bg-google { + color: #fdfdfd; + box-shadow: 0 0 30px 5px rgba(255, 255, 255, 0.07); +} + +body.dark-mode .codex-authbox .form-group .input-group .input-group-text { + border-color: #401601; +} + +body.dark-mode .primary-pagination li a { + background-color: rgba(244, 83, 3, 0.2); +} + +body.dark-mode .language-modal .modal-header { + border-color: #401601; +} + +body.dark-mode .language-modal .modal-body { + background-color: #111630; +} + +body.dark-mode .language-group .language-list li a { + border-color: #401601; + color: #b5b5b5; +} + +body.dark-mode .livechat-bar .livechat-box { + background-color: #111630; +} + +body.dark-mode .livechat-bar .livechat-box .chat-body { + background-color: #111630; +} + +body.dark-mode .livechat-bar .livechat-box .chat-body::before { + filter: invert(1); + opacity: 0.2; +} + +body.dark-mode .livechat-bar .livechat-box .chat-body .user-chat .chat-contain p { + background-color: #100601; +} + +body.dark-mode .livechat-bar .livechat-box .chat-footer .input-group-text { + background-color: #100601; +} + +body.dark-mode .typing-loader .typedot { + background-color: rgba(255, 255, 255, 0.6); +} + +body.dark-mode .dropdownmenu .dropdownitem-list { + background-color: #111630; + box-shadow: 0 0 4px #18110f; +} + +body.dark-mode .dropdownmenu .dropdownitem-list>li>a { + color: #fdfdfd; +} + +body.dark-mode .dropdownmenu .dropdownitem-list>li+li { + border-color: #401601; +} + +body.dark-mode .category-header { + border-color: #401601; +} + +body.dark-mode .category-header .header-contain .contact-action span { + color: #b5b5b5; +} + +body.dark-mode .menu-list li .submenu-list, +body.dark-mode .menu-list li .secodnmenu-list { + background-color: #111630; +} + +body.dark-mode .menu-list li .submenu-list li+li { + border-color: #401601; +} + +body.dark-mode header { + background-color: #18110f; +} + +body.dark-mode header .codex-brand .light-logo { + display: none; +} + +body.dark-mode header .codex-brand .dark-logo { + display: block; +} + +body.dark-mode header .nav-iconlist>ul>li a svg { + color: #fdfdfd; +} + +body.dark-mode header .nav-iconlist>ul>li a svg path { + stroke: #fdfdfd; +} + +body.dark-mode header .cart-dropdown { + background-color: #111630; + box-shadow: 0 0 3px rgba(24, 17, 15, 0.07); +} + +body.dark-mode header .cart-dropdown .dropdown-list li+li { + border-color: #401601; +} + +body.dark-mode header .cart-dropdown .dropdown-list .media .media-body span del { + color: #b5b5b5; +} + +body.dark-mode header .menu-action span { + background-color: #ffffff; +} + +body.dark-mode header .menu-action span::before, +body.dark-mode header .menu-action span::after { + background-color: #ffffff; +} + +body.dark-mode header .menu-list li .close-menu .menu-brand .dark-logo { + display: inline-block; +} + +body.dark-mode header .menu-list li .close-menu .menu-brand .light-logo { + display: none; +} + +body.dark-mode .category-grid { + background-color: #111630; +} + +body.dark-mode .category-grid.cate-three { + background-color: #111630; +} + +body.dark-mode .course-grid { + background-color: #111630; +} + +body.dark-mode .course-grid.course2 { + border-color: #111630; +} + +body.dark-mode .course-grid .course-detail .teacher-profile .teacher-detail span { + color: #b5b5b5; +} + +body.dark-mode .course-grid .course-detail .course-price del { + color: #b5b5b5; +} + +body.dark-mode .course-grid .course-detail .course-rating .course-review { + color: #b5b5b5; +} + +body.dark-mode .course-grid .course-footer { + border-color: #401601; +} + +body.dark-mode .course-grid .course-footer ul li { + color: #b5b5b5; +} + +body.dark-mode .course-grid .course-footer ul li i { + color: #b5b5b5; +} + +body.dark-mode .course-grid .course-footer ul li:nth-child(n+2) { + border-color: #401601; +} + +body.dark-mode .cdx-sidebar .input-group .input-group-text { + background-color: #100601 !important; +} + +body.dark-mode .cdx-sidebar .filter-list li { + color: #b5b5b5; +} + +body.dark-mode .cdx-sidebar .course-price span { + color: #fdfdfd; +} + +body.dark-mode .cdx-sidebar .courseinfo-list { + border-color: #401601; +} + +body.dark-mode .cdx-sidebar .courseinfo-list li { + color: #fdfdfd; +} + +body.dark-mode .cdx-sidebar .courseinfo-list li .corse-info { + color: #b5b5b5; +} + +body.dark-mode .cdx-sidebar .courseinfo-list li+li { + border-color: #401601; +} + +body.dark-mode .cdx-sidebar .contact-list li { + color: #b5b5b5; +} + +body.dark-mode .cdx-sidebar .contact-list li span { + color: #fdfdfd; +} + +body.dark-mode .cdx-sidebar .contact-list li a { + color: #b5b5b5; +} + +body.dark-mode .cdx-sidebar .media .media-body span { + color: #b5b5b5; +} + +body.dark-mode .coursesearch-grid .gridfilter-list li a { + color: #fdfdfd; + border-color: #401601; +} + +body.dark-mode .coursetab-detail .nav-tabs .nav-link { + border-color: #401601; + color: #fdfdfd; +} + +body.dark-mode .coursetab-detail .course-group .teacher-info .teacher-detail ul.teachermeta-list li { + color: #b5b5b5; +} + +body.dark-mode .team-group .progress-group h4 { + color: #fdfdfd; +} + +body.dark-mode .testi-grid { + background-color: #111630; +} + +body.dark-mode .testi-grid .media .media-body h6 { + color: #b5b5b5; +} + +body.dark-mode .testi-grid.testi-two { + border-color: #111630; +} + +body.dark-mode .whychoose-grid { + background-color: #111630; +} + +body.dark-mode .team-grid { + background-color: #111630; +} + +body.dark-mode .team-grid2 { + background-color: #111630; +} + +body.dark-mode .blog-grid { + background-color: #111630; +} + +body.dark-mode .blog-grid .blog-detail .post-meta { + border-color: #401601; +} + +body.dark-mode .blog-grid .blog-detail .post-meta li a span { + color: #b5b5b5; +} + +body.dark-mode .blogsingle-detail .blogpost-group .blog-data-list li a { + color: #b5b5b5; +} + +body.dark-mode .blogsingle-detail .blogpost-group h3 { + border-color: #401601; +} + +body.dark-mode .blogsingle-detail .blockqoute h6::before { + background-color: #401601; +} + +body.dark-mode .blogsingle-detail .blog-comments .comments-list li .media .media-body span { + color: #b5b5b5; +} + +body.dark-mode .blogsingle-detail .blog-comments .comments-list li .media .media-body .blog-actionlist li { + color: #b5b5b5; +} + +body.dark-mode .blogsingle-detail .blog-comments .comments-list>li+li { + border-color: #401601; +} + +body.dark-mode .career-grid { + background-color: #111630; +} + +body.dark-mode .career-grid .career-detail .careerdata-list { + border-color: #401601; +} + +body.dark-mode .career-grid .career-detail .careerdata-list li span { + color: #b5b5b5; +} + +body.dark-mode .career-group .topic-list li { + color: #b5b5b5; +} + +body.dark-mode .video-btn { + background-color: #111630; +} + +body.dark-mode .video-btn i { + color: #f45303; +} + +body.dark-mode .video-banner { + border-color: #111630; +} + +body.dark-mode .video-contain { + background-color: #111630; +} + +body.dark-mode .counter-grid.four { + background-color: #111630; +} + +body.dark-mode .counter-grid.three { + background-color: #18110f; +} + +body.dark-mode .discount-upcoming.three { + background-color: #100601; +} + +body.dark-mode .discount-upcoming.three .discount-wrap { + background-color: #111630; +} + +body.dark-mode .discount-upcoming.three .discount-detail h2 { + color: #fdfdfd; +} + +body.dark-mode .pricing-grid { + background-color: #111630; + box-shadow: 0 0 15px rgba(255, 255, 255, 0.1); +} + +body.dark-mode .pricing-grid .pricing-header { + border-color: #401601; +} + +body.dark-mode .pricing-grid .pricing-header .pricing-price { + color: #fdfdfd; +} + +body.dark-mode .pricing-grid .pricing-header .pricing-currency { + color: #fdfdfd; +} + +body.dark-mode .pricing-grid .pricing-header .month { + color: #b5b5b5; +} + +body.dark-mode .pricing-grid .pricing-body li { + color: #b5b5b5; +} + +body.dark-mode .cdx-faq .card .card-header { + background-color: #111630; +} + +body.dark-mode .cdx-faq .card .card-header a { + color: #fdfdfd; +} + +body.dark-mode .cdx-faq .card .card-header.active { + background-color: #f45303; +} + +body.dark-mode .cdx-faq .card .card-body { + color: #b5b5b5; +} + +body.dark-mode .work-step { + background-color: #111630; +} + +body.dark-mode .work-step h2 { + color: #fdfdfd; +} + +body.dark-mode .cdxshopping-cart .cart-tbl td { + border-color: #401601; + color: #b5b5b5; +} + +body.dark-mode .chekout-tbl tr td, +body.dark-mode .chekout-tbl tr th { + border-color: #401601 !important; +} + +body.dark-mode .chekout-tbl tr th { + color: #fdfdfd; +} + +body.dark-mode .chekout-tbl tr td { + color: #b5b5b5; +} + +body.dark-mode .policy-group .terms-list li { + color: #b5b5b5; +} + +body.dark-mode .contact-grid { + background-color: #111630; +} + +body.dark-mode .getin-touch .contact-form { + background-color: #111630; +} + +body.dark-mode .cookie-grid { + background-color: #111630; +} + +body.dark-mode .feathure-grid { + background-color: #111630; +} + +@media (min-width: 640px) { + .sm\:col-span-6 { + grid-column: span 6 / span 6; + } + .sm\:col-span-3 { + grid-column: span 3 / span 3; + } + .sm\:col-span-5 { + grid-column: span 5 / span 5; + } + .sm\:col-span-7 { + grid-column: span 7 / span 7; + } +} + +@media (min-width: 768px) { + .md\:col-span-6 { + grid-column: span 6 / span 6; + } + .md\:col-span-7 { + grid-column: span 7 / span 7; + } + .md\:col-span-5 { + grid-column: span 5 / span 5; + } + .md\:col-span-8 { + grid-column: span 8 / span 8; + } + .md\:col-span-4 { + grid-column: span 4 / span 4; + } + .md\:col-span-9 { + grid-column: span 9 / span 9; + } + .md\:col-span-10 { + grid-column: span 10 / span 10; + } + .md\:col-span-12 { + grid-column: span 12 / span 12; + } + .md\:col-start-7 { + grid-column-start: 7; + } + .md\:col-start-3 { + grid-column-start: 3; + } + .md\:col-start-2 { + grid-column-start: 2; + } +} + +@media (min-width: 1024px) { + .lg\:col-span-4 { + grid-column: span 4 / span 4; + } + .lg\:col-span-2 { + grid-column: span 2 / span 2; + } + .lg\:col-span-3 { + grid-column: span 3 / span 3; + } + .lg\:col-span-6 { + grid-column: span 6 / span 6; + } + .lg\:col-span-8 { + grid-column: span 8 / span 8; + } + .lg\:col-span-5 { + grid-column: span 5 / span 5; + } + .lg\:col-span-7 { + grid-column: span 7 / span 7; + } + .lg\:col-span-12 { + grid-column: span 12 / span 12; + } + .lg\:col-span-10 { + grid-column: span 10 / span 10; + } + .lg\:col-start-8 { + grid-column-start: 8; + } + .lg\:col-start-4 { + grid-column-start: 4; + } + .lg\:col-start-3 { + grid-column-start: 3; + } + .lg\:col-start-2 { + grid-column-start: 2; + } + .lg\:hidden { + display: none; + } +} + +@media (min-width: 1280px) { + .xl\:col-span-10 { + grid-column: span 10 / span 10; + } + .xl\:col-span-4 { + grid-column: span 4 / span 4; + } + .xl\:col-span-8 { + grid-column: span 8 / span 8; + } + .xl\:col-span-3 { + grid-column: span 3 / span 3; + } + .xl\:col-span-9 { + grid-column: span 9 / span 9; + } + .xl\:col-span-7 { + grid-column: span 7 / span 7; + } + .xl\:col-start-2 { + grid-column-start: 2; + } +} + +@media (min-width: 1536px) { + .\32xl\:col-span-4 { + grid-column: span 4 / span 4; + } + .\32xl\:col-span-8 { + grid-column: span 8 / span 8; + } + .\32xl\:col-span-6 { + grid-column: span 6 / span 6; + } + .\32xl\:col-span-3 { + grid-column: span 3 / span 3; + } + .\32xl\:col-span-10 { + grid-column: span 10 / span 10; + } + .\32xl\:col-span-7 { + grid-column: span 7 / span 7; + } + .\32xl\:col-span-5 { + grid-column: span 5 / span 5; + } + .\32xl\:col-start-9 { + grid-column-start: 9; + } + .\32xl\:col-start-4 { + grid-column-start: 4; + } + .\32xl\:col-start-2 { + grid-column-start: 2; + } +} +.andro_footer-buttons a { + display: inline-block; + width: 150px; +} \ No newline at end of file diff --git a/main/static/main/assets/css/vendor/animate.css b/main/static/main/assets/css/vendor/animate.css new file mode 100755 index 0000000..4f009c2 --- /dev/null +++ b/main/static/main/assets/css/vendor/animate.css @@ -0,0 +1,1114 @@ +/*! +Animate.css - http://daneden.me/animate +Licensed under the MIT license + +Copyright (c) 2013 Daniel Eden + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +@keyframes "bounce" { + 0%, + 20%, + 50%, + 80%, + 100% { + transform: translateY(0); + } + 40% { + transform: translateY(-30px); + } + 60% { + transform: translateY(-15px); + } +} + +@keyframes "flash" { + 0%, + 50%, + 100% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes "pulse" { + 0% { + transform: scale(1); + } + 50% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + } +} + +@keyframes "shake" { + 0%, + 100% { + transform: translateX(0); + } + 10%, + 30%, + 50%, + 70%, + 90% { + transform: translateX(-10px); + } + 20%, + 40%, + 60%, + 80% { + transform: translateX(10px); + } +} + +@keyframes "swing" { + 20% { + transform: rotate(15deg); + } + 40% { + transform: rotate(-10deg); + } + 60% { + transform: rotate(5deg); + } + 80% { + transform: rotate(-5deg); + } + 100% { + transform: rotate(0deg); + } +} + +@keyframes "tada" { + 0% { + transform: scale(1); + } + 10%, + 20% { + transform: scale(0.9) rotate(-3deg); + } + 30%, + 50%, + 70%, + 90% { + transform: scale(1.1) rotate(3deg); + } + 40%, + 60%, + 80% { + transform: scale(1.1) rotate(-3deg); + } + 100% { + transform: scale(1) rotate(0); + } +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes "wobble" { + 0% { + transform: translateX(0%); + } + 15% { + transform: translateX(-25%) rotate(-5deg); + } + 30% { + transform: translateX(20%) rotate(3deg); + } + 45% { + transform: translateX(-15%) rotate(-3deg); + } + 60% { + transform: translateX(10%) rotate(2deg); + } + 75% { + transform: translateX(-5%) rotate(-1deg); + } + 100% { + transform: translateX(0%); + } +} + +@keyframes "bounceIn" { + 0% { + opacity: 0; + transform: scale(0.3); + } + 50% { + opacity: 1; + transform: scale(1.05); + } + 70% { + transform: scale(0.9); + } + 100% { + transform: scale(1); + } +} + +@keyframes "bounceInDown" { + 0% { + opacity: 0; + transform: translateY(-2000px); + } + 60% { + opacity: 1; + transform: translateY(30px); + } + 80% { + transform: translateY(-10px); + } + 100% { + transform: translateY(0); + } +} + +@keyframes "bounceInLeft" { + 0% { + opacity: 0; + transform: translateX(-2000px); + } + 60% { + opacity: 1; + transform: translateX(30px); + } + 80% { + transform: translateX(-10px); + } + 100% { + transform: translateX(0); + } +} + +@keyframes "bounceInRight" { + 0% { + opacity: 0; + transform: translateX(2000px); + } + 60% { + opacity: 1; + transform: translateX(-30px); + } + 80% { + transform: translateX(10px); + } + 100% { + transform: translateX(0); + } +} + +@keyframes "bounceInUp" { + 0% { + opacity: 0; + transform: translateY(2000px); + } + 60% { + opacity: 1; + transform: translateY(-30px); + } + 80% { + transform: translateY(10px); + } + 100% { + transform: translateY(0); + } +} + +@keyframes "bounceOut" { + 0% { + transform: scale(1); + } + 25% { + transform: scale(0.95); + } + 50% { + opacity: 1; + transform: scale(1.1); + } + 100% { + opacity: 0; + transform: scale(0.3); + } +} + +@keyframes "bounceOutDown" { + 0% { + transform: translateY(0); + } + 20% { + opacity: 1; + transform: translateY(-20px); + } + 100% { + opacity: 0; + transform: translateY(2000px); + } +} + +@keyframes "bounceOutLeft" { + 0% { + transform: translateX(0); + } + 20% { + opacity: 1; + transform: translateX(20px); + } + 100% { + opacity: 0; + transform: translateX(-2000px); + } +} + +@keyframes "bounceOutRight" { + 0% { + transform: translateX(0); + } + 20% { + opacity: 1; + transform: translateX(-20px); + } + 100% { + opacity: 0; + transform: translateX(2000px); + } +} + +@keyframes "bounceOutUp" { + 0% { + transform: translateY(0); + } + 20% { + opacity: 1; + transform: translateY(20px); + } + 100% { + opacity: 0; + transform: translateY(-2000px); + } +} + +@keyframes "fadeIn" { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +@keyframes "fadeInDown" { + 0% { + opacity: 0; + transform: translateY(-20px); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes "fadeInDownBig" { + 0% { + opacity: 0; + transform: translateY(-2000px); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes "fadeInLeft" { + 0% { + opacity: 0; + transform: translateX(-20px); + } + 100% { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes "fadeInLeftBig" { + 0% { + opacity: 0; + transform: translateX(-2000px); + } + 100% { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes "fadeInRight" { + 0% { + opacity: 0; + transform: translateX(20px); + } + 100% { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes "fadeInRightBig" { + 0% { + opacity: 0; + transform: translateX(2000px); + } + 100% { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes "fadeInUp" { + 0% { + opacity: 0; + transform: translateY(20px); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes "fadeInUpBig" { + 0% { + opacity: 0; + transform: translateY(2000px); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes "fadeOut" { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +@keyframes "fadeOutDown" { + 0% { + opacity: 1; + transform: translateY(0); + } + 100% { + opacity: 0; + transform: translateY(20px); + } +} + +@keyframes "fadeOutDownBig" { + 0% { + opacity: 1; + transform: translateY(0); + } + 100% { + opacity: 0; + transform: translateY(2000px); + } +} + +@keyframes "fadeOutLeft" { + 0% { + opacity: 1; + transform: translateX(0); + } + 100% { + opacity: 0; + transform: translateX(-20px); + } +} + +@keyframes "fadeOutLeftBig" { + 0% { + opacity: 1; + transform: translateX(0); + } + 100% { + opacity: 0; + transform: translateX(-2000px); + } +} + +@keyframes "fadeOutRight" { + 0% { + opacity: 1; + transform: translateX(0); + } + 100% { + opacity: 0; + transform: translateX(20px); + } +} + +@keyframes "fadeOutRightBig" { + 0% { + opacity: 1; + transform: translateX(0); + } + 100% { + opacity: 0; + transform: translateX(2000px); + } +} + +@keyframes "fadeOutUp" { + 0% { + opacity: 1; + transform: translateY(0); + } + 100% { + opacity: 0; + transform: translateY(-20px); + } +} + +@keyframes "fadeOutUpBig" { + 0% { + opacity: 1; + transform: translateY(0); + } + 100% { + opacity: 0; + transform: translateY(-2000px); + } +} + +@keyframes "flip" { + 0% { + transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + animation-timing-function: ease-out; + } + 40% { + transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + animation-timing-function: ease-out; + } + 50% { + transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + animation-timing-function: ease-in; + } + 80% { + transform: perspective(400px) translateZ(0) rotateY(360deg) scale(0.95); + animation-timing-function: ease-in; + } + 100% { + transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + animation-timing-function: ease-in; + } +} + +@keyframes "flipInX" { + 0% { + transform: perspective(400px) rotateX(90deg); + opacity: 0; + } + 40% { + transform: perspective(400px) rotateX(-10deg); + } + 70% { + transform: perspective(400px) rotateX(10deg); + } + 100% { + transform: perspective(400px) rotateX(0deg); + opacity: 1; + } +} + +@keyframes "flipInY" { + 0% { + transform: perspective(400px) rotateY(90deg); + opacity: 0; + } + 40% { + transform: perspective(400px) rotateY(-10deg); + } + 70% { + transform: perspective(400px) rotateY(10deg); + } + 100% { + transform: perspective(400px) rotateY(0deg); + opacity: 1; + } +} + +@keyframes "flipOutX" { + 0% { + transform: perspective(400px) rotateX(0deg); + opacity: 1; + } + 100% { + transform: perspective(400px) rotateX(90deg); + opacity: 0; + } +} + +@keyframes "flipOutY" { + 0% { + transform: perspective(400px) rotateY(0deg); + opacity: 1; + } + 100% { + transform: perspective(400px) rotateY(90deg); + opacity: 0; + } +} + +@keyframes "lightSpeedIn" { + 0% { + transform: translateX(100%) skewX(-30deg); + opacity: 0; + } + 60% { + transform: translateX(-20%) skewX(30deg); + opacity: 1; + } + 80% { + transform: translateX(0%) skewX(-15deg); + opacity: 1; + } + 100% { + transform: translateX(0%) skewX(0deg); + opacity: 1; + } +} + +@keyframes "lightSpeedOut" { + 0% { + transform: translateX(0%) skewX(0deg); + opacity: 1; + } + 100% { + transform: translateX(100%) skewX(-30deg); + opacity: 0; + } +} + +@keyframes "rotateIn" { + 0% { + transform-origin: center center; + transform: rotate(-200deg); + opacity: 0; + } + 100% { + transform-origin: center center; + transform: rotate(0); + opacity: 1; + } +} + +@keyframes "rotateInDownLeft" { + 0% { + transform-origin: left bottom; + transform: rotate(-90deg); + opacity: 0; + } + 100% { + transform-origin: left bottom; + transform: rotate(0); + opacity: 1; + } +} + +@keyframes "rotateInDownRight" { + 0% { + transform-origin: right bottom; + transform: rotate(90deg); + opacity: 0; + } + 100% { + transform-origin: right bottom; + transform: rotate(0); + opacity: 1; + } +} + +@keyframes "rotateInUpLeft" { + 0% { + transform-origin: left bottom; + transform: rotate(90deg); + opacity: 0; + } + 100% { + transform-origin: left bottom; + transform: rotate(0); + opacity: 1; + } +} + +@keyframes "rotateInUpRight" { + 0% { + transform-origin: right bottom; + transform: rotate(-90deg); + opacity: 0; + } + 100% { + transform-origin: right bottom; + transform: rotate(0); + opacity: 1; + } +} + +@keyframes "rotateOut" { + 0% { + transform-origin: center center; + transform: rotate(0); + opacity: 1; + } + 100% { + transform-origin: center center; + transform: rotate(200deg); + opacity: 0; + } +} + +@keyframes "rotateOutDownLeft" { + 0% { + transform-origin: left bottom; + transform: rotate(0); + opacity: 1; + } + 100% { + transform-origin: left bottom; + transform: rotate(90deg); + opacity: 0; + } +} + +@keyframes "rotateOutDownRight" { + 0% { + transform-origin: right bottom; + transform: rotate(0); + opacity: 1; + } + 100% { + transform-origin: right bottom; + transform: rotate(-90deg); + opacity: 0; + } +} + +@keyframes "rotateOutUpLeft" { + 0% { + transform-origin: left bottom; + transform: rotate(0); + opacity: 1; + } + 100% { + transform-origin: left bottom; + transform: rotate(-90deg); + opacity: 0; + } +} + +@keyframes "rotateOutUpRight" { + 0% { + transform-origin: right bottom; + transform: rotate(0); + opacity: 1; + } + 100% { + transform-origin: right bottom; + transform: rotate(90deg); + opacity: 0; + } +} + +@keyframes "slideInDown" { + 0% { + opacity: 0; + transform: translateY(-2000px); + } + 100% { + transform: translateY(0); + } +} + +@keyframes "slideInLeft" { + 0% { + opacity: 0; + transform: translateX(-2000px); + } + 100% { + transform: translateX(0); + } +} + +@keyframes "slideInRight" { + 0% { + opacity: 0; + transform: translateX(2000px); + } + 100% { + transform: translateX(0); + } +} + +@keyframes "slideOutLeft" { + 0% { + transform: translateX(0); + } + 100% { + opacity: 0; + transform: translateX(-2000px); + } +} + +@keyframes "slideOutRight" { + 0% { + transform: translateX(0); + } + 100% { + opacity: 0; + transform: translateX(2000px); + } +} + +@keyframes "slideOutUp" { + 0% { + transform: translateY(0); + } + 100% { + opacity: 0; + transform: translateY(-2000px); + } +} + +@keyframes "hinge" { + 0% { + transform: rotate(0); + transform-origin: top left; + animation-timing-function: ease-in-out; + } + 20%, + 60% { + transform: rotate(80deg); + transform-origin: top left; + animation-timing-function: ease-in-out; + } + 40% { + transform: rotate(60deg); + transform-origin: top left; + animation-timing-function: ease-in-out; + } + 80% { + transform: rotate(60deg) translateY(0); + opacity: 1; + transform-origin: top left; + animation-timing-function: ease-in-out; + } + 100% { + transform: translateY(700px); + opacity: 0; + } +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes "rollIn" { + 0% { + opacity: 0; + transform: translateX(-100%) rotate(-120deg); + } + 100% { + opacity: 1; + transform: translateX(0px) rotate(0deg); + } +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes "rollOut" { + 0% { + opacity: 1; + transform: translateX(0px) rotate(0deg); + } + 100% { + opacity: 0; + transform: translateX(100%) rotate(120deg); + } +} + +.animated { + animation-duration: 1s; + animation-fill-mode: both; +} + +.animated.hinge { + animation-duration: 2s; +} + +.bounce { + animation-name: bounce; +} + +.flash { + animation-name: flash; +} + +.pulse { + animation-name: pulse; +} + +.shake { + animation-name: shake; +} + +.swing { + transform-origin: top center; + animation-name: swing; +} + +.tada { + animation-name: tada; +} + +.wobble { + animation-name: wobble; +} + +.bounceIn { + animation-name: bounceIn; +} + +.bounceInDown { + animation-name: bounceInDown; +} + +.bounceInLeft { + animation-name: bounceInLeft; +} + +.bounceInRight { + animation-name: bounceInRight; +} + +.bounceInUp { + animation-name: bounceInUp; +} + +.bounceOut { + animation-name: bounceOut; +} + +.bounceOutDown { + animation-name: bounceOutDown; +} + +.bounceOutLeft { + animation-name: bounceOutLeft; +} + +.bounceOutRight { + animation-name: bounceOutRight; +} + +.bounceOutUp { + animation-name: bounceOutUp; +} + +.fadeIn { + animation-name: fadeIn; +} + +.fadeInDown { + animation-name: fadeInDown; +} + +.fadeInDownBig { + animation-name: fadeInDownBig; +} + +.fadeInLeft { + animation-name: fadeInLeft; +} + +.fadeInLeftBig { + animation-name: fadeInLeftBig; +} + +.fadeInRight { + animation-name: fadeInRight; +} + +.fadeInRightBig { + animation-name: fadeInRightBig; +} + +.fadeInUp { + animation-name: fadeInUp; +} + +.fadeInUpBig { + animation-name: fadeInUpBig; +} + +.fadeOut { + animation-name: fadeOut; +} + +.fadeOutDown { + animation-name: fadeOutDown; +} + +.fadeOutDownBig { + animation-name: fadeOutDownBig; +} + +.fadeOutLeft { + animation-name: fadeOutLeft; +} + +.fadeOutLeftBig { + animation-name: fadeOutLeftBig; +} + +.fadeOutRight { + animation-name: fadeOutRight; +} + +.fadeOutRightBig { + animation-name: fadeOutRightBig; +} + +.fadeOutUp { + animation-name: fadeOutUp; +} + +.fadeOutUpBig { + animation-name: fadeOutUpBig; +} + +.animated.flip { + -webkit-backface-visibility: visible; + backface-visibility: visible; + animation-name: flip; +} + +.flipInX { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + animation-name: flipInX; +} + +.flipInY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + animation-name: flipInY; +} + +.flipOutX { + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; +} + +.flipOutY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + animation-name: flipOutY; +} + +.lightSpeedIn { + animation-name: lightSpeedIn; + animation-timing-function: ease-out; +} + +.lightSpeedOut { + animation-name: lightSpeedOut; + animation-timing-function: ease-in; +} + +.rotateIn { + animation-name: rotateIn; +} + +.rotateInDownLeft { + animation-name: rotateInDownLeft; +} + +.rotateInDownRight { + animation-name: rotateInDownRight; +} + +.rotateInUpLeft { + animation-name: rotateInUpLeft; +} + +.rotateInUpRight { + animation-name: rotateInUpRight; +} + +.rotateOut { + animation-name: rotateOut; +} + +.rotateOutDownLeft { + animation-name: rotateOutDownLeft; +} + +.rotateOutDownRight { + animation-name: rotateOutDownRight; +} + +.rotateOutUpLeft { + animation-name: rotateOutUpLeft; +} + +.rotateOutUpRight { + animation-name: rotateOutUpRight; +} + +.slideInDown { + animation-name: slideInDown; +} + +.slideInLeft { + animation-name: slideInLeft; +} + +.slideInRight { + animation-name: slideInRight; +} + +.slideOutLeft { + animation-name: slideOutLeft; +} + +.slideOutRight { + animation-name: slideOutRight; +} + +.slideOutUp { + animation-name: slideOutUp; +} + +.hinge { + animation-name: hinge; +} + +.rollIn { + animation-name: rollIn; +} + +.rollOut { + animation-name: rollOut; +} \ No newline at end of file diff --git a/main/static/main/assets/css/vendor/fancybox.css b/main/static/main/assets/css/vendor/fancybox.css new file mode 100755 index 0000000..4af1696 --- /dev/null +++ b/main/static/main/assets/css/vendor/fancybox.css @@ -0,0 +1,874 @@ +.carousel { + position: relative; + box-sizing: border-box; +} + +.carousel *, +.carousel *:before, +.carousel *:after { + box-sizing: inherit; +} + +.carousel.is-draggable { + cursor: move; + cursor: grab; +} + +.carousel.is-dragging { + cursor: move; + cursor: grabbing; +} + +.carousel__viewport { + position: relative; + overflow: hidden; + max-width: 100%; + max-height: 100%; +} + +.carousel__track { + display: flex; +} + +.carousel__slide { + flex: 0 0 auto; + width: var(--carousel-slide-width, 60%); + max-width: 100%; + padding: 1rem; + position: relative; + overflow-x: hidden; + overflow-y: auto; + overscroll-behavior: contain; +} + +.has-dots { + margin-bottom: calc(0.5rem + 22px); +} + +.carousel__dots { + margin: 0 auto; + padding: 0; + position: absolute; + top: calc(100% + 0.5rem); + left: 0; + right: 0; + display: flex; + justify-content: center; + list-style: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.carousel__dots .carousel__dot { + margin: 0; + padding: 0; + display: block; + position: relative; + width: 22px; + height: 22px; + cursor: pointer; +} + +.carousel__dots .carousel__dot:after { + content: ""; + width: 8px; + height: 8px; + border-radius: 50%; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background-color: currentColor; + opacity: 0.25; + transition: opacity 0.15s ease-in-out; +} + +.carousel__dots .carousel__dot.is-selected:after { + opacity: 1; +} + +.carousel__button { + width: var(--carousel-button-width, 48px); + height: var(--carousel-button-height, 48px); + padding: 0; + border: 0; + display: flex; + justify-content: center; + align-items: center; + pointer-events: all; + cursor: pointer; + color: var(--carousel-button-color, currentColor); + background: var(--carousel-button-bg, transparent); + border-radius: var(--carousel-button-border-radius, 50%); + box-shadow: var(--carousel-button-shadow, none); + transition: opacity 0.15s ease; +} + +.carousel__button.is-prev, +.carousel__button.is-next { + position: absolute; + top: 50%; + transform: translateY(-50%); +} + +.carousel__button.is-prev { + left: 10px; +} + +.carousel__button.is-next { + right: 10px; +} + +.carousel__button[disabled] { + cursor: default; + opacity: 0.3; +} + +.carousel__button svg { + width: var(--carousel-button-svg-width, 50%); + height: var(--carousel-button-svg-height, 50%); + fill: none; + stroke: currentColor; + stroke-width: var(--carousel-button-svg-stroke-width, 1.5); + stroke-linejoin: bevel; + stroke-linecap: round; + filter: var(--carousel-button-svg-filter, none); + pointer-events: none; +} + +html.with-fancybox { + scroll-behavior: auto; +} + +body.compensate-for-scrollbar { + overflow: hidden !important; + touch-action: none; +} + +.fancybox__container { + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + direction: ltr; + margin: 0; + padding: env(safe-area-inset-top, 0px) env(safe-area-inset-right, 0px) env(safe-area-inset-bottom, 0px) env(safe-area-inset-left, 0px); + box-sizing: border-box; + display: flex; + flex-direction: column; + color: var(--fancybox-color, #fff); + -webkit-tap-highlight-color: transparent; + overflow: hidden; + z-index: 1050; + outline: none; + transform-origin: top left; + --carousel-button-width: 48px; + --carousel-button-height: 48px; + --carousel-button-svg-width: 24px; + --carousel-button-svg-height: 24px; + --carousel-button-svg-stroke-width: 2.5; + --carousel-button-svg-filter: drop-shadow(1px 1px 1px rgba(0, 0, 0, 0.4)); +} + +.fancybox__container *, +.fancybox__container *::before, +.fancybox__container *::after { + box-sizing: inherit; +} + +.fancybox__container :focus { + outline: none; +} + +body:not(.is-using-mouse) .fancybox__container :focus { + box-shadow: 0 0 0 1px #fff, 0 0 0 2px var(--fancybox-accent-color, rgba(1, 210, 232, 0.94)); +} + +@media all and (min-width: 1024px) { + .fancybox__container { + --carousel-button-width: 48px; + --carousel-button-height: 48px; + --carousel-button-svg-width: 27px; + --carousel-button-svg-height: 27px; + } +} + +.fancybox__backdrop { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: -1; + background: var(--fancybox-bg, rgba(24, 24, 27, 0.92)); +} + +.fancybox__carousel { + position: relative; + flex: 1 1 auto; + min-height: 0; + height: 100%; + z-index: 10; +} + +.fancybox__carousel.has-dots { + margin-bottom: calc(0.5rem + 22px); +} + +.fancybox__viewport { + position: relative; + width: 100%; + height: 100%; + overflow: visible; + cursor: default; +} + +.fancybox__track { + display: flex; + height: 100%; +} + +.fancybox__slide { + flex: 0 0 auto; + width: 100%; + max-width: 100%; + margin: 0; + padding: 48px 8px 8px 8px; + position: relative; + overscroll-behavior: contain; + display: flex; + flex-direction: column; + outline: 0; + overflow: auto; + --carousel-button-width: 36px; + --carousel-button-height: 36px; + --carousel-button-svg-width: 22px; + --carousel-button-svg-height: 22px; +} + +.fancybox__slide::before, +.fancybox__slide::after { + content: ""; + flex: 0 0 0; + margin: auto; +} + +@media all and (min-width: 1024px) { + .fancybox__slide { + padding: 64px 100px; + } +} + +.fancybox__content { + margin: 0 env(safe-area-inset-right, 0px) 0 env(safe-area-inset-left, 0px); + padding: 36px; + color: var(--fancybox-content-color, #374151); + background: var(--fancybox-content-bg, #fff); + position: relative; + align-self: center; + display: flex; + flex-direction: column; + z-index: 20; +} + +.fancybox__content :focus:not(.carousel__button.is-close) { + outline: thin dotted; + box-shadow: none; +} + +.fancybox__caption { + align-self: center; + max-width: 100%; + margin: 0; + padding: 1rem 0 0 0; + line-height: 1.375; + color: var(--fancybox-color, currentColor); + visibility: visible; + cursor: auto; + flex-shrink: 0; + overflow-wrap: anywhere; +} + +.is-loading .fancybox__caption { + visibility: hidden; +} + +.fancybox__container>.carousel__dots { + top: 100%; + color: var(--fancybox-color, #fff); +} + +.fancybox__nav .carousel__button { + z-index: 40; +} + +.fancybox__nav .carousel__button.is-next { + right: 8px; +} + +@media all and (min-width: 1024px) { + .fancybox__nav .carousel__button.is-next { + right: 40px; + } +} + +.fancybox__nav .carousel__button.is-prev { + left: 8px; +} + +@media all and (min-width: 1024px) { + .fancybox__nav .carousel__button.is-prev { + left: 40px; + } +} + +.carousel__button.is-close { + position: absolute; + top: 8px; + right: 8px; + top: calc(env(safe-area-inset-top, 0px) + 8px); + right: calc(env(safe-area-inset-right, 0px) + 8px); + z-index: 40; +} + +@media all and (min-width: 1024px) { + .carousel__button.is-close { + right: 40px; + } +} + +.fancybox__content>.carousel__button.is-close { + position: absolute; + top: -40px; + right: 0; + color: var(--fancybox-color, #fff); +} + +.fancybox__no-click, +.fancybox__no-click button { + pointer-events: none; +} + +.fancybox__spinner { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 50px; + height: 50px; + color: var(--fancybox-color, currentColor); +} + +.fancybox__slide .fancybox__spinner { + cursor: pointer; + z-index: 1053; +} + +.fancybox__spinner svg { + animation: fancybox-rotate 2s linear infinite; + transform-origin: center center; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + margin: auto; + width: 100%; + height: 100%; +} + +.fancybox__spinner svg circle { + fill: none; + stroke-width: 2.75; + stroke-miterlimit: 10; + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; + animation: fancybox-dash 1.5s ease-in-out infinite; + stroke-linecap: round; + stroke: currentColor; +} + +@keyframes fancybox-rotate { + 100% { + transform: rotate(360deg); + } +} + +@keyframes fancybox-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; + } + 50% { + stroke-dasharray: 89, 200; + stroke-dashoffset: -35px; + } + 100% { + stroke-dasharray: 89, 200; + stroke-dashoffset: -124px; + } +} + +.fancybox__backdrop, +.fancybox__caption, +.fancybox__nav, +.carousel__dots, +.carousel__button.is-close { + opacity: var(--fancybox-opacity, 1); +} + +.fancybox__container.is-animated[aria-hidden=false] .fancybox__backdrop, +.fancybox__container.is-animated[aria-hidden=false] .fancybox__caption, +.fancybox__container.is-animated[aria-hidden=false] .fancybox__nav, +.fancybox__container.is-animated[aria-hidden=false] .carousel__dots, +.fancybox__container.is-animated[aria-hidden=false] .carousel__button.is-close { + animation: 0.15s ease backwards fancybox-fadeIn; +} + +.fancybox__container.is-animated.is-closing .fancybox__backdrop, +.fancybox__container.is-animated.is-closing .fancybox__caption, +.fancybox__container.is-animated.is-closing .fancybox__nav, +.fancybox__container.is-animated.is-closing .carousel__dots, +.fancybox__container.is-animated.is-closing .carousel__button.is-close { + animation: 0.15s ease both fancybox-fadeOut; +} + +.fancybox-fadeIn { + animation: 0.15s ease both fancybox-fadeIn; +} + +.fancybox-fadeOut { + animation: 0.1s ease both fancybox-fadeOut; +} + +.fancybox-zoomInUp { + animation: 0.2s ease both fancybox-zoomInUp; +} + +.fancybox-zoomOutDown { + animation: 0.15s ease both fancybox-zoomOutDown; +} + +.fancybox-throwOutUp { + animation: 0.15s ease both fancybox-throwOutUp; +} + +.fancybox-throwOutDown { + animation: 0.15s ease both fancybox-throwOutDown; +} + +@keyframes fancybox-fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes fancybox-fadeOut { + to { + opacity: 0; + } +} + +@keyframes fancybox-zoomInUp { + from { + transform: scale(0.97) translate3d(0, 16px, 0); + opacity: 0; + } + to { + transform: scale(1) translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes fancybox-zoomOutDown { + to { + transform: scale(0.97) translate3d(0, 16px, 0); + opacity: 0; + } +} + +@keyframes fancybox-throwOutUp { + to { + transform: translate3d(0, -30%, 0); + opacity: 0; + } +} + +@keyframes fancybox-throwOutDown { + to { + transform: translate3d(0, 30%, 0); + opacity: 0; + } +} + +.fancybox__carousel .carousel__slide { + scrollbar-width: thin; + scrollbar-color: #ccc rgba(255, 255, 255, 0.1); +} + +.fancybox__carousel .carousel__slide::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +.fancybox__carousel .carousel__slide::-webkit-scrollbar-track { + background-color: rgba(255, 255, 255, 0.1); +} + +.fancybox__carousel .carousel__slide::-webkit-scrollbar-thumb { + background-color: #ccc; + border-radius: 2px; + box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.2); +} + +.fancybox__carousel.is-draggable .fancybox__slide, +.fancybox__carousel.is-draggable .fancybox__slide .fancybox__content { + cursor: move; + cursor: grab; +} + +.fancybox__carousel.is-dragging .fancybox__slide, +.fancybox__carousel.is-dragging .fancybox__slide .fancybox__content { + cursor: move; + cursor: grabbing; +} + +.fancybox__carousel .fancybox__slide .fancybox__content { + cursor: auto; +} + +.fancybox__carousel .fancybox__slide.can-zoom_in .fancybox__content { + cursor: zoom-in; +} + +.fancybox__carousel .fancybox__slide.can-zoom_out .fancybox__content { + cursor: zoom-out; +} + +.fancybox__carousel .fancybox__slide.is-draggable .fancybox__content { + cursor: move; + cursor: grab; +} + +.fancybox__carousel .fancybox__slide.is-dragging .fancybox__content { + cursor: move; + cursor: grabbing; +} + +.fancybox__image { + transform-origin: 0 0; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + transition: none; +} + +.has-image .fancybox__content { + padding: 0; + background: transparent; + min-height: 1px; +} + +.is-closing .has-image .fancybox__content { + overflow: visible; +} + +.has-image[data-image-fit=contain] { + overflow: visible; + touch-action: none; +} + +.has-image[data-image-fit=contain] .fancybox__content { + flex-direction: row; + flex-wrap: wrap; +} + +.has-image[data-image-fit=contain] .fancybox__image { + max-width: 100%; + max-height: 100%; + -o-object-fit: contain; + object-fit: contain; +} + +.has-image[data-image-fit=contain-w] { + overflow-x: hidden; + overflow-y: auto; +} + +.has-image[data-image-fit=contain-w] .fancybox__content { + min-height: auto; +} + +.has-image[data-image-fit=contain-w] .fancybox__image { + max-width: 100%; + height: auto; +} + +.has-image[data-image-fit=cover] { + overflow: visible; + touch-action: none; +} + +.has-image[data-image-fit=cover] .fancybox__content { + width: 100%; + height: 100%; +} + +.has-image[data-image-fit=cover] .fancybox__image { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} + +.fancybox__carousel .fancybox__slide.has-iframe .fancybox__content, +.fancybox__carousel .fancybox__slide.has-map .fancybox__content, +.fancybox__carousel .fancybox__slide.has-pdf .fancybox__content, +.fancybox__carousel .fancybox__slide.has-video .fancybox__content, +.fancybox__carousel .fancybox__slide.has-html5video .fancybox__content { + max-width: 100%; + flex-shrink: 1; + min-height: 1px; + overflow: visible; +} + +.fancybox__carousel .fancybox__slide.has-iframe .fancybox__content, +.fancybox__carousel .fancybox__slide.has-map .fancybox__content, +.fancybox__carousel .fancybox__slide.has-pdf .fancybox__content { + width: 100%; + height: 80%; +} + +.fancybox__carousel .fancybox__slide.has-video .fancybox__content, +.fancybox__carousel .fancybox__slide.has-html5video .fancybox__content { + width: 960px; + height: 540px; + max-width: 100%; + max-height: 100%; +} + +.fancybox__carousel .fancybox__slide.has-map .fancybox__content, +.fancybox__carousel .fancybox__slide.has-pdf .fancybox__content, +.fancybox__carousel .fancybox__slide.has-video .fancybox__content, +.fancybox__carousel .fancybox__slide.has-html5video .fancybox__content { + padding: 0; + background: rgba(24, 24, 27, 0.9); + color: #fff; +} + +.fancybox__carousel .fancybox__slide.has-map .fancybox__content { + background: #e5e3df; +} + +.fancybox__html5video, +.fancybox__iframe { + border: 0; + display: block; + height: 100%; + width: 100%; + background: transparent; +} + +.fancybox-placeholder { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +.fancybox__thumbs { + flex: 0 0 auto; + position: relative; + padding: 0px 3px; + opacity: var(--fancybox-opacity, 1); +} + +.fancybox__container.is-animated[aria-hidden=false] .fancybox__thumbs { + animation: 0.15s ease-in backwards fancybox-fadeIn; +} + +.fancybox__container.is-animated.is-closing .fancybox__thumbs { + opacity: 0; +} + +.fancybox__thumbs .carousel__slide { + flex: 0 0 auto; + width: var(--fancybox-thumbs-width, 96px); + margin: 0; + padding: 8px 3px; + box-sizing: content-box; + display: flex; + align-items: center; + justify-content: center; + overflow: visible; + cursor: pointer; +} + +.fancybox__thumbs .carousel__slide .fancybox__thumb::after { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + border-width: 5px; + border-style: solid; + border-color: var(--fancybox-accent-color, rgba(34, 213, 233, 0.96)); + opacity: 0; + transition: opacity 0.15s ease; + border-radius: var(--fancybox-thumbs-border-radius, 4px); +} + +.fancybox__thumbs .carousel__slide.is-nav-selected .fancybox__thumb::after { + opacity: 0.92; +} + +.fancybox__thumbs .carousel__slide>* { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.fancybox__thumb { + position: relative; + width: 100%; + padding-top: calc(100% / (var(--fancybox-thumbs-ratio, 1.5))); + background-size: cover; + background-position: center center; + background-color: rgba(255, 255, 255, 0.1); + background-repeat: no-repeat; + border-radius: var(--fancybox-thumbs-border-radius, 4px); +} + +.fancybox__toolbar { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 20; + background: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.006) 8.1%, rgba(0, 0, 0, 0.021) 15.5%, rgba(0, 0, 0, 0.046) 22.5%, rgba(0, 0, 0, 0.077) 29%, rgba(0, 0, 0, 0.114) 35.3%, rgba(0, 0, 0, 0.155) 41.2%, rgba(0, 0, 0, 0.198) 47.1%, rgba(0, 0, 0, 0.242) 52.9%, rgba(0, 0, 0, 0.285) 58.8%, rgba(0, 0, 0, 0.326) 64.7%, rgba(0, 0, 0, 0.363) 71%, rgba(0, 0, 0, 0.394) 77.5%, rgba(0, 0, 0, 0.419) 84.5%, rgba(0, 0, 0, 0.434) 91.9%, rgba(0, 0, 0, 0.44) 100%); + padding: 0; + touch-action: none; + display: flex; + justify-content: space-between; + --carousel-button-svg-width: 20px; + --carousel-button-svg-height: 20px; + opacity: var(--fancybox-opacity, 1); + text-shadow: var(--fancybox-toolbar-text-shadow, 1px 1px 1px rgba(0, 0, 0, 0.4)); +} + +@media all and (min-width: 1024px) { + .fancybox__toolbar { + padding: 8px; + } +} + +.fancybox__container.is-animated[aria-hidden=false] .fancybox__toolbar { + animation: 0.15s ease-in backwards fancybox-fadeIn; +} + +.fancybox__container.is-animated.is-closing .fancybox__toolbar { + opacity: 0; +} + +.fancybox__toolbar__items { + display: flex; +} + +.fancybox__toolbar__items--left { + margin-right: auto; +} + +.fancybox__toolbar__items--center { + position: absolute; + left: 50%; + transform: translateX(-50%); +} + +.fancybox__toolbar__items--right { + margin-left: auto; +} + +@media (max-width: 640px) { + .fancybox__toolbar__items--center:not(:last-child) { + display: none; + } +} + +.fancybox__counter { + min-width: 72px; + padding: 0 10px; + line-height: var(--carousel-button-height, 48px); + text-align: center; + font-size: 17px; + font-variant-numeric: tabular-nums; + -webkit-font-smoothing: subpixel-antialiased; +} + +.fancybox__progress { + background: var(--fancybox-accent-color, rgba(34, 213, 233, 0.96)); + height: 3px; + left: 0; + position: absolute; + right: 0; + top: 0; + transform: scaleX(0); + transform-origin: 0; + transition-property: transform; + transition-timing-function: linear; + z-index: 30; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.fancybox__container:-webkit-full-screen::backdrop { + opacity: 0; +} + +.fancybox__container:fullscreen::backdrop { + opacity: 0; +} + +.fancybox__button--fullscreen g:nth-child(2) { + display: none; +} + +.fancybox__container:-webkit-full-screen .fancybox__button--fullscreen g:nth-child(1) { + display: none; +} + +.fancybox__container:fullscreen .fancybox__button--fullscreen g:nth-child(1) { + display: none; +} + +.fancybox__container:-webkit-full-screen .fancybox__button--fullscreen g:nth-child(2) { + display: block; +} + +.fancybox__container:fullscreen .fancybox__button--fullscreen g:nth-child(2) { + display: block; +} + +.fancybox__button--slideshow g:nth-child(2) { + display: none; +} + +.fancybox__container.has-slideshow .fancybox__button--slideshow g:nth-child(1) { + display: none; +} + +.fancybox__container.has-slideshow .fancybox__button--slideshow g:nth-child(2) { + display: block; +} \ No newline at end of file diff --git a/main/static/main/assets/css/vendor/font-awesome.css b/main/static/main/assets/css/vendor/font-awesome.css new file mode 100755 index 0000000..288068c --- /dev/null +++ b/main/static/main/assets/css/vendor/font-awesome.css @@ -0,0 +1,3030 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ + +/* FONT PATH + * -------------------------- */ + +@font-face { + font-family: "FontAwesome"; + src: url("../../fonts/font-awesome/fontawesome-webfont.eot?v=4.7.0"); + src: url("../../fonts/font-awesome/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"), url("../../fonts/font-awesome/fontawesome-webfont.woff2?v=4.7.0") format("woff2"), url("../../fonts/font-awesome/fontawesome-webfont.woff?v=4.7.0") format("woff"), url("../../fonts/font-awesome/fontawesome-webfont.ttf?v=4.7.0") format("truetype"), url("../../fonts/font-awesome/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg"); + font-weight: normal; + font-style: normal; +} + +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* makes the font 33% larger relative to the icon container */ + +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} + +.fa-2x { + font-size: 2em; +} + +.fa-3x { + font-size: 3em; +} + +.fa-4x { + font-size: 4em; +} + +.fa-5x { + font-size: 5em; +} + +.fa-fw { + width: 1.28571429em; + text-align: center; +} + +.fa-ul { + -webkit-padding-start: 0; + padding-inline-start: 0; + margin-left: 2.14285714em; + list-style-type: none; +} + +.fa-ul>li { + position: relative; +} + +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} + +.fa-li.fa-lg { + left: -1.85714286em; +} + +.fa-border { + padding: 0.2em 0.25em 0.15em; + border: solid 0.08em #eeeeee; + border-radius: 0.1em; +} + +.fa-pull-left { + float: left; +} + +.fa-pull-right { + float: right; +} + +.fa.fa-pull-left { + margin-right: 0.3em; +} + +.fa.fa-pull-right { + margin-left: 0.3em; +} + +/* Deprecated as of 4.4.0 */ + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.fa.pull-left { + margin-right: 0.3em; +} + +.fa.pull-right { + margin-left: 0.3em; +} + +.fa-spin { + animation: fa-spin 2s infinite linear; +} + +.fa-pulse { + animation: fa-spin 1s infinite steps(8); +} + +@keyframes fa-spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} + +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + transform: rotate(90deg); +} + +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + transform: rotate(180deg); +} + +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + transform: rotate(270deg); +} + +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + transform: scale(-1, 1); +} + +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + transform: scale(1, -1); +} + +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} + +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} + +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} + +.fa-stack-1x { + line-height: inherit; +} + +.fa-stack-2x { + font-size: 2em; +} + +.fa-inverse { + color: #ffffff; +} + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ + +.fa-glass:before { + content: "\f000"; +} + +.fa-music:before { + content: "\f001"; +} + +.fa-search:before { + content: "\f002"; +} + +.fa-envelope-o:before { + content: "\f003"; +} + +.fa-heart:before { + content: "\f004"; +} + +.fa-star:before { + content: "\f005"; +} + +.fa-star-o:before { + content: "\f006"; +} + +.fa-user:before { + content: "\f007"; +} + +.fa-film:before { + content: "\f008"; +} + +.fa-th-large:before { + content: "\f009"; +} + +.fa-th:before { + content: "\f00a"; +} + +.fa-th-list:before { + content: "\f00b"; +} + +.fa-check:before { + content: "\f00c"; +} + +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} + +.fa-search-plus:before { + content: "\f00e"; +} + +.fa-search-minus:before { + content: "\f010"; +} + +.fa-power-off:before { + content: "\f011"; +} + +.fa-signal:before { + content: "\f012"; +} + +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} + +.fa-trash-o:before { + content: "\f014"; +} + +.fa-home:before { + content: "\f015"; +} + +.fa-file-o:before { + content: "\f016"; +} + +.fa-clock-o:before { + content: "\f017"; +} + +.fa-road:before { + content: "\f018"; +} + +.fa-download:before { + content: "\f019"; +} + +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} + +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} + +.fa-inbox:before { + content: "\f01c"; +} + +.fa-play-circle-o:before { + content: "\f01d"; +} + +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} + +.fa-refresh:before { + content: "\f021"; +} + +.fa-list-alt:before { + content: "\f022"; +} + +.fa-lock:before { + content: "\f023"; +} + +.fa-flag:before { + content: "\f024"; +} + +.fa-headphones:before { + content: "\f025"; +} + +.fa-volume-off:before { + content: "\f026"; +} + +.fa-volume-down:before { + content: "\f027"; +} + +.fa-volume-up:before { + content: "\f028"; +} + +.fa-qrcode:before { + content: "\f029"; +} + +.fa-barcode:before { + content: "\f02a"; +} + +.fa-tag:before { + content: "\f02b"; +} + +.fa-tags:before { + content: "\f02c"; +} + +.fa-book:before { + content: "\f02d"; +} + +.fa-bookmark:before { + content: "\f02e"; +} + +.fa-print:before { + content: "\f02f"; +} + +.fa-camera:before { + content: "\f030"; +} + +.fa-font:before { + content: "\f031"; +} + +.fa-bold:before { + content: "\f032"; +} + +.fa-italic:before { + content: "\f033"; +} + +.fa-text-height:before { + content: "\f034"; +} + +.fa-text-width:before { + content: "\f035"; +} + +.fa-align-left:before { + content: "\f036"; +} + +.fa-align-center:before { + content: "\f037"; +} + +.fa-align-right:before { + content: "\f038"; +} + +.fa-align-justify:before { + content: "\f039"; +} + +.fa-list:before { + content: "\f03a"; +} + +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} + +.fa-indent:before { + content: "\f03c"; +} + +.fa-video-camera:before { + content: "\f03d"; +} + +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} + +.fa-pencil:before { + content: "\f040"; +} + +.fa-map-marker:before { + content: "\f041"; +} + +.fa-adjust:before { + content: "\f042"; +} + +.fa-tint:before { + content: "\f043"; +} + +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} + +.fa-share-square-o:before { + content: "\f045"; +} + +.fa-check-square-o:before { + content: "\f046"; +} + +.fa-arrows:before { + content: "\f047"; +} + +.fa-step-backward:before { + content: "\f048"; +} + +.fa-fast-backward:before { + content: "\f049"; +} + +.fa-backward:before { + content: "\f04a"; +} + +.fa-play:before { + content: "\f04b"; +} + +.fa-pause:before { + content: "\f04c"; +} + +.fa-stop:before { + content: "\f04d"; +} + +.fa-forward:before { + content: "\f04e"; +} + +.fa-fast-forward:before { + content: "\f050"; +} + +.fa-step-forward:before { + content: "\f051"; +} + +.fa-eject:before { + content: "\f052"; +} + +.fa-chevron-left:before { + content: "\f053"; +} + +.fa-chevron-right:before { + content: "\f054"; +} + +.fa-plus-circle:before { + content: "\f055"; +} + +.fa-minus-circle:before { + content: "\f056"; +} + +.fa-times-circle:before { + content: "\f057"; +} + +.fa-check-circle:before { + content: "\f058"; +} + +.fa-question-circle:before { + content: "\f059"; +} + +.fa-info-circle:before { + content: "\f05a"; +} + +.fa-crosshairs:before { + content: "\f05b"; +} + +.fa-times-circle-o:before { + content: "\f05c"; +} + +.fa-check-circle-o:before { + content: "\f05d"; +} + +.fa-ban:before { + content: "\f05e"; +} + +.fa-arrow-left:before { + content: "\f060"; +} + +.fa-arrow-right:before { + content: "\f061"; +} + +.fa-arrow-up:before { + content: "\f062"; +} + +.fa-arrow-down:before { + content: "\f063"; +} + +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} + +.fa-expand:before { + content: "\f065"; +} + +.fa-compress:before { + content: "\f066"; +} + +.fa-plus:before { + content: "\f067"; +} + +.fa-minus:before { + content: "\f068"; +} + +.fa-asterisk:before { + content: "\f069"; +} + +.fa-exclamation-circle:before { + content: "\f06a"; +} + +.fa-gift:before { + content: "\f06b"; +} + +.fa-leaf:before { + content: "\f06c"; +} + +.fa-fire:before { + content: "\f06d"; +} + +.fa-eye:before { + content: "\f06e"; +} + +.fa-eye-slash:before { + content: "\f070"; +} + +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} + +.fa-plane:before { + content: "\f072"; +} + +.fa-calendar:before { + content: "\f073"; +} + +.fa-random:before { + content: "\f074"; +} + +.fa-comment:before { + content: "\f075"; +} + +.fa-magnet:before { + content: "\f076"; +} + +.fa-chevron-up:before { + content: "\f077"; +} + +.fa-chevron-down:before { + content: "\f078"; +} + +.fa-retweet:before { + content: "\f079"; +} + +.fa-shopping-cart:before { + content: "\f07a"; +} + +.fa-folder:before { + content: "\f07b"; +} + +.fa-folder-open:before { + content: "\f07c"; +} + +.fa-arrows-v:before { + content: "\f07d"; +} + +.fa-arrows-h:before { + content: "\f07e"; +} + +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} + +.fa-twitter-square:before { + content: "\f081"; +} + +.fa-facebook-square:before { + content: "\f082"; +} + +.fa-camera-retro:before { + content: "\f083"; +} + +.fa-key:before { + content: "\f084"; +} + +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} + +.fa-comments:before { + content: "\f086"; +} + +.fa-thumbs-o-up:before { + content: "\f087"; +} + +.fa-thumbs-o-down:before { + content: "\f088"; +} + +.fa-star-half:before { + content: "\f089"; +} + +.fa-heart-o:before { + content: "\f08a"; +} + +.fa-sign-out:before { + content: "\f08b"; +} + +.fa-linkedin-square:before { + content: "\f08c"; +} + +.fa-thumb-tack:before { + content: "\f08d"; +} + +.fa-external-link:before { + content: "\f08e"; +} + +.fa-sign-in:before { + content: "\f090"; +} + +.fa-trophy:before { + content: "\f091"; +} + +.fa-github-square:before { + content: "\f092"; +} + +.fa-upload:before { + content: "\f093"; +} + +.fa-lemon-o:before { + content: "\f094"; +} + +.fa-phone:before { + content: "\f095"; +} + +.fa-square-o:before { + content: "\f096"; +} + +.fa-bookmark-o:before { + content: "\f097"; +} + +.fa-phone-square:before { + content: "\f098"; +} + +.fa-twitter:before { + content: "\f099"; +} + +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} + +.fa-github:before { + content: "\f09b"; +} + +.fa-unlock:before { + content: "\f09c"; +} + +.fa-credit-card:before { + content: "\f09d"; +} + +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} + +.fa-hdd-o:before { + content: "\f0a0"; +} + +.fa-bullhorn:before { + content: "\f0a1"; +} + +.fa-bell:before { + content: "\f0f3"; +} + +.fa-certificate:before { + content: "\f0a3"; +} + +.fa-hand-o-right:before { + content: "\f0a4"; +} + +.fa-hand-o-left:before { + content: "\f0a5"; +} + +.fa-hand-o-up:before { + content: "\f0a6"; +} + +.fa-hand-o-down:before { + content: "\f0a7"; +} + +.fa-arrow-circle-left:before { + content: "\f0a8"; +} + +.fa-arrow-circle-right:before { + content: "\f0a9"; +} + +.fa-arrow-circle-up:before { + content: "\f0aa"; +} + +.fa-arrow-circle-down:before { + content: "\f0ab"; +} + +.fa-globe:before { + content: "\f0ac"; +} + +.fa-wrench:before { + content: "\f0ad"; +} + +.fa-tasks:before { + content: "\f0ae"; +} + +.fa-filter:before { + content: "\f0b0"; +} + +.fa-briefcase:before { + content: "\f0b1"; +} + +.fa-arrows-alt:before { + content: "\f0b2"; +} + +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} + +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} + +.fa-cloud:before { + content: "\f0c2"; +} + +.fa-flask:before { + content: "\f0c3"; +} + +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} + +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} + +.fa-paperclip:before { + content: "\f0c6"; +} + +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} + +.fa-square:before { + content: "\f0c8"; +} + +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} + +.fa-list-ul:before { + content: "\f0ca"; +} + +.fa-list-ol:before { + content: "\f0cb"; +} + +.fa-strikethrough:before { + content: "\f0cc"; +} + +.fa-underline:before { + content: "\f0cd"; +} + +.fa-table:before { + content: "\f0ce"; +} + +.fa-magic:before { + content: "\f0d0"; +} + +.fa-truck:before { + content: "\f0d1"; +} + +.fa-pinterest:before { + content: "\f0d2"; +} + +.fa-pinterest-square:before { + content: "\f0d3"; +} + +.fa-google-plus-square:before { + content: "\f0d4"; +} + +.fa-google-plus:before { + content: "\f0d5"; +} + +.fa-money:before { + content: "\f0d6"; +} + +.fa-caret-down:before { + content: "\f0d7"; +} + +.fa-caret-up:before { + content: "\f0d8"; +} + +.fa-caret-left:before { + content: "\f0d9"; +} + +.fa-caret-right:before { + content: "\f0da"; +} + +.fa-columns:before { + content: "\f0db"; +} + +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} + +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} + +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} + +.fa-envelope:before { + content: "\f0e0"; +} + +.fa-linkedin:before { + content: "\f0e1"; +} + +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} + +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} + +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} + +.fa-comment-o:before { + content: "\f0e5"; +} + +.fa-comments-o:before { + content: "\f0e6"; +} + +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} + +.fa-sitemap:before { + content: "\f0e8"; +} + +.fa-umbrella:before { + content: "\f0e9"; +} + +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} + +.fa-lightbulb-o:before { + content: "\f0eb"; +} + +.fa-exchange:before { + content: "\f0ec"; +} + +.fa-cloud-download:before { + content: "\f0ed"; +} + +.fa-cloud-upload:before { + content: "\f0ee"; +} + +.fa-user-md:before { + content: "\f0f0"; +} + +.fa-stethoscope:before { + content: "\f0f1"; +} + +.fa-suitcase:before { + content: "\f0f2"; +} + +.fa-bell-o:before { + content: "\f0a2"; +} + +.fa-coffee:before { + content: "\f0f4"; +} + +.fa-cutlery:before { + content: "\f0f5"; +} + +.fa-file-text-o:before { + content: "\f0f6"; +} + +.fa-building-o:before { + content: "\f0f7"; +} + +.fa-hospital-o:before { + content: "\f0f8"; +} + +.fa-ambulance:before { + content: "\f0f9"; +} + +.fa-medkit:before { + content: "\f0fa"; +} + +.fa-fighter-jet:before { + content: "\f0fb"; +} + +.fa-beer:before { + content: "\f0fc"; +} + +.fa-h-square:before { + content: "\f0fd"; +} + +.fa-plus-square:before { + content: "\f0fe"; +} + +.fa-angle-double-left:before { + content: "\f100"; +} + +.fa-angle-double-right:before { + content: "\f101"; +} + +.fa-angle-double-up:before { + content: "\f102"; +} + +.fa-angle-double-down:before { + content: "\f103"; +} + +.fa-angle-left:before { + content: "\f104"; +} + +.fa-angle-right:before { + content: "\f105"; +} + +.fa-angle-up:before { + content: "\f106"; +} + +.fa-angle-down:before { + content: "\f107"; +} + +.fa-desktop:before { + content: "\f108"; +} + +.fa-laptop:before { + content: "\f109"; +} + +.fa-tablet:before { + content: "\f10a"; +} + +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} + +.fa-circle-o:before { + content: "\f10c"; +} + +.fa-quote-left:before { + content: "\f10d"; +} + +.fa-quote-right:before { + content: "\f10e"; +} + +.fa-spinner:before { + content: "\f110"; +} + +.fa-circle:before { + content: "\f111"; +} + +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} + +.fa-github-alt:before { + content: "\f113"; +} + +.fa-folder-o:before { + content: "\f114"; +} + +.fa-folder-open-o:before { + content: "\f115"; +} + +.fa-smile-o:before { + content: "\f118"; +} + +.fa-frown-o:before { + content: "\f119"; +} + +.fa-meh-o:before { + content: "\f11a"; +} + +.fa-gamepad:before { + content: "\f11b"; +} + +.fa-keyboard-o:before { + content: "\f11c"; +} + +.fa-flag-o:before { + content: "\f11d"; +} + +.fa-flag-checkered:before { + content: "\f11e"; +} + +.fa-terminal:before { + content: "\f120"; +} + +.fa-code:before { + content: "\f121"; +} + +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} + +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} + +.fa-location-arrow:before { + content: "\f124"; +} + +.fa-crop:before { + content: "\f125"; +} + +.fa-code-fork:before { + content: "\f126"; +} + +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} + +.fa-question:before { + content: "\f128"; +} + +.fa-info:before { + content: "\f129"; +} + +.fa-exclamation:before { + content: "\f12a"; +} + +.fa-superscript:before { + content: "\f12b"; +} + +.fa-subscript:before { + content: "\f12c"; +} + +.fa-eraser:before { + content: "\f12d"; +} + +.fa-puzzle-piece:before { + content: "\f12e"; +} + +.fa-microphone:before { + content: "\f130"; +} + +.fa-microphone-slash:before { + content: "\f131"; +} + +.fa-shield:before { + content: "\f132"; +} + +.fa-calendar-o:before { + content: "\f133"; +} + +.fa-fire-extinguisher:before { + content: "\f134"; +} + +.fa-rocket:before { + content: "\f135"; +} + +.fa-maxcdn:before { + content: "\f136"; +} + +.fa-chevron-circle-left:before { + content: "\f137"; +} + +.fa-chevron-circle-right:before { + content: "\f138"; +} + +.fa-chevron-circle-up:before { + content: "\f139"; +} + +.fa-chevron-circle-down:before { + content: "\f13a"; +} + +.fa-html5:before { + content: "\f13b"; +} + +.fa-css3:before { + content: "\f13c"; +} + +.fa-anchor:before { + content: "\f13d"; +} + +.fa-unlock-alt:before { + content: "\f13e"; +} + +.fa-bullseye:before { + content: "\f140"; +} + +.fa-ellipsis-h:before { + content: "\f141"; +} + +.fa-ellipsis-v:before { + content: "\f142"; +} + +.fa-rss-square:before { + content: "\f143"; +} + +.fa-play-circle:before { + content: "\f144"; +} + +.fa-ticket:before { + content: "\f145"; +} + +.fa-minus-square:before { + content: "\f146"; +} + +.fa-minus-square-o:before { + content: "\f147"; +} + +.fa-level-up:before { + content: "\f148"; +} + +.fa-level-down:before { + content: "\f149"; +} + +.fa-check-square:before { + content: "\f14a"; +} + +.fa-pencil-square:before { + content: "\f14b"; +} + +.fa-external-link-square:before { + content: "\f14c"; +} + +.fa-share-square:before { + content: "\f14d"; +} + +.fa-compass:before { + content: "\f14e"; +} + +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} + +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} + +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} + +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} + +.fa-gbp:before { + content: "\f154"; +} + +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} + +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} + +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} + +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} + +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} + +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} + +.fa-file:before { + content: "\f15b"; +} + +.fa-file-text:before { + content: "\f15c"; +} + +.fa-sort-alpha-asc:before { + content: "\f15d"; +} + +.fa-sort-alpha-desc:before { + content: "\f15e"; +} + +.fa-sort-amount-asc:before { + content: "\f160"; +} + +.fa-sort-amount-desc:before { + content: "\f161"; +} + +.fa-sort-numeric-asc:before { + content: "\f162"; +} + +.fa-sort-numeric-desc:before { + content: "\f163"; +} + +.fa-thumbs-up:before { + content: "\f164"; +} + +.fa-thumbs-down:before { + content: "\f165"; +} + +.fa-youtube-square:before { + content: "\f166"; +} + +.fa-youtube:before { + content: "\f167"; +} + +.fa-xing:before { + content: "\f168"; +} + +.fa-xing-square:before { + content: "\f169"; +} + +.fa-youtube-play:before { + content: "\f16a"; +} + +.fa-dropbox:before { + content: "\f16b"; +} + +.fa-stack-overflow:before { + content: "\f16c"; +} + +.fa-instagram:before { + content: "\f16d"; +} + +.fa-flickr:before { + content: "\f16e"; +} + +.fa-adn:before { + content: "\f170"; +} + +.fa-bitbucket:before { + content: "\f171"; +} + +.fa-bitbucket-square:before { + content: "\f172"; +} + +.fa-tumblr:before { + content: "\f173"; +} + +.fa-tumblr-square:before { + content: "\f174"; +} + +.fa-long-arrow-down:before { + content: "\f175"; +} + +.fa-long-arrow-up:before { + content: "\f176"; +} + +.fa-long-arrow-left:before { + content: "\f177"; +} + +.fa-long-arrow-right:before { + content: "\f178"; +} + +.fa-apple:before { + content: "\f179"; +} + +.fa-windows:before { + content: "\f17a"; +} + +.fa-android:before { + content: "\f17b"; +} + +.fa-linux:before { + content: "\f17c"; +} + +.fa-dribbble:before { + content: "\f17d"; +} + +.fa-skype:before { + content: "\f17e"; +} + +.fa-foursquare:before { + content: "\f180"; +} + +.fa-trello:before { + content: "\f181"; +} + +.fa-female:before { + content: "\f182"; +} + +.fa-male:before { + content: "\f183"; +} + +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} + +.fa-sun-o:before { + content: "\f185"; +} + +.fa-moon-o:before { + content: "\f186"; +} + +.fa-archive:before { + content: "\f187"; +} + +.fa-bug:before { + content: "\f188"; +} + +.fa-vk:before { + content: "\f189"; +} + +.fa-weibo:before { + content: "\f18a"; +} + +.fa-renren:before { + content: "\f18b"; +} + +.fa-pagelines:before { + content: "\f18c"; +} + +.fa-stack-exchange:before { + content: "\f18d"; +} + +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} + +.fa-arrow-circle-o-left:before { + content: "\f190"; +} + +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} + +.fa-dot-circle-o:before { + content: "\f192"; +} + +.fa-wheelchair:before { + content: "\f193"; +} + +.fa-vimeo-square:before { + content: "\f194"; +} + +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} + +.fa-plus-square-o:before { + content: "\f196"; +} + +.fa-space-shuttle:before { + content: "\f197"; +} + +.fa-slack:before { + content: "\f198"; +} + +.fa-envelope-square:before { + content: "\f199"; +} + +.fa-wordpress:before { + content: "\f19a"; +} + +.fa-openid:before { + content: "\f19b"; +} + +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} + +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} + +.fa-yahoo:before { + content: "\f19e"; +} + +.fa-google:before { + content: "\f1a0"; +} + +.fa-reddit:before { + content: "\f1a1"; +} + +.fa-reddit-square:before { + content: "\f1a2"; +} + +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} + +.fa-stumbleupon:before { + content: "\f1a4"; +} + +.fa-delicious:before { + content: "\f1a5"; +} + +.fa-digg:before { + content: "\f1a6"; +} + +.fa-pied-piper-pp:before { + content: "\f1a7"; +} + +.fa-pied-piper-alt:before { + content: "\f1a8"; +} + +.fa-drupal:before { + content: "\f1a9"; +} + +.fa-joomla:before { + content: "\f1aa"; +} + +.fa-language:before { + content: "\f1ab"; +} + +.fa-fax:before { + content: "\f1ac"; +} + +.fa-building:before { + content: "\f1ad"; +} + +.fa-child:before { + content: "\f1ae"; +} + +.fa-paw:before { + content: "\f1b0"; +} + +.fa-spoon:before { + content: "\f1b1"; +} + +.fa-cube:before { + content: "\f1b2"; +} + +.fa-cubes:before { + content: "\f1b3"; +} + +.fa-behance:before { + content: "\f1b4"; +} + +.fa-behance-square:before { + content: "\f1b5"; +} + +.fa-steam:before { + content: "\f1b6"; +} + +.fa-steam-square:before { + content: "\f1b7"; +} + +.fa-recycle:before { + content: "\f1b8"; +} + +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} + +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} + +.fa-tree:before { + content: "\f1bb"; +} + +.fa-spotify:before { + content: "\f1bc"; +} + +.fa-deviantart:before { + content: "\f1bd"; +} + +.fa-soundcloud:before { + content: "\f1be"; +} + +.fa-database:before { + content: "\f1c0"; +} + +.fa-file-pdf-o:before { + content: "\f1c1"; +} + +.fa-file-word-o:before { + content: "\f1c2"; +} + +.fa-file-excel-o:before { + content: "\f1c3"; +} + +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} + +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} + +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} + +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} + +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} + +.fa-file-code-o:before { + content: "\f1c9"; +} + +.fa-vine:before { + content: "\f1ca"; +} + +.fa-codepen:before { + content: "\f1cb"; +} + +.fa-jsfiddle:before { + content: "\f1cc"; +} + +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} + +.fa-circle-o-notch:before { + content: "\f1ce"; +} + +.fa-ra:before, +.fa-resistance:before, +.fa-rebel:before { + content: "\f1d0"; +} + +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} + +.fa-git-square:before { + content: "\f1d2"; +} + +.fa-git:before { + content: "\f1d3"; +} + +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} + +.fa-tencent-weibo:before { + content: "\f1d5"; +} + +.fa-qq:before { + content: "\f1d6"; +} + +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} + +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} + +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} + +.fa-history:before { + content: "\f1da"; +} + +.fa-circle-thin:before { + content: "\f1db"; +} + +.fa-header:before { + content: "\f1dc"; +} + +.fa-paragraph:before { + content: "\f1dd"; +} + +.fa-sliders:before { + content: "\f1de"; +} + +.fa-share-alt:before { + content: "\f1e0"; +} + +.fa-share-alt-square:before { + content: "\f1e1"; +} + +.fa-bomb:before { + content: "\f1e2"; +} + +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} + +.fa-tty:before { + content: "\f1e4"; +} + +.fa-binoculars:before { + content: "\f1e5"; +} + +.fa-plug:before { + content: "\f1e6"; +} + +.fa-slideshare:before { + content: "\f1e7"; +} + +.fa-twitch:before { + content: "\f1e8"; +} + +.fa-yelp:before { + content: "\f1e9"; +} + +.fa-newspaper-o:before { + content: "\f1ea"; +} + +.fa-wifi:before { + content: "\f1eb"; +} + +.fa-calculator:before { + content: "\f1ec"; +} + +.fa-paypal:before { + content: "\f1ed"; +} + +.fa-google-wallet:before { + content: "\f1ee"; +} + +.fa-cc-visa:before { + content: "\f1f0"; +} + +.fa-cc-mastercard:before { + content: "\f1f1"; +} + +.fa-cc-discover:before { + content: "\f1f2"; +} + +.fa-cc-amex:before { + content: "\f1f3"; +} + +.fa-cc-paypal:before { + content: "\f1f4"; +} + +.fa-cc-stripe:before { + content: "\f1f5"; +} + +.fa-bell-slash:before { + content: "\f1f6"; +} + +.fa-bell-slash-o:before { + content: "\f1f7"; +} + +.fa-trash:before { + content: "\f1f8"; +} + +.fa-copyright:before { + content: "\f1f9"; +} + +.fa-at:before { + content: "\f1fa"; +} + +.fa-eyueropper:before { + content: "\f1fb"; +} + +.fa-paint-brush:before { + content: "\f1fc"; +} + +.fa-birthday-cake:before { + content: "\f1fd"; +} + +.fa-area-chart:before { + content: "\f1fe"; +} + +.fa-pie-chart:before { + content: "\f200"; +} + +.fa-line-chart:before { + content: "\f201"; +} + +.fa-lastfm:before { + content: "\f202"; +} + +.fa-lastfm-square:before { + content: "\f203"; +} + +.fa-toggle-off:before { + content: "\f204"; +} + +.fa-toggle-on:before { + content: "\f205"; +} + +.fa-bicycle:before { + content: "\f206"; +} + +.fa-bus:before { + content: "\f207"; +} + +.fa-ioxhost:before { + content: "\f208"; +} + +.fa-angellist:before { + content: "\f209"; +} + +.fa-cc:before { + content: "\f20a"; +} + +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} + +.fa-meanpath:before { + content: "\f20c"; +} + +.fa-buysellads:before { + content: "\f20d"; +} + +.fa-connectdevelop:before { + content: "\f20e"; +} + +.fa-dashcube:before { + content: "\f210"; +} + +.fa-forumbee:before { + content: "\f211"; +} + +.fa-leanpub:before { + content: "\f212"; +} + +.fa-sellsy:before { + content: "\f213"; +} + +.fa-shirtsinbulk:before { + content: "\f214"; +} + +.fa-simplybuilt:before { + content: "\f215"; +} + +.fa-skyatlas:before { + content: "\f216"; +} + +.fa-cart-plus:before { + content: "\f217"; +} + +.fa-cart-arrow-down:before { + content: "\f218"; +} + +.fa-diamond:before { + content: "\f219"; +} + +.fa-ship:before { + content: "\f21a"; +} + +.fa-user-secret:before { + content: "\f21b"; +} + +.fa-motorcycle:before { + content: "\f21c"; +} + +.fa-street-view:before { + content: "\f21d"; +} + +.fa-heartbeat:before { + content: "\f21e"; +} + +.fa-venus:before { + content: "\f221"; +} + +.fa-mars:before { + content: "\f222"; +} + +.fa-mercury:before { + content: "\f223"; +} + +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} + +.fa-transgender-alt:before { + content: "\f225"; +} + +.fa-venus-double:before { + content: "\f226"; +} + +.fa-mars-double:before { + content: "\f227"; +} + +.fa-venus-mars:before { + content: "\f228"; +} + +.fa-mars-stroke:before { + content: "\f229"; +} + +.fa-mars-stroke-v:before { + content: "\f22a"; +} + +.fa-mars-stroke-h:before { + content: "\f22b"; +} + +.fa-neuter:before { + content: "\f22c"; +} + +.fa-genderless:before { + content: "\f22d"; +} + +.fa-facebook-official:before { + content: "\f230"; +} + +.fa-pinterest-p:before { + content: "\f231"; +} + +.fa-whatsapp:before { + content: "\f232"; +} + +.fa-server:before { + content: "\f233"; +} + +.fa-user-plus:before { + content: "\f234"; +} + +.fa-user-times:before { + content: "\f235"; +} + +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} + +.fa-viacoin:before { + content: "\f237"; +} + +.fa-train:before { + content: "\f238"; +} + +.fa-subway:before { + content: "\f239"; +} + +.fa-medium:before { + content: "\f23a"; +} + +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} + +.fa-optin-monster:before { + content: "\f23c"; +} + +.fa-opencart:before { + content: "\f23d"; +} + +.fa-expeditedssl:before { + content: "\f23e"; +} + +.fa-battery-4:before, +.fa-battery:before, +.fa-battery-full:before { + content: "\f240"; +} + +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} + +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} + +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} + +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} + +.fa-mouse-pointer:before { + content: "\f245"; +} + +.fa-i-cursor:before { + content: "\f246"; +} + +.fa-object-group:before { + content: "\f247"; +} + +.fa-object-ungroup:before { + content: "\f248"; +} + +.fa-sticky-note:before { + content: "\f249"; +} + +.fa-sticky-note-o:before { + content: "\f24a"; +} + +.fa-cc-jcb:before { + content: "\f24b"; +} + +.fa-cc-diners-club:before { + content: "\f24c"; +} + +.fa-clone:before { + content: "\f24d"; +} + +.fa-balance-scale:before { + content: "\f24e"; +} + +.fa-hourglass-o:before { + content: "\f250"; +} + +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} + +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} + +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} + +.fa-hourglass:before { + content: "\f254"; +} + +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} + +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} + +.fa-hand-scissors-o:before { + content: "\f257"; +} + +.fa-hand-lizard-o:before { + content: "\f258"; +} + +.fa-hand-spock-o:before { + content: "\f259"; +} + +.fa-hand-pointer-o:before { + content: "\f25a"; +} + +.fa-hand-peace-o:before { + content: "\f25b"; +} + +.fa-trademark:before { + content: "\f25c"; +} + +.fa-registered:before { + content: "\f25d"; +} + +.fa-creative-commons:before { + content: "\f25e"; +} + +.fa-gg:before { + content: "\f260"; +} + +.fa-gg-circle:before { + content: "\f261"; +} + +.fa-tripadvisor:before { + content: "\f262"; +} + +.fa-odnoklassniki:before { + content: "\f263"; +} + +.fa-odnoklassniki-square:before { + content: "\f264"; +} + +.fa-get-pocket:before { + content: "\f265"; +} + +.fa-wikipedia-w:before { + content: "\f266"; +} + +.fa-safari:before { + content: "\f267"; +} + +.fa-chrome:before { + content: "\f268"; +} + +.fa-firefox:before { + content: "\f269"; +} + +.fa-opera:before { + content: "\f26a"; +} + +.fa-internet-explorer:before { + content: "\f26b"; +} + +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} + +.fa-contao:before { + content: "\f26d"; +} + +.fa-500px:before { + content: "\f26e"; +} + +.fa-amazon:before { + content: "\f270"; +} + +.fa-calendar-plus-o:before { + content: "\f271"; +} + +.fa-calendar-minus-o:before { + content: "\f272"; +} + +.fa-calendar-times-o:before { + content: "\f273"; +} + +.fa-calendar-check-o:before { + content: "\f274"; +} + +.fa-industry:before { + content: "\f275"; +} + +.fa-map-pin:before { + content: "\f276"; +} + +.fa-map-signs:before { + content: "\f277"; +} + +.fa-map-o:before { + content: "\f278"; +} + +.fa-map:before { + content: "\f279"; +} + +.fa-commenting:before { + content: "\f27a"; +} + +.fa-commenting-o:before { + content: "\f27b"; +} + +.fa-houzz:before { + content: "\f27c"; +} + +.fa-vimeo:before { + content: "\f27d"; +} + +.fa-black-tie:before { + content: "\f27e"; +} + +.fa-fonticons:before { + content: "\f280"; +} + +.fa-reddit-alien:before { + content: "\f281"; +} + +.fa-edge:before { + content: "\f282"; +} + +.fa-credit-card-alt:before { + content: "\f283"; +} + +.fa-codiepie:before { + content: "\f284"; +} + +.fa-modx:before { + content: "\f285"; +} + +.fa-fort-awesome:before { + content: "\f286"; +} + +.fa-usb:before { + content: "\f287"; +} + +.fa-product-hunt:before { + content: "\f288"; +} + +.fa-mixcloud:before { + content: "\f289"; +} + +.fa-scribd:before { + content: "\f28a"; +} + +.fa-pause-circle:before { + content: "\f28b"; +} + +.fa-pause-circle-o:before { + content: "\f28c"; +} + +.fa-stop-circle:before { + content: "\f28d"; +} + +.fa-stop-circle-o:before { + content: "\f28e"; +} + +.fa-shopping-bag:before { + content: "\f290"; +} + +.fa-shopping-basket:before { + content: "\f291"; +} + +.fa-hashtag:before { + content: "\f292"; +} + +.fa-bluetooth:before { + content: "\f293"; +} + +.fa-bluetooth-b:before { + content: "\f294"; +} + +.fa-percent:before { + content: "\f295"; +} + +.fa-gitlab:before { + content: "\f296"; +} + +.fa-wpbeginner:before { + content: "\f297"; +} + +.fa-wpforms:before { + content: "\f298"; +} + +.fa-envira:before { + content: "\f299"; +} + +.fa-universal-access:before { + content: "\f29a"; +} + +.fa-wheelchair-alt:before { + content: "\f29b"; +} + +.fa-question-circle-o:before { + content: "\f29c"; +} + +.fa-blind:before { + content: "\f29d"; +} + +.fa-audio-description:before { + content: "\f29e"; +} + +.fa-volume-control-phone:before { + content: "\f2a0"; +} + +.fa-braille:before { + content: "\f2a1"; +} + +.fa-assistive-listening-systems:before { + content: "\f2a2"; +} + +.fa-asl-interpreting:before, +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; +} + +.fa-deafness:before, +.fa-hard-of-hearing:before, +.fa-deaf:before { + content: "\f2a4"; +} + +.fa-glide:before { + content: "\f2a5"; +} + +.fa-glide-g:before { + content: "\f2a6"; +} + +.fa-signing:before, +.fa-sign-language:before { + content: "\f2a7"; +} + +.fa-low-vision:before { + content: "\f2a8"; +} + +.fa-viadeo:before { + content: "\f2a9"; +} + +.fa-viadeo-square:before { + content: "\f2aa"; +} + +.fa-snapchat:before { + content: "\f2ab"; +} + +.fa-snapchat-ghost:before { + content: "\f2ac"; +} + +.fa-snapchat-square:before { + content: "\f2ad"; +} + +.fa-pied-piper:before { + content: "\f2ae"; +} + +.fa-first-order:before { + content: "\f2b0"; +} + +.fa-yoast:before { + content: "\f2b1"; +} + +.fa-themeisle:before { + content: "\f2b2"; +} + +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\f2b3"; +} + +.fa-fa:before, +.fa-font-awesome:before { + content: "\f2b4"; +} + +.fa-handshake-o:before { + content: "\f2b5"; +} + +.fa-envelope-open:before { + content: "\f2b6"; +} + +.fa-envelope-open-o:before { + content: "\f2b7"; +} + +.fa-linode:before { + content: "\f2b8"; +} + +.fa-address-book:before { + content: "\f2b9"; +} + +.fa-address-book-o:before { + content: "\f2ba"; +} + +.fa-vcard:before, +.fa-address-card:before { + content: "\f2bb"; +} + +.fa-vcard-o:before, +.fa-address-card-o:before { + content: "\f2bc"; +} + +.fa-user-circle:before { + content: "\f2bd"; +} + +.fa-user-circle-o:before { + content: "\f2be"; +} + +.fa-user-o:before { + content: "\f2c0"; +} + +.fa-id-badge:before { + content: "\f2c1"; +} + +.fa-drivers-license:before, +.fa-id-card:before { + content: "\f2c2"; +} + +.fa-drivers-license-o:before, +.fa-id-card-o:before { + content: "\f2c3"; +} + +.fa-quora:before { + content: "\f2c4"; +} + +.fa-free-code-camp:before { + content: "\f2c5"; +} + +.fa-telegram:before { + content: "\f2c6"; +} + +.fa-thermometer-4:before, +.fa-thermometer:before, +.fa-thermometer-full:before { + content: "\f2c7"; +} + +.fa-thermometer-3:before, +.fa-thermometer-three-quarters:before { + content: "\f2c8"; +} + +.fa-thermometer-2:before, +.fa-thermometer-half:before { + content: "\f2c9"; +} + +.fa-thermometer-1:before, +.fa-thermometer-quarter:before { + content: "\f2ca"; +} + +.fa-thermometer-0:before, +.fa-thermometer-empty:before { + content: "\f2cb"; +} + +.fa-shower:before { + content: "\f2cc"; +} + +.fa-bathtub:before, +.fa-s15:before, +.fa-bath:before { + content: "\f2cd"; +} + +.fa-podcast:before { + content: "\f2ce"; +} + +.fa-window-maximize:before { + content: "\f2d0"; +} + +.fa-window-minimize:before { + content: "\f2d1"; +} + +.fa-window-restore:before { + content: "\f2d2"; +} + +.fa-times-rectangle:before, +.fa-window-close:before { + content: "\f2d3"; +} + +.fa-times-rectangle-o:before, +.fa-window-close-o:before { + content: "\f2d4"; +} + +.fa-bandcamp:before { + content: "\f2d5"; +} + +.fa-grav:before { + content: "\f2d6"; +} + +.fa-etsy:before { + content: "\f2d7"; +} + +.fa-imdb:before { + content: "\f2d8"; +} + +.fa-ravelry:before { + content: "\f2d9"; +} + +.fa-eercast:before { + content: "\f2da"; +} + +.fa-microchip:before { + content: "\f2db"; +} + +.fa-snowflake-o:before { + content: "\f2dc"; +} + +.fa-superpowers:before { + content: "\f2dd"; +} + +.fa-wpexplorer:before { + content: "\f2de"; +} + +.fa-meetup:before { + content: "\f2e0"; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} \ No newline at end of file diff --git a/main/static/main/assets/css/vendor/magnific-popup.css b/main/static/main/assets/css/vendor/magnific-popup.css new file mode 100755 index 0000000..4a93511 --- /dev/null +++ b/main/static/main/assets/css/vendor/magnific-popup.css @@ -0,0 +1,435 @@ +/* Magnific Popup CSS */ + +.mfp-bg { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1042; + overflow: hidden; + position: fixed; + background: #0b0b0b; + opacity: 0.8; +} + +.mfp-wrap { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1043; + position: fixed; + outline: none !important; + -webkit-backface-visibility: hidden; +} + +.mfp-container { + text-align: center; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + padding: 0 8px; + box-sizing: border-box; +} + +.mfp-container:before { + content: ""; + display: inline-block; + height: 100%; + vertical-align: middle; +} + +.mfp-align-top .mfp-container:before { + display: none; +} + +.mfp-content { + position: relative; + display: inline-block; + vertical-align: middle; + margin: 0 auto; + text-align: left; + z-index: 1045; +} + +.mfp-inline-holder .mfp-content, +.mfp-ajax-holder .mfp-content { + width: 100%; + cursor: auto; +} + +.mfp-ajax-cur { + cursor: progress; +} + +.mfp-zoom-out-cur, +.mfp-zoom-out-cur .mfp-image-holder .mfp-close { + cursor: zoom-out; +} + +.mfp-zoom { + cursor: pointer; + cursor: zoom-in; +} + +.mfp-auto-cursor .mfp-content { + cursor: auto; +} + +.mfp-close, +.mfp-arrow, +.mfp-preloader, +.mfp-counter { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.mfp-loading.mfp-figure { + display: none; +} + +.mfp-hide { + display: none !important; +} + +.mfp-preloader { + color: #CCC; + position: absolute; + top: 50%; + width: auto; + text-align: center; + margin-top: -0.8em; + left: 8px; + right: 8px; + z-index: 1044; +} + +.mfp-preloader a { + color: #CCC; +} + +.mfp-preloader a:hover { + color: #FFF; +} + +.mfp-s-ready .mfp-preloader { + display: none; +} + +.mfp-s-error .mfp-content { + display: none; +} + +button.mfp-close, +button.mfp-arrow { + overflow: visible; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + display: block; + outline: none; + padding: 0; + z-index: 1046; + box-shadow: none; + touch-action: manipulation; +} + +button::-moz-focus-inner { + padding: 0; + border: 0; +} + +.mfp-close { + width: 44px; + height: 44px; + line-height: 44px; + position: absolute; + right: 0; + top: 0; + text-decoration: none; + text-align: center; + opacity: 0.65; + padding: 0 0 18px 10px; + color: #FFF; + font-style: normal; + font-size: 28px; + font-family: Arial, Baskerville, monospace; +} + +.mfp-close:hover, +.mfp-close:focus { + opacity: 1; +} + +.mfp-close:active { + top: 1px; +} + +.mfp-close-btn-in .mfp-close { + color: #333; +} + +.mfp-image-holder .mfp-close, +.mfp-iframe-holder .mfp-close { + color: #FFF; + right: -6px; + text-align: right; + padding-right: 6px; + width: 100%; +} + +.mfp-counter { + position: absolute; + top: 0; + right: 0; + color: #CCC; + font-size: 12px; + line-height: 18px; + white-space: nowrap; +} + +.mfp-arrow { + position: absolute; + opacity: 0.65; + margin: 0; + top: 50%; + margin-top: -55px; + padding: 0; + width: 90px; + height: 110px; + -webkit-tap-highlight-color: transparent; +} + +.mfp-arrow:active { + margin-top: -54px; +} + +.mfp-arrow:hover, +.mfp-arrow:focus { + opacity: 1; +} + +.mfp-arrow:before, +.mfp-arrow:after { + content: ""; + display: block; + width: 0; + height: 0; + position: absolute; + left: 0; + top: 0; + margin-top: 35px; + margin-left: 35px; + border: medium inset transparent; +} + +.mfp-arrow:after { + border-top-width: 13px; + border-bottom-width: 13px; + top: 8px; +} + +.mfp-arrow:before { + border-top-width: 21px; + border-bottom-width: 21px; + opacity: 0.7; +} + +.mfp-arrow-left { + left: 0; +} + +.mfp-arrow-left:after { + border-right: 17px solid #FFF; + margin-left: 31px; +} + +.mfp-arrow-left:before { + margin-left: 25px; + border-right: 27px solid #3F3F3F; +} + +.mfp-arrow-right { + right: 0; +} + +.mfp-arrow-right:after { + border-left: 17px solid #FFF; + margin-left: 39px; +} + +.mfp-arrow-right:before { + border-left: 27px solid #3F3F3F; +} + +.mfp-iframe-holder { + padding-top: 40px; + padding-bottom: 40px; +} + +.mfp-iframe-holder .mfp-content { + line-height: 0; + width: 100%; + max-width: 900px; +} + +.mfp-iframe-holder .mfp-close { + top: -40px; +} + +.mfp-iframe-scaler { + width: 100%; + height: 0; + overflow: hidden; + padding-top: 56.25%; +} + +.mfp-iframe-scaler iframe { + position: absolute; + display: block; + top: 0; + left: 0; + width: 100%; + height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #000; +} + +/* Main image in popup */ + +img.mfp-img { + width: auto; + max-width: 100%; + height: auto; + display: block; + line-height: 0; + box-sizing: border-box; + padding: 40px 0 40px; + margin: 0 auto; +} + +/* The shadow behind the image */ + +.mfp-figure { + line-height: 0; +} + +.mfp-figure:after { + content: ""; + position: absolute; + left: 0; + top: 40px; + bottom: 40px; + display: block; + right: 0; + width: auto; + height: auto; + z-index: -1; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #444; +} + +.mfp-figure small { + color: #BDBDBD; + display: block; + font-size: 12px; + line-height: 14px; +} + +.mfp-figure figure { + margin: 0; +} + +.mfp-bottom-bar { + margin-top: -36px; + position: absolute; + top: 100%; + left: 0; + width: 100%; + cursor: auto; +} + +.mfp-title { + text-align: left; + line-height: 18px; + color: #F3F3F3; + word-wrap: break-word; + padding-right: 36px; +} + +.mfp-image-holder .mfp-content { + max-width: 100%; +} + +.mfp-gallery .mfp-image-holder .mfp-figure { + cursor: pointer; +} + +@media screen and (max-width: 800px) and (orientation: landscape), +screen and (max-height: 300px) { + /** + * Remove all paddings around the image on small screen + */ + .mfp-img-mobile .mfp-image-holder { + padding-left: 0; + padding-right: 0; + } + .mfp-img-mobile img.mfp-img { + padding: 0; + } + .mfp-img-mobile .mfp-figure:after { + top: 0; + bottom: 0; + } + .mfp-img-mobile .mfp-figure small { + display: inline; + margin-left: 5px; + } + .mfp-img-mobile .mfp-bottom-bar { + background: rgba(0, 0, 0, 0.6); + bottom: 0; + margin: 0; + top: auto; + padding: 3px 5px; + position: fixed; + box-sizing: border-box; + } + .mfp-img-mobile .mfp-bottom-bar:empty { + padding: 0; + } + .mfp-img-mobile .mfp-counter { + right: 5px; + top: 3px; + } + .mfp-img-mobile .mfp-close { + top: 0; + right: 0; + width: 35px; + height: 35px; + line-height: 35px; + background: rgba(0, 0, 0, 0.6); + position: fixed; + text-align: center; + padding: 0; + } +} + +@media all and (max-width: 900px) { + .mfp-arrow { + transform: scale(0.75); + } + .mfp-arrow-left { + transform-origin: 0; + } + .mfp-arrow-right { + transform-origin: 100%; + } + .mfp-container { + padding-left: 6px; + padding-right: 6px; + } +} \ No newline at end of file diff --git a/main/static/main/assets/css/vendor/nice-select.css b/main/static/main/assets/css/vendor/nice-select.css new file mode 100755 index 0000000..4192373 --- /dev/null +++ b/main/static/main/assets/css/vendor/nice-select.css @@ -0,0 +1,167 @@ +.nice-select { + background-color: #fff; + border-radius: 5px; + border: solid 1px #e8e8e8; + box-sizing: border-box; + clear: both; + cursor: pointer; + display: block; + float: left; + font-family: inherit; + font-size: 14px; + font-weight: normal; + height: 42px; + line-height: 40px; + outline: none; + padding-left: 18px; + padding-right: 30px; + position: relative; + text-align: left !important; + transition: all 0.2s ease-in-out; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + white-space: nowrap; + width: auto; +} + +.nice-select:hover { + border-color: #dbdbdb; +} + +.nice-select:active, +.nice-select.open, +.nice-select:focus { + border-color: #999; +} + +.nice-select:after { + border-bottom: 2px solid #999; + border-right: 2px solid #999; + content: ""; + display: block; + height: 5px; + margin-top: -4px; + pointer-events: none; + position: absolute; + right: 12px; + top: 50%; + transform-origin: 66% 66%; + transform: rotate(45deg); + transition: all 0.15s ease-in-out; + width: 5px; +} + +.nice-select.open:after { + transform: rotate(-135deg); +} + +.nice-select.open .list { + opacity: 1; + pointer-events: auto; + transform: scale(1) translateY(0); +} + +.nice-select.disabled { + border-color: #ededed; + color: #999; + pointer-events: none; +} + +.nice-select.disabled:after { + border-color: #cccccc; +} + +.nice-select.wide { + width: 100%; +} + +.nice-select.wide .list { + left: 0 !important; + right: 0 !important; +} + +.nice-select.right { + float: right; +} + +.nice-select.right .list { + left: auto; + right: 0; +} + +.nice-select.small { + font-size: 12px; + height: 36px; + line-height: 34px; +} + +.nice-select.small:after { + height: 4px; + width: 4px; +} + +.nice-select.small .option { + line-height: 34px; + min-height: 34px; +} + +.nice-select .list { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 0 1px rgba(68, 68, 68, 0.11); + box-sizing: border-box; + margin-top: 4px; + opacity: 0; + overflow: hidden; + padding: 0; + pointer-events: none; + position: absolute; + top: 100%; + left: 0; + transform-origin: 50% 0; + transform: scale(0.75) translateY(-21px); + transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out; + z-index: 9; +} + +.nice-select .list:hover .option:not(:hover) { + background-color: transparent !important; +} + +.nice-select .option { + cursor: pointer; + font-weight: 400; + line-height: 40px; + list-style: none; + min-height: 40px; + outline: none; + padding-left: 18px; + padding-right: 29px; + text-align: left; + transition: all 0.2s; +} + +.nice-select .option:hover, +.nice-select .option.focus, +.nice-select .option.selected.focus { + background-color: #f6f6f6; +} + +.nice-select .option.selected { + font-weight: bold; +} + +.nice-select .option.disabled { + background-color: transparent; + color: #999; + cursor: default; +} + +.no-csspointerevents .nice-select .list { + display: none; +} + +.no-csspointerevents .nice-select.open .list { + display: block; +} \ No newline at end of file diff --git a/main/static/main/assets/css/vendor/sal.css b/main/static/main/assets/css/vendor/sal.css new file mode 100755 index 0000000..b5c2aef --- /dev/null +++ b/main/static/main/assets/css/vendor/sal.css @@ -0,0 +1,450 @@ +/** + * Settings + */ + +/** + * Easings + */ + +/** + * Core + */ + +[data-sal] { + transition-duration: 0.2s; + transition-delay: 0s; + transition-duration: var(--sal-duration, 0.2s); + transition-delay: var(--sal-delay, 0s); + transition-timing-function: var(--sal-easing, ease); +} + +[data-sal][data-sal-duration="200"] { + transition-duration: 0.2s; +} + +[data-sal][data-sal-duration="250"] { + transition-duration: 0.25s; +} + +[data-sal][data-sal-duration="300"] { + transition-duration: 0.3s; +} + +[data-sal][data-sal-duration="350"] { + transition-duration: 0.35s; +} + +[data-sal][data-sal-duration="400"] { + transition-duration: 0.4s; +} + +[data-sal][data-sal-duration="450"] { + transition-duration: 0.45s; +} + +[data-sal][data-sal-duration="500"] { + transition-duration: 0.5s; +} + +[data-sal][data-sal-duration="550"] { + transition-duration: 0.55s; +} + +[data-sal][data-sal-duration="600"] { + transition-duration: 0.6s; +} + +[data-sal][data-sal-duration="650"] { + transition-duration: 0.65s; +} + +[data-sal][data-sal-duration="700"] { + transition-duration: 0.7s; +} + +[data-sal][data-sal-duration="750"] { + transition-duration: 0.75s; +} + +[data-sal][data-sal-duration="800"] { + transition-duration: 0.8s; +} + +[data-sal][data-sal-duration="850"] { + transition-duration: 0.85s; +} + +[data-sal][data-sal-duration="900"] { + transition-duration: 0.9s; +} + +[data-sal][data-sal-duration="950"] { + transition-duration: 0.95s; +} + +[data-sal][data-sal-duration="1000"] { + transition-duration: 1s; +} + +[data-sal][data-sal-duration="1050"] { + transition-duration: 1.05s; +} + +[data-sal][data-sal-duration="1100"] { + transition-duration: 1.1s; +} + +[data-sal][data-sal-duration="1150"] { + transition-duration: 1.15s; +} + +[data-sal][data-sal-duration="1200"] { + transition-duration: 1.2s; +} + +[data-sal][data-sal-duration="1250"] { + transition-duration: 1.25s; +} + +[data-sal][data-sal-duration="1300"] { + transition-duration: 1.3s; +} + +[data-sal][data-sal-duration="1350"] { + transition-duration: 1.35s; +} + +[data-sal][data-sal-duration="1400"] { + transition-duration: 1.4s; +} + +[data-sal][data-sal-duration="1450"] { + transition-duration: 1.45s; +} + +[data-sal][data-sal-duration="1500"] { + transition-duration: 1.5s; +} + +[data-sal][data-sal-duration="1550"] { + transition-duration: 1.55s; +} + +[data-sal][data-sal-duration="1600"] { + transition-duration: 1.6s; +} + +[data-sal][data-sal-duration="1650"] { + transition-duration: 1.65s; +} + +[data-sal][data-sal-duration="1700"] { + transition-duration: 1.7s; +} + +[data-sal][data-sal-duration="1750"] { + transition-duration: 1.75s; +} + +[data-sal][data-sal-duration="1800"] { + transition-duration: 1.8s; +} + +[data-sal][data-sal-duration="1850"] { + transition-duration: 1.85s; +} + +[data-sal][data-sal-duration="1900"] { + transition-duration: 1.9s; +} + +[data-sal][data-sal-duration="1950"] { + transition-duration: 1.95s; +} + +[data-sal][data-sal-duration="2000"] { + transition-duration: 2s; +} + +[data-sal][data-sal-delay="50"] { + transition-delay: 0.05s; +} + +[data-sal][data-sal-delay="100"] { + transition-delay: 0.1s; +} + +[data-sal][data-sal-delay="150"] { + transition-delay: 0.15s; +} + +[data-sal][data-sal-delay="200"] { + transition-delay: 0.2s; +} + +[data-sal][data-sal-delay="250"] { + transition-delay: 0.25s; +} + +[data-sal][data-sal-delay="300"] { + transition-delay: 0.3s; +} + +[data-sal][data-sal-delay="350"] { + transition-delay: 0.35s; +} + +[data-sal][data-sal-delay="400"] { + transition-delay: 0.4s; +} + +[data-sal][data-sal-delay="450"] { + transition-delay: 0.45s; +} + +[data-sal][data-sal-delay="500"] { + transition-delay: 0.5s; +} + +[data-sal][data-sal-delay="550"] { + transition-delay: 0.55s; +} + +[data-sal][data-sal-delay="600"] { + transition-delay: 0.6s; +} + +[data-sal][data-sal-delay="650"] { + transition-delay: 0.65s; +} + +[data-sal][data-sal-delay="700"] { + transition-delay: 0.7s; +} + +[data-sal][data-sal-delay="750"] { + transition-delay: 0.75s; +} + +[data-sal][data-sal-delay="800"] { + transition-delay: 0.8s; +} + +[data-sal][data-sal-delay="850"] { + transition-delay: 0.85s; +} + +[data-sal][data-sal-delay="900"] { + transition-delay: 0.9s; +} + +[data-sal][data-sal-delay="950"] { + transition-delay: 0.95s; +} + +[data-sal][data-sal-delay="1000"] { + transition-delay: 1s; +} + +[data-sal][data-sal-easing=linear] { + transition-timing-function: linear; +} + +[data-sal][data-sal-easing=ease] { + transition-timing-function: ease; +} + +[data-sal][data-sal-easing=ease-in] { + transition-timing-function: ease-in; +} + +[data-sal][data-sal-easing=ease-out] { + transition-timing-function: ease-out; +} + +[data-sal][data-sal-easing=ease-in-out] { + transition-timing-function: ease-in-out; +} + +[data-sal][data-sal-easing=ease-in-cubic] { + transition-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); +} + +[data-sal][data-sal-easing=ease-out-cubic] { + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); +} + +[data-sal][data-sal-easing=ease-in-out-cubic] { + transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1); +} + +[data-sal][data-sal-easing=ease-in-circ] { + transition-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.335); +} + +[data-sal][data-sal-easing=ease-out-circ] { + transition-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1); +} + +[data-sal][data-sal-easing=ease-in-out-circ] { + transition-timing-function: cubic-bezier(0.785, 0.135, 0.15, 0.86); +} + +[data-sal][data-sal-easing=ease-in-expo] { + transition-timing-function: cubic-bezier(0.95, 0.05, 0.795, 0.035); +} + +[data-sal][data-sal-easing=ease-out-expo] { + transition-timing-function: cubic-bezier(0.19, 1, 0.22, 1); +} + +[data-sal][data-sal-easing=ease-in-out-expo] { + transition-timing-function: cubic-bezier(1, 0, 0, 1); +} + +[data-sal][data-sal-easing=ease-in-quad] { + transition-timing-function: cubic-bezier(0.55, 0.085, 0.68, 0.53); +} + +[data-sal][data-sal-easing=ease-out-quad] { + transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +[data-sal][data-sal-easing=ease-in-out-quad] { + transition-timing-function: cubic-bezier(0.455, 0.03, 0.515, 0.955); +} + +[data-sal][data-sal-easing=ease-in-quart] { + transition-timing-function: cubic-bezier(0.895, 0.03, 0.685, 0.22); +} + +[data-sal][data-sal-easing=ease-out-quart] { + transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1); +} + +[data-sal][data-sal-easing=ease-in-out-quart] { + transition-timing-function: cubic-bezier(0.77, 0, 0.175, 1); +} + +[data-sal][data-sal-easing=ease-in-quint] { + transition-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); +} + +[data-sal][data-sal-easing=ease-out-quint] { + transition-timing-function: cubic-bezier(0.23, 1, 0.32, 1); +} + +[data-sal][data-sal-easing=ease-in-out-quint] { + transition-timing-function: cubic-bezier(0.86, 0, 0.07, 1); +} + +[data-sal][data-sal-easing=ease-in-sine] { + transition-timing-function: cubic-bezier(0.47, 0, 0.745, 0.715); +} + +[data-sal][data-sal-easing=ease-out-sine] { + transition-timing-function: cubic-bezier(0.39, 0.575, 0.565, 1); +} + +[data-sal][data-sal-easing=ease-in-out-sine] { + transition-timing-function: cubic-bezier(0.445, 0.05, 0.55, 0.95); +} + +[data-sal][data-sal-easing=ease-in-back] { + transition-timing-function: cubic-bezier(0.6, -0.28, 0.735, 0.045); +} + +[data-sal][data-sal-easing=ease-out-back] { + transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275); +} + +[data-sal][data-sal-easing=ease-in-out-back] { + transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55); +} + +/** + * Animations + */ + +[data-sal|=fade] { + opacity: 0; + transition-property: opacity; +} + +[data-sal|=fade].sal-animate, +body.sal-disabled [data-sal|=fade] { + opacity: 1; +} + +[data-sal|=slide] { + opacity: 0; + transition-property: opacity, transform; +} + +[data-sal=slide-up] { + transform: translateY(20%); +} + +[data-sal=slide-down] { + transform: translateY(-20%); +} + +[data-sal=slide-left] { + transform: translateX(20%); +} + +[data-sal=slide-right] { + transform: translateX(-20%); +} + +[data-sal|=slide].sal-animate, +body.sal-disabled [data-sal|=slide] { + opacity: 1; + transform: none; +} + +[data-sal|=zoom] { + opacity: 0; + transition-property: opacity, transform; +} + +[data-sal=zoom-in] { + transform: scale(0.5); +} + +[data-sal=zoom-out] { + transform: scale(1.1); +} + +[data-sal|=zoom].sal-animate, +body.sal-disabled [data-sal|=zoom] { + opacity: 1; + transform: none; +} + +[data-sal|=flip] { + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition-property: transform; +} + +[data-sal=flip-left] { + transform: perspective(2000px) rotateY(-91deg); +} + +[data-sal=flip-right] { + transform: perspective(2000px) rotateY(91deg); +} + +[data-sal=flip-up] { + transform: perspective(2000px) rotateX(-91deg); +} + +[data-sal=flip-down] { + transform: perspective(2000px) rotateX(91deg); +} + +[data-sal|=flip].sal-animate, +body.sal-disabled [data-sal|=flip] { + transform: none; +} \ No newline at end of file diff --git a/main/static/main/assets/css/vendor/simplebar.css b/main/static/main/assets/css/vendor/simplebar.css new file mode 100755 index 0000000..8b1c792 --- /dev/null +++ b/main/static/main/assets/css/vendor/simplebar.css @@ -0,0 +1,210 @@ +[data-simplebar] { + position: relative; + flex-direction: column; + flex-wrap: wrap; + justify-content: flex-start; + align-content: flex-start; + align-items: flex-start; +} + +.simplebar-wrapper { + overflow: hidden; + width: inherit; + height: inherit; + max-width: inherit; + max-height: inherit; +} + +.simplebar-mask { + direction: inherit; + position: absolute; + overflow: hidden; + padding: 0; + margin: 0; + left: 0; + top: 0; + bottom: 0; + right: 0; + width: auto !important; + height: auto !important; + z-index: 0; +} + +.simplebar-offset { + direction: inherit !important; + box-sizing: inherit !important; + resize: none !important; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + padding: 0; + margin: 0; + -webkit-overflow-scrolling: touch; +} + +.simplebar-content-wrapper { + direction: inherit; + box-sizing: border-box !important; + position: relative; + display: block; + height: 100%; + width: auto; + max-width: 100%; + max-height: 100%; + scrollbar-width: none; + -ms-overflow-style: none; +} + +.simplebar-content-wrapper::-webkit-scrollbar, +.simplebar-hide-scrollbar::-webkit-scrollbar { + width: 0; + height: 0; +} + +.simplebar-content:before, +.simplebar-content:after { + content: " "; + display: table; +} + +.simplebar-placeholder { + max-height: 100%; + max-width: 100%; + width: 100%; + pointer-events: none; +} + +.simplebar-height-auto-observer-wrapper { + box-sizing: inherit !important; + height: 100%; + width: 100%; + max-width: 1px; + position: relative; + float: left; + max-height: 1px; + overflow: hidden; + z-index: -1; + padding: 0; + margin: 0; + pointer-events: none; + flex-grow: inherit; + flex-shrink: 0; + flex-basis: 0; +} + +.simplebar-height-auto-observer { + box-sizing: inherit; + display: block; + opacity: 0; + position: absolute; + top: 0; + left: 0; + height: 1000%; + width: 1000%; + min-height: 1px; + min-width: 1px; + overflow: hidden; + pointer-events: none; + z-index: -1; +} + +.simplebar-track { + z-index: 1; + position: absolute; + right: 0; + bottom: 0; + pointer-events: none; + overflow: hidden; +} + +.simplebar-track.simplebar-vertical { + top: 0; + width: 11px; +} + +.simplebar-track.simplebar-vertical .simplebar-scrollbar:before { + top: 2px; + bottom: 2px; +} + +.simplebar-track.simplebar-horizontal { + left: 0; + height: 11px; +} + +.simplebar-track.simplebar-horizontal .simplebar-scrollbar { + right: auto; + left: 0; + top: 2px; + height: 7px; + min-height: 0; + min-width: 10px; + width: auto; +} + +.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before { + height: 100%; + left: 2px; + right: 2px; +} + +[data-simplebar].simplebar-dragging .simplebar-content { + pointer-events: none; + -moz-user-select: none; + user-select: none; + -webkit-user-select: none; +} + +[data-simplebar].simplebar-dragging .simplebar-track { + pointer-events: all; +} + +.simplebar-scrollbar { + position: absolute; + left: 0; + right: 0; + min-height: 10px; +} + +.simplebar-scrollbar:before { + position: absolute; + content: ""; + background: black; + border-radius: 7px; + left: 2px; + right: 2px; + opacity: 0; + transition: opacity 0.2s linear; +} + +.simplebar-scrollbar.simplebar-visible:before { + opacity: 0.5; + transition: opacity 0s linear; +} + +[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical { + right: auto; + left: 0; +} + +.hs-dummy-scrollbar-size { + direction: rtl; + position: fixed; + opacity: 0; + visibility: hidden; + height: 500px; + width: 500px; + overflow-y: hidden; + overflow-x: scroll; +} + +.simplebar-hide-scrollbar { + position: fixed; + left: 0; + visibility: hidden; + overflow-y: scroll; + scrollbar-width: none; + -ms-overflow-style: none; +} \ No newline at end of file diff --git a/main/static/main/assets/css/vendor/swiper-bundle.min.css b/main/static/main/assets/css/vendor/swiper-bundle.min.css new file mode 100755 index 0000000..0d81b1f --- /dev/null +++ b/main/static/main/assets/css/vendor/swiper-bundle.min.css @@ -0,0 +1,707 @@ +/** + * Swiper 8.0.6 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * https://swiperjs.com + * + * Copyright 2014-2022 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: February 14, 2022 + */ + +@font-face { + font-family: swiper-icons; + src: url("data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA"); + font-weight: 400; + font-style: normal; +} + +:root { + --swiper-theme-color: #007aff; +} + +.swiper { + margin-left: auto; + margin-right: auto; + position: relative; + overflow: hidden; + list-style: none; + padding: 0; + z-index: 1; +} + +.swiper-vertical>.swiper-wrapper { + flex-direction: column; +} + +.swiper-wrapper { + position: relative; + width: 100%; + height: 100%; + z-index: 1; + display: flex; + transition-property: transform; + box-sizing: content-box; +} + +.swiper-android .swiper-slide, +.swiper-wrapper { + transform: translate3d(0px, 0, 0); +} + +.swiper-pointer-events { + touch-action: pan-y; +} + +.swiper-pointer-events.swiper-vertical { + touch-action: pan-x; +} + +.swiper-slide { + flex-shrink: 0; + width: 100%; + height: 100%; + position: relative; + transition-property: transform; +} + +.swiper-slide-invisible-blank { + visibility: hidden; +} + +.swiper-autoheight, +.swiper-autoheight .swiper-slide { + height: auto; +} + +.swiper-autoheight .swiper-wrapper { + align-items: flex-start; + transition-property: transform, height; +} + +.swiper-backface-hidden .swiper-slide { + transform: translateZ(0); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} + +.swiper-3d, +.swiper-3d.swiper-css-mode .swiper-wrapper { + perspective: 1200px; +} + +.swiper-3d .swiper-cube-shadow, +.swiper-3d .swiper-slide, +.swiper-3d .swiper-slide-shadow, +.swiper-3d .swiper-slide-shadow-bottom, +.swiper-3d .swiper-slide-shadow-left, +.swiper-3d .swiper-slide-shadow-right, +.swiper-3d .swiper-slide-shadow-top, +.swiper-3d .swiper-wrapper { + transform-style: preserve-3d; +} + +.swiper-3d .swiper-slide-shadow, +.swiper-3d .swiper-slide-shadow-bottom, +.swiper-3d .swiper-slide-shadow-left, +.swiper-3d .swiper-slide-shadow-right, +.swiper-3d .swiper-slide-shadow-top { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 10; +} + +.swiper-3d .swiper-slide-shadow { + background: rgba(0, 0, 0, 0.15); +} + +.swiper-3d .swiper-slide-shadow-left { + background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} + +.swiper-3d .swiper-slide-shadow-right { + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} + +.swiper-3d .swiper-slide-shadow-top { + background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} + +.swiper-3d .swiper-slide-shadow-bottom { + background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); +} + +.swiper-css-mode>.swiper-wrapper { + overflow: auto; + scrollbar-width: none; + -ms-overflow-style: none; +} + +.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar { + display: none; +} + +.swiper-css-mode>.swiper-wrapper>.swiper-slide { + scroll-snap-align: start start; +} + +.swiper-horizontal.swiper-css-mode>.swiper-wrapper { + scroll-snap-type: x mandatory; +} + +.swiper-vertical.swiper-css-mode>.swiper-wrapper { + scroll-snap-type: y mandatory; +} + +.swiper-centered>.swiper-wrapper::before { + content: ""; + flex-shrink: 0; + order: 9999; +} + +.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child { + -webkit-margin-start: var(--swiper-centered-offset-before); + margin-inline-start: var(--swiper-centered-offset-before); +} + +.swiper-centered.swiper-horizontal>.swiper-wrapper::before { + height: 100%; + min-height: 1px; + width: var(--swiper-centered-offset-after); +} + +.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child { + -webkit-margin-before: var(--swiper-centered-offset-before); + margin-block-start: var(--swiper-centered-offset-before); +} + +.swiper-centered.swiper-vertical>.swiper-wrapper::before { + width: 100%; + min-width: 1px; + height: var(--swiper-centered-offset-after); +} + +.swiper-centered>.swiper-wrapper>.swiper-slide { + scroll-snap-align: center center; +} + +.swiper-virtual .swiper-slide { + -webkit-backface-visibility: hidden; + transform: translateZ(0); +} + +.swiper-virtual.swiper-css-mode .swiper-wrapper::after { + content: ""; + position: absolute; + left: 0; + top: 0; + pointer-events: none; +} + +.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after { + height: 1px; + width: var(--swiper-virtual-size); +} + +.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after { + width: 1px; + height: var(--swiper-virtual-size); +} + +:root { + --swiper-navigation-size: 44px; +} + +.swiper-button-next, +.swiper-button-prev { + position: absolute; + top: 50%; + width: calc(var(--swiper-navigation-size) / 44 * 27); + height: var(--swiper-navigation-size); + margin-top: calc(0px - var(--swiper-navigation-size) / 2); + z-index: 10; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + color: var(--swiper-navigation-color, var(--swiper-theme-color)); +} + +.swiper-button-next.swiper-button-disabled, +.swiper-button-prev.swiper-button-disabled { + opacity: 0.35; + cursor: auto; + pointer-events: none; +} + +.swiper-button-next:after, +.swiper-button-prev:after { + font-family: swiper-icons; + font-size: var(--swiper-navigation-size); + letter-spacing: 0; + text-transform: none; + font-variant: initial; + line-height: 1; +} + +.swiper-button-prev, +.swiper-rtl .swiper-button-next { + left: 10px; + right: auto; +} + +.swiper-button-prev:after, +.swiper-rtl .swiper-button-next:after { + content: "prev"; +} + +.swiper-button-next, +.swiper-rtl .swiper-button-prev { + right: 10px; + left: auto; +} + +.swiper-button-next:after, +.swiper-rtl .swiper-button-prev:after { + content: "next"; +} + +.swiper-button-lock { + display: none; +} + +.swiper-pagination { + position: absolute; + text-align: center; + transition: 0.3s opacity; + transform: translate3d(0, 0, 0); + z-index: 10; +} + +.swiper-pagination.swiper-pagination-hidden { + opacity: 0; +} + +.swiper-horizontal>.swiper-pagination-bullets, +.swiper-pagination-bullets.swiper-pagination-horizontal, +.swiper-pagination-custom, +.swiper-pagination-fraction { + bottom: 10px; + left: 0; + width: 100%; +} + +.swiper-pagination-bullets-dynamic { + overflow: hidden; + font-size: 0; +} + +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + transform: scale(0.33); + position: relative; +} + +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active { + transform: scale(1); +} + +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main { + transform: scale(1); +} + +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev { + transform: scale(0.66); +} + +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev { + transform: scale(0.33); +} + +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next { + transform: scale(0.66); +} + +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next { + transform: scale(0.33); +} + +.swiper-pagination-bullet { + width: var(--swiper-pagination-bullet-width, var(--swiper-pagination-bullet-size, 8px)); + height: var(--swiper-pagination-bullet-height, var(--swiper-pagination-bullet-size, 8px)); + display: inline-block; + border-radius: 50%; + background: var(--swiper-pagination-bullet-inactive-color, #000); + opacity: var(--swiper-pagination-bullet-inactive-opacity, 0.2); +} + +button.swiper-pagination-bullet { + border: none; + margin: 0; + padding: 0; + box-shadow: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.swiper-pagination-clickable .swiper-pagination-bullet { + cursor: pointer; +} + +.swiper-pagination-bullet:only-child { + display: none !important; +} + +.swiper-pagination-bullet-active { + opacity: var(--swiper-pagination-bullet-opacity, 1); + background: var(--swiper-pagination-color, var(--swiper-theme-color)); +} + +.swiper-pagination-vertical.swiper-pagination-bullets, +.swiper-vertical>.swiper-pagination-bullets { + right: 10px; + top: 50%; + transform: translate3d(0px, -50%, 0); +} + +.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet, +.swiper-vertical>.swiper-pagination-bullets .swiper-pagination-bullet { + margin: var(--swiper-pagination-bullet-vertical-gap, 6px) 0; + display: block; +} + +.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic, +.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic { + top: 50%; + transform: translateY(-50%); + width: 8px; +} + +.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet, +.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + display: inline-block; + transition: 0.2s transform, 0.2s top; +} + +.swiper-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet, +.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet { + margin: 0 var(--swiper-pagination-bullet-horizontal-gap, 4px); +} + +.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic, +.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic { + left: 50%; + transform: translateX(-50%); + white-space: nowrap; +} + +.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet, +.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + transition: 0.2s transform, 0.2s left; +} + +.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + transition: 0.2s transform, 0.2s right; +} + +.swiper-pagination-progressbar { + background: rgba(0, 0, 0, 0.25); + position: absolute; +} + +.swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + background: var(--swiper-pagination-color, var(--swiper-theme-color)); + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + transform: scale(0); + transform-origin: left top; +} + +.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + transform-origin: right top; +} + +.swiper-horizontal>.swiper-pagination-progressbar, +.swiper-pagination-progressbar.swiper-pagination-horizontal, +.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite, +.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite { + width: 100%; + height: 4px; + left: 0; + top: 0; +} + +.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite, +.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite, +.swiper-pagination-progressbar.swiper-pagination-vertical, +.swiper-vertical>.swiper-pagination-progressbar { + width: 4px; + height: 100%; + left: 0; + top: 0; +} + +.swiper-pagination-lock { + display: none; +} + +.swiper-scrollbar { + border-radius: 10px; + position: relative; + -ms-touch-action: none; + background: rgba(0, 0, 0, 0.1); +} + +.swiper-horizontal>.swiper-scrollbar { + position: absolute; + left: 1%; + bottom: 3px; + z-index: 50; + height: 5px; + width: 98%; +} + +.swiper-vertical>.swiper-scrollbar { + position: absolute; + right: 3px; + top: 1%; + z-index: 50; + width: 5px; + height: 98%; +} + +.swiper-scrollbar-drag { + height: 100%; + width: 100%; + position: relative; + background: rgba(0, 0, 0, 0.5); + border-radius: 10px; + left: 0; + top: 0; +} + +.swiper-scrollbar-cursor-drag { + cursor: move; +} + +.swiper-scrollbar-lock { + display: none; +} + +.swiper-zoom-container { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + text-align: center; +} + +.swiper-zoom-container>canvas, +.swiper-zoom-container>img, +.swiper-zoom-container>svg { + max-width: 100%; + max-height: 100%; + -o-object-fit: contain; + object-fit: contain; +} + +.swiper-slide-zoomed { + cursor: move; +} + +.swiper-lazy-preloader { + width: 42px; + height: 42px; + position: absolute; + left: 50%; + top: 50%; + margin-left: -21px; + margin-top: -21px; + z-index: 10; + transform-origin: 50%; + box-sizing: border-box; + border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color)); + border-radius: 50%; + border-top-color: transparent; +} + +.swiper-slide-visible .swiper-lazy-preloader { + animation: swiper-preloader-spin 1s infinite linear; +} + +.swiper-lazy-preloader-white { + --swiper-preloader-color: #fff; +} + +.swiper-lazy-preloader-black { + --swiper-preloader-color: #000; +} + +@keyframes swiper-preloader-spin { + 100% { + transform: rotate(360deg); + } +} + +.swiper .swiper-notification { + position: absolute; + left: 0; + top: 0; + pointer-events: none; + opacity: 0; + z-index: -1000; +} + +.swiper-free-mode>.swiper-wrapper { + transition-timing-function: ease-out; + margin: 0 auto; +} + +.swiper-grid>.swiper-wrapper { + flex-wrap: wrap; +} + +.swiper-grid-column>.swiper-wrapper { + flex-wrap: wrap; + flex-direction: column; +} + +.swiper-fade.swiper-free-mode .swiper-slide { + transition-timing-function: ease-out; +} + +.swiper-fade .swiper-slide { + pointer-events: none; + transition-property: opacity; +} + +.swiper-fade .swiper-slide .swiper-slide { + pointer-events: none; +} + +.swiper-fade .swiper-slide-active, +.swiper-fade .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} + +.swiper-cube { + overflow: visible; +} + +.swiper-cube .swiper-slide { + pointer-events: none; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; + visibility: hidden; + transform-origin: 0 0; + width: 100%; + height: 100%; +} + +.swiper-cube .swiper-slide .swiper-slide { + pointer-events: none; +} + +.swiper-cube.swiper-rtl .swiper-slide { + transform-origin: 100% 0; +} + +.swiper-cube .swiper-slide-active, +.swiper-cube .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} + +.swiper-cube .swiper-slide-active, +.swiper-cube .swiper-slide-next, +.swiper-cube .swiper-slide-next+.swiper-slide, +.swiper-cube .swiper-slide-prev { + pointer-events: auto; + visibility: visible; +} + +.swiper-cube .swiper-slide-shadow-bottom, +.swiper-cube .swiper-slide-shadow-left, +.swiper-cube .swiper-slide-shadow-right, +.swiper-cube .swiper-slide-shadow-top { + z-index: 0; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} + +.swiper-cube .swiper-cube-shadow { + position: absolute; + left: 0; + bottom: 0px; + width: 100%; + height: 100%; + opacity: 0.6; + z-index: 0; +} + +.swiper-cube .swiper-cube-shadow:before { + content: ""; + background: #000; + position: absolute; + left: 0; + top: 0; + bottom: 0; + right: 0; + filter: blur(50px); +} + +.swiper-flip { + overflow: visible; +} + +.swiper-flip .swiper-slide { + pointer-events: none; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; +} + +.swiper-flip .swiper-slide .swiper-slide { + pointer-events: none; +} + +.swiper-flip .swiper-slide-active, +.swiper-flip .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} + +.swiper-flip .swiper-slide-shadow-bottom, +.swiper-flip .swiper-slide-shadow-left, +.swiper-flip .swiper-slide-shadow-right, +.swiper-flip .swiper-slide-shadow-top { + z-index: 0; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} + +.swiper-creative .swiper-slide { + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + overflow: hidden; + transition-property: transform, opacity, height; +} + +.swiper-cards { + overflow: visible; +} + +.swiper-cards .swiper-slide { + transform-origin: center bottom; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + overflow: hidden; +} \ No newline at end of file diff --git a/main/static/main/assets/fonts/font-awesome/fontawesome-webfont.woff2 b/main/static/main/assets/fonts/font-awesome/fontawesome-webfont.woff2 new file mode 100755 index 0000000..073d872 --- /dev/null +++ b/main/static/main/assets/fonts/font-awesome/fontawesome-webfont.woff2 @@ -0,0 +1 @@ +No Content: https://codextheme.codexperts.in/tailwind-theme/uero/assets/fonts/font-awesome/fontawesome-webfont.woff2?v=4.7.0 \ No newline at end of file diff --git a/main/static/main/assets/fonts/themify-icon/themify.woff b/main/static/main/assets/fonts/themify-icon/themify.woff new file mode 100755 index 0000000..d356ad8 --- /dev/null +++ b/main/static/main/assets/fonts/themify-icon/themify.woff @@ -0,0 +1 @@ +No Content: https://codextheme.codexperts.in/tailwind-theme/uero/assets/fonts/themify-icon/themify.woff?-fvbane \ No newline at end of file diff --git a/main/static/main/assets/images/about/1.webp b/main/static/main/assets/images/about/1.webp new file mode 100755 index 0000000..7f8e308 Binary files /dev/null and b/main/static/main/assets/images/about/1.webp differ diff --git a/main/static/main/assets/images/about/2.webp b/main/static/main/assets/images/about/2.webp new file mode 100755 index 0000000..7c61b1f Binary files /dev/null and b/main/static/main/assets/images/about/2.webp differ diff --git a/main/static/main/assets/images/about/3.webp b/main/static/main/assets/images/about/3.webp new file mode 100755 index 0000000..f90d4c9 Binary files /dev/null and b/main/static/main/assets/images/about/3.webp differ diff --git a/main/static/main/assets/images/about/4.webp b/main/static/main/assets/images/about/4.webp new file mode 100755 index 0000000..686c156 Binary files /dev/null and b/main/static/main/assets/images/about/4.webp differ diff --git a/main/static/main/assets/images/android.png b/main/static/main/assets/images/android.png new file mode 100755 index 0000000..f78e919 Binary files /dev/null and b/main/static/main/assets/images/android.png differ diff --git a/main/static/main/assets/images/auth/1.webp b/main/static/main/assets/images/auth/1.webp new file mode 100755 index 0000000..b9b33c4 Binary files /dev/null and b/main/static/main/assets/images/auth/1.webp differ diff --git a/main/static/main/assets/images/auth/2.webp b/main/static/main/assets/images/auth/2.webp new file mode 100755 index 0000000..63e12d5 Binary files /dev/null and b/main/static/main/assets/images/auth/2.webp differ diff --git a/main/static/main/assets/images/avtar/1.webp b/main/static/main/assets/images/avtar/1.webp new file mode 100755 index 0000000..cea0042 Binary files /dev/null and b/main/static/main/assets/images/avtar/1.webp differ diff --git a/main/static/main/assets/images/avtar/2.webp b/main/static/main/assets/images/avtar/2.webp new file mode 100755 index 0000000..55ba325 Binary files /dev/null and b/main/static/main/assets/images/avtar/2.webp differ diff --git a/main/static/main/assets/images/avtar/3.webp b/main/static/main/assets/images/avtar/3.webp new file mode 100755 index 0000000..411db79 Binary files /dev/null and b/main/static/main/assets/images/avtar/3.webp differ diff --git a/main/static/main/assets/images/avtar/4.webp b/main/static/main/assets/images/avtar/4.webp new file mode 100755 index 0000000..0dd7c00 Binary files /dev/null and b/main/static/main/assets/images/avtar/4.webp differ diff --git a/main/static/main/assets/images/avtar/5.webp b/main/static/main/assets/images/avtar/5.webp new file mode 100755 index 0000000..f3a8e84 Binary files /dev/null and b/main/static/main/assets/images/avtar/5.webp differ diff --git a/main/static/main/assets/images/avtar/6.webp b/main/static/main/assets/images/avtar/6.webp new file mode 100755 index 0000000..e1f846c Binary files /dev/null and b/main/static/main/assets/images/avtar/6.webp differ diff --git a/main/static/main/assets/images/bg-banner/1.webp b/main/static/main/assets/images/bg-banner/1.webp new file mode 100755 index 0000000..4029bde Binary files /dev/null and b/main/static/main/assets/images/bg-banner/1.webp differ diff --git a/main/static/main/assets/images/bg-banner/2.webp b/main/static/main/assets/images/bg-banner/2.webp new file mode 100755 index 0000000..99d45ac Binary files /dev/null and b/main/static/main/assets/images/bg-banner/2.webp differ diff --git a/main/static/main/assets/images/blog/1.webp b/main/static/main/assets/images/blog/1.webp new file mode 100755 index 0000000..26764ae Binary files /dev/null and b/main/static/main/assets/images/blog/1.webp differ diff --git a/main/static/main/assets/images/blog/2.webp b/main/static/main/assets/images/blog/2.webp new file mode 100755 index 0000000..964c28d Binary files /dev/null and b/main/static/main/assets/images/blog/2.webp differ diff --git a/main/static/main/assets/images/blog/3.webp b/main/static/main/assets/images/blog/3.webp new file mode 100755 index 0000000..89b00a9 Binary files /dev/null and b/main/static/main/assets/images/blog/3.webp differ diff --git a/main/static/main/assets/images/blog/4.webp b/main/static/main/assets/images/blog/4.webp new file mode 100755 index 0000000..a866e39 Binary files /dev/null and b/main/static/main/assets/images/blog/4.webp differ diff --git a/main/static/main/assets/images/blog/5.webp b/main/static/main/assets/images/blog/5.webp new file mode 100755 index 0000000..abaa4b3 Binary files /dev/null and b/main/static/main/assets/images/blog/5.webp differ diff --git a/main/static/main/assets/images/blog/6.webp b/main/static/main/assets/images/blog/6.webp new file mode 100755 index 0000000..0e59cf4 Binary files /dev/null and b/main/static/main/assets/images/blog/6.webp differ diff --git a/main/static/main/assets/images/blog/7.webp b/main/static/main/assets/images/blog/7.webp new file mode 100755 index 0000000..3d0a648 Binary files /dev/null and b/main/static/main/assets/images/blog/7.webp differ diff --git a/main/static/main/assets/images/blog/8.webp b/main/static/main/assets/images/blog/8.webp new file mode 100755 index 0000000..1d95fef Binary files /dev/null and b/main/static/main/assets/images/blog/8.webp differ diff --git a/main/static/main/assets/images/blog/9.webp b/main/static/main/assets/images/blog/9.webp new file mode 100755 index 0000000..87b16b3 Binary files /dev/null and b/main/static/main/assets/images/blog/9.webp differ diff --git a/main/static/main/assets/images/blog/blog1.webp b/main/static/main/assets/images/blog/blog1.webp new file mode 100755 index 0000000..a328172 Binary files /dev/null and b/main/static/main/assets/images/blog/blog1.webp differ diff --git a/main/static/main/assets/images/career/1.webp b/main/static/main/assets/images/career/1.webp new file mode 100755 index 0000000..23543ba Binary files /dev/null and b/main/static/main/assets/images/career/1.webp differ diff --git a/main/static/main/assets/images/career/2.webp b/main/static/main/assets/images/career/2.webp new file mode 100755 index 0000000..02c1f4a Binary files /dev/null and b/main/static/main/assets/images/career/2.webp differ diff --git a/main/static/main/assets/images/career/3.webp b/main/static/main/assets/images/career/3.webp new file mode 100755 index 0000000..c921942 Binary files /dev/null and b/main/static/main/assets/images/career/3.webp differ diff --git a/main/static/main/assets/images/career/4.webp b/main/static/main/assets/images/career/4.webp new file mode 100755 index 0000000..8df0e36 Binary files /dev/null and b/main/static/main/assets/images/career/4.webp differ diff --git a/main/static/main/assets/images/category/1.webp b/main/static/main/assets/images/category/1.webp new file mode 100755 index 0000000..72af2af Binary files /dev/null and b/main/static/main/assets/images/category/1.webp differ diff --git a/main/static/main/assets/images/category/2.webp b/main/static/main/assets/images/category/2.webp new file mode 100755 index 0000000..79132cb Binary files /dev/null and b/main/static/main/assets/images/category/2.webp differ diff --git a/main/static/main/assets/images/category/3.webp b/main/static/main/assets/images/category/3.webp new file mode 100755 index 0000000..83659ed Binary files /dev/null and b/main/static/main/assets/images/category/3.webp differ diff --git a/main/static/main/assets/images/category/4.webp b/main/static/main/assets/images/category/4.webp new file mode 100755 index 0000000..26722e3 Binary files /dev/null and b/main/static/main/assets/images/category/4.webp differ diff --git a/main/static/main/assets/images/category2/1.webp b/main/static/main/assets/images/category2/1.webp new file mode 100755 index 0000000..4764155 Binary files /dev/null and b/main/static/main/assets/images/category2/1.webp differ diff --git a/main/static/main/assets/images/category2/2.webp b/main/static/main/assets/images/category2/2.webp new file mode 100755 index 0000000..4dbf0d8 Binary files /dev/null and b/main/static/main/assets/images/category2/2.webp differ diff --git a/main/static/main/assets/images/category2/3.webp b/main/static/main/assets/images/category2/3.webp new file mode 100755 index 0000000..91d64f5 Binary files /dev/null and b/main/static/main/assets/images/category2/3.webp differ diff --git a/main/static/main/assets/images/category2/4.webp b/main/static/main/assets/images/category2/4.webp new file mode 100755 index 0000000..e00f392 Binary files /dev/null and b/main/static/main/assets/images/category2/4.webp differ diff --git a/main/static/main/assets/images/category2/5.webp b/main/static/main/assets/images/category2/5.webp new file mode 100755 index 0000000..79e5593 Binary files /dev/null and b/main/static/main/assets/images/category2/5.webp differ diff --git a/main/static/main/assets/images/category2/6.webp b/main/static/main/assets/images/category2/6.webp new file mode 100755 index 0000000..45fe9fe Binary files /dev/null and b/main/static/main/assets/images/category2/6.webp differ diff --git a/main/static/main/assets/images/category2/7.webp b/main/static/main/assets/images/category2/7.webp new file mode 100755 index 0000000..0141c0b Binary files /dev/null and b/main/static/main/assets/images/category2/7.webp differ diff --git a/main/static/main/assets/images/category2/8.webp b/main/static/main/assets/images/category2/8.webp new file mode 100755 index 0000000..a9985fd Binary files /dev/null and b/main/static/main/assets/images/category2/8.webp differ diff --git a/main/static/main/assets/images/coming-bg.webp b/main/static/main/assets/images/coming-bg.webp new file mode 100755 index 0000000..4cf028c Binary files /dev/null and b/main/static/main/assets/images/coming-bg.webp differ diff --git a/main/static/main/assets/images/course-detail/1.webp b/main/static/main/assets/images/course-detail/1.webp new file mode 100755 index 0000000..1c9b058 Binary files /dev/null and b/main/static/main/assets/images/course-detail/1.webp differ diff --git a/main/static/main/assets/images/course-detail/video-banner.webp b/main/static/main/assets/images/course-detail/video-banner.webp new file mode 100755 index 0000000..431176d Binary files /dev/null and b/main/static/main/assets/images/course-detail/video-banner.webp differ diff --git a/main/static/main/assets/images/course/1.webp b/main/static/main/assets/images/course/1.webp new file mode 100755 index 0000000..ec7487f Binary files /dev/null and b/main/static/main/assets/images/course/1.webp differ diff --git a/main/static/main/assets/images/course/2.webp b/main/static/main/assets/images/course/2.webp new file mode 100755 index 0000000..47d1b5c Binary files /dev/null and b/main/static/main/assets/images/course/2.webp differ diff --git a/main/static/main/assets/images/course/3.webp b/main/static/main/assets/images/course/3.webp new file mode 100755 index 0000000..116b54c Binary files /dev/null and b/main/static/main/assets/images/course/3.webp differ diff --git a/main/static/main/assets/images/course/4.webp b/main/static/main/assets/images/course/4.webp new file mode 100755 index 0000000..81f39e5 Binary files /dev/null and b/main/static/main/assets/images/course/4.webp differ diff --git a/main/static/main/assets/images/course/5.webp b/main/static/main/assets/images/course/5.webp new file mode 100755 index 0000000..6dd46b7 Binary files /dev/null and b/main/static/main/assets/images/course/5.webp differ diff --git a/main/static/main/assets/images/course/6.webp b/main/static/main/assets/images/course/6.webp new file mode 100755 index 0000000..a361bca Binary files /dev/null and b/main/static/main/assets/images/course/6.webp differ diff --git a/main/static/main/assets/images/discount-banner/1.webp b/main/static/main/assets/images/discount-banner/1.webp new file mode 100755 index 0000000..3ed519e Binary files /dev/null and b/main/static/main/assets/images/discount-banner/1.webp differ diff --git a/main/static/main/assets/images/discount-banner/2.webp b/main/static/main/assets/images/discount-banner/2.webp new file mode 100755 index 0000000..7e1581c Binary files /dev/null and b/main/static/main/assets/images/discount-banner/2.webp differ diff --git a/main/static/main/assets/images/faq/1.webp b/main/static/main/assets/images/faq/1.webp new file mode 100755 index 0000000..3f19c7f Binary files /dev/null and b/main/static/main/assets/images/faq/1.webp differ diff --git a/main/static/main/assets/images/faq/2.webp b/main/static/main/assets/images/faq/2.webp new file mode 100755 index 0000000..483462a Binary files /dev/null and b/main/static/main/assets/images/faq/2.webp differ diff --git a/main/static/main/assets/images/faq/3.webp b/main/static/main/assets/images/faq/3.webp new file mode 100755 index 0000000..cab654c Binary files /dev/null and b/main/static/main/assets/images/faq/3.webp differ diff --git a/main/static/main/assets/images/faq/4.webp b/main/static/main/assets/images/faq/4.webp new file mode 100755 index 0000000..1b31c16 Binary files /dev/null and b/main/static/main/assets/images/faq/4.webp differ diff --git a/main/static/main/assets/images/gallery/1.webp b/main/static/main/assets/images/gallery/1.webp new file mode 100755 index 0000000..969d7c1 Binary files /dev/null and b/main/static/main/assets/images/gallery/1.webp differ diff --git a/main/static/main/assets/images/gallery/2.webp b/main/static/main/assets/images/gallery/2.webp new file mode 100755 index 0000000..261d514 Binary files /dev/null and b/main/static/main/assets/images/gallery/2.webp differ diff --git a/main/static/main/assets/images/gallery/3.webp b/main/static/main/assets/images/gallery/3.webp new file mode 100755 index 0000000..b794c3b Binary files /dev/null and b/main/static/main/assets/images/gallery/3.webp differ diff --git a/main/static/main/assets/images/gallery/4.webp b/main/static/main/assets/images/gallery/4.webp new file mode 100755 index 0000000..be30a4e Binary files /dev/null and b/main/static/main/assets/images/gallery/4.webp differ diff --git a/main/static/main/assets/images/gallery/5.webp b/main/static/main/assets/images/gallery/5.webp new file mode 100755 index 0000000..73049fd Binary files /dev/null and b/main/static/main/assets/images/gallery/5.webp differ diff --git a/main/static/main/assets/images/gallery/6.webp b/main/static/main/assets/images/gallery/6.webp new file mode 100755 index 0000000..a987977 Binary files /dev/null and b/main/static/main/assets/images/gallery/6.webp differ diff --git a/main/static/main/assets/images/herointro/1.webp b/main/static/main/assets/images/herointro/1.webp new file mode 100755 index 0000000..504a608 Binary files /dev/null and b/main/static/main/assets/images/herointro/1.webp differ diff --git a/main/static/main/assets/images/herointro/2.webp b/main/static/main/assets/images/herointro/2.webp new file mode 100755 index 0000000..21e0f45 Binary files /dev/null and b/main/static/main/assets/images/herointro/2.webp differ diff --git a/main/static/main/assets/images/herointro/3.webp b/main/static/main/assets/images/herointro/3.webp new file mode 100755 index 0000000..98ff20f Binary files /dev/null and b/main/static/main/assets/images/herointro/3.webp differ diff --git a/main/static/main/assets/images/herointro/4.webp b/main/static/main/assets/images/herointro/4.webp new file mode 100755 index 0000000..4c75333 Binary files /dev/null and b/main/static/main/assets/images/herointro/4.webp differ diff --git a/main/static/main/assets/images/ios.png b/main/static/main/assets/images/ios.png new file mode 100755 index 0000000..cff4543 Binary files /dev/null and b/main/static/main/assets/images/ios.png differ diff --git a/main/static/main/assets/images/logo/favicon.png b/main/static/main/assets/images/logo/favicon.png new file mode 100644 index 0000000..99ef222 Binary files /dev/null and b/main/static/main/assets/images/logo/favicon.png differ diff --git a/main/static/main/assets/images/logo/favicon1.png b/main/static/main/assets/images/logo/favicon1.png new file mode 100644 index 0000000..9d04787 Binary files /dev/null and b/main/static/main/assets/images/logo/favicon1.png differ diff --git a/main/static/main/assets/images/logo/icon-logo.webp b/main/static/main/assets/images/logo/icon-logo.webp new file mode 100755 index 0000000..bd2fd61 Binary files /dev/null and b/main/static/main/assets/images/logo/icon-logo.webp differ diff --git a/main/static/main/assets/images/logo/logo-light.png b/main/static/main/assets/images/logo/logo-light.png new file mode 100644 index 0000000..412e539 Binary files /dev/null and b/main/static/main/assets/images/logo/logo-light.png differ diff --git a/main/static/main/assets/images/logo/logo-light.webp b/main/static/main/assets/images/logo/logo-light.webp new file mode 100755 index 0000000..a820c8d Binary files /dev/null and b/main/static/main/assets/images/logo/logo-light.webp differ diff --git a/main/static/main/assets/images/logo/logo-light1.png b/main/static/main/assets/images/logo/logo-light1.png new file mode 100644 index 0000000..18842b0 Binary files /dev/null and b/main/static/main/assets/images/logo/logo-light1.png differ diff --git a/main/static/main/assets/images/logo/logo-light2.png b/main/static/main/assets/images/logo/logo-light2.png new file mode 100644 index 0000000..a87c970 Binary files /dev/null and b/main/static/main/assets/images/logo/logo-light2.png differ diff --git a/main/static/main/assets/images/logo/logo.png b/main/static/main/assets/images/logo/logo.png new file mode 100644 index 0000000..f95d4b5 Binary files /dev/null and b/main/static/main/assets/images/logo/logo.png differ diff --git a/main/static/main/assets/images/logo/logo.webp b/main/static/main/assets/images/logo/logo.webp new file mode 100755 index 0000000..f4c8bf4 Binary files /dev/null and b/main/static/main/assets/images/logo/logo.webp differ diff --git a/main/static/main/assets/images/logo/logo1.png b/main/static/main/assets/images/logo/logo1.png new file mode 100644 index 0000000..0e94c89 Binary files /dev/null and b/main/static/main/assets/images/logo/logo1.png differ diff --git a/main/static/main/assets/images/logo/logo2.png b/main/static/main/assets/images/logo/logo2.png new file mode 100644 index 0000000..ceb1d4c Binary files /dev/null and b/main/static/main/assets/images/logo/logo2.png differ diff --git a/main/static/main/assets/images/logo/whiteicon-logo.webp b/main/static/main/assets/images/logo/whiteicon-logo.webp new file mode 100755 index 0000000..147a1b5 Binary files /dev/null and b/main/static/main/assets/images/logo/whiteicon-logo.webp differ diff --git a/main/static/main/assets/images/popup-bg/1.webp b/main/static/main/assets/images/popup-bg/1.webp new file mode 100755 index 0000000..4e1e782 Binary files /dev/null and b/main/static/main/assets/images/popup-bg/1.webp differ diff --git a/main/static/main/assets/images/popup-bg/2.webp b/main/static/main/assets/images/popup-bg/2.webp new file mode 100755 index 0000000..cc487d6 Binary files /dev/null and b/main/static/main/assets/images/popup-bg/2.webp differ diff --git a/main/static/main/assets/images/popup-bg/3.webp b/main/static/main/assets/images/popup-bg/3.webp new file mode 100755 index 0000000..643e882 Binary files /dev/null and b/main/static/main/assets/images/popup-bg/3.webp differ diff --git a/main/static/main/assets/images/popup-bg/4.webp b/main/static/main/assets/images/popup-bg/4.webp new file mode 100755 index 0000000..20cc792 Binary files /dev/null and b/main/static/main/assets/images/popup-bg/4.webp differ diff --git a/main/static/main/assets/images/team/1.webp b/main/static/main/assets/images/team/1.webp new file mode 100755 index 0000000..94f19cc Binary files /dev/null and b/main/static/main/assets/images/team/1.webp differ diff --git a/main/static/main/assets/images/team/2.webp b/main/static/main/assets/images/team/2.webp new file mode 100755 index 0000000..0eb3e6d Binary files /dev/null and b/main/static/main/assets/images/team/2.webp differ diff --git a/main/static/main/assets/images/team/3.webp b/main/static/main/assets/images/team/3.webp new file mode 100755 index 0000000..cf7a0b3 Binary files /dev/null and b/main/static/main/assets/images/team/3.webp differ diff --git a/main/static/main/assets/images/team/4.webp b/main/static/main/assets/images/team/4.webp new file mode 100755 index 0000000..511bad1 Binary files /dev/null and b/main/static/main/assets/images/team/4.webp differ diff --git a/main/static/main/assets/images/team/5.webp b/main/static/main/assets/images/team/5.webp new file mode 100755 index 0000000..23cee2b Binary files /dev/null and b/main/static/main/assets/images/team/5.webp differ diff --git a/main/static/main/assets/images/team/6.webp b/main/static/main/assets/images/team/6.webp new file mode 100755 index 0000000..9297bd3 Binary files /dev/null and b/main/static/main/assets/images/team/6.webp differ diff --git a/main/static/main/assets/images/team/7.webp b/main/static/main/assets/images/team/7.webp new file mode 100755 index 0000000..9cf0a4e Binary files /dev/null and b/main/static/main/assets/images/team/7.webp differ diff --git a/main/static/main/assets/images/team/8.webp b/main/static/main/assets/images/team/8.webp new file mode 100755 index 0000000..9695e9d Binary files /dev/null and b/main/static/main/assets/images/team/8.webp differ diff --git a/main/static/main/assets/images/team/learning.webp b/main/static/main/assets/images/team/learning.webp new file mode 100755 index 0000000..de76d00 Binary files /dev/null and b/main/static/main/assets/images/team/learning.webp differ diff --git a/main/static/main/assets/images/team/teaching.webp b/main/static/main/assets/images/team/teaching.webp new file mode 100755 index 0000000..c33273e Binary files /dev/null and b/main/static/main/assets/images/team/teaching.webp differ diff --git a/main/static/main/assets/images/why-choose/1.webp b/main/static/main/assets/images/why-choose/1.webp new file mode 100755 index 0000000..4851600 Binary files /dev/null and b/main/static/main/assets/images/why-choose/1.webp differ diff --git a/main/static/main/assets/images/why-choose/icons/1.webp b/main/static/main/assets/images/why-choose/icons/1.webp new file mode 100755 index 0000000..ba03f21 Binary files /dev/null and b/main/static/main/assets/images/why-choose/icons/1.webp differ diff --git a/main/static/main/assets/images/why-choose/icons/2.webp b/main/static/main/assets/images/why-choose/icons/2.webp new file mode 100755 index 0000000..065f69b Binary files /dev/null and b/main/static/main/assets/images/why-choose/icons/2.webp differ diff --git a/main/static/main/assets/images/why-choose/icons/3.webp b/main/static/main/assets/images/why-choose/icons/3.webp new file mode 100755 index 0000000..f7f887f Binary files /dev/null and b/main/static/main/assets/images/why-choose/icons/3.webp differ diff --git a/main/static/main/assets/images/why-choose/icons/4.webp b/main/static/main/assets/images/why-choose/icons/4.webp new file mode 100755 index 0000000..ba8dd48 Binary files /dev/null and b/main/static/main/assets/images/why-choose/icons/4.webp differ diff --git a/main/static/main/assets/images/workstep/1.webp b/main/static/main/assets/images/workstep/1.webp new file mode 100755 index 0000000..36d880b Binary files /dev/null and b/main/static/main/assets/images/workstep/1.webp differ diff --git a/main/static/main/assets/images/workstep/2.webp b/main/static/main/assets/images/workstep/2.webp new file mode 100755 index 0000000..d10a4c3 Binary files /dev/null and b/main/static/main/assets/images/workstep/2.webp differ diff --git a/main/static/main/assets/images/workstep/3.webp b/main/static/main/assets/images/workstep/3.webp new file mode 100755 index 0000000..c38321e Binary files /dev/null and b/main/static/main/assets/images/workstep/3.webp differ diff --git a/main/static/main/assets/js/chat.js b/main/static/main/assets/js/chat.js new file mode 100755 index 0000000..70621b4 --- /dev/null +++ b/main/static/main/assets/js/chat.js @@ -0,0 +1,29 @@ +var d, h, m, $messages = $(".chat-body"), + i = 0; + +function updateScrollbar() { + document.querySelector("#scrollbottom .simplebar-content-wrapper").scrollTo({ + top: 1e5, + behavior: "smooth" + }) +} + +function insertMessage() { + if (msg = $(".write-message").val(), "" == $.trim(msg)) return !1; + $('
  • ' + msg + "

  • ").appendTo($(".chat-body ul.chat-list")), $(".write-message").val(null), updateScrollbar(), setTimeout(function() { + fakeMessage() + }, 1e3 + 2e3 * Math.random()) +} +$(".send-message").click(function() { + insertMessage() +}), $(window).on("keydown", function(a) { + if (13 == a.which) return insertMessage(), !1 +}); +var Fake = ["Hi there, I'm Jesse and you?", "Nice to meet you", "How are you?", "Not too bad, thanks", "What do you do?", "That's awesome", "Codepen is a nice place to stay", "I think you're a nice person", "Why do you think that?", "Can you explain?", "Anyway I've gotta go now", "It was a pleasure chat with you", "Time to make a new codepen", "Bye", ":)"]; + +function fakeMessage() { + if ("" != $(".write-message").val()) return !1; + $('
  • ').appendTo($(".chat-body ul.chat-list")), updateScrollbar(), setTimeout(function() { + $(".msg-loader").remove(), $('
  • live chat

    ' + Fake[i] + "

  • ").appendTo($(".chat-body ul.chat-list")), updateScrollbar(), i++ + }, 850 + 2e3 * Math.random()) +} \ No newline at end of file diff --git a/main/static/main/assets/js/countdown.js b/main/static/main/assets/js/countdown.js new file mode 100755 index 0000000..2cfefe0 --- /dev/null +++ b/main/static/main/assets/js/countdown.js @@ -0,0 +1,14 @@ +const countdown = () => { + let e = new Date("January 1, 2023 00:00:00").getTime(), + $ = new Date().getTime(), + n = e - $, + r = 6e4, + o = 36e5, + t = 24 * o, + u = Math.floor(n / t), + c = Math.floor(n % t / o), + l = Math.floor(n % o / 6e4), + i = Math.floor(n % 6e4 / 1e3); + document.querySelector(".day").innerText = u, document.querySelector(".hour").innerText = c, document.querySelector(".minute").innerText = l, document.querySelector(".second").innerText = i, n <= 0 && (clearInterval(watchCountdown), document.querySelector(".day").innerHTML = "0", document.querySelector(".hour").innerHTML = "0", document.querySelector(".minute").innerHTML = "0", document.querySelector(".second").innerHTML = "0") +}; +let watchCountdown = setInterval(countdown, 1e3); \ No newline at end of file diff --git a/main/static/main/assets/js/countup.js b/main/static/main/assets/js/countup.js new file mode 100755 index 0000000..e356fe5 --- /dev/null +++ b/main/static/main/assets/js/countup.js @@ -0,0 +1,31 @@ +! function(t) { + "use strict"; + t.fn.rCounter = function(n) { + var r = t.extend({ + duration: 40, + easing: "swing" + }, n); + return this.each(function() { + var n = t(this), + e = function() { + var t = []; + n.length; + for (var e = n.text(), i = /[,\-]/.test(e), o = /[,\-]/.test(e), e = e.replace(/,/g, ""), u = r.duration, a = o ? (e.split(".")[1] || []).length : 0, f = u; f >= 1; f--) { + var s = parseInt(e / u * f); + if (o && (s = parseFloat(e / u * f).toFixed(a)), i) + for (; + /(\d+)(\d{3})/.test(s.toString());) s = s.toString().replace(/(\d+)(\d{3})/, "$1,$2"); + t.unshift(s) + } + var c = function() { + n.text(t.shift()), setTimeout(c, r.duration) + }; + setTimeout(c, r.duration) + }; + n.waypoint(e, { + offset: "100%", + triggerOnce: !0 + }) + }) + }, t(".count-num").rCounter() +}(jQuery); \ No newline at end of file diff --git a/main/static/main/assets/js/fancybox.js b/main/static/main/assets/js/fancybox.js new file mode 100755 index 0000000..193ad98 --- /dev/null +++ b/main/static/main/assets/js/fancybox.js @@ -0,0 +1,3822 @@ +// @fancyapps/ui/Fancybox v4.0.26 +! function(t, e) { + "object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ? define(["exports"], e) : e((t = "undefined" != typeof globalThis ? globalThis : t || self).window = t.window || {}) +}(this, (function(t) { + "use strict"; + + function e(t, e) { + var i = Object.keys(t); + if (Object.getOwnPropertySymbols) { + var n = Object.getOwnPropertySymbols(t); + e && (n = n.filter((function(e) { + return Object.getOwnPropertyDescriptor(t, e).enumerable + }))), i.push.apply(i, n) + } + return i + } + + function i(t) { + for (var i = 1; i < arguments.length; i++) { + var n = null != arguments[i] ? arguments[i] : {}; + i % 2 ? e(Object(n), !0).forEach((function(e) { + r(t, e, n[e]) + })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : e(Object(n)).forEach((function(e) { + Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e)) + })) + } + return t + } + + function n(t) { + return n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { + return typeof t + } : function(t) { + return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t + }, n(t) + } + + function o(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + } + + function a(t, e) { + for (var i = 0; i < e.length; i++) { + var n = e[i]; + n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n) + } + } + + function s(t, e, i) { + return e && a(t.prototype, e), i && a(t, i), Object.defineProperty(t, "prototype", { + writable: !1 + }), t + } + + function r(t, e, i) { + return e in t ? Object.defineProperty(t, e, { + value: i, + enumerable: !0, + configurable: !0, + writable: !0 + }) : t[e] = i, t + } + + function l(t, e) { + if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); + t.prototype = Object.create(e && e.prototype, { + constructor: { + value: t, + writable: !0, + configurable: !0 + } + }), Object.defineProperty(t, "prototype", { + writable: !1 + }), e && h(t, e) + } + + function c(t) { + return c = Object.setPrototypeOf ? Object.getPrototypeOf : function(t) { + return t.__proto__ || Object.getPrototypeOf(t) + }, c(t) + } + + function h(t, e) { + return h = Object.setPrototypeOf || function(t, e) { + return t.__proto__ = e, t + }, h(t, e) + } + + function d(t) { + if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return t + } + + function u(t, e) { + if (e && ("object" == typeof e || "function" == typeof e)) return e; + if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); + return d(t) + } + + function f(t) { + var e = function() { + if ("undefined" == typeof Reflect || !Reflect.construct) return !1; + if (Reflect.construct.sham) return !1; + if ("function" == typeof Proxy) return !0; + try { + return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() {}))), !0 + } catch (t) { + return !1 + } + }(); + return function() { + var i, n = c(t); + if (e) { + var o = c(this).constructor; + i = Reflect.construct(n, arguments, o) + } else i = n.apply(this, arguments); + return u(this, i) + } + } + + function v(t, e) { + for (; !Object.prototype.hasOwnProperty.call(t, e) && null !== (t = c(t));); + return t + } + + function p() { + return p = "undefined" != typeof Reflect && Reflect.get ? Reflect.get : function(t, e, i) { + var n = v(t, e); + if (n) { + var o = Object.getOwnPropertyDescriptor(n, e); + return o.get ? o.get.call(arguments.length < 3 ? t : i) : o.value + } + }, p.apply(this, arguments) + } + + function g(t, e) { + return function(t) { + if (Array.isArray(t)) return t + }(t) || function(t, e) { + var i = null == t ? null : "undefined" != typeof Symbol && t[Symbol.iterator] || t["@@iterator"]; + if (null == i) return; + var n, o, a = [], + s = !0, + r = !1; + try { + for (i = i.call(t); !(s = (n = i.next()).done) && (a.push(n.value), !e || a.length !== e); s = !0); + } catch (t) { + r = !0, o = t + } finally { + try { + s || null == i.return || i.return() + } finally { + if (r) throw o + } + } + return a + }(t, e) || y(t, e) || function() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.") + }() + } + + function m(t) { + return function(t) { + if (Array.isArray(t)) return b(t) + }(t) || function(t) { + if ("undefined" != typeof Symbol && null != t[Symbol.iterator] || null != t["@@iterator"]) return Array.from(t) + }(t) || y(t) || function() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.") + }() + } + + function y(t, e) { + if (t) { + if ("string" == typeof t) return b(t, e); + var i = Object.prototype.toString.call(t).slice(8, -1); + return "Object" === i && t.constructor && (i = t.constructor.name), "Map" === i || "Set" === i ? Array.from(t) : "Arguments" === i || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i) ? b(t, e) : void 0 + } + } + + function b(t, e) { + (null == e || e > t.length) && (e = t.length); + for (var i = 0, n = new Array(e); i < e; i++) n[i] = t[i]; + return n + } + + function x(t, e) { + var i = "undefined" != typeof Symbol && t[Symbol.iterator] || t["@@iterator"]; + if (!i) { + if (Array.isArray(t) || (i = y(t)) || e && t && "number" == typeof t.length) { + i && (t = i); + var n = 0, + o = function() {}; + return { + s: o, + n: function() { + return n >= t.length ? { + done: !0 + } : { + done: !1, + value: t[n++] + } + }, + e: function(t) { + throw t + }, + f: o + } + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.") + } + var a, s = !0, + r = !1; + return { + s: function() { + i = i.call(t) + }, + n: function() { + var t = i.next(); + return s = t.done, t + }, + e: function(t) { + r = !0, a = t + }, + f: function() { + try { + s || null == i.return || i.return() + } finally { + if (r) throw a + } + } + } + } + var w = function(t) { + return "object" === n(t) && null !== t && t.constructor === Object && "[object Object]" === Object.prototype.toString.call(t) + }, + k = function t() { + for (var e = !1, i = arguments.length, o = new Array(i), a = 0; a < i; a++) o[a] = arguments[a]; + "boolean" == typeof o[0] && (e = o.shift()); + var s = o[0]; + if (!s || "object" !== n(s)) throw new Error("extendee must be an object"); + for (var r = o.slice(1), l = r.length, c = 0; c < l; c++) { + var h = r[c]; + for (var d in h) + if (h.hasOwnProperty(d)) { + var u = h[d]; + if (e && (Array.isArray(u) || w(u))) { + var f = Array.isArray(u) ? [] : {}; + s[d] = t(!0, s.hasOwnProperty(d) ? s[d] : f, u) + } else s[d] = u + } + } + return s + }, + S = function(t) { + var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1e4; + return t = parseFloat(t) || 0, Math.round((t + Number.EPSILON) * e) / e + }, + C = function t(e) { + return !!(e && "object" === n(e) && e instanceof Element && e !== document.body) && (!e.__Panzoom && (function(t) { + var e = getComputedStyle(t)["overflow-y"], + i = getComputedStyle(t)["overflow-x"], + n = ("scroll" === e || "auto" === e) && Math.abs(t.scrollHeight - t.clientHeight) > 1, + o = ("scroll" === i || "auto" === i) && Math.abs(t.scrollWidth - t.clientWidth) > 1; + return n || o + }(e) ? e : t(e.parentNode))) + }, + $ = "undefined" != typeof window && window.ResizeObserver || function() { + function t(e) { + o(this, t), this.observables = [], this.boundCheck = this.check.bind(this), this.boundCheck(), this.callback = e + } + return s(t, [{ + key: "observe", + value: function(t) { + if (!this.observables.some((function(e) { + return e.el === t + }))) { + var e = { + el: t, + size: { + height: t.clientHeight, + width: t.clientWidth + } + }; + this.observables.push(e) + } + } + }, { + key: "unobserve", + value: function(t) { + this.observables = this.observables.filter((function(e) { + return e.el !== t + })) + } + }, { + key: "disconnect", + value: function() { + this.observables = [] + } + }, { + key: "check", + value: function() { + var t = this.observables.filter((function(t) { + var e = t.el.clientHeight, + i = t.el.clientWidth; + if (t.size.height !== e || t.size.width !== i) return t.size.height = e, t.size.width = i, !0 + })).map((function(t) { + return t.el + })); + t.length > 0 && this.callback(t), window.requestAnimationFrame(this.boundCheck) + } + }]), t + }(), + E = s((function t(e) { + o(this, t), this.id = self.Touch && e instanceof Touch ? e.identifier : -1, this.pageX = e.pageX, this.pageY = e.pageY, this.clientX = e.clientX, this.clientY = e.clientY + })), + P = function(t, e) { + return e ? Math.sqrt(Math.pow(e.clientX - t.clientX, 2) + Math.pow(e.clientY - t.clientY, 2)) : 0 + }, + T = function(t, e) { + return e ? { + clientX: (t.clientX + e.clientX) / 2, + clientY: (t.clientY + e.clientY) / 2 + } : t + }, + L = function(t) { + return "changedTouches" in t + }, + _ = function() { + function t(e) { + var i = this, + n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + a = n.start, + s = void 0 === a ? function() { + return !0 + } : a, + r = n.move, + l = void 0 === r ? function() {} : r, + c = n.end, + h = void 0 === c ? function() {} : c; + o(this, t), this._element = e, this.startPointers = [], this.currentPointers = [], this._pointerStart = function(t) { + if (!(t.buttons > 0 && 0 !== t.button)) { + var e = new E(t); + i.currentPointers.some((function(t) { + return t.id === e.id + })) || i._triggerPointerStart(e, t) && (window.addEventListener("mousemove", i._move), window.addEventListener("mouseup", i._pointerEnd)) + } + }, this._touchStart = function(t) { + for (var e = 0, n = Array.from(t.changedTouches || []); e < n.length; e++) { + var o = n[e]; + i._triggerPointerStart(new E(o), t) + } + }, this._move = function(t) { + var e, n = i.currentPointers.slice(), + o = L(t) ? Array.from(t.changedTouches).map((function(t) { + return new E(t) + })) : [new E(t)], + a = [], + s = x(o); + try { + var r = function() { + var t = e.value, + n = i.currentPointers.findIndex((function(e) { + return e.id === t.id + })); + if (n < 0) return "continue"; + a.push(t), i.currentPointers[n] = t + }; + for (s.s(); !(e = s.n()).done;) r() + } catch (t) { + s.e(t) + } finally { + s.f() + } + i._moveCallback(n, i.currentPointers.slice(), t) + }, this._triggerPointerEnd = function(t, e) { + var n = i.currentPointers.findIndex((function(e) { + return e.id === t.id + })); + return !(n < 0) && (i.currentPointers.splice(n, 1), i.startPointers.splice(n, 1), i._endCallback(t, e), !0) + }, this._pointerEnd = function(t) { + t.buttons > 0 && 0 !== t.button || i._triggerPointerEnd(new E(t), t) && (window.removeEventListener("mousemove", i._move, { + passive: !1 + }), window.removeEventListener("mouseup", i._pointerEnd, { + passive: !1 + })) + }, this._touchEnd = function(t) { + for (var e = 0, n = Array.from(t.changedTouches || []); e < n.length; e++) { + var o = n[e]; + i._triggerPointerEnd(new E(o), t) + } + }, this._startCallback = s, this._moveCallback = l, this._endCallback = h, this._element.addEventListener("mousedown", this._pointerStart, { + passive: !1 + }), this._element.addEventListener("touchstart", this._touchStart, { + passive: !1 + }), this._element.addEventListener("touchmove", this._move, { + passive: !1 + }), this._element.addEventListener("touchend", this._touchEnd), this._element.addEventListener("touchcancel", this._touchEnd) + } + return s(t, [{ + key: "stop", + value: function() { + this._element.removeEventListener("mousedown", this._pointerStart, { + passive: !1 + }), this._element.removeEventListener("touchstart", this._touchStart, { + passive: !1 + }), this._element.removeEventListener("touchmove", this._move, { + passive: !1 + }), this._element.removeEventListener("touchend", this._touchEnd), this._element.removeEventListener("touchcancel", this._touchEnd), window.removeEventListener("mousemove", this._move), window.removeEventListener("mouseup", this._pointerEnd) + } + }, { + key: "_triggerPointerStart", + value: function(t, e) { + return !!this._startCallback(t, e) && (this.currentPointers.push(t), this.startPointers.push(t), !0) + } + }]), t + }(), + A = function(t, e) { + return t.split(".").reduce((function(t, e) { + return t && t[e] + }), e) + }, + O = function() { + function t() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + o(this, t), this.options = k(!0, {}, e), this.plugins = [], this.events = {}; + for (var i = 0, n = ["on", "once"]; i < n.length; i++) + for (var a = n[i], s = 0, r = Object.entries(this.options[a] || {}); s < r.length; s++) { + var l = r[s]; + this[a].apply(this, m(l)) + } + } + return s(t, [{ + key: "option", + value: function(t, e) { + t = String(t); + var i = A(t, this.options); + if ("function" == typeof i) { + for (var n, o = arguments.length, a = new Array(o > 2 ? o - 2 : 0), s = 2; s < o; s++) a[s - 2] = arguments[s]; + i = (n = i).call.apply(n, [this, this].concat(a)) + } + return void 0 === i ? e : i + } + }, { + key: "localize", + value: function(t) { + var e = this, + i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : []; + return t = (t = String(t).replace(/\{\{(\w+).?(\w+)?\}\}/g, (function(t, n, o) { + var a = ""; + o ? a = e.option("".concat(n[0] + n.toLowerCase().substring(1), ".l10n.").concat(o)) : n && (a = e.option("l10n.".concat(n))), a || (a = t); + for (var s = 0; s < i.length; s++) a = a.split(i[s][0]).join(i[s][1]); + return a + }))).replace(/\{\{(.*)\}\}/, (function(t, e) { + return e + })) + } + }, { + key: "on", + value: function(t, e) { + var i = this; + if (w(t)) { + for (var n = 0, o = Object.entries(t); n < o.length; n++) { + var a = o[n]; + this.on.apply(this, m(a)) + } + return this + } + return String(t).split(" ").forEach((function(t) { + var n = i.events[t] = i.events[t] || []; - 1 == n.indexOf(e) && n.push(e) + })), this + } + }, { + key: "once", + value: function(t, e) { + var i = this; + if (w(t)) { + for (var n = 0, o = Object.entries(t); n < o.length; n++) { + var a = o[n]; + this.once.apply(this, m(a)) + } + return this + } + return String(t).split(" ").forEach((function(t) { + var n = function n() { + i.off(t, n); + for (var o = arguments.length, a = new Array(o), s = 0; s < o; s++) a[s] = arguments[s]; + e.call.apply(e, [i, i].concat(a)) + }; + n._ = e, i.on(t, n) + })), this + } + }, { + key: "off", + value: function(t, e) { + var i = this; + if (!w(t)) return t.split(" ").forEach((function(t) { + var n = i.events[t]; + if (!n || !n.length) return i; + for (var o = -1, a = 0, s = n.length; a < s; a++) { + var r = n[a]; + if (r && (r === e || r._ === e)) { + o = a; + break + } + } - 1 != o && n.splice(o, 1) + })), this; + for (var n = 0, o = Object.entries(t); n < o.length; n++) { + var a = o[n]; + this.off.apply(this, m(a)) + } + } + }, { + key: "trigger", + value: function(t) { + for (var e = arguments.length, i = new Array(e > 1 ? e - 1 : 0), n = 1; n < e; n++) i[n - 1] = arguments[n]; + var o, a = x(m(this.events[t] || []).slice()); + try { + for (a.s(); !(o = a.n()).done;) { + var s = o.value; + if (s && !1 === s.call.apply(s, [this, this].concat(i))) return !1 + } + } catch (t) { + a.e(t) + } finally { + a.f() + } + var r, l = x(m(this.events["*"] || []).slice()); + try { + for (l.s(); !(r = l.n()).done;) { + var c = r.value; + if (c && !1 === c.call.apply(c, [this, t, this].concat(i))) return !1 + } + } catch (t) { + l.e(t) + } finally { + l.f() + } + return !0 + } + }, { + key: "attachPlugins", + value: function(t) { + for (var e = {}, i = 0, n = Object.entries(t || {}); i < n.length; i++) { + var o = g(n[i], 2), + a = o[0], + s = o[1]; + !1 === this.options[a] || this.plugins[a] || (this.options[a] = k({}, s.defaults || {}, this.options[a]), e[a] = new s(this)) + } + for (var r = 0, l = Object.entries(e); r < l.length; r++) { + var c = g(l[r], 2); + c[0], c[1].attach(this) + } + return this.plugins = Object.assign({}, this.plugins, e), this + } + }, { + key: "detachPlugins", + value: function() { + for (var t in this.plugins) { + var e = void 0; + (e = this.plugins[t]) && "function" == typeof e.detach && e.detach(this) + } + return this.plugins = {}, this + } + }]), t + }(), + z = { + touch: !0, + zoom: !0, + pinchToZoom: !0, + panOnlyZoomed: !1, + lockAxis: !1, + friction: .64, + decelFriction: .88, + zoomFriction: .74, + bounceForce: .2, + baseScale: 1, + minScale: 1, + maxScale: 2, + step: .5, + textSelection: !1, + click: "toggleZoom", + wheel: "zoom", + wheelFactor: 42, + wheelLimit: 5, + draggableClass: "is-draggable", + draggingClass: "is-dragging", + ratio: 1 + }, + M = function(t) { + l(n, t); + var e = f(n); + + function n(t) { + var i, a = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + o(this, n), (i = e.call(this, k(!0, {}, z, a))).state = "init", i.$container = t; + for (var s = 0, r = ["onLoad", "onWheel", "onClick"]; s < r.length; s++) { + var l = r[s]; + i[l] = i[l].bind(d(i)) + } + return i.initLayout(), i.resetValues(), i.attachPlugins(n.Plugins), i.trigger("init"), i.updateMetrics(), i.attachEvents(), i.trigger("ready"), !1 === i.option("centerOnStart") ? i.state = "ready" : i.panTo({ + friction: 0 + }), t.__Panzoom = d(i), i + } + return s(n, [{ + key: "initLayout", + value: function() { + var t = this.$container; + if (!(t instanceof HTMLElement)) throw new Error("Panzoom: Container not found"); + var e = this.option("content") || t.querySelector(".panzoom__content"); + if (!e) throw new Error("Panzoom: Content not found"); + this.$content = e; + var i, n = this.option("viewport") || t.querySelector(".panzoom__viewport"); + n || !1 === this.option("wrapInner") || ((n = document.createElement("div")).classList.add("panzoom__viewport"), (i = n).append.apply(i, m(t.childNodes)), t.appendChild(n)); + this.$viewport = n || e.parentNode + } + }, { + key: "resetValues", + value: function() { + this.updateRate = this.option("updateRate", /iPhone|iPad|iPod|Android/i.test(navigator.userAgent) ? 250 : 24), this.container = { + width: 0, + height: 0 + }, this.viewport = { + width: 0, + height: 0 + }, this.content = { + origWidth: 0, + origHeight: 0, + width: 0, + height: 0, + x: this.option("x", 0), + y: this.option("y", 0), + scale: this.option("baseScale") + }, this.transform = { + x: 0, + y: 0, + scale: 1 + }, this.resetDragPosition() + } + }, { + key: "onLoad", + value: function(t) { + this.updateMetrics(), this.panTo({ + scale: this.option("baseScale"), + friction: 0 + }), this.trigger("load", t) + } + }, { + key: "onClick", + value: function(t) { + if (!t.defaultPrevented) + if (this.option("textSelection") && window.getSelection().toString().length) t.stopPropagation(); + else { + var e = this.$content.getClientRects()[0]; + if ("ready" !== this.state && (this.dragPosition.midPoint || Math.abs(e.top - this.dragStart.rect.top) > 1 || Math.abs(e.left - this.dragStart.rect.left) > 1)) return t.preventDefault(), void t.stopPropagation(); + !1 !== this.trigger("click", t) && this.option("zoom") && "toggleZoom" === this.option("click") && (t.preventDefault(), t.stopPropagation(), this.zoomWithClick(t)) + } + } + }, { + key: "onWheel", + value: function(t) { + !1 !== this.trigger("wheel", t) && this.option("zoom") && this.option("wheel") && this.zoomWithWheel(t) + } + }, { + key: "zoomWithWheel", + value: function(t) { + void 0 === this.changedDelta && (this.changedDelta = 0); + var e = Math.max(-1, Math.min(1, -t.deltaY || -t.deltaX || t.wheelDelta || -t.detail)), + i = this.content.scale, + n = i * (100 + e * this.option("wheelFactor")) / 100; + if (e < 0 && Math.abs(i - this.option("minScale")) < .01 || e > 0 && Math.abs(i - this.option("maxScale")) < .01 ? (this.changedDelta += Math.abs(e), n = i) : (this.changedDelta = 0, n = Math.max(Math.min(n, this.option("maxScale")), this.option("minScale"))), !(this.changedDelta > this.option("wheelLimit")) && (t.preventDefault(), n !== i)) { + var o = this.$content.getBoundingClientRect(), + a = t.clientX - o.left, + s = t.clientY - o.top; + this.zoomTo(n, { + x: a, + y: s + }) + } + } + }, { + key: "zoomWithClick", + value: function(t) { + var e = this.$content.getClientRects()[0], + i = t.clientX - e.left, + n = t.clientY - e.top; + this.toggleZoom({ + x: i, + y: n + }) + } + }, { + key: "attachEvents", + value: function() { + var t = this; + this.$content.addEventListener("load", this.onLoad), this.$container.addEventListener("wheel", this.onWheel, { + passive: !1 + }), this.$container.addEventListener("click", this.onClick, { + passive: !1 + }), this.initObserver(); + var e = new _(this.$container, { + start: function(i, n) { + if (!t.option("touch")) return !1; + if (t.velocity.scale < 0) return !1; + var o = n.composedPath()[0]; + if (!e.currentPointers.length) { + if (-1 !== ["BUTTON", "TEXTAREA", "OPTION", "INPUT", "SELECT", "VIDEO"].indexOf(o.nodeName)) return !1; + if (t.option("textSelection") && function(t, e, i) { + for (var n = t.childNodes, o = document.createRange(), a = 0; a < n.length; a++) { + var s = n[a]; + if (s.nodeType === Node.TEXT_NODE) { + o.selectNodeContents(s); + var r = o.getBoundingClientRect(); + if (e >= r.left && i >= r.top && e <= r.right && i <= r.bottom) return s + } + } + return !1 + }(o, i.clientX, i.clientY)) return !1 + } + return !C(o) && (!1 !== t.trigger("touchStart", n) && ("mousedown" === n.type && n.preventDefault(), t.state = "pointerdown", t.resetDragPosition(), t.dragPosition.midPoint = null, t.dragPosition.time = Date.now(), !0)) + }, + move: function(i, n, o) { + if ("pointerdown" === t.state) + if (!1 !== t.trigger("touchMove", o)) { + if (!(n.length < 2 && !0 === t.option("panOnlyZoomed") && t.content.width <= t.viewport.width && t.content.height <= t.viewport.height && t.transform.scale <= t.option("baseScale")) && (!(n.length > 1) || t.option("zoom") && !1 !== t.option("pinchToZoom"))) { + var a = T(i[0], i[1]), + s = T(n[0], n[1]), + r = s.clientX - a.clientX, + l = s.clientY - a.clientY, + c = P(i[0], i[1]), + h = P(n[0], n[1]), + d = c && h ? h / c : 1; + t.dragOffset.x += r, t.dragOffset.y += l, t.dragOffset.scale *= d, t.dragOffset.time = Date.now() - t.dragPosition.time; + var u = 1 === t.dragStart.scale && t.option("lockAxis"); + if (u && !t.lockAxis) { + if (Math.abs(t.dragOffset.x) < 6 && Math.abs(t.dragOffset.y) < 6) return void o.preventDefault(); + var f = Math.abs(180 * Math.atan2(t.dragOffset.y, t.dragOffset.x) / Math.PI); + t.lockAxis = f > 45 && f < 135 ? "y" : "x" + } + if ("xy" === u || "y" !== t.lockAxis) { + if (o.preventDefault(), o.stopPropagation(), o.stopImmediatePropagation(), t.lockAxis && (t.dragOffset["x" === t.lockAxis ? "y" : "x"] = 0), t.$container.classList.add(t.option("draggingClass")), t.transform.scale === t.option("baseScale") && "y" === t.lockAxis || (t.dragPosition.x = t.dragStart.x + t.dragOffset.x), t.transform.scale === t.option("baseScale") && "x" === t.lockAxis || (t.dragPosition.y = t.dragStart.y + t.dragOffset.y), t.dragPosition.scale = t.dragStart.scale * t.dragOffset.scale, n.length > 1) { + var v = T(e.startPointers[0], e.startPointers[1]), + p = v.clientX - t.dragStart.rect.x, + g = v.clientY - t.dragStart.rect.y, + m = t.getZoomDelta(t.content.scale * t.dragOffset.scale, p, g), + y = m.deltaX, + b = m.deltaY; + t.dragPosition.x -= y, t.dragPosition.y -= b, t.dragPosition.midPoint = s + } else t.setDragResistance(); + t.transform = { + x: t.dragPosition.x, + y: t.dragPosition.y, + scale: t.dragPosition.scale + }, t.startAnimation() + } + } + } else o.preventDefault() + }, + end: function(n, o) { + if ("pointerdown" === t.state) + if (t._dragOffset = i({}, t.dragOffset), e.currentPointers.length) t.resetDragPosition(); + else if (t.state = "decel", t.friction = t.option("decelFriction"), t.recalculateTransform(), t.$container.classList.remove(t.option("draggingClass")), !1 !== t.trigger("touchEnd", o) && "decel" === t.state) { + var a = t.option("minScale"); + if (t.transform.scale < a) t.zoomTo(a, { + friction: .64 + }); + else { + var s = t.option("maxScale"); + if (t.transform.scale - s > .01) { + var r = t.dragPosition.midPoint || n, + l = t.$content.getClientRects()[0]; + t.zoomTo(s, { + friction: .64, + x: r.clientX - l.left, + y: r.clientY - l.top + }) + } else; + } + } + } + }); + this.pointerTracker = e + } + }, { + key: "initObserver", + value: function() { + var t = this; + this.resizeObserver || (this.resizeObserver = new $((function() { + t.updateTimer || (t.updateTimer = setTimeout((function() { + var e = t.$container.getBoundingClientRect(); + e.width && e.height ? ((Math.abs(e.width - t.container.width) > 1 || Math.abs(e.height - t.container.height) > 1) && (t.isAnimating() && t.endAnimation(!0), t.updateMetrics(), t.panTo({ + x: t.content.x, + y: t.content.y, + scale: t.option("baseScale"), + friction: 0 + })), t.updateTimer = null) : t.updateTimer = null + }), t.updateRate)) + })), this.resizeObserver.observe(this.$container)) + } + }, { + key: "resetDragPosition", + value: function() { + this.lockAxis = null, this.friction = this.option("friction"), this.velocity = { + x: 0, + y: 0, + scale: 0 + }; + var t = this.content, + e = t.x, + n = t.y, + o = t.scale; + this.dragStart = { + rect: this.$content.getBoundingClientRect(), + x: e, + y: n, + scale: o + }, this.dragPosition = i(i({}, this.dragPosition), {}, { + x: e, + y: n, + scale: o + }), this.dragOffset = { + x: 0, + y: 0, + scale: 1, + time: 0 + } + } + }, { + key: "updateMetrics", + value: function(t) { + !0 !== t && this.trigger("beforeUpdate"); + var e, n = this.$container, + o = this.$content, + a = this.$viewport, + s = o instanceof HTMLImageElement, + r = this.option("zoom"), + l = this.option("resizeParent", r), + c = this.option("width"), + h = this.option("height"), + d = c || (e = o, Math.max(parseFloat(e.naturalWidth || 0), parseFloat(e.width && e.width.baseVal && e.width.baseVal.value || 0), parseFloat(e.offsetWidth || 0), parseFloat(e.scrollWidth || 0))), + u = h || function(t) { + return Math.max(parseFloat(t.naturalHeight || 0), parseFloat(t.height && t.height.baseVal && t.height.baseVal.value || 0), parseFloat(t.offsetHeight || 0), parseFloat(t.scrollHeight || 0)) + }(o); + Object.assign(o.style, { + width: c ? "".concat(c, "px") : "", + height: h ? "".concat(h, "px") : "", + maxWidth: "", + maxHeight: "" + }), l && Object.assign(a.style, { + width: "", + height: "" + }); + var f = this.option("ratio"); + c = d = S(d * f), h = u = S(u * f); + var v = o.getBoundingClientRect(), + p = a.getBoundingClientRect(), + g = a == n ? p : n.getBoundingClientRect(), + m = Math.max(a.offsetWidth, S(p.width)), + y = Math.max(a.offsetHeight, S(p.height)), + b = window.getComputedStyle(a); + if (m -= parseFloat(b.paddingLeft) + parseFloat(b.paddingRight), y -= parseFloat(b.paddingTop) + parseFloat(b.paddingBottom), this.viewport.width = m, this.viewport.height = y, r) { + if (Math.abs(d - v.width) > .1 || Math.abs(u - v.height) > .1) { + var x = function(t, e, i, n) { + var o = Math.min(i / t || 0, n / e); + return { + width: t * o || 0, + height: e * o || 0 + } + }(d, u, Math.min(d, v.width), Math.min(u, v.height)); + c = S(x.width), h = S(x.height) + } + Object.assign(o.style, { + width: "".concat(c, "px"), + height: "".concat(h, "px"), + transform: "" + }) + } + if (l && (Object.assign(a.style, { + width: "".concat(c, "px"), + height: "".concat(h, "px") + }), this.viewport = i(i({}, this.viewport), {}, { + width: c, + height: h + })), s && r && "function" != typeof this.options.maxScale) { + var w = this.option("maxScale"); + this.options.maxScale = function() { + return this.content.origWidth > 0 && this.content.fitWidth > 0 ? this.content.origWidth / this.content.fitWidth : w + } + } + this.content = i(i({}, this.content), {}, { + origWidth: d, + origHeight: u, + fitWidth: c, + fitHeight: h, + width: c, + height: h, + scale: 1, + isZoomable: r + }), this.container = { + width: g.width, + height: g.height + }, !0 !== t && this.trigger("afterUpdate") + } + }, { + key: "zoomIn", + value: function(t) { + this.zoomTo(this.content.scale + (t || this.option("step"))) + } + }, { + key: "zoomOut", + value: function(t) { + this.zoomTo(this.content.scale - (t || this.option("step"))) + } + }, { + key: "toggleZoom", + value: function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = this.option("maxScale"), + i = this.option("baseScale"), + n = this.content.scale > i + .5 * (e - i) ? i : e; + this.zoomTo(n, t) + } + }, { + key: "zoomTo", + value: function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.option("baseScale"), + e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + i = e.x, + n = void 0 === i ? null : i, + o = e.y, + a = void 0 === o ? null : o; + t = Math.max(Math.min(t, this.option("maxScale")), this.option("minScale")); + var s = S(this.content.scale / (this.content.width / this.content.fitWidth), 1e7); + null === n && (n = this.content.width * s * .5), null === a && (a = this.content.height * s * .5); + var r = this.getZoomDelta(t, n, a), + l = r.deltaX, + c = r.deltaY; + n = this.content.x - l, a = this.content.y - c, this.panTo({ + x: n, + y: a, + scale: t, + friction: this.option("zoomFriction") + }) + } + }, { + key: "getZoomDelta", + value: function(t) { + var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, + i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0, + n = this.content.fitWidth * this.content.scale, + o = this.content.fitHeight * this.content.scale, + a = e > 0 && n ? e / n : 0, + s = i > 0 && o ? i / o : 0, + r = this.content.fitWidth * t, + l = this.content.fitHeight * t, + c = (r - n) * a, + h = (l - o) * s; + return { + deltaX: c, + deltaY: h + } + } + }, { + key: "panTo", + value: function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.x, + n = void 0 === e ? this.content.x : e, + o = t.y, + a = void 0 === o ? this.content.y : o, + s = t.scale, + r = t.friction, + l = void 0 === r ? this.option("friction") : r, + c = t.ignoreBounds, + h = void 0 !== c && c; + if (s = s || this.content.scale || 1, !h) { + var d = this.getBounds(s), + u = d.boundX, + f = d.boundY; + u && (n = Math.max(Math.min(n, u.to), u.from)), f && (a = Math.max(Math.min(a, f.to), f.from)) + } + this.friction = l, this.transform = i(i({}, this.transform), {}, { + x: n, + y: a, + scale: s + }), l ? (this.state = "panning", this.velocity = { + x: (1 / this.friction - 1) * (n - this.content.x), + y: (1 / this.friction - 1) * (a - this.content.y), + scale: (1 / this.friction - 1) * (s - this.content.scale) + }, this.startAnimation()) : this.endAnimation() + } + }, { + key: "startAnimation", + value: function() { + var t = this; + this.rAF ? cancelAnimationFrame(this.rAF) : this.trigger("startAnimation"), this.rAF = requestAnimationFrame((function() { + return t.animate() + })) + } + }, { + key: "animate", + value: function() { + var t = this; + if (this.setEdgeForce(), this.setDragForce(), this.velocity.x *= this.friction, this.velocity.y *= this.friction, this.velocity.scale *= this.friction, this.content.x += this.velocity.x, this.content.y += this.velocity.y, this.content.scale += this.velocity.scale, this.isAnimating()) this.setTransform(); + else if ("pointerdown" !== this.state) return void this.endAnimation(); + this.rAF = requestAnimationFrame((function() { + return t.animate() + })) + } + }, { + key: "getBounds", + value: function(t) { + var e = this.boundX, + i = this.boundY; + if (void 0 !== e && void 0 !== i) return { + boundX: e, + boundY: i + }; + e = { + from: 0, + to: 0 + }, i = { + from: 0, + to: 0 + }, t = t || this.transform.scale; + var n = this.content.fitWidth * t, + o = this.content.fitHeight * t, + a = this.viewport.width, + s = this.viewport.height; + if (n < a) { + var r = S(.5 * (a - n)); + e.from = r, e.to = r + } else e.from = S(a - n); + if (o < s) { + var l = .5 * (s - o); + i.from = l, i.to = l + } else i.from = S(s - o); + return { + boundX: e, + boundY: i + } + } + }, { + key: "setEdgeForce", + value: function() { + if ("decel" === this.state) { + var t, e, i, n, o = this.option("bounceForce"), + a = this.getBounds(Math.max(this.transform.scale, this.content.scale)), + s = a.boundX, + r = a.boundY; + if (s && (t = this.content.x < s.from, e = this.content.x > s.to), r && (i = this.content.y < r.from, n = this.content.y > r.to), t || e) { + var l = ((t ? s.from : s.to) - this.content.x) * o, + c = this.content.x + (this.velocity.x + l) / this.friction; + c >= s.from && c <= s.to && (l += this.velocity.x), this.velocity.x = l, this.recalculateTransform() + } + if (i || n) { + var h = ((i ? r.from : r.to) - this.content.y) * o, + d = this.content.y + (h + this.velocity.y) / this.friction; + d >= r.from && d <= r.to && (h += this.velocity.y), this.velocity.y = h, this.recalculateTransform() + } + } + } + }, { + key: "setDragResistance", + value: function() { + if ("pointerdown" === this.state) { + var t, e, i, n, o = this.getBounds(this.dragPosition.scale), + a = o.boundX, + s = o.boundY; + if (a && (t = this.dragPosition.x < a.from, e = this.dragPosition.x > a.to), s && (i = this.dragPosition.y < s.from, n = this.dragPosition.y > s.to), (t || e) && (!t || !e)) { + var r = t ? a.from : a.to, + l = r - this.dragPosition.x; + this.dragPosition.x = r - .3 * l + } + if ((i || n) && (!i || !n)) { + var c = i ? s.from : s.to, + h = c - this.dragPosition.y; + this.dragPosition.y = c - .3 * h + } + } + } + }, { + key: "setDragForce", + value: function() { + "pointerdown" === this.state && (this.velocity.x = this.dragPosition.x - this.content.x, this.velocity.y = this.dragPosition.y - this.content.y, this.velocity.scale = this.dragPosition.scale - this.content.scale) + } + }, { + key: "recalculateTransform", + value: function() { + this.transform.x = this.content.x + this.velocity.x / (1 / this.friction - 1), this.transform.y = this.content.y + this.velocity.y / (1 / this.friction - 1), this.transform.scale = this.content.scale + this.velocity.scale / (1 / this.friction - 1) + } + }, { + key: "isAnimating", + value: function() { + return !(!this.friction || !(Math.abs(this.velocity.x) > .05 || Math.abs(this.velocity.y) > .05 || Math.abs(this.velocity.scale) > .05)) + } + }, { + key: "setTransform", + value: function(t) { + var e, n, o, a, s; + (t ? (e = S(this.transform.x), n = S(this.transform.y), o = this.transform.scale, this.content = i(i({}, this.content), {}, { + x: e, + y: n, + scale: o + })) : (e = S(this.content.x), n = S(this.content.y), o = this.content.scale / (this.content.width / this.content.fitWidth), this.content = i(i({}, this.content), {}, { + x: e, + y: n + })), this.trigger("beforeTransform"), e = S(this.content.x), n = S(this.content.y), t && this.option("zoom")) ? (a = S(this.content.fitWidth * o), s = S(this.content.fitHeight * o), this.content.width = a, this.content.height = s, this.transform = i(i({}, this.transform), {}, { + width: a, + height: s, + scale: o + }), Object.assign(this.$content.style, { + width: "".concat(a, "px"), + height: "".concat(s, "px"), + maxWidth: "none", + maxHeight: "none", + transform: "translate3d(".concat(e, "px, ").concat(n, "px, 0) scale(1)") + })) : this.$content.style.transform = "translate3d(".concat(e, "px, ").concat(n, "px, 0) scale(").concat(o, ")"); + this.trigger("afterTransform") + } + }, { + key: "endAnimation", + value: function(t) { + cancelAnimationFrame(this.rAF), this.rAF = null, this.velocity = { + x: 0, + y: 0, + scale: 0 + }, this.setTransform(!0), this.state = "ready", this.handleCursor(), !0 !== t && this.trigger("endAnimation") + } + }, { + key: "handleCursor", + value: function() { + var t = this.option("draggableClass"); + t && this.option("touch") && (1 == this.option("panOnlyZoomed") && this.content.width <= this.viewport.width && this.content.height <= this.viewport.height && this.transform.scale <= this.option("baseScale") ? this.$container.classList.remove(t) : this.$container.classList.add(t)) + } + }, { + key: "detachEvents", + value: function() { + this.$content.removeEventListener("load", this.onLoad), this.$container.removeEventListener("wheel", this.onWheel, { + passive: !1 + }), this.$container.removeEventListener("click", this.onClick, { + passive: !1 + }), this.pointerTracker && (this.pointerTracker.stop(), this.pointerTracker = null), this.resizeObserver && (this.resizeObserver.disconnect(), this.resizeObserver = null) + } + }, { + key: "destroy", + value: function() { + "destroy" !== this.state && (this.state = "destroy", clearTimeout(this.updateTimer), this.updateTimer = null, cancelAnimationFrame(this.rAF), this.rAF = null, this.detachEvents(), this.detachPlugins(), this.resetDragPosition()) + } + }]), n + }(O); + M.version = "4.0.26", M.Plugins = {}; + var I = function(t, e) { + var i = 0; + return function() { + var n = (new Date).getTime(); + if (!(n - i < e)) return i = n, t.apply(void 0, arguments) + } + }, + F = function() { + function t(e) { + o(this, t), this.$container = null, this.$prev = null, this.$next = null, this.carousel = e, this.onRefresh = this.onRefresh.bind(this) + } + return s(t, [{ + key: "option", + value: function(t) { + return this.carousel.option("Navigation.".concat(t)) + } + }, { + key: "createButton", + value: function(t) { + var e, i = this, + n = document.createElement("button"); + n.setAttribute("title", this.carousel.localize("{{".concat(t.toUpperCase(), "}}"))); + var o = this.option("classNames.button") + " " + this.option("classNames.".concat(t)); + return (e = n.classList).add.apply(e, m(o.split(" "))), n.setAttribute("tabindex", "0"), n.innerHTML = this.carousel.localize(this.option("".concat(t, "Tpl"))), n.addEventListener("click", (function(e) { + e.preventDefault(), e.stopPropagation(), i.carousel["slide".concat("next" === t ? "Next" : "Prev")]() + })), n + } + }, { + key: "build", + value: function() { + var t; + this.$container || (this.$container = document.createElement("div"), (t = this.$container.classList).add.apply(t, m(this.option("classNames.main").split(" "))), this.carousel.$container.appendChild(this.$container)); + this.$next || (this.$next = this.createButton("next"), this.$container.appendChild(this.$next)), this.$prev || (this.$prev = this.createButton("prev"), this.$container.appendChild(this.$prev)) + } + }, { + key: "onRefresh", + value: function() { + var t = this.carousel.pages.length; + t <= 1 || t > 1 && this.carousel.elemDimWidth < this.carousel.wrapDimWidth && !Number.isInteger(this.carousel.option("slidesPerPage")) ? this.cleanup() : (this.build(), this.$prev.removeAttribute("disabled"), this.$next.removeAttribute("disabled"), this.carousel.option("infiniteX", this.carousel.option("infinite")) || (this.carousel.page <= 0 && this.$prev.setAttribute("disabled", ""), this.carousel.page >= t - 1 && this.$next.setAttribute("disabled", ""))) + } + }, { + key: "cleanup", + value: function() { + this.$prev && this.$prev.remove(), this.$prev = null, this.$next && this.$next.remove(), this.$next = null, this.$container && this.$container.remove(), this.$container = null + } + }, { + key: "attach", + value: function() { + this.carousel.on("refresh change", this.onRefresh) + } + }, { + key: "detach", + value: function() { + this.carousel.off("refresh change", this.onRefresh), this.cleanup() + } + }]), t + }(); + F.defaults = { + prevTpl: '', + nextTpl: '', + classNames: { + main: "carousel__nav", + button: "carousel__button", + next: "is-next", + prev: "is-prev" + } + }; + var R = function() { + function t(e) { + o(this, t), this.carousel = e, this.$list = null, this.events = { + change: this.onChange.bind(this), + refresh: this.onRefresh.bind(this) + } + } + return s(t, [{ + key: "buildList", + value: function() { + var t = this; + if (!(this.carousel.pages.length < this.carousel.option("Dots.minSlideCount"))) { + var e = document.createElement("ol"); + return e.classList.add("carousel__dots"), e.addEventListener("click", (function(e) { + if ("page" in e.target.dataset) { + e.preventDefault(), e.stopPropagation(); + var i = parseInt(e.target.dataset.page, 10), + n = t.carousel; + i !== n.page && (n.pages.length < 3 && n.option("infinite") ? n[0 == i ? "slidePrev" : "slideNext"]() : n.slideTo(i)) + } + })), this.$list = e, this.carousel.$container.appendChild(e), this.carousel.$container.classList.add("has-dots"), e + } + } + }, { + key: "removeList", + value: function() { + this.$list && (this.$list.parentNode.removeChild(this.$list), this.$list = null), this.carousel.$container.classList.remove("has-dots") + } + }, { + key: "rebuildDots", + value: function() { + var t = this, + e = this.$list, + i = !!e, + n = this.carousel.pages.length; + if (n < 2) i && this.removeList(); + else { + i || (e = this.buildList()); + var o = this.$list.children.length; + if (o > n) + for (var a = n; a < o; a++) this.$list.removeChild(this.$list.lastChild); + else { + for (var s = function(e) { + var i = document.createElement("li"); + i.classList.add("carousel__dot"), i.dataset.page = e, i.setAttribute("role", "button"), i.setAttribute("tabindex", "0"), i.setAttribute("title", t.carousel.localize("{{GOTO}}", [ + ["%d", e + 1] + ])), i.addEventListener("keydown", (function(t) { + var e, n = t.code; + "Enter" === n || "NumpadEnter" === n ? e = i : "ArrowRight" === n ? e = i.nextSibling : "ArrowLeft" === n && (e = i.previousSibling), e && e.click() + })), t.$list.appendChild(i) + }, r = o; r < n; r++) s(r); + this.setActiveDot() + } + } + } + }, { + key: "setActiveDot", + value: function() { + if (this.$list) { + this.$list.childNodes.forEach((function(t) { + t.classList.remove("is-selected") + })); + var t = this.$list.childNodes[this.carousel.page]; + t && t.classList.add("is-selected") + } + } + }, { + key: "onChange", + value: function() { + this.setActiveDot() + } + }, { + key: "onRefresh", + value: function() { + this.rebuildDots() + } + }, { + key: "attach", + value: function() { + this.carousel.on(this.events) + } + }, { + key: "detach", + value: function() { + this.removeList(), this.carousel.off(this.events), this.carousel = null + } + }]), t + }(), + N = function() { + function t(e) { + o(this, t), this.carousel = e, this.selectedIndex = null, this.friction = 0, this.onNavReady = this.onNavReady.bind(this), this.onNavClick = this.onNavClick.bind(this), this.onNavCreateSlide = this.onNavCreateSlide.bind(this), this.onTargetChange = this.onTargetChange.bind(this) + } + return s(t, [{ + key: "addAsTargetFor", + value: function(t) { + this.target = this.carousel, this.nav = t, this.attachEvents() + } + }, { + key: "addAsNavFor", + value: function(t) { + this.target = t, this.nav = this.carousel, this.attachEvents() + } + }, { + key: "attachEvents", + value: function() { + this.nav.options.initialSlide = this.target.options.initialPage, this.nav.on("ready", this.onNavReady), this.nav.on("createSlide", this.onNavCreateSlide), this.nav.on("Panzoom.click", this.onNavClick), this.target.on("change", this.onTargetChange), this.target.on("Panzoom.afterUpdate", this.onTargetChange) + } + }, { + key: "onNavReady", + value: function() { + this.onTargetChange(!0) + } + }, { + key: "onNavClick", + value: function(t, e, i) { + var n = i.target.closest(".carousel__slide"); + if (n) { + i.stopPropagation(); + var o = parseInt(n.dataset.index, 10), + a = this.target.findPageForSlide(o); + this.target.page !== a && this.target.slideTo(a, { + friction: this.friction + }), this.markSelectedSlide(o) + } + } + }, { + key: "onNavCreateSlide", + value: function(t, e) { + e.index === this.selectedIndex && this.markSelectedSlide(e.index) + } + }, { + key: "onTargetChange", + value: function() { + var t = this.target.pages[this.target.page].indexes[0], + e = this.nav.findPageForSlide(t); + this.nav.slideTo(e), this.markSelectedSlide(t) + } + }, { + key: "markSelectedSlide", + value: function(t) { + this.selectedIndex = t, m(this.nav.slides).filter((function(t) { + return t.$el && t.$el.classList.remove("is-nav-selected") + })); + var e = this.nav.slides[t]; + e && e.$el && e.$el.classList.add("is-nav-selected") + } + }, { + key: "attach", + value: function(t) { + var e = t.options.Sync; + (e.target || e.nav) && (e.target ? this.addAsNavFor(e.target) : e.nav && this.addAsTargetFor(e.nav), this.friction = e.friction) + } + }, { + key: "detach", + value: function() { + this.nav && (this.nav.off("ready", this.onNavReady), this.nav.off("Panzoom.click", this.onNavClick), this.nav.off("createSlide", this.onNavCreateSlide)), this.target && (this.target.off("Panzoom.afterUpdate", this.onTargetChange), this.target.off("change", this.onTargetChange)) + } + }]), t + }(); + N.defaults = { + friction: .92 + }; + var D = { + Navigation: F, + Dots: R, + Sync: N + }, + B = { + slides: [], + preload: 0, + slidesPerPage: "auto", + initialPage: null, + initialSlide: null, + friction: .92, + center: !0, + infinite: !0, + fill: !0, + dragFree: !1, + prefix: "", + classNames: { + viewport: "carousel__viewport", + track: "carousel__track", + slide: "carousel__slide", + slideSelected: "is-selected" + }, + l10n: { + NEXT: "Next slide", + PREV: "Previous slide", + GOTO: "Go to slide #%d" + } + }, + W = function(t) { + l(n, t); + var e = f(n); + + function n(t) { + var i, a = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + if (o(this, n), a = k(!0, {}, B, a), (i = e.call(this, a)).state = "init", i.$container = t, !(i.$container instanceof HTMLElement)) throw new Error("No root element provided"); + return i.slideNext = I(i.slideNext.bind(d(i)), 250), i.slidePrev = I(i.slidePrev.bind(d(i)), 250), i.init(), t.__Carousel = d(i), i + } + return s(n, [{ + key: "init", + value: function() { + this.pages = [], this.page = this.pageIndex = null, this.prevPage = this.prevPageIndex = null, this.attachPlugins(n.Plugins), this.trigger("init"), this.initLayout(), this.initSlides(), this.updateMetrics(), this.$track && this.pages.length && (this.$track.style.transform = "translate3d(".concat(-1 * this.pages[this.page].left, "px, 0px, 0) scale(1)")), this.manageSlideVisiblity(), this.initPanzoom(), this.state = "ready", this.trigger("ready") + } + }, { + key: "initLayout", + value: function() { + var t, e, i, n, o = this.option("prefix"), + a = this.option("classNames"); + (this.$viewport = this.option("viewport") || this.$container.querySelector(".".concat(o).concat(a.viewport)), this.$viewport) || (this.$viewport = document.createElement("div"), (t = this.$viewport.classList).add.apply(t, m((o + a.viewport).split(" "))), (e = this.$viewport).append.apply(e, m(this.$container.childNodes)), this.$container.appendChild(this.$viewport)); + (this.$track = this.option("track") || this.$container.querySelector(".".concat(o).concat(a.track)), this.$track) || (this.$track = document.createElement("div"), (i = this.$track.classList).add.apply(i, m((o + a.track).split(" "))), (n = this.$track).append.apply(n, m(this.$viewport.childNodes)), this.$viewport.appendChild(this.$track)) + } + }, { + key: "initSlides", + value: function() { + var t = this; + this.slides = [], this.$viewport.querySelectorAll(".".concat(this.option("prefix")).concat(this.option("classNames.slide"))).forEach((function(e) { + var i = { + $el: e, + isDom: !0 + }; + t.slides.push(i), t.trigger("createSlide", i, t.slides.length) + })), Array.isArray(this.options.slides) && (this.slides = k(!0, m(this.slides), this.options.slides)) + } + }, { + key: "updateMetrics", + value: function() { + var t, e = this, + n = 0, + o = []; + this.slides.forEach((function(i, a) { + var s = i.$el, + r = i.isDom || !t ? e.getSlideMetrics(s) : t; + i.index = a, i.width = r, i.left = n, t = r, n += r, o.push(a) + })); + var a = Math.max(this.$track.offsetWidth, S(this.$track.getBoundingClientRect().width)), + s = getComputedStyle(this.$track); + a -= parseFloat(s.paddingLeft) + parseFloat(s.paddingRight), this.contentWidth = n, this.viewportWidth = a; + var r = [], + l = this.option("slidesPerPage"); + if (Number.isInteger(l) && n > a) + for (var c = 0; c < this.slides.length; c += l) r.push({ + indexes: o.slice(c, c + l), + slides: this.slides.slice(c, c + l) + }); + else + for (var h = 0, d = 0, u = 0; u < this.slides.length; u += 1) { + var f = this.slides[u]; + (!r.length || d + f.width > a) && (r.push({ + indexes: [], + slides: [] + }), h = r.length - 1, d = 0), d += f.width, r[h].indexes.push(u), r[h].slides.push(f) + } + var v = this.option("center"), + p = this.option("fill"); + r.forEach((function(t, i) { + t.index = i, t.width = t.slides.reduce((function(t, e) { + return t + e.width + }), 0), t.left = t.slides[0].left, v && (t.left += .5 * (a - t.width) * -1), p && !e.option("infiniteX", e.option("infinite")) && n > a && (t.left = Math.max(t.left, 0), t.left = Math.min(t.left, n - a)) + })); + var g, y = []; + r.forEach((function(t) { + var e = i({}, t); + g && e.left === g.left ? (g.width += e.width, g.slides = [].concat(m(g.slides), m(e.slides)), g.indexes = [].concat(m(g.indexes), m(e.indexes))) : (e.index = y.length, g = e, y.push(e)) + })), this.pages = y; + var b = this.page; + if (null === b) { + var x = this.option("initialSlide"); + b = null !== x ? this.findPageForSlide(x) : parseInt(this.option("initialPage", 0), 10) || 0, y[b] || (b = y.length && b > y.length ? y[y.length - 1].index : 0), this.page = b, this.pageIndex = b + } + this.updatePanzoom(), this.trigger("refresh") + } + }, { + key: "getSlideMetrics", + value: function(t) { + if (!t) { + var e, i, n = this.slides[0]; + if ((t = document.createElement("div")).dataset.isTestEl = 1, t.style.visibility = "hidden", (e = t.classList).add.apply(e, m((this.option("prefix") + this.option("classNames.slide")).split(" "))), n.customClass)(i = t.classList).add.apply(i, m(n.customClass.split(" "))); + this.$track.prepend(t) + } + var o = Math.max(t.offsetWidth, S(t.getBoundingClientRect().width)), + a = t.currentStyle || window.getComputedStyle(t); + return o = o + (parseFloat(a.marginLeft) || 0) + (parseFloat(a.marginRight) || 0), t.dataset.isTestEl && t.remove(), o + } + }, { + key: "findPageForSlide", + value: function(t) { + t = parseInt(t, 10) || 0; + var e = this.pages.find((function(e) { + return e.indexes.indexOf(t) > -1 + })); + return e ? e.index : null + } + }, { + key: "slideNext", + value: function() { + this.slideTo(this.pageIndex + 1) + } + }, { + key: "slidePrev", + value: function() { + this.slideTo(this.pageIndex - 1) + } + }, { + key: "slideTo", + value: function(t) { + var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + i = e.x, + n = void 0 === i ? -1 * this.setPage(t, !0) : i, + o = e.y, + a = void 0 === o ? 0 : o, + s = e.friction, + r = void 0 === s ? this.option("friction") : s; + this.Panzoom.content.x === n && !this.Panzoom.velocity.x && r || (this.Panzoom.panTo({ + x: n, + y: a, + friction: r, + ignoreBounds: !0 + }), "ready" === this.state && "ready" === this.Panzoom.state && this.trigger("settle")) + } + }, { + key: "initPanzoom", + value: function() { + var t = this; + this.Panzoom && this.Panzoom.destroy(); + var e = k(!0, {}, { + content: this.$track, + wrapInner: !1, + resizeParent: !1, + zoom: !1, + click: !1, + lockAxis: "x", + x: this.pages.length ? -1 * this.pages[this.page].left : 0, + centerOnStart: !1, + textSelection: function() { + return t.option("textSelection", !1) + }, + panOnlyZoomed: function() { + return this.content.width <= this.viewport.width + } + }, this.option("Panzoom")); + this.Panzoom = new M(this.$container, e), this.Panzoom.on({ + "*": function(e) { + for (var i = arguments.length, n = new Array(i > 1 ? i - 1 : 0), o = 1; o < i; o++) n[o - 1] = arguments[o]; + return t.trigger.apply(t, ["Panzoom.".concat(e)].concat(n)) + }, + afterUpdate: function() { + t.updatePage() + }, + beforeTransform: this.onBeforeTransform.bind(this), + touchEnd: this.onTouchEnd.bind(this), + endAnimation: function() { + t.trigger("settle") + } + }), this.updateMetrics(), this.manageSlideVisiblity() + } + }, { + key: "updatePanzoom", + value: function() { + this.Panzoom && (this.Panzoom.content = i(i({}, this.Panzoom.content), {}, { + fitWidth: this.contentWidth, + origWidth: this.contentWidth, + width: this.contentWidth + }), this.pages.length > 1 && this.option("infiniteX", this.option("infinite")) ? this.Panzoom.boundX = null : this.pages.length && (this.Panzoom.boundX = { + from: -1 * this.pages[this.pages.length - 1].left, + to: -1 * this.pages[0].left + }), this.option("infiniteY", this.option("infinite")) ? this.Panzoom.boundY = null : this.Panzoom.boundY = { + from: 0, + to: 0 + }, this.Panzoom.handleCursor()) + } + }, { + key: "manageSlideVisiblity", + value: function() { + var t = this, + e = this.contentWidth, + i = this.viewportWidth, + n = this.Panzoom ? -1 * this.Panzoom.content.x : this.pages.length ? this.pages[this.page].left : 0, + o = this.option("preload"), + a = this.option("infiniteX", this.option("infinite")), + s = parseFloat(getComputedStyle(this.$viewport, null).getPropertyValue("padding-left")), + r = parseFloat(getComputedStyle(this.$viewport, null).getPropertyValue("padding-right")); + this.slides.forEach((function(l) { + var c, h, d = 0; + c = n - s, h = n + i + r, c -= o * (i + s + r), h += o * (i + s + r); + var u = l.left + l.width > c && l.left < h; + c = n + e - s, h = n + e + i + r, c -= o * (i + s + r); + var f = a && l.left + l.width > c && l.left < h; + c = n - e - s, h = n - e + i + r, c -= o * (i + s + r); + var v = a && l.left + l.width > c && l.left < h; + f || u || v ? (t.createSlideEl(l), u && (d = 0), f && (d = -1), v && (d = 1), l.left + l.width > n && l.left <= n + i + r && (d = 0)) : t.removeSlideEl(l), l.hasDiff = d + })); + var l = 0, + c = 0; + this.slides.forEach((function(t, i) { + var n = 0; + t.$el ? (i !== l || t.hasDiff ? n = c + t.hasDiff * e : c = 0, t.$el.style.left = Math.abs(n) > .1 ? "".concat(c + t.hasDiff * e, "px") : "", l++) : c += t.width + })), this.markSelectedSlides() + } + }, { + key: "createSlideEl", + value: function(t) { + var e; + if (t) { + if (!t.$el) { + var i, n = document.createElement("div"); + if (n.dataset.index = t.index, (e = n.classList).add.apply(e, m((this.option("prefix") + this.option("classNames.slide")).split(" "))), t.customClass)(i = n.classList).add.apply(i, m(t.customClass.split(" "))); + t.html && (n.innerHTML = t.html); + var o = []; + this.slides.forEach((function(t, e) { + t.$el && o.push(e) + })); + var a = t.index, + s = null; + if (o.length) { + var r = o.reduce((function(t, e) { + return Math.abs(e - a) < Math.abs(t - a) ? e : t + })); + s = this.slides[r] + } + return this.$track.insertBefore(n, s && s.$el ? s.index < t.index ? s.$el.nextSibling : s.$el : null), t.$el = n, this.trigger("createSlide", t, a), t + } + var l, c = t.$el.dataset.index; + c && parseInt(c, 10) === t.index || (t.$el.dataset.index = t.index, t.$el.querySelectorAll("[data-lazy-srcset]").forEach((function(t) { + t.srcset = t.dataset.lazySrcset + })), t.$el.querySelectorAll("[data-lazy-src]").forEach((function(t) { + var e = t.dataset.lazySrc; + t instanceof HTMLImageElement ? t.src = e : t.style.backgroundImage = "url('".concat(e, "')") + })), (l = t.$el.dataset.lazySrc) && (t.$el.style.backgroundImage = "url('".concat(l, "')")), t.state = "ready") + } + } + }, { + key: "removeSlideEl", + value: function(t) { + t.$el && !t.isDom && (this.trigger("removeSlide", t), t.$el.remove(), t.$el = null) + } + }, { + key: "markSelectedSlides", + value: function() { + var t = this, + e = this.option("classNames.slideSelected"), + i = "aria-hidden"; + this.slides.forEach((function(n, o) { + var a = n.$el; + if (a) { + var s = t.pages[t.page]; + s && s.indexes && s.indexes.indexOf(o) > -1 ? (e && !a.classList.contains(e) && (a.classList.add(e), t.trigger("selectSlide", n)), a.removeAttribute(i)) : (e && a.classList.contains(e) && (a.classList.remove(e), t.trigger("unselectSlide", n)), a.setAttribute(i, !0)) + } + })) + } + }, { + key: "updatePage", + value: function() { + this.updateMetrics(), this.slideTo(this.page, { + friction: 0 + }) + } + }, { + key: "onBeforeTransform", + value: function() { + this.option("infiniteX", this.option("infinite")) && this.manageInfiniteTrack(), this.manageSlideVisiblity() + } + }, { + key: "manageInfiniteTrack", + value: function() { + var t = this.contentWidth, + e = this.viewportWidth; + if (!(!this.option("infiniteX", this.option("infinite")) || this.pages.length < 2 || t < e)) { + var i = this.Panzoom, + n = !1; + return i.content.x < -1 * (t - e) && (i.content.x += t, this.pageIndex = this.pageIndex - this.pages.length, n = !0), i.content.x > e && (i.content.x -= t, this.pageIndex = this.pageIndex + this.pages.length, n = !0), n && "pointerdown" === i.state && i.resetDragPosition(), n + } + } + }, { + key: "onTouchEnd", + value: function(t, e) { + var i = this.option("dragFree"); + if (!i && this.pages.length > 1 && t.dragOffset.time < 350 && Math.abs(t.dragOffset.y) < 1 && Math.abs(t.dragOffset.x) > 5) this[t.dragOffset.x < 0 ? "slideNext" : "slidePrev"](); + else if (i) { + var n = g(this.getPageFromPosition(-1 * t.transform.x), 2)[1]; + this.setPage(n) + } else this.slideToClosest() + } + }, { + key: "slideToClosest", + value: function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = this.getPageFromPosition(-1 * this.Panzoom.content.x), + i = g(e, 2), + n = i[1]; + this.slideTo(n, t) + } + }, { + key: "getPageFromPosition", + value: function(t) { + var e = this.pages.length; + this.option("center") && (t += .5 * this.viewportWidth); + var i = Math.floor(t / this.contentWidth); + t -= i * this.contentWidth; + var n = this.slides.find((function(e) { + return e.left <= t && e.left + e.width > t + })); + if (n) { + var o = this.findPageForSlide(n.index); + return [o, o + i * e] + } + return [0, 0] + } + }, { + key: "setPage", + value: function(t, e) { + var i = 0, + n = parseInt(t, 10) || 0, + o = this.page, + a = this.pageIndex, + s = this.pages.length, + r = this.contentWidth, + l = this.viewportWidth; + if (t = (n % s + s) % s, this.option("infiniteX", this.option("infinite")) && r > l) { + var c = Math.floor(n / s) || 0, + h = r; + if (i = this.pages[t].left + c * h, !0 === e && s > 2) { + var d = -1 * this.Panzoom.content.x, + u = i - h, + f = i + h, + v = Math.abs(d - i), + p = Math.abs(d - u), + g = Math.abs(d - f); + g < v && g <= p ? (i = f, n += s) : p < v && p < g && (i = u, n -= s) + } + } else t = n = Math.max(0, Math.min(n, s - 1)), i = this.pages.length ? this.pages[t].left : 0; + return this.page = t, this.pageIndex = n, null !== o && t !== o && (this.prevPage = o, this.prevPageIndex = a, this.trigger("change", t, o)), i + } + }, { + key: "destroy", + value: function() { + var t = this; + this.state = "destroy", this.slides.forEach((function(e) { + t.removeSlideEl(e) + })), this.slides = [], this.Panzoom.destroy(), this.detachPlugins() + } + }]), n + }(O); + W.version = "4.0.26", W.Plugins = D; + var H = !("undefined" == typeof window || !window.document || !window.document.createElement), + j = null, + X = ["a[href]", "area[href]", 'input:not([disabled]):not([type="hidden"]):not([aria-hidden])', "select:not([disabled]):not([aria-hidden])", "textarea:not([disabled]):not([aria-hidden])", "button:not([disabled]):not([aria-hidden])", "iframe", "object", "embed", "video", "audio", "[contenteditable]", '[tabindex]:not([tabindex^="-"]):not([disabled]):not([aria-hidden])'], + q = function(t) { + if (t && H) { + null === j && document.createElement("div").focus({ + get preventScroll() { + return j = !0, !1 + } + }); + try { + if (t.setActive) t.setActive(); + else if (j) t.focus({ + preventScroll: !0 + }); + else { + var e = window.pageXOffset || document.body.scrollTop, + i = window.pageYOffset || document.body.scrollLeft; + t.focus(), document.body.scrollTo({ + top: e, + left: i, + behavior: "auto" + }) + } + } catch (t) {} + } + }, + U = function() { + function t(e) { + o(this, t), this.fancybox = e, this.viewport = null, this.pendingUpdate = null; + for (var i = 0, n = ["onReady", "onResize", "onTouchstart", "onTouchmove"]; i < n.length; i++) { + var a = n[i]; + this[a] = this[a].bind(this) + } + } + return s(t, [{ + key: "onReady", + value: function() { + var t = window.visualViewport; + t && (this.viewport = t, this.startY = 0, t.addEventListener("resize", this.onResize), this.updateViewport()), window.addEventListener("touchstart", this.onTouchstart, { + passive: !1 + }), window.addEventListener("touchmove", this.onTouchmove, { + passive: !1 + }), window.addEventListener("wheel", this.onWheel, { + passive: !1 + }) + } + }, { + key: "onResize", + value: function() { + this.updateViewport() + } + }, { + key: "updateViewport", + value: function() { + var t = this.fancybox, + e = this.viewport, + i = e.scale || 1, + n = t.$container; + if (n) { + var o = "", + a = "", + s = ""; + i - 1 > .1 && (o = "".concat(e.width * i, "px"), a = "".concat(e.height * i, "px"), s = "translate3d(".concat(e.offsetLeft, "px, ").concat(e.offsetTop, "px, 0) scale(").concat(1 / i, ")")), n.style.width = o, n.style.height = a, n.style.transform = s + } + } + }, { + key: "onTouchstart", + value: function(t) { + this.startY = t.touches ? t.touches[0].screenY : t.screenY + } + }, { + key: "onTouchmove", + value: function(t) { + var e = this.startY, + i = window.innerWidth / window.document.documentElement.clientWidth; + if (t.cancelable && !(t.touches.length > 1 || 1 !== i)) { + var n = C(t.composedPath()[0]); + if (n) { + var o = window.getComputedStyle(n), + a = parseInt(o.getPropertyValue("height"), 10), + s = t.touches ? t.touches[0].screenY : t.screenY, + r = e <= s && 0 === n.scrollTop, + l = e >= s && n.scrollHeight - n.scrollTop === a; + (r || l) && t.preventDefault() + } else t.preventDefault() + } + } + }, { + key: "onWheel", + value: function(t) { + C(t.composedPath()[0]) || t.preventDefault() + } + }, { + key: "cleanup", + value: function() { + this.pendingUpdate && (cancelAnimationFrame(this.pendingUpdate), this.pendingUpdate = null); + var t = this.viewport; + t && (t.removeEventListener("resize", this.onResize), this.viewport = null), window.removeEventListener("touchstart", this.onTouchstart, !1), window.removeEventListener("touchmove", this.onTouchmove, !1), window.removeEventListener("wheel", this.onWheel, { + passive: !1 + }) + } + }, { + key: "attach", + value: function() { + this.fancybox.on("initLayout", this.onReady) + } + }, { + key: "detach", + value: function() { + this.fancybox.off("initLayout", this.onReady), this.cleanup() + } + }]), t + }(), + Y = function() { + function t(e) { + o(this, t), this.fancybox = e, this.$container = null, this.state = "init"; + for (var i = 0, n = ["onPrepare", "onClosing", "onKeydown"]; i < n.length; i++) { + var a = n[i]; + this[a] = this[a].bind(this) + } + this.events = { + prepare: this.onPrepare, + closing: this.onClosing, + keydown: this.onKeydown + } + } + return s(t, [{ + key: "onPrepare", + value: function() { + this.getSlides().length < this.fancybox.option("Thumbs.minSlideCount") ? this.state = "disabled" : !0 === this.fancybox.option("Thumbs.autoStart") && this.fancybox.Carousel.Panzoom.content.height >= this.fancybox.option("Thumbs.minScreenHeight") && this.build() + } + }, { + key: "onClosing", + value: function() { + this.Carousel && this.Carousel.Panzoom.detachEvents() + } + }, { + key: "onKeydown", + value: function(t, e) { + e === t.option("Thumbs.key") && this.toggle() + } + }, { + key: "build", + value: function() { + var t = this; + if (!this.$container) { + var e = document.createElement("div"); + e.classList.add("fancybox__thumbs"), this.fancybox.$carousel.parentNode.insertBefore(e, this.fancybox.$carousel.nextSibling), this.Carousel = new W(e, k(!0, { + Dots: !1, + Navigation: !1, + Sync: { + friction: 0 + }, + infinite: !1, + center: !0, + fill: !0, + dragFree: !0, + slidesPerPage: 1, + preload: 1 + }, this.fancybox.option("Thumbs.Carousel"), { + Sync: { + target: this.fancybox.Carousel + }, + slides: this.getSlides() + })), this.Carousel.Panzoom.on("wheel", (function(e, i) { + i.preventDefault(), t.fancybox[i.deltaY < 0 ? "prev" : "next"]() + })), this.$container = e, this.state = "visible" + } + } + }, { + key: "getSlides", + value: function() { + var t, e = [], + i = x(this.fancybox.items); + try { + for (i.s(); !(t = i.n()).done;) { + var n = t.value, + o = n.thumb; + o && e.push({ + html: '
    "), + customClass: "has-thumb has-".concat(n.type || "image") + }) + } + } catch (t) { + i.e(t) + } finally { + i.f() + } + return e + } + }, { + key: "toggle", + value: function() { + "visible" === this.state ? this.hide() : "hidden" === this.state ? this.show() : this.build() + } + }, { + key: "show", + value: function() { + "hidden" === this.state && (this.$container.style.display = "", this.Carousel.Panzoom.attachEvents(), this.state = "visible") + } + }, { + key: "hide", + value: function() { + "visible" === this.state && (this.Carousel.Panzoom.detachEvents(), this.$container.style.display = "none", this.state = "hidden") + } + }, { + key: "cleanup", + value: function() { + this.Carousel && (this.Carousel.destroy(), this.Carousel = null), this.$container && (this.$container.remove(), this.$container = null), this.state = "init" + } + }, { + key: "attach", + value: function() { + this.fancybox.on(this.events) + } + }, { + key: "detach", + value: function() { + this.fancybox.off(this.events), this.cleanup() + } + }]), t + }(); + Y.defaults = { + minSlideCount: 2, + minScreenHeight: 500, + autoStart: !0, + key: "t", + Carousel: {} + }; + var V = function(t, e) { + for (var i = new URL(t), n = new URLSearchParams(i.search), o = new URLSearchParams, a = 0, s = [].concat(m(n), m(Object.entries(e))); a < s.length; a++) { + var r = g(s[a], 2), + l = r[0], + c = r[1]; + "t" === l ? o.set("start", parseInt(c)) : o.set(l, c) + } + o = o.toString(); + var h = t.match(/#t=((.*)?\d+s)/); + return h && (o += "#t=".concat(h[1])), o + }, + Z = { + video: { + autoplay: !0, + ratio: 16 / 9 + }, + youtube: { + autohide: 1, + fs: 1, + rel: 0, + hd: 1, + wmode: "transparent", + enablejsapi: 1, + html5: 1 + }, + vimeo: { + hd: 1, + show_title: 1, + show_byline: 1, + show_portrait: 0, + fullscreen: 1 + }, + html5video: { + tpl: '', + format: "" + } + }, + G = function() { + function t(e) { + o(this, t), this.fancybox = e; + for (var i = 0, n = ["onInit", "onReady", "onCreateSlide", "onRemoveSlide", "onSelectSlide", "onUnselectSlide", "onRefresh", "onMessage"]; i < n.length; i++) { + var a = n[i]; + this[a] = this[a].bind(this) + } + this.events = { + init: this.onInit, + ready: this.onReady, + "Carousel.createSlide": this.onCreateSlide, + "Carousel.removeSlide": this.onRemoveSlide, + "Carousel.selectSlide": this.onSelectSlide, + "Carousel.unselectSlide": this.onUnselectSlide, + "Carousel.refresh": this.onRefresh + } + } + return s(t, [{ + key: "onInit", + value: function() { + var t, e = x(this.fancybox.items); + try { + for (e.s(); !(t = e.n()).done;) { + var i = t.value; + this.processType(i) + } + } catch (t) { + e.e(t) + } finally { + e.f() + } + } + }, { + key: "processType", + value: function(t) { + if (t.html) return t.src = t.html, t.type = "html", void delete t.html; + var e = t.src || "", + i = t.type || this.fancybox.options.type, + n = null; + if (!e || "string" == typeof e) { + if (n = e.match(/(?:youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(?:watch\?(?:.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(?:.*)|[\w-]{11}|\?listType=(?:.*)&list=(?:.*))(?:.*)/i)) { + var o = V(e, this.fancybox.option("Html.youtube")), + a = encodeURIComponent(n[1]); + t.videoId = a, t.src = "https://www.youtube-nocookie.com/embed/".concat(a, "?").concat(o), t.thumb = t.thumb || "https://i.ytimg.com/vi/".concat(a, "/mqdefault.jpg"), t.vendor = "youtube", i = "video" + } else if (n = e.match(/^.+vimeo.com\/(?:\/)?([\d]+)(.*)?/)) { + var s = V(e, this.fancybox.option("Html.vimeo")), + r = encodeURIComponent(n[1]); + t.videoId = r, t.src = "https://player.vimeo.com/video/".concat(r, "?").concat(s), t.vendor = "vimeo", i = "video" + } else(n = e.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:(?:(?:maps\/(?:place\/(?:.*)\/)?\@(.*),(\d+.?\d+?)z))|(?:\?ll=))(.*)?/i)) ? (t.src = "//maps.google.".concat(n[1], "/?ll=").concat((n[2] ? n[2] + "&z=" + Math.floor(n[3]) + (n[4] ? n[4].replace(/^\//, "&") : "") : n[4] + "").replace(/\?/, "&"), "&output=").concat(n[4] && n[4].indexOf("layer=c") > 0 ? "svembed" : "embed"), i = "map") : (n = e.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:maps\/search\/)(.*)/i)) && (t.src = "//maps.google.".concat(n[1], "/maps?q=").concat(n[2].replace("query=", "q=").replace("api=1", ""), "&output=embed"), i = "map"); + i || ("#" === e.charAt(0) ? i = "inline" : (n = e.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i)) ? (i = "html5video", t.format = t.format || "video/" + ("ogv" === n[1] ? "ogg" : n[1])) : e.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i) ? i = "image" : e.match(/\.(pdf)((\?|#).*)?$/i) && (i = "pdf")), t.type = i || this.fancybox.option("defaultType", "image"), "html5video" !== i && "video" !== i || (t.video = k({}, this.fancybox.option("Html.video"), t.video), t._width && t._height ? t.ratio = parseFloat(t._width) / parseFloat(t._height) : t.ratio = t.ratio || t.video.ratio || Z.video.ratio) + } + } + }, { + key: "onReady", + value: function() { + var t = this; + this.fancybox.Carousel.slides.forEach((function(e) { + e.$el && (t.setContent(e), e.index === t.fancybox.getSlide().index && t.playVideo(e)) + })) + } + }, { + key: "onCreateSlide", + value: function(t, e, i) { + "ready" === this.fancybox.state && this.setContent(i) + } + }, { + key: "loadInlineContent", + value: function(t) { + var e; + if (t.src instanceof HTMLElement) e = t.src; + else if ("string" == typeof t.src) { + var i = t.src.split("#", 2), + n = 2 === i.length && "" === i[0] ? i[1] : i[0]; + e = document.getElementById(n) + } + if (e) { + if ("clone" === t.type || e.$placeHolder) { + var o = (e = e.cloneNode(!0)).getAttribute("id"); + o = o ? "".concat(o, "--clone") : "clone-".concat(this.fancybox.id, "-").concat(t.index), e.setAttribute("id", o) + } else { + var a = document.createElement("div"); + a.classList.add("fancybox-placeholder"), e.parentNode.insertBefore(a, e), e.$placeHolder = a + } + this.fancybox.setContent(t, e) + } else this.fancybox.setError(t, "{{ELEMENT_NOT_FOUND}}") + } + }, { + key: "loadAjaxContent", + value: function(t) { + var e = this.fancybox, + i = new XMLHttpRequest; + e.showLoading(t), i.onreadystatechange = function() { + i.readyState === XMLHttpRequest.DONE && "ready" === e.state && (e.hideLoading(t), 200 === i.status ? e.setContent(t, i.responseText) : e.setError(t, 404 === i.status ? "{{AJAX_NOT_FOUND}}" : "{{AJAX_FORBIDDEN}}")) + }, i.open("GET", t.src), i.setRequestHeader("X-Requested-With", "XMLHttpRequest"), i.send(t.ajax || null), t.xhr = i + } + }, { + key: "loadIframeContent", + value: function(t) { + var e = this, + i = this.fancybox, + n = document.createElement("iframe"); + if (n.className = "fancybox__iframe", n.setAttribute("id", "fancybox__iframe_".concat(i.id, "_").concat(t.index)), n.setAttribute("allow", "autoplay; fullscreen"), n.setAttribute("scrolling", "auto"), t.$iframe = n, "iframe" !== t.type || !1 === t.preload) return n.setAttribute("src", t.src), this.fancybox.setContent(t, n), void this.resizeIframe(t); + i.showLoading(t); + var o = document.createElement("div"); + o.style.visibility = "hidden", this.fancybox.setContent(t, o), o.appendChild(n), n.onerror = function() { + i.setError(t, "{{IFRAME_ERROR}}") + }, n.onload = function() { + i.hideLoading(t); + var o = !1; + n.isReady || (n.isReady = !0, o = !0), n.src.length && (n.parentNode.style.visibility = "", e.resizeIframe(t), o && i.revealContent(t)) + }, n.setAttribute("src", t.src) + } + }, { + key: "setAspectRatio", + value: function(t) { + var e = t.$content, + i = t.ratio; + if (e) { + var n = t._width, + o = t._height; + if (i || n && o) { + Object.assign(e.style, { + width: n && o ? "100%" : "", + height: n && o ? "100%" : "", + maxWidth: "", + maxHeight: "" + }); + var a = e.offsetWidth, + s = e.offsetHeight; + if (o = o || s, (n = n || a) > a || o > s) { + var r = Math.min(a / n, s / o); + n *= r, o *= r + } + Math.abs(n / o - i) > .01 && (i < n / o ? n = o * i : o = n / i), Object.assign(e.style, { + width: "".concat(n, "px"), + height: "".concat(o, "px") + }) + } + } + } + }, { + key: "resizeIframe", + value: function(t) { + var e = t.$iframe; + if (e) { + var i = t._width || 0, + n = t._height || 0; + i && n && (t.autoSize = !1); + var o = e.parentNode, + a = o && o.style; + if (!1 !== t.preload && !1 !== t.autoSize && a) try { + var s = window.getComputedStyle(o), + r = parseFloat(s.paddingLeft) + parseFloat(s.paddingRight), + l = parseFloat(s.paddingTop) + parseFloat(s.paddingBottom), + c = e.contentWindow.document, + h = c.getElementsByTagName("html")[0], + d = c.body; + a.width = "", d.style.overflow = "hidden", i = i || h.scrollWidth + r, a.width = "".concat(i, "px"), d.style.overflow = "", a.flex = "0 0 auto", a.height = "".concat(d.scrollHeight, "px"), n = h.scrollHeight + l + } catch (t) {} + if (i || n) { + var u = { + flex: "0 1 auto" + }; + i && (u.width = "".concat(i, "px")), n && (u.height = "".concat(n, "px")), Object.assign(a, u) + } + } + } + }, { + key: "onRefresh", + value: function(t, e) { + var i = this; + e.slides.forEach((function(t) { + t.$el && (t.$iframe && i.resizeIframe(t), t.ratio && i.setAspectRatio(t)) + })) + } + }, { + key: "setContent", + value: function(t) { + if (t && !t.isDom) { + switch (t.type) { + case "html": + this.fancybox.setContent(t, t.src); + break; + case "html5video": + this.fancybox.setContent(t, this.fancybox.option("Html.html5video.tpl").replace(/\{\{src\}\}/gi, t.src).replace("{{format}}", t.format || t.html5video && t.html5video.format || "").replace("{{poster}}", t.poster || t.thumb || "")); + break; + case "inline": + case "clone": + this.loadInlineContent(t); + break; + case "ajax": + this.loadAjaxContent(t); + break; + case "pdf": + case "video": + case "map": + t.preload = !1; + case "iframe": + this.loadIframeContent(t) + } + t.ratio && this.setAspectRatio(t) + } + } + }, { + key: "onSelectSlide", + value: function(t, e, i) { + "ready" === t.state && this.playVideo(i) + } + }, { + key: "playVideo", + value: function(t) { + if ("html5video" === t.type && t.video.autoplay) try { + var e = t.$el.querySelector("video"); + if (e) { + var i = e.play(); + void 0 !== i && i.then((function() {})).catch((function(t) { + e.muted = !0, e.play() + })) + } + } catch (t) {} + if ("video" === t.type && t.$iframe && t.$iframe.contentWindow) { + ! function e() { + if ("done" === t.state && t.$iframe && t.$iframe.contentWindow) { + var i; + if (t.$iframe.isReady) return t.video && t.video.autoplay && (i = "youtube" == t.vendor ? { + event: "command", + func: "playVideo" + } : { + method: "play", + value: "true" + }), void(i && t.$iframe.contentWindow.postMessage(JSON.stringify(i), "*")); + "youtube" === t.vendor && (i = { + event: "listening", + id: t.$iframe.getAttribute("id") + }, t.$iframe.contentWindow.postMessage(JSON.stringify(i), "*")) + } + t.poller = setTimeout(e, 250) + }() + } + } + }, { + key: "onUnselectSlide", + value: function(t, e, i) { + if ("html5video" !== i.type) { + var n = !1; + "vimeo" == i.vendor ? n = { + method: "pause", + value: "true" + } : "youtube" === i.vendor && (n = { + event: "command", + func: "pauseVideo" + }), n && i.$iframe && i.$iframe.contentWindow && i.$iframe.contentWindow.postMessage(JSON.stringify(n), "*"), clearTimeout(i.poller) + } else try { + i.$el.querySelector("video").pause() + } catch (t) {} + } + }, { + key: "onRemoveSlide", + value: function(t, e, i) { + i.xhr && (i.xhr.abort(), i.xhr = null), i.$iframe && (i.$iframe.onload = i.$iframe.onerror = null, i.$iframe.src = "//about:blank", i.$iframe = null); + var n = i.$content; + "inline" === i.type && n && (n.classList.remove("fancybox__content"), "none" !== n.style.display && (n.style.display = "none")), i.$closeButton && (i.$closeButton.remove(), i.$closeButton = null); + var o = n && n.$placeHolder; + o && (o.parentNode.insertBefore(n, o), o.remove(), n.$placeHolder = null) + } + }, { + key: "onMessage", + value: function(t) { + try { + var e = JSON.parse(t.data); + if ("https://player.vimeo.com" === t.origin) { + if ("ready" === e.event) { + var i, n = x(document.getElementsByClassName("fancybox__iframe")); + try { + for (n.s(); !(i = n.n()).done;) { + var o = i.value; + o.contentWindow === t.source && (o.isReady = 1) + } + } catch (t) { + n.e(t) + } finally { + n.f() + } + } + } else "https://www.youtube-nocookie.com" === t.origin && "onReady" === e.event && (document.getElementById(e.id).isReady = 1) + } catch (t) {} + } + }, { + key: "attach", + value: function() { + this.fancybox.on(this.events), window.addEventListener("message", this.onMessage, !1) + } + }, { + key: "detach", + value: function() { + this.fancybox.off(this.events), window.removeEventListener("message", this.onMessage, !1) + } + }]), t + }(); + G.defaults = Z; + var K = function() { + function t(e) { + o(this, t), this.fancybox = e; + for (var i = 0, n = ["onReady", "onClosing", "onDone", "onPageChange", "onCreateSlide", "onRemoveSlide", "onImageStatusChange"]; i < n.length; i++) { + var a = n[i]; + this[a] = this[a].bind(this) + } + this.events = { + ready: this.onReady, + closing: this.onClosing, + done: this.onDone, + "Carousel.change": this.onPageChange, + "Carousel.createSlide": this.onCreateSlide, + "Carousel.removeSlide": this.onRemoveSlide + } + } + return s(t, [{ + key: "onReady", + value: function() { + var t = this; + this.fancybox.Carousel.slides.forEach((function(e) { + e.$el && t.setContent(e) + })) + } + }, { + key: "onDone", + value: function(t, e) { + this.handleCursor(e) + } + }, { + key: "onClosing", + value: function(t) { + clearTimeout(this.clickTimer), this.clickTimer = null, t.Carousel.slides.forEach((function(t) { + t.$image && (t.state = "destroy"), t.Panzoom && t.Panzoom.detachEvents() + })), "closing" === this.fancybox.state && this.canZoom(t.getSlide()) && this.zoomOut() + } + }, { + key: "onCreateSlide", + value: function(t, e, i) { + "ready" === this.fancybox.state && this.setContent(i) + } + }, { + key: "onRemoveSlide", + value: function(t, e, i) { + i.$image && (i.$el.classList.remove(t.option("Image.canZoomInClass")), i.$image.remove(), i.$image = null), i.Panzoom && (i.Panzoom.destroy(), i.Panzoom = null), i.$el && i.$el.dataset && delete i.$el.dataset.imageFit + } + }, { + key: "setContent", + value: function(t) { + var e = this; + if (!(t.isDom || t.html || t.type && "image" !== t.type || t.$image)) { + t.type = "image", t.state = "loading"; + var i = document.createElement("div"); + i.style.visibility = "hidden"; + var n = document.createElement("img"); + n.addEventListener("load", (function(i) { + i.stopImmediatePropagation(), e.onImageStatusChange(t) + })), n.addEventListener("error", (function() { + e.onImageStatusChange(t) + })), n.src = t.src, n.alt = "", n.draggable = !1, n.classList.add("fancybox__image"), t.srcset && n.setAttribute("srcset", t.srcset), t.sizes && n.setAttribute("sizes", t.sizes), t.$image = n; + var o = this.fancybox.option("Image.wrap"); + if (o) { + var a = document.createElement("div"); + a.classList.add("string" == typeof o ? o : "fancybox__image-wrap"), a.appendChild(n), i.appendChild(a), t.$wrap = a + } else i.appendChild(n); + t.$el.dataset.imageFit = this.fancybox.option("Image.fit"), this.fancybox.setContent(t, i), n.complete || n.error ? this.onImageStatusChange(t) : this.fancybox.showLoading(t) + } + } + }, { + key: "onImageStatusChange", + value: function(t) { + var e = this, + i = t.$image; + i && "loading" === t.state && (i.complete && i.naturalWidth && i.naturalHeight ? (this.fancybox.hideLoading(t), "contain" === this.fancybox.option("Image.fit") && this.initSlidePanzoom(t), t.$el.addEventListener("wheel", (function(i) { + return e.onWheel(t, i) + }), { + passive: !1 + }), t.$content.addEventListener("click", (function(i) { + return e.onClick(t, i) + }), { + passive: !1 + }), this.revealContent(t)) : this.fancybox.setError(t, "{{IMAGE_ERROR}}")) + } + }, { + key: "initSlidePanzoom", + value: function(t) { + var e = this; + t.Panzoom || (t.Panzoom = new M(t.$el, k(!0, this.fancybox.option("Image.Panzoom", {}), { + viewport: t.$wrap, + content: t.$image, + width: t._width, + height: t._height, + wrapInner: !1, + textSelection: !0, + touch: this.fancybox.option("Image.touch"), + panOnlyZoomed: !0, + click: !1, + wheel: !1 + })), t.Panzoom.on("startAnimation", (function() { + e.fancybox.trigger("Image.startAnimation", t) + })), t.Panzoom.on("endAnimation", (function() { + "zoomIn" === t.state && e.fancybox.done(t), e.handleCursor(t), e.fancybox.trigger("Image.endAnimation", t) + })), t.Panzoom.on("afterUpdate", (function() { + e.handleCursor(t), e.fancybox.trigger("Image.afterUpdate", t) + }))) + } + }, { + key: "revealContent", + value: function(t) { + null === this.fancybox.Carousel.prevPage && t.index === this.fancybox.options.startIndex && this.canZoom(t) ? this.zoomIn() : this.fancybox.revealContent(t) + } + }, { + key: "getZoomInfo", + value: function(t) { + var e = t.$thumb.getBoundingClientRect(), + i = e.width, + n = e.height, + o = t.$content.getBoundingClientRect(), + a = o.width, + s = o.height, + r = o.top - e.top, + l = o.left - e.left, + c = this.fancybox.option("Image.zoomOpacity"); + return "auto" === c && (c = Math.abs(i / n - a / s) > .1), { + top: r, + left: l, + scale: a && i ? i / a : 1, + opacity: c + } + } + }, { + key: "canZoom", + value: function(t) { + var e = this.fancybox, + i = e.$container; + if (window.visualViewport && 1 !== window.visualViewport.scale) return !1; + if (t.Panzoom && !t.Panzoom.content.width) return !1; + if (!e.option("Image.zoom") || "contain" !== e.option("Image.fit")) return !1; + var n = t.$thumb; + if (!n || "loading" === t.state) return !1; + i.classList.add("fancybox__no-click"); + var o, a = n.getBoundingClientRect(); + if (this.fancybox.option("Image.ignoreCoveredThumbnail")) { + var s = document.elementFromPoint(a.left + 1, a.top + 1) === n, + r = document.elementFromPoint(a.right - 1, a.bottom - 1) === n; + o = s && r + } else o = document.elementFromPoint(a.left + .5 * a.width, a.top + .5 * a.height) === n; + return i.classList.remove("fancybox__no-click"), o + } + }, { + key: "zoomIn", + value: function() { + var t = this.fancybox, + e = t.getSlide(), + i = e.Panzoom, + n = this.getZoomInfo(e), + o = n.top, + a = n.left, + s = n.scale, + r = n.opacity; + t.trigger("reveal", e), i.panTo({ + x: -1 * a, + y: -1 * o, + scale: s, + friction: 0, + ignoreBounds: !0 + }), e.$content.style.visibility = "", e.state = "zoomIn", !0 === r && i.on("afterTransform", (function(t) { + "zoomIn" !== e.state && "zoomOut" !== e.state || (t.$content.style.opacity = Math.min(1, 1 - (1 - t.content.scale) / (1 - s))) + })), i.panTo({ + x: 0, + y: 0, + scale: 1, + friction: this.fancybox.option("Image.zoomFriction") + }) + } + }, { + key: "zoomOut", + value: function() { + var t = this, + e = this.fancybox, + i = e.getSlide(), + n = i.Panzoom; + if (n) { + i.state = "zoomOut", e.state = "customClosing", i.$caption && (i.$caption.style.visibility = "hidden"); + var o = this.fancybox.option("Image.zoomFriction"), + a = function(e) { + var a = t.getZoomInfo(i), + s = a.top, + r = a.left, + l = a.scale, + c = a.opacity; + e || c || (o *= .82), n.panTo({ + x: -1 * r, + y: -1 * s, + scale: l, + friction: o, + ignoreBounds: !0 + }), o *= .98 + }; + window.addEventListener("scroll", a), n.once("endAnimation", (function() { + window.removeEventListener("scroll", a), e.destroy() + })), a() + } + } + }, { + key: "handleCursor", + value: function(t) { + if ("image" === t.type && t.$el) { + var e = t.Panzoom, + i = this.fancybox.option("Image.click", !1, t), + n = this.fancybox.option("Image.touch"), + o = t.$el.classList, + a = this.fancybox.option("Image.canZoomInClass"), + s = this.fancybox.option("Image.canZoomOutClass"); + if (o.remove(s), o.remove(a), e && "toggleZoom" === i) e && 1 === e.content.scale && e.option("maxScale") - e.content.scale > .01 ? o.add(a) : e.content.scale > 1 && !n && o.add(s); + else "close" === i && o.add(s) + } + } + }, { + key: "onWheel", + value: function(t, e) { + if ("ready" === this.fancybox.state && !1 !== this.fancybox.trigger("Image.wheel", e)) switch (this.fancybox.option("Image.wheel")) { + case "zoom": + "done" === t.state && t.Panzoom && t.Panzoom.zoomWithWheel(e); + break; + case "close": + this.fancybox.close(); + break; + case "slide": + this.fancybox[e.deltaY < 0 ? "prev" : "next"]() + } + } + }, { + key: "onClick", + value: function(t, e) { + var i = this; + if ("ready" === this.fancybox.state) { + var n = t.Panzoom; + if (!n || !n.dragPosition.midPoint && 0 === n.dragOffset.x && 0 === n.dragOffset.y && 1 === n.dragOffset.scale) { + if (this.fancybox.Carousel.Panzoom.lockAxis) return !1; + var o = function(n) { + switch (n) { + case "toggleZoom": + e.stopPropagation(), t.Panzoom && t.Panzoom.zoomWithClick(e); + break; + case "close": + i.fancybox.close(); + break; + case "next": + e.stopPropagation(), i.fancybox.next() + } + }, + a = this.fancybox.option("Image.click"), + s = this.fancybox.option("Image.doubleClick"); + s ? this.clickTimer ? (clearTimeout(this.clickTimer), this.clickTimer = null, o(s)) : this.clickTimer = setTimeout((function() { + i.clickTimer = null, o(a) + }), 300) : o(a) + } + } + } + }, { + key: "onPageChange", + value: function(t, e) { + var i = t.getSlide(); + e.slides.forEach((function(t) { + t.Panzoom && "done" === t.state && t.index !== i.index && t.Panzoom.panTo({ + x: 0, + y: 0, + scale: 1, + friction: .8 + }) + })) + } + }, { + key: "attach", + value: function() { + this.fancybox.on(this.events) + } + }, { + key: "detach", + value: function() { + this.fancybox.off(this.events) + } + }]), t + }(); + K.defaults = { + canZoomInClass: "can-zoom_in", + canZoomOutClass: "can-zoom_out", + zoom: !0, + zoomOpacity: "auto", + zoomFriction: .82, + ignoreCoveredThumbnail: !1, + touch: !0, + click: "toggleZoom", + doubleClick: null, + wheel: "zoom", + fit: "contain", + wrap: !1, + Panzoom: { + ratio: 1 + } + }; + var J = function() { + function t(e) { + o(this, t), this.fancybox = e; + for (var i = 0, n = ["onChange", "onClosing"]; i < n.length; i++) { + var a = n[i]; + this[a] = this[a].bind(this) + } + this.events = { + initCarousel: this.onChange, + "Carousel.change": this.onChange, + closing: this.onClosing + }, this.hasCreatedHistory = !1, this.origHash = "", this.timer = null + } + return s(t, [{ + key: "onChange", + value: function(t) { + var e = this, + i = t.Carousel; + this.timer && clearTimeout(this.timer); + var n = null === i.prevPage, + o = t.getSlide(), + a = new URL(document.URL).hash, + s = !1; + if (o.slug) s = "#" + o.slug; + else { + var r = o.$trigger && o.$trigger.dataset, + l = t.option("slug") || r && r.fancybox; + l && l.length && "true" !== l && (s = "#" + l + (i.slides.length > 1 ? "-" + (o.index + 1) : "")) + } + n && (this.origHash = a !== s ? a : ""), s && a !== s && (this.timer = setTimeout((function() { + try { + window.history[n ? "pushState" : "replaceState"]({}, document.title, window.location.pathname + window.location.search + s), n && (e.hasCreatedHistory = !0) + } catch (t) {} + }), 300)) + } + }, { + key: "onClosing", + value: function() { + if (this.timer && clearTimeout(this.timer), !0 !== this.hasSilentClose) try { + return void window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (this.origHash || "")) + } catch (t) {} + } + }, { + key: "attach", + value: function(t) { + t.on(this.events) + } + }, { + key: "detach", + value: function(t) { + t.off(this.events) + } + }], [{ + key: "startFromUrl", + value: function() { + var e = t.Fancybox; + if (e && !e.getInstance() && !1 !== e.defaults.Hash) { + var i = t.getParsedURL(), + n = i.hash, + o = i.slug, + a = i.index; + if (o) { + var s = document.querySelector('[data-slug="'.concat(n, '"]')); + if (s && s.dispatchEvent(new CustomEvent("click", { + bubbles: !0, + cancelable: !0 + })), !e.getInstance()) { + var r = document.querySelectorAll('[data-fancybox="'.concat(o, '"]')); + r.length && (null === a && 1 === r.length ? s = r[0] : a && (s = r[a - 1]), s && s.dispatchEvent(new CustomEvent("click", { + bubbles: !0, + cancelable: !0 + }))) + } + } + } + } + }, { + key: "onHashChange", + value: function() { + var e = t.getParsedURL(), + i = e.slug, + n = e.index, + o = t.Fancybox, + a = o && o.getInstance(); + if (a && a.plugins.Hash) { + if (i) { + var s = a.Carousel; + if (i === a.option("slug")) return s.slideTo(n - 1); + var r, l = x(s.slides); + try { + for (l.s(); !(r = l.n()).done;) { + var c = r.value; + if (c.slug && c.slug === i) return s.slideTo(c.index) + } + } catch (t) { + l.e(t) + } finally { + l.f() + } + var h = a.getSlide(), + d = h.$trigger && h.$trigger.dataset; + if (d && d.fancybox === i) return s.slideTo(n - 1) + } + a.plugins.Hash.hasSilentClose = !0, a.close() + } + t.startFromUrl() + } + }, { + key: "create", + value: function(e) { + function i() { + window.addEventListener("hashchange", t.onHashChange, !1), t.startFromUrl() + } + t.Fancybox = e, H && window.requestAnimationFrame((function() { + /complete|interactive|loaded/.test(document.readyState) ? i() : document.addEventListener("DOMContentLoaded", i) + })) + } + }, { + key: "destroy", + value: function() { + window.removeEventListener("hashchange", t.onHashChange, !1) + } + }, { + key: "getParsedURL", + value: function() { + var t = window.location.hash.substr(1), + e = t.split("-"), + i = e.length > 1 && /^\+?\d+$/.test(e[e.length - 1]) && parseInt(e.pop(-1), 10) || null; + return { + hash: t, + slug: e.join("-"), + index: i + } + } + }]), t + }(), + Q = { + pageXOffset: 0, + pageYOffset: 0, + element: function() { + return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement + }, + activate: function(t) { + Q.pageXOffset = window.pageXOffset, Q.pageYOffset = window.pageYOffset, t.requestFullscreen ? t.requestFullscreen() : t.mozRequestFullScreen ? t.mozRequestFullScreen() : t.webkitRequestFullscreen ? t.webkitRequestFullscreen() : t.msRequestFullscreen && t.msRequestFullscreen() + }, + deactivate: function() { + document.exitFullscreen ? document.exitFullscreen() : document.mozCancelFullScreen ? document.mozCancelFullScreen() : document.webkitExitFullscreen && document.webkitExitFullscreen() + } + }, + tt = function() { + function t(e) { + o(this, t), this.fancybox = e, this.active = !1, this.handleVisibilityChange = this.handleVisibilityChange.bind(this) + } + return s(t, [{ + key: "isActive", + value: function() { + return this.active + } + }, { + key: "setTimer", + value: function() { + var t = this; + if (this.active && !this.timer) { + var e = this.fancybox.option("slideshow.delay", 3e3); + this.timer = setTimeout((function() { + t.timer = null, t.fancybox.option("infinite") || t.fancybox.getSlide().index !== t.fancybox.Carousel.slides.length - 1 ? t.fancybox.next() : t.fancybox.jumpTo(0, { + friction: 0 + }) + }), e); + var i = this.$progress; + i || ((i = document.createElement("div")).classList.add("fancybox__progress"), this.fancybox.$carousel.parentNode.insertBefore(i, this.fancybox.$carousel), this.$progress = i, i.offsetHeight), i.style.transitionDuration = "".concat(e, "ms"), i.style.transform = "scaleX(1)" + } + } + }, { + key: "clearTimer", + value: function() { + clearTimeout(this.timer), this.timer = null, this.$progress && (this.$progress.style.transitionDuration = "", this.$progress.style.transform = "", this.$progress.offsetHeight) + } + }, { + key: "activate", + value: function() { + this.active || (this.active = !0, this.fancybox.$container.classList.add("has-slideshow"), "done" === this.fancybox.getSlide().state && this.setTimer(), document.addEventListener("visibilitychange", this.handleVisibilityChange, !1)) + } + }, { + key: "handleVisibilityChange", + value: function() { + this.deactivate() + } + }, { + key: "deactivate", + value: function() { + this.active = !1, this.clearTimer(), this.fancybox.$container.classList.remove("has-slideshow"), document.removeEventListener("visibilitychange", this.handleVisibilityChange, !1) + } + }, { + key: "toggle", + value: function() { + this.active ? this.deactivate() : this.fancybox.Carousel.slides.length > 1 && this.activate() + } + }]), t + }(), + et = { + display: ["counter", "zoom", "slideshow", "fullscreen", "thumbs", "close"], + autoEnable: !0, + items: { + counter: { + position: "left", + type: "div", + class: "fancybox__counter", + html: ' / ', + attr: { + tabindex: -1 + } + }, + prev: { + type: "button", + class: "fancybox__button--prev", + label: "PREV", + html: '', + attr: { + "data-fancybox-prev": "" + } + }, + next: { + type: "button", + class: "fancybox__button--next", + label: "NEXT", + html: '', + attr: { + "data-fancybox-next": "" + } + }, + fullscreen: { + type: "button", + class: "fancybox__button--fullscreen", + label: "TOGGLE_FULLSCREEN", + html: '\n \n \n ', + click: function(t) { + t.preventDefault(), Q.element() ? Q.deactivate() : Q.activate(this.fancybox.$container) + } + }, + slideshow: { + type: "button", + class: "fancybox__button--slideshow", + label: "TOGGLE_SLIDESHOW", + html: '\n \n \n ', + click: function(t) { + t.preventDefault(), this.Slideshow.toggle() + } + }, + zoom: { + type: "button", + class: "fancybox__button--zoom", + label: "TOGGLE_ZOOM", + html: '', + click: function(t) { + t.preventDefault(); + var e = this.fancybox.getSlide().Panzoom; + e && e.toggleZoom() + } + }, + download: { + type: "link", + label: "DOWNLOAD", + class: "fancybox__button--download", + html: '', + click: function(t) { + t.stopPropagation() + } + }, + thumbs: { + type: "button", + label: "TOGGLE_THUMBS", + class: "fancybox__button--thumbs", + html: '', + click: function(t) { + t.stopPropagation(); + var e = this.fancybox.plugins.Thumbs; + e && e.toggle() + } + }, + close: { + type: "button", + label: "CLOSE", + class: "fancybox__button--close", + html: '', + attr: { + "data-fancybox-close": "", + tabindex: 0 + } + } + } + }, + it = function() { + function t(e) { + var i = this; + o(this, t), this.fancybox = e, this.$container = null, this.state = "init"; + for (var n = 0, a = ["onInit", "onPrepare", "onDone", "onKeydown", "onClosing", "onChange", "onSettle", "onRefresh"]; n < a.length; n++) { + var s = a[n]; + this[s] = this[s].bind(this) + } + this.events = { + init: this.onInit, + prepare: this.onPrepare, + done: this.onDone, + keydown: this.onKeydown, + closing: this.onClosing, + "Carousel.change": this.onChange, + "Carousel.settle": this.onSettle, + "Carousel.Panzoom.touchStart": function() { + return i.onRefresh() + }, + "Image.startAnimation": function(t, e) { + return i.onRefresh(e) + }, + "Image.afterUpdate": function(t, e) { + return i.onRefresh(e) + } + } + } + return s(t, [{ + key: "onInit", + value: function() { + if (this.fancybox.option("Toolbar.autoEnable")) { + var t, e = !1, + i = x(this.fancybox.items); + try { + for (i.s(); !(t = i.n()).done;) { + if ("image" === t.value.type) { + e = !0; + break + } + } + } catch (t) { + i.e(t) + } finally { + i.f() + } + if (!e) return void(this.state = "disabled") + } + var n, o = x(this.fancybox.option("Toolbar.display")); + try { + for (o.s(); !(n = o.n()).done;) { + var a = n.value; + if ("close" === (w(a) ? a.id : a)) { + this.fancybox.options.closeButton = !1; + break + } + } + } catch (t) { + o.e(t) + } finally { + o.f() + } + } + }, { + key: "onPrepare", + value: function() { + var t = this.fancybox; + if ("init" === this.state && (this.build(), this.update(), this.Slideshow = new tt(t), !t.Carousel.prevPage && (t.option("slideshow.autoStart") && this.Slideshow.activate(), t.option("fullscreen.autoStart") && !Q.element()))) try { + Q.activate(t.$container) + } catch (t) {} + } + }, { + key: "onFsChange", + value: function() { + window.scrollTo(Q.pageXOffset, Q.pageYOffset) + } + }, { + key: "onSettle", + value: function() { + var t = this.fancybox, + e = this.Slideshow; + e && e.isActive() && (t.getSlide().index !== t.Carousel.slides.length - 1 || t.option("infinite") ? "done" === t.getSlide().state && e.setTimer() : e.deactivate()) + } + }, { + key: "onChange", + value: function() { + this.update(), this.Slideshow && this.Slideshow.isActive() && this.Slideshow.clearTimer() + } + }, { + key: "onDone", + value: function(t, e) { + var i = this.Slideshow; + e.index === t.getSlide().index && (this.update(), i && i.isActive() && (t.option("infinite") || e.index !== t.Carousel.slides.length - 1 ? i.setTimer() : i.deactivate())) + } + }, { + key: "onRefresh", + value: function(t) { + t && t.index !== this.fancybox.getSlide().index || (this.update(), !this.Slideshow || !this.Slideshow.isActive() || t && "done" !== t.state || this.Slideshow.deactivate()) + } + }, { + key: "onKeydown", + value: function(t, e, i) { + " " === e && this.Slideshow && (this.Slideshow.toggle(), i.preventDefault()) + } + }, { + key: "onClosing", + value: function() { + this.Slideshow && this.Slideshow.deactivate(), document.removeEventListener("fullscreenchange", this.onFsChange) + } + }, { + key: "createElement", + value: function(t) { + var e, i; + ("div" === t.type ? e = document.createElement("div") : (e = document.createElement("link" === t.type ? "a" : "button")).classList.add("carousel__button"), e.innerHTML = t.html, e.setAttribute("tabindex", t.tabindex || 0), t.class) && (i = e.classList).add.apply(i, m(t.class.split(" "))); + for (var n in t.attr) e.setAttribute(n, t.attr[n]); + t.label && e.setAttribute("title", this.fancybox.localize("{{".concat(t.label, "}}"))), t.click && e.addEventListener("click", t.click.bind(this)), "prev" === t.id && e.setAttribute("data-fancybox-prev", ""), "next" === t.id && e.setAttribute("data-fancybox-next", ""); + var o = e.querySelector("svg"); + return o && (o.setAttribute("role", "img"), o.setAttribute("tabindex", "-1"), o.setAttribute("xmlns", "http://www.w3.org/2000/svg")), e + } + }, { + key: "build", + value: function() { + var t = this; + this.cleanup(); + var e, i = this.fancybox.option("Toolbar.items"), + n = [{ + position: "left", + items: [] + }, { + position: "center", + items: [] + }, { + position: "right", + items: [] + }], + o = this.fancybox.plugins.Thumbs, + a = x(this.fancybox.option("Toolbar.display")); + try { + var s = function() { + var a = e.value, + s = void 0, + r = void 0; + if (w(a) ? (s = a.id, r = k({}, i[s], a)) : r = i[s = a], ["counter", "next", "prev", "slideshow"].includes(s) && t.fancybox.items.length < 2) return "continue"; + if ("fullscreen" === s) { + if (!document.fullscreenEnabled || window.fullScreen) return "continue"; + document.addEventListener("fullscreenchange", t.onFsChange) + } + if ("thumbs" === s && (!o || "disabled" === o.state)) return "continue"; + if (!r) return "continue"; + var l = r.position || "right", + c = n.find((function(t) { + return t.position === l + })); + c && c.items.push(r) + }; + for (a.s(); !(e = a.n()).done;) s() + } catch (t) { + a.e(t) + } finally { + a.f() + } + var r = document.createElement("div"); + r.classList.add("fancybox__toolbar"); + for (var l = 0, c = n; l < c.length; l++) { + var h = c[l]; + if (h.items.length) { + var d = document.createElement("div"); + d.classList.add("fancybox__toolbar__items"), d.classList.add("fancybox__toolbar__items--".concat(h.position)); + var u, f = x(h.items); + try { + for (f.s(); !(u = f.n()).done;) { + var v = u.value; + d.appendChild(this.createElement(v)) + } + } catch (t) { + f.e(t) + } finally { + f.f() + } + r.appendChild(d) + } + } + this.fancybox.$carousel.parentNode.insertBefore(r, this.fancybox.$carousel), this.$container = r + } + }, { + key: "update", + value: function() { + var t, e = this.fancybox.getSlide(), + i = e.index, + n = this.fancybox.items.length, + o = e.downloadSrc || ("image" !== e.type || e.error ? null : e.src), + a = x(this.fancybox.$container.querySelectorAll("a.fancybox__button--download")); + try { + for (a.s(); !(t = a.n()).done;) { + var s = t.value; + o ? (s.removeAttribute("disabled"), s.removeAttribute("tabindex"), s.setAttribute("href", o), s.setAttribute("download", o), s.setAttribute("target", "_blank")) : (s.setAttribute("disabled", ""), s.setAttribute("tabindex", -1), s.removeAttribute("href"), s.removeAttribute("download")) + } + } catch (t) { + a.e(t) + } finally { + a.f() + } + var r, l = e.Panzoom, + c = l && l.option("maxScale") > l.option("baseScale"), + h = x(this.fancybox.$container.querySelectorAll(".fancybox__button--zoom")); + try { + for (h.s(); !(r = h.n()).done;) { + var d = r.value; + c ? d.removeAttribute("disabled") : d.setAttribute("disabled", "") + } + } catch (t) { + h.e(t) + } finally { + h.f() + } + var u, f = x(this.fancybox.$container.querySelectorAll("[data-fancybox-index]")); + try { + for (f.s(); !(u = f.n()).done;) { + u.value.innerHTML = e.index + 1 + } + } catch (t) { + f.e(t) + } finally { + f.f() + } + var v, p = x(this.fancybox.$container.querySelectorAll("[data-fancybox-count]")); + try { + for (p.s(); !(v = p.n()).done;) { + v.value.innerHTML = n + } + } catch (t) { + p.e(t) + } finally { + p.f() + } + if (!this.fancybox.option("infinite")) { + var g, m = x(this.fancybox.$container.querySelectorAll("[data-fancybox-prev]")); + try { + for (m.s(); !(g = m.n()).done;) { + var y = g.value; + 0 === i ? y.setAttribute("disabled", "") : y.removeAttribute("disabled") + } + } catch (t) { + m.e(t) + } finally { + m.f() + } + var b, w = x(this.fancybox.$container.querySelectorAll("[data-fancybox-next]")); + try { + for (w.s(); !(b = w.n()).done;) { + var k = b.value; + i === n - 1 ? k.setAttribute("disabled", "") : k.removeAttribute("disabled") + } + } catch (t) { + w.e(t) + } finally { + w.f() + } + } + } + }, { + key: "cleanup", + value: function() { + this.Slideshow && this.Slideshow.isActive() && this.Slideshow.clearTimer(), this.$container && this.$container.remove(), this.$container = null + } + }, { + key: "attach", + value: function() { + this.fancybox.on(this.events) + } + }, { + key: "detach", + value: function() { + this.fancybox.off(this.events), this.cleanup() + } + }]), t + }(); + it.defaults = et; + var nt = { + ScrollLock: U, + Thumbs: Y, + Html: G, + Toolbar: it, + Image: K, + Hash: J + }, + ot = { + startIndex: 0, + preload: 1, + infinite: !0, + showClass: "fancybox-zoomInUp", + hideClass: "fancybox-fadeOut", + animated: !0, + hideScrollbar: !0, + parentEl: null, + mainClass: null, + autoFocus: !0, + trapFocus: !0, + placeFocusBack: !0, + click: "close", + closeButton: "inside", + dragToClose: !0, + keyboard: { + Escape: "close", + Delete: "close", + Backspace: "close", + PageUp: "next", + PageDown: "prev", + ArrowUp: "next", + ArrowDown: "prev", + ArrowRight: "next", + ArrowLeft: "prev" + }, + template: { + closeButton: '', + spinner: '', + main: null + }, + l10n: { + CLOSE: "Close", + NEXT: "Next", + PREV: "Previous", + MODAL: "You can close this modal content with the ESC key", + ERROR: "Something Went Wrong, Please Try Again Later", + IMAGE_ERROR: "Image Not Found", + ELEMENT_NOT_FOUND: "HTML Element Not Found", + AJAX_NOT_FOUND: "Error Loading AJAX : Not Found", + AJAX_FORBIDDEN: "Error Loading AJAX : Forbidden", + IFRAME_ERROR: "Error Loading Page", + TOGGLE_ZOOM: "Toggle zoom level", + TOGGLE_THUMBS: "Toggle thumbnails", + TOGGLE_SLIDESHOW: "Toggle slideshow", + TOGGLE_FULLSCREEN: "Toggle full-screen mode", + DOWNLOAD: "Download" + } + }, + at = new Map, + st = 0, + rt = function(t) { + l(i, t); + var e = f(i); + + function i(t) { + var n, a = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + return o(this, i), t = t.map((function(t) { + return t.width && (t._width = t.width), t.height && (t._height = t.height), t + })), (n = e.call(this, k(!0, {}, ot, a))).bindHandlers(), n.state = "init", n.setItems(t), n.attachPlugins(i.Plugins), n.trigger("init"), !0 === n.option("hideScrollbar") && n.hideScrollbar(), n.initLayout(), n.initCarousel(), n.attachEvents(), at.set(n.id, d(n)), n.trigger("prepare"), n.state = "ready", n.trigger("ready"), n.$container.setAttribute("aria-hidden", "false"), n.option("trapFocus") && n.focus(), n + } + return s(i, [{ + key: "option", + value: function(t) { + for (var e, n = this.getSlide(), o = n ? n[t] : void 0, a = arguments.length, s = new Array(a > 1 ? a - 1 : 0), r = 1; r < a; r++) s[r - 1] = arguments[r]; + if (void 0 !== o) { + var l; + if ("function" == typeof o) o = (l = o).call.apply(l, [this, this].concat(s)); + return o + } + return (e = p(c(i.prototype), "option", this)).call.apply(e, [this, t].concat(s)) + } + }, { + key: "bindHandlers", + value: function() { + for (var t = 0, e = ["onMousedown", "onKeydown", "onClick", "onFocus", "onCreateSlide", "onSettle", "onTouchMove", "onTouchEnd", "onTransform"]; t < e.length; t++) { + var i = e[t]; + this[i] = this[i].bind(this) + } + } + }, { + key: "attachEvents", + value: function() { + document.addEventListener("mousedown", this.onMousedown), document.addEventListener("keydown", this.onKeydown, !0), this.option("trapFocus") && document.addEventListener("focus", this.onFocus, !0), this.$container.addEventListener("click", this.onClick) + } + }, { + key: "detachEvents", + value: function() { + document.removeEventListener("mousedown", this.onMousedown), document.removeEventListener("keydown", this.onKeydown, !0), document.removeEventListener("focus", this.onFocus, !0), this.$container.removeEventListener("click", this.onClick) + } + }, { + key: "initLayout", + value: function() { + var t = this; + this.$root = this.option("parentEl") || document.body; + var e = this.option("template.main"); + e && (this.$root.insertAdjacentHTML("beforeend", this.localize(e)), this.$container = this.$root.querySelector(".fancybox__container")), this.$container || (this.$container = document.createElement("div"), this.$root.appendChild(this.$container)), this.$container.onscroll = function() { + return t.$container.scrollLeft = 0, !1 + }, Object.entries({ + class: "fancybox__container", + role: "dialog", + tabIndex: "-1", + "aria-modal": "true", + "aria-hidden": "true", + "aria-label": this.localize("{{MODAL}}") + }).forEach((function(e) { + var i; + return (i = t.$container).setAttribute.apply(i, m(e)) + })), this.option("animated") && this.$container.classList.add("is-animated"), this.$backdrop = this.$container.querySelector(".fancybox__backdrop"), this.$backdrop || (this.$backdrop = document.createElement("div"), this.$backdrop.classList.add("fancybox__backdrop"), this.$container.appendChild(this.$backdrop)), this.$carousel = this.$container.querySelector(".fancybox__carousel"), this.$carousel || (this.$carousel = document.createElement("div"), this.$carousel.classList.add("fancybox__carousel"), this.$container.appendChild(this.$carousel)), this.$container.Fancybox = this, this.id = this.$container.getAttribute("id"), this.id || (this.id = this.options.id || ++st, this.$container.setAttribute("id", "fancybox-" + this.id)); + var i, n = this.option("mainClass"); + n && (i = this.$container.classList).add.apply(i, m(n.split(" "))); + return document.documentElement.classList.add("with-fancybox"), this.trigger("initLayout"), this + } + }, { + key: "setItems", + value: function(t) { + var e, i = [], + n = x(t); + try { + for (n.s(); !(e = n.n()).done;) { + var o = e.value, + a = o.$trigger; + if (a) { + var s = a.dataset || {}; + o.src = s.src || a.getAttribute("href") || o.src, o.type = s.type || o.type, !o.src && a instanceof HTMLImageElement && (o.src = a.currentSrc || o.$trigger.src) + } + var r = o.$thumb; + if (!r) { + var l = o.$trigger && o.$trigger.origTarget; + l && (r = l instanceof HTMLImageElement ? l : l.querySelector("img:not([aria-hidden])")), !r && o.$trigger && (r = o.$trigger instanceof HTMLImageElement ? o.$trigger : o.$trigger.querySelector("img:not([aria-hidden])")) + } + o.$thumb = r || null; + var c = o.thumb; + !c && r && !(c = r.currentSrc || r.src) && r.dataset && (c = r.dataset.lazySrc || r.dataset.src), c || "image" !== o.type || (c = o.src), o.thumb = c || null, o.caption = o.caption || "", i.push(o) + } + } catch (t) { + n.e(t) + } finally { + n.f() + } + this.items = i + } + }, { + key: "initCarousel", + value: function() { + var t = this; + return this.Carousel = new W(this.$carousel, k(!0, {}, { + prefix: "", + classNames: { + viewport: "fancybox__viewport", + track: "fancybox__track", + slide: "fancybox__slide" + }, + textSelection: !0, + preload: this.option("preload"), + friction: .88, + slides: this.items, + initialPage: this.options.startIndex, + slidesPerPage: 1, + infiniteX: this.option("infinite"), + infiniteY: !0, + l10n: this.option("l10n"), + Dots: !1, + Navigation: { + classNames: { + main: "fancybox__nav", + button: "carousel__button", + next: "is-next", + prev: "is-prev" + } + }, + Panzoom: { + textSelection: !0, + panOnlyZoomed: function() { + return t.Carousel && t.Carousel.pages && t.Carousel.pages.length < 2 && !t.option("dragToClose") + }, + lockAxis: function() { + if (t.Carousel) { + var e = "x"; + return t.option("dragToClose") && (e += "y"), e + } + } + }, + on: { + "*": function(e) { + for (var i = arguments.length, n = new Array(i > 1 ? i - 1 : 0), o = 1; o < i; o++) n[o - 1] = arguments[o]; + return t.trigger.apply(t, ["Carousel.".concat(e)].concat(n)) + }, + init: function(e) { + return t.Carousel = e + }, + createSlide: this.onCreateSlide, + settle: this.onSettle + } + }, this.option("Carousel"))), this.option("dragToClose") && this.Carousel.Panzoom.on({ + touchMove: this.onTouchMove, + afterTransform: this.onTransform, + touchEnd: this.onTouchEnd + }), this.trigger("initCarousel"), this + } + }, { + key: "onCreateSlide", + value: function(t, e) { + var i = e.caption || ""; + if ("function" == typeof this.options.caption && (i = this.options.caption.call(this, this, this.Carousel, e)), "string" == typeof i && i.length) { + var n = document.createElement("div"), + o = "fancybox__caption_".concat(this.id, "_").concat(e.index); + n.className = "fancybox__caption", n.innerHTML = i, n.setAttribute("id", o), e.$caption = e.$el.appendChild(n), e.$el.classList.add("has-caption"), e.$el.setAttribute("aria-labelledby", o) + } + } + }, { + key: "onSettle", + value: function() { + this.option("autoFocus") && this.focus() + } + }, { + key: "onFocus", + value: function(t) { + this.focus(t) + } + }, { + key: "onClick", + value: function(t) { + if (!t.defaultPrevented) { + var e = t.composedPath()[0]; + if (e.matches("[data-fancybox-close]")) return t.preventDefault(), void i.close(!1, t); + if (e.matches("[data-fancybox-next]")) return t.preventDefault(), void i.next(); + if (e.matches("[data-fancybox-prev]")) return t.preventDefault(), void i.prev(); + if (e.matches(X) || document.activeElement.blur(), !e.closest(".fancybox__content")) + if (!getSelection().toString().length) + if (!1 !== this.trigger("click", t)) switch (this.option("click")) { + case "close": + this.close(); + break; + case "next": + this.next() + } + } + } + }, { + key: "onTouchMove", + value: function() { + var t = this.getSlide().Panzoom; + return !t || 1 === t.content.scale + } + }, { + key: "onTouchEnd", + value: function(t) { + var e = t.dragOffset.y; + Math.abs(e) >= 150 || Math.abs(e) >= 35 && t.dragOffset.time < 350 ? (this.option("hideClass") && (this.getSlide().hideClass = "fancybox-throwOut".concat(t.content.y < 0 ? "Up" : "Down")), this.close()) : "y" === t.lockAxis && t.panTo({ + y: 0 + }) + } + }, { + key: "onTransform", + value: function(t) { + if (this.$backdrop) { + var e = Math.abs(t.content.y), + i = e < 1 ? "" : Math.max(.33, Math.min(1, 1 - e / t.content.fitHeight * 1.5)); + this.$container.style.setProperty("--fancybox-ts", i ? "0s" : ""), this.$container.style.setProperty("--fancybox-opacity", i) + } + } + }, { + key: "onMousedown", + value: function() { + "ready" === this.state && document.body.classList.add("is-using-mouse") + } + }, { + key: "onKeydown", + value: function(t) { + if (i.getInstance().id === this.id) { + document.body.classList.remove("is-using-mouse"); + var e = t.key, + n = this.option("keyboard"); + if (n && !t.ctrlKey && !t.altKey && !t.shiftKey) { + var o = t.composedPath()[0], + a = document.activeElement && document.activeElement.classList, + s = a && a.contains("carousel__button"); + if ("Escape" !== e && !s) + if (t.target.isContentEditable || -1 !== ["BUTTON", "TEXTAREA", "OPTION", "INPUT", "SELECT", "VIDEO"].indexOf(o.nodeName)) return; + if (!1 !== this.trigger("keydown", e, t)) { + var r = n[e]; + "function" == typeof this[r] && this[r]() + } + } + } + } + }, { + key: "getSlide", + value: function() { + var t = this.Carousel; + if (!t) return null; + var e = null === t.page ? t.option("initialPage") : t.page, + i = t.pages || []; + return i.length && i[e] ? i[e].slides[0] : null + } + }, { + key: "focus", + value: function(t) { + if (!(i.ignoreFocusChange || ["init", "closing", "customClosing", "destroy"].indexOf(this.state) > -1)) { + var e = this.$container, + n = this.getSlide(), + o = "done" === n.state ? n.$el : null; + if (!o || !o.contains(document.activeElement)) { + t && t.preventDefault(), i.ignoreFocusChange = !0; + for (var a, s = [], r = 0, l = Array.from(e.querySelectorAll(X)); r < l.length; r++) { + var c = l[r], + h = c.offsetParent, + d = o && o.contains(c), + u = !this.Carousel.$viewport.contains(c); + h && (d || u) ? (s.push(c), void 0 !== c.dataset.origTabindex && (c.tabIndex = c.dataset.origTabindex, c.removeAttribute("data-orig-tabindex")), (c.hasAttribute("autoFocus") || !a && d && !c.classList.contains("carousel__button")) && (a = c)) : (c.dataset.origTabindex = void 0 === c.dataset.origTabindex ? c.getAttribute("tabindex") : c.dataset.origTabindex, c.tabIndex = -1) + } + t ? s.indexOf(t.target) > -1 ? this.lastFocus = t.target : this.lastFocus === e ? q(s[s.length - 1]) : q(e) : this.option("autoFocus") && a ? q(a) : s.indexOf(document.activeElement) < 0 && q(e), this.lastFocus = document.activeElement, i.ignoreFocusChange = !1 + } + } + } + }, { + key: "hideScrollbar", + value: function() { + if (H) { + var t = window.innerWidth - document.documentElement.getBoundingClientRect().width, + e = "fancybox-style-noscroll", + i = document.getElementById(e); + i || t > 0 && ((i = document.createElement("style")).id = e, i.type = "text/css", i.innerHTML = ".compensate-for-scrollbar {padding-right: ".concat(t, "px;}"), document.getElementsByTagName("head")[0].appendChild(i), document.body.classList.add("compensate-for-scrollbar")) + } + } + }, { + key: "revealScrollbar", + value: function() { + document.body.classList.remove("compensate-for-scrollbar"); + var t = document.getElementById("fancybox-style-noscroll"); + t && t.remove() + } + }, { + key: "clearContent", + value: function(t) { + this.Carousel.trigger("removeSlide", t), t.$content && (t.$content.remove(), t.$content = null), t.$closeButton && (t.$closeButton.remove(), t.$closeButton = null), t._className && t.$el.classList.remove(t._className) + } + }, { + key: "setContent", + value: function(t, e) { + var i, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, + o = t.$el; + if (e instanceof HTMLElement)["img", "iframe", "video", "audio"].indexOf(e.nodeName.toLowerCase()) > -1 ? (i = document.createElement("div")).appendChild(e) : i = e; + else { + var a = document.createRange().createContextualFragment(e); + (i = document.createElement("div")).appendChild(a) + } + if (t.filter && !t.error && (i = i.querySelector(t.filter)), i instanceof Element) return t._className = "has-".concat(n.suffix || t.type || "unknown"), o.classList.add(t._className), i.classList.add("fancybox__content"), "none" !== i.style.display && "none" !== getComputedStyle(i).getPropertyValue("display") || (i.style.display = t.display || this.option("defaultDisplay") || "flex"), t.id && i.setAttribute("id", t.id), t.$content = i, o.prepend(i), this.manageCloseButton(t), "loading" !== t.state && this.revealContent(t), i; + this.setError(t, "{{ELEMENT_NOT_FOUND}}") + } + }, { + key: "manageCloseButton", + value: function(t) { + var e = this, + i = void 0 === t.closeButton ? this.option("closeButton") : t.closeButton; + if (i && ("top" !== i || !this.$closeButton)) { + var n = document.createElement("button"); + n.classList.add("carousel__button", "is-close"), n.setAttribute("title", this.options.l10n.CLOSE), n.innerHTML = this.option("template.closeButton"), n.addEventListener("click", (function(t) { + return e.close(t) + })), "inside" === i ? (t.$closeButton && t.$closeButton.remove(), t.$closeButton = t.$content.appendChild(n)) : this.$closeButton = this.$container.insertBefore(n, this.$container.firstChild) + } + } + }, { + key: "revealContent", + value: function(t) { + var e = this; + this.trigger("reveal", t), t.$content.style.visibility = ""; + var i = !1; + t.error || "loading" === t.state || null !== this.Carousel.prevPage || t.index !== this.options.startIndex || (i = void 0 === t.showClass ? this.option("showClass") : t.showClass), i ? (t.state = "animating", this.animateCSS(t.$content, i, (function() { + e.done(t) + }))) : this.done(t) + } + }, { + key: "animateCSS", + value: function(t, e, i) { + if (t && t.dispatchEvent(new CustomEvent("animationend", { + bubbles: !0, + cancelable: !0 + })), t && e) { + t.addEventListener("animationend", (function n(o) { + o.currentTarget === this && (t.removeEventListener("animationend", n), i && i(), t.classList.remove(e)) + })), t.classList.add(e) + } else "function" == typeof i && i() + } + }, { + key: "done", + value: function(t) { + t.state = "done", this.trigger("done", t); + var e = this.getSlide(); + e && t.index === e.index && this.option("autoFocus") && this.focus() + } + }, { + key: "setError", + value: function(t, e) { + t.error = e, this.hideLoading(t), this.clearContent(t); + var i = document.createElement("div"); + i.classList.add("fancybox-error"), i.innerHTML = this.localize(e || "

    {{ERROR}}

    "), this.setContent(t, i, { + suffix: "error" + }) + } + }, { + key: "showLoading", + value: function(t) { + var e = this; + t.state = "loading", t.$el.classList.add("is-loading"); + var i = t.$el.querySelector(".fancybox__spinner"); + i || ((i = document.createElement("div")).classList.add("fancybox__spinner"), i.innerHTML = this.option("template.spinner"), i.addEventListener("click", (function() { + e.Carousel.Panzoom.velocity || e.close() + })), t.$el.prepend(i)) + } + }, { + key: "hideLoading", + value: function(t) { + var e = t.$el && t.$el.querySelector(".fancybox__spinner"); + e && (e.remove(), t.$el.classList.remove("is-loading")), "loading" === t.state && (this.trigger("load", t), t.state = "ready") + } + }, { + key: "next", + value: function() { + var t = this.Carousel; + t && t.pages.length > 1 && t.slideNext() + } + }, { + key: "prev", + value: function() { + var t = this.Carousel; + t && t.pages.length > 1 && t.slidePrev() + } + }, { + key: "jumpTo", + value: function() { + var t; + this.Carousel && (t = this.Carousel).slideTo.apply(t, arguments) + } + }, { + key: "close", + value: function(t) { + var e = this; + if (t && t.preventDefault(), !["closing", "customClosing", "destroy"].includes(this.state) && !1 !== this.trigger("shouldClose", t) && (this.state = "closing", this.Carousel.Panzoom.destroy(), this.detachEvents(), this.trigger("closing", t), "destroy" !== this.state)) { + this.$container.setAttribute("aria-hidden", "true"), this.$container.classList.add("is-closing"); + var i = this.getSlide(); + if (this.Carousel.slides.forEach((function(t) { + t.$content && t.index !== i.index && e.Carousel.trigger("removeSlide", t) + })), "closing" === this.state) { + var n = void 0 === i.hideClass ? this.option("hideClass") : i.hideClass; + this.animateCSS(i.$content, n, (function() { + e.destroy() + }), !0) + } + } + } + }, { + key: "destroy", + value: function() { + if ("destroy" !== this.state) { + this.state = "destroy", this.trigger("destroy"); + var t = this.option("placeFocusBack") ? this.getSlide().$trigger : null; + this.Carousel.destroy(), this.detachPlugins(), this.Carousel = null, this.options = {}, this.events = {}, this.$container.remove(), this.$container = this.$backdrop = this.$carousel = null, t && q(t), at.delete(this.id); + var e = i.getInstance(); + e ? e.focus() : (document.documentElement.classList.remove("with-fancybox"), document.body.classList.remove("is-using-mouse"), this.revealScrollbar()) + } + } + }], [{ + key: "show", + value: function(t) { + var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + return new i(t, e) + } + }, { + key: "fromEvent", + value: function(t) { + var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + if (!t.defaultPrevented && !(t.button && 0 !== t.button || t.ctrlKey || t.metaKey || t.shiftKey)) { + var n, o, a, s = t.composedPath()[0], + r = s; + if ((r.matches("[data-fancybox-trigger]") || (r = r.closest("[data-fancybox-trigger]"))) && (n = r && r.dataset && r.dataset.fancyboxTrigger), n) { + var l = document.querySelectorAll('[data-fancybox="'.concat(n, '"]')), + c = parseInt(r.dataset.fancyboxIndex, 10) || 0; + r = l.length ? l[c] : r + } + r || (r = s), Array.from(i.openers.keys()).reverse().some((function(e) { + a = r; + var i = !1; + try { + a instanceof Element && ("string" == typeof e || e instanceof String) && (i = a.matches(e) || (a = a.closest(e))) + } catch (t) {} + return !!i && (t.preventDefault(), o = e, !0) + })); + var h = !1; + if (o) { + e.event = t, e.target = a, a.origTarget = s, h = i.fromOpener(o, e); + var d = i.getInstance(); + d && "ready" === d.state && t.detail && document.body.classList.add("is-using-mouse") + } + return h + } + } + }, { + key: "fromOpener", + value: function(t) { + var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + n = function(t) { + for (var e = ["false", "0", "no", "null", "undefined"], i = ["true", "1", "yes"], n = Object.assign({}, t.dataset), o = {}, a = 0, s = Object.entries(n); a < s.length; a++) { + var r = g(s[a], 2), + l = r[0], + c = r[1]; + if ("fancybox" !== l) + if ("width" === l || "height" === l) o["_".concat(l)] = c; + else if ("string" == typeof c || c instanceof String) + if (e.indexOf(c) > -1) o[l] = !1; + else if (i.indexOf(o[l]) > -1) o[l] = !0; + else try { + o[l] = JSON.parse(c) + } catch (t) { + o[l] = c + } else o[l] = c + } + return t instanceof Element && (o.$trigger = t), o + }, + o = [], + a = e.startIndex || 0, + s = e.target || null, + r = void 0 !== (e = k({}, e, i.openers.get(t))).groupAll && e.groupAll, + l = void 0 === e.groupAttr ? "data-fancybox" : e.groupAttr, + c = l && s ? s.getAttribute("".concat(l)) : ""; + if (!s || c || r) { + var h = e.root || (s ? s.getRootNode() : document.body); + o = [].slice.call(h.querySelectorAll(t)) + } + if (s && !r && (o = c ? o.filter((function(t) { + return t.getAttribute("".concat(l)) === c + })) : [s]), !o.length) return !1; + var d = i.getInstance(); + return !(d && o.indexOf(d.options.$trigger) > -1) && (a = s ? o.indexOf(s) : a, new i(o = o.map(n), k({}, e, { + startIndex: a, + $trigger: s + }))) + } + }, { + key: "bind", + value: function(t) { + var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + + function n() { + document.body.addEventListener("click", i.fromEvent, !1) + } + H && (i.openers.size || (/complete|interactive|loaded/.test(document.readyState) ? n() : document.addEventListener("DOMContentLoaded", n)), i.openers.set(t, e)) + } + }, { + key: "unbind", + value: function(t) { + i.openers.delete(t), i.openers.size || i.destroy() + } + }, { + key: "destroy", + value: function() { + for (var t; t = i.getInstance();) t.destroy(); + i.openers = new Map, document.body.removeEventListener("click", i.fromEvent, !1) + } + }, { + key: "getInstance", + value: function(t) { + return t ? at.get(t) : Array.from(at.values()).reverse().find((function(t) { + return !["closing", "customClosing", "destroy"].includes(t.state) && t + })) || null + } + }, { + key: "close", + value: function() { + var t = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0], + e = arguments.length > 1 ? arguments[1] : void 0; + if (t) { + var n, o = x(at.values()); + try { + for (o.s(); !(n = o.n()).done;) { + var a = n.value; + a.close(e) + } + } catch (t) { + o.e(t) + } finally { + o.f() + } + } else { + var s = i.getInstance(); + s && s.close(e) + } + } + }, { + key: "next", + value: function() { + var t = i.getInstance(); + t && t.next() + } + }, { + key: "prev", + value: function() { + var t = i.getInstance(); + t && t.prev() + } + }]), i + }(O); + rt.version = "4.0.26", rt.defaults = ot, rt.openers = new Map, rt.Plugins = nt, rt.bind("[data-fancybox]"); + for (var lt = 0, ct = Object.entries(rt.Plugins || {}); lt < ct.length; lt++) { + var ht = g(ct[lt], 2); + ht[0]; + var dt = ht[1]; + "function" == typeof dt.create && dt.create(rt) + } + t.Carousel = W, t.Fancybox = rt, t.Panzoom = M +})); \ No newline at end of file diff --git a/main/static/main/assets/js/feather.min.js b/main/static/main/assets/js/feather.min.js new file mode 100755 index 0000000..a3a9091 --- /dev/null +++ b/main/static/main/assets/js/feather.min.js @@ -0,0 +1,1561 @@ +! function(e, n) { + "object" == typeof exports && "object" == typeof module ? module.exports = n() : "function" == typeof define && define.amd ? define([], n) : "object" == typeof exports ? exports.feather = n() : e.feather = n() +}("undefined" != typeof self ? self : this, function() { + return function(e) { + var n = {}; + + function i(t) { + if (n[t]) return n[t].exports; + var l = n[t] = { + i: t, + l: !1, + exports: {} + }; + return e[t].call(l.exports, l, l.exports, i), l.l = !0, l.exports + } + return i.m = e, i.c = n, i.d = function(e, n, t) { + i.o(e, n) || Object.defineProperty(e, n, { + configurable: !1, + enumerable: !0, + get: t + }) + }, i.r = function(e) { + Object.defineProperty(e, "__esModule", { + value: !0 + }) + }, i.n = function(e) { + var n = e && e.__esModule ? function() { + return e.default + } : function() { + return e + }; + return i.d(n, "a", n), n + }, i.o = function(e, n) { + return Object.prototype.hasOwnProperty.call(e, n) + }, i.p = "", i(i.s = 80) + }([function(e, n, i) { + (function(n) { + var i = "object", + t = function(e) { + return e && e.Math == Math && e + }; + e.exports = t(typeof globalThis == i && globalThis) || t(typeof window == i && window) || t(typeof self == i && self) || t(typeof n == i && n) || Function("return this")() + }).call(this, i(75)) + }, function(e, n) { + var i = {}.hasOwnProperty; + e.exports = function(e, n) { + return i.call(e, n) + } + }, function(e, n, i) { + var t = i(0), + l = i(11), + r = i(33), + o = i(62), + a = t.Symbol, + c = l("wks"); + e.exports = function(e) { + return c[e] || (c[e] = o && a[e] || (o ? a : r)("Symbol." + e)) + } + }, function(e, n, i) { + var t = i(6); + e.exports = function(e) { + if (!t(e)) throw TypeError(String(e) + " is not an object"); + return e + } + }, function(e, n) { + e.exports = function(e) { + try { + return !!e() + } catch (e) { + return !0 + } + } + }, function(e, n, i) { + var t = i(8), + l = i(7), + r = i(10); + e.exports = t ? function(e, n, i) { + return l.f(e, n, r(1, i)) + } : function(e, n, i) { + return e[n] = i, e + } + }, function(e, n) { + e.exports = function(e) { + return "object" == typeof e ? null !== e : "function" == typeof e + } + }, function(e, n, i) { + var t = i(8), + l = i(35), + r = i(3), + o = i(18), + a = Object.defineProperty; + n.f = t ? a : function(e, n, i) { + if (r(e), n = o(n, !0), r(i), l) try { + return a(e, n, i) + } catch (e) {} + if ("get" in i || "set" in i) throw TypeError("Accessors not supported"); + return "value" in i && (e[n] = i.value), e + } + }, function(e, n, i) { + var t = i(4); + e.exports = !t(function() { + return 7 != Object.defineProperty({}, "a", { + get: function() { + return 7 + } + }).a + }) + }, function(e, n) { + e.exports = {} + }, function(e, n) { + e.exports = function(e, n) { + return { + enumerable: !(1 & e), + configurable: !(2 & e), + writable: !(4 & e), + value: n + } + } + }, function(e, n, i) { + var t = i(0), + l = i(19), + r = i(17), + o = t["__core-js_shared__"] || l("__core-js_shared__", {}); + (e.exports = function(e, n) { + return o[e] || (o[e] = void 0 !== n ? n : {}) + })("versions", []).push({ + version: "3.1.3", + mode: r ? "pure" : "global", + copyright: "© 2019 Denis Pushkarev (zloirock.ru)" + }) + }, function(e, n, i) { + "use strict"; + Object.defineProperty(n, "__esModule", { + value: !0 + }); + var t = o(i(43)), + l = o(i(41)), + r = o(i(40)); + + function o(e) { + return e && e.__esModule ? e : { + default: e + } + } + n.default = Object.keys(l.default).map(function(e) { + return new t.default(e, l.default[e], r.default[e]) + }).reduce(function(e, n) { + return e[n.name] = n, e + }, {}) + }, function(e, n) { + e.exports = ["constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"] + }, function(e, n, i) { + var t = i(72), + l = i(20); + e.exports = function(e) { + return t(l(e)) + } + }, function(e, n) { + e.exports = {} + }, function(e, n, i) { + var t = i(11), + l = i(33), + r = t("keys"); + e.exports = function(e) { + return r[e] || (r[e] = l(e)) + } + }, function(e, n) { + e.exports = !1 + }, function(e, n, i) { + var t = i(6); + e.exports = function(e, n) { + if (!t(e)) return e; + var i, l; + if (n && "function" == typeof(i = e.toString) && !t(l = i.call(e))) return l; + if ("function" == typeof(i = e.valueOf) && !t(l = i.call(e))) return l; + if (!n && "function" == typeof(i = e.toString) && !t(l = i.call(e))) return l; + throw TypeError("Can't convert object to primitive value") + } + }, function(e, n, i) { + var t = i(0), + l = i(5); + e.exports = function(e, n) { + try { + l(t, e, n) + } catch (i) { + t[e] = n + } + return n + } + }, function(e, n) { + e.exports = function(e) { + if (void 0 == e) throw TypeError("Can't call method on " + e); + return e + } + }, function(e, n) { + var i = Math.ceil, + t = Math.floor; + e.exports = function(e) { + return isNaN(e = +e) ? 0 : (e > 0 ? t : i)(e) + } + }, function(e, n, i) { + var t; + /*! + Copyright (c) 2016 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames + */ + /*! + Copyright (c) 2016 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames + */ + ! function() { + "use strict"; + var i = function() { + function e() {} + + function n(e, n) { + for (var i = n.length, t = 0; t < i; ++t) l(e, n[t]) + } + e.prototype = Object.create(null); + var i = {}.hasOwnProperty; + var t = /\s+/; + + function l(e, l) { + if (l) { + var r = typeof l; + "string" === r ? function(e, n) { + for (var i = n.split(t), l = i.length, r = 0; r < l; ++r) e[i[r]] = !0 + }(e, l) : Array.isArray(l) ? n(e, l) : "object" === r ? function(e, n) { + for (var t in n) i.call(n, t) && (e[t] = !!n[t]) + }(e, l) : "number" === r && function(e, n) { + e[n] = !0 + }(e, l) + } + } + return function() { + for (var i = arguments.length, t = Array(i), l = 0; l < i; l++) t[l] = arguments[l]; + var r = new e; + n(r, t); + var o = []; + for (var a in r) r[a] && o.push(a); + return o.join(" ") + } + }(); + void 0 !== e && e.exports ? e.exports = i : void 0 === (t = function() { + return i + }.apply(n, [])) || (e.exports = t) + }() + }, function(e, n, i) { + var t = i(7).f, + l = i(1), + r = i(2)("toStringTag"); + e.exports = function(e, n, i) { + e && !l(e = i ? e : e.prototype, r) && t(e, r, { + configurable: !0, + value: n + }) + } + }, function(e, n, i) { + var t = i(20); + e.exports = function(e) { + return Object(t(e)) + } + }, function(e, n, i) { + var t = i(1), + l = i(24), + r = i(16), + o = i(63), + a = r("IE_PROTO"), + c = Object.prototype; + e.exports = o ? Object.getPrototypeOf : function(e) { + return e = l(e), t(e, a) ? e[a] : "function" == typeof e.constructor && e instanceof e.constructor ? e.constructor.prototype : e instanceof Object ? c : null + } + }, function(e, n, i) { + "use strict"; + var t, l, r, o = i(25), + a = i(5), + c = i(1), + p = i(2), + y = i(17), + h = p("iterator"), + x = !1; + [].keys && ("next" in (r = [].keys()) ? (l = o(o(r))) !== Object.prototype && (t = l) : x = !0), void 0 == t && (t = {}), y || c(t, h) || a(t, h, function() { + return this + }), e.exports = { + IteratorPrototype: t, + BUGGY_SAFARI_ITERATORS: x + } + }, function(e, n, i) { + var t = i(21), + l = Math.min; + e.exports = function(e) { + return e > 0 ? l(t(e), 9007199254740991) : 0 + } + }, function(e, n, i) { + var t = i(1), + l = i(14), + r = i(68), + o = i(15), + a = r(!1); + e.exports = function(e, n) { + var i, r = l(e), + c = 0, + p = []; + for (i in r) !t(o, i) && t(r, i) && p.push(i); + for (; n.length > c;) t(r, i = n[c++]) && (~a(p, i) || p.push(i)); + return p + } + }, function(e, n, i) { + var t = i(0), + l = i(11), + r = i(5), + o = i(1), + a = i(19), + c = i(36), + p = i(37), + y = p.get, + h = p.enforce, + x = String(c).split("toString"); + l("inspectSource", function(e) { + return c.call(e) + }), (e.exports = function(e, n, i, l) { + var c = !!l && !!l.unsafe, + p = !!l && !!l.enumerable, + y = !!l && !!l.noTargetGet; + "function" == typeof i && ("string" != typeof n || o(i, "name") || r(i, "name", n), h(i).source = x.join("string" == typeof n ? n : "")), e !== t ? (c ? !y && e[n] && (p = !0) : delete e[n], p ? e[n] = i : r(e, n, i)) : p ? e[n] = i : a(n, i) + })(Function.prototype, "toString", function() { + return "function" == typeof this && y(this).source || c.call(this) + }) + }, function(e, n) { + var i = {}.toString; + e.exports = function(e) { + return i.call(e).slice(8, -1) + } + }, function(e, n, i) { + var t = i(8), + l = i(73), + r = i(10), + o = i(14), + a = i(18), + c = i(1), + p = i(35), + y = Object.getOwnPropertyDescriptor; + n.f = t ? y : function(e, n) { + if (e = o(e), n = a(n, !0), p) try { + return y(e, n) + } catch (e) {} + if (c(e, n)) return r(!l.f.call(e, n), e[n]) + } + }, function(e, n, i) { + var t = i(0), + l = i(31).f, + r = i(5), + o = i(29), + a = i(19), + c = i(71), + p = i(65); + e.exports = function(e, n) { + var i, y, h, x, s, u = e.target, + d = e.global, + f = e.stat; + if (i = d ? t : f ? t[u] || a(u, {}) : (t[u] || {}).prototype) + for (y in n) { + if (x = n[y], h = e.noTargetGet ? (s = l(i, y)) && s.value : i[y], !p(d ? y : u + (f ? "." : "#") + y, e.forced) && void 0 !== h) { + if (typeof x == typeof h) continue; + c(x, h) + }(e.sham || h && h.sham) && r(x, "sham", !0), o(i, y, x, e) + } + } + }, function(e, n) { + var i = 0, + t = Math.random(); + e.exports = function(e) { + return "Symbol(".concat(void 0 === e ? "" : e, ")_", (++i + t).toString(36)) + } + }, function(e, n, i) { + var t = i(0), + l = i(6), + r = t.document, + o = l(r) && l(r.createElement); + e.exports = function(e) { + return o ? r.createElement(e) : {} + } + }, function(e, n, i) { + var t = i(8), + l = i(4), + r = i(34); + e.exports = !t && !l(function() { + return 7 != Object.defineProperty(r("div"), "a", { + get: function() { + return 7 + } + }).a + }) + }, function(e, n, i) { + var t = i(11); + e.exports = t("native-function-to-string", Function.toString) + }, function(e, n, i) { + var t, l, r, o = i(76), + a = i(0), + c = i(6), + p = i(5), + y = i(1), + h = i(16), + x = i(15), + s = a.WeakMap; + if (o) { + var u = new s, + d = u.get, + f = u.has, + g = u.set; + t = function(e, n) { + return g.call(u, e, n), n + }, l = function(e) { + return d.call(u, e) || {} + }, r = function(e) { + return f.call(u, e) + } + } else { + var v = h("state"); + x[v] = !0, t = function(e, n) { + return p(e, v, n), n + }, l = function(e) { + return y(e, v) ? e[v] : {} + }, r = function(e) { + return y(e, v) + } + } + e.exports = { + set: t, + get: l, + has: r, + enforce: function(e) { + return r(e) ? l(e) : t(e, {}) + }, + getterFor: function(e) { + return function(n) { + var i; + if (!c(n) || (i = l(n)).type !== e) throw TypeError("Incompatible receiver, " + e + " required"); + return i + } + } + } + }, function(e, n, i) { + "use strict"; + Object.defineProperty(n, "__esModule", { + value: !0 + }); + var t = Object.assign || function(e) { + for (var n = 1; n < arguments.length; n++) { + var i = arguments[n]; + for (var t in i) Object.prototype.hasOwnProperty.call(i, t) && (e[t] = i[t]) + } + return e + }, + l = o(i(22)), + r = o(i(12)); + + function o(e) { + return e && e.__esModule ? e : { + default: e + } + } + n.default = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + if ("undefined" == typeof document) throw new Error("`feather.replace()` only works in a browser environment."); + var n = document.querySelectorAll("[data-feather]"); + Array.from(n).forEach(function(n) { + return function(e) { + var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + i = function(e) { + return Array.from(e.attributes).reduce(function(e, n) { + return e[n.name] = n.value, e + }, {}) + }(e), + o = i["data-feather"]; + delete i["data-feather"]; + var a = r.default[o].toSvg(t({}, n, i, { + class: (0, l.default)(n.class, i.class) + })), + c = (new DOMParser).parseFromString(a, "image/svg+xml").querySelector("svg"); + e.parentNode.replaceChild(c, e) + }(n, e) + }) + } + }, function(e, n, i) { + "use strict"; + Object.defineProperty(n, "__esModule", { + value: !0 + }); + var t, l = i(12), + r = (t = l) && t.__esModule ? t : { + default: t + }; + n.default = function(e) { + var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + if (console.warn("feather.toSvg() is deprecated. Please use feather.icons[name].toSvg() instead."), !e) throw new Error("The required `key` (icon name) parameter is missing."); + if (!r.default[e]) throw new Error("No icon matching '" + e + "'. See the complete list of icons at https://feathericons.com"); + return r.default[e].toSvg(n) + } + }, function(e) { + e.exports = { + activity: ["pulse", "health", "action", "motion"], + airplay: ["stream", "cast", "mirroring"], + "alert-circle": ["warning", "alert", "danger"], + "alert-octagon": ["warning", "alert", "danger"], + "alert-triangle": ["warning", "alert", "danger"], + "align-center": ["text alignment", "center"], + "align-justify": ["text alignment", "justified"], + "align-left": ["text alignment", "left"], + "align-right": ["text alignment", "right"], + anchor: [], + archive: ["index", "box"], + "at-sign": ["mention", "at", "email", "message"], + award: ["achievement", "badge"], + aperture: ["camera", "photo"], + "bar-chart": ["statistics", "diagram", "graph"], + "bar-chart-2": ["statistics", "diagram", "graph"], + battery: ["power", "electricity"], + "battery-charging": ["power", "electricity"], + bell: ["alarm", "notification", "sound"], + "bell-off": ["alarm", "notification", "silent"], + bluetooth: ["wireless"], + "book-open": ["read", "library"], + book: ["read", "dictionary", "booklet", "magazine", "library"], + bookmark: ["read", "clip", "marker", "tag"], + box: ["cube"], + briefcase: ["work", "bag", "baggage", "folder"], + calendar: ["date"], + camera: ["photo"], + cast: ["chromecast", "airplay"], + circle: ["off", "zero", "record"], + clipboard: ["copy"], + clock: ["time", "watch", "alarm"], + "cloud-drizzle": ["weather", "shower"], + "cloud-lightning": ["weather", "bolt"], + "cloud-rain": ["weather"], + "cloud-snow": ["weather", "blizzard"], + cloud: ["weather"], + codepen: ["logo"], + codesandbox: ["logo"], + code: ["source", "programming"], + coffee: ["drink", "cup", "mug", "tea", "cafe", "hot", "beverage"], + columns: ["layout"], + command: ["keyboard", "cmd", "terminal", "prompt"], + compass: ["navigation", "safari", "travel", "direction"], + copy: ["clone", "duplicate"], + "corner-down-left": ["arrow", "return"], + "corner-down-right": ["arrow"], + "corner-left-down": ["arrow"], + "corner-left-up": ["arrow"], + "corner-right-down": ["arrow"], + "corner-right-up": ["arrow"], + "corner-up-left": ["arrow"], + "corner-up-right": ["arrow"], + cpu: ["processor", "technology"], + "credit-card": ["purchase", "payment", "cc"], + crop: ["photo", "image"], + crosshair: ["aim", "target"], + database: ["storage", "memory"], + delete: ["remove"], + disc: ["album", "cd", "dvd", "music"], + "dollar-sign": ["currency", "money", "payment"], + droplet: ["water"], + edit: ["pencil", "change"], + "edit-2": ["pencil", "change"], + "edit-3": ["pencil", "change"], + eye: ["view", "watch"], + "eye-off": ["view", "watch", "hide", "hidden"], + "external-link": ["outbound"], + facebook: ["logo", "social"], + "fast-forward": ["music"], + figma: ["logo", "design", "tool"], + "file-minus": ["delete", "remove", "erase"], + "file-plus": ["add", "create", "new"], + "file-text": ["data", "txt", "pdf"], + film: ["movie", "video"], + filter: ["funnel", "hopper"], + flag: ["report"], + "folder-minus": ["directory"], + "folder-plus": ["directory"], + folder: ["directory"], + framer: ["logo", "design", "tool"], + frown: ["emoji", "face", "bad", "sad", "emotion"], + gift: ["present", "box", "birthday", "party"], + "git-branch": ["code", "version control"], + "git-commit": ["code", "version control"], + "git-merge": ["code", "version control"], + "git-pull-request": ["code", "version control"], + github: ["logo", "version control"], + gitlab: ["logo", "version control"], + globe: ["world", "browser", "language", "translate"], + "hard-drive": ["computer", "server", "memory", "data"], + hash: ["hashtag", "number", "pound"], + headphones: ["music", "audio", "sound"], + heart: ["like", "love", "emotion"], + "help-circle": ["question mark"], + hexagon: ["shape", "node.js", "logo"], + home: ["house", "living"], + image: ["picture"], + inbox: ["email"], + instagram: ["logo", "camera"], + key: ["password", "login", "authentication", "secure"], + layers: ["stack"], + layout: ["window", "webpage"], + "life-bouy": ["help", "life ring", "support"], + link: ["chain", "url"], + "link-2": ["chain", "url"], + linkedin: ["logo", "social media"], + list: ["options"], + lock: ["security", "password", "secure"], + "log-in": ["sign in", "arrow", "enter"], + "log-out": ["sign out", "arrow", "exit"], + mail: ["email", "message"], + "map-pin": ["location", "navigation", "travel", "marker"], + map: ["location", "navigation", "travel"], + maximize: ["fullscreen"], + "maximize-2": ["fullscreen", "arrows", "expand"], + meh: ["emoji", "face", "neutral", "emotion"], + menu: ["bars", "navigation", "hamburger"], + "message-circle": ["comment", "chat"], + "message-square": ["comment", "chat"], + "mic-off": ["record", "sound", "mute"], + mic: ["record", "sound", "listen"], + minimize: ["exit fullscreen", "close"], + "minimize-2": ["exit fullscreen", "arrows", "close"], + minus: ["subtract"], + monitor: ["tv", "screen", "display"], + moon: ["dark", "night"], + "more-horizontal": ["ellipsis"], + "more-vertical": ["ellipsis"], + "mouse-pointer": ["arrow", "cursor"], + move: ["arrows"], + music: ["note"], + navigation: ["location", "travel"], + "navigation-2": ["location", "travel"], + octagon: ["stop"], + package: ["box", "container"], + paperclip: ["attachment"], + pause: ["music", "stop"], + "pause-circle": ["music", "audio", "stop"], + "pen-tool": ["vector", "drawing"], + percent: ["discount"], + "phone-call": ["ring"], + "phone-forwarded": ["call"], + "phone-incoming": ["call"], + "phone-missed": ["call"], + "phone-off": ["call", "mute"], + "phone-outgoing": ["call"], + phone: ["call"], + play: ["music", "start"], + "pie-chart": ["statistics", "diagram"], + "play-circle": ["music", "start"], + plus: ["add", "new"], + "plus-circle": ["add", "new"], + "plus-square": ["add", "new"], + pocket: ["logo", "save"], + power: ["on", "off"], + printer: ["fax", "office", "device"], + radio: ["signal"], + "refresh-cw": ["synchronise", "arrows"], + "refresh-ccw": ["arrows"], + repeat: ["loop", "arrows"], + rewind: ["music"], + "rotate-ccw": ["arrow"], + "rotate-cw": ["arrow"], + rss: ["feed", "subscribe"], + save: ["floppy disk"], + scissors: ["cut"], + search: ["find", "magnifier", "magnifying glass"], + send: ["message", "mail", "email", "paper airplane", "paper aeroplane"], + settings: ["cog", "edit", "gear", "preferences"], + "share-2": ["network", "connections"], + shield: ["security", "secure"], + "shield-off": ["security", "insecure"], + "shopping-bag": ["ecommerce", "cart", "purchase", "store"], + "shopping-cart": ["ecommerce", "cart", "purchase", "store"], + shuffle: ["music"], + "skip-back": ["music"], + "skip-forward": ["music"], + slack: ["logo"], + slash: ["ban", "no"], + sliders: ["settings", "controls"], + smartphone: ["cellphone", "device"], + smile: ["emoji", "face", "happy", "good", "emotion"], + speaker: ["audio", "music"], + star: ["bookmark", "favorite", "like"], + "stop-circle": ["media", "music"], + sun: ["brightness", "weather", "light"], + sunrise: ["weather", "time", "morning", "day"], + sunset: ["weather", "time", "evening", "night"], + tablet: ["device"], + tag: ["label"], + target: ["logo", "bullseye"], + terminal: ["code", "command line", "prompt"], + thermometer: ["temperature", "celsius", "fahrenheit", "weather"], + "thumbs-down": ["dislike", "bad", "emotion"], + "thumbs-up": ["like", "good", "emotion"], + "toggle-left": ["on", "off", "switch"], + "toggle-right": ["on", "off", "switch"], + tool: ["settings", "spanner"], + trash: ["garbage", "delete", "remove", "bin"], + "trash-2": ["garbage", "delete", "remove", "bin"], + triangle: ["delta"], + truck: ["delivery", "van", "shipping", "transport", "lorry"], + tv: ["television", "stream"], + twitch: ["logo"], + twitter: ["logo", "social"], + type: ["text"], + umbrella: ["rain", "weather"], + unlock: ["security"], + "user-check": ["followed", "subscribed"], + "user-minus": ["delete", "remove", "unfollow", "unsubscribe"], + "user-plus": ["new", "add", "create", "follow", "subscribe"], + "user-x": ["delete", "remove", "unfollow", "unsubscribe", "unavailable"], + user: ["person", "account"], + users: ["group"], + "video-off": ["camera", "movie", "film"], + video: ["camera", "movie", "film"], + voicemail: ["phone"], + volume: ["music", "sound", "mute"], + "volume-1": ["music", "sound"], + "volume-2": ["music", "sound"], + "volume-x": ["music", "sound", "mute"], + watch: ["clock", "time"], + "wifi-off": ["disabled"], + wifi: ["connection", "signal", "wireless"], + wind: ["weather", "air"], + "x-circle": ["cancel", "close", "delete", "remove", "times", "clear"], + "x-octagon": ["delete", "stop", "alert", "warning", "times", "clear"], + "x-square": ["cancel", "close", "delete", "remove", "times", "clear"], + x: ["cancel", "close", "delete", "remove", "times", "clear"], + youtube: ["logo", "video", "play"], + "zap-off": ["flash", "camera", "lightning"], + zap: ["flash", "camera", "lightning"], + "zoom-in": ["magnifying glass"], + "zoom-out": ["magnifying glass"] + } + }, function(e) { + e.exports = { + activity: '', + airplay: '', + "alert-circle": '', + "alert-octagon": '', + "alert-triangle": '', + "align-center": '', + "align-justify": '', + "align-left": '', + "align-right": '', + anchor: '', + aperture: '', + archive: '', + "arrow-down-circle": '', + "arrow-down-left": '', + "arrow-down-right": '', + "arrow-down": '', + "arrow-left-circle": '', + "arrow-left": '', + "arrow-right-circle": '', + "arrow-right": '', + "arrow-up-circle": '', + "arrow-up-left": '', + "arrow-up-right": '', + "arrow-up": '', + "at-sign": '', + award: '', + "bar-chart-2": '', + "bar-chart": '', + "battery-charging": '', + battery: '', + "bell-off": '', + bell: '', + bluetooth: '', + bold: '', + "book-open": '', + book: '', + bookmark: '', + box: '', + briefcase: '', + calendar: '', + "camera-off": '', + camera: '', + cast: '', + "check-circle": '', + "check-square": '', + check: '', + "chevron-down": '', + "chevron-left": '', + "chevron-right": '', + "chevron-up": '', + "chevrons-down": '', + "chevrons-left": '', + "chevrons-right": '', + "chevrons-up": '', + chrome: '', + circle: '', + clipboard: '', + clock: '', + "cloud-drizzle": '', + "cloud-lightning": '', + "cloud-off": '', + "cloud-rain": '', + "cloud-snow": '', + cloud: '', + code: '', + codepen: '', + codesandbox: '', + coffee: '', + columns: '', + command: '', + compass: '', + copy: '', + "corner-down-left": '', + "corner-down-right": '', + "corner-left-down": '', + "corner-left-up": '', + "corner-right-down": '', + "corner-right-up": '', + "corner-up-left": '', + "corner-up-right": '', + cpu: '', + "credit-card": '', + crop: '', + crosshair: '', + database: '', + delete: '', + disc: '', + "divide-circle": '', + "divide-square": '', + divide: '', + "dollar-sign": '', + "download-cloud": '', + download: '', + dribbble: '', + droplet: '', + "edit-2": '', + "edit-3": '', + edit: '', + "external-link": '', + "eye-off": '', + eye: '', + facebook: '', + "fast-forward": '', + feather: '', + figma: '', + "file-minus": '', + "file-plus": '', + "file-text": '', + file: '', + film: '', + filter: '', + flag: '', + "folder-minus": '', + "folder-plus": '', + folder: '', + framer: '', + frown: '', + gift: '', + "git-branch": '', + "git-commit": '', + "git-merge": '', + "git-pull-request": '', + github: '', + gitlab: '', + globe: '', + grid: '', + "hard-drive": '', + hash: '', + headphones: '', + heart: '', + "help-circle": '', + hexagon: '', + home: '', + image: '', + inbox: '', + info: '', + instagram: '', + italic: '', + key: '', + layers: '', + layout: '', + "life-buoy": '', + "link-2": '', + link: '', + linkedin: '', + list: '', + loader: '', + lock: '', + "log-in": '', + "log-out": '', + mail: '', + "map-pin": '', + map: '', + "maximize-2": '', + maximize: '', + meh: '', + menu: '', + "message-circle": '', + "message-square": '', + "mic-off": '', + mic: '', + "minimize-2": '', + minimize: '', + "minus-circle": '', + "minus-square": '', + minus: '', + monitor: '', + moon: '', + "more-horizontal": '', + "more-vertical": '', + "mouse-pointer": '', + move: '', + music: '', + "navigation-2": '', + navigation: '', + octagon: '', + package: '', + paperclip: '', + "pause-circle": '', + pause: '', + "pen-tool": '', + percent: '', + "phone-call": '', + "phone-forwarded": '', + "phone-incoming": '', + "phone-missed": '', + "phone-off": '', + "phone-outgoing": '', + phone: '', + "pie-chart": '', + "play-circle": '', + play: '', + "plus-circle": '', + "plus-square": '', + plus: '', + pocket: '', + power: '', + printer: '', + radio: '', + "refresh-ccw": '', + "refresh-cw": '', + repeat: '', + rewind: '', + "rotate-ccw": '', + "rotate-cw": '', + rss: '', + save: '', + scissors: '', + search: '', + send: '', + server: '', + settings: '', + "share-2": '', + share: '', + "shield-off": '', + shield: '', + "shopping-bag": '', + "shopping-cart": '', + shuffle: '', + sidebar: '', + "skip-back": '', + "skip-forward": '', + slack: '', + slash: '', + sliders: '', + smartphone: '', + smile: '', + speaker: '', + square: '', + star: '', + "stop-circle": '', + sun: '', + sunrise: '', + sunset: '', + tablet: '', + tag: '', + target: '', + terminal: '', + thermometer: '', + "thumbs-down": '', + "thumbs-up": '', + "toggle-left": '', + "toggle-right": '', + tool: '', + "trash-2": '', + trash: '', + trello: '', + "trending-down": '', + "trending-up": '', + triangle: '', + truck: '', + tv: '', + twitch: '', + twitter: '', + type: '', + umbrella: '', + underline: '', + unlock: '', + "upload-cloud": '', + upload: '', + "user-check": '', + "user-minus": '', + "user-plus": '', + "user-x": '', + user: '', + users: '', + "video-off": '', + video: '', + voicemail: '', + "volume-1": '', + "volume-2": '', + "volume-x": '', + volume: '', + watch: '', + "wifi-off": '', + wifi: '', + wind: '', + "x-circle": '', + "x-octagon": '', + "x-square": '', + x: '', + youtube: '', + "zap-off": '', + zap: '', + "zoom-in": '', + "zoom-out": '' + } + }, function(e) { + e.exports = { + xmlns: "http://www.w3.org/2000/svg", + width: 24, + height: 24, + viewBox: "0 0 24 24", + fill: "none", + stroke: "currentColor", + "stroke-width": 2, + "stroke-linecap": "round", + "stroke-linejoin": "round" + } + }, function(e, n, i) { + "use strict"; + Object.defineProperty(n, "__esModule", { + value: !0 + }); + var t = Object.assign || function(e) { + for (var n = 1; n < arguments.length; n++) { + var i = arguments[n]; + for (var t in i) Object.prototype.hasOwnProperty.call(i, t) && (e[t] = i[t]) + } + return e + }, + l = function() { + function e(e, n) { + for (var i = 0; i < n.length; i++) { + var t = n[i]; + t.enumerable = t.enumerable || !1, t.configurable = !0, "value" in t && (t.writable = !0), Object.defineProperty(e, t.key, t) + } + } + return function(n, i, t) { + return i && e(n.prototype, i), t && e(n, t), n + } + }(), + r = a(i(22)), + o = a(i(42)); + + function a(e) { + return e && e.__esModule ? e : { + default: e + } + } + var c = function() { + function e(n, i) { + var l = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : []; + ! function(e, n) { + if (!(e instanceof n)) throw new TypeError("Cannot call a class as a function") + }(this, e), this.name = n, this.contents = i, this.tags = l, this.attrs = t({}, o.default, { + class: "feather feather-" + n + }) + } + return l(e, [{ + key: "toSvg", + value: function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + return "" + this.contents + "" + } + }, { + key: "toString", + value: function() { + return this.contents + } + }]), e + }(); + n.default = c + }, function(e, n, i) { + "use strict"; + var t = o(i(12)), + l = o(i(39)), + r = o(i(38)); + + function o(e) { + return e && e.__esModule ? e : { + default: e + } + } + e.exports = { + icons: t.default, + toSvg: l.default, + replace: r.default + } + }, function(e, n, i) { + e.exports = i(0) + }, function(e, n, i) { + var t = i(2)("iterator"), + l = !1; + try { + var r = 0, + o = { + next: function() { + return { + done: !!r++ + } + }, + return: function() { + l = !0 + } + }; + o[t] = function() { + return this + }, Array.from(o, function() { + throw 2 + }) + } catch (e) {} + e.exports = function(e, n) { + if (!n && !l) return !1; + var i = !1; + try { + var r = {}; + r[t] = function() { + return { + next: function() { + return { + done: i = !0 + } + } + } + }, e(r) + } catch (e) {} + return i + } + }, function(e, n, i) { + var t = i(30), + l = i(2)("toStringTag"), + r = "Arguments" == t(function() { + return arguments + }()); + e.exports = function(e) { + var n, i, o; + return void 0 === e ? "Undefined" : null === e ? "Null" : "string" == typeof(i = function(e, n) { + try { + return e[n] + } catch (e) {} + }(n = Object(e), l)) ? i : r ? t(n) : "Object" == (o = t(n)) && "function" == typeof n.callee ? "Arguments" : o + } + }, function(e, n, i) { + var t = i(47), + l = i(9), + r = i(2)("iterator"); + e.exports = function(e) { + if (void 0 != e) return e[r] || e["@@iterator"] || l[t(e)] + } + }, function(e, n, i) { + "use strict"; + var t = i(18), + l = i(7), + r = i(10); + e.exports = function(e, n, i) { + var o = t(n); + o in e ? l.f(e, o, r(0, i)) : e[o] = i + } + }, function(e, n, i) { + var t = i(2), + l = i(9), + r = t("iterator"), + o = Array.prototype; + e.exports = function(e) { + return void 0 !== e && (l.Array === e || o[r] === e) + } + }, function(e, n, i) { + var t = i(3); + e.exports = function(e, n, i, l) { + try { + return l ? n(t(i)[0], i[1]) : n(i) + } catch (n) { + var r = e.return; + throw void 0 !== r && t(r.call(e)), n + } + } + }, function(e, n) { + e.exports = function(e) { + if ("function" != typeof e) throw TypeError(String(e) + " is not a function"); + return e + } + }, function(e, n, i) { + var t = i(52); + e.exports = function(e, n, i) { + if (t(e), void 0 === n) return e; + switch (i) { + case 0: + return function() { + return e.call(n) + }; + case 1: + return function(i) { + return e.call(n, i) + }; + case 2: + return function(i, t) { + return e.call(n, i, t) + }; + case 3: + return function(i, t, l) { + return e.call(n, i, t, l) + } + } + return function() { + return e.apply(n, arguments) + } + } + }, function(e, n, i) { + "use strict"; + var t = i(53), + l = i(24), + r = i(51), + o = i(50), + a = i(27), + c = i(49), + p = i(48); + e.exports = function(e) { + var n, i, y, h, x = l(e), + s = "function" == typeof this ? this : Array, + u = arguments.length, + d = u > 1 ? arguments[1] : void 0, + f = void 0 !== d, + g = 0, + v = p(x); + if (f && (d = t(d, u > 2 ? arguments[2] : void 0, 2)), void 0 == v || s == Array && o(v)) + for (i = new s(n = a(x.length)); n > g; g++) c(i, g, f ? d(x[g], g) : x[g]); + else + for (h = v.call(x), i = new s; !(y = h.next()).done; g++) c(i, g, f ? r(h, d, [y.value, g], !0) : y.value); + return i.length = g, i + } + }, function(e, n, i) { + var t = i(32), + l = i(54); + t({ + target: "Array", + stat: !0, + forced: !i(46)(function(e) { + Array.from(e) + }) + }, { + from: l + }) + }, function(e, n, i) { + var t = i(6), + l = i(3); + e.exports = function(e, n) { + if (l(e), !t(n) && null !== n) throw TypeError("Can't set " + String(n) + " as a prototype") + } + }, function(e, n, i) { + var t = i(56); + e.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() { + var e, n = !1, + i = {}; + try { + (e = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set).call(i, []), n = i instanceof Array + } catch (e) {} + return function(i, l) { + return t(i, l), n ? e.call(i, l) : i.__proto__ = l, i + } + }() : void 0) + }, function(e, n, i) { + var t = i(0).document; + e.exports = t && t.documentElement + }, function(e, n, i) { + var t = i(28), + l = i(13); + e.exports = Object.keys || function(e) { + return t(e, l) + } + }, function(e, n, i) { + var t = i(8), + l = i(7), + r = i(3), + o = i(59); + e.exports = t ? Object.defineProperties : function(e, n) { + r(e); + for (var i, t = o(n), a = t.length, c = 0; a > c;) l.f(e, i = t[c++], n[i]); + return e + } + }, function(e, n, i) { + var t = i(3), + l = i(60), + r = i(13), + o = i(15), + a = i(58), + c = i(34), + p = i(16)("IE_PROTO"), + y = function() {}, + h = function() { + var e, n = c("iframe"), + i = r.length; + for (n.style.display = "none", a.appendChild(n), n.src = String("javascript:"), (e = n.contentWindow.document).open(), e.write(" +{% endblock extra_body %} diff --git a/templates/account/email/account_already_exists_message.txt b/templates/account/email/account_already_exists_message.txt new file mode 100644 index 0000000..7022f42 --- /dev/null +++ b/templates/account/email/account_already_exists_message.txt @@ -0,0 +1,13 @@ +{% extends "account/email/base_message.txt" %} +{% load i18n %} + +{% block content %}{% autoescape off %}{% blocktrans %}You are receiving this email because you or someone else tried to signup for an +account using email address: + +{{ email }} + +However, an account using that email address already exists. In case you have +forgotten about this, please use the password forgotten procedure to recover +your account: + +{{ password_reset_url }}{% endblocktrans %}{% endautoescape %}{% endblock content %} diff --git a/templates/account/email/account_already_exists_subject.txt b/templates/account/email/account_already_exists_subject.txt new file mode 100644 index 0000000..481edb0 --- /dev/null +++ b/templates/account/email/account_already_exists_subject.txt @@ -0,0 +1,4 @@ +{% load i18n %} +{% autoescape off %} +{% blocktrans %}Account Already Exists{% endblocktrans %} +{% endautoescape %} diff --git a/templates/account/email/base_message.txt b/templates/account/email/base_message.txt new file mode 100644 index 0000000..7f38c74 --- /dev/null +++ b/templates/account/email/base_message.txt @@ -0,0 +1,7 @@ +{% load i18n %}{% autoescape off %}{% blocktrans with site_name=current_site.name %}Hello from {{ site_name }}!{% endblocktrans %} + +{% block content %}{% endblock content %} + +{% blocktrans with site_name=current_site.name site_domain=current_site.domain %}Thank you for using {{ site_name }}! +{{ site_domain }}{% endblocktrans %} +{% endautoescape %} diff --git a/templates/account/email/base_notification.txt b/templates/account/email/base_notification.txt new file mode 100644 index 0000000..ed25a49 --- /dev/null +++ b/templates/account/email/base_notification.txt @@ -0,0 +1,14 @@ +{% extends "account/email/base_message.txt" %} +{% load account %} +{% load i18n %} + +{% block content %}{% autoescape off %}{% blocktrans %}You are receiving this mail because the following change was made to your account:{% endblocktrans %} + +{% block notification_message %} +{% endblock notification_message%} + +{% blocktrans %}If you do not recognize this change then please take proper security precautions immediately. The change to your account originates from: + +- IP address: {{ip}} +- Browser: {{user_agent}} +- Date: {{timestamp}}{% endblocktrans %}{% endautoescape %}{% endblock %} diff --git a/templates/account/email/email_changed_message.txt b/templates/account/email/email_changed_message.txt new file mode 100644 index 0000000..46c0f7f --- /dev/null +++ b/templates/account/email/email_changed_message.txt @@ -0,0 +1,4 @@ +{% extends "account/email/base_notification.txt" %} +{% load i18n %} + +{% block notification_message %}{% blocktrans %}Your email has been changed from {{ from_email }} to {{ to_email }}.{% endblocktrans %}{% endblock notification_message %} diff --git a/templates/account/email/email_changed_subject.txt b/templates/account/email/email_changed_subject.txt new file mode 100644 index 0000000..cb0702c --- /dev/null +++ b/templates/account/email/email_changed_subject.txt @@ -0,0 +1,4 @@ +{% load i18n %} +{% autoescape off %} +{% blocktrans %}Email Changed{% endblocktrans %} +{% endautoescape %} diff --git a/templates/account/email/email_confirm_message.txt b/templates/account/email/email_confirm_message.txt new file mode 100644 index 0000000..23e3054 --- /dev/null +++ b/templates/account/email/email_confirm_message.txt @@ -0,0 +1,4 @@ +{% extends "account/email/base_notification.txt" %} +{% load i18n %} + +{% block notification_message %}{% blocktrans %}Your email has been confirmed.{% endblocktrans %}{% endblock notification_message %} diff --git a/templates/account/email/email_confirm_subject.txt b/templates/account/email/email_confirm_subject.txt new file mode 100644 index 0000000..fe8cf74 --- /dev/null +++ b/templates/account/email/email_confirm_subject.txt @@ -0,0 +1,4 @@ +{% load i18n %} +{% autoescape off %} +{% blocktrans %}Email Confirmation{% endblocktrans %} +{% endautoescape %} diff --git a/templates/account/email/email_confirmation_message.txt b/templates/account/email/email_confirmation_message.txt new file mode 100644 index 0000000..ed9d009 --- /dev/null +++ b/templates/account/email/email_confirmation_message.txt @@ -0,0 +1,9 @@ +{% extends "account/email/base_message.txt" %} +{% load account %} +{% load i18n %} + +{% block content %}{% autoescape off %}{% user_display user as user_display %}{% blocktranslate with site_name=current_site.name site_domain=current_site.domain %}You're receiving this email because user {{ user_display }} has given your email address to register an account on {{ site_domain }}.{% endblocktranslate %} + +{% if code %}{% blocktranslate %}Your email verification code is listed below. Please enter it in your open browser window.{% endblocktranslate %} + +{{ code }}{% else %}{% blocktranslate %}To confirm this is correct, go to {{ activate_url }}{% endblocktranslate %}{% endif %}{% endautoescape %}{% endblock content %} diff --git a/templates/account/email/email_confirmation_signup_message.txt b/templates/account/email/email_confirmation_signup_message.txt new file mode 100644 index 0000000..9996f7e --- /dev/null +++ b/templates/account/email/email_confirmation_signup_message.txt @@ -0,0 +1 @@ +{% include "account/email/email_confirmation_message.txt" %} diff --git a/templates/account/email/email_confirmation_signup_subject.txt b/templates/account/email/email_confirmation_signup_subject.txt new file mode 100644 index 0000000..4c85ebb --- /dev/null +++ b/templates/account/email/email_confirmation_signup_subject.txt @@ -0,0 +1 @@ +{% include "account/email/email_confirmation_subject.txt" %} diff --git a/templates/account/email/email_confirmation_subject.txt b/templates/account/email/email_confirmation_subject.txt new file mode 100644 index 0000000..2e2c052 --- /dev/null +++ b/templates/account/email/email_confirmation_subject.txt @@ -0,0 +1,4 @@ +{% load i18n %} +{% autoescape off %} +{% blocktrans %}Please Confirm Your Email Address{% endblocktrans %} +{% endautoescape %} diff --git a/templates/account/email/email_deleted_message.txt b/templates/account/email/email_deleted_message.txt new file mode 100644 index 0000000..fca92d1 --- /dev/null +++ b/templates/account/email/email_deleted_message.txt @@ -0,0 +1,4 @@ +{% extends "account/email/base_notification.txt" %} +{% load i18n %} + +{% block notification_message %}{% blocktrans %}Email address {{ deleted_email }} has been removed from your account.{% endblocktrans %}{% endblock notification_message %} diff --git a/templates/account/email/email_deleted_subject.txt b/templates/account/email/email_deleted_subject.txt new file mode 100644 index 0000000..e923fc8 --- /dev/null +++ b/templates/account/email/email_deleted_subject.txt @@ -0,0 +1,4 @@ +{% load i18n %} +{% autoescape off %} +{% blocktrans %}Email Removed{% endblocktrans %} +{% endautoescape %} diff --git a/templates/account/email/login_code_message.txt b/templates/account/email/login_code_message.txt new file mode 100644 index 0000000..6e98aae --- /dev/null +++ b/templates/account/email/login_code_message.txt @@ -0,0 +1,9 @@ +{% extends "account/email/base_message.txt" %} +{% load account %} +{% load i18n %} + +{% block content %}{% autoescape off %}{% blocktranslate %}Your sign-in code is listed below. Please enter it in your open browser window.{% endblocktranslate %}{% endautoescape %} + +{{ code }} + +{% blocktranslate %}This mail can be safely ignored if you did not initiate this action.{% endblocktranslate %}{% endblock content %} diff --git a/templates/account/email/login_code_subject.txt b/templates/account/email/login_code_subject.txt new file mode 100644 index 0000000..e8d4b19 --- /dev/null +++ b/templates/account/email/login_code_subject.txt @@ -0,0 +1,4 @@ +{% load i18n %} +{% autoescape off %} +{% blocktrans %}Sign-In Code{% endblocktrans %} +{% endautoescape %} diff --git a/templates/account/email/password_changed_message.txt b/templates/account/email/password_changed_message.txt new file mode 100644 index 0000000..6a6698b --- /dev/null +++ b/templates/account/email/password_changed_message.txt @@ -0,0 +1,4 @@ +{% extends "account/email/base_notification.txt" %} +{% load i18n %} + +{% block notification_message %}{% blocktrans %}Your password has been changed.{% endblocktrans %}{% endblock notification_message %} diff --git a/templates/account/email/password_changed_subject.txt b/templates/account/email/password_changed_subject.txt new file mode 100644 index 0000000..b8eecbb --- /dev/null +++ b/templates/account/email/password_changed_subject.txt @@ -0,0 +1,4 @@ +{% load i18n %} +{% autoescape off %} +{% blocktrans %}Password Changed{% endblocktrans %} +{% endautoescape %} diff --git a/templates/account/email/password_reset_key_message.txt b/templates/account/email/password_reset_key_message.txt new file mode 100644 index 0000000..8e4a290 --- /dev/null +++ b/templates/account/email/password_reset_key_message.txt @@ -0,0 +1,9 @@ +{% extends "account/email/base_message.txt" %} +{% load i18n %} + +{% block content %}{% autoescape off %}{% blocktrans %}You're receiving this email because you or someone else has requested a password reset for your user account. +It can be safely ignored if you did not request a password reset. Click the link below to reset your password.{% endblocktrans %} + +{{ password_reset_url }}{% if username %} + +{% blocktrans %}In case you forgot, your username is {{ username }}.{% endblocktrans %}{% endif %}{% endautoescape %}{% endblock content %} diff --git a/templates/account/email/password_reset_key_subject.txt b/templates/account/email/password_reset_key_subject.txt new file mode 100644 index 0000000..f0fd6b5 --- /dev/null +++ b/templates/account/email/password_reset_key_subject.txt @@ -0,0 +1,4 @@ +{% load i18n %} +{% autoescape off %} +{% blocktrans %}Password Reset Email{% endblocktrans %} +{% endautoescape %} diff --git a/templates/account/email/password_reset_message.txt b/templates/account/email/password_reset_message.txt new file mode 100644 index 0000000..82d1013 --- /dev/null +++ b/templates/account/email/password_reset_message.txt @@ -0,0 +1,4 @@ +{% extends "account/email/base_notification.txt" %} +{% load i18n %} + +{% block notification_message %}{% blocktrans %}Your password has been reset.{% endblocktrans %}{% endblock notification_message %} diff --git a/templates/account/email/password_reset_subject.txt b/templates/account/email/password_reset_subject.txt new file mode 100644 index 0000000..42201c4 --- /dev/null +++ b/templates/account/email/password_reset_subject.txt @@ -0,0 +1,4 @@ +{% load i18n %} +{% autoescape off %} +{% blocktrans %}Password Reset{% endblocktrans %} +{% endautoescape %} diff --git a/templates/account/email/password_set_message.txt b/templates/account/email/password_set_message.txt new file mode 100644 index 0000000..44ca0f4 --- /dev/null +++ b/templates/account/email/password_set_message.txt @@ -0,0 +1,4 @@ +{% extends "account/email/base_notification.txt" %} +{% load i18n %} + +{% block notification_message %}{% blocktrans %}Your password has been set.{% endblocktrans %}{% endblock notification_message %} diff --git a/templates/account/email/password_set_subject.txt b/templates/account/email/password_set_subject.txt new file mode 100644 index 0000000..fc76084 --- /dev/null +++ b/templates/account/email/password_set_subject.txt @@ -0,0 +1,4 @@ +{% load i18n %} +{% autoescape off %} +{% blocktrans %}Password Set{% endblocktrans %} +{% endautoescape %} diff --git a/templates/account/email/unknown_account_message.txt b/templates/account/email/unknown_account_message.txt new file mode 100644 index 0000000..eb44db4 --- /dev/null +++ b/templates/account/email/unknown_account_message.txt @@ -0,0 +1,10 @@ +{% extends "account/email/base_message.txt" %} +{% load i18n %} + +{% block content %}{% autoescape off %}{% blocktranslate %}You are receiving this email because you, or someone else, tried to access an account with email {{ email }}. However, we do not have any record of such an account in our database.{% endblocktranslate %} + +{% blocktranslate %}This mail can be safely ignored if you did not initiate this action.{% endblocktranslate %} + +{% blocktranslate %}If it was you, you can sign up for an account using the link below.{% endblocktranslate %} + +{{ signup_url }}{% endautoescape %}{% endblock content %} diff --git a/templates/account/email/unknown_account_subject.txt b/templates/account/email/unknown_account_subject.txt new file mode 100644 index 0000000..2461ea0 --- /dev/null +++ b/templates/account/email/unknown_account_subject.txt @@ -0,0 +1,4 @@ +{% load i18n %} +{% autoescape off %} +{% blocktrans %}Unknown Account{% endblocktrans %} +{% endautoescape %} diff --git a/templates/account/email_change.html b/templates/account/email_change.html new file mode 100644 index 0000000..06e5304 --- /dev/null +++ b/templates/account/email_change.html @@ -0,0 +1,91 @@ +{% extends "base.html" %} +{% load static %} +{% load i18n %} +{% load allauth account %} + +{% block head_title %} + {% trans "Manage Email Address" %} +{% endblock head_title %} + +{% block content %} + +
    +
    +
    +
    +
    +
    + +

    {% trans "Manage Email Address" %}

    +
    + {% if not emailaddresses %} +
    + {% include "account/snippets/warn_no_email.html" %} +
    + {% endif %} + {% url 'account_email' as action_url %} +
    + {% csrf_token %} + + {% if current_emailaddress %} +
    + + +
    + {% endif %} + + {% if new_emailaddress %} +
    + + + {% trans "Your email address is still pending verification." %} +
    + + {% if current_emailaddress %} + + {% endif %} +
    +
    + {% endif %} + +
    + + + {% if form.email.errors %} +
    {{ form.email.errors }}
    + {% endif %} +
    + +
    + +
    +
    + + {% if new_emailaddress %} + + {% endif %} +
    +
    +
    +
    +
    + +{% endblock content %} + +{% block extra_body %} + {{ block.super }} +{% endblock extra_body %} diff --git a/templates/account/email_confirm.html b/templates/account/email_confirm.html new file mode 100644 index 0000000..1da16c6 --- /dev/null +++ b/templates/account/email_confirm.html @@ -0,0 +1,70 @@ +{% extends "base.html" %} +{% load static %} +{% load i18n %} +{% load account allauth %} + +{% block head_title %} + {% trans "Confirm Email Address" %} +{% endblock head_title %} + +{% block content %} + +
    +
    +
    +
    +
    +
    + +

    {% trans "Confirm Email Address" %}

    +
    + + {% if confirmation %} + {% user_display confirmation.email_address.user as user_display %} + {% if can_confirm %} +

    + {% blocktrans with confirmation.email_address.email as email %} + Please confirm that {{ email }} is an email address for user {{ user_display }}. + {% endblocktrans %} +

    + {% url 'account_confirm_email' confirmation.key as action_url %} +
    + {% csrf_token %} + {{ redirect_field }} +
    + +
    +
    + {% else %} +

    + {% blocktrans %} + Unable to confirm {{ email }} because it is already confirmed by a different account. + {% endblocktrans %} +

    + {% endif %} + {% else %} + {% url 'account_email' as email_url %} +

    + {% blocktrans %} + This email confirmation link expired or is invalid. Please issue a new email confirmation request. + {% endblocktrans %} +

    + {% endif %} +
    +
    +
    +
    +
    + +{% endblock content %} + +{% block extra_body %} + {{ block.super }} +{% endblock extra_body %} diff --git a/templates/account/login.html b/templates/account/login.html new file mode 100644 index 0000000..391e777 --- /dev/null +++ b/templates/account/login.html @@ -0,0 +1,66 @@ +{% extends "base.html" %} +{% load static %} +{% load i18n %} +{% load allauth account %} + +{% block head_title %} + {% trans "Sign In" %} +{% endblock head_title %} + +{% block content %} + +
    +
    +
    + +

    {% trans "Welcome to Creative School" %}

    +
    {% trans "Don't have an account?" %} {% trans "Create an account" %}
    +
    + {% if not SOCIALACCOUNT_ONLY %} + {% url 'account_login' as login_url %} +
    + {% csrf_token %} +
    + + +
    +
    + +
    + + +
    +
    +
    +
    +
    + + +
    + {% trans "Forgot your password?" %} +
    +
    +
    + +
    + {{ redirect_field }} +
    + {% endif %} +
    +
    + +{% endblock content %} + +{% block extra_body %} + {{ block.super }} + {% if PASSKEY_LOGIN_ENABLED %} + {% include "mfa/webauthn/snippets/login_script.html" with button_id="passkey_login" %} + {% endif %} +{% endblock %} diff --git a/templates/account/logout.html b/templates/account/logout.html new file mode 100644 index 0000000..031edf0 --- /dev/null +++ b/templates/account/logout.html @@ -0,0 +1,47 @@ +{% extends "base.html" %} +{% load static %} +{% load i18n %} +{% load allauth account %} + +{% block head_title %} + {% trans "Sign Out" %} +{% endblock head_title %} + +{% block content %} + +
    +
    +
    +
    +
    +
    + +

    {% trans "Sign Out" %}

    +
    +

    {% trans 'Are you sure you want to sign out?' %}

    + {% url 'account_logout' as action_url %} +
    + {% csrf_token %} + {{ redirect_field }} +
    + +
    +
    +
    +
    +
    +
    +
    + +{% endblock content %} + +{% block extra_body %} + {{ block.super }} +{% endblock extra_body %} diff --git a/templates/account/messages/cannot_delete_primary_email.txt b/templates/account/messages/cannot_delete_primary_email.txt new file mode 100644 index 0000000..9c17574 --- /dev/null +++ b/templates/account/messages/cannot_delete_primary_email.txt @@ -0,0 +1,2 @@ +{% load i18n %} +{% blocktrans %}You cannot remove your primary email address ({{email}}).{% endblocktrans %} diff --git a/templates/account/messages/email_confirmation_failed.txt b/templates/account/messages/email_confirmation_failed.txt new file mode 100644 index 0000000..6930821 --- /dev/null +++ b/templates/account/messages/email_confirmation_failed.txt @@ -0,0 +1,2 @@ +{% load i18n %} +{% blocktrans %}Unable to confirm {{email}} because it is already confirmed by a different account.{% endblocktrans %} diff --git a/templates/account/messages/email_confirmation_sent.txt b/templates/account/messages/email_confirmation_sent.txt new file mode 100644 index 0000000..fb30b31 --- /dev/null +++ b/templates/account/messages/email_confirmation_sent.txt @@ -0,0 +1,2 @@ +{% load i18n %} +{% blocktrans %}Confirmation email sent to {{email}}.{% endblocktrans %} diff --git a/templates/account/messages/email_confirmed.txt b/templates/account/messages/email_confirmed.txt new file mode 100644 index 0000000..3427a4d --- /dev/null +++ b/templates/account/messages/email_confirmed.txt @@ -0,0 +1,2 @@ +{% load i18n %} +{% blocktrans %}You have confirmed {{email}}.{% endblocktrans %} diff --git a/templates/account/messages/email_deleted.txt b/templates/account/messages/email_deleted.txt new file mode 100644 index 0000000..27bb630 --- /dev/null +++ b/templates/account/messages/email_deleted.txt @@ -0,0 +1,2 @@ +{% load i18n %} +{% blocktrans %}Removed email address {{email}}.{% endblocktrans %} diff --git a/templates/account/messages/logged_in.txt b/templates/account/messages/logged_in.txt new file mode 100644 index 0000000..f49248a --- /dev/null +++ b/templates/account/messages/logged_in.txt @@ -0,0 +1,4 @@ +{% load account %} +{% load i18n %} +{% user_display user as name %} +{% blocktrans %}Successfully signed in as {{name}}.{% endblocktrans %} diff --git a/templates/account/messages/logged_out.txt b/templates/account/messages/logged_out.txt new file mode 100644 index 0000000..2cd4627 --- /dev/null +++ b/templates/account/messages/logged_out.txt @@ -0,0 +1,2 @@ +{% load i18n %} +{% blocktrans %}You have signed out.{% endblocktrans %} diff --git a/templates/account/messages/login_code_sent.txt b/templates/account/messages/login_code_sent.txt new file mode 100644 index 0000000..bbb9633 --- /dev/null +++ b/templates/account/messages/login_code_sent.txt @@ -0,0 +1,2 @@ +{% load i18n %} +{% blocktrans %}A sign-in code has been mailed to {{email}}.{% endblocktrans %} diff --git a/templates/account/messages/password_changed.txt b/templates/account/messages/password_changed.txt new file mode 100644 index 0000000..bd5801c --- /dev/null +++ b/templates/account/messages/password_changed.txt @@ -0,0 +1,2 @@ +{% load i18n %} +{% blocktrans %}Password successfully changed.{% endblocktrans %} diff --git a/templates/account/messages/password_set.txt b/templates/account/messages/password_set.txt new file mode 100644 index 0000000..9d224ee --- /dev/null +++ b/templates/account/messages/password_set.txt @@ -0,0 +1,2 @@ +{% load i18n %} +{% blocktrans %}Password successfully set.{% endblocktrans %} diff --git a/templates/account/messages/primary_email_set.txt b/templates/account/messages/primary_email_set.txt new file mode 100644 index 0000000..3ef8561 --- /dev/null +++ b/templates/account/messages/primary_email_set.txt @@ -0,0 +1,2 @@ +{% load i18n %} +{% blocktrans %}Primary email address set.{% endblocktrans %} diff --git a/templates/account/messages/unverified_primary_email.txt b/templates/account/messages/unverified_primary_email.txt new file mode 100644 index 0000000..7d0ef9c --- /dev/null +++ b/templates/account/messages/unverified_primary_email.txt @@ -0,0 +1,2 @@ +{% load i18n %} +{% blocktrans %}Your primary email address must be verified.{% endblocktrans %} diff --git a/templates/account/password_change.html b/templates/account/password_change.html new file mode 100644 index 0000000..13caa6d --- /dev/null +++ b/templates/account/password_change.html @@ -0,0 +1,65 @@ +{% extends "base.html" %} +{% load static %} +{% load i18n %} +{% load allauth account %} + +{% block head_title %} + {% trans "Change Password" %} +{% endblock head_title %} + +{% block content %} + +
    +
    +
    +
    +
    +
    + +

    {% trans "Change Your Password" %}

    +

    {% trans "To enhance the security of your account, we recommend updating your password periodically." %}

    +
    +
    + {% url 'account_change_password' as action_url %} +
    + {% csrf_token %} + {{ redirect_field }} +
    + {% for field in form %} +
    + {{ field.label_tag }} + {{ field }} + {% if field.errors %} +
    {{ field.errors }}
    + {% endif %} +
    + {% endfor %} +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    + +{% endblock content %} + +{% block extra_body %} + {{ block.super }} +{% endblock extra_body %} diff --git a/templates/account/password_reset.html b/templates/account/password_reset.html new file mode 100644 index 0000000..5ff9fab --- /dev/null +++ b/templates/account/password_reset.html @@ -0,0 +1,54 @@ +{% extends "base.html" %} +{% load static %} +{% load i18n %} +{% load allauth account %} + +{% block head_title %} + {% trans "Forgot Password" %} +{% endblock head_title %} + +{% block content %} + +
    +
    +
    +
    +
    +
    + +

    {% trans "Forgot Password?" %}

    +

    {% trans "Enter your email and we'll send you a link to reset your password." %}

    +
    + {% if user.is_authenticated %} + {% include "account/snippets/already_logged_in.html" %} + {% else %} + {% url 'account_reset_password' as reset_url %} +
    + {% csrf_token %} +
    + + +
    +
    + +
    +
    + {% endif %} +
    +
    +
    +
    +
    + +{% endblock content %} + +{% block extra_body %} + {{ block.super }} +{% endblock extra_body %} diff --git a/templates/account/password_reset_done.html b/templates/account/password_reset_done.html new file mode 100644 index 0000000..707da66 --- /dev/null +++ b/templates/account/password_reset_done.html @@ -0,0 +1,45 @@ +{% extends "base.html" %} +{% load static %} +{% load i18n %} +{% load allauth account %} + +{% block head_title %} + {% trans "Password Reset" %} +{% endblock head_title %} + +{% block content %} + +
    +
    +
    +
    +
    +
    + +

    {% trans "Password Reset" %}

    +
    + {% if user.is_authenticated %} + {% include "account/snippets/already_logged_in.html" %} + {% else %} +

    + {% blocktrans %} + We have sent you an email. If you have not received it, please check your spam folder. Otherwise, contact us if you do not receive it in a few minutes. + {% endblocktrans %} +

    + {% endif %} +
    +
    +
    +
    +
    + +{% endblock content %} + +{% block extra_body %} + {{ block.super }} +{% endblock extra_body %} diff --git a/templates/account/password_reset_from_key.html b/templates/account/password_reset_from_key.html new file mode 100644 index 0000000..1a303c7 --- /dev/null +++ b/templates/account/password_reset_from_key.html @@ -0,0 +1,75 @@ +{% extends "base.html" %} +{% load static %} +{% load i18n %} +{% load allauth account %} + +{% block head_title %} + {% trans "Change Password" %} +{% endblock head_title %} + +{% block content %} + +
    +
    +
    +
    +
    +
    + +

    + {% if token_fail %} + {% trans "Bad Token" %} + {% else %} + {% trans "Change Password" %} + {% endif %} +

    +
    + {% if token_fail %} + {% url 'account_reset_password' as passwd_reset_url %} +

    + {% blocktrans %} + The password reset link was invalid, possibly because it has already been used. Please request a new password reset. + {% endblocktrans %} +

    + {% else %} + {% url 'account_set_password' as action_url %} +
    + {% csrf_token %} + {{ redirect_field }} +
    + {% for field in form.visible_fields %} +
    + {{ field.label_tag }} + {{ field }} + {% if field.help_text %} + {{ field.help_text }} + {% endif %} + {% for error in field.errors %} +
    {{ error }}
    + {% endfor %} +
    + {% endfor %} +
    +
    + +
    +
    + {% endif %} +
    +
    +
    +
    +
    + +{% endblock content %} + +{% block extra_body %} + {{ block.super }} +{% endblock extra_body %} diff --git a/templates/account/password_reset_from_key_done.html b/templates/account/password_reset_from_key_done.html new file mode 100644 index 0000000..3fb2218 --- /dev/null +++ b/templates/account/password_reset_from_key_done.html @@ -0,0 +1,37 @@ +{% extends "base.html" %} +{% load static %} +{% load i18n %} +{% load allauth account %} + +{% block head_title %} + {% trans "Change Password" %} +{% endblock head_title %} + +{% block content %} + +
    +
    +
    +
    +
    +
    + +

    {% trans "Change Password" %}

    +
    +

    {% trans "Your password is now changed." %}

    +
    +
    +
    +
    +
    + +{% endblock content %} + +{% block extra_body %} + {{ block.super }} +{% endblock extra_body %} diff --git a/templates/account/password_set.html b/templates/account/password_set.html new file mode 100644 index 0000000..406088e --- /dev/null +++ b/templates/account/password_set.html @@ -0,0 +1,60 @@ +{% extends "base.html" %} +{% load static %} +{% load i18n %} +{% load allauth account %} + +{% block head_title %} + {% trans "Set Password" %} +{% endblock head_title %} + +{% block content %} + +
    +
    +
    +
    +
    +
    + +

    {% trans "Set Password" %}

    +
    + {% url 'account_set_password' as action_url %} +
    + {% csrf_token %} + {{ redirect_field }} +
    + {% for field in form.visible_fields %} +
    + {{ field.label_tag }} + {{ field }} + {% if field.help_text %} + {{ field.help_text }} + {% endif %} + {% for error in field.errors %} +
    {{ error }}
    + {% endfor %} +
    + {% endfor %} +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +{% endblock content %} + +{% block extra_body %} + {{ block.super }} +{% endblock extra_body %} diff --git a/templates/account/reauthenticate.html b/templates/account/reauthenticate.html new file mode 100644 index 0000000..d98c86a --- /dev/null +++ b/templates/account/reauthenticate.html @@ -0,0 +1,22 @@ +{% extends "account/base_reauthenticate.html" %} +{% load allauth %} +{% load i18n %} +{% block reauthenticate_content %} + {% element p %} + {% blocktranslate %}Enter your password:{% endblocktranslate %} + {% endelement %} + {% url 'account_reauthenticate' as action_url %} + {% element form form=form method="post" action=action_url %} + {% slot body %} + {% csrf_token %} + {% element fields form=form unlabeled=True %} + {% endelement %} + {{ redirect_field }} + {% endslot %} + {% slot actions %} + {% element button type="submit" tags="primary,reauthenticate" %} + {% trans "Confirm" %} + {% endelement %} + {% endslot %} + {% endelement %} +{% endblock %} diff --git a/templates/account/request_login_code.html b/templates/account/request_login_code.html new file mode 100644 index 0000000..8b9b015 --- /dev/null +++ b/templates/account/request_login_code.html @@ -0,0 +1,32 @@ +{% extends "account/base_entrance.html" %} +{% load i18n %} +{% load allauth account %} +{% block head_title %} + {% translate "Sign In" %} +{% endblock head_title %} +{% block content %} + {% element h1 %} + {% translate "Mail me a sign-in code" %} + {% endelement %} + {% element p %} + {% blocktranslate %}You will receive an email containing a special code for a password-free sign-in.{% endblocktranslate %} + {% endelement %} + {% url 'account_request_login_code' as login_url %} + {% element form form=form method="post" action=login_url tags="entrance,login" %} + {% slot body %} + {% csrf_token %} + {% element fields form=form unlabeled=True %} + {% endelement %} + {{ redirect_field }} + {% endslot %} + {% slot actions %} + {% element button type="submit" tags="prominent,login" %} + {% translate "Request Code" %} + {% endelement %} + {% endslot %} + {% endelement %} + {% url 'account_login' as login_url %} + {% element button href=login_url tags="link" %} + {% translate "Other sign-in options" %} + {% endelement %} +{% endblock content %} diff --git a/templates/account/signup.html b/templates/account/signup.html new file mode 100644 index 0000000..7be0946 --- /dev/null +++ b/templates/account/signup.html @@ -0,0 +1,97 @@ +{% extends "base.html" %} +{% load static %} +{% load i18n %} +{% load allauth account %} + +{% block head_title %} + {% trans "Sign Up" %} +{% endblock head_title %} + +{% block content %} + +
    +
    +
    +
    +
    +
    + +

    {% trans "Create your account" %}

    +
    {% trans "Already have an account?" %} {% trans "Login here" %}
    +
    + {% if not SOCIALACCOUNT_ONLY %} + {% url 'account_signup' as signup_url %} +
    + {% csrf_token %} +
    + + + {% if form.email.errors %} +
    + {{ form.email.errors }} +
    + {% endif %} +
    +
    + + + {% if form.username.errors %} +
    + {{ form.username.errors }} +
    + {% endif %} +
    +
    + +
    + + +
    + {% if form.password1.errors %} +
    + {{ form.password1.errors }} +
    + {% endif %} +
    +
    + + + {% if form.password2.errors %} +
    + {{ form.password2.errors }} +
    + {% endif %} +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    + {{ redirect_field }} +
    + {% endif %} + +
    +
    +
    +
    +
    + +{% endblock content %} + +{% block extra_body %} + {{ block.super }} +{% endblock extra_body %} diff --git a/templates/account/signup_by_passkey.html b/templates/account/signup_by_passkey.html new file mode 100644 index 0000000..0863542 --- /dev/null +++ b/templates/account/signup_by_passkey.html @@ -0,0 +1,38 @@ +{% extends "account/base_entrance.html" %} +{% load allauth i18n %} +{% block head_title %} + {% trans "Signup" %} +{% endblock head_title %} +{% block content %} + {% element h1 %} + {% trans "Passkey Sign Up" %} + {% endelement %} + {% setvar link %} + + {% endsetvar %} + {% setvar end_link %} + + {% endsetvar %} + {% element p %} + {% blocktranslate %}Already have an account? Then please {{ link }}sign in{{ end_link }}.{% endblocktranslate %} + {% endelement %} + {% url 'account_signup_by_passkey' as action_url %} + {% element form form=form method="post" action=action_url tags="entrance,signup" %} + {% slot body %} + {% csrf_token %} + {% element fields form=form unlabeled=True %} + {% endelement %} + {{ redirect_field }} + {% endslot %} + {% slot actions %} + {% element button tags="prominent,signup" type="submit" %} + {% trans "Sign Up" %} + {% endelement %} + {% endslot %} + {% endelement %} + {% element hr %} + {% endelement %} + {% element button href=signup_url tags="prominent,signup,outline,primary" %} + {% trans "Other options" %} + {% endelement %} +{% endblock content %} diff --git a/templates/account/signup_closed.html b/templates/account/signup_closed.html new file mode 100644 index 0000000..1d70eef --- /dev/null +++ b/templates/account/signup_closed.html @@ -0,0 +1,14 @@ +{% extends "account/base_entrance.html" %} +{% load i18n %} +{% load allauth %} +{% block head_title %} + {% trans "Sign Up Closed" %} +{% endblock head_title %} +{% block content %} + {% element h1 %} + {% trans "Sign Up Closed" %} + {% endelement %} + {% element p %} + {% trans "We are sorry, but the sign up is currently closed." %} + {% endelement %} +{% endblock content %} diff --git a/templates/account/snippets/already_logged_in.html b/templates/account/snippets/already_logged_in.html new file mode 100644 index 0000000..f6640da --- /dev/null +++ b/templates/account/snippets/already_logged_in.html @@ -0,0 +1,9 @@ +{% load i18n %} +{% load account %} +{% load allauth %} +{% user_display user as user_display %} +{% element alert %} + {% slot message %} + {% blocktranslate %}Note{% endblocktranslate %}: {% blocktranslate %}You are already logged in as {{ user_display }}.{% endblocktranslate %} + {% endslot %} +{% endelement %} diff --git a/templates/account/snippets/warn_no_email.html b/templates/account/snippets/warn_no_email.html new file mode 100644 index 0000000..83668df --- /dev/null +++ b/templates/account/snippets/warn_no_email.html @@ -0,0 +1,4 @@ +{% load i18n allauth %} +{% element p %} + {% trans 'Warning:' %} {% trans "You currently do not have any email address set up. You should really add an email address so you can receive notifications, reset your password, etc." %} +{% endelement %} diff --git a/templates/account/verification_sent.html b/templates/account/verification_sent.html new file mode 100644 index 0000000..fe9dc33 --- /dev/null +++ b/templates/account/verification_sent.html @@ -0,0 +1,38 @@ +{% extends "base.html" %} +{% load static %} +{% load i18n %} +{% load allauth account %} + +{% block head_title %} + {% trans "Verify Email Address" %} +{% endblock head_title %} + +{% block content %} + +
    +
    +
    +
    +
    +
    + +

    {% trans "Verify Your Email Address" %}

    +

    {% trans "We have sent you an email for verification. Follow the link provided to complete the sign-up process. If you do not see the verification email in your primary inbox, check your spam folder." %}

    +
    +

    {% trans "Please contact us if you do not receive the verification email within a few minutes." %}

    +
    +
    +
    +
    +
    + +{% endblock content %} + +{% block extra_body %} + {{ block.super }} +{% endblock extra_body %} diff --git a/templates/account/verified_email_required.html b/templates/account/verified_email_required.html new file mode 100644 index 0000000..65d7d1f --- /dev/null +++ b/templates/account/verified_email_required.html @@ -0,0 +1,25 @@ +{% extends "account/base_manage.html" %} +{% load i18n %} +{% load allauth %} +{% block head_title %} + {% trans "Verify Your Email Address" %} +{% endblock head_title %} +{% block content %} + {% element h1 %} + {% trans "Verify Your Email Address" %} + {% endelement %} + {% url 'account_email' as email_url %} + {% element p %} + {% blocktrans %}This part of the site requires us to verify that +you are who you claim to be. For this purpose, we require that you +verify ownership of your email address. {% endblocktrans %} + {% endelement %} + {% element p %} + {% blocktrans %}We have sent an email to you for +verification. Please click on the link inside that email. If you do not see the verification email in your main inbox, check your spam folder. Otherwise +contact us if you do not receive it within a few minutes.{% endblocktrans %} + {% endelement %} + {% element p %} + {% blocktrans %}Note: you can still change your email address.{% endblocktrans %} + {% endelement %} +{% endblock content %} diff --git a/templates/base.html b/templates/base.html new file mode 100755 index 0000000..728ff70 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,443 @@ +{% load static %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% block headblock %}{% endblock %} + + + + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    + +
    +
    +
      +
    • + +
    • + {% if user.is_authenticated %} +
    • Logout
    • +
    • Dashboard
    • + {% else %} +
    • Login
    • +
    • Register
    • + {% endif %} +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + + + {% block content %}{% endblock %} + + +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    live chat
    +
    +
    +
      +
    • +
      +
      +
      favicon +
      +
      Creative Schools helper
      +

      Have a question? Please send the message, and our Creative Schools Helper will gladly help you!

      +
      +
      +
      +
      +
    • +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file