Initial commit
No files matched your search
@@ -0,0 +1,16 @@
|
||||
"""
|
||||
ASGI config for company_site 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/5.0/howto/deployment/asgi/
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
from django.core.asgi import get_asgi_application
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'company_site.settings')
|
||||
|
||||
application = get_asgi_application()
|
||||
@@ -0,0 +1,149 @@
|
||||
"""
|
||||
Django settings for company_site project.
|
||||
|
||||
Generated by 'django-admin startproject' using Django 5.0.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/5.0/topics/settings/
|
||||
|
||||
For the full list of settings and their values, see
|
||||
https://docs.djangoproject.com/en/5.0/ref/settings/
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||
|
||||
|
||||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = 'django-insecure-0$+hho_6%-(ud^t%0zos(q&i@2&)9m+u&dgj77&51g$m#hr^0s'
|
||||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = True
|
||||
|
||||
ALLOWED_HOSTS = ["*"]
|
||||
|
||||
|
||||
# Application definition
|
||||
|
||||
INSTALLED_APPS = [
|
||||
'public.apps.PublicConfig',
|
||||
'financial.apps.FinancialConfig',
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'phonenumber_field',
|
||||
'django_recaptcha',
|
||||
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
'django.middleware.security.SecurityMiddleware',
|
||||
'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',
|
||||
]
|
||||
|
||||
ROOT_URLCONF = 'company_site.urls'
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [],
|
||||
'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',
|
||||
],
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
WSGI_APPLICATION = 'company_site.wsgi.application'
|
||||
|
||||
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/5.0/ref/settings/#databases
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': BASE_DIR / 'db.sqlite3',
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Password validation
|
||||
# https://docs.djangoproject.com/en/5.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',
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/5.0/topics/i18n/
|
||||
|
||||
LANGUAGE_CODE = 'en-us'
|
||||
|
||||
TIME_ZONE = 'UTC'
|
||||
|
||||
USE_I18N = True
|
||||
|
||||
USE_TZ = True
|
||||
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/5.0/howto/static-files/
|
||||
|
||||
STATIC_URL = 'static/'
|
||||
|
||||
# Default primary key field type
|
||||
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field
|
||||
|
||||
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
||||
|
||||
# # email settings
|
||||
# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||
# EMAIL_USE_TLS = True
|
||||
# EMAIL_HOST = 'smtp.outlook.office365.com'#'smtp-mail.outlook.com'
|
||||
# EMAIL_HOST_USERNAME = 'ryan@aimloperations.com'
|
||||
# EMAIL_HOST_USER = 'ryan@aimloperations.com'
|
||||
# EMAIL_HOST_PASSWORD = '!HopeThisW0rkz'
|
||||
# EMAIL_PORT = 587
|
||||
# SERVER_EMAIL = EMAIL_HOST_USER
|
||||
|
||||
# Recapcha Stuff
|
||||
RECAPTCHA_PUBLIC_KEY = '6LdXRbopAAAAAL9NT7C2J3Fuu_b6rvhhsPyxTd9Z'
|
||||
RECAPTCHA_PRIVATE_KEY = '6LdXRbopAAAAAPt31zdQJaOwLseognmZHZEHmWlt'
|
||||
|
||||
# SMTP2GO
|
||||
EMAIL_HOST = 'mail.smtp2go.com'
|
||||
EMAIL_HOST_USER = 'info.aimloperations.com'
|
||||
EMAIL_HOST_PASSWORD = 'ZDErIII2sipNNVMz'
|
||||
EMAIL_PORT = 2525
|
||||
EMAIL_USE_TLS = True
|
||||
@@ -0,0 +1,25 @@
|
||||
"""
|
||||
URL configuration for company_site project.
|
||||
|
||||
The `urlpatterns` list routes URLs to views. For more information please see:
|
||||
https://docs.djangoproject.com/en/5.0/topics/http/urls/
|
||||
Examples:
|
||||
Function views
|
||||
1. Add an import: from my_app import views
|
||||
2. Add a URL to urlpatterns: path('', views.home, name='home')
|
||||
Class-based views
|
||||
1. Add an import: from other_app.views import Home
|
||||
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
|
||||
Including another URLconf
|
||||
1. Import the include() function: from django.urls import include, path
|
||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
from django.contrib import admin
|
||||
from django.urls import include, path
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
path("public/", include("public.urls")),
|
||||
path("financial/", include("financial.urls")),
|
||||
path('admin/', admin.site.urls),
|
||||
]
|
||||
@@ -0,0 +1,16 @@
|
||||
"""
|
||||
WSGI config for company_site 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/5.0/howto/deployment/wsgi/
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'company_site.settings')
|
||||
|
||||
application = get_wsgi_application()
|
||||
@@ -0,0 +1,8 @@
|
||||
from django.contrib import admin
|
||||
from .models import Contract
|
||||
# Register your models here.
|
||||
|
||||
class ContractAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
admin.site.register(Contract, ContractAdmin)
|
||||
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class FinancialConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'financial'
|
||||
@@ -0,0 +1,20 @@
|
||||
from django import forms
|
||||
|
||||
from django.forms import ModelForm
|
||||
from .models import Employee, Contract, ChargeNumber
|
||||
|
||||
class EmployeeForm(ModelForm):
|
||||
class Meta:
|
||||
model = Employee
|
||||
# TODO: fix slary to be salary
|
||||
fields = ["primaryAddress","workAddress", "slary"]
|
||||
|
||||
class ContractForm(ModelForm):
|
||||
class Meta:
|
||||
model = Contract
|
||||
fields = ["contract_type","name","proposed_amount","baseline_amount","funded_amount","baseline_start","baseline_end"]
|
||||
|
||||
class ChargeNumberForm(ModelForm):
|
||||
class Meta:
|
||||
model = ChargeNumber
|
||||
fields = ["charge_number_type","amount", "start_date","end_date"]
|
||||
@@ -0,0 +1,120 @@
|
||||
# Generated by Django 5.0 on 2024-02-11 20:29
|
||||
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
import django_enum.fields
|
||||
import phonenumber_field.modelfields
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='AddressModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('address_1', models.CharField(max_length=128)),
|
||||
('address_2', models.CharField(blank=True, max_length=128)),
|
||||
('city', models.CharField(max_length=64)),
|
||||
('state', models.CharField(max_length=2)),
|
||||
('zip_code', models.CharField(max_length=5)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Contract',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created', models.DateTimeField(default=django.utils.timezone.now)),
|
||||
('last_modified', models.DateTimeField(default=django.utils.timezone.now)),
|
||||
('slug', models.SlugField()),
|
||||
('contract_type', django_enum.fields.EnumCharField(choices=[('FFP', 'FIRM_FIX_PRICED'), ('MAX', 'MAX_NUM_CONTRACT_TYPES')], max_length=3)),
|
||||
('name', models.CharField(max_length=100)),
|
||||
('proposed_amount', models.FloatField(default=0.0)),
|
||||
('baseline_amount', models.FloatField(default=0.0)),
|
||||
('funded_amount', models.FloatField(default=0.0)),
|
||||
('baseline_start', models.DateField(default=None, null=True)),
|
||||
('baseline_end', models.DateField(default=None, null=True)),
|
||||
('linkedContracts', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='financial.contract')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ChargeNumber',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created', models.DateTimeField(default=django.utils.timezone.now)),
|
||||
('last_modified', models.DateTimeField(default=django.utils.timezone.now)),
|
||||
('slug', models.SlugField()),
|
||||
('charge_number_type', django_enum.fields.EnumCharField(choices=[('LOE', 'LEVEL_OF_EFFORT'), ('QBD', 'QBD'), ('0_100', 'ZERO_ONE_HUNDRED'), ('50_50', 'FIFTY_FIFTY'), ('MAX', 'MAX_NUM_TASK_TYPES')], max_length=5)),
|
||||
('amount', models.FloatField(default=0.0)),
|
||||
('percent_complete', models.FloatField(default=0.0)),
|
||||
('startDate', models.DateField(default=None, null=True)),
|
||||
('endDate', models.DateField(default=None, null=True)),
|
||||
('contract', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='financial.contract')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Employee',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created', models.DateTimeField(default=django.utils.timezone.now)),
|
||||
('last_modified', models.DateTimeField(default=django.utils.timezone.now)),
|
||||
('slug', models.SlugField()),
|
||||
('phoneNumber', phonenumber_field.modelfields.PhoneNumberField(max_length=128, region=None, unique=True)),
|
||||
('slary', models.FloatField(default=0.0)),
|
||||
('manager', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='manager_employee', to='financial.employee')),
|
||||
('primaryAddress', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='primary_address_employee', to='financial.addressmodel')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
('workAddress', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='work_address_employee', to='financial.addressmodel')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TimeCard',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created', models.DateTimeField(default=django.utils.timezone.now)),
|
||||
('last_modified', models.DateTimeField(default=django.utils.timezone.now)),
|
||||
('slug', models.SlugField()),
|
||||
('startDate', models.DateField(default=None, null=True)),
|
||||
('endDate', models.DateField(default=None, null=True)),
|
||||
('approvedDate', models.DateField(default=None, null=True)),
|
||||
('approvalComment', models.TextField(default='', max_length=256)),
|
||||
('approvedBy', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='approved_by', to='financial.employee')),
|
||||
('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='employee', to='financial.employee')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TimeCardCell',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created', models.DateTimeField(default=django.utils.timezone.now)),
|
||||
('last_modified', models.DateTimeField(default=django.utils.timezone.now)),
|
||||
('slug', models.SlugField()),
|
||||
('date', models.DateField(default=None, null=True)),
|
||||
('hour', models.FloatField(default=0.0)),
|
||||
('timeCard', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='financial.timecard')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 5.0 on 2024-02-12 21:27
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('financial', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='contract',
|
||||
name='baseline_end',
|
||||
field=models.DateField(blank=True, default=None, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='contract',
|
||||
name='baseline_start',
|
||||
field=models.DateField(blank=True, default=None, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,19 @@
|
||||
# Generated by Django 5.0 on 2024-02-13 14:02
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('financial', '0002_alter_contract_baseline_end_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='contract',
|
||||
name='linkedContracts',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='financial.contract'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,31 @@
|
||||
# Generated by Django 5.0 on 2024-02-13 14:53
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('financial', '0003_alter_contract_linkedcontracts'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='chargenumber',
|
||||
name='endDate',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='chargenumber',
|
||||
name='startDate',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='chargenumber',
|
||||
name='end_date',
|
||||
field=models.DateField(blank=True, default=None, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='chargenumber',
|
||||
name='start_date',
|
||||
field=models.DateField(blank=True, default=None, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,29 @@
|
||||
# Generated by Django 4.2.17 on 2025-02-10 17:13
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("financial", "0004_remove_chargenumber_enddate_and_more"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddConstraint(
|
||||
model_name="chargenumber",
|
||||
constraint=models.CheckConstraint(
|
||||
check=models.Q(
|
||||
("charge_number_type__in", ["LOE", "QBD", "0_100", "50_50", "MAX"])
|
||||
),
|
||||
name="financial_ChargeNumber_charge_number_type_ChargeNumberTypeEnum",
|
||||
),
|
||||
),
|
||||
migrations.AddConstraint(
|
||||
model_name="contract",
|
||||
constraint=models.CheckConstraint(
|
||||
check=models.Q(("contract_type__in", ["FFP", "MAX"])),
|
||||
name="financial_Contract_contract_type_ContractTypeEnum",
|
||||
),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,105 @@
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
from phonenumber_field.modelfields import PhoneNumberField
|
||||
from django.utils import timezone
|
||||
from django_enum import EnumField
|
||||
from django.utils.text import slugify
|
||||
import datetime
|
||||
|
||||
# Abstract Model Classes
|
||||
class TimeMixin(models.Model):
|
||||
|
||||
created = models.DateTimeField(default=timezone.now)
|
||||
last_modified = models.DateTimeField(default=timezone.now)
|
||||
created_by = models.ForeignKey
|
||||
last_modified_BY = models.ForeignKey
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
class IdMixin(models.Model):
|
||||
slug = models.SlugField()
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self.slug is None:
|
||||
self.slug = slugify(datetime.datetime.now().time())
|
||||
super(IdMixin, self).save(*args, **kwargs)
|
||||
|
||||
# Concrete Classes
|
||||
class Contract(IdMixin, TimeMixin):
|
||||
class ContractTypeEnum(models.TextChoices):
|
||||
FIRM_FIX_PRICED = "FFP", "FIRM_FIX_PRICED"
|
||||
MAX_NUM_CONRACT_TYPES = "MAX", "MAX_NUM_CONTRACT_TYPES"
|
||||
|
||||
contract_type = EnumField(ContractTypeEnum)
|
||||
|
||||
name = models.CharField(max_length=100)
|
||||
proposed_amount = models.FloatField(default=0.0)
|
||||
baseline_amount = models.FloatField(default=0.0)
|
||||
funded_amount = models.FloatField(default=0.0)
|
||||
|
||||
baseline_start = models.DateField(null=True, blank=True, default=None)
|
||||
baseline_end = models.DateField(null=True, blank=True, default=None)
|
||||
linkedContracts = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True)
|
||||
|
||||
# TODO: make calc ev func
|
||||
|
||||
class ChargeNumber(IdMixin, TimeMixin):
|
||||
class ChargeNumberTypeEnum(models.TextChoices):
|
||||
LEVEL_OF_EFFORT = "LOE", "LEVEL_OF_EFFORT"
|
||||
QBD = "QBD", "QBD"
|
||||
ZERO_ONE_HUNDRED = "0_100", "ZERO_ONE_HUNDRED"
|
||||
FIFTY_FIFTY = "50_50", "FIFTY_FIFTY"
|
||||
MAX_NUM_TASK_TYPES = "MAX", "MAX_NUM_TASK_TYPES"
|
||||
|
||||
charge_number_type = EnumField(ChargeNumberTypeEnum)
|
||||
|
||||
contract = models.ForeignKey(Contract, on_delete=models.CASCADE)
|
||||
amount = models.FloatField(default=0.0)
|
||||
percent_complete = models.FloatField(default=0.0)
|
||||
# TODO: add validator to make sure the range is 0.0 - 100
|
||||
start_date = models.DateField(null=True, blank=True, default = None)
|
||||
end_date = models.DateField(null=True, blank=True, default = None)
|
||||
|
||||
class AddressModel(models.Model):
|
||||
address_1 = models.CharField(max_length=128)
|
||||
address_2 = models.CharField(max_length=128, blank=True)
|
||||
|
||||
city = models.CharField(max_length=64)
|
||||
state = models.CharField(max_length=2)
|
||||
zip_code = models.CharField(max_length=5)
|
||||
|
||||
class Employee(IdMixin, TimeMixin):
|
||||
manager = models.ForeignKey("self", on_delete=models.CASCADE, related_name="manager_employee")
|
||||
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
||||
primaryAddress = models.ForeignKey(AddressModel, on_delete=models.CASCADE, related_name="primary_address_employee")
|
||||
workAddress = models.ForeignKey(AddressModel, on_delete=models.CASCADE, related_name="work_address_employee")
|
||||
phoneNumber = PhoneNumberField(null=False, blank=False, unique=True)
|
||||
slary= models.FloatField(default=0.0)
|
||||
|
||||
# TODO: get hourly salary
|
||||
# TODO: roles, jpbTitles
|
||||
|
||||
|
||||
|
||||
class TimeCard(IdMixin, TimeMixin):
|
||||
startDate = models.DateField(null=True, default = None)
|
||||
endDate = models.DateField(null=True, default = None)
|
||||
employee = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name="employee")
|
||||
approvedBy = models.ForeignKey(Employee, on_delete=models.CASCADE, null=True, related_name="approved_by")
|
||||
approvedDate = models.DateField(null=True, default=None)
|
||||
approvalComment = models.TextField(max_length=256, default="")
|
||||
# TODO: do the is approved comment
|
||||
|
||||
class TimeCardCell(IdMixin, TimeMixin):
|
||||
timeCard = models.ForeignKey(TimeCard, on_delete=models.CASCADE)
|
||||
date = models.DateField(null=True, default = None)
|
||||
hour = models.FloatField(default = 0.0)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,360 @@
|
||||
{
|
||||
"version": 3,
|
||||
"file": "dashboard-free.css",
|
||||
"sources": [
|
||||
"../scss/dashboard-free.scss",
|
||||
"../scss/bootstrap/_functions.scss",
|
||||
"../scss/custom/_variables.scss",
|
||||
"../scss//_variables.scss",
|
||||
"../scss//variables/_animations.scss",
|
||||
"../scss//variables/_avatars.scss",
|
||||
"../scss//variables/_cards.scss",
|
||||
"../scss//variables/_dark-version.scss",
|
||||
"../scss//variables/_dropdowns.scss",
|
||||
"../scss//variables/_header.scss",
|
||||
"../scss//variables/_info-areas.scss",
|
||||
"../scss//variables/_navbar.scss",
|
||||
"../scss//variables/_navbar-vertical.scss",
|
||||
"../scss//variables/_utilities.scss",
|
||||
"../scss//variables/_utilities-extend.scss",
|
||||
"../scss//variables/_misc.scss",
|
||||
"../scss//variables/_misc-extend.scss",
|
||||
"../scss//variables/_form-switch.scss",
|
||||
"../scss//variables/_fixed-plugin.scss",
|
||||
"../scss//variables/_pagination.scss",
|
||||
"../scss//variables/_badge.scss",
|
||||
"../scss//variables/_rtl.scss",
|
||||
"../scss//variables/_ripple.scss",
|
||||
"../scss//variables/_cards-extend.scss",
|
||||
"../scss//variables/_choices.scss",
|
||||
"../scss//variables/_timeline.scss",
|
||||
"../scss//variables/_full-calendar.scss",
|
||||
"../scss//variables/_social-buttons.scss",
|
||||
"../scss//variables/_virtual-reality.scss",
|
||||
"../scss//_utilities.scss",
|
||||
"../scss/bootstrap/_functions.scss",
|
||||
"../scss/bootstrap/_variables.scss",
|
||||
"../scss/bootstrap/_maps.scss",
|
||||
"../scss/bootstrap/_utilities.scss",
|
||||
"../scss/bootstrap/bootstrap.scss",
|
||||
"../scss/bootstrap/mixins/_banner.scss",
|
||||
"../scss/bootstrap/_functions.scss",
|
||||
"../scss/bootstrap/_variables.scss",
|
||||
"../scss/bootstrap/_maps.scss",
|
||||
"../scss/bootstrap/_mixins.scss",
|
||||
"../scss/bootstrap/vendor/_rfs.scss",
|
||||
"../scss/bootstrap/mixins/_deprecate.scss",
|
||||
"../scss/bootstrap/mixins/_breakpoints.scss",
|
||||
"../scss/bootstrap/mixins/_color-scheme.scss",
|
||||
"../scss/bootstrap/mixins/_image.scss",
|
||||
"../scss/bootstrap/mixins/_resize.scss",
|
||||
"../scss/bootstrap/mixins/_visually-hidden.scss",
|
||||
"../scss/bootstrap/mixins/_reset-text.scss",
|
||||
"../scss/bootstrap/mixins/_text-truncate.scss",
|
||||
"../scss/bootstrap/mixins/_utilities.scss",
|
||||
"../scss/bootstrap/mixins/_alert.scss",
|
||||
"../scss/bootstrap/mixins/_backdrop.scss",
|
||||
"../scss/bootstrap/mixins/_buttons.scss",
|
||||
"../scss/bootstrap/mixins/_caret.scss",
|
||||
"../scss/bootstrap/mixins/_pagination.scss",
|
||||
"../scss/bootstrap/mixins/_lists.scss",
|
||||
"../scss/bootstrap/mixins/_list-group.scss",
|
||||
"../scss/bootstrap/mixins/_forms.scss",
|
||||
"../scss/bootstrap/mixins/_table-variants.scss",
|
||||
"../scss/bootstrap/mixins/_border-radius.scss",
|
||||
"../scss/bootstrap/mixins/_box-shadow.scss",
|
||||
"../scss/bootstrap/mixins/_gradients.scss",
|
||||
"../scss/bootstrap/mixins/_transition.scss",
|
||||
"../scss/bootstrap/mixins/_clearfix.scss",
|
||||
"../scss/bootstrap/mixins/_container.scss",
|
||||
"../scss/bootstrap/mixins/_grid.scss",
|
||||
"../scss/bootstrap/_utilities.scss",
|
||||
"../scss/bootstrap/_root.scss",
|
||||
"../scss/bootstrap/_reboot.scss",
|
||||
"../scss/bootstrap/_type.scss",
|
||||
"../scss/bootstrap/_images.scss",
|
||||
"../scss/bootstrap/_containers.scss",
|
||||
"../scss/bootstrap/_grid.scss",
|
||||
"../scss/bootstrap/_tables.scss",
|
||||
"../scss/bootstrap/_forms.scss",
|
||||
"../scss/bootstrap/forms/_labels.scss",
|
||||
"../scss/bootstrap/forms/_form-text.scss",
|
||||
"../scss/bootstrap/forms/_form-control.scss",
|
||||
"../scss/bootstrap/forms/_form-select.scss",
|
||||
"../scss/bootstrap/forms/_form-check.scss",
|
||||
"../scss/bootstrap/forms/_form-range.scss",
|
||||
"../scss/bootstrap/forms/_floating-labels.scss",
|
||||
"../scss/bootstrap/forms/_input-group.scss",
|
||||
"../scss/bootstrap/forms/_validation.scss",
|
||||
"../scss/bootstrap/_buttons.scss",
|
||||
"../scss/bootstrap/_transitions.scss",
|
||||
"../scss/bootstrap/_dropdown.scss",
|
||||
"../scss/bootstrap/_button-group.scss",
|
||||
"../scss/bootstrap/_nav.scss",
|
||||
"../scss/bootstrap/_navbar.scss",
|
||||
"../scss/bootstrap/_card.scss",
|
||||
"../scss/bootstrap/_accordion.scss",
|
||||
"../scss/bootstrap/_breadcrumb.scss",
|
||||
"../scss/bootstrap/_pagination.scss",
|
||||
"../scss/bootstrap/_badge.scss",
|
||||
"../scss/bootstrap/_alert.scss",
|
||||
"../scss/bootstrap/_progress.scss",
|
||||
"../scss/bootstrap/_list-group.scss",
|
||||
"../scss/bootstrap/_close.scss",
|
||||
"../scss/bootstrap/_toasts.scss",
|
||||
"../scss/bootstrap/_modal.scss",
|
||||
"../scss/bootstrap/_tooltip.scss",
|
||||
"../scss/bootstrap/_popover.scss",
|
||||
"../scss/bootstrap/_carousel.scss",
|
||||
"../scss/bootstrap/_spinners.scss",
|
||||
"../scss/bootstrap/_offcanvas.scss",
|
||||
"../scss/bootstrap/_placeholders.scss",
|
||||
"../scss/bootstrap/_helpers.scss",
|
||||
"../scss/bootstrap/helpers/_clearfix.scss",
|
||||
"../scss/bootstrap/helpers/_color-bg.scss",
|
||||
"../scss/bootstrap/helpers/_colored-links.scss",
|
||||
"../scss/bootstrap/helpers/_ratio.scss",
|
||||
"../scss/bootstrap/helpers/_position.scss",
|
||||
"../scss/bootstrap/helpers/_stacks.scss",
|
||||
"../scss/bootstrap/helpers/_visually-hidden.scss",
|
||||
"../scss/bootstrap/helpers/_stretched-link.scss",
|
||||
"../scss/bootstrap/helpers/_text-truncation.scss",
|
||||
"../scss/bootstrap/helpers/_vr.scss",
|
||||
"../scss/bootstrap/utilities/_api.scss",
|
||||
"../scss//theme.scss",
|
||||
"../scss//variables/_navbar-vertical.scss",
|
||||
"../scss//variables/_social-buttons.scss",
|
||||
"../scss//variables/_breadcrumb.scss",
|
||||
"../scss//mixins/mixins.scss",
|
||||
"../scss//mixins/_badge.scss",
|
||||
"../scss//mixins/_buttons.scss",
|
||||
"../scss//mixins/_hover.scss",
|
||||
"../scss//mixins/_colored-shadows.scss",
|
||||
"../scss//mixins/_social-buttons.scss",
|
||||
"../scss//mixins/_vendor.scss",
|
||||
"../scss//_alert.scss",
|
||||
"../scss//_avatars.scss",
|
||||
"../scss//_badge.scss",
|
||||
"../scss//_buttons.scss",
|
||||
"../scss//_breadcrumbs.scss",
|
||||
"../scss//_cards.scss",
|
||||
"../scss//cards/card-background.scss",
|
||||
"../scss//cards/card-rotate.scss",
|
||||
"../scss//_dark-version.scss",
|
||||
"../scss//_dropdown.scss",
|
||||
"../scss//_dropup.scss",
|
||||
"../scss//_header.scss",
|
||||
"../scss//_fixed-plugin.scss",
|
||||
"../scss//forms/_forms.scss",
|
||||
"../scss//forms/_input-group.scss",
|
||||
"../scss//forms/_form-check.scss",
|
||||
"../scss//forms/_form-switch.scss",
|
||||
"../scss//forms/_form-select.scss",
|
||||
"../scss//forms/_labels.scss",
|
||||
"../scss//forms/_inputs.scss",
|
||||
"../scss//_footer.scss",
|
||||
"../scss//_gradients.scss",
|
||||
"../scss//_icons.scss",
|
||||
"../scss//_info-areas.scss",
|
||||
"../scss//_misc.scss",
|
||||
"../scss//_navbar.scss",
|
||||
"../scss//_navbar-vertical.scss",
|
||||
"../scss//_nav.scss",
|
||||
"../scss//_pagination.scss",
|
||||
"../scss//_popovers.scss",
|
||||
"../scss//_progress.scss",
|
||||
"../scss//_rtl.scss",
|
||||
"../scss//_ripple.scss",
|
||||
"../scss//_social-buttons.scss",
|
||||
"../scss//_tables.scss",
|
||||
"../scss//_timeline.scss",
|
||||
"../scss//_tilt.scss",
|
||||
"../scss//_tooltips.scss",
|
||||
"../scss//_typography.scss",
|
||||
"../scss//plugins/free/plugins.scss",
|
||||
"../scss//plugins/free/_flatpickr.scss",
|
||||
"../scss//plugins/free/_nouislider.scss",
|
||||
"../scss//plugins/free/_prism.scss",
|
||||
"../scss//plugins/free/_perfect-scrollbar.scss",
|
||||
"../scss/custom/_styles.scss"
|
||||
],
|
||||
"sourcesContent": [
|
||||
"// =========================================================\n// * Material Dashboard 2 - v3.1.0\n// =========================================================\n\n// * Product Page: https://www.creative-tim.com/product/material-dashboard\n// * Copyright 2023 Creative Tim (https://www.creative-tim.com)\n\n// Coded by www.creative-tim.com\n\n// =========================================================\n\n// * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\n// Bootstrap Functions\n@import \"bootstrap/functions\";\n\n// Custom Variables\n@import \"custom/variables\";\n\n// Theme Variables\n@import \"/variables\";\n\n// Bootstrap Core\n@import \"bootstrap/bootstrap\";\n\n// Theme Core\n@import \"/theme\";\n\n// Custom Variables\n@import \"custom/styles\";\n",
|
||||
"// Bootstrap functions\n//\n// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null or unit($num) == \"%\" or unit($prev-num) == \"%\" {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Used to ensure the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map, $map-name: \"$grid-breakpoints\") {\n @if length($map) > 0 {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.\";\n }\n }\n}\n\n// Colors\n@function to-rgb($value) {\n @return red($value), green($value), blue($value);\n}\n\n// stylelint-disable scss/dollar-variable-pattern\n@function rgba-css-var($identifier, $target) {\n @if $identifier == \"body\" and $target == \"bg\" {\n @return rgba(var(--#{$prefix}#{$identifier}-bg-rgb), var(--#{$prefix}#{$target}-opacity));\n } @if $identifier == \"body\" and $target == \"text\" {\n @return rgba(var(--#{$prefix}#{$identifier}-color-rgb), var(--#{$prefix}#{$target}-opacity));\n } @else {\n @return rgba(var(--#{$prefix}#{$identifier}-rgb), var(--#{$prefix}#{$target}-opacity));\n }\n}\n\n@function map-loop($map, $func, $args...) {\n $_map: ();\n\n @each $key, $value in $map {\n // allow to pass the $key and $value of the map as an function argument\n $_args: ();\n @each $arg in $args {\n $_args: append($_args, if($arg == \"$key\", $key, if($arg == \"$value\", $value, $arg)));\n }\n\n $_map: map-merge($_map, ($key: call(get-function($func), $_args...)));\n }\n\n @return $_map;\n}\n// stylelint-enable scss/dollar-variable-pattern\n\n@function varify($list) {\n $result: null;\n @each $entry in $list {\n $result: append($result, var(--#{$prefix}#{$entry}), space);\n }\n @return $result;\n}\n\n// Internal Bootstrap function to turn maps into its negative variant.\n// It prefixes the keys with `n` and makes the value negative.\n@function negativify-map($map) {\n $result: ();\n @each $key, $value in $map {\n @if $key != 0 {\n $result: map-merge($result, (\"n\" + $key: (-$value)));\n }\n }\n @return $result;\n}\n\n// Get multiple keys from a sass map\n@function map-get-multiple($map, $values) {\n $result: ();\n @each $key, $value in $map {\n @if (index($values, $key) != null) {\n $result: map-merge($result, ($key: $value));\n }\n }\n @return $result;\n}\n\n// Merge multiple maps\n@function map-merge-multiple($maps...) {\n $merged-maps: ();\n\n @each $map in $maps {\n $merged-maps: map-merge($merged-maps, $map);\n }\n @return $merged-maps;\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Kitty Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// See https://codepen.io/kevinweber/pen/dXWoRw\n//\n// Requires the use of quotes around data URIs.\n\n@function escape-svg($string) {\n @if str-index($string, \"data:image/svg+xml\") {\n @each $char, $encoded in $escaped-characters {\n // Do not escape the url brackets\n @if str-index($string, \"url(\") == 1 {\n $string: url(\"#{str-replace(str-slice($string, 6, -3), $char, $encoded)}\");\n } @else {\n $string: str-replace($string, $char, $encoded);\n }\n }\n }\n\n @return $string;\n}\n\n// Color contrast\n// See https://github.com/twbs/bootstrap/pull/30168\n\n// A list of pre-calculated numbers of pow(divide((divide($value, 255) + .055), 1.055), 2.4). (from 0 to 255)\n// stylelint-disable-next-line scss/dollar-variable-default, scss/dollar-variable-pattern\n$_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003 .0033 .0037 .004 .00Line truncated
|
||||
"",
|
||||
"// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n$soft-background-color: #ffffff !default; // Testing\n$font-color: #7b809a !default;\n$h-color: #344767 !default;\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #f0f2f5 !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n// fusv-enable\n\n$blue: #63B3ED !default;\n$indigo: #596CFF !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #F56565 !default;\n$rose: #e91e63 !default;\n$orange: #fd7e14 !default;\n$yellow: #FBD38D !default;\n$green: #81E6D9 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800,\n) !default;\n// scss-docs-end colors-map\n\n$primary: #e91e63 !default;\n$secondary: #7b809a !default;\n$info: #1A73E8 !default;\n$success: #4CAF50 !default;\n$warning: #fb8c00 !default;\n$danger: #F44335 !default;\n$light: $gray-200 !default;\n$dark: $h-color !default;\n$dark-blue: #1A237E !default;\n\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark,\n \"white\": $white,\n \"dark-blue\": $dark-blue,\n) !default;\n// scss-docs-end theme-colors-map\n\n\n// Gradient colors\n$primary-gradient: #EC407A !default;\n$primary-gradient-state: #D81B60 !default;\n\n$secondary-gradient: #747b8a !default;\n$secondary-gradient-state: #495361 !default;\n\n$info-gradient: #49a3f1 !default;\n$info-gradient-state: #1A73E8 !default;\n\n$success-gradient: #66BB6A !default;\n$success-gradient-state: #43A047 !default;\n\n$danger-gradient: #EF5350 !default;\n$danger-gradient-state: #E53935 !default;\n\n$warning-gradient: #FFA726 !default;\n$warning-gradient-state: #FB8C00 !default;\n\n$dark-gradient: #42424a !default;\n$dark-gradient-state: #191919 !default;\n\n$light-gradient: #EBEFF4 !default;\n$light-gradient-state: #CED4DA !default;\n\n$dark-gradient-dark: #323a54 !default;\n$dark-gradient-state-dark: #1a2035 !default;\n\n// Gradient Colors map\n$theme-gradient-colors: (\n \"primary\": ($primary-gradient, $primary-gradient-state),\n \"secondary\": ($secondary-gradient, $secondary-gradient-state),\n \"success\": ($success-gradient, $success-gradient-state),\n \"info\": ($info-gradient, $info-gradient-state),\n \"warning\": ($warning-gradient, $warning-gradient-state),\n \"danger\": ($danger-gradient, $danger-gradient-state),\n \"light\": ($light-gradient, $light-gradient-state),\n \"dark\": ($dark-gradient, $dark-gradient-state)\n) !default;\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 8) !default;\n$blue-200: tint-color($blue, 6) !default;\n$blue-300: tint-color($blue, 4) !default;\n$blue-400: tint-color($blue, 2) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 2) !default;\n$blue-700: shade-color($blue, 4) !default;\n$blue-800: shade-color($blue, 6) !default;\n$blue-900: shade-color($blue, 8) !default;\n\n$indigo-100: tint-color($indigo, 8) !default;\n$indigo-200: tint-color($indigo, 6) !default;\n$indigo-300: tint-color($indigo, 4) !default;\n$indigo-400: tint-color($indigo, 2) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 2) !default;\n$indigo-700: shade-color($indigo, 4) !default;\n$indigo-800: shade-color($indigo, 6) !default;\n$indigo-900: shade-color($iLine truncated
|
||||
"// Waves Animation & Styling\n\n$waves-position: relative !default;\n$waves-width: 100% !default;\n$waves-height: 16vh !default;\n$waves-min-height: 100px !default;\n$waves-max-height: 150px !default;\n$waves-margin-bottom: -7px !default;\n$waves-height-sm: 50px !default;\n$waves-min-height-sm: $waves-height-sm !default;\n$waves-rotate: rotate(180deg) !default;\n$waves-mobile-height: 40px !default;\n\n$moving-waves-keyframe-0: translate3d(-90px,0,0) !default;\n$moving-waves-keyframe-100: translate3d(85px,0,0) !default;\n$moving-waves-animation: move-forever 40s cubic-bezier(.55,.5,.45,.5) infinite !default;\n$moving-waves-child-1-delay: -2s !default;\n$moving-waves-child-1-duration: 11s !default;\n$moving-waves-child-2-delay: -4s !default;\n$moving-waves-child-2-duration: 13s !default;\n$moving-waves-child-3-delay: -3s !default;\n$moving-waves-child-3-duration: 15s !default;\n$moving-waves-child-4-delay: -4s !default;\n$moving-waves-child-4-duration: 20s !default;\n$moving-waves-child-5-delay: -4s !default;\n$moving-waves-child-5-duration: 25s !default;\n$moving-waves-child-6-delay: -3s !default;\n$moving-waves-child-6-duration: 30s !default;\n\n// Fade In\n\n$fade-in-animation-name: fadeInBottom !default;\n$fade-in-animation-top-name: fadeInTop !default;\n$fade-in-bottom-transform: translateY(100%) !default;\n$fade-in-top-transform: translateY(-100%) !default;\n\n\n$fade-in-1-animation-duration: 1.5s !default;\n$fade-in-2-animation-duration: 1.75s !default;\n$fade-in-3-animation-duration: 2s !default;\n$fade-in-4-animation-duration: 2.25s !default;\n$fade-in-5-animation-duration: 2.5s !default;\n\n\n$floating-man-width: 350px !default;\n",
|
||||
"// Avatar\n$avatar-height: 48px !default;\n$avatar-width: 48px !default;\n\n$avatar-xs-height: 24px !default;\n$avatar-xs-width: 24px !default;\n\n$avatar-sm-height: 36px !default;\n$avatar-sm-width: 36px !default;\n\n$avatar-lg-height: 58px !default;\n$avatar-lg-width: 58px !default;\n\n$avatar-xl-height: 74px !default;\n$avatar-xl-width: 74px !default;\n\n$avatar-xxl-height: 110px !default;\n$avatar-xxl-width: 110px !default;\n\n$avatar-font-size: 1rem !default;\n$avatar-content-margin: .75rem !default;\n\n\n// Avatar Group\n$avatar-group-border: 2px !default;\n$avatar-group-zindex: 2 !default;\n$avatar-group-zindex-hover: 3 !default;\n$avatar-group-double: -1rem !default;\n",
|
||||
"$card-box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1),\n 0 2px 4px -1px rgba(0,0,0,0.06) !default;\n$card-background-blur: rgba(255, 255, 255, 0.8) !default;\n\n$card-header-padding: 1.5rem !default;\n\n$card-body-padding: $card-header-padding !default;\n$card-plain-bg-color: transparent !default;\n$card-plain-box-shadow: none !default;\n\n$card-footer-padding: $card-body-padding !default;\n\n$card-title-font-weight: $font-weight-bold !default;\n$card-title-line-height: 1.2 !default;\n\n$card-author-display: flex !default;\n$card-author-name-line-height: 1.571 !default;\n$card-author-name-color: #3A416F !default;\n$card-author-stats-color: #5D6494 !default;\n$card-avatar-width: 30px !default;\n$card-avatar-height: $card-avatar-width !default;\n$card-avatar-overflow: hidden !default;\n$card-avatar-radius: 50% !default;\n$card-avatar-mr: 5px !default;\n$card-stats-name-mt: -4px !default;\n$card-name-ml: .25rem !default;\n\n$card-badge-text-transform: uppercase !default;\n$card-badge-bg-color: #FAFAFF !default;\n\n\n// Card Background\n$card-bg-align-items: center !default;\n$card-bg-body-position: relative !default;\n$card-bg-body-z-index: 2 !default;\n$card-bg-content-min-height: 330px !default;\n$card-bg-content-max-width: 450px !default;\n$card-bg-content-pt: 60px !default;\n$card-bg-content-pb: $card-bg-content-pt !default;\n$card-bg-body-left-width: 90% !default;\n\n$card-bg-description-margin: 24px !default;\n\n$card-bg-filter-position: absolute !default;\n$card-bg-filter-top: 0 !default;\n$card-bg-filter-bottom: $card-bg-filter-top !default;\n$card-bg-filter-left: $card-bg-filter-top !default;\n$card-bg-filter-height: 100% !default;\n$card-bg-filter-width: $card-bg-filter-height !default;\n$card-bg-filter-z-index: 1 !default;\n$card-bg-filter-display: block !default;\n$card-bg-filter-content: \"\" !default;\n$card-bg-filter-bg: rgba(0,0,0,.56) !default;\n$card-bg-filter-mask-bg: rgba(0,0,0,.2) !default;\n$card-bg-filter-radius: 1rem !default;\n\n$card-full-bg-bg-position: 50% !default;\n$card-full-bg-bg-size: cover !default;\n$card-full-bg-mb: 30px !default;\n$card-full-bg-width: 100% !default;\n$card-full-bg-height: $card-full-bg-width !default;\n$card-full-bg-position: absolute !default;\n$card-full-bg-radius: $card-bg-filter-radius !default;\n\n$header-data-animation-transition: all 300ms cubic-bezier(0.34, 1.61, 0.7, 1) !default;\n",
|
||||
"$dark-version-body-color: rgba(255, 255, 255, .8) !default;\n$dark-version-bg-color: #1a2035 !default;\n$dark-version-sidenav-bg-color: #1f283e !default;\n$dark-version-card-bg-color: #202940 !default;\n$dark-version-card-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .20), 0 1px 5px 0 rgba(0, 0, 0, .12) !default;\n$dark-version-input-bg-image: linear-gradient(0deg, #e91e63 2px, rgba(156, 39, 176, 0) 0), linear-gradient(0deg, rgba(210, 210, 210, .6) 1px, rgba(209, 209, 209, 0) 0) !default;\n$dark-version-border-color: rgba(255, 255, 255, .4) !default;\n$dark-version-table-color: rgba(255, 255, 255, .6) !default;\n$dark-version-caret-sidebar-color: rgba(206, 212, 218, .7) !default;\n",
|
||||
"$dropdown-subitem-position: 101% !default;\n$dropdown-transition: transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1) !important !default;\n$dropdown-transform-origin: 0 0 !default;\n$dropdown-transform: scale(.95) !important !default;\n$dropdown-transform-show: scale(1) !important !default;\n\n$dropdown-multilevel-transform: scale(.95) !important !default;\n$dropdown-multilevel-transform-show: scale(1) !important !default;\n\n$dropup-transform-origin: bottom !default;\n$dropup-transform: scale(.95) !important !default;\n$dropup-transform-show: scale(1) !important !default;\n\n$dropdown-icon-margin-right: .75rem !default;\n\n$dropdown-toggle-arrow-transform: rotate(180deg) !default;\n$dropdown-toggle-arrow-transition: .3s ease !default;\n\n$dropdown-button-after-margin-top: 3px !default;\n\n$dropdown-animation-arrow-left-position: 28px !default;\n$dropup-animation-arrow-bottom-position: 22px !default;\n$dropdown-animation-arrow-font-size: 22px !default;\n$dropup-animation-arrow-transition: bottom .35s ease !default;\n$dropdown-animation-arrow-transition: top .35s ease !default;\n$dropup-mb: .5rem !default;\n\n$dropdown-mt: 2.8125rem !default;\n$dropdown-hover-after-bottom-pos: -24px !default;\n$dropdown-hover-after-bottom-pos: -24px !default;\n$dropdown-hover-arrow-active-top: -20px !default;\n\n$dropdown-subitem-position-right: -197px !default;\n$dropdown-subitem-left-hover: -8px !default;\n$dropdown-subitem-arrow-rotate: rotate(-90deg) !default;\n\n$dropdown-md-min-width: 15rem !default;\n$dropdown-lg-min-width: 23rem !default;\n$dropdown-lg-width-responsive: 19rem !default;\n$dropdown-xl-min-width: 40rem !default;\n\n$dropdown-subitem-position: 101% !default;\n\n\n// Extend\n$dropdown-subitem-position-right: -197px !default;\n$dropdown-subitem-left-hover: -8px !default;\n$dropdown-subitem-arrow-rotate: rotate(-90deg) !default;\n\n$dropdown-md-min-width: 15rem !default;\n$dropdown-lg-min-width: 23rem !default;\n$dropdown-lg-width-responsive: 19rem !default;\n$dropdown-xl-min-width: 40rem !default;\n",
|
||||
"$page-header-padding: 0 !default;\n$page-header-position: relative !default;\n$page-header-overflow: hidden !default;\n$page-header-display: flex !default;\n$page-header-align-items: center !default;\n$page-header-bg-size: cover !default;\n$page-header-bg-position: 50% !default;\n\n$mask-position: absolute !default;\n$mask-bg-size: cover !default;\n$mask-bg-position: center center !default;\n$mask-top: 0 !default;\n$mask-left: $mask-top !default;\n$mask-width: 100% !default;\n$mask-height: $mask-width !default;\n$mask-opacity: .8 !default;\n\n$page-header-conteiner-index: 1 !default;\n\n$header-video-top: 50% !default;\n$header-video-left: $header-video-top !default;\n$header-video-min-width: 100% !default;\n$header-video-min-height: $header-video-min-width !default;\n$header-video-min-transform: translateX(-50%) translateY(-50%) !default;\n",
|
||||
"$icon-shape-bg-image: linear-gradient(195deg,#7928CA,#FF0080) !default;\n$icon-shape-bg-position: center !default;\n\n$icon-striped-bg-md: 85px !default;\n$icon-striped-bg-lg: 111px !default;\n$icon-striped-bg-xl: 80px !default;\n\n$icon-striped-icon-mt: 25% !default;\n$icon-striped-icon-ml: -24% !default;\n\n$icon-shape-icon-opacity: .8 !default;\n$info-icon-top: 11px !default;\n$info-icon-top-xxs: 0 !default;\n$info-icon-top-xs: -1px !default;\n$info-icon-top-sm: 4px !default;\n$info-icon-top-md: 30% !default;\n$info-icon-top-lg: 31% !default;\n$info-icon-top-xl: 35% !default;\n$info-icon-position: relative !default;\n\n$icon-xxs-width: 20px !default;\n$icon-xxs-height: $icon-xxs-width !default;\n$icon-xs-width: 24px !default;\n$icon-xs-height: $icon-xs-width !default;\n$icon-sm-width: 32px !default;\n$icon-sm-height: $icon-sm-width !default;\n$icon-md-width: 48px !default;\n$icon-md-height: $icon-md-width !default;\n$icon-lg-width: 64px !default;\n$icon-lg-height: $icon-lg-width !default;\n$icon-xl-width: 100px !default;\n$icon-xl-height: $icon-xl-width !default;\n",
|
||||
"// Navbar toggler icon on responsive styling\n\n$navbar-toggler-bar-display: block !default;\n$navbar-toggler-bar-position: relative !default;\n$navbar-toggler-bar-width: 22px !default;\n$navbar-toggler-bar-height: 1px !default;\n$navbar-toggler-bar-radius: 1px !default;\n$navbar-toggler-bar-transition: all 0.2s !default;\n$navbar-toggler-bar-margin-top: 7px !default;\n\n$navbar-toggler-bar-1-transform: rotate(45deg) !default;\n$navbar-toggler-bar-1-transform-origin: 10% 10% !default;\n$navbar-toggler-bar-1-margin-top: 4px !default;\n$navbar-toggler-bar-2-opacity: 0 !default;\n$navbar-toggler-bar-3-transform: rotate(-45deg) !default;\n$navbar-toggler-bar-3-transform-origin: 10% 90% !default;\n$navbar-toggler-bar-3-margin-top: 3px !default;\n",
|
||||
"$navbar-light-bg: #FBFBFB !default;\n$navbar-light-hover-bg: darken($gray-100, 5%) !default;\n$navbar-light-active-bg: darken($gray-100, 5%) !default;\n$navbar-light-border-color: rgba($black, .05) !default;\n$navbar-light-color: rgba($black, .6) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-border-color: transparent !default;\n// Vertical navbar\n$sidenav-header-width: 4.875rem !default;\n$sidenav-card-opacity: .65 !default;\n$navbar-vertical-box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15) !default;\n$navbar-vertical-border-color: rgba($black, .05) !default;\n$navbar-vertical-width: 3.875rem !default;\n$navbar-vertical-open-width: 15.625rem !default;\n$navbar-vertical-padding-x: 1rem !default;\n$navbar-vertical-nav-link-padding-x: 1rem !default;\n$navbar-vertical-nav-link-padding-y: .75rem !default;\n$navbar-vertical-sidenav-normal-ml: 4.01rem !default;\n$navbar-vertical-m: 1rem !default;\n$navbar-vertical-inner: calc(100vh - 200px) !default;\n$navbar-icon-min-width: 1.8rem !default;\n$navbar-icon-margin-left: 0.15rem !default;\n$navbar-icon-material-margin-left: 2px !default;\n$navbar-breadcrumb-padding-y: $nav-link-padding-y !default;\n$navbar-breadcrumb-padding-x: 0 !default;\n$navbar-light-border-color: $border-color !default;\n$navbar-dark-bg: transparent !default;\n$navbar-dark-hover-bg: rgba(255, 255, 255, .1) !default;\n$navbar-dark-active-bg: rgba(255, 255, 255, .1) !default;\n$navbar-dark-border-color: rgba(255, 255, 255, .1) !default;\n$navbar-dark-color: rgba($white, .95) !default;\n$navbar-dark-hover-color: rgba($white, .65) !default;\n$navbar-dark-active-color: rgba($white, .65) !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-border-color: transparent !default;\n$navbar-padding-y: 1rem !default;\n$navbar-padding-x: 1rem !default;\n$navbar-nav-link-padding-x: 1rem !default;\n$navbar-nav-link-padding-y: 1rem !default;\n$navbar-nav-link-font-size: .875rem !default;\n$navbar-nav-link-font-weight: 300 !default;\n$navbar-nav-link-text-transform: normal !default;\n$navbar-nav-link-letter-spacing: 0 !default;\n$navbar-nav-link-border-radius: $border-radius-md !default;\n$font-size-xs: ($font-size-base * .75);\n$transition-base-time: .25s;\n$transition-cubic-bezier: all $transition-base-time cubic-bezier(.68, -0.55, .265, 1.55) !default;\n\n// Navbar collapse\n\n$navbar-vertical-collapse-margin-left: 1.35rem !default;\n$navbar-vertical-collapse-left: -18px !default;\n$navbar-vertical-collapse-top: 50% !default;\n$navbar-vertical-collapse-translate: translate(0,-50%) !default;\n$navbar-vertical-hidden-width: 6rem !default;\n\n// Hover effect\n$navbar-vertical-hover-bg-color: rgba(199, 199, 199, 0.2) !default;\n\n// RTL Page\n\n$rtl-sidebar-bullet-right: -1.125rem !default;\n$rtl-sidebar-hover-padding-right: 2.5rem !default;\n",
|
||||
"// on hover transition variables\n$move-transition: .2s ease-out !default;\n$move-overflow: hidden !default;\n$move-transform: perspective(999px) rotateX(0deg) translate3d(0,0,0) !default;\n$move-transform-origin: 50% 0 !default;\n$move-backface-visibility: hidden !default;\n$move-will-change: transform,box-shadow !default;\n$move-hover-transform: perspective(999px) rotateX(7deg) translate3d(0px,-4px,5px) !default;\n\n// Sections Height Utilities\n$section-height-25-min-height: 25vh !default;\n$section-height-35-min-height: 35vh !default;\n$section-height-45-min-height: 45vh !default;\n$section-height-50-min-height: 50vh !default;\n$section-height-55-min-height: 55vh !default;\n$section-height-65-min-height: 65vh !default;\n$section-height-70-min-height: 70vh !default;\n$section-height-75-min-height: 75vh !default;\n$section-height-80-min-height: 80vh !default;\n$section-height-85-min-height: 85vh !default;\n$section-height-90-min-height: 90vh !default;\n$section-height-95-min-height: 95vh !default;\n$section-height-100-min-height: 100vh !default;\n\n// extra padding utilities variables - CT\n$padding-6: 4rem !default;\n$padding-7: 6rem !default;\n$padding-8: 8rem !default;\n$padding-9: 10rem !default;\n$padding-10: 12rem !default;\n$padding-11: 14rem !default;\n$padding-12: 16rem !default;\n\n// extra margins utilities variables - CT\n$margin-6: 4rem !default;\n$margin-7: 6rem !default;\n$margin-8: 8rem !default;\n$margin-9: 10rem !default;\n$margin-10: 12rem !default;\n$margin-11: 14rem !default;\n$margin-12: 16rem !default;\n\n// extra width values variables - CT\n$width-0: 0% !default;\n$width-1: 1% !default;\n$width-2: 2% !default;\n$width-3: 3% !default;\n$width-4: 4% !default;\n$width-5: 5% !default;\n$width-6: 6% !default;\n$width-7: 7% !default;\n$width-8: 8% !default;\n$width-9: 9% !default;\n$width-10: 10% !default;\n$width-15: 15% !default;\n$width-20: 20% !default;\n$width-25: 25% !default;\n$width-30: 30% !default;\n$width-35: 35% !default;\n$width-40: 40% !default;\n$width-45: 45% !default;\n$width-50: 50% !default;\n$width-55: 55% !default;\n$width-60: 60% !default;\n$width-65: 65% !default;\n$width-70: 70% !default;\n$width-75: 75% !default;\n$width-80: 80% !default;\n$width-85: 85% !default;\n$width-90: 90% !default;\n$width-95: 95% !default;\n$width-100: 100% !default;\n\n// extra max width values variables - CT\n$max-width-100: 100px !default;\n$max-width-200: 200px !default;\n$max-width-300: 300px !default;\n$max-width-400: 400px !default;\n$max-width-500: 500px !default;\n\n// extra height values variables - CT\n$height-100: 100px !default;\n$height-200: 200px !default;\n$height-300: 300px !default;\n$height-400: 400px !default;\n$height-500: 500px !default;\n$height-600: 600px !default;\n\n\n// extra min height values variables - CT\n$min-height-100: 100px !default;\n$min-height-130: 130px !default;\n$min-height-140: 140px !default;\n$min-height-150: 150px !default;\n$min-height-160: 160px !default;\n$min-height-200: 200px !default;\n$min-height-250: 250px !default;\n$min-height-300: 300px !default;\n$min-height-400: 400px !default;\n$min-height-500: 500px !default;\n$min-height-600: 600px !default;\n\n// extra min height values variables - CT\n$max-height-100: 100px !default;\n$max-height-130: 130px !default;\n$max-height-140: 140px !default;\n$max-height-150: 150px !default;\n$max-height-160: 160px !default;\n$max-height-200: 200px !default;\n$max-height-250: 250px !default;\n$max-height-300: Line truncated
|
||||
"// Colores Shadow on cards\n$colored-shadow-top: 3.5% !default;\n$colored-shadow-blur: 12px !default;\n$colored-shadow-scale: .94 !default;\n$colored-shadow-scale-avatar: .87 !default;\n\n// Card Projects\n$card-project-transition: .4s cubic-bezier(.215,.61,.355,1) !default;\n$card-project-avatar-transform: scale(.8) translateY(-45px) !default;\n$card-project-hover-transform: translateY(-2px) !default;\n\n// Transform Perspective effect\n$transform-perspective: scale(1) perspective(1040px) rotateY(-11deg) rotateX(2deg) rotate(2deg) !default;\n$transform-perspective-inverse: scale(1) perspective(1040px) rotateY(11deg) rotateX(-2deg) rotate(-2deg) !default;\n\n// Z index\n$z-index2: 2 !default;\n\n// Width in PX\n$width-32-px: 32px !default;\n$width-48-px: 48px !default;\n$width-64-px: 64px !default;\n\n// Wizard variants\n$multistep-progress-primary-color: #f48aaa !default;\n$multistep-progress-success-color: #9ed1a0 !default;\n$multistep-progress-danger-color: #f79592 !default;\n$multistep-progress-warning-color: #ffc483 !default;\n$multistep-progress-info-color: #88d9e4 !default;\n$multistep-progress-dark-color: #848486 !default;\n$multistep-progress-secondary-color: #a4a9b2 !default;\n$multistep-progress-light-color: #ebeef1 !default;\n",
|
||||
"// Horizontal Faded Line\n$hr-bg: transparent !default;\n$hr-transform: rotate(90deg) !default;\n$hr-bg-image: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1), rgba(255, 255, 255, 0)) !default;\n$hr-bg-dark-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, .4), rgba(0, 0, 0, 0)) !default;\n\n\n// Gradient Animation\n$gradient-animation-background: linear-gradient(-45deg, $info-gradient, $danger, $warning, $primary-gradient, $dark) !default;\n$gradient-animation-bg-size: 400% 400% !default;\n\n// Device Wrapper\n$device-wrapper-radius: 3.5rem !default;\n$device-wrapper-box-shadow: 0 12px 15px rgba(140, 152, 164, 0.1) !default;\n$device-wrapper-animation: gradient 10s ease infinite !default;\n\n\n// Nav pills\n$nav-pills-link-border-radius: 0.5rem !default;\n$nav-pills-link-box-shadow: 0px 1px 5px 1px #ddd !default;\n$nav-pills-link-active-padding: 7px 15px !default;\n$nav-pills-link-active-margin: 1px !default;\n$nav-pills-link-active-animation: .2s ease !default;\n\n// Table Progress\n\n$table-progress-width: 120px !default;\n$table-progress-height: 3px !default;\n$table-progress-margin: 0 !default;\n\n// Tooltip Arrow\n\n$tooltip-arrow-left: 1px !default;\n$tooltip-arrow-right: $tooltip-arrow-left !default;\n\n// Footer Link hover animation\n\n$footer-link-animation: opacity .3 ease !default;\n\n// Blur background\n\n$blur-light-background: rgba(255, 255, 255, 0.4) !default;\n$blur-dark-background: rgba(0, 0, 0, 0.3) !default;\n\n// HR w/ opacity\n\n$hr-bg-color: transparent !default;\n$hr-width: 1px !default;\n$hr-margin: .75rem 0 !default;\n$hr-horizontal-bg-image-gray-light: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, .1), rgba(0, 0, 0, 0)) !default;\n$hr-bg-color-light: linear-gradient(90deg,hsla(0,0%,100%,0),#fff,hsla(0,0%,100%,0)) !default;\n$hr-bg-color-dark: linear-gradient(90deg,transparent,rgba(0,0,0,.4),transparent) !default;\n\n// border right - pseudo\n\n$border-right-after-top: 3vh !default;\n$border-right-after-height: 70% !default;\n$border-right-after-width: 50% !default;\n$border-right-after-border-color: #dee2e6 !default;\n",
|
||||
"// Text Border\n$text-border-bg-color: rgba($secondary,.5) !default;\n$text-border-bg-color-before: linear-gradient(90deg,transparent,rgba(117,117,117,.4),rgba(117,117,117,.4)) !default;\n$text-border-bg-color-after: linear-gradient(90deg,rgba(117,117,117,.4),rgba(117,117,117,.4),transparent) !default;\n$text-border-display: inline-block !default;\n$text-border-width: 30% !default;\n$text-border-height: 1px !default;\n$text-border-position: relative !default;\n$text-border-vertical-align: middle !default;\n$text-border-before-right: .5em !default;\n$text-border-before-ml: -50% !default;\n$text-border-after-left: $text-border-before-right !default;\n$text-border-after-mr: $text-border-before-ml !default;\n\n\n// Header Shapes\n\n$shape-1-width: 55% !default;\n$shape-1-left: 15% !default;\n$shape-2-width: 35% !default;\n$shape-2-left: 20% !default;\n$shape-3-width: 50% !default;\n$shape-3-left: -28rem !default;\n\n$shape-img-1-right: 7% !default;\n$shape-img-1-width: 36% !default;\n$shape-img-1-margin-top: 12% !default;\n\n$shape-img-2-left: 24% !default;\n$shape-img-2-width: 27% !default;\n$shape-img-2-margin-top: 10% !default;\n\n// Comming Soon page\n\n$coming-rotate-transform: rotate(20deg) !default;\n\n\n// Tilt Animation\n\n$tilt-transform-style: preserve-3d !default;\n$tilt-transform-up-transform: translateZ(50px) scale(0.7) !default;\n$tilt-transform-up-transition: all 0.5s !default;\n\n// Round Slider\n\n$round-slider-m-width: 200px !default;\n$round-slider-scale-m-width: 300px !default;\n$round-slider-transition: all .5s ease-out 0s !default;\n",
|
||||
"$slider-dim: 15px !default;\n$slider-position: 2px !default;\n$moving-circle: translateX(21px) !default;\n",
|
||||
"$fixed-plugin-bottom: 30px !default;\n$fixed-plugin-right: $fixed-plugin-bottom !default;\n$fixed-plugin-radius: 50% !default;\n$fixed-plugin-box-shadow: $navbar-box-shadow !default;\n$fixed-plugin-button-z-index: 990 !default;\n$fixed-plugin-card-z-index: 1020 !default;\n$fixed-plugin-card-width: 360px !default;\n",
|
||||
"// Pagination\n\n$pagination-active-box-shadow: $btn-hover-box-shadow !default;\n\n$page-link-display: flex !default;\n$page-link-align-items: center !default;\n$page-link-justify-content: $page-link-align-items !default;\n$page-link-margin: 0 3px !default;\n$page-link-radius: 50% !default;\n$page-link-width: 36px !default;\n$page-link-height: $page-link-width !default;\n\n$page-link-width-lg: 46px !default;\n$page-link-height-lg: $page-link-width-lg !default;\n$page-link-line-height-lg: $page-link-width-lg !default;\n\n$page-link-width-sm: 30px !default;\n$page-link-height-sm: $page-link-width-sm !default;\n$page-link-line-height-sm: $page-link-width-sm !default;\n",
|
||||
"// Badge\n$badge-sm-padding: .45em .775em !default;\n$badge-sm-font-size: .65em !default;\n$badge-md-padding: .65em 1em !default;\n$badge-lg-padding: .85em 1.375em !default;\n$badge-inline-margin-right: .625rem !default;\n$badge-inline-span-top: 2px !default;\n$badge-btn-margin: .5rem !default;\n\n// Badge Circle\n$badge-circle-border-radius: 50% !default;\n$badge-circle-width: 1.25rem !default;\n$badge-circle-height: 1.25rem !default;\n$badge-circle-font-size: .75rem !default;\n$badge-circle-font-weight: 600 !default;\n\n$badge-circle-md-width: 1.5rem !default;\n$badge-circle-md-height: 1.5rem !default;\n\n$badge-circle-lg-width: 2rem !default;\n$badge-circle-lg-height: 2rem !default;\n\n//Badge Dot\n$badge-dot-icon-width: .375rem !default;\n$badge-dot-icon-height: .375rem !default;\n$badge-dot-icon-radius: 50% !default;\n$badge-dot-icon-margin-right: .375rem !default;\n\n$badge-dot-md-icon-width: .5rem !default;\n$badge-dot-md-icon-height: .5rem !default;\n\n$badge-dot-lg-icon-width: .625rem !default;\n$badge-dot-lg-icon-height: .625rem !default;\n\n//Badge Floating\n$badge-floating-top: -50% !default;\n$badge-floating-border: 3px !default;\n$badge-floating-transform: translate(147%, 50%) !default;\n\n$card-badge-position: -.6875rem !default;\n",
|
||||
"$timeline-step-transform-rtl: translateX(50%) !default;\n",
|
||||
"// RIPPLE Effect\n\n$ripple-position: relative !default;\n\n$ripple-container-position: absolute !default;\n$ripple-container-top: 0 !default;\n$ripple-container-left: $ripple-container-top !default;\n$ripple-container-z-index: 1 !default;\n$ripple-container-width: 100% !default;\n$ripple-container-height: $ripple-container-width !default;\n$ripple-container-overflow: hidden !default;\n$ripple-container-pointer: none !default;\n$ripple-container-radius: inherit !default;\n\n$ripple-decorator-position: $ripple-container-position !default;\n$ripple-decorator-width: 20px !default;\n$ripple-decorator-height: $ripple-decorator-width !default;\n$ripple-decorator-mt: -10px !default;\n$ripple-decorator-ml: $ripple-decorator-mt !default;\n$ripple-decorator-pointer: $ripple-container-pointer !default;\n$ripple-decorator-bg-color: rgba($black, 0.05) !default;\n$ripple-decorator-radius: 100% !default;\n$ripple-decorator-opacity: 0 !default;\n$ripple-decorator-transform: scale(1) !default;\n$ripple-decorator-transform-origin: 50% !default;\n\n$ripple-on-opacity: .1 !default;\n$ripple-on-transition: opacity 0.15s ease-in 0s,\n transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s !default;\n\n$ripple-out-opacity: 0 !default;\n$ripple-out-transition: opacity 0.1s linear 0s !default;\n",
|
||||
"// Card Profile\n$card-profile-body-text-align: center !default;\n$card-profile-body-padding: 1.25rem 2rem !default;\n$card-profile-avatar-margin: 0 auto !default;\n$card-profile-img-mt: 32px !default;\n$card-profile-img-radius: 50% !default;\n$card-profile-img-width: 130px !default;\n$card-profile-btn-mt: 24px !default;\n$card-profile-p-line-height: 1.778 !default;\n\n// Card Pricing\n$card-pricing-body-padding: 2.25rem !default;\n$card-pricing-line-height: 1.111 !default;\n$card-pricing-title-mb: $card-bg-description-margin !default;\n$card-pricing-td-line-height: 1.429 !default;\n$card-pricing-icon-height: 4rem !default;\n$card-pricing-icon-width: $card-pricing-icon-height !default;\n$card-pricing-icon-position: absolute !default;\n$card-pricing-icon-top: -22px !default;\n$card-pricing-icon-font-size: 1.25rem !default;\n$card-pricing-icon-lg-font-size: 1.75rem !default;\n$card-pricing-i-padding: 18px !default;\n$card-pricing-badge-padding: 5px !default;\n$card-pricing-badge-font-size: 6px !default;\n$card-pricing-badge-position: relative !default;\n$card-pricing-badge-top: -2px !default;\n$card-pricing-border-color: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1), rgba(255, 255, 255, 0));\n$card-pricing-border-color-dark: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, .4), rgba(0, 0, 0, 0));\n",
|
||||
"$choices-box-shadow: $dropdown-box-shadow !default;\n$choices-border-radius: .5rem !default;\n$choices-animation: .3s cubic-bezier(.23,1,.32,1) !default;\n$choices-transition: $dropdown-transition !default;\n$choices-transform: scale(.95) !important !default;\n$choices-transform-show: scale(1) !important !default;\n$choices-padding-y: 1rem !default;\n$choices-padding-x: .5rem !default;\n",
|
||||
"// Timeline\n\n$timeline-axis-width: 2px !default;\n$timeline-axis-color: #e5e5e5 !default;\n$timeline-axis-color-dark: #4a4a4a !default;\n$timeline-left: 1rem !default;\n\n$timeline-step-bg: $white !default;\n$timeline-step-width: 26px !default;\n$timeline-step-height: $timeline-step-width !default;\n$timeline-step-radius: 50% !default;\n$timeline-step-transform: translateX(-50%) !default;\n$timeline-step-line-height: 1.4 !default;\n\n$timeline-step-border-width: 2px !default;\n$timeline-step-border-color: $timeline-axis-color !default;\n\n$timeline-content-margin-left: 45px !default;\n$timeline-content-padding-top: .35rem !default;\n$timeline-content-top: -6px !default;\n",
|
||||
"$fc-event-title-padding-y: .2rem !default;\n$fc-event-title-padding-x: .3rem !default;\n\n$fc-daygrid-event-border-radius: .35rem !default;\n\n$fc-theme-standard-dark-border-color: rgba($secondary, .3) !default;\n",
|
||||
"// Social Buttons\n\n$facebook: #3b5998 !default;\n$facebook-states: darken($facebook, 5%) !default;\n$twitter: #55acee !default;\n$twitter-states: darken($twitter, 5%) !default;\n$instagram: #125688 !default;\n$instagram-states: darken($instagram, 6%) !default;\n$linkedin: #0077B5 !default;\n$linkedin-states: darken($linkedin, 5%) !default;\n$pinterest: #cc2127 !default;\n$pinterest-states: darken($pinterest, 6%) !default;\n$youtube: #e52d27 !default;\n$youtube-states: darken($youtube, 6%) !default;\n$dribbble: #ea4c89 !default;\n$dribbble-states: darken($dribbble, 6%) !default;\n$github: #24292E !default;\n$github-states: darken($github, 6%) !default;\n$reddit: #ff4500 !default;\n$reddit-states: darken($reddit, 6%) !default;\n$tumblr: #35465c !default;\n$tumblr-states: darken($tumblr, 6%) !default;\n$behance: #1769ff !default;\n$behance-states: darken($behance, 6%) !default;\n$vimeo: #1AB7EA !default;\n$vimeo-states: darken($vimeo, 6%) !default;\n$slack: #3aaf85 !default;\n$slack-states: darken($slack, 6%) !default;\n",
|
||||
"$animation-name: fadeInBottom !default;\n$animation-mode: both !default;\n$animation-duration: 1.5s !default;\n$transform-scale: scale(0.6) !default;\n$position-left: 18% !default; \n",
|
||||
"@import \"../bootstrap/functions\";\n@import \"../bootstrap/variables\";\n@import \"../bootstrap/maps\";\n@import \"../bootstrap/utilities\";\n\n$utilities: (\n // scss-docs-start utils-vertical-align\n \"align\": (\n property: vertical-align,\n class: align,\n values: baseline top middle bottom text-bottom text-top\n ),\n // scss-docs-end utils-vertical-align\n // scss-docs-start utils-float\n \"float\": (\n responsive: true,\n property: float,\n values: (\n start: left,\n end: right,\n none: none,\n )\n ),\n // scss-docs-end utils-float\n // scss-docs-start utils-overflow\n \"overflow\": (\n property: overflow,\n values: auto hidden visible scroll,\n ),\n // scss-docs-end utils-overflow\n // scss-docs-start utils-overflow-x\n \"overflow-x\": (\n property: overflow-x,\n class: overflow-x,\n values: auto hidden visible scroll,\n ),\n // scss-docs-end utils-overflow-x\n // scss-docs-start utils-overflow-y\n \"overflow-y\": (\n property: overflow-y,\n class: overflow-y,\n values: auto hidden visible scroll,\n ),\n // scss-docs-end utils-overflow-y\n // scss-docs-start utils-display\n \"display\": (\n responsive: true,\n print: true,\n property: display,\n class: d,\n values: inline inline-block block grid table table-row table-cell flex inline-flex none\n ),\n // scss-docs-end utils-display\n // scss-docs-start utils-shadow\n \"shadow\": (\n property: box-shadow,\n class: shadow,\n values: (\n null: $box-shadow,\n sm: $box-shadow-sm,\n lg: $box-shadow-lg,\n xl: $box-shadow-xl,\n none: none,\n )\n ),\n // scss-docs-start utils-colored-shadow\n \"colored-shadow\": (\n property: box-shadow,\n class: shadow,\n values: (\n primary: $box-shadow-primary,\n secondary: $box-shadow-secondary,\n info: $box-shadow-info,\n warning: $box-shadow-warning,\n success: $box-shadow-success,\n danger: $box-shadow-danger,\n dark: $box-shadow-dark,\n light: $box-shadow-light,\n )\n ),\n // scss-docs-end utils-colored-shadow\n // scss-docs-start utils-position\n \"position\": (\n property: position,\n values: static relative absolute fixed sticky\n ),\n \"top\": (\n property: top,\n values: $position-values\n ),\n \"bottom\": (\n property: bottom,\n values: $position-values\n ),\n \"start\": (\n property: left,\n class: start,\n values: $position-values\n ),\n \"end\": (\n property: right,\n class: end,\n values: $position-values\n ),\n \"translate-middle\": (\n property: transform,\n class: translate-middle,\n values: (\n null: translate(-50%, -50%),\n x: translateX(-50%),\n y: translateY(-50%),\n )\n ),\n //Scale\n \"transform\": (\n property: transform,\n class: transform-scale,\n responsive: true,\n values: (\n 5: scale(.5),\n 6: scale(.6),\n 7: scale(.7),\n 8: scale(.8),\n 9: scale(.9),\n 10: scale(1),\n )\n ),\n // scss-docs-end utils-position\n // scss-docs-start utils-borders\n \"border\": (\n property: border,\n values: (\n null: $border-width solid $border-color,\n 0: 0,\n )\n ),\n \"border-top\": (\n property: border-top,\n responsive: true,\n values: (\n null: $border-width solid $border-color,\n 0: 0,\n )\n ),\n \"border-end\": (\n property: border-right,\n responsive: true,\n class: border-end,\n values: (\n null: $border-width solid $border-color,\n 0: 0,\n )\n ),\n \"border-bottom\": (\n property: border-bottom,\n responsive: true,\n values: (\n null: $border-width solid $border-color,\n 0: 0,\n )\n ),\n \"border-start\": (\n property: border-left,\n responsive: true,\n class: border-start,\n values: (\n null: $border-width solid $border-color,\n 0: 0,\n )\n ),\n \"border-color\": (\n property: border-color,\n class: border,\n values: map-merge($theme-colors, (\"white\": $white))\n ),\n \"border-width\": (\n property: border-width,\n class: border,\n values: $border-widths\n ),\n // scss-docs-end utils-borders\n // Sizing utilities\n // scss-docs-start utils-sizing\n \"width\": (\n property: width,\n responsive: true,\n class: w,\n values: $width\n ),\n \"max-width\": (\n property: max-width,\n class: mw,\n values: (100: 100%)\n ),\n \"viewport-width\": (\n property: width,\n class: vw,\n values: (100: 100vw)\n ),\n \"min-viewport-width\": (\n property: min-width,\n class: min-vw,\n values: (100: 100vw)\n ),\n \"height\": (\n property: height,\n class: h,\n values: (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n )\n ),\n \"max-height\": (\n property: max-height,\n class: mh,\n values: (100: 100%)\n ),\n \"viewport-height\": (\n property: hLine truncated
|
||||
"// Bootstrap functions\n//\n// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null or unit($num) == \"%\" or unit($prev-num) == \"%\" {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Used to ensure the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map, $map-name: \"$grid-breakpoints\") {\n @if length($map) > 0 {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.\";\n }\n }\n}\n\n// Colors\n@function to-rgb($value) {\n @return red($value), green($value), blue($value);\n}\n\n// stylelint-disable scss/dollar-variable-pattern\n@function rgba-css-var($identifier, $target) {\n @if $identifier == \"body\" and $target == \"bg\" {\n @return rgba(var(--#{$prefix}#{$identifier}-bg-rgb), var(--#{$prefix}#{$target}-opacity));\n } @if $identifier == \"body\" and $target == \"text\" {\n @return rgba(var(--#{$prefix}#{$identifier}-color-rgb), var(--#{$prefix}#{$target}-opacity));\n } @else {\n @return rgba(var(--#{$prefix}#{$identifier}-rgb), var(--#{$prefix}#{$target}-opacity));\n }\n}\n\n@function map-loop($map, $func, $args...) {\n $_map: ();\n\n @each $key, $value in $map {\n // allow to pass the $key and $value of the map as an function argument\n $_args: ();\n @each $arg in $args {\n $_args: append($_args, if($arg == \"$key\", $key, if($arg == \"$value\", $value, $arg)));\n }\n\n $_map: map-merge($_map, ($key: call(get-function($func), $_args...)));\n }\n\n @return $_map;\n}\n// stylelint-enable scss/dollar-variable-pattern\n\n@function varify($list) {\n $result: null;\n @each $entry in $list {\n $result: append($result, var(--#{$prefix}#{$entry}), space);\n }\n @return $result;\n}\n\n// Internal Bootstrap function to turn maps into its negative variant.\n// It prefixes the keys with `n` and makes the value negative.\n@function negativify-map($map) {\n $result: ();\n @each $key, $value in $map {\n @if $key != 0 {\n $result: map-merge($result, (\"n\" + $key: (-$value)));\n }\n }\n @return $result;\n}\n\n// Get multiple keys from a sass map\n@function map-get-multiple($map, $values) {\n $result: ();\n @each $key, $value in $map {\n @if (index($values, $key) != null) {\n $result: map-merge($result, ($key: $value));\n }\n }\n @return $result;\n}\n\n// Merge multiple maps\n@function map-merge-multiple($maps...) {\n $merged-maps: ();\n\n @each $map in $maps {\n $merged-maps: map-merge($merged-maps, $map);\n }\n @return $merged-maps;\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Kitty Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// See https://codepen.io/kevinweber/pen/dXWoRw\n//\n// Requires the use of quotes around data URIs.\n\n@function escape-svg($string) {\n @if str-index($string, \"data:image/svg+xml\") {\n @each $char, $encoded in $escaped-characters {\n // Do not escape the url brackets\n @if str-index($string, \"url(\") == 1 {\n $string: url(\"#{str-replace(str-slice($string, 6, -3), $char, $encoded)}\");\n } @else {\n $string: str-replace($string, $char, $encoded);\n }\n }\n }\n\n @return $string;\n}\n\n// Color contrast\n// See https://github.com/twbs/bootstrap/pull/30168\n\n// A list of pre-calculated numbers of pow(divide((divide($value, 255) + .055), 1.055), 2.4). (from 0 to 255)\n// stylelint-disable-next-line scss/dollar-variable-default, scss/dollar-variable-pattern\n$_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003 .0033 .0037 .004 .00Line truncated
|
||||
"// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, Line truncated
|
||||
"// Re-assigned maps\n//\n// Placed here so that others can override the default Sass maps and see automatic updates to utilities and more.\n\n// scss-docs-start theme-colors-rgb\n$theme-colors-rgb: map-loop($theme-colors, to-rgb, \"$value\") !default;\n// scss-docs-end theme-colors-rgb\n\n// Utilities maps\n//\n// Extends the default `$theme-colors` maps to help create our utilities.\n\n// Come v6, we'll de-dupe these variables. Until then, for backward compatibility, we keep them to reassign.\n// scss-docs-start utilities-colors\n$utilities-colors: $theme-colors-rgb !default;\n// scss-docs-end utilities-colors\n\n// scss-docs-start utilities-text-colors\n$utilities-text: map-merge(\n $utilities-colors,\n (\n \"black\": to-rgb($black),\n \"white\": to-rgb($white),\n \"body\": to-rgb($body-color)\n )\n) !default;\n$utilities-text-colors: map-loop($utilities-text, rgba-css-var, \"$key\", \"text\") !default;\n// scss-docs-end utilities-text-colors\n\n// scss-docs-start utilities-bg-colors\n$utilities-bg: map-merge(\n $utilities-colors,\n (\n \"black\": to-rgb($black),\n \"white\": to-rgb($white),\n \"body\": to-rgb($body-bg)\n )\n) !default;\n$utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, \"$key\", \"bg\") !default;\n// scss-docs-end utilities-bg-colors\n\n// scss-docs-start utilities-border-colors\n$utilities-border: map-merge(\n $utilities-colors,\n (\n \"white\": to-rgb($white)\n )\n) !default;\n$utilities-border-colors: map-loop($utilities-border, rgba-css-var, \"$key\", \"border\") !default;\n// scss-docs-end utilities-border-colors\n\n$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;\n\n$gutters: $spacers !default;\n",
|
||||
"// Utilities\n\n$utilities: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$utilities: map-merge(\n (\n // scss-docs-start utils-vertical-align\n \"align\": (\n property: vertical-align,\n class: align,\n values: baseline top middle bottom text-bottom text-top\n ),\n // scss-docs-end utils-vertical-align\n // scss-docs-start utils-float\n \"float\": (\n responsive: true,\n property: float,\n values: (\n start: left,\n end: right,\n none: none,\n )\n ),\n // scss-docs-end utils-float\n // Opacity utilities\n // scss-docs-start utils-opacity\n \"opacity\": (\n property: opacity,\n values: (\n 0: 0,\n 25: .25,\n 50: .5,\n 75: .75,\n 100: 1,\n )\n ),\n // scss-docs-end utils-opacity\n // scss-docs-start utils-overflow\n \"overflow\": (\n property: overflow,\n values: auto hidden visible scroll,\n ),\n // scss-docs-end utils-overflow\n // scss-docs-start utils-display\n \"display\": (\n responsive: true,\n print: true,\n property: display,\n class: d,\n values: inline inline-block block grid table table-row table-cell flex inline-flex none\n ),\n // scss-docs-end utils-display\n // scss-docs-start utils-shadow\n \"shadow\": (\n property: box-shadow,\n class: shadow,\n values: (\n null: $box-shadow,\n sm: $box-shadow-sm,\n lg: $box-shadow-lg,\n none: none,\n )\n ),\n // scss-docs-end utils-shadow\n // scss-docs-start utils-position\n \"position\": (\n property: position,\n values: static relative absolute fixed sticky\n ),\n \"top\": (\n property: top,\n values: $position-values\n ),\n \"bottom\": (\n property: bottom,\n values: $position-values\n ),\n \"start\": (\n property: left,\n class: start,\n values: $position-values\n ),\n \"end\": (\n property: right,\n class: end,\n values: $position-values\n ),\n \"translate-middle\": (\n property: transform,\n class: translate-middle,\n values: (\n null: translate(-50%, -50%),\n x: translateX(-50%),\n y: translateY(-50%),\n )\n ),\n // scss-docs-end utils-position\n // scss-docs-start utils-borders\n \"border\": (\n property: border,\n values: (\n null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),\n 0: 0,\n )\n ),\n \"border-top\": (\n property: border-top,\n values: (\n null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),\n 0: 0,\n )\n ),\n \"border-end\": (\n property: border-right,\n class: border-end,\n values: (\n null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),\n 0: 0,\n )\n ),\n \"border-bottom\": (\n property: border-bottom,\n values: (\n null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),\n 0: 0,\n )\n ),\n \"border-start\": (\n property: border-left,\n class: border-start,\n values: (\n null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),\n 0: 0,\n )\n ),\n \"border-color\": (\n property: border-color,\n class: border,\n local-vars: (\n \"border-opacity\": 1\n ),\n values: $utilities-border-colors\n ),\n \"border-width\": (\n css-var: true,\n css-variable-name: border-width,\n class: border,\n values: $border-widths\n ),\n \"border-opacity\": (\n css-var: true,\n class: border-opacity,\n values: (\n 10: .1,\n 25: .25,\n 50: .5,\n 75: .75,\n 100: 1\n )\n ),\n // scss-docs-end utils-borders\n // Sizing utilities\n // scss-docs-start utils-sizing\n \"width\": (\n property: width,\n class: w,\n values: (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n )\n ),\n \"max-width\": (\n property: max-width,\n class: mw,\n values: (100: 100%)\n ),\n \"viewport-width\": (\n property: width,\n class: vw,\n values: (100: 100vw)\n ),\n \"min-viewport-width\": (\n property: min-width,\n class: min-vw,\n values: (100: 100vw)\n ),\n \"height\": (\n property: height,\n class: h,\n values: (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n )\n ),\n \"max-height\": (\n property: max-height,\n class: mh,\n values: (100: 100%)\n ),\n \"viewport-height\": (\n property: height,\nLine truncated
|
||||
"@import \"mixins/banner\";\n@include bsBanner(\"\");\n\n\n// scss-docs-start import-stack\n// Configuration\n@import \"functions\";\n@import \"variables\";\n@import \"maps\";\n@import \"mixins\";\n@import \"utilities\";\n\n// Layout & components\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"containers\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"accordion\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"alert\";\n@import \"progress\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"offcanvas\";\n@import \"placeholders\";\n\n// Helpers\n@import \"helpers\";\n\n// Utilities\n@import \"utilities/api\";\n// scss-docs-end import-stack\n",
|
||||
"@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",
|
||||
"// Bootstrap functions\n//\n// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null or unit($num) == \"%\" or unit($prev-num) == \"%\" {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Used to ensure the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map, $map-name: \"$grid-breakpoints\") {\n @if length($map) > 0 {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.\";\n }\n }\n}\n\n// Colors\n@function to-rgb($value) {\n @return red($value), green($value), blue($value);\n}\n\n// stylelint-disable scss/dollar-variable-pattern\n@function rgba-css-var($identifier, $target) {\n @if $identifier == \"body\" and $target == \"bg\" {\n @return rgba(var(--#{$prefix}#{$identifier}-bg-rgb), var(--#{$prefix}#{$target}-opacity));\n } @if $identifier == \"body\" and $target == \"text\" {\n @return rgba(var(--#{$prefix}#{$identifier}-color-rgb), var(--#{$prefix}#{$target}-opacity));\n } @else {\n @return rgba(var(--#{$prefix}#{$identifier}-rgb), var(--#{$prefix}#{$target}-opacity));\n }\n}\n\n@function map-loop($map, $func, $args...) {\n $_map: ();\n\n @each $key, $value in $map {\n // allow to pass the $key and $value of the map as an function argument\n $_args: ();\n @each $arg in $args {\n $_args: append($_args, if($arg == \"$key\", $key, if($arg == \"$value\", $value, $arg)));\n }\n\n $_map: map-merge($_map, ($key: call(get-function($func), $_args...)));\n }\n\n @return $_map;\n}\n// stylelint-enable scss/dollar-variable-pattern\n\n@function varify($list) {\n $result: null;\n @each $entry in $list {\n $result: append($result, var(--#{$prefix}#{$entry}), space);\n }\n @return $result;\n}\n\n// Internal Bootstrap function to turn maps into its negative variant.\n// It prefixes the keys with `n` and makes the value negative.\n@function negativify-map($map) {\n $result: ();\n @each $key, $value in $map {\n @if $key != 0 {\n $result: map-merge($result, (\"n\" + $key: (-$value)));\n }\n }\n @return $result;\n}\n\n// Get multiple keys from a sass map\n@function map-get-multiple($map, $values) {\n $result: ();\n @each $key, $value in $map {\n @if (index($values, $key) != null) {\n $result: map-merge($result, ($key: $value));\n }\n }\n @return $result;\n}\n\n// Merge multiple maps\n@function map-merge-multiple($maps...) {\n $merged-maps: ();\n\n @each $map in $maps {\n $merged-maps: map-merge($merged-maps, $map);\n }\n @return $merged-maps;\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Kitty Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// See https://codepen.io/kevinweber/pen/dXWoRw\n//\n// Requires the use of quotes around data URIs.\n\n@function escape-svg($string) {\n @if str-index($string, \"data:image/svg+xml\") {\n @each $char, $encoded in $escaped-characters {\n // Do not escape the url brackets\n @if str-index($string, \"url(\") == 1 {\n $string: url(\"#{str-replace(str-slice($string, 6, -3), $char, $encoded)}\");\n } @else {\n $string: str-replace($string, $char, $encoded);\n }\n }\n }\n\n @return $string;\n}\n\n// Color contrast\n// See https://github.com/twbs/bootstrap/pull/30168\n\n// A list of pre-calculated numbers of pow(divide((divide($value, 255) + .055), 1.055), 2.4). (from 0 to 255)\n// stylelint-disable-next-line scss/dollar-variable-default, scss/dollar-variable-pattern\n$_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003 .0033 .0037 .004 .00Line truncated
|
||||
"// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, Line truncated
|
||||
"// Re-assigned maps\n//\n// Placed here so that others can override the default Sass maps and see automatic updates to utilities and more.\n\n// scss-docs-start theme-colors-rgb\n$theme-colors-rgb: map-loop($theme-colors, to-rgb, \"$value\") !default;\n// scss-docs-end theme-colors-rgb\n\n// Utilities maps\n//\n// Extends the default `$theme-colors` maps to help create our utilities.\n\n// Come v6, we'll de-dupe these variables. Until then, for backward compatibility, we keep them to reassign.\n// scss-docs-start utilities-colors\n$utilities-colors: $theme-colors-rgb !default;\n// scss-docs-end utilities-colors\n\n// scss-docs-start utilities-text-colors\n$utilities-text: map-merge(\n $utilities-colors,\n (\n \"black\": to-rgb($black),\n \"white\": to-rgb($white),\n \"body\": to-rgb($body-color)\n )\n) !default;\n$utilities-text-colors: map-loop($utilities-text, rgba-css-var, \"$key\", \"text\") !default;\n// scss-docs-end utilities-text-colors\n\n// scss-docs-start utilities-bg-colors\n$utilities-bg: map-merge(\n $utilities-colors,\n (\n \"black\": to-rgb($black),\n \"white\": to-rgb($white),\n \"body\": to-rgb($body-bg)\n )\n) !default;\n$utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, \"$key\", \"bg\") !default;\n// scss-docs-end utilities-bg-colors\n\n// scss-docs-start utilities-border-colors\n$utilities-border: map-merge(\n $utilities-colors,\n (\n \"white\": to-rgb($white)\n )\n) !default;\n$utilities-border-colors: map-loop($utilities-border, rgba-css-var, \"$key\", \"border\") !default;\n// scss-docs-end utilities-border-colors\n\n$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;\n\n$gutters: $spacers !default;\n",
|
||||
"// Toggles\n//\n// Used in conjunction with global variables to enable certain theme features.\n\n// Vendor\n@import \"vendor/rfs\";\n\n// Deprecate\n@import \"mixins/deprecate\";\n\n// Helpers\n@import \"mixins/breakpoints\";\n@import \"mixins/color-scheme\";\n@import \"mixins/image\";\n@import \"mixins/resize\";\n@import \"mixins/visually-hidden\";\n@import \"mixins/reset-text\";\n@import \"mixins/text-truncate\";\n\n// Utilities\n@import \"mixins/utilities\";\n\n// Components\n@import \"mixins/alert\";\n@import \"mixins/backdrop\";\n@import \"mixins/buttons\";\n@import \"mixins/caret\";\n@import \"mixins/pagination\";\n@import \"mixins/lists\";\n@import \"mixins/list-group\";\n@import \"mixins/forms\";\n@import \"mixins/table-variants\";\n\n// Skins\n@import \"mixins/border-radius\";\n@import \"mixins/box-shadow\";\n@import \"mixins/gradients\";\n@import \"mixins/transition\";\n\n// Layout\n@import \"mixins/clearfix\";\n@import \"mixins/container\";\n@import \"mixins/grid\";\n",
|
||||
"// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfLine truncated
|
||||
"// Deprecate mixin\n//\n// This mixin can be used to deprecate mixins or functions.\n// `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to\n// some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap)\n@mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) {\n @if ($enable-deprecation-messages != false and $ignore-warning != true) {\n @warn \"#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}.\";\n }\n}\n",
|
||||
"// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n",
|
||||
"// scss-docs-start mixin-color-scheme\n@mixin color-scheme($name) {\n @media (prefers-color-scheme: #{$name}) {\n @content;\n }\n}\n// scss-docs-end mixin-color-scheme\n",
|
||||
"// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n",
|
||||
"// Resize anything\n\n@mixin resizable($direction) {\n overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`\n resize: $direction; // Options: horizontal, vertical, both\n}\n",
|
||||
"// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n",
|
||||
"@mixin reset-text {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n}\n",
|
||||
"// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",
|
||||
"// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n",
|
||||
"// scss-docs-start alert-variant-mixin\n@mixin alert-variant($background, $border, $color) {\n --#{$prefix}alert-color: #{$color};\n --#{$prefix}alert-bg: #{$background};\n --#{$prefix}alert-border-color: #{$border};\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n\n .alert-link {\n color: shade-color($color, 20%);\n }\n}\n// scss-docs-end alert-variant-mixin\n",
|
||||
"// Shared between modals and offcanvases\n@mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex;\n width: 100vw;\n height: 100vh;\n background-color: $backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $backdrop-opacity; }\n}\n",
|
||||
"// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n $background,\n $border,\n $color: color-contrast($background),\n $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),\n $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),\n $hover-color: color-contrast($hover-background),\n $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),\n $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),\n $active-color: color-contrast($active-background),\n $disabled-background: $background,\n $disabled-border: $border,\n $disabled-color: color-contrast($disabled-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-bg: #{$background};\n --#{$prefix}btn-border-color: #{$border};\n --#{$prefix}btn-hover-color: #{$hover-color};\n --#{$prefix}btn-hover-bg: #{$hover-background};\n --#{$prefix}btn-hover-border-color: #{$hover-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$disabled-color};\n --#{$prefix}btn-disabled-bg: #{$disabled-background};\n --#{$prefix}btn-disabled-border-color: #{$disabled-border};\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n $color,\n $color-hover: color-contrast($color),\n $active-background: $color,\n $active-border: $color,\n $active-color: color-contrast($active-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-border-color: #{$color};\n --#{$prefix}btn-hover-color: #{$color-hover};\n --#{$prefix}btn-hover-bg: #{$active-background};\n --#{$prefix}btn-hover-border-color: #{$active-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$color};\n --#{$prefix}btn-disabled-bg: transparent;\n --#{$prefix}btn-disabled-border-color: #{$color};\n --#{$prefix}gradient: none;\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}btn-padding-y: #{$padding-y};\n --#{$prefix}btn-padding-x: #{$padding-x};\n @include rfs($font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-border-radius: #{$border-radius};\n}\n// scss-docs-end btn-size-mixin\n",
|
||||
"// scss-docs-start caret-mixins\n@mixin caret-down {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-end {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-start {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down();\n } @else if $direction == up {\n @include caret-up();\n } @else if $direction == end {\n @include caret-end();\n }\n }\n\n @if $direction == start {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @include caret-start();\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n// scss-docs-end caret-mixins\n",
|
||||
"// Pagination\n\n// scss-docs-start pagination-mixin\n@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}pagination-padding-x: #{$padding-x};\n --#{$prefix}pagination-padding-y: #{$padding-y};\n @include rfs($font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-border-radius: #{$border-radius};\n}\n// scss-docs-end pagination-mixin\n",
|
||||
"// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n",
|
||||
"// List Groups\n\n// scss-docs-start list-group-mixin\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n &:hover,\n &:focus {\n color: $color;\n background-color: shade-color($background, 10%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n// scss-docs-end list-group-mixin\n",
|
||||
"// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state(\n $state,\n $color,\n $icon,\n $tooltip-color: color-contrast($color),\n $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity)\n) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n font-style: $form-feedback-font-style;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: $tooltip-color;\n background-color: $tooltip-bg-color;\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .form-select {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n &:not([multiple]):not([size]),\n &:not([multiple])[size=\"1\"] {\n padding-right: $form-select-feedback-icon-padding-end;\n background-image: escape-svg($form-select-indicator), escape-svg($icon);\n background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n }\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n .form-control-color {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n width: add($form-color-width, $input-height-inner);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n &:checked {\n background-color: $color;\n }\n\n &:focus {\n box-shadow: $focus-box-shadow;\n }\n\n ~ .form-check-label {\n color: $color;\n }\n }\n }\n .form-check-inline .form-check-input {\n ~ .#{$state}-feedback {\n margin-left: .5em;\n }\n }\n\n .input-group {\n > .form-control:not(:focus),\n > .form-select:not(:focus),\n > .form-floating:not(:focus-within) {\n @include form-validation-state-selector($state) {\n @if $state == \"valid\" {\n z-index: 3;\n } @else if $state == \"invalid\" {\n z-index: 4;\n }\n }\n }\n }\n}\n// scss-docs-end form-validation-mixins\n",
|
||||
"// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n .table-#{$state} {\n $color: color-contrast(opaque($body-bg, $background));\n $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n $table-border-color: mix($color, $background, percentage($table-border-factor));\n\n --#{$prefix}table-color: #{$color};\n --#{$prefix}table-bg: #{$background};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-striped-bg: #{$striped-bg};\n --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};\n --#{$prefix}table-active-bg: #{$active-bg};\n --#{$prefix}table-active-color: #{color-contrast($active-bg)};\n --#{$prefix}table-hover-bg: #{$hover-bg};\n --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n color: var(--#{$prefix}table-color);\n border-color: var(--#{$prefix}table-border-color);\n }\n}\n// scss-docs-end table-variant\n",
|
||||
"// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n",
|
||||
"@mixin box-shadow($shadow...) {\n @if $enable-shadows {\n $result: ();\n\n @each $value in $shadow {\n @if $value != null {\n $result: append($result, $value, \"comma\");\n }\n @if $value == none and length($shadow) > 1 {\n @warn \"The keyword 'none' must be used as a single argument.\";\n }\n }\n\n @if (length($result) > 0) {\n box-shadow: $result;\n }\n }\n}\n",
|
||||
"// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n background-color: $color;\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n// scss-docs-end gradient-mixins\n",
|
||||
"// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n",
|
||||
"// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n",
|
||||
"// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n",
|
||||
"// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n",
|
||||
"// Utilities\n\n$utilities: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$utilities: map-merge(\n (\n // scss-docs-start utils-vertical-align\n \"align\": (\n property: vertical-align,\n class: align,\n values: baseline top middle bottom text-bottom text-top\n ),\n // scss-docs-end utils-vertical-align\n // scss-docs-start utils-float\n \"float\": (\n responsive: true,\n property: float,\n values: (\n start: left,\n end: right,\n none: none,\n )\n ),\n // scss-docs-end utils-float\n // Opacity utilities\n // scss-docs-start utils-opacity\n \"opacity\": (\n property: opacity,\n values: (\n 0: 0,\n 25: .25,\n 50: .5,\n 75: .75,\n 100: 1,\n )\n ),\n // scss-docs-end utils-opacity\n // scss-docs-start utils-overflow\n \"overflow\": (\n property: overflow,\n values: auto hidden visible scroll,\n ),\n // scss-docs-end utils-overflow\n // scss-docs-start utils-display\n \"display\": (\n responsive: true,\n print: true,\n property: display,\n class: d,\n values: inline inline-block block grid table table-row table-cell flex inline-flex none\n ),\n // scss-docs-end utils-display\n // scss-docs-start utils-shadow\n \"shadow\": (\n property: box-shadow,\n class: shadow,\n values: (\n null: $box-shadow,\n sm: $box-shadow-sm,\n lg: $box-shadow-lg,\n none: none,\n )\n ),\n // scss-docs-end utils-shadow\n // scss-docs-start utils-position\n \"position\": (\n property: position,\n values: static relative absolute fixed sticky\n ),\n \"top\": (\n property: top,\n values: $position-values\n ),\n \"bottom\": (\n property: bottom,\n values: $position-values\n ),\n \"start\": (\n property: left,\n class: start,\n values: $position-values\n ),\n \"end\": (\n property: right,\n class: end,\n values: $position-values\n ),\n \"translate-middle\": (\n property: transform,\n class: translate-middle,\n values: (\n null: translate(-50%, -50%),\n x: translateX(-50%),\n y: translateY(-50%),\n )\n ),\n // scss-docs-end utils-position\n // scss-docs-start utils-borders\n \"border\": (\n property: border,\n values: (\n null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),\n 0: 0,\n )\n ),\n \"border-top\": (\n property: border-top,\n values: (\n null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),\n 0: 0,\n )\n ),\n \"border-end\": (\n property: border-right,\n class: border-end,\n values: (\n null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),\n 0: 0,\n )\n ),\n \"border-bottom\": (\n property: border-bottom,\n values: (\n null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),\n 0: 0,\n )\n ),\n \"border-start\": (\n property: border-left,\n class: border-start,\n values: (\n null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),\n 0: 0,\n )\n ),\n \"border-color\": (\n property: border-color,\n class: border,\n local-vars: (\n \"border-opacity\": 1\n ),\n values: $utilities-border-colors\n ),\n \"border-width\": (\n css-var: true,\n css-variable-name: border-width,\n class: border,\n values: $border-widths\n ),\n \"border-opacity\": (\n css-var: true,\n class: border-opacity,\n values: (\n 10: .1,\n 25: .25,\n 50: .5,\n 75: .75,\n 100: 1\n )\n ),\n // scss-docs-end utils-borders\n // Sizing utilities\n // scss-docs-start utils-sizing\n \"width\": (\n property: width,\n class: w,\n values: (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n )\n ),\n \"max-width\": (\n property: max-width,\n class: mw,\n values: (100: 100%)\n ),\n \"viewport-width\": (\n property: width,\n class: vw,\n values: (100: 100vw)\n ),\n \"min-viewport-width\": (\n property: min-width,\n class: min-vw,\n values: (100: 100vw)\n ),\n \"height\": (\n property: height,\n class: h,\n values: (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n )\n ),\n \"max-height\": (\n property: max-height,\n class: mh,\n values: (100: 100%)\n ),\n \"viewport-height\": (\n property: height,\nLine truncated
|
||||
":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n",
|
||||
"// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: var(--#{$prefix}link-color);\n text-decoration: $link-decoration;\n\n &:hover {\n color: var(--#{$prefix}link-hover-color);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other Line truncated
|
||||
"//\n// Headings\n//\n.h1 {\n @extend h1;\n}\n\n.h2 {\n @extend h2;\n}\n\n.h3 {\n @extend h3;\n}\n\n.h4 {\n @extend h4;\n}\n\n.h5 {\n @extend h5;\n}\n\n.h6 {\n @extend h6;\n}\n\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n .display-#{$display} {\n @include font-size($font-size);\n font-family: $display-font-family;\n font-style: $display-font-style;\n font-weight: $display-font-weight;\n line-height: $display-line-height;\n }\n}\n\n//\n// Emphasis\n//\n.small {\n @extend small;\n}\n\n.mark {\n @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size($initialism-font-size);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-font-size);\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n.blockquote-footer {\n margin-top: -$blockquote-margin-y;\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-footer-font-size);\n color: $blockquote-footer-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n",
|
||||
"// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer * .5;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n",
|
||||
"// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n",
|
||||
"// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n",
|
||||
"//\n// Basic Bootstrap table\n//\n\n.table {\n --#{$prefix}table-color: #{$table-color};\n --#{$prefix}table-bg: #{$table-bg};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-accent-bg: #{$table-accent-bg};\n --#{$prefix}table-striped-color: #{$table-striped-color};\n --#{$prefix}table-striped-bg: #{$table-striped-bg};\n --#{$prefix}table-active-color: #{$table-active-color};\n --#{$prefix}table-active-bg: #{$table-active-bg};\n --#{$prefix}table-hover-color: #{$table-hover-color};\n --#{$prefix}table-hover-bg: #{$table-hover-bg};\n\n width: 100%;\n margin-bottom: $spacer;\n color: var(--#{$prefix}table-color);\n vertical-align: $table-cell-vertical-align;\n border-color: var(--#{$prefix}table-border-color);\n\n // Target th & td\n // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y $table-cell-padding-x;\n background-color: var(--#{$prefix}table-bg);\n border-bottom-width: $table-border-width;\n box-shadow: inset 0 0 0 9999px var(--#{$prefix}table-accent-bg);\n }\n\n > tbody {\n vertical-align: inherit;\n }\n\n > thead {\n vertical-align: bottom;\n }\n}\n\n.table-group-divider {\n border-top: ($table-border-width * 2) solid $table-group-separator-color;\n}\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n caption-side: top;\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefor we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n > :not(caption) > * {\n border-width: $table-border-width 0;\n\n // stylelint-disable-next-line selector-max-universal\n > * {\n border-width: 0 $table-border-width;\n }\n }\n}\n\n.table-borderless {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n border-bottom-width: 0;\n }\n\n > :not(:first-child) {\n border-top-width: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n// For rows\n.table-striped {\n > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// For columns\n.table-striped-columns {\n > :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-active-bg);\n color: var(--#{$prefix}table-active-color);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-hover-bg);\n color: var(--#{$prefix}table-hover-color);\n }\n}\n\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @include media-breakpoint-down($breakpoint) {\n .table-responsive#{$infix} {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n }\n}\n",
|
||||
"@import \"forms/labels\";\n@import \"forms/form-text\";\n@import \"forms/form-control\";\n@import \"forms/form-select\";\n@import \"forms/form-check\";\n@import \"forms/form-range\";\n@import \"forms/floating-labels\";\n@import \"forms/input-group\";\n@import \"forms/validation\";\n",
|
||||
"//\n// Labels\n//\n\n.form-label {\n margin-bottom: $form-label-margin-bottom;\n @include font-size($form-label-font-size);\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n line-height: $input-line-height;\n color: $form-label-color;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n}\n",
|
||||
"//\n// Form text\n//\n\n.form-text {\n margin-top: $form-text-margin-top;\n @include font-size($form-text-font-size);\n font-style: $form-text-font-style;\n font-weight: $form-text-font-weight;\n color: $form-text-color;\n}\n",
|
||||
"//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n appearance: none; // Fix appearance for date inputs in Safari\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n &[type=\"file\"] {\n overflow: hidden; // prevent pseudo element button overlap\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n\n // Add some height to date inputs on iOS\n // https://github.com/twbs/bootstrap/issues/23307\n // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n &::-webkit-date-and-time-value {\n // Multiply line-height by 1em if it has no unit\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n }\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled {\n color: $input-disabled-color;\n background-color: $input-disabled-bg;\n border-color: $input-disabled-border-color;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n\n // File input buttons theming\n &::file-selector-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: $form-file-button-hover-bg;\n }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &:focus {\n outline: 0;\n }\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n min-height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n\n &::file-selector-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n}\n\n.form-control-lg {\n min-height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n\n &::file-selector-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n}\n\n// Make sure textareas don't shrink too much Line truncated
|
||||
"// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n display: block;\n width: 100%;\n padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;\n -moz-padding-start: subtract($form-select-padding-x, 3px); // See https://github.com/twbs/bootstrap/issues/32636\n font-family: $form-select-font-family;\n @include font-size($form-select-font-size);\n font-weight: $form-select-font-weight;\n line-height: $form-select-line-height;\n color: $form-select-color;\n background-color: $form-select-bg;\n background-image: escape-svg($form-select-indicator);\n background-repeat: no-repeat;\n background-position: $form-select-bg-position;\n background-size: $form-select-bg-size;\n border: $form-select-border-width solid $form-select-border-color;\n @include border-radius($form-select-border-radius, 0);\n @include box-shadow($form-select-box-shadow);\n @include transition($form-select-transition);\n appearance: none;\n\n &:focus {\n border-color: $form-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $form-select-focus-box-shadow;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n padding-right: $form-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $form-select-disabled-color;\n background-color: $form-select-disabled-bg;\n border-color: $form-select-disabled-border-color;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $form-select-color;\n }\n}\n\n.form-select-sm {\n padding-top: $form-select-padding-y-sm;\n padding-bottom: $form-select-padding-y-sm;\n padding-left: $form-select-padding-x-sm;\n @include font-size($form-select-font-size-sm);\n @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: $form-select-padding-y-lg;\n padding-bottom: $form-select-padding-y-lg;\n padding-left: $form-select-padding-x-lg;\n @include font-size($form-select-font-size-lg);\n @include border-radius($form-select-border-radius-lg);\n}\n",
|
||||
"//\n// Check/radio\n//\n\n.form-check {\n display: block;\n min-height: $form-check-min-height;\n padding-left: $form-check-padding-start;\n margin-bottom: $form-check-margin-bottom;\n\n .form-check-input {\n float: left;\n margin-left: $form-check-padding-start * -1;\n }\n}\n\n.form-check-reverse {\n padding-right: $form-check-padding-start;\n padding-left: 0;\n text-align: right;\n\n .form-check-input {\n float: right;\n margin-right: $form-check-padding-start * -1;\n margin-left: 0;\n }\n}\n\n.form-check-input {\n width: $form-check-input-width;\n height: $form-check-input-width;\n margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height\n vertical-align: top;\n background-color: $form-check-input-bg;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: $form-check-input-border;\n appearance: none;\n print-color-adjust: exact; // Keep themed appearance for print\n @include transition($form-check-transition);\n\n &[type=\"checkbox\"] {\n @include border-radius($form-check-input-border-radius);\n }\n\n &[type=\"radio\"] {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $form-check-radio-border-radius;\n }\n\n &:active {\n filter: $form-check-input-active-filter;\n }\n\n &:focus {\n border-color: $form-check-input-focus-border;\n outline: 0;\n box-shadow: $form-check-input-focus-box-shadow;\n }\n\n &:checked {\n background-color: $form-check-input-checked-bg-color;\n border-color: $form-check-input-checked-border-color;\n\n &[type=\"checkbox\"] {\n @if $enable-gradients {\n background-image: escape-svg($form-check-input-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-input-checked-bg-image);\n }\n }\n\n &[type=\"radio\"] {\n @if $enable-gradients {\n background-image: escape-svg($form-check-radio-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-radio-checked-bg-image);\n }\n }\n }\n\n &[type=\"checkbox\"]:indeterminate {\n background-color: $form-check-input-indeterminate-bg-color;\n border-color: $form-check-input-indeterminate-border-color;\n\n @if $enable-gradients {\n background-image: escape-svg($form-check-input-indeterminate-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-input-indeterminate-bg-image);\n }\n }\n\n &:disabled {\n pointer-events: none;\n filter: none;\n opacity: $form-check-input-disabled-opacity;\n }\n\n // Use disabled attribute in addition of :disabled pseudo-class\n // See: https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .form-check-label {\n cursor: default;\n opacity: $form-check-label-disabled-opacity;\n }\n }\n}\n\n.form-check-label {\n color: $form-check-label-color;\n cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n padding-left: $form-switch-padding-start;\n\n .form-check-input {\n width: $form-switch-width;\n margin-left: $form-switch-padding-start * -1;\n background-image: escape-svg($form-switch-bg-image);\n background-position: left center;\n @include border-radius($form-switch-border-radius);\n @include transition($form-switch-transition);\n\n &:focus {\n background-image: escape-svg($form-switch-focus-bg-image);\n }\n\n &:checked {\n background-position: $form-switch-checked-bg-position;\n\n @if $enable-gradients {\n background-image: escape-svg($form-switch-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-switch-checked-bg-image);\n }\n }\n }\n\n &.form-check-reverse {\n padding-right: $form-switch-padding-start;\n padding-left: 0;\n\n .form-check-input {\n margin-right: $form-switch-padding-start * -1;\n margin-left: 0;\n }\n }\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n\n &[disabled],\n &:disabled {\n + .btn {\n pointer-events: none;\n filter: none;\n opacity: $form-check-btn-check-disabled-opacity;\n }\n }\n}\n",
|
||||
"// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n width: 100%;\n height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent; // Why?\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent;\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent;\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &:disabled {\n pointer-events: none;\n\n &::-webkit-slider-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n\n &::-moz-range-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n }\n}\n",
|
||||
".form-floating {\n position: relative;\n\n > .form-control,\n > .form-control-plaintext,\n > .form-select {\n height: $form-floating-height;\n line-height: $form-floating-line-height;\n }\n\n > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%; // allow textareas\n padding: $form-floating-padding-y $form-floating-padding-x;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n transform-origin: 0 0;\n @include transition($form-floating-transition);\n }\n\n > .form-control,\n > .form-control-plaintext {\n padding: $form-floating-padding-y $form-floating-padding-x;\n\n &::placeholder {\n color: transparent;\n }\n\n &:focus,\n &:not(:placeholder-shown) {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n &:-webkit-autofill {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n }\n\n > .form-select {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n\n > .form-control:focus,\n > .form-control:not(:placeholder-shown),\n > .form-control-plaintext,\n > .form-select {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n > .form-control:-webkit-autofill {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n\n > .form-control-plaintext {\n ~ label {\n border-width: $input-border-width 0; // Required to properly position label text - as explained above\n }\n }\n}\n",
|
||||
"//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-select,\n > .form-floating {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .form-select:focus,\n > .form-floating:focus-within {\n z-index: 5;\n }\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 5;\n }\n }\n}\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n @include font-size($input-font-size); // Match inputs\n font-weight: $input-group-addon-font-weight;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n &:not(.has-validation) {\n > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 3),\n > .form-floating:not(:last-child) > .form-control,\n > .form-floating:not(:last-child) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n &.has-validation {\n > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 4),\n > .form-floating:nth-last-child(n + 3) > .form-control,\n > .form-floating:nth-last-child(n + 3) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n $validation-messages: \"\";\n @each $state in map-keys($form-validation-states) {\n $validation-messages: $validation-messages + \":not(.\" + unquote($state) + \"-tooltip)\" + \":not(.\" + unquote($state) + \"-feedback)\";\n }\n\n > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n margin-left: -$input-border-width;\n @include border-start-radius(0);\n }\n\n > .form-floating:not(:first-child) > .form-control,\n > .form-floating:not(:first-child) > .form-select {\n @include border-start-radius(0);\n }\n}\n",
|
||||
"// Form validation\n//\n// Provide feedback to users when form field values are valid or invalid. Works\n// primarily for client-side validation via scoped `:invalid` and `:valid`\n// pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for\n// server-side validation.\n\n// scss-docs-start form-validation-states-loop\n@each $state, $data in $form-validation-states {\n @include form-validation-state($state, $data...);\n}\n// scss-docs-end form-validation-states-loop\n",
|
||||
"//\n// Base styles\n//\n\n.btn {\n // scss-docs-start btn-css-vars\n --#{$prefix}btn-padding-x: #{$btn-padding-x};\n --#{$prefix}btn-padding-y: #{$btn-padding-y};\n --#{$prefix}btn-font-family: #{$btn-font-family};\n @include rfs($btn-font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-font-weight: #{$btn-font-weight};\n --#{$prefix}btn-line-height: #{$btn-line-height};\n --#{$prefix}btn-color: #{$body-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-width: #{$btn-border-width};\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-border-radius: #{$btn-border-radius};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};\n --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5);\n // scss-docs-end btn-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x);\n font-family: var(--#{$prefix}btn-font-family);\n @include font-size(var(--#{$prefix}btn-font-size));\n font-weight: var(--#{$prefix}btn-font-weight);\n line-height: var(--#{$prefix}btn-line-height);\n color: var(--#{$prefix}btn-color);\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n cursor: if($enable-button-pointers, pointer, null);\n user-select: none;\n border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color);\n @include border-radius(var(--#{$prefix}btn-border-radius));\n @include gradient-bg(var(--#{$prefix}btn-bg));\n @include box-shadow(var(--#{$prefix}btn-box-shadow));\n @include transition($btn-transition);\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}btn-hover-bg);\n border-color: var(--#{$prefix}btn-hover-border-color);\n }\n\n .btn-check + &:hover {\n // override for the checkbox/radio buttons\n color: var(--#{$prefix}btn-color);\n background-color: var(--#{$prefix}btn-bg);\n border-color: var(--#{$prefix}btn-border-color);\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-hover-color);\n @include gradient-bg(var(--#{$prefix}btn-hover-bg));\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:focus-visible + & {\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:checked + &,\n :not(.btn-check) + &:active,\n &:first-child:active,\n &.active,\n &.show {\n color: var(--#{$prefix}btn-active-color);\n background-color: var(--#{$prefix}btn-active-bg);\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-active-border-color);\n @include box-shadow(var(--#{$prefix}btn-active-shadow));\n\n &:focus-visible {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n }\n\n &:disabled,\n &.disabled,\n fieldset:disabled & {\n color: var(--#{$prefix}btn-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}btn-disabled-bg);\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-disabled-border-color);\n opacity: var(--#{$prefix}btn-disabled-opacity);\n @include box-shadow(none);\n }\n}\n\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @if $color == \"light\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: shade-color($value, $btn-hover-bg-shade-amount),\n $hover-border: shade-color($value, $btn-hover-border-shade-amount),\n $active-background: shade-color($value, $btn-active-bg-shade-amount),\n $active-border: shade-color($value, $btn-active-border-shade-amount)\n );\n } @else if $color == \"dark\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: tint-coLine truncated
|
||||
".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n\n &.collapse-horizontal {\n width: 0;\n height: auto;\n @include transition($transition-collapse-width);\n }\n}\n// scss-docs-end collapse-classes\n",
|
||||
"// The dropdown wrapper (`<div>`)\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n // scss-docs-start dropdown-css-vars\n --#{$prefix}dropdown-zindex: #{$zindex-dropdown};\n --#{$prefix}dropdown-min-width: #{$dropdown-min-width};\n --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};\n --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};\n --#{$prefix}dropdown-spacer: #{$dropdown-spacer};\n @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);\n --#{$prefix}dropdown-color: #{$dropdown-color};\n --#{$prefix}dropdown-bg: #{$dropdown-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-border-color};\n --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};\n --#{$prefix}dropdown-border-width: #{$dropdown-border-width};\n --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};\n --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};\n --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};\n --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};\n --#{$prefix}dropdown-header-color: #{$dropdown-header-color};\n --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};\n --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};\n // scss-docs-end dropdown-css-vars\n\n position: absolute;\n z-index: var(--#{$prefix}dropdown-zindex);\n display: none; // none by default, but block on \"open\" of the menu\n min-width: var(--#{$prefix}dropdown-min-width);\n padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x);\n margin: 0; // Override default margin of ul\n @include font-size(var(--#{$prefix}dropdown-font-size));\n color: var(--#{$prefix}dropdown-color);\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: var(--#{$prefix}dropdown-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color);\n @include border-radius(var(--#{$prefix}dropdown-border-radius));\n @include box-shadow(var(--#{$prefix}dropdown-box-shadow));\n\n &[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--#{$prefix}dropdown-spacer);\n }\n\n @if $dropdown-padding-y == 0 {\n > .dropdown-item:first-child,\n > li:first-child .dropdown-item {\n @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n > .dropdown-item:last-child,\n > li:last-child .dropdown-item {\n @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n\n }\n}\n\n// scss-docs-start responsive-breakpoints\n// We deliberately hardcode the `bs-` prefix because we check\n// this custom property in JS to determine Popper's positioning\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-start {\n --bs-position: start;\n\n &[data-bs-popper] {\n right: auto;\n left: 0;\n }\n }\n\n .dropdown-menu#{$infix}-end {\n --bs-position: end;\n\n &[data-bs-popper] {\n right: 0;\n left: auto;\n }\n }\n }\n}\n// scss-docs-end responsive-breakpoints\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropend {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(end);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropstart {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(start);\n &::before {\n vertical-align:Line truncated
|
||||
"// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n }\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n > .btn-check:checked + .btn,\n > .btn-check:focus + .btn,\n > .btn:hover,\n > .btn:focus,\n > .btn:active,\n > .btn.active {\n z-index: 1;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n @include border-radius($btn-border-radius);\n\n // Prevent double borders when buttons are next to each other\n > :not(.btn-check:first-child) + .btn,\n > .btn-group:not(:first-child) {\n margin-left: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn.dropdown-toggle-split:first-child,\n > .btn-group:not(:last-child) > .btn {\n @include border-end-radius(0);\n }\n\n // The left radius should be 0 if the button is:\n // - the \"third or more\" child\n // - the second child and the previous element isn't `.btn-check` (making it the first child visually)\n // - part of a btn-group which isn't the first child\n > .btn:nth-child(n + 3),\n > :not(.btn-check) + .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-start-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropend &::after {\n margin-left: 0;\n }\n\n .dropstart &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn ~ .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n",
|
||||
"// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n // scss-docs-start nav-css-vars\n --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: #{$nav-link-color};\n --#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};\n --#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};\n // scss-docs-end nav-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--#{$prefix}nav-link-padding-y) var(--#{$prefix}nav-link-padding-x);\n @include font-size(var(--#{$prefix}nav-link-font-size));\n font-weight: var(--#{$prefix}nav-link-font-weight);\n color: var(--#{$prefix}nav-link-color);\n text-decoration: if($link-decoration == none, null, none);\n @include transition($nav-link-transition);\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}nav-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n // Disabled state lightens text\n &.disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n // scss-docs-start nav-tabs-css-vars\n --#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};\n --#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};\n --#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};\n --#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};\n --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};\n --#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};\n --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};\n // scss-docs-end nav-tabs-css-vars\n\n border-bottom: var(--#{$prefix}nav-tabs-border-width) solid var(--#{$prefix}nav-tabs-border-color);\n\n .nav-link {\n margin-bottom: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n background: none;\n border: var(--#{$prefix}nav-tabs-border-width) solid transparent;\n @include border-top-radius(var(--#{$prefix}nav-tabs-border-radius));\n\n &:hover,\n &:focus {\n // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link\n isolation: isolate;\n border-color: var(--#{$prefix}nav-tabs-link-hover-border-color);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: var(--#{$prefix}nav-tabs-link-active-color);\n background-color: var(--#{$prefix}nav-tabs-link-active-bg);\n border-color: var(--#{$prefix}nav-tabs-link-active-border-color);\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n // scss-docs-start nav-pills-css-vars\n --#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};\n --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};\n --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};\n // scss-docs-end nav-pills-css-vars\n\n .nav-link {\n background: none;\n border: 0;\n @include border-radius(var(--#{$prefix}nav-pills-border-radius));\n\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: var(--#{$prefix}nav-pills-link-active-color);\n @include gradient-bg(var(--#{$prefix}nav-pills-link-active-bg));\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n.nav-fill,\n.nav-justified {\n .nav-item .nav-link {\n width: 100%; // Make sure button will grow\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n",
|
||||
"// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n // scss-docs-start navbar-css-vars\n --#{$prefix}navbar-padding-x: #{if($navbar-padding-x == null, 0, $navbar-padding-x)};\n --#{$prefix}navbar-padding-y: #{$navbar-padding-y};\n --#{$prefix}navbar-color: #{$navbar-light-color};\n --#{$prefix}navbar-hover-color: #{$navbar-light-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-light-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-light-active-color};\n --#{$prefix}navbar-brand-padding-y: #{$navbar-brand-padding-y};\n --#{$prefix}navbar-brand-margin-end: #{$navbar-brand-margin-end};\n --#{$prefix}navbar-brand-font-size: #{$navbar-brand-font-size};\n --#{$prefix}navbar-brand-color: #{$navbar-light-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-light-brand-hover-color};\n --#{$prefix}navbar-nav-link-padding-x: #{$navbar-nav-link-padding-x};\n --#{$prefix}navbar-toggler-padding-y: #{$navbar-toggler-padding-y};\n --#{$prefix}navbar-toggler-padding-x: #{$navbar-toggler-padding-x};\n --#{$prefix}navbar-toggler-font-size: #{$navbar-toggler-font-size};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-light-toggler-icon-bg)};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-light-toggler-border-color};\n --#{$prefix}navbar-toggler-border-radius: #{$navbar-toggler-border-radius};\n --#{$prefix}navbar-toggler-focus-width: #{$navbar-toggler-focus-width};\n --#{$prefix}navbar-toggler-transition: #{$navbar-toggler-transition};\n // scss-docs-end navbar-css-vars\n\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: var(--#{$prefix}navbar-padding-y) var(--#{$prefix}navbar-padding-x);\n @include gradient-bg();\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n // The `flex-wrap` property is inherited to simplify the expanded navbars\n %container-flex-properties {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n padding-top: var(--#{$prefix}navbar-brand-padding-y);\n padding-bottom: var(--#{$prefix}navbar-brand-padding-y);\n margin-right: var(--#{$prefix}navbar-brand-margin-end);\n @include font-size(var(--#{$prefix}navbar-brand-font-size));\n color: var(--#{$prefix}navbar-brand-color);\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap;\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}navbar-brand-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n // scss-docs-start navbar-nav-css-vars\n --#{$prefix}nav-link-padding-x: 0;\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: var(--#{$prefix}navbar-color);\n --#{$prefix}nav-link-hover-color: var(--#{$prefix}navbar-hover-color);\n --#{$prefix}nav-link-disabled-color: var(--#{$prefix}navbar-disabled-color);\n // scss-docs-end navbar-nav-css-vars\n\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .show > .nav-link,\n .nav-link.active {\n color: var(--#{$prefix}navbar-active-color);\n }\n\n .dropdown-menu {\n position: static;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n color: var(--#{$prefix}navbar-color);\n\n a,\n a:hover,\n a:focus {\n color: var(--#{$prefix}navbar-active-color);\n }\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be eLine truncated
|
||||
"//\n// Base styles\n//\n\n.card {\n // scss-docs-start card-css-vars\n --#{$prefix}card-spacer-y: #{$card-spacer-y};\n --#{$prefix}card-spacer-x: #{$card-spacer-x};\n --#{$prefix}card-title-spacer-y: #{$card-title-spacer-y};\n --#{$prefix}card-border-width: #{$card-border-width};\n --#{$prefix}card-border-color: #{$card-border-color};\n --#{$prefix}card-border-radius: #{$card-border-radius};\n --#{$prefix}card-box-shadow: #{$card-box-shadow};\n --#{$prefix}card-inner-border-radius: #{$card-inner-border-radius};\n --#{$prefix}card-cap-padding-y: #{$card-cap-padding-y};\n --#{$prefix}card-cap-padding-x: #{$card-cap-padding-x};\n --#{$prefix}card-cap-bg: #{$card-cap-bg};\n --#{$prefix}card-cap-color: #{$card-cap-color};\n --#{$prefix}card-height: #{$card-height};\n --#{$prefix}card-color: #{$card-color};\n --#{$prefix}card-bg: #{$card-bg};\n --#{$prefix}card-img-overlay-padding: #{$card-img-overlay-padding};\n --#{$prefix}card-group-margin: #{$card-group-margin};\n // scss-docs-end card-css-vars\n\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: var(--#{$prefix}card-height);\n word-wrap: break-word;\n background-color: var(--#{$prefix}card-bg);\n background-clip: border-box;\n border: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n @include border-radius(var(--#{$prefix}card-border-radius));\n @include box-shadow(var(--#{$prefix}card-box-shadow));\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n padding: var(--#{$prefix}card-spacer-y) var(--#{$prefix}card-spacer-x);\n color: var(--#{$prefix}card-color);\n}\n\n.card-title {\n margin-bottom: var(--#{$prefix}card-title-spacer-y);\n}\n\n.card-subtitle {\n margin-top: calc(-.5 * var(--#{$prefix}card-title-spacer-y)); // stylelint-disable-line function-disallowed-list\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n &:hover {\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n + .card-link {\n margin-left: var(--#{$prefix}card-spacer-x);\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-bottom: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:first-child {\n @include border-radius(var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius) 0 0);\n }\n}\n\n.card-footer {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-top: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:last-child {\n @include border-radius(0 0 var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius));\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-bottom: calc(-1 * var(--#{$prefix}card-cap-padding-y)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n border-bottom: 0;\n\n .nav-link.active {\n background-color: var(--#{$prefix}card-bg);\n border-bottom-color: var(--#{$prefix}card-bg);\n }\n}\n\n.card-header-pills {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--#{$prefix}card-img-overlay-padding);\n @include border-radius(var(--#{$prefix}card-inner-borderLine truncated
|
||||
"//\n// Base styles\n//\n\n.accordion {\n // scss-docs-start accordion-css-vars\n --#{$prefix}accordion-color: #{$accordion-color};\n --#{$prefix}accordion-bg: #{$accordion-bg};\n --#{$prefix}accordion-transition: #{$accordion-transition};\n --#{$prefix}accordion-border-color: #{$accordion-border-color};\n --#{$prefix}accordion-border-width: #{$accordion-border-width};\n --#{$prefix}accordion-border-radius: #{$accordion-border-radius};\n --#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};\n --#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};\n --#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};\n --#{$prefix}accordion-btn-color: #{$accordion-button-color};\n --#{$prefix}accordion-btn-bg: #{$accordion-button-bg};\n --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};\n --#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};\n --#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};\n --#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};\n --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};\n --#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color};\n --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};\n --#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};\n --#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};\n --#{$prefix}accordion-active-color: #{$accordion-button-active-color};\n --#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};\n // scss-docs-end accordion-css-vars\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-btn-padding-x);\n @include font-size($font-size-base);\n color: var(--#{$prefix}accordion-btn-color);\n text-align: left; // Reset button style\n background-color: var(--#{$prefix}accordion-btn-bg);\n border: 0;\n @include border-radius(0);\n overflow-anchor: none;\n @include transition(var(--#{$prefix}accordion-transition));\n\n &:not(.collapsed) {\n color: var(--#{$prefix}accordion-active-color);\n background-color: var(--#{$prefix}accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0 var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list\n\n &::after {\n background-image: var(--#{$prefix}accordion-btn-active-icon);\n transform: var(--#{$prefix}accordion-btn-icon-transform);\n }\n }\n\n // Accordion icon\n &::after {\n flex-shrink: 0;\n width: var(--#{$prefix}accordion-btn-icon-width);\n height: var(--#{$prefix}accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--#{$prefix}accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--#{$prefix}accordion-btn-icon-width);\n @include transition(var(--#{$prefix}accordion-btn-icon-transition));\n }\n\n &:hover {\n z-index: 2;\n }\n\n &:focus {\n z-index: 3;\n border-color: var(--#{$prefix}accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);\n }\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--#{$prefix}accordion-color);\n background-color: var(--#{$prefix}accordion-bg);\n border: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color);\n\n &:first-of-type {\n @include border-top-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n @include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n &:not(:first-of-type) {\n border-top: 0;\n }\n\n // Only set a border-radius on the last item if the accordion is collapsed\n &:last-of-type {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n &.collapsed {\n @include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n .accordion-collapse {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n }\n }\n}\n\n.accordion-body {\n padding: var(--#{$prefix}accordion-body-padding-y) var(--#{$prefix}accordion-body-padding-x);\n}\n\n\n// Flush accordion items\n//\n// Remove borders and border-radius to keep accordion items edge-to-edge.\n\n.accordion-flush {\n .accordion-collapse {\n border-width: 0;\n }\n\n .accordion-item {\n border-right: 0;\n border-left: 0;\n @include border-radius(0);\n\n &:first-child { border-top: 0; }\n &:last-child { border-bottom: 0; }\n\n .accordion-button {\n &,\n &.collapsed {\n @include border-radius(0);\n }\n }\n }\n}\n",
|
||||
".breadcrumb {\n // scss-docs-start breadcrumb-css-vars\n --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x};\n --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y};\n --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom};\n @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size);\n --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg};\n --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius};\n --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color};\n --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x};\n --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color};\n // scss-docs-end breadcrumb-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x);\n margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom);\n @include font-size(var(--#{$prefix}breadcrumb-font-size));\n list-style: none;\n background-color: var(--#{$prefix}breadcrumb-bg);\n @include border-radius(var(--#{$prefix}breadcrumb-border-radius));\n}\n\n.breadcrumb-item {\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: var(--#{$prefix}breadcrumb-item-padding-x);\n\n &::before {\n float: left; // Suppress inline spacings and underlining of the separator\n padding-right: var(--#{$prefix}breadcrumb-item-padding-x);\n color: var(--#{$prefix}breadcrumb-divider-color);\n content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{\"/* rtl:\"} var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{\"*/\"};\n }\n }\n\n &.active {\n color: var(--#{$prefix}breadcrumb-item-active-color);\n }\n}\n",
|
||||
".pagination {\n // scss-docs-start pagination-css-vars\n --#{$prefix}pagination-padding-x: #{$pagination-padding-x};\n --#{$prefix}pagination-padding-y: #{$pagination-padding-y};\n @include rfs($pagination-font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-color: #{$pagination-color};\n --#{$prefix}pagination-bg: #{$pagination-bg};\n --#{$prefix}pagination-border-width: #{$pagination-border-width};\n --#{$prefix}pagination-border-color: #{$pagination-border-color};\n --#{$prefix}pagination-border-radius: #{$pagination-border-radius};\n --#{$prefix}pagination-hover-color: #{$pagination-hover-color};\n --#{$prefix}pagination-hover-bg: #{$pagination-hover-bg};\n --#{$prefix}pagination-hover-border-color: #{$pagination-hover-border-color};\n --#{$prefix}pagination-focus-color: #{$pagination-focus-color};\n --#{$prefix}pagination-focus-bg: #{$pagination-focus-bg};\n --#{$prefix}pagination-focus-box-shadow: #{$pagination-focus-box-shadow};\n --#{$prefix}pagination-active-color: #{$pagination-active-color};\n --#{$prefix}pagination-active-bg: #{$pagination-active-bg};\n --#{$prefix}pagination-active-border-color: #{$pagination-active-border-color};\n --#{$prefix}pagination-disabled-color: #{$pagination-disabled-color};\n --#{$prefix}pagination-disabled-bg: #{$pagination-disabled-bg};\n --#{$prefix}pagination-disabled-border-color: #{$pagination-disabled-border-color};\n // scss-docs-end pagination-css-vars\n\n display: flex;\n @include list-unstyled();\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--#{$prefix}pagination-padding-y) var(--#{$prefix}pagination-padding-x);\n @include font-size(var(--#{$prefix}pagination-font-size));\n color: var(--#{$prefix}pagination-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}pagination-bg);\n border: var(--#{$prefix}pagination-border-width) solid var(--#{$prefix}pagination-border-color);\n @include transition($pagination-transition);\n\n &:hover {\n z-index: 2;\n color: var(--#{$prefix}pagination-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}pagination-hover-bg);\n border-color: var(--#{$prefix}pagination-hover-border-color);\n }\n\n &:focus {\n z-index: 3;\n color: var(--#{$prefix}pagination-focus-color);\n background-color: var(--#{$prefix}pagination-focus-bg);\n outline: $pagination-focus-outline;\n box-shadow: var(--#{$prefix}pagination-focus-box-shadow);\n }\n\n &.active,\n .active > & {\n z-index: 3;\n color: var(--#{$prefix}pagination-active-color);\n @include gradient-bg(var(--#{$prefix}pagination-active-bg));\n border-color: var(--#{$prefix}pagination-active-border-color);\n }\n\n &.disabled,\n .disabled > & {\n color: var(--#{$prefix}pagination-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}pagination-disabled-bg);\n border-color: var(--#{$prefix}pagination-disabled-border-color);\n }\n}\n\n.page-item {\n &:not(:first-child) .page-link {\n margin-left: $pagination-margin-start;\n }\n\n @if $pagination-margin-start == ($pagination-border-width * -1) {\n &:first-child {\n .page-link {\n @include border-start-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n\n &:last-child {\n .page-link {\n @include border-end-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n } @else {\n // Add border-radius to all pageLinks in case they have left margin\n .page-link {\n @include border-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm);\n}\n",
|
||||
"// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n // scss-docs-start badge-css-vars\n --#{$prefix}badge-padding-x: #{$badge-padding-x};\n --#{$prefix}badge-padding-y: #{$badge-padding-y};\n @include rfs($badge-font-size, --#{$prefix}badge-font-size);\n --#{$prefix}badge-font-weight: #{$badge-font-weight};\n --#{$prefix}badge-color: #{$badge-color};\n --#{$prefix}badge-border-radius: #{$badge-border-radius};\n // scss-docs-end badge-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);\n @include font-size(var(--#{$prefix}badge-font-size));\n font-weight: var(--#{$prefix}badge-font-weight);\n line-height: 1;\n color: var(--#{$prefix}badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius(var(--#{$prefix}badge-border-radius));\n @include gradient-bg();\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n",
|
||||
"//\n// Base styles\n//\n\n.alert {\n // scss-docs-start alert-css-vars\n --#{$prefix}alert-bg: transparent;\n --#{$prefix}alert-padding-x: #{$alert-padding-x};\n --#{$prefix}alert-padding-y: #{$alert-padding-y};\n --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};\n --#{$prefix}alert-color: inherit;\n --#{$prefix}alert-border-color: transparent;\n --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);\n --#{$prefix}alert-border-radius: #{$alert-border-radius};\n // scss-docs-end alert-css-vars\n\n position: relative;\n padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);\n margin-bottom: var(--#{$prefix}alert-margin-bottom);\n color: var(--#{$prefix}alert-color);\n background-color: var(--#{$prefix}alert-bg);\n border: var(--#{$prefix}alert-border);\n @include border-radius(var(--#{$prefix}alert-border-radius));\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $alert-dismissible-padding-r;\n\n // Adjust close link position\n .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: $stretched-link-z-index + 1;\n padding: $alert-padding-y * 1.25 $alert-padding-x;\n }\n}\n\n\n// scss-docs-start alert-modifiers\n// Generate contextual modifier classes for colorizing the alert.\n\n@each $state, $value in $theme-colors {\n $alert-background: shift-color($value, $alert-bg-scale);\n $alert-border: shift-color($value, $alert-border-scale);\n $alert-color: shift-color($value, $alert-color-scale);\n\n @if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) {\n $alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale));\n }\n .alert-#{$state} {\n @include alert-variant($alert-background, $alert-border, $alert-color);\n }\n}\n// scss-docs-end alert-modifiers\n",
|
||||
"// Disable animation if transitions are disabled\n\n// scss-docs-start progress-keyframes\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n 0% { background-position-x: $progress-height; }\n }\n}\n// scss-docs-end progress-keyframes\n\n.progress {\n // scss-docs-start progress-css-vars\n --#{$prefix}progress-height: #{$progress-height};\n @include rfs($progress-font-size, --#{$prefix}progress-font-size);\n --#{$prefix}progress-bg: #{$progress-bg};\n --#{$prefix}progress-border-radius: #{$progress-border-radius};\n --#{$prefix}progress-box-shadow: #{$progress-box-shadow};\n --#{$prefix}progress-bar-color: #{$progress-bar-color};\n --#{$prefix}progress-bar-bg: #{$progress-bar-bg};\n --#{$prefix}progress-bar-transition: #{$progress-bar-transition};\n // scss-docs-end progress-css-vars\n\n display: flex;\n height: var(--#{$prefix}progress-height);\n overflow: hidden; // force rounded corners by cropping it\n @include font-size(var(--#{$prefix}progress-font-size));\n background-color: var(--#{$prefix}progress-bg);\n @include border-radius(var(--#{$prefix}progress-border-radius));\n @include box-shadow(var(--#{$prefix}progress-box-shadow));\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--#{$prefix}progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--#{$prefix}progress-bar-bg);\n @include transition(var(--#{$prefix}progress-bar-transition));\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: var(--#{$prefix}progress-height) var(--#{$prefix}progress-height);\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: $progress-bar-animation-timing progress-bar-stripes;\n\n @if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n",
|
||||
"// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // scss-docs-start list-group-css-vars\n --#{$prefix}list-group-color: #{$list-group-color};\n --#{$prefix}list-group-bg: #{$list-group-bg};\n --#{$prefix}list-group-border-color: #{$list-group-border-color};\n --#{$prefix}list-group-border-width: #{$list-group-border-width};\n --#{$prefix}list-group-border-radius: #{$list-group-border-radius};\n --#{$prefix}list-group-item-padding-x: #{$list-group-item-padding-x};\n --#{$prefix}list-group-item-padding-y: #{$list-group-item-padding-y};\n --#{$prefix}list-group-action-color: #{$list-group-action-color};\n --#{$prefix}list-group-action-hover-color: #{$list-group-action-hover-color};\n --#{$prefix}list-group-action-hover-bg: #{$list-group-hover-bg};\n --#{$prefix}list-group-action-active-color: #{$list-group-action-active-color};\n --#{$prefix}list-group-action-active-bg: #{$list-group-action-active-bg};\n --#{$prefix}list-group-disabled-color: #{$list-group-disabled-color};\n --#{$prefix}list-group-disabled-bg: #{$list-group-disabled-bg};\n --#{$prefix}list-group-active-color: #{$list-group-active-color};\n --#{$prefix}list-group-active-bg: #{$list-group-active-bg};\n --#{$prefix}list-group-active-border-color: #{$list-group-active-border-color};\n // scss-docs-end list-group-css-vars\n\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius(var(--#{$prefix}list-group-border-radius));\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n\n > .list-group-item::before {\n // Increments only this instance of the section counter\n content: counters(section, \".\") \". \";\n counter-increment: section;\n }\n}\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: var(--#{$prefix}list-group-action-color);\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n &:hover,\n &:focus {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--#{$prefix}list-group-action-hover-bg);\n }\n\n &:active {\n color: var(--#{$prefix}list-group-action-active-color);\n background-color: var(--#{$prefix}list-group-action-active-bg);\n }\n}\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--#{$prefix}list-group-item-padding-y) var(--#{$prefix}list-group-item-padding-x);\n color: var(--#{$prefix}list-group-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}list-group-bg);\n border: var(--#{$prefix}list-group-border-width) solid var(--#{$prefix}list-group-border-color);\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}list-group-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}list-group-disabled-bg);\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-active-color);\n background-color: var(--#{$prefix}list-group-active-bg);\n border-color: var(--#{$prefix}list-group-active-border-color);\n }\n\n // stylelint-disable-next-line scss/selector-no-redundant-nesting-selector\n & + .list-group-item {\n border-top-width: 0;\n\n &.active {\n margin-top: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-top-width: var(--#{$prefix}list-group-border-width);\n }\n }\n}\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child:not(:last-child) {\n @include border-bottom-start-radius(var(--#{$prefix}list-group-border-radius));\n @include border-top-end-radius(0);\n }\n\n &:last-child:not(:first-child) {\n @include border-top-end-radius(var(--#{$prefix}list-group-border-radius));\n @include bordLine truncated
|
||||
"// Transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n box-sizing: content-box;\n width: $btn-close-width;\n height: $btn-close-height;\n padding: $btn-close-padding-y $btn-close-padding-x;\n color: $btn-close-color;\n background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements\n border: 0; // for button elements\n @include border-radius();\n opacity: $btn-close-opacity;\n\n // Override <a>'s hover style\n &:hover {\n color: $btn-close-color;\n text-decoration: none;\n opacity: $btn-close-hover-opacity;\n }\n\n &:focus {\n outline: 0;\n box-shadow: $btn-close-focus-shadow;\n opacity: $btn-close-focus-opacity;\n }\n\n &:disabled,\n &.disabled {\n pointer-events: none;\n user-select: none;\n opacity: $btn-close-disabled-opacity;\n }\n}\n\n.btn-close-white {\n filter: $btn-close-white-filter;\n}\n",
|
||||
".toast {\n // scss-docs-start toast-css-vars\n --#{$prefix}toast-zindex: #{$zindex-toast};\n --#{$prefix}toast-padding-x: #{$toast-padding-x};\n --#{$prefix}toast-padding-y: #{$toast-padding-y};\n --#{$prefix}toast-spacing: #{$toast-spacing};\n --#{$prefix}toast-max-width: #{$toast-max-width};\n @include rfs($toast-font-size, --#{$prefix}toast-font-size);\n --#{$prefix}toast-color: #{$toast-color};\n --#{$prefix}toast-bg: #{$toast-background-color};\n --#{$prefix}toast-border-width: #{$toast-border-width};\n --#{$prefix}toast-border-color: #{$toast-border-color};\n --#{$prefix}toast-border-radius: #{$toast-border-radius};\n --#{$prefix}toast-box-shadow: #{$toast-box-shadow};\n --#{$prefix}toast-header-color: #{$toast-header-color};\n --#{$prefix}toast-header-bg: #{$toast-header-background-color};\n --#{$prefix}toast-header-border-color: #{$toast-header-border-color};\n // scss-docs-end toast-css-vars\n\n width: var(--#{$prefix}toast-max-width);\n max-width: 100%;\n @include font-size(var(--#{$prefix}toast-font-size));\n color: var(--#{$prefix}toast-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}toast-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-border-color);\n box-shadow: var(--#{$prefix}toast-box-shadow);\n @include border-radius(var(--#{$prefix}toast-border-radius));\n\n &.showing {\n opacity: 0;\n }\n\n &:not(.show) {\n display: none;\n }\n}\n\n.toast-container {\n --#{$prefix}toast-zindex: #{$zindex-toast};\n\n position: absolute;\n z-index: var(--#{$prefix}toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n\n > :not(:last-child) {\n margin-bottom: var(--#{$prefix}toast-spacing);\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--#{$prefix}toast-padding-y) var(--#{$prefix}toast-padding-x);\n color: var(--#{$prefix}toast-header-color);\n background-color: var(--#{$prefix}toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-header-border-color);\n @include border-top-radius(calc(var(--#{$prefix}toast-border-radius) - var(--#{$prefix}toast-border-width)));\n\n .btn-close {\n margin-right: calc(-.5 * var(--#{$prefix}toast-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: var(--#{$prefix}toast-padding-x);\n }\n}\n\n.toast-body {\n padding: var(--#{$prefix}toast-padding-x);\n word-wrap: break-word;\n}\n",
|
||||
"// stylelint-disable function-disallowed-list\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n// Container that the modal scrolls within\n.modal {\n // scss-docs-start modal-css-vars\n --#{$prefix}modal-zindex: #{$zindex-modal};\n --#{$prefix}modal-width: #{$modal-md};\n --#{$prefix}modal-padding: #{$modal-inner-padding};\n --#{$prefix}modal-margin: #{$modal-dialog-margin};\n --#{$prefix}modal-color: #{$modal-content-color};\n --#{$prefix}modal-bg: #{$modal-content-bg};\n --#{$prefix}modal-border-color: #{$modal-content-border-color};\n --#{$prefix}modal-border-width: #{$modal-content-border-width};\n --#{$prefix}modal-border-radius: #{$modal-content-border-radius};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-xs};\n --#{$prefix}modal-inner-border-radius: #{$modal-content-inner-border-radius};\n --#{$prefix}modal-header-padding-x: #{$modal-header-padding-x};\n --#{$prefix}modal-header-padding-y: #{$modal-header-padding-y};\n --#{$prefix}modal-header-padding: #{$modal-header-padding}; // Todo in v6: Split this padding into x and y\n --#{$prefix}modal-header-border-color: #{$modal-header-border-color};\n --#{$prefix}modal-header-border-width: #{$modal-header-border-width};\n --#{$prefix}modal-title-line-height: #{$modal-title-line-height};\n --#{$prefix}modal-footer-gap: #{$modal-footer-margin-between};\n --#{$prefix}modal-footer-bg: #{$modal-footer-bg};\n --#{$prefix}modal-footer-border-color: #{$modal-footer-border-color};\n --#{$prefix}modal-footer-border-width: #{$modal-footer-border-width};\n // scss-docs-end modal-css-vars\n\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--#{$prefix}modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--#{$prefix}modal-margin);\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n\n .modal-content {\n max-height: 100%;\n overflow: hidden;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: var(--#{$prefix}modal-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}modal-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}modal-border-width) solid var(--#{$prefix}modal-border-color);\n @include border-radius(var(--#{$prefix}modal-border-radius));\n @include box-shadow(var(--#{$prefix}modal-box-shadow));\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n // scss-docs-start modal-backdrop-css-vars\n --#{$prefix}backdrop-zindex: #{$zindex-modal-backdrop};\n --#{$prefix}backdrop-bg: #{$modal-backdrop-bg};\n --#{$prefix}backdrop-opacity: #{$modal-backdrop-opacity};\n // scss-docs-end modal-backdrop-css-vars\n\n @include overlay-backdrop(var(--#{$prefix}backdrop-zindex), var(--#{$prefix}backdrop-bg), var(--#{$prefix}backdrop-opacity));\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: var(--#{$prefix}modal-header-padding);\n border-bottom: var(--#{$prefix}modal-header-border-width) solid var(--#{$prefix}modal-header-border-color);\n @include border-top-radius(var(--#{$prefix}modal-inner-border-radius));\n\n .btn-close {\n padding: calc(var(--#{$prefix}modal-header-padding-y) * .5) calc(var(-Line truncated
|
||||
"// Base class\n.tooltip {\n // scss-docs-start tooltip-css-vars\n --#{$prefix}tooltip-zindex: #{$zindex-tooltip};\n --#{$prefix}tooltip-max-width: #{$tooltip-max-width};\n --#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};\n --#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};\n --#{$prefix}tooltip-margin: #{$tooltip-margin};\n @include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);\n --#{$prefix}tooltip-color: #{$tooltip-color};\n --#{$prefix}tooltip-bg: #{$tooltip-bg};\n --#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};\n --#{$prefix}tooltip-opacity: #{$tooltip-opacity};\n --#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};\n --#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};\n // scss-docs-end tooltip-css-vars\n\n z-index: var(--#{$prefix}tooltip-zindex);\n display: block;\n padding: var(--#{$prefix}tooltip-arrow-height);\n margin: var(--#{$prefix}tooltip-margin);\n @include deprecate(\"`$tooltip-margin`\", \"v5\", \"v5.x\", true);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}tooltip-font-size));\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: var(--#{$prefix}tooltip-opacity); }\n\n .tooltip-arrow {\n display: block;\n width: var(--#{$prefix}tooltip-arrow-width);\n height: var(--#{$prefix}tooltip-arrow-height);\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top .tooltip-arrow {\n bottom: 0;\n\n &::before {\n top: -1px;\n border-width: var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-top-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow {\n left: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n right: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-right-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-bottom .tooltip-arrow {\n top: 0;\n\n &::before {\n bottom: -1px;\n border-width: 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-bottom-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow {\n right: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n left: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-left-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-tooltip-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-tooltip-start;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: var(--#{$prefix}tooltip-max-width);\n padding: var(--#{$prefix}tooltip-padding-y) var(--#{$prefix}tooltip-padding-x);\n color: var(--#{$prefix}tooltip-color);\n text-align: center;\n background-color: var(--#{$prefix}tooltip-bg);\n @include border-radius(var(--#{$prefix}tooltip-border-radius));\n}\n",
|
||||
".popover {\n // scss-docs-start popover-css-vars\n --#{$prefix}popover-zindex: #{$zindex-popover};\n --#{$prefix}popover-max-width: #{$popover-max-width};\n @include rfs($popover-font-size, --#{$prefix}popover-font-size);\n --#{$prefix}popover-bg: #{$popover-bg};\n --#{$prefix}popover-border-width: #{$popover-border-width};\n --#{$prefix}popover-border-color: #{$popover-border-color};\n --#{$prefix}popover-border-radius: #{$popover-border-radius};\n --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};\n --#{$prefix}popover-box-shadow: #{$popover-box-shadow};\n --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};\n --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};\n @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);\n --#{$prefix}popover-header-color: #{$popover-header-color};\n --#{$prefix}popover-header-bg: #{$popover-header-bg};\n --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};\n --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};\n --#{$prefix}popover-body-color: #{$popover-body-color};\n --#{$prefix}popover-arrow-width: #{$popover-arrow-width};\n --#{$prefix}popover-arrow-height: #{$popover-arrow-height};\n --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);\n // scss-docs-end popover-css-vars\n\n z-index: var(--#{$prefix}popover-zindex);\n display: block;\n max-width: var(--#{$prefix}popover-max-width);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}popover-font-size));\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: var(--#{$prefix}popover-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-radius(var(--#{$prefix}popover-border-radius));\n @include box-shadow(var(--#{$prefix}popover-box-shadow));\n\n .popover-arrow {\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n height: var(--#{$prefix}popover-arrow-height);\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n }\n }\n}\n\n.bs-popover-top {\n > .popover-arrow {\n bottom: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n bottom: 0;\n border-top-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n bottom: var(--#{$prefix}popover-border-width);\n border-top-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end {\n > .popover-arrow {\n left: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n left: 0;\n border-right-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n left: var(--#{$prefix}popover-border-width);\n border-right-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-bottom {\n > .popover-arrow {\n top: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n top: 0;\n border-bottom-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n top: var(--#{$prefix}popover-border-width);\n border-bottom-color: var(--#{$prefix}popover-bg);\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n margin-left: calc(-.5 * var(--#{$prefix}popover-arrow-width)); // stylelint-disable-lineLine truncated
|
||||
"// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-start and .carousel-item-end is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-start and .active.carousel-item-end is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-start,\n .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-start,\n .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n padding: 0;\n color: $carousel-control-color;\n text-align: center;\n background: none;\n border: 0;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n &:hover,\n &:focus {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null);\n}\n.carousel-control-next {\n right: 0;\n background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null);\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n// Optional indicator pips/controls\n//\n// Add a container (such as a list) with the following class and add an item (ideally a focusable control,\n// like a button) with data-bs-target for each slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-bottom: 1rem;\n margin-left: $carousel-control-width;\n list-style: none;\n\n [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n padding: 0;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n border: 0;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: $carousel-indicator-opacity;\n @include transition($cLine truncated
|
||||
"//\n// Rotating border\n//\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--#{$prefix}spinner-width);\n height: var(--#{$prefix}spinner-height);\n vertical-align: var(--#{$prefix}spinner-vertical-align);\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: var(--#{$prefix}spinner-animation-speed) linear infinite var(--#{$prefix}spinner-animation-name);\n}\n\n// scss-docs-start spinner-border-keyframes\n@keyframes spinner-border {\n to { transform: rotate(360deg) #{\"/* rtl:ignore */\"}; }\n}\n// scss-docs-end spinner-border-keyframes\n\n.spinner-border {\n // scss-docs-start spinner-border-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-border-width: #{$spinner-border-width};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-border;\n // scss-docs-end spinner-border-css-vars\n\n border: var(--#{$prefix}spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n // scss-docs-start spinner-border-sm-css-vars\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n --#{$prefix}spinner-border-width: #{$spinner-border-width-sm};\n // scss-docs-end spinner-border-sm-css-vars\n}\n\n//\n// Growing circle\n//\n\n// scss-docs-start spinner-grow-keyframes\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n// scss-docs-end spinner-grow-keyframes\n\n.spinner-grow {\n // scss-docs-start spinner-grow-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-grow;\n // scss-docs-end spinner-grow-css-vars\n\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n}\n\n@if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2};\n }\n }\n}\n",
|
||||
"// stylelint-disable function-disallowed-list\n\n%offcanvas-css-vars {\n // scss-docs-start offcanvas-css-vars\n --#{$prefix}offcanvas-zindex: #{$zindex-offcanvas};\n --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};\n --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};\n --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};\n --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};\n --#{$prefix}offcanvas-color: #{$offcanvas-color};\n --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};\n --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};\n --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};\n --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};\n // scss-docs-end offcanvas-css-vars\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @extend %offcanvas-css-vars;\n }\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @include media-breakpoint-down($next) {\n position: fixed;\n bottom: 0;\n z-index: var(--#{$prefix}offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--#{$prefix}offcanvas-color);\n visibility: hidden;\n background-color: var(--#{$prefix}offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n @include box-shadow(var(--#{$prefix}offcanvas-box-shadow));\n @include transition(transform $offcanvas-transition-duration ease-in-out);\n\n &.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-right: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(-100%);\n }\n\n &.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-left: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(100%);\n }\n\n &.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-bottom: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(-100%);\n }\n\n &.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-top: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(100%);\n }\n\n &.showing,\n &.show:not(.hiding) {\n transform: none;\n }\n\n &.showing,\n &.hiding,\n &.show {\n visibility: visible;\n }\n }\n\n @if not ($infix == \"\") {\n @include media-breakpoint-up($next) {\n --#{$prefix}offcanvas-height: auto;\n --#{$prefix}offcanvas-border-width: 0;\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n // Reset `background-color` in case `.bg-*` classes are used in offcanvas\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n }\n}\n\n.offcanvas-backdrop {\n @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n\n .btn-close {\n padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5);\n margin-top: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n margin-right: calc(-.5 * var(--#{$prefix}offcanvas-padding-x));\n margin-bottom: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n }\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: $offcanvas-title-line-height;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n overflow-y: auto;\n}\n",
|
||||
".placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: $placeholder-opacity-max;\n\n &.btn::before {\n display: inline-block;\n content: \"\";\n }\n}\n\n// Sizing\n.placeholder-xs {\n min-height: .6em;\n}\n\n.placeholder-sm {\n min-height: .8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n// Animation\n.placeholder-glow {\n .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n }\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: $placeholder-opacity-min;\n }\n}\n\n.placeholder-wave {\n mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n",
|
||||
"@import \"helpers/clearfix\";\n@import \"helpers/color-bg\";\n@import \"helpers/colored-links\";\n@import \"helpers/ratio\";\n@import \"helpers/position\";\n@import \"helpers/stacks\";\n@import \"helpers/visually-hidden\";\n@import \"helpers/stretched-link\";\n@import \"helpers/text-truncation\";\n@import \"helpers/vr\";\n",
|
||||
".clearfix {\n @include clearfix();\n}\n",
|
||||
"// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n",
|
||||
"@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value !important; // stylelint-disable-line declaration-no-important\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n}\n",
|
||||
"// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n",
|
||||
"// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n",
|
||||
"// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n",
|
||||
"//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n",
|
||||
"//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n",
|
||||
"//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n",
|
||||
".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n",
|
||||
"// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n",
|
||||
"/*!\n\n=========================================================\n* Material Dashboard 2 - v3.1.0\n=========================================================\n\n* Product Page: https://www.creative-tim.com/product/material-dashboard\n* Copyright 2023 Creative Tim (https://www.creative-tim.com)\n* Licensed under MIT (site.license)\n\n* Coded by www.creative-tim.com\n\n=========================================================\n\n* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\n*/\n\n// {{ site.product.name }} components\n\n// Variables\n@import \"variables/navbar-vertical\";\n@import \"variables/social-buttons\";\n@import \"variables/breadcrumb\";\n\n// Mixin\n@import \"mixins/mixins\";\n\n// Core Components - extra styling\n@import \"alert\";\n@import \"avatars\";\n@import \"badge\";\n@import \"buttons\";\n@import \"breadcrumbs\";\n@import \"cards\";\n@import \"dark-version\";\n@import \"dropdown\";\n@import \"dropup\";\n@import \"header\";\n@import \"fixed-plugin\";\n@import \"forms/forms\";\n@import \"footer\";\n@import \"gradients\";\n@import \"icons\";\n@import \"info-areas\";\n@import \"misc\";\n@import \"navbar\";\n@import \"navbar-vertical\";\n@import \"nav\";\n@import \"pagination\";\n@import \"popovers\";\n@import \"progress\";\n@import \"rtl\";\n@import \"ripple\";\n@import \"social-buttons\";\n@import \"tables\";\n@import \"timeline\";\n@import \"tilt\";\n@import \"tooltips\";\n@import \"typography\";\n\n// Plugins\n@import \"plugins/free/plugins\";\n",
|
||||
"$navbar-light-bg: #FBFBFB !default;\n$navbar-light-hover-bg: darken($gray-100, 5%) !default;\n$navbar-light-active-bg: darken($gray-100, 5%) !default;\n$navbar-light-border-color: rgba($black, .05) !default;\n$navbar-light-color: rgba($black, .6) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-border-color: transparent !default;\n// Vertical navbar\n$sidenav-header-width: 4.875rem !default;\n$sidenav-card-opacity: .65 !default;\n$navbar-vertical-box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15) !default;\n$navbar-vertical-border-color: rgba($black, .05) !default;\n$navbar-vertical-width: 3.875rem !default;\n$navbar-vertical-open-width: 15.625rem !default;\n$navbar-vertical-padding-x: 1rem !default;\n$navbar-vertical-nav-link-padding-x: 1rem !default;\n$navbar-vertical-nav-link-padding-y: .75rem !default;\n$navbar-vertical-sidenav-normal-ml: 4.01rem !default;\n$navbar-vertical-m: 1rem !default;\n$navbar-vertical-inner: calc(100vh - 200px) !default;\n$navbar-icon-min-width: 1.8rem !default;\n$navbar-icon-margin-left: 0.15rem !default;\n$navbar-icon-material-margin-left: 2px !default;\n$navbar-breadcrumb-padding-y: $nav-link-padding-y !default;\n$navbar-breadcrumb-padding-x: 0 !default;\n$navbar-light-border-color: $border-color !default;\n$navbar-dark-bg: transparent !default;\n$navbar-dark-hover-bg: rgba(255, 255, 255, .1) !default;\n$navbar-dark-active-bg: rgba(255, 255, 255, .1) !default;\n$navbar-dark-border-color: rgba(255, 255, 255, .1) !default;\n$navbar-dark-color: rgba($white, .95) !default;\n$navbar-dark-hover-color: rgba($white, .65) !default;\n$navbar-dark-active-color: rgba($white, .65) !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-border-color: transparent !default;\n$navbar-padding-y: 1rem !default;\n$navbar-padding-x: 1rem !default;\n$navbar-nav-link-padding-x: 1rem !default;\n$navbar-nav-link-padding-y: 1rem !default;\n$navbar-nav-link-font-size: .875rem !default;\n$navbar-nav-link-font-weight: 300 !default;\n$navbar-nav-link-text-transform: normal !default;\n$navbar-nav-link-letter-spacing: 0 !default;\n$navbar-nav-link-border-radius: $border-radius-md !default;\n$font-size-xs: ($font-size-base * .75);\n$transition-base-time: .25s;\n$transition-cubic-bezier: all $transition-base-time cubic-bezier(.68, -0.55, .265, 1.55) !default;\n\n// Navbar collapse\n\n$navbar-vertical-collapse-margin-left: 1.35rem !default;\n$navbar-vertical-collapse-left: -18px !default;\n$navbar-vertical-collapse-top: 50% !default;\n$navbar-vertical-collapse-translate: translate(0,-50%) !default;\n$navbar-vertical-hidden-width: 6rem !default;\n\n// Hover effect\n$navbar-vertical-hover-bg-color: rgba(199, 199, 199, 0.2) !default;\n\n// RTL Page\n\n$rtl-sidebar-bullet-right: -1.125rem !default;\n$rtl-sidebar-hover-padding-right: 2.5rem !default;\n",
|
||||
"// Social Buttons\n\n$facebook: #3b5998 !default;\n$facebook-states: darken($facebook, 5%) !default;\n$twitter: #55acee !default;\n$twitter-states: darken($twitter, 5%) !default;\n$instagram: #125688 !default;\n$instagram-states: darken($instagram, 6%) !default;\n$linkedin: #0077B5 !default;\n$linkedin-states: darken($linkedin, 5%) !default;\n$pinterest: #cc2127 !default;\n$pinterest-states: darken($pinterest, 6%) !default;\n$youtube: #e52d27 !default;\n$youtube-states: darken($youtube, 6%) !default;\n$dribbble: #ea4c89 !default;\n$dribbble-states: darken($dribbble, 6%) !default;\n$github: #24292E !default;\n$github-states: darken($github, 6%) !default;\n$reddit: #ff4500 !default;\n$reddit-states: darken($reddit, 6%) !default;\n$tumblr: #35465c !default;\n$tumblr-states: darken($tumblr, 6%) !default;\n$behance: #1769ff !default;\n$behance-states: darken($behance, 6%) !default;\n$vimeo: #1AB7EA !default;\n$vimeo-states: darken($vimeo, 6%) !default;\n$slack: #3aaf85 !default;\n$slack-states: darken($slack, 6%) !default;\n",
|
||||
"$breadcrumb-dark-bg: $dark !default;\n$breadcrumb-dark-color: $gray-100 !default;\n$breadcrumb-dark-hover-color: $white !default;\n$breadcrumb-dark-active-color: $gray-300 !default;\n$breadcrumb-dark-divider-color: $gray-500 !default;\n",
|
||||
"@import \"badge\";\n@import \"buttons\";\n@import \"hover\";\n@import \"colored-shadows\";\n@import \"social-buttons\";\n@import \"vendor\";\n",
|
||||
"@mixin badge-variant($bg) {\n\tcolor: saturate(darken($bg, 10%), 10);\n background-color: lighten($bg, 32%);\n\n \t&[href] {\n\t @include hover-focus {\n\t color: color-yiq($bg);\n\t text-decoration: none;\n\t background-color: darken($bg, 12%);\n\t }\n\t}\n}\n",
|
||||
"@mixin colored-shadows($value){\n // new box shadow optimized for Tablets and Phones\n box-shadow: 0 3px 3px 0 rgba($value, .15),\n 0 3px 1px -2px rgba($value, .2),\n 0 1px 5px 0 rgba($value, .15);\n}\n\n@mixin colored-shadows-hover($value){\n box-shadow: 0 14px 26px -12px rgba($value, .4),\n 0 4px 23px 0 rgba($value, .15),\n 0 8px 10px -5px rgba($value, .2);\n}\n",
|
||||
"\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n",
|
||||
"@mixin shadow-big-color($color){\n // new box shadow optimized for Tablets and Phones\n box-shadow: 0 4px 20px 0px rgba(0, 0, 0, .14),\n 0 7px 10px -5px rgba($color, 0.4)\n}\n",
|
||||
"// for social buttons\n@mixin social-buttons-color ($color, $state-color) {\n background-color: $color;\n color: $white;\n\n &:focus,\n &:hover {\n background-color: $state-color;\n color: $white;\n }\n &:active,\n &:focus,\n &:active:focus {\n box-shadow: none;\n }\n\n &.btn-simple {\n color: $state-color;\n background-color: transparent;\n background-image: none !important;\n box-shadow: none;\n border: none;\n\n &:hover,\n &:focus,\n &:hover:focus,\n &:active,\n &:hover:focus:active {\n color: $state-color;\n background: transparent !important;\n box-shadow: none !important;\n }\n }\n\n\n &.btn-neutral {\n color: $color;\n background-color: $white;\n\n &:hover,\n &:focus,\n &:active {\n color: $state-color;\n }\n }\n}\n",
|
||||
"@mixin transform-translate-y($value) {\n -webkit-transform: translate3d(0, $value, 0);\n -moz-transform: translate3d(0, $value, 0);\n -o-transform: translate3d(0, $value, 0);\n -ms-transform: translate3d(0, $value, 0);\n transform: translate3d(0, $value, 0);\n}\n@mixin perspective($value) {\n -webkit-perspective: $value;\n -moz-perspective: $value;\n -o-perspective: $value;\n -ms-perspective: $value;\n perspective: $value;\n}\n@mixin transitions($time, $type) {\n -webkit-transition: all $time $type;\n -moz-transition: all $time $type;\n -o-transition: all $time $type;\n -ms-transition: all $time $type;\n transition: all $time $type;\n}\n@mixin transitions-property($property, $time, $type) {\n -webkit-transition: $property $time $type;\n -moz-transition: $property $time $type;\n -o-transition: $property $time $type;\n -ms-transition: $property $time $type;\n transition: $property $time $type;\n}\n@mixin transform-style($type){\n -webkit-transform-style: $type;\n -moz-transform-style: $type;\n -o-transform-style: $type;\n -ms-transform-style: $type;\n transform-style: $type;\n}\n\n@mixin backface-visibility($type){\n -webkit-backface-visibility: $type;\n -moz-backface-visibility: $type;\n -o-backface-visibility: $type;\n -ms-backface-visibility: $type;\n backface-visibility: $type;\n}\n\n@mixin rotateY-180() {\n -webkit-transform: rotateY( 180deg );\n -moz-transform: rotateY( 180deg );\n -o-transform: rotateY( 180deg );\n -ms-transform: rotateY(180deg);\n transform: rotateY( 180deg );\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius) !important;\n border-bottom-right-radius: valid-radius($radius) !important;\n }\n}",
|
||||
"@each $state, $value in $theme-gradient-colors {\n .alert-#{$state} {\n @include gradient-directional(nth($value, 1) 0%, nth($value, -1) 100%, $deg: 195deg);\n }\n}\n\n.btn-close {\n &:focus {\n box-shadow: none;\n }\n}\n\n.alert-dismissible {\n .btn-close {\n background-image: none;\n }\n}\n",
|
||||
"//\n// Avatar\n//\n\n// General styles\n\n.avatar {\n\tcolor: $white;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tfont-size: $avatar-font-size;\n\tborder-radius: $border-radius-pill;\n\theight: $avatar-height;\n\twidth: $avatar-width;\n transition: all .2s ease-in-out;\n\n img {\n \twidth: 100%;\n }\n\n\t&.rounded-circle {\n\t\timg {\n\t\t\t@extend .rounded-circle;\n\t\t}\n\t}\n\n + .avatar-content {\n \tdisplay: inline-block;\n \tmargin-left: $avatar-content-margin;\n }\n\n\n &.avatar-raised {\n margin-top: -$avatar-height * 0.5;\n }\n\n &.avatar-scale-up:hover {\n transform: scale(1.2);\n\n }\n}\n\n// Style for the Testimonials Carousel\n.active {\n .avatar.avatar-scale-up {\n transform: scale(1.2);\n }\n}\n\n\n// Avatar size variations\n\n.avatar-xxl {\n\twidth: $avatar-xxl-width !important;\n\theight: $avatar-xxl-height !important;\n\n &.avatar-raised {\n margin-top: -$avatar-xxl-height * 0.5;\n }\n}\n\n.avatar-xl {\n\twidth: $avatar-xl-width !important;\n\theight: $avatar-xl-height !important;\n\n &.avatar-raised {\n margin-top: -$avatar-xl-height * 0.5;\n }\n}\n\n.avatar-lg {\n\twidth: $avatar-lg-width !important;\n\theight: $avatar-lg-height !important;\n\tfont-size: $font-size-sm;\n\n &.avatar-raised {\n margin-top: -$avatar-lg-height * 0.5;\n }\n}\n\n.avatar-sm {\n\twidth: $avatar-sm-width !important;\n\theight: $avatar-sm-height !important;\n\tfont-size: $font-size-sm;\n\n &.avatar-raised {\n margin-top: -$avatar-sm-height * 0.5;\n }\n}\n\n.avatar-xs {\n\twidth: $avatar-xs-width !important;\n\theight: $avatar-xs-height !important;\n\tfont-size: $font-size-xs;\n\n &.avatar-raised {\n margin-top: -$avatar-xs-height * 0.5;\n }\n}\n\n//\n// Avatar group\n//\n\n// General styles\n\n.avatar-group {\n\t.avatar {\n\t\tposition: relative;\n\t\tz-index: $avatar-group-zindex;\n\t\tborder: $avatar-group-border solid $card-bg;\n\n\t\t&:hover {\n\t\t\tz-index: $avatar-group-zindex-hover;\n\t\t}\n\t}\n\n\t.avatar + .avatar {\n\t\tmargin-left: $avatar-group-double;\n\n\t}\n}\n",
|
||||
"@each $prop, $value in $theme-colors {\n .badge.bg-#{$prop} {\n background: $value;\n }\n}\n.badge {\n text-transform: uppercase;\n}\n",
|
||||
".btn {\n margin-bottom: $btn-margin-bottom;\n letter-spacing: $btn-letter-spacing;\n text-transform: uppercase;\n background-size: $btn-background-size;\n background-position-x: $btn-background-position-x;\n position: relative;\n overflow: hidden;\n -webkit-appearance: none;\n\n &:not([class*=\"btn-outline-\"]) {\n border: 0;\n }\n\n &:active,\n &:active:focus,\n &:active:hover {\n box-shadow: $btn-hover-box-shadow;\n transform: $btn-active-hover-transform;\n opacity: $btn-hover-opacity;\n }\n\n &.bg-white {\n @include hover {\n color: $body-color;\n }\n }\n\n &.btn-link{\n box-shadow: none;\n font-weight: $btn-font-weight;\n\n &:hover,\n &:focus{\n box-shadow: none;\n }\n }\n &.btn-round {\n border-radius: $btn-border-rounded;\n }\n // Button Just Icon\n\n &.btn-icon-only {\n width: $btn-just-icon-width;\n height: $btn-just-icon-height;\n padding: $btn-just-icon-padding-y $btn-just-icon-padding-x;\n }\n\n // Button Icon Sizes\n\n &.btn-sm {\n &.btn-icon-only {\n width: $btn-just-icon-width-sm;\n height: $btn-just-icon-height-sm;\n padding: $btn-just-icon-padding-y-sm $btn-just-icon-padding-x-sm;\n }\n\n i {\n font-size: $btn-just-icon-sm-font-size;\n }\n }\n\n &.btn-lg {\n &.btn-icon-only {\n width: $btn-just-icon-width-lg;\n height: $btn-just-icon-height-lg;\n padding: $btn-just-icon-padding-y-lg $btn-just-icon-padding-x-lg;\n }\n\n i {\n font-size: $btn-just-icon-lg-font-size;\n position: $btn-just-icon-lg-position;\n top: $btn-just-icon-lg-top;\n }\n }\n\n &.btn-rounded {\n border-radius: $btn-border-rounded;\n }\n\n .material-icons {\n vertical-align: middle;\n margin-top: $btn-material-icon-margin;\n margin-bottom: $btn-material-icon-margin;\n font-size: $btn-material-icon-font-size;\n display: $btn-material-icon-display;\n top: $btn-material-icon-top;\n }\n}\n\n.btn-check{\n &:checked{\n +.btn{\n svg{\n .color-background{\n fill: $white;\n }\n }\n &:hover{\n svg{\n .color-background{\n fill: $dark;\n }\n }\n }\n }\n }\n}\n\n.icon-move-right {\n i {\n transition: $btn-icon-transition;\n }\n &:hover,\n &:focus {\n i {\n transform: $btn-icon-transform-right;\n }\n }\n}\n\n.icon-move-left{\n i {\n transition: $btn-icon-transition;\n }\n &:hover,\n &:focus {\n i {\n transform: $btn-icon-transform-left;\n }\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-#{$color},\n .btn.bg-gradient-#{$color} {\n @include colored-shadows($value);\n\n @include hover {\n background-color: $value;\n border-color: $value;\n\n @include colored-shadows-hover($value);\n }\n\n .btn.bg-outline-#{$color} {\n border: $border-width solid $value;\n }\n\n &:not(:disabled):not(.disabled).active,\n &:not(:disabled):not(.disabled):active,\n .show > &.dropdown-toggle {\n color: color-yiq($value);\n background-color: $value;\n }\n\n @if $value != $white and $value != $light {\n &.focus,\n &:focus {\n color: $white;\n }\n }\n }\n\n .btn-outline-#{$color} {\n box-shadow: none;\n @include hover {\n &:not(.active){\n background-color: transparent;\n opacity: .75;\n box-shadow: none;\n color: $value;\n }\n }\n }\n}\n\n.btn-outline-white{\n border-color: rgba($white, .75);\n background: rgba($white, .1);\n}\n\n@each $color, $value in $btn-font-colors {\n .btn-#{$color},\n .btn.bg-gradient-#{$color} {\n color: $value;\n @include hover {\n color: $value;\n }\n }\n}\n",
|
||||
"//\n// Breadcrumb\n//\n\n.breadcrumb-item {\n font-size: $font-size-sm;\n &.text-white{\n &::before {\n color: $white;\n }\n }\n\n}\n\n.breadcrumb-dark {\n background-color: $breadcrumb-dark-bg;\n\n .breadcrumb-item {\n font-weight: 600;\n\n a {\n color: $breadcrumb-dark-color;\n\n &:hover {\n color: $breadcrumb-dark-hover-color;\n }\n }\n\n + .breadcrumb-item {\n &::before {\n color: $breadcrumb-dark-divider-color;\n }\n }\n\n &.active {\n color: $breadcrumb-dark-active-color;\n }\n }\n}\n\n\n// Links\n\n.breadcrumb-links {\n padding: 0;\n margin: 0;\n background: transparent;\n}\n",
|
||||
".card {\n box-shadow: $card-box-shadow;\n\n &[data-animation=\"true\"] {\n .card-header {\n @include transform-translate-y(0);\n -webkit-transition: $header-data-animation-transition;\n -moz-transition: $header-data-animation-transition;\n -o-transition: $header-data-animation-transition;\n -ms-transition: $header-data-animation-transition;\n transition: $header-data-animation-transition;\n }\n }\n\n @include hover {\n &[data-animation=\"true\"] {\n .card-header {\n @include transform-translate-y(-50px);\n }\n }\n }\n\n .card-header {\n padding: $card-header-padding;\n }\n\n .card-body {\n font-family: $font-family-sans-serif;\n padding: $card-body-padding;\n }\n\n &.card-plain {\n background-color: $card-plain-bg-color;\n box-shadow: $card-plain-box-shadow;\n }\n\n .card-footer {\n padding: $card-footer-padding;\n background-color: transparent;\n }\n}\n\n.author {\n display: $card-author-display;\n\n .name > span {\n line-height: $card-author-name-line-height;\n font-weight: $font-weight-bold;\n font-size: $font-size-sm;\n color: $card-author-name-color;\n }\n\n .stats {\n font-size: $font-size-sm;\n font-weight: $font-weight-normal;\n }\n}\n\n@import 'cards/card-background';\n@import 'cards/card-rotate';\n",
|
||||
".card {\n &.card-background {\n align-items: $card-bg-align-items;\n\n .full-background {\n background-position: $card-full-bg-bg-position;\n background-size: $card-full-bg-bg-size;\n margin-bottom: $card-full-bg-mb;\n width: $card-full-bg-width;\n height: $card-full-bg-height;\n position: $card-full-bg-position;\n border-radius: $card-border-radius;\n }\n\n .card-body {\n color: $white;\n position: $card-bg-body-position;\n z-index: $card-bg-body-z-index;\n\n .content-center,\n .content-left {\n min-height: $card-bg-content-min-height;\n max-width: $card-bg-content-max-width;\n padding-top: $card-bg-content-pt;\n padding-bottom: $card-bg-content-pb;\n }\n .content-center {\n text-align: center;\n }\n &.body-left {\n width: $card-bg-body-left-width;\n }\n\n .author {\n .name {\n span,\n .stats {\n color: $white;\n }\n }\n }\n }\n\n &:after {\n position: $card-bg-filter-position;\n top: $card-bg-filter-top;\n bottom: $card-bg-filter-bottom;\n left: $card-bg-filter-left;\n height: $card-bg-filter-height;\n width: $card-bg-filter-width;\n z-index: $card-bg-filter-z-index;\n display: $card-bg-filter-display;\n content: $card-bg-filter-content;\n background: $card-bg-filter-bg;\n border-radius: $card-border-radius;\n }\n\n @each $name, $val in $theme-gradient-colors {\n &.card-background-mask-#{$name} {\n &:before {\n background: $card-bg-filter-mask-bg;\n }\n\n &:after {\n @include gradient-directional(nth($val, 1) 0%, nth($val, -1) 100%, $deg: 195deg);\n opacity: .85;\n }\n }\n }\n\n .card-category {\n font-size: $font-size-sm;\n font-weight: $font-weight-bold;\n }\n\n .card-description {\n margin-top: $card-bg-description-margin;\n margin-bottom: $card-bg-description-margin;\n }\n }\n}\n",
|
||||
".rotating-card-container {\n @include perspective(800px);\n\n .card-rotate {\n background: transparent;\n box-shadow: none;\n\n &:after {\n display: none;\n }\n }\n\n .card {\n @include transitions(0.8s, cubic-bezier(0.34, 1.45, 0.7, 1));\n @include transform-style(preserve-3d);\n position: relative;\n\n .back,\n .front {\n @include backface-visibility(hidden);\n position: absolute;\n background-color: $white;\n border-radius: $border-radius-lg;\n top: 0;\n left: 0;\n justify-content: center;\n align-content: center;\n display: -webkit-flex;\n display: -moz-flex;\n display: -ms-flexbox;\n display: -o-flex;\n display: flex;\n -moz-flex-direction: column;\n -ms-flex-direction: column;\n -o-flex-direction: column;\n flex-direction: column;\n\n .card-body {\n justify-content: center;\n align-content: center;\n display: -webkit-flex;\n display: -moz-flex;\n display: -ms-flexbox;\n display: -o-flex;\n display: flex;\n -moz-flex-direction: column;\n -ms-flex-direction: column;\n -o-flex-direction: column;\n flex-direction: column;\n }\n\n &:after {\n position: absolute;\n z-index: 1;\n width: 100%;\n height: 100%;\n display: block;\n left: 0;\n top: 0;\n content: \"\";\n border-radius: $border-radius-lg;\n background-image: $text-gradient-bg-primary;\n opacity: .85;\n }\n }\n\n .front {\n z-index: 2;\n position: relative;\n }\n\n .back {\n @include rotateY-180();\n z-index: 5;\n text-align: center;\n width: 100%;\n height: 100%;\n\n &.back-background {\n .card-body {\n position: relative;\n z-index: 2;\n }\n }\n\n .card-footer {\n .btn {\n margin: 0;\n }\n }\n\n .card-body {\n padding-left: 15px;\n padding-right: 15px;\n }\n }\n }\n\n &:not(.manual-flip):hover {\n .card {\n @include rotateY-180();\n }\n }\n\n &.hover.manual-flip {\n .card {\n @include rotateY-180();\n }\n }\n\n .card-profile & {\n .front {\n text-align: left;\n }\n }\n}\n\n.back-background {\n .card-body {\n min-height: auto;\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n\n/* Fix bug for IE */\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n .rotating-card-container .card .back,\n .rotating-card-container .card .front {\n -ms-backface-visibility: visible;\n backface-visibility: visible;\n }\n\n .rotating-card-container .card .back {\n visibility: hidden;\n transition: visibility 0.3s cubic-bezier(0.34, 1.45, 0.7, 1);\n }\n\n .rotating-card-container .card .front {\n z-index: 4;\n }\n\n .rotating-card-container.manual-flip.hover .card .back,\n .rotating-card-container:not(.manual-flip):hover .card .back {\n z-index: 5;\n visibility: visible;\n }\n}\n",
|
||||
".dark-version {\n background-color: $dark-version-bg-color !important;\n\n .main-content {\n background-color: $dark-version-bg-color !important;\n }\n\n &.virtual-reality {\n > div {\n background-image: none !important;\n }\n }\n\n .sidenav {\n background: $dark-version-sidenav-bg-color !important;\n\n &.bg-transparent {\n background: transparent !important;\n\n .navbar-nav {\n .nav-link {\n color: $white !important;\n }\n }\n .nav {\n .nav-link {\n color: $white !important;\n }\n }\n }\n\n &.bg-white {\n background: $white !important;\n\n .navbar-nav {\n .nav-link {\n &.active:after {\n color: $dark-version-caret-sidebar-color;\n }\n }\n }\n .collapse {\n .nav-item {\n .nav-link:not(.active) {\n i {\n color: $dark !important;\n }\n }\n h6 {\n color: $dark !important;\n }\n }\n }\n }\n \n .collapse {\n .nav-item {\n .nav-link {\n i {\n color: $white !important;\n }\n }\n }\n }\n\n &.bg-white {\n .collapse {\n .nav-item {\n .nav-link {\n &.active.text-dark {\n i,\n .nav-link-text {\n color: $dark !important;\n }\n }\n }\n }\n }\n }\n }\n\n .fixed-plugin {\n .btn {\n &.bg-gradient-dark,\n &.btn-outline-dark {\n color: $white !important;\n border: 1px solid $white !important;\n }\n &.active {\n background: $white !important;\n color: $h-color !important;\n }\n }\n }\n\n .bg-gradient-dark {\n background-image: linear-gradient(195deg, $dark-gradient-dark, $dark-gradient-state-dark) !important;\n }\n\n .dropdown {\n .dropdown-menu {\n &:before {\n color: $dark-version-card-bg-color;\n }\n\n .dropdown-item {\n &:hover,\n &:focus {\n background-color: $dark-version-bg-color !important;\n }\n i,\n .material-icons {\n color: $white;\n }\n }\n }\n }\n\n .card,\n .swal2-popup,\n .dropdown .dropdown-menu,\n .kanban-board {\n background: $dark-version-card-bg-color;\n box-shadow: $dark-version-card-box-shadow;\n\n .card-header {\n background: transparent;\n }\n\n p {\n color: $white !important;\n opacity: .6;\n }\n }\n\n .kanban-item {\n background: transparent !important;\n border: 1px solid;\n }\n\n .swal2-html-container {\n color: $white !important;\n opacity: .6;\n }\n\n h1, .h1,\n h2, .h2,\n h3, .h3,\n h4, .h4,\n h5, .h5,\n h6, .h6,\n a:not(.dropdown-item):not(.choices__item):not(.leaflet-control-zoom-in):not(.leaflet-control-zoom-out):not(.btn):not(.nav-link):not(.fixed-plugin-button),\n .table thead tr th,\n .kanban-title-board {\n color: $white !important;\n }\n\n .input-group {\n &.input-group-dynamic,\n &.input-group-static {\n .form-control {\n background-image: $dark-version-input-bg-image !important;\n background-size: 0 100%, 100% 100%;\n &:focus {\n background-size: 100% 100%, 100% 100%;\n }\n }\n }\n\n &.input-group-outline {\n .form-control {\n border-color: $dark-version-border-color !important;\n }\n }\n\n .is-valid,\n .is-invalid {\n border-color: $dark-version-border-color !important;\n }\n }\n\n .accordion {\n .accordion-button {\n border-color: $dark-version-border-color !important;\n color: $white;\n opacity: .8;\n }\n }\n\n .table > :not(caption) > * > * {\n border-color: $dark-version-border-color !important;\n color: $dark-version-table-color !important;\n }\n\n label {\n color: $dark-version-body-color !important;\n }\n\n .list-group-item,\n .multisteps-form__panel {\n background-color: transparent !important;\n }\n\n .nav {\n &.bg-white {\n background-color: $dark-version-card-bg-color !important;\n box-shadow: $dark-version-card-box-shadow;\n }\n\n .nav-link[data-scroll]:hover {\n color: $h-color !important;\n }\n }\n\n .toast {\n background-color: $dark-version-card-bg-color !important;\n box-shadow: $dark-version-card-box-shadow;\n\n .toast-header {\n background: transparent;\n }\n\n span {\n color: $white;\n }\n\n p {\n color: $white !important;\n opacity: .6;\n }\n }\n\n .choices {\n .choices__input {\n background-color: transparent !important;\n border-bottom: 1px solid $dark-version-border-color;\n color: $white;\n }\n .choices__list.choices__list--dropdown {\n background: $dark-version-card-bg-color;\n box-shadow: $dark-version-card-box-shadow;\n }\n }\n\n // FulLine truncated
|
||||
"@include media-breakpoint-up(lg) {\n .dropdown,\n .dropup,\n .dropstart,\n .dropend {\n .dropdown-menu {\n box-shadow: $dropdown-box-shadow;\n transition: $dropdown-transition;\n cursor: pointer;\n }\n\n .dropdown-toggle {\n &:after{\n content: \"\\f107\";\n font: normal normal normal 14px/1 FontAwesome;\n border: none;\n vertical-align: middle;\n font-weight: $font-weight-bold;\n }\n &.show{\n &:after{\n transform: $dropdown-toggle-arrow-transform;\n }\n }\n &:after{\n transition: $dropdown-toggle-arrow-transition;\n }\n }\n }\n\n .dropdown {\n &.dropdown-hover .dropdown-menu,\n .dropdown-menu {\n display: block;\n position: absolute;\n opacity: 0;\n transform-origin: $dropdown-transform-origin;\n inset: 0px auto auto 0px;\n margin-top: $dropdown-mt !important;\n pointer-events: none;\n transform: $dropdown-transform;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n will-change: transform,box-shadow;\n\n .dropdown {\n &.dropdown-hover .dropdown-menu,\n .dropdown-menu {\n margin-top: 0 !important;\n }\n }\n }\n\n &.dropdown-hover:hover > .dropdown-menu,\n .dropdown-menu.show {\n opacity: 1;\n pointer-events: auto;\n visibility: visible;\n transform: $dropdown-transform-show;\n }\n\n &.dropdown-hover:hover > .dropdown-menu:before,\n .dropdown-menu.show:before {\n top: $dropdown-hover-arrow-active-top;\n }\n\n &.dropdown-hover {\n &:after {\n content: '';\n position: absolute;\n left: 0;\n bottom: $dropdown-hover-after-bottom-pos;\n width: 100%;\n height: 100%;\n }\n }\n\n &:not(.dropdown-hover) .dropdown-menu.show {\n margin-top: $dropdown-mt !important;\n }\n\n .dropdown-menu {\n &:before {\n font-family: \"FontAwesome\";\n content: \"\\f0d8\";\n position: absolute;\n top: 0;\n left: $dropdown-animation-arrow-left-position;\n right: auto;\n font-size: $dropdown-animation-arrow-font-size;\n color: $white;\n transition: $dropdown-animation-arrow-transition;\n }\n }\n\n .dropdown-item .arrow {\n transform: $dropdown-subitem-arrow-rotate;\n }\n }\n\n .dropdown-item {\n transition: background-color $dropdown-transition-time, color $dropdown-transition-time;\n }\n}\n\n@include media-breakpoint-down(lg) {\n .navbar-toggler + .navbar-collapse {\n .dropdown:not(.nav-item) {\n .dropdown-menu {\n display: block;\n opacity: 0;\n top: 0;\n transform-origin: $dropdown-transform-origin;\n pointer-events: none;\n transform: $dropdown-transform;\n transition: $dropdown-transition;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n will-change: transform,box-shadow;\n box-shadow: $dropdown-box-shadow;\n\n &:before {\n font-family: \"FontAwesome\";\n content: \"\\f0d8\";\n position: absolute;\n top: 0;\n left: $dropdown-animation-arrow-left-position;\n right: auto;\n font-size: $dropdown-animation-arrow-font-size;\n color: $white;\n transition: $dropdown-animation-arrow-transition;\n }\n }\n\n &:not(.dropdown-hover) .dropdown-menu {\n margin-top: $dropdown-mt !important;\n }\n\n .dropdown-menu.show {\n opacity: 1;\n pointer-events: auto;\n visibility: visible;\n transform: $dropdown-transform-show;\n\n &:before {\n top: $dropdown-hover-arrow-active-top;\n }\n }\n }\n .dropdown.nav-item .dropdown-menu {\n background-color: transparent;\n overflow: scroll;\n position: relative;\n }\n }\n\n .dropdown {\n .dropdown-menu {\n opacity: 0;\n top: 0;\n transform-origin: $dropdown-transform-origin;\n pointer-events: none;\n transform: $dropdown-multilevel-transform;\n transition: $dropdown-transition;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n will-change: transform,box-shadow;\n box-shadow: $dropdown-box-shadow;\n\n &:before {\n font-family: \"FontAwesome\";\n content: \"\\f0d8\";\n position: absolute;\n top: 0;\n left: $dropdown-animation-arrow-left-position;\n right: auto;\n font-size: $dropdown-animation-arrow-font-size;\n color: $white;\n transition: $dropdown-animation-arrow-transition;\n }\n }\n &:not(.dropdown-hover) .dropdown-menu {\n margin-top: $dropdown-mt !important;\n }\n\n .dropdown-menu.show {\n opacity: 1;\n pointer-events: auto;\n visibility: visible;\n transform: $Line truncated
|
||||
".dropup {\n .dropdown-menu {\n box-shadow: $dropdown-box-shadow;\n transition: $dropdown-transition;\n cursor: pointer;\n top: auto !important;\n bottom: 100% !important;\n margin-bottom: $dropup-mb !important;\n display: block;\n opacity: 0;\n transform-origin: $dropup-transform-origin;\n pointer-events: none;\n transform: $dropup-transform;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n will-change: transform,box-shadow;\n\n &.show{\n pointer-events: auto;\n transform: $dropup-transform-show;\n opacity: 1;\n\n &:after {\n bottom: -($dropup-animation-arrow-bottom-position - 2);\n }\n }\n\n &:after {\n font-family: \"FontAwesome\";\n content: \"\\f0d7\";\n position: absolute;\n z-index: -1;\n bottom: $dropup-animation-arrow-bottom-position;\n left: $dropdown-animation-arrow-left-position;\n right: auto;\n font-size: $dropdown-animation-arrow-font-size;\n color: $white;\n transition: $dropup-animation-arrow-transition;\n }\n }\n}",
|
||||
".page-header {\n padding: $page-header-padding;\n position: $page-header-position;\n overflow: $page-header-overflow;\n display: $page-header-display;\n align-items: $page-header-align-items;\n background-size: $page-header-bg-size;\n background-position: $page-header-bg-position;\n\n .container {\n z-index: $page-header-conteiner-index;\n }\n\n video {\n position: absolute;\n top: $header-video-top;\n left: $header-video-left;\n min-width: $header-video-min-width;\n min-height: $header-video-min-height;\n width: auto;\n height: auto;\n z-index: 0;\n transform: $header-video-min-transform;\n }\n}\n",
|
||||
".fixed-plugin{\n .fixed-plugin-button{\n background: $white;\n border-radius: $fixed-plugin-radius;\n bottom: $fixed-plugin-bottom;\n right: $fixed-plugin-right;\n font-size: $font-size-xl;\n z-index: $fixed-plugin-button-z-index;\n box-shadow: $fixed-plugin-box-shadow;\n cursor: pointer;\n i{\n pointer-events: none;\n }\n }\n .card{\n position: fixed !important;\n right: -$fixed-plugin-card-width;\n top: 0;\n height: 100%;\n left: auto!important;\n transform: unset !important;\n width: $fixed-plugin-card-width;\n border-radius: 0;\n padding: 0 10px;\n transition: .2s ease;\n z-index: $fixed-plugin-card-z-index;\n }\n\n .badge{\n border: 1px solid $white;\n border-radius: 50%;\n cursor: pointer;\n display: inline-block;\n height: 23px;\n margin-right: 5px;\n position: relative;\n width: 23px;\n transition: $transition-base;\n &:hover,\n &.active{\n border-color: $dark;\n }\n }\n\n .btn.bg-gradient-dark:not(:disabled):not(.disabled) {\n border: 1px solid transparent;\n &:not(.active) {\n background-color: transparent;\n background-image: none;\n border: 1px solid $dark;\n color: $dark;\n }\n }\n\n &.show{\n .card{\n right: 0;\n }\n }\n}\n",
|
||||
"@import 'input-group';\n@import 'form-check';\n@import 'form-switch';\n@import 'form-select';\n@import 'labels';\n@import 'inputs';\n",
|
||||
".input-group {\n @include border-radius(0, 0);\n\n &:not(.has-validation) {\n > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n > .dropdown-toggle:nth-last-child(n + 3) {\n @include border-end-radius($border-radius-md);\n }\n }\n\n &.has-validation {\n > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n > .dropdown-toggle:nth-last-child(n + 4) {\n @include border-end-radius($border-radius-md);\n }\n }\n\n &,\n .input-group-text {\n transition: $input-transition;\n border: none;\n }\n\n & > :not(:first-child):not(.dropdown-menu) {\n margin-left: 2px;\n }\n\n label {\n transition: $transition-material;\n }\n\n &.input-group-dynamic,\n &.input-group-static {\n .form-control {\n background: $input-background;\n background-size: $input-background-size;\n transition: $input-transition;\n\n \t\t&:not(:first-child) {\n \t border-left: 0;\n \t padding-left: 0;\n \t\t}\n \t\t&:not(:last-child) {\n \t\t\tborder-right: 0;\n \t\t\tpadding-right: 0;\n \t\t}\n\n & + .input-group-text {\n border-left: 0;\n border-right: $input-border-width solid $input-border-color;\n }\n\n &,\n &:focus{\n background-image: $input-background-image;\n border-radius: 0 !important;\n }\n\n &:focus{\n background-size: $input-background-size-focus;\n }\n\n &[disabled]{\n cursor: not-allowed;\n background-image: $input-background-image-disabled !important;\n }\n \t}\n\n .input-group-text {\n border-right: 0;\n }\n\n &.is-focused,\n &.is-filled {\n .form-label {\n font-size: $form-label-font-size-focused !important;\n }\n }\n\n &.is-focused {\n .form-label {\n top: $form-label-top-focused;\n }\n label {\n color: $primary;\n }\n &.is-valid{\n label{\n color: $success;\n }\n\n .form-control{\n &,\n &:focus{\n background-image: $input-background-image-valid;\n border-radius: 0 !important;\n }\n }\n }\n &.is-invalid{\n label{\n color: $danger;\n }\n\n .form-control{\n &,\n &:focus{\n background-image: $input-background-image-invalid;\n border-radius: 0 !important;\n }\n }\n }\n }\n\n &.is-valid{\n .form-control{\n &,\n &:focus{\n background-image: $input-background-image-valid;\n border-radius: 0 !important;\n }\n }\n }\n\n &.is-invalid{\n .form-control{\n &,\n &:focus{\n background-image: $input-background-image-invalid;\n border-radius: 0 !important;\n }\n }\n }\n\n &.is-filled.is-focused,\n &.is-filled {\n .form-label {\n top: $form-label-top-focused-filled;\n }\n }\n }\n\n &.input-group-outline {\n .form-control {\n background: none;\n border: $input-border-width solid $input-border-color;\n border-radius: $input-border-radius;\n border-top-left-radius: $border-radius-md !important;\n border-bottom-left-radius: $border-radius-md !important;\n padding: $form-control-outline-padding !important;\n line-height: 1.3 !important;\n\n &.form-control-lg {\n padding: $input-padding-y-lg $input-padding-x-lg !important;\n }\n\n &.form-control-sm{\n padding: $input-padding-y-sm $input-padding-x-sm !important;\n }\n\n &[disabled]{\n cursor: not-allowed;\n border-style: dashed;\n }\n }\n\n .form-label {\n display: flex;\n line-height: $form-label-outline-line-height !important;\n top: -$form-label-outline-top;\n margin-bottom: 0;\n\n &:before {\n content: \"\";\n margin-right: 4px;\n border-left: solid 1px transparent;\n border-radius: 4px 0;\n }\n\n &:after {\n content: \"\";\n flex-grow: 1;\n margin-left: 4px;\n border-right: solid 1px transparent;\n border-radius: 0 5px;\n }\n\n &:before,\n &:after {\n content: \"\";\n border-top: solid 1px;\n border-top-color: $input-border-color;\n pointer-events: none;\n margin-top: $form-label-outline-top;\n box-sizing: border-box;\n display: block;\n height: $form-label-outline-after-height;\n width: $form-label-outline-after-width;\n border-width: $form-label-outline-after-border-width;\n border-color: transparent;\n }\n }\n\n &.is-focused,\n &.is-filled {\n .form-label + .form-control {\n border-color: $primary !important;\n border-top-color: transparent !important;\n box-shadow: inset 1px 0 $primary, inset -1px 0 $primary, inset 0 -1px $primary;\n }\n\n .form-label {\nLine truncated
|
||||
".form-check:not(.form-switch) .form-check-input {\n float: initial !important;\n margin-left: auto !important;\n\n &[type=\"checkbox\"],\n &[type=\"radio\"] {\n border: 1px solid darken($gray-200, 10%);\n margin-top: $form-text-margin-top;\n position: relative;\n\n &:checked {\n border-color: $primary;\n }\n }\n\n &[type=\"checkbox\"] {\n background-image: none;\n &:after {\n transition: opacity $form-check-transition-time ease-in-out;\n font-family: \"FontAwesome\";\n content: \"\\f00c\";\n width: 100%;\n height: 100%;\n color: $form-check-input-checked-color;\n position: absolute;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: $font-size-sm - .205;\n opacity: 0;\n }\n\n &:checked{\n background: $primary;\n &:after {\n opacity: 1;\n }\n }\n }\n\n &[type=\"radio\"] {\n transition: border 0s;\n background: transparent;\n\n &:after {\n transition: opacity $form-check-transition-time ease-in-out;\n content: \"\";\n position: absolute;\n width: $form-check-radio-after-width;\n height: $form-check-radio-after-width;\n border-radius: 50%;\n background-image: escape-svg($form-check-radio-checked-bg-image), var(--#{$variable-prefix}gradient);;\n opacity: 0;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n margin: auto;\n }\n\n &:checked {\n padding: 6px;\n }\n\n &:checked:after {\n opacity: 1;\n }\n\n &:active{\n box-shadow: $form-check-radio-after-shadow;\n border-radius: $border-radius-pill;\n transition: $form-check-radio-transition;\n }\n }\n}\n\n.form-check-label,\n.form-check-input[type=\"checkbox\"] {\n cursor: pointer;\n}\n\n.form-check-label{\n font-size:$font-size-sm;\n font-weight: $font-weight-normal;\n}\n\n.form-check-input{\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n",
|
||||
".form-switch{\n .form-check-input{\n position: relative;\n background-color: $form-switch-bg-color;\n height: $form-switch-height;\n width: $form-switch-width;\n\n &:after {\n transition: transform $form-check-transition-time ease-in-out, background-color $form-check-transition-time ease-in-out;\n content: \"\";\n width: $form-switch-check-after-width;\n height: $form-switch-check-after-width;\n border-radius: 50%;\n border: 1px solid $form-switch-check-after-border-color;\n position: absolute;\n background-color: $white;\n transform: translateX($form-switch-translate-x-start);\n box-shadow: $form-switch-round-box-shadow;\n top: $form-switch-check-top;\n left: $form-switch-check-left;\n }\n\n &:checked:after {\n transform: translateX($form-switch-translate-x-end);\n border-color: $dark-gradient;\n }\n\n &:checked {\n border-color: $dark-gradient;\n background-color: $dark-gradient;\n &:active{\n &:after{\n box-shadow: $form-switch-check-active-checked-after-shadow;\n }\n }\n }\n &:active{\n &:after{\n box-shadow: $form-switch-check-active-after-shadow;\n }\n }\n }\n}\n",
|
||||
".form-select {\n transition: $input-transition;\n}\n",
|
||||
"//\n// Labels\n//\n\nlabel,\n.form-label {\n font-size: $form-label-font-size;\n font-weight: $form-label-font-weight;\n margin-bottom: $form-label-margin-bottom;\n color: $form-label-color;\n margin-left: $form-label-margin-left;\n}\n\n.input-group{\n .form-label{\n position: $form-label-position;\n top: $form-label-top;\n margin-left: 0;\n transition: $form-label-transition;\n }\n}\n",
|
||||
".form-control {\n border: none;\n\n &.is-invalid {\n border: $input-border-width solid $input-border-color;\n padding: $form-control-outline-padding;\n line-height: 1.3 !important;\n\n &:focus {\n box-shadow: 0 0 0 2px rgba($form-feedback-invalid-color, .6);\n }\n }\n\n &.is-valid {\n border: $input-border-width solid $input-border-color;\n padding: $form-control-outline-padding;\n line-height: 1.3 !important;\n\n &:focus {\n box-shadow: 0 0 0 2px rgba($form-feedback-valid-color, .65);\n }\n }\n\n &[disabled] {\n padding: $form-control-outline-padding;\n line-height: 1.45 !important;\n }\n}\n\n.input-group {\n .input-group-text {\n position: absolute;\n padding: .75rem 0;\n right: 0;\n border-right: 0 !important;\n\n i {\n color: $gray-600;\n }\n }\n\n &.input-group-static {\n .input-group-text {\n bottom: 0;\n }\n }\n}\n",
|
||||
".footer {\n .nav-link {\n color: $dark;\n font-weight: $font-weight-normal;\n font-size: $font-size-sm;\n padding-top: 0;\n padding-bottom: $nav-link-footer-padding;\n\n &:hover {\n opacity: 1 !important;\n transition: $footer-link-animation;\n }\n }\n .footer-logo {\n max-width: 2rem;\n }\n}\n",
|
||||
"@each $prop, $value in $theme-gradient-colors {\n .bg-gradient-#{$prop} {\n @include gradient-directional(nth($value, 1) 0%, nth($value, -1) 100%, $deg: 195deg);\n }\n}\n\n@each $prop, $value in $theme-colors {\n .bg-gradient-faded-#{$prop} {\n background-image: radial-gradient(370px circle at 80% 50%,rgba($value, .6) 0,darken($value, 10%) 100%)\n }\n}\n\n\n@each $prop, $value in $theme-colors {\n .bg-gradient-faded-#{$prop}-vertical{\n background-image: radial-gradient(200px circle at 50% 70%, rgba($value, .3) 0, $value 100%);\n }\n}\n",
|
||||
".material-icons {\n font-family: 'Material Icons Round';\n font-weight: normal;\n font-style: normal;\n font-size: 20px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n\n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n\n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n\n /* Support for IE. */\n font-feature-settings: 'liga';\n}\n\n.nav.nav-pills {\n .nav-link {\n .material-icons {\n top: 3px;\n }\n }\n}\n",
|
||||
".icon-shape {\n width: $icon-md-width;\n height: $icon-md-width;\n background-position: $icon-shape-bg-position;\n border-radius: $border-radius-lg;\n\n i {\n color: $white;\n opacity: $icon-shape-icon-opacity;\n top: $info-icon-top;\n position: $info-icon-position;\n }\n\n .ni {\n top: 14px;\n }\n}\n\n.icon-xxs {\n width: $icon-xxs-width;\n height: $icon-xxs-height;\n\n i {\n top: $info-icon-top-xxs;\n font-size: $font-size-xxs;\n }\n}\n\n.icon-xs {\n width: $icon-xs-width;\n height: $icon-xs-height;\n\n i {\n top: $info-icon-top-xs;\n font-size: $font-size-xs;\n }\n}\n\n.icon-sm {\n width: $icon-sm-width;\n height: $icon-sm-height;\n\n i {\n top: $info-icon-top-sm;\n font-size: $font-size-sm;\n }\n}\n\n.icon-md {\n width: $icon-md-width;\n height: $icon-md-height;\n\n i {\n top: $info-icon-top-md;\n font-size: $font-size-lg;\n }\n\n &.icon-striped {\n background-position-x: $icon-striped-bg-md;\n background-position-y: $icon-striped-bg-md;\n\n i {\n top: 11%;\n margin-left: -10px;\n font-size: $font-size-sm;\n }\n }\n}\n\n.icon-lg {\n width: $icon-lg-width;\n height: $icon-lg-height;\n i {\n top: $info-icon-top-lg;\n font-size: $font-size-2xl;\n }\n\n &.icon-striped {\n background-position-x: $icon-striped-bg-lg;\n background-position-y: $icon-striped-bg-lg;\n\n i {\n top: 21%;\n margin-left: -15px;\n }\n }\n}\n\n.icon-xl {\n width: $icon-xl-width;\n height: $icon-xl-height;\n border-radius: $border-radius-lg;\n\n i {\n top: $info-icon-top-xl;\n font-size: 2.1rem;\n }\n\n &.icon-striped {\n background-position-x: $icon-striped-bg-xl;\n background-position-y: $icon-striped-bg-xl;\n\n i {\n top: 30%;\n margin-left: -15px;\n }\n }\n}\n\n.info-horizontal {\n text-align: left !important;\n\n .icon {\n float: left;\n }\n .description {\n overflow: hidden;\n }\n}\n\n// Icon SVG fill color change\n\nsvg.text-primary {\n .color-foreground {\n fill: $primary-gradient;\n }\n .color-background {\n fill: $primary-gradient-state;\n }\n}\nsvg.text-secondary {\n .color-foreground {\n fill: $secondary-gradient;\n }\n .color-background {\n fill: $secondary-gradient-state;\n }\n}\nsvg.text-info {\n .color-foreground {\n fill: $info-gradient;\n }\n .color-background {\n fill: $info-gradient-state;\n }\n}\nsvg.text-warning {\n .color-foreground {\n fill: $warning-gradient;\n }\n .color-background {\n fill: $warning-gradient-state;\n }\n}\nsvg.text-danger {\n .color-foreground {\n fill: $danger-gradient;\n }\n .color-background {\n fill: $danger-gradient-state;\n }\n}\nsvg.text-success {\n .color-foreground {\n fill: $success-gradient;\n }\n .color-background {\n fill: $success-gradient-state;\n }\n}\nsvg.text-dark {\n .color-foreground {\n fill: $dark-gradient;\n }\n .color-background {\n fill: $dark-gradient-state;\n }\n}\n",
|
||||
"// update <html> tag border\nhtml {\n border: none !important;\n}\n\n// Blur effect\n.blur {\n box-shadow: $blur-box-shadow;\n -webkit-backdrop-filter: $blur-backdrop-filter;\n backdrop-filter: $blur-backdrop-filter;\n background-color: $card-background-blur !important;\n\n &.saturation-less {\n -webkit-backdrop-filter: $blur-backdrop-filter-less;\n backdrop-filter: $blur-backdrop-filter-less;\n }\n\n &.blur-rounded {\n border-radius: $blur-border-radius-rounded;\n }\n\n &.blur-light {\n background-color: $blur-light-background;\n }\n &.blur-dark {\n background-color: $blur-dark-background;\n }\n}\n\n.shadow-blur {\n box-shadow: $shadow-blur-box-shadow !important;\n}\n\n.shadow-card {\n box-shadow: $card-box-shadow !important;\n}\n\n.navbar-blur {\n -webkit-backdrop-filter: $blur-backdrop-filter;\n backdrop-filter: $blur-backdrop-filter;\n background-color: rgba($white, .58) !important;\n}\n\n.blur-section {\n -webkit-backdrop-filter: $blur-backdrop-filter;\n backdrop-filter: $blur-backdrop-filter;\n\n &.blur-gradient-primary {\n @include gradient-directional(rgba($primary-gradient, .95) 0%, rgba($primary-gradient-state, .95) 100%, $deg: 195deg);\n }\n}\n\n// Transition on hover\n* {\n &.move-on-hover {\n -webkit-transition: $move-transition;\n transition: $move-transition;\n overflow: $move-overflow;\n -webkit-transform-origin: $move-transform-origin;\n transform-origin: $move-transform-origin;\n transform-origin: $move-transform-origin;\n -webkit-transform: $move-transform;\n transform: $move-transform;\n -webkit-backface-visibility: $move-backface-visibility;\n backface-visibility: $move-backface-visibility;\n will-change: $move-will-change;\n\n &:hover {\n -webkit-transform: $move-hover-transform;\n transform: $move-hover-transform;\n }\n }\n\n &.gradient-animation {\n background: $gradient-animation-background;\n background-size: $gradient-animation-bg-size !important;\n animation: $device-wrapper-animation;\n }\n}\n\nhr {\n border-top: none;\n height: 1px;\n}\n\n// Vertical Line\nhr.vertical {\n position: absolute;\n background-color: $hr-bg-color;\n height: 100%;\n right: 0;\n top: 0;\n width: 1px;\n\n &.light {\n background-image: $hr-bg-color-light;\n }\n\n &.dark {\n background-image: $hr-bg-color-dark;\n }\n\n &.gray-light {\n background-image: $hr-horizontal-bg-image-gray-light;\n }\n}\n\n// Horizontal Line\nhr.horizontal {\n background-color: $hr-bg-color;\n\n &.light {\n background-image: $hr-bg-color-light;\n }\n &.dark {\n background-image: $hr-bg-color-dark;\n }\n\n &.gray-light {\n background-image: $hr-horizontal-bg-image-gray-light;\n }\n}\n\n// lock style\n.lock-size {\n width: 1.7rem;\n height: 1.7rem;\n}\n\n.border-radius-xs {\n border-radius: $border-radius-xs;\n}\n\n.border-radius-sm {\n border-radius: $border-radius-sm;\n}\n\n.border-radius-md {\n border-radius: $border-radius-md;\n}\n\n.border-radius-lg {\n border-radius: $border-radius-lg;\n}\n\n.border-radius-xl {\n border-radius: $border-radius-xl;\n}\n\n.border-radius-2xl {\n border-radius: $border-radius-2xl;\n}\n\n.border-radius-section {\n border-radius: $border-radius-section;\n}\n\n.border-bottom-end-radius-0 {\n border-bottom-right-radius: 0;\n}\n\n.border-top-end-radius-0 {\n border-top-right-radius: 0;\n}\n\n.border-bottom-start-radius-0 {\n border-bottom-left-radius: 0;\n}\n\n.border-top-start-radius-0 {\n border-top-left-radius: 0;\n}\n\n.border-dashed{\n border-style: dashed;\n}\n\n.z-index-sticky {\n z-index: $zindex-sticky;\n}\n\n\n// moving waves animation\n.waves {\n position: $waves-position;\n width: $waves-width;\n height: $waves-height;\n margin-bottom: $waves-margin-bottom;\n /*Fix for safari gap*/\n min-height: $waves-min-height;\n max-height: $waves-max-height;\n\n &.waves-sm {\n height: $waves-height-sm;\n min-height: $waves-min-height-sm;\n }\n\n &.no-animation {\n .moving-waves > use {\n animation: none;\n }\n }\n}\n\n.wave-rotate {\n transform: $waves-rotate;\n}\n/* Animation for the waves */\n.moving-waves > use {\n animation: $moving-waves-animation;\n}\n\n.moving-waves > use:nth-child(1) {\n animation-delay: $moving-waves-child-1-delay;\n animation-duration: $moving-waves-child-1-duration;\n}\n\n.moving-waves > use:nth-child(2) {\n animation-delay: $moving-waves-child-2-delay;\n animation-duration: $moving-waves-child-2-duration;\n}\n\n.moving-waves > use:nth-child(3) {\n animation-delay: $moving-waves-child-3-delay;\n animation-duration: $moving-waves-child-3-duration;\n}\n\n.moving-waves > use:nth-child(4) {\n animation-delay: $moving-waves-child-4-delay;\n animation-duration: $moving-waves-child-4-duration;\n}\n\n.moving-waves > use:nth-child(5) {\n animation-delay: $moving-waves-child-5-delay;\n animation-duration: $moving-waves-child-5-duration;\n}\n\n.moving-waves > use:nth-child(6) {\n animatioLine truncated
|
||||
".navbar {\n box-shadow: $navbar-box-shadow;\n\n .navbar-brand {\n color: $dark;\n @include font-size($font-size-sm);\n }\n .nav-link {\n color: $dark;\n padding: $navbar-nav-link-padding;\n font-weight: $font-weight-normal;\n font-size: $font-size-sm;\n }\n\n &.navbar-absolute {\n position: absolute;\n width: 100%;\n z-index: 1;\n }\n\n &.navbar-transparent {\n .nav-link {\n &, i {\n color: $white;\n }\n\n\n &:hover,\n &:focus {\n color: rgba($white, .75);\n }\n }\n\n .navbar-toggler {\n .navbar-toggler-icon {\n .navbar-toggler-bar {\n background: $white;\n }\n }\n }\n\n .navbar-collapse{\n border-radius: $border-radius-xl;\n }\n }\n\n &.navbar-dark {\n .navbar-collapse.show,\n .navbar-collapse.collapsing\n {\n .dropdown-header.text-dark{\n color: $white !important;\n }\n }\n }\n .sidenav-toggler-inner{\n width: $sidenav-toggler-width;\n .sidenav-toggler-line{\n transition: $sidenav-toggler-line-transition;\n background: $body-color;\n border-radius: $border-radius-xs;\n position: relative;\n display: block;\n height: $sidenav-toggler-line-height;\n &:not(:last-child){\n margin-bottom: $sidenav-toggler-line-margin-bottom;\n }\n }\n }\n .g-sidenav-show.g-sidenav-pinned &{\n .sidenav-toggler-inner{\n .sidenav-toggler-line:first-child,\n .sidenav-toggler-line:last-child {\n width: $sidenav-toggler-line-active-width;\n transform: $sidenav-toggler-line-transform;\n }\n }\n }\n}\n\n.navbar-light {\n background-color: $white !important;\n .navbar-toggler{\n border: none;\n &:focus{\n box-shadow: none;\n }\n }\n}\n\n.navbar-toggler {\n .navbar-toggler-icon {\n background-image: none;\n\n .navbar-toggler-bar {\n display: $navbar-toggler-bar-display;\n position: $navbar-toggler-bar-position;\n width: $navbar-toggler-bar-width;\n height: $navbar-toggler-bar-height;\n border-radius: $navbar-toggler-bar-radius;\n background: $gray-600;\n transition: $navbar-toggler-bar-transition;\n margin: 0 auto;\n\n &.bar2,\n &.bar3 {\n margin-top: $navbar-toggler-bar-margin-top;\n }\n }\n }\n\n &[aria-expanded=\"true\"] {\n .navbar-toggler-bar {\n &.bar1 {\n transform: $navbar-toggler-bar-1-transform;\n transform-origin: $navbar-toggler-bar-1-transform-origin;\n margin-top: $navbar-toggler-bar-1-margin-top;\n }\n\n &.bar2 {\n opacity: $navbar-toggler-bar-2-opacity;\n }\n\n &.bar3 {\n transform: $navbar-toggler-bar-3-transform;\n transform-origin: $navbar-toggler-bar-3-transform-origin;\n margin-top: $navbar-toggler-bar-3-margin-top;\n }\n }\n }\n}\n\n@include media-breakpoint-down(lg) {\n .navbar {\n &.navbar-transparent {\n .navbar-collapse {\n padding-top: $spacer * 0.5;\n padding-bottom: $spacer * 0.5;\n box-shadow: $box-shadow-lg;\n }\n\n .navbar-collapse.collapsing {\n background: $white;\n }\n\n .navbar-collapse.show {\n background: $white;\n .nav-link,\n i {\n color: $dark;\n }\n }\n }\n\n .g-sidenav-show & {\n &:not(.sidenav).navbar-main {\n .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n\n .navbar-nav {\n flex-direction: row;\n }\n }\n\n }\n\n .navbar-collapse {\n .navbar-nav {\n .dropdown .dropdown-menu {\n box-shadow: none !important;\n\n &:before {\n display: none !important;\n }\n }\n }\n }\n }\n}\n\n@include media-breakpoint-down(md) {\n .navbar-collapse {\n position: relative;\n\n .navbar-nav {\n width: 100%;\n\n .nav-item {\n &.dropdown {\n position: static;\n\n .dropdown-menu {\n left: 0;\n right: 0;\n\n &.show {\n &:before {\n content: none;\n }\n }\n }\n }\n }\n }\n }\n}\n@include media-breakpoint-down(sm) {\n .navbar-nav {\n .nav-item {\n &.dropdown {\n .dropdown-menu {\n left: 0;\n right: auto;\n }\n }\n }\n }\n}\n",
|
||||
"//\n// Vertical navbar + Sidenav\n//\n\n.navbar-vertical {\n .navbar-brand > img,\n .navbar-brand-img {\n max-width: 100%;\n max-height: 2rem;\n }\n // Navbar navigaton\n .navbar-nav {\n // Navbar link\n .nav-link {\n padding-left: $navbar-padding-x;\n padding-right: $navbar-padding-x;\n font-weight: $navbar-nav-link-font-weight;\n color: $white;\n // Icon\n > i {\n min-width: $navbar-icon-min-width;\n font-size: $font-size-2xl;\n line-height: ($font-size-base * $line-height-base);\n text-align: center;\n }\n // Dropdown\n .dropdown-menu {\n border: none;\n\n .dropdown-menu {\n margin-left: $dropdown-item-padding-x * 0.5;\n }\n }\n .avatar{\n width: $font-size-3xl;\n height: $font-size-3xl;\n }\n }\n\n .nav-sm {\n .nav-link {\n font-size: 0.8125rem;\n }\n }\n }\n // Navbar navigation\n .navbar-nav .nav-link {\n display: flex;\n align-items: center;\n white-space: nowrap;\n }\n // Navbar heading\n .navbar-heading {\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n font-size: $font-size-xs;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n // Expanded navbar specific styles\n &.navbar-expand {\n @each $breakpoint, $dimension in $grid-breakpoints {\n &-#{$breakpoint} {\n @include media-breakpoint-up(#{$breakpoint}) {\n display: block;\n position: fixed;\n top: 0;\n bottom: 0;\n width: 100%;\n max-width: $navbar-vertical-open-width !important;\n overflow-y: auto;\n padding: 0;\n box-shadow: none;\n\n .navbar-collapse {\n display: block;\n overflow: auto;\n height: $navbar-vertical-inner;\n }\n // Container\n > [class*=\"container\"] {\n flex-direction: column;\n align-items: stretch;\n min-height: 100%;\n padding-left: 0;\n padding-right: 0; // Target IE 10 & 11\n @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n min-height: none;\n height: 100%;\n }\n }\n // Fixes the vertical navbar to the left\n &.fixed-start {\n left: 0;\n }\n // Fixed the vertical navbar to the right\n &.fixed-end {\n right: 0;\n }\n // Navbar navigation\n .navbar-nav .nav-link {\n padding-top: $navbar-vertical-nav-link-padding-y;\n padding-bottom: $navbar-vertical-nav-link-padding-y;\n margin: 0 $navbar-vertical-nav-link-padding-x;\n margin-bottom: 1.5px;\n\n .nav-link-text,\n .sidenav-mini-icon,\n .sidenav-normal,\n i {\n pointer-events: none;\n }\n }\n\n .navbar-nav .nav-item {\n width: 100%;\n }\n\n .navbar-nav > .nav-item {\n margin-top: 0.125rem;\n\n .icon {\n .ni {\n top: 0;\n }\n }\n }\n\n .lavalamp-object {\n width: calc(100% - 1rem) !important;\n background: theme-color(\"primary\");\n color: color-yiq($primary);\n margin-right: 0.5rem;\n margin-left: 0.5rem;\n padding-left: 1rem;\n padding-right: 1rem;\n border-radius: $border-radius-sm;\n }\n // Second level\n .navbar-nav .nav .nav-link {\n padding-top: $navbar-vertical-nav-link-padding-y;\n padding-bottom: $navbar-vertical-nav-link-padding-y;\n padding-left: 15px;\n\n > span.sidenav-normal {\n transition: all 0.1s ease 0s;\n }\n &.active{\n padding-top: $navbar-vertical-nav-link-padding-y;\n padding-bottom: $navbar-vertical-nav-link-padding-y;\n }\n }\n }\n }\n }\n }\n}\n\n.sidenav {\n // Define colors\n @each $color, $value in $theme-colors {\n &[data-color=\"#{$color}\"] {\n .navbar-nav > .nav-item .nav-link.active {\n & + .collapse,\n & + .collapsing{\n .nav-item.active{\n .nav-link.active{\n @include gradient-directional(nth(#{$value}, 1) 0%, nth(#{$value}, -1) 100%, $deg: 195deg);\n }\n }\n .nav-item{\n .nav-link.active{\n background-color: $navbar-vertical-hover-bg-color;\n & + .collapse{\n .nav-item{\n .nav-link.active{\n @include gradient-directional(nth(#{$value}, 1) 0%, nth(#{$value}, -1) 100%, $deg: 195deg);\n }\n }\n }\n Line truncated
|
||||
".nav {\n &.nav-pills {\n background: $nav-pills-background;\n border-radius: $nav-pills-border-radius;\n position: relative;\n &.nav-pills-vertical {\n border-radius: $nav-pills-vertical-radius;\n .nav-link {\n &.active {\n border-radius: $nav-pills-vertical-link-radius;\n }\n }\n }\n .nav-link {\n z-index: 3;\n color: $dark;\n border-radius: $nav-pills-link-border-radius;\n background-color: inherit;\n &.active {\n animation: $nav-pills-link-active-animation;\n }\n &:hover:not(.active) {\n color: $dark;\n }\n }\n &.nav-pills-primary {\n background: $white;\n color: $white;\n .nav-link{\n &.active{\n color: $white;\n }\n }\n .moving-tab {\n .nav-link.active {\n background: $primary-gradient;\n color: $primary-gradient;\n }\n }\n }\n &.nav-pills-info {\n background: $white;\n color: $white;\n .nav-link{\n &.active{\n color: $white;\n }\n }\n .moving-tab {\n .nav-link.active {\n background: $info-gradient;\n color: $info-gradient;\n }\n }\n }\n &.nav-pills-success {\n background: $white;\n color: $white;\n .nav-link{\n &.active{\n color: $white;\n }\n }\n .moving-tab {\n .nav-link.active {\n background: $success-gradient;\n color: $success-gradient;\n }\n }\n }\n &.nav-pills-warning {\n background: $white;\n color: $white;\n .nav-link{\n &.active{\n color: $white;\n }\n }\n .moving-tab {\n .nav-link.active {\n background: $warning-gradient;\n color: $warning-gradient;\n }\n }\n }\n &.nav-pills-danger {\n background: $white;\n color: $white;\n .nav-link{\n &.active{\n color: $white;\n }\n }\n .moving-tab {\n .nav-link.active {\n background: $danger-gradient;\n color: $danger-gradient;\n }\n }\n }\n .nav-item{\n z-index: 3;\n }\n }\n}\n.moving-tab {\n z-index: 1 !important;\n .nav-link {\n color: $white;\n transition: .2s ease;\n border-radius: $nav-pills-link-border-radius;\n &.active {\n color: $white;\n font-weight: $font-weight-bold;\n box-shadow: $nav-pills-link-box-shadow;\n animation: $nav-pills-link-active-animation;\n background: $white;\n }\n &:hover:not(.active) {\n color: $dark;\n }\n }\n}\n",
|
||||
".page-item {\n &.active .page-link {\n box-shadow: $pagination-active-box-shadow;\n }\n\n .page-link,\n span {\n display: $page-link-display;\n align-items: $page-link-align-items;\n justify-content: $page-link-justify-content;\n color: $secondary;\n padding: 0;\n margin: $page-link-margin;\n border-radius: $page-link-radius !important;\n width: $page-link-width;\n height: $page-link-height;\n font-size: $font-size-sm;\n }\n}\n\n.pagination-lg {\n .page-item {\n .page-link,\n span {\n width: $page-link-width-lg;\n height: $page-link-height-lg;\n line-height: $page-link-line-height-lg;\n }\n }\n}\n\n.pagination-sm {\n .page-item {\n .page-link,\n span {\n width: $page-link-width-sm;\n height: $page-link-height-sm;\n line-height: $page-link-line-height-sm;\n }\n }\n}\n\n\n// Colors\n.pagination {\n @each $name, $value in $theme-gradient-colors {\n &.pagination-#{$name} {\n .page-item.active > .page-link {\n &,\n &:focus,\n &:hover {\n @include gradient-directional(nth($value, 1) 0%, nth($value, -1) 100%, $deg: 195deg);\n border: none;\n }\n }\n }\n }\n}\n",
|
||||
".popover {\n box-shadow: $popover-box-shadow;\n}\n\n// popover title\n.popover {\n .popover-header {\n font-weight: 600;\n }\n}\n",
|
||||
".progress-bar {\n height: $progress-bar-height;\n border-radius: $border-radius-sm;\n}\n\n.progress {\n overflow: visible;\n\n &.progress-sm {\n height: $progress-height-sm;\n }\n &.progress-lg {\n height: $progress-height-lg;\n }\n}\n",
|
||||
"// breadcrumb\n\n.rtl {\n .breadcrumb {\n .breadcrumb-item + .breadcrumb-item::before {\n float: right;\n padding-left: $breadcrumb-item-padding-x;\n padding-right: 0;\n }\n }\n\n .sidenav {\n .navbar-nav {\n width: 100%;\n padding-right: 0;\n }\n }\n\n .fixed-plugin {\n .fixed-plugin-button {\n left: $fixed-plugin-right;\n right: auto;\n }\n\n .card {\n left: -$fixed-plugin-card-width !important;\n right: auto;\n }\n\n &.show {\n .card {\n right: auto;\n left: 0 !important;\n }\n }\n }\n\n .timeline {\n .timeline-content {\n margin-right: $timeline-content-margin-left;\n margin-left: 0;\n }\n\n .timeline-step {\n transform: $timeline-step-transform-rtl;\n }\n\n &.timeline-one-side {\n &:before {\n right: $timeline-left;\n }\n\n .timeline-step {\n right: $timeline-left;\n }\n }\n }\n\n .form-check {\n &.form-switch {\n .form-check-input {\n &:after {\n transform: translateX(-$form-switch-translate-x-start);\n }\n\n &:checked:after {\n transform: translateX($form-switch-translate-x-end);\n }\n }\n }\n }\n\n .avatar-group {\n .avatar + .avatar {\n margin-left: 0;\n margin-right: $avatar-group-double;\n }\n }\n\n .dropdown {\n .dropdown-menu {\n left: 0;\n }\n }\n\n .input-group {\n &.input-group-outline {\n .form-label:before {\n margin-left: 4px;\n margin-right: 0;\n border-radius: 0 4px;\n }\n .form-label:after {\n margin-left: 0;\n margin-right: 4px;\n border-radius: 5px 0;\n }\n\n &.is-valid,\n &.is-invalid {\n .form-control {\n background-position: left 0.75rem center !important;\n }\n }\n }\n\n .input-group-text {\n border-left: 0;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n & > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-right: -1px;\n border-top-left-radius: $input-border-radius;\n border-bottom-left-radius: $input-border-radius;\n }\n\n &:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3),\n &:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu) {\n border-top-right-radius: $input-border-radius;\n border-bottom-right-radius: $input-border-radius;\n }\n }\n}\n",
|
||||
"// Ripple effect\n\n.ripple {\n display: block;\n position: absolute;\n background: rgba($white, .3);\n border-radius: 100%;\n transform:scale(0);\n animation:ripple 0.65s linear;\n\n}\n\n@keyframes ripple {\n 100% {opacity: 0; transform: scale(2.5);}\n}\n",
|
||||
".btn {\n // social buttons\n &.btn-facebook {\n @include social-buttons-color($facebook, $facebook-states);\n }\n &.btn-twitter {\n @include social-buttons-color($twitter, $twitter-states);\n }\n &.btn-pinterest {\n @include social-buttons-color($pinterest, $pinterest-states);\n }\n &.btn-linkedin {\n @include social-buttons-color($linkedin, $linkedin-states);\n }\n &.btn-dribbble {\n @include social-buttons-color($dribbble, $dribbble-states);\n }\n &.btn-github {\n @include social-buttons-color($github, $github-states);\n }\n &.btn-youtube {\n @include social-buttons-color($youtube, $youtube-states);\n }\n &.btn-instagram {\n @include social-buttons-color($instagram, $instagram-states);\n }\n &.btn-reddit {\n @include social-buttons-color($reddit, $reddit-states);\n }\n &.btn-tumblr {\n @include social-buttons-color($tumblr, $tumblr-states);\n }\n &.btn-behance {\n @include social-buttons-color($behance, $behance-states);\n }\n &.btn-vimeo {\n @include social-buttons-color($vimeo, $vimeo-states);\n }\n &.btn-slack {\n @include social-buttons-color($slack, $slack-states);\n }\n}\n",
|
||||
"// General styles\n\n.table {\n thead th {\n padding: $table-head-spacer-y $table-head-spacer-x;\n text-transform: $table-head-text-transform;\n letter-spacing: $table-head-letter-spacing;\n border-bottom: $table-border-width solid $table-border-color;\n }\n\n th {\n font-weight: $table-head-font-weight;\n }\n\n td {\n .progress {\n height: $table-progress-height;\n width: $table-progress-width;\n margin: $table-progress-margin;\n\n .progress-bar {\n height: $table-progress-height;\n }\n }\n }\n\n td,\n th {\n white-space: nowrap;\n }\n // Vetical align table content\n &.align-items-center {\n td,\n th {\n vertical-align: middle;\n }\n }\n tbody{\n tr:last-child{\n td{\n border-width: 0;\n }\n }\n }\n\n > :not(:last-child) > :last-child > * {\n border-bottom-color: $light;\n }\n\n > :not(:first-child) {\n border-top: (1 * $table-border-width) solid $table-group-separator-color;\n }\n}\n",
|
||||
"//\n// Timeline\n//\n\n\n.timeline {\n position: relative;\n\n // Axis\n\n &:before {\n content: '';\n position: absolute;\n top: 0;\n left: $timeline-left;\n height: 100%;\n border-right: $timeline-axis-width solid $timeline-axis-color;\n }\n\n &.timeline-dark{\n &:before {\n border-right-color: $timeline-axis-color-dark;\n }\n }\n}\n\n\n\n// Timeline blocks\n\n.timeline-block {\n position: relative;\n\n &:after {\n content: \"\";\n display: table;\n clear: both;\n }\n\n &:first-child {\n margin-top: 0;\n }\n\n &:last-child {\n margin-bottom: 0;\n }\n}\n\n// Timeline steps\n\n.timeline-step {\n position: absolute;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n left: 0;\n width: $timeline-step-width;\n height: $timeline-step-height;\n border-radius: $timeline-step-radius;\n background: $timeline-step-bg;\n // border: $timeline-step-border-width solid $timeline-step-border-color;\n text-align: center;\n transform: $timeline-step-transform;\n font-size: $font-size-base;\n font-weight: $font-weight-bold;\n z-index: 1;\n\n svg, i {\n line-height: $timeline-step-line-height;\n }\n}\n\n\n\n// Timeline content and body\n.timeline-content {\n position: relative;\n margin-left: $timeline-content-margin-left;\n padding-top: $timeline-content-padding-top;\n position: relative;\n top: $timeline-content-top;\n\n &:after {\n content: \"\";\n display: table;\n clear: both;\n }\n}\n\n\n@include media-breakpoint-up(lg) {\n .timeline {\n &:before {\n left: 50%;\n margin-left: -1px;\n }\n }\n\n .timeline-step {\n left: 50%;\n }\n\n .timeline-content {\n\n width: 38%;\n }\n\n .timeline-block:nth-child(even) .timeline-content {\n float: right;\n }\n}\n\n// One side timeline\n\n.timeline-one-side {\n &:before {\n left: $timeline-left;\n }\n\n .timeline-step {\n left: $timeline-left;\n }\n\n .timeline-content {\n width: auto;\n }\n\n @include media-breakpoint-up(lg) {\n .timeline-content {\n max-width: 30rem;\n }\n }\n}\n\n.timeline-one-side .timeline-block:nth-child(even) .timeline-content {\n float: none;\n}\n",
|
||||
"// Tilt Animation\n.tilt {\n -webkit-transform-style: $tilt-transform-style;\n transform-style: $tilt-transform-style;\n\n .up {\n -webkit-transform: $tilt-transform-up-transform;\n transform: $tilt-transform-up-transform !important;\n transition: $tilt-transform-up-transition;\n }\n}\n",
|
||||
".bs-tooltip-auto[x-placement^=right] .tooltip-arrow,\n.bs-tooltip-right .tooltip-arrow {\n left: $tooltip-arrow-left;\n}\n\n.bs-tooltip-auto[x-placement^=left] .tooltip-arrow,\n.bs-tooltip-left .tooltip-arrow {\n right: $tooltip-arrow-right;\n}\n",
|
||||
"html *{\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\nbody {\n font-weight: $font-weight-normal;\n line-height: $p-line-height;\n}\n\nh1, .h1 {\n font-size: $h1-font-size;\n line-height: $h1-line-height;\n letter-spacing: $btn-letter-spacing;\n\n @include media-breakpoint-down(sm) {\n font-size: rfs-fluid-value($h1-font-size);\n }\n}\n\nh2, .h2 {\n font-size: $h2-font-size;\n line-height: $h2-line-height;\n letter-spacing: $letter-wider;\n\n @include media-breakpoint-down(sm) {\n font-size: rfs-fluid-value($h2-font-size);\n }\n}\n\nh3, .h3 {\n font-size: $h3-font-size;\n line-height: $h3-line-height;\n\n @include media-breakpoint-down(sm) {\n font-size: rfs-fluid-value($h3-font-size);\n }\n}\n\nh4, .h4 {\n font-size: $h4-font-size;\n line-height: $h4-line-height;\n\n @include media-breakpoint-down(sm) {\n font-size: rfs-fluid-value($h4-font-size);\n }\n}\n\nh5, .h5 {\n font-size: $h5-font-size;\n line-height: $h5-line-height;\n\n @include media-breakpoint-down(sm) {\n font-size: rfs-fluid-value($h5-font-size);\n }\n}\n\nh6, .h6 {\n font-size: $h6-font-size;\n line-height: $h6-line-height;\n}\n\np, .p {\n font-size: $font-size-base;\n font-weight: $p-font-weight;\n line-height: $p-line-height;\n}\n\n.lead {\n font-size: $lead-font-size;\n font-weight: $lead-font-weight;\n line-height: $lead-line-height;\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n font-weight: $font-weight-bold;\n font-family: $font-family-base;\n}\n\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n font-weight: $font-weight-bold;\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3,\nh4, .h4 {\n letter-spacing: $letter-tighter;\n}\n\na {\n letter-spacing: $letter-normal;\n color: $dark;\n}\n\n.text-sm {\n line-height: $text-sm-line-height;\n}\n.text-xs {\n line-height: $text-xs-line-height;\n}\n\np, .p {\n @include font-size($p-font-size);\n}\n.lead {\n @include font-size($lead-font-size);\n}\n.text-lg {\n @include font-size($font-size-lg !important);\n}\n.text-md {\n @include font-size($p-font-size !important);\n}\n.text-sm {\n @include font-size($font-size-sm !important);\n}\n.text-xs {\n @include font-size($font-size-xs !important);\n}\n.text-xxs {\n @include font-size($font-size-xxs !important);\n}\n\np {\n line-height: 1.625;\n font-weight: $font-weight-light;\n}\n\n// stylelint-disable declaration-no-important\n//\n// Text\n//\n.text-sans-serif {\n font-family: $font-family-sans-serif !important;\n}\n.text-monospace {\n font-family: $font-family-monospace !important;\n}\n\n// Alignment\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n @include text-truncate();\n}\n\n// Weight and italics\n.font-weight-light {\n font-weight: $font-weight-light !important;\n}\n\n.font-weight-lighter {\n font-weight: $font-weight-lighter !important;\n}\n\n.font-weight-normal {\n font-weight: $font-weight-normal !important;\n}\n\n.font-weight-bold {\n font-weight: $font-weight-bold !important;\n}\n\n.font-weight-bolder {\n font-weight: $font-weight-bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n// Contextual colors\n\n.text-gradient {\n background-clip: $text-gradient-bg-clip;\n -webkit-background-clip: $text-gradient-bg-clip;\n -webkit-text-fill-color: $text-gradient-text-fill;\n position: $text-gradient-position;\n z-index: $text-gradient-zindex;\n\n &.text-primary {\n background-image: $text-gradient-bg-primary;\n }\n &.text-info {\n background-image: $text-gradient-bg-info;\n }\n &.text-success {\n background-image: $text-gradient-bg-success;\n }\n &.text-warning {\n background-image: $text-gradient-bg-warning;\n }\n &.text-danger {\n background-image: $text-gradient-bg-danger;\n }\n &.text-dark {\n background-image: $text-gradient-bg-dark;\n }\n}\n\n.blockquote {\n border-left: 3px solid $text-muted;\n > span {\n font-style: italic;\n }\n}\n\n.text-muted {\n color: $text-secondary !important;\n}\n\n.text-black-50 {\n color: rgba($black, .5) !important;\n}\n\n.text-white-50 {\n color: rgba($white, .5) !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-wrap: break-word !important;\n}\n// Reset\n.text-reset {\n color: inherit !important;\n}\n\n// Letter Spacing\n\n.letter-wider {\n letter-spacing: $letter-wider;\n}\n.letter-normal {\n letter-spacing: $letter-normal;\n}\n.letter-tighter {\n letter-spacing: $letter-tighter;\n}\n\n// Font Weight\n\n.text-lighter {\n font-weight: $font-weight-lighter;\n}\n.text-light {\n font-weight: $font-weight-light;\n}\n.text-normal {\n font-weight: $font-weight-normal;\n}\n.text-bold {\n font-weight: $font-weight-bold;\n}\n.text-bolder {\n font-weight: $font-weight-bolder;\n}\n\n\n// Font Size\n\n.text-2xl {\n font-size: $font-size-2xl;\n}\n.text-3xl {\n font-size: $font-sLine truncated
|
||||
"@import \"flatpickr\";\n@import \"nouislider\";\n@import \"prism\";\n@import \"perfect-scrollbar\";\n",
|
||||
".flatpickr-calendar {\n background: transparent;\n opacity: 0;\n display: none;\n text-align: center;\n visibility: hidden;\n padding: 0;\n -webkit-animation: none;\n animation: none;\n direction: ltr;\n border: 0;\n font-size: 14px;\n line-height: 24px;\n border-radius: 0.75rem;\n position: absolute;\n width: 307.875px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n background: #fff;\n -webkit-box-shadow: $box-shadow-lg;\n transform: $dropdown-transform;\n}\n.flatpickr-calendar.open,\n.flatpickr-calendar.inline {\n opacity: 1;\n max-height: 640px;\n visibility: visible;\n transform: $dropdown-transform-show;\n}\n.flatpickr-calendar.open {\n display: inline-block;\n z-index: 99999;\n}\n.flatpickr-calendar.animate.open {\n -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);\n animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);\n}\n.flatpickr-calendar.inline {\n display: block;\n position: relative;\n top: 2px;\n}\n.flatpickr-calendar.static {\n position: absolute;\n top: calc(100% + 2px);\n}\n.flatpickr-calendar.static.open {\n z-index: 999;\n display: block;\n}\n.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) {\n -webkit-box-shadow: none !important;\n box-shadow: none !important;\n}\n.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) {\n -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n}\n.flatpickr-calendar .hasWeeks .dayContainer,\n.flatpickr-calendar .hasTime .dayContainer {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.flatpickr-calendar .hasWeeks .dayContainer {\n border-left: 0;\n}\n.flatpickr-calendar.hasTime .flatpickr-time {\n height: 40px;\n border-top: 1px solid #e6e6e6;\n}\n.flatpickr-calendar.noCalendar.hasTime .flatpickr-time {\n height: auto;\n}\n.flatpickr-calendar:before,\n.flatpickr-calendar:after {\n position: absolute;\n display: block;\n pointer-events: none;\n border: solid transparent;\n content: '';\n height: 0;\n width: 0;\n left: 22px;\n}\n.flatpickr-calendar.rightMost:before,\n.flatpickr-calendar.arrowRight:before,\n.flatpickr-calendar.rightMost:after,\n.flatpickr-calendar.arrowRight:after {\n left: auto;\n right: 22px;\n}\n.flatpickr-calendar.arrowCenter:before,\n.flatpickr-calendar.arrowCenter:after {\n left: 50%;\n right: 50%;\n}\n.flatpickr-calendar:before {\n border-width: 5px;\n margin: 0 -5px;\n}\n.flatpickr-calendar:after {\n border-width: 4px;\n margin: 0 -4px;\n}\n.flatpickr-calendar.arrowTop:before,\n.flatpickr-calendar.arrowTop:after {\n bottom: 100%;\n}\n.flatpickr-calendar.arrowTop:before {\n border-bottom-color: #fff;\n}\n.flatpickr-calendar.arrowTop:after {\n border-bottom-color: #fff;\n}\n.flatpickr-calendar.arrowBottom:before,\n.flatpickr-calendar.arrowBottom:after {\n top: 100%;\n}\n.flatpickr-calendar.arrowBottom:before {\n border-top-color: #e6e6e6;\n}\n.flatpickr-calendar.arrowBottom:after {\n border-top-color: #fff;\n}\n.flatpickr-calendar:focus {\n outline: 0;\n}\n.flatpickr-wrapper {\n position: relative;\n display: inline-block;\n}\n.flatpickr-months {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n}\n.flatpickr-months .flatpickr-month {\n background: transparent;\n color: #344767;\n fill: rgba(0,0,0,0.8);\n height: 34px;\n line-height: 1;\n text-align: center;\n position: relative;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n overflow: hidden;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n.flatpickr-months .flatpickr-prev-month,\n.flatpickr-months .flatpickr-next-month {\n text-decoration: none;\n cursor: pointer;\n position: absolute;\n top: 0;\n height: 34px;\n padding: 10px;\n z-index: 3;\n color: rgba(0,0,0,0.9);\n fill: rgba(0,0,0,0.9);\n}\n.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,\n.flatpickr-months .flatpickr-next-month.flatpickr-disabled {\n display: none;\n}\n.flatpickr-months .flatpickr-prev-month i,\n.flatpickr-months .flatpickr-next-month i {\n position: relative;\n}\n.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,\n.flatpickr-months .flatpickr-next-month.flatpickr-prev-month {\n/*\n /*rtl:begin:ignore*/\n/*\n */\n left: 0;\n/*\n /*rtl:end:ignore*/\n/*\n */\n}\n/*\n /*rtl:begin:ignore*/\n/*\n /*rtl:end:ignore*/\n.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,\n.flatpickr-months .flatpickr-next-month.flatpickr-next-month {\n/*\n /*rtl:begin:ignore*/\n/*\n */\n right: 0;\n/*\n /*rtl:end:ignore*/\n/*\n */\n}\n/*\n Line truncated
|
||||
"/*! nouislider - 14.6.3 - 11/19/2020 */\n/* Functional styling;\n * These styles are required for noUiSlider to function.\n * You don't need to change these rules to apply your design.\n */\n.noUi-target,\n.noUi-target * {\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n -webkit-user-select: none;\n -ms-touch-action: none;\n touch-action: none;\n -ms-user-select: none;\n -moz-user-select: none;\n user-select: none;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n.noUi-target {\n position: relative;\n}\n.noUi-base,\n.noUi-connects {\n width: 100%;\n height: 2px;\n position: relative;\n z-index: 1;\n top: 0;\n}\n/* Wrapper for all connect elements.\n */\n.noUi-connects {\n z-index: 0;\n overflow: hidden;\n}\n.noUi-connect,\n.noUi-origin {\n will-change: transform;\n position: absolute;\n z-index: 1;\n top: 0;\n right: 0;\n -ms-transform-origin: 0 0;\n -webkit-transform-origin: 0 0;\n -webkit-transform-style: preserve-3d;\n transform-origin: 0 0;\n transform-style: flat;\n}\n.noUi-connect {\n height: 100%;\n width: 100%;\n border-radius: 0.25rem;\n}\n.noUi-origin {\n height: 10%;\n width: 10%;\n}\n/* Offset direction\n */\n.noUi-txt-dir-rtl.noUi-horizontal .noUi-origin {\n left: 0;\n right: auto;\n}\n/* Give origins 0 height/width so they don't interfere with clicking the\n * connect elements.\n */\n.noUi-vertical .noUi-origin {\n width: 0;\n}\n.noUi-horizontal .noUi-origin {\n height: 0;\n}\n.noUi-handle {\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n position: absolute;\n}\n.noUi-touch-area {\n height: 100%;\n width: 100%;\n}\n.noUi-state-tap .noUi-connect,\n.noUi-state-tap .noUi-origin {\n -webkit-transition: transform 0.3s;\n transition: transform 0.3s;\n}\n.noUi-state-drag * {\n cursor: inherit !important;\n}\n/* Slider size and handle placement;\n */\n.noUi-horizontal {\n height: 2px;\n}\n.noUi-horizontal .noUi-handle {\n border-radius: 50%;\n background-color: $white;\n box-shadow: 0 1px 13px 0 rgba(0,0,0,.2);\n height: 14px;\n width: 14px;\n cursor: pointer;\n margin-top: -6px;\n outline: none;\n right: -10px;\n}\n.noUi-vertical {\n width: 3px;\n}\n.noUi-vertical .noUi-handle {\n width: 28px;\n height: 34px;\n right: -6px;\n top: -17px;\n}\n.noUi-txt-dir-rtl.noUi-horizontal .noUi-handle {\n left: -17px;\n right: auto;\n}\n/* Styling;\n * Giving the connect element a border radius causes issues with using transform: scale\n */\n.noUi-target {\n background: $light;\n border-radius: .25rem;\n}\n.noUi-connects {\n border-radius: 3px;\n}\n.noUi-connect {\n background: $primary;\n\n}\n/* Handles and cursors;\n */\n.noUi-draggable {\n cursor: ew-resize;\n}\n.noUi-vertical .noUi-draggable {\n cursor: ns-resize;\n}\n.noUi-handle {\n border: 1px solid $primary;\n border-radius: 3px;\n background: $white;\n cursor: default;\n box-shadow: inset 0 0 1px $white, inset 0 1px 7px #EBEBEB, 0 3px 6px -3px #BBB;\n webkit-transition: .3s ease 0s;\n -moz-transition: .3s ease 0s;\n -ms-transition: .3s ease 0s;\n -o-transform: .3s ease 0s;\n transition: .3s ease 0s;\n}\n.noUi-active {\n box-shadow: inset 0 0 1px $white, inset 0 1px 7px #DDD, 0 3px 6px -3px #BBB;\n transform: scale3d(1.5,1.5,1);\n}\n\n\n/* Disabled state;\n */\n[disabled] .noUi-connect {\n background: #B8B8B8;\n}\n[disabled].noUi-target,\n[disabled].noUi-handle,\n[disabled] .noUi-handle {\n cursor: not-allowed;\n}\n/* Base;\n *\n */\n.noUi-pips,\n.noUi-pips * {\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n.noUi-pips {\n position: absolute;\n color: #999;\n}\n/* Values;\n *\n */\n.noUi-value {\n position: absolute;\n white-space: nowrap;\n text-align: center;\n}\n.noUi-value-sub {\n color: #ccc;\n font-size: 10px;\n}\n/* Markings;\n *\n */\n.noUi-marker {\n position: absolute;\n background: #CCC;\n}\n.noUi-marker-sub {\n background: #AAA;\n}\n.noUi-marker-large {\n background: #AAA;\n}\n/* Horizontal layout;\n *\n */\n.noUi-pips-horizontal {\n padding: 10px 0;\n height: 80px;\n top: 100%;\n left: 0;\n width: 100%;\n}\n.noUi-value-horizontal {\n -webkit-transform: translate(-50%, 50%);\n transform: translate(-50%, 50%);\n}\n.noUi-rtl .noUi-value-horizontal {\n -webkit-transform: translate(50%, 50%);\n transform: translate(50%, 50%);\n}\n.noUi-marker-horizontal.noUi-marker {\n margin-left: -1px;\n width: 2px;\n height: 5px;\n}\n.noUi-marker-horizontal.noUi-marker-sub {\n height: 10px;\n}\n.noUi-marker-horizontal.noUi-marker-large {\n height: 15px;\n}\n/* Vertical layout;\n *\n */\n.noUi-pips-vertical {\n padding: 0 10px;\n height: 100%;\n top: 0;\n left: 100%;\n}\n.noUi-value-vertical {\n -webkit-transform: translate(0, -50%);\n transform: translate(0, -50%);\n padding-left: 25px;\n}\n.noUi-rtl .noUi-value-vertical {\n -webkit-transform: translate(0, 50%);\n transform: translate(0, 50%);\n}\n.noUi-marker-vertical.noUi-marker {\n width: 5px;\n height: 2pxLine truncated
|
||||
"/* PrismJS 1.23.0\nhttps://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tcolor: black;\n\tbackground: none;\n\ttext-shadow: 0 1px white;\n\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\tfont-size: 1em;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\n@media print {\n\tcode[class*=\"language-\"],\n\tpre[class*=\"language-\"] {\n\t\ttext-shadow: none;\n\t}\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\tpadding: 1em;\n\toverflow: auto;\n border-radius: .75rem;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tbackground: $gray-100;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\tpadding: .1em;\n\tborder-radius: .3em;\n\twhite-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: slategray;\n}\n\n.token.punctuation {\n\tcolor: #999;\n}\n\n.token.namespace {\n\topacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n\tcolor: #905;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n\tcolor: #690;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n\tcolor: #9a6e3a;\n\t/* This background color was intended by the author of this theme. */\n\tbackground: hsla(0, 0%, 100%, .5);\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n\tcolor: #07a;\n}\n\n.token.function,\n.token.class-name {\n\tcolor: #DD4A68;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n\tcolor: #e90;\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n",
|
||||
"/*\n * Container style\n */\n.ps {\n overflow: hidden !important;\n overflow-anchor: none;\n -ms-overflow-style: none;\n touch-action: auto;\n -ms-touch-action: auto;\n}\n\n/*\n * Scrollbar rail styles\n */\n.ps__rail-x {\n display: none;\n opacity: 0;\n transition: background-color .2s linear, opacity .2s linear;\n -webkit-transition: background-color .2s linear, opacity .2s linear;\n height: 15px;\n /* there must be 'bottom' or 'top' for ps__rail-x */\n bottom: 0px;\n /* please don't change 'position' */\n position: absolute;\n}\n\n.ps__rail-y {\n display: none;\n opacity: 0;\n transition: background-color .2s linear, opacity .2s linear;\n -webkit-transition: background-color .2s linear, opacity .2s linear;\n width: 15px;\n /* there must be 'right' or 'left' for ps__rail-y */\n right: 0;\n /* please don't change 'position' */\n position: absolute;\n}\n\n.ps--active-x > .ps__rail-x,\n.ps--active-y > .ps__rail-y {\n display: block;\n background-color: transparent;\n}\n\n.ps:hover > .ps__rail-x,\n.ps:hover > .ps__rail-y,\n.ps--focus > .ps__rail-x,\n.ps--focus > .ps__rail-y,\n.ps--scrolling-x > .ps__rail-x,\n.ps--scrolling-y > .ps__rail-y {\n opacity: 0.6;\n}\n\n.ps .ps__rail-x:hover,\n.ps .ps__rail-y:hover,\n.ps .ps__rail-x:focus,\n.ps .ps__rail-y:focus,\n.ps .ps__rail-x.ps--clicking,\n.ps .ps__rail-y.ps--clicking {\n background-color: #eee;\n opacity: 0.9;\n}\n\n/*\n * Scrollbar thumb styles\n */\n.ps__thumb-x {\n background-color: #aaa;\n border-radius: 6px;\n transition: background-color .2s linear, height .2s ease-in-out;\n -webkit-transition: background-color .2s linear, height .2s ease-in-out;\n height: 6px;\n /* there must be 'bottom' for ps__thumb-x */\n bottom: 2px;\n /* please don't change 'position' */\n position: absolute;\n}\n\n.ps__thumb-y {\n background-color: #aaa;\n border-radius: 6px;\n transition: background-color .2s linear, width .2s ease-in-out;\n -webkit-transition: background-color .2s linear, width .2s ease-in-out;\n width: 6px;\n /* there must be 'right' for ps__thumb-y */\n right: 2px;\n /* please don't change 'position' */\n position: absolute;\n}\n\n.ps__rail-x:hover > .ps__thumb-x,\n.ps__rail-x:focus > .ps__thumb-x,\n.ps__rail-x.ps--clicking .ps__thumb-x {\n background-color: #999;\n height: 11px;\n}\n\n.ps__rail-y:hover > .ps__thumb-y,\n.ps__rail-y:focus > .ps__thumb-y,\n.ps__rail-y.ps--clicking .ps__thumb-y {\n background-color: #999;\n width: 11px;\n}\n\n/* MS supports */\n@supports (-ms-overflow-style: none) {\n .ps {\n overflow: auto !important;\n }\n}\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n .ps {\n overflow: auto !important;\n }\n}\n",
|
||||
""
|
||||
],
|
||||
"names": [],
|
||||
"mappings": "AmCCE;;;;;KAKG;AgCNL,AAAA,KAAK,CAAC;EAQF,SAAqB,CAAE,QAAC;EAAxB,WAAqB,CAAE,QAAC;EAAxB,WAAqB,CAAE,QAAC;EAAxB,SAAqB,CAAE,QAAC;EAAxB,QAAqB,CAAE,QAAC;EAAxB,WAAqB,CAAE,QAAC;EAAxB,WAAqB,CAAE,QAAC;EAAxB,UAAqB,CAAE,QAAC;EAAxB,SAAqB,CAAE,QAAC;EAAxB,SAAqB,CAAE,QAAC;EAAxB,UAAqB,CAAE,KAAC;EAAxB,SAAqB,CAAE,QAAC;EAAxB,cAAqB,CAAE,QAAC;EAIxB,aAA0B,CAAO,QAAC;EAAlC,aAA0B,CAAO,QAAC;EAAlC,aAA0B,CAAO,QAAC;EAAlC,aAA0B,CAAO,QAAC;EAAlC,aAA0B,CAAO,QAAC;EAAlC,aAA0B,CAAO,QAAC;EAAlC,aAA0B,CAAO,QAAC;EAAlC,aAA0B,CAAO,QAAC;EAAlC,aAA0B,CAAO,QAAC;EAIlC,YAAqB,CAAE,QAAC;EAAxB,cAAqB,CAAE,QAAC;EAAxB,YAAqB,CAAE,QAAC;EAAxB,SAAqB,CAAE,QAAC;EAAxB,YAAqB,CAAE,QAAC;EAAxB,WAAqB,CAAE,QAAC;EAAxB,UAAqB,CAAE,QAAC;EAAxB,SAAqB,CAAE,QAAC;EAAxB,UAAqB,CAAE,KAAC;EAAxB,cAAqB,CAAE,QAAC;EAIxB,gBAAyB,CAAM,YAAC;EAAhC,kBAAyB,CAAM,cAAC;EAAhC,gBAAyB,CAAM,YAAC;EAAhC,aAAyB,CAAM,aAAC;EAAhC,gBAAyB,CAAM,YAAC;EAAhC,eAAyB,CAAM,YAAC;EAAhC,cAAyB,CAAM,cAAC;EAAhC,aAAyB,CAAM,YAAC;EAAhC,cAAyB,CAAM,cAAC;EAAhC,kBAAyB,CAAM,YAAC;EAGlC,cAAqB,CAAW,cAAC;EACjC,cAAqB,CAAW,QAAC;EACjC,mBAA0B,CAAgB,cAAC;EAC3C,gBAAuB,CAAa,cAAC;EAMrC,oBAA2B,CAAiB,uCAAC;EAC7C,mBAA0B,CAAgB,qFAAC;EAC3C,aAAoB,CAAU,2EAAC;EAO/B,qBAA4B,CAAkB,0BAAC;E3B4P3C,mBAAY,EAvER,IAA2B;E2BnLnC,qBAA4B,CAAkB,IAAC;EAC/C,qBAA4B,CAAkB,IAAC;EAC/C,eAAsB,CAAY,QAAC;EAInC,YAAmB,CAAS,KAAC;EAI7B,iBAAwB,CAAc,IAAC;EACvC,iBAAwB,CAAc,MAAC;EACvC,iBAAwB,CAAc,QAAC;EACvC,6BAAoC,CAA0B,qBAAC;EAE/D,kBAAyB,CAAe,SAAC;EACzC,qBAA4B,CAAkB,SAAC;EAC/C,qBAA4B,CAAkB,OAAC;EAC/C,qBAA4B,CAAkB,QAAC;EAC/C,sBAA6B,CAAmB,KAAC;EACjD,uBAA8B,CAAoB,MAAC;EAGnD,eAAsB,CAAY,QAAC;EACnC,qBAA4B,CAAkB,QAAC;EAE/C,eAAsB,CAAY,QAAC;EAEnC,iBAAwB,CAAc,QAAC;CACxC;;ACzDD,AAAA,CAAC;AACD,CAAC,AAAA,QAAQ;AACT,CAAC,AAAA,OAAO,CAAC;EACP,UAAU,EAAE,UAAU;CACvB;;AAcG,MAAM,EAAE,sBAAsB,EAAE,aAAa;EDjCjD,AAAA,KAAK,CC2BC;IAOA,eAAe,EAAE,MAAM;GAG5B;;;AAWD,AAAA,IAAI,CAAC;EACH,MAAM,EAAE,CAAC;EACT,WAAW,EAAE,0BAAmD;E5BmP5D,SAAY,EAvER,wBAA2B;E4B1KnC,WAAW,EAAE,0BAAmD;EAChE,WAAW,EAAE,0BAAmD;EAChE,KAAK,EAAE,oBAAuC;EAC9C,UAAU,EAAE,yBAAiD;EAC7D,gBAAgB,EAAE,iBAAiC;EACnD,wBAAwB,EAAE,IAAI;EAC9B,2BAA2B,EjErClB,gBAAI;CiEsCd;;AAQD,AAAA,EAAE,CAAC;EACD,MAAM,EjE8MC,IAAI,CiE9MU,CAAC;EACtB,KAAK,EjE6gBuB,OAAO;EiE5gBnC,MAAM,EAAE,CAAC;EACT,UAAU,EjEyUkB,GAAG,CiEzUF,KAAK;EAClC,OAAO,EjE4gBqB,IAAG;CiE3gBhC;;AAmBD,AAVA,EAUE,ECzFF,GAAG,ED8FH,EAAE,EC1FF,GAAG,ED+FH,EAAE,EC3FF,GAAG,EDgGH,EAAE,EC5FF,GAAG,EDiGH,EAAE,EC7FF,GAAG,EDkGH,EAAE,EC9FF,GAAG,CD2DM;EACP,UAAU,EAAE,CAAC;EACb,aAAa,EjE2ce,MAAa;EiExczC,WAAW,EjE2ciB,GAAG;EiE1c/B,WAAW,EjE2ciB,GAAG;EiE1c/B,KAAK,EjE2cuB,OAAO;CiE1cpC;;AAED,AAAA,EAAE,ECzFF,GAAG,CDyFA;E5B6MK,SAAY,EAfV,sBAA2B;C4B3LpC;;A5BwCG,MAAM,EAAE,SAAS,EAAE,MAAM;E4B3C7B,AAAA,EAAE,ECzFF,GAAG,CDyFA;I5BoNK,SAAY,EAlFV,IAA2B;G4B/HpC;;;AAED,AAAA,EAAE,EC1FF,GAAG,CD0FA;E5BwMK,SAAY,EAfV,qBAA2B;C4BtLpC;;A5BmCG,MAAM,EAAE,SAAS,EAAE,MAAM;E4BtC7B,AAAA,EAAE,EC1FF,GAAG,CD0FA;I5B+MK,SAAY,EAlFV,OAA2B;G4B1HpC;;;AAED,AAAA,EAAE,EC3FF,GAAG,CD2FA;E5BmMK,SAAY,EAfV,wBAA2B;C4BjLpC;;A5B8BG,MAAM,EAAE,SAAS,EAAE,MAAM;E4BjC7B,AAAA,EAAE,EC3FF,GAAG,CD2FA;I5B0MK,SAAY,EAlFV,QAA2B;G4BrHpC;;;AAED,AAAA,EAAE,EC5FF,GAAG,CD4FA;E5B8LK,SAAY,EAfV,sBAA2B;C4B5KpC;;A5ByBG,MAAM,EAAE,SAAS,EAAE,MAAM;E4B5B7B,AAAA,EAAE,EC5FF,GAAG,CD4FA;I5BqMK,SAAY,EAlFV,MAA2B;G4BhHpC;;;AAED,AAAA,EAAE,EC7FF,GAAG,CD6FA;E5BqLG,SAAY,EAvER,OAA2B;C4B3GpC;;AAED,AAAA,EAAE,EC9FF,GAAG,CD8FA;E5BgLG,SAAY,EAvER,IAA2B;C4BtGpC;;AAQD,AAAA,CAAC,CAAC;EACA,UAAU,EAAE,CAAC;EACb,aAAa,EjEmNa,IAAI;CiElN/B;;AASD,AAAA,IAAI,CAAA,AAAA,KAAC,AAAA,EAAO;EACV,eAAe,EAAE,gBAAgB;EACjC,MAAM,EAAE,IAAI;EACZ,wBAAwB,EAAE,IAAI;CAC/B;;AAKD,AAAA,OAAO,CAAC;EACN,aAAa,EAAE,IAAI;EACnB,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,OAAO;CACrB;;AAKD,AAAA,EAAE;AACF,EAAE,CAAC;EACD,YAAY,EAAE,IAAI;CACnB;;AAED,AAAA,EAAE;AACF,EAAE;AACF,EAAE,CAAC;EACD,UAAU,EAAE,CAAC;EACb,aAAa,EAAE,IAAI;CACpB;;AAED,AAAA,EAAE,CAAC,EAAE;AACL,EAAE,CAAC,EAAE;AACL,EAAE,CAAC,EAAE;AACL,EAAE,CAAC,EAAE,CAAC;EACJ,aAAa,EAAE,CAAC;CACjB;;AAED,AAAA,EAAE,CAAC;EACD,WAAW,EjE+TiB,GAAG;CiE9ThC;;AAID,AAAA,EAAE,CAAC;EACD,aAAa,EAAE,KAAK;EACpB,WAAW,EAAE,CAAC;CACf;;AAKD,AAAA,UAAU,CAAC;EACT,MAAM,EAAE,QAAQ;CACjB;;AAOD,AAAA,CAAC;AACD,MAAM,CAAC;EACL,WAAW,EjEwSiB,GAAG;CiEvShC;;AAOD,AAAA,KAAK,ECnKL,MAAM,CDmKA;E5BmFA,SAAY,EAvER,OAA2B;C4BVpC;;AAKD,AAAA,IAAI,ECtKJ,KAAK,CDsKA;EACH,OAAO,EjEgYqB,KAAI;EiE/XhC,gBAAgB,EAAE,sBAA2C;CAC9D;;AAQD,AAAA,GAAG;AACH,GAAG,CAAC;EACF,QAAQ,EAAE,QAAQ;E5B+Dd,SAAY,EAvER,MAA2B;E4BUnC,WAAW,EAAE,CAAC;EACd,cAAc,EAAE,QAAQ;CACzB;;AAED,AAAA,GAAG,CAAC;EAAE,MAAM,EAAE,MAAM;CAAI;;AACxB,AAAA,GAAG,CAAC;EAAE,GAAG,EAAE,KAAK;CAAI;;AAKpB,AAAA,CAAC,CAAC;EACA,KAAK,EAAE,oBAAuC;EAC9C,eAAe,EjEoFyB,IAAI;CiE9E7C;;AARD,AAIE,CAJD,AAIE,MAAM,CAAC;EACN,KAAK,EAAE,0BAAmD;EAC1D,eAAe,EjEkFuB,IAAI;CiEjF3C;;AAQH,AACE,CADD,AAAA,IAAK,EAAA,AAAA,IAAC,AAAA,EAAM,IAAK,EAAA,AAAA,KAAC,AAAA,IAAnB,CAAC,AAAA,IAAK,EAAA,AAAA,IAAC,AAAA,EAAM,IAAK,EAAA,AAAA,KAAC,AAAA,EAEhB,MAAM,CAAC;EACN,KAAK,EAAE,OAAO;EACd,eAAe,EAAE,IAAI;CACtB;;AAMH,AAAA,GAAG;AACH,IAAI;AACJ,GAAG;AACH,IAAI,CAAC;EACH,WAAW,EjE0MiB,wBAAwB;EqCrLhD,SAAY,EAvER,GAA2B;C4BoDpC;;AAMD,AAAA,GAAG,CAAC;EACF,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,CAAC;EACb,aAAa,EAAE,IAAI;EACnB,QAAQ,EALine truncated
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/*!
|
||||
|
||||
=========================================================
|
||||
* Material Dashboard 2 - v3.1.0
|
||||
=========================================================
|
||||
|
||||
* Product Page: https://www.creative-tim.com/product/material-dashboard
|
||||
* Copyright 2023 Creative Tim (https://www.creative-tim.com)
|
||||
* Licensed under MIT (https://github.com/creativetimofficial/material-dashboard/blob/master/LICENSE.md)
|
||||
|
||||
* Coded by www.creative-tim.com
|
||||
|
||||
=========================================================
|
||||
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
*/
|
||||
/*!
|
||||
* Bootstrap v5.2.3 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2022 The Bootstrap Authors
|
||||
* Copyright 2011-2022 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
*/:root{--bs-blue:#63b3ed;--bs-indigo:#596cff;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#f56565;--bs-orange:#fd7e14;--bs-yellow:#fbd38d;--bs-green:#81e6d9;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#f0f2f5;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#e91e63;--bs-secondary:#7b809a;--bs-success:#4caf50;--bs-info:#1a73e8;--bs-warning:#fb8c00;--bs-danger:#f44335;--bs-light:#f0f2f5;--bs-dark:#344767;--bs-white:#fff;--bs-dark-blue:#1a237e;--bs-primary-rgb:233,30,99;--bs-secondary-rgb:,128,154;--bs-success-rgb:76,175,80;--bs-info-rgb:26,115,232;--bs-warning-rgb:251,140,0;--bs-danger-rgb:244,67,53;--bs-light-rgb:240,242,245;--bs-dark-rgb:52,71,103;--bs-dark-blue-rgb:26,35,126;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:,128,154;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:"Roboto",Helvetica,Arial,sans-serif;--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#7b809a;--bs-body-bg:#fff;--bs-border-color:#dee2e6;border:1px solid rgba(0,0,0,.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.125rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:0.75rem;--bs-border-radius-2xl:1rem;--bs-border-radius-pill:50rem;--bs-link-color:#e91e63;--bs-link-hover-color:#e91e63;--bs-code-color:#d63384;--bs-highlight-bg:#fcf8e3}*,:after,:before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:#344767}.h1,h1{font-size:calc(1.425rem + 2.1vw)}@media (min-width:1200px){.h1,h1{font-size:3rem}}.h2,h2{font-size:calc(1.35rem + 1.2vw)}@media (min-width:1200px){.h2,h2{font-size:2.25rem}}.h3,h3{font-size:calc(1.3125rem + .75vw)}@media (min-width:1200px){.h3,h3{font-size:1.875rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:600}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:700}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:var(--bs-link-color)}a,a:hover{text-decoration:none}a:hover{color:var(--bs-link-hover-color)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.125rem}kbd kbd{padding:0;font-size:1em;font-weight:600}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;borLine truncated
|
||||
|
||||
/*!
|
||||
|
||||
=========================================================
|
||||
* Material Dashboard 2 - v3.1.0
|
||||
=========================================================
|
||||
|
||||
* Product Page: https://www.creative-tim.com/product/material-dashboard
|
||||
* Copyright 2023 Creative Tim (https://www.creative-tim.com)
|
||||
* Licensed under MIT (site.license)
|
||||
|
||||
* Coded by www.creative-tim.com
|
||||
|
||||
=========================================================
|
||||
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
*/.alert-primary{background-image:linear-gradient(195deg,#ec407a,#d81b60)}.alert-secondary{background-image:linear-gradient(195deg,#747b8a,#495361)}.alert-success{background-image:linear-gradient(195deg,#66bb6a,#43a047)}.alert-info{background-image:linear-gradient(195deg,#49a3f1,#1a73e8)}.alert-warning{background-image:linear-gradient(195deg,#ffa726,#fb8c00)}.alert-danger{background-image:linear-gradient(195deg,#ef5350,#e53935)}.alert-light{background-image:linear-gradient(195deg,#ebeff4,#ced4da)}.alert-dark{background-image:linear-gradient(195deg,#42424a,#191919)}.btn-close:focus{box-shadow:none}.alert-dismissible .btn-close{background-image:none}.avatar{color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:1rem;border-radius:50rem;height:48px;width:48px;transition:all .2s ease-in-out}.avatar img{width:100%}.avatar+.avatar-content{display:inline-block;margin-left:.75rem}.avatar.avatar-raised{margin-top:-24px}.active .avatar.avatar-scale-up,.avatar.avatar-scale-up:hover{transform:scale(1.2)}.avatar-xxl{width:110px!important;height:110px!important}.avatar-xxl.avatar-raised{margin-top:-55px}.avatar-xl{width:74px!important;height:74px!important}.avatar-xl.avatar-raised{margin-top:-37px}.avatar-lg{width:58px!important;height:58px!important;font-size:.875rem}.avatar-lg.avatar-raised{margin-top:-29px}.avatar-sm{width:36px!important;height:36px!important;font-size:.875rem}.avatar-sm.avatar-raised{margin-top:-18px}.avatar-xs{width:24px!important;height:24px!important;font-size:.75rem}.avatar-xs.avatar-raised{margin-top:-12px}.avatar-group .avatar{position:relative;z-index:2;border:2px solid #fff}.avatar-group .avatar:hover{z-index:3}.avatar-group .avatar+.avatar{margin-left:-1rem}.badge.bg-primary{background:#e91e63}.badge.bg-secondary{background:#7b809a}.badge.bg-success{background:#4caf50}.badge.bg-info{background:#1a73e8}.badge.bg-warning{background:#fb8c00}.badge.bg-danger{background:#f44335}.badge.bg-light{background:#f0f2f5}.badge.bg-dark{background:#344767}.badge.bg-white{background:#fff}.badge.bg-dark-blue{background:#1a237e}.badge,.btn{text-transform:uppercase}.btn{margin-bottom:1rem;letter-spacing:0;background-size:150%;background-position-x:25%;position:relative;overflow:hidden;-webkit-appearance:none}.btn:not([class*=btn-outline-]){border:0}.btn:active,.btn:active:focus,.btn:active:hover{box-shadow:0 3px 5px -1px rgba(0,0,0,.09),0 2px 3px -1px rgba(0,0,0,.07);transform:none;opacity:.85}.btn.bg-white:hover{color:#7b809a}.btn.btn-link{font-weight:700}.btn.btn-link,.btn.btn-link:focus,.btn.btn-link:hover{box-shadow:none}.btn.btn-round{border-radius:1.875rem}.btn.btn-icon-only{width:2.375rem;height:2.375rem;padding:.7rem}.btn-group-sm>.btn.btn-icon-only,.btn.btn-sm.btn-icon-only{width:1.5rem;height:1.5rem;padding:.3rem}.btn-group-sm>.btn i,.btn.btn-sm i{font-size:.5rem}.btn-group-lg>.btn.btn-icon-only,.btn.btn-lg.btn-icon-only{width:3.25rem;height:3.25rem;padding:1rem}.btn-group-lg>.btn i,.btn.btn-lg i{font-size:1.2rem;position:relative;top:0}.btn.btn-rounded{border-radius:1.875rem}.btn .material-icons{vertical-align:middle;margin-top:-1px;margin-bottom:-1px;font-size:1.1rem;display:inline-block;top:0}.btn-check:checked+.btn svg .color-background{fill:#fff}.btn-check:checked+.btn:hover svg .color-background{fill:#344767}.icon-move-right i{transition:all .2s cubic-bezier(.34,1.61,.7,1.3)}.icon-move-right:focus i,.icon-move-right:hover i{transform:translateX(5px)}.icon-move-left i{transition:all .2s cubic-bezier(.34,1.61,.7,1.3)}.icon-move-left:focus i,.icon-move-left:hover i{transform:translateX(-5px)}.btn-primary,.btn.bg-gradient-primary{box-shadow:0 3px 3px 0 rgba(233,30,99,.15),0 3px 1px -2px rgba(233,30,99,.2),0 1px 5px 0 rgba(233,30,99,.15)}.btn-primary:hover,.btn.bg-gradient-primary:hover{background-color:#e91e63;border-color:#e91e63;box-shadow:0 14px 26px -12px rgba(233,30,99,.4),0 4px 23px 0 rgba(233,30,99,.15),0 8px 10px -5px rgba(233,30,99,.2)}.btn-primary .btn.bg-outline-primary,.btn.bg-gradient-primary .btn.bg-outline-primary{border:1px solid #e91e63}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.btn.bg-gradient-primary:not(:disabled):not(.disabled).active,.btn.bg-gradient-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle,.show>.btn.bg-gradient-primary.dropdown-toggle{color:color-yiq(#e91e63);background-color:#e91e63}.btn-primary.focus,.btn-primary:focus,.btn.bg-gradient-primary.focus,.btn.bg-gradient-primary:focus{color:#fff}.btn-outline-primary{box-shadow:none}.btn-outline-primary:hover:not(.active){background-color:transparent;opacity:.75;box-shadow:none;color:#e91e63}.btn-secondary,.btn.bg-gradient-secondary{box-shadow:0 3px 3px 0 rgba(,128,154,.15),0 3px 1px -2px rgba(,128,154,.2),0 1px 5px 0 rgba(,128,154,.15)}.btn-secondary:hover,.btn.bg-gradient-secondary:hover{background-color:#7b809a;border-color:#7b809a;box-shadow:0 14px 26px -12px rgba(,128,154,.4),0 4px 23px 0 rgba(,128,1Line truncated
|
||||
|
||||
/*! nouislider - 14.6.3 - 11/19/2020 */.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-ms-touch-action:none;touch-action:none;-ms-user-select:none;-moz-user-select:none;user-select:none;box-sizing:border-box}.noUi-target{position:relative}.noUi-base,.noUi-connects{width:100%;height:2px;position:relative;z-index:1;top:0}.noUi-connects{z-index:0;overflow:hidden}.noUi-connect,.noUi-origin{will-change:transform;position:absolute;z-index:1;top:0;right:0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;-webkit-transform-style:preserve-3d;transform-origin:0 0;transform-style:flat}.noUi-connect{height:100%;width:100%;border-radius:.25rem}.noUi-origin{height:10%;width:10%}.noUi-txt-dir-rtl.noUi-horizontal .noUi-origin{left:0;right:auto}.noUi-vertical .noUi-origin{width:0}.noUi-horizontal .noUi-origin{height:0}.noUi-handle{backface-visibility:hidden;position:absolute}.noUi-touch-area{height:100%;width:100%}.noUi-state-tap .noUi-connect,.noUi-state-tap .noUi-origin{transition:transform .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:2px}.noUi-horizontal .noUi-handle{border-radius:50%;background-color:#fff;box-shadow:0 1px 13px 0 rgba(0,0,0,.2);height:14px;width:14px;cursor:pointer;margin-top:-6px;outline:none;right:-10px}.noUi-vertical{width:3px}.noUi-vertical .noUi-handle{width:28px;height:34px;right:-6px;top:-17px}.noUi-txt-dir-rtl.noUi-horizontal .noUi-handle{left:-17px;right:auto}.noUi-target{background:#f0f2f5;border-radius:.25rem}.noUi-connects{border-radius:3px}.noUi-connect{background:#e91e63}.noUi-draggable{cursor:ew-resize}.noUi-vertical .noUi-draggable{cursor:ns-resize}.noUi-handle{border:1px solid #e91e63;border-radius:3px;background:#fff;cursor:default;box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ebebeb,0 3px 6px -3px #bbb;webkit-transition:.3s ease 0s;-moz-transition:.3s ease 0s;-ms-transition:.3s ease 0s;-o-transform:.3s ease 0s;transition:.3s ease 0s}.noUi-active{box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ddd,0 3px 6px -3px #bbb;transform:scale3d(1.5,1.5,1)}[disabled] .noUi-connect{background:#b8b8b8}[disabled].noUi-handle,[disabled] .noUi-handle,[disabled].noUi-target{cursor:not-allowed}.noUi-pips,.noUi-pips *{box-sizing:border-box}.noUi-pips{position:absolute;color:#999}.noUi-value{position:absolute;white-space:nowrap;text-align:center}.noUi-value-sub{color:#ccc;font-size:10px}.noUi-marker{position:absolute;background:#ccc}.noUi-marker-large,.noUi-marker-sub{background:#aaa}.noUi-pips-horizontal{padding:10px 0;height:80px;top:100%;left:0;width:100%}.noUi-value-horizontal{transform:translate(-50%,50%)}.noUi-rtl .noUi-value-horizontal{transform:translate(50%,50%)}.noUi-marker-horizontal.noUi-marker{margin-left:-1px;width:2px;height:5px}.noUi-marker-horizontal.noUi-marker-sub{height:10px}.noUi-marker-horizontal.noUi-marker-large{height:15px}.noUi-pips-vertical{padding:0 10px;height:100%;top:0;left:100%}.noUi-value-vertical{transform:translateY(-50%);padding-left:25px}.noUi-rtl .noUi-value-vertical{transform:translateY(50%)}.noUi-marker-vertical.noUi-marker{width:5px;height:2px;margin-top:-1px}.noUi-marker-vertical.noUi-marker-sub{width:10px}.noUi-marker-vertical.noUi-marker-large{width:15px}.noUi-tooltip{display:block;position:absolute;border:1px solid #d9d9d9;border-radius:3px;background:#fff;color:#000;padding:5px;text-align:center;white-space:nowrap}.noUi-horizontal .noUi-tooltip{transform:translate(-50%);left:50%;bottom:120%}.noUi-vertical .noUi-tooltip{transform:translateY(-50%);top:50%;right:120%}.noUi-horizontal .noUi-origin>.noUi-tooltip{transform:translate(50%);left:auto;bottom:10px}.noUi-vertical .noUi-origin>.noUi-tooltip{transform:translateY(-18px);top:auto;right:28px}code[class*=language-],pre[class*=language-]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-]::selection,code[class*=language-] ::selection,pre[class*=language-]::selection,pre[class*=language-] ::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;overflow:auto;border-radius:.75rem}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f8f9fa}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,Line truncated
|
||||
@@ -0,0 +1,597 @@
|
||||
/*--------------------------------
|
||||
|
||||
hermes-dashboard-icons Web Font - built using nucleoapp.com
|
||||
License - nucleoapp.com/license/
|
||||
|
||||
-------------------------------- */
|
||||
@font-face {
|
||||
font-family: 'NucleoIcons';
|
||||
src: url('../fonts/nucleo-icons.eot');
|
||||
src: url('../fonts/nucleo-icons.eot') format('embedded-opentype'), url('../fonts/nucleo-icons.woff2') format('woff2'), url('../fonts/nucleo-icons.woff') format('woff'), url('../fonts/nucleo-icons.ttf') format('truetype'), url('../fonts/nucleo-icons.svg') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/*------------------------
|
||||
base class definition
|
||||
-------------------------*/
|
||||
.ni {
|
||||
display: inline-block;
|
||||
font: normal normal normal 14px/1 NucleoIcons;
|
||||
font-size: inherit;
|
||||
text-rendering: auto;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
/*------------------------
|
||||
change icon size
|
||||
-------------------------*/
|
||||
.ni-lg {
|
||||
font-size: 1.33333333em;
|
||||
line-height: 0.75em;
|
||||
vertical-align: -15%;
|
||||
}
|
||||
|
||||
.ni-2x {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.ni-3x {
|
||||
font-size: 3em;
|
||||
}
|
||||
|
||||
.ni-4x {
|
||||
font-size: 4em;
|
||||
}
|
||||
|
||||
.ni-5x {
|
||||
font-size: 5em;
|
||||
}
|
||||
|
||||
/*----------------------------------
|
||||
add a square/circle background
|
||||
-----------------------------------*/
|
||||
.ni.square,
|
||||
.ni.circle {
|
||||
padding: 0.33333333em;
|
||||
vertical-align: -16%;
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
.ni.circle {
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
/*------------------------
|
||||
list icons
|
||||
-------------------------*/
|
||||
.ni-ul {
|
||||
padding-left: 0;
|
||||
margin-left: 2.14285714em;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.ni-ul>li {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.ni-ul>li>.ni {
|
||||
position: absolute;
|
||||
left: -1.57142857em;
|
||||
top: 0.14285714em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.ni-ul>li>.ni.lg {
|
||||
top: 0;
|
||||
left: -1.35714286em;
|
||||
}
|
||||
|
||||
.ni-ul>li>.ni.circle,
|
||||
.ni-ul>li>.ni.square {
|
||||
top: -0.19047619em;
|
||||
left: -1.9047619em;
|
||||
}
|
||||
|
||||
/*------------------------
|
||||
spinning icons
|
||||
-------------------------*/
|
||||
.ni.spin {
|
||||
-webkit-animation: nc-spin 2s infinite linear;
|
||||
-moz-animation: nc-spin 2s infinite linear;
|
||||
animation: nc-spin 2s infinite linear;
|
||||
}
|
||||
|
||||
@-webkit-keyframes nc-spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@-moz-keyframes nc-spin {
|
||||
0% {
|
||||
-moz-transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
-moz-transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes nc-spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
-moz-transform: rotate(0deg);
|
||||
-ms-transform: rotate(0deg);
|
||||
-o-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-moz-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
-o-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
/*------------------------
|
||||
rotated/flipped icons
|
||||
-------------------------*/
|
||||
.ni.rotate-90 {
|
||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
|
||||
-webkit-transform: rotate(90deg);
|
||||
-moz-transform: rotate(90deg);
|
||||
-ms-transform: rotate(90deg);
|
||||
-o-transform: rotate(90deg);
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
.ni.rotate-180 {
|
||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
|
||||
-webkit-transform: rotate(180deg);
|
||||
-moz-transform: rotate(180deg);
|
||||
-ms-transform: rotate(180deg);
|
||||
-o-transform: rotate(180deg);
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.ni.rotate-270 {
|
||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
|
||||
-webkit-transform: rotate(270deg);
|
||||
-moz-transform: rotate(270deg);
|
||||
-ms-transform: rotate(270deg);
|
||||
-o-transform: rotate(270deg);
|
||||
transform: rotate(270deg);
|
||||
}
|
||||
|
||||
.ni.flip-y {
|
||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0);
|
||||
-webkit-transform: scale(-1, 1);
|
||||
-moz-transform: scale(-1, 1);
|
||||
-ms-transform: scale(-1, 1);
|
||||
-o-transform: scale(-1, 1);
|
||||
transform: scale(-1, 1);
|
||||
}
|
||||
|
||||
.ni.flip-x {
|
||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
|
||||
-webkit-transform: scale(1, -1);
|
||||
-moz-transform: scale(1, -1);
|
||||
-ms-transform: scale(1, -1);
|
||||
-o-transform: scale(1, -1);
|
||||
transform: scale(1, -1);
|
||||
}
|
||||
|
||||
/*------------------------
|
||||
font icons
|
||||
-------------------------*/
|
||||
|
||||
.ni-active-40::before {
|
||||
content: "\ea02";
|
||||
}
|
||||
|
||||
.ni-air-baloon::before {
|
||||
content: "\ea03";
|
||||
}
|
||||
|
||||
.ni-album-2::before {
|
||||
content: "\ea04";
|
||||
}
|
||||
|
||||
.ni-align-center::before {
|
||||
content: "\ea05";
|
||||
}
|
||||
|
||||
.ni-align-left-2::before {
|
||||
content: "\ea06";
|
||||
}
|
||||
|
||||
.ni-ambulance::before {
|
||||
content: "\ea07";
|
||||
}
|
||||
|
||||
.ni-app::before {
|
||||
content: "\ea08";
|
||||
}
|
||||
|
||||
.ni-archive-2::before {
|
||||
content: "\ea09";
|
||||
}
|
||||
|
||||
.ni-atom::before {
|
||||
content: "\ea0a";
|
||||
}
|
||||
|
||||
.ni-badge::before {
|
||||
content: "\ea0b";
|
||||
}
|
||||
|
||||
.ni-bag-17::before {
|
||||
content: "\ea0c";
|
||||
}
|
||||
|
||||
.ni-basket::before {
|
||||
content: "\ea0d";
|
||||
}
|
||||
|
||||
.ni-bell-55::before {
|
||||
content: "\ea0e";
|
||||
}
|
||||
|
||||
.ni-bold-down::before {
|
||||
content: "\ea0f";
|
||||
}
|
||||
|
||||
.ni-bold-left::before {
|
||||
content: "\ea10";
|
||||
}
|
||||
|
||||
.ni-bold-right::before {
|
||||
content: "\ea11";
|
||||
}
|
||||
|
||||
.ni-bold-up::before {
|
||||
content: "\ea12";
|
||||
}
|
||||
|
||||
.ni-bold::before {
|
||||
content: "\ea13";
|
||||
}
|
||||
|
||||
.ni-book-bookmark::before {
|
||||
content: "\ea14";
|
||||
}
|
||||
|
||||
.ni-books::before {
|
||||
content: "\ea15";
|
||||
}
|
||||
|
||||
.ni-box-2::before {
|
||||
content: "\ea16";
|
||||
}
|
||||
|
||||
.ni-briefcase-24::before {
|
||||
content: "\ea17";
|
||||
}
|
||||
|
||||
.ni-building::before {
|
||||
content: "\ea18";
|
||||
}
|
||||
|
||||
.ni-bulb-61::before {
|
||||
content: "\ea19";
|
||||
}
|
||||
|
||||
.ni-bullet-list-67::before {
|
||||
content: "\ea1a";
|
||||
}
|
||||
|
||||
.ni-bus-front-12::before {
|
||||
content: "\ea1b";
|
||||
}
|
||||
|
||||
.ni-button-pause::before {
|
||||
content: "\ea1c";
|
||||
}
|
||||
|
||||
.ni-button-play::before {
|
||||
content: "\ea1d";
|
||||
}
|
||||
|
||||
.ni-button-power::before {
|
||||
content: "\ea1e";
|
||||
}
|
||||
|
||||
.ni-calendar-grid-58::before {
|
||||
content: "\ea1f";
|
||||
}
|
||||
|
||||
.ni-camera-compact::before {
|
||||
content: "\ea20";
|
||||
}
|
||||
|
||||
.ni-caps-small::before {
|
||||
content: "\ea21";
|
||||
}
|
||||
|
||||
.ni-cart::before {
|
||||
content: "\ea22";
|
||||
}
|
||||
|
||||
.ni-chart-bar-32::before {
|
||||
content: "\ea23";
|
||||
}
|
||||
|
||||
.ni-chart-pie-35::before {
|
||||
content: "\ea24";
|
||||
}
|
||||
|
||||
.ni-chat-round::before {
|
||||
content: "\ea25";
|
||||
}
|
||||
|
||||
.ni-check-bold::before {
|
||||
content: "\ea26";
|
||||
}
|
||||
|
||||
.ni-circle-08::before {
|
||||
content: "\ea27";
|
||||
}
|
||||
|
||||
.ni-cloud-download-95::before {
|
||||
content: "\ea28";
|
||||
}
|
||||
|
||||
.ni-cloud-upload-96::before {
|
||||
content: "\ea29";
|
||||
}
|
||||
|
||||
.ni-compass-04::before {
|
||||
content: "\ea2a";
|
||||
}
|
||||
|
||||
.ni-controller::before {
|
||||
content: "\ea2b";
|
||||
}
|
||||
|
||||
.ni-credit-card::before {
|
||||
content: "\ea2c";
|
||||
}
|
||||
|
||||
.ni-curved-next::before {
|
||||
content: "\ea2d";
|
||||
}
|
||||
|
||||
.ni-delivery-fast::before {
|
||||
content: "\ea2e";
|
||||
}
|
||||
|
||||
.ni-diamond::before {
|
||||
content: "\ea2f";
|
||||
}
|
||||
|
||||
.ni-email-83::before {
|
||||
content: "\ea30";
|
||||
}
|
||||
|
||||
.ni-fat-add::before {
|
||||
content: "\ea31";
|
||||
}
|
||||
|
||||
.ni-fat-delete::before {
|
||||
content: "\ea32";
|
||||
}
|
||||
|
||||
.ni-fat-remove::before {
|
||||
content: "\ea33";
|
||||
}
|
||||
|
||||
.ni-favourite-28::before {
|
||||
content: "\ea34";
|
||||
}
|
||||
|
||||
.ni-folder-17::before {
|
||||
content: "\ea35";
|
||||
}
|
||||
|
||||
.ni-glasses-2::before {
|
||||
content: "\ea36";
|
||||
}
|
||||
|
||||
.ni-hat-3::before {
|
||||
content: "\ea37";
|
||||
}
|
||||
|
||||
.ni-headphones::before {
|
||||
content: "\ea38";
|
||||
}
|
||||
|
||||
.ni-html5::before {
|
||||
content: "\ea39";
|
||||
}
|
||||
|
||||
.ni-istanbul::before {
|
||||
content: "\ea3a";
|
||||
}
|
||||
|
||||
.ni-key-25::before {
|
||||
content: "\ea3b";
|
||||
}
|
||||
|
||||
.ni-laptop::before {
|
||||
content: "\ea3c";
|
||||
}
|
||||
|
||||
.ni-like-2::before {
|
||||
content: "\ea3d";
|
||||
}
|
||||
|
||||
.ni-lock-circle-open::before {
|
||||
content: "\ea3e";
|
||||
}
|
||||
|
||||
.ni-map-big::before {
|
||||
content: "\ea3f";
|
||||
}
|
||||
|
||||
.ni-mobile-button::before {
|
||||
content: "\ea40";
|
||||
}
|
||||
|
||||
.ni-money-coins::before {
|
||||
content: "\ea41";
|
||||
}
|
||||
|
||||
.ni-note-03::before {
|
||||
content: "\ea42";
|
||||
}
|
||||
|
||||
.ni-notification-70::before {
|
||||
content: "\ea43";
|
||||
}
|
||||
|
||||
.ni-palette::before {
|
||||
content: "\ea44";
|
||||
}
|
||||
|
||||
.ni-paper-diploma::before {
|
||||
content: "\ea45";
|
||||
}
|
||||
|
||||
.ni-pin-3::before {
|
||||
content: "\ea46";
|
||||
}
|
||||
|
||||
.ni-planet::before {
|
||||
content: "\ea47";
|
||||
}
|
||||
|
||||
.ni-ruler-pencil::before {
|
||||
content: "\ea48";
|
||||
}
|
||||
|
||||
.ni-satisfied::before {
|
||||
content: "\ea49";
|
||||
}
|
||||
|
||||
.ni-scissors::before {
|
||||
content: "\ea4a";
|
||||
}
|
||||
|
||||
.ni-send::before {
|
||||
content: "\ea4b";
|
||||
}
|
||||
|
||||
.ni-settings-gear-65::before {
|
||||
content: "\ea4c";
|
||||
}
|
||||
|
||||
.ni-settings::before {
|
||||
content: "\ea4d";
|
||||
}
|
||||
|
||||
.ni-single-02::before {
|
||||
content: "\ea4e";
|
||||
}
|
||||
|
||||
.ni-single-copy-04::before {
|
||||
content: "\ea4f";
|
||||
}
|
||||
|
||||
.ni-sound-wave::before {
|
||||
content: "\ea50";
|
||||
}
|
||||
|
||||
.ni-spaceship::before {
|
||||
content: "\ea51";
|
||||
}
|
||||
|
||||
.ni-square-pin::before {
|
||||
content: "\ea52";
|
||||
}
|
||||
|
||||
.ni-support-16::before {
|
||||
content: "\ea53";
|
||||
}
|
||||
|
||||
.ni-tablet-button::before {
|
||||
content: "\ea54";
|
||||
}
|
||||
|
||||
.ni-tag::before {
|
||||
content: "\ea55";
|
||||
}
|
||||
|
||||
.ni-tie-bow::before {
|
||||
content: "\ea56";
|
||||
}
|
||||
|
||||
.ni-time-alarm::before {
|
||||
content: "\ea57";
|
||||
}
|
||||
|
||||
.ni-trophy::before {
|
||||
content: "\ea58";
|
||||
}
|
||||
|
||||
.ni-tv-2::before {
|
||||
content: "\ea59";
|
||||
}
|
||||
|
||||
.ni-umbrella-13::before {
|
||||
content: "\ea5a";
|
||||
}
|
||||
|
||||
.ni-user-run::before {
|
||||
content: "\ea5b";
|
||||
}
|
||||
|
||||
.ni-vector::before {
|
||||
content: "\ea5c";
|
||||
}
|
||||
|
||||
.ni-watch-time::before {
|
||||
content: "\ea5d";
|
||||
}
|
||||
|
||||
.ni-world::before {
|
||||
content: "\ea5e";
|
||||
}
|
||||
|
||||
.ni-zoom-split-in::before {
|
||||
content: "\ea5f";
|
||||
}
|
||||
|
||||
.ni-collection::before {
|
||||
content: "\ea60";
|
||||
}
|
||||
|
||||
.ni-image::before {
|
||||
content: "\ea61";
|
||||
}
|
||||
|
||||
.ni-shop::before {
|
||||
content: "\ea62";
|
||||
}
|
||||
|
||||
.ni-ungroup::before {
|
||||
content: "\ea63";
|
||||
}
|
||||
|
||||
.ni-world-2::before {
|
||||
content: "\ea64";
|
||||
}
|
||||
|
||||
.ni-ui-04::before {
|
||||
content: "\ea65";
|
||||
}
|
||||
|
||||
|
||||
/* all icon font classes list here */
|
||||
@@ -0,0 +1,135 @@
|
||||
/* Generated using nucleoapp.com */
|
||||
/* --------------------------------
|
||||
|
||||
Icon colors
|
||||
|
||||
-------------------------------- */
|
||||
|
||||
.icon {
|
||||
display: inline-block;
|
||||
/* icon primary color */
|
||||
color: #111111;
|
||||
height: 1em;
|
||||
width: 1em;
|
||||
}
|
||||
|
||||
.icon use {
|
||||
/* icon secondary color - fill */
|
||||
fill: #7ea6f6;
|
||||
}
|
||||
|
||||
.icon.icon-outline use {
|
||||
/* icon secondary color - stroke */
|
||||
stroke: #7ea6f6;
|
||||
}
|
||||
|
||||
/* --------------------------------
|
||||
|
||||
Change icon size
|
||||
|
||||
-------------------------------- */
|
||||
|
||||
.icon-xs {
|
||||
height: 0.5em;
|
||||
width: 0.5em;
|
||||
}
|
||||
|
||||
.icon-sm {
|
||||
height: 0.8em;
|
||||
width: 0.8em;
|
||||
}
|
||||
|
||||
.icon-lg {
|
||||
height: 1.6em;
|
||||
width: 1.6em;
|
||||
}
|
||||
|
||||
.icon-xl {
|
||||
height: 2em;
|
||||
width: 2em;
|
||||
}
|
||||
|
||||
/* --------------------------------
|
||||
|
||||
Align icon and text
|
||||
|
||||
-------------------------------- */
|
||||
|
||||
.icon-text-aligner {
|
||||
/* add this class to parent element that contains icon + text */
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.icon-text-aligner .icon {
|
||||
color: inherit;
|
||||
margin-right: 0.4em;
|
||||
}
|
||||
|
||||
.icon-text-aligner .icon use {
|
||||
color: inherit;
|
||||
fill: currentColor;
|
||||
}
|
||||
|
||||
.icon-text-aligner .icon.icon-outline use {
|
||||
stroke: currentColor;
|
||||
}
|
||||
|
||||
/* --------------------------------
|
||||
|
||||
Icon reset values - used to enable color customizations
|
||||
|
||||
-------------------------------- */
|
||||
|
||||
.icon {
|
||||
fill: currentColor;
|
||||
stroke: none;
|
||||
}
|
||||
|
||||
.icon.icon-outline {
|
||||
fill: none;
|
||||
stroke: currentColor;
|
||||
}
|
||||
|
||||
.icon use {
|
||||
stroke: none;
|
||||
}
|
||||
|
||||
.icon.icon-outline use {
|
||||
fill: none;
|
||||
}
|
||||
|
||||
/* --------------------------------
|
||||
|
||||
Stroke effects - Nucleo outline icons
|
||||
|
||||
- 16px icons -> up to 1px stroke (16px outline icons do not support stroke changes)
|
||||
- 24px, 32px icons -> up to 2px stroke
|
||||
- 48px, 64px icons -> up to 4px stroke
|
||||
|
||||
-------------------------------- */
|
||||
|
||||
.icon-outline.icon-stroke-1 {
|
||||
stroke-width: 1px;
|
||||
}
|
||||
|
||||
.icon-outline.icon-stroke-2 {
|
||||
stroke-width: 2px;
|
||||
}
|
||||
|
||||
.icon-outline.icon-stroke-3 {
|
||||
stroke-width: 3px;
|
||||
}
|
||||
|
||||
.icon-outline.icon-stroke-4 {
|
||||
stroke-width: 4px;
|
||||
}
|
||||
|
||||
.icon-outline.icon-stroke-1 use,
|
||||
.icon-outline.icon-stroke-3 use {
|
||||
-webkit-transform: translateX(0.5px) translateY(0.5px);
|
||||
-moz-transform: translateX(0.5px) translateY(0.5px);
|
||||
-ms-transform: translateX(0.5px) translateY(0.5px);
|
||||
-o-transform: translateX(0.5px) translateY(0.5px);
|
||||
transform: translateX(0.5px) translateY(0.5px);
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
/*!
|
||||
* Bootstrap v5.2.3 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
*/
|
||||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},m=t=>{"function"==typeof t&&t()},_=(e,i,n=!0)=>{if(!n)return void m(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),m(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=N(t);return C.has(o)||(o=t),[n,s,o]}function D(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return j(s,{delegateTarget:r}),n.oneOff&&P.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return j(n,{delegateTarget:t}),i.oneOff&&P.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function S(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function I(t,e,i,n){const s=e[i]||{};for(const o of Object.keys(s))if(o.includes(n)){const n=s[o];S(t,e,i,n.callable,n.delegationSelector)}}function N(t){return t=t.replace(y,""),T[t]||t}const P={on(t,e,i,n){D(t,e,i,n,!1)},one(t,e,i,n){D(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))I(t,l,i,e.slice(1));for(const i of Object.keys(c)){const n=i.replace(w,"");if(!a||e.includes(n)){const
Line truncated
|
||||
@@ -0,0 +1,6 @@
|
||||
/*!
|
||||
* Bootstrap v5.2.3 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
*/
|
||||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e(t.Popper)}(this,(function(t){"use strict";function e(t){if(t&&t.__esModule)return t;const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t)for(const i in t)if("default"!==i){const s=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(e,i,s.get?s:{enumerable:!0,get:()=>t[i]})}return e.default=t,Object.freeze(e)}const i=e(t),s="transitionend",n=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},o=t=>{const e=n(t);return e&&document.querySelector(e)?e:null},r=t=>{const e=n(t);return e?document.querySelector(e):null},a=t=>{t.dispatchEvent(new Event(s))},l=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),c=t=>l(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,h=t=>{if(!l(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},d=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),u=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?u(t.parentNode):null},_=()=>{},g=t=>{t.offsetHeight},f=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,p=[],m=()=>"rtl"===document.documentElement.dir,b=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,s=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=s,t.jQueryInterface)}},"loading"===document.readyState?(p.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of p)t()})),p.push(e)):e()},v=t=>{"function"==typeof t&&t()},y=(t,e,i=!0)=>{if(!i)return void v(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const s=Number.parseFloat(e),n=Number.parseFloat(i);return s||n?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let o=!1;const r=({target:i})=>{i===e&&(o=!0,e.removeEventListener(s,r),v(t))};e.addEventListener(s,r),setTimeout((()=>{o||a(e)}),n)},w=(t,e,i,s)=>{const n=t.length;let o=t.indexOf(e);return-1===o?!i&&s?t[n-1]:t[0]:(o+=i?1:-1,s&&(o=(o+n)%n),t[Math.max(0,Math.min(o,n-1))])},A=/[^.]*(?=\..*)\.|.*/,E=/\..*/,C=/::\d+$/,T={};let k=1;const L={mouseenter:"mouseover",mouseleave:"mouseout"},O=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function I(t,e){return e&&`${e}::${k++}`||t.uidEvent||k++}function S(t){const e=I(t);return t.uidEvent=e,T[e]=T[e]||{},T[e]}function D(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function N(t,e,i){const s="string"==typeof e,n=s?i:e||i;let o=j(t);return O.has(o)||(o=t),[s,n,o]}function P(t,e,i,s,n){if("string"!=typeof e||!t)return;let[o,r,a]=N(e,i,s);if(e in L){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=S(t),c=l[a]||(l[a]={}),h=D(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&n);const d=I(r,e.replace(A,"")),u=o?function(t,e,i){return function s(n){const o=t.querySelectorAll(e);for(let{target:r}=n;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return F(n,{delegateTarget:r}),s.oneOff&&$.off(t,n.type,e,i),i.apply(r,[n])}}(t,i,r):function(t,e){return function i(s){return F(s,{delegateTarget:t}),i.oneOff&&$.off(t,s.type,e),e.apply(t,[s])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=n,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function x(t,e,i,s,n){const o=D(e[i],s,n);o&&(t.removeEventListener(i,o,Boolean(n)),delete e[i][o.uidEvent])}function M(t,e,i,s){const n=e[i]||{};for(const o of Object.keys(n))if(o.includes(s)){const s=n[o];x(t,e,i,s.callable,s.delegationSelector)}}function j(t){return t=Line truncated
|
||||
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* @popperjs/core v2.11.7 - MIT License
|
||||
*/
|
||||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var l=(n(e)?t(e):window).visualViewport,u=!c()&&i,d=(a.left+(u&&l?l.offsetLeft:0))/f,m=(a.top+(u&&l?l.offsetTop:0))/p,h=a.width/f,v=a.height/p;return{width:h,height:v,top:m,right:d+h,bottom:m+v,left:d,x:d,y:m}}function l(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function u(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function m(e){return p(d(e)).left+l(e).scrollLeft}function h(e){return t(e).getComputedStyle(e)}function v(e){var t=h(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),h=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==u(n)||v(h))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:l(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):h&&(b.x=m(h))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===u(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function w(e){return["html","body","#document"].indexOf(u(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:w(b(e))}function x(e,n){var r;void 0===n&&(n=[]);var o=w(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(x(b(s)))}function O(e){return["table","td","th"].indexOf(u(e))>=0}function j(e){return r(e)&&"fixed"!==h(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===h(i).position;)i=j(i);return i&&("html"===u(i)||"body"===u(i)&&"static"===h(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===h(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(u(n))<0;){var i=h(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var S="top",P="bottom",A="right",k="left",D="auto",L=[S,P,A,k],M="start",T="end",q="clippingParents",W="viewport",H="popper",B="reference",R=L.reduce((function(e,t){return e.concat([t+"-"+M,t+"-"+T])}),[]),C=[].concat(L,[D]).reduce((function(e,t){return e.concat([t,t+"-"+M,t+"-"+T])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function I(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function N(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return[].concat(n).reduce((function(e,t){return e.replace(/%s/,t)}),e)}var F='Popper: modifier "%s" provided an invalid %s property, expected %s but got %s',U='Popper: modifier "%s" requires "%s", but "%s" modifier is not available',_=["name","enabled","phase","fn","effect","requires","options"];function z(e){return e.split("-")[0]}function G(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function X(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function Y(e,r,o){return r===W?X(function(e,n){vLine truncated
|
||||
@@ -0,0 +1,876 @@
|
||||
// =========================================================
|
||||
// Material Dashboard 2 - v3.1.0
|
||||
// =========================================================
|
||||
|
||||
// Product Page: https://www.creative-tim.com/product/material-dashboard
|
||||
// Copyright 2023 Creative Tim (https://www.creative-tim.com)
|
||||
// Licensed under MIT (https://github.com/creativetimofficial/material-dashboard/blob/master/LICENSE.md)
|
||||
|
||||
// Coded by www.creative-tim.com
|
||||
|
||||
// =========================================================
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
"use strict";
|
||||
(function() {
|
||||
var isWindows = navigator.platform.indexOf('Win') > -1 ? true : false;
|
||||
|
||||
if (isWindows) {
|
||||
// if we are on windows OS we activate the perfectScrollbar function
|
||||
if (document.getElementsByClassName('main-content')[0]) {
|
||||
var mainpanel = document.querySelector('.main-content');
|
||||
var ps = new PerfectScrollbar(mainpanel);
|
||||
};
|
||||
|
||||
if (document.getElementsByClassName('sidenav')[0]) {
|
||||
var sidebar = document.querySelector('.sidenav');
|
||||
var ps1 = new PerfectScrollbar(sidebar);
|
||||
};
|
||||
|
||||
if (document.getElementsByClassName('navbar-collapse')[0]) {
|
||||
var fixedplugin = document.querySelector('.navbar:not(.navbar-expand-lg) .navbar-collapse');
|
||||
var ps2 = new PerfectScrollbar(fixedplugin);
|
||||
};
|
||||
|
||||
if (document.getElementsByClassName('fixed-plugin')[0]) {
|
||||
var fixedplugin = document.querySelector('.fixed-plugin');
|
||||
var ps3 = new PerfectScrollbar(fixedplugin);
|
||||
};
|
||||
};
|
||||
})();
|
||||
|
||||
// Verify navbar blur on scroll
|
||||
if (document.getElementById('navbarBlur')) {
|
||||
navbarBlurOnScroll('navbarBlur');
|
||||
}
|
||||
|
||||
// initialization of Tooltips
|
||||
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
|
||||
var tooltipList = tooltipTriggerList.map(function(tooltipTriggerEl) {
|
||||
return new bootstrap.Tooltip(tooltipTriggerEl)
|
||||
})
|
||||
|
||||
// when input is focused add focused class for style
|
||||
function focused(el) {
|
||||
if (el.parentElement.classList.contains('input-group')) {
|
||||
el.parentElement.classList.add('focused');
|
||||
}
|
||||
}
|
||||
|
||||
// when input is focused remove focused class for style
|
||||
function defocused(el) {
|
||||
if (el.parentElement.classList.contains('input-group')) {
|
||||
el.parentElement.classList.remove('focused');
|
||||
}
|
||||
}
|
||||
|
||||
// helper for adding on all elements multiple attributes
|
||||
function setAttributes(el, options) {
|
||||
Object.keys(options).forEach(function(attr) {
|
||||
el.setAttribute(attr, options[attr]);
|
||||
})
|
||||
}
|
||||
|
||||
// adding on inputs attributes for calling the focused and defocused functions
|
||||
if (document.querySelectorAll('.input-group').length != 0) {
|
||||
var allInputs = document.querySelectorAll('input.form-control');
|
||||
allInputs.forEach(el => setAttributes(el, {
|
||||
"onfocus": "focused(this)",
|
||||
"onfocusout": "defocused(this)"
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
// Fixed Plugin
|
||||
|
||||
if (document.querySelector('.fixed-plugin')) {
|
||||
var fixedPlugin = document.querySelector('.fixed-plugin');
|
||||
var fixedPlugin = document.querySelector('.fixed-plugin');
|
||||
var fixedPluginButton = document.querySelector('.fixed-plugin-button');
|
||||
var fixedPluginButtonNav = document.querySelector('.fixed-plugin-button-nav');
|
||||
var fixedPluginCard = document.querySelector('.fixed-plugin .card');
|
||||
var fixedPluginCloseButton = document.querySelectorAll('.fixed-plugin-close-button');
|
||||
var navbar = document.getElementById('navbarBlur');
|
||||
var buttonNavbarFixed = document.getElementById('navbarFixed');
|
||||
|
||||
if (fixedPluginButton) {
|
||||
fixedPluginButton.onclick = function() {
|
||||
if (!fixedPlugin.classList.contains('show')) {
|
||||
fixedPlugin.classList.add('show');
|
||||
} else {
|
||||
fixedPlugin.classList.remove('show');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (fixedPluginButtonNav) {
|
||||
fixedPluginButtonNav.onclick = function() {
|
||||
if (!fixedPlugin.classList.contains('show')) {
|
||||
fixedPlugin.classList.add('show');
|
||||
} else {
|
||||
fixedPlugin.classList.remove('show');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fixedPluginCloseButton.forEach(function(el) {
|
||||
el.onclick = function() {
|
||||
fixedPlugin.classList.remove('show');
|
||||
}
|
||||
})
|
||||
|
||||
document.querySelector('body').onclick = function(e) {
|
||||
if (e.target != fixedPluginButton && e.target != fixedPluginButtonNav && e.target.closest('.fixed-plugin .card') != fixedPluginCard) {
|
||||
fixedPlugin.classList.remove('show');
|
||||
}
|
||||
}
|
||||
|
||||
if (navbar) {
|
||||
if (navbar.getAttribute('data-scroll') == 'true' && buttonNavbarFixed) {
|
||||
buttonNavbarFixed.setAttribute("checked", "true");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Set Sidebar Color
|
||||
function sidebarColor(a) {
|
||||
var parent = document.querySelector(".nav-link.active");
|
||||
var color = a.getAttribute("data-color");
|
||||
|
||||
if (parent.classList.contains('bg-gradient-primary')) {
|
||||
parent.classList.remove('bg-gradient-primary');
|
||||
}
|
||||
if (parent.classList.contains('bg-gradient-dark')) {
|
||||
parent.classList.remove('bg-gradient-dark');
|
||||
}
|
||||
if (parent.classList.contains('bg-gradient-info')) {
|
||||
parent.classList.remove('bg-gradient-info');
|
||||
}
|
||||
if (parent.classList.contains('bg-gradient-success')) {
|
||||
parent.classList.remove('bg-gradient-success');
|
||||
}
|
||||
if (parent.classList.contains('bg-gradient-warning')) {
|
||||
parent.classList.remove('bg-gradient-warning');
|
||||
}
|
||||
if (parent.classList.contains('bg-gradient-danger')) {
|
||||
parent.classList.remove('bg-gradient-danger');
|
||||
}
|
||||
parent.classList.add('bg-gradient-' + color);
|
||||
}
|
||||
|
||||
// Set Sidebar Type
|
||||
function sidebarType(a) {
|
||||
var parent = a.parentElement.children;
|
||||
var color = a.getAttribute("data-class");
|
||||
var body = document.querySelector("body");
|
||||
var bodyWhite = document.querySelector("body:not(.dark-version)");
|
||||
var bodyDark = body.classList.contains('dark-version');
|
||||
|
||||
var colors = [];
|
||||
|
||||
for (var i = 0; i < parent.length; i++) {
|
||||
parent[i].classList.remove('active');
|
||||
colors.push(parent[i].getAttribute('data-class'));
|
||||
}
|
||||
|
||||
if (!a.classList.contains('active')) {
|
||||
a.classList.add('active');
|
||||
} else {
|
||||
a.classList.remove('active');
|
||||
}
|
||||
|
||||
var sidebar = document.querySelector('.sidenav');
|
||||
|
||||
for (var i = 0; i < colors.length; i++) {
|
||||
sidebar.classList.remove(colors[i]);
|
||||
}
|
||||
|
||||
sidebar.classList.add(color);
|
||||
|
||||
|
||||
// Remove text-white/text-dark classes
|
||||
if (color == 'bg-transparent' || color == 'bg-white') {
|
||||
var textWhites = document.querySelectorAll('.sidenav .text-white');
|
||||
for (let i = 0; i < textWhites.length; i++) {
|
||||
textWhites[i].classList.remove('text-white');
|
||||
textWhites[i].classList.add('text-dark');
|
||||
}
|
||||
} else {
|
||||
var textDarks = document.querySelectorAll('.sidenav .text-dark');
|
||||
for (let i = 0; i < textDarks.length; i++) {
|
||||
textDarks[i].classList.add('text-white');
|
||||
textDarks[i].classList.remove('text-dark');
|
||||
}
|
||||
}
|
||||
|
||||
if (color == 'bg-transparent' && bodyDark) {
|
||||
var textDarks = document.querySelectorAll('.navbar-brand .text-dark');
|
||||
for (let i = 0; i < textDarks.length; i++) {
|
||||
textDarks[i].classList.add('text-white');
|
||||
textDarks[i].classList.remove('text-dark');
|
||||
}
|
||||
}
|
||||
|
||||
// Remove logo-white/logo-dark
|
||||
|
||||
if ((color == 'bg-transparent' || color == 'bg-white') && bodyWhite) {
|
||||
var navbarBrand = document.querySelector('.navbar-brand-img');
|
||||
var navbarBrandImg = navbarBrand.src;
|
||||
|
||||
if (navbarBrandImg.includes('logo-ct.png')) {
|
||||
var navbarBrandImgNew = navbarBrandImg.replace("logo-ct", "logo-ct-dark");
|
||||
navbarBrand.src = navbarBrandImgNew;
|
||||
}
|
||||
} else {
|
||||
var navbarBrand = document.querySelector('.navbar-brand-img');
|
||||
var navbarBrandImg = navbarBrand.src;
|
||||
if (navbarBrandImg.includes('logo-ct-dark.png')) {
|
||||
var navbarBrandImgNew = navbarBrandImg.replace("logo-ct-dark", "logo-ct");
|
||||
navbarBrand.src = navbarBrandImgNew;
|
||||
}
|
||||
}
|
||||
|
||||
if (color == 'bg-white' && bodyDark) {
|
||||
var navbarBrand = document.querySelector('.navbar-brand-img');
|
||||
var navbarBrandImg = navbarBrand.src;
|
||||
|
||||
if (navbarBrandImg.includes('logo-ct.png')) {
|
||||
var navbarBrandImgNew = navbarBrandImg.replace("logo-ct", "logo-ct-dark");
|
||||
navbarBrand.src = navbarBrandImgNew;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Set Navbar Fixed
|
||||
function navbarFixed(el) {
|
||||
let classes = ['position-sticky', 'blur', 'shadow-blur', 'mt-4', 'left-auto', 'top-1', 'z-index-sticky'];
|
||||
const navbar = document.getElementById('navbarBlur');
|
||||
|
||||
if (!el.getAttribute("checked")) {
|
||||
navbar.classList.add(...classes);
|
||||
navbar.setAttribute('navbar-scroll', 'true');
|
||||
navbarBlurOnScroll('navbarBlur');
|
||||
el.setAttribute("checked", "true");
|
||||
} else {
|
||||
navbar.classList.remove(...classes);
|
||||
navbar.setAttribute('navbar-scroll', 'false');
|
||||
navbarBlurOnScroll('navbarBlur');
|
||||
el.removeAttribute("checked");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Set Navbar Minimized
|
||||
function navbarMinimize(el) {
|
||||
var sidenavShow = document.getElementsByClassName('g-sidenav-show')[0];
|
||||
|
||||
if (!el.getAttribute("checked")) {
|
||||
sidenavShow.classList.remove('g-sidenav-pinned');
|
||||
sidenavShow.classList.add('g-sidenav-hidden');
|
||||
el.setAttribute("checked", "true");
|
||||
} else {
|
||||
sidenavShow.classList.remove('g-sidenav-hidden');
|
||||
sidenavShow.classList.add('g-sidenav-pinned');
|
||||
el.removeAttribute("checked");
|
||||
}
|
||||
}
|
||||
|
||||
// Navbar blur on scroll
|
||||
function navbarBlurOnScroll(id) {
|
||||
const navbar = document.getElementById(id);
|
||||
let navbarScrollActive = navbar ? navbar.getAttribute("data-scroll") : false;
|
||||
let scrollDistance = 5;
|
||||
let classes = ['blur', 'shadow-blur', 'left-auto'];
|
||||
let toggleClasses = ['shadow-none'];
|
||||
|
||||
if (navbarScrollActive == 'true') {
|
||||
window.onscroll = debounce(function() {
|
||||
if (window.scrollY > scrollDistance) {
|
||||
blurNavbar();
|
||||
} else {
|
||||
transparentNavbar();
|
||||
}
|
||||
}, 10);
|
||||
} else {
|
||||
window.onscroll = debounce(function() {
|
||||
transparentNavbar();
|
||||
}, 10);
|
||||
}
|
||||
|
||||
var isWindows = navigator.platform.indexOf('Win') > -1 ? true : false;
|
||||
|
||||
if (isWindows) {
|
||||
var content = document.querySelector('.main-content');
|
||||
if (navbarScrollActive == 'true') {
|
||||
content.addEventListener('ps-scroll-y', debounce(function() {
|
||||
if (content.scrollTop > scrollDistance) {
|
||||
blurNavbar();
|
||||
} else {
|
||||
transparentNavbar();
|
||||
}
|
||||
}, 10));
|
||||
} else {
|
||||
content.addEventListener('ps-scroll-y', debounce(function() {
|
||||
transparentNavbar();
|
||||
}, 10));
|
||||
}
|
||||
}
|
||||
|
||||
function blurNavbar() {
|
||||
navbar.classList.add(...classes)
|
||||
navbar.classList.remove(...toggleClasses)
|
||||
|
||||
toggleNavLinksColor('blur');
|
||||
}
|
||||
|
||||
function transparentNavbar() {
|
||||
navbar.classList.remove(...classes)
|
||||
navbar.classList.add(...toggleClasses)
|
||||
|
||||
toggleNavLinksColor('transparent');
|
||||
}
|
||||
|
||||
function toggleNavLinksColor(type) {
|
||||
let navLinks = document.querySelectorAll('.navbar-main .nav-link')
|
||||
let navLinksToggler = document.querySelectorAll('.navbar-main .sidenav-toggler-line')
|
||||
|
||||
if (type === "blur") {
|
||||
navLinks.forEach(element => {
|
||||
element.classList.remove('text-body')
|
||||
});
|
||||
|
||||
navLinksToggler.forEach(element => {
|
||||
element.classList.add('bg-dark')
|
||||
});
|
||||
} else if (type === "transparent") {
|
||||
navLinks.forEach(element => {
|
||||
element.classList.add('text-body')
|
||||
});
|
||||
|
||||
navLinksToggler.forEach(element => {
|
||||
element.classList.remove('bg-dark')
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Debounce Function
|
||||
// Returns a function, that, as long as it continues to be invoked, will not
|
||||
// be triggered. The function will be called after it stops being called for
|
||||
// N milliseconds. If `immediate` is passed, trigger the function on the
|
||||
// leading edge, instead of the trailing.
|
||||
function debounce(func, wait, immediate) {
|
||||
var timeout;
|
||||
return function() {
|
||||
var context = this,
|
||||
args = arguments;
|
||||
var later = function() {
|
||||
timeout = null;
|
||||
if (!immediate) func.apply(context, args);
|
||||
};
|
||||
var callNow = immediate && !timeout;
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(later, wait);
|
||||
if (callNow) func.apply(context, args);
|
||||
};
|
||||
};
|
||||
|
||||
// initialization of Toasts
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
var toastElList = [].slice.call(document.querySelectorAll(".toast"));
|
||||
|
||||
var toastList = toastElList.map(function(toastEl) {
|
||||
return new bootstrap.Toast(toastEl);
|
||||
});
|
||||
|
||||
var toastButtonList = [].slice.call(document.querySelectorAll(".toast-btn"));
|
||||
|
||||
toastButtonList.map(function(toastButtonEl) {
|
||||
toastButtonEl.addEventListener("click", function() {
|
||||
var toastToTrigger = document.getElementById(toastButtonEl.dataset.target);
|
||||
|
||||
if (toastToTrigger) {
|
||||
var toast = bootstrap.Toast.getInstance(toastToTrigger);
|
||||
toast.show();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Tabs navigation
|
||||
|
||||
var total = document.querySelectorAll('.nav-pills');
|
||||
|
||||
function initNavs() {
|
||||
total.forEach(function(item, i) {
|
||||
var moving_div = document.createElement('div');
|
||||
var first_li = item.querySelector('li:first-child .nav-link');
|
||||
var tab = first_li.cloneNode();
|
||||
tab.innerHTML = "-";
|
||||
|
||||
moving_div.classList.add('moving-tab', 'position-absolute', 'nav-link');
|
||||
moving_div.appendChild(tab);
|
||||
item.appendChild(moving_div);
|
||||
|
||||
var list_length = item.getElementsByTagName("li").length;
|
||||
|
||||
moving_div.style.padding = '0px';
|
||||
moving_div.style.width = item.querySelector('li:nth-child(1)').offsetWidth + 'px';
|
||||
moving_div.style.transform = 'translate3d(0px, 0px, 0px)';
|
||||
moving_div.style.transition = '.5s ease';
|
||||
|
||||
item.onmouseover = function(event) {
|
||||
let target = getEventTarget(event);
|
||||
let li = target.closest('li'); // get reference
|
||||
if (li) {
|
||||
let nodes = Array.from(li.closest('ul').children); // get array
|
||||
let index = nodes.indexOf(li) + 1;
|
||||
item.querySelector('li:nth-child(' + index + ') .nav-link').onclick = function() {
|
||||
moving_div = item.querySelector('.moving-tab');
|
||||
let sum = 0;
|
||||
if (item.classList.contains('flex-column')) {
|
||||
for (var j = 1; j <= nodes.indexOf(li); j++) {
|
||||
sum += item.querySelector('li:nth-child(' + j + ')').offsetHeight;
|
||||
}
|
||||
moving_div.style.transform = 'translate3d(0px,' + sum + 'px, 0px)';
|
||||
moving_div.style.height = item.querySelector('li:nth-child(' + j + ')').offsetHeight;
|
||||
} else {
|
||||
for (var j = 1; j <= nodes.indexOf(li); j++) {
|
||||
sum += item.querySelector('li:nth-child(' + j + ')').offsetWidth;
|
||||
}
|
||||
moving_div.style.transform = 'translate3d(' + sum + 'px, 0px, 0px)';
|
||||
moving_div.style.width = item.querySelector('li:nth-child(' + index + ')').offsetWidth + 'px';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
setTimeout(function() {
|
||||
initNavs();
|
||||
}, 100);
|
||||
|
||||
// Tabs navigation resize
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
total.forEach(function(item, i) {
|
||||
item.querySelector('.moving-tab').remove();
|
||||
var moving_div = document.createElement('div');
|
||||
var tab = item.querySelector(".nav-link.active").cloneNode();
|
||||
tab.innerHTML = "-";
|
||||
|
||||
moving_div.classList.add('moving-tab', 'position-absolute', 'nav-link');
|
||||
moving_div.appendChild(tab);
|
||||
|
||||
item.appendChild(moving_div);
|
||||
|
||||
moving_div.style.padding = '0px';
|
||||
moving_div.style.transition = '.5s ease';
|
||||
|
||||
let li = item.querySelector(".nav-link.active").parentElement;
|
||||
|
||||
if (li) {
|
||||
let nodes = Array.from(li.closest('ul').children); // get array
|
||||
let index = nodes.indexOf(li) + 1;
|
||||
|
||||
let sum = 0;
|
||||
if (item.classList.contains('flex-column')) {
|
||||
for (var j = 1; j <= nodes.indexOf(li); j++) {
|
||||
sum += item.querySelector('li:nth-child(' + j + ')').offsetHeight;
|
||||
}
|
||||
moving_div.style.transform = 'translate3d(0px,' + sum + 'px, 0px)';
|
||||
moving_div.style.width = item.querySelector('li:nth-child(' + index + ')').offsetWidth + 'px';
|
||||
moving_div.style.height = item.querySelector('li:nth-child(' + j + ')').offsetHeight;
|
||||
} else {
|
||||
for (var j = 1; j <= nodes.indexOf(li); j++) {
|
||||
sum += item.querySelector('li:nth-child(' + j + ')').offsetWidth;
|
||||
}
|
||||
moving_div.style.transform = 'translate3d(' + sum + 'px, 0px, 0px)';
|
||||
moving_div.style.width = item.querySelector('li:nth-child(' + index + ')').offsetWidth + 'px';
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (window.innerWidth < 991) {
|
||||
total.forEach(function(item, i) {
|
||||
if (!item.classList.contains('flex-column')) {
|
||||
item.classList.remove('flex-row');
|
||||
item.classList.add('flex-column', 'on-resize');
|
||||
let li = item.querySelector(".nav-link.active").parentElement;
|
||||
let nodes = Array.from(li.closest('ul').children); // get array
|
||||
let index = nodes.indexOf(li) + 1;
|
||||
let sum = 0;
|
||||
for (var j = 1; j <= nodes.indexOf(li); j++) {
|
||||
sum += item.querySelector('li:nth-child(' + j + ')').offsetHeight;
|
||||
}
|
||||
var moving_div = document.querySelector('.moving-tab');
|
||||
moving_div.style.width = item.querySelector('li:nth-child(1)').offsetWidth + 'px';
|
||||
moving_div.style.transform = 'translate3d(0px,' + sum + 'px, 0px)';
|
||||
|
||||
}
|
||||
});
|
||||
} else {
|
||||
total.forEach(function(item, i) {
|
||||
if (item.classList.contains('on-resize')) {
|
||||
item.classList.remove('flex-column', 'on-resize');
|
||||
item.classList.add('flex-row');
|
||||
let li = item.querySelector(".nav-link.active").parentElement;
|
||||
let nodes = Array.from(li.closest('ul').children); // get array
|
||||
let index = nodes.indexOf(li) + 1;
|
||||
let sum = 0;
|
||||
for (var j = 1; j <= nodes.indexOf(li); j++) {
|
||||
sum += item.querySelector('li:nth-child(' + j + ')').offsetWidth;
|
||||
}
|
||||
var moving_div = document.querySelector('.moving-tab');
|
||||
moving_div.style.transform = 'translate3d(' + sum + 'px, 0px, 0px)';
|
||||
moving_div.style.width = item.querySelector('li:nth-child(' + index + ')').offsetWidth + 'px';
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
// Function to remove flex row on mobile devices
|
||||
if (window.innerWidth < 991) {
|
||||
total.forEach(function(item, i) {
|
||||
if (item.classList.contains('flex-row')) {
|
||||
item.classList.remove('flex-row');
|
||||
item.classList.add('flex-column', 'on-resize');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function getEventTarget(e) {
|
||||
e = e || window.event;
|
||||
return e.target || e.srcElement;
|
||||
}
|
||||
|
||||
// End tabs navigation
|
||||
|
||||
window.onload = function() {
|
||||
// Material Design Input function
|
||||
var inputs = document.querySelectorAll('input');
|
||||
|
||||
for (var i = 0; i < inputs.length; i++) {
|
||||
inputs[i].addEventListener('focus', function(e) {
|
||||
this.parentElement.classList.add('is-focused');
|
||||
}, false);
|
||||
|
||||
inputs[i].onkeyup = function(e) {
|
||||
if (this.value != "") {
|
||||
this.parentElement.classList.add('is-filled');
|
||||
} else {
|
||||
this.parentElement.classList.remove('is-filled');
|
||||
}
|
||||
};
|
||||
|
||||
inputs[i].addEventListener('focusout', function(e) {
|
||||
if (this.value != "") {
|
||||
this.parentElement.classList.add('is-filled');
|
||||
}
|
||||
this.parentElement.classList.remove('is-focused');
|
||||
}, false);
|
||||
}
|
||||
|
||||
// Ripple Effect
|
||||
var ripples = document.querySelectorAll('.btn');
|
||||
|
||||
for (var i = 0; i < ripples.length; i++) {
|
||||
ripples[i].addEventListener('click', function(e) {
|
||||
var targetEl = e.target;
|
||||
var rippleDiv = targetEl.querySelector('.ripple');
|
||||
|
||||
rippleDiv = document.createElement('span');
|
||||
rippleDiv.classList.add('ripple');
|
||||
rippleDiv.style.width = rippleDiv.style.height = Math.max(targetEl.offsetWidth, targetEl.offsetHeight) + 'px';
|
||||
targetEl.appendChild(rippleDiv);
|
||||
|
||||
rippleDiv.style.left = (e.offsetX - rippleDiv.offsetWidth / 2) + 'px';
|
||||
rippleDiv.style.top = (e.offsetY - rippleDiv.offsetHeight / 2) + 'px';
|
||||
rippleDiv.classList.add('ripple');
|
||||
setTimeout(function() {
|
||||
rippleDiv.parentElement.removeChild(rippleDiv);
|
||||
}, 600);
|
||||
}, false);
|
||||
}
|
||||
};
|
||||
|
||||
// Toggle Sidenav
|
||||
const iconNavbarSidenav = document.getElementById('iconNavbarSidenav');
|
||||
const iconSidenav = document.getElementById('iconSidenav');
|
||||
const sidenav = document.getElementById('sidenav-main');
|
||||
let body = document.getElementsByTagName('body')[0];
|
||||
let className = 'g-sidenav-pinned';
|
||||
|
||||
if (iconNavbarSidenav) {
|
||||
iconNavbarSidenav.addEventListener("click", toggleSidenav);
|
||||
}
|
||||
|
||||
if (iconSidenav) {
|
||||
iconSidenav.addEventListener("click", toggleSidenav);
|
||||
}
|
||||
|
||||
function toggleSidenav() {
|
||||
if (body.classList.contains(className)) {
|
||||
body.classList.remove(className);
|
||||
setTimeout(function() {
|
||||
sidenav.classList.remove('bg-white');
|
||||
}, 100);
|
||||
sidenav.classList.remove('bg-transparent');
|
||||
|
||||
} else {
|
||||
body.classList.add(className);
|
||||
sidenav.classList.add('bg-white');
|
||||
sidenav.classList.remove('bg-transparent');
|
||||
iconSidenav.classList.remove('d-none');
|
||||
}
|
||||
}
|
||||
|
||||
// Resize navbar color depends on configurator active type of sidenav
|
||||
|
||||
let referenceButtons = document.querySelector('[data-class]');
|
||||
|
||||
if (sidenav) {
|
||||
window.addEventListener("resize", navbarColorOnResize);
|
||||
|
||||
function navbarColorOnResize() {
|
||||
if (window.innerWidth > 1200) {
|
||||
if (referenceButtons?.classList.contains('active') && referenceButtons?.getAttribute('data-class') === 'bg-transparent') {
|
||||
sidenav.classList.remove('bg-white');
|
||||
} else {
|
||||
sidenav.classList.add('bg-white');
|
||||
}
|
||||
} else {
|
||||
sidenav.classList.add('bg-white');
|
||||
sidenav.classList.remove('bg-transparent');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Deactivate sidenav type buttons on resize and small screens
|
||||
window.addEventListener("resize", sidenavTypeOnResize);
|
||||
window.addEventListener("load", sidenavTypeOnResize);
|
||||
|
||||
function sidenavTypeOnResize() {
|
||||
let elements = document.querySelectorAll('[onclick="sidebarType(this)"]');
|
||||
if (window.innerWidth < 1200) {
|
||||
elements.forEach(function(el) {
|
||||
el.classList.add('disabled');
|
||||
});
|
||||
} else {
|
||||
elements.forEach(function(el) {
|
||||
el.classList.remove('disabled');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Light Mode / Dark Mode
|
||||
function darkMode(el) {
|
||||
const body = document.getElementsByTagName('body')[0];
|
||||
const hr = document.querySelectorAll('div:not(.sidenav) > hr');
|
||||
const hr_card = document.querySelectorAll('div:not(.bg-gradient-dark) hr');
|
||||
const text_btn = document.querySelectorAll('button:not(.btn) > .text-dark');
|
||||
const text_span = document.querySelectorAll('span.text-dark, .breadcrumb .text-dark');
|
||||
const text_span_white = document.querySelectorAll('span.text-white, .breadcrumb .text-white');
|
||||
const text_strong = document.querySelectorAll('strong.text-dark');
|
||||
const text_strong_white = document.querySelectorAll('strong.text-white');
|
||||
const text_nav_link = document.querySelectorAll('a.nav-link.text-dark');
|
||||
const text_nav_link_white = document.querySelectorAll('a.nav-link.text-white');
|
||||
const secondary = document.querySelectorAll('.text-secondary');
|
||||
const bg_gray_100 = document.querySelectorAll('.bg-gray-100');
|
||||
const bg_gray_600 = document.querySelectorAll('.bg-gray-600');
|
||||
const btn_text_dark = document.querySelectorAll('.btn.btn-link.text-dark, .material-icons.text-dark');
|
||||
const btn_text_white = document.querySelectorAll('.btn.btn-link.text-white, .material-icons.text-white');
|
||||
const card_border = document.querySelectorAll('.card.border');
|
||||
const card_border_dark = document.querySelectorAll('.card.border.border-dark');
|
||||
|
||||
const svg = document.querySelectorAll('g');
|
||||
|
||||
if (!el.getAttribute("checked")) {
|
||||
body.classList.add('dark-version');
|
||||
for (var i = 0; i < hr.length; i++) {
|
||||
if (hr[i].classList.contains('dark')) {
|
||||
hr[i].classList.remove('dark');
|
||||
hr[i].classList.add('light');
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < hr_card.length; i++) {
|
||||
if (hr_card[i].classList.contains('dark')) {
|
||||
hr_card[i].classList.remove('dark');
|
||||
hr_card[i].classList.add('light');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < text_btn.length; i++) {
|
||||
if (text_btn[i].classList.contains('text-dark')) {
|
||||
text_btn[i].classList.remove('text-dark');
|
||||
text_btn[i].classList.add('text-white');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < text_span.length; i++) {
|
||||
if (text_span[i].classList.contains('text-dark')) {
|
||||
text_span[i].classList.remove('text-dark');
|
||||
text_span[i].classList.add('text-white');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < text_strong.length; i++) {
|
||||
if (text_strong[i].classList.contains('text-dark')) {
|
||||
text_strong[i].classList.remove('text-dark');
|
||||
text_strong[i].classList.add('text-white');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < text_nav_link.length; i++) {
|
||||
if (text_nav_link[i].classList.contains('text-dark')) {
|
||||
text_nav_link[i].classList.remove('text-dark');
|
||||
text_nav_link[i].classList.add('text-white');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < secondary.length; i++) {
|
||||
if (secondary[i].classList.contains('text-secondary')) {
|
||||
secondary[i].classList.remove('text-secondary');
|
||||
secondary[i].classList.add('text-white');
|
||||
secondary[i].classList.add('opacity-8');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < bg_gray_100.length; i++) {
|
||||
if (bg_gray_100[i].classList.contains('bg-gray-100')) {
|
||||
bg_gray_100[i].classList.remove('bg-gray-100');
|
||||
bg_gray_100[i].classList.add('bg-gray-600');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < btn_text_dark.length; i++) {
|
||||
btn_text_dark[i].classList.remove('text-dark');
|
||||
btn_text_dark[i].classList.add('text-white');
|
||||
}
|
||||
for (var i = 0; i < svg.length; i++) {
|
||||
if (svg[i].hasAttribute('fill')) {
|
||||
svg[i].setAttribute('fill', '#fff');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < card_border.length; i++) {
|
||||
card_border[i].classList.add('border-dark');
|
||||
}
|
||||
el.setAttribute("checked", "true");
|
||||
} else {
|
||||
body.classList.remove('dark-version');
|
||||
for (var i = 0; i < hr.length; i++) {
|
||||
if (hr[i].classList.contains('light')) {
|
||||
hr[i].classList.add('dark');
|
||||
hr[i].classList.remove('light');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < hr_card.length; i++) {
|
||||
if (hr_card[i].classList.contains('light')) {
|
||||
hr_card[i].classList.add('dark');
|
||||
hr_card[i].classList.remove('light');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < text_btn.length; i++) {
|
||||
if (text_btn[i].classList.contains('text-white')) {
|
||||
text_btn[i].classList.remove('text-white');
|
||||
text_btn[i].classList.add('text-dark');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < text_span_white.length; i++) {
|
||||
if (text_span_white[i].classList.contains('text-white') && !text_span_white[i].closest('.sidenav') && !text_span_white[i].closest('.card.bg-gradient-dark')) {
|
||||
text_span_white[i].classList.remove('text-white');
|
||||
text_span_white[i].classList.add('text-dark');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < text_strong_white.length; i++) {
|
||||
if (text_strong_white[i].classList.contains('text-white')) {
|
||||
text_strong_white[i].classList.remove('text-white');
|
||||
text_strong_white[i].classList.add('text-dark');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < text_nav_link_white.length; i++) {
|
||||
if (text_nav_link_white[i].classList.contains('text-white') && !text_nav_link_white[i].closest('.sidenav')) {
|
||||
text_nav_link_white[i].classList.remove('text-white');
|
||||
text_nav_link_white[i].classList.add('text-dark');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < secondary.length; i++) {
|
||||
if (secondary[i].classList.contains('text-white')) {
|
||||
secondary[i].classList.remove('text-white');
|
||||
secondary[i].classList.remove('opacity-8');
|
||||
secondary[i].classList.add('text-dark');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < bg_gray_600.length; i++) {
|
||||
if (bg_gray_600[i].classList.contains('bg-gray-600')) {
|
||||
bg_gray_600[i].classList.remove('bg-gray-600');
|
||||
bg_gray_600[i].classList.add('bg-gray-100');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < svg.length; i++) {
|
||||
if (svg[i].hasAttribute('fill')) {
|
||||
svg[i].setAttribute('fill', '#252f40');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < btn_text_white.length; i++) {
|
||||
if (!btn_text_white[i].closest('.card.bg-gradient-dark')) {
|
||||
btn_text_white[i].classList.remove('text-white');
|
||||
btn_text_white[i].classList.add('text-dark');
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < card_border_dark.length; i++) {
|
||||
card_border_dark[i].classList.remove('border-dark');
|
||||
}
|
||||
el.removeAttribute("checked");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// side bullets
|
||||
|
||||
const indicators = document.querySelectorAll(".indicator");
|
||||
const sections = document.querySelectorAll("section");
|
||||
|
||||
if (indicators) {
|
||||
const resetCurrentActiveIndicator = () => {
|
||||
const activeIndicator = document.querySelector(".indicator.active");
|
||||
if (activeIndicator) {
|
||||
activeIndicator.classList.remove("active");
|
||||
}
|
||||
};
|
||||
|
||||
const onSectionLeavesViewport = (section) => {
|
||||
const observer = new IntersectionObserver(
|
||||
(entries) => {
|
||||
entries.forEach((entry) => {
|
||||
if (entry.isIntersecting) {
|
||||
resetCurrentActiveIndicator();
|
||||
const element = entry.target;
|
||||
const indicator = document.querySelector(`a[href='#${element.id}']`);
|
||||
indicator.classList.add("active");
|
||||
return;
|
||||
}
|
||||
});
|
||||
}, {
|
||||
root: null,
|
||||
rootMargin: "0px",
|
||||
threshold: 0.75
|
||||
}
|
||||
);
|
||||
observer.observe(section);
|
||||
};
|
||||
|
||||
indicators.forEach((indicator) => {
|
||||
indicator.addEventListener("click", function(event) {
|
||||
event.preventDefault();
|
||||
document
|
||||
.querySelector(this.getAttribute("href"))
|
||||
.scrollIntoView({
|
||||
behavior: "smooth"
|
||||
});
|
||||
resetCurrentActiveIndicator();
|
||||
this.classList.add("active");
|
||||
});
|
||||
});
|
||||
|
||||
sections.forEach(onSectionLeavesViewport);
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["_site_dashboard_free/assets/js/dashboard-free.js"],"names":["sidebar","fixedplugin","navigator","platform","indexOf","document","getElementsByClassName","mainpanel","querySelector","PerfectScrollbar","getElementById","navbarBlurOnScroll","allInputs","fixedPlugin","fixedPluginButton","fixedPluginButtonNav","fixedPluginCard","fixedPluginCloseButton","navbar","buttonNavbarFixed","tooltipTriggerList","slice","call","querySelectorAll","tooltipList","map","tooltipTriggerEl","bootstrap","Tooltip","focused","el","parentElement","classList","contains","add","defocused","remove","setAttributes","options","Object","keys","forEach","attr","setAttribute","sidebarColor","a","parent","color","getAttribute","sidebarType","children","body","bodyWhite","bodyDark","colors","i","length","push","navbarBrand","navbarBrandImg","navbarBrandImgNew","textWhites","let","textDarks","src","includes","replace","navbarFixed","classes","removeAttribute","navbarMinimize","sidenavShow","id","content","navbarScrollActive","toggleClasses","blurNavbar","toggleNavLinksColor","transparentNavbar","type","navLinks","navLinksToggler","element","window","onscroll","debounce","scrollY","addEventListener","scrollTop","func","wait","immediate","timeout","context","this","args","arguments","callNow","clearTimeout","setTimeout","apply","onfocus","onfocusout","onclick","e","target","closest","toastEl","Toast","toastButtonEl","toastToTrigger","dataset","getInstance","show","total","initNavs","item","moving_div","createElement","tab","cloneNode","innerHTML","appendChild","getElementsByTagName","style","padding","width","offsetWidth","transform","transition","onmouseover","event","li","getEventTarget","nodes","Array","from","index","sum","j","offsetHeight","height","srcElement","innerWidth","onload","inputs","onkeyup","value","ripples","targetEl","rippleDiv","Math","max","left","offsetX","top","offsetY","removeChild","iconNavbarSidenav","iconSidenav","sidenav","className","toggleSidenav","referenceButtons","navbarColorOnResize","sidenavTypeOnResize","elements","darkMode","hr","hr_card","text_btn","text_span","text_span_white","text_strong","text_strong_white","text_nav_link","text_nav_link_white","secondary","bg_gray_100","bg_gray_600","btn_text_dark","btn_text_white","card_border","card_border_dark","svg","hasAttribute","indicators","sections","resetCurrentActiveIndicator","activeIndicator","onSectionLeavesViewport","IntersectionObserver","entries","entry","isIntersecting","root","rootMargin","threshold","observe","section","indicator","preventDefault","scrollIntoView","behavior"],"mappings":"AAAA,aACA,CAAA,WACE,IAUQA,EAUAC,EApB4C,CAAC,EAArCC,UAAUC,SAASC,QAAQ,KAAK,IAI1CC,SAASC,uBAAuB,cAAc,EAAE,KAC9CC,EAAYF,SAASG,cAAc,eAAe,EAC7C,IAAIC,iBAAiBF,CAAS,GAGrCF,SAASC,uBAAuB,SAAS,EAAE,KACzCN,EAAUK,SAASG,cAAc,UAAU,EACrC,IAAIC,iBAAiBT,CAAO,GAGpCK,SAASC,uBAAuB,iBAAiB,EAAE,KACjDL,EAAcI,SAASG,cAAc,iDAAiD,EAChF,IAAIC,iBAAiBR,CAAW,GAGxCI,SAASC,uBAAuB,cAAc,EAAE,MAC9CL,EAAcI,SAASG,cAAc,eAAe,EAC9C,IAAIC,iBAAiBR,CAAW,EAG/C,EAAE,EAGAI,SAASK,eAAe,YAAY,GACrCC,mBAAmB,YAAY,EAIjC,IA4BMC,UASAC,YACAC,kBACAC,qBACAC,gBACAC,uBACAC,OACAC,kBA3CFC,mBAAqB,GAAGC,MAAMC,KAAKjB,SAASkB,iBAAiB,4BAA4B,CAAC,EAC1FC,YAAcJ,mBAAmBK,IAAI,SAASC,GAChD,OAAO,IAAIC,UAAUC,QAAQF,CAAgB,CAC/C,CAAC,EAGD,SAASG,QAAQC,GACXA,EAAGC,cAAcC,UAAUC,SAAS,aAAa,GACnDH,EAAGC,cAAcC,UAAUE,IAAI,SAAS,CAE5C,CAGA,SAASC,UAAUL,GACbA,EAAGC,cAAcC,UAAUC,SAAS,aAAa,GACnDH,EAAGC,cAAcC,UAAUI,OAAO,SAAS,CAE/C,CAGA,SAASC,cAAcP,EAAIQ,GACxBC,OAAOC,KAAKF,CAAO,EAAEG,QAAQ,SAASC,GACpCZ,EAAGa,aAAaD,EAAMJ,EAAQI,EAAK,CACrC,CAAC,CACJ,CA8DA,SAASE,aAAaC,GACpB,IAAIC,EAASzC,SAASG,cAAc,kBAAkB,EAClDuC,EAAQF,EAAEG,aAAa,YAAY,EAEnCF,EAAOd,UAAUC,SAAS,qBAAqB,GACjDa,EAAOd,UAAUI,OAAO,qBAAqB,EAE3CU,EAAOd,UAAUC,SAAS,kBAAkB,GAC9Ca,EAAOd,UAAUI,OAAO,kBAAkB,EAExCU,EAAOd,UAAUC,SAAS,kBAAkB,GAC9Ca,EAAOd,UAAUI,OAAO,kBAAkB,EAExCU,EAAOd,UAAUC,SAAS,qBAAqB,GACjDa,EAAOd,UAAUI,OAAO,qBAAqB,EAE3CU,EAAOd,UAAUC,SAAS,qBAAqB,GACjDa,EAAOd,UAAUI,OAAO,qBAAqB,EAE3CU,EAAOd,UAAUC,SAAS,oBAAoB,GAChDa,EAAOd,UAAUI,OAAO,oBAAoB,EAE9CU,EAAOd,UAAUE,IAAI,eAAiBa,CAAK,CAC7C,CAGA,SAASE,YAAYJ,GASnB,IARA,IAAIC,EAASD,EAAEd,cAAcmB,SACzBH,EAAQF,EAAEG,aAAa,YAAY,EACnCG,EAAO9C,SAASG,cAAc,MAAM,EACpC4C,EAAY/C,SAASG,cAAc,yBAAyB,EAC5D6C,EAAWF,EAAKnB,UAAUC,SAAS,cAAc,EAEjDqB,EAAS,GAEJC,EAAI,EAAGA,EAAIT,EAAOU,OAAQD,CAAC,GAClCT,EAAOS,GAAGvB,UAAUI,OAAO,QAAQ,EACnCkB,EAAOG,KAAKX,EAAOS,GAAGP,aAAa,YAAY,CAAC,EAG9CH,EAAEb,UAAUC,SAAS,QAAQ,EAG/BY,EAAEb,UAAUI,OAAO,QAAQ,EAF3BS,EAAEb,UAAUE,IAAI,QAAQ,EAO1B,IAFA,IAoDMwB,EACAC,EAGEC,EAxDJ5D,EAAUK,SAASG,cAAc,UAAU,EAEtC+C,EAAI,EAAGA,EAAID,EAAOE,OAAQD,CAAC,GAClCvD,EAAQgC,UAAUI,OAAOkB,EAAOC,EAAE,EAOpC,GAJAvD,EAAQgC,UAAUE,IAAIa,CAAK,EAIf,kBAATA,GAAsC,YAATA,EAAoB,CAClD,IAAIc,EAAaxD,SAASkB,iBAAiB,sBAAsB,EACjE,IAAIuC,IAAIP,EAAI,EAAGA,EAAEM,EAAWL,OAAQD,CAAC,GACnCM,EAAWN,GAAGvB,UAAUI,OAAO,YAAY,EAC3CyB,EAAWN,GAAGvB,UAAUE,IAAI,WAAW,CAE3C,KAAO,CACL,IAAI6B,EAAY1D,SAASkB,iBAAiB,qBAAqB,EAC/D,IAAIuC,IAAIP,EAAI,EAAGA,EAAEQ,EAAUP,OAAQD,CAAC,GAClCQ,EAAUR,GAAGvB,UAAUE,IAAI,YAAY,EACvLine truncated
|
||||
@@ -0,0 +1,17 @@
|
||||
// =========================================================
|
||||
// Material Dashboard 2 - v3.1.0
|
||||
// =========================================================
|
||||
|
||||
// Product Page: https://www.creative-tim.com/product/material-dashboard
|
||||
// Copyright 2023 Creative Tim (https://www.creative-tim.com)
|
||||
// Licensed under MIT (https://github.com/creativetimofficial/material-dashboard/blob/master/LICENSE.md)
|
||||
|
||||
// Coded by www.creative-tim.com
|
||||
|
||||
// =========================================================
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
"use strict";!function(){var e,t;-1<navigator.platform.indexOf("Win")&&(document.getElementsByClassName("main-content")[0]&&(e=document.querySelector(".main-content"),new PerfectScrollbar(e)),document.getElementsByClassName("sidenav")[0]&&(e=document.querySelector(".sidenav"),new PerfectScrollbar(e)),document.getElementsByClassName("navbar-collapse")[0]&&(t=document.querySelector(".navbar:not(.navbar-expand-lg) .navbar-collapse"),new PerfectScrollbar(t)),document.getElementsByClassName("fixed-plugin")[0])&&(t=document.querySelector(".fixed-plugin"),new PerfectScrollbar(t))}(),document.getElementById("navbarBlur")&&navbarBlurOnScroll("navbarBlur");var allInputs,fixedPlugin,fixedPluginButton,fixedPluginButtonNav,fixedPluginCard,fixedPluginCloseButton,navbar,buttonNavbarFixed,tooltipTriggerList=[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')),tooltipList=tooltipTriggerList.map(function(e){return new bootstrap.Tooltip(e)});function focused(e){e.parentElement.classList.contains("input-group")&&e.parentElement.classList.add("focused")}function defocused(e){e.parentElement.classList.contains("input-group")&&e.parentElement.classList.remove("focused")}function setAttributes(t,s){Object.keys(s).forEach(function(e){t.setAttribute(e,s[e])})}function sidebarColor(e){var t=document.querySelector(".nav-link.active"),e=e.getAttribute("data-color");t.classList.contains("bg-gradient-primary")&&t.classList.remove("bg-gradient-primary"),t.classList.contains("bg-gradient-dark")&&t.classList.remove("bg-gradient-dark"),t.classList.contains("bg-gradient-info")&&t.classList.remove("bg-gradient-info"),t.classList.contains("bg-gradient-success")&&t.classList.remove("bg-gradient-success"),t.classList.contains("bg-gradient-warning")&&t.classList.remove("bg-gradient-warning"),t.classList.contains("bg-gradient-danger")&&t.classList.remove("bg-gradient-danger"),t.classList.add("bg-gradient-"+e)}function sidebarType(e){for(var t=e.parentElement.children,s=e.getAttribute("data-class"),n=document.querySelector("body"),a=document.querySelector("body:not(.dark-version)"),n=n.classList.contains("dark-version"),i=[],r=0;r<t.length;r++)t[r].classList.remove("active"),i.push(t[r].getAttribute("data-class"));e.classList.contains("active")?e.classList.remove("active"):e.classList.add("active");for(var l,o,c,d=document.querySelector(".sidenav"),r=0;r<i.length;r++)d.classList.remove(i[r]);if(d.classList.add(s),"bg-transparent"==s||"bg-white"==s){var u=document.querySelectorAll(".sidenav .text-white");for(let e=0;e<u.length;e++)u[e].classList.remove("text-white"),u[e].classList.add("text-dark")}else{var f=document.querySelectorAll(".sidenav .text-dark");for(let e=0;e<f.length;e++)f[e].classList.add("text-white"),f[e].classList.remove("text-dark")}if("bg-transparent"==s&&n){f=document.querySelectorAll(".navbar-brand .text-dark");for(let e=0;e<f.length;e++)f[e].classList.add("text-white"),f[e].classList.remove("text-dark")}"bg-transparent"!=s&&"bg-white"!=s||!a?(o=(l=document.querySelector(".navbar-brand-img")).src).includes("logo-ct-dark.png")&&(c=o.replace("logo-ct-dark","logo-ct"),l.src=c):(o=(l=document.querySelector(".navbar-brand-img")).src).includes("logo-ct.png")&&(c=o.replace("logo-ct","logo-ct-dark"),l.src=c),"bg-white"==s&&n&&(o=(l=document.querySelector(".navbar-brand-img")).src).includes("logo-ct.png")&&(c=o.replace("logo-ct","logo-ct-dark"),l.src=c)}function navbarFixed(e){var t=["position-sticky","blur","shadow-blur","mt-4","left-auto","top-1","z-index-sticky"],s=document.getElementById("navbarBlur");e.getAttribute("checked")?(s.classList.remove(...t),s.setAttribute("navbar-scroll","false"),navbarBlurOnScroll("navbarBlur"),e.removeAttribute("checked")):(s.classList.add(...t),s.setAttribute("navbar-scroll","true"),navbarBlurOnScroll("navbarBlur"),e.setAttribute("checked","true"))}function navbarMinimize(e){var t=document.getElementsByClassName("g-sidenav-show")[0];e.getAttribute("checked")?(t.classList.remove("g-sidenav-hidden"),t.classList.add("g-sidenav-pinned"),e.removeAttribute("checked")):(t.classList.remove("g-sidenav-pinned"),t.classList.add("g-sidenav-hidden"),e.setAttribute("checked","true"))}function navbarBlurOnScroll(e){const t=document.getElementById(e);var s,e=!!t&&t.getAttribute("data-scroll");let n=["blur","shadow-blur","left-auto"],a=["shadow-none"];function i(){t.classList.add(...n),t.classList.remove(...a),l("blur")}function r(){t.classList.remove(...n),t.classList.add(...a),l("transparent")}function l(e){var t=document.querySelectorAll(".navbar-main .nav-link"),s=document.querySelectorAll(".navbar-main .sidenav-toggler-line");"blur"===e?(t.forEach(e=>{e.classList.remove("text-body")}),s.forEach(e=>{e.classList.add("bg-dark")})):"transparent"===e&&(t.forEach(e=>{e.classList.add("text-body")}),s.forEach(e=>{e.classList.remove("bg-dark")}))}window.onscroll=debounce("true"==e?function(){(5<window.scrollY?i:r)()}:function(){r()},10),-1<navigator.platform.indexOf("Win")&&(s=document.querySelector(".mainLine truncated
|
||||
|
||||
//# sourceMappingURL=_site_dashboard_free/assets/js/dashboard-free.js.map
|
||||
@@ -0,0 +1,130 @@
|
||||
//
|
||||
// Chart extension for making the bars rounded
|
||||
// Code from: https://codepen.io/jedtrow/full/ygRYgo
|
||||
//
|
||||
|
||||
Chart.elements.Rectangle.prototype.draw = function() {
|
||||
|
||||
var ctx = this._chart.ctx;
|
||||
var vm = this._view;
|
||||
var left, right, top, bottom, signX, signY, borderSkipped, radius;
|
||||
var borderWidth = vm.borderWidth;
|
||||
// Set Radius Here
|
||||
// If radius is large enough to cause drawing errors a max radius is imposed
|
||||
var cornerRadius = 6;
|
||||
|
||||
if (!vm.horizontal) {
|
||||
// bar
|
||||
left = vm.x - vm.width / 2;
|
||||
right = vm.x + vm.width / 2;
|
||||
top = vm.y;
|
||||
bottom = vm.base;
|
||||
signX = 1;
|
||||
signY = bottom > top ? 1 : -1;
|
||||
borderSkipped = vm.borderSkipped || 'bottom';
|
||||
} else {
|
||||
// horizontal bar
|
||||
left = vm.base;
|
||||
right = vm.x;
|
||||
top = vm.y - vm.height / 2;
|
||||
bottom = vm.y + vm.height / 2;
|
||||
signX = right > left ? 1 : -1;
|
||||
signY = 1;
|
||||
borderSkipped = vm.borderSkipped || 'left';
|
||||
}
|
||||
|
||||
// Canvas doesn't allow us to stroke inside the width so we can
|
||||
// adjust the sizes to fit if we're setting a stroke on the line
|
||||
if (borderWidth) {
|
||||
// borderWidth shold be less than bar width and bar height.
|
||||
var barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom));
|
||||
borderWidth = borderWidth > barSize ? barSize : borderWidth;
|
||||
var halfStroke = borderWidth / 2;
|
||||
// Adjust borderWidth when bar top position is near vm.base(zero).
|
||||
var borderLeft = left + (borderSkipped !== 'left' ? halfStroke * signX : 0);
|
||||
var borderRight = right + (borderSkipped !== 'right' ? -halfStroke * signX : 0);
|
||||
var borderTop = top + (borderSkipped !== 'top' ? halfStroke * signY : 0);
|
||||
var borderBottom = bottom + (borderSkipped !== 'bottom' ? -halfStroke * signY : 0);
|
||||
// not become a vertical line?
|
||||
if (borderLeft !== borderRight) {
|
||||
top = borderTop;
|
||||
bottom = borderBottom;
|
||||
}
|
||||
// not become a horizontal line?
|
||||
if (borderTop !== borderBottom) {
|
||||
left = borderLeft;
|
||||
right = borderRight;
|
||||
}
|
||||
}
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.fillStyle = vm.backgroundColor;
|
||||
ctx.strokeStyle = vm.borderColor;
|
||||
ctx.lineWidth = borderWidth;
|
||||
|
||||
// Corner points, from bottom-left to bottom-right clockwise
|
||||
// | 1 2 |
|
||||
// | 0 3 |
|
||||
var corners = [
|
||||
[left, bottom],
|
||||
[left, top],
|
||||
[right, top],
|
||||
[right, bottom]
|
||||
];
|
||||
|
||||
// Find first (starting) corner with fallback to 'bottom'
|
||||
var borders = ['bottom', 'left', 'top', 'right'];
|
||||
var startCorner = borders.indexOf(borderSkipped, 0);
|
||||
if (startCorner === -1) {
|
||||
startCorner = 0;
|
||||
}
|
||||
|
||||
function cornerAt(index) {
|
||||
return corners[(startCorner + index) % 4];
|
||||
}
|
||||
|
||||
// Draw rectangle from 'startCorner'
|
||||
var corner = cornerAt(0);
|
||||
ctx.moveTo(corner[0], corner[1]);
|
||||
|
||||
for (var i = 1; i < 4; i++) {
|
||||
corner = cornerAt(i);
|
||||
nextCornerId = i + 1;
|
||||
if (nextCornerId == 4) {
|
||||
nextCornerId = 0
|
||||
}
|
||||
|
||||
nextCorner = cornerAt(nextCornerId);
|
||||
|
||||
width = corners[2][0] - corners[1][0];
|
||||
height = corners[0][1] - corners[1][1];
|
||||
x = corners[1][0];
|
||||
y = corners[1][1];
|
||||
|
||||
var radius = cornerRadius;
|
||||
|
||||
// Fix radius being too large
|
||||
if (radius > height / 2) {
|
||||
radius = height / 2;
|
||||
}
|
||||
if (radius > width / 2) {
|
||||
radius = width / 2;
|
||||
}
|
||||
|
||||
ctx.moveTo(x + radius, y);
|
||||
ctx.lineTo(x + width - radius, y);
|
||||
ctx.quadraticCurveTo(x + width, y, x + width, y + radius);
|
||||
ctx.lineTo(x + width, y + height - radius);
|
||||
ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);
|
||||
ctx.lineTo(x + radius, y + height);
|
||||
ctx.quadraticCurveTo(x, y + height, x, y + height - radius);
|
||||
ctx.lineTo(x, y + radius);
|
||||
ctx.quadraticCurveTo(x, y, x + radius, y);
|
||||
|
||||
}
|
||||
|
||||
ctx.fill();
|
||||
if (borderWidth) {
|
||||
ctx.stroke();
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,432 @@
|
||||
/*
|
||||
|
||||
|
||||
|
||||
Creative Tim Modifications
|
||||
|
||||
Lines: 238, 239 was changed from top: 5px to top: 50% and we added margin-top: -13px. In this way the close button will be aligned vertically
|
||||
Line:222 - modified when the icon is set, we add the class "alert-with-icon", so there will be enough space for the icon.
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Project: Bootstrap Notify = v3.1.5
|
||||
* Description: Turns standard Bootstrap alerts into "Growl-like" notifications.
|
||||
* Author: Mouse0270 aka Robert McIntosh
|
||||
* License: MIT License
|
||||
* Website: https://github.com/mouse0270/bootstrap-growl
|
||||
*/
|
||||
|
||||
/* global define:false, require: false, jQuery:false */
|
||||
|
||||
(function(factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['jquery'], factory);
|
||||
} else if (typeof exports === 'object') {
|
||||
// Node/CommonJS
|
||||
factory(require('jquery'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory(jQuery);
|
||||
}
|
||||
}(function($) {
|
||||
// Create the defaults once
|
||||
var defaults = {
|
||||
element: 'body',
|
||||
position: null,
|
||||
type: "info",
|
||||
allow_dismiss: true,
|
||||
allow_duplicates: true,
|
||||
newest_on_top: false,
|
||||
showProgressbar: false,
|
||||
placement: {
|
||||
from: "top",
|
||||
align: "right"
|
||||
},
|
||||
offset: 20,
|
||||
spacing: 10,
|
||||
z_index: 1060,
|
||||
delay: 5000,
|
||||
timer: 1000,
|
||||
url_target: '_blank',
|
||||
mouse_over: null,
|
||||
animate: {
|
||||
enter: 'animated fadeInDown',
|
||||
exit: 'animated fadeOutUp'
|
||||
},
|
||||
onShow: null,
|
||||
onShown: null,
|
||||
onClose: null,
|
||||
onClosed: null,
|
||||
onClick: null,
|
||||
icon_type: 'class',
|
||||
template: '<div data-notify="container" class="col-xs-11 col-sm-4 alert alert-{0}" role="alert"><button type="button" aria-hidden="true" class="close" data-notify="dismiss"><i class="tim-icons icon-simple-remove"></i></button><span data-notify="icon"></span> <span data-notify="title">{1}</span> <span data-notify="message">{2}</span><div class="progress" data-notify="progressbar"><div class="progress-bar progress-bar-{0}" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"></div></div><a href="{3}" target="{4}" data-notify="url"></a></div>'
|
||||
};
|
||||
|
||||
String.format = function() {
|
||||
var args = arguments;
|
||||
var str = arguments[0];
|
||||
return str.replace(/(\{\{\d\}\}|\{\d\})/g, function(str) {
|
||||
if (str.substring(0, 2) === "{{") return str;
|
||||
var num = parseInt(str.match(/\d/)[0]);
|
||||
return args[num + 1];
|
||||
});
|
||||
};
|
||||
|
||||
function isDuplicateNotification(notification) {
|
||||
var isDupe = false;
|
||||
|
||||
$('[data-notify="container"]').each(function(i, el) {
|
||||
var $el = $(el);
|
||||
var title = $el.find('[data-notify="title"]').html().trim();
|
||||
var message = $el.find('[data-notify="message"]').html().trim();
|
||||
|
||||
// The input string might be different than the actual parsed HTML string!
|
||||
// (<br> vs <br /> for example)
|
||||
// So we have to force-parse this as HTML here!
|
||||
var isSameTitle = title === $("<div>" + notification.settings.content.title + "</div>").html().trim();
|
||||
var isSameMsg = message === $("<div>" + notification.settings.content.message + "</div>").html().trim();
|
||||
var isSameType = $el.hasClass('alert-' + notification.settings.type);
|
||||
|
||||
if (isSameTitle && isSameMsg && isSameType) {
|
||||
//we found the dupe. Set the var and stop checking.
|
||||
isDupe = true;
|
||||
}
|
||||
return !isDupe;
|
||||
});
|
||||
|
||||
return isDupe;
|
||||
}
|
||||
|
||||
function Notify(element, content, options) {
|
||||
// Setup Content of Notify
|
||||
var contentObj = {
|
||||
content: {
|
||||
message: typeof content === 'object' ? content.message : content,
|
||||
title: content.title ? content.title : '',
|
||||
icon: content.icon ? content.icon : '',
|
||||
url: content.url ? content.url : '#',
|
||||
target: content.target ? content.target : '-'
|
||||
}
|
||||
};
|
||||
|
||||
options = $.extend(true, {}, contentObj, options);
|
||||
this.settings = $.extend(true, {}, defaults, options);
|
||||
this._defaults = defaults;
|
||||
if (this.settings.content.target === "-") {
|
||||
this.settings.content.target = this.settings.url_target;
|
||||
}
|
||||
this.animations = {
|
||||
start: 'webkitAnimationStart oanimationstart MSAnimationStart animationstart',
|
||||
end: 'webkitAnimationEnd oanimationend MSAnimationEnd animationend'
|
||||
};
|
||||
|
||||
if (typeof this.settings.offset === 'number') {
|
||||
this.settings.offset = {
|
||||
x: this.settings.offset,
|
||||
y: this.settings.offset
|
||||
};
|
||||
}
|
||||
|
||||
//if duplicate messages are not allowed, then only continue if this new message is not a duplicate of one that it already showing
|
||||
if (this.settings.allow_duplicates || (!this.settings.allow_duplicates && !isDuplicateNotification(this))) {
|
||||
this.init();
|
||||
}
|
||||
}
|
||||
|
||||
$.extend(Notify.prototype, {
|
||||
init: function() {
|
||||
var self = this;
|
||||
|
||||
this.buildNotify();
|
||||
if (this.settings.content.icon) {
|
||||
this.setIcon();
|
||||
}
|
||||
if (this.settings.content.url != "#") {
|
||||
this.styleURL();
|
||||
}
|
||||
this.styleDismiss();
|
||||
this.placement();
|
||||
this.bind();
|
||||
|
||||
this.notify = {
|
||||
$ele: this.$ele,
|
||||
update: function(command, update) {
|
||||
var commands = {};
|
||||
if (typeof command === "string") {
|
||||
commands[command] = update;
|
||||
} else {
|
||||
commands = command;
|
||||
}
|
||||
for (var cmd in commands) {
|
||||
switch (cmd) {
|
||||
case "type":
|
||||
this.$ele.removeClass('alert-' + self.settings.type);
|
||||
this.$ele.find('[data-notify="progressbar"] > .progress-bar').removeClass('progress-bar-' + self.settings.type);
|
||||
self.settings.type = commands[cmd];
|
||||
this.$ele.addClass('alert-' + commands[cmd]).find('[data-notify="progressbar"] > .progress-bar').addClass('progress-bar-' + commands[cmd]);
|
||||
break;
|
||||
case "icon":
|
||||
var $icon = this.$ele.find('[data-notify="icon"]');
|
||||
if (self.settings.icon_type.toLowerCase() === 'class') {
|
||||
$icon.removeClass(self.settings.content.icon).addClass(commands[cmd]);
|
||||
} else {
|
||||
if (!$icon.is('img')) {
|
||||
$icon.find('img');
|
||||
}
|
||||
$icon.attr('src', commands[cmd]);
|
||||
}
|
||||
self.settings.content.icon = commands[command];
|
||||
break;
|
||||
case "progress":
|
||||
var newDelay = self.settings.delay - (self.settings.delay * (commands[cmd] / 100));
|
||||
this.$ele.data('notify-delay', newDelay);
|
||||
this.$ele.find('[data-notify="progressbar"] > div').attr('aria-valuenow', commands[cmd]).css('width', commands[cmd] + '%');
|
||||
break;
|
||||
case "url":
|
||||
this.$ele.find('[data-notify="url"]').attr('href', commands[cmd]);
|
||||
break;
|
||||
case "target":
|
||||
this.$ele.find('[data-notify="url"]').attr('target', commands[cmd]);
|
||||
break;
|
||||
default:
|
||||
this.$ele.find('[data-notify="' + cmd + '"]').html(commands[cmd]);
|
||||
}
|
||||
}
|
||||
var posX = this.$ele.outerHeight() + parseInt(self.settings.spacing) + parseInt(self.settings.offset.y);
|
||||
self.reposition(posX);
|
||||
},
|
||||
close: function() {
|
||||
self.close();
|
||||
}
|
||||
};
|
||||
|
||||
},
|
||||
buildNotify: function() {
|
||||
var content = this.settings.content;
|
||||
this.$ele = $(String.format(this.settings.template, this.settings.type, content.title, content.message, content.url, content.target));
|
||||
this.$ele.attr('data-notify-position', this.settings.placement.from + '-' + this.settings.placement.align);
|
||||
if (!this.settings.allow_dismiss) {
|
||||
this.$ele.find('[data-notify="dismiss"]').css('display', 'none');
|
||||
}
|
||||
if ((this.settings.delay <= 0 && !this.settings.showProgressbar) || !this.settings.showProgressbar) {
|
||||
this.$ele.find('[data-notify="progressbar"]').remove();
|
||||
}
|
||||
},
|
||||
setIcon: function() {
|
||||
this.$ele.addClass('alert-with-icon');
|
||||
|
||||
if (this.settings.icon_type.toLowerCase() === 'class') {
|
||||
this.$ele.find('[data-notify="icon"]').addClass(this.settings.content.icon);
|
||||
} else {
|
||||
if (this.$ele.find('[data-notify="icon"]').is('img')) {
|
||||
this.$ele.find('[data-notify="icon"]').attr('src', this.settings.content.icon);
|
||||
} else {
|
||||
this.$ele.find('[data-notify="icon"]').append('<img src="' + this.settings.content.icon + '" alt="Notify Icon" />');
|
||||
}
|
||||
}
|
||||
},
|
||||
styleDismiss: function() {
|
||||
this.$ele.find('[data-notify="dismiss"]').css({
|
||||
position: 'absolute',
|
||||
right: '10px',
|
||||
top: '50%',
|
||||
marginTop: '-13px',
|
||||
zIndex: this.settings.z_index + 2
|
||||
});
|
||||
},
|
||||
styleURL: function() {
|
||||
this.$ele.find('[data-notify="url"]').css({
|
||||
backgroundImage: 'url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)',
|
||||
height: '100%',
|
||||
left: 0,
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
width: '100%',
|
||||
zIndex: this.settings.z_index + 1
|
||||
});
|
||||
},
|
||||
placement: function() {
|
||||
var self = this,
|
||||
offsetAmt = this.settings.offset.y,
|
||||
css = {
|
||||
display: 'inline-block',
|
||||
margin: '0px auto',
|
||||
position: this.settings.position ? this.settings.position : (this.settings.element === 'body' ? 'fixed' : 'absolute'),
|
||||
transition: 'all .5s ease-in-out',
|
||||
zIndex: this.settings.z_index
|
||||
},
|
||||
hasAnimation = false,
|
||||
settings = this.settings;
|
||||
|
||||
$('[data-notify-position="' + this.settings.placement.from + '-' + this.settings.placement.align + '"]:not([data-closing="true"])').each(function() {
|
||||
offsetAmt = Math.max(offsetAmt, parseInt($(this).css(settings.placement.from)) + parseInt($(this).outerHeight()) + parseInt(settings.spacing));
|
||||
});
|
||||
if (this.settings.newest_on_top === true) {
|
||||
offsetAmt = this.settings.offset.y;
|
||||
}
|
||||
css[this.settings.placement.from] = offsetAmt + 'px';
|
||||
|
||||
switch (this.settings.placement.align) {
|
||||
case "left":
|
||||
case "right":
|
||||
css[this.settings.placement.align] = this.settings.offset.x + 'px';
|
||||
break;
|
||||
case "center":
|
||||
css.left = 0;
|
||||
css.right = 0;
|
||||
break;
|
||||
}
|
||||
this.$ele.css(css).addClass(this.settings.animate.enter);
|
||||
$.each(Array('webkit-', 'moz-', 'o-', 'ms-', ''), function(index, prefix) {
|
||||
self.$ele[0].style[prefix + 'AnimationIterationCount'] = 1;
|
||||
});
|
||||
|
||||
$(this.settings.element).append(this.$ele);
|
||||
|
||||
if (this.settings.newest_on_top === true) {
|
||||
offsetAmt = (parseInt(offsetAmt) + parseInt(this.settings.spacing)) + this.$ele.outerHeight();
|
||||
this.reposition(offsetAmt);
|
||||
}
|
||||
|
||||
if ($.isFunction(self.settings.onShow)) {
|
||||
self.settings.onShow.call(this.$ele);
|
||||
}
|
||||
|
||||
this.$ele.one(this.animations.start, function() {
|
||||
hasAnimation = true;
|
||||
}).one(this.animations.end, function() {
|
||||
self.$ele.removeClass(self.settings.animate.enter);
|
||||
if ($.isFunction(self.settings.onShown)) {
|
||||
self.settings.onShown.call(this);
|
||||
}
|
||||
});
|
||||
|
||||
setTimeout(function() {
|
||||
if (!hasAnimation) {
|
||||
if ($.isFunction(self.settings.onShown)) {
|
||||
self.settings.onShown.call(this);
|
||||
}
|
||||
}
|
||||
}, 600);
|
||||
},
|
||||
bind: function() {
|
||||
var self = this;
|
||||
|
||||
this.$ele.find('[data-notify="dismiss"]').on('click', function() {
|
||||
self.close();
|
||||
});
|
||||
|
||||
if ($.isFunction(self.settings.onClick)) {
|
||||
this.$ele.on('click', function(event) {
|
||||
if (event.target != self.$ele.find('[data-notify="dismiss"]')[0]) {
|
||||
self.settings.onClick.call(this, event);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
this.$ele.mouseover(function() {
|
||||
$(this).data('data-hover', "true");
|
||||
}).mouseout(function() {
|
||||
$(this).data('data-hover', "false");
|
||||
});
|
||||
this.$ele.data('data-hover', "false");
|
||||
|
||||
if (this.settings.delay > 0) {
|
||||
self.$ele.data('notify-delay', self.settings.delay);
|
||||
var timer = setInterval(function() {
|
||||
var delay = parseInt(self.$ele.data('notify-delay')) - self.settings.timer;
|
||||
if ((self.$ele.data('data-hover') === 'false' && self.settings.mouse_over === "pause") || self.settings.mouse_over != "pause") {
|
||||
var percent = ((self.settings.delay - delay) / self.settings.delay) * 100;
|
||||
self.$ele.data('notify-delay', delay);
|
||||
self.$ele.find('[data-notify="progressbar"] > div').attr('aria-valuenow', percent).css('width', percent + '%');
|
||||
}
|
||||
if (delay <= -(self.settings.timer)) {
|
||||
clearInterval(timer);
|
||||
self.close();
|
||||
}
|
||||
}, self.settings.timer);
|
||||
}
|
||||
},
|
||||
close: function() {
|
||||
var self = this,
|
||||
posX = parseInt(this.$ele.css(this.settings.placement.from)),
|
||||
hasAnimation = false;
|
||||
|
||||
this.$ele.attr('data-closing', 'true').addClass(this.settings.animate.exit);
|
||||
self.reposition(posX);
|
||||
|
||||
if ($.isFunction(self.settings.onClose)) {
|
||||
self.settings.onClose.call(this.$ele);
|
||||
}
|
||||
|
||||
this.$ele.one(this.animations.start, function() {
|
||||
hasAnimation = true;
|
||||
}).one(this.animations.end, function() {
|
||||
$(this).remove();
|
||||
if ($.isFunction(self.settings.onClosed)) {
|
||||
self.settings.onClosed.call(this);
|
||||
}
|
||||
});
|
||||
|
||||
setTimeout(function() {
|
||||
if (!hasAnimation) {
|
||||
self.$ele.remove();
|
||||
if (self.settings.onClosed) {
|
||||
self.settings.onClosed(self.$ele);
|
||||
}
|
||||
}
|
||||
}, 600);
|
||||
},
|
||||
reposition: function(posX) {
|
||||
var self = this,
|
||||
notifies = '[data-notify-position="' + this.settings.placement.from + '-' + this.settings.placement.align + '"]:not([data-closing="true"])',
|
||||
$elements = this.$ele.nextAll(notifies);
|
||||
if (this.settings.newest_on_top === true) {
|
||||
$elements = this.$ele.prevAll(notifies);
|
||||
}
|
||||
$elements.each(function() {
|
||||
$(this).css(self.settings.placement.from, posX);
|
||||
posX = (parseInt(posX) + parseInt(self.settings.spacing)) + $(this).outerHeight();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$.notify = function(content, options) {
|
||||
var plugin = new Notify(this, content, options);
|
||||
return plugin.notify;
|
||||
};
|
||||
$.notifyDefaults = function(options) {
|
||||
defaults = $.extend(true, {}, defaults, options);
|
||||
return defaults;
|
||||
};
|
||||
|
||||
$.notifyClose = function(selector) {
|
||||
|
||||
if (typeof selector === "undefined" || selector === "all") {
|
||||
$('[data-notify]').find('[data-notify="dismiss"]').trigger('click');
|
||||
} else if (selector === 'success' || selector === 'info' || selector === 'warning' || selector === 'danger') {
|
||||
$('.alert-' + selector + '[data-notify]').find('[data-notify="dismiss"]').trigger('click');
|
||||
} else if (selector) {
|
||||
$(selector + '[data-notify]').find('[data-notify="dismiss"]').trigger('click');
|
||||
} else {
|
||||
$('[data-notify-position="' + selector + '"]').find('[data-notify="dismiss"]').trigger('click');
|
||||
}
|
||||
};
|
||||
|
||||
$.notifyCloseExcept = function(selector) {
|
||||
|
||||
if (selector === 'success' || selector === 'info' || selector === 'warning' || selector === 'danger') {
|
||||
$('[data-notify]').not('.alert-' + selector).find('[data-notify="dismiss"]').trigger('click');
|
||||
} else {
|
||||
$('[data-notify]').not(selector).find('[data-notify="dismiss"]').trigger('click');
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,13 @@
|
||||
/*!
|
||||
* Chart.js v3.0.2
|
||||
* https://www.chartjs.org
|
||||
* (c) 2021 Chart.js Contributors
|
||||
* Released under the MIT License
|
||||
*/
|
||||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";const t="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function e(e,i,n){const o=n||(t=>Array.prototype.slice.call(t));let s=!1,a=[];return function(...n){a=o(n),s||(s=!0,t.call(window,(()=>{s=!1,e.apply(i,a)})))}}function i(t,e){let i;return function(){return e?(clearTimeout(i),i=setTimeout(t,e)):t(),e}}const n=t=>"start"===t?"left":"end"===t?"right":"center",o=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,s=(t,e,i)=>"right"===t?i:"center"===t?(e+i)/2:e;var a=new class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,n){const o=e.listeners[n],s=e.duration;o.forEach((n=>n({chart:t,numSteps:s,currentStep:Math.min(i-e.start,s)})))}_refresh(){const e=this;e._request||(e._running=!0,e._request=t.call(window,(()=>{e._update(),e._request=null,e._running&&e._refresh()})))}_update(t=Date.now()){const e=this;let i=0;e._charts.forEach(((n,o)=>{if(!n.running||!n.items.length)return;const s=n.items;let a,r=s.length-1,l=!1;for(;r>=0;--r)a=s[r],a._active?(a._total>n.duration&&(n.duration=a._total),a.tick(t),l=!0):(s[r]=s[s.length-1],s.pop());l&&(o.draw(),e._notify(o,n,t,"progress")),s.length||(n.running=!1,e._notify(o,n,t,"complete")),i+=s.length})),e._lastDate=t,0===i&&(e._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let n=i.length-1;for(;n>=0;--n)i[n].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}};
|
||||
/*!
|
||||
* @kurkle/color v0.1.9
|
||||
* https://github.com/kurkle/color#readme
|
||||
* (c) 2020 Jukka Kurkela
|
||||
* Released under the MIT License
|
||||
*/const r={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},l="0123456789ABCDEF",c=t=>l[15&t],h=t=>l[(240&t)>>4]+l[15&t],d=t=>(240&t)>>4==(15&t);function u(t){var e=function(t){return d(t.r)&&d(t.g)&&d(t.b)&&d(t.a)}(t)?c:h;return t?"#"+e(t.r)+e(t.g)+e(t.b)+(t.a<255?e(t.a):""):t}function f(t){return t+.5|0}const g=(t,e,i)=>Math.max(Math.min(t,i),e);function p(t){return g(f(2.55*t),0,255)}function m(t){return g(f(255*t),0,255)}function x(t){return g(f(t/2.55)/100,0,1)}function b(t){return g(f(100*t),0,100)}const _=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const y=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function v(t,e,i){const n=e*Math.min(i,1-i),o=(e,o=(e+t/30)%12)=>i-n*Math.max(Math.min(o-3,9-o,1),-1);return[o(0),o(8),o(4)]}function M(t,e,i){const n=(n,o=(n+t/60)%6)=>i-i*e*Math.max(Math.min(o,4-o,1),0);return[n(5),n(3),n(1)]}function w(t,e,i){const n=v(t,1,.5);let o;for(e+i>1&&(o=1/(e+i),e*=o,i*=o),o=0;o<3;o++)n[o]*=1-e-i,n[o]+=e;return n}function k(t){const e=t.r/255,i=t.g/255,n=t.b/255,o=Math.max(e,i,n),s=Math.min(e,i,n),a=(o+s)/2;let r,l,c;return o!==s&&(c=o-s,l=a>.5?c/(2-o-s):c/(o+s),r=o===e?(i-n)/c+(i<n?6:0):o===i?(n-e)/c+2:(e-i)/c+4,r=60*r+.5),[0|r,l||0,a]}function S(t,e,i,n){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,i,n)).map(m)}function P(t,e,i){return S(v,t,e,i)}function D(t){return(t%360+360)%360}function C(t){const e=y.exec(t);let i,n=255;if(!e)return;e[5]!==i&&(n=e[6]?p(+e[5]):m(+e[5]));const o=D(+e[2]),s=+e[3]/100,a=+e[4]/100;return i="hwb"===e[1]?function(t,e,i){return S(w,t,e,i)}(o,s,a):"hsv"===e[1]?function(t,e,i){return S(M,t,e,i)}(o,s,a):P(o,s,a),{r:i[0],g:i[1],b:i[2],a:n}}const A={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},O={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};let T;function L(t){T||(T=function(){const t={},e=Object.keys(O),i=Object.keys(A);let n,o,s,a,r;for(n=0;n<e.length;n++){for(a=r=e[n],o=0;o<i.length;o++)s=i[o],r=r.replace(s,A[s]);s=parseInt(O[a],16),t[r]=[s>>16&255,s>>8&255,255&s]}return t}(),T.transparent=[0,0,0,0]);const e=T[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}function R(t,e,i){if(t){let n=k(t);n[e]=Math.max(0,Math.min(n[e]+n[e]*i,0===e?360:1)),n=P(n),t.r=n[0],t.g=n[1],t.b=n[2]}}function E(t,e){return t?Object.assign(e||{},t):t}function I(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=m(t[3]))):(e=Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(t){for(var i,a=1,s=arguments.length;a<s;a++)for(var n in i=arguments[a])Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n]);return t}).apply(this,arguments)},CountUp=function(){function t(t,i,a){var s=this;this.target=t,this.endVal=i,this.options=a,this.version="2.0.7",this.defaults={startVal:0,decimalPlaces:0,duration:2,useEasing:!0,useGrouping:!0,smartEasingThreshold:999,smartEasingAmount:333,separator:",",decimal:".",prefix:"",suffix:""},this.finalEndVal=null,this.useEasing=!0,this.countDown=!1,this.error="",this.startVal=0,this.paused=!0,this.count=function(t){s.startTime||(s.startTime=t);var i=t-s.startTime;s.remaining=s.duration-i,s.useEasing?s.countDown?s.frameVal=s.startVal-s.easingFn(i,0,s.startVal-s.endVal,s.duration):s.frameVal=s.easingFn(i,s.startVal,s.endVal-s.startVal,s.duration):s.countDown?s.frameVal=s.startVal-(s.startVal-s.endVal)*(i/s.duration):s.frameVal=s.startVal+(s.endVal-s.startVal)*(i/s.duration),s.countDown?s.frameVal=s.frameVal<s.endVal?s.endVal:s.frameVal:s.frameVal=s.frameVal>s.endVal?s.endVal:s.frameVal,s.frameVal=Number(s.frameVal.toFixed(s.options.decimalPlaces)),s.printValue(s.frameVal),i<s.duration?s.rAF=requestAnimationFrame(s.count):null!==s.finalEndVal?s.update(s.finalEndVal):s.callback&&s.callback()},this.formatNumber=function(t){var i,a,n,e,r,o=t<0?"-":"";if(i=Math.abs(t).toFixed(s.options.decimalPlaces),n=(a=(i+="").split("."))[0],e=a.length>1?s.options.decimal+a[1]:"",s.options.useGrouping){r="";for(var l=0,h=n.length;l<h;++l)0!==l&&l%3==0&&(r=s.options.separator+r),r=n[h-l-1]+r;n=r}return s.options.numerals&&s.options.numerals.length&&(n=n.replace(/[0-9]/g,function(t){return s.options.numerals[+t]}),e=e.replace(/[0-9]/g,function(t){return s.options.numerals[+t]})),o+s.options.prefix+n+e+s.options.suffix},this.easeOutExpo=function(t,i,a,s){return a*(1-Math.pow(2,-10*t/s))*1024/1023+i},this.options=__assign(__assign({},this.defaults),a),this.formattingFn=this.options.formattingFn?this.options.formattingFn:this.formatNumber,this.easingFn=this.options.easingFn?this.options.easingFn:this.easeOutExpo,this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.endVal=this.validateValue(i),this.options.decimalPlaces=Math.max(this.options.decimalPlaces),this.resetDuration(),this.options.separator=String(this.options.separator),this.useEasing=this.options.useEasing,""===this.options.separator&&(this.options.useGrouping=!1),this.el="string"==typeof t?document.getElementById(t):t,this.el?this.printValue(this.startVal):this.error="[CountUp] target is null or undefined"}return t.prototype.determineDirectionAndSmartEasing=function(){var t=this.finalEndVal?this.finalEndVal:this.endVal;this.countDown=this.startVal>t;var i=t-this.startVal;if(Math.abs(i)>this.options.smartEasingThreshold){this.finalEndVal=t;var a=this.countDown?1:-1;this.endVal=t+a*this.options.smartEasingAmount,this.duration=this.duration/2}else this.endVal=t,this.finalEndVal=null;this.finalEndVal?this.useEasing=!1:this.useEasing=this.options.useEasing},t.prototype.start=function(t){this.error||(this.callback=t,this.duration>0?(this.determineDirectionAndSmartEasing(),this.paused=!1,this.rAF=requestAnimationFrame(this.count)):this.printValue(this.endVal))},t.prototype.pauseResume=function(){this.paused?(this.startTime=null,this.duration=this.remaining,this.startVal=this.frameVal,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count)):cancelAnimationFrame(this.rAF),this.paused=!this.paused},t.prototype.reset=function(){cancelAnimationFrame(this.rAF),this.paused=!0,this.resetDuration(),this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.printValue(this.startVal)},t.prototype.update=function(t){cancelAnimationFrame(this.rAF),this.startTime=null,this.endVal=this.validateValue(t),this.endVal!==this.frameVal&&(this.startVal=this.frameVal,this.finalEndVal||this.resetDuration(),this.finalEndVal=null,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count))},t.prototype.printValue=function(t){var i=this.formattingFn(t);"INPUT"===this.el.tagName?this.el.value=i:"text"===this.el.tagName||"tspan"===this.el.tagName?this.el.textContent=i:this.el.innerHTML=i},t.prototype.ensureNumber=function(t){return"number"==typeof t&&!isNaN(t)},t.prototype.validateValue=function(t){var i=Number(t);return this.ensureNumber(i)?i:(this.error="[CountUp] invalid start or end value: "+t,null)},t.prototype.resetDuration=function(){this.startTime=null,this.duration=1e3*Number(this.options.duration),this.remaining=this.duration},t}();
|
||||
@@ -0,0 +1,19 @@
|
||||
/*!
|
||||
* perfect-scrollbar v1.5.1
|
||||
* Copyright 2020 Hyunje Jun, MDBootstrap and Contributors
|
||||
* Licensed under MIT
|
||||
*/(function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):(a=a||self,a.PerfectScrollbar=b())})(this,function(){'use strict';var u=Math.abs,v=Math.floor;function a(a){return getComputedStyle(a)}function b(a,b){for(var c in b){var d=b[c];"number"==typeof d&&(d+="px"),a.style[c]=d}return a}function c(a){var b=document.createElement("div");return b.className=a,b}function d(a,b){if(!w)throw new Error("No element matching method supported");return w.call(a,b)}function e(a){a.remove?a.remove():a.parentNode&&a.parentNode.removeChild(a)}function f(a,b){return Array.prototype.filter.call(a.children,function(a){return d(a,b)})}function g(a,b){var c=a.element.classList,d=z.state.scrolling(b);c.contains(d)?clearTimeout(A[b]):c.add(d)}function h(a,b){A[b]=setTimeout(function(){return a.isAlive&&a.element.classList.remove(z.state.scrolling(b))},a.settings.scrollingThreshold)}function j(a,b){g(a,b),h(a,b)}function k(a){if("function"==typeof window.CustomEvent)return new CustomEvent(a);var b=document.createEvent("CustomEvent");return b.initCustomEvent(a,!1,!1,void 0),b}function l(a,b,c,d,e){void 0===d&&(d=!0),void 0===e&&(e=!1);var f;if("top"===b)f=["contentHeight","containerHeight","scrollTop","y","up","down"];else if("left"===b)f=["contentWidth","containerWidth","scrollLeft","x","left","right"];else throw new Error("A proper axis should be provided");m(a,c,f,d,e)}function m(a,b,c,d,e){var f=c[0],g=c[1],h=c[2],i=c[3],l=c[4],m=c[5];void 0===d&&(d=!0),void 0===e&&(e=!1);var n=a.element;// reset reach
|
||||
a.reach[i]=null,1>n[h]&&(a.reach[i]="start"),n[h]>a[f]-a[g]-1&&(a.reach[i]="end"),b&&(n.dispatchEvent(k("ps-scroll-"+i)),0>b?n.dispatchEvent(k("ps-scroll-"+l)):0<b&&n.dispatchEvent(k("ps-scroll-"+m)),d&&j(a,i)),a.reach[i]&&(b||e)&&n.dispatchEvent(k("ps-"+i+"-reach-"+a.reach[i]))}function n(a){return parseInt(a,10)||0}function o(a){return d(a,"input,[contenteditable]")||d(a,"select,[contenteditable]")||d(a,"textarea,[contenteditable]")||d(a,"button,[contenteditable]")}function p(b){var c=a(b);return n(c.width)+n(c.paddingLeft)+n(c.paddingRight)+n(c.borderLeftWidth)+n(c.borderRightWidth)}function q(a){var b=Math.ceil,c=a.element,d=v(c.scrollTop),g=c.getBoundingClientRect();a.containerWidth=b(g.width),a.containerHeight=b(g.height),a.contentWidth=c.scrollWidth,a.contentHeight=c.scrollHeight,c.contains(a.scrollbarXRail)||(f(c,z.element.rail("x")).forEach(function(a){return e(a)}),c.appendChild(a.scrollbarXRail)),c.contains(a.scrollbarYRail)||(f(c,z.element.rail("y")).forEach(function(a){return e(a)}),c.appendChild(a.scrollbarYRail)),!a.settings.suppressScrollX&&a.containerWidth+a.settings.scrollXMarginOffset<a.contentWidth?(a.scrollbarXActive=!0,a.railXWidth=a.containerWidth-a.railXMarginWidth,a.railXRatio=a.containerWidth/a.railXWidth,a.scrollbarXWidth=r(a,n(a.railXWidth*a.containerWidth/a.contentWidth)),a.scrollbarXLeft=n((a.negativeScrollAdjustment+c.scrollLeft)*(a.railXWidth-a.scrollbarXWidth)/(a.contentWidth-a.containerWidth))):a.scrollbarXActive=!1,!a.settings.suppressScrollY&&a.containerHeight+a.settings.scrollYMarginOffset<a.contentHeight?(a.scrollbarYActive=!0,a.railYHeight=a.containerHeight-a.railYMarginHeight,a.railYRatio=a.containerHeight/a.railYHeight,a.scrollbarYHeight=r(a,n(a.railYHeight*a.containerHeight/a.contentHeight)),a.scrollbarYTop=n(d*(a.railYHeight-a.scrollbarYHeight)/(a.contentHeight-a.containerHeight))):a.scrollbarYActive=!1,a.scrollbarXLeft>=a.railXWidth-a.scrollbarXWidth&&(a.scrollbarXLeft=a.railXWidth-a.scrollbarXWidth),a.scrollbarYTop>=a.railYHeight-a.scrollbarYHeight&&(a.scrollbarYTop=a.railYHeight-a.scrollbarYHeight),s(c,a),a.scrollbarXActive?c.classList.add(z.state.active("x")):(c.classList.remove(z.state.active("x")),a.scrollbarXWidth=0,a.scrollbarXLeft=0,c.scrollLeft=!0===a.isRtl?a.contentWidth:0),a.scrollbarYActive?c.classList.add(z.state.active("y")):(c.classList.remove(z.state.active("y")),a.scrollbarYHeight=0,a.scrollbarYTop=0,c.scrollTop=0)}function r(a,b){var c=Math.min,d=Math.max;return a.settings.minScrollbarLength&&(b=d(b,a.settings.minScrollbarLength)),a.settings.maxScrollbarLength&&(b=c(b,a.settings.maxScrollbarLength)),b}function s(a,c){var d={width:c.railXWidth},e=v(a.scrollTop);d.left=c.isRtl?c.negativeScrollAdjustment+a.scrollLeft+c.containerWidth-c.contentWidth:a.scrollLeft,c.isScrollbarXUsingBottom?d.bottom=c.scrollbarXBottom-e:d.top=c.scrollbarXTop+e,b(c.scrollbarXRail,d);var f={top:e,height:c.railYHeight};c.isScrollbarYUsingRight?c.isRtl?f.right=c.contentWidth-(c.negativeScrollAdjustment+a.scrollLeft)-c.scrollbarYRight-c.scrollbarYOuterWidth-9:f.right=c.scrollbarYRight-a.scrollLeft:c.isRtl?f.left=c.negativeScrollAdjustment+a.scrollLeft+2*c.containerWidth-c.contentWidth-c.scrollbarYLeft-c.scrollbarYOuterWidth:f.left=c.scrollbarYLeft+a.scrollLeft,b(c.scrollbarYRail,f),b(c.scrollbarX,{left:c.scrollbarXLeft,width:c.scrollbarXWidth-c.railBorderXWidth}),b(c.scrollbarY,{top:c.scrollbarYTop,height:c.scrollbarYHeight-c.railBorderYWidth})}function t(a,b){function c(b){b.touches&&b.touches[0]&&(b[k]=b.touches[0].pageY),s[o]=t+v*(b[k]-u),g(a,p),q(a),b.stopPropagation(),b.preventDefault()}function d(){h(a,p),a[r].classList.remove(z.state.clicking),a.event.unbind(a.ownerDocument,"mousemove",c)}function f(b,e){t=s[o],e&&b.touches&&(b[k]=b.touches[0].pageY),u=b[k],v=(a[j]-a[i])/(a[l]-a[n]),e?a.event.bind(a.ownerDocument,"touchmove",c):(a.event.bind(a.ownerDocument,"mousemove",c),a.event.once(a.ownerDocument,"mouseup",d),b.preventDefault()),a[r].classList.add(z.state.clicking),b.stopPropagation()}var i=b[0],j=b[1],k=b[2],l=b[3],m=b[4],n=b[5],o=b[6],p=b[7],r=b[8],s=a.element,t=null,u=null,v=null;a.event.bind(a[m],"mousedown",function(a){f(a)}),a.event.bind(a[m],"touchstart",function(a){f(a,!0)})}var w="undefined"!=typeof Element&&(Element.prototype.matches||Element.prototype.webkitMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector),z={main:"ps",rtl:"ps__rtl",element:{thumb:function(a){return"ps__thumb-"+a},rail:function(a){return"ps__rail-"+a},consuming:"ps__child--consume"},state:{focus:"ps--focus",clicking:"ps--clicking",active:function(a){return"ps--active-"+a},scrolling:function(a){return"ps--scrolling-"+a}}},A={x:null,y:null},B=function(a){this.element=a,this.handlers={}},C={isEmpty:{configurable:!0}};B.prototype.bind=function(a,b){"undefined"==typeof this.handlers[a]&&(this.handlers[a]=[]),this.handlers[a].push(b),this.element.addEventListener(a,b,!1)},B.prototype.unbind=function(a,b){var c=this;this.handlers[a]=this.handlers[a].fLine truncated
|
||||
for(;e.shadowRoot;)e=e.shadowRoot.activeElement;if(o(e))return}var h=0,i=0;switch(d.which){case 37:h=d.metaKey?-a.contentWidth:d.altKey?-a.containerWidth:-30;break;case 38:i=d.metaKey?a.contentHeight:d.altKey?a.containerHeight:30;break;case 39:h=d.metaKey?a.contentWidth:d.altKey?a.containerWidth:30;break;case 40:i=d.metaKey?-a.contentHeight:d.altKey?-a.containerHeight:-30;break;case 32:i=d.shiftKey?a.containerHeight:-a.containerHeight;break;case 33:i=a.containerHeight;break;case 34:i=-a.containerHeight;break;case 36:i=a.contentHeight;break;case 35:i=-a.contentHeight;break;default:return;}a.settings.suppressScrollX&&0!==h||a.settings.suppressScrollY&&0!==i||(c.scrollTop-=i,c.scrollLeft+=h,q(a),b(h,i)&&d.preventDefault())}})},wheel:function(b){function c(a,c){var d,e=v(h.scrollTop),f=0===h.scrollTop,g=e+h.offsetHeight===h.scrollHeight,i=0===h.scrollLeft,j=h.scrollLeft+h.offsetWidth===h.scrollWidth;return d=u(c)>u(a)?f||g:i||j,!d||!b.settings.wheelPropagation}function d(a){var b=a.deltaX,c=-1*a.deltaY;return("undefined"==typeof b||"undefined"==typeof c)&&(b=-1*a.wheelDeltaX/6,c=a.wheelDeltaY/6),a.deltaMode&&1===a.deltaMode&&(b*=10,c*=10),b!==b&&c!==c/* NaN checks */&&(b=0,c=a.wheelDelta),a.shiftKey?[-c,-b]:[b,c]}function f(b,c,d){// FIXME: this is a workaround for <select> issue in FF and IE #571
|
||||
if(!E.isWebKit&&h.querySelector("select:focus"))return!0;if(!h.contains(b))return!1;for(var e=b;e&&e!==h;){if(e.classList.contains(z.element.consuming))return!0;var f=a(e);// if deltaY && vertical scrollable
|
||||
if(d&&f.overflowY.match(/(scroll|auto)/)){var g=e.scrollHeight-e.clientHeight;if(0<g&&(0<e.scrollTop&&0>d||e.scrollTop<g&&0<d))return!0}// if deltaX && horizontal scrollable
|
||||
if(c&&f.overflowX.match(/(scroll|auto)/)){var i=e.scrollWidth-e.clientWidth;if(0<i&&(0<e.scrollLeft&&0>c||e.scrollLeft<i&&0<c))return!0}e=e.parentNode}return!1}function g(a){var e=d(a),g=e[0],i=e[1];if(!f(a.target,g,i)){var j=!1;b.settings.useBothWheelAxes?b.scrollbarYActive&&!b.scrollbarXActive?(i?h.scrollTop-=i*b.settings.wheelSpeed:h.scrollTop+=g*b.settings.wheelSpeed,j=!0):b.scrollbarXActive&&!b.scrollbarYActive&&(g?h.scrollLeft+=g*b.settings.wheelSpeed:h.scrollLeft-=i*b.settings.wheelSpeed,j=!0):(h.scrollTop-=i*b.settings.wheelSpeed,h.scrollLeft+=g*b.settings.wheelSpeed),q(b),j=j||c(g,i),j&&!a.ctrlKey&&(a.stopPropagation(),a.preventDefault())}}var h=b.element;"undefined"==typeof window.onwheel?"undefined"!=typeof window.onmousewheel&&b.event.bind(h,"mousewheel",g):b.event.bind(h,"wheel",g)},touch:function(b){function c(a,c){var d=v(l.scrollTop),e=l.scrollLeft,f=u(a),g=u(c);if(g>f){// user is perhaps trying to swipe up/down the page
|
||||
if(0>c&&d===b.contentHeight-b.containerHeight||0<c&&0===d)// set prevent for mobile Chrome refresh
|
||||
return 0===window.scrollY&&0<c&&E.isChrome;}else if(f>g&&(0>a&&e===b.contentWidth-b.containerWidth||0<a&&0===e))// user is perhaps trying to swipe left/right across the page
|
||||
return!0;return!0}function d(a,c){l.scrollTop-=c,l.scrollLeft-=a,q(b)}function f(a){return a.targetTouches?a.targetTouches[0]:a}function g(a){return!(a.pointerType&&"pen"===a.pointerType&&0===a.buttons)&&(!!(a.targetTouches&&1===a.targetTouches.length)||!!(a.pointerType&&"mouse"!==a.pointerType&&a.pointerType!==a.MSPOINTER_TYPE_MOUSE))}function h(a){if(g(a)){var b=f(a);m.pageX=b.pageX,m.pageY=b.pageY,n=new Date().getTime(),null!==p&&clearInterval(p)}}function i(b,c,d){if(!l.contains(b))return!1;for(var e=b;e&&e!==l;){if(e.classList.contains(z.element.consuming))return!0;var f=a(e);// if deltaY && vertical scrollable
|
||||
if(d&&f.overflowY.match(/(scroll|auto)/)){var g=e.scrollHeight-e.clientHeight;if(0<g&&(0<e.scrollTop&&0>d||e.scrollTop<g&&0<d))return!0}// if deltaX && horizontal scrollable
|
||||
if(c&&f.overflowX.match(/(scroll|auto)/)){var h=e.scrollWidth-e.clientWidth;if(0<h&&(0<e.scrollLeft&&0>c||e.scrollLeft<h&&0<c))return!0}e=e.parentNode}return!1}function j(a){if(g(a)){var b=f(a),e={pageX:b.pageX,pageY:b.pageY},h=e.pageX-m.pageX,j=e.pageY-m.pageY;if(i(a.target,h,j))return;d(h,j),m=e;var k=new Date().getTime(),l=k-n;0<l&&(o.x=h/l,o.y=j/l,n=k),c(h,j)&&a.preventDefault()}}function k(){b.settings.swipeEasing&&(clearInterval(p),p=setInterval(function(){return b.isInitialized?void clearInterval(p):o.x||o.y?.01>u(o.x)&&.01>u(o.y)?void clearInterval(p):void(d(30*o.x,30*o.y),o.x*=.8,o.y*=.8):void clearInterval(p)},10))}if(E.supportsTouch||E.supportsIePointer){var l=b.element,m={},n=0,o={},p=null;E.supportsTouch?(b.event.bind(l,"touchstart",h),b.event.bind(l,"touchmove",j),b.event.bind(l,"touchend",k)):E.supportsIePointer&&(window.PointerEvent?(b.event.bind(l,"pointerdown",h),b.event.bind(l,"pointermove",j),b.event.bind(l,"pointerup",k)):window.MSPointerEvent&&(b.event.bind(l,"MSPointerDown",h),b.event.bind(l,"MSPointerMove",j),b.event.bind(l,"MSPointerUp",k)))}}},H=function(d,e){var f=this;if(void 0===e&&(e={}),"string"==typeof d&&(d=document.querySelector(d)),!d||!d.nodeName)throw new Error("no element is specified to initialize PerfectScrollbar");for(var g in this.element=d,d.classList.add(z.main),this.settings=F(),e)this.settings[g]=e[g];this.containerWidth=null,this.containerHeight=null,this.contentWidth=null,this.contentHeight=null;var h=function(){return d.classList.add(z.state.focus)},i=function(){return d.classList.remove(z.state.focus)};this.isRtl="rtl"===a(d).direction,!0===this.isRtl&&d.classList.add(z.rtl),this.isNegativeScroll=function(){var a=d.scrollLeft,b=null;return d.scrollLeft=-1,b=0>d.scrollLeft,d.scrollLeft=a,b}(),this.negativeScrollAdjustment=this.isNegativeScroll?d.scrollWidth-d.clientWidth:0,this.event=new D,this.ownerDocument=d.ownerDocument||document,this.scrollbarXRail=c(z.element.rail("x")),d.appendChild(this.scrollbarXRail),this.scrollbarX=c(z.element.thumb("x")),this.scrollbarXRail.appendChild(this.scrollbarX),this.scrollbarX.setAttribute("tabindex",0),this.event.bind(this.scrollbarX,"focus",h),this.event.bind(this.scrollbarX,"blur",i),this.scrollbarXActive=null,this.scrollbarXWidth=null,this.scrollbarXLeft=null;var j=a(this.scrollbarXRail);this.scrollbarXBottom=parseInt(j.bottom,10),isNaN(this.scrollbarXBottom)?(this.isScrollbarXUsingBottom=!1,this.scrollbarXTop=n(j.top)):this.isScrollbarXUsingBottom=!0,this.railBorderXWidth=n(j.borderLeftWidth)+n(j.borderRightWidth),b(this.scrollbarXRail,{display:"block"}),this.railXMarginWidth=n(j.marginLeft)+n(j.marginRight),b(this.scrollbarXRail,{display:""}),this.railXWidth=null,this.railXRatio=null,this.scrollbarYRail=c(z.element.rail("y")),d.appendChild(this.scrollbarYRail),this.scrollbarY=c(z.element.thumb("y")),this.scrollbarYRail.appendChild(this.scrollbarY),this.scrollbarY.setAttribute("tabindex",0),this.event.bind(this.scrollbarY,"focus",h),this.event.bind(this.scrollbarY,"blur",i),this.scrollbarYActive=null,this.scrollbarYHeight=null,this.scrollbarYTop=null;var k=a(this.scrollbarYRail);this.scrollbarYRight=parseInt(k.right,10),isNaN(this.scrollbarYRight)?(this.isScrollbarYUsingRight=!1,this.scrollbarYLeft=n(k.left)):this.isScrollbarYUsingRight=!0,this.scrollbarYOuterWidth=this.isRtl?p(this.scrollbarY):null,this.railBorderYWidth=n(k.borderTopWidth)+n(k.borderBottomWidth),b(this.scrollbarYRail,{display:"block"}),this.railYMarginHeight=n(k.marginTop)+n(k.marginBottom),b(this.scrollbarYRail,{display:""}),this.railYHeight=null,this.railYRatio=null,this.reach={x:0>=d.scrollLeft?"start":d.scrollLeft>=this.contentWidth-this.containerWidth?"end":null,y:0>=d.scrollTop?"start":d.scrollTop>=this.contentHeight-this.containerHeight?"end":null},this.isAlive=!0,this.settings.handlers.forEach(function(a){return G[a](f)}),this.lastScrollTop=v(d.scrollTop),this.lastScrollLeft=d.scrollLeft,this.event.bind(this.element,"scroll",function(a){return f.onScroll(a)}),q(this)};return H.prototype.update=function(){this.isAlive&&(// Recalcuate negative scrollLeft adjustment
|
||||
// Recalculate rail margins
|
||||
// Hide scrollbars not to affect scrollWidth and scrollHeight
|
||||
this.negativeScrollAdjustment=this.isNegativeScroll?this.element.scrollWidth-this.element.clientWidth:0,b(this.scrollbarXRail,{display:"block"}),b(this.scrollbarYRail,{display:"block"}),this.railXMarginWidth=n(a(this.scrollbarXRail).marginLeft)+n(a(this.scrollbarXRail).marginRight),this.railYMarginHeight=n(a(this.scrollbarYRail).marginTop)+n(a(this.scrollbarYRail).marginBottom),b(this.scrollbarXRail,{display:"none"}),b(this.scrollbarYRail,{display:"none"}),q(this),l(this,"top",0,!1,!0),l(this,"left",0,!1,!0),b(this.scrollbarXRail,{display:""}),b(this.scrollbarYRail,{display:""}))},H.prototype.onScroll=function(){this.isAlive&&(q(this),l(this,"top",this.element.scrollTop-this.lastScrollTop),l(this,"left",this.element.scrollLeft-this.lastScrollLeft),this.lastScrollTop=v(this.element.scrollTop),this.lastScrollLeft=this.element.scrollLeft)},H.prototype.destroy=function(){this.isAlive&&(// unset elements
|
||||
this.event.unbindAll(),e(this.scrollbarX),e(this.scrollbarY),e(this.scrollbarXRail),e(this.scrollbarYRail),this.removePsClasses(),this.element=null,this.scrollbarX=null,this.scrollbarY=null,this.scrollbarXRail=null,this.scrollbarYRail=null,this.isAlive=!1)},H.prototype.removePsClasses=function(){this.element.className=this.element.className.split(" ").filter(function(a){return!a.match(/^ps([-_].+|)$/)}).join(" ")},H});
|
||||
@@ -0,0 +1,25 @@
|
||||
!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.Scrollbar=n():t.Scrollbar=n()}(this,(function(){return function(t){var n={};function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:r})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&n&&"string"!=typeof t)for(var o in t)e.d(r,o,function(n){return t[n]}.bind(null,o));return r},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p="",e(e.s=58)}([function(t,n,e){var r=e(25)("wks"),o=e(16),i=e(2).Symbol,u="function"==typeof i;(t.exports=function(t){return r[t]||(r[t]=u&&i[t]||(u?i:o)("Symbol."+t))}).store=r},function(t,n){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,n){var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},function(t,n){var e=t.exports={version:"2.6.9"};"number"==typeof __e&&(__e=e)},function(t,n,e){t.exports=!e(13)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(t,n,e){var r=e(2),o=e(3),i=e(11),u=e(6),c=e(10),s=function(t,n,e){var a,f,l,p,h=t&s.F,d=t&s.G,v=t&s.S,y=t&s.P,m=t&s.B,g=d?r:v?r[n]||(r[n]={}):(r[n]||{}).prototype,b=d?o:o[n]||(o[n]={}),x=b.prototype||(b.prototype={});for(a in d&&(e=n),e)l=((f=!h&&g&&void 0!==g[a])?g:e)[a],p=m&&f?c(l,r):y&&"function"==typeof l?c(Function.call,l):l,g&&u(g,a,l,t&s.U),b[a]!=l&&i(b,a,p),y&&x[a]!=l&&(x[a]=l)};r.core=o,s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},function(t,n,e){var r=e(2),o=e(11),i=e(9),u=e(16)("src"),c=e(60),s=(""+c).split("toString");e(3).inspectSource=function(t){return c.call(t)},(t.exports=function(t,n,e,c){var a="function"==typeof e;a&&(i(e,"name")||o(e,"name",n)),t[n]!==e&&(a&&(i(e,u)||o(e,u,t[n]?""+t[n]:s.join(String(n)))),t===r?t[n]=e:c?t[n]?t[n]=e:o(t,n,e):(delete t[n],o(t,n,e)))})(Function.prototype,"toString",(function(){return"function"==typeof this&&this[u]||c.call(this)}))},function(t,n,e){var r=e(8),o=e(41),i=e(43),u=Object.defineProperty;n.f=e(4)?Object.defineProperty:function(t,n,e){if(r(t),n=i(n,!0),r(e),o)try{return u(t,n,e)}catch(t){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(t[n]=e.value),t}},function(t,n,e){var r=e(1);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,n){var e={}.hasOwnProperty;t.exports=function(t,n){return e.call(t,n)}},function(t,n,e){var r=e(44);t.exports=function(t,n,e){if(r(t),void 0===n)return t;switch(e){case 1:return function(e){return t.call(n,e)};case 2:return function(e,r){return t.call(n,e,r)};case 3:return function(e,r,o){return t.call(n,e,r,o)}}return function(){return t.apply(n,arguments)}}},function(t,n,e){var r=e(7),o=e(17);t.exports=e(4)?function(t,n,e){return r.f(t,n,o(1,e))}:function(t,n,e){return t[n]=e,t}},function(t,n,e){var r=e(1);t.exports=function(t,n){if(!r(t)||t._t!==n)throw TypeError("Incompatible receiver, "+n+" required!");return t}},function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,n){t.exports={}},function(t,n,e){var r=e(10),o=e(49),i=e(50),u=e(8),c=e(19),s=e(51),a={},f={};(n=t.exports=function(t,n,e,l,p){var h,d,v,y,m=p?function(){return t}:s(t),g=r(e,l,n?2:1),b=0;if("function"!=typeof m)throw TypeError(t+" is not iterable!");if(i(m)){for(h=c(t.length);h>b;b++)if((y=n?g(u(d=t[b])[0],d[1]):g(t[b]))===a||y===f)return y}else for(v=m.call(t);!(d=v.next()).done;)if((y=o(v,g,d.value,n))===a||y===f)return y}).BREAK=a,n.RETURN=f},function(t,n){var e=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++e+r).toString(36))}},function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},function(t,n,e){var r=e(31),o=e(28);t.exports=function(t){return r(o(t))}},function(t,n,e){var r=e(27),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,n,e){var r=e(28);t.exports=function(t){return Object(r(t))}},function(t,n,e){var r=e(16)("meta"),o=e(1),i=e(9),u=e(7).f,c=0,s=Object.isExtensible||function(){return!0},a=!e(13)((function(){return s(Object.preventExtensions({}))})),f=function(t){u(t,r,{value:{i:"O"+ ++c,w:{}}})},l=t.exports={KEY:r,NEED:!1,fasLine truncated
|
||||
/*! *****************************************************************************
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||
this file except in compliance with the License. You may obtain a copy of the
|
||||
License at http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
||||
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
||||
MERCHANTABLITY OR NON-INFRINGEMENT.
|
||||
|
||||
See the Apache Version 2.0 License for specific language governing permissions
|
||||
and limitations under the License.
|
||||
***************************************************************************** */
|
||||
var o=function(t,n){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(t,n)},i=function(){return(i=Object.assign||function(t){for(var n,e=1,r=arguments.length;e<r;e++)for(var o in n=arguments[e])Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o]);return t}).apply(this,arguments)};function u(t,n,e,r){var o,i=arguments.length,u=i<3?n:null===r?r=Object.getOwnPropertyDescriptor(n,e):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)u=Reflect.decorate(t,n,e,r);else for(var c=t.length-1;c>=0;c--)(o=t[c])&&(u=(i<3?o(u):i>3?o(n,e,u):o(n,e))||u);return i>3&&u&&Object.defineProperty(n,e,u),u}e(59),e(80),e(85),e(94),e(97);var c=function(t){var n=typeof t;return null!=t&&("object"==n||"function"==n)},s=e(57),a="object"==typeof self&&self&&self.Object===Object&&self,f=s.a||a||Function("return this")(),l=f.Symbol,p=Object.prototype,h=p.hasOwnProperty,d=p.toString,v=l?l.toStringTag:void 0,y=Object.prototype.toString,m=l?l.toStringTag:void 0,g=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":m&&m in Object(t)?function(t){var n=h.call(t,v),e=t[v];try{t[v]=void 0;var r=!0}catch(t){}var o=d.call(t);return r&&(n?t[v]=e:delete t[v]),o}(t):function(t){return y.call(t)}(t)},b=/^\s+|\s+$/g,x=/^[-+]0x[0-9a-f]+$/i,_=/^0b[01]+$/i,w=/^0o[0-7]+$/i,E=parseInt,S=function(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return null!=t&&"object"==typeof t}(t)&&"[object Symbol]"==g(t)}(t))return NaN;if(c(t)){var n="function"==typeof t.valueOf?t.valueOf():t;t=c(n)?n+"":n}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(b,"");var e=_.test(t);return e||w.test(t)?E(t.slice(2),e?2:8):x.test(t)?NaN:+t},O=function(t,n,e){return void 0===e&&(e=n,n=void 0),void 0!==e&&(e=(e=S(e))==e?e:0),void 0!==n&&(n=(n=S(n))==n?n:0),function(t,n,e){return t==t&&(void 0!==e&&(t=t<=e?t:e),void 0!==n&&(t=t>=n?t:n)),t}(S(t),n,e)};function T(t,n){return void 0===t&&(t=-1/0),void 0===n&&(n=1/0),function(e,r){var o="_"+r;Object.defineProperty(e,r,{get:function(){return this[o]},set:function(e){Object.defineProperty(this,o,{value:O(e,t,n),enumerable:!1,writable:!0,configurable:!0})},enumerable:!0,configurable:!0})}}function A(t,n){var e="_"+n;Object.defineProperty(t,n,{get:function(){return this[e]},set:function(t){Object.defineProperty(this,e,{value:!!t,enumerable:!1,writable:!0,configurable:!0})},enumerable:!0,configurable:!0})}var M=function(){return f.Date.now()},P=Math.max,j=Math.min,k=function(t,n,e){var r,o,i,u,s,a,f=0,l=!1,p=!1,h=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function d(n){var e=r,i=o;return r=o=void 0,f=n,u=t.apply(i,e)}function v(t){var e=t-a;return void 0===a||e>=n||e<0||p&&t-f>=i}function y(){var t=M();if(v(t))return m(t);s=setTimeout(y,function(t){var e=n-(t-a);return p?j(e,i-(t-f)):e}(t))}function m(t){return s=void 0,h&&r?d(t):(r=o=void 0,u)}function g(){var t=M(),e=v(t);if(r=arguments,o=this,a=t,e){if(void 0===s)return function(t){return f=t,s=setTimeout(y,n),l?d(t):u}(a);if(p)return clearTimeout(s),s=setTimeout(y,n),d(a)}return void 0===s&&(s=setTimeout(y,n)),u}return n=S(n)||0,c(e)&&(l=!!e.leading,i=(p="maxWait"in e)?P(S(e.maxWait)||0,n):i,h="trailing"in e?!!e.trailing:h),g.cancel=function(){void 0!==s&&clearTimeout(s),f=0,r=a=o=s=void 0},g.flush=function(){return void 0===s?u:m(M())},g};function D(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return function(n,e,r){var o=r.value;return{get:function(){return this.hasOwnProperty(e)||Object.defineProperty(this,e,{value:k.apply(void 0,function(){for(var t=0,n=0,e=arguments.length;n<e;n++)t+=arguments[n].length;var r=Array(t),o=0;for(n=0;n<e;n++)for(var i=arguments[n],u=0,c=i.length;u<c;u++,o++)r[o]=i[u];return r}([o],t))}),this[e]}}}}var L,N=function(){function t(t){var n=this;void 0===t&&(t={}),this.damping=.1,this.thumbMinSize=20,this.renderByPixels=!0,this.alwaysShowTracks=!1,this.continuousScrolling=!0,this.delegateTo=null,this.plugins={},Object.keys(t).forEach((function(e){n[e]=t[e]}))}return Object.defineProperty(t.prototype,"wheelEventTarget",{get:function(){return this.delegateTo},set:function(t){console.warn("[smooth-scrollbar]: `options.wheelEventTarget` is deprecated and will be removed in the future, use `options.delegateTo` instead."),this.delegateTo=t},enumerable:!0,configurable:!0}),u([T(0,1)],t.prototype,"damping",void 0),u([T(0,1/0)],t.prototype,"thumbMinSize",void 0),u([A],t.prototype,"renderByPixels",void 0),u([A],t.prototype,"alwaysShowTracks",void 0),u([A],t.prototype,"continuousScrolling",void 0),t}(),z=new WeakMap;function C(){if(void 0!==L)return L;var t=!1;try{var n=function(){},e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassive",n,e),window.removeEventListener("testPassive",n,e)}catch(t){}return L=!!t&&{passive:!1}}function R(t){var n=z.get(t)||[];return z.set(t,n),function(t,e,r){function
Line truncated
|
||||
/*!
|
||||
* cast `I.Scrollbar` to `Scrollbar` to avoid error
|
||||
*
|
||||
* `I.Scrollbar` is not assignable to `Scrollbar`:
|
||||
* "privateProp" is missing in `I.Scrollbar`
|
||||
*
|
||||
* @see https://github.com/Microsoft/TypeScript/issues/2672
|
||||
*/
|
||||
var yt=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return function(t,n){function e(){this.constructor=t}o(t,n),t.prototype=null===n?Object.create(n):(e.prototype=n.prototype,new e)}(n,t),n.init=function(t,n){if(!t||1!==t.nodeType)throw new TypeError("expect element to be DOM Element, but got "+t);return vt(),lt.has(t)?lt.get(t):new pt(t,n)},n.initAll=function(t){return Array.from(document.querySelectorAll("[data-scrollbar]"),(function(e){return n.init(e,t)}))},n.has=function(t){return lt.has(t)},n.get=function(t){return lt.get(t)},n.getAll=function(){return Array.from(lt.values())},n.destroy=function(t){var n=lt.get(t);n&&n.destroy()},n.destroyAll=function(){lt.forEach((function(t){t.destroy()}))},n.use=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];t.forEach((function(t){var n=t.pluginName;if(!n)throw new TypeError("plugin name is required");nt.order.add(n),nt.constructors[n]=t}))}.apply(void 0,t)},n.attachStyle=function(){return vt()},n.detachStyle=function(){return function(){if(dt&&"undefined"!=typeof window){var t=document.getElementById(ht);t&&t.parentNode&&(t.parentNode.removeChild(t),dt=!1)}}()},n.version="8.5.3",n.ScrollbarPlugin=tt,n}(pt);n.default=yt}]).default}));
|
||||
@@ -0,0 +1,55 @@
|
||||
<!-- a lot of stuff-->
|
||||
|
||||
<!doctype html>
|
||||
{% load static %}
|
||||
<html lang="en"">
|
||||
<head>
|
||||
<title>Contract Detail</title>
|
||||
<link href="{% static 'financial/css/material-dashboard.css' %}" rel="stylesheet" >
|
||||
<link rel="icon" type="image/xicon" href="{% static 'public/img/logo.png' %}">
|
||||
<body class="g-sidenav-show bg-gray-200" >
|
||||
|
||||
<main class="main-content position-relative max-height-vh-100 h-100 border-radius-lg">
|
||||
|
||||
{% if is_new %}
|
||||
<h1>New Contract</h1>
|
||||
<form method="post" action='{% url "new_contract" %}' >
|
||||
{% csrf_token %}
|
||||
{{ form }}
|
||||
<button type=""button" value="submit">Create</button>
|
||||
</form>
|
||||
|
||||
{% else %}
|
||||
<h1> {{ contract.name }}</h1>
|
||||
<form method="post" action='{% url "contract_detail" contract.slug %}' >
|
||||
{% csrf_token %}
|
||||
{{ form }}
|
||||
<button type=""button" value="submit">Update</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{% if is_new %}
|
||||
{% else %}
|
||||
<h2> Charge Numbers</h2>
|
||||
{% if charge_numbes %}
|
||||
<p> put charge number table here</p>
|
||||
<p> Create a new charge number</p>
|
||||
{{ charge_number_form }}
|
||||
{% else %}
|
||||
<p> There are no charge numbers for this contract</p>
|
||||
<form method="post" action='{% url "new_charge_number" %}' >
|
||||
{% csrf_token %}
|
||||
{{ charge_number_form }}
|
||||
<button type=""button" value="submit">Update</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
</body>
|
||||
@@ -0,0 +1,49 @@
|
||||
<!-- a lot of stuff-->
|
||||
|
||||
<!doctype html>
|
||||
{% load static %}
|
||||
<html lang="en"">
|
||||
<head>
|
||||
<title>Profile</title>
|
||||
<link href="{% static 'financial/css/material-dashboard.css' %}" rel="stylesheet" >
|
||||
<link rel="icon" type="image/xicon" href="{% static 'public/img/logo.png' %}">
|
||||
<body class="g-sidenav-show bg-gray-200" >
|
||||
|
||||
<main class="main-content position-relative max-height-vh-100 h-100 border-radius-lg">
|
||||
|
||||
|
||||
<h1>Contracts</h1>
|
||||
{% if contracts %}
|
||||
<table>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Identifier</th>
|
||||
<th>Type</th>
|
||||
<th>Start Date</th>
|
||||
<th>End Date</th>
|
||||
<th>Proposed Amount</th>
|
||||
<th>Baseline Amount</th>
|
||||
<th>Funded Amount</th>
|
||||
</tr>
|
||||
|
||||
{% for contract in contracts %}
|
||||
<tr>
|
||||
<td> <a href="{% url 'contract_detail' contract.slug %}">{{ contract.name }}</a></td>
|
||||
<td> {{ contract.slug }}</td>
|
||||
<td> {{ contract.contract_type }}</td>
|
||||
<td> {{ contract.baseline_start }}</td>
|
||||
<td> {{ contract.baseline_end }}</td>
|
||||
<td> {{ contract.proposed_amount }}</td>
|
||||
<td> {{ contract.baseline_amount }}</td>
|
||||
<td> {{ contract.funded_amount }}</td>
|
||||
</tr>
|
||||
|
||||
{% endfor %}
|
||||
</table>
|
||||
<hr>
|
||||
<p> Create <a href="{% url 'new_contract' %}">new</a> contract.</p>
|
||||
{% else %}
|
||||
<p> There are no contracts. <a href="{% url 'new_contract' %}">Please make one</a></p>
|
||||
|
||||
{% endif %}
|
||||
</body>
|
||||
@@ -0,0 +1,116 @@
|
||||
<!doctype html>
|
||||
{% load static %}
|
||||
<html lang="en"">
|
||||
<head>
|
||||
<title>Accounting</title>
|
||||
<link href="{% static 'financial/css/material-dashboard.css' %}" rel="stylesheet" >
|
||||
<link rel="icon" type="image/xicon" href="{% static 'public/img/logo.png' %}">
|
||||
<body class="g-sidenav-show bg-gray-200" >
|
||||
<div class="sidenav-header">
|
||||
<ul class="navbar-item">
|
||||
<li class="nav-item">
|
||||
Dashboard
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
Settings
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<main class="main-content position-relative max-height-vh-100 h-100 border-radius-lg">
|
||||
<nav class="navbar navbar-main navbar-expand-lg px-0 mx-4 shadow-none border-radius-xl" id="navbarBlur" data-scroll="true">
|
||||
<div class="container-fluid py-1 px-3">
|
||||
<nav aria-label="breadcrumb">
|
||||
<h6>Dashboard</h6>
|
||||
</nav>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="container-fluid py-4">
|
||||
<div class="row">
|
||||
<div class="col-xl-3 col-sm-4 mb-xl-o mb-4">
|
||||
<div class="card">
|
||||
<div class="card-header p-3 pt-2">
|
||||
<a href="{% url 'contracts' %}">
|
||||
Contracts
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div class="card-body">
|
||||
<p> put picture here</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% if is_worker %}
|
||||
<div class="col-xl-3 col-sm-4 mb-xl-o mb-4">
|
||||
<div class="card">
|
||||
<div class="card-header p-3 pt-2">
|
||||
<a href="{% url 'profile' %}">
|
||||
Profile
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div class="card-body">
|
||||
<p> put picture here</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if is_worker %}
|
||||
<div class="col-xl-3 col-sm-4 mb-xl-o mb-4">
|
||||
<div class="card">
|
||||
<div class="card-header p-3 pt-2">
|
||||
<a href="{% url 'Timekeeping' %}">
|
||||
Timekeeping
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div class="card-body">
|
||||
<p> put picture here</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if is_manager %}
|
||||
<div class="col-xl-3 col-sm-4 mb-xl-o mb-4">
|
||||
<div class="card">
|
||||
<div class="card-header p-3 pt-2">
|
||||
<a href="{% url 'Timeapproval' %}">
|
||||
Time Approval
|
||||
</a>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p> put picture here</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if is_procurment_officer %}
|
||||
<div class="col-xl-3 col-sm-4 mb-xl-o mb-4">
|
||||
<div class="card">
|
||||
<div class="card-header p-3 pt-2">
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p> put picture here</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if is_finance %}
|
||||
<div class="col-xl-3 col-sm-4 mb-xl-o mb-4">
|
||||
<div class="card">
|
||||
<div class="card-header p-3 pt-2">
|
||||
<a href="{% url 'contracts' %}">
|
||||
Contracts
|
||||
</a>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p> put picture here</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<h1>Accouting</h1>
|
||||
</body>
|
||||
@@ -0,0 +1 @@
|
||||
<p> this page has not been created yet</p>
|
||||
@@ -0,0 +1,17 @@
|
||||
<!-- a lot of stuff-->
|
||||
|
||||
<!doctype html>
|
||||
{% load static %}
|
||||
<html lang="en"">
|
||||
<head>
|
||||
<title>Profile</title>
|
||||
<link href="{% static 'financial/css/material-dashboard.css' %}" rel="stylesheet" >
|
||||
<link rel="icon" type="image/xicon" href="{% static 'public/img/logo.png' %}">
|
||||
<body class="g-sidenav-show bg-gray-200" >
|
||||
|
||||
<main class="main-content position-relative max-height-vh-100 h-100 border-radius-lg">
|
||||
|
||||
|
||||
<h1>Profile</h1>
|
||||
{{ form }}
|
||||
</body>
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@@ -0,0 +1,17 @@
|
||||
from django.urls import path
|
||||
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path("", views.index, name="financial_index"),
|
||||
path("timekeeping", views.timekeeping, name="Timekeeping"),
|
||||
path("timeapproval", views.timeapproval, name="Timeapproval"),
|
||||
path("contracts", views.contracts, name="contracts"),
|
||||
path("<str:contract_slug>/contract_detail", views.contract_detail, name="contract_detail"),
|
||||
path("new_contract", views.new_contract, name="new_contract"),
|
||||
path("new_charge_number", views.new_charge_number, name="new_charge_number"),
|
||||
path("<str:charge_number_slug>/update_charge_number", views.update_charge_number, name="update_charge_number"),
|
||||
#path("contracts/<int:contract_id>/", views.contract_detail, name="contract"),
|
||||
path("procurements", views.procurement, name="procurements"),
|
||||
path("profile", views.profile, name="profile"),
|
||||
]
|
||||
@@ -0,0 +1,79 @@
|
||||
from django.shortcuts import render, redirect
|
||||
from .forms import EmployeeForm, ContractForm, ChargeNumberForm
|
||||
from .models import Contract
|
||||
# Create your views here.
|
||||
|
||||
# PAGES TO CREATE
|
||||
# dashboard
|
||||
# log in
|
||||
# log out
|
||||
# password reset
|
||||
# employee timecard
|
||||
# time card approval
|
||||
# contract
|
||||
# charge number
|
||||
# user management (?)
|
||||
|
||||
def index(request):
|
||||
permissions = []
|
||||
context = {
|
||||
'is_procurment_officer':True,
|
||||
'is_worker':True,
|
||||
'is_manager':True,
|
||||
'is_finance': True
|
||||
|
||||
}
|
||||
return render(request, "financial/index.html", context)
|
||||
|
||||
def contracts(request):
|
||||
contracts = Contract.objects.all()
|
||||
return render(request, 'financial/contracts.html', {'contracts':contracts})
|
||||
|
||||
def contract_detail(request, contract_slug):
|
||||
contract = Contract.objects.filter(slug=contract_slug)
|
||||
if request.method == 'POST':
|
||||
form = ContractForm(request.POST, instance=contract[0])
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return redirect('contracts')
|
||||
else:
|
||||
form = ContractForm(instance = contract[0])
|
||||
charge_number_form = ChargeNumberForm()
|
||||
# TODO: handle multiple better but we can assume there is only one
|
||||
|
||||
return render(request, 'financial/contract_detail.html', {'is_new': False, 'form': form, 'charge_number_form':charge_number_form, 'contract': contract[0]})
|
||||
|
||||
def new_contract(request):
|
||||
if request.method == "POST":
|
||||
form = ContractForm(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return redirect('contracts')
|
||||
else:
|
||||
return render(request, 'financial/contract_detail.html', {"form": ContractForm(), 'is_new': True})
|
||||
|
||||
else:
|
||||
return render(request, 'financial/contract_detail.html', {"form": ContractForm(), 'is_new': True})
|
||||
|
||||
def update_charge_number(request, charge_number_slug):
|
||||
return render(request, 'financial/not_created.html', {})
|
||||
|
||||
def new_charge_number(request, charge_number_slug):
|
||||
return render(request, 'financial/not_created.html', {})
|
||||
|
||||
def timekeeping(request):
|
||||
return render(request, 'financial/not_created.html', {})
|
||||
|
||||
def timeapproval(request):
|
||||
return render(request, 'financial/not_created.html', {})
|
||||
|
||||
def chargenumber(request):
|
||||
return render(request, 'financial/not_created.html', {})
|
||||
|
||||
def procurement(request):
|
||||
return render(request, 'financial/procurement.html', {})
|
||||
|
||||
def profile(request):
|
||||
form = EmployeeForm()
|
||||
return render(request, 'financial/profile.html', {'form': form})
|
||||
# def contract_detail(request, contract_id):
|
||||
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env python
|
||||
"""Django's command-line utility for administrative tasks."""
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
def main():
|
||||
"""Run administrative tasks."""
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'company_site.settings')
|
||||
try:
|
||||
from django.core.management import execute_from_command_line
|
||||
except ImportError as exc:
|
||||
raise ImportError(
|
||||
"Couldn't import Django. Are you sure it's installed and "
|
||||
"available on your PYTHONPATH environment variable? Did you "
|
||||
"forget to activate a virtual environment?"
|
||||
) from exc
|
||||
execute_from_command_line(sys.argv)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,64 @@
|
||||
from django.contrib import admin
|
||||
from .models import Contact, EmailMessage
|
||||
from .views import preview_email
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
from django.urls import path
|
||||
from django.template.loader import get_template
|
||||
from django.core.mail import EmailMultiAlternatives
|
||||
# Register your models here.
|
||||
|
||||
@admin.register(Contact, site=admin.site)
|
||||
class ContactAdmin(admin.ModelAdmin):
|
||||
list_display = ("email", "name", "contacted")
|
||||
list_filter = ("email", "name", "contacted")
|
||||
search_fields = ("email", "name")
|
||||
|
||||
@admin.action(description='Send seelcted emails')
|
||||
def send_emails(modeladmin, request, queryset):
|
||||
for email in queryset:
|
||||
success_count: int = 0
|
||||
try:
|
||||
from_email="info@aimloperations.com"
|
||||
d={"title":email.subject,"content":email.body}
|
||||
|
||||
html_content = get_template(f"emails/marketing_email.html").render(d)
|
||||
text_content = get_template(f"emails/marketing_email.txt").render(d)
|
||||
|
||||
msg = EmailMultiAlternatives(email.subject, text_content, from_email, [email.recipient])
|
||||
msg.attach_alternative(html_content, "text/html")
|
||||
|
||||
msg.send(fail_silently=False)
|
||||
|
||||
email.sent = True
|
||||
email.save()
|
||||
success_count += 1
|
||||
except Exception as e:
|
||||
raise UserWarning(e)
|
||||
modeladmin.message_user(request, f"{success_count} emails sent successfully.")
|
||||
|
||||
@admin.register(EmailMessage, site=admin.site)
|
||||
class EmailMessageAdmin(admin.ModelAdmin):
|
||||
change_form_template = 'admin/public/emailmessage/change_form.html'
|
||||
list_display = ('subject', 'recipient', 'sent')
|
||||
actions = [send_emails]
|
||||
|
||||
def get_urls(self):
|
||||
urls = super().get_urls()
|
||||
custom_urls = [
|
||||
path('preview_email/<int:pk>/', self.admin_site.admin_view(self.preview_email), name="preview_email")
|
||||
|
||||
]
|
||||
print(f'RETURNING: {custom_urls + urls}')
|
||||
return custom_urls + urls
|
||||
|
||||
def preview_email(self, request, pk):
|
||||
email_instance = get_object_or_404(EmailMessage, pk=pk)
|
||||
context = {
|
||||
"title":email_instance.subject,
|
||||
"content":email_instance.body
|
||||
}
|
||||
return render(
|
||||
request, 'public/preview_email.html', context
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class PublicConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'public'
|
||||
@@ -0,0 +1,15 @@
|
||||
from django import forms
|
||||
from django_recaptcha.fields import ReCaptchaField
|
||||
from django_recaptcha.widgets import ReCaptchaV3
|
||||
from django.conf import settings
|
||||
|
||||
class FormWithCaptcha(forms.Form):
|
||||
captcha = ReCaptchaField(
|
||||
widget=ReCaptchaV3(
|
||||
attrs={
|
||||
'required_score':0.85,
|
||||
}
|
||||
),
|
||||
public_key=settings.RECAPTCHA_PUBLIC_KEY,
|
||||
private_key=settings.RECAPTCHA_PRIVATE_KEY,
|
||||
)
|
||||
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 5.0 on 2023-12-05 18:32
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Contact',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('email', models.EmailField(max_length=128)),
|
||||
('name', models.CharField(max_length=128)),
|
||||
('blurb', models.CharField(blank=True, max_length=254)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,24 @@
|
||||
# Generated by Django 5.0 on 2023-12-05 19:28
|
||||
|
||||
import django.utils.timezone
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('public', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='contact',
|
||||
name='created',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='contact',
|
||||
name='last_modified',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.0 on 2023-12-07 17:23
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('public', '0002_contact_created_contact_last_modified'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='contact',
|
||||
name='contacted',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,19 @@
|
||||
# Generated by Django 4.2.17 on 2025-02-10 17:13
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("public", "0003_contact_contacted"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="contact",
|
||||
name="subject",
|
||||
field=models.CharField(default=" ", max_length=128),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,40 @@
|
||||
# Generated by Django 4.2.17 on 2025-02-16 12:43
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("public", "0004_contact_subject"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="EmailMessage",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("created", models.DateTimeField(default=django.utils.timezone.now)),
|
||||
(
|
||||
"last_modified",
|
||||
models.DateTimeField(default=django.utils.timezone.now),
|
||||
),
|
||||
("subject", models.CharField(max_length=255)),
|
||||
("body", models.TextField()),
|
||||
("recipient", models.EmailField(max_length=254)),
|
||||
("sent", models.BooleanField(default=False)),
|
||||
],
|
||||
options={
|
||||
"abstract": False,
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,35 @@
|
||||
from django.db import models
|
||||
from django.utils import timezone
|
||||
|
||||
class TimeInfoBase(models.Model):
|
||||
|
||||
created = models.DateTimeField(default=timezone.now)
|
||||
last_modified = models.DateTimeField(default=timezone.now)
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not kwargs.pop("skip_last_modified", False) and not hasattr(self, "skip_last_modified"):
|
||||
self.last_modified = timezone.now()
|
||||
if kwargs.get("update_fields") is not None:
|
||||
kwargs["update_fields"] = list({*kwargs["update_fields"], "last_modified"})
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
# Create your models here.
|
||||
class Contact(TimeInfoBase):
|
||||
email = models.EmailField(max_length=128)
|
||||
name = models.CharField(max_length=128)
|
||||
blurb = models.CharField(max_length=254, blank=True)
|
||||
subject = models.CharField(max_length=128)
|
||||
contacted = models.BooleanField(default=False)
|
||||
|
||||
class EmailMessage(TimeInfoBase):
|
||||
subject = models.CharField(max_length=255)
|
||||
body = models.TextField()
|
||||
recipient = models.EmailField()
|
||||
sent = models.BooleanField(default=False)
|
||||
|
||||
def __str__(self):
|
||||
return self.recipient + " | " + self.subject
|
||||
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 978 KiB |
|
After Width: | Height: | Size: 269 KiB |
|
After Width: | Height: | Size: 1012 KiB |
|
After Width: | Height: | Size: 428 KiB |
|
After Width: | Height: | Size: 291 KiB |
|
After Width: | Height: | Size: 695 B |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,15 @@
|
||||
{% extends 'admin/change_form.html' %}
|
||||
|
||||
{% block submit_buttons_bottom %}
|
||||
<div class="submit-row">
|
||||
<!-- <input type="submit" value="Preview Email" name="_preview_email" class="default" /> -->
|
||||
<form action="/public/emailmessage/preview_email/{{ original.pk }}/" method="post" target="_blank" style="display: inline;">
|
||||
{% csrf_token %}
|
||||
<input type="submit" value="Preview Email" name="_preview_email" class="default" />
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
{{ block.super }}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,147 @@
|
||||
<!DOCTYPE html>
|
||||
{% load static %}
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>AI ML Operations, LLC</title>
|
||||
<!-- Materialize CSS -->
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" rel="stylesheet">
|
||||
<link rel="icon" type="image/xicon" href="{% static 'public/img/logo.png' %}">
|
||||
<!-- Material Icons -->
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||
<!-- Custom CSS -->
|
||||
<style>
|
||||
.hero-section {
|
||||
background: {% block path %}url({% static 'public/img/bg1.png' %}) {% endblock %};
|
||||
height: 60vh;
|
||||
display: flex;
|
||||
background-repeat:no-repeat;
|
||||
background-position: center center;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
color: white;
|
||||
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
.hero-section h1 {
|
||||
font-size: 4rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
.hero-section p {
|
||||
font-weight: bold;
|
||||
}
|
||||
.section {
|
||||
padding: 4rem 0;
|
||||
}
|
||||
feature-icon {
|
||||
font-size: 3rem;
|
||||
color: #26a69a;
|
||||
}
|
||||
.pricing-card {
|
||||
text-align: center;
|
||||
padding: 2rem;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.screenshot-img {
|
||||
width: 100%;
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||
|
||||
}
|
||||
.footer {
|
||||
padding: 2rem 0;
|
||||
background-color: #333;
|
||||
color: white;
|
||||
text-align: center;
|
||||
}
|
||||
body {
|
||||
display: flex;
|
||||
min-height: 100vh;
|
||||
flex-direction: column;
|
||||
}
|
||||
main {
|
||||
flex: 1 0 auto;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Navigation Bar -->
|
||||
<ul id="servicesDropdown" class="dropdown-content">
|
||||
<li ><a href="{% url 'ai_education' %}">AI Education</a></li>
|
||||
<li ><a href="{% url 'ai_sensor' %}">AI Sensor</a></li>
|
||||
<li ><a href="{% url 'bot' %}">Bot Creation</a></li>
|
||||
<li class="active"><a href="{% url 'chat' %}">Chat</a></li>
|
||||
<li ><a href="{% url 'computers' %}">Computer Builds</a></li>
|
||||
<li ><a href="{% url 'file_hosting' %}">File Hosting</a></li>
|
||||
<li ><a href="{% url 'ml_model' %}">ML Models</a></li>
|
||||
<li ><a href="{% url 'web_design' %}">Website Design</a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
<nav class="blue-grey darken-3">
|
||||
<div class="nav-wrapper container">
|
||||
<a href="{% url 'public_index' %}" class="brand-logo">AI ML Operations, LLC</a>
|
||||
<a href="#" data-target="mobile-nav" class="sidenav-trigger"><i class="material-icons">menu</i></a>
|
||||
<ul class="right hide-on-med-and-down">
|
||||
<!-- <li class="active"><a href="{% url 'public_index' %}">Home</a></li> -->
|
||||
<li><a class="dropdown-trigger" href="#!" data-target="servicesDropdown">Services<i class="material-icons right">arrow_drop_down</i></a></li>
|
||||
<li><a href="{% url 'contact' %}">Contact</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Mobile Navigation -->
|
||||
<ul class="sidenav" id="mobile-nav">
|
||||
<li class="active"><a >Services</a></li>
|
||||
<hr />
|
||||
<li ><a href="{% url 'ai_education' %}">AI Education</a></li>
|
||||
<li ><a href="{% url 'ai_sensor' %}">AI Sensor</a></li>
|
||||
<li ><a href="{% url 'bot' %}">Bot Creation</a></li>
|
||||
<li ><a href="{% url 'chat' %}">Chat</a></li>
|
||||
<li ><a href="{% url 'computers' %}">Computer Builds</a></li>
|
||||
<li ><a href="{% url 'file_hosting' %}">File Hosting</a></li>
|
||||
<li ><a href="{% url 'ml_model' %}">ML Models</a></li>
|
||||
<li ><a href="{% url 'web_design' %}">Website Design</a></li>
|
||||
<hr/>
|
||||
|
||||
<li class="active"><a href="{% url 'contact' %}">Contact</a></li>
|
||||
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<main>
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
|
||||
</main>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<p>© <script>document.write( new Date().getFullYear() );</script> AI ML Operations, LLC. All rights reserved.</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- Materialize JS -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
|
||||
<!-- <script>
|
||||
// Initialize Materialize components
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var elems = document.querySelectorAll('.sidenav');
|
||||
var instances = M.Sidenav.init(elems);
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
$(".dropdown-trigger").dropdown();
|
||||
</script> -->
|
||||
<script>
|
||||
$(".dropdown-trigger").dropdown();
|
||||
</script>
|
||||
<script>
|
||||
// Initialize Materialize components
|
||||
M.AutoInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,110 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>New Feedback Submission</title>
|
||||
<style>
|
||||
/* Basic reset for email clients */
|
||||
body, table, td, a {
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-ms-text-size-adjust: 100%;
|
||||
}
|
||||
table, td {
|
||||
mso-table-lspace: 0pt;
|
||||
mso-table-rspace: 0pt;
|
||||
}
|
||||
img {
|
||||
border: 0;
|
||||
height: auto;
|
||||
line-height: 100%;
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
-ms-interpolation-mode: bicubic;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
.email-container {
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #dddddd;
|
||||
}
|
||||
.header {
|
||||
background-color: #007BFF;
|
||||
color: #ffffff;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
.content {
|
||||
padding: 20px;
|
||||
color: #333333;
|
||||
}
|
||||
.footer {
|
||||
background-color: #f4f4f4;
|
||||
color: #777777;
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.feedback-title {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.feedback-text {
|
||||
font-size: 14px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0" align="center">
|
||||
<tr>
|
||||
<td>
|
||||
<!-- Email Container -->
|
||||
<div class="email-container">
|
||||
<!-- Header -->
|
||||
<div class="header">
|
||||
<h1>New Contact Request</h1>
|
||||
</div>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="content">
|
||||
<p>Hello,</p>
|
||||
<p>A new feedback item has been submitted. Here are the details:</p>
|
||||
|
||||
<!-- Feedback Title -->
|
||||
<div class="feedback-title">
|
||||
Subject: <strong>{{ subject }}</strong>
|
||||
</div>
|
||||
|
||||
<!-- Email -->
|
||||
<div class="feedback-title">
|
||||
Email: <strong>{{ email }}</strong>
|
||||
</div>
|
||||
|
||||
<!-- Feedback Text -->
|
||||
<div class="feedback-text">
|
||||
<strong>Message:</strong><br>
|
||||
{{ message }}
|
||||
</div>
|
||||
|
||||
<p>Thank you for your attention.</p>
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<div class="footer">
|
||||
<p>This is an automated message. Please do not reply to this email.</p>
|
||||
<p>© 2025 AI ML Operations, LLC. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,3 @@
|
||||
New Contact Request for AI ML Operations, LLC
|
||||
|
||||
"New Contact. {{ subject }} from {{ email }}. {{ message }}"
|
||||
@@ -0,0 +1,61 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Email Template</title>
|
||||
<!-- Materialize CSS -->
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: #f4f4f4;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.email-container {
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
background-color: #ffffff;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.header {
|
||||
background-color: #37474f;
|
||||
color: #ffffff;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
.content {
|
||||
padding: 20px;
|
||||
color: #333333;
|
||||
}
|
||||
.footer {
|
||||
background-color: #333;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
color: white;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="email-container">
|
||||
<!-- Header -->
|
||||
<div class="header">
|
||||
<h4>{{ title | safe }}</h4>
|
||||
</div>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="content">
|
||||
{{ content | safe }}
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<div class="footer">
|
||||
<p>© 2025 AI ML Operations, LLC. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,3 @@
|
||||
{{ subject }}
|
||||
|
||||
{{ content }}
|
||||
@@ -0,0 +1,98 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
{% block path %} url({% static 'public/img/bg4.jpeg' %}) {% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<!-- Hero Section -->
|
||||
<div class="hero-section">
|
||||
<h1>AI Education</h1>
|
||||
<p class="flow-text">Empowering Businesses with AI Knowledge</p>
|
||||
</div>
|
||||
|
||||
<!-- About AI Education Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">About AI Education</h2>
|
||||
<p class="flow-text">
|
||||
At AI ML Operations, we believe that understanding AI is the first step toward leveraging its power. Our AI Education service is designed to equip businesses with the knowledge and skills needed to integrate AI into their workflows effectively. We offer tailored courses, hands-on workshops, and ongoing support to ensure your team is confident and capable in using AI technologies.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Features Section -->
|
||||
<div class="section grey lighten-3">
|
||||
<div class="row container">
|
||||
<h2 class="header">What We Offer</h2>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">school</i>
|
||||
<h5>Custom Courses</h5>
|
||||
<p>Tailored AI courses designed to meet your business needs and goals.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">work</i>
|
||||
<h5>Hands-On Workshops</h5>
|
||||
<p>Interactive sessions to apply AI concepts in real-world scenarios.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">support</i>
|
||||
<h5>Ongoing Support</h5>
|
||||
<p>Continuous learning and support to keep your team up-to-date.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Course Highlights Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">Course Highlights</h2>
|
||||
<div class="col s12 m4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="AI Fundamentals">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">AI Fundamentals</span>
|
||||
<p>Learn the basics of AI, including machine learning, neural networks, and data preprocessing.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="AI for Business">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">AI for Business</span>
|
||||
<p>Discover how AI can optimize operations, improve decision-making, and drive innovation.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Advanced AI Techniques">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Advanced AI Techniques</span>
|
||||
<p>Dive deep into advanced topics like deep learning, natural language processing, and computer vision.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Call to Action Section -->
|
||||
<div class="section blue-grey darken-3 white-text">
|
||||
<div class="row container center">
|
||||
<h2 class="header">Ready to Transform Your Business?</h2>
|
||||
<p class="flow-text">Contact us today to schedule your AI Education sessions.</p>
|
||||
<a href="{% url 'contact' %}" class="btn-large waves-effect waves-light white blue-grey-text text-darken-3">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,109 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
{% block path %} url({% static 'public/img/bg4.jpeg' %}) {% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<!-- Hero Section -->
|
||||
<div class="hero-section">
|
||||
<h1>AI Sensor Algorithms</h1>
|
||||
<p class="flow-text">Enhancing Sensor Performance with Advanced AI</p>
|
||||
</div>
|
||||
|
||||
<!-- About AI Sensor Algorithms Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">About AI Sensor Algorithms</h2>
|
||||
<p class="flow-text">
|
||||
At AI ML Operations, we specialize in developing cutting-edge AI algorithms to enhance the performance of on-board sensors. By leveraging techniques such as Natural Language Processing (NLP), Pattern Recognition, Machine Vision, and more, we enable sensors to deliver smarter, faster, and more accurate results. Our solutions are designed to integrate seamlessly into your systems, providing real-time insights and improving decision-making capabilities.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Features Section -->
|
||||
<div class="section grey lighten-3">
|
||||
<div class="row container">
|
||||
<h2 class="header">What We Offer</h2>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">visibility</i>
|
||||
<h5>Machine Vision</h5>
|
||||
<p>Enhance visual data processing with advanced machine vision algorithms.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">pattern</i>
|
||||
<h5>Pattern Recognition</h5>
|
||||
<p>Identify and analyze patterns in sensor data for improved accuracy.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">translate</i>
|
||||
<h5>Natural Language Processing</h5>
|
||||
<p>Enable sensors to interpret and respond to human language inputs.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Applications Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">Applications</h2>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Industrial Automation">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Industrial Automation</span>
|
||||
<p>Optimize manufacturing processes with AI-enhanced sensors.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Autonomous Vehicles">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Autonomous Vehicles</span>
|
||||
<p>Improve navigation and safety with advanced sensor algorithms.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Healthcare Monitoring">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Healthcare Monitoring</span>
|
||||
<p>Enable real-time health tracking with AI-powered sensors.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Smart Home Devices">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Smart Home Devices</span>
|
||||
<p>Enhance user experiences with intelligent sensor integrations.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Call to Action Section -->
|
||||
<div class="section blue-grey darken-3 white-text">
|
||||
<div class="row container center">
|
||||
<h2 class="header">Ready to Enhance Your Sensors?</h2>
|
||||
<p class="flow-text">Contact us today to discuss your AI sensor needs.</p>
|
||||
<a href="{% url 'contact' %}" class="btn-large waves-effect waves-light white blue-grey-text text-darken-3">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,98 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
{% block path %} url({% static 'public/img/bg4.jpeg' %}) {% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<!-- Hero Section -->
|
||||
<div class="hero-section">
|
||||
<h1>Agentic Bots</h1>
|
||||
<p class="flow-text">Intelligent Bots for Automation and Engagement</p>
|
||||
</div>
|
||||
|
||||
<!-- About Agentic Bots Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">About Agentic Bots</h2>
|
||||
<p class="flow-text">
|
||||
At AI ML Operations, we create intelligent, agentic bots designed to automate tasks, engage users, and streamline workflows. Our bots currently integrate seamlessly with Telegram, but we can customize them to suit your specific platform or needs. Whether you need a bot for customer support, data collection, or process automation, we deliver solutions that are reliable, scalable, and easy to use.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Features Section -->
|
||||
<div class="section grey lighten-3">
|
||||
<div class="row container">
|
||||
<h2 class="header">What We Offer</h2>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">smart_toy</i>
|
||||
<h5>Custom Bot Development</h5>
|
||||
<p>Tailored bots designed to meet your unique business requirements.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">integration_instructions</i>
|
||||
<h5>Platform Integration</h5>
|
||||
<p>Bots that integrate with Telegram or other platforms of your choice.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">settings</i>
|
||||
<h5>Hosting & Maintenance</h5>
|
||||
<p>We host and maintain your bots, ensuring they run smoothly 24/7.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Applications Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">Applications</h2>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Customer Support">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Customer Support</span>
|
||||
<p>Automate responses and provide instant support to your customers.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Data Collection">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Data Collection</span>
|
||||
<p>Gather and organize data efficiently using intelligent bots.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Process Automation">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Process Automation</span>
|
||||
<p>Streamline workflows and reduce manual effort with automated bots.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Call to Action Section -->
|
||||
<div class="section blue-grey darken-3 white-text">
|
||||
<div class="row container center">
|
||||
<h2 class="header">Ready to Automate?</h2>
|
||||
<p class="flow-text">Contact us today to create your custom agentic bot.</p>
|
||||
<a href="{% url 'contact' %}" class="btn-large waves-effect waves-light white blue-grey-text text-darken-3">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,96 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
{% block path %} url({% static 'public/img/bg4.jpeg' %}) {% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<!-- Hero Section -->
|
||||
<div class="hero-section" >
|
||||
<h1>Chat</h1>
|
||||
<p>Your Private, Secure, and Powerful LLM Solution</p>
|
||||
</div>
|
||||
|
||||
<!-- Product Description Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">What is Chat?</h2>
|
||||
<p class="flow-text">
|
||||
Chat is a closed-source Large Language Model (LLM) designed specifically for small and medium businesses. Hosted locally, Chat ensures that all your data remains private and secure. With Chat, your data is never sold or accessed by third parties—ever. You retain full control over your accounts and data. Chat also includes advanced file analysis capabilities, making it a versatile tool for your business needs.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Features Section -->
|
||||
<div class="section grey lighten-3">
|
||||
<div class="row container">
|
||||
<h2 class="header">Key Features</h2>
|
||||
<div class="col s12 m4">
|
||||
|
||||
<div class="center">
|
||||
<i class="material-icons feature-icon">lock</i>
|
||||
<h5>Local Hosting</h5>
|
||||
<p>All data is stored and processed locally, ensuring maximum privacy and security.</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="center">
|
||||
<i class="material-icons feature-icon">security</i>
|
||||
<h5>No Third-Party Access</h5>
|
||||
<p>Your data is never sold or accessed by third parties for any reason.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="center">
|
||||
<i class="material-icons feature-icon">folder</i>
|
||||
<h5>File Analysis</h5>
|
||||
<p>Analyze files directly within the platform for seamless integration into your workflows.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Pricing Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">Pricing</h2>
|
||||
|
||||
<div class="col s12 m6">
|
||||
<div class="screenshot-img">
|
||||
<img src="{% static 'public/img/chat_screenshot.png' %}" style="width: 100%;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6">
|
||||
<div class="pricing-card blue-grey lighten-5">
|
||||
<h4>$10</h4>
|
||||
<p>per user per month</p>
|
||||
<p>Start with a free trial to experience the power of Chat.</p>
|
||||
<a class="btn waves-effect waves-light" href="{% url 'contact' %}">Inquire Now</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Product Images Section -->
|
||||
<!-- <div class="section grey lighten-3">
|
||||
<div class="row container">
|
||||
<h2 class="header">Product Images</h2>
|
||||
<div class="col s12 m4">
|
||||
<img src="https://via.placeholder.com/400x300" alt="Chat Interface" class="responsive-img materialboxed">
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<img src="https://via.placeholder.com/400x300" alt="File Analysis" class="responsive-img materialboxed">
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<img src="https://via.placeholder.com/400x300" alt="Dashboard" class="responsive-img materialboxed">
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,109 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
{% block path %} url({% static 'public/img/bg4.jpeg' %}) {% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<!-- Hero Section -->
|
||||
<div class="hero-section">
|
||||
<h1>Computer Solutions</h1>
|
||||
<p class="flow-text">From Gaming PCs to AI Servers – We Build, Deploy, and Maintain</p>
|
||||
</div>
|
||||
|
||||
<!-- About Computer Solutions Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">About Our Computer Solutions</h2>
|
||||
<p class="flow-text">
|
||||
At AI ML Operations, we specialize in procuring, building, deploying, and maintaining computers tailored to your specific needs. Whether you're a gamer, a creative professional, or a business requiring high-performance workstations or AI servers, we deliver reliable, scalable, and efficient solutions. Our end-to-end service ensures your systems are optimized for performance and longevity.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Features Section -->
|
||||
<div class="section grey lighten-3">
|
||||
<div class="row container">
|
||||
<h2 class="header">What We Offer</h2>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">build</i>
|
||||
<h5>Custom Builds</h5>
|
||||
<p>We design and build computers tailored to your specific requirements, from gaming PCs to AI servers.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">cloud_upload</i>
|
||||
<h5>Deployment</h5>
|
||||
<p>Seamless deployment of systems, ensuring they are ready for immediate use.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">settings</i>
|
||||
<h5>Maintenance</h5>
|
||||
<p>Ongoing support and maintenance to keep your systems running smoothly.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Solutions Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">Our Solutions</h2>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Gaming PCs">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Gaming PCs</span>
|
||||
<p>High-performance gaming rigs built for the latest games and VR experiences.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Workstations">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Workstations</span>
|
||||
<p>Powerful workstations for creative professionals, engineers, and developers.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Storage Servers">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Storage Servers</span>
|
||||
<p>Scalable storage solutions for data-intensive applications and backups.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="AI Servers">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">AI Servers</span>
|
||||
<p>High-performance servers optimized for AI and machine learning workloads.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Call to Action Section -->
|
||||
<div class="section blue-grey darken-3 white-text">
|
||||
<div class="row container center">
|
||||
<h2 class="header">Ready to Upgrade Your Systems?</h2>
|
||||
<p class="flow-text">Contact us today to discuss your computer needs.</p>
|
||||
<a href="{% url 'contact' %}" class="btn-large waves-effect waves-light white blue-grey-text text-darken-3">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,126 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
{% block path %} url({% static 'public/img/bg2.jpeg' %}) {% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<!-- Hero Section -->
|
||||
<div class="hero-section">
|
||||
<h1>Get in Touch</h1>
|
||||
</div>
|
||||
|
||||
<!-- Contact Content -->
|
||||
<div class="contact-section grey lighten-3">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
{% if success %}
|
||||
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||||
<span class="alert-text"> We'll be in contact shortly!</span>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if errors %}
|
||||
<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
||||
<span class="alert-text">{{ errors }}</span>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="col s12 m8">
|
||||
<div class="contact-card white">
|
||||
<h4>Send Us a Message</h4>
|
||||
<form action="{% url 'contact' %}" method="POST">
|
||||
{% csrf_token %}
|
||||
<div class="row">
|
||||
<div class="form-group col s12 m6" style="padding-right:1rem">
|
||||
<input type="text" class="form-control" class="validate" name="name" placeholder="Your Name">
|
||||
</div>
|
||||
<div class="form-group col s12 m6" style="padding-left:1rem">
|
||||
<input type="email" class="form-control" class="validate" name="email" placeholder="Your Email">
|
||||
</div>
|
||||
<!-- <div class="input-field col s12">
|
||||
<input id="subject" type="text" class="validate" required>
|
||||
<label for="subject">Subject</label>
|
||||
</div> -->
|
||||
<div class="form-group col s12" style="padding-left:1rem">
|
||||
<input type="text" class="form-control" class="validate" name="subject" placeholder="Subject">
|
||||
</div>
|
||||
<div class="form-group col-12" style="padding:1rem">
|
||||
<textarea name="message" type="text" class="form-control" class="validate" placeholder="Your message"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12">
|
||||
{% if capchaForm %}
|
||||
{{ capchaForm }}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<!-- <input type="submit" class="btn btn-primary" value="Send"> -->
|
||||
<button class="btn waves-effect waves-light blue-grey darken-3" type="submit" value="Send">
|
||||
Send Message
|
||||
<i class="material-icons right">send</i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col s12 m4">
|
||||
<div class="contact-info">
|
||||
<h5>Contact Information</h5>
|
||||
<ul class="collection">
|
||||
<!-- <li class="collection-item">
|
||||
<i class="material-icons">location_on</i>
|
||||
<p>1968 Greensboro Dr<br>Wheaton, IL 60189</p>
|
||||
</li> -->
|
||||
<li class="collection-item">
|
||||
<i class="material-icons">phone</i>
|
||||
<p>+1 (330) 402-2675</p>
|
||||
</li>
|
||||
<li class="collection-item">
|
||||
<i class="material-icons">email</i>
|
||||
<p>ryan@aimloperations.com</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- <h5>Follow Us</h5>
|
||||
<div class="social-links">
|
||||
<a href="#" class="btn-floating blue-grey darken-3">
|
||||
<i class="material-icons">group</i>
|
||||
</a>
|
||||
<a href="#" class="btn-floating blue-grey darken-3">
|
||||
<i class="material-icons">message</i>
|
||||
</a>
|
||||
<a href="#" class="btn-floating blue-grey darken-3">
|
||||
<i class="material-icons">business</i>
|
||||
</a>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Map Section -->
|
||||
<!-- <div class="row">
|
||||
<div class="col s12">
|
||||
<div class="contact-card white">
|
||||
<h5>Our Location</h5>
|
||||
<div class="map-container">
|
||||
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2972.770560296143!2d-88.12337822267253!3d41.83323846821986!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x880e542fbc244bbd%3A0x7aa4cddecbc2cf1f!2s1968%20Greensboro%20Dr%2C%20Wheaton%2C%20IL%2060189!5e0!3m2!1sen!2sus!4v1739220517291!5m2!1sen!2sus"
|
||||
width="100%"
|
||||
height="300"
|
||||
style="border:0;"
|
||||
allowfullscreen=""
|
||||
loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,100 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
{% block path %} url({% static 'public/img/bg4.jpeg' %}) {% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<!-- Hero Section -->
|
||||
<div class="hero-section">
|
||||
<h1>File Hosting</h1>
|
||||
<p class="flow-text">Secure, Scalable, and Reliable File Storage with Weekly Backups</p>
|
||||
</div>
|
||||
|
||||
<!-- About File Hosting Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">About Our File Hosting Service</h2>
|
||||
<p class="flow-text">
|
||||
At AI ML Operations, we provide secure and scalable file hosting solutions tailored to your business needs. Our platform ensures your data is always accessible, protected, and backed up with weekly backups for added peace of mind. Whether you're storing critical business documents, media files, or large datasets, our file hosting service is designed to meet your requirements with reliability and efficiency.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Features Section -->
|
||||
<div class="section grey lighten-3">
|
||||
<div class="row container">
|
||||
<h2 class="header">What We Offer</h2>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">cloud</i>
|
||||
<h5>Secure Storage</h5>
|
||||
<p>Your files are stored securely with advanced encryption protocols.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">backup</i>
|
||||
<h5>Weekly Backups</h5>
|
||||
<p>Automatic weekly backups to ensure your data is always safe.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">storage</i>
|
||||
<h5>Scalable Solutions</h5>
|
||||
<p>Easily scale your storage as your business grows.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Benefits Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">Why Choose Us?</h2>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Data Security">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Data Security</span>
|
||||
<p>Advanced encryption and access controls to protect your files.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Reliability">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Reliability</span>
|
||||
<p>99.9% uptime guarantee for uninterrupted access to your files.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Easy Management">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Easy Management</span>
|
||||
<p>User-friendly interface for seamless file management.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Call to Action Section -->
|
||||
<div class="section blue-grey darken-3 white-text">
|
||||
<div class="row container center">
|
||||
<h2 class="header">Ready to Secure Your Files?</h2>
|
||||
<p class="flow-text">Contact us today to get started with our file hosting service.</p>
|
||||
<a href="{% url 'contact' %}" class="btn-large waves-effect waves-light white blue-grey-text text-darken-3">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,98 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
{% block path %} url({% static 'public/img/bg4.jpeg' %}) {% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<!-- Hero Section -->
|
||||
<div class="hero-section">
|
||||
<h1>ML Model Creation</h1>
|
||||
<p class="flow-text">Tailored Machine Learning Models for Any Problem Set</p>
|
||||
</div>
|
||||
|
||||
<!-- About ML Model Creation Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">About ML Model Creation</h2>
|
||||
<p class="flow-text">
|
||||
At AI ML Operations, we specialize in creating custom machine learning models to solve complex problems across industries. With extensive expertise in supervised, unsupervised, and reinforcement learning, we design models that deliver accurate, scalable, and actionable insights. Whether you need predictive analytics, pattern recognition, or decision-making systems, we provide end-to-end solutions tailored to your needs.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Features Section -->
|
||||
<div class="section grey lighten-3">
|
||||
<div class="row container">
|
||||
<h2 class="header">What We Offer</h2>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">supervised_user_circle</i>
|
||||
<h5>Supervised Learning</h5>
|
||||
<p>Create models for classification, regression, and prediction tasks.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">explore</i>
|
||||
<h5>Unsupervised Learning</h5>
|
||||
<p>Discover patterns and insights from unlabeled data.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">trending_up</i>
|
||||
<h5>Reinforcement Learning</h5>
|
||||
<p>Develop systems that learn and adapt through interaction.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Applications Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">Applications</h2>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Predictive Analytics">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Predictive Analytics</span>
|
||||
<p>Forecast trends and outcomes with high accuracy.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Fraud Detection">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Fraud Detection</span>
|
||||
<p>Identify and prevent fraudulent activities in real-time.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Recommendation Systems">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Recommendation Systems</span>
|
||||
<p>Personalize user experiences with intelligent recommendations.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Call to Action Section -->
|
||||
<div class="section blue-grey darken-3 white-text">
|
||||
<div class="row container center">
|
||||
<h2 class="header">Ready to Solve Your Problem?</h2>
|
||||
<p class="flow-text">Contact us today to create your custom ML model.</p>
|
||||
<a href="{% url 'contact' %}" class="btn-large waves-effect waves-light white blue-grey-text text-darken-3">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,157 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<!-- Hero Section -->
|
||||
<div class="hero-section">
|
||||
<h1>AI ML Operations, LLC</h1>
|
||||
<br />
|
||||
<p>Taking AI and ML from concept to Production</p>
|
||||
</div>
|
||||
|
||||
<!-- About Us Section -->
|
||||
<div class="section grey lighten-3">
|
||||
<div class="row container">
|
||||
<h2 class="header">About Us</h2>
|
||||
<p class="flow-text">
|
||||
At AI/ML Operations, we are dedicated to delivering production-ready AI and ML solutions that seamlessly integrate into your workflows. With over a decade of experience, we specialize in crafting cutting-edge machine learning models and AI algorithms to tackle the most complex and demanding challenges across various industries.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Services Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">Our Services</h2>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card blue-grey lighten-5">
|
||||
<div class="card-content">
|
||||
<span class="card-title"><a href="{% url 'ai_sensor' %}">AI Sensor Algorithms</a></span>
|
||||
<p>Develop intelligent algorithms that enhance sensor data processing, enabling real-time insights and decision-making for IoT and industrial applications.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card blue-grey lighten-5">
|
||||
<div class="card-content">
|
||||
<span class="card-title"><a href="{% url 'ai_education' %}">AI Education</a></span>
|
||||
<p>Stay ahead of the AI technology curve with our AI Education classes. Classes are tailored to the audience familiarity with AI. Held in-person or virtual.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card blue-grey lighten-5">
|
||||
<div class="card-content">
|
||||
<span class="card-title"><a href="{% url 'bot' %}">Bot Creation</a></span>
|
||||
<p>Build agentic intelligent bots for workflow automation, customer support, and data collection for enhancing productivity and user experience.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card blue-grey lighten-5">
|
||||
<div class="card-content">
|
||||
<span class="card-title"><a href="{% url 'chat' %}">Chat</a></span>
|
||||
<p>Chat is a closed-source Large Language Model (LLM) designed specifically for small and medium businesses.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card blue-grey lighten-5">
|
||||
<div class="card-content">
|
||||
<span class="card-title"><a href="{% url 'computers' %}">Computer Builds</a></span>
|
||||
<p>Wether you're looking for a server for storage or compute or a workstation computer, we will build your next system for you.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card blue-grey lighten-5">
|
||||
<div class="card-content">
|
||||
<span class="card-title"><a href="{% url 'file_hosting' %}">File Hosting</a></span>
|
||||
<p>Secure and scalable file hosting solutions to store, manage, and share your data with ease and confidence.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card blue-grey lighten-5">
|
||||
<div class="card-content">
|
||||
<span class="card-title"><a href="{% url 'ml_model' %}">ML Model Creation</a></span>
|
||||
<p>Design and deploy custom machine learning models tailored to your business needs, ensuring accuracy, scalability, and performance.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card blue-grey lighten-5">
|
||||
<div class="card-content">
|
||||
<span class="card-title"><a href="{% url 'web_design' %}">Web Design and Hosting</a></span>
|
||||
<p>Create visually stunning and highly functional websites, coupled with reliable hosting solutions to ensure your online presence is always at its best.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Contact Us Section -->
|
||||
<!-- <div class="section grey lighten-3">
|
||||
<div class="row container">
|
||||
<h2 class="header">Contact Us</h2>
|
||||
<form action="{% url 'contact' %}" method="post">
|
||||
{% csrf_token %}
|
||||
<div class="row">
|
||||
{% if success %}
|
||||
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||||
<span class="alert-text"> We'll be in contact shortly!</span>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if errors %}
|
||||
<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
||||
<span class="alert-text">{{ errors }}</span>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="col l6 m6 s12">
|
||||
<div class="form-group" style="padding-left:1rem">
|
||||
<input type="email" class="form-control" name="email" placeholder="Your Email">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col l6 m6 s12">
|
||||
<div class="form-group" style="padding-right:1rem">
|
||||
<input type="text" class="form-control" name="name" placeholder="Your Name">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col l10 m10 s12">
|
||||
<div class="form-group" style="padding:1rem">
|
||||
<textarea name="message" type="text" class="form-control" rows="5" placeholder="Your message"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col l2 m2 s12">
|
||||
<input type="submit" class="btn btn-primary" value="Send">
|
||||
</div>
|
||||
<div class="col l12 m12 s12">
|
||||
<div class="form-group">
|
||||
{% if capchaForm %}
|
||||
{{ capchaForm }}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div> -->
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,61 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Email Template</title>
|
||||
<!-- Materialize CSS -->
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: #f4f4f4;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.email-container {
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
background-color: #ffffff;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.header {
|
||||
background-color: #37474f;
|
||||
color: #ffffff;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
.content {
|
||||
padding: 20px;
|
||||
color: #333333;
|
||||
}
|
||||
.footer {
|
||||
background-color: #333;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
color: white;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="email-container">
|
||||
<!-- Header -->
|
||||
<div class="header">
|
||||
<h4>{{ title | safe }}</h4>
|
||||
</div>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="content">
|
||||
{{ content | safe }}
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<div class="footer">
|
||||
<p>© 2025 AI ML Operations, LLC. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,207 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
{% block path %} url({% static 'public/img/bg4.jpeg' %}) {% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<!-- Hero Section -->
|
||||
<div class="hero-section">
|
||||
<h1>Web Design & Hosting</h1>
|
||||
<p class="flow-text">Crafting Beautiful, Functional Websites with Reliable Hosting</p>
|
||||
</div>
|
||||
|
||||
<!-- About Web Design & Hosting Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">About Our Web Design & Hosting Service</h2>
|
||||
<p class="flow-text">
|
||||
At AI ML Operations, we specialize in creating visually stunning, highly functional websites tailored to your business needs. From design to deployment, we handle every aspect of your online presence. Our reliable hosting solutions ensure your website is always fast, secure, and accessible. Whether you need a simple portfolio site or a complex e-commerce platform, we’ve got you covered.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Features Section -->
|
||||
<div class="section grey lighten-3">
|
||||
<div class="row container">
|
||||
<h2 class="header">What We Offer</h2>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">design_services</i>
|
||||
<h5>Custom Web Design</h5>
|
||||
<p>Tailored designs that reflect your brand and engage your audience.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">dns</i>
|
||||
<h5>Reliable Hosting</h5>
|
||||
<p>Fast, secure, and scalable hosting solutions for your website.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m4">
|
||||
<div class="icon-block">
|
||||
<i class="material-icons">settings</i>
|
||||
<h5>Ongoing Support</h5>
|
||||
<p>Continuous maintenance and support to keep your site running smoothly.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Services Section -->
|
||||
<div class="section white">
|
||||
<div class="row container">
|
||||
<h2 class="header">Our Services</h2>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Custom Web Design">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Custom Web Design</span>
|
||||
<p>Unique, responsive designs tailored to your brand and audience.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="E-Commerce Solutions">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">E-Commerce Solutions</span>
|
||||
<p>Build and optimize online stores for seamless shopping experiences.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Website Hosting">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Website Hosting</span>
|
||||
<p>Secure, high-performance hosting with 99.9% uptime guarantee.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="SEO Optimization">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">SEO Optimization</span>
|
||||
<p>Improve your website's visibility and ranking on search engines.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<img src="https://via.placeholder.com/400x200" alt="Maintenance & Support">
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<span class="card-title">Maintenance & Support</span>
|
||||
<p>Regular updates, backups, and troubleshooting to keep your site running smoothly.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section grey lighten-4">
|
||||
<div class="container">
|
||||
<h3 class="center-align">Web Hosting Plans</h3>
|
||||
|
||||
<!-- Pricing toggle -->
|
||||
<div class="row center-align">
|
||||
<div class="col s12">
|
||||
<div class="switch">
|
||||
<label>
|
||||
Monthly
|
||||
<input type="checkbox" id="pricingToggle">
|
||||
<span class="lever"></span>
|
||||
Yearly
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Pricing cards -->
|
||||
<div class="row">
|
||||
<!-- Monthly Card -->
|
||||
<div class="col s12 m6 l6">
|
||||
<div class="card z-depth-2">
|
||||
<div class="card-content center-align">
|
||||
<span class="card-title">Standard Plan</span>
|
||||
<h4>$<span class="price">10</span></h4>
|
||||
<p class="grey-text"><span class="billing-period">per month</span></p>
|
||||
<ul class="collection">
|
||||
<li class="collection-item"><i class="material-icons left">check_circle</i>Web Hosting</li>
|
||||
<li class="collection-item"><i class="material-icons left">check_circle</i>Weekly Backups</li>
|
||||
<li class="collection-item"><i class="material-icons left">check_circle</i>SSL Certificate</li>
|
||||
<li class="collection-item"><i class="material-icons left">check_circle</i>CAPTCHA Protection</li>
|
||||
<li class="collection-item"><i class="material-icons left">check_circle</i>Email Notifications</li>
|
||||
<li class="collection-item"><i class="material-icons left">check_circle</i>Backend Admin Access</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="card-action center-align">
|
||||
<a href="#" class="waves-effect waves-light btn blue">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Yearly Card -->
|
||||
<div class="col s12 m6 l6">
|
||||
<div class="card z-depth-2 teal lighten-1 white-text">
|
||||
<div class="card-content center-align">
|
||||
<span class="card-title">Premium Plan</span>
|
||||
<h4>$<span class="price">15</span></h4>
|
||||
<p><span class="billing-period">per month</span></p>
|
||||
<ul class="collection">
|
||||
<li class="collection-item teal lighten-1 white-text"><i class="material-icons left">check_circle</i>All Standard Features</li>
|
||||
<li class="collection-item teal lighten-1 white-text"><i class="material-icons left">analytics</i>Monthly Analytics Reports</li>
|
||||
<li class="collection-item teal lighten-1 white-text"><i class="material-icons left">speed</i>Site Optimization Reports</li>
|
||||
<li class="collection-item teal lighten-1 white-text"><i class="material-icons left">email</i>HTML Marketing Emails</li>
|
||||
<li class="collection-item teal lighten-1 white-text"><i class="material-icons left">star</i>2 Months Free (Yearly)</li>
|
||||
<li class="collection-item teal lighten-1 white-text"><i class="material-icons left">star</i>Priority Support</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="card-action center-align">
|
||||
<a href="#" class="waves-effect waves-light btn white blue-text">Save 20%</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<script>
|
||||
// Toggle functionality
|
||||
document.getElementById('pricingToggle').addEventListener('change', function() {
|
||||
const prices = document.querySelectorAll('.price');
|
||||
const periods = document.querySelectorAll('.billing-period');
|
||||
|
||||
if(this.checked) {
|
||||
prices[0].textContent = '100';
|
||||
periods[0].textContent = 'per year';
|
||||
prices[1].textContent = '150';
|
||||
periods[1].textContent = 'per year';
|
||||
} else {
|
||||
prices[0].textContent = '10';
|
||||
periods[0].textContent = 'per month';
|
||||
prices[1].textContent = '15';
|
||||
periods[1].textContent = 'per month';
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- Call to Action Section -->
|
||||
<div class="section blue-grey darken-3 white-text">
|
||||
<div class="row container center">
|
||||
<h2 class="header">Ready to Build Your Online Presence?</h2>
|
||||
<p class="flow-text">Contact us today to get started on your website project.</p>
|
||||
<a href="{% url 'contact' %}" class="btn-large waves-effect waves-light white blue-grey-text text-darken-3">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@@ -0,0 +1,17 @@
|
||||
from django.urls import path
|
||||
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path("", views.index, name="public_index"),
|
||||
path("chat", views.chat, name="chat"),
|
||||
path("ai_education", views.ai_education, name="ai_education"),
|
||||
path("computer", views.computers, name="computers"),
|
||||
path("web_design", views.web_design, name="web_design"),
|
||||
path("ai_sensor", views.ai_sensor, name="ai_sensor"),
|
||||
path("file_hosting", views.file_hosting, name="file_hosting"),
|
||||
path("bot_creation", views.bot, name="bot"),
|
||||
path("ml_model", views.ml_model, name="ml_model"),
|
||||
path("contact", views.contact, name="contact"),
|
||||
path("preview_email/<int:pk>/", views.preview_email, name="preview_email")
|
||||
]
|
||||
@@ -0,0 +1,104 @@
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
|
||||
from django.http import HttpResponse
|
||||
from .models import Contact, EmailMessage
|
||||
from django.template.loader import get_template
|
||||
from django.core.mail import EmailMultiAlternatives
|
||||
from django.conf import settings
|
||||
from django.core.mail import send_mail
|
||||
from .forms import FormWithCaptcha
|
||||
from django.contrib.auth.decorators import login_required
|
||||
|
||||
def send_contact_email(email, subject, message):
|
||||
subject = "New Contact Request for AI ML Operations, LLC"
|
||||
from_email = email
|
||||
to="ryan@aimloperations.com"
|
||||
d = {"subject": subject, "message": message, "email": email}
|
||||
html_content = get_template(r'emails/contact_email.html').render(d)
|
||||
text_content = get_template(r'emails/contact_email.txt').render(d)
|
||||
|
||||
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
|
||||
msg.attach_alternative(html_content, "text/html")
|
||||
msg.send(fail_silently=True)
|
||||
|
||||
# Create your views here.
|
||||
def index(request):
|
||||
return render(request, "public/new_index.html", {})
|
||||
|
||||
def chat(request):
|
||||
return render(request, "public/chat.html", {})
|
||||
|
||||
def ai_education(request):
|
||||
return render(request, "public/ai_education.html", {})
|
||||
|
||||
def computers(request):
|
||||
return render(request, "public/computers.html", {})
|
||||
|
||||
def web_design(request):
|
||||
return render(request, "public/web_design.html", {})
|
||||
|
||||
def ai_sensor(request):
|
||||
return render(request, "public/ai_sensor.html", {})
|
||||
|
||||
def file_hosting(request):
|
||||
return render(request, "public/file_hosting.html", {})
|
||||
|
||||
def bot(request):
|
||||
return render(request, "public/bot.html", {})
|
||||
|
||||
def ml_model(request):
|
||||
return render(request, "public/ml_model.html", {})
|
||||
|
||||
@login_required
|
||||
def preview_email(request, pk):
|
||||
email_instance = get_object_or_404(EmailMessage, pk=pk)
|
||||
context = {
|
||||
"title":email_instance.subject,
|
||||
"content":email_instance.body
|
||||
}
|
||||
return render(
|
||||
request, 'public/preview_email.html', context
|
||||
)
|
||||
|
||||
def contact(request):
|
||||
errors = ''
|
||||
|
||||
|
||||
if request.method == 'POST':
|
||||
name = request.POST.get('name')
|
||||
email = request.POST.get('email')
|
||||
message = request.POST.get('message', "")
|
||||
subject = request.POST.get('subject', "")
|
||||
capchaForm = FormWithCaptcha(request.POST)
|
||||
|
||||
if len(name) > 0 and len(email) > 0 and len(subject) > 0:
|
||||
if settings.DEBUG or capchaForm.is_valid():
|
||||
|
||||
|
||||
# then we are good
|
||||
c = Contact(name=name, email=email, blurb=message, subject=subject)
|
||||
c.save()
|
||||
# send the email.
|
||||
try:
|
||||
send_contact_email(email, subject, message)
|
||||
except Exception as e:
|
||||
print(f'Error sending the email {e}')
|
||||
print('Contact Request:')
|
||||
print(f'From: {name}')
|
||||
print(f'Message: {message}')
|
||||
return render(request, "public/contact.html", {'success':True, 'capchaForm': FormWithCaptcha()})
|
||||
else:
|
||||
return render(request, "public/contact.html", {'errors': "There was an error submitting. Try again", 'capchaForm': capchaForm})
|
||||
else:
|
||||
if len(name) == 0 and len(email) == 0:
|
||||
errors = 'Both name and email are required'
|
||||
elif len(email) == 0:
|
||||
errors = 'Email is required'
|
||||
elif len(name) == 0:
|
||||
errors = 'Name is required'
|
||||
# we need to show an error
|
||||
return render(request, "public/contact.html", {'errors': errors, 'capchaForm': capchaForm})
|
||||
|
||||
capcha = None if settings.DEBUG else FormWithCaptcha()
|
||||
return render(request, "public/contact.html", {'capchaForm': capcha})
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
scp -r ./* westfarn@10.0.0.103:/home/westfarn/company_site_temp/
|
||||
@@ -0,0 +1,7 @@
|
||||
asgiref==3.7.2
|
||||
Django==5.0
|
||||
sqlparse==0.4.4
|
||||
typing_extensions==4.8.0
|
||||
django-enum
|
||||
django-recaptcha
|
||||
django-phonenumber-field[phonenumbers]
|
||||