User-Panel gebaut
629
Dashboard/app.py
Normal file
@@ -0,0 +1,629 @@
|
||||
from flask import Flask, render_template, request, redirect, url_for, session, flash, jsonify, send_file
|
||||
import sqlite3
|
||||
import bcrypt
|
||||
import secrets
|
||||
import smtplib
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
import os
|
||||
import requests
|
||||
from email.mime.text import MIMEText
|
||||
|
||||
app = Flask(__name__, static_folder="static")
|
||||
app.secret_key = 'supersecretkey'
|
||||
|
||||
DATABASE = "clickcandit.db"
|
||||
SMTP_SERVER = "smtp.gmail.com"
|
||||
SMTP_PORT = 465
|
||||
EMAIL_SENDER = "clickcandit@gmail.com"
|
||||
EMAIL_PASSWORD = 'iuxexntistlwilhl'
|
||||
|
||||
WEATHER_API_KEY = '640935f82530489f8c7105323241409'
|
||||
WEATHER_API_URL = 'http://api.openweathermap.org/data/2.5/forecast'
|
||||
|
||||
EXPORT_FOLDER = "exports"
|
||||
os.makedirs(EXPORT_FOLDER, exist_ok=True)
|
||||
|
||||
def get_db_connection():
|
||||
conn = sqlite3.connect(DATABASE)
|
||||
conn.row_factory = sqlite3.Row
|
||||
return conn
|
||||
|
||||
def init_db():
|
||||
conn = get_db_connection()
|
||||
c = conn.cursor()
|
||||
# Benutzer (User & Admin)
|
||||
c.execute("""
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
email TEXT UNIQUE NOT NULL,
|
||||
password TEXT NOT NULL,
|
||||
role TEXT DEFAULT 'user',
|
||||
reset_token TEXT DEFAULT NULL,
|
||||
reset_token_expiry TEXT DEFAULT NULL
|
||||
)
|
||||
""")
|
||||
# Einstellungen
|
||||
c.execute("""
|
||||
CREATE TABLE IF NOT EXISTS settings (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL UNIQUE,
|
||||
wallpaper TEXT DEFAULT '7.png',
|
||||
city TEXT DEFAULT 'Berlin',
|
||||
bookmarks TEXT DEFAULT '[]',
|
||||
show_forecast BOOLEAN DEFAULT 1,
|
||||
FOREIGN KEY(user_id) REFERENCES users(id)
|
||||
)
|
||||
""")
|
||||
# Download Links (Nutzerdatenexport)
|
||||
c.execute("""
|
||||
CREATE TABLE IF NOT EXISTS download_links (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL,
|
||||
token TEXT NOT NULL,
|
||||
expiration_time TEXT NOT NULL,
|
||||
FOREIGN KEY(user_id) REFERENCES users(id)
|
||||
)
|
||||
""")
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
init_db()
|
||||
|
||||
######################################
|
||||
# Hilfsfunktionen
|
||||
######################################
|
||||
|
||||
def admin_exists():
|
||||
conn = get_db_connection()
|
||||
result = conn.execute("SELECT 1 FROM users WHERE role = 'admin' LIMIT 1").fetchone()
|
||||
conn.close()
|
||||
return result is not None
|
||||
|
||||
def get_weather(city):
|
||||
params = {
|
||||
'q': city,
|
||||
'appid': WEATHER_API_KEY,
|
||||
'units': 'metric',
|
||||
'lang': 'de'
|
||||
}
|
||||
response = requests.get(WEATHER_API_URL, params=params)
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
current_temp = data['list'][0]['main']['temp']
|
||||
weather_icon = map_weather_icon(data['list'][0]['weather'][0]['icon'])
|
||||
# Einfaches Forecast-Beispiel
|
||||
forecast = []
|
||||
for i in range(0, len(data['list']), 8):
|
||||
day = data['list'][i]
|
||||
forecast.append({
|
||||
'date': day['dt_txt'].split()[0],
|
||||
'day': {
|
||||
'avgtemp_c': day['main']['temp']
|
||||
},
|
||||
'weather_icon': map_weather_icon(day['weather'][0]['icon'])
|
||||
})
|
||||
return current_temp, weather_icon, forecast
|
||||
else:
|
||||
return None, None, []
|
||||
|
||||
def map_weather_icon(icon_code):
|
||||
mapping = {
|
||||
'01d': 'fa-sun',
|
||||
'01n': 'fa-moon',
|
||||
'02d': 'fa-cloud-sun',
|
||||
'02n': 'fa-cloud-moon',
|
||||
'03d': 'fa-cloud',
|
||||
'03n': 'fa-cloud',
|
||||
'04d': 'fa-cloud-meatball',
|
||||
'04n': 'fa-cloud-meatball',
|
||||
'09d': 'fa-cloud-showers-heavy',
|
||||
'09n': 'fa-cloud-showers-heavy',
|
||||
'10d': 'fa-cloud-sun-rain',
|
||||
'10n': 'fa-cloud-moon-rain',
|
||||
'11d': 'fa-poo-storm',
|
||||
'11n': 'fa-poo-storm',
|
||||
'13d': 'fa-snowflake',
|
||||
'13n': 'fa-snowflake',
|
||||
'50d': 'fa-smog',
|
||||
'50n': 'fa-smog'
|
||||
}
|
||||
return mapping.get(icon_code, 'fa-cloud')
|
||||
|
||||
def send_reset_email(to_email, reset_url):
|
||||
subject = "Passwort zurücksetzen"
|
||||
body = f"""
|
||||
Hallo,
|
||||
|
||||
Sie haben eine Anfrage zum Zurücksetzen Ihres Passworts erhalten. Klicken Sie auf den folgenden Link, um Ihr Passwort zurückzusetzen:
|
||||
|
||||
{reset_url}
|
||||
|
||||
Der Link ist 48 Stunden gültig. Falls Sie diese Anfrage nicht gestellt haben, ignorieren Sie bitte diese E-Mail.
|
||||
|
||||
Mit freundlichen Grüßen,
|
||||
Ihr ClickCandit Team
|
||||
"""
|
||||
msg = MIMEText(body, "plain")
|
||||
msg["Subject"] = subject
|
||||
msg["From"] = EMAIL_SENDER
|
||||
msg["To"] = to_email
|
||||
|
||||
try:
|
||||
with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as server:
|
||||
server.login(EMAIL_SENDER, EMAIL_PASSWORD)
|
||||
server.sendmail(EMAIL_SENDER, to_email, msg.as_string())
|
||||
print(f"Passwort-Reset-E-Mail erfolgreich an {to_email} gesendet.")
|
||||
except Exception as e:
|
||||
print(f"Fehler beim Senden der E-Mail: {e}")
|
||||
|
||||
def send_export_email(to_email, download_link):
|
||||
subject = "Ihre Nutzerdaten zum Download"
|
||||
body = f"""
|
||||
Hallo {to_email},
|
||||
|
||||
Sie haben den Export Ihrer Nutzerdaten angefordert. Klicken Sie auf den folgenden Link, um Ihre Daten herunterzuladen:
|
||||
|
||||
{download_link}
|
||||
|
||||
Dieser Link ist 48 Stunden gültig.
|
||||
|
||||
Mit freundlichen Grüßen,
|
||||
Ihr ClickCandit Team
|
||||
"""
|
||||
msg = MIMEText(body, "plain")
|
||||
msg["Subject"] = subject
|
||||
msg["From"] = EMAIL_SENDER
|
||||
msg["To"] = to_email
|
||||
|
||||
try:
|
||||
with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as server:
|
||||
server.login(EMAIL_SENDER, EMAIL_PASSWORD)
|
||||
server.sendmail(EMAIL_SENDER, to_email, msg.as_string())
|
||||
print(f"Download-Link an {to_email} gesendet.")
|
||||
except Exception as e:
|
||||
print(f"Fehler beim Senden der E-Mail: {e}")
|
||||
|
||||
######################################
|
||||
# Routen
|
||||
######################################
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
# Wenn kein Admin existiert, zur Register-Seite (erster Admin)
|
||||
if not admin_exists():
|
||||
return redirect(url_for('register'))
|
||||
# Wenn schon Admin da, aber keiner eingeloggt -> Login
|
||||
if 'user_id' not in session:
|
||||
return redirect(url_for('login'))
|
||||
# Ansonsten: Dashboard
|
||||
return redirect(url_for('dashboard'))
|
||||
|
||||
@app.route('/register', methods=['GET', 'POST'])
|
||||
def register():
|
||||
already_admin = admin_exists()
|
||||
if request.method == 'GET':
|
||||
# Wenn Admin existiert, nur eingeloggter Admin darf registrieren
|
||||
if already_admin:
|
||||
if 'role' not in session or session['role'] != 'admin':
|
||||
flash("Nur Admins können weitere Benutzer hinzufügen!", "danger")
|
||||
return redirect(url_for('login'))
|
||||
return render_template('register.html')
|
||||
|
||||
# POST: Registrieren
|
||||
name = request.form['name'].strip()
|
||||
email = request.form['email'].strip()
|
||||
password = request.form['password'].strip()
|
||||
|
||||
if not name or not email or not password:
|
||||
flash("Bitte alle Felder ausfüllen.", "danger")
|
||||
return redirect(url_for('register'))
|
||||
|
||||
conn = get_db_connection()
|
||||
try:
|
||||
# Wenn noch kein Admin da -> erster wird Admin
|
||||
role = 'admin' if not already_admin else request.form.get('role', 'user')
|
||||
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
|
||||
conn.execute("INSERT INTO users (name, email, password, role) VALUES (?, ?, ?, ?)",
|
||||
(name, email, hashed_password, role))
|
||||
conn.commit()
|
||||
flash("Benutzer erfolgreich registriert!", "success")
|
||||
except sqlite3.IntegrityError:
|
||||
flash("Diese E-Mail existiert bereits!", "danger")
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
if not already_admin:
|
||||
# Erster Admin angelegt -> nun einloggen
|
||||
return redirect(url_for('login'))
|
||||
else:
|
||||
return redirect(url_for('admin'))
|
||||
|
||||
@app.route('/login', methods=['GET', 'POST'])
|
||||
def login():
|
||||
if request.method == 'POST':
|
||||
email = request.form['email'].strip()
|
||||
password = request.form['password'].strip()
|
||||
|
||||
if not email or not password:
|
||||
flash("Bitte E-Mail und Passwort angeben!", "danger")
|
||||
return redirect(url_for('login'))
|
||||
|
||||
conn = get_db_connection()
|
||||
user = conn.execute("SELECT * FROM users WHERE email = ?", (email,)).fetchone()
|
||||
conn.close()
|
||||
|
||||
if user and bcrypt.checkpw(password.encode('utf-8'), user['password']):
|
||||
session['user_id'] = user['id']
|
||||
session['user_name'] = user['name']
|
||||
session['role'] = user['role']
|
||||
flash("Login erfolgreich!", "success")
|
||||
return redirect(url_for('dashboard'))
|
||||
else:
|
||||
flash("Falsche E-Mail oder Passwort!", "danger")
|
||||
return redirect(url_for('login'))
|
||||
else:
|
||||
return render_template('login.html')
|
||||
|
||||
@app.route('/logout')
|
||||
def logout():
|
||||
session.clear()
|
||||
flash("Du wurdest ausgeloggt.", "info")
|
||||
return redirect(url_for('login'))
|
||||
|
||||
@app.route('/dashboard')
|
||||
def dashboard():
|
||||
if 'user_id' not in session:
|
||||
flash("Bitte melde dich an!", "danger")
|
||||
return redirect(url_for('login'))
|
||||
|
||||
user_id = session['user_id']
|
||||
conn = get_db_connection()
|
||||
user = conn.execute("SELECT * FROM users WHERE id = ?", (user_id,)).fetchone()
|
||||
settings = conn.execute("SELECT * FROM settings WHERE user_id = ?", (user_id,)).fetchone()
|
||||
conn.close()
|
||||
|
||||
if not user:
|
||||
flash("Benutzer nicht gefunden.", "danger")
|
||||
return redirect(url_for('logout'))
|
||||
|
||||
# Default-Werte
|
||||
if settings is None:
|
||||
wallpaper = '19.png'
|
||||
city = 'Berlin'
|
||||
show_forecast = True
|
||||
bookmarks = []
|
||||
else:
|
||||
wallpaper = settings['wallpaper']
|
||||
city = settings['city']
|
||||
show_forecast = bool(settings['show_forecast'])
|
||||
bookmarks = json.loads(settings['bookmarks'])
|
||||
|
||||
current_temp, weather_icon, forecast = get_weather(city)
|
||||
if current_temp is None:
|
||||
current_temp = "N/A"
|
||||
weather_icon = "fa-question"
|
||||
forecast = []
|
||||
|
||||
domain = "example.com"
|
||||
logo_path = url_for('static', filename='clickcandit.png')
|
||||
# Beispiel Apps
|
||||
user_app_chunks = [
|
||||
[
|
||||
{
|
||||
'name': 'Mail',
|
||||
'subdomain': 'mail',
|
||||
'appkey': 'mailapp',
|
||||
'icon_class': 'fa fa-envelope',
|
||||
'bg_color': 'bg-blue-500'
|
||||
},
|
||||
{
|
||||
'name': 'Calendar',
|
||||
'subdomain': 'calendar',
|
||||
'appkey': 'calendarapp',
|
||||
'icon_class': 'fa fa-calendar',
|
||||
'bg_color': 'bg-green-500'
|
||||
},
|
||||
]
|
||||
]
|
||||
|
||||
return render_template(
|
||||
'dashboard.html',
|
||||
user=user['name'],
|
||||
role=user['role'], # Für Admin-Abfrage im Template
|
||||
wallpaper=wallpaper,
|
||||
city=city,
|
||||
show_forecast=show_forecast,
|
||||
bookmarks=bookmarks,
|
||||
current_temp=current_temp,
|
||||
weather_icon=weather_icon,
|
||||
forecast=forecast,
|
||||
domain=domain,
|
||||
logo_path=logo_path,
|
||||
user_app_chunks=user_app_chunks
|
||||
)
|
||||
|
||||
######################################
|
||||
# Admin-Bereich
|
||||
######################################
|
||||
|
||||
@app.route('/admin')
|
||||
def admin():
|
||||
if 'role' not in session or session['role'] != 'admin':
|
||||
flash("Kein Zugriff!", "danger")
|
||||
return redirect(url_for('login'))
|
||||
|
||||
conn = get_db_connection()
|
||||
users = conn.execute("SELECT id, name, email, role FROM users").fetchall()
|
||||
conn.close()
|
||||
return render_template('admin.html', users=users)
|
||||
|
||||
@app.route('/admin/delete/<int:user_id>', methods=['POST'])
|
||||
def delete_user(user_id):
|
||||
if 'role' not in session or session['role'] != 'admin':
|
||||
flash("Kein Zugriff!", "danger")
|
||||
return redirect(url_for('login'))
|
||||
|
||||
conn = get_db_connection()
|
||||
conn.execute("DELETE FROM users WHERE id = ?", (user_id,))
|
||||
conn.execute("DELETE FROM settings WHERE user_id = ?", (user_id,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
flash("Benutzer gelöscht!", "success")
|
||||
return redirect(url_for('admin'))
|
||||
|
||||
@app.route('/admin/edit_bookmarks/<int:user_id>', methods=['GET', 'POST'])
|
||||
def edit_bookmarks(user_id):
|
||||
if 'role' not in session or session['role'] != 'admin':
|
||||
flash("Kein Zugriff", "danger")
|
||||
return redirect(url_for('login'))
|
||||
|
||||
conn = get_db_connection()
|
||||
settings = conn.execute("SELECT * FROM settings WHERE user_id = ?", (user_id,)).fetchone()
|
||||
|
||||
if request.method == 'POST':
|
||||
bookmarks_raw = request.form.get('bookmarks', '')
|
||||
bookmarks_list = [b.strip() for b in bookmarks_raw.split(',') if b.strip()]
|
||||
bookmarks_json = json.dumps(bookmarks_list)
|
||||
|
||||
if settings:
|
||||
conn.execute("UPDATE settings SET bookmarks = ? WHERE user_id = ?", (bookmarks_json, user_id))
|
||||
else:
|
||||
conn.execute("INSERT INTO settings (user_id, bookmarks) VALUES (?, ?)", (user_id, bookmarks_json))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
flash("Lesezeichen aktualisiert", "success")
|
||||
return redirect(url_for('admin'))
|
||||
else:
|
||||
current_bookmarks = json.loads(settings['bookmarks']) if settings else []
|
||||
conn.close()
|
||||
return render_template('edit_bookmarks.html', user_id=user_id, bookmarks=current_bookmarks)
|
||||
|
||||
######################################
|
||||
# Settings / API
|
||||
######################################
|
||||
|
||||
@app.route('/save_settings', methods=['POST'])
|
||||
def save_settings():
|
||||
if 'user_id' not in session:
|
||||
return jsonify({'success': False, 'message': 'Nicht autorisiert'}), 401
|
||||
|
||||
data = request.get_json()
|
||||
if not data:
|
||||
return jsonify({'success': False, 'message': 'Keine Daten übergeben'}), 400
|
||||
|
||||
wallpaper = data.get('wallpaper', '7.png')
|
||||
city = data.get('city', 'Berlin')
|
||||
bookmarks = json.dumps(data.get('bookmarks', []))
|
||||
show_forecast = data.get('show_forecast', True)
|
||||
|
||||
conn = get_db_connection()
|
||||
conn.execute("""
|
||||
INSERT INTO settings (user_id, wallpaper, city, bookmarks, show_forecast)
|
||||
VALUES (?, ?, ?, ?, ?)
|
||||
ON CONFLICT(user_id) DO UPDATE SET
|
||||
wallpaper=excluded.wallpaper,
|
||||
city=excluded.city,
|
||||
bookmarks=excluded.bookmarks,
|
||||
show_forecast=excluded.show_forecast
|
||||
""", (session['user_id'], wallpaper, city, bookmarks, show_forecast))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
return jsonify({'success': True})
|
||||
|
||||
@app.route('/get_settings', methods=['GET'])
|
||||
def get_settings():
|
||||
if 'user_id' not in session:
|
||||
return jsonify({'success': False, 'message': 'Nicht autorisiert'}), 401
|
||||
|
||||
conn = get_db_connection()
|
||||
settings = conn.execute("SELECT * FROM settings WHERE user_id = ?", (session['user_id'],)).fetchone()
|
||||
conn.close()
|
||||
|
||||
if settings:
|
||||
return jsonify({
|
||||
'wallpaper_url': url_for('static', filename=settings['wallpaper']),
|
||||
'city': settings['city'],
|
||||
'bookmarks': json.loads(settings['bookmarks']),
|
||||
'show_forecast': bool(settings['show_forecast'])
|
||||
})
|
||||
else:
|
||||
# Falls noch keine Settings da
|
||||
return jsonify({
|
||||
'wallpaper_url': url_for('static', filename='7.png'),
|
||||
'city': 'Berlin',
|
||||
'bookmarks': [],
|
||||
'show_forecast': True
|
||||
})
|
||||
|
||||
######################################
|
||||
# Passwort / Account
|
||||
######################################
|
||||
|
||||
@app.route('/forgot-password', methods=['GET', 'POST'])
|
||||
def forgot_password():
|
||||
if request.method == 'POST':
|
||||
email = request.form['email'].strip()
|
||||
conn = get_db_connection()
|
||||
user = conn.execute("SELECT * FROM users WHERE email = ?", (email,)).fetchone()
|
||||
if not user:
|
||||
flash("Diese E-Mail ist nicht registriert.", "danger")
|
||||
conn.close()
|
||||
return redirect(url_for('forgot_password'))
|
||||
|
||||
reset_token = secrets.token_hex(16)
|
||||
expiry_time = (datetime.utcnow() + timedelta(hours=48)).isoformat()
|
||||
conn.execute("UPDATE users SET reset_token=?, reset_token_expiry=? WHERE email=?",
|
||||
(reset_token, expiry_time, email))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
reset_url = url_for('reset_password', token=reset_token, _external=True)
|
||||
send_reset_email(email, reset_url)
|
||||
flash("Eine E-Mail zum Zurücksetzen des Passworts wurde gesendet.", "success")
|
||||
return redirect(url_for('login'))
|
||||
|
||||
return render_template('forgot_password.html')
|
||||
|
||||
@app.route('/reset-password/<token>', methods=['GET', 'POST'])
|
||||
def reset_password(token):
|
||||
conn = get_db_connection()
|
||||
user = conn.execute("SELECT * FROM users WHERE reset_token = ?", (token,)).fetchone()
|
||||
if not user:
|
||||
conn.close()
|
||||
flash("Ungültiger Reset-Token", "danger")
|
||||
return redirect(url_for('forgot_password'))
|
||||
|
||||
expiry = datetime.fromisoformat(user['reset_token_expiry']) if user['reset_token_expiry'] else None
|
||||
if not expiry or expiry < datetime.utcnow():
|
||||
conn.close()
|
||||
flash("Reset-Link ist abgelaufen.", "danger")
|
||||
return redirect(url_for('forgot_password'))
|
||||
|
||||
if request.method == 'POST':
|
||||
pw = request.form['password'].strip()
|
||||
cpw = request.form['confirm_password'].strip()
|
||||
if pw != cpw:
|
||||
flash("Passwörter stimmen nicht überein.", "danger")
|
||||
return render_template('reset_password.html', token=token)
|
||||
|
||||
hashed_pw = bcrypt.hashpw(pw.encode('utf-8'), bcrypt.gensalt())
|
||||
conn.execute("UPDATE users SET password=?, reset_token=NULL, reset_token_expiry=NULL WHERE id=?",
|
||||
(hashed_pw, user['id']))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
flash("Ihr Passwort wurde zurückgesetzt.", "success")
|
||||
return redirect(url_for('login'))
|
||||
|
||||
conn.close()
|
||||
return render_template('reset_password.html', token=token)
|
||||
|
||||
@app.route('/delete_account', methods=['POST'])
|
||||
def delete_account():
|
||||
if 'user_id' not in session:
|
||||
flash("Bitte melde dich an!", "danger")
|
||||
return redirect(url_for('login'))
|
||||
|
||||
user_id = session['user_id']
|
||||
try:
|
||||
conn = get_db_connection()
|
||||
user = conn.execute("SELECT * FROM users WHERE id = ?", (user_id,)).fetchone()
|
||||
if not user:
|
||||
flash("Benutzerkonto nicht gefunden.", "danger")
|
||||
conn.close()
|
||||
return redirect(url_for('dashboard'))
|
||||
|
||||
email = user["email"]
|
||||
conn.execute("DELETE FROM settings WHERE user_id=?", (user_id,))
|
||||
conn.execute("DELETE FROM download_links WHERE user_id=?", (user_id,))
|
||||
conn.execute("DELETE FROM users WHERE id=?", (user_id,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
export_file = os.path.join(EXPORT_FOLDER, f"{email}_data.json")
|
||||
if os.path.exists(export_file):
|
||||
os.remove(export_file)
|
||||
|
||||
session.clear()
|
||||
flash("Dein Konto wurde erfolgreich gelöscht.", "success")
|
||||
return redirect(url_for('login'))
|
||||
except Exception as e:
|
||||
print("Fehler beim Löschen des Kontos:", e)
|
||||
flash("Fehler beim Löschen des Kontos.", "danger")
|
||||
return redirect(url_for('dashboard'))
|
||||
|
||||
######################################
|
||||
# Nutzerdaten-Export
|
||||
######################################
|
||||
|
||||
@app.route('/request_data_export', methods=['GET'])
|
||||
def request_data_export():
|
||||
if 'user_id' not in session:
|
||||
flash("Bitte melde dich an!", "danger")
|
||||
return redirect(url_for('login'))
|
||||
|
||||
user_id = session['user_id']
|
||||
conn = get_db_connection()
|
||||
user = conn.execute("SELECT * FROM users WHERE id = ?", (user_id,)).fetchone()
|
||||
if not user:
|
||||
flash("Benutzerkonto nicht gefunden.", "danger")
|
||||
conn.close()
|
||||
return redirect(url_for('dashboard'))
|
||||
|
||||
download_token = secrets.token_hex(16)
|
||||
expiry = (datetime.utcnow() + timedelta(hours=48)).isoformat()
|
||||
|
||||
conn.execute("INSERT INTO download_links (user_id, token, expiration_time) VALUES (?, ?, ?)",
|
||||
(user_id, download_token, expiry))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
export_file = os.path.join(EXPORT_FOLDER, f"{user['email']}_data.json")
|
||||
user_data = {
|
||||
"name": user["name"],
|
||||
"email": user["email"],
|
||||
"role": user["role"]
|
||||
}
|
||||
|
||||
with open(export_file, "w", encoding="utf-8") as f:
|
||||
json.dump(user_data, f, indent=4)
|
||||
|
||||
download_url = url_for('download_user_data', token=download_token, _external=True)
|
||||
send_export_email(user["email"], download_url)
|
||||
|
||||
flash("Eine E-Mail mit dem Download-Link wurde gesendet.", "success")
|
||||
return redirect(url_for('dashboard'))
|
||||
|
||||
@app.route('/download_user_data/<token>', methods=['GET'])
|
||||
def download_user_data(token):
|
||||
conn = get_db_connection()
|
||||
link_data = conn.execute("SELECT * FROM download_links WHERE token=?", (token,)).fetchone()
|
||||
if not link_data:
|
||||
conn.close()
|
||||
flash("Ungültiger oder abgelaufener Download-Link.", "danger")
|
||||
return redirect(url_for('dashboard'))
|
||||
|
||||
expiry_time = datetime.fromisoformat(link_data["expiration_time"])
|
||||
if expiry_time < datetime.utcnow():
|
||||
conn.close()
|
||||
flash("Der Download-Link ist abgelaufen.", "danger")
|
||||
return redirect(url_for('dashboard'))
|
||||
|
||||
user = conn.execute("SELECT * FROM users WHERE id=?", (link_data["user_id"],)).fetchone()
|
||||
conn.close()
|
||||
if not user:
|
||||
flash("Benutzerdaten nicht gefunden.", "danger")
|
||||
return redirect(url_for('dashboard'))
|
||||
|
||||
export_file = os.path.join(EXPORT_FOLDER, f"{user['email']}_data.json")
|
||||
if not os.path.exists(export_file):
|
||||
flash("Exportdatei nicht gefunden.", "danger")
|
||||
return redirect(url_for('dashboard'))
|
||||
|
||||
return send_file(export_file, as_attachment=True)
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True)
|
||||
BIN
Dashboard/clickcandit.db
Normal file
24
Dashboard/database.py
Normal file
@@ -0,0 +1,24 @@
|
||||
import sqlite3
|
||||
import bcrypt
|
||||
|
||||
DATABASE = "clickcandit.db"
|
||||
|
||||
def init_db():
|
||||
conn = sqlite3.connect(DATABASE)
|
||||
c = conn.cursor()
|
||||
c.execute("""
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
email TEXT UNIQUE NOT NULL,
|
||||
password TEXT NOT NULL,
|
||||
role TEXT DEFAULT 'user',
|
||||
reset_token TEXT DEFAULT NULL
|
||||
)
|
||||
""")
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
init_db()
|
||||
print("Datenbank initialisiert!")
|
||||
2
Dashboard/requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
Flask
|
||||
bcrypt
|
||||
BIN
Dashboard/static/1.png
Normal file
|
After Width: | Height: | Size: 2.2 MiB |
BIN
Dashboard/static/10.png
Normal file
|
After Width: | Height: | Size: 3.2 MiB |
BIN
Dashboard/static/11.png
Normal file
|
After Width: | Height: | Size: 3.6 MiB |
BIN
Dashboard/static/12.png
Normal file
|
After Width: | Height: | Size: 4.6 MiB |
BIN
Dashboard/static/13.png
Normal file
|
After Width: | Height: | Size: 2.6 MiB |
BIN
Dashboard/static/14.png
Normal file
|
After Width: | Height: | Size: 3.8 MiB |
BIN
Dashboard/static/15.png
Normal file
|
After Width: | Height: | Size: 3.5 MiB |
BIN
Dashboard/static/16.png
Normal file
|
After Width: | Height: | Size: 615 KiB |
BIN
Dashboard/static/17.png
Normal file
|
After Width: | Height: | Size: 2.2 MiB |
BIN
Dashboard/static/18.png
Normal file
|
After Width: | Height: | Size: 2.6 MiB |
BIN
Dashboard/static/19.png
Normal file
|
After Width: | Height: | Size: 2.9 MiB |
BIN
Dashboard/static/2.png
Normal file
|
After Width: | Height: | Size: 737 KiB |
BIN
Dashboard/static/20.png
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
BIN
Dashboard/static/21.png
Normal file
|
After Width: | Height: | Size: 2.8 MiB |
BIN
Dashboard/static/22.png
Normal file
|
After Width: | Height: | Size: 2.9 MiB |
BIN
Dashboard/static/23.png
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
Dashboard/static/24.png
Normal file
|
After Width: | Height: | Size: 933 KiB |
BIN
Dashboard/static/25.png
Normal file
|
After Width: | Height: | Size: 2.4 MiB |
BIN
Dashboard/static/26.png
Normal file
|
After Width: | Height: | Size: 805 KiB |
BIN
Dashboard/static/3.png
Normal file
|
After Width: | Height: | Size: 730 KiB |
BIN
Dashboard/static/4.png
Normal file
|
After Width: | Height: | Size: 677 KiB |
BIN
Dashboard/static/5.png
Normal file
|
After Width: | Height: | Size: 2.5 MiB |
BIN
Dashboard/static/6.png
Normal file
|
After Width: | Height: | Size: 3.4 MiB |
BIN
Dashboard/static/7.png
Normal file
|
After Width: | Height: | Size: 4.4 MiB |
BIN
Dashboard/static/8.png
Normal file
|
After Width: | Height: | Size: 2.2 MiB |
BIN
Dashboard/static/9.png
Normal file
|
After Width: | Height: | Size: 3.6 MiB |
5
Dashboard/static/bootstrap/css/bootstrap.min.css
vendored
Normal file
6
Dashboard/static/bootstrap/js/bootstrap.min.js
vendored
Normal file
BIN
Dashboard/static/clickcandit.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
35
Dashboard/static/css/Alatsi.css
Normal file
@@ -0,0 +1,35 @@
|
||||
@font-face {
|
||||
font-family: 'Alatsi';
|
||||
src: url(../../static/fonts/Alatsi-a809bbcebff1b9584d9a33f2b3c4e82d.woff2?h=d29807f53c43f18abb7db6d6a655d24a) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Alatsi';
|
||||
src: url(../../static/fonts/Alatsi-c953625adc1026d80510760e651ccfa3.woff2?h=d29807f53c43f18abb7db6d6a655d24a) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Alatsi';
|
||||
src: url(../../static/fonts/Alatsi-03bc6b7e22755b91ac9e11f52cb21d49.woff2?h=d29807f53c43f18abb7db6d6a655d24a) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Alatsi';
|
||||
src: url(../../static/fonts/Alatsi-06649cd1887b33b92b026c9ba3067fac.woff2?h=d29807f53c43f18abb7db6d6a655d24a) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
8
Dashboard/static/css/Antic Didone.css
Normal file
@@ -0,0 +1,8 @@
|
||||
@font-face {
|
||||
font-family: 'Antic Didone';
|
||||
src: url(../../static/fonts/Antic%20Didone-3c5164f3671eaf5914fb593f9a9dcc78.woff2?h=5e33330a16aa5208850a57e448b395cc) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
17
Dashboard/static/css/Armata.css
Normal file
@@ -0,0 +1,17 @@
|
||||
@font-face {
|
||||
font-family: 'Armata';
|
||||
src: url(../../static/fonts/Armata-139b2ca26574ebe80cc15f5be5caf633.woff2?h=7b1ecf9bdfa1a5cb634a398a95af90cb) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Armata';
|
||||
src: url(../../static/fonts/Armata-618d0f355b0e608656d15003c2a15956.woff2?h=7b1ecf9bdfa1a5cb634a398a95af90cb) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
80
Dashboard/static/css/Assistant.css
Normal file
@@ -0,0 +1,80 @@
|
||||
@font-face {
|
||||
font-family: 'Assistant';
|
||||
src: url(../../static/fonts/Assistant-a5c3cc9fc869672054207074d6811f20.woff2?h=8268165a829c7494ab9c2e4a70728ec4) format('woff2');
|
||||
font-weight: 200;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Assistant';
|
||||
src: url(../../static/fonts/Assistant-d858db471e0b629f49adaea130f374d8.woff2?h=8268165a829c7494ab9c2e4a70728ec4) format('woff2');
|
||||
font-weight: 200;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Assistant';
|
||||
src: url(../../static/fonts/Assistant-ab79def354df1cdf632de90c45e97140.woff2?h=8268165a829c7494ab9c2e4a70728ec4) format('woff2');
|
||||
font-weight: 200;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Assistant';
|
||||
src: url(../../static/fonts/Assistant-a5c3cc9fc869672054207074d6811f20.woff2?h=8268165a829c7494ab9c2e4a70728ec4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Assistant';
|
||||
src: url(../../static/fonts/Assistant-d858db471e0b629f49adaea130f374d8.woff2?h=8268165a829c7494ab9c2e4a70728ec4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Assistant';
|
||||
src: url(../../static/fonts/Assistant-ab79def354df1cdf632de90c45e97140.woff2?h=8268165a829c7494ab9c2e4a70728ec4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Assistant';
|
||||
src: url(../../static/fonts/Assistant-a5c3cc9fc869672054207074d6811f20.woff2?h=8268165a829c7494ab9c2e4a70728ec4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Assistant';
|
||||
src: url(../../static/fonts/Assistant-d858db471e0b629f49adaea130f374d8.woff2?h=8268165a829c7494ab9c2e4a70728ec4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Assistant';
|
||||
src: url(../../static/fonts/Assistant-ab79def354df1cdf632de90c45e97140.woff2?h=8268165a829c7494ab9c2e4a70728ec4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
4
Dashboard/static/css/Banner-Heading-Image-images.css
Normal file
@@ -0,0 +1,4 @@
|
||||
.fit-cover {
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
57
Dashboard/static/css/Features-Cards-icons.css
Normal file
@@ -0,0 +1,57 @@
|
||||
.bs-icon {
|
||||
--bs-icon-size: .75rem;
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: var(--bs-icon-size);
|
||||
width: calc(var(--bs-icon-size) * 2);
|
||||
height: calc(var(--bs-icon-size) * 2);
|
||||
color: var(--bs-primary);
|
||||
}
|
||||
|
||||
.bs-icon-xs {
|
||||
--bs-icon-size: 1rem;
|
||||
width: calc(var(--bs-icon-size) * 1.5);
|
||||
height: calc(var(--bs-icon-size) * 1.5);
|
||||
}
|
||||
|
||||
.bs-icon-sm {
|
||||
--bs-icon-size: 1rem;
|
||||
}
|
||||
|
||||
.bs-icon-md {
|
||||
--bs-icon-size: 1.5rem;
|
||||
}
|
||||
|
||||
.bs-icon-lg {
|
||||
--bs-icon-size: 2rem;
|
||||
}
|
||||
|
||||
.bs-icon-xl {
|
||||
--bs-icon-size: 2.5rem;
|
||||
}
|
||||
|
||||
.bs-icon.bs-icon-primary {
|
||||
color: var(--bs-white);
|
||||
background: var(--bs-primary);
|
||||
}
|
||||
|
||||
.bs-icon.bs-icon-primary-light {
|
||||
color: var(--bs-primary);
|
||||
background: rgba(var(--bs-primary-rgb), .2);
|
||||
}
|
||||
|
||||
.bs-icon.bs-icon-semi-white {
|
||||
color: var(--bs-primary);
|
||||
background: rgba(255, 255, 255, .5);
|
||||
}
|
||||
|
||||
.bs-icon.bs-icon-rounded {
|
||||
border-radius: .5rem;
|
||||
}
|
||||
|
||||
.bs-icon.bs-icon-circle {
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
629
Dashboard/static/css/Inter.css
Normal file
@@ -0,0 +1,629 @@
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-501638185f142ea970e06ff6a896cf44.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-d845be6713e4acd3766e1f8f6418c97e.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8d07e5f373f5bb3603b3e139f63e3386.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8e1d10adf40d7223fbee98b930853a8a.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-db78de5246196d0d93187248cbebc6c2.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-6b97bb4aa11fb6d8c29b378b87c8ce45.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-69c9fb2f299f5f5be8d2800cd24271f9.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-501638185f142ea970e06ff6a896cf44.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-d845be6713e4acd3766e1f8f6418c97e.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8d07e5f373f5bb3603b3e139f63e3386.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8e1d10adf40d7223fbee98b930853a8a.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-db78de5246196d0d93187248cbebc6c2.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-6b97bb4aa11fb6d8c29b378b87c8ce45.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-69c9fb2f299f5f5be8d2800cd24271f9.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-501638185f142ea970e06ff6a896cf44.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 600;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-d845be6713e4acd3766e1f8f6418c97e.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 600;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8d07e5f373f5bb3603b3e139f63e3386.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 600;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8e1d10adf40d7223fbee98b930853a8a.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 600;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-db78de5246196d0d93187248cbebc6c2.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 600;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-6b97bb4aa11fb6d8c29b378b87c8ce45.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 600;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-69c9fb2f299f5f5be8d2800cd24271f9.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 600;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-501638185f142ea970e06ff6a896cf44.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-d845be6713e4acd3766e1f8f6418c97e.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8d07e5f373f5bb3603b3e139f63e3386.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8e1d10adf40d7223fbee98b930853a8a.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-db78de5246196d0d93187248cbebc6c2.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-6b97bb4aa11fb6d8c29b378b87c8ce45.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-69c9fb2f299f5f5be8d2800cd24271f9.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-501638185f142ea970e06ff6a896cf44.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 800;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-d845be6713e4acd3766e1f8f6418c97e.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 800;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8d07e5f373f5bb3603b3e139f63e3386.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 800;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8e1d10adf40d7223fbee98b930853a8a.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 800;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-db78de5246196d0d93187248cbebc6c2.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 800;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-6b97bb4aa11fb6d8c29b378b87c8ce45.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 800;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-69c9fb2f299f5f5be8d2800cd24271f9.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 800;
|
||||
font-style: italic;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-9f11e6095a39b5e188d6a081f05299fb.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-c0b8741a9d891c8088e6db8ca3a4b5fa.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-991ff15c49155ffbda53e3aa14ecb8b6.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8b0bd5934b903f2631853751aedf28a6.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-aa0964911973a0fbaf081bae32a490f3.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-1b621eda4be3428e50a0ee070c09005b.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-d48b1d4d308900f0591fb3bdcf442fdf.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-9f11e6095a39b5e188d6a081f05299fb.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-c0b8741a9d891c8088e6db8ca3a4b5fa.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-991ff15c49155ffbda53e3aa14ecb8b6.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8b0bd5934b903f2631853751aedf28a6.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-aa0964911973a0fbaf081bae32a490f3.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-1b621eda4be3428e50a0ee070c09005b.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-d48b1d4d308900f0591fb3bdcf442fdf.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-9f11e6095a39b5e188d6a081f05299fb.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-c0b8741a9d891c8088e6db8ca3a4b5fa.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-991ff15c49155ffbda53e3aa14ecb8b6.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8b0bd5934b903f2631853751aedf28a6.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-aa0964911973a0fbaf081bae32a490f3.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-1b621eda4be3428e50a0ee070c09005b.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-d48b1d4d308900f0591fb3bdcf442fdf.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-9f11e6095a39b5e188d6a081f05299fb.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-c0b8741a9d891c8088e6db8ca3a4b5fa.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-991ff15c49155ffbda53e3aa14ecb8b6.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8b0bd5934b903f2631853751aedf28a6.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-aa0964911973a0fbaf081bae32a490f3.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-1b621eda4be3428e50a0ee070c09005b.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-d48b1d4d308900f0591fb3bdcf442fdf.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-9f11e6095a39b5e188d6a081f05299fb.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 800;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-c0b8741a9d891c8088e6db8ca3a4b5fa.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 800;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-991ff15c49155ffbda53e3aa14ecb8b6.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 800;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-8b0bd5934b903f2631853751aedf28a6.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 800;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-aa0964911973a0fbaf081bae32a490f3.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 800;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-1b621eda4be3428e50a0ee070c09005b.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 800;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
src: url(../../static/fonts/Inter-d48b1d4d308900f0591fb3bdcf442fdf.woff2?h=2d53df1b4b7add2ab01c7c3067d173e4) format('woff2');
|
||||
font-weight: 800;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
208
Dashboard/static/css/Lightbox-Gallery-No-Gutters-baguetteBox.min.css
vendored
Normal file
@@ -0,0 +1,208 @@
|
||||
/* !
|
||||
* baguetteBox.js
|
||||
* @author feimosi
|
||||
* @version 1.11.1
|
||||
* @url https://github.com/feimosi/baguetteBox.js */
|
||||
|
||||
#baguetteBox-overlay {
|
||||
display: none;
|
||||
opacity: 0;
|
||||
position: fixed;
|
||||
overflow: hidden;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1000000;
|
||||
background-color: #222;
|
||||
background-color: rgba(0,0,0,.8);
|
||||
-webkit-transition: opacity .5s ease;
|
||||
transition: opacity .5s ease;
|
||||
}
|
||||
|
||||
#baguetteBox-overlay.visible {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#baguetteBox-overlay .full-image {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#baguetteBox-overlay .full-image figure {
|
||||
display: inline;
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#baguetteBox-overlay .full-image img {
|
||||
display: inline-block;
|
||||
width: auto;
|
||||
height: auto;
|
||||
max-height: 100%;
|
||||
max-width: 100%;
|
||||
vertical-align: middle;
|
||||
-webkit-box-shadow: 0 0 8px rgba(0,0,0,.6);
|
||||
-moz-box-shadow: 0 0 8px rgba(0,0,0,.6);
|
||||
box-shadow: 0 0 8px rgba(0,0,0,.6);
|
||||
}
|
||||
|
||||
#baguetteBox-overlay .full-image figcaption {
|
||||
display: block;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
line-height: 1.8;
|
||||
white-space: normal;
|
||||
color: #ccc;
|
||||
background-color: #000;
|
||||
background-color: rgba(0,0,0,.6);
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
#baguetteBox-overlay .full-image:before {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
height: 50%;
|
||||
width: 1px;
|
||||
margin-right: -1px;
|
||||
}
|
||||
|
||||
#baguetteBox-slider {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
-webkit-transition: left .4s ease,-webkit-transform .4s ease;
|
||||
transition: left .4s ease,-webkit-transform .4s ease;
|
||||
transition: left .4s ease,transform .4s ease;
|
||||
transition: left .4s ease,transform .4s ease,-webkit-transform .4s ease,-moz-transform .4s ease;
|
||||
}
|
||||
|
||||
#baguetteBox-slider.bounce-from-right {
|
||||
-webkit-animation: bounceFromRight .4s ease-out;
|
||||
animation: bounceFromRight .4s ease-out;
|
||||
}
|
||||
|
||||
#baguetteBox-slider.bounce-from-left {
|
||||
-webkit-animation: bounceFromLeft .4s ease-out;
|
||||
animation: bounceFromLeft .4s ease-out;
|
||||
}
|
||||
|
||||
@keyframes bounceFromRight {
|
||||
0%, 100% {
|
||||
margin-left: 0;
|
||||
}
|
||||
50% {
|
||||
margin-left: -30px;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes bounceFromLeft {
|
||||
0%, 100% {
|
||||
margin-left: 0;
|
||||
}
|
||||
50% {
|
||||
margin-left: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.baguetteBox-button#next-button, .baguetteBox-button#previous-button {
|
||||
top: 50%;
|
||||
top: calc(50% - 30px);
|
||||
width: 44px;
|
||||
height: 60px;
|
||||
}
|
||||
|
||||
.baguetteBox-button {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
outline: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
-moz-border-radius: 15%;
|
||||
border-radius: 15%;
|
||||
background-color: #323232;
|
||||
background-color: rgba(50,50,50,.5);
|
||||
color: #ddd;
|
||||
font: 1.6em sans-serif;
|
||||
-webkit-transition: background-color .4s ease;
|
||||
transition: background-color .4s ease;
|
||||
}
|
||||
|
||||
.baguetteBox-button:focus, .baguetteBox-button:hover {
|
||||
background-color: rgba(50,50,50,.9);
|
||||
}
|
||||
|
||||
.baguetteBox-button#next-button {
|
||||
right: 2%;
|
||||
}
|
||||
|
||||
.baguetteBox-button#previous-button {
|
||||
left: 2%;
|
||||
}
|
||||
|
||||
.baguetteBox-button#close-button {
|
||||
top: 20px;
|
||||
right: 2%;
|
||||
right: calc(2% + 6px);
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.baguetteBox-button svg {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.baguetteBox-spinner {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
margin-top: -20px;
|
||||
margin-left: -20px;
|
||||
}
|
||||
|
||||
.baguetteBox-double-bounce1, .baguetteBox-double-bounce2 {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
-moz-border-radius: 50%;
|
||||
border-radius: 50%;
|
||||
background-color: #fff;
|
||||
opacity: .6;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
-webkit-animation: bounce 2s infinite ease-in-out;
|
||||
animation: bounce 2s infinite ease-in-out;
|
||||
}
|
||||
|
||||
.baguetteBox-double-bounce2 {
|
||||
-webkit-animation-delay: -1s;
|
||||
animation-delay: -1s;
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0%, 100% {
|
||||
-webkit-transform: scale(0);
|
||||
-moz-transform: scale(0);
|
||||
transform: scale(0);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: scale(1);
|
||||
-moz-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
7
Dashboard/static/css/MyFont.css
Normal file
@@ -0,0 +1,7 @@
|
||||
@font-face {
|
||||
font-family: 'MyFont';
|
||||
src: url(../../static/fonts/UniSansCaps.otf) format('otf');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: auto;
|
||||
}
|
||||
14
Dashboard/static/css/Pricing-Centered-badges.css
Normal file
@@ -0,0 +1,14 @@
|
||||
.bg-white-300 {
|
||||
background: rgba(255, 255, 255, 0.3) !important;
|
||||
}
|
||||
|
||||
.rounded-bottom-left {
|
||||
border-radius: 0;
|
||||
border-bottom-left-radius: .25rem!important;
|
||||
}
|
||||
|
||||
.rounded-bottom-right {
|
||||
border-radius: 0;
|
||||
border-bottom-right-radius: .25rem!important;
|
||||
}
|
||||
|
||||
576
Dashboard/static/css/Simple-Slider-swiper-bundle.min.css
vendored
Normal file
@@ -0,0 +1,576 @@
|
||||
/* *
|
||||
* Swiper 6.4.8
|
||||
* Most modern mobile touch slider and framework with hardware accelerated transitions
|
||||
* https://swiperjs.com
|
||||
*
|
||||
* Copyright 2014-2021 Vladimir Kharlampidi
|
||||
*
|
||||
* Released under the MIT License
|
||||
*
|
||||
* Released on: January 22, 2021 */
|
||||
|
||||
:root {
|
||||
--swiper-theme-color: #007aff;
|
||||
}
|
||||
|
||||
.swiper-container {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.swiper-container-vertical > .swiper-wrapper {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.swiper-wrapper {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
display: flex;
|
||||
transition-property: transform;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.swiper-container-android .swiper-slide, .swiper-wrapper {
|
||||
transform: translate3d(0px,0,0);
|
||||
}
|
||||
|
||||
.swiper-container-multirow > .swiper-wrapper {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.swiper-container-multirow-column > .swiper-wrapper {
|
||||
flex-wrap: wrap;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.swiper-container-free-mode > .swiper-wrapper {
|
||||
transition-timing-function: ease-out;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.swiper-container-pointer-events {
|
||||
touch-action: pan-y;
|
||||
}
|
||||
|
||||
.swiper-container-pointer-events.swiper-container-vertical {
|
||||
touch-action: pan-x;
|
||||
}
|
||||
|
||||
.swiper-slide {
|
||||
flex-shrink: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
transition-property: transform;
|
||||
}
|
||||
|
||||
.swiper-slide-invisible-blank {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.swiper-container-autoheight, .swiper-container-autoheight .swiper-slide {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.swiper-container-autoheight .swiper-wrapper {
|
||||
align-items: flex-start;
|
||||
transition-property: transform,height;
|
||||
}
|
||||
|
||||
.swiper-container-3d {
|
||||
perspective: 1200px;
|
||||
}
|
||||
|
||||
.swiper-container-3d .swiper-cube-shadow, .swiper-container-3d .swiper-slide, .swiper-container-3d .swiper-slide-shadow-bottom, .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-wrapper {
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
|
||||
.swiper-container-3d .swiper-slide-shadow-bottom, .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.swiper-container-3d .swiper-slide-shadow-left {
|
||||
background-image: linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0));
|
||||
}
|
||||
|
||||
.swiper-container-3d .swiper-slide-shadow-right {
|
||||
background-image: linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0));
|
||||
}
|
||||
|
||||
.swiper-container-3d .swiper-slide-shadow-top {
|
||||
background-image: linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0));
|
||||
}
|
||||
|
||||
.swiper-container-3d .swiper-slide-shadow-bottom {
|
||||
background-image: linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0));
|
||||
}
|
||||
|
||||
.swiper-container-css-mode > .swiper-wrapper {
|
||||
overflow: auto;
|
||||
scrollbar-width: none;
|
||||
-ms-overflow-style: none;
|
||||
}
|
||||
|
||||
.swiper-container-css-mode > .swiper-wrapper::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.swiper-container-css-mode > .swiper-wrapper > .swiper-slide {
|
||||
scroll-snap-align: start start;
|
||||
}
|
||||
|
||||
.swiper-container-horizontal.swiper-container-css-mode > .swiper-wrapper {
|
||||
scroll-snap-type: x mandatory;
|
||||
}
|
||||
|
||||
.swiper-container-vertical.swiper-container-css-mode > .swiper-wrapper {
|
||||
scroll-snap-type: y mandatory;
|
||||
}
|
||||
|
||||
:root {
|
||||
--swiper-navigation-size: 44px;
|
||||
}
|
||||
|
||||
.swiper-button-next, .swiper-button-prev {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
width: calc(var(--swiper-navigation-size)/ 44 * 27);
|
||||
height: var(--swiper-navigation-size);
|
||||
margin-top: calc(-1 * var(--swiper-navigation-size)/ 2);
|
||||
z-index: 10;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: var(--swiper-navigation-color,var(--swiper-theme-color));
|
||||
}
|
||||
|
||||
.swiper-button-next.swiper-button-disabled, .swiper-button-prev.swiper-button-disabled {
|
||||
opacity: .35;
|
||||
cursor: auto;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.swiper-button-next:after, .swiper-button-prev:after {
|
||||
font-family: swiper-icons;
|
||||
font-size: var(--swiper-navigation-size);
|
||||
text-transform: none!important;
|
||||
letter-spacing: 0;
|
||||
text-transform: none;
|
||||
font-variant: initial;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.swiper-button-prev, .swiper-container-rtl .swiper-button-next {
|
||||
left: 10px;
|
||||
right: auto;
|
||||
}
|
||||
|
||||
.swiper-button-prev:after, .swiper-container-rtl .swiper-button-next:after {
|
||||
content: 'prev';
|
||||
}
|
||||
|
||||
.swiper-button-next, .swiper-container-rtl .swiper-button-prev {
|
||||
right: 10px;
|
||||
left: auto;
|
||||
}
|
||||
|
||||
.swiper-button-next:after, .swiper-container-rtl .swiper-button-prev:after {
|
||||
content: 'next';
|
||||
}
|
||||
|
||||
.swiper-button-next.swiper-button-white, .swiper-button-prev.swiper-button-white {
|
||||
--swiper-navigation-color: #ffffff;
|
||||
}
|
||||
|
||||
.swiper-button-next.swiper-button-black, .swiper-button-prev.swiper-button-black {
|
||||
--swiper-navigation-color: #000000;
|
||||
}
|
||||
|
||||
.swiper-button-lock {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.swiper-pagination {
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
transition: .3s opacity;
|
||||
transform: translate3d(0,0,0);
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.swiper-pagination.swiper-pagination-hidden {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.swiper-container-horizontal > .swiper-pagination-bullets, .swiper-pagination-custom, .swiper-pagination-fraction {
|
||||
bottom: 10px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.swiper-pagination-bullets-dynamic {
|
||||
overflow: hidden;
|
||||
font-size: 0;
|
||||
}
|
||||
|
||||
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
|
||||
transform: scale(.33);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {
|
||||
transform: scale(.66);
|
||||
}
|
||||
|
||||
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {
|
||||
transform: scale(.33);
|
||||
}
|
||||
|
||||
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {
|
||||
transform: scale(.66);
|
||||
}
|
||||
|
||||
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {
|
||||
transform: scale(.33);
|
||||
}
|
||||
|
||||
.swiper-pagination-bullet {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
display: inline-block;
|
||||
border-radius: 50%;
|
||||
background: #000;
|
||||
opacity: .2;
|
||||
}
|
||||
|
||||
button.swiper-pagination-bullet {
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-shadow: none;
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
}
|
||||
|
||||
.swiper-pagination-clickable .swiper-pagination-bullet {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.swiper-pagination-bullet-active {
|
||||
opacity: 1;
|
||||
background: var(--swiper-pagination-color,var(--swiper-theme-color));
|
||||
}
|
||||
|
||||
.swiper-container-vertical > .swiper-pagination-bullets {
|
||||
right: 10px;
|
||||
top: 50%;
|
||||
transform: translate3d(0px,-50%,0);
|
||||
}
|
||||
|
||||
.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
|
||||
margin: 6px 0;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
width: 8px;
|
||||
}
|
||||
|
||||
.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
|
||||
display: inline-block;
|
||||
transition: .2s transform,.2s top;
|
||||
}
|
||||
|
||||
.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
|
||||
margin: 0 4px;
|
||||
}
|
||||
|
||||
.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
|
||||
transition: .2s transform,.2s left;
|
||||
}
|
||||
|
||||
.swiper-container-horizontal.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
|
||||
transition: .2s transform,.2s right;
|
||||
}
|
||||
|
||||
.swiper-pagination-progressbar {
|
||||
background: rgba(0,0,0,.25);
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
|
||||
background: var(--swiper-pagination-color,var(--swiper-theme-color));
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
transform: scale(0);
|
||||
transform-origin: left top;
|
||||
}
|
||||
|
||||
.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
|
||||
transform-origin: right top;
|
||||
}
|
||||
|
||||
.swiper-container-horizontal > .swiper-pagination-progressbar, .swiper-container-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {
|
||||
width: 100%;
|
||||
height: 4px;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.swiper-container-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite, .swiper-container-vertical > .swiper-pagination-progressbar {
|
||||
width: 4px;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.swiper-pagination-white {
|
||||
--swiper-pagination-color: #ffffff;
|
||||
}
|
||||
|
||||
.swiper-pagination-black {
|
||||
--swiper-pagination-color: #000000;
|
||||
}
|
||||
|
||||
.swiper-pagination-lock {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.swiper-scrollbar {
|
||||
border-radius: 10px;
|
||||
position: relative;
|
||||
-ms-touch-action: none;
|
||||
background: rgba(0,0,0,.1);
|
||||
}
|
||||
|
||||
.swiper-container-horizontal > .swiper-scrollbar {
|
||||
position: absolute;
|
||||
left: 1%;
|
||||
bottom: 3px;
|
||||
z-index: 50;
|
||||
height: 5px;
|
||||
width: 98%;
|
||||
}
|
||||
|
||||
.swiper-container-vertical > .swiper-scrollbar {
|
||||
position: absolute;
|
||||
right: 3px;
|
||||
top: 1%;
|
||||
z-index: 50;
|
||||
width: 5px;
|
||||
height: 98%;
|
||||
}
|
||||
|
||||
.swiper-scrollbar-drag {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
background: rgba(0,0,0,.5);
|
||||
border-radius: 10px;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.swiper-scrollbar-cursor-drag {
|
||||
cursor: move;
|
||||
}
|
||||
|
||||
.swiper-scrollbar-lock {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.swiper-zoom-container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.swiper-zoom-container > canvas, .swiper-zoom-container > img, .swiper-zoom-container > svg {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.swiper-slide-zoomed {
|
||||
cursor: move;
|
||||
}
|
||||
|
||||
.swiper-lazy-preloader {
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
margin-left: -21px;
|
||||
margin-top: -21px;
|
||||
z-index: 10;
|
||||
transform-origin: 50%;
|
||||
animation: swiper-preloader-spin 1s infinite linear;
|
||||
box-sizing: border-box;
|
||||
border: 4px solid var(--swiper-preloader-color,var(--swiper-theme-color));
|
||||
border-radius: 50%;
|
||||
border-top-color: transparent;
|
||||
}
|
||||
|
||||
.swiper-lazy-preloader-white {
|
||||
--swiper-preloader-color: #fff;
|
||||
}
|
||||
|
||||
.swiper-lazy-preloader-black {
|
||||
--swiper-preloader-color: #000;
|
||||
}
|
||||
|
||||
@keyframes swiper-preloader-spin {
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
.swiper-container .swiper-notification {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
pointer-events: none;
|
||||
opacity: 0;
|
||||
z-index: -1000;
|
||||
}
|
||||
|
||||
.swiper-container-fade.swiper-container-free-mode .swiper-slide {
|
||||
transition-timing-function: ease-out;
|
||||
}
|
||||
|
||||
.swiper-container-fade .swiper-slide {
|
||||
pointer-events: none;
|
||||
transition-property: opacity;
|
||||
}
|
||||
|
||||
.swiper-container-fade .swiper-slide .swiper-slide {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.swiper-container-fade .swiper-slide-active, .swiper-container-fade .swiper-slide-active .swiper-slide-active {
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
.swiper-container-cube {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.swiper-container-cube .swiper-slide {
|
||||
pointer-events: none;
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
z-index: 1;
|
||||
visibility: hidden;
|
||||
transform-origin: 0 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.swiper-container-cube .swiper-slide .swiper-slide {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.swiper-container-cube.swiper-container-rtl .swiper-slide {
|
||||
transform-origin: 100% 0;
|
||||
}
|
||||
|
||||
.swiper-container-cube .swiper-slide-active, .swiper-container-cube .swiper-slide-active .swiper-slide-active {
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
.swiper-container-cube .swiper-slide-active, .swiper-container-cube .swiper-slide-next, .swiper-container-cube .swiper-slide-next + .swiper-slide, .swiper-container-cube .swiper-slide-prev {
|
||||
pointer-events: auto;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.swiper-container-cube .swiper-slide-shadow-bottom, .swiper-container-cube .swiper-slide-shadow-left, .swiper-container-cube .swiper-slide-shadow-right, .swiper-container-cube .swiper-slide-shadow-top {
|
||||
z-index: 0;
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
}
|
||||
|
||||
.swiper-container-cube .swiper-cube-shadow {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: .6;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.swiper-container-cube .swiper-cube-shadow:before {
|
||||
content: '';
|
||||
background: #000;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
-webkit-filter: blur(50px);
|
||||
filter: blur(50px);
|
||||
}
|
||||
|
||||
.swiper-container-flip {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.swiper-container-flip .swiper-slide {
|
||||
pointer-events: none;
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.swiper-container-flip .swiper-slide .swiper-slide {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.swiper-container-flip .swiper-slide-active, .swiper-container-flip .swiper-slide-active .swiper-slide-active {
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
.swiper-container-flip .swiper-slide-shadow-bottom, .swiper-container-flip .swiper-slide-shadow-left, .swiper-container-flip .swiper-slide-shadow-right, .swiper-container-flip .swiper-slide-shadow-top {
|
||||
z-index: 0;
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
}
|
||||
|
||||
25
Dashboard/static/css/Simple-Slider.css
Normal file
@@ -0,0 +1,25 @@
|
||||
.simple-slider .swiper-slide {
|
||||
height: 500px;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.simple-slider .swiper-button-next, .simple-slider .swiper-button-prev {
|
||||
width: 50px;
|
||||
margin-left: 20px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
@media (max-width:767px) {
|
||||
.simple-slider .swiper-button-next, .simple-slider .swiper-button-prev {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width:767px) {
|
||||
.simple-slider .swiper-slide {
|
||||
height: 360px;
|
||||
}
|
||||
}
|
||||
|
||||
1088
Dashboard/static/css/Zen Kaku Gothic Antique.css
Normal file
63
Dashboard/static/css/accordion-faq-list.css
Normal file
@@ -0,0 +1,63 @@
|
||||
.accordion collapse {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.accordion-button:focus {
|
||||
box-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.accordion-button:not(.collapsed) {
|
||||
background: none;
|
||||
color: #ff9800;
|
||||
box-shadow: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.accordion-button::after {
|
||||
width: auto;
|
||||
height: auto;
|
||||
content: "+";
|
||||
font-size: 40px;
|
||||
background-image: none;
|
||||
font-weight: 100;
|
||||
color: #1b6ce5;
|
||||
transform: translateY(-4px);
|
||||
}
|
||||
|
||||
.accordion-button:not(.collapsed)::after {
|
||||
width: auto;
|
||||
height: auto;
|
||||
background-image: none;
|
||||
content: "-";
|
||||
font-size: 48px;
|
||||
transform: translate(-5px, -4px);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
@media (max-width: 991px) {
|
||||
#navcol-1 {
|
||||
margin-top: 12px;
|
||||
background: #2d2c38;
|
||||
border-radius: 10px;
|
||||
max-width: 992px;
|
||||
backdrop-filter: opacity(1);
|
||||
-webkit-backdrop-filter: opacity(1);
|
||||
border-top-color: var(--bs-emphasis-color);
|
||||
border-bottom-color: var(--bs-emphasis-color);
|
||||
overflow: visible;
|
||||
background: #01002a;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
#navcol-1 {
|
||||
margin-top: 29px;
|
||||
box-shadow: 0px 0px;
|
||||
background: rgba(45,44,56,0);
|
||||
backdrop-filter: opacity(0);
|
||||
-webkit-backdrop-filter: opacity(0);
|
||||
background: rgba(45,44,56,0);
|
||||
}
|
||||
}
|
||||
|
||||
1742
Dashboard/static/css/animate.min.css
vendored
Normal file
955
Dashboard/static/css/aos.min.css
vendored
Normal file
@@ -0,0 +1,955 @@
|
||||
/* AOS version 2.1.1 */
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='50'], body[data-aos-duration='50'] [data-aos] {
|
||||
transition-duration: 50ms;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='50'], body[data-aos-delay='50'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='50'].aos-animate, body[data-aos-delay='50'] [data-aos].aos-animate {
|
||||
transition-delay: 50ms;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='100'], body[data-aos-duration='100'] [data-aos] {
|
||||
transition-duration: .1s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='100'], body[data-aos-delay='100'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='100'].aos-animate, body[data-aos-delay='100'] [data-aos].aos-animate {
|
||||
transition-delay: .1s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='150'], body[data-aos-duration='150'] [data-aos] {
|
||||
transition-duration: .15s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='150'], body[data-aos-delay='150'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='150'].aos-animate, body[data-aos-delay='150'] [data-aos].aos-animate {
|
||||
transition-delay: .15s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='200'], body[data-aos-duration='200'] [data-aos] {
|
||||
transition-duration: .2s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='200'], body[data-aos-delay='200'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='200'].aos-animate, body[data-aos-delay='200'] [data-aos].aos-animate {
|
||||
transition-delay: .2s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='250'], body[data-aos-duration='250'] [data-aos] {
|
||||
transition-duration: .25s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='250'], body[data-aos-delay='250'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='250'].aos-animate, body[data-aos-delay='250'] [data-aos].aos-animate {
|
||||
transition-delay: .25s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='300'], body[data-aos-duration='300'] [data-aos] {
|
||||
transition-duration: .3s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='300'], body[data-aos-delay='300'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='300'].aos-animate, body[data-aos-delay='300'] [data-aos].aos-animate {
|
||||
transition-delay: .3s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='350'], body[data-aos-duration='350'] [data-aos] {
|
||||
transition-duration: .35s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='350'], body[data-aos-delay='350'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='350'].aos-animate, body[data-aos-delay='350'] [data-aos].aos-animate {
|
||||
transition-delay: .35s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='400'], body[data-aos-duration='400'] [data-aos] {
|
||||
transition-duration: .4s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='400'], body[data-aos-delay='400'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='400'].aos-animate, body[data-aos-delay='400'] [data-aos].aos-animate {
|
||||
transition-delay: .4s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='450'], body[data-aos-duration='450'] [data-aos] {
|
||||
transition-duration: .45s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='450'], body[data-aos-delay='450'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='450'].aos-animate, body[data-aos-delay='450'] [data-aos].aos-animate {
|
||||
transition-delay: .45s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='500'], body[data-aos-duration='500'] [data-aos] {
|
||||
transition-duration: .5s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='500'], body[data-aos-delay='500'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='500'].aos-animate, body[data-aos-delay='500'] [data-aos].aos-animate {
|
||||
transition-delay: .5s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='550'], body[data-aos-duration='550'] [data-aos] {
|
||||
transition-duration: .55s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='550'], body[data-aos-delay='550'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='550'].aos-animate, body[data-aos-delay='550'] [data-aos].aos-animate {
|
||||
transition-delay: .55s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='600'], body[data-aos-duration='600'] [data-aos] {
|
||||
transition-duration: .6s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='600'], body[data-aos-delay='600'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='600'].aos-animate, body[data-aos-delay='600'] [data-aos].aos-animate {
|
||||
transition-delay: .6s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='650'], body[data-aos-duration='650'] [data-aos] {
|
||||
transition-duration: .65s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='650'], body[data-aos-delay='650'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='650'].aos-animate, body[data-aos-delay='650'] [data-aos].aos-animate {
|
||||
transition-delay: .65s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='700'], body[data-aos-duration='700'] [data-aos] {
|
||||
transition-duration: .7s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='700'], body[data-aos-delay='700'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='700'].aos-animate, body[data-aos-delay='700'] [data-aos].aos-animate {
|
||||
transition-delay: .7s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='750'], body[data-aos-duration='750'] [data-aos] {
|
||||
transition-duration: .75s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='750'], body[data-aos-delay='750'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='750'].aos-animate, body[data-aos-delay='750'] [data-aos].aos-animate {
|
||||
transition-delay: .75s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='800'], body[data-aos-duration='800'] [data-aos] {
|
||||
transition-duration: .8s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='800'], body[data-aos-delay='800'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='800'].aos-animate, body[data-aos-delay='800'] [data-aos].aos-animate {
|
||||
transition-delay: .8s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='850'], body[data-aos-duration='850'] [data-aos] {
|
||||
transition-duration: .85s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='850'], body[data-aos-delay='850'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='850'].aos-animate, body[data-aos-delay='850'] [data-aos].aos-animate {
|
||||
transition-delay: .85s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='900'], body[data-aos-duration='900'] [data-aos] {
|
||||
transition-duration: .9s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='900'], body[data-aos-delay='900'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='900'].aos-animate, body[data-aos-delay='900'] [data-aos].aos-animate {
|
||||
transition-delay: .9s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='950'], body[data-aos-duration='950'] [data-aos] {
|
||||
transition-duration: .95s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='950'], body[data-aos-delay='950'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='950'].aos-animate, body[data-aos-delay='950'] [data-aos].aos-animate {
|
||||
transition-delay: .95s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1000'], body[data-aos-duration='1000'] [data-aos] {
|
||||
transition-duration: 1s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1000'], body[data-aos-delay='1000'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1000'].aos-animate, body[data-aos-delay='1000'] [data-aos].aos-animate {
|
||||
transition-delay: 1s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1050'], body[data-aos-duration='1050'] [data-aos] {
|
||||
transition-duration: 1.05s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1050'], body[data-aos-delay='1050'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1050'].aos-animate, body[data-aos-delay='1050'] [data-aos].aos-animate {
|
||||
transition-delay: 1.05s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1100'], body[data-aos-duration='1100'] [data-aos] {
|
||||
transition-duration: 1.1s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1100'], body[data-aos-delay='1100'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1100'].aos-animate, body[data-aos-delay='1100'] [data-aos].aos-animate {
|
||||
transition-delay: 1.1s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1150'], body[data-aos-duration='1150'] [data-aos] {
|
||||
transition-duration: 1.15s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1150'], body[data-aos-delay='1150'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1150'].aos-animate, body[data-aos-delay='1150'] [data-aos].aos-animate {
|
||||
transition-delay: 1.15s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1200'], body[data-aos-duration='1200'] [data-aos] {
|
||||
transition-duration: 1.2s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1200'], body[data-aos-delay='1200'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1200'].aos-animate, body[data-aos-delay='1200'] [data-aos].aos-animate {
|
||||
transition-delay: 1.2s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1250'], body[data-aos-duration='1250'] [data-aos] {
|
||||
transition-duration: 1.25s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1250'], body[data-aos-delay='1250'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1250'].aos-animate, body[data-aos-delay='1250'] [data-aos].aos-animate {
|
||||
transition-delay: 1.25s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1300'], body[data-aos-duration='1300'] [data-aos] {
|
||||
transition-duration: 1.3s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1300'], body[data-aos-delay='1300'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1300'].aos-animate, body[data-aos-delay='1300'] [data-aos].aos-animate {
|
||||
transition-delay: 1.3s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1350'], body[data-aos-duration='1350'] [data-aos] {
|
||||
transition-duration: 1.35s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1350'], body[data-aos-delay='1350'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1350'].aos-animate, body[data-aos-delay='1350'] [data-aos].aos-animate {
|
||||
transition-delay: 1.35s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1400'], body[data-aos-duration='1400'] [data-aos] {
|
||||
transition-duration: 1.4s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1400'], body[data-aos-delay='1400'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1400'].aos-animate, body[data-aos-delay='1400'] [data-aos].aos-animate {
|
||||
transition-delay: 1.4s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1450'], body[data-aos-duration='1450'] [data-aos] {
|
||||
transition-duration: 1.45s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1450'], body[data-aos-delay='1450'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1450'].aos-animate, body[data-aos-delay='1450'] [data-aos].aos-animate {
|
||||
transition-delay: 1.45s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1500'], body[data-aos-duration='1500'] [data-aos] {
|
||||
transition-duration: 1.5s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1500'], body[data-aos-delay='1500'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1500'].aos-animate, body[data-aos-delay='1500'] [data-aos].aos-animate {
|
||||
transition-delay: 1.5s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1550'], body[data-aos-duration='1550'] [data-aos] {
|
||||
transition-duration: 1.55s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1550'], body[data-aos-delay='1550'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1550'].aos-animate, body[data-aos-delay='1550'] [data-aos].aos-animate {
|
||||
transition-delay: 1.55s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1600'], body[data-aos-duration='1600'] [data-aos] {
|
||||
transition-duration: 1.6s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1600'], body[data-aos-delay='1600'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1600'].aos-animate, body[data-aos-delay='1600'] [data-aos].aos-animate {
|
||||
transition-delay: 1.6s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1650'], body[data-aos-duration='1650'] [data-aos] {
|
||||
transition-duration: 1.65s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1650'], body[data-aos-delay='1650'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1650'].aos-animate, body[data-aos-delay='1650'] [data-aos].aos-animate {
|
||||
transition-delay: 1.65s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1700'], body[data-aos-duration='1700'] [data-aos] {
|
||||
transition-duration: 1.7s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1700'], body[data-aos-delay='1700'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1700'].aos-animate, body[data-aos-delay='1700'] [data-aos].aos-animate {
|
||||
transition-delay: 1.7s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1750'], body[data-aos-duration='1750'] [data-aos] {
|
||||
transition-duration: 1.75s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1750'], body[data-aos-delay='1750'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1750'].aos-animate, body[data-aos-delay='1750'] [data-aos].aos-animate {
|
||||
transition-delay: 1.75s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1800'], body[data-aos-duration='1800'] [data-aos] {
|
||||
transition-duration: 1.8s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1800'], body[data-aos-delay='1800'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1800'].aos-animate, body[data-aos-delay='1800'] [data-aos].aos-animate {
|
||||
transition-delay: 1.8s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1850'], body[data-aos-duration='1850'] [data-aos] {
|
||||
transition-duration: 1.85s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1850'], body[data-aos-delay='1850'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1850'].aos-animate, body[data-aos-delay='1850'] [data-aos].aos-animate {
|
||||
transition-delay: 1.85s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1900'], body[data-aos-duration='1900'] [data-aos] {
|
||||
transition-duration: 1.9s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1900'], body[data-aos-delay='1900'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1900'].aos-animate, body[data-aos-delay='1900'] [data-aos].aos-animate {
|
||||
transition-delay: 1.9s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='1950'], body[data-aos-duration='1950'] [data-aos] {
|
||||
transition-duration: 1.95s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1950'], body[data-aos-delay='1950'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='1950'].aos-animate, body[data-aos-delay='1950'] [data-aos].aos-animate {
|
||||
transition-delay: 1.95s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2000'], body[data-aos-duration='2000'] [data-aos] {
|
||||
transition-duration: 2s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2000'], body[data-aos-delay='2000'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2000'].aos-animate, body[data-aos-delay='2000'] [data-aos].aos-animate {
|
||||
transition-delay: 2s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2050'], body[data-aos-duration='2050'] [data-aos] {
|
||||
transition-duration: 2.05s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2050'], body[data-aos-delay='2050'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2050'].aos-animate, body[data-aos-delay='2050'] [data-aos].aos-animate {
|
||||
transition-delay: 2.05s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2100'], body[data-aos-duration='2100'] [data-aos] {
|
||||
transition-duration: 2.1s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2100'], body[data-aos-delay='2100'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2100'].aos-animate, body[data-aos-delay='2100'] [data-aos].aos-animate {
|
||||
transition-delay: 2.1s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2150'], body[data-aos-duration='2150'] [data-aos] {
|
||||
transition-duration: 2.15s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2150'], body[data-aos-delay='2150'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2150'].aos-animate, body[data-aos-delay='2150'] [data-aos].aos-animate {
|
||||
transition-delay: 2.15s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2200'], body[data-aos-duration='2200'] [data-aos] {
|
||||
transition-duration: 2.2s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2200'], body[data-aos-delay='2200'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2200'].aos-animate, body[data-aos-delay='2200'] [data-aos].aos-animate {
|
||||
transition-delay: 2.2s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2250'], body[data-aos-duration='2250'] [data-aos] {
|
||||
transition-duration: 2.25s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2250'], body[data-aos-delay='2250'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2250'].aos-animate, body[data-aos-delay='2250'] [data-aos].aos-animate {
|
||||
transition-delay: 2.25s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2300'], body[data-aos-duration='2300'] [data-aos] {
|
||||
transition-duration: 2.3s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2300'], body[data-aos-delay='2300'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2300'].aos-animate, body[data-aos-delay='2300'] [data-aos].aos-animate {
|
||||
transition-delay: 2.3s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2350'], body[data-aos-duration='2350'] [data-aos] {
|
||||
transition-duration: 2.35s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2350'], body[data-aos-delay='2350'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2350'].aos-animate, body[data-aos-delay='2350'] [data-aos].aos-animate {
|
||||
transition-delay: 2.35s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2400'], body[data-aos-duration='2400'] [data-aos] {
|
||||
transition-duration: 2.4s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2400'], body[data-aos-delay='2400'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2400'].aos-animate, body[data-aos-delay='2400'] [data-aos].aos-animate {
|
||||
transition-delay: 2.4s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2450'], body[data-aos-duration='2450'] [data-aos] {
|
||||
transition-duration: 2.45s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2450'], body[data-aos-delay='2450'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2450'].aos-animate, body[data-aos-delay='2450'] [data-aos].aos-animate {
|
||||
transition-delay: 2.45s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2500'], body[data-aos-duration='2500'] [data-aos] {
|
||||
transition-duration: 2.5s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2500'], body[data-aos-delay='2500'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2500'].aos-animate, body[data-aos-delay='2500'] [data-aos].aos-animate {
|
||||
transition-delay: 2.5s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2550'], body[data-aos-duration='2550'] [data-aos] {
|
||||
transition-duration: 2.55s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2550'], body[data-aos-delay='2550'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2550'].aos-animate, body[data-aos-delay='2550'] [data-aos].aos-animate {
|
||||
transition-delay: 2.55s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2600'], body[data-aos-duration='2600'] [data-aos] {
|
||||
transition-duration: 2.6s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2600'], body[data-aos-delay='2600'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2600'].aos-animate, body[data-aos-delay='2600'] [data-aos].aos-animate {
|
||||
transition-delay: 2.6s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2650'], body[data-aos-duration='2650'] [data-aos] {
|
||||
transition-duration: 2.65s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2650'], body[data-aos-delay='2650'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2650'].aos-animate, body[data-aos-delay='2650'] [data-aos].aos-animate {
|
||||
transition-delay: 2.65s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2700'], body[data-aos-duration='2700'] [data-aos] {
|
||||
transition-duration: 2.7s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2700'], body[data-aos-delay='2700'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2700'].aos-animate, body[data-aos-delay='2700'] [data-aos].aos-animate {
|
||||
transition-delay: 2.7s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2750'], body[data-aos-duration='2750'] [data-aos] {
|
||||
transition-duration: 2.75s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2750'], body[data-aos-delay='2750'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2750'].aos-animate, body[data-aos-delay='2750'] [data-aos].aos-animate {
|
||||
transition-delay: 2.75s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2800'], body[data-aos-duration='2800'] [data-aos] {
|
||||
transition-duration: 2.8s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2800'], body[data-aos-delay='2800'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2800'].aos-animate, body[data-aos-delay='2800'] [data-aos].aos-animate {
|
||||
transition-delay: 2.8s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2850'], body[data-aos-duration='2850'] [data-aos] {
|
||||
transition-duration: 2.85s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2850'], body[data-aos-delay='2850'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2850'].aos-animate, body[data-aos-delay='2850'] [data-aos].aos-animate {
|
||||
transition-delay: 2.85s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2900'], body[data-aos-duration='2900'] [data-aos] {
|
||||
transition-duration: 2.9s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2900'], body[data-aos-delay='2900'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2900'].aos-animate, body[data-aos-delay='2900'] [data-aos].aos-animate {
|
||||
transition-delay: 2.9s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='2950'], body[data-aos-duration='2950'] [data-aos] {
|
||||
transition-duration: 2.95s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2950'], body[data-aos-delay='2950'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='2950'].aos-animate, body[data-aos-delay='2950'] [data-aos].aos-animate {
|
||||
transition-delay: 2.95s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-duration='3000'], body[data-aos-duration='3000'] [data-aos] {
|
||||
transition-duration: 3s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='3000'], body[data-aos-delay='3000'] [data-aos] {
|
||||
transition-delay: 0;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-delay='3000'].aos-animate, body[data-aos-delay='3000'] [data-aos].aos-animate {
|
||||
transition-delay: 3s;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=linear], body[data-aos-easing=linear] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.25,.25,.75,.75);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease], body[data-aos-easing=ease] [data-aos] {
|
||||
transition-timing-function: ease;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-in], body[data-aos-easing=ease-in] [data-aos] {
|
||||
transition-timing-function: ease-in;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-out], body[data-aos-easing=ease-out] [data-aos] {
|
||||
transition-timing-function: ease-out;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-in-out], body[data-aos-easing=ease-in-out] [data-aos] {
|
||||
transition-timing-function: ease-in-out;
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-in-back], body[data-aos-easing=ease-in-back] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.6,-.28,.735,.045);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-out-back], body[data-aos-easing=ease-out-back] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.175,.885,.32,1.275);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-in-out-back], body[data-aos-easing=ease-in-out-back] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.68,-.55,.265,1.55);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-in-sine], body[data-aos-easing=ease-in-sine] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.47,0,.745,.715);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-out-sine], body[data-aos-easing=ease-out-sine] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.39,.575,.565,1);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-in-out-sine], body[data-aos-easing=ease-in-out-sine] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.445,.05,.55,.95);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-in-quad], body[data-aos-easing=ease-in-quad] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.55,.085,.68,.53);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-out-quad], body[data-aos-easing=ease-out-quad] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.25,.46,.45,.94);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-in-out-quad], body[data-aos-easing=ease-in-out-quad] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.455,.03,.515,.955);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-in-cubic], body[data-aos-easing=ease-in-cubic] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.55,.085,.68,.53);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-out-cubic], body[data-aos-easing=ease-out-cubic] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.25,.46,.45,.94);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-in-out-cubic], body[data-aos-easing=ease-in-out-cubic] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.455,.03,.515,.955);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-in-quart], body[data-aos-easing=ease-in-quart] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.55,.085,.68,.53);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-out-quart], body[data-aos-easing=ease-out-quart] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.25,.46,.45,.94);
|
||||
}
|
||||
|
||||
[data-aos][data-aos][data-aos-easing=ease-in-out-quart], body[data-aos-easing=ease-in-out-quart] [data-aos] {
|
||||
transition-timing-function: cubic-bezier(.455,.03,.515,.955);
|
||||
}
|
||||
|
||||
[data-aos^=fade][data-aos^=fade] {
|
||||
opacity: 0;
|
||||
transition-property: opacity,transform;
|
||||
}
|
||||
|
||||
[data-aos^=fade][data-aos^=fade].aos-animate {
|
||||
opacity: 1;
|
||||
transform: translate(0);
|
||||
}
|
||||
|
||||
[data-aos=fade-up] {
|
||||
transform: translateY(100px);
|
||||
}
|
||||
|
||||
[data-aos=fade-down] {
|
||||
transform: translateY(-100px);
|
||||
}
|
||||
|
||||
[data-aos=fade-right] {
|
||||
transform: translate(-100px);
|
||||
}
|
||||
|
||||
[data-aos=fade-left] {
|
||||
transform: translate(100px);
|
||||
}
|
||||
|
||||
[data-aos=fade-up-right] {
|
||||
transform: translate(-100px,100px);
|
||||
}
|
||||
|
||||
[data-aos=fade-up-left] {
|
||||
transform: translate(100px,100px);
|
||||
}
|
||||
|
||||
[data-aos=fade-down-right] {
|
||||
transform: translate(-100px,-100px);
|
||||
}
|
||||
|
||||
[data-aos=fade-down-left] {
|
||||
transform: translate(100px,-100px);
|
||||
}
|
||||
|
||||
[data-aos^=zoom][data-aos^=zoom] {
|
||||
opacity: 0;
|
||||
transition-property: opacity,transform;
|
||||
}
|
||||
|
||||
[data-aos^=zoom][data-aos^=zoom].aos-animate {
|
||||
opacity: 1;
|
||||
transform: translate(0) scale(1);
|
||||
}
|
||||
|
||||
[data-aos=zoom-in] {
|
||||
transform: scale(.6);
|
||||
}
|
||||
|
||||
[data-aos=zoom-in-up] {
|
||||
transform: translateY(100px) scale(.6);
|
||||
}
|
||||
|
||||
[data-aos=zoom-in-down] {
|
||||
transform: translateY(-100px) scale(.6);
|
||||
}
|
||||
|
||||
[data-aos=zoom-in-right] {
|
||||
transform: translate(-100px) scale(.6);
|
||||
}
|
||||
|
||||
[data-aos=zoom-in-left] {
|
||||
transform: translate(100px) scale(.6);
|
||||
}
|
||||
|
||||
[data-aos=zoom-out] {
|
||||
transform: scale(1.2);
|
||||
}
|
||||
|
||||
[data-aos=zoom-out-up] {
|
||||
transform: translateY(100px) scale(1.2);
|
||||
}
|
||||
|
||||
[data-aos=zoom-out-down] {
|
||||
transform: translateY(-100px) scale(1.2);
|
||||
}
|
||||
|
||||
[data-aos=zoom-out-right] {
|
||||
transform: translate(-100px) scale(1.2);
|
||||
}
|
||||
|
||||
[data-aos=zoom-out-left] {
|
||||
transform: translate(100px) scale(1.2);
|
||||
}
|
||||
|
||||
[data-aos^=slide][data-aos^=slide] {
|
||||
transition-property: transform;
|
||||
}
|
||||
|
||||
[data-aos^=slide][data-aos^=slide].aos-animate {
|
||||
transform: translate(0);
|
||||
}
|
||||
|
||||
[data-aos=slide-up] {
|
||||
transform: translateY(100%);
|
||||
}
|
||||
|
||||
[data-aos=slide-down] {
|
||||
transform: translateY(-100%);
|
||||
}
|
||||
|
||||
[data-aos=slide-right] {
|
||||
transform: translateX(-100%);
|
||||
}
|
||||
|
||||
[data-aos=slide-left] {
|
||||
transform: translateX(100%);
|
||||
}
|
||||
|
||||
[data-aos^=flip][data-aos^=flip] {
|
||||
backface-visibility: hidden;
|
||||
transition-property: transform;
|
||||
}
|
||||
|
||||
[data-aos=flip-left] {
|
||||
transform: perspective(2500px) rotateY(-100deg);
|
||||
}
|
||||
|
||||
[data-aos=flip-left].aos-animate {
|
||||
transform: perspective(2500px) rotateY(0);
|
||||
}
|
||||
|
||||
[data-aos=flip-right] {
|
||||
transform: perspective(2500px) rotateY(100deg);
|
||||
}
|
||||
|
||||
[data-aos=flip-right].aos-animate {
|
||||
transform: perspective(2500px) rotateY(0);
|
||||
}
|
||||
|
||||
[data-aos=flip-up] {
|
||||
transform: perspective(2500px) rotateX(-100deg);
|
||||
}
|
||||
|
||||
[data-aos=flip-up].aos-animate {
|
||||
transform: perspective(2500px) rotateX(0);
|
||||
}
|
||||
|
||||
[data-aos=flip-down] {
|
||||
transform: perspective(2500px) rotateX(100deg);
|
||||
}
|
||||
|
||||
[data-aos=flip-down].aos-animate {
|
||||
transform: perspective(2500px) rotateX(0);
|
||||
}
|
||||
|
||||
93
Dashboard/static/css/bs-theme-overrides.css
Normal file
@@ -0,0 +1,93 @@
|
||||
:root, [data-bs-theme=light] {
|
||||
--bs-primary: #19f5aa;
|
||||
--bs-primary-rgb: 25,245,170;
|
||||
--bs-primary-text-emphasis: #0A6244;
|
||||
--bs-primary-bg-subtle: #D1FDEE;
|
||||
--bs-primary-border-subtle: #A3FBDD;
|
||||
--bs-body-bg: #01002a;
|
||||
--bs-body-bg-rgb: 1,0,42;
|
||||
--bs-link-color: #ffffff;
|
||||
--bs-link-color-rgb: 255,255,255;
|
||||
--bs-link-hover-color: #73abfc;
|
||||
--bs-link-hover-color-rgb: 115,171,252;
|
||||
--bs-link-decoration: blink;
|
||||
--bs-border-color: #dee2e6;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
--bs-btn-color: #000000;
|
||||
--bs-btn-bg: #19f5aa;
|
||||
--bs-btn-border-color: #19f5aa;
|
||||
--bs-btn-hover-color: #000000;
|
||||
--bs-btn-hover-bg: #3CF7B7;
|
||||
--bs-btn-hover-border-color: #30F6B3;
|
||||
--bs-btn-focus-shadow-rgb: 4,37,26;
|
||||
--bs-btn-active-color: #000000;
|
||||
--bs-btn-active-bg: #47F7BB;
|
||||
--bs-btn-active-border-color: #30F6B3;
|
||||
--bs-btn-disabled-color: #000000;
|
||||
--bs-btn-disabled-bg: #19f5aa;
|
||||
--bs-btn-disabled-border-color: #19f5aa;
|
||||
}
|
||||
|
||||
.btn-outline-primary {
|
||||
--bs-btn-color: #19f5aa;
|
||||
--bs-btn-border-color: #19f5aa;
|
||||
--bs-btn-focus-shadow-rgb: 25,245,170;
|
||||
--bs-btn-hover-color: #000000;
|
||||
--bs-btn-hover-bg: #19f5aa;
|
||||
--bs-btn-hover-border-color: #19f5aa;
|
||||
--bs-btn-active-color: #000000;
|
||||
--bs-btn-active-bg: #19f5aa;
|
||||
--bs-btn-active-border-color: #19f5aa;
|
||||
--bs-btn-disabled-color: #19f5aa;
|
||||
--bs-btn-disabled-bg: transparent;
|
||||
--bs-btn-disabled-border-color: #19f5aa;
|
||||
}
|
||||
|
||||
[data-bs-theme=dark] {
|
||||
--bs-primary: #1b6ce5;
|
||||
--bs-primary-rgb: 27,108,229;
|
||||
--bs-primary-text-emphasis: #76A7EF;
|
||||
--bs-primary-bg-subtle: #05162E;
|
||||
--bs-primary-border-subtle: #104189;
|
||||
--bs-body-bg: #01002a;
|
||||
--bs-body-bg-rgb: 1,0,42;
|
||||
--bs-link-color: #ffffff;
|
||||
--bs-link-color-rgb: 255,255,255;
|
||||
--bs-link-hover-color: #73abfc;
|
||||
--bs-link-hover-color-rgb: 115,171,252;
|
||||
--bs-border-color: #dee2e6;
|
||||
}
|
||||
|
||||
[data-bs-theme=dark] .btn-primary, .btn-primary[data-bs-theme=dark] {
|
||||
--bs-btn-color: #fff;
|
||||
--bs-btn-bg: #1b6ce5;
|
||||
--bs-btn-border-color: #1b6ce5;
|
||||
--bs-btn-hover-color: #fff;
|
||||
--bs-btn-hover-bg: #175CC3;
|
||||
--bs-btn-hover-border-color: #1656B7;
|
||||
--bs-btn-focus-shadow-rgb: 221,233,251;
|
||||
--bs-btn-active-color: #fff;
|
||||
--bs-btn-active-bg: #1656B7;
|
||||
--bs-btn-active-border-color: #1451AC;
|
||||
--bs-btn-disabled-color: #fff;
|
||||
--bs-btn-disabled-bg: #1b6ce5;
|
||||
--bs-btn-disabled-border-color: #1b6ce5;
|
||||
}
|
||||
|
||||
[data-bs-theme=dark] .btn-outline-primary, .btn-outline-primary[data-bs-theme=dark] {
|
||||
--bs-btn-color: #1b6ce5;
|
||||
--bs-btn-border-color: #1b6ce5;
|
||||
--bs-btn-focus-shadow-rgb: 27,108,229;
|
||||
--bs-btn-hover-color: #fff;
|
||||
--bs-btn-hover-bg: #1b6ce5;
|
||||
--bs-btn-hover-border-color: #1b6ce5;
|
||||
--bs-btn-active-color: #fff;
|
||||
--bs-btn-active-bg: #1b6ce5;
|
||||
--bs-btn-active-border-color: #1b6ce5;
|
||||
--bs-btn-disabled-color: #1b6ce5;
|
||||
--bs-btn-disabled-bg: transparent;
|
||||
--bs-btn-disabled-border-color: #1b6ce5;
|
||||
}
|
||||
|
||||
7
Dashboard/static/css/swiper-icons.css
Normal file
@@ -0,0 +1,7 @@
|
||||
@font-face {
|
||||
font-family: 'swiper-icons';
|
||||
src: url(../../static/fonts/swiper-icons.woff) format('woff');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: auto;
|
||||
}
|
||||
BIN
Dashboard/static/dashboard-icons/Schulzkebau.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
Dashboard/static/dashboard-icons/firefly.png
Normal file
|
After Width: | Height: | Size: 440 KiB |
BIN
Dashboard/static/dashboard-icons/focalboard.png
Normal file
|
After Width: | Height: | Size: 570 KiB |
BIN
Dashboard/static/dashboard-icons/kanboard.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
Dashboard/static/dashboard-icons/mattermost.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
Dashboard/static/dashboard-icons/nextcloud.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
Dashboard/static/dashboard-icons/odoo.png
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
Dashboard/static/dashboard-icons/rallly.png
Normal file
|
After Width: | Height: | Size: 368 KiB |
BIN
Dashboard/static/favicon.ico
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
Dashboard/static/firefly.png
Normal file
|
After Width: | Height: | Size: 440 KiB |
BIN
Dashboard/static/focalboard.png
Normal file
|
After Width: | Height: | Size: 570 KiB |