diff --git a/.bumpversion.cfg b/.bumpversion.cfg deleted file mode 100644 index cb7d16d..0000000 --- a/.bumpversion.cfg +++ /dev/null @@ -1,12 +0,0 @@ -[bumpversion] -current_version = 0.4.6 -commit = True -tag = True - -[bumpversion:file:pyproject.toml] -search = version = "{current_version}" -replace = version = "{new_version}" - -[bumpversion:file:ucast/__init__.py] -search = __version__ = "{current_version}" -replace = __version__ = "{new_version}" diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index f35e2fd..0000000 --- a/.dockerignore +++ /dev/null @@ -1,23 +0,0 @@ -.idea - -# Python -venv -dist -.tox -__pycache__ -*.egg-info -.pytest_cache - -# JS -node_modules - -# Jupyter -.ipynb_checkpoints - -# Application data -/.env -/_run* -*.sqlite3 - -assets -notes diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index 2f8bb25..0000000 --- a/.drone.yml +++ /dev/null @@ -1,62 +0,0 @@ -kind: pipeline -name: default -type: docker - -platform: - os: linux - arch: '' - -steps: - - name: install dependencies - image: thetadev256/ucast-dev - volumes: - - name: cache - path: /root/.cache - commands: - - poetry install - - poetry run invoke reset - - - name: lint - image: thetadev256/ucast-dev - volumes: - - name: cache - path: /root/.cache - commands: - - poetry run invoke lint - depends_on: - - install dependencies - - - name: test - image: thetadev256/ucast-dev - volumes: - - name: cache - path: /root/.cache - commands: - - poetry run invoke test - depends_on: - - install dependencies - -# - name: build container -# image: quay.io/buildah/stable -# when: -# event: -# - tag -# commands: -# - buildah login -u $DOCKER_USER -p $DOCKER_PASS -- $DOCKER_REGISTRY -# - buildah manifest create ucast -# - buildah bud --tag code.thetadev.de/hsa/ucast:latest --manifest ucast --arch amd64 --build-arg TARGETPLATFORM=linux/amd64 -f deploy/Dockerfile . -# - buildah bud --tag code.thetadev.de/hsa/ucast:latest --manifest ucast --arch arm64 --build-arg TARGETPLATFORM=linux/arm64 -f deploy/Dockerfile . -# - buildah manifest push --all ucast docker://code.thetadev.de/hsa/ucast:latest -# environment: -# DOCKER_REGISTRY: -# from_secret: docker_registry -# DOCKER_USER: -# from_secret: docker_username -# DOCKER_PASS: -# from_secret: docker_password -# depends_on: -# - test - -volumes: - - name: cache - temp: { } diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 914c96c..0000000 --- a/.editorconfig +++ /dev/null @@ -1,14 +0,0 @@ -[*] -charset = utf-8 -indent_style = space -indent_size = 4 -end_of_line = lf -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 88 - -[{Makefile,*.go}] -indent_style = tab - -[*.{json,md,rst,ini,yml,yaml,html,js,jsx,ts,tsx,vue}] -indent_size = 2 diff --git a/.env.example b/.env.example deleted file mode 100644 index 02ed387..0000000 --- a/.env.example +++ /dev/null @@ -1,3 +0,0 @@ -UCAST_DEBUG=True -UCAST_WORKDIR=_run -UCAST_ALLOWED_HOSTS=localhost,127.0.0.1 diff --git a/.gitignore b/.gitignore index 88947d8..5479c4e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,19 +2,19 @@ # Python venv -dist .tox __pycache__ *.egg-info .pytest_cache -# JS -node_modules - # Jupyter .ipynb_checkpoints +# Media files +*.webm +*.mp4 +*.mp3 + # Application data -/.env -/_run* -*.sqlite3 +/_run +.env diff --git a/README.md b/README.md index 22db521..6195dbd 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,11 @@ abrufen kann. ## Technik -Der Server sollte mit dem Webframework [Django](https://djangoproject.com/) +Der Server sollte mit dem Webframework [Flask](https://flask.palletsprojects.com/) realisiert werden. +Daten sollten entweder in einer SQLite-Datenbank oder in JSON-Dateien abgelegt werden. + Die Weboberfläche wird mit Jinja-Templates gerendert, auf ein JS-Framework kann vorerst verzichtet werden. Für ein ansehnliches Ansehen sorgt Bootstrap. @@ -24,30 +26,5 @@ Für ein ansehnliches Ansehen sorgt Bootstrap. ### Project aufsetzen -1. Python3 + Node.js + [Poetry](https://python-poetry.org/) dependency manager + - [pnpm](https://pnpm.io/) installieren -2. Python-Dependencies mit ``poetry install`` installieren -3. Node-Dependencies mit ``pnpm i`` installerien - -### Tasks (Python) - -Ausführen: `invoke ` - -`test` Unittests ausführen - -`lint` Codequalität/Formatierung überprüfen - -`format` Code mit black formatieren - -`makemigrations` Datenbankmigration erstellen - -`get-cover --vid ` YouTube-Thumbnail herunterladen -und Coverbilder zum Testen erzeugen (werden unter `ucast/tests/testfiles` abgelegt) - -### Tasks (Node.js) - -Ausführen: `npm run ` - -`start` Sass-Stylesheets automatisch bei Änderungen kompilieren - -`build` Sass-Stylesheets kompilieren und optimieren +1. Python3 + [Poetry](https://python-poetry.org/) dependency manager installieren +2. Dependencies mit ``poetry install`` installieren diff --git a/assets/icons/icon.svg b/assets/icons/icon.svg deleted file mode 100644 index d6fe786..0000000 --- a/assets/icons/icon.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/assets/icons/logo.svg b/assets/icons/logo.svg deleted file mode 100644 index ad05aa8..0000000 --- a/assets/icons/logo.svg +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/assets/icons/logo_border.svg b/assets/icons/logo_border.svg deleted file mode 100644 index dfcf38f..0000000 --- a/assets/icons/logo_border.svg +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/icons/logo_dark.svg b/assets/icons/logo_dark.svg deleted file mode 100644 index 4e4d75e..0000000 --- a/assets/icons/logo_dark.svg +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/assets/icons/yt_icon.svg b/assets/icons/yt_icon.svg deleted file mode 100644 index 2b82d1a..0000000 --- a/assets/icons/yt_icon.svg +++ /dev/null @@ -1,43 +0,0 @@ - - diff --git a/assets/sass/style.sass b/assets/sass/style.sass deleted file mode 100644 index 608ffab..0000000 --- a/assets/sass/style.sass +++ /dev/null @@ -1,48 +0,0 @@ -@import "../../node_modules/bulma/sass/utilities/initial-variables" -@import "../../node_modules/bulma/bulma" - -.channel-icon - max-height: 64px - -.video-thumbnail - width: 100% - -.video-grid - $spacing: 0.5vw - - display: grid - grid-row-gap: $spacing - row-gap: $spacing - grid-column-gap: $spacing - column-gap: $spacing - grid-template-columns: repeat(2, minmax(0, 1fr)) - grid-column: auto - - @include tablet - grid-template-columns: repeat(3, minmax(0, 1fr)) - - @include desktop - grid-template-columns: repeat(4, minmax(0, 1fr)) - - @include widescreen - grid-template-columns: repeat(5, minmax(0, 1fr)) - - @include fullhd - grid-template-columns: repeat(6, minmax(0, 1fr)) - -.video-card - display: flex - flex-direction: column - -.video-card-content - padding: 0 0.5vw - - &:last-child - padding-bottom: 0.5vw - -// Fix almost invisible navbar items on mobile -.navbar-item - color: #fff - -.overflow-x - overflow-x: auto diff --git a/deploy/Devcontainer.Dockerfile b/deploy/Devcontainer.Dockerfile deleted file mode 100644 index 8b84e2c..0000000 --- a/deploy/Devcontainer.Dockerfile +++ /dev/null @@ -1,32 +0,0 @@ -# This has to be built with docker buildx to set the TARGETPLATFORM argument -FROM registry.hub.docker.com/library/python:3.10 - -ARG TARGETPLATFORM - -# ffmpeg static source (https://johnvansickle.com/ffmpeg/) -RUN set -e; \ - mkdir /build_ffmpeg; \ - cd /build_ffmpeg; \ - case "$TARGETPLATFORM" in \ - "linux/amd64") ffmpeg_arch="amd64";; \ - "linux/arm64") ffmpeg_arch="arm64";; \ - "linux/arm/v7") ffmpeg_arch="armhf";; \ - *) echo "TARGETPLATFORM $TARGETPLATFORM not found"; exit 1 ;;\ - esac; \ - wget "https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-${ffmpeg_arch}-static.tar.xz"; \ - wget "https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-${ffmpeg_arch}-static.tar.xz.md5"; \ - md5sum -c "ffmpeg-release-${ffmpeg_arch}-static.tar.xz.md5"; \ - tar Jxf "ffmpeg-release-${ffmpeg_arch}-static.tar.xz"; \ - mv "ffmpeg-5.0.1-${ffmpeg_arch}-static/ffmpeg" /usr/bin; \ - cd /; \ - rm -rf /build_ffmpeg; - -# The cryptography package is written in Rust and not available as a built wheel for armv7 -# Thats why we need Rust to compile it from source -RUN set -e; \ - if [ "$TARGETPLATFORM" = "linux/arm/v7" ]; then \ - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y; \ - . $HOME/.cargo/env; \ - fi; \ - pip install --upgrade pip setuptools poetry; \ - rm -rf $HOME/.cargo $HOME/.rustup; diff --git a/deploy/Dockerfile b/deploy/Dockerfile deleted file mode 100644 index 29911d5..0000000 --- a/deploy/Dockerfile +++ /dev/null @@ -1,48 +0,0 @@ -FROM registry.hub.docker.com/thetadev256/ucast-dev - -COPY . /build -WORKDIR /build - -RUN poetry build -f wheel - -FROM registry.hub.docker.com/library/python:3.10 -ARG TARGETPLATFORM - -# ffmpeg static source (https://johnvansickle.com/ffmpeg/) -RUN set -e; \ - mkdir /build_ffmpeg; \ - cd /build_ffmpeg; \ - case "$TARGETPLATFORM" in \ - "linux/amd64") ffmpeg_arch="amd64";; \ - "linux/arm64") ffmpeg_arch="arm64";; \ - "linux/arm/v7") ffmpeg_arch="armhf";; \ - *) echo "TARGETPLATFORM $TARGETPLATFORM not found"; exit 1 ;;\ - esac; \ - wget "https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-${ffmpeg_arch}-static.tar.xz"; \ - wget "https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-${ffmpeg_arch}-static.tar.xz.md5"; \ - md5sum -c "ffmpeg-release-${ffmpeg_arch}-static.tar.xz.md5"; \ - tar Jxf "ffmpeg-release-${ffmpeg_arch}-static.tar.xz"; \ - mv "ffmpeg-5.0.1-${ffmpeg_arch}-static/ffmpeg" /usr/bin; \ - cd /; \ - rm -rf /build_ffmpeg; - -# nginx -RUN apt-get update && \ - apt-get install -y nginx && \ - apt-get clean && \ - mkdir /ucast && \ - chown 1000:1000 /ucast && \ - chown -R 1000:1000 /var/lib/nginx /var/log/nginx - -COPY ./deploy/nginx.conf /etc/nginx/nginx.conf -COPY ./deploy/nginx /etc/nginx/conf.d -COPY ./deploy/entrypoint.py /entrypoint.py - -COPY --from=0 /build/dist /install -RUN pip install -- /install/*.whl gunicorn honcho && \ - rm -rf ~/.cache/pip - -ENV UCAST_WORKDIR=/ucast - -EXPOSE 8001 -ENTRYPOINT /entrypoint.py diff --git a/deploy/build.sh b/deploy/build.sh deleted file mode 100755 index d3138a4..0000000 --- a/deploy/build.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/sh -set -e -# Source: https://danmanners.com/posts/2022-01-buildah-multi-arch/ - -# Set your manifest name -export MANIFEST_NAME="ucast" - -# Set the required variables -export BUILD_PATH="." -export DOCKERFILE="deploy/Dockerfile" -export REGISTRY="registry.hub.docker.com" -export USER="thetadev256" -export IMAGE_NAME="ucast" -export IMAGE_TAG="v0.3.2" - -# Create a multi-architecture manifest -buildah manifest create ${MANIFEST_NAME} - -# Build your amd64 architecture container -buildah bud \ - --tag "${REGISTRY}/${USER}/${IMAGE_NAME}:${IMAGE_TAG}" \ - --manifest ${MANIFEST_NAME} \ - --arch amd64 \ - --build-arg TARGETPLATFORM=linux/amd64 \ - -f ${DOCKERFILE} \ - ${BUILD_PATH} - -# Build your arm64 architecture container -buildah bud \ - --tag "${REGISTRY}/${USER}/${IMAGE_NAME}:${IMAGE_TAG}" \ - --manifest ${MANIFEST_NAME} \ - --arch arm64 \ - --build-arg TARGETPLATFORM=linux/arm64 \ - -f ${DOCKERFILE} \ - ${BUILD_PATH} - -# Push the full manifest, with both CPU Architectures -buildah manifest push --all \ - ${MANIFEST_NAME} \ - "docker://${REGISTRY}/${USER}/${IMAGE_NAME}:${IMAGE_TAG}" - -buildah manifest push --all \ - ${MANIFEST_NAME} \ - "docker://${REGISTRY}/${USER}/${IMAGE_NAME}" diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 24d889a..33388e4 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -1,21 +1,7 @@ version: "3" services: - ucast: - image: thetadev256/ucast - user: 1000:1000 - restart: unless-stopped - ports: - - "8001:8001" - volumes: - - "../_run:/ucast" - environment: - UCAST_REDIS_URL: "redis://redis:6379" - UCAST_SECRET_KEY: "django-insecure-Es/+plApGxNBy8+ewB+74zMlmfV2H3whw6gu7i0ESwGrEWAUYRP3HM2EX0PLr3UJ" - UCAST_ALLOWED_HOSTS: ".localhost,127.0.0.1" - UCAST_N_WORKERS: 2 - UCAST_TZ: "Europe/Berlin" - redis: - container_name: redis + container_name: ucast-redis image: redis:alpine - restart: unless-stopped + ports: + - "127.0.0.1:6379:6379" diff --git a/deploy/docker-compose_develop.yml b/deploy/docker-compose_develop.yml deleted file mode 100644 index 6d19e56..0000000 --- a/deploy/docker-compose_develop.yml +++ /dev/null @@ -1,14 +0,0 @@ -version: "3" -services: - redis: - container_name: redis - image: redis:alpine - ports: - - "127.0.0.1:6379:6379" - - nginx: - image: nginx:1 - network_mode: "host" - volumes: - - "./nginx:/etc/nginx/conf.d:ro" - - "../_run:/ucast:ro" diff --git a/deploy/entrypoint.py b/deploy/entrypoint.py deleted file mode 100755 index a4f31c5..0000000 --- a/deploy/entrypoint.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python -import os -import subprocess -import sys - -from honcho import manager - - -def run_cmd(cmd): - returncode = subprocess.call(cmd) - if returncode != 0: - sys.exit(returncode) - - -n_workers = int(os.environ.get("UCAST_N_WORKERS", "1")) - -run_cmd(["ucast-manage", "collectstatic", "--noinput"]) -run_cmd(["ucast-manage", "migrate"]) - -m = manager.Manager() -m.add_process("ucast", "gunicorn ucast_project.wsgi") -m.add_process("nginx", "nginx") - -for i in range(n_workers): - m.add_process(f"worker_{i}", "ucast-manage rqworker") - -m.add_process("scheduler", "ucast-manage rqscheduler") - -m.loop() -sys.exit(m.returncode) diff --git a/deploy/nginx.conf b/deploy/nginx.conf deleted file mode 100644 index ffddd64..0000000 --- a/deploy/nginx.conf +++ /dev/null @@ -1,61 +0,0 @@ -worker_processes auto; -daemon off; -pid /tmp/nginx.pid; -include /etc/nginx/modules-enabled/*.conf; - -events { - worker_connections 768; - # multi_accept on; -} - -http { - - ## - # Basic Settings - ## - - sendfile on; - tcp_nopush on; - types_hash_max_size 2048; - # server_tokens off; - - # server_names_hash_bucket_size 64; - # server_name_in_redirect off; - - include /etc/nginx/mime.types; - default_type application/octet-stream; - - ## - # SSL Settings - ## - - ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE - ssl_prefer_server_ciphers on; - - ## - # Logging Settings - ## - - access_log off; - error_log stderr; - - ## - # Gzip Settings - ## - - gzip on; - - # gzip_vary on; - # gzip_proxied any; - # gzip_comp_level 6; - # gzip_buffers 16 8k; - # gzip_http_version 1.1; - # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; - - ## - # Virtual Host Configs - ## - - include /etc/nginx/conf.d/*.conf; - include /etc/nginx/sites-enabled/*; -} diff --git a/deploy/nginx/ucast.conf b/deploy/nginx/ucast.conf deleted file mode 100644 index 7c037f7..0000000 --- a/deploy/nginx/ucast.conf +++ /dev/null @@ -1,26 +0,0 @@ -server { - listen 8001; - server_name localhost; - - client_max_body_size 1M; - - # serve media files - location /static/ { - alias /ucast/static/; - } - - location /internal_files/ { - internal; - alias /ucast/data/; - } - - location / { - proxy_set_header Host $http_host; - proxy_pass http://127.0.0.1:8000; - } - - # location /errors/ { - # alias /etc/nginx/conf.d/errorpages/; - # internal; - # } -} diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 4da8e6b..0000000 --- a/docs/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/.tox -/build -/venv diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index ed88099..0000000 --- a/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = . -BUILDDIR = build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/_latex/hsastyle.sty b/docs/_latex/hsastyle.sty deleted file mode 100644 index b8adc0e..0000000 --- a/docs/_latex/hsastyle.sty +++ /dev/null @@ -1,108 +0,0 @@ -\usepackage[absolute]{textpos} -\usepackage{setspace} - -\newcommand{\hsamaketitle}{% - \let\sphinxrestorepageanchorsetting\relax - \ifHy@pageanchor\def\sphinxrestorepageanchorsetting{\Hy@pageanchortrue}\fi - \hypersetup{pdfauthor={\@author}, - pdftitle={\@title}, - pdfsubject={\subtitle}, - pdfkeywords={Forschung, Entwicklung, Informatik}, - } - \hypersetup{pageanchor=false}% avoid duplicate destination warnings - \begin{titlepage} - % Deckblatt - Hochschule Augsburg - \thispagestyle{empty}\null - % Logo - Hochschule Augsburg - Informatik - \begin{textblock}{10}(8.0,1.1) - \begin{figure}[h] - \centering - \includegraphics[width=0.45\textwidth]{hsa_informatik_logo_lq.pdf} - \end{figure} - - \end{textblock} - - % Text unter Logo - \begin{textblock}{15}(12.43,2.4) - \LARGE - \textsf{ - \textbf{\textcolor[rgb]{1,0.41,0.13}{\\ - \begin{flushleft} - Fakultät für\\ - Informatik\\ - \end{flushleft} - } - } - } - \end{textblock} - - % Textbox links - Informationen - \begin{textblock}{15}(2,2) - %\LARGE - \begin{flushleft} - \begin{spacing} {1.2} - \huge - \textbf{\@title} - \vspace{30pt} - \textcolor[rgb]{1,0.41,0.13}{\\ - \textbf{\subtitle}}\\ - \vspace{60pt} - \LARGE - Studienrichtung\\ - \hscourse\\ - \vspace{30pt} - \@author\\ - \vspace{60pt} - \LARGE - Prüfer: \examiner\\ - \vspace{10pt} - Abgabedatum: \deadline\\ - \end{spacing} - \end{flushleft} - - \end{textblock} - - - - % Textbox rechts - Hochschule - \begin{textblock}{5}(12.45,8.0) - \textcolor[rgb]{1,0,0}{\\ - \footnotesize - \begin{flushleft} - \begin{spacing} {1.3} - Hochschule f\"ur angewandte\\ - Wissenschaften Augsburg\\ - \vspace{4pt} - An der Hochschule 1\\ - D-86161 Augsburg\\ - \vspace{4pt} - Telefon +49 821 55 86-0\\ - Fax +49 821 55 86-3222\\ - www.hs-augsburg.de\\ - info(at)hs-augsburg-de - \end{spacing} - \end{flushleft} - } - \end{textblock} - - - % Textbox rechts mitte - Fakultät - \begin{textblock}{5}(12.45,11.4) - \footnotesize - \begin{flushleft} - \begin{spacing} {1.3} - Fakult\"at f\"ur Informatik\\ - Telefon +49 821 55 86-3450\\ - Fax \hspace{10pt} +49 821 55 86-3499\\ - \end{spacing} - \end{flushleft} - \end{textblock} - \end{titlepage}% - \setcounter{footnote}{0}% - \let\thanks\relax\let\maketitle\relax - %\gdef\@thanks{}\gdef\@author{}\gdef\@title{} - \clearpage - \ifdefined\sphinxbackoftitlepage\sphinxbackoftitlepage\fi - \if@openright\cleardoublepage\else\clearpage\fi - \sphinxrestorepageanchorsetting -} diff --git a/docs/_latex/logos/hsa_informatik_logo_lq.pdf b/docs/_latex/logos/hsa_informatik_logo_lq.pdf deleted file mode 100755 index 9e8d281..0000000 Binary files a/docs/_latex/logos/hsa_informatik_logo_lq.pdf and /dev/null differ diff --git a/docs/_latex/logos/hsa_logo_horizontal.pdf b/docs/_latex/logos/hsa_logo_horizontal.pdf deleted file mode 100755 index 5bf998c..0000000 Binary files a/docs/_latex/logos/hsa_logo_horizontal.pdf and /dev/null differ diff --git a/docs/_latex/logos/hsa_logo_only.pdf b/docs/_latex/logos/hsa_logo_only.pdf deleted file mode 100755 index 8d50990..0000000 Binary files a/docs/_latex/logos/hsa_logo_only.pdf and /dev/null differ diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index a53c1a1..0000000 --- a/docs/conf.py +++ /dev/null @@ -1,92 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('../code')) - - -# -- Project information ----------------------------------------------------- - -project = "Ucast" -subtitle = "Projektarbeit Webtechnologien" -author = "Thomas Hampp" -copyright = "2022 " + author - -examiner = "Fabian Ziegler" -deadline = "09.07.2022" -course = "Master Informatik" - - -# -- General configuration --------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - "sphinxcontrib.cairosvgconverter", -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = "de" - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = [".tox"] - -# Pygments-Styling used for code syntax highlighting. -# See this page for an overview of all styles including live demo: -# https://pygments.org/demo/ -pygments_style = "vs" - - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = "sphinx_rtd_theme" - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] - -# -- Options for PDF output ------------------------------------------------- -latex_engine = "xelatex" -# latex_theme = 'hsathesis' -latex_elements = { - "extraclassoptions": "openany,oneside", - "preamble": r""" -\usepackage{hsastyle} - -\newcommand\subtitle{%s} -\newcommand\deadline{%s} -\newcommand\examiner{%s} -\newcommand\hscourse{%s} -""" - % (subtitle, deadline, examiner, course), - "maketitle": r"\hsamaketitle", -} - -latex_additional_files = [ - "_latex/logos/hsa_informatik_logo_lq.pdf", - "_latex/hsastyle.sty", -] diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index e7791d1..0000000 --- a/docs/index.rst +++ /dev/null @@ -1,9 +0,0 @@ -Ucast -##### - -.. toctree:: - :maxdepth: 2 - :caption: Inhalt: - :glob: - - src/* diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index 58a517b..0000000 --- a/docs/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -Sphinx==4.4.0 -sphinx-autobuild -sphinx-rtd-theme -sphinxcontrib-svg2pdfconverter[CairoSVG] diff --git a/docs/src/0_intro.rst b/docs/src/0_intro.rst deleted file mode 100644 index 471db95..0000000 --- a/docs/src/0_intro.rst +++ /dev/null @@ -1,245 +0,0 @@ -Einleitung -########## - -Bei den meisten YouTube-Videos, die ich mir anschaue, handelt es sich um -Nachrichten oder Kommentarvideos. Da diese Videos sehr textlastig sind, -spiele ich sie oft im Hintergrund ab und arbeite währenddessen an meinen Projekten. - -Unterwegs habe ich aber keine Möglichkeit, YouTube-Videos im Hintergrund -abzuspielen, da die YouTube-App im Hintergrund die Wiedergabe unterbricht. -Es ist zwar möglich, YouTube-Videos mit entsprechenden Webdiensten herunterzuladen, -dies ist aber relativ unkomfortabel. - -Deshalb höre ich unterwegs häufiger Podcasts, die mit entsprechenden Apps -(ich benutze AntennaPod) sowohl gestreamt als auch offline aufs Handy geladen werden -können. - -Ich habe dann überlegt, ob es möglch wäre, YouTube-Kanäle automatisch in Podcasts -umzuwandeln. So kam ich auf die Idee, einen Server zu entwickeln, -der YouTube-Videos automatisch als MP3-Dateien herunterlädt und im Podcast-Format -bereitstellt. Auf diese Weise kann man sich die Audioinhalte von YouTube sowohl -am PC als auch unterwegs mit einer Podcast-App anhören. - -Technik -####### - -Webframework -************ - -Ich habe ucast mit dem Webframework Django entwickelt. Django hat den Vorteil, -das es grundlegende Funktionen von Webanwendungen wie ein Login-System bereits -implementiert hat. Dadurch konnte ich mich schneller auf die eigentlichen Features -meiner Anwendung konzentrieren. - - -YouTube-Downloading -******************* - -Zum Herunterladen von Videos wird die Python-Library -`yt-dlp `_ verwendet. -Diese Library kann Videos von YouTube und diversen anderen Videoplattformen -herunterladen und mithilfe von ffmpeg ins MP3-Format konvertieren. - -Yt-dlp benötigt den Link oder die YouTube-ID eines Videos, um es herunterladen zu können. -Deswegen wird zusätzlich eine Möglichkeit benötigt, die aktuellen Videos eines -Kanals und dessen Metadaten (Profilbild, Beschreibung) abzurufen. - -Hierfür gibt es zwei Möglichkeiten: -erstens Scraping der YouTube-Webseite und zweitens YouTube's eigene RSS-Feeds. - -YouTube stellt für jeden Kanal einen RSS-Feed unter der Adresse -``https://www.youtube.com/feeds/videos.xml?channel_id=`` bereit. -Der Feed listet allerdings nur die letzten 15 Videos eines Kanals auf. -Um ältere Videos sowie die Metadaten eines Kanals abrufen -zu können, muss die YouTube-Webseite aufgerufen und geparsed werden. Hierfür habe ich -die ``scrapetube``-Library als Grundlage verwendet und um eine Methode zum Abrufen -von Kanalinformationen erweitert. - - -Task-Queue -********** - -Ucast muss regelmäßig die abonnierten Kanäle abrufen und Videos herunterladen. -Hier kommt eine `Task-Queue `_ -zum Einsatz. Die Webanwendung kann neue Tasks in die -Queue einreihen, die dann im Hintergrund von Workern ausgeführt werden. -Mit einem Scheduler ist es auch möglich, periodisch (bspw. alle 15 Minuten) -Tasks auszuführen. - -Die Queue benötigt eine Möglichkeit, Daten zwischen der Anwendung und den Workern -auszutauschen. Hier kommt eine Redis-Datenbank zum Einsatz. - - -Frontend -******** - -Da Ucast keine komplexen Funktionen auf der Clientseite bereitstellen muss, -wird das Frontend mithilfe von Django-Templates serverseitig gerendert und es -wurde auf ein Frontend-Framework verzichtet. Als CSS-Framework habe ich Bulma -verwendet, was eine Bibliothek von Komponenten bereitstellt. Bulma ist in Sass -geschrieben, wodurch es einfach an ein gewünschtes Designsthema angepasst werden kann. - -Komplett auf Javascript verzichtet habe ich jedoch nicht. -Beispielsweise habe ich ``clipboard.js`` verwendet, um die Feed-URLs mit Klick auf einen -Button kopieren zu können. - -Das endlose Scrolling auf den Videoseiten habe ich mit ``htmx`` umgesetzt, einer -JS-Library, mit der man dynamisch Webinhalte nachladen kann, ohne dafür eigenen -JS-Code zu schreiben. - - -Inbetriebnahme -############## - -Docker-Compose -************** - -Ucast ist als Docker-Image mit dem Namen -`thetadev256/ucast `_ verfügbar. -Eine docker-compose-Datei mit einer Basiskonfiguration befindet sich im -Projektordner unter ``deploy/docker-compose.yml``. Um Ucast zu starten, müssen -die folgenden Befehle ausgeführt werden. - -.. code-block:: sh - - mkdir _run # Arbeitsverzeichnis erstellen - docker-compose -f deploy/docker-compose.yml up -d # Anwendung starten - docker exec -it ucast-ucast-1 ucast-manage createsuperuser # Benutzerkonto anlegen - -Die Weboberfläche ist unter http://127.0.0.1:8001 erreichbar. - -Konfiguration -************* - -Die Konfiguration erfolgt durch Umgebungsvariablen. Alle Umgebungsvariablen -sind mit dem Präfix ``UCAST_`` zu versehen (z.B. ``UCAST_DEBUG``). - -**DEBUG** - `Debug-Modus `_ von Django aktivieren. - Standard: ``false`` - -**ALLOWED_HOSTS** - Erlaubte `Hosts/Domains `_. - Beispiel: ``"ucast.thetadev.de"`` - -**DB_ENGINE** - Verwendete Datenbanksoftware (``sqlite`` / ``mysql`` / ``postgresql``). - Standard: ``sqlite`` - -**DB_NAME** - Name der Datenbank. Standard: ``db`` - -**DB_HOST** - Adresse der Datenbank. Standard: ``127.0.0.1`` - -**DB_PORT** - Port der Datenbank. Standard: 3306 (mysql), 5432 (postgresql) - -**DB_USER**, **DB_PASS** - Benutzername/Passwort für die Datenbank - -**WORKDIR** - Hauptverzeichnis für Ucast (Siehe Verzeichnisstruktur). - Standard: aktuelles Arbeitsverzeichnis - -**STATIC_ROOT** - Ordner für statische Dateien (``WORKDIR/static``) - -**DOWNLOAD_ROOT** - Ordner für heruntergeladene Bilder und Audiodateien (``WORKDIR/data``) - -**CACHE_ROOT** - Ordner für temporäre Dateien (``{WORKDIR}/cache``) - -**DB_DIR** - Ordner für die SQLite-Datenbankdatei (``{WORKDIR}/db``) - -**TZ** - Zeitzone. Standard: Systemeinstellung - -**REDIS_URL** - Redis-Addresse. Standard: ``redis://localhost:6379`` - -**REDIS_QUEUE_TIMEOUT** - Timeout für gestartete Jobs [s]. Standard: 600 - -**REDIS_QUEUE_RESULT_TTL** - Speicherdauer für abgeschlossene Tasks [s]. Standard: 600 - -**YT_UPDATE_INTERVAL** - Zeitabstand, in dem die YouTube-Kanäle abgerufen werden [s]. - Standard: 900 - -**FEED_MAX_ITEMS** - Maximale Anzahl Videos, die in den Feeds enthalten sind. - Standard: 50 - -**N_WORKERS** - Anzahl an Worker-Prozessen, die gestartet werden sollen - (nur im Docker-Container verfügbar). - Standard: 1 - - -Verzeichnisstruktur -******************* - -Ucast erstellt in seinem Arbeitsverzeichnis vier Unterordner, in denen die -Daten der Anwendung abgelegt werden. - -.. code-block:: txt - - - workdir - |_ cache Temporäre Dateien - |_ data Heruntergeladene Medien - |_ db SQLite-Datenbank - |_ static Statische Websitedaten - - -Bedienung -######### - -Nach dem Login kommt man auf die Übersichtsseite, auf der alle abonnierten -Kanäle aufgelistet werden. Um einen neuen Kanal zu abonnieren, muss die YouTube-URL -(z.B. https://youtube.com/channel/UCGiJh0NZ52wRhYKYnuZI08Q) -in das Eingabefeld kopiert werden. - -Wurde ein neuer Kanal hinzugefügt, beginnt ucast damit, die neuesten 15 Videos -herunterzuladen. Um zu überprüfen, welche Videos momentan heruntergeladen werden, -kann man auf die *Downloads*-Seite gehen. Auf dieser Seite werden auch fehlgeschlagene -Downloadtasks aufgelistet, die auch manuell wiederholt werden können (bspw. nach einem -Ausfall der Internetverbindung). Es gibt auch eine Suchfunktion, mit der man nach -einem Video mit einem bestimmten Titel suchen kann. - -Um die abonnierten Kanäle zu seinem Podcast-Client hinzuzufügen, kann man die -Feed-URL auf der Übersichtsseite einfach kopieren und einfügen. - -Die meisten Podcast-Clients bieten zudem eine Funktion zum Import von OPML-Dateien an. -In diesem Fall kann man einfach auf den Link *Download OPML* unten auf der Seite -klicken und die heruntergeladen Datei importieren. Auf diese Weise hat man schnell -alle abonnierten Kanäle zu seinem Podcast-Client hinzugefügt. - - -Fazit -##### - -Ich betreibe Ucast seit einer Woche auf meiner NAS -und verwende es, um mir Videos sowohl am Rechner als auch unterwegs anzuhören. - -In den ersten Tagen habe ich noch einige Bugs festgestellt, die beseitigt werden -mussten. Beispielsweise liegen nicht alle YouTube-Thumbnails im 16:9-Format vor, -weswegen sie zugeschnitten werden müssen, um das Layout der Webseite nicht zu -verschieben. - -Am Anfang habe ich geplant, `SponsorBlock `_ in Ucast -zu integrieren, um Werbeinhalte aus den Videos zu entfernen. Yt-dlp hat dieses -Feature bereits integriert. Allerdings basiert Sponsorblock auf einer von der -Community verwalteten Datenbank, d.h. je nach Beliebtheit des Videos dauert es -zwischen einer halben und mehreren Stunden nach Release, bis Markierungen verfügbar -sind. Damit Sponsorblock zuverlässig funktioniert, müsste Ucast regelmäßig nach dem -Release des Videos die Datenbank abfragen und das Video bei Änderungen erneut -herunterladen und zuschneiden. Dies war mir zunächst zu komplex und ich habe mich -dazu entschieden, das Feature erst in Zukunft umzusetzen. - -Ein weiteres Feature, das ich in Zukunft umsetzen werde, -ist die Unterstützung von alternativen Videoplattformen wie Peertube, -Odysee und Bitchute. diff --git a/docs/tox.ini b/docs/tox.ini deleted file mode 100644 index 7023946..0000000 --- a/docs/tox.ini +++ /dev/null @@ -1,20 +0,0 @@ -[tox] -skipsdist = True -envlist = - html - pdf - -[testenv] -description = Dokumentation bauen -deps = -r{toxinidir}/requirements.txt - -[testenv:html] -commands = sphinx-build -b html -d build/doctrees . build/html - -[testenv:pdf] -allowlist_externals = make -commands = make latexpdf - -[testenv:live] -description = Live update mit sphinx-autobuild -commands = sphinx-autobuild . build/html --open-browser diff --git a/manage.py b/manage.py deleted file mode 120000 index b71322b..0000000 --- a/manage.py +++ /dev/null @@ -1 +0,0 @@ -ucast_project/manage.py \ No newline at end of file diff --git a/notes/Coverbilder.md b/notes/Coverbilder.md index c5ff94a..18bba24 100644 --- a/notes/Coverbilder.md +++ b/notes/Coverbilder.md @@ -1,14 +1,6 @@ # Coverbilder -Podcast-Cover sind quadratisch, während YT-Thumbnails das Seitenverhältnis -16:9 haben. Da Thumbnails häufig Textelemente beinhalten, ist es nicht -vorteilhaft, das Thumbnail einfach quadratisch zuzuschneiden. - -Stattdessen sollte Ucast das Thumbnail nach oben und unten farblich -passend erweitern und den Videotitel und Kanalnamen einfügen. - -![](../tests/testfiles/thumbnail/t2.webp) -![](../tests/testfiles/cover/c2.png) +Podcast-Cover sind quadratisch. - Durchschnittliche Farbe der oberen und unteren 20% des Bilds berechnen - Farbverlauf zwischen diesen Farben als Hintergrund verwenden diff --git a/notes/Feed.md b/notes/Feed.md deleted file mode 100644 index 6c5e79b..0000000 --- a/notes/Feed.md +++ /dev/null @@ -1,34 +0,0 @@ -Django-Klasse: `django.utils.feedgenerator.Rss201rev2Feed` - -### Channel-Attribute - -| Tag | Beschreibung | Django-Attribut | -|--------------------------------------|-----------------------------------------|----------------------| -| `\` | Feed-URL | `feed_url` | -| `\` | Kanalname | `title` | -| `\<language>` | Sprache | `language` | -| `\<lastBuildDate>` | Datum der letzten Veränderung des Feeds | `latest_post_date()` | -| `\<description>` | Kanalbeschreibung | `description` | -| `\<link>` | Link zum Kanal | `link` | -| `\<copyright>` | Autor | `feed_copyright` | -| `\<image><url><title><link></image>` | Cover-URL / Kanalname / Link | - | -| `\<itunes:image href="">` | Cover-URL | - | -| `\<itunes:author>` | Autor | - | -| `\<itunes:summary>` | Kanalbeschreibung | - | - - -### Item-Attribute - -| Tag | Beschreibung | Django-Attribut | -|--------------------------------------------------|------------------------|-----------------| -| `\<title>` | Titel | `title` | -| `\<itunes:title>` | Titel | - | -| `\<description>` | Beschreibung | `description` | -| `\<pubDate>` | Veröffentlichungsdatum | `pubdate` | -| `\<link>` | Link | `link` | -| `\<guid>` | Eindeutige ID/ | `unique_id` | -| `\<itunes:summary>` | Bechreibung | - | -| `\<itunes:author>` | Autor | - | -| `\<enclosure url="" type="audio/mpeg" length=1>` | Audiodatei | `enclosures ` | -| `\<itunes:duration>00:40:35</itunes:duration>` | Dauer | - | -| `\<itunes:image href="">` | Cover-URL | - | diff --git a/notes/Speicher.md b/notes/Speicher.md index 215bb94..2702592 100644 --- a/notes/Speicher.md +++ b/notes/Speicher.md @@ -3,54 +3,71 @@ ## Verzeichnisstruktur ```txt +_ config + |_ config.py _ data |_ LinusTechTips - |_ _ucast - |_ avatar.jpg # Profilbild des Kanals - |_ avatar_sm.webp - |_ covers # Cover-Bilder - |_ 220409_Building_a_1_000_000_Computer.png - |_ 220410_Apple_makes_GREAT_Gaming_Computers.png - |_ thumbnails - |_ 220409_Building_a_1_000_000_Computer.webp - |_ 220409_Building_a_1_000_000_Computer_sm.webp - |_ 220410_Apple_makes_GREAT_Gaming_Computers.webp - |_ 220410_Apple_makes_GREAT_Gaming_Computers_sm.webp - |_ 220409_Building_a_1_000_000_Computer.mp3 - |_ 220410_Apple_makes_GREAT_Gaming_Computers.mp3 + | |_ .ucast + | | |_ videos.json # IDs und Metadaten aller heruntergeladenen Videos + | | |_ options.json # Kanalspezifische Optionen (ID, enabled) + | | |_ avatar.png # Profilbild des Kanals + | | |_ feed.xml # RSS-Feed + | | |_ covers # Cover-Bilder + | | |_ 220409_Building a _1_000_000 Computer.png + | | |_ 220410_Apple makes GREAT Gaming Computers.png + | |_ 220409_Building a _1_000_000 Computer.mp3 + | |_ 220410_Apple makes GREAT Gaming Computers.mp3 + | + |_ Andreas Spiess + |_ ... +``` +## Verzeichnisstruktur (mit Datenbank) + +```txt +_ config + |_ config.py +_ data + |_ ucast.db + | + |_ LinusTechTips + | |_ .ucast + | | |_ avatar.png # Profilbild des Kanals + | | |_ feed.xml # RSS-Feed + | | |_ covers # Cover-Bilder + | | |_ 220409_Building a _1_000_000 Computer.png + | | |_ 220410_Apple makes GREAT Gaming Computers.png + | |_ 220409_Building a _1_000_000 Computer.mp3 + | |_ 220410_Apple makes GREAT Gaming Computers.mp3 + | |_ Andreas Spiess |_ ... ``` ## Datenmodelle -### LastScan - -- LastScan: datetime - -### ChannelOptions - -- ID: `str, max_length=30` -- Active: `bool = True` -- LastScan: `datetime` -- SkipLivestreams: `bool = True` -- SkipShorts: `bool = True` -- KeepVideos: `int, nullable` -- Videos: `-> Video (1->n)` +### Channel +- ID: str, VARCHAR(30), PKEY +- Name: str, VARCHAR(100) +- Active: bool = True +- SkipLivestreams: bool = True +- SkipShorts: bool = True +- KeepVideos: int = -1 ### Video -- ID: `str, max_length=30` -- Title: `str, max_length=200` -- Slug: `str, max_length=209` (YYYYMMDD_Title, used as filename) -- Published: `datetime` -- Downloaded: `datetime, nullable` -- Description: `text` +- ID: str, VARCHAR(30), PKEY +- Channel: -> Channel.ID +- Title: str, VARCHAR(200) +- Slug: str (YYYYMMDD_Title, used as filename), VARCHAR(209) +- Published: datetime +- Downloaded: datetime +- Description: str, VARCHAR(1000) ### Config - RedisURL: str - ScanInterval: 1h +- DefaultChannelOptions: ChannelOptions - AppriseUrl: str (für Benachrichtigungen, https://github.com/caronc/apprise/wiki) diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 527e11a..0000000 --- a/package-lock.json +++ /dev/null @@ -1,1899 +0,0 @@ -{ - "name": "ucast", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "ucast", - "license": "MIT", - "dependencies": { - "bulma": "^0.9.4" - }, - "devDependencies": { - "autoprefixer": "^10.4.7", - "clean-css-cli": "^5.6.0", - "postcss": "^8.4.13", - "postcss-cli": "^9.1.0", - "rimraf": "^3.0.2", - "sass": "^1.51.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", - "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.20.3", - "caniuse-lite": "^1.0.30001335", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.20.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", - "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001349", - "electron-to-chromium": "^1.4.147", - "escalade": "^3.1.1", - "node-releases": "^2.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bulma": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.9.4.tgz", - "integrity": "sha512-86FlT5+1GrsgKbPLRRY7cGDg8fsJiP/jzTqXXVqiUZZ2aZT8uemEOHlU1CDU+TxklPEZ11HZNNWclRBBecP4CQ==" - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001358", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", - "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/clean-css": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz", - "integrity": "sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css-cli": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/clean-css-cli/-/clean-css-cli-5.6.0.tgz", - "integrity": "sha512-68vorNEG808D1QzeerO9AlwQVTuaR8YSK4aqwIsjJq0wDSyPH11ApHY0O+EQrdEGUZcN+d72v+Nn/gpxjAFewQ==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "clean-css": "^5.3.0", - "commander": "7.x", - "glob": "^7.1.6" - }, - "bin": { - "cleancss": "bin/cleancss" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.164", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.164.tgz", - "integrity": "sha512-K7iy5y6XyP9Pzh3uaDti0KC4JUNT6T1tLG5RTOmesqq2YgAJpYYYJ32m+anvZYjCV35llPTEh87kvEV/uSsiyQ==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-stdin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", - "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", - "dev": true, - "dependencies": { - "array-union": "^3.0.1", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.7", - "ignore": "^5.1.9", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-cli": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-9.1.0.tgz", - "integrity": "sha512-zvDN2ADbWfza42sAnj+O2uUWyL0eRL1V+6giM2vi4SqTR3gTYy8XzcpfwccayF2szcUif0HMmXiEaDv9iEhcpw==", - "dev": true, - "dependencies": { - "chokidar": "^3.3.0", - "dependency-graph": "^0.11.0", - "fs-extra": "^10.0.0", - "get-stdin": "^9.0.0", - "globby": "^12.0.0", - "picocolors": "^1.0.0", - "postcss-load-config": "^3.0.0", - "postcss-reporter": "^7.0.0", - "pretty-hrtime": "^1.0.3", - "read-cache": "^1.0.0", - "slash": "^4.0.0", - "yargs": "^17.0.0" - }, - "bin": { - "postcss": "index.js" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-reporter": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz", - "integrity": "sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==", - "dev": true, - "dependencies": { - "picocolors": "^1.0.0", - "thenby": "^1.3.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/sass": { - "version": "1.52.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.52.3.tgz", - "integrity": "sha512-LNNPJ9lafx+j1ArtA7GyEJm9eawXN8KlA1+5dF6IZyoONg1Tyo/g+muOsENWJH/2Q1FHbbV4UwliU0cXMa/VIA==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/thenby": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", - "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true, - "engines": { - "node": ">=12" - } - } - }, - "dependencies": { - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", - "dev": true - }, - "autoprefixer": { - "version": "10.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", - "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", - "dev": true, - "requires": { - "browserslist": "^4.20.3", - "caniuse-lite": "^1.0.30001335", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.20.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", - "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001349", - "electron-to-chromium": "^1.4.147", - "escalade": "^3.1.1", - "node-releases": "^2.0.5", - "picocolors": "^1.0.0" - } - }, - "bulma": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.9.4.tgz", - "integrity": "sha512-86FlT5+1GrsgKbPLRRY7cGDg8fsJiP/jzTqXXVqiUZZ2aZT8uemEOHlU1CDU+TxklPEZ11HZNNWclRBBecP4CQ==" - }, - "caniuse-lite": { - "version": "1.0.30001358", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", - "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "clean-css": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz", - "integrity": "sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-css-cli": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/clean-css-cli/-/clean-css-cli-5.6.0.tgz", - "integrity": "sha512-68vorNEG808D1QzeerO9AlwQVTuaR8YSK4aqwIsjJq0wDSyPH11ApHY0O+EQrdEGUZcN+d72v+Nn/gpxjAFewQ==", - "dev": true, - "requires": { - "chokidar": "^3.5.2", - "clean-css": "^5.3.0", - "commander": "7.x", - "glob": "^7.1.6" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "electron-to-chromium": { - "version": "1.4.164", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.164.tgz", - "integrity": "sha512-K7iy5y6XyP9Pzh3uaDti0KC4JUNT6T1tLG5RTOmesqq2YgAJpYYYJ32m+anvZYjCV35llPTEh87kvEV/uSsiyQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stdin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", - "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", - "dev": true, - "requires": { - "array-union": "^3.0.1", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.7", - "ignore": "^5.1.9", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - }, - "postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "dev": true, - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-cli": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-9.1.0.tgz", - "integrity": "sha512-zvDN2ADbWfza42sAnj+O2uUWyL0eRL1V+6giM2vi4SqTR3gTYy8XzcpfwccayF2szcUif0HMmXiEaDv9iEhcpw==", - "dev": true, - "requires": { - "chokidar": "^3.3.0", - "dependency-graph": "^0.11.0", - "fs-extra": "^10.0.0", - "get-stdin": "^9.0.0", - "globby": "^12.0.0", - "picocolors": "^1.0.0", - "postcss-load-config": "^3.0.0", - "postcss-reporter": "^7.0.0", - "pretty-hrtime": "^1.0.3", - "read-cache": "^1.0.0", - "slash": "^4.0.0", - "yargs": "^17.0.0" - } - }, - "postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "requires": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - } - }, - "postcss-reporter": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz", - "integrity": "sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==", - "dev": true, - "requires": { - "picocolors": "^1.0.0", - "thenby": "^1.3.4" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "requires": { - "pify": "^2.3.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "sass": { - "version": "1.52.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.52.3.tgz", - "integrity": "sha512-LNNPJ9lafx+j1ArtA7GyEJm9eawXN8KlA1+5dF6IZyoONg1Tyo/g+muOsENWJH/2Q1FHbbV4UwliU0cXMa/VIA==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "thenby": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", - "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 120bf40..0000000 --- a/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "ucast", - "license": "MIT", - "author": { - "name": "ThetaDev", - "email": "t.testboy@gmail.com" - }, - "description": "YouTube to Podcast converter", - "private": true, - "dependencies": { - "bulma": "^0.9.4" - }, - "devDependencies": { - "autoprefixer": "^10.4.7", - "clean-css-cli": "^5.6.0", - "postcss": "^8.4.13", - "postcss-cli": "^9.1.0", - "rimraf": "^3.0.2", - "sass": "^1.51.0" - }, - "scripts": { - "build": "npm run build-clean && npm run build-sass && npm run build-autoprefix && npm run build-cleancss", - "build-autoprefix": "postcss --use autoprefixer --map false --output ucast/static/bulma/css/style.css ucast/static/bulma/css/style.css", - "build-cleancss": "cleancss -o ucast/static/bulma/css/style.min.css ucast/static/bulma/css/style.css", - "build-clean": "rimraf ucast/static/bulma/css", - "build-sass": "sass --style expanded --source-map assets/sass/style.sass ucast/static/bulma/css/style.css", - "start": "sass --style expanded --watch assets/sass/style.sass _run/static/bulma/css/style.min.css" - } -} diff --git a/poetry.lock b/poetry.lock index aa2c218..d531411 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,6 +1,38 @@ +[[package]] +name = "alembic" +version = "1.7.7" +description = "A database migration tool for SQLAlchemy." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +Mako = "*" +SQLAlchemy = ">=1.3.0" + +[package.extras] +tz = ["python-dateutil"] + +[[package]] +name = "anyio" +version = "3.5.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "main" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["packaging", "sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"] +test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=6.0)", "pytest-mock (>=3.6.1)", "trustme", "contextlib2", "uvloop (<0.15)", "mock (>=4)", "uvloop (>=0.15)"] +trio = ["trio (>=0.16)"] + [[package]] name = "asgiref" -version = "3.5.2" +version = "3.5.1" description = "ASGI specs, helper code, and adapters" category = "main" optional = false @@ -9,14 +41,6 @@ python-versions = ">=3.7" [package.extras] tests = ["pytest", "pytest-asyncio", "mypy (>=0.800)"] -[[package]] -name = "async-timeout" -version = "4.0.2" -description = "Timeout context manager for asyncio programs" -category = "main" -optional = false -python-versions = ">=3.6" - [[package]] name = "atomicwrites" version = "1.4.0" @@ -58,25 +82,17 @@ python-versions = "*" [package.dependencies] cffi = ">=1.0.0" -[[package]] -name = "bump2version" -version = "1.0.1" -description = "Version-bump your software with a single command!" -category = "dev" -optional = false -python-versions = ">=3.5" - [[package]] name = "certifi" -version = "2022.6.15" +version = "2021.10.8" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false -python-versions = ">=3.6" +python-versions = "*" [[package]] name = "cffi" -version = "1.15.1" +version = "1.15.0" description = "Foreign Function Interface for Python calling C code." category = "main" optional = false @@ -95,11 +111,11 @@ python-versions = ">=3.6.1" [[package]] name = "charset-normalizer" -version = "2.1.0" +version = "2.0.12" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = ">=3.6.0" +python-versions = ">=3.5.0" [package.extras] unicode_backport = ["unicodedata2"] @@ -117,7 +133,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "colorama" -version = "0.4.5" +version = "0.4.4" description = "Cross-platform colored terminal text." category = "main" optional = false @@ -136,43 +152,18 @@ Pillow = "*" [[package]] name = "coverage" -version = "6.4.1" +version = "6.3.2" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" [package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} +tomli = {version = "*", optional = true, markers = "extra == \"toml\""} [package.extras] toml = ["tomli"] -[[package]] -name = "croniter" -version = "1.3.5" -description = "croniter provides iteration for datetime object with cron like format" -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -python-dateutil = "*" - -[[package]] -name = "deprecated" -version = "1.2.13" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -wrapt = ">=1.10,<2" - -[package.extras] -dev = ["tox", "bump2version (<1)", "sphinx (<2)", "importlib-metadata (<3)", "importlib-resources (<4)", "configparser (<5)", "sphinxcontrib-websupport (<2)", "zipp (<2)", "PyTest (<5)", "PyTest-Cov (<2.6)", "pytest", "pytest-cov"] - [[package]] name = "distlib" version = "0.3.4" @@ -181,65 +172,9 @@ category = "dev" optional = false python-versions = "*" -[[package]] -name = "django" -version = "4.0.6" -description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." -category = "main" -optional = false -python-versions = ">=3.8" - -[package.dependencies] -asgiref = ">=3.4.1,<4" -sqlparse = ">=0.2.2" -tzdata = {version = "*", markers = "sys_platform == \"win32\""} - -[package.extras] -argon2 = ["argon2-cffi (>=19.1.0)"] -bcrypt = ["bcrypt"] - -[[package]] -name = "django-bulma" -version = "0.8.3" -description = "Bulma CSS Framework for Django projects" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -django = ">=2.2" - -[[package]] -name = "django-htmx" -version = "1.12.0" -description = "Extensions for using Django with htmx." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -Django = ">=3.2" - -[[package]] -name = "fakeredis" -version = "1.8.1" -description = "Fake implementation of redis API for testing purposes." -category = "dev" -optional = false -python-versions = ">=3.7,<4.0" - -[package.dependencies] -redis = "<4.4" -six = ">=1.16.0,<2.0.0" -sortedcontainers = ">=2.4.0,<3.0.0" - -[package.extras] -aioredis = ["aioredis (>=2.0.1,<3.0.0)"] -lua = ["lupa (>=1.13,<2.0)"] - [[package]] name = "feedparser" -version = "6.0.10" +version = "6.0.8" description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds" category = "main" optional = false @@ -250,7 +185,7 @@ sgmllib3k = "*" [[package]] name = "filelock" -version = "3.7.1" +version = "3.6.0" description = "A platform independent file lock." category = "dev" optional = false @@ -277,36 +212,27 @@ optional = false python-versions = "*" [[package]] -name = "gunicorn" -version = "20.1.0" -description = "WSGI HTTP Server for UNIX" -category = "dev" +name = "greenlet" +version = "1.1.2" +description = "Lightweight in-process concurrent programming" +category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" [package.extras] -eventlet = ["eventlet (>=0.24.1)"] -gevent = ["gevent (>=1.4.0)"] -setproctitle = ["setproctitle"] -tornado = ["tornado (>=0.2)"] +docs = ["sphinx"] [[package]] -name = "honcho" -version = "1.1.0" -description = "Honcho: a Python clone of Foreman. For managing Procfile-based applications." -category = "dev" +name = "h11" +version = "0.13.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +category = "main" optional = false -python-versions = "*" - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} - -[package.extras] -export = ["jinja2 (>=2.7,<3)"] +python-versions = ">=3.6" [[package]] name = "identify" -version = "2.5.1" +version = "2.5.0" description = "File identification library for Python" category = "dev" optional = false @@ -333,12 +259,58 @@ python-versions = "*" [[package]] name = "invoke" -version = "1.7.1" +version = "1.7.0" description = "Pythonic task execution" category = "dev" optional = false python-versions = "*" +[[package]] +name = "itsdangerous" +version = "2.1.2" +description = "Safely pass data to untrusted environments and back." +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "mako" +version = "1.2.0" +description = "A super-fast templating language that borrows the best ideas from the existing templating languages." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +MarkupSafe = ">=0.9.2" + +[package.extras] +babel = ["babel"] +lingua = ["lingua"] +testing = ["pytest"] + +[[package]] +name = "markupsafe" +version = "2.1.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = false +python-versions = ">=3.7" + [[package]] name = "mutagen" version = "1.45.1" @@ -349,7 +321,7 @@ python-versions = ">=3.5, <4" [[package]] name = "mysqlclient" -version = "2.1.1" +version = "2.1.0" description = "Python interface to MySQL" category = "main" optional = false @@ -357,17 +329,17 @@ python-versions = ">=3.5" [[package]] name = "nodeenv" -version = "1.7.0" +version = "1.6.0" description = "Node.js virtual environment builder" category = "dev" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +python-versions = "*" [[package]] name = "packaging" version = "21.3" description = "Core utilities for Python packages" -category = "main" +category = "dev" optional = false python-versions = ">=3.6" @@ -376,14 +348,14 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [[package]] name = "pillow" -version = "9.2.0" +version = "9.1.0" description = "Python Imaging Library (Fork)" category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] +docs = ["olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinx-rtd-theme (>=1.0)", "sphinxext-opengraph"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] [[package]] @@ -412,7 +384,7 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "2.19.0" +version = "2.18.1" description = "A framework for managing and maintaining multi-language pre-commit hooks." category = "dev" optional = false @@ -452,7 +424,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pycryptodomex" -version = "3.15.0" +version = "3.14.1" description = "Cryptographic library for Python" category = "main" optional = false @@ -460,9 +432,9 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "pyparsing" -version = "3.0.9" +version = "3.0.8" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" +category = "dev" optional = false python-versions = ">=3.6.8" @@ -505,46 +477,6 @@ pytest = ">=4.6" [package.extras] testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] -[[package]] -name = "pytest-django" -version = "4.5.2" -description = "A Django plugin for pytest." -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -pytest = ">=5.4.0" - -[package.extras] -docs = ["sphinx", "sphinx-rtd-theme"] -testing = ["django", "django-configurations (>=2.0)"] - -[[package]] -name = "pytest-mock" -version = "3.8.2" -description = "Thin-wrapper around the mock package for easier use with pytest" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -pytest = ">=5.0" - -[package.extras] -dev = ["pre-commit", "tox", "pytest-asyncio"] - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" - -[package.dependencies] -six = ">=1.5" - [[package]] name = "python-dotenv" version = "0.20.0" @@ -556,6 +488,17 @@ python-versions = ">=3.5" [package.extras] cli = ["click (>=5.0)"] +[[package]] +name = "python-multipart" +version = "0.0.5" +description = "A streaming multipart parser for Python" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +six = ">=1.4.0" + [[package]] name = "python-slugify" version = "6.1.2" @@ -574,69 +517,47 @@ unidecode = ["Unidecode (>=1.1.1)"] name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "redis" -version = "4.3.4" -description = "Python client for Redis database and key-value store" category = "main" optional = false python-versions = ">=3.6" -[package.dependencies] -async-timeout = ">=4.0.2" -deprecated = ">=1.2.3" -packaging = ">=20.4" - -[package.extras] -hiredis = ["hiredis (>=1.0.0)"] -ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] - [[package]] name = "requests" -version = "2.28.1" +version = "2.27.1" description = "Python HTTP for Humans." category = "main" optional = false -python-versions = ">=3.7, <4" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<3" -idna = ">=2.5,<4" +charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} +idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} urllib3 = ">=1.21.1,<1.27" [package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] [[package]] -name = "rq" -version = "1.10.1" -description = "RQ is a simple, lightweight, library for creating background jobs, and processing them." -category = "main" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -click = ">=5.0.0" -redis = ">=3.5.0" - -[[package]] -name = "rq-scheduler" -version = "0.11.0" -description = "Provides job scheduling capabilities to RQ (Redis Queue)" +name = "rfeed" +version = "1.1.1" +description = "Python RSS 2.0 Generator" category = "main" optional = false python-versions = "*" +[[package]] +name = "scrapetube" +version = "2.2.2" +description = "Scrape youtube without the official youtube api and without selenium." +category = "main" +optional = false +python-versions = ">=3.6" + [package.dependencies] -croniter = ">=0.3.9" -python-dateutil = "*" -rq = ">=0.13" +requests = "*" +typing-extensions = "*" [[package]] name = "sgmllib3k" @@ -655,21 +576,108 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] -name = "sortedcontainers" -version = "2.4.0" -description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "sqlparse" -version = "0.4.2" -description = "A non-validating SQL parser." +name = "sniffio" +version = "1.2.0" +description = "Sniff out which async library your code is running under" category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "sqlalchemy" +version = "1.4.36" +description = "Database Abstraction Library" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} + +[package.extras] +aiomysql = ["greenlet (!=0.4.17)", "aiomysql"] +aiosqlite = ["typing_extensions (!=3.10.0.1)", "greenlet (!=0.4.17)", "aiosqlite"] +asyncio = ["greenlet (!=0.4.17)"] +asyncmy = ["greenlet (!=0.4.17)", "asyncmy (>=0.2.3,!=0.2.4)"] +mariadb_connector = ["mariadb (>=1.0.1)"] +mssql = ["pyodbc"] +mssql_pymssql = ["pymssql"] +mssql_pyodbc = ["pyodbc"] +mypy = ["sqlalchemy2-stubs", "mypy (>=0.910)"] +mysql = ["mysqlclient (>=1.4.0,<2)", "mysqlclient (>=1.4.0)"] +mysql_connector = ["mysql-connector-python"] +oracle = ["cx_oracle (>=7,<8)", "cx_oracle (>=7)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql_asyncpg = ["greenlet (!=0.4.17)", "asyncpg"] +postgresql_pg8000 = ["pg8000 (>=1.16.6)"] +postgresql_psycopg2binary = ["psycopg2-binary"] +postgresql_psycopg2cffi = ["psycopg2cffi"] +pymysql = ["pymysql (<1)", "pymysql"] +sqlcipher = ["sqlcipher3-binary"] + +[[package]] +name = "sqlalchemy-utils" +version = "0.38.2" +description = "Various utility functions for SQLAlchemy." +category = "main" +optional = false +python-versions = "~=3.4" + +[package.dependencies] +six = "*" +SQLAlchemy = ">=1.0" + +[package.extras] +arrow = ["arrow (>=0.3.4)"] +babel = ["Babel (>=1.3)"] +color = ["colour (>=0.0.4)"] +encrypted = ["cryptography (>=0.6)"] +intervals = ["intervals (>=0.7.1)"] +password = ["passlib (>=1.6,<2.0)"] +pendulum = ["pendulum (>=2.0.5)"] +phone = ["phonenumbers (>=5.9.2)"] +test = ["pytest (>=2.7.1)", "Pygments (>=1.2)", "Jinja2 (>=2.3)", "docutils (>=0.10)", "flexmock (>=0.9.7)", "mock (==2.0.0)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pg8000 (>=1.12.4)", "pytz (>=2014.2)", "python-dateutil (>=2.6)", "pymysql", "flake8 (>=2.4.0)", "isort (>=4.2.2)", "pyodbc", "backports.zoneinfo"] +test_all = ["Babel (>=1.3)", "Jinja2 (>=2.3)", "Pygments (>=1.2)", "arrow (>=0.3.4)", "colour (>=0.0.4)", "cryptography (>=0.6)", "docutils (>=0.10)", "flake8 (>=2.4.0)", "flexmock (>=0.9.7)", "furl (>=0.4.1)", "intervals (>=0.7.1)", "isort (>=4.2.2)", "mock (==2.0.0)", "passlib (>=1.6,<2.0)", "pendulum (>=2.0.5)", "pg8000 (>=1.12.4)", "phonenumbers (>=5.9.2)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pymysql", "pyodbc", "pytest (>=2.7.1)", "python-dateutil", "python-dateutil (>=2.6)", "pytz (>=2014.2)", "backports.zoneinfo"] +timezone = ["python-dateutil"] +url = ["furl (>=0.4.1)"] + +[[package]] +name = "starlette" +version = "0.19.1" +description = "The little ASGI library that shines." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +anyio = ">=3.4.0,<5" +itsdangerous = {version = "*", optional = true, markers = "extra == \"full\""} +jinja2 = {version = "*", optional = true, markers = "extra == \"full\""} +python-multipart = {version = "*", optional = true, markers = "extra == \"full\""} +pyyaml = {version = "*", optional = true, markers = "extra == \"full\""} +requests = {version = "*", optional = true, markers = "extra == \"full\""} + +[package.extras] +full = ["itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests"] + +[[package]] +name = "starlette-core" +version = "0.0.1" +description = "Starlette Core." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +sqlalchemy = "*" +sqlalchemy-utils = "*" +starlette = "*" +typing = "*" +wtforms = "*" + +[package.extras] +docs = ["mkdocs", "mkdocs-material"] + [[package]] name = "text-unidecode" version = "1.3" @@ -695,12 +703,20 @@ optional = false python-versions = ">=3.7" [[package]] -name = "tzdata" -version = "2022.1" -description = "Provider of IANA time zone data" +name = "typing" +version = "3.7.4.3" +description = "Type Hints for Python" category = "main" optional = false -python-versions = ">=2" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "typing-extensions" +version = "4.2.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" [[package]] name = "urllib3" @@ -715,9 +731,25 @@ brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +[[package]] +name = "uvicorn" +version = "0.17.6" +description = "The lightning-fast ASGI server." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +asgiref = ">=3.4.0" +click = ">=7.0" +h11 = ">=0.8" + +[package.extras] +standard = ["websockets (>=10.0)", "httptools (>=0.4.0)", "watchgod (>=0.6)", "python-dotenv (>=0.13)", "PyYAML (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "colorama (>=0.4)"] + [[package]] name = "virtualenv" -version = "20.15.1" +version = "20.14.1" description = "Virtual Python Environment builder" category = "dev" optional = false @@ -750,16 +782,22 @@ optional = false python-versions = ">=3.7" [[package]] -name = "wrapt" -version = "1.14.1" -description = "Module for decorators, wrappers and monkey patching." +name = "wtforms" +version = "3.0.1" +description = "Form validation and rendering for Python web development." category = "main" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.7" + +[package.dependencies] +MarkupSafe = "*" + +[package.extras] +email = ["email-validator"] [[package]] name = "yt-dlp" -version = "2022.6.29" +version = "2022.4.8" description = "A youtube-dl fork with additional features and patches" category = "main" optional = false @@ -776,16 +814,20 @@ websockets = "*" [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "f582f6abb81e647dd6874bb00768645e574c3c4c85ee366d9cd74b675717e216" +content-hash = "ff7d3c1941f088222a945efb832db370bad4daeee7298d08752aa4061f7c4846" [metadata.files] -asgiref = [ - {file = "asgiref-3.5.2-py3-none-any.whl", hash = "sha256:1d2880b792ae8757289136f1db2b7b99100ce959b2aa57fd69dab783d05afac4"}, - {file = "asgiref-3.5.2.tar.gz", hash = "sha256:4a29362a6acebe09bf1d6640db38c1dc3d9217c68e6f9f6204d72667fc19a424"}, +alembic = [ + {file = "alembic-1.7.7-py3-none-any.whl", hash = "sha256:29be0856ec7591c39f4e1cb10f198045d890e6e2274cf8da80cb5e721a09642b"}, + {file = "alembic-1.7.7.tar.gz", hash = "sha256:4961248173ead7ce8a21efb3de378f13b8398e6630fab0eb258dc74a8af24c58"}, ] -async-timeout = [ - {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, - {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, +anyio = [ + {file = "anyio-3.5.0-py3-none-any.whl", hash = "sha256:b5fa16c5ff93fa1046f2eeb5bbff2dad4d3514d6cda61d02816dba34fa8c3c2e"}, + {file = "anyio-3.5.0.tar.gz", hash = "sha256:a0aeffe2fb1fdf374a8e4b471444f0f3ac4fb9f5a5b542b48824475e0042a5a6"}, +] +asgiref = [ + {file = "asgiref-3.5.1-py3-none-any.whl", hash = "sha256:45a429524fba18aba9d512498b19d220c4d628e75b40cf5c627524dbaebc5cc1"}, + {file = "asgiref-3.5.1.tar.gz", hash = "sha256:fddeea3c53fa99d0cdb613c3941cc6e52d822491fc2753fba25768fb5bf4e865"}, ] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, @@ -891,178 +933,136 @@ brotlicffi = [ {file = "brotlicffi-1.0.9.2-pp37-pypy37_pp73-win32.whl", hash = "sha256:7e72978f4090a161885b114f87b784f538dcb77dafc6602592c1cf39ae8d243d"}, {file = "brotlicffi-1.0.9.2.tar.gz", hash = "sha256:0c248a68129d8fc6a217767406c731e498c3e19a7be05ea0a90c3c86637b7d96"}, ] -bump2version = [ - {file = "bump2version-1.0.1-py2.py3-none-any.whl", hash = "sha256:37f927ea17cde7ae2d7baf832f8e80ce3777624554a653006c9144f8017fe410"}, - {file = "bump2version-1.0.1.tar.gz", hash = "sha256:762cb2bfad61f4ec8e2bdf452c7c267416f8c70dd9ecb1653fd0bbb01fa936e6"}, -] certifi = [ - {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, - {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, + {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, + {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, ] cffi = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, + {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"}, + {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"}, + {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"}, + {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"}, + {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"}, + {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"}, + {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"}, + {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"}, + {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"}, + {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"}, + {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"}, + {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"}, + {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"}, + {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"}, + {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"}, + {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"}, + {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"}, + {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"}, + {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"}, + {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"}, + {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"}, + {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"}, + {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"}, + {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, + {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, ] cfgv = [ {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"}, - {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"}, + {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, + {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, ] click = [ {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, ] colorama = [ - {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, - {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] colorthief = [ {file = "colorthief-0.2.1-py2.py3-none-any.whl", hash = "sha256:b04fc8ce5cf9c888768745e29cb19b7b688d5711af6fba26e8057debabec56b9"}, {file = "colorthief-0.2.1.tar.gz", hash = "sha256:079cb0c95bdd669c4643e2f7494de13b0b6029d5cdbe2d74d5d3c3386bd57221"}, ] coverage = [ - {file = "coverage-6.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f1d5aa2703e1dab4ae6cf416eb0095304f49d004c39e9db1d86f57924f43006b"}, - {file = "coverage-6.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4ce1b258493cbf8aec43e9b50d89982346b98e9ffdfaae8ae5793bc112fb0068"}, - {file = "coverage-6.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c4e737f60c6936460c5be330d296dd5b48b3963f48634c53b3f7deb0f34ec4"}, - {file = "coverage-6.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84e65ef149028516c6d64461b95a8dbcfce95cfd5b9eb634320596173332ea84"}, - {file = "coverage-6.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f69718750eaae75efe506406c490d6fc5a6161d047206cc63ce25527e8a3adad"}, - {file = "coverage-6.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e57816f8ffe46b1df8f12e1b348f06d164fd5219beba7d9433ba79608ef011cc"}, - {file = "coverage-6.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:01c5615d13f3dd3aa8543afc069e5319cfa0c7d712f6e04b920431e5c564a749"}, - {file = "coverage-6.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:75ab269400706fab15981fd4bd5080c56bd5cc07c3bccb86aab5e1d5a88dc8f4"}, - {file = "coverage-6.4.1-cp310-cp310-win32.whl", hash = "sha256:a7f3049243783df2e6cc6deafc49ea123522b59f464831476d3d1448e30d72df"}, - {file = "coverage-6.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:ee2ddcac99b2d2aec413e36d7a429ae9ebcadf912946b13ffa88e7d4c9b712d6"}, - {file = "coverage-6.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb73e0011b8793c053bfa85e53129ba5f0250fdc0392c1591fd35d915ec75c46"}, - {file = "coverage-6.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106c16dfe494de3193ec55cac9640dd039b66e196e4641fa8ac396181578b982"}, - {file = "coverage-6.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87f4f3df85aa39da00fd3ec4b5abeb7407e82b68c7c5ad181308b0e2526da5d4"}, - {file = "coverage-6.4.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:961e2fb0680b4f5ad63234e0bf55dfb90d302740ae9c7ed0120677a94a1590cb"}, - {file = "coverage-6.4.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cec3a0f75c8f1031825e19cd86ee787e87cf03e4fd2865c79c057092e69e3a3b"}, - {file = "coverage-6.4.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:129cd05ba6f0d08a766d942a9ed4b29283aff7b2cccf5b7ce279d50796860bb3"}, - {file = "coverage-6.4.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bf5601c33213d3cb19d17a796f8a14a9eaa5e87629a53979a5981e3e3ae166f6"}, - {file = "coverage-6.4.1-cp37-cp37m-win32.whl", hash = "sha256:269eaa2c20a13a5bf17558d4dc91a8d078c4fa1872f25303dddcbba3a813085e"}, - {file = "coverage-6.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f02cbbf8119db68455b9d763f2f8737bb7db7e43720afa07d8eb1604e5c5ae28"}, - {file = "coverage-6.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ffa9297c3a453fba4717d06df579af42ab9a28022444cae7fa605af4df612d54"}, - {file = "coverage-6.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:145f296d00441ca703a659e8f3eb48ae39fb083baba2d7ce4482fb2723e050d9"}, - {file = "coverage-6.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d44996140af8b84284e5e7d398e589574b376fb4de8ccd28d82ad8e3bea13"}, - {file = "coverage-6.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2bd9a6fc18aab8d2e18f89b7ff91c0f34ff4d5e0ba0b33e989b3cd4194c81fd9"}, - {file = "coverage-6.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3384f2a3652cef289e38100f2d037956194a837221edd520a7ee5b42d00cc605"}, - {file = "coverage-6.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9b3e07152b4563722be523e8cd0b209e0d1a373022cfbde395ebb6575bf6790d"}, - {file = "coverage-6.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1480ff858b4113db2718848d7b2d1b75bc79895a9c22e76a221b9d8d62496428"}, - {file = "coverage-6.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:865d69ae811a392f4d06bde506d531f6a28a00af36f5c8649684a9e5e4a85c83"}, - {file = "coverage-6.4.1-cp38-cp38-win32.whl", hash = "sha256:664a47ce62fe4bef9e2d2c430306e1428ecea207ffd68649e3b942fa8ea83b0b"}, - {file = "coverage-6.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:26dff09fb0d82693ba9e6231248641d60ba606150d02ed45110f9ec26404ed1c"}, - {file = "coverage-6.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d9c80df769f5ec05ad21ea34be7458d1dc51ff1fb4b2219e77fe24edf462d6df"}, - {file = "coverage-6.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:39ee53946bf009788108b4dd2894bf1349b4e0ca18c2016ffa7d26ce46b8f10d"}, - {file = "coverage-6.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5b66caa62922531059bc5ac04f836860412f7f88d38a476eda0a6f11d4724f4"}, - {file = "coverage-6.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd180ed867e289964404051a958f7cccabdeed423f91a899829264bb7974d3d3"}, - {file = "coverage-6.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84631e81dd053e8a0d4967cedab6db94345f1c36107c71698f746cb2636c63e3"}, - {file = "coverage-6.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8c08da0bd238f2970230c2a0d28ff0e99961598cb2e810245d7fc5afcf1254e8"}, - {file = "coverage-6.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d42c549a8f41dc103a8004b9f0c433e2086add8a719da00e246e17cbe4056f72"}, - {file = "coverage-6.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:309ce4a522ed5fca432af4ebe0f32b21d6d7ccbb0f5fcc99290e71feba67c264"}, - {file = "coverage-6.4.1-cp39-cp39-win32.whl", hash = "sha256:fdb6f7bd51c2d1714cea40718f6149ad9be6a2ee7d93b19e9f00934c0f2a74d9"}, - {file = "coverage-6.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:342d4aefd1c3e7f620a13f4fe563154d808b69cccef415415aece4c786665397"}, - {file = "coverage-6.4.1-pp36.pp37.pp38-none-any.whl", hash = "sha256:4803e7ccf93230accb928f3a68f00ffa80a88213af98ed338a57ad021ef06815"}, - {file = "coverage-6.4.1.tar.gz", hash = "sha256:4321f075095a096e70aff1d002030ee612b65a205a0a0f5b815280d5dc58100c"}, -] -croniter = [ - {file = "croniter-1.3.5-py2.py3-none-any.whl", hash = "sha256:4f72faca42c00beb6e30907f1315145f43dfbe5ec0ad4ada24b4c0d57b86a33a"}, - {file = "croniter-1.3.5.tar.gz", hash = "sha256:7592fc0e8a00d82af98dfa2768b75983b6fb4c2adc8f6d0d7c931a715b7cefee"}, -] -deprecated = [ - {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, - {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, + {file = "coverage-6.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b27d894748475fa858f9597c0ee1d4829f44683f3813633aaf94b19cb5453cf"}, + {file = "coverage-6.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37d1141ad6b2466a7b53a22e08fe76994c2d35a5b6b469590424a9953155afac"}, + {file = "coverage-6.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9987b0354b06d4df0f4d3e0ec1ae76d7ce7cbca9a2f98c25041eb79eec766f1"}, + {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:26e2deacd414fc2f97dd9f7676ee3eaecd299ca751412d89f40bc01557a6b1b4"}, + {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dd8bafa458b5c7d061540f1ee9f18025a68e2d8471b3e858a9dad47c8d41903"}, + {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:46191097ebc381fbf89bdce207a6c107ac4ec0890d8d20f3360345ff5976155c"}, + {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6f89d05e028d274ce4fa1a86887b071ae1755082ef94a6740238cd7a8178804f"}, + {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58303469e9a272b4abdb9e302a780072c0633cdcc0165db7eec0f9e32f901e05"}, + {file = "coverage-6.3.2-cp310-cp310-win32.whl", hash = "sha256:2fea046bfb455510e05be95e879f0e768d45c10c11509e20e06d8fcaa31d9e39"}, + {file = "coverage-6.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:a2a8b8bcc399edb4347a5ca8b9b87e7524c0967b335fbb08a83c8421489ddee1"}, + {file = "coverage-6.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f1555ea6d6da108e1999b2463ea1003fe03f29213e459145e70edbaf3e004aaa"}, + {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5f4e1edcf57ce94e5475fe09e5afa3e3145081318e5fd1a43a6b4539a97e518"}, + {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a15dc0a14008f1da3d1ebd44bdda3e357dbabdf5a0b5034d38fcde0b5c234b7"}, + {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21b7745788866028adeb1e0eca3bf1101109e2dc58456cb49d2d9b99a8c516e6"}, + {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8ce257cac556cb03be4a248d92ed36904a59a4a5ff55a994e92214cde15c5bad"}, + {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b0be84e5a6209858a1d3e8d1806c46214e867ce1b0fd32e4ea03f4bd8b2e3359"}, + {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:acf53bc2cf7282ab9b8ba346746afe703474004d9e566ad164c91a7a59f188a4"}, + {file = "coverage-6.3.2-cp37-cp37m-win32.whl", hash = "sha256:8bdde1177f2311ee552f47ae6e5aa7750c0e3291ca6b75f71f7ffe1f1dab3dca"}, + {file = "coverage-6.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b31651d018b23ec463e95cf10070d0b2c548aa950a03d0b559eaa11c7e5a6fa3"}, + {file = "coverage-6.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07e6db90cd9686c767dcc593dff16c8c09f9814f5e9c51034066cad3373b914d"}, + {file = "coverage-6.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c6dbb42f3ad25760010c45191e9757e7dce981cbfb90e42feef301d71540059"}, + {file = "coverage-6.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c76aeef1b95aff3905fb2ae2d96e319caca5b76fa41d3470b19d4e4a3a313512"}, + {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cf5cfcb1521dc3255d845d9dca3ff204b3229401994ef8d1984b32746bb45ca"}, + {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fbbdc8d55990eac1b0919ca69eb5a988a802b854488c34b8f37f3e2025fa90d"}, + {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ec6bc7fe73a938933d4178c9b23c4e0568e43e220aef9472c4f6044bfc6dd0f0"}, + {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9baff2a45ae1f17c8078452e9e5962e518eab705e50a0aa8083733ea7d45f3a6"}, + {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd9e830e9d8d89b20ab1e5af09b32d33e1a08ef4c4e14411e559556fd788e6b2"}, + {file = "coverage-6.3.2-cp38-cp38-win32.whl", hash = "sha256:f7331dbf301b7289013175087636bbaf5b2405e57259dd2c42fdcc9fcc47325e"}, + {file = "coverage-6.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:68353fe7cdf91f109fc7d474461b46e7f1f14e533e911a2a2cbb8b0fc8613cf1"}, + {file = "coverage-6.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b78e5afb39941572209f71866aa0b206c12f0109835aa0d601e41552f9b3e620"}, + {file = "coverage-6.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e21876082ed887baed0146fe222f861b5815455ada3b33b890f4105d806128d"}, + {file = "coverage-6.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34626a7eee2a3da12af0507780bb51eb52dca0e1751fd1471d0810539cefb536"}, + {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ebf730d2381158ecf3dfd4453fbca0613e16eaa547b4170e2450c9707665ce7"}, + {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd6fe30bd519694b356cbfcaca9bd5c1737cddd20778c6a581ae20dc8c04def2"}, + {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:96f8a1cb43ca1422f36492bebe63312d396491a9165ed3b9231e778d43a7fca4"}, + {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:dd035edafefee4d573140a76fdc785dc38829fe5a455c4bb12bac8c20cfc3d69"}, + {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ca5aeb4344b30d0bec47481536b8ba1181d50dbe783b0e4ad03c95dc1296684"}, + {file = "coverage-6.3.2-cp39-cp39-win32.whl", hash = "sha256:f5fa5803f47e095d7ad8443d28b01d48c0359484fec1b9d8606d0e3282084bc4"}, + {file = "coverage-6.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:9548f10d8be799551eb3a9c74bbf2b4934ddb330e08a73320123c07f95cc2d92"}, + {file = "coverage-6.3.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:18d520c6860515a771708937d2f78f63cc47ab3b80cb78e86573b0a760161faf"}, + {file = "coverage-6.3.2.tar.gz", hash = "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9"}, ] distlib = [ {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, ] -django = [ - {file = "Django-4.0.6-py3-none-any.whl", hash = "sha256:ca54ebedfcbc60d191391efbf02ba68fb52165b8bf6ccd6fe71f098cac1fe59e"}, - {file = "Django-4.0.6.tar.gz", hash = "sha256:a67a793ff6827fd373555537dca0da293a63a316fe34cb7f367f898ccca3c3ae"}, -] -django-bulma = [ - {file = "django-bulma-0.8.3.tar.gz", hash = "sha256:b794b4e64f482de77f376451f7cd8b3c8448eb68e5a24c51b9190625a08b0b30"}, - {file = "django_bulma-0.8.3-py3-none-any.whl", hash = "sha256:0ef6e5c171c2a32010e724a8be61ba6cd0e55ebbd242cf6780560518483c4d00"}, -] -django-htmx = [ - {file = "django-htmx-1.12.0.tar.gz", hash = "sha256:33750914939e8fbd214e36fb0976003e06f4cadc92007cbe5c49f59e32e58de6"}, - {file = "django_htmx-1.12.0-py3-none-any.whl", hash = "sha256:e8351b9251642a5a550a18c6958727ea9b33574bb412b1900fa5ab0d5dd9db40"}, -] -fakeredis = [ - {file = "fakeredis-1.8.1-py3-none-any.whl", hash = "sha256:4a0f8fe0d5c18147864db50ae2e86f667420ea06653bec08b3a5fccfd3fbde6f"}, - {file = "fakeredis-1.8.1.tar.gz", hash = "sha256:ca516f86181f85615cd8210854b43acbe7b1f37ed8a082c5557749c73f2f0dd3"}, -] feedparser = [ - {file = "feedparser-6.0.10-py3-none-any.whl", hash = "sha256:79c257d526d13b944e965f6095700587f27388e50ea16fd245babe4dfae7024f"}, - {file = "feedparser-6.0.10.tar.gz", hash = "sha256:27da485f4637ce7163cdeab13a80312b93b7d0c1b775bef4a47629a3110bca51"}, + {file = "feedparser-6.0.8-py3-none-any.whl", hash = "sha256:1b7f57841d9cf85074deb316ed2c795091a238adb79846bc46dccdaf80f9c59a"}, + {file = "feedparser-6.0.8.tar.gz", hash = "sha256:5ce0410a05ab248c8c7cfca3a0ea2203968ee9ff4486067379af4827a59f9661"}, ] filelock = [ - {file = "filelock-3.7.1-py3-none-any.whl", hash = "sha256:37def7b658813cda163b56fc564cdc75e86d338246458c4c28ae84cabefa2404"}, - {file = "filelock-3.7.1.tar.gz", hash = "sha256:3a0fd85166ad9dbab54c9aec96737b744106dc5f15c0b09a6744a445299fcf04"}, + {file = "filelock-3.6.0-py3-none-any.whl", hash = "sha256:f8314284bfffbdcfa0ff3d7992b023d4c628ced6feb957351d4c48d059f56bc0"}, + {file = "filelock-3.6.0.tar.gz", hash = "sha256:9cd540a9352e432c7246a48fe4e8712b10acb1df2ad1f30e8c070b82ae1fed85"}, ] font-source-sans-pro = [ {file = "font-source-sans-pro-0.0.1.tar.gz", hash = "sha256:3f81d8e52b0d7e930e2c867c0d3ee549312d03f97b71b664a8361006311f72e5"}, @@ -1074,17 +1074,70 @@ fonts = [ {file = "fonts-0.0.3-py3-none-any.whl", hash = "sha256:e5f551379088ab260c2537980c3ccdff8af93408d9d4fa3319388d2ee25b7b6d"}, {file = "fonts-0.0.3.tar.gz", hash = "sha256:c626655b75a60715e118e44e270656fd22fd8f54252901ff6ebf1308ad01c405"}, ] -gunicorn = [ - {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"}, - {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"}, +greenlet = [ + {file = "greenlet-1.1.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:58df5c2a0e293bf665a51f8a100d3e9956febfbf1d9aaf8c0677cf70218910c6"}, + {file = "greenlet-1.1.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:aec52725173bd3a7b56fe91bc56eccb26fbdff1386ef123abb63c84c5b43b63a"}, + {file = "greenlet-1.1.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:833e1551925ed51e6b44c800e71e77dacd7e49181fdc9ac9a0bf3714d515785d"}, + {file = "greenlet-1.1.2-cp27-cp27m-win32.whl", hash = "sha256:aa5b467f15e78b82257319aebc78dd2915e4c1436c3c0d1ad6f53e47ba6e2713"}, + {file = "greenlet-1.1.2-cp27-cp27m-win_amd64.whl", hash = "sha256:40b951f601af999a8bf2ce8c71e8aaa4e8c6f78ff8afae7b808aae2dc50d4c40"}, + {file = "greenlet-1.1.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:95e69877983ea39b7303570fa6760f81a3eec23d0e3ab2021b7144b94d06202d"}, + {file = "greenlet-1.1.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:356b3576ad078c89a6107caa9c50cc14e98e3a6c4874a37c3e0273e4baf33de8"}, + {file = "greenlet-1.1.2-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8639cadfda96737427330a094476d4c7a56ac03de7265622fcf4cfe57c8ae18d"}, + {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97e5306482182170ade15c4b0d8386ded995a07d7cc2ca8f27958d34d6736497"}, + {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e6a36bb9474218c7a5b27ae476035497a6990e21d04c279884eb10d9b290f1b1"}, + {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abb7a75ed8b968f3061327c433a0fbd17b729947b400747c334a9c29a9af6c58"}, + {file = "greenlet-1.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b336501a05e13b616ef81ce329c0e09ac5ed8c732d9ba7e3e983fcc1a9e86965"}, + {file = "greenlet-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:14d4f3cd4e8b524ae9b8aa567858beed70c392fdec26dbdb0a8a418392e71708"}, + {file = "greenlet-1.1.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:17ff94e7a83aa8671a25bf5b59326ec26da379ace2ebc4411d690d80a7fbcf23"}, + {file = "greenlet-1.1.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9f3cba480d3deb69f6ee2c1825060177a22c7826431458c697df88e6aeb3caee"}, + {file = "greenlet-1.1.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:fa877ca7f6b48054f847b61d6fa7bed5cebb663ebc55e018fda12db09dcc664c"}, + {file = "greenlet-1.1.2-cp35-cp35m-win32.whl", hash = "sha256:7cbd7574ce8e138bda9df4efc6bf2ab8572c9aff640d8ecfece1b006b68da963"}, + {file = "greenlet-1.1.2-cp35-cp35m-win_amd64.whl", hash = "sha256:903bbd302a2378f984aef528f76d4c9b1748f318fe1294961c072bdc7f2ffa3e"}, + {file = "greenlet-1.1.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:049fe7579230e44daef03a259faa24511d10ebfa44f69411d99e6a184fe68073"}, + {file = "greenlet-1.1.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:dd0b1e9e891f69e7675ba5c92e28b90eaa045f6ab134ffe70b52e948aa175b3c"}, + {file = "greenlet-1.1.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:7418b6bfc7fe3331541b84bb2141c9baf1ec7132a7ecd9f375912eca810e714e"}, + {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9d29ca8a77117315101425ec7ec2a47a22ccf59f5593378fc4077ac5b754fce"}, + {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21915eb821a6b3d9d8eefdaf57d6c345b970ad722f856cd71739493ce003ad08"}, + {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eff9d20417ff9dcb0d25e2defc2574d10b491bf2e693b4e491914738b7908168"}, + {file = "greenlet-1.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b8c008de9d0daba7b6666aa5bbfdc23dcd78cafc33997c9b7741ff6353bafb7f"}, + {file = "greenlet-1.1.2-cp36-cp36m-win32.whl", hash = "sha256:32ca72bbc673adbcfecb935bb3fb1b74e663d10a4b241aaa2f5a75fe1d1f90aa"}, + {file = "greenlet-1.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:f0214eb2a23b85528310dad848ad2ac58e735612929c8072f6093f3585fd342d"}, + {file = "greenlet-1.1.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:b92e29e58bef6d9cfd340c72b04d74c4b4e9f70c9fa7c78b674d1fec18896dc4"}, + {file = "greenlet-1.1.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fdcec0b8399108577ec290f55551d926d9a1fa6cad45882093a7a07ac5ec147b"}, + {file = "greenlet-1.1.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:93f81b134a165cc17123626ab8da2e30c0455441d4ab5576eed73a64c025b25c"}, + {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e12bdc622676ce47ae9abbf455c189e442afdde8818d9da983085df6312e7a1"}, + {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c790abda465726cfb8bb08bd4ca9a5d0a7bd77c7ac1ca1b839ad823b948ea28"}, + {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f276df9830dba7a333544bd41070e8175762a7ac20350786b322b714b0e654f5"}, + {file = "greenlet-1.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c5d5b35f789a030ebb95bff352f1d27a93d81069f2adb3182d99882e095cefe"}, + {file = "greenlet-1.1.2-cp37-cp37m-win32.whl", hash = "sha256:64e6175c2e53195278d7388c454e0b30997573f3f4bd63697f88d855f7a6a1fc"}, + {file = "greenlet-1.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b11548073a2213d950c3f671aa88e6f83cda6e2fb97a8b6317b1b5b33d850e06"}, + {file = "greenlet-1.1.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:9633b3034d3d901f0a46b7939f8c4d64427dfba6bbc5a36b1a67364cf148a1b0"}, + {file = "greenlet-1.1.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:eb6ea6da4c787111adf40f697b4e58732ee0942b5d3bd8f435277643329ba627"}, + {file = "greenlet-1.1.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:f3acda1924472472ddd60c29e5b9db0cec629fbe3c5c5accb74d6d6d14773478"}, + {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e859fcb4cbe93504ea18008d1df98dee4f7766db66c435e4882ab35cf70cac43"}, + {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00e44c8afdbe5467e4f7b5851be223be68adb4272f44696ee71fe46b7036a711"}, + {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b"}, + {file = "greenlet-1.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2bde6792f313f4e918caabc46532aa64aa27a0db05d75b20edfc5c6f46479de2"}, + {file = "greenlet-1.1.2-cp38-cp38-win32.whl", hash = "sha256:288c6a76705dc54fba69fbcb59904ae4ad768b4c768839b8ca5fdadec6dd8cfd"}, + {file = "greenlet-1.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:8d2f1fb53a421b410751887eb4ff21386d119ef9cde3797bf5e7ed49fb51a3b3"}, + {file = "greenlet-1.1.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:166eac03e48784a6a6e0e5f041cfebb1ab400b394db188c48b3a84737f505b67"}, + {file = "greenlet-1.1.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:572e1787d1460da79590bf44304abbc0a2da944ea64ec549188fa84d89bba7ab"}, + {file = "greenlet-1.1.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:be5f425ff1f5f4b3c1e33ad64ab994eed12fc284a6ea71c5243fd564502ecbe5"}, + {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1692f7d6bc45e3200844be0dba153612103db241691088626a33ff1f24a0d88"}, + {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7227b47e73dedaa513cdebb98469705ef0d66eb5a1250144468e9c3097d6b59b"}, + {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ff61ff178250f9bb3cd89752df0f1dd0e27316a8bd1465351652b1b4a4cdfd3"}, + {file = "greenlet-1.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0051c6f1f27cb756ffc0ffbac7d2cd48cb0362ac1736871399a739b2885134d3"}, + {file = "greenlet-1.1.2-cp39-cp39-win32.whl", hash = "sha256:f70a9e237bb792c7cc7e44c531fd48f5897961701cdaa06cf22fc14965c496cf"}, + {file = "greenlet-1.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:013d61294b6cd8fe3242932c1c5e36e5d1db2c8afb58606c5a67efce62c1f5fd"}, + {file = "greenlet-1.1.2.tar.gz", hash = "sha256:e30f5ea4ae2346e62cedde8794a56858a67b878dd79f7df76a0767e356b1744a"}, ] -honcho = [ - {file = "honcho-1.1.0-py2.py3-none-any.whl", hash = "sha256:a4d6e3a88a7b51b66351ecfc6e9d79d8f4b87351db9ad7e923f5632cc498122f"}, - {file = "honcho-1.1.0.tar.gz", hash = "sha256:c5eca0bded4bef6697a23aec0422fd4f6508ea3581979a3485fc4b89357eb2a9"}, +h11 = [ + {file = "h11-0.13.0-py3-none-any.whl", hash = "sha256:8ddd78563b633ca55346c8cd41ec0af27d3c79931828beffb46ce70a379e7442"}, + {file = "h11-0.13.0.tar.gz", hash = "sha256:70813c1135087a248a4d38cc0e1a0181ffab2188141a93eaf567940c3957ff06"}, ] identify = [ - {file = "identify-2.5.1-py2.py3-none-any.whl", hash = "sha256:0dca2ea3e4381c435ef9c33ba100a78a9b40c0bab11189c7cf121f75815efeaa"}, - {file = "identify-2.5.1.tar.gz", hash = "sha256:3d11b16f3fe19f52039fb7e39c9c884b21cb1b586988114fbe42671f03de3e82"}, + {file = "identify-2.5.0-py2.py3-none-any.whl", hash = "sha256:3acfe15a96e4272b4ec5662ee3e231ceba976ef63fd9980ed2ce9cc415df393f"}, + {file = "identify-2.5.0.tar.gz", hash = "sha256:c83af514ea50bf2be2c4a3f2fb349442b59dc87284558ae9ff54191bff3541d2"}, ] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, @@ -1095,89 +1148,121 @@ iniconfig = [ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] invoke = [ - {file = "invoke-1.7.1-py3-none-any.whl", hash = "sha256:2dc975b4f92be0c0a174ad2d063010c8a1fdb5e9389d69871001118b4fcac4fb"}, - {file = "invoke-1.7.1.tar.gz", hash = "sha256:7b6deaf585eee0a848205d0b8c0014b9bf6f287a8eb798818a642dff1df14b19"}, + {file = "invoke-1.7.0-py3-none-any.whl", hash = "sha256:a5159fc63dba6ca2a87a1e33d282b99cea69711b03c64a35bb4e1c53c6c4afa0"}, + {file = "invoke-1.7.0.tar.gz", hash = "sha256:e332e49de40463f2016315f51df42313855772be86435686156bc18f45b5cc6c"}, +] +itsdangerous = [ + {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, + {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, +] +jinja2 = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] +mako = [ + {file = "Mako-1.2.0-py3-none-any.whl", hash = "sha256:23aab11fdbbb0f1051b93793a58323ff937e98e34aece1c4219675122e57e4ba"}, + {file = "Mako-1.2.0.tar.gz", hash = "sha256:9a7c7e922b87db3686210cf49d5d767033a41d4010b284e747682c92bddd8b39"}, +] +markupsafe = [ + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] mutagen = [ {file = "mutagen-1.45.1-py3-none-any.whl", hash = "sha256:9c9f243fcec7f410f138cb12c21c84c64fde4195481a30c9bfb05b5f003adfed"}, {file = "mutagen-1.45.1.tar.gz", hash = "sha256:6397602efb3c2d7baebd2166ed85731ae1c1d475abca22090b7141ff5034b3e1"}, ] mysqlclient = [ - {file = "mysqlclient-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:c1ed71bd6244993b526113cca3df66428609f90e4652f37eb51c33496d478b37"}, - {file = "mysqlclient-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:c812b67e90082a840efb82a8978369e6e69fc62ce1bda4ca8f3084a9d862308b"}, - {file = "mysqlclient-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:0d1cd3a5a4d28c222fa199002810e8146cffd821410b67851af4cc80aeccd97c"}, - {file = "mysqlclient-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:b355c8b5a7d58f2e909acdbb050858390ee1b0e13672ae759e5e784110022994"}, - {file = "mysqlclient-2.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:996924f3483fd36a34a5812210c69e71dea5a3d5978d01199b78b7f6d485c855"}, - {file = "mysqlclient-2.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:dea88c8d3f5a5d9293dfe7f087c16dd350ceb175f2f6631c9cf4caf3e19b7a96"}, - {file = "mysqlclient-2.1.1.tar.gz", hash = "sha256:828757e419fb11dd6c5ed2576ec92c3efaa93a0f7c39e263586d1ee779c3d782"}, + {file = "mysqlclient-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:02c8826e6add9b20f4cb12dcf016485f7b1d6e30356a1204d05431867a1b3947"}, + {file = "mysqlclient-2.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b62d23c11c516cedb887377c8807628c1c65d57593b57853186a6ee18b0c6a5b"}, + {file = "mysqlclient-2.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2c8410f54492a3d2488a6a53e2d85b7e016751a1e7d116e7aea9c763f59f5e8c"}, + {file = "mysqlclient-2.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:e6279263d5a9feca3e0edbc2b2a52c057375bf301d47da2089c075ff76331d14"}, + {file = "mysqlclient-2.1.0.tar.gz", hash = "sha256:973235686f1b720536d417bf0a0d39b4ab3d5086b2b6ad5e6752393428c02b12"}, ] nodeenv = [ - {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, - {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, + {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, + {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, ] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] pillow = [ - {file = "Pillow-9.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a9c9bc489f8ab30906d7a85afac4b4944a572a7432e00698a7239f44a44e6efb"}, - {file = "Pillow-9.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:510cef4a3f401c246cfd8227b300828715dd055463cdca6176c2e4036df8bd4f"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7888310f6214f19ab2b6df90f3f06afa3df7ef7355fc025e78a3044737fab1f5"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:831e648102c82f152e14c1a0938689dbb22480c548c8d4b8b248b3e50967b88c"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cc1d2451e8a3b4bfdb9caf745b58e6c7a77d2e469159b0d527a4554d73694d1"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:136659638f61a251e8ed3b331fc6ccd124590eeff539de57c5f80ef3a9594e58"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6e8c66f70fb539301e064f6478d7453e820d8a2c631da948a23384865cd95544"}, - {file = "Pillow-9.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:37ff6b522a26d0538b753f0b4e8e164fdada12db6c6f00f62145d732d8a3152e"}, - {file = "Pillow-9.2.0-cp310-cp310-win32.whl", hash = "sha256:c79698d4cd9318d9481d89a77e2d3fcaeff5486be641e60a4b49f3d2ecca4e28"}, - {file = "Pillow-9.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:254164c57bab4b459f14c64e93df11eff5ded575192c294a0c49270f22c5d93d"}, - {file = "Pillow-9.2.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:408673ed75594933714482501fe97e055a42996087eeca7e5d06e33218d05aa8"}, - {file = "Pillow-9.2.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:727dd1389bc5cb9827cbd1f9d40d2c2a1a0c9b32dd2261db522d22a604a6eec9"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50dff9cc21826d2977ef2d2a205504034e3a4563ca6f5db739b0d1026658e004"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb6259196a589123d755380b65127ddc60f4c64b21fc3bb46ce3a6ea663659b0"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0554af24df2bf96618dac71ddada02420f946be943b181108cac55a7a2dcd4"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:15928f824870535c85dbf949c09d6ae7d3d6ac2d6efec80f3227f73eefba741c"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:bdd0de2d64688ecae88dd8935012c4a72681e5df632af903a1dca8c5e7aa871a"}, - {file = "Pillow-9.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5b87da55a08acb586bad5c3aa3b86505f559b84f39035b233d5bf844b0834b1"}, - {file = "Pillow-9.2.0-cp311-cp311-win32.whl", hash = "sha256:b6d5e92df2b77665e07ddb2e4dbd6d644b78e4c0d2e9272a852627cdba0d75cf"}, - {file = "Pillow-9.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6bf088c1ce160f50ea40764f825ec9b72ed9da25346216b91361eef8ad1b8f8c"}, - {file = "Pillow-9.2.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:2c58b24e3a63efd22554c676d81b0e57f80e0a7d3a5874a7e14ce90ec40d3069"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef7592281f7c174d3d6cbfbb7ee5984a671fcd77e3fc78e973d492e9bf0eb3f"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dcd7b9c7139dc8258d164b55696ecd16c04607f1cc33ba7af86613881ffe4ac8"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a138441e95562b3c078746a22f8fca8ff1c22c014f856278bdbdd89ca36cff1b"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:93689632949aff41199090eff5474f3990b6823404e45d66a5d44304e9cdc467"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:f3fac744f9b540148fa7715a435d2283b71f68bfb6d4aae24482a890aed18b59"}, - {file = "Pillow-9.2.0-cp37-cp37m-win32.whl", hash = "sha256:fa768eff5f9f958270b081bb33581b4b569faabf8774726b283edb06617101dc"}, - {file = "Pillow-9.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:69bd1a15d7ba3694631e00df8de65a8cb031911ca11f44929c97fe05eb9b6c1d"}, - {file = "Pillow-9.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:030e3460861488e249731c3e7ab59b07c7853838ff3b8e16aac9561bb345da14"}, - {file = "Pillow-9.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:74a04183e6e64930b667d321524e3c5361094bb4af9083db5c301db64cd341f3"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d33a11f601213dcd5718109c09a52c2a1c893e7461f0be2d6febc2879ec2402"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fd6f5e3c0e4697fa7eb45b6e93996299f3feee73a3175fa451f49a74d092b9f"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a647c0d4478b995c5e54615a2e5360ccedd2f85e70ab57fbe817ca613d5e63b8"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:4134d3f1ba5f15027ff5c04296f13328fecd46921424084516bdb1b2548e66ff"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:bc431b065722a5ad1dfb4df354fb9333b7a582a5ee39a90e6ffff688d72f27a1"}, - {file = "Pillow-9.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1536ad017a9f789430fb6b8be8bf99d2f214c76502becc196c6f2d9a75b01b76"}, - {file = "Pillow-9.2.0-cp38-cp38-win32.whl", hash = "sha256:2ad0d4df0f5ef2247e27fc790d5c9b5a0af8ade9ba340db4a73bb1a4a3e5fb4f"}, - {file = "Pillow-9.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:ec52c351b35ca269cb1f8069d610fc45c5bd38c3e91f9ab4cbbf0aebc136d9c8"}, - {file = "Pillow-9.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ed2c4ef2451de908c90436d6e8092e13a43992f1860275b4d8082667fbb2ffc"}, - {file = "Pillow-9.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ad2f835e0ad81d1689f1b7e3fbac7b01bb8777d5a985c8962bedee0cc6d43da"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea98f633d45f7e815db648fd7ff0f19e328302ac36427343e4432c84432e7ff4"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7761afe0126d046974a01e030ae7529ed0ca6a196de3ec6937c11df0df1bc91c"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a54614049a18a2d6fe156e68e188da02a046a4a93cf24f373bffd977e943421"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:5aed7dde98403cd91d86a1115c78d8145c83078e864c1de1064f52e6feb61b20"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:13b725463f32df1bfeacbf3dd197fb358ae8ebcd8c5548faa75126ea425ccb60"}, - {file = "Pillow-9.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:808add66ea764ed97d44dda1ac4f2cfec4c1867d9efb16a33d158be79f32b8a4"}, - {file = "Pillow-9.2.0-cp39-cp39-win32.whl", hash = "sha256:337a74fd2f291c607d220c793a8135273c4c2ab001b03e601c36766005f36885"}, - {file = "Pillow-9.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:fac2d65901fb0fdf20363fbd345c01958a742f2dc62a8dd4495af66e3ff502a4"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ad2277b185ebce47a63f4dc6302e30f05762b688f8dc3de55dbae4651872cdf3"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c7b502bc34f6e32ba022b4a209638f9e097d7a9098104ae420eb8186217ebbb"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d1f14f5f691f55e1b47f824ca4fdcb4b19b4323fe43cc7bb105988cad7496be"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:dfe4c1fedfde4e2fbc009d5ad420647f7730d719786388b7de0999bf32c0d9fd"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:f07f1f00e22b231dd3d9b9208692042e29792d6bd4f6639415d2f23158a80013"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1802f34298f5ba11d55e5bb09c31997dc0c6aed919658dfdf0198a2fe75d5490"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17d4cafe22f050b46d983b71c707162d63d796a1235cdf8b9d7a112e97b15bac"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:96b5e6874431df16aee0c1ba237574cb6dff1dcb173798faa6a9d8b399a05d0e"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0030fdbd926fb85844b8b92e2f9449ba89607231d3dd597a21ae72dc7fe26927"}, - {file = "Pillow-9.2.0.tar.gz", hash = "sha256:75e636fd3e0fb872693f23ccb8a5ff2cd578801251f3a4f6854c6a5d437d3c04"}, + {file = "Pillow-9.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:af79d3fde1fc2e33561166d62e3b63f0cc3e47b5a3a2e5fea40d4917754734ea"}, + {file = "Pillow-9.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:55dd1cf09a1fd7c7b78425967aacae9b0d70125f7d3ab973fadc7b5abc3de652"}, + {file = "Pillow-9.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:66822d01e82506a19407d1afc104c3fcea3b81d5eb11485e593ad6b8492f995a"}, + {file = "Pillow-9.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5eaf3b42df2bcda61c53a742ee2c6e63f777d0e085bbc6b2ab7ed57deb13db7"}, + {file = "Pillow-9.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01ce45deec9df310cbbee11104bae1a2a43308dd9c317f99235b6d3080ddd66e"}, + {file = "Pillow-9.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:aea7ce61328e15943d7b9eaca87e81f7c62ff90f669116f857262e9da4057ba3"}, + {file = "Pillow-9.1.0-cp310-cp310-win32.whl", hash = "sha256:7a053bd4d65a3294b153bdd7724dce864a1d548416a5ef61f6d03bf149205160"}, + {file = "Pillow-9.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:97bda660702a856c2c9e12ec26fc6d187631ddfd896ff685814ab21ef0597033"}, + {file = "Pillow-9.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:21dee8466b42912335151d24c1665fcf44dc2ee47e021d233a40c3ca5adae59c"}, + {file = "Pillow-9.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b6d4050b208c8ff886fd3db6690bf04f9a48749d78b41b7a5bf24c236ab0165"}, + {file = "Pillow-9.1.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5cfca31ab4c13552a0f354c87fbd7f162a4fafd25e6b521bba93a57fe6a3700a"}, + {file = "Pillow-9.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed742214068efa95e9844c2d9129e209ed63f61baa4d54dbf4cf8b5e2d30ccf2"}, + {file = "Pillow-9.1.0-cp37-cp37m-win32.whl", hash = "sha256:c9efef876c21788366ea1f50ecb39d5d6f65febe25ad1d4c0b8dff98843ac244"}, + {file = "Pillow-9.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:de344bcf6e2463bb25179d74d6e7989e375f906bcec8cb86edb8b12acbc7dfef"}, + {file = "Pillow-9.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:17869489de2fce6c36690a0c721bd3db176194af5f39249c1ac56d0bb0fcc512"}, + {file = "Pillow-9.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:25023a6209a4d7c42154073144608c9a71d3512b648a2f5d4465182cb93d3477"}, + {file = "Pillow-9.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8782189c796eff29dbb37dd87afa4ad4d40fc90b2742704f94812851b725964b"}, + {file = "Pillow-9.1.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:463acf531f5d0925ca55904fa668bb3461c3ef6bc779e1d6d8a488092bdee378"}, + {file = "Pillow-9.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f42364485bfdab19c1373b5cd62f7c5ab7cc052e19644862ec8f15bb8af289e"}, + {file = "Pillow-9.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3fddcdb619ba04491e8f771636583a7cc5a5051cd193ff1aa1ee8616d2a692c5"}, + {file = "Pillow-9.1.0-cp38-cp38-win32.whl", hash = "sha256:4fe29a070de394e449fd88ebe1624d1e2d7ddeed4c12e0b31624561b58948d9a"}, + {file = "Pillow-9.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c24f718f9dd73bb2b31a6201e6db5ea4a61fdd1d1c200f43ee585fc6dcd21b34"}, + {file = "Pillow-9.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fb89397013cf302f282f0fc998bb7abf11d49dcff72c8ecb320f76ea6e2c5717"}, + {file = "Pillow-9.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c870193cce4b76713a2b29be5d8327c8ccbe0d4a49bc22968aa1e680930f5581"}, + {file = "Pillow-9.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69e5ddc609230d4408277af135c5b5c8fe7a54b2bdb8ad7c5100b86b3aab04c6"}, + {file = "Pillow-9.1.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35be4a9f65441d9982240e6966c1eaa1c654c4e5e931eaf580130409e31804d4"}, + {file = "Pillow-9.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82283af99c1c3a5ba1da44c67296d5aad19f11c535b551a5ae55328a317ce331"}, + {file = "Pillow-9.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a325ac71914c5c043fa50441b36606e64a10cd262de12f7a179620f579752ff8"}, + {file = "Pillow-9.1.0-cp39-cp39-win32.whl", hash = "sha256:a598d8830f6ef5501002ae85c7dbfcd9c27cc4efc02a1989369303ba85573e58"}, + {file = "Pillow-9.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0c51cb9edac8a5abd069fd0758ac0a8bfe52c261ee0e330f363548aca6893595"}, + {file = "Pillow-9.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a336a4f74baf67e26f3acc4d61c913e378e931817cd1e2ef4dfb79d3e051b481"}, + {file = "Pillow-9.1.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb1b89b11256b5b6cad5e7593f9061ac4624f7651f7a8eb4dfa37caa1dfaa4d0"}, + {file = "Pillow-9.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:255c9d69754a4c90b0ee484967fc8818c7ff8311c6dddcc43a4340e10cd1636a"}, + {file = "Pillow-9.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5a3ecc026ea0e14d0ad7cd990ea7f48bfcb3eb4271034657dc9d06933c6629a7"}, + {file = "Pillow-9.1.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5b0ff59785d93b3437c3703e3c64c178aabada51dea2a7f2c5eccf1bcf565a3"}, + {file = "Pillow-9.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7110ec1701b0bf8df569a7592a196c9d07c764a0a74f65471ea56816f10e2c8"}, + {file = "Pillow-9.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8d79c6f468215d1a8415aa53d9868a6b40c4682165b8cb62a221b1baa47db458"}, + {file = "Pillow-9.1.0.tar.gz", hash = "sha256:f401ed2bbb155e1ade150ccc63db1a4f6c1909d3d378f7d1235a44e90d75fb97"}, ] platformdirs = [ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, @@ -1188,8 +1273,8 @@ pluggy = [ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] pre-commit = [ - {file = "pre_commit-2.19.0-py2.py3-none-any.whl", hash = "sha256:10c62741aa5704faea2ad69cb550ca78082efe5697d6f04e5710c3c229afdd10"}, - {file = "pre_commit-2.19.0.tar.gz", hash = "sha256:4233a1e38621c87d9dda9808c6606d7e7ba0e087cd56d3fe03202a01d2919615"}, + {file = "pre_commit-2.18.1-py2.py3-none-any.whl", hash = "sha256:02226e69564ebca1a070bd1f046af866aa1c318dbc430027c50ab832ed2b73f2"}, + {file = "pre_commit-2.18.1.tar.gz", hash = "sha256:5d445ee1fa8738d506881c5d84f83c62bb5be6b2838e32207433647e8e5ebe10"}, ] psycopg2 = [ {file = "psycopg2-2.9.3-cp310-cp310-win32.whl", hash = "sha256:083707a696e5e1c330af2508d8fab36f9700b26621ccbcb538abe22e15485362"}, @@ -1213,40 +1298,37 @@ pycparser = [ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] pycryptodomex = [ - {file = "pycryptodomex-3.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:6f5b6ba8aefd624834bc177a2ac292734996bb030f9d1b388e7504103b6fcddf"}, - {file = "pycryptodomex-3.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:4540904c09704b6f831059c0dfb38584acb82cb97b0125cd52688c1f1e3fffa6"}, - {file = "pycryptodomex-3.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:0fadb9f7fa3150577800eef35f62a8a24b9ddf1563ff060d9bd3af22d3952c8c"}, - {file = "pycryptodomex-3.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:fc9bc7a9b79fe5c750fc81a307052f8daabb709bdaabb0fb18fb136b66b653b5"}, - {file = "pycryptodomex-3.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:f8be976cec59b11f011f790b88aca67b4ea2bd286578d0bd3e31bcd19afcd3e4"}, - {file = "pycryptodomex-3.15.0-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:78d9621cf0ea35abf2d38fa2ca6d0634eab6c991a78373498ab149953787e5e5"}, - {file = "pycryptodomex-3.15.0-cp27-cp27m-win32.whl", hash = "sha256:b6306403228edde6e289f626a3908a2f7f67c344e712cf7c0a508bab3ad9e381"}, - {file = "pycryptodomex-3.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:48697790203909fab02a33226fda546604f4e2653f9d47bc5d3eb40879fa7c64"}, - {file = "pycryptodomex-3.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:18e2ab4813883ae63396c0ffe50b13554b32bb69ec56f0afaf052e7a7ae0d55b"}, - {file = "pycryptodomex-3.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:3709f13ca3852b0b07fc04a2c03b379189232b24007c466be0f605dd4723e9d4"}, - {file = "pycryptodomex-3.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:191e73bc84a8064ad1874dba0ebadedd7cce4dedee998549518f2c74a003b2e1"}, - {file = "pycryptodomex-3.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:e3164a18348bd53c69b4435ebfb4ac8a4076291ffa2a70b54f0c4b80c7834b1d"}, - {file = "pycryptodomex-3.15.0-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:5676a132169a1c1a3712edf25250722ebc8c9102aa9abd814df063ca8362454f"}, - {file = "pycryptodomex-3.15.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:e2b12968522a0358b8917fc7b28865acac002f02f4c4c6020fcb264d76bfd06d"}, - {file = "pycryptodomex-3.15.0-cp35-abi3-manylinux1_i686.whl", hash = "sha256:e47bf8776a7e15576887f04314f5228c6527b99946e6638cf2f16da56d260cab"}, - {file = "pycryptodomex-3.15.0-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:996e1ba717077ce1e6d4849af7a1426f38b07b3d173b879e27d5e26d2e958beb"}, - {file = "pycryptodomex-3.15.0-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:65204412d0c6a8e3c41e21e93a5e6054a74fea501afa03046a388cf042e3377a"}, - {file = "pycryptodomex-3.15.0-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:dd452a5af7014e866206d41751886c9b4bf379a339fdf2dbfc7dd16c0fb4f8e0"}, - {file = "pycryptodomex-3.15.0-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:b9279adc16e4b0f590ceff581f53a80179b02cba9056010d733eb4196134a870"}, - {file = "pycryptodomex-3.15.0-cp35-abi3-win32.whl", hash = "sha256:46b3f05f2f7ac7841053da4e0f69616929ca3c42f238c405f6c3df7759ad2780"}, - {file = "pycryptodomex-3.15.0-cp35-abi3-win_amd64.whl", hash = "sha256:8eecdf9cdc7343001d047f951b9cc805cd68cb6cd77b20ea46af5bffc5bd3dfb"}, - {file = "pycryptodomex-3.15.0-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:67e1e6a92151023ccdfcfbc0afb3314ad30080793b4c27956ea06ab1fb9bcd8a"}, - {file = "pycryptodomex-3.15.0-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:c4cb9cb492ea7dcdf222a8d19a1d09002798ea516aeae8877245206d27326d86"}, - {file = "pycryptodomex-3.15.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:94c7b60e1f52e1a87715571327baea0733708ab4723346598beca4a3b6879794"}, - {file = "pycryptodomex-3.15.0-pp27-pypy_73-win32.whl", hash = "sha256:04cc393045a8f19dd110c975e30f38ed7ab3faf21ede415ea67afebd95a22380"}, - {file = "pycryptodomex-3.15.0-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0776bfaf2c48154ab54ea45392847c1283d2fcf64e232e85565f858baedfc1fa"}, - {file = "pycryptodomex-3.15.0-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:463119d7d22d0fc04a0f9122e9d3e6121c6648bcb12a052b51bd1eed1b996aa2"}, - {file = "pycryptodomex-3.15.0-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:a07a64709e366c2041cd5cfbca592b43998bf4df88f7b0ca73dca37071ccf1bd"}, - {file = "pycryptodomex-3.15.0-pp36-pypy36_pp73-win32.whl", hash = "sha256:35a8f7afe1867118330e2e0e0bf759c409e28557fb1fc2fbb1c6c937297dbe9a"}, - {file = "pycryptodomex-3.15.0.tar.gz", hash = "sha256:7341f1bb2dadb0d1a0047f34c3a58208a92423cdbd3244d998e4b28df5eac0ed"}, + {file = "pycryptodomex-3.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca88f2f7020002638276439a01ffbb0355634907d1aa5ca91f3dc0c2e44e8f3b"}, + {file = "pycryptodomex-3.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:8536bc08d130cae6dcba1ea689f2913dfd332d06113904d171f2f56da6228e89"}, + {file = "pycryptodomex-3.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:406ec8cfe0c098fadb18d597dc2ee6de4428d640c0ccafa453f3d9b2e58d29e2"}, + {file = "pycryptodomex-3.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:da8db8374295fb532b4b0c467e66800ef17d100e4d5faa2bbbd6df35502da125"}, + {file = "pycryptodomex-3.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:d709572d64825d8d59ea112e11cc7faf6007f294e9951324b7574af4251e4de8"}, + {file = "pycryptodomex-3.14.1-cp27-cp27m-win32.whl", hash = "sha256:3da13c2535b7aea94cc2a6d1b1b37746814c74b6e80790daddd55ca5c120a489"}, + {file = "pycryptodomex-3.14.1-cp27-cp27m-win_amd64.whl", hash = "sha256:298c00ea41a81a491d5b244d295d18369e5aac4b61b77b2de5b249ca61cd6659"}, + {file = "pycryptodomex-3.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:77931df40bb5ce5e13f4de2bfc982b2ddc0198971fbd947776c8bb5050896eb2"}, + {file = "pycryptodomex-3.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:c5dd3ffa663c982d7f1be9eb494a8924f6d40e2e2f7d1d27384cfab1b2ac0662"}, + {file = "pycryptodomex-3.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:2aa887683eee493e015545bd69d3d21ac8d5ad582674ec98f4af84511e353e45"}, + {file = "pycryptodomex-3.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:8085bd0ad2034352eee4d4f3e2da985c2749cb7344b939f4d95ead38c2520859"}, + {file = "pycryptodomex-3.14.1-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:e95a4a6c54d27a84a4624d2af8bb9ee178111604653194ca6880c98dcad92f48"}, + {file = "pycryptodomex-3.14.1-cp35-abi3-manylinux1_i686.whl", hash = "sha256:a4d412eba5679ede84b41dbe48b1bed8f33131ab9db06c238a235334733acc5e"}, + {file = "pycryptodomex-3.14.1-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:d2cce1c82a7845d7e2e8a0956c6b7ed3f1661c9acf18eb120fc71e098ab5c6fe"}, + {file = "pycryptodomex-3.14.1-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:f75009715dcf4a3d680c2338ab19dac5498f8121173a929872950f4fb3a48fbf"}, + {file = "pycryptodomex-3.14.1-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:1ca8e1b4c62038bb2da55451385246f51f412c5f5eabd64812c01766a5989b4a"}, + {file = "pycryptodomex-3.14.1-cp35-abi3-win32.whl", hash = "sha256:ee835def05622e0c8b1435a906491760a43d0c462f065ec9143ec4b8d79f8bff"}, + {file = "pycryptodomex-3.14.1-cp35-abi3-win_amd64.whl", hash = "sha256:b5a185ae79f899b01ca49f365bdf15a45d78d9856f09b0de1a41b92afce1a07f"}, + {file = "pycryptodomex-3.14.1-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:797a36bd1f69df9e2798e33edb4bd04e5a30478efc08f9428c087f17f65a7045"}, + {file = "pycryptodomex-3.14.1-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:aebecde2adc4a6847094d3bd6a8a9538ef3438a5ea84ac1983fcb167db614461"}, + {file = "pycryptodomex-3.14.1-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:f8524b8bc89470cec7ac51734907818d3620fb1637f8f8b542d650ebec42a126"}, + {file = "pycryptodomex-3.14.1-pp27-pypy_73-win32.whl", hash = "sha256:4d0db8df9ffae36f416897ad184608d9d7a8c2b46c4612c6bc759b26c073f750"}, + {file = "pycryptodomex-3.14.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b276cc4deb4a80f9dfd47a41ebb464b1fe91efd8b1b8620cf5ccf8b824b850d6"}, + {file = "pycryptodomex-3.14.1-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:e36c7e3b5382cd5669cf199c4a04a0279a43b2a3bdd77627e9b89778ac9ec08c"}, + {file = "pycryptodomex-3.14.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:c4d8977ccda886d88dc3ca789de2f1adc714df912ff3934b3d0a3f3d777deafb"}, + {file = "pycryptodomex-3.14.1-pp36-pypy36_pp73-win32.whl", hash = "sha256:530756d2faa40af4c1f74123e1d889bd07feae45bac2fd32f259a35f7aa74151"}, + {file = "pycryptodomex-3.14.1.tar.gz", hash = "sha256:2ce76ed0081fd6ac8c74edc75b9d14eca2064173af79843c24fa62573263c1f2"}, ] pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, + {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"}, + {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"}, ] pytest = [ {file = "pytest-7.1.2-py3-none-any.whl", hash = "sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c"}, @@ -1256,22 +1338,13 @@ pytest-cov = [ {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, ] -pytest-django = [ - {file = "pytest-django-4.5.2.tar.gz", hash = "sha256:d9076f759bb7c36939dbdd5ae6633c18edfc2902d1a69fdbefd2426b970ce6c2"}, - {file = "pytest_django-4.5.2-py3-none-any.whl", hash = "sha256:c60834861933773109334fe5a53e83d1ef4828f2203a1d6a0fa9972f4f75ab3e"}, -] -pytest-mock = [ - {file = "pytest-mock-3.8.2.tar.gz", hash = "sha256:77f03f4554392558700295e05aed0b1096a20d4a60a4f3ddcde58b0c31c8fca2"}, - {file = "pytest_mock-3.8.2-py3-none-any.whl", hash = "sha256:8a9e226d6c0ef09fcf20c94eb3405c388af438a90f3e39687f84166da82d5948"}, -] -python-dateutil = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] python-dotenv = [ {file = "python-dotenv-0.20.0.tar.gz", hash = "sha256:b7e3b04a59693c42c36f9ab1cc2acc46fa5df8c78e178fc33a8d4cd05c8d498f"}, {file = "python_dotenv-0.20.0-py3-none-any.whl", hash = "sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938"}, ] +python-multipart = [ + {file = "python-multipart-0.0.5.tar.gz", hash = "sha256:f7bb5f611fc600d15fa47b3974c8aa16e93724513b49b5f95c81e6624c83fa43"}, +] python-slugify = [ {file = "python-slugify-6.1.2.tar.gz", hash = "sha256:272d106cb31ab99b3496ba085e3fea0e9e76dcde967b5e9992500d1f785ce4e1"}, {file = "python_slugify-6.1.2-py2.py3-none-any.whl", hash = "sha256:7b2c274c308b62f4269a9ba701aa69a797e9bca41aeee5b3a9e79e36b6656927"}, @@ -1311,21 +1384,15 @@ pyyaml = [ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] -redis = [ - {file = "redis-4.3.4-py3-none-any.whl", hash = "sha256:a52d5694c9eb4292770084fa8c863f79367ca19884b329ab574d5cb2036b3e54"}, - {file = "redis-4.3.4.tar.gz", hash = "sha256:ddf27071df4adf3821c4f2ca59d67525c3a82e5f268bed97b813cb4fabf87880"}, -] requests = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, + {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, + {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, ] -rq = [ - {file = "rq-1.10.1-py2.py3-none-any.whl", hash = "sha256:92f4cf38b2364c1697b541e77c0fe62b7e5242fa864324f262be126ee2a07e3a"}, - {file = "rq-1.10.1.tar.gz", hash = "sha256:62d06b44c3acfa5d1933c5a4ec3fbc2484144a8af60e318d0b8447c5236271e2"}, +rfeed = [ + {file = "rfeed-1.1.1.tar.gz", hash = "sha256:aa9506f2866b74f5a322d394a14a63c19a6825c2d94755ff19d46dd1e2434819"}, ] -rq-scheduler = [ - {file = "rq-scheduler-0.11.0.tar.gz", hash = "sha256:db79bb56cdbc4f7ffdd8bd659e389e91aa0db9c1abf002dc46f5dd6f0dbd2910"}, - {file = "rq_scheduler-0.11.0-py2.py3-none-any.whl", hash = "sha256:da94e9b6badf112995ff38fe16192e4f4c43c412b3c9614684ed8c8f7ca517d2"}, +scrapetube = [ + {file = "scrapetube-2.2.2-py3-none-any.whl", hash = "sha256:73aef77d42aa182bcd3cc7f9ebee28bc01d6b34d615d205679ebc54be1f9807f"}, ] sgmllib3k = [ {file = "sgmllib3k-1.0.0.tar.gz", hash = "sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9"}, @@ -1334,13 +1401,59 @@ six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] -sortedcontainers = [ - {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, - {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +sniffio = [ + {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"}, + {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"}, ] -sqlparse = [ - {file = "sqlparse-0.4.2-py3-none-any.whl", hash = "sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d"}, - {file = "sqlparse-0.4.2.tar.gz", hash = "sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae"}, +sqlalchemy = [ + {file = "SQLAlchemy-1.4.36-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:81e53bd383c2c33de9d578bfcc243f559bd3801a0e57f2bcc9a943c790662e0c"}, + {file = "SQLAlchemy-1.4.36-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6e1fe00ee85c768807f2a139b83469c1e52a9ffd58a6eb51aa7aeb524325ab18"}, + {file = "SQLAlchemy-1.4.36-cp27-cp27m-win32.whl", hash = "sha256:d57ac32f8dc731fddeb6f5d1358b4ca5456e72594e664769f0a9163f13df2a31"}, + {file = "SQLAlchemy-1.4.36-cp27-cp27m-win_amd64.whl", hash = "sha256:fca8322e04b2dde722fcb0558682740eebd3bd239bea7a0d0febbc190e99dc15"}, + {file = "SQLAlchemy-1.4.36-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:53d2d9ee93970c969bc4e3c78b1277d7129554642f6ffea039c282c7dc4577bc"}, + {file = "SQLAlchemy-1.4.36-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:f0394a3acfb8925db178f7728adb38c027ed7e303665b225906bfa8099dc1ce8"}, + {file = "SQLAlchemy-1.4.36-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c606d8238feae2f360b8742ffbe67741937eb0a05b57f536948d198a3def96"}, + {file = "SQLAlchemy-1.4.36-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8d07fe2de0325d06e7e73281e9a9b5e259fbd7cbfbe398a0433cbb0082ad8fa7"}, + {file = "SQLAlchemy-1.4.36-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5041474dcab7973baa91ec1f3112049a9dd4652898d6a95a6a895ff5c58beb6b"}, + {file = "SQLAlchemy-1.4.36-cp310-cp310-win32.whl", hash = "sha256:be094460930087e50fd08297db9d7aadaed8408ad896baf758e9190c335632da"}, + {file = "SQLAlchemy-1.4.36-cp310-cp310-win_amd64.whl", hash = "sha256:64d796e9af522162f7f2bf7a3c5531a0a550764c426782797bbeed809d0646c5"}, + {file = "SQLAlchemy-1.4.36-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:a0ae3aa2e86a4613f2d4c49eb7da23da536e6ce80b2bfd60bbb2f55fc02b0b32"}, + {file = "SQLAlchemy-1.4.36-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d50cb71c1dbed70646d521a0975fb0f92b7c3f84c61fa59e07be23a1aaeecfc"}, + {file = "SQLAlchemy-1.4.36-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:16abf35af37a3d5af92725fc9ec507dd9e9183d261c2069b6606d60981ed1c6e"}, + {file = "SQLAlchemy-1.4.36-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864a83bd345871ad9699ce466388f836db7572003d67d9392a71998092210e3"}, + {file = "SQLAlchemy-1.4.36-cp36-cp36m-win32.whl", hash = "sha256:fbf8c09fe9728168f8cc1b40c239eab10baf9c422c18be7f53213d70434dea43"}, + {file = "SQLAlchemy-1.4.36-cp36-cp36m-win_amd64.whl", hash = "sha256:6e859fa96605027bd50d8e966db1c4e1b03e7b3267abbc4b89ae658c99393c58"}, + {file = "SQLAlchemy-1.4.36-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:166a3887ec355f7d2f12738f7fa25dc8ac541867147a255f790f2f41f614cb44"}, + {file = "SQLAlchemy-1.4.36-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e885548da361aa3f8a9433db4cfb335b2107e533bf314359ae3952821d84b3e"}, + {file = "SQLAlchemy-1.4.36-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5c90ef955d429966d84326d772eb34333178737ebb669845f1d529eb00c75e72"}, + {file = "SQLAlchemy-1.4.36-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a052bd9f53004f8993c624c452dfad8ec600f572dd0ed0445fbe64b22f5570e"}, + {file = "SQLAlchemy-1.4.36-cp37-cp37m-win32.whl", hash = "sha256:dce3468bf1fc12374a1a732c9efd146ce034f91bb0482b602a9311cb6166a920"}, + {file = "SQLAlchemy-1.4.36-cp37-cp37m-win_amd64.whl", hash = "sha256:6cb4c4f57a20710cea277edf720d249d514e587f796b75785ad2c25e1c0fed26"}, + {file = "SQLAlchemy-1.4.36-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e74ce103b81c375c3853b436297952ef8d7863d801dcffb6728d01544e5191b5"}, + {file = "SQLAlchemy-1.4.36-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b20c4178ead9bc398be479428568ff31b6c296eb22e75776273781a6551973f"}, + {file = "SQLAlchemy-1.4.36-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:af2587ae11400157753115612d6c6ad255143efba791406ad8a0cbcccf2edcb3"}, + {file = "SQLAlchemy-1.4.36-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83cf3077712be9f65c9aaa0b5bc47bc1a44789fd45053e2e3ecd59ff17c63fe9"}, + {file = "SQLAlchemy-1.4.36-cp38-cp38-win32.whl", hash = "sha256:ce20f5da141f8af26c123ebaa1b7771835ca6c161225ce728962a79054f528c3"}, + {file = "SQLAlchemy-1.4.36-cp38-cp38-win_amd64.whl", hash = "sha256:316c7e5304dda3e3ad711569ac5d02698bbc71299b168ac56a7076b86259f7ea"}, + {file = "SQLAlchemy-1.4.36-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:f522214f6749bc073262529c056f7dfd660f3b5ec4180c5354d985eb7219801e"}, + {file = "SQLAlchemy-1.4.36-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ecac4db8c1aa4a269f5829df7e706639a24b780d2ac46b3e485cbbd27ec0028"}, + {file = "SQLAlchemy-1.4.36-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b3db741beaa983d4cbf9087558620e7787106319f7e63a066990a70657dd6b35"}, + {file = "SQLAlchemy-1.4.36-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ec89bf98cc6a0f5d1e28e3ad28e9be6f3b4bdbd521a4053c7ae8d5e1289a8a1"}, + {file = "SQLAlchemy-1.4.36-cp39-cp39-win32.whl", hash = "sha256:e12532c4d3f614678623da5d852f038ace1f01869b89f003ed6fe8c793f0c6a3"}, + {file = "SQLAlchemy-1.4.36-cp39-cp39-win_amd64.whl", hash = "sha256:cb441ca461bf97d00877b607f132772644b623518b39ced54da433215adce691"}, + {file = "SQLAlchemy-1.4.36.tar.gz", hash = "sha256:64678ac321d64a45901ef2e24725ec5e783f1f4a588305e196431447e7ace243"}, +] +sqlalchemy-utils = [ + {file = "SQLAlchemy-Utils-0.38.2.tar.gz", hash = "sha256:9e01d6d3fb52d3926fcd4ea4a13f3540701b751aced0316bff78264402c2ceb4"}, + {file = "SQLAlchemy_Utils-0.38.2-py3-none-any.whl", hash = "sha256:622235b1598f97300e4d08820ab024f5219c9a6309937a8b908093f487b4ba54"}, +] +starlette = [ + {file = "starlette-0.19.1-py3-none-any.whl", hash = "sha256:5a60c5c2d051f3a8eb546136aa0c9399773a689595e099e0877704d5888279bf"}, + {file = "starlette-0.19.1.tar.gz", hash = "sha256:c6d21096774ecb9639acad41b86b7706e52ba3bf1dc13ea4ed9ad593d47e24c7"}, +] +starlette-core = [ + {file = "starlette-core-0.0.1.tar.gz", hash = "sha256:c8f7a8acfd5143008568f76c38987accda670dfce3ec6633f5f55ba1726d5698"}, + {file = "starlette_core-0.0.1-py3-none-any.whl", hash = "sha256:ea8c97682d03249ee361af997d791719ae189133c3e3efc3c73691b89df27c64"}, ] text-unidecode = [ {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, @@ -1354,17 +1467,25 @@ tomli = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] -tzdata = [ - {file = "tzdata-2022.1-py2.py3-none-any.whl", hash = "sha256:238e70234214138ed7b4e8a0fab0e5e13872edab3be586ab8198c407620e2ab9"}, - {file = "tzdata-2022.1.tar.gz", hash = "sha256:8b536a8ec63dc0751342b3984193a3118f8fca2afe25752bb9b7fffd398552d3"}, +typing = [ + {file = "typing-3.7.4.3-py2-none-any.whl", hash = "sha256:283d868f5071ab9ad873e5e52268d611e851c870a2ba354193026f2dfb29d8b5"}, + {file = "typing-3.7.4.3.tar.gz", hash = "sha256:1187fb9c82fd670d10aa07bbb6cfcfe4bdda42d6fab8d5134f04e8c4d0b71cc9"}, +] +typing-extensions = [ + {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, + {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, ] urllib3 = [ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, ] +uvicorn = [ + {file = "uvicorn-0.17.6-py3-none-any.whl", hash = "sha256:19e2a0e96c9ac5581c01eb1a79a7d2f72bb479691acd2b8921fce48ed5b961a6"}, + {file = "uvicorn-0.17.6.tar.gz", hash = "sha256:5180f9d059611747d841a4a4c4ab675edf54c8489e97f96d0583ee90ac3bfc23"}, +] virtualenv = [ - {file = "virtualenv-20.15.1-py2.py3-none-any.whl", hash = "sha256:b30aefac647e86af6d82bfc944c556f8f1a9c90427b2fb4e3bfbf338cb82becf"}, - {file = "virtualenv-20.15.1.tar.gz", hash = "sha256:288171134a2ff3bfb1a2f54f119e77cd1b81c29fc1265a2356f3e8d14c7d58c4"}, + {file = "virtualenv-20.14.1-py2.py3-none-any.whl", hash = "sha256:e617f16e25b42eb4f6e74096b9c9e37713cf10bf30168fb4a739f3fa8f898a3a"}, + {file = "virtualenv-20.14.1.tar.gz", hash = "sha256:ef589a79795589aada0c1c5b319486797c03b67ac3984c48c669c0e4f50df3a5"}, ] wcag-contrast-ratio = [ {file = "wcag-contrast-ratio-0.9.tar.gz", hash = "sha256:69192b8e5c0a7d0dc5ff1187eeb3e398141633a4bde51c69c87f58fe87ed361c"}, @@ -1419,73 +1540,11 @@ websockets = [ {file = "websockets-10.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3eda1cb7e9da1b22588cefff09f0951771d6ee9fa8dbe66f5ae04cc5f26b2b55"}, {file = "websockets-10.3.tar.gz", hash = "sha256:fc06cc8073c8e87072138ba1e431300e2d408f054b27047d047b549455066ff4"}, ] -wrapt = [ - {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, - {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, - {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, - {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, - {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, - {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, - {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, - {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, - {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, - {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, - {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, - {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, - {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, - {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, - {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, - {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, +wtforms = [ + {file = "WTForms-3.0.1-py3-none-any.whl", hash = "sha256:837f2f0e0ca79481b92884962b914eba4e72b7a2daaf1f939c890ed0124b834b"}, + {file = "WTForms-3.0.1.tar.gz", hash = "sha256:6b351bbb12dd58af57ffef05bc78425d08d1914e0fd68ee14143b7ade023c5bc"}, ] yt-dlp = [ - {file = "yt-dlp-2022.6.29.tar.gz", hash = "sha256:5fbfac72fd035d11bc2693e5d1cd6933b1bc0712f742f5082a261703810bb5c9"}, - {file = "yt_dlp-2022.6.29-py2.py3-none-any.whl", hash = "sha256:a688f5cbc4a824456983774ccdd4a12befd379f6c92e25074fa85e7b8ce31704"}, + {file = "yt-dlp-2022.4.8.tar.gz", hash = "sha256:8758d016509d4574b90fbde975aa70adaef71ed5e7a195141588f6d6945205ba"}, + {file = "yt_dlp-2022.4.8-py2.py3-none-any.whl", hash = "sha256:6edefe326b1e1478fdbe627a66203e5248a6b0dd50c101e682cf700ab70cdf72"}, ] diff --git a/pyproject.toml b/pyproject.toml index 78dd21f..caeb5da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,59 +1,46 @@ [tool.poetry] name = "ucast" -version = "0.4.6" +version = "0.0.1" description = "YouTube to Podcast converter" authors = ["Theta-Dev <t.testboy@gmail.com>"] -packages = [ - { include = "ucast" }, - { include = "ucast_project" }, -] [tool.poetry.dependencies] python = "^3.10" -Django = "^4.0.4" -yt-dlp = "^2022.6.29" -requests = "^2.28.1" +starlette = {extras = ["full"], version = "^0.19.1"} +uvicorn = "^0.17.6" +yt-dlp = "^2022.3.8" +scrapetube = "^2.2.2" +rfeed = "^1.1.1" feedparser = "^6.0.8" Pillow = "^9.1.0" colorthief = "^0.2.1" wcag-contrast-ratio = "^0.9" font-source-sans-pro = "^0.0.1" fonts = "^0.0.3" -django-bulma = "^0.8.3" -python-dotenv = "^0.20.0" -psycopg2 = "^2.9.3" -mysqlclient = "^2.1.1" +alembic = "^1.7.7" python-slugify = "^6.1.2" -mutagen = "^1.45.1" -rq = "^1.10.1" -rq-scheduler = "^0.11.0" -pycryptodomex = "^3.14.1" -django-htmx = "^1.12.0" +starlette-core = "^0.0.1" +click = "^8.1.3" +python-dotenv = "^0.20.0" +mysqlclient = "^2.1.0" +psycopg2 = "^2.9.3" [tool.poetry.dev-dependencies] -pytest = "^7.1.1" +pytest = "^7.1.2" pytest-cov = "^3.0.0" invoke = "^1.7.0" -pytest-django = "^4.5.2" -pre-commit = "^2.19.0" -honcho = "^1.1.0" -pytest-mock = "^3.7.0" -fakeredis = "^1.7.5" -gunicorn = "^20.1.0" -bump2version = "^1.0.1" +pre-commit = "^2.18.1" +virtualenv = "20.14.1" [tool.poetry.scripts] -"ucast-manage" = "ucast_project.manage:main" +ucast = "ucast.__main__:cli" [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" -[tool.pytest.ini_options] -DJANGO_SETTINGS_MODULE = "ucast_project.settings" - [tool.flake8] -extend-ignore = "E501" +max-line-length = 88 [tool.black] line-length = 88 diff --git a/tasks.py b/tasks.py index c81d8be..287db3c 100644 --- a/tasks.py +++ b/tasks.py @@ -1,150 +1,68 @@ import os -import shutil -import sys from pathlib import Path +from tempfile import TemporaryDirectory -from honcho import manager -from invoke import Responder, task +from invoke import task -from ucast import tests -from ucast.service import cover, util, youtube +import tests +from ucast import cover, util, youtube os.chdir(Path(__file__).absolute().parent) +db_file = Path("_run/ucast.db").absolute() -DIR_RUN = Path("_run").absolute() -DIR_STATIC = DIR_RUN / "static" -DIR_DOWNLOAD = DIR_RUN / "data" -FILE_DB = DIR_RUN / "db.sqlite" +# Configure application +os.environ["DEBUG"] = "true" +os.environ["SECRET_KEY"] = "1234" +os.environ["DATABASE_URL"] = f"sqlite:///{db_file}" @task def test(c): - """Run unit tests""" - c.run("pytest", pty=True) + c.run("pytest tests", pty=True) @task -def lint(c): - """Check for code quality and formatting""" - c.run("pre-commit run -a", pty=True) - - -@task -def format(c): - """Format the code with black""" - c.run("pre-commit run black -a", pty=True) - - -@task -def makemigrations(c): - """Create a new migration that applies the changes made to the data model""" - c.run("python manage.py makemigrations ucast") - - -@task -def collectstatic(c): - """Copy static files into a common folder""" - c.run("python manage.py collectstatic --noinput") - - -@task -def migrate(c): - """Migrate the database""" - c.run("python manage.py migrate") - - -@task -def create_testuser(c): - """Create a test user with the credentials admin:pass""" - responder_pwd = Responder(pattern=r"Password.*: ", response="pass\n") - responder_yes = Responder(pattern=r"Bypass password validation", response="y\n") - - c.run( - "python manage.py createsuperuser --username admin --email admin@example.com", - pty=True, - watchers=[responder_pwd, responder_yes], - ) +def run(c): + os.chdir("ucast") + c.run("alembic upgrade head") + c.run("python app.py") @task def get_cover(c, vid=""): - """ - Download thumbnail image of the YouTube video with the id - from the ``--vid`` parameter and create cover images from it. - - The images are stored in the ``ucast/tests/testfiles`` directory. - """ - vinfo = youtube.get_video_details(vid) - title = vinfo.title - channel_name = vinfo.channel_name - channel_id = vinfo.channel_id - channel_metadata = youtube.get_channel_metadata( - youtube.channel_url_from_id(channel_id) - ) + vinfo = youtube.get_video_info(vid) + title = vinfo["fulltitle"] + channel_name = vinfo["uploader"] + thumbnail_url = youtube.get_thumbnail_url(vinfo) + channel_url = vinfo["channel_url"] + channel_metadata = youtube.get_channel_metadata(channel_url) ti = 1 - while os.path.exists(tests.DIR_TESTFILES / "avatar" / f"a{ti}.jpg"): + while os.path.exists(tests.DIR_TESTFILES / "cover" / f"c{ti}.png"): ti += 1 tn_file = tests.DIR_TESTFILES / "thumbnail" / f"t{ti}.webp" av_file = tests.DIR_TESTFILES / "avatar" / f"a{ti}.jpg" - cv_file = tests.DIR_TESTFILES / "cover" / f"c{ti}_gradient.png" - cv_blur_file = tests.DIR_TESTFILES / "cover" / f"c{ti}_blur.png" + cv_file = tests.DIR_TESTFILES / "cover" / f"c{ti}.png" - youtube.download_thumbnail(vinfo, tn_file) - util.download_image_file(channel_metadata.avatar_url, av_file) + util.download_file(thumbnail_url, tn_file) + util.download_file(channel_metadata.avatar_url, av_file) - cover.create_cover_file( - tn_file, av_file, title, channel_name, cover.COVER_STYLE_GRADIENT, cv_file - ) - cover.create_cover_file( - tn_file, av_file, title, channel_name, cover.COVER_STYLE_BLUR, cv_blur_file - ) + cover.create_cover_file(tn_file, av_file, title, channel_name, cv_file) @task -def build_devcontainer(c): - c.run( - "docker buildx build -t thetadev256/ucast-dev --push --platform amd64,arm64,armhf -f deploy/Devcontainer.Dockerfile deploy" - ) +def add_migration(c, m=""): + if not m: + raise Exception("please input migration name") + tmpdir_o = TemporaryDirectory() + tmpdir = Path(tmpdir_o.name) + db_file = tmpdir / "migrate.db" -@task -def reset(c): - if DIR_DOWNLOAD.exists(): - shutil.rmtree(DIR_DOWNLOAD) - if FILE_DB.exists(): - os.remove(FILE_DB) - os.makedirs(DIR_DOWNLOAD, exist_ok=True) - migrate(c) - create_testuser(c) - collectstatic(c) + os.environ["DATABASE_URL"] = f"sqlite:///{db_file}" + os.chdir("ucast") -@task -def worker(c, n=2): - m = manager.Manager() - - for i in range(n): - m.add_process(f"worker_{i}", "python manage.py rqworker") - - m.add_process("scheduler", "python manage.py rqscheduler") - - m.loop() - sys.exit(m.returncode) - - -@task -def optimize_svg(c): - out_dir = Path("ucast/static/ucast") - - for icon in (Path("assets/icons/logo.svg"), Path("assets/icons/logo_dark.svg")): - c.run( - f"scour --indent=none --no-line-breaks --enable-comment-stripping {icon} {out_dir / icon.name}" - ) - - -@task -def build_sass(c): - c.run("npm run build") - collectstatic(c) + c.run("alembic upgrade head") + c.run(f"alembic revision --autogenerate -m '{m}'") diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..8b21d67 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1,4 @@ +# coding=utf-8 +from importlib.resources import files + +DIR_TESTFILES = files("tests.testfiles") diff --git a/ucast/tests/service/test_cover.py b/tests/test_cover.py similarity index 52% rename from ucast/tests/service/test_cover.py rename to tests/test_cover.py index 475b5f3..386e4bf 100644 --- a/ucast/tests/service/test_cover.py +++ b/tests/test_cover.py @@ -1,3 +1,4 @@ +# coding=utf-8 import tempfile from pathlib import Path from typing import List @@ -6,8 +7,8 @@ import pytest from fonts.ttf import SourceSansPro from PIL import Image, ImageChops, ImageFont -from ucast import tests -from ucast.service import cover, typ +import tests +from ucast import cover, typ @pytest.mark.parametrize( @@ -25,7 +26,8 @@ from ucast.service import cover, typ ( 1000, 300, - "Ha! du wärst Obrigkeit von Gott? Gott spendet Segen aus; du raubst! Du nicht von Gott, Tyrann!", + "Ha! du wärst Obrigkeit von Gott? Gott spendet Segen aus; du raubst! \ +Du nicht von Gott, Tyrann!", [ "Ha! du wärst", "Obrigkeit von", @@ -48,7 +50,7 @@ def test_split_text(height: int, width: int, text: str, expect: List[str]): "file_name,color", [ ("t1.webp", (63, 63, 62)), - ("t2.webp", (22, 20, 20)), + ("t2.webp", (74, 45, 37)), ("t3.webp", (54, 24, 28)), ], ) @@ -71,89 +73,23 @@ def test_get_text_color(bg_color: typ.Color, text_color: typ.Color): @pytest.mark.parametrize( - "n_image,title,channel,style", + "n_image,title,channel", [ - (1, "ThetaDev @ Embedded World 2019", "ThetaDev", cover.COVER_STYLE_GRADIENT), - (1, "ThetaDev @ Embedded World 2019", "ThetaDev", cover.COVER_STYLE_BLUR), - ( - 2, - "Sintel - Open Movie by Blender Foundation", - "Blender", - cover.COVER_STYLE_GRADIENT, - ), - ( - 2, - "Sintel - Open Movie by Blender Foundation", - "Blender", - cover.COVER_STYLE_BLUR, - ), - ( - 3, - "Systemabsturz Teaser zur DiVOC bb3", - "media.ccc.de", - cover.COVER_STYLE_GRADIENT, - ), - ( - 3, - "Systemabsturz Teaser zur DiVOC bb3", - "media.ccc.de", - cover.COVER_STYLE_BLUR, - ), + (1, "ThetaDev @ Embedded World 2019", "ThetaDev"), + (2, "Sintel - Open Movie by Blender Foundation", "Blender"), + (3, "Systemabsturz Teaser zur DiVOC bb3", "media.ccc.de"), ], ) -def test_create_cover_image( - n_image: int, title: str, channel: str, style: cover.CoverStyle -): +def test_create_cover_image(n_image: int, title: str, channel: str): tn_file = tests.DIR_TESTFILES / "thumbnail" / f"t{n_image}.webp" av_file = tests.DIR_TESTFILES / "avatar" / f"a{n_image}.jpg" - expected_cv_file = tests.DIR_TESTFILES / "cover" / f"c{n_image}_{style}.png" + expected_cv_file = tests.DIR_TESTFILES / "cover" / f"c{n_image}.png" tn_image = Image.open(tn_file) av_image = Image.open(av_file) expected_cv_image = Image.open(expected_cv_file) - cv_image = cover._create_cover_image(tn_image, av_image, title, channel, style) - - assert cv_image.width == cover.COVER_WIDTH - assert cv_image.height == cover.COVER_WIDTH - - diff = ImageChops.difference(cv_image, expected_cv_image) - assert diff.getbbox() is None - - -def test_create_cover_image_noavatar(): - tn_file = tests.DIR_TESTFILES / "thumbnail" / "t1.webp" - expected_cv_file = tests.DIR_TESTFILES / "cover" / "c1_noavatar.png" - - tn_image = Image.open(tn_file) - expected_cv_image = Image.open(expected_cv_file) - - cv_image = cover._create_cover_image( - tn_image, - None, - "ThetaDev @ Embedded World 2019", - "ThetaDev", - cover.COVER_STYLE_GRADIENT, - ) - - assert cv_image.width == cover.COVER_WIDTH - assert cv_image.height == cover.COVER_WIDTH - - diff = ImageChops.difference(cv_image, expected_cv_image) - assert diff.getbbox() is None - - -def test_create_blank_cover_image(): - av_file = tests.DIR_TESTFILES / "avatar" / "a1.jpg" - expected_cv_file = tests.DIR_TESTFILES / "cover" / "blank.png" - - av_image = Image.open(av_file) - expected_cv_image = Image.open(expected_cv_file) - - cv_image = cover._create_blank_cover_image(av_image, "missingno", "ThetaDev") - - assert cv_image.width == cover.COVER_WIDTH - assert cv_image.height == cover.COVER_WIDTH + cv_image = cover._create_cover_image(tn_image, av_image, title, channel) diff = ImageChops.difference(cv_image, expected_cv_image) assert diff.getbbox() is None @@ -162,19 +98,14 @@ def test_create_blank_cover_image(): def test_create_cover_file(): tn_file = tests.DIR_TESTFILES / "thumbnail" / "t1.webp" av_file = tests.DIR_TESTFILES / "avatar" / "a1.jpg" - expected_cv_file = tests.DIR_TESTFILES / "cover" / "c1_gradient.png" + expected_cv_file = tests.DIR_TESTFILES / "cover" / "c1.png" tmpdir_o = tempfile.TemporaryDirectory() tmpdir = Path(tmpdir_o.name) cv_file = tmpdir / "cover.png" cover.create_cover_file( - tn_file, - av_file, - "ThetaDev @ Embedded World 2019", - "ThetaDev", - "gradient", - cv_file, + tn_file, av_file, "ThetaDev @ Embedded World 2019", "ThetaDev", cv_file ) cv_image = Image.open(cv_file) diff --git a/tests/test_database.py b/tests/test_database.py new file mode 100644 index 0000000..d8977c8 --- /dev/null +++ b/tests/test_database.py @@ -0,0 +1,86 @@ +# coding=utf-8 +import os +from datetime import datetime + +import pytest +import sqlalchemy +from sqlalchemy import orm + +# from ucast import models +from ucast import db + + +def test_insert_channel(testdb): + c1 = db.models.Channel(id="UCE1PLliRk3urTjDG6kGByiA", name="Natalie Gold") + session.add(c1) + session.commit() + + c2 = db.models.Channel(id="UCGiJh0NZ52wRhYKYnuZI08Q", name="ThetaDev") + + session.add(c2) + session.commit() + + # stmt = sqlalchemy.select(models.Channel).where(models.Channel.name == "LinusTechTips") + # stmt = sqlalchemy.select(models.Channel) + # res = testdb.execute(stmt) + + res = session.query(models.Channel).all() + assert len(res) == 2 + assert res[0].name == "Natalie Gold" + assert res[1].name == "ThetaDev" + + +""" +@pytest.fixture(scope="session", autouse=True) +def testdb(): + try: + os.remove("test.db") + except: + pass + # url = "sqlite:///:memory:" + url = "sqlite:///test.db" + engine = sqlalchemy.create_engine(url) + models.metadata.create_all(engine) # Create the tables. + return engine + + +def test_insert_channel(testdb): + session_maker = orm.sessionmaker(bind=testdb) + session = session_maker() + c1 = models.Channel(id="UCE1PLliRk3urTjDG6kGByiA", name="Natalie Gold") + session.add(c1) + session.commit() + + c2 = models.Channel(id="UCGiJh0NZ52wRhYKYnuZI08Q", name="ThetaDev") + + session.add(c2) + session.commit() + + # stmt = sqlalchemy.select(models.Channel).where(models.Channel.name == "LinusTechTips") + # stmt = sqlalchemy.select(models.Channel) + # res = testdb.execute(stmt) + + res = session.query(models.Channel).all() + assert len(res) == 2 + assert res[0].name == "Natalie Gold" + assert res[1].name == "ThetaDev" + + +def test_insert_video(testdb): + session_maker = orm.sessionmaker(bind=testdb) + session = session_maker() + + c1 = models.Channel(id="UC0QEucPrn0-Ddi3JBTcs5Kw", name="Saria Delaney") + session.add(c1) + session.commit() + + v1 = models.Video(id="Bxhxzj8R_i0", + channel=c1, + title="Verschwiegen. Verraten. Verstummt. [Reupload: 10.10.2018]", + published=datetime(2020, 7, 4, 12, 21, 30), + description="") + v1.slug = v1.get_slug() + + session.add(v1) + session.commit() +""" diff --git a/ucast/tests/_testfiles/avatar/a1.jpg b/tests/testfiles/avatar/a1.jpg similarity index 100% rename from ucast/tests/_testfiles/avatar/a1.jpg rename to tests/testfiles/avatar/a1.jpg diff --git a/ucast/tests/_testfiles/avatar/a2.jpg b/tests/testfiles/avatar/a2.jpg similarity index 100% rename from ucast/tests/_testfiles/avatar/a2.jpg rename to tests/testfiles/avatar/a2.jpg diff --git a/ucast/tests/_testfiles/avatar/a3.jpg b/tests/testfiles/avatar/a3.jpg similarity index 100% rename from ucast/tests/_testfiles/avatar/a3.jpg rename to tests/testfiles/avatar/a3.jpg diff --git a/ucast/tests/_testfiles/cover/c1_gradient.png b/tests/testfiles/cover/c1.png similarity index 100% rename from ucast/tests/_testfiles/cover/c1_gradient.png rename to tests/testfiles/cover/c1.png diff --git a/tests/testfiles/cover/c2.png b/tests/testfiles/cover/c2.png new file mode 100644 index 0000000..ab4d221 Binary files /dev/null and b/tests/testfiles/cover/c2.png differ diff --git a/ucast/tests/_testfiles/cover/c3_gradient.png b/tests/testfiles/cover/c3.png similarity index 100% rename from ucast/tests/_testfiles/cover/c3_gradient.png rename to tests/testfiles/cover/c3.png diff --git a/tests/testfiles/sources.md b/tests/testfiles/sources.md new file mode 100644 index 0000000..2456116 --- /dev/null +++ b/tests/testfiles/sources.md @@ -0,0 +1,5 @@ +### Quellen der Thumbnails/Avatarbilder zum Testen + +- a1/t1: [ThetaDev](https://www.youtube.com/channel/UCGiJh0NZ52wRhYKYnuZI08Q) (CC-BY) +- a2/t2: [Blender](https://www.youtube.com/c/BlenderFoundation) (CC-BY) +- a3/t3: [media.ccc.de](https://www.youtube.com/channel/UC2TXq_t06Hjdr2g_KdKpHQg) (CC-BY) diff --git a/ucast/tests/_testfiles/thumbnail/t1.webp b/tests/testfiles/thumbnail/t1.webp similarity index 100% rename from ucast/tests/_testfiles/thumbnail/t1.webp rename to tests/testfiles/thumbnail/t1.webp diff --git a/tests/testfiles/thumbnail/t2.webp b/tests/testfiles/thumbnail/t2.webp new file mode 100644 index 0000000..fead8a8 Binary files /dev/null and b/tests/testfiles/thumbnail/t2.webp differ diff --git a/ucast/tests/_testfiles/thumbnail/t3.webp b/tests/testfiles/thumbnail/t3.webp similarity index 100% rename from ucast/tests/_testfiles/thumbnail/t3.webp rename to tests/testfiles/thumbnail/t3.webp diff --git a/ucast/__init__.py b/ucast/__init__.py index b87db4b..464fe19 100644 --- a/ucast/__init__.py +++ b/ucast/__init__.py @@ -1,5 +1,7 @@ -__version__ = "0.4.6" +# coding=utf-8 +__version__ = "0.0.1" - -def template_context(request): - return {"version": __version__} +UCAST_BANNER = """\ + ┬ ┬┌─┐┌─┐┌─┐┌┬┐ + │ ││ ├─┤└─┐ │ + └─┘└─┘┴ ┴└─┘ ┴ """ diff --git a/ucast/__main__.py b/ucast/__main__.py new file mode 100644 index 0000000..302942c --- /dev/null +++ b/ucast/__main__.py @@ -0,0 +1,77 @@ +import os +import sys +from importlib import resources +from pathlib import Path + +import dotenv +import uvicorn +from alembic import config as alembic_cmd + +import ucast + + +def load_dotenv(): + dotenv_path = dotenv.find_dotenv() + if dotenv_path: + dotenv.load_dotenv(dotenv_path) + os.chdir(Path(dotenv_path).absolute().parent) + print(f"Loaded config from envfile at {dotenv_path}") + + +def print_banner(): + print(ucast.UCAST_BANNER + ucast.__version__) + + +def print_help(): + print_banner() + print( + """ +Available commands: + run: start the server + migrate: apply database migrations + alembic: run the alembic migrator + +Configuration is read from the .env file or environment variables. +Refer to the project page for more information: https://code.thetadev.de/HSA/Ucast""" + ) + + +def run(): + print_banner() + load_dotenv() + from ucast import config + + uvicorn.run( + "ucast.app:create_app", + host="0.0.0.0", + port=config.HTTP_PORT, + factory=True, + reload=config.DEBUG, + ) + + +def alembic(args): + load_dotenv() + alembic_ini_path = resources.path("ucast", "alembic.ini") + os.environ["ALEMBIC_CONFIG"] = str(alembic_ini_path) + + alembic_cmd.main(args, f"{sys.argv[0]} alembic") + + +def cli(): + if len(sys.argv) < 2: + sys.exit(print_help()) + + cmd = sys.argv[1] + args = sys.argv[2:] + + if cmd == "run": + sys.exit(run()) + elif cmd == "alembic": + sys.exit(alembic(args)) + else: + sys.exit(print_help()) + + +if __name__ == "__main__": + cli() diff --git a/ucast/admin.py b/ucast/admin.py deleted file mode 100644 index e50cc42..0000000 --- a/ucast/admin.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.contrib import admin - -from ucast.models import Channel, User, Video - - -class ChannelAdmin(admin.ModelAdmin): - list_display = ["name", "id"] - - -class VideoAdmin(admin.ModelAdmin): - list_display = ["title", "published"] - ordering = ("-published",) - - -admin.site.register(Channel, ChannelAdmin) -admin.site.register(Video, VideoAdmin) -admin.site.register(User) diff --git a/ucast/alembic.ini b/ucast/alembic.ini new file mode 100644 index 0000000..fabed10 --- /dev/null +++ b/ucast/alembic.ini @@ -0,0 +1,100 @@ +# A generic, single database configuration. + +[alembic] +# path to migration scripts +script_location = ucast:migrations + +# template used to generate migration files +file_template = %%(year)d-%%(month).2d-%%(day).2d_%%(rev)s_%%(slug)s + +# sys.path path, will be prepended to sys.path if present. +# defaults to the current working directory. +prepend_sys_path = . + +# timezone to use when rendering the date within the migration file +# as well as the filename. +# If specified, requires the python-dateutil library that can be +# installed by adding `alembic[tz]` to the pip requirements +# string value is passed to dateutil.tz.gettz() +# leave blank for localtime +# timezone = + +# max length of characters to apply to the +# "slug" field +# truncate_slug_length = 40 + +# set to 'true' to run the environment during +# the 'revision' command, regardless of autogenerate +# revision_environment = false + +# set to 'true' to allow .pyc and .pyo files without +# a source .py file to be detected as revisions in the +# versions/ directory +# sourceless = false + +# version location specification; This defaults +# to migrations/versions. When using multiple version +# directories, initial revisions must be specified with --version-path. +# The path separator used here should be the separator specified by "version_path_separator" below. +# version_locations = %(here)s/bar:%(here)s/bat:migrations/versions + +# version path separator; As mentioned above, this is the character used to split +# version_locations. The default within new alembic.ini files is "os", which uses os.pathsep. +# If this key is omitted entirely, it falls back to the legacy behavior of splitting on spaces and/or commas. +# Valid values for version_path_separator are: +# +# version_path_separator = : +# version_path_separator = ; +# version_path_separator = space +version_path_separator = os # Use os.pathsep. Default configuration used for new projects. + +# the output encoding used when revision files +# are written from script.py.mako +# output_encoding = utf-8 + + +[post_write_hooks] +# post_write_hooks defines scripts or Python functions that are run +# on newly generated revision scripts. See the documentation for further +# detail and examples + +# format using "black" - use the console_scripts runner, against the "black" entrypoint +# hooks = black +# black.type = console_scripts +# black.entrypoint = black +# black.options = -l 79 REVISION_SCRIPT_FILENAME + +# Logging configuration +[loggers] +keys = root,sqlalchemy,alembic + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARN +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S diff --git a/ucast/app.py b/ucast/app.py new file mode 100644 index 0000000..17ac6c1 --- /dev/null +++ b/ucast/app.py @@ -0,0 +1,20 @@ +# coding=utf-8 +from starlette.applications import Starlette +from starlette.routing import Route + +from ucast import config, views + + +def create_app(): + app = Starlette( + config.DEBUG, + routes=[ + Route("/", views.homepage), + Route("/err", views.error), + ], + ) + + if app.debug: + print("Debug mode enabled.") + + return app diff --git a/ucast/apps.py b/ucast/apps.py deleted file mode 100644 index ad4b110..0000000 --- a/ucast/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class UcastConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "ucast" diff --git a/ucast/config.py b/ucast/config.py new file mode 100644 index 0000000..bbc434a --- /dev/null +++ b/ucast/config.py @@ -0,0 +1,12 @@ +# coding=utf-8 +from starlette.config import Config +from starlette.datastructures import Secret +from starlette_core.database import DatabaseURL + +config = Config() + +# Basic configuration +DEBUG = config("DEBUG", cast=bool, default=False) +DATABASE_URL = config("DATABASE_URL", cast=DatabaseURL) +SECRET_KEY = config("SECRET_KEY", cast=Secret) +HTTP_PORT = config("HTTP_PORT", cast=int, default=8000) diff --git a/ucast/cover.py b/ucast/cover.py new file mode 100644 index 0000000..7bd0e2f --- /dev/null +++ b/ucast/cover.py @@ -0,0 +1,210 @@ +# coding=utf-8 +import math +from pathlib import Path +from typing import List, Optional, Tuple + +import wcag_contrast_ratio +from colorthief import ColorThief +from fonts.ttf import SourceSansPro +from PIL import Image, ImageDraw, ImageFont + +from ucast import typ + +CHAR_ELLIPSIS = "…" +COVER_WIDTH = 500 + + +def _split_text( + height: int, width: int, text: str, font: ImageFont.FreeTypeFont, line_spacing=0 +) -> List[str]: + if height < font.size: + return [] + + max_lines = math.floor((height - font.size) / (font.size + line_spacing)) + 1 + + lines = [] + line = "" + + for word in text.split(" "): + if len(lines) >= max_lines: + line = word + break + + if line == "": + nline = word + else: + nline = line + " " + word + + if font.getsize(nline)[0] <= width: + line = nline + elif line != "": + lines.append(line) + line = word + else: + # try to trim current word + while nline: + nline = nline[:-1] + nline_e = nline + CHAR_ELLIPSIS + if font.getsize(nline_e)[0] <= width: + lines.append(nline_e) + break + + if line != "": + if len(lines) >= max_lines: + # Drop the last line and add ... to the end + lastline = lines[-1] + CHAR_ELLIPSIS + if font.getsize(lastline)[0] <= width: + lines[-1] = lastline + else: + i_last_space = lines[-1].rfind(" ") + lines[-1] = lines[-1][:i_last_space] + CHAR_ELLIPSIS + else: + lines.append(line) + + return lines + + +def _draw_text_box( + draw: ImageDraw.ImageDraw, + box: Tuple[int, int, int, int], + text: str, + font: ImageFont.FreeTypeFont, + color: typ.Color = (0, 0, 0), + line_spacing=0, + vertical_center=True, +): + x_tl, y_tl, x_br, y_br = box + height = y_br - y_tl + width = x_br - x_tl + + lines = _split_text(height, width, text, font, line_spacing) + + y_start = y_tl + if vertical_center: + text_height = len(lines) * (font.size + line_spacing) - line_spacing + y_start += int((height - text_height) / 2) + + for i, line in enumerate(lines): + y_pos = y_start + i * (font.size + line_spacing) + draw.text((x_tl, y_pos), line, color, font) + + +def _get_dominant_color(img: Image.Image): + thief = ColorThief.__new__(ColorThief) + thief.image = img + return thief.get_color() + + +def _interpolate_color(color_from: typ.Color, color_to: typ.Color, interval: int): + det_co = [(t - f) / interval for f, t in zip(color_from, color_to)] + for i in range(interval): + yield [round(f + det * i) for f, det in zip(color_from, det_co)] + + +def _get_text_color(bg_color) -> typ.Color: + color_decimal = tuple([c / 255 for c in bg_color]) + c_blk = wcag_contrast_ratio.rgb((0, 0, 0), color_decimal) + c_wht = wcag_contrast_ratio.rgb((1, 1, 1), color_decimal) + if c_wht > c_blk: + return 255, 255, 255 + return 0, 0, 0 + + +def _create_cover_image( + thumbnail: Image.Image, avatar: Optional[Image.Image], title: str, channel: str +) -> Image.Image: + # Scale the thumbnail image down to cover size + tn_height = int(COVER_WIDTH / thumbnail.width * thumbnail.height) + tn = thumbnail.resize((COVER_WIDTH, tn_height), Image.Resampling.LANCZOS) + + # Get dominant colors from the top and bottom 20% of the thumbnail image + top_part = tn.crop((0, 0, COVER_WIDTH, int(tn_height * 0.2))) + bottom_part = tn.crop((0, int(tn_height * 0.8), COVER_WIDTH, tn_height)) + top_color = _get_dominant_color(top_part) + bottom_color = _get_dominant_color(bottom_part) + + # Create new cover image + cover = Image.new("RGB", (COVER_WIDTH, COVER_WIDTH)) + cover_draw = ImageDraw.Draw(cover) + + # Draw background gradient + for i, color in enumerate( + _interpolate_color(top_color, bottom_color, cover.height) + ): + cover_draw.line(((0, i), (cover.width, i)), tuple(color), 1) + + # Insert thumbnail image in the middle + tn_margin = int((COVER_WIDTH - tn_height) / 2) + cover.paste(tn, (0, tn_margin)) + + # Add channel avatar + avt_margin = 0 + avt_size = 0 + + if avatar: + avt_margin = int(tn_margin * 0.05) + avt_size = tn_margin - 2 * avt_margin + + avt = avatar.resize((avt_size, avt_size), Image.Resampling.LANCZOS) + + circle_mask = Image.new("L", (avt_size, avt_size)) + circle_mask_draw = ImageDraw.Draw(circle_mask) + circle_mask_draw.ellipse((0, 0, avt_size, avt_size), 255) + + cover.paste(avt, (avt_margin, avt_margin), circle_mask) + + # Add text + text_margin_x = 16 + text_margin_topleft = avt_margin + avt_size + text_margin_x + text_vertical_offset = -17 + text_line_space = -4 + + fnt = ImageFont.truetype(SourceSansPro, 50) + top_text_color = _get_text_color(top_color) + bottom_text_color = _get_text_color(bottom_color) + + _draw_text_box( + cover_draw, + ( + text_margin_topleft, + text_vertical_offset, + COVER_WIDTH - text_margin_x, + tn_margin, + ), + channel, + fnt, + top_text_color, + text_line_space, + ) + _draw_text_box( + cover_draw, + ( + text_margin_x, + COVER_WIDTH - tn_margin + text_vertical_offset, + COVER_WIDTH - text_margin_x, + COVER_WIDTH, + ), + title, + fnt, + bottom_text_color, + text_line_space, + ) + + return cover + + +def create_cover_file( + thumbnail_path: Path, + avatar_path: Optional[Path], + title: str, + channel: str, + cover_path: Path, +): + thumbnail = Image.open(thumbnail_path) + + avatar = None + if avatar_path: + avatar = Image.open(avatar_path) + + cvr = _create_cover_image(thumbnail, avatar, title, channel) + cvr.save(cover_path) diff --git a/ucast/db.py b/ucast/db.py new file mode 100644 index 0000000..59165a6 --- /dev/null +++ b/ucast/db.py @@ -0,0 +1,14 @@ +# coding=utf-8 +from starlette_core.database import Database, metadata # noqa: F401 + +from ucast import models # noqa: F401 +from ucast.config import DATABASE_URL + +# set db config options +if DATABASE_URL.driver == "psycopg2": + engine_kwargs = {"pool_size": 20, "max_overflow": 0} +else: + engine_kwargs = {} + +# setup database url +db = Database(DATABASE_URL, engine_kwargs=engine_kwargs) diff --git a/ucast/feed.py b/ucast/feed.py deleted file mode 100644 index 3d3214f..0000000 --- a/ucast/feed.py +++ /dev/null @@ -1,201 +0,0 @@ -import re -from xml.sax import saxutils - -from django import http -from django.conf import settings -from django.contrib.sites.shortcuts import get_current_site -from django.contrib.syndication.views import Feed, add_domain -from django.utils import feedgenerator -from django.utils.feedgenerator import Rss201rev2Feed, rfc2822_date -from django.utils.xmlutils import SimplerXMLGenerator - -from ucast.models import Channel, Video -from ucast.service import util - -URL_REGEX = r"""http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+""" - - -class PodcastFeedType(Rss201rev2Feed): - content_type = "application/xml; charset=utf-8" - - def rss_attributes(self): - attrs = super().rss_attributes() - attrs["xmlns:itunes"] = "http://www.itunes.com/dtds/podcast-1.0.dtd" - return attrs - - @staticmethod - def _xml_escape(text: str) -> str: - text = saxutils.escape(text) - text = re.sub(URL_REGEX, lambda m: f'<a href="{m[0]}">{m[0]}</a>', text) - text = text.replace("\n", "<br>") - return text - - @staticmethod - def _add_text_element(handler: SimplerXMLGenerator, text: str): - handler.startElement("description", {}) - handler.ignorableWhitespace(f"<![CDATA[{PodcastFeedType._xml_escape(text)}]]>") - handler.endElement("description") - - @staticmethod - def _format_secs(secs: int) -> str: - mm, ss = divmod(secs, 60) - hh, mm = divmod(mm, 60) - s = "%02d:%02d:%02d" % (hh, mm, ss) - return s - - def add_root_elements(self, handler: SimplerXMLGenerator): - handler.addQuickElement("title", self.feed["title"]) - handler.addQuickElement("link", self.feed["link"]) - self._add_text_element(handler, self.feed["description"]) - if self.feed["feed_url"] is not None: - handler.addQuickElement( - "atom:link", None, {"rel": "self", "href": self.feed["feed_url"]} - ) - if self.feed["language"] is not None: - handler.addQuickElement("language", self.feed["language"]) - for cat in self.feed["categories"]: - handler.addQuickElement("category", cat) - if self.feed["feed_copyright"] is not None: - handler.addQuickElement("copyright", self.feed["feed_copyright"]) - handler.addQuickElement("lastBuildDate", rfc2822_date(self.latest_post_date())) - if self.feed["ttl"] is not None: - handler.addQuickElement("ttl", self.feed["ttl"]) - - if self.feed.get("image_url") is not None: - handler.startElement("image", {}) - handler.addQuickElement("url", self.feed["image_url"]) - handler.addQuickElement("title", self.feed["title"]) - handler.addQuickElement("link", self.feed["link"]) - handler.endElement("image") - - handler.addQuickElement( - "itunes:image", None, {"href": self.feed["image_url"]} - ) - - def add_item_elements(self, handler: SimplerXMLGenerator, item): - handler.addQuickElement("title", item["title"]) - handler.addQuickElement("link", item["link"]) - - if item["description"] is not None: - self._add_text_element(handler, item["description"]) - - # Author information. - if item["author_name"] and item["author_email"]: - handler.addQuickElement( - "author", "%s (%s)" % (item["author_email"], item["author_name"]) - ) - elif item["author_email"]: - handler.addQuickElement("author", item["author_email"]) - elif item["author_name"]: - handler.addQuickElement( - "dc:creator", - item["author_name"], - {"xmlns:dc": "http://purl.org/dc/elements/1.1/"}, - ) - - if item["pubdate"] is not None: - handler.addQuickElement("pubDate", rfc2822_date(item["pubdate"])) - if item["comments"] is not None: - handler.addQuickElement("comments", item["comments"]) - if item["unique_id"] is not None: - guid_attrs = {} - if isinstance(item.get("unique_id_is_permalink"), bool): - guid_attrs["isPermaLink"] = str(item["unique_id_is_permalink"]).lower() - handler.addQuickElement("guid", item["unique_id"], guid_attrs) - if item["ttl"] is not None: - handler.addQuickElement("ttl", item["ttl"]) - - # Enclosure. - if item["enclosures"]: - enclosures = list(item["enclosures"]) - if len(enclosures) > 1: - raise ValueError( - "RSS feed items may only have one enclosure, see " - "http://www.rssboard.org/rss-profile#element-channel-item-enclosure" - ) - enclosure = enclosures[0] - handler.addQuickElement( - "enclosure", - "", - { - "url": enclosure.url, - "length": enclosure.length, - "type": enclosure.mime_type, - }, - ) - - # Categories. - for cat in item["categories"]: - handler.addQuickElement("category", cat) - - # Cover image - if item.get("image_url"): - handler.addQuickElement("itunes:image", None, {"href": item["image_url"]}) - - # Duration - if item.get("duration"): - handler.addQuickElement( - "itunes:duration", self._format_secs(item["duration"]) - ) - - -class UcastFeed(Feed): - feed_type = PodcastFeedType - - def get_object(self, request, *args, **kwargs): - channel_slug = kwargs["channel"] - return Channel.objects.get(slug=channel_slug) - - def get_feed(self, channel: Channel, request: http.HttpRequest): - max_items = settings.FEED_MAX_ITEMS - try: - max_items = int(request.GET.get("items")) - except TypeError or ValueError: - pass - - feed = self.feed_type( - title=channel.name, - link=channel.get_absolute_url(), - description=channel.description, - language=self.language, - feed_url=self.full_link_url(request, f"/feed/{channel.slug}"), - image_url=self.full_link_url(request, f"/files/avatar/{channel.slug}.jpg"), - ) - - for video in channel.video_set.filter(downloaded__isnull=False).order_by( - "-published" - )[:max_items]: - feed.add_item( - title=video.title, - link=video.get_absolute_url(), - description=video.description, - unique_id=video.get_absolute_url(), - unique_id_is_permalink=True, - enclosures=self.item_enclosures_domain(video, request), - pubdate=video.published, - updateddate=video.downloaded, - image_url=self.full_link_url( - request, f"/files/cover/{channel.slug}/{video.slug}.png" - ), - duration=video.duration, - ) - return feed - - @staticmethod - def full_link_url(request: http.HttpRequest, page_url: str) -> str: - anon_url = add_domain( - get_current_site(request).domain, - page_url, - request.is_secure(), - ) - return util.add_key_to_url(anon_url, request.user.get_feed_key()) - - def item_enclosures_domain(self, item: Video, request: http.HttpRequest): - enc = feedgenerator.Enclosure( - url=self.full_link_url( - request, f"/files/audio/{item.channel.slug}/{item.slug}.mp3" - ), - length=str(item.download_size), - mime_type="audio/mpeg", - ) - return [enc] diff --git a/ucast/forms.py b/ucast/forms.py deleted file mode 100644 index a4f1a8e..0000000 --- a/ucast/forms.py +++ /dev/null @@ -1,26 +0,0 @@ -from django import forms - - -class AddChannelForm(forms.Form): - channel_str = forms.CharField(label="Channel-ID / URL") - - -class DeleteVideoForm(forms.Form): - id = forms.IntegerField() - - -class EditChannelForm(forms.Form): - skip_shorts = forms.BooleanField( - label="Skip shorts (vertical videos < 1m)", required=False - ) - skip_livestreams = forms.BooleanField(label="Skip livestreams", required=False) - - -class DownloadChannelForm(forms.Form): - n_videos = forms.IntegerField( - label="Number of videos (counting from most recent)", initial=50, min_value=1 - ) - - -class RequeueForm(forms.Form): - id = forms.UUIDField() diff --git a/ucast/management/__init__.py b/ucast/management/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/ucast/management/commands/__init__.py b/ucast/management/commands/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/ucast/management/commands/rqenqueue.py b/ucast/management/commands/rqenqueue.py deleted file mode 100644 index b55781b..0000000 --- a/ucast/management/commands/rqenqueue.py +++ /dev/null @@ -1,34 +0,0 @@ -""" -Based on the django-rq package by Selwin Ong (MIT License) -https://github.com/rq/django-rq -""" - -from django.core.management.base import BaseCommand - -from ucast import queue - - -class Command(BaseCommand): - """Queue a function with the given arguments.""" - - help = __doc__ - args = "<function arg arg ...>" - - def add_arguments(self, parser): - parser.add_argument( - "--timeout", "-t", type=int, dest="timeout", help="A timeout in seconds" - ) - - parser.add_argument("args", nargs="*") - - def handle(self, *args, **options): - """ - Queues the function given with the first argument with the - parameters given with the rest of the argument list. - """ - verbosity = int(options.get("verbosity", 1)) - timeout = options.get("timeout") - q = queue.get_queue() - job = q.enqueue_call(args[0], args=args[1:], timeout=timeout) - if verbosity: - print("Job %s created" % job.id) diff --git a/ucast/management/commands/rqscheduler.py b/ucast/management/commands/rqscheduler.py deleted file mode 100644 index db0d25d..0000000 --- a/ucast/management/commands/rqscheduler.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -Based on the django-rq package by Selwin Ong (MIT License) -https://github.com/rq/django-rq -""" - -import os - -from django.core.management.base import BaseCommand -from rq_scheduler.utils import setup_loghandlers - -from ucast import queue -from ucast.tasks import schedule - - -class Command(BaseCommand): - """Runs RQ Scheduler""" - - help = __doc__ - - def add_arguments(self, parser): - parser.add_argument( - "--pid", - action="store", - dest="pid", - default=None, - help="PID file to write the scheduler`s pid into", - ) - parser.add_argument( - "--interval", - "-i", - type=int, - dest="interval", - default=60, - help="""How often the scheduler checks for new jobs to add to the - queue (in seconds).""", - ) - - def handle(self, *args, **options): - schedule.clear_scheduled_jobs() - schedule.register_scheduled_jobs() - - pid = options.get("pid") - if pid: - with open(os.path.expanduser(pid), "w") as fp: - fp.write(str(os.getpid())) - - # Verbosity is defined by default in BaseCommand for all commands - verbosity = options.get("verbosity") - if verbosity >= 2: - level = "DEBUG" - elif verbosity == 0: - level = "WARNING" - else: - level = "INFO" - setup_loghandlers(level) - - scheduler = queue.get_scheduler(options.get("interval")) - scheduler.run() diff --git a/ucast/management/commands/rqstats.py b/ucast/management/commands/rqstats.py deleted file mode 100644 index 428831d..0000000 --- a/ucast/management/commands/rqstats.py +++ /dev/null @@ -1,122 +0,0 @@ -""" -Based on the django-rq package by Selwin Ong (MIT License) -https://github.com/rq/django-rq -""" - -import time - -import click -from django.core.management.base import BaseCommand - -from ucast import queue - - -class Command(BaseCommand): - """Print RQ statistics""" - - help = __doc__ - - def add_arguments(self, parser): - parser.add_argument( - "-j", - "--json", - action="store_true", - dest="json", - help="Output statistics as JSON", - ) - - parser.add_argument( - "-y", - "--yaml", - action="store_true", - dest="yaml", - help="Output statistics as YAML", - ) - - parser.add_argument( - "-i", - "--interval", - dest="interval", - type=float, - help="Poll statistics every N seconds", - ) - - def _print_separator(self): - try: - click.echo(self._separator) - except AttributeError: - self._separator = "-" * self.table_width - click.echo(self._separator) - - def _print_stats_dashboard(self, statistics): - if self.interval: - click.clear() - - click.echo() - click.echo("Django RQ CLI Dashboard") - click.echo() - self._print_separator() - - # Header - click.echo( - """| %-15s|%10s |%10s |%10s |%10s |%10s |%10s |""" - % ("Name", "Queued", "Active", "Deferred", "Finished", "Failed", "Workers") - ) - - self._print_separator() - - click.echo( - """| %-15s|%10s |%10s |%10s |%10s |%10s |%10s |""" - % ( - statistics["name"], - statistics["jobs"], - statistics["started_jobs"], - statistics["deferred_jobs"], - statistics["finished_jobs"], - statistics["failed_jobs"], - statistics["workers"], - ) - ) - - self._print_separator() - - if self.interval: - click.echo() - click.echo("Press 'Ctrl+c' to quit") - - def handle(self, *args, **options): - - if options.get("json"): - import json - - click.echo(json.dumps(queue.get_statistics())) - return - - if options.get("yaml"): - try: - import yaml - except ImportError: - click.echo("Aborting. LibYAML is not installed.") - return - # Disable YAML alias - yaml.Dumper.ignore_aliases = lambda *args: True - click.echo(yaml.dump(queue.get_statistics(), default_flow_style=False)) - return - - self.interval = options.get("interval") - - # Arbitrary - self.table_width = 90 - - # Do not continuously poll - if not self.interval: - self._print_stats_dashboard(queue.get_statistics()) - return - - # Abuse clicks to 'live' render CLI dashboard - try: - while True: - self._print_stats_dashboard(queue.get_statistics()) - time.sleep(self.interval) - except KeyboardInterrupt: - pass diff --git a/ucast/management/commands/rqworker.py b/ucast/management/commands/rqworker.py deleted file mode 100644 index 2f391b5..0000000 --- a/ucast/management/commands/rqworker.py +++ /dev/null @@ -1,103 +0,0 @@ -""" -Based on the django-rq package by Selwin Ong (MIT License) -https://github.com/rq/django-rq -""" - -import os -import sys - -from django.core.management.base import BaseCommand -from django.db import connections -from redis.exceptions import ConnectionError -from rq import use_connection -from rq.logutils import setup_loghandlers - -from ucast import queue - - -def reset_db_connections(): - for c in connections.all(): - c.close() - - -class Command(BaseCommand): - """Runs RQ worker""" - - help = __doc__ - - def add_arguments(self, parser): - parser.add_argument( - "--pid", - action="store", - dest="pid", - default=None, - help="PID file to write the worker`s pid into", - ) - parser.add_argument( - "--burst", - action="store_true", - dest="burst", - default=False, - help="Run worker in burst mode", - ) - parser.add_argument( - "--with-scheduler", - action="store_true", - dest="with_scheduler", - default=False, - help="Run worker with scheduler enabled", - ) - parser.add_argument( - "--name", - action="store", - dest="name", - default=None, - help="Name of the worker", - ) - parser.add_argument( - "--worker-ttl", - action="store", - type=int, - dest="worker_ttl", - default=420, - help="Default worker timeout to be used", - ) - - def handle(self, *args, **options): - pid = options.get("pid") - if pid: - with open(os.path.expanduser(pid), "w") as fp: - fp.write(str(os.getpid())) - - # Verbosity is defined by default in BaseCommand for all commands - verbosity = options.get("verbosity") - if verbosity >= 2: - level = "DEBUG" - elif verbosity == 0: - level = "WARNING" - else: - level = "INFO" - setup_loghandlers(level) - - try: - # Instantiate a worker - worker_kwargs = { - "name": options["name"], - "default_worker_ttl": options["worker_ttl"], - } - w = queue.get_worker(**worker_kwargs) - - # Call use_connection to push the redis connection into LocalStack - # without this, jobs using RQ's get_current_job() will fail - use_connection(w.connection) - # Close any opened DB connection before any fork - reset_db_connections() - - w.work( - burst=options.get("burst", False), - with_scheduler=options.get("with_scheduler", False), - logging_level=level, - ) - except ConnectionError as e: - self.stderr.write(str(e)) - sys.exit(1) diff --git a/ucast/migrations/0001_initial.py b/ucast/migrations/0001_initial.py deleted file mode 100644 index 31447ce..0000000 --- a/ucast/migrations/0001_initial.py +++ /dev/null @@ -1,192 +0,0 @@ -# Generated by Django 4.0.4 on 2022-06-21 23:07 - -import django.contrib.auth.models -import django.contrib.auth.validators -import django.db.models.deletion -import django.utils.timezone -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ("auth", "0012_alter_user_first_name_max_length"), - ] - - operations = [ - migrations.CreateModel( - name="Channel", - fields=[ - ( - "id", - models.BigAutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("channel_id", models.CharField(db_index=True, max_length=30)), - ("name", models.CharField(max_length=100)), - ("slug", models.CharField(db_index=True, max_length=100)), - ("description", models.TextField()), - ("subscribers", models.CharField(max_length=20, null=True)), - ("active", models.BooleanField(default=True)), - ("skip_livestreams", models.BooleanField(default=True)), - ("skip_shorts", models.BooleanField(default=True)), - ("avatar_url", models.CharField(max_length=250, null=True)), - ( - "last_update", - models.DateTimeField(default=django.utils.timezone.now), - ), - ], - ), - migrations.CreateModel( - name="Video", - fields=[ - ( - "id", - models.BigAutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("video_id", models.CharField(db_index=True, max_length=30)), - ("title", models.CharField(max_length=200)), - ("slug", models.CharField(db_index=True, max_length=209)), - ("published", models.DateTimeField()), - ("downloaded", models.DateTimeField(null=True)), - ("description", models.TextField()), - ("duration", models.IntegerField()), - ("is_livestream", models.BooleanField(default=False)), - ("is_short", models.BooleanField(default=False)), - ("download_size", models.IntegerField(null=True)), - ("is_deleted", models.BooleanField(default=False)), - ( - "channel", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, to="ucast.channel" - ), - ), - ], - ), - migrations.CreateModel( - name="User", - fields=[ - ( - "id", - models.BigAutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("password", models.CharField(max_length=128, verbose_name="password")), - ( - "last_login", - models.DateTimeField( - blank=True, null=True, verbose_name="last login" - ), - ), - ( - "is_superuser", - models.BooleanField( - default=False, - help_text="Designates that this user has all permissions without explicitly assigning them.", - verbose_name="superuser status", - ), - ), - ( - "username", - models.CharField( - error_messages={ - "unique": "A user with that username already exists." - }, - help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", - max_length=150, - unique=True, - validators=[ - django.contrib.auth.validators.UnicodeUsernameValidator() - ], - verbose_name="username", - ), - ), - ( - "first_name", - models.CharField( - blank=True, max_length=150, verbose_name="first name" - ), - ), - ( - "last_name", - models.CharField( - blank=True, max_length=150, verbose_name="last name" - ), - ), - ( - "email", - models.EmailField( - blank=True, max_length=254, verbose_name="email address" - ), - ), - ( - "is_staff", - models.BooleanField( - default=False, - help_text="Designates whether the user can log into this admin site.", - verbose_name="staff status", - ), - ), - ( - "is_active", - models.BooleanField( - default=True, - help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.", - verbose_name="active", - ), - ), - ( - "date_joined", - models.DateTimeField( - default=django.utils.timezone.now, verbose_name="date joined" - ), - ), - ("feed_key", models.CharField(default=None, max_length=50, null=True)), - ( - "groups", - models.ManyToManyField( - blank=True, - help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.", - related_name="user_set", - related_query_name="user", - to="auth.group", - verbose_name="groups", - ), - ), - ( - "user_permissions", - models.ManyToManyField( - blank=True, - help_text="Specific permissions for this user.", - related_name="user_set", - related_query_name="user", - to="auth.permission", - verbose_name="user permissions", - ), - ), - ], - options={ - "verbose_name": "user", - "verbose_name_plural": "users", - "abstract": False, - }, - managers=[ - ("objects", django.contrib.auth.models.UserManager()), - ], - ), - ] diff --git a/ucast/migrations/__init__.py b/ucast/migrations/__init__.py index e69de29..9bad579 100644 --- a/ucast/migrations/__init__.py +++ b/ucast/migrations/__init__.py @@ -0,0 +1 @@ +# coding=utf-8 diff --git a/ucast/migrations/env.py b/ucast/migrations/env.py new file mode 100644 index 0000000..70b6d51 --- /dev/null +++ b/ucast/migrations/env.py @@ -0,0 +1,74 @@ +from logging.config import fileConfig + +from alembic import context +from sqlalchemy import engine_from_config, pool + +from ucast import db + +# this is the Alembic Config object, which provides +# access to the values within the .ini file in use. +config = context.config + +config.set_main_option("sqlalchemy.url", str(db.DATABASE_URL)) +target_metadata = db.metadata + +# Interpret the config file for Python logging. +# This line sets up loggers basically. +if config.config_file_name is not None: + fileConfig(config.config_file_name) + + +# other values from the config, defined by the needs of env.py, +# can be acquired: +# my_important_option = config.get_main_option("my_important_option") +# ... etc. + + +def run_migrations_offline(): + """Run migrations in 'offline' mode. + + This configures the context with just a URL + and not an Engine, though an Engine is acceptable + here as well. By skipping the Engine creation + we don't even need a DBAPI to be available. + + Calls to context.execute() here emit the given string to the + script output. + + """ + url = config.get_main_option("sqlalchemy.url") + context.configure( + url=url, + target_metadata=target_metadata, + literal_binds=True, + dialect_opts={"paramstyle": "named"}, + ) + + with context.begin_transaction(): + context.run_migrations() + + +def run_migrations_online(): + """Run migrations in 'online' mode. + + In this scenario we need to create an Engine + and associate a connection with the context. + + """ + connectable = engine_from_config( + config.get_section(config.config_ini_section), + prefix="sqlalchemy.", + poolclass=pool.NullPool, + ) + + with connectable.connect() as connection: + context.configure(connection=connection, target_metadata=target_metadata) + + with context.begin_transaction(): + context.run_migrations() + + +if context.is_offline_mode(): + run_migrations_offline() +else: + run_migrations_online() diff --git a/ucast/migrations/script.py.mako b/ucast/migrations/script.py.mako new file mode 100644 index 0000000..2c01563 --- /dev/null +++ b/ucast/migrations/script.py.mako @@ -0,0 +1,24 @@ +"""${message} + +Revision ID: ${up_revision} +Revises: ${down_revision | comma,n} +Create Date: ${create_date} + +""" +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + +# revision identifiers, used by Alembic. +revision = ${repr(up_revision)} +down_revision = ${repr(down_revision)} +branch_labels = ${repr(branch_labels)} +depends_on = ${repr(depends_on)} + + +def upgrade(): + ${upgrades if upgrades else "pass"} + + +def downgrade(): + ${downgrades if downgrades else "pass"} diff --git a/ucast/migrations/versions/2022-05-03_0ae786127cd8_initial_revision.py b/ucast/migrations/versions/2022-05-03_0ae786127cd8_initial_revision.py new file mode 100644 index 0000000..5e7aa7f --- /dev/null +++ b/ucast/migrations/versions/2022-05-03_0ae786127cd8_initial_revision.py @@ -0,0 +1,52 @@ +"""Initial revision + +Revision ID: 0ae786127cd8 +Revises: +Create Date: 2022-05-03 10:03:42.224721 + +""" +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = "0ae786127cd8" +down_revision = None +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table( + "channels", + sa.Column("id", sa.String(length=30), nullable=False), + sa.Column("name", sa.Unicode(length=100), nullable=False), + sa.Column("active", sa.Boolean(), nullable=False), + sa.Column("skip_livestreams", sa.Boolean(), nullable=False), + sa.Column("skip_shorts", sa.Boolean(), nullable=False), + sa.Column("keep_videos", sa.Integer(), nullable=True), + sa.PrimaryKeyConstraint("id"), + ) + op.create_table( + "videos", + sa.Column("id", sa.String(length=30), nullable=False), + sa.Column("channel_id", sa.String(length=30), nullable=False), + sa.Column("title", sa.Unicode(length=200), nullable=False), + sa.Column("slug", sa.String(length=209), nullable=False), + sa.Column("published", sa.DateTime(), nullable=False), + sa.Column("downloaded", sa.DateTime(), nullable=True), + sa.Column("description", sa.UnicodeText(), nullable=False), + sa.ForeignKeyConstraint( + ["channel_id"], + ["channels.id"], + ), + sa.PrimaryKeyConstraint("id"), + ) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table("videos") + op.drop_table("channels") + # ### end Alembic commands ### diff --git a/ucast/models.py b/ucast/models.py index 3075d9a..3921d64 100644 --- a/ucast/models.py +++ b/ucast/models.py @@ -1,139 +1,38 @@ -import base64 -import datetime +# coding=utf-8 +import slugify +import sqlalchemy as sa +from sqlalchemy import orm +from starlette_core.database import Base -from Cryptodome import Random -from django.contrib.auth.models import AbstractUser -from django.db import models -from django.utils import timezone - -from ucast.service import util +# metadata = sa.MetaData() +# Base = declarative_base(metadata=metadata) -def _get_unique_slug( - str_in: str, objects: models.query.QuerySet, model_name: str -) -> str: - """ - Get a new, unique slug for a database item +class Channel(Base): + __tablename__ = "channels" - :param str_in: Input string to slugify - :param objects: Django query set - :return: Slug - """ - original_slug = util.get_slug(str_in) - slug = original_slug - - for i in range(1, objects.count() + 2): - if not objects.filter(slug=slug).exists(): - return slug - - slug = f"{original_slug}_{i}" - - raise Exception(f"unique {model_name} slug for {original_slug} could not be found") + id = sa.Column(sa.String(30), primary_key=True) + name = sa.Column(sa.Unicode(100), nullable=False) + videos = orm.relationship("Video", cascade="all, delete") + active = sa.Column(sa.Boolean, nullable=False, default=True) + skip_livestreams = sa.Column(sa.Boolean, nullable=False, default=True) + skip_shorts = sa.Column(sa.Boolean, nullable=False, default=True) + keep_videos = sa.Column(sa.Integer, nullable=True, default=None) -class Channel(models.Model): - channel_id = models.CharField(max_length=30, db_index=True) - name = models.CharField(max_length=100) - slug = models.CharField(max_length=100, db_index=True) - description = models.TextField() - subscribers = models.CharField(max_length=20, null=True) - active = models.BooleanField(default=True) - skip_livestreams = models.BooleanField(default=True) - skip_shorts = models.BooleanField(default=True) - avatar_url = models.CharField(max_length=250, null=True) - last_update = models.DateTimeField(default=timezone.now) +class Video(Base): + __tablename__ = "videos" - @classmethod - def get_new_slug(cls, name: str) -> str: - return _get_unique_slug(name, cls.objects, "channel") + id = sa.Column(sa.String(30), primary_key=True) + channel_id = sa.Column(sa.String(30), sa.ForeignKey("channels.id"), nullable=False) + channel = orm.relationship("Channel", back_populates="videos") + title = sa.Column(sa.Unicode(200), nullable=False) + slug = sa.Column(sa.String(209), nullable=False) + published = sa.Column(sa.DateTime, nullable=False) + downloaded = sa.Column(sa.DateTime, nullable=True) + description = sa.Column(sa.UnicodeText(), nullable=False, default="") - def get_full_description(self) -> str: - desc = f"https://www.youtube.com/channel/{self.channel_id}" - if self.description: - desc = f"{self.description}\n\n{desc}" - return desc - - def get_absolute_url(self) -> str: - return "https://www.youtube.com/channel/" + self.channel_id - - def should_download(self, video: "Video") -> bool: - if self.skip_livestreams and video.is_livestream: - return False - - if self.skip_shorts and video.is_short: - return False - - return True - - def download_size(self) -> int: - return self.video_set.aggregate(models.Sum("download_size")).get( - "download_size__sum" - ) - - def vfilter_args(self) -> dict: - filter_args = {} - if self.skip_livestreams: - filter_args["is_livestream"] = False - - if self.skip_shorts: - filter_args["is_short"] = False - - return filter_args - - def __str__(self): - return self.name - - -class Video(models.Model): - video_id = models.CharField(max_length=30, db_index=True) - title = models.CharField(max_length=200) - slug = models.CharField(max_length=209, db_index=True) - channel = models.ForeignKey(Channel, on_delete=models.CASCADE) - published = models.DateTimeField() - downloaded = models.DateTimeField(null=True) - description = models.TextField() - duration = models.IntegerField() - is_livestream = models.BooleanField(default=False) - is_short = models.BooleanField(default=False) - download_size = models.IntegerField(null=True) - is_deleted = models.BooleanField(default=False) - - @classmethod - def get_new_slug(cls, title: str, date: datetime.date, channel_id: str) -> str: - title_w_date = f"{date.strftime('%Y%m%d')}_{title}" - - return _get_unique_slug( - title_w_date, cls.objects.filter(channel__channel_id=channel_id), "video" - ) - - def get_full_description(self) -> str: - desc = f"https://youtu.be/{self.video_id}" - if self.description: - desc = f"{self.description}\n\n{desc}" - return desc - - def get_absolute_url(self) -> str: - return f"https://www.youtube.com/watch?v={self.video_id}" - - def __str__(self): - return self.title - - -class User(AbstractUser): - feed_key = models.CharField(max_length=50, null=True, default=None) - - def generate_feed_key(self): - for _ in range(0, User.objects.count()): - key = base64.urlsafe_b64encode(Random.get_random_bytes(18)).decode() - - if not User.objects.filter(feed_key=key).exists(): - self.feed_key = key - self.save() - return - - raise Exception("unique feed key could not be found") - - def get_feed_key(self) -> str: - if self.feed_key is None: - self.generate_feed_key() - return self.feed_key + def get_slug(self) -> str: + title_slug = slugify.slugify(self.title, separator="_", lowercase=False) + date_slug = self.published.strftime("%Y%m%d") + return f"{date_slug}_{title_slug}" diff --git a/ucast/queue.py b/ucast/queue.py deleted file mode 100644 index 2248ab1..0000000 --- a/ucast/queue.py +++ /dev/null @@ -1,115 +0,0 @@ -import redis -import rq -import rq_scheduler -from django.conf import settings -from django.db.models import ObjectDoesNotExist -from rq import registry - -from ucast.models import Video -from ucast.service import util - - -def get_redis_connection() -> redis.client.Redis: - return redis.Redis.from_url(settings.REDIS_URL) - - -def get_queue() -> rq.Queue: - redis_conn = get_redis_connection() - return rq.Queue(default_timeout=settings.REDIS_QUEUE_TIMEOUT, connection=redis_conn) - - -def get_scheduler(interval=60) -> rq_scheduler.Scheduler: - redis_conn = get_redis_connection() - return rq_scheduler.Scheduler(connection=redis_conn, interval=interval) - - -def get_worker(**kwargs) -> rq.Worker: - queue = get_queue() - return rq.Worker( - queue, - connection=queue.connection, - default_result_ttl=settings.REDIS_QUEUE_RESULT_TTL, - **kwargs, - ) - - -def enqueue(f, *args, **kwargs) -> rq.job.Job: - queue = get_queue() - return queue.enqueue(f, *args, **kwargs) - - -def get_statistics() -> dict: - """ - Return statistics from the RQ Queue. - - Taken from the django-rq package by Selwin Ong (MIT License) - https://github.com/rq/django-rq - - :return: RQ statistics - """ - queue = get_queue() - connection = queue.connection - connection_kwargs = connection.connection_pool.connection_kwargs - - # Raw access to the first item from left of the redis list. - # This might not be accurate since new job can be added from the left - # with `at_front` parameters. - # Ideally rq should supports Queue.oldest_job - last_job_id = connection.lindex(queue.key, 0) - last_job = queue.fetch_job(last_job_id.decode("utf-8")) if last_job_id else None - if last_job: - oldest_job_timestamp = util.to_localtime(last_job.enqueued_at).strftime( - "%Y-%m-%d, %H:%M:%S" - ) - else: - oldest_job_timestamp = "-" - - # parse_class and connection_pool are not needed and not JSON serializable - connection_kwargs.pop("parser_class", None) - connection_kwargs.pop("connection_pool", None) - - finished_job_registry = registry.FinishedJobRegistry(queue.name, queue.connection) - started_job_registry = registry.StartedJobRegistry(queue.name, queue.connection) - deferred_job_registry = registry.DeferredJobRegistry(queue.name, queue.connection) - failed_job_registry = registry.FailedJobRegistry(queue.name, queue.connection) - scheduled_job_registry = registry.ScheduledJobRegistry(queue.name, queue.connection) - - return { - "name": queue.name, - "jobs": queue.count, - "oldest_job_timestamp": oldest_job_timestamp, - "connection_kwargs": connection_kwargs, - "workers": rq.Worker.count(queue=queue), - "finished_jobs": len(finished_job_registry), - "started_jobs": len(started_job_registry), - "deferred_jobs": len(deferred_job_registry), - "failed_jobs": len(failed_job_registry), - "scheduled_jobs": len(scheduled_job_registry), - } - - -def get_failed_job_registry(): - queue = get_queue() - return registry.FailedJobRegistry(queue.name, queue.connection) - - -def get_downloading_videos(offset=0, limit=-1): - queue = get_queue() - v_ids = set() - - for job in queue.get_jobs(offset, limit): - if ( - job.func_name == "ucast.tasks.download.download_video" - and job.args - and job.args[0] > 0 - ): - v_ids.add(job.args[0]) - - videos = [] - for v_id in v_ids: - try: - videos.append(Video.objects.get(id=v_id)) - except ObjectDoesNotExist: - pass - - return videos diff --git a/ucast/resources/yt_icon.png b/ucast/resources/yt_icon.png deleted file mode 100644 index 5d2fac6..0000000 Binary files a/ucast/resources/yt_icon.png and /dev/null differ diff --git a/ucast/service/__init__.py b/ucast/service/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/ucast/service/controller.py b/ucast/service/controller.py deleted file mode 100644 index 0208488..0000000 --- a/ucast/service/controller.py +++ /dev/null @@ -1,74 +0,0 @@ -import shutil - -from ucast.models import Channel, Video -from ucast.service import storage, util, videoutil, youtube - - -class ChannelAlreadyExistsException(Exception): - def __init__(self, *args: object) -> None: - super().__init__("channel already exists", *args) - - -def download_channel_avatar(channel: Channel): - store = storage.Storage() - channel_folder = store.get_or_create_channel_folder(channel.slug) - util.download_image_file( - channel.avatar_url, channel_folder.file_avatar, videoutil.AVATAR_SIZE - ) - videoutil.resize_avatar(channel_folder.file_avatar, channel_folder.file_avatar_sm) - - -def create_channel(channel_str: str) -> Channel: - if youtube.CHANID_REGEX.match(channel_str): - if Channel.objects.filter(channel_id=channel_str).exists(): - raise ChannelAlreadyExistsException() - - channel_url = youtube.channel_url_from_str(channel_str) - channel_data = youtube.get_channel_metadata(channel_url) - - if Channel.objects.filter(channel_id=channel_data.id).exists(): - raise ChannelAlreadyExistsException() - - channel_slug = Channel.get_new_slug(channel_data.name) - - channel = Channel( - channel_id=channel_data.id, - name=channel_data.name, - slug=channel_slug, - description=channel_data.description, - subscribers=channel_data.subscribers, - avatar_url=channel_data.avatar_url, - ) - - download_channel_avatar(channel) - - channel.save() - return channel - - -def delete_video(id: int): - video = Video.objects.get(id=id) - - store = storage.Storage() - channel_folder = store.get_channel_folder(video.channel.slug) - - util.remove_if_exists(channel_folder.get_audio(video.slug)) - util.remove_if_exists(channel_folder.get_cover(video.slug)) - util.remove_if_exists(channel_folder.get_thumbnail(video.slug)) - util.remove_if_exists(channel_folder.get_thumbnail(video.slug, True)) - - video.is_deleted = True - video.downloaded = None - video.download_size = None - video.save() - - -def delete_channel(id: int): - channel = Channel.objects.get(id=id) - - store = storage.Storage() - channel_folder = store.get_channel_folder(channel.slug) - - shutil.rmtree(channel_folder.dir_root) - - channel.delete() diff --git a/ucast/service/cover.py b/ucast/service/cover.py deleted file mode 100644 index 8b25b98..0000000 --- a/ucast/service/cover.py +++ /dev/null @@ -1,451 +0,0 @@ -import math -import random -from importlib import resources -from pathlib import Path -from typing import List, Literal, Optional, Tuple - -import wcag_contrast_ratio -from colorthief import ColorThief -from fonts.ttf import SourceSansPro -from PIL import Image, ImageDraw, ImageEnhance, ImageFilter, ImageFont - -from ucast.service import typ, util - -COVER_STYLE_BLUR = "blur" -COVER_STYLE_GRADIENT = "gradient" -CoverStyle = Literal["blur", "gradient"] - -CHAR_ELLIPSIS = "…" -COVER_WIDTH = 500 -MIN_CONTRAST = 4.5 - - -def _split_text( - height: int, width: int, text: str, font: ImageFont.FreeTypeFont, line_spacing=0 -) -> List[str]: - """ - Split and trim the input text so it can be printed to a certain - area of an image. - - :param height: Image area height [px] - :param width: Image area width [px] - :param text: Input text - :param font: Pillow ImageFont - :param line_spacing: Line spacing [px] - :return: List of lines - """ - if height < font.size: - return [] - - max_lines = math.floor((height - font.size) / (font.size + line_spacing)) + 1 - - lines = [] - line = "" - - for word in text.split(" "): - if len(lines) >= max_lines: - line = word - break - - if line == "": - nline = word - else: - nline = line + " " + word - - if font.getsize(nline)[0] <= width: - line = nline - elif line != "": - lines.append(line) - line = word - else: - # try to trim current word - while nline: - nline = nline[:-1] - nline_e = nline + CHAR_ELLIPSIS - if font.getsize(nline_e)[0] <= width: - lines.append(nline_e) - break - - if line != "": - if len(lines) >= max_lines: - # Drop the last line and add ... to the end - lastline = lines[-1] + CHAR_ELLIPSIS - if font.getsize(lastline)[0] <= width: - lines[-1] = lastline - else: - i_last_space = lines[-1].rfind(" ") - lines[-1] = lines[-1][:i_last_space] + CHAR_ELLIPSIS - else: - lines.append(line) - - return lines - - -def _draw_text_box( - draw: ImageDraw.ImageDraw, - box: Tuple[int, int, int, int], - text: str, - font: ImageFont.FreeTypeFont, - color: typ.Color = (0, 0, 0), - line_spacing=0, - vertical_center=True, -): - """ - Draw a text box to an image. The text gets automatically - wrapped and trimmed to fit. - - :param draw: Pillow ImageDraw object - :param box: Coordinates of the text box ``(x_tl, y_tl, x_br, y_br)`` - :param text: Text to be printed - :param font: Pillow ImageFont - :param color: Text color - :param line_spacing: Line spacing [px] - :param vertical_center: Center text vertically in the box - """ - x_tl, y_tl, x_br, y_br = box - height = y_br - y_tl - width = x_br - x_tl - sanitized_text = util.strip_emoji(text) - - lines = _split_text(height, width, sanitized_text, font, line_spacing) - - y_start = y_tl - if vertical_center: - text_height = len(lines) * (font.size + line_spacing) - line_spacing - y_start += int((height - text_height) / 2) - - for i, line in enumerate(lines): - y_pos = y_start + i * (font.size + line_spacing) - draw.text((x_tl, y_pos), line, color, font) - - -def _get_dominant_color(img: Image.Image) -> typ.Color: - """ - Return the dominant color of an image using the ColorThief library. - - :param img: Pillow Image object - :return: dominant color - """ - thief = ColorThief.__new__(ColorThief) - thief.image = img - return thief.get_color() - - -def _interpolate_color(color_from: typ.Color, color_to: typ.Color, steps: int): - """ - Return a generator providing colors within the given range. Useful to create - gradients. - - :param color_from: Starting color - :param color_to: Ending color - :param steps: Number of steps - :return: Generator providing the colors - """ - det_co = [(t - f) / steps for f, t in zip(color_from, color_to)] - for i in range(steps): - yield [round(f + det * i) for f, det in zip(color_from, det_co)] - - -def _color_to_float(color: typ.Color) -> tuple[float, ...]: - return tuple(c / 255 for c in color) - - -def _get_text_color(bg_color: typ.Color) -> typ.Color: - """ - Return the text color (black or white) with the largest contrast - to a given background color. - - :param bg_color: Background color - :return: Text color - """ - color_float = _color_to_float(bg_color) - c_blk = wcag_contrast_ratio.rgb((0, 0, 0), color_float) - c_wht = wcag_contrast_ratio.rgb((1, 1, 1), color_float) - if c_wht > c_blk: - return 255, 255, 255 - return 0, 0, 0 - - -def _get_baseimage(thumbnail: Image.Image, style: CoverStyle): - """ - Return the background image for the cover. - - :param thumbnail: Thumbnail image object - :param style: Style of the cover image - :return: Base image - """ - cover = Image.new("RGB", (COVER_WIDTH, COVER_WIDTH)) - - if style == COVER_STYLE_GRADIENT: - # Thumbnail with color gradient background - - # Get dominant colors from the top and bottom 20% of the thumbnail image - top_part = thumbnail.crop((0, 0, COVER_WIDTH, int(thumbnail.height * 0.2))) - bottom_part = thumbnail.crop( - (0, int(thumbnail.height * 0.8), COVER_WIDTH, thumbnail.height) - ) - top_color = _get_dominant_color(top_part) - bottom_color = _get_dominant_color(bottom_part) - - cover_draw = ImageDraw.Draw(cover) - - for i, color in enumerate( - _interpolate_color(top_color, bottom_color, cover.height) - ): - cover_draw.line(((0, i), (cover.width, i)), tuple(color), 1) - else: - # Thumbnail with blurred background - ctn_width = int(COVER_WIDTH / thumbnail.height * thumbnail.width) - ctn_x_left = int((ctn_width - COVER_WIDTH) / 2) - - ctn = thumbnail.resize( - (ctn_width, COVER_WIDTH), Image.Resampling.LANCZOS - ).filter(ImageFilter.GaussianBlur(20)) - cover.paste(ctn, (-ctn_x_left, 0)) - - return cover - - -def _resize_thumbnail(thumbnail: Image.Image) -> Image.Image: - """ - Scale thumbnail image down to cover size and remove black bars - - :param thumbnail: Thumbnail image object - :return: Resized thumbnail image object - """ - # Scale the thumbnail image down to cover size - tn_resize_height = int(COVER_WIDTH / thumbnail.width * thumbnail.height) - tn_16_9_height = int(COVER_WIDTH / 16 * 9) - tn_height = min(tn_resize_height, tn_16_9_height) - tn_crop_y_top = int((tn_resize_height - tn_height) / 2) - tn_crop_y_bottom = tn_resize_height - tn_crop_y_top - - return thumbnail.resize( - (COVER_WIDTH, tn_resize_height), Image.Resampling.LANCZOS - ).crop((0, tn_crop_y_top, COVER_WIDTH, tn_crop_y_bottom)) - - -def _prepare_text_background( - base_img: Image.Image, bboxes: List[Tuple[int, int, int, int]] -) -> Tuple[Image.Image, typ.Color]: - """ - Return the preferred text color (black or white) and darken - the image if necessary - - :param base_img: Image object - :param bboxes: Text boxes - :return: Updated image, text color - """ - rng = random.Random() - rng.seed(0x9B38D30461B7F0E6) - - min_contrast_bk = 22 - min_contrast_wt = 22 - worst_color_wt = None - - def corr_x(x: int) -> int: - return min(max(0, x), base_img.width) - - def corr_y(y: int) -> int: - return min(max(0, y), base_img.height) - - for bbox in bboxes: - x_tl, y_tl, x_br, y_br = bbox - x_tl = corr_x(x_tl) - y_tl = corr_y(y_tl) - x_br = corr_x(x_br) - y_br = corr_y(y_br) - - height = y_br - y_tl - width = x_br - x_tl - - for _ in range(math.ceil(width * height * 0.01)): - target_pos = (rng.randint(x_tl, x_br - 1), rng.randint(y_tl, y_br - 1)) - img_color = base_img.getpixel(target_pos) - img_color_float = _color_to_float(img_color) - - ct_bk = wcag_contrast_ratio.rgb((0, 0, 0), img_color_float) - ct_wt = wcag_contrast_ratio.rgb((1, 1, 1), img_color_float) - - if ct_bk < min_contrast_bk: - min_contrast_bk = ct_bk - - if ct_wt < min_contrast_wt: - worst_color_wt = img_color - min_contrast_wt = ct_wt - - if min_contrast_bk >= MIN_CONTRAST: - return base_img, (0, 0, 0) - if min_contrast_wt >= MIN_CONTRAST: - return base_img, (255, 255, 255) - - pixel = Image.new("RGB", (1, 1), worst_color_wt) - - for i in range(1, 100): - brightness_f = 1 - i / 100 - contrast_f = 1 - i / 1000 - - pixel_c = ImageEnhance.Brightness(pixel).enhance(brightness_f) - pixel_c = ImageEnhance.Contrast(pixel_c).enhance(contrast_f) - new_color = pixel_c.getpixel((0, 0)) - - if ( - wcag_contrast_ratio.rgb((1, 1, 1), _color_to_float(new_color)) - >= MIN_CONTRAST - ): - new_img = ImageEnhance.Brightness(base_img).enhance(brightness_f) - new_img = ImageEnhance.Contrast(new_img).enhance(contrast_f) - return new_img, (255, 255, 255) - - return base_img, (255, 255, 255) - - -def _draw_text_avatar( - cover: Image.Image, - avatar: Optional[Image.Image], - title: str, - channel: str, -) -> Image.Image: - # Add channel avatar - avt_margin = 0 - avt_size = 0 - - tn_16_9_height = int(COVER_WIDTH / 16 * 9) # typical: 281 - tn_16_9_margin = int((COVER_WIDTH - tn_16_9_height) / 2) # typical: 110 - - if avatar: - avt_margin = int(tn_16_9_margin * 0.05) # typical: 14 - avt_size = tn_16_9_margin - 2 * avt_margin # typical: 82 - - # Add text - text_margin_x = 16 - text_margin_topleft = avt_margin + avt_size + text_margin_x # typical: 112 - text_vertical_offset = -17 - text_line_space = -4 - - fnt = ImageFont.truetype(SourceSansPro, 50) - top_text_box = ( # typical: (112, -17, 484, 110) - text_margin_topleft, - text_vertical_offset, - COVER_WIDTH - text_margin_x, - tn_16_9_margin, - ) - bottom_text_box = ( # typical: (16, 373, 484, 500) - text_margin_x, - COVER_WIDTH - tn_16_9_margin + text_vertical_offset, - COVER_WIDTH - text_margin_x, - COVER_WIDTH, - ) - - cover, text_color = _prepare_text_background(cover, [top_text_box, bottom_text_box]) - cover_draw = ImageDraw.Draw(cover) - - _draw_text_box( - cover_draw, - top_text_box, - channel, - fnt, - text_color, - text_line_space, - ) - _draw_text_box( - cover_draw, - bottom_text_box, - title, - fnt, - text_color, - text_line_space, - ) - - if avatar: - avt = avatar.resize((avt_size, avt_size), Image.Resampling.LANCZOS) - - circle_mask = Image.new("L", (avt_size, avt_size)) - circle_mask_draw = ImageDraw.Draw(circle_mask) - circle_mask_draw.ellipse((0, 0, avt_size, avt_size), 255) - - cover.paste(avt, (avt_margin, avt_margin), circle_mask) - - return cover - - -def _create_cover_image( - thumbnail: Image.Image, - avatar: Optional[Image.Image], - title: str, - channel: str, - style: CoverStyle, -) -> Image.Image: - """ - Create a cover image from video metadata and thumbnail - - :param thumbnail: Thumbnail image object - :param avatar: Creator avatar image object - :param title: Video title - :param channel: Channel name - :param style: Style of cover image - :return: Cover image - """ - tn = _resize_thumbnail(thumbnail) - - cover = _get_baseimage(tn, style) - - cover = _draw_text_avatar(cover, avatar, title, channel) - - # Insert thumbnail image in the middle - tn_margin = int((COVER_WIDTH - tn.height) / 2) - cover.paste(tn, (0, tn_margin)) - - return cover - - -def _create_blank_cover_image( - avatar: Optional[Image.Image], title: str, channel: str -) -> Image.Image: - bg_color = (16, 16, 16) - cover = Image.new("RGB", (COVER_WIDTH, COVER_WIDTH), bg_color) - - yt_icon_path = resources.path("ucast.resources", "yt_icon.png") - yt_icon = Image.open(yt_icon_path) - yt_icon_x_left = int((COVER_WIDTH - yt_icon.width) / 2) - yt_icon_y_top = int((COVER_WIDTH - yt_icon.height) / 2) - cover.paste(yt_icon, (yt_icon_x_left, yt_icon_y_top)) - - _draw_text_avatar(cover, avatar, title, channel) - - return cover - - -def create_cover_file( - thumbnail_path: Optional[Path], - avatar_path: Optional[Path], - title: str, - channel: str, - style: CoverStyle, - cover_path: Path, -): - """ - Create a cover image from video metadata and thumbnail - and save it to disk. - - :param thumbnail_path: Path of thumbnail image - :param avatar_path: Path of avatar image - :param title: Video title - :param channel: Channel name - :param style: Style of cover image - :param cover_path: Save path of cover image - """ - thumbnail = None - if thumbnail_path: - thumbnail = Image.open(thumbnail_path) - - avatar = None - if avatar_path: - avatar = Image.open(avatar_path) - - if thumbnail: - cvr = _create_cover_image(thumbnail, avatar, title, channel, style) - else: - cvr = _create_blank_cover_image(avatar, title, channel) - - cvr.save(cover_path) diff --git a/ucast/service/opml.py b/ucast/service/opml.py deleted file mode 100644 index e0913e3..0000000 --- a/ucast/service/opml.py +++ /dev/null @@ -1,40 +0,0 @@ -from dataclasses import dataclass -from typing import Iterable - -from django.utils.xmlutils import SimplerXMLGenerator - -from ucast.models import Channel - - -@dataclass -class FeedElement: - url: str - title: str - - -def __add_feed_element(handler: SimplerXMLGenerator, element: FeedElement): - handler.addQuickElement( - "outline", attrs={"xmlUrl": element.url, "title": element.title} - ) - - -def write_opml(elements: Iterable[FeedElement], outfile): - handler = SimplerXMLGenerator(outfile, "utf-8", short_empty_elements=True) - handler.startDocument() - handler.startElement("opml", {}) - handler.addQuickElement("head") - handler.startElement("body", {"version": "1.0"}) - - for element in elements: - __add_feed_element(handler, element) - - handler.endElement("body") - handler.endElement("opml") - handler.endDocument() - - -def write_channels_opml(channels: Iterable[Channel], site_url: str, key: str, outfile): - elements = [ - FeedElement(f"{site_url}/feed/{c.slug}?key={key}", c.name) for c in channels - ] - write_opml(elements, outfile) diff --git a/ucast/service/scrapetube.py b/ucast/service/scrapetube.py deleted file mode 100644 index d6b5b29..0000000 --- a/ucast/service/scrapetube.py +++ /dev/null @@ -1,244 +0,0 @@ -""" -Based on the scrapetube package from dermasmid (MIT License) -https://github.com/dermasmid/scrapetube -""" -import json -import time -from typing import Generator, Literal, Optional - -import requests - - -def get_channel( - channel_url: str, - limit: int = None, - sleep: int = 1, - sort_by: Literal["newest", "oldest", "popular"] = "newest", -) -> Generator[dict, None, None]: - """ - Get videos for a channel. - - :param channel_url: The url of the channel you want to get the videos for. - :param limit: Limit the number of videos you want to get. - :param sleep: Seconds to sleep between API calls to youtube, in order to prevent - getting blocked. Defaults to ``1``. - :param sort_by: In what order to retrive to videos. Pass one of the following values. - ``"newest"``: Get the new videos first. - ``"oldest"``: Get the old videos first. - ``"popular"``: Get the popular videos first. - Defaults to ``"newest"``. - :return: Generator providing the videos - """ - - sort_by_map = {"newest": "dd", "oldest": "da", "popular": "p"} - url = "{url}/videos?view=0&sort={sort_by}&flow=grid".format( - url=channel_url, - sort_by=sort_by_map[sort_by], - ) - api_endpoint = "https://www.youtube.com/youtubei/v1/browse" - videos = _get_videos(url, api_endpoint, "gridVideoRenderer", limit, sleep) - for video in videos: - yield video - - -def get_channel_metadata(channel_url: str) -> dict: - """ - Get metadata of a channel. - - :param channel_url: Channel URL - :return: Raw channel metadata - """ - session = _new_session() - - url = f"{channel_url}/videos?view=0&flow=grid" - - html = _get_initial_data(session, url) - return json.loads(_get_json_from_html(html, "var ytInitialData = ", 0, "};") + "}") - - -def get_playlist( - playlist_id: str, limit: int = None, sleep: int = 1 -) -> Generator[dict, None, None]: - """ - Get videos for a playlist. - - :param playlist_id: The playlist id from the playlist you want to get the videos for. - :param limit: Limit the number of videos you want to get. - :param sleep: Seconds to sleep between API calls to youtube, in order to prevent - getting blocked. Defaults to ``1``. - :return: Generator providing the videos - """ - - url = f"https://www.youtube.com/playlist?list={playlist_id}" - api_endpoint = "https://www.youtube.com/youtubei/v1/browse" - videos = _get_videos(url, api_endpoint, "playlistVideoRenderer", limit, sleep) - for video in videos: - yield video - - -def get_search( - query: str, - limit: int = None, - sleep: int = 1, - sort_by: Literal["relevance", "upload_date", "view_count", "rating"] = "relevance", - results_type: Literal["video", "channel", "playlist", "movie"] = "video", -) -> Generator[dict, None, None]: - """ - Search youtube and get videos. - - :param query: The term you want to search for. - :param limit: Limit the number of videos you want to get. - :param sleep: Seconds to sleep between API calls to youtube, in order to prevent - getting blocked. Defaults to ``1``. - :param sort_by: In what order to retrive to videos. Pass one of the following values. - ``"relevance"``: Get the new videos in order of relevance. - ``"upload_date"``: Get the new videos first. - ``"view_count"``: Get the popular videos first. - ``"rating"``: Get videos with more likes first. - Defaults to ``"relevance"``. - :param results_type: What type you want to search for. - Pass one of the following values: ``"video"|"channel"| - "playlist"|"movie"``. Defaults to ``"video"``. - :return: Generator providing the videos - """ - - sort_by_map = { - "relevance": "A", - "upload_date": "I", - "view_count": "M", - "rating": "E", - } - - results_type_map = { - "video": ["B", "videoRenderer"], - "channel": ["C", "channelRenderer"], - "playlist": ["D", "playlistRenderer"], - "movie": ["E", "videoRenderer"], - } - - param_string = f"CA{sort_by_map[sort_by]}SAhA{results_type_map[results_type][0]}" - url = f"https://www.youtube.com/results?search_query={query}&sp={param_string}" - api_endpoint = "https://www.youtube.com/youtubei/v1/search" - videos = _get_videos( - url, api_endpoint, results_type_map[results_type][1], limit, sleep - ) - for video in videos: - yield video - - -def _get_videos( - url: str, api_endpoint: str, selector: str, limit: int, sleep: int -) -> Generator[dict, None, None]: - session = _new_session() - is_first = True - quit = False - count = 0 - while True: - if is_first: - html = _get_initial_data(session, url) - client = json.loads( - _get_json_from_html(html, "INNERTUBE_CONTEXT", 2, '"}},') + '"}}' - )["client"] - api_key = _get_json_from_html(html, "innertubeApiKey", 3) - session.headers["X-YouTube-Client-Name"] = "1" - session.headers["X-YouTube-Client-Version"] = client["clientVersion"] - data = json.loads( - _get_json_from_html(html, "var ytInitialData = ", 0, "};") + "}" - ) - next_data = _get_next_data(data) - is_first = False - else: - data = _get_ajax_data(session, api_endpoint, api_key, next_data, client) - next_data = _get_next_data(data) - for result in _get_videos_items(data, selector): - try: - count += 1 - yield result - if count == limit: - quit = True - break - except GeneratorExit: - quit = True - break - - if not next_data or quit: - break - - time.sleep(sleep) - - session.close() - - -def _new_session() -> requests.Session: - session = requests.Session() - session.headers[ - "User-Agent" - ] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36" - session.headers["Accept-Language"] = "en" - return session - - -def _get_initial_data(session: requests.Session, url: str) -> str: - response = session.get(url) - response.raise_for_status() - - if "uxe=" in response.request.url: - session.cookies.set("CONSENT", "YES+cb", domain=".youtube.com") - response = session.get(url) - - html = response.text - return html - - -def _get_ajax_data( - session: requests.Session, - api_endpoint: str, - api_key: str, - next_data: dict, - client: dict, -) -> dict: - data = { - "context": {"clickTracking": next_data["click_params"], "client": client}, - "continuation": next_data["token"], - } - response = session.post(api_endpoint, params={"key": api_key}, json=data) - return response.json() - - -def _get_json_from_html( - html: str, key: str, num_chars: int = 2, stop: str = '"' -) -> str: - pos_begin = html.find(key) + len(key) + num_chars - pos_end = html.find(stop, pos_begin) - return html[pos_begin:pos_end] - - -def _get_next_data(data: dict) -> Optional[dict]: - raw_next_data = next(_search_dict(data, "continuationEndpoint"), None) - if not raw_next_data: - return None - next_data = { - "token": raw_next_data["continuationCommand"]["token"], - "click_params": {"clickTrackingParams": raw_next_data["clickTrackingParams"]}, - } - - return next_data - - -def _search_dict(partial: dict, search_key: str) -> Generator[dict, None, None]: - stack = [partial] - while stack: - current_item = stack.pop(0) - if isinstance(current_item, dict): - for key, value in current_item.items(): - if key == search_key: - yield value - else: - stack.append(value) - elif isinstance(current_item, list): - for value in current_item: - stack.append(value) - - -def _get_videos_items(data: dict, selector: str) -> Generator[dict, None, None]: - return _search_dict(data, selector) diff --git a/ucast/service/storage.py b/ucast/service/storage.py deleted file mode 100644 index ed31aa7..0000000 --- a/ucast/service/storage.py +++ /dev/null @@ -1,96 +0,0 @@ -import os -import shutil -import tempfile -from datetime import datetime, timedelta -from pathlib import Path - -from django.conf import settings - -UCAST_DIRNAME = "_ucast" - - -class ChannelFolder: - def __init__(self, dir_root: Path): - self.dir_root = dir_root - dir_ucast = self.dir_root / UCAST_DIRNAME - - self.file_avatar = dir_ucast / "avatar.jpg" - self.file_avatar_sm = dir_ucast / "avatar_sm.webp" - - self.dir_covers = dir_ucast / "covers" - self.dir_thumbnails = dir_ucast / "thumbnails" - - @staticmethod - def _glob_file(parent_dir: Path, glob: str, default_filename: str = None) -> Path: - try: - return parent_dir.glob(glob).__next__() - except StopIteration: - if default_filename: - return parent_dir / default_filename - raise FileNotFoundError(f"file {str(parent_dir)}/{glob} not found") - - def does_exist(self) -> bool: - return os.path.isdir(self.dir_covers) - - def create(self): - os.makedirs(self.dir_covers, exist_ok=True) - os.makedirs(self.dir_thumbnails, exist_ok=True) - - def get_cover(self, title_slug: str) -> Path: - return self.dir_covers / f"{title_slug}.png" - - def get_thumbnail(self, title_slug: str, sm=False) -> Path: - filename = title_slug - if sm: - filename += "_sm" - - return self._glob_file(self.dir_thumbnails, f"{filename}.*", f"{filename}.webp") - - def get_audio(self, title_slug: str) -> Path: - return self.dir_root / f"{title_slug}.mp3" - - -class Storage: - def __init__(self): - self.dir_data = settings.DOWNLOAD_ROOT - - def get_channel_folder(self, channel_slug: str) -> ChannelFolder: - cf = ChannelFolder(self.dir_data / channel_slug) - if not cf.does_exist(): - raise FileNotFoundError - return cf - - def get_or_create_channel_folder(self, channel_slug: str) -> ChannelFolder: - cf = ChannelFolder(self.dir_data / channel_slug) - if not cf.does_exist(): - cf.create() - return cf - - -class Cache: - def __init__(self): - self.dir_cache = settings.CACHE_ROOT - self.dir_ytdlp_cache = self.dir_cache / "yt_dlp" - os.makedirs(self.dir_ytdlp_cache, exist_ok=True) - - def create_tmpdir(self, prefix="dld") -> tempfile.TemporaryDirectory: - return tempfile.TemporaryDirectory(prefix=prefix + "_", dir=self.dir_cache) - - def cleanup(self): - """ - Delete temporary directories that are older than 24h and are most likely left - over after unexpected shutdowns. - """ - for dirname in os.listdir(self.dir_cache): - if dirname == "yt_dlp": - continue - - try: - ctime = os.path.getctime(dirname) - # Cache folders may get removed by concurrent jobs - except FileNotFoundError: - continue - age = datetime.now() - datetime.fromtimestamp(ctime) - - if age > timedelta(days=1): - shutil.rmtree(self.dir_cache / dirname, ignore_errors=True) diff --git a/ucast/service/util.py b/ucast/service/util.py deleted file mode 100644 index a046910..0000000 --- a/ucast/service/util.py +++ /dev/null @@ -1,202 +0,0 @@ -import datetime -import io -import json -import os -import re -from pathlib import Path -from typing import Any, Optional, Tuple, Union -from urllib import parse - -import requests -import slugify -from django.utils import timezone -from PIL import Image - -EMOJI_PATTERN = re.compile( - "[" - "\U0001F1E0-\U0001F1FF" # flags (iOS) - "\U0001F300-\U0001F5FF" # symbols & pictographs - "\U0001F600-\U0001F64F" # emoticons - "\U0001F680-\U0001F6FF" # transport & map symbols - "\U0001F700-\U0001F77F" # alchemical symbols - "\U0001F780-\U0001F7FF" # Geometric Shapes Extended - "\U0001F800-\U0001F8FF" # Supplemental Arrows-C - "\U0001F900-\U0001F9FF" # Supplemental Symbols and Pictographs - "\U0001FA00-\U0001FA6F" # Chess Symbols - "\U0001FA70-\U0001FAFF" # Symbols and Pictographs Extended-A - "\U00002702-\U000027B0" # Dingbats - "\U000024C2-\U0001F251" - "]+" -) - - -def download_file(url: str, download_path: Path): - r = requests.get(url, allow_redirects=True) - r.raise_for_status() - open(download_path, "wb").write(r.content) - - -def resize_image(img: Image, resize: Tuple[int, int]): - if img.size == resize: - return img - - w_ratio = resize[0] / img.width - h_ratio = resize[1] / img.height - box = None - - # Too tall - if h_ratio < w_ratio: - crop_height = int(img.width / resize[0] * resize[1]) - border = int((img.height - crop_height) / 2) - box = (0, border, img.width, img.height - border) - # Too wide - elif w_ratio < h_ratio: - crop_width = int(img.height / resize[1] * resize[0]) - border = int((img.width - crop_width) / 2) - box = (border, 0, img.width - border, img.height) - - return img.resize(resize, Image.Resampling.LANCZOS, box) - - -def download_image_file( - url: str, download_path: Path, resize: Optional[Tuple[int, int]] = None -): - """ - Download an image and convert it to the type given - by the path. - - :param url: Image URL - :param download_path: Download path - :param resize: target image size (set to None for no resizing) - """ - r = requests.get(url, allow_redirects=True) - r.raise_for_status() - - img = Image.open(io.BytesIO(r.content)) - img_ext = img.format.lower() - if img_ext == "jpeg": - img_ext = "jpg" - - do_resize = resize and img.size != resize - if do_resize: - img = resize_image(img, resize) - - if not do_resize and "." + img_ext == download_path.suffix: - open(download_path, "wb").write(r.content) - else: - img.save(download_path) - - -def get_slug(text: str) -> str: - return slugify.slugify(text, lowercase=False, separator="_") - - -def to_localtime(time: datetime.datetime): - """Converts naive datetime to localtime based on settings""" - - utc_time = time.replace(tzinfo=datetime.timezone.utc) - to_zone = timezone.get_default_timezone() - return utc_time.astimezone(to_zone) - - -def _get_np_attrs(o) -> dict: - """ - Return all non-protected attributes of the given object. - :param o: Object - :return: Dict of attributes - """ - return {k: v for k, v in o.__dict__.items() if not k.startswith("_")} - - -def serializer(o: Any) -> Union[str, dict, int, float, bool]: - """ - Serialize object to json-storable format - :param o: Object to serialize - :return: Serialized output data - """ - if hasattr(o, "serialize"): - return o.serialize() - if isinstance(o, (datetime.datetime, datetime.date)): - return o.isoformat() - if isinstance(o, (bool, float, int)): - return o - if hasattr(o, "__dict__"): - return _get_np_attrs(o) - return str(o) - - -def to_json(o, pretty=False) -> str: - """ - Convert object to json. - Uses the ``serialize()`` method of the target object if available. - :param o: Object to serialize - :param pretty: Prettify with indents - :return: JSON string - """ - return json.dumps( - o, default=serializer, indent=2 if pretty else None, ensure_ascii=False - ) - - -def _urlencode(query, safe="", encoding=None, errors=None, quote_via=parse.quote_plus): - """ - Same as the urllib.parse.urlencode function, but does not add an - equals sign to no-value flags. - """ - - if hasattr(query, "items"): - query = query.items() - else: - # It's a bother at times that strings and string-like objects are - # sequences. - try: - # non-sequence items should not work with len() - # non-empty strings will fail this - if len(query) and not isinstance(query[0], tuple): - raise TypeError - # Zero-length sequences of all types will get here and succeed, - # but that's a minor nit. Since the original implementation - # allowed empty dicts that type of behavior probably should be - # preserved for consistency - except TypeError: - raise TypeError("not a valid non-string sequence " "or mapping object") - - lst = [] - - for k, v in query: - if isinstance(k, bytes): - k = quote_via(k, safe) - else: - k = quote_via(str(k), safe, encoding, errors) - - if isinstance(v, bytes): - v = quote_via(v, safe) - else: - v = quote_via(str(v), safe, encoding, errors) - - if v: - lst.append(k + "=" + v) - else: - lst.append(k) - - return "&".join(lst) - - -def add_key_to_url(url: str, key: str): - if not key: - return url - url_parts = list(parse.urlparse(url)) - query = dict(parse.parse_qsl(url_parts[4], keep_blank_values=True)) - query["key"] = key - url_parts[4] = _urlencode(query) - return parse.urlunparse(url_parts) - - -def remove_if_exists(file: Path): - if os.path.isfile(file): - os.remove(file) - - -def strip_emoji(str_in: str) -> str: - stripped = EMOJI_PATTERN.sub("", str_in) - return re.sub(" +", " ", stripped) diff --git a/ucast/service/videoutil.py b/ucast/service/videoutil.py deleted file mode 100644 index 5216d93..0000000 --- a/ucast/service/videoutil.py +++ /dev/null @@ -1,52 +0,0 @@ -from datetime import date -from pathlib import Path - -from mutagen import id3 -from PIL import Image - -AVATAR_SM_WIDTH = 100 -THUMBNAIL_SM_WIDTH = 360 -THUMBNAIL_SIZE = (1280, 720) -AVATAR_SIZE = (900, 900) - - -def tag_audio( - audio_path: Path, - title: str, - channel: str, - published: date, - description: str, - cover_path: Path, -): - title_text = f"{published.isoformat()} {title}" - - tag = id3.ID3(audio_path) - tag["TPE1"] = id3.TPE1(encoding=3, text=channel) # Artist - tag["TALB"] = id3.TALB(encoding=3, text=channel) # Album - tag["TIT2"] = id3.TIT2(encoding=3, text=title_text) # Title - tag["TDRC"] = id3.TDRC(encoding=3, text=published.isoformat()) # Date - tag["COMM"] = id3.COMM(encoding=3, text=description) # Comment - - with open(cover_path, "rb") as albumart: - tag["APIC"] = id3.APIC( - encoding=3, mime="image/png", type=3, desc="Cover", data=albumart.read() - ) - tag.save() - - -def resize_avatar(original_file: Path, new_file: Path): - avatar = Image.open(original_file) - avatar_new_height = int(AVATAR_SM_WIDTH / avatar.width * avatar.height) - avatar = avatar.resize( - (AVATAR_SM_WIDTH, avatar_new_height), Image.Resampling.LANCZOS - ) - avatar.save(new_file) - - -def resize_thumbnail(original_file: Path, new_file: Path): - thumbnail = Image.open(original_file) - tn_new_height = int(THUMBNAIL_SM_WIDTH / thumbnail.width * thumbnail.height) - thumbnail = thumbnail.resize( - (THUMBNAIL_SM_WIDTH, tn_new_height), Image.Resampling.LANCZOS - ) - thumbnail.save(new_file) diff --git a/ucast/service/youtube.py b/ucast/service/youtube.py deleted file mode 100644 index 0e5c524..0000000 --- a/ucast/service/youtube.py +++ /dev/null @@ -1,316 +0,0 @@ -import datetime -import logging -import re -import shutil -from dataclasses import dataclass -from operator import itemgetter -from pathlib import Path -from typing import Generator, List, Optional - -import feedparser -import requests -from yt_dlp import YoutubeDL - -from ucast.service import scrapetube, storage, util, videoutil - -CHANID_REGEX = re.compile(r"""[-_a-zA-Z\d]{24}""") - - -class ItemNotFoundError(Exception): - pass - - -class ThumbnailNotFoundError(Exception): - pass - - -class InvalidMetadataError(Exception): - pass - - -@dataclass -class VideoScraped: - """ - Video object, as it is scraped from the website/rss feed. - RSS feeds contain the second-accurate publishing date, which cannot - be scraped from the video info and is therefore included in this object. - """ - - id: str - published: Optional[datetime.datetime] - - def __str__(self): - return self.id - - -@dataclass -class VideoDetails: - """Mapping of YoutubeDL's video information""" - - id: str - title: str - description: str - channel_id: str - channel_name: str - duration: int - published: datetime.datetime - thumbnails: List[dict] - is_currently_live: bool - is_livestream: bool - is_short: bool - - @classmethod - def from_vinfo(cls, info: dict): - published_date = datetime.datetime.strptime( - info["upload_date"], "%Y%m%d" - ).replace(tzinfo=datetime.timezone.utc) - - return VideoDetails( - id=info["id"], - title=info["title"], - description=info["description"], - channel_id=info["channel_id"], - channel_name=info["uploader"], - duration=info["duration"], - published=published_date, - thumbnails=info["thumbnails"], - is_currently_live=bool(info.get("is_live")), - is_livestream=info.get("is_live") or info.get("was_live"), - is_short=info["duration"] <= 60 - and (info["width"] or 0) < (info["height"] or 0), - ) - - def add_scraped_data(self, scraped: VideoScraped): - if scraped.id != self.id: - raise ValueError("scraped data does not belong to video") - - if scraped.published: - self.published = scraped.published - - -@dataclass -class ChannelMetadata: - """Channel information""" - - id: str - name: str - description: str - avatar_url: str - subscribers: Optional[str] - - -def download_thumbnail(vinfo: VideoDetails, download_path: Path): - """ - Download the thumbnail image of a YouTube video and save it at the given filepath. - The thumbnail file ending is added to the path. - - :param vinfo: Video info (from ``get_video_info()``) - :param download_path: Path of the thumbnail file - :raise ThumbnailNotFoundError: if no thumbnail could be found (YT returned 404) - :return: Path with file ending - """ - - for tn in sorted(vinfo.thumbnails, key=itemgetter("preference"), reverse=True): - url = tn["url"] - logging.info(f"downloading thumbnail {url}...") - - try: - util.download_image_file(url, download_path, videoutil.THUMBNAIL_SIZE) - return - except requests.HTTPError: - logging.warning(f"downloading thumbnail {url} failed") - pass - - raise ThumbnailNotFoundError(f"could not find thumbnail for video {vinfo}") - - -def get_video_details(video_id: str) -> VideoDetails: - """ - Get the details of a YouTube video without downloading it. - - :param video_id: YouTube video ID - :return: VideoDetails - """ - cache = storage.Cache() - - ydl_params = { - "cachedir": str(cache.dir_ytdlp_cache), - } - - with YoutubeDL(ydl_params) as ydl: - info = ydl.extract_info(video_id, download=False) - return VideoDetails.from_vinfo(info) - - -def download_audio( - video_id: str, download_path: Path, sponsorblock=False -) -> VideoDetails: - """ - Download the audio track from a YouTube video save it at the given filepath. - - :param video_id: YouTube video ID - :param download_path: Download path - :param sponsorblock: Enable Sponsorblock - :return: VideoDetails - """ - cache = storage.Cache() - tmpdir = cache.create_tmpdir() - tmp_dld_file = Path(tmpdir.name) / "audio.mp3" - - ydl_params = { - "format": "bestaudio", - "postprocessors": [ - {"key": "FFmpegExtractAudio", "preferredcodec": "mp3"}, - ], - "outtmpl": str(tmp_dld_file), - "cachedir": str(cache.dir_ytdlp_cache), - } - - if sponsorblock: - # noinspection PyTypeChecker - ydl_params["postprocessors"].extend( - [ - { - "key": "SponsorBlock", - "categories": ["sponsor"], - "when": "after_filter", - }, - {"key": "ModifyChapters", "remove_sponsor_segments": ["sponsor"]}, - ] - ) - - with YoutubeDL(ydl_params) as ydl: - # extract_info downloads the video and returns its metadata - info = ydl.extract_info(video_id) - - downloaded_file = info["requested_downloads"][0]["filepath"] - shutil.move(downloaded_file, download_path) - return VideoDetails.from_vinfo(info) - - -def channel_url_from_id(channel_id: str) -> str: - return "https://www.youtube.com/channel/" + channel_id - - -def channel_url_from_str(channel_str: str) -> str: - """ - Get the channel URL from user input. The following types are accepted: - - - Channel ID URL: https://www.youtube.com/channel/UCGiJh0NZ52wRhYKYnuZI08Q - - Vanity URL: https://www.youtube.com/c/MrBeast6000 - - User URL: https://www.youtube.com/user/LinusTechTips - - Channel ID: ``UCGiJh0NZ52wRhYKYnuZI08Q`` - - :param channel_str: Channel string - :return: Channel URL - """ - channel_url_regex = re.compile( - r"""(?:https?://)?[-a-zA-Z\d@:%._+~#=]+\.[a-zA-Z\d]{1,6}/(?:(channel|c|user)/)?([-_a-zA-Z\d]*)""" - ) - - match = channel_url_regex.match(channel_str) - if match: - url_type = match[1] - # Vanity URL - if not url_type or url_type == "c": - return "https://www.youtube.com/c/" + match[2] - # Username - if url_type == "user": - return "https://www.youtube.com/user/" + match[2] - # Channel ID - return "https://www.youtube.com/channel/" + match[2] - - if CHANID_REGEX.match(channel_str): - return "https://www.youtube.com/channel/" + channel_str - - raise ValueError("invalid channel string") - - -def get_channel_metadata(channel_url: str) -> ChannelMetadata: - """ - Get the metadata of a channel - - :param channel_url: Channel-URL - :return: Channel metadata - """ - data = scrapetube.get_channel_metadata(channel_url) - metadata = data["metadata"]["channelMetadataRenderer"] - - channel_id = metadata["externalId"] - name = metadata["title"] - description = metadata["description"].strip() - avatar = metadata["avatar"]["thumbnails"][0]["url"] - subscribers = None - # The subscriber count is not always visible - try: - raw_subscribers = data["header"]["c4TabbedHeaderRenderer"][ - "subscriberCountText" - ]["simpleText"] - subscribers = raw_subscribers.split(" ", 1)[0] - except KeyError: - pass - - if not CHANID_REGEX.match(channel_id): - raise InvalidMetadataError(f"got invalid channel id {repr(channel_id)}") - - if not name: - raise InvalidMetadataError(f"no channel name found for channel {channel_id}") - - if not avatar.startswith("https://"): - raise InvalidMetadataError( - f"got invalid avatar url for channel {channel_id}: {avatar}" - ) - - return ChannelMetadata(channel_id, name, description, avatar, subscribers) - - -def get_channel_videos_from_feed(channel_id: str) -> List[VideoScraped]: - """ - Return videos of a channel using YouTube's RSS feed. Using the feed is fast, - but you only get the 15 latest videos. - - :param channel_id: YouTube channel id - :return: Videos: video_id -> VideoScraped - """ - feed_url = f"https://www.youtube.com/feeds/videos.xml?channel_id={channel_id}" - feed = feedparser.parse(feed_url) - videos = [] - - for item in feed["entries"]: - video_id = item.get("yt_videoid") - if not video_id: - logging.warning( - f"found invalid item in rss feed of channel {channel_id}: {item}" - ) - continue - - publish_date_str = item.get("published") - publish_date = None - if publish_date_str: - publish_date = datetime.datetime.fromisoformat(publish_date_str) - - videos.append(VideoScraped(video_id, publish_date)) - - return videos - - -def get_channel_videos_from_scraper( - channel_id: str, limit: int = None -) -> Generator[VideoScraped, None, None]: - """ - Return all videos of a channel by scraping the YouTube website. - - :param channel_id: YouTube channel id - :param limit: Limit number of scraped videos - :return: Generator of Videos - """ - - for item in scrapetube.get_channel(channel_url_from_id(channel_id), limit): - video_id = item.get("videoId") - if not video_id: - logging.warning( - f"found invalid item in scraped feed of channel {channel_id}: {item}" - ) - continue - - yield VideoScraped(video_id, None) diff --git a/ucast/static/bulma/css/style.css b/ucast/static/bulma/css/style.css deleted file mode 100644 index 66ad40c..0000000 --- a/ucast/static/bulma/css/style.css +++ /dev/null @@ -1,10370 +0,0 @@ -@charset "UTF-8"; -/*! bulma.io v0.9.4 | MIT License | github.com/jgthms/bulma */ -/* Bulma Utilities */ -.pagination-previous, -.pagination-next, -.pagination-link, -.pagination-ellipsis, .file-cta, -.file-name, .select select, .textarea, .input, .button { - -moz-appearance: none; - -webkit-appearance: none; - align-items: center; - border: 1px solid transparent; - border-radius: 4px; - box-shadow: none; - display: inline-flex; - font-size: 1rem; - height: 2.5em; - justify-content: flex-start; - line-height: 1.5; - padding-bottom: calc(0.5em - 1px); - padding-left: calc(0.75em - 1px); - padding-right: calc(0.75em - 1px); - padding-top: calc(0.5em - 1px); - position: relative; - vertical-align: top; -} -.pagination-previous:focus, -.pagination-next:focus, -.pagination-link:focus, -.pagination-ellipsis:focus, .file-cta:focus, -.file-name:focus, .select select:focus, .textarea:focus, .input:focus, .button:focus, .is-focused.pagination-previous, -.is-focused.pagination-next, -.is-focused.pagination-link, -.is-focused.pagination-ellipsis, .is-focused.file-cta, -.is-focused.file-name, .select select.is-focused, .is-focused.textarea, .is-focused.input, .is-focused.button, .pagination-previous:active, -.pagination-next:active, -.pagination-link:active, -.pagination-ellipsis:active, .file-cta:active, -.file-name:active, .select select:active, .textarea:active, .input:active, .button:active, .is-active.pagination-previous, -.is-active.pagination-next, -.is-active.pagination-link, -.is-active.pagination-ellipsis, .is-active.file-cta, -.is-active.file-name, .select select.is-active, .is-active.textarea, .is-active.input, .is-active.button { - outline: none; -} -[disabled].pagination-previous, -[disabled].pagination-next, -[disabled].pagination-link, -[disabled].pagination-ellipsis, [disabled].file-cta, -[disabled].file-name, .select select[disabled], [disabled].textarea, [disabled].input, [disabled].button, fieldset[disabled] .pagination-previous, -fieldset[disabled] .pagination-next, -fieldset[disabled] .pagination-link, -fieldset[disabled] .pagination-ellipsis, fieldset[disabled] .file-cta, -fieldset[disabled] .file-name, fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .textarea, fieldset[disabled] .input, fieldset[disabled] .button { - cursor: not-allowed; -} - -.is-unselectable, .tabs, .pagination-previous, -.pagination-next, -.pagination-link, -.pagination-ellipsis, .breadcrumb, .file, .button { - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.navbar-link:not(.is-arrowless)::after, .select:not(.is-multiple):not(.is-loading)::after { - border: 3px solid transparent; - border-radius: 2px; - border-right: 0; - border-top: 0; - content: " "; - display: block; - height: 0.625em; - margin-top: -0.4375em; - pointer-events: none; - position: absolute; - top: 50%; - transform: rotate(-45deg); - transform-origin: center; - width: 0.625em; -} - -.tabs:not(:last-child), .pagination:not(:last-child), .message:not(:last-child), .level:not(:last-child), .breadcrumb:not(:last-child), .block:not(:last-child), .title:not(:last-child), -.subtitle:not(:last-child), .table-container:not(:last-child), .table:not(:last-child), .progress:not(:last-child), .notification:not(:last-child), .content:not(:last-child), .box:not(:last-child) { - margin-bottom: 1.5rem; -} - -.modal-close, .delete { - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -moz-appearance: none; - -webkit-appearance: none; - background-color: rgba(10, 10, 10, 0.2); - border: none; - border-radius: 9999px; - cursor: pointer; - pointer-events: auto; - display: inline-block; - flex-grow: 0; - flex-shrink: 0; - font-size: 0; - height: 20px; - max-height: 20px; - max-width: 20px; - min-height: 20px; - min-width: 20px; - outline: none; - position: relative; - vertical-align: top; - width: 20px; -} -.modal-close::before, .delete::before, .modal-close::after, .delete::after { - background-color: hsl(0deg, 0%, 100%); - content: ""; - display: block; - left: 50%; - position: absolute; - top: 50%; - transform: translateX(-50%) translateY(-50%) rotate(45deg); - transform-origin: center center; -} -.modal-close::before, .delete::before { - height: 2px; - width: 50%; -} -.modal-close::after, .delete::after { - height: 50%; - width: 2px; -} -.modal-close:hover, .delete:hover, .modal-close:focus, .delete:focus { - background-color: rgba(10, 10, 10, 0.3); -} -.modal-close:active, .delete:active { - background-color: rgba(10, 10, 10, 0.4); -} -.is-small.modal-close, .is-small.delete { - height: 16px; - max-height: 16px; - max-width: 16px; - min-height: 16px; - min-width: 16px; - width: 16px; -} -.is-medium.modal-close, .is-medium.delete { - height: 24px; - max-height: 24px; - max-width: 24px; - min-height: 24px; - min-width: 24px; - width: 24px; -} -.is-large.modal-close, .is-large.delete { - height: 32px; - max-height: 32px; - max-width: 32px; - min-height: 32px; - min-width: 32px; - width: 32px; -} - -.control.is-loading::after, .select.is-loading::after, .loader, .button.is-loading::after { - -webkit-animation: spinAround 500ms infinite linear; - animation: spinAround 500ms infinite linear; - border: 2px solid hsl(0deg, 0%, 86%); - border-radius: 9999px; - border-right-color: transparent; - border-top-color: transparent; - content: ""; - display: block; - height: 1em; - position: relative; - width: 1em; -} - -.hero-video, .is-overlay, .modal-background, .modal, .image.is-square img, -.image.is-square .has-ratio, .image.is-1by1 img, -.image.is-1by1 .has-ratio, .image.is-5by4 img, -.image.is-5by4 .has-ratio, .image.is-4by3 img, -.image.is-4by3 .has-ratio, .image.is-3by2 img, -.image.is-3by2 .has-ratio, .image.is-5by3 img, -.image.is-5by3 .has-ratio, .image.is-16by9 img, -.image.is-16by9 .has-ratio, .image.is-2by1 img, -.image.is-2by1 .has-ratio, .image.is-3by1 img, -.image.is-3by1 .has-ratio, .image.is-4by5 img, -.image.is-4by5 .has-ratio, .image.is-3by4 img, -.image.is-3by4 .has-ratio, .image.is-2by3 img, -.image.is-2by3 .has-ratio, .image.is-3by5 img, -.image.is-3by5 .has-ratio, .image.is-9by16 img, -.image.is-9by16 .has-ratio, .image.is-1by2 img, -.image.is-1by2 .has-ratio, .image.is-1by3 img, -.image.is-1by3 .has-ratio { - bottom: 0; - left: 0; - position: absolute; - right: 0; - top: 0; -} - -.navbar-burger { - -moz-appearance: none; - -webkit-appearance: none; - appearance: none; - background: none; - border: none; - color: currentColor; - font-family: inherit; - font-size: 1em; - margin: 0; - padding: 0; -} - -/* Bulma Base */ /*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */ -html, -body, -p, -ol, -ul, -li, -dl, -dt, -dd, -blockquote, -figure, -fieldset, -legend, -textarea, -pre, -iframe, -hr, -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 0; - padding: 0; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: 100%; - font-weight: normal; -} - -ul { - list-style: none; -} - -button, -input, -select, -textarea { - margin: 0; -} - -html { - box-sizing: border-box; -} - -*, *::before, *::after { - box-sizing: inherit; -} - -img, -video { - height: auto; - max-width: 100%; -} - -iframe { - border: 0; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} -td:not([align]), -th:not([align]) { - text-align: inherit; -} - -html { - background-color: hsl(0deg, 0%, 100%); - font-size: 16px; - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - min-width: 300px; - overflow-x: hidden; - overflow-y: scroll; - text-rendering: optimizeLegibility; - -webkit-text-size-adjust: 100%; - -moz-text-size-adjust: 100%; - text-size-adjust: 100%; -} - -article, -aside, -figure, -footer, -header, -hgroup, -section { - display: block; -} - -body, -button, -input, -optgroup, -select, -textarea { - font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif; -} - -code, -pre { - -moz-osx-font-smoothing: auto; - -webkit-font-smoothing: auto; - font-family: monospace; -} - -body { - color: hsl(0deg, 0%, 29%); - font-size: 1em; - font-weight: 400; - line-height: 1.5; -} - -a { - color: hsl(229deg, 53%, 53%); - cursor: pointer; - text-decoration: none; -} -a strong { - color: currentColor; -} -a:hover { - color: hsl(0deg, 0%, 21%); -} - -code { - background-color: hsl(0deg, 0%, 96%); - color: #da1039; - font-size: 0.875em; - font-weight: normal; - padding: 0.25em 0.5em 0.25em; -} - -hr { - background-color: hsl(0deg, 0%, 96%); - border: none; - display: block; - height: 2px; - margin: 1.5rem 0; -} - -img { - height: auto; - max-width: 100%; -} - -input[type=checkbox], -input[type=radio] { - vertical-align: baseline; -} - -small { - font-size: 0.875em; -} - -span { - font-style: inherit; - font-weight: inherit; -} - -strong { - color: hsl(0deg, 0%, 21%); - font-weight: 700; -} - -fieldset { - border: none; -} - -pre { - -webkit-overflow-scrolling: touch; - background-color: hsl(0deg, 0%, 96%); - color: hsl(0deg, 0%, 29%); - font-size: 0.875em; - overflow-x: auto; - padding: 1.25rem 1.5rem; - white-space: pre; - word-wrap: normal; -} -pre code { - background-color: transparent; - color: currentColor; - font-size: 1em; - padding: 0; -} - -table td, -table th { - vertical-align: top; -} -table td:not([align]), -table th:not([align]) { - text-align: inherit; -} -table th { - color: hsl(0deg, 0%, 21%); -} - -@-webkit-keyframes spinAround { - from { - transform: rotate(0deg); - } - to { - transform: rotate(359deg); - } -} - -@keyframes spinAround { - from { - transform: rotate(0deg); - } - to { - transform: rotate(359deg); - } -} -/* Bulma Elements */ -.box { - background-color: hsl(0deg, 0%, 100%); - border-radius: 6px; - box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02); - color: hsl(0deg, 0%, 29%); - display: block; - padding: 1.25rem; -} - -a.box:hover, a.box:focus { - box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0 0 1px hsl(229deg, 53%, 53%); -} -a.box:active { - box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px hsl(229deg, 53%, 53%); -} - -.button { - background-color: hsl(0deg, 0%, 100%); - border-color: hsl(0deg, 0%, 86%); - border-width: 1px; - color: hsl(0deg, 0%, 21%); - cursor: pointer; - justify-content: center; - padding-bottom: calc(0.5em - 1px); - padding-left: 1em; - padding-right: 1em; - padding-top: calc(0.5em - 1px); - text-align: center; - white-space: nowrap; -} -.button strong { - color: inherit; -} -.button .icon, .button .icon.is-small, .button .icon.is-medium, .button .icon.is-large { - height: 1.5em; - width: 1.5em; -} -.button .icon:first-child:not(:last-child) { - margin-left: calc(-0.5em - 1px); - margin-right: 0.25em; -} -.button .icon:last-child:not(:first-child) { - margin-left: 0.25em; - margin-right: calc(-0.5em - 1px); -} -.button .icon:first-child:last-child { - margin-left: calc(-0.5em - 1px); - margin-right: calc(-0.5em - 1px); -} -.button:hover, .button.is-hovered { - border-color: hsl(0deg, 0%, 71%); - color: hsl(0deg, 0%, 21%); -} -.button:focus, .button.is-focused { - border-color: hsl(229deg, 53%, 53%); - color: hsl(0deg, 0%, 21%); -} -.button:focus:not(:active), .button.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(72, 95, 199, 0.25); -} -.button:active, .button.is-active { - border-color: hsl(0deg, 0%, 29%); - color: hsl(0deg, 0%, 21%); -} -.button.is-text { - background-color: transparent; - border-color: transparent; - color: hsl(0deg, 0%, 29%); - text-decoration: underline; -} -.button.is-text:hover, .button.is-text.is-hovered, .button.is-text:focus, .button.is-text.is-focused { - background-color: hsl(0deg, 0%, 96%); - color: hsl(0deg, 0%, 21%); -} -.button.is-text:active, .button.is-text.is-active { - background-color: #e8e8e8; - color: hsl(0deg, 0%, 21%); -} -.button.is-text[disabled], fieldset[disabled] .button.is-text { - background-color: transparent; - border-color: transparent; - box-shadow: none; -} -.button.is-ghost { - background: none; - border-color: transparent; - color: hsl(229deg, 53%, 53%); - text-decoration: none; -} -.button.is-ghost:hover, .button.is-ghost.is-hovered { - color: hsl(229deg, 53%, 53%); - text-decoration: underline; -} -.button.is-white { - background-color: hsl(0deg, 0%, 100%); - border-color: transparent; - color: hsl(0deg, 0%, 4%); -} -.button.is-white:hover, .button.is-white.is-hovered { - background-color: #f9f9f9; - border-color: transparent; - color: hsl(0deg, 0%, 4%); -} -.button.is-white:focus, .button.is-white.is-focused { - border-color: transparent; - color: hsl(0deg, 0%, 4%); -} -.button.is-white:focus:not(:active), .button.is-white.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); -} -.button.is-white:active, .button.is-white.is-active { - background-color: #f2f2f2; - border-color: transparent; - color: hsl(0deg, 0%, 4%); -} -.button.is-white[disabled], fieldset[disabled] .button.is-white { - background-color: hsl(0deg, 0%, 100%); - border-color: hsl(0deg, 0%, 100%); - box-shadow: none; -} -.button.is-white.is-inverted { - background-color: hsl(0deg, 0%, 4%); - color: hsl(0deg, 0%, 100%); -} -.button.is-white.is-inverted:hover, .button.is-white.is-inverted.is-hovered { - background-color: black; -} -.button.is-white.is-inverted[disabled], fieldset[disabled] .button.is-white.is-inverted { - background-color: hsl(0deg, 0%, 4%); - border-color: transparent; - box-shadow: none; - color: hsl(0deg, 0%, 100%); -} -.button.is-white.is-loading::after { - border-color: transparent transparent hsl(0deg, 0%, 4%) hsl(0deg, 0%, 4%) !important; -} -.button.is-white.is-outlined { - background-color: transparent; - border-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 100%); -} -.button.is-white.is-outlined:hover, .button.is-white.is-outlined.is-hovered, .button.is-white.is-outlined:focus, .button.is-white.is-outlined.is-focused { - background-color: hsl(0deg, 0%, 100%); - border-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 4%); -} -.button.is-white.is-outlined.is-loading::after { - border-color: transparent transparent hsl(0deg, 0%, 100%) hsl(0deg, 0%, 100%) !important; -} -.button.is-white.is-outlined.is-loading:hover::after, .button.is-white.is-outlined.is-loading.is-hovered::after, .button.is-white.is-outlined.is-loading:focus::after, .button.is-white.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent hsl(0deg, 0%, 4%) hsl(0deg, 0%, 4%) !important; -} -.button.is-white.is-outlined[disabled], fieldset[disabled] .button.is-white.is-outlined { - background-color: transparent; - border-color: hsl(0deg, 0%, 100%); - box-shadow: none; - color: hsl(0deg, 0%, 100%); -} -.button.is-white.is-inverted.is-outlined { - background-color: transparent; - border-color: hsl(0deg, 0%, 4%); - color: hsl(0deg, 0%, 4%); -} -.button.is-white.is-inverted.is-outlined:hover, .button.is-white.is-inverted.is-outlined.is-hovered, .button.is-white.is-inverted.is-outlined:focus, .button.is-white.is-inverted.is-outlined.is-focused { - background-color: hsl(0deg, 0%, 4%); - color: hsl(0deg, 0%, 100%); -} -.button.is-white.is-inverted.is-outlined.is-loading:hover::after, .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-white.is-inverted.is-outlined.is-loading:focus::after, .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent hsl(0deg, 0%, 100%) hsl(0deg, 0%, 100%) !important; -} -.button.is-white.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-white.is-inverted.is-outlined { - background-color: transparent; - border-color: hsl(0deg, 0%, 4%); - box-shadow: none; - color: hsl(0deg, 0%, 4%); -} -.button.is-black { - background-color: hsl(0deg, 0%, 4%); - border-color: transparent; - color: hsl(0deg, 0%, 100%); -} -.button.is-black:hover, .button.is-black.is-hovered { - background-color: #040404; - border-color: transparent; - color: hsl(0deg, 0%, 100%); -} -.button.is-black:focus, .button.is-black.is-focused { - border-color: transparent; - color: hsl(0deg, 0%, 100%); -} -.button.is-black:focus:not(:active), .button.is-black.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); -} -.button.is-black:active, .button.is-black.is-active { - background-color: black; - border-color: transparent; - color: hsl(0deg, 0%, 100%); -} -.button.is-black[disabled], fieldset[disabled] .button.is-black { - background-color: hsl(0deg, 0%, 4%); - border-color: hsl(0deg, 0%, 4%); - box-shadow: none; -} -.button.is-black.is-inverted { - background-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 4%); -} -.button.is-black.is-inverted:hover, .button.is-black.is-inverted.is-hovered { - background-color: #f2f2f2; -} -.button.is-black.is-inverted[disabled], fieldset[disabled] .button.is-black.is-inverted { - background-color: hsl(0deg, 0%, 100%); - border-color: transparent; - box-shadow: none; - color: hsl(0deg, 0%, 4%); -} -.button.is-black.is-loading::after { - border-color: transparent transparent hsl(0deg, 0%, 100%) hsl(0deg, 0%, 100%) !important; -} -.button.is-black.is-outlined { - background-color: transparent; - border-color: hsl(0deg, 0%, 4%); - color: hsl(0deg, 0%, 4%); -} -.button.is-black.is-outlined:hover, .button.is-black.is-outlined.is-hovered, .button.is-black.is-outlined:focus, .button.is-black.is-outlined.is-focused { - background-color: hsl(0deg, 0%, 4%); - border-color: hsl(0deg, 0%, 4%); - color: hsl(0deg, 0%, 100%); -} -.button.is-black.is-outlined.is-loading::after { - border-color: transparent transparent hsl(0deg, 0%, 4%) hsl(0deg, 0%, 4%) !important; -} -.button.is-black.is-outlined.is-loading:hover::after, .button.is-black.is-outlined.is-loading.is-hovered::after, .button.is-black.is-outlined.is-loading:focus::after, .button.is-black.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent hsl(0deg, 0%, 100%) hsl(0deg, 0%, 100%) !important; -} -.button.is-black.is-outlined[disabled], fieldset[disabled] .button.is-black.is-outlined { - background-color: transparent; - border-color: hsl(0deg, 0%, 4%); - box-shadow: none; - color: hsl(0deg, 0%, 4%); -} -.button.is-black.is-inverted.is-outlined { - background-color: transparent; - border-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 100%); -} -.button.is-black.is-inverted.is-outlined:hover, .button.is-black.is-inverted.is-outlined.is-hovered, .button.is-black.is-inverted.is-outlined:focus, .button.is-black.is-inverted.is-outlined.is-focused { - background-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 4%); -} -.button.is-black.is-inverted.is-outlined.is-loading:hover::after, .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-black.is-inverted.is-outlined.is-loading:focus::after, .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent hsl(0deg, 0%, 4%) hsl(0deg, 0%, 4%) !important; -} -.button.is-black.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-black.is-inverted.is-outlined { - background-color: transparent; - border-color: hsl(0deg, 0%, 100%); - box-shadow: none; - color: hsl(0deg, 0%, 100%); -} -.button.is-light { - background-color: hsl(0deg, 0%, 96%); - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} -.button.is-light:hover, .button.is-light.is-hovered { - background-color: #eeeeee; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} -.button.is-light:focus, .button.is-light.is-focused { - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} -.button.is-light:focus:not(:active), .button.is-light.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); -} -.button.is-light:active, .button.is-light.is-active { - background-color: #e8e8e8; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} -.button.is-light[disabled], fieldset[disabled] .button.is-light { - background-color: hsl(0deg, 0%, 96%); - border-color: hsl(0deg, 0%, 96%); - box-shadow: none; -} -.button.is-light.is-inverted { - background-color: rgba(0, 0, 0, 0.7); - color: hsl(0deg, 0%, 96%); -} -.button.is-light.is-inverted:hover, .button.is-light.is-inverted.is-hovered { - background-color: rgba(0, 0, 0, 0.7); -} -.button.is-light.is-inverted[disabled], fieldset[disabled] .button.is-light.is-inverted { - background-color: rgba(0, 0, 0, 0.7); - border-color: transparent; - box-shadow: none; - color: hsl(0deg, 0%, 96%); -} -.button.is-light.is-loading::after { - border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; -} -.button.is-light.is-outlined { - background-color: transparent; - border-color: hsl(0deg, 0%, 96%); - color: hsl(0deg, 0%, 96%); -} -.button.is-light.is-outlined:hover, .button.is-light.is-outlined.is-hovered, .button.is-light.is-outlined:focus, .button.is-light.is-outlined.is-focused { - background-color: hsl(0deg, 0%, 96%); - border-color: hsl(0deg, 0%, 96%); - color: rgba(0, 0, 0, 0.7); -} -.button.is-light.is-outlined.is-loading::after { - border-color: transparent transparent hsl(0deg, 0%, 96%) hsl(0deg, 0%, 96%) !important; -} -.button.is-light.is-outlined.is-loading:hover::after, .button.is-light.is-outlined.is-loading.is-hovered::after, .button.is-light.is-outlined.is-loading:focus::after, .button.is-light.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; -} -.button.is-light.is-outlined[disabled], fieldset[disabled] .button.is-light.is-outlined { - background-color: transparent; - border-color: hsl(0deg, 0%, 96%); - box-shadow: none; - color: hsl(0deg, 0%, 96%); -} -.button.is-light.is-inverted.is-outlined { - background-color: transparent; - border-color: rgba(0, 0, 0, 0.7); - color: rgba(0, 0, 0, 0.7); -} -.button.is-light.is-inverted.is-outlined:hover, .button.is-light.is-inverted.is-outlined.is-hovered, .button.is-light.is-inverted.is-outlined:focus, .button.is-light.is-inverted.is-outlined.is-focused { - background-color: rgba(0, 0, 0, 0.7); - color: hsl(0deg, 0%, 96%); -} -.button.is-light.is-inverted.is-outlined.is-loading:hover::after, .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-light.is-inverted.is-outlined.is-loading:focus::after, .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent hsl(0deg, 0%, 96%) hsl(0deg, 0%, 96%) !important; -} -.button.is-light.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-light.is-inverted.is-outlined { - background-color: transparent; - border-color: rgba(0, 0, 0, 0.7); - box-shadow: none; - color: rgba(0, 0, 0, 0.7); -} -.button.is-dark { - background-color: hsl(0deg, 0%, 21%); - border-color: transparent; - color: #fff; -} -.button.is-dark:hover, .button.is-dark.is-hovered { - background-color: #2f2f2f; - border-color: transparent; - color: #fff; -} -.button.is-dark:focus, .button.is-dark.is-focused { - border-color: transparent; - color: #fff; -} -.button.is-dark:focus:not(:active), .button.is-dark.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); -} -.button.is-dark:active, .button.is-dark.is-active { - background-color: #292929; - border-color: transparent; - color: #fff; -} -.button.is-dark[disabled], fieldset[disabled] .button.is-dark { - background-color: hsl(0deg, 0%, 21%); - border-color: hsl(0deg, 0%, 21%); - box-shadow: none; -} -.button.is-dark.is-inverted { - background-color: #fff; - color: hsl(0deg, 0%, 21%); -} -.button.is-dark.is-inverted:hover, .button.is-dark.is-inverted.is-hovered { - background-color: #f2f2f2; -} -.button.is-dark.is-inverted[disabled], fieldset[disabled] .button.is-dark.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: hsl(0deg, 0%, 21%); -} -.button.is-dark.is-loading::after { - border-color: transparent transparent #fff #fff !important; -} -.button.is-dark.is-outlined { - background-color: transparent; - border-color: hsl(0deg, 0%, 21%); - color: hsl(0deg, 0%, 21%); -} -.button.is-dark.is-outlined:hover, .button.is-dark.is-outlined.is-hovered, .button.is-dark.is-outlined:focus, .button.is-dark.is-outlined.is-focused { - background-color: hsl(0deg, 0%, 21%); - border-color: hsl(0deg, 0%, 21%); - color: #fff; -} -.button.is-dark.is-outlined.is-loading::after { - border-color: transparent transparent hsl(0deg, 0%, 21%) hsl(0deg, 0%, 21%) !important; -} -.button.is-dark.is-outlined.is-loading:hover::after, .button.is-dark.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-outlined.is-loading:focus::after, .button.is-dark.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; -} -.button.is-dark.is-outlined[disabled], fieldset[disabled] .button.is-dark.is-outlined { - background-color: transparent; - border-color: hsl(0deg, 0%, 21%); - box-shadow: none; - color: hsl(0deg, 0%, 21%); -} -.button.is-dark.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; -} -.button.is-dark.is-inverted.is-outlined:hover, .button.is-dark.is-inverted.is-outlined.is-hovered, .button.is-dark.is-inverted.is-outlined:focus, .button.is-dark.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: hsl(0deg, 0%, 21%); -} -.button.is-dark.is-inverted.is-outlined.is-loading:hover::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent hsl(0deg, 0%, 21%) hsl(0deg, 0%, 21%) !important; -} -.button.is-dark.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-dark.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; -} -.button.is-primary { - background-color: hsl(171deg, 100%, 41%); - border-color: transparent; - color: #fff; -} -.button.is-primary:hover, .button.is-primary.is-hovered { - background-color: #00c4a7; - border-color: transparent; - color: #fff; -} -.button.is-primary:focus, .button.is-primary.is-focused { - border-color: transparent; - color: #fff; -} -.button.is-primary:focus:not(:active), .button.is-primary.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); -} -.button.is-primary:active, .button.is-primary.is-active { - background-color: #00b89c; - border-color: transparent; - color: #fff; -} -.button.is-primary[disabled], fieldset[disabled] .button.is-primary { - background-color: hsl(171deg, 100%, 41%); - border-color: hsl(171deg, 100%, 41%); - box-shadow: none; -} -.button.is-primary.is-inverted { - background-color: #fff; - color: hsl(171deg, 100%, 41%); -} -.button.is-primary.is-inverted:hover, .button.is-primary.is-inverted.is-hovered { - background-color: #f2f2f2; -} -.button.is-primary.is-inverted[disabled], fieldset[disabled] .button.is-primary.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: hsl(171deg, 100%, 41%); -} -.button.is-primary.is-loading::after { - border-color: transparent transparent #fff #fff !important; -} -.button.is-primary.is-outlined { - background-color: transparent; - border-color: hsl(171deg, 100%, 41%); - color: hsl(171deg, 100%, 41%); -} -.button.is-primary.is-outlined:hover, .button.is-primary.is-outlined.is-hovered, .button.is-primary.is-outlined:focus, .button.is-primary.is-outlined.is-focused { - background-color: hsl(171deg, 100%, 41%); - border-color: hsl(171deg, 100%, 41%); - color: #fff; -} -.button.is-primary.is-outlined.is-loading::after { - border-color: transparent transparent hsl(171deg, 100%, 41%) hsl(171deg, 100%, 41%) !important; -} -.button.is-primary.is-outlined.is-loading:hover::after, .button.is-primary.is-outlined.is-loading.is-hovered::after, .button.is-primary.is-outlined.is-loading:focus::after, .button.is-primary.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; -} -.button.is-primary.is-outlined[disabled], fieldset[disabled] .button.is-primary.is-outlined { - background-color: transparent; - border-color: hsl(171deg, 100%, 41%); - box-shadow: none; - color: hsl(171deg, 100%, 41%); -} -.button.is-primary.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; -} -.button.is-primary.is-inverted.is-outlined:hover, .button.is-primary.is-inverted.is-outlined.is-hovered, .button.is-primary.is-inverted.is-outlined:focus, .button.is-primary.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: hsl(171deg, 100%, 41%); -} -.button.is-primary.is-inverted.is-outlined.is-loading:hover::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent hsl(171deg, 100%, 41%) hsl(171deg, 100%, 41%) !important; -} -.button.is-primary.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-primary.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; -} -.button.is-primary.is-light { - background-color: #ebfffc; - color: #00947e; -} -.button.is-primary.is-light:hover, .button.is-primary.is-light.is-hovered { - background-color: #defffa; - border-color: transparent; - color: #00947e; -} -.button.is-primary.is-light:active, .button.is-primary.is-light.is-active { - background-color: #d1fff8; - border-color: transparent; - color: #00947e; -} -.button.is-link { - background-color: hsl(229deg, 53%, 53%); - border-color: transparent; - color: #fff; -} -.button.is-link:hover, .button.is-link.is-hovered { - background-color: #3e56c4; - border-color: transparent; - color: #fff; -} -.button.is-link:focus, .button.is-link.is-focused { - border-color: transparent; - color: #fff; -} -.button.is-link:focus:not(:active), .button.is-link.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(72, 95, 199, 0.25); -} -.button.is-link:active, .button.is-link.is-active { - background-color: #3a51bb; - border-color: transparent; - color: #fff; -} -.button.is-link[disabled], fieldset[disabled] .button.is-link { - background-color: hsl(229deg, 53%, 53%); - border-color: hsl(229deg, 53%, 53%); - box-shadow: none; -} -.button.is-link.is-inverted { - background-color: #fff; - color: hsl(229deg, 53%, 53%); -} -.button.is-link.is-inverted:hover, .button.is-link.is-inverted.is-hovered { - background-color: #f2f2f2; -} -.button.is-link.is-inverted[disabled], fieldset[disabled] .button.is-link.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: hsl(229deg, 53%, 53%); -} -.button.is-link.is-loading::after { - border-color: transparent transparent #fff #fff !important; -} -.button.is-link.is-outlined { - background-color: transparent; - border-color: hsl(229deg, 53%, 53%); - color: hsl(229deg, 53%, 53%); -} -.button.is-link.is-outlined:hover, .button.is-link.is-outlined.is-hovered, .button.is-link.is-outlined:focus, .button.is-link.is-outlined.is-focused { - background-color: hsl(229deg, 53%, 53%); - border-color: hsl(229deg, 53%, 53%); - color: #fff; -} -.button.is-link.is-outlined.is-loading::after { - border-color: transparent transparent hsl(229deg, 53%, 53%) hsl(229deg, 53%, 53%) !important; -} -.button.is-link.is-outlined.is-loading:hover::after, .button.is-link.is-outlined.is-loading.is-hovered::after, .button.is-link.is-outlined.is-loading:focus::after, .button.is-link.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; -} -.button.is-link.is-outlined[disabled], fieldset[disabled] .button.is-link.is-outlined { - background-color: transparent; - border-color: hsl(229deg, 53%, 53%); - box-shadow: none; - color: hsl(229deg, 53%, 53%); -} -.button.is-link.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; -} -.button.is-link.is-inverted.is-outlined:hover, .button.is-link.is-inverted.is-outlined.is-hovered, .button.is-link.is-inverted.is-outlined:focus, .button.is-link.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: hsl(229deg, 53%, 53%); -} -.button.is-link.is-inverted.is-outlined.is-loading:hover::after, .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-link.is-inverted.is-outlined.is-loading:focus::after, .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent hsl(229deg, 53%, 53%) hsl(229deg, 53%, 53%) !important; -} -.button.is-link.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-link.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; -} -.button.is-link.is-light { - background-color: #eff1fa; - color: #3850b7; -} -.button.is-link.is-light:hover, .button.is-link.is-light.is-hovered { - background-color: #e6e9f7; - border-color: transparent; - color: #3850b7; -} -.button.is-link.is-light:active, .button.is-link.is-light.is-active { - background-color: #dce0f4; - border-color: transparent; - color: #3850b7; -} -.button.is-info { - background-color: hsl(207deg, 61%, 53%); - border-color: transparent; - color: #fff; -} -.button.is-info:hover, .button.is-info.is-hovered { - background-color: #3488ce; - border-color: transparent; - color: #fff; -} -.button.is-info:focus, .button.is-info.is-focused { - border-color: transparent; - color: #fff; -} -.button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(62, 142, 208, 0.25); -} -.button.is-info:active, .button.is-info.is-active { - background-color: #3082c5; - border-color: transparent; - color: #fff; -} -.button.is-info[disabled], fieldset[disabled] .button.is-info { - background-color: hsl(207deg, 61%, 53%); - border-color: hsl(207deg, 61%, 53%); - box-shadow: none; -} -.button.is-info.is-inverted { - background-color: #fff; - color: hsl(207deg, 61%, 53%); -} -.button.is-info.is-inverted:hover, .button.is-info.is-inverted.is-hovered { - background-color: #f2f2f2; -} -.button.is-info.is-inverted[disabled], fieldset[disabled] .button.is-info.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: hsl(207deg, 61%, 53%); -} -.button.is-info.is-loading::after { - border-color: transparent transparent #fff #fff !important; -} -.button.is-info.is-outlined { - background-color: transparent; - border-color: hsl(207deg, 61%, 53%); - color: hsl(207deg, 61%, 53%); -} -.button.is-info.is-outlined:hover, .button.is-info.is-outlined.is-hovered, .button.is-info.is-outlined:focus, .button.is-info.is-outlined.is-focused { - background-color: hsl(207deg, 61%, 53%); - border-color: hsl(207deg, 61%, 53%); - color: #fff; -} -.button.is-info.is-outlined.is-loading::after { - border-color: transparent transparent hsl(207deg, 61%, 53%) hsl(207deg, 61%, 53%) !important; -} -.button.is-info.is-outlined.is-loading:hover::after, .button.is-info.is-outlined.is-loading.is-hovered::after, .button.is-info.is-outlined.is-loading:focus::after, .button.is-info.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; -} -.button.is-info.is-outlined[disabled], fieldset[disabled] .button.is-info.is-outlined { - background-color: transparent; - border-color: hsl(207deg, 61%, 53%); - box-shadow: none; - color: hsl(207deg, 61%, 53%); -} -.button.is-info.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; -} -.button.is-info.is-inverted.is-outlined:hover, .button.is-info.is-inverted.is-outlined.is-hovered, .button.is-info.is-inverted.is-outlined:focus, .button.is-info.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: hsl(207deg, 61%, 53%); -} -.button.is-info.is-inverted.is-outlined.is-loading:hover::after, .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-info.is-inverted.is-outlined.is-loading:focus::after, .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent hsl(207deg, 61%, 53%) hsl(207deg, 61%, 53%) !important; -} -.button.is-info.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-info.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; -} -.button.is-info.is-light { - background-color: #eff5fb; - color: #296fa8; -} -.button.is-info.is-light:hover, .button.is-info.is-light.is-hovered { - background-color: #e4eff9; - border-color: transparent; - color: #296fa8; -} -.button.is-info.is-light:active, .button.is-info.is-light.is-active { - background-color: #dae9f6; - border-color: transparent; - color: #296fa8; -} -.button.is-success { - background-color: hsl(153deg, 53%, 53%); - border-color: transparent; - color: #fff; -} -.button.is-success:hover, .button.is-success.is-hovered { - background-color: #3ec487; - border-color: transparent; - color: #fff; -} -.button.is-success:focus, .button.is-success.is-focused { - border-color: transparent; - color: #fff; -} -.button.is-success:focus:not(:active), .button.is-success.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(72, 199, 142, 0.25); -} -.button.is-success:active, .button.is-success.is-active { - background-color: #3abb81; - border-color: transparent; - color: #fff; -} -.button.is-success[disabled], fieldset[disabled] .button.is-success { - background-color: hsl(153deg, 53%, 53%); - border-color: hsl(153deg, 53%, 53%); - box-shadow: none; -} -.button.is-success.is-inverted { - background-color: #fff; - color: hsl(153deg, 53%, 53%); -} -.button.is-success.is-inverted:hover, .button.is-success.is-inverted.is-hovered { - background-color: #f2f2f2; -} -.button.is-success.is-inverted[disabled], fieldset[disabled] .button.is-success.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: hsl(153deg, 53%, 53%); -} -.button.is-success.is-loading::after { - border-color: transparent transparent #fff #fff !important; -} -.button.is-success.is-outlined { - background-color: transparent; - border-color: hsl(153deg, 53%, 53%); - color: hsl(153deg, 53%, 53%); -} -.button.is-success.is-outlined:hover, .button.is-success.is-outlined.is-hovered, .button.is-success.is-outlined:focus, .button.is-success.is-outlined.is-focused { - background-color: hsl(153deg, 53%, 53%); - border-color: hsl(153deg, 53%, 53%); - color: #fff; -} -.button.is-success.is-outlined.is-loading::after { - border-color: transparent transparent hsl(153deg, 53%, 53%) hsl(153deg, 53%, 53%) !important; -} -.button.is-success.is-outlined.is-loading:hover::after, .button.is-success.is-outlined.is-loading.is-hovered::after, .button.is-success.is-outlined.is-loading:focus::after, .button.is-success.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; -} -.button.is-success.is-outlined[disabled], fieldset[disabled] .button.is-success.is-outlined { - background-color: transparent; - border-color: hsl(153deg, 53%, 53%); - box-shadow: none; - color: hsl(153deg, 53%, 53%); -} -.button.is-success.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; -} -.button.is-success.is-inverted.is-outlined:hover, .button.is-success.is-inverted.is-outlined.is-hovered, .button.is-success.is-inverted.is-outlined:focus, .button.is-success.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: hsl(153deg, 53%, 53%); -} -.button.is-success.is-inverted.is-outlined.is-loading:hover::after, .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-success.is-inverted.is-outlined.is-loading:focus::after, .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent hsl(153deg, 53%, 53%) hsl(153deg, 53%, 53%) !important; -} -.button.is-success.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-success.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; -} -.button.is-success.is-light { - background-color: #effaf5; - color: #257953; -} -.button.is-success.is-light:hover, .button.is-success.is-light.is-hovered { - background-color: #e6f7ef; - border-color: transparent; - color: #257953; -} -.button.is-success.is-light:active, .button.is-success.is-light.is-active { - background-color: #dcf4e9; - border-color: transparent; - color: #257953; -} -.button.is-warning { - background-color: hsl(44deg, 100%, 77%); - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} -.button.is-warning:hover, .button.is-warning.is-hovered { - background-color: #ffdc7d; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} -.button.is-warning:focus, .button.is-warning.is-focused { - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} -.button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(255, 224, 138, 0.25); -} -.button.is-warning:active, .button.is-warning.is-active { - background-color: #ffd970; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} -.button.is-warning[disabled], fieldset[disabled] .button.is-warning { - background-color: hsl(44deg, 100%, 77%); - border-color: hsl(44deg, 100%, 77%); - box-shadow: none; -} -.button.is-warning.is-inverted { - background-color: rgba(0, 0, 0, 0.7); - color: hsl(44deg, 100%, 77%); -} -.button.is-warning.is-inverted:hover, .button.is-warning.is-inverted.is-hovered { - background-color: rgba(0, 0, 0, 0.7); -} -.button.is-warning.is-inverted[disabled], fieldset[disabled] .button.is-warning.is-inverted { - background-color: rgba(0, 0, 0, 0.7); - border-color: transparent; - box-shadow: none; - color: hsl(44deg, 100%, 77%); -} -.button.is-warning.is-loading::after { - border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; -} -.button.is-warning.is-outlined { - background-color: transparent; - border-color: hsl(44deg, 100%, 77%); - color: hsl(44deg, 100%, 77%); -} -.button.is-warning.is-outlined:hover, .button.is-warning.is-outlined.is-hovered, .button.is-warning.is-outlined:focus, .button.is-warning.is-outlined.is-focused { - background-color: hsl(44deg, 100%, 77%); - border-color: hsl(44deg, 100%, 77%); - color: rgba(0, 0, 0, 0.7); -} -.button.is-warning.is-outlined.is-loading::after { - border-color: transparent transparent hsl(44deg, 100%, 77%) hsl(44deg, 100%, 77%) !important; -} -.button.is-warning.is-outlined.is-loading:hover::after, .button.is-warning.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-outlined.is-loading:focus::after, .button.is-warning.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; -} -.button.is-warning.is-outlined[disabled], fieldset[disabled] .button.is-warning.is-outlined { - background-color: transparent; - border-color: hsl(44deg, 100%, 77%); - box-shadow: none; - color: hsl(44deg, 100%, 77%); -} -.button.is-warning.is-inverted.is-outlined { - background-color: transparent; - border-color: rgba(0, 0, 0, 0.7); - color: rgba(0, 0, 0, 0.7); -} -.button.is-warning.is-inverted.is-outlined:hover, .button.is-warning.is-inverted.is-outlined.is-hovered, .button.is-warning.is-inverted.is-outlined:focus, .button.is-warning.is-inverted.is-outlined.is-focused { - background-color: rgba(0, 0, 0, 0.7); - color: hsl(44deg, 100%, 77%); -} -.button.is-warning.is-inverted.is-outlined.is-loading:hover::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent hsl(44deg, 100%, 77%) hsl(44deg, 100%, 77%) !important; -} -.button.is-warning.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-warning.is-inverted.is-outlined { - background-color: transparent; - border-color: rgba(0, 0, 0, 0.7); - box-shadow: none; - color: rgba(0, 0, 0, 0.7); -} -.button.is-warning.is-light { - background-color: #fffaeb; - color: #946c00; -} -.button.is-warning.is-light:hover, .button.is-warning.is-light.is-hovered { - background-color: #fff6de; - border-color: transparent; - color: #946c00; -} -.button.is-warning.is-light:active, .button.is-warning.is-light.is-active { - background-color: #fff3d1; - border-color: transparent; - color: #946c00; -} -.button.is-danger { - background-color: hsl(348deg, 86%, 61%); - border-color: transparent; - color: #fff; -} -.button.is-danger:hover, .button.is-danger.is-hovered { - background-color: #f03a5f; - border-color: transparent; - color: #fff; -} -.button.is-danger:focus, .button.is-danger.is-focused { - border-color: transparent; - color: #fff; -} -.button.is-danger:focus:not(:active), .button.is-danger.is-focused:not(:active) { - box-shadow: 0 0 0 0.125em rgba(241, 70, 104, 0.25); -} -.button.is-danger:active, .button.is-danger.is-active { - background-color: #ef2e55; - border-color: transparent; - color: #fff; -} -.button.is-danger[disabled], fieldset[disabled] .button.is-danger { - background-color: hsl(348deg, 86%, 61%); - border-color: hsl(348deg, 86%, 61%); - box-shadow: none; -} -.button.is-danger.is-inverted { - background-color: #fff; - color: hsl(348deg, 86%, 61%); -} -.button.is-danger.is-inverted:hover, .button.is-danger.is-inverted.is-hovered { - background-color: #f2f2f2; -} -.button.is-danger.is-inverted[disabled], fieldset[disabled] .button.is-danger.is-inverted { - background-color: #fff; - border-color: transparent; - box-shadow: none; - color: hsl(348deg, 86%, 61%); -} -.button.is-danger.is-loading::after { - border-color: transparent transparent #fff #fff !important; -} -.button.is-danger.is-outlined { - background-color: transparent; - border-color: hsl(348deg, 86%, 61%); - color: hsl(348deg, 86%, 61%); -} -.button.is-danger.is-outlined:hover, .button.is-danger.is-outlined.is-hovered, .button.is-danger.is-outlined:focus, .button.is-danger.is-outlined.is-focused { - background-color: hsl(348deg, 86%, 61%); - border-color: hsl(348deg, 86%, 61%); - color: #fff; -} -.button.is-danger.is-outlined.is-loading::after { - border-color: transparent transparent hsl(348deg, 86%, 61%) hsl(348deg, 86%, 61%) !important; -} -.button.is-danger.is-outlined.is-loading:hover::after, .button.is-danger.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-outlined.is-loading:focus::after, .button.is-danger.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent #fff #fff !important; -} -.button.is-danger.is-outlined[disabled], fieldset[disabled] .button.is-danger.is-outlined { - background-color: transparent; - border-color: hsl(348deg, 86%, 61%); - box-shadow: none; - color: hsl(348deg, 86%, 61%); -} -.button.is-danger.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - color: #fff; -} -.button.is-danger.is-inverted.is-outlined:hover, .button.is-danger.is-inverted.is-outlined.is-hovered, .button.is-danger.is-inverted.is-outlined:focus, .button.is-danger.is-inverted.is-outlined.is-focused { - background-color: #fff; - color: hsl(348deg, 86%, 61%); -} -.button.is-danger.is-inverted.is-outlined.is-loading:hover::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after { - border-color: transparent transparent hsl(348deg, 86%, 61%) hsl(348deg, 86%, 61%) !important; -} -.button.is-danger.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-danger.is-inverted.is-outlined { - background-color: transparent; - border-color: #fff; - box-shadow: none; - color: #fff; -} -.button.is-danger.is-light { - background-color: #feecf0; - color: #cc0f35; -} -.button.is-danger.is-light:hover, .button.is-danger.is-light.is-hovered { - background-color: #fde0e6; - border-color: transparent; - color: #cc0f35; -} -.button.is-danger.is-light:active, .button.is-danger.is-light.is-active { - background-color: #fcd4dc; - border-color: transparent; - color: #cc0f35; -} -.button.is-small { - font-size: 0.75rem; -} -.button.is-small:not(.is-rounded) { - border-radius: 2px; -} -.button.is-normal { - font-size: 1rem; -} -.button.is-medium { - font-size: 1.25rem; -} -.button.is-large { - font-size: 1.5rem; -} -.button[disabled], fieldset[disabled] .button { - background-color: hsl(0deg, 0%, 100%); - border-color: hsl(0deg, 0%, 86%); - box-shadow: none; - opacity: 0.5; -} -.button.is-fullwidth { - display: flex; - width: 100%; -} -.button.is-loading { - color: transparent !important; - pointer-events: none; -} -.button.is-loading::after { - position: absolute; - left: calc(50% - (1em * 0.5)); - top: calc(50% - (1em * 0.5)); - position: absolute !important; -} -.button.is-static { - background-color: hsl(0deg, 0%, 96%); - border-color: hsl(0deg, 0%, 86%); - color: hsl(0deg, 0%, 48%); - box-shadow: none; - pointer-events: none; -} -.button.is-rounded { - border-radius: 9999px; - padding-left: calc(1em + 0.25em); - padding-right: calc(1em + 0.25em); -} - -.buttons { - align-items: center; - display: flex; - flex-wrap: wrap; - justify-content: flex-start; -} -.buttons .button { - margin-bottom: 0.5rem; -} -.buttons .button:not(:last-child):not(.is-fullwidth) { - margin-right: 0.5rem; -} -.buttons:last-child { - margin-bottom: -0.5rem; -} -.buttons:not(:last-child) { - margin-bottom: 1rem; -} -.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) { - font-size: 0.75rem; -} -.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded) { - border-radius: 2px; -} -.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) { - font-size: 1.25rem; -} -.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) { - font-size: 1.5rem; -} -.buttons.has-addons .button:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.buttons.has-addons .button:not(:last-child) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; - margin-right: -1px; -} -.buttons.has-addons .button:last-child { - margin-right: 0; -} -.buttons.has-addons .button:hover, .buttons.has-addons .button.is-hovered { - z-index: 2; -} -.buttons.has-addons .button:focus, .buttons.has-addons .button.is-focused, .buttons.has-addons .button:active, .buttons.has-addons .button.is-active, .buttons.has-addons .button.is-selected { - z-index: 3; -} -.buttons.has-addons .button:focus:hover, .buttons.has-addons .button.is-focused:hover, .buttons.has-addons .button:active:hover, .buttons.has-addons .button.is-active:hover, .buttons.has-addons .button.is-selected:hover { - z-index: 4; -} -.buttons.has-addons .button.is-expanded { - flex-grow: 1; - flex-shrink: 1; -} -.buttons.is-centered { - justify-content: center; -} -.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) { - margin-left: 0.25rem; - margin-right: 0.25rem; -} -.buttons.is-right { - justify-content: flex-end; -} -.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) { - margin-left: 0.25rem; - margin-right: 0.25rem; -} - -@media screen and (max-width: 768px) { - .button.is-responsive.is-small { - font-size: 0.5625rem; - } - .button.is-responsive, -.button.is-responsive.is-normal { - font-size: 0.65625rem; - } - .button.is-responsive.is-medium { - font-size: 0.75rem; - } - .button.is-responsive.is-large { - font-size: 1rem; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .button.is-responsive.is-small { - font-size: 0.65625rem; - } - .button.is-responsive, -.button.is-responsive.is-normal { - font-size: 0.75rem; - } - .button.is-responsive.is-medium { - font-size: 1rem; - } - .button.is-responsive.is-large { - font-size: 1.25rem; - } -} -.container { - flex-grow: 1; - margin: 0 auto; - position: relative; - width: auto; -} -.container.is-fluid { - max-width: none !important; - padding-left: 32px; - padding-right: 32px; - width: 100%; -} -@media screen and (min-width: 1024px) { - .container { - max-width: 960px; - } -} -@media screen and (max-width: 1215px) { - .container.is-widescreen:not(.is-max-desktop) { - max-width: 1152px; - } -} -@media screen and (max-width: 1407px) { - .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen) { - max-width: 1344px; - } -} -@media screen and (min-width: 1216px) { - .container:not(.is-max-desktop) { - max-width: 1152px; - } -} -@media screen and (min-width: 1408px) { - .container:not(.is-max-desktop):not(.is-max-widescreen) { - max-width: 1344px; - } -} - -.content li + li { - margin-top: 0.25em; -} -.content p:not(:last-child), -.content dl:not(:last-child), -.content ol:not(:last-child), -.content ul:not(:last-child), -.content blockquote:not(:last-child), -.content pre:not(:last-child), -.content table:not(:last-child) { - margin-bottom: 1em; -} -.content h1, -.content h2, -.content h3, -.content h4, -.content h5, -.content h6 { - color: hsl(0deg, 0%, 21%); - font-weight: 600; - line-height: 1.125; -} -.content h1 { - font-size: 2em; - margin-bottom: 0.5em; -} -.content h1:not(:first-child) { - margin-top: 1em; -} -.content h2 { - font-size: 1.75em; - margin-bottom: 0.5714em; -} -.content h2:not(:first-child) { - margin-top: 1.1428em; -} -.content h3 { - font-size: 1.5em; - margin-bottom: 0.6666em; -} -.content h3:not(:first-child) { - margin-top: 1.3333em; -} -.content h4 { - font-size: 1.25em; - margin-bottom: 0.8em; -} -.content h5 { - font-size: 1.125em; - margin-bottom: 0.8888em; -} -.content h6 { - font-size: 1em; - margin-bottom: 1em; -} -.content blockquote { - background-color: hsl(0deg, 0%, 96%); - border-left: 5px solid hsl(0deg, 0%, 86%); - padding: 1.25em 1.5em; -} -.content ol { - list-style-position: outside; - margin-left: 2em; - margin-top: 1em; -} -.content ol:not([type]) { - list-style-type: decimal; -} -.content ol:not([type]).is-lower-alpha { - list-style-type: lower-alpha; -} -.content ol:not([type]).is-lower-roman { - list-style-type: lower-roman; -} -.content ol:not([type]).is-upper-alpha { - list-style-type: upper-alpha; -} -.content ol:not([type]).is-upper-roman { - list-style-type: upper-roman; -} -.content ul { - list-style: disc outside; - margin-left: 2em; - margin-top: 1em; -} -.content ul ul { - list-style-type: circle; - margin-top: 0.5em; -} -.content ul ul ul { - list-style-type: square; -} -.content dd { - margin-left: 2em; -} -.content figure { - margin-left: 2em; - margin-right: 2em; - text-align: center; -} -.content figure:not(:first-child) { - margin-top: 2em; -} -.content figure:not(:last-child) { - margin-bottom: 2em; -} -.content figure img { - display: inline-block; -} -.content figure figcaption { - font-style: italic; -} -.content pre { - -webkit-overflow-scrolling: touch; - overflow-x: auto; - padding: 1.25em 1.5em; - white-space: pre; - word-wrap: normal; -} -.content sup, -.content sub { - font-size: 75%; -} -.content table { - width: 100%; -} -.content table td, -.content table th { - border: 1px solid hsl(0deg, 0%, 86%); - border-width: 0 0 1px; - padding: 0.5em 0.75em; - vertical-align: top; -} -.content table th { - color: hsl(0deg, 0%, 21%); -} -.content table th:not([align]) { - text-align: inherit; -} -.content table thead td, -.content table thead th { - border-width: 0 0 2px; - color: hsl(0deg, 0%, 21%); -} -.content table tfoot td, -.content table tfoot th { - border-width: 2px 0 0; - color: hsl(0deg, 0%, 21%); -} -.content table tbody tr:last-child td, -.content table tbody tr:last-child th { - border-bottom-width: 0; -} -.content .tabs li + li { - margin-top: 0; -} -.content.is-small { - font-size: 0.75rem; -} -.content.is-normal { - font-size: 1rem; -} -.content.is-medium { - font-size: 1.25rem; -} -.content.is-large { - font-size: 1.5rem; -} - -.icon { - align-items: center; - display: inline-flex; - justify-content: center; - height: 1.5rem; - width: 1.5rem; -} -.icon.is-small { - height: 1rem; - width: 1rem; -} -.icon.is-medium { - height: 2rem; - width: 2rem; -} -.icon.is-large { - height: 3rem; - width: 3rem; -} - -.icon-text { - align-items: flex-start; - color: inherit; - display: inline-flex; - flex-wrap: wrap; - line-height: 1.5rem; - vertical-align: top; -} -.icon-text .icon { - flex-grow: 0; - flex-shrink: 0; -} -.icon-text .icon:not(:last-child) { - margin-right: 0.25em; -} -.icon-text .icon:not(:first-child) { - margin-left: 0.25em; -} - -div.icon-text { - display: flex; -} - -.image { - display: block; - position: relative; -} -.image img { - display: block; - height: auto; - width: 100%; -} -.image img.is-rounded { - border-radius: 9999px; -} -.image.is-fullwidth { - width: 100%; -} -.image.is-square img, -.image.is-square .has-ratio, .image.is-1by1 img, -.image.is-1by1 .has-ratio, .image.is-5by4 img, -.image.is-5by4 .has-ratio, .image.is-4by3 img, -.image.is-4by3 .has-ratio, .image.is-3by2 img, -.image.is-3by2 .has-ratio, .image.is-5by3 img, -.image.is-5by3 .has-ratio, .image.is-16by9 img, -.image.is-16by9 .has-ratio, .image.is-2by1 img, -.image.is-2by1 .has-ratio, .image.is-3by1 img, -.image.is-3by1 .has-ratio, .image.is-4by5 img, -.image.is-4by5 .has-ratio, .image.is-3by4 img, -.image.is-3by4 .has-ratio, .image.is-2by3 img, -.image.is-2by3 .has-ratio, .image.is-3by5 img, -.image.is-3by5 .has-ratio, .image.is-9by16 img, -.image.is-9by16 .has-ratio, .image.is-1by2 img, -.image.is-1by2 .has-ratio, .image.is-1by3 img, -.image.is-1by3 .has-ratio { - height: 100%; - width: 100%; -} -.image.is-square, .image.is-1by1 { - padding-top: 100%; -} -.image.is-5by4 { - padding-top: 80%; -} -.image.is-4by3 { - padding-top: 75%; -} -.image.is-3by2 { - padding-top: 66.6666%; -} -.image.is-5by3 { - padding-top: 60%; -} -.image.is-16by9 { - padding-top: 56.25%; -} -.image.is-2by1 { - padding-top: 50%; -} -.image.is-3by1 { - padding-top: 33.3333%; -} -.image.is-4by5 { - padding-top: 125%; -} -.image.is-3by4 { - padding-top: 133.3333%; -} -.image.is-2by3 { - padding-top: 150%; -} -.image.is-3by5 { - padding-top: 166.6666%; -} -.image.is-9by16 { - padding-top: 177.7777%; -} -.image.is-1by2 { - padding-top: 200%; -} -.image.is-1by3 { - padding-top: 300%; -} -.image.is-16x16 { - height: 16px; - width: 16px; -} -.image.is-24x24 { - height: 24px; - width: 24px; -} -.image.is-32x32 { - height: 32px; - width: 32px; -} -.image.is-48x48 { - height: 48px; - width: 48px; -} -.image.is-64x64 { - height: 64px; - width: 64px; -} -.image.is-96x96 { - height: 96px; - width: 96px; -} -.image.is-128x128 { - height: 128px; - width: 128px; -} - -.notification { - background-color: hsl(0deg, 0%, 96%); - border-radius: 4px; - position: relative; - padding: 1.25rem 2.5rem 1.25rem 1.5rem; -} -.notification a:not(.button):not(.dropdown-item) { - color: currentColor; - text-decoration: underline; -} -.notification strong { - color: currentColor; -} -.notification code, -.notification pre { - background: hsl(0deg, 0%, 100%); -} -.notification pre code { - background: transparent; -} -.notification > .delete { - right: 0.5rem; - position: absolute; - top: 0.5rem; -} -.notification .title, -.notification .subtitle, -.notification .content { - color: currentColor; -} -.notification.is-white { - background-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 4%); -} -.notification.is-black { - background-color: hsl(0deg, 0%, 4%); - color: hsl(0deg, 0%, 100%); -} -.notification.is-light { - background-color: hsl(0deg, 0%, 96%); - color: rgba(0, 0, 0, 0.7); -} -.notification.is-dark { - background-color: hsl(0deg, 0%, 21%); - color: #fff; -} -.notification.is-primary { - background-color: hsl(171deg, 100%, 41%); - color: #fff; -} -.notification.is-primary.is-light { - background-color: #ebfffc; - color: #00947e; -} -.notification.is-link { - background-color: hsl(229deg, 53%, 53%); - color: #fff; -} -.notification.is-link.is-light { - background-color: #eff1fa; - color: #3850b7; -} -.notification.is-info { - background-color: hsl(207deg, 61%, 53%); - color: #fff; -} -.notification.is-info.is-light { - background-color: #eff5fb; - color: #296fa8; -} -.notification.is-success { - background-color: hsl(153deg, 53%, 53%); - color: #fff; -} -.notification.is-success.is-light { - background-color: #effaf5; - color: #257953; -} -.notification.is-warning { - background-color: hsl(44deg, 100%, 77%); - color: rgba(0, 0, 0, 0.7); -} -.notification.is-warning.is-light { - background-color: #fffaeb; - color: #946c00; -} -.notification.is-danger { - background-color: hsl(348deg, 86%, 61%); - color: #fff; -} -.notification.is-danger.is-light { - background-color: #feecf0; - color: #cc0f35; -} - -.progress { - -moz-appearance: none; - -webkit-appearance: none; - border: none; - border-radius: 9999px; - display: block; - height: 1rem; - overflow: hidden; - padding: 0; - width: 100%; -} -.progress::-webkit-progress-bar { - background-color: hsl(0deg, 0%, 93%); -} -.progress::-webkit-progress-value { - background-color: hsl(0deg, 0%, 29%); -} -.progress::-moz-progress-bar { - background-color: hsl(0deg, 0%, 29%); -} -.progress::-ms-fill { - background-color: hsl(0deg, 0%, 29%); - border: none; -} -.progress.is-white::-webkit-progress-value { - background-color: hsl(0deg, 0%, 100%); -} -.progress.is-white::-moz-progress-bar { - background-color: hsl(0deg, 0%, 100%); -} -.progress.is-white::-ms-fill { - background-color: hsl(0deg, 0%, 100%); -} -.progress.is-white:indeterminate { - background-image: linear-gradient(to right, hsl(0deg, 0%, 100%) 30%, hsl(0deg, 0%, 93%) 30%); -} -.progress.is-black::-webkit-progress-value { - background-color: hsl(0deg, 0%, 4%); -} -.progress.is-black::-moz-progress-bar { - background-color: hsl(0deg, 0%, 4%); -} -.progress.is-black::-ms-fill { - background-color: hsl(0deg, 0%, 4%); -} -.progress.is-black:indeterminate { - background-image: linear-gradient(to right, hsl(0deg, 0%, 4%) 30%, hsl(0deg, 0%, 93%) 30%); -} -.progress.is-light::-webkit-progress-value { - background-color: hsl(0deg, 0%, 96%); -} -.progress.is-light::-moz-progress-bar { - background-color: hsl(0deg, 0%, 96%); -} -.progress.is-light::-ms-fill { - background-color: hsl(0deg, 0%, 96%); -} -.progress.is-light:indeterminate { - background-image: linear-gradient(to right, hsl(0deg, 0%, 96%) 30%, hsl(0deg, 0%, 93%) 30%); -} -.progress.is-dark::-webkit-progress-value { - background-color: hsl(0deg, 0%, 21%); -} -.progress.is-dark::-moz-progress-bar { - background-color: hsl(0deg, 0%, 21%); -} -.progress.is-dark::-ms-fill { - background-color: hsl(0deg, 0%, 21%); -} -.progress.is-dark:indeterminate { - background-image: linear-gradient(to right, hsl(0deg, 0%, 21%) 30%, hsl(0deg, 0%, 93%) 30%); -} -.progress.is-primary::-webkit-progress-value { - background-color: hsl(171deg, 100%, 41%); -} -.progress.is-primary::-moz-progress-bar { - background-color: hsl(171deg, 100%, 41%); -} -.progress.is-primary::-ms-fill { - background-color: hsl(171deg, 100%, 41%); -} -.progress.is-primary:indeterminate { - background-image: linear-gradient(to right, hsl(171deg, 100%, 41%) 30%, hsl(0deg, 0%, 93%) 30%); -} -.progress.is-link::-webkit-progress-value { - background-color: hsl(229deg, 53%, 53%); -} -.progress.is-link::-moz-progress-bar { - background-color: hsl(229deg, 53%, 53%); -} -.progress.is-link::-ms-fill { - background-color: hsl(229deg, 53%, 53%); -} -.progress.is-link:indeterminate { - background-image: linear-gradient(to right, hsl(229deg, 53%, 53%) 30%, hsl(0deg, 0%, 93%) 30%); -} -.progress.is-info::-webkit-progress-value { - background-color: hsl(207deg, 61%, 53%); -} -.progress.is-info::-moz-progress-bar { - background-color: hsl(207deg, 61%, 53%); -} -.progress.is-info::-ms-fill { - background-color: hsl(207deg, 61%, 53%); -} -.progress.is-info:indeterminate { - background-image: linear-gradient(to right, hsl(207deg, 61%, 53%) 30%, hsl(0deg, 0%, 93%) 30%); -} -.progress.is-success::-webkit-progress-value { - background-color: hsl(153deg, 53%, 53%); -} -.progress.is-success::-moz-progress-bar { - background-color: hsl(153deg, 53%, 53%); -} -.progress.is-success::-ms-fill { - background-color: hsl(153deg, 53%, 53%); -} -.progress.is-success:indeterminate { - background-image: linear-gradient(to right, hsl(153deg, 53%, 53%) 30%, hsl(0deg, 0%, 93%) 30%); -} -.progress.is-warning::-webkit-progress-value { - background-color: hsl(44deg, 100%, 77%); -} -.progress.is-warning::-moz-progress-bar { - background-color: hsl(44deg, 100%, 77%); -} -.progress.is-warning::-ms-fill { - background-color: hsl(44deg, 100%, 77%); -} -.progress.is-warning:indeterminate { - background-image: linear-gradient(to right, hsl(44deg, 100%, 77%) 30%, hsl(0deg, 0%, 93%) 30%); -} -.progress.is-danger::-webkit-progress-value { - background-color: hsl(348deg, 86%, 61%); -} -.progress.is-danger::-moz-progress-bar { - background-color: hsl(348deg, 86%, 61%); -} -.progress.is-danger::-ms-fill { - background-color: hsl(348deg, 86%, 61%); -} -.progress.is-danger:indeterminate { - background-image: linear-gradient(to right, hsl(348deg, 86%, 61%) 30%, hsl(0deg, 0%, 93%) 30%); -} -.progress:indeterminate { - -webkit-animation-duration: 1.5s; - animation-duration: 1.5s; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; - -webkit-animation-name: moveIndeterminate; - animation-name: moveIndeterminate; - -webkit-animation-timing-function: linear; - animation-timing-function: linear; - background-color: hsl(0deg, 0%, 93%); - background-image: linear-gradient(to right, hsl(0deg, 0%, 29%) 30%, hsl(0deg, 0%, 93%) 30%); - background-position: top left; - background-repeat: no-repeat; - background-size: 150% 150%; -} -.progress:indeterminate::-webkit-progress-bar { - background-color: transparent; -} -.progress:indeterminate::-moz-progress-bar { - background-color: transparent; -} -.progress:indeterminate::-ms-fill { - animation-name: none; -} -.progress.is-small { - height: 0.75rem; -} -.progress.is-medium { - height: 1.25rem; -} -.progress.is-large { - height: 1.5rem; -} - -@-webkit-keyframes moveIndeterminate { - from { - background-position: 200% 0; - } - to { - background-position: -200% 0; - } -} - -@keyframes moveIndeterminate { - from { - background-position: 200% 0; - } - to { - background-position: -200% 0; - } -} -.table { - background-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 21%); -} -.table td, -.table th { - border: 1px solid hsl(0deg, 0%, 86%); - border-width: 0 0 1px; - padding: 0.5em 0.75em; - vertical-align: top; -} -.table td.is-white, -.table th.is-white { - background-color: hsl(0deg, 0%, 100%); - border-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 4%); -} -.table td.is-black, -.table th.is-black { - background-color: hsl(0deg, 0%, 4%); - border-color: hsl(0deg, 0%, 4%); - color: hsl(0deg, 0%, 100%); -} -.table td.is-light, -.table th.is-light { - background-color: hsl(0deg, 0%, 96%); - border-color: hsl(0deg, 0%, 96%); - color: rgba(0, 0, 0, 0.7); -} -.table td.is-dark, -.table th.is-dark { - background-color: hsl(0deg, 0%, 21%); - border-color: hsl(0deg, 0%, 21%); - color: #fff; -} -.table td.is-primary, -.table th.is-primary { - background-color: hsl(171deg, 100%, 41%); - border-color: hsl(171deg, 100%, 41%); - color: #fff; -} -.table td.is-link, -.table th.is-link { - background-color: hsl(229deg, 53%, 53%); - border-color: hsl(229deg, 53%, 53%); - color: #fff; -} -.table td.is-info, -.table th.is-info { - background-color: hsl(207deg, 61%, 53%); - border-color: hsl(207deg, 61%, 53%); - color: #fff; -} -.table td.is-success, -.table th.is-success { - background-color: hsl(153deg, 53%, 53%); - border-color: hsl(153deg, 53%, 53%); - color: #fff; -} -.table td.is-warning, -.table th.is-warning { - background-color: hsl(44deg, 100%, 77%); - border-color: hsl(44deg, 100%, 77%); - color: rgba(0, 0, 0, 0.7); -} -.table td.is-danger, -.table th.is-danger { - background-color: hsl(348deg, 86%, 61%); - border-color: hsl(348deg, 86%, 61%); - color: #fff; -} -.table td.is-narrow, -.table th.is-narrow { - white-space: nowrap; - width: 1%; -} -.table td.is-selected, -.table th.is-selected { - background-color: hsl(171deg, 100%, 41%); - color: #fff; -} -.table td.is-selected a, -.table td.is-selected strong, -.table th.is-selected a, -.table th.is-selected strong { - color: currentColor; -} -.table td.is-vcentered, -.table th.is-vcentered { - vertical-align: middle; -} -.table th { - color: hsl(0deg, 0%, 21%); -} -.table th:not([align]) { - text-align: left; -} -.table tr.is-selected { - background-color: hsl(171deg, 100%, 41%); - color: #fff; -} -.table tr.is-selected a, -.table tr.is-selected strong { - color: currentColor; -} -.table tr.is-selected td, -.table tr.is-selected th { - border-color: #fff; - color: currentColor; -} -.table thead { - background-color: transparent; -} -.table thead td, -.table thead th { - border-width: 0 0 2px; - color: hsl(0deg, 0%, 21%); -} -.table tfoot { - background-color: transparent; -} -.table tfoot td, -.table tfoot th { - border-width: 2px 0 0; - color: hsl(0deg, 0%, 21%); -} -.table tbody { - background-color: transparent; -} -.table tbody tr:last-child td, -.table tbody tr:last-child th { - border-bottom-width: 0; -} -.table.is-bordered td, -.table.is-bordered th { - border-width: 1px; -} -.table.is-bordered tr:last-child td, -.table.is-bordered tr:last-child th { - border-bottom-width: 1px; -} -.table.is-fullwidth { - width: 100%; -} -.table.is-hoverable tbody tr:not(.is-selected):hover { - background-color: hsl(0deg, 0%, 98%); -} -.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover { - background-color: hsl(0deg, 0%, 98%); -} -.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) { - background-color: hsl(0deg, 0%, 96%); -} -.table.is-narrow td, -.table.is-narrow th { - padding: 0.25em 0.5em; -} -.table.is-striped tbody tr:not(.is-selected):nth-child(even) { - background-color: hsl(0deg, 0%, 98%); -} - -.table-container { - -webkit-overflow-scrolling: touch; - overflow: auto; - overflow-y: hidden; - max-width: 100%; -} - -.tags { - align-items: center; - display: flex; - flex-wrap: wrap; - justify-content: flex-start; -} -.tags .tag { - margin-bottom: 0.5rem; -} -.tags .tag:not(:last-child) { - margin-right: 0.5rem; -} -.tags:last-child { - margin-bottom: -0.5rem; -} -.tags:not(:last-child) { - margin-bottom: 1rem; -} -.tags.are-medium .tag:not(.is-normal):not(.is-large) { - font-size: 1rem; -} -.tags.are-large .tag:not(.is-normal):not(.is-medium) { - font-size: 1.25rem; -} -.tags.is-centered { - justify-content: center; -} -.tags.is-centered .tag { - margin-right: 0.25rem; - margin-left: 0.25rem; -} -.tags.is-right { - justify-content: flex-end; -} -.tags.is-right .tag:not(:first-child) { - margin-left: 0.5rem; -} -.tags.is-right .tag:not(:last-child) { - margin-right: 0; -} -.tags.has-addons .tag { - margin-right: 0; -} -.tags.has-addons .tag:not(:first-child) { - margin-left: 0; - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.tags.has-addons .tag:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.tag:not(body) { - align-items: center; - background-color: hsl(0deg, 0%, 96%); - border-radius: 4px; - color: hsl(0deg, 0%, 29%); - display: inline-flex; - font-size: 0.75rem; - height: 2em; - justify-content: center; - line-height: 1.5; - padding-left: 0.75em; - padding-right: 0.75em; - white-space: nowrap; -} -.tag:not(body) .delete { - margin-left: 0.25rem; - margin-right: -0.375rem; -} -.tag:not(body).is-white { - background-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 4%); -} -.tag:not(body).is-black { - background-color: hsl(0deg, 0%, 4%); - color: hsl(0deg, 0%, 100%); -} -.tag:not(body).is-light { - background-color: hsl(0deg, 0%, 96%); - color: rgba(0, 0, 0, 0.7); -} -.tag:not(body).is-dark { - background-color: hsl(0deg, 0%, 21%); - color: #fff; -} -.tag:not(body).is-primary { - background-color: hsl(171deg, 100%, 41%); - color: #fff; -} -.tag:not(body).is-primary.is-light { - background-color: #ebfffc; - color: #00947e; -} -.tag:not(body).is-link { - background-color: hsl(229deg, 53%, 53%); - color: #fff; -} -.tag:not(body).is-link.is-light { - background-color: #eff1fa; - color: #3850b7; -} -.tag:not(body).is-info { - background-color: hsl(207deg, 61%, 53%); - color: #fff; -} -.tag:not(body).is-info.is-light { - background-color: #eff5fb; - color: #296fa8; -} -.tag:not(body).is-success { - background-color: hsl(153deg, 53%, 53%); - color: #fff; -} -.tag:not(body).is-success.is-light { - background-color: #effaf5; - color: #257953; -} -.tag:not(body).is-warning { - background-color: hsl(44deg, 100%, 77%); - color: rgba(0, 0, 0, 0.7); -} -.tag:not(body).is-warning.is-light { - background-color: #fffaeb; - color: #946c00; -} -.tag:not(body).is-danger { - background-color: hsl(348deg, 86%, 61%); - color: #fff; -} -.tag:not(body).is-danger.is-light { - background-color: #feecf0; - color: #cc0f35; -} -.tag:not(body).is-normal { - font-size: 0.75rem; -} -.tag:not(body).is-medium { - font-size: 1rem; -} -.tag:not(body).is-large { - font-size: 1.25rem; -} -.tag:not(body) .icon:first-child:not(:last-child) { - margin-left: -0.375em; - margin-right: 0.1875em; -} -.tag:not(body) .icon:last-child:not(:first-child) { - margin-left: 0.1875em; - margin-right: -0.375em; -} -.tag:not(body) .icon:first-child:last-child { - margin-left: -0.375em; - margin-right: -0.375em; -} -.tag:not(body).is-delete { - margin-left: 1px; - padding: 0; - position: relative; - width: 2em; -} -.tag:not(body).is-delete::before, .tag:not(body).is-delete::after { - background-color: currentColor; - content: ""; - display: block; - left: 50%; - position: absolute; - top: 50%; - transform: translateX(-50%) translateY(-50%) rotate(45deg); - transform-origin: center center; -} -.tag:not(body).is-delete::before { - height: 1px; - width: 50%; -} -.tag:not(body).is-delete::after { - height: 50%; - width: 1px; -} -.tag:not(body).is-delete:hover, .tag:not(body).is-delete:focus { - background-color: #e8e8e8; -} -.tag:not(body).is-delete:active { - background-color: #dbdbdb; -} -.tag:not(body).is-rounded { - border-radius: 9999px; -} - -a.tag:hover { - text-decoration: underline; -} - -.title, -.subtitle { - word-break: break-word; -} -.title em, -.title span, -.subtitle em, -.subtitle span { - font-weight: inherit; -} -.title sub, -.subtitle sub { - font-size: 0.75em; -} -.title sup, -.subtitle sup { - font-size: 0.75em; -} -.title .tag, -.subtitle .tag { - vertical-align: middle; -} - -.title { - color: hsl(0deg, 0%, 21%); - font-size: 2rem; - font-weight: 600; - line-height: 1.125; -} -.title strong { - color: inherit; - font-weight: inherit; -} -.title:not(.is-spaced) + .subtitle { - margin-top: -1.25rem; -} -.title.is-1 { - font-size: 3rem; -} -.title.is-2 { - font-size: 2.5rem; -} -.title.is-3 { - font-size: 2rem; -} -.title.is-4 { - font-size: 1.5rem; -} -.title.is-5 { - font-size: 1.25rem; -} -.title.is-6 { - font-size: 1rem; -} -.title.is-7 { - font-size: 0.75rem; -} - -.subtitle { - color: hsl(0deg, 0%, 29%); - font-size: 1.25rem; - font-weight: 400; - line-height: 1.25; -} -.subtitle strong { - color: hsl(0deg, 0%, 21%); - font-weight: 600; -} -.subtitle:not(.is-spaced) + .title { - margin-top: -1.25rem; -} -.subtitle.is-1 { - font-size: 3rem; -} -.subtitle.is-2 { - font-size: 2.5rem; -} -.subtitle.is-3 { - font-size: 2rem; -} -.subtitle.is-4 { - font-size: 1.5rem; -} -.subtitle.is-5 { - font-size: 1.25rem; -} -.subtitle.is-6 { - font-size: 1rem; -} -.subtitle.is-7 { - font-size: 0.75rem; -} - -.heading { - display: block; - font-size: 11px; - letter-spacing: 1px; - margin-bottom: 5px; - text-transform: uppercase; -} - -.number { - align-items: center; - background-color: hsl(0deg, 0%, 96%); - border-radius: 9999px; - display: inline-flex; - font-size: 1.25rem; - height: 2em; - justify-content: center; - margin-right: 1.5rem; - min-width: 2.5em; - padding: 0.25rem 0.5rem; - text-align: center; - vertical-align: top; -} - -/* Bulma Form */ -.select select, .textarea, .input { - background-color: hsl(0deg, 0%, 100%); - border-color: hsl(0deg, 0%, 86%); - border-radius: 4px; - color: hsl(0deg, 0%, 21%); -} -.select select::-moz-placeholder, .textarea::-moz-placeholder, .input::-moz-placeholder { - color: rgba(54, 54, 54, 0.3); -} -.select select::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .input::-webkit-input-placeholder { - color: rgba(54, 54, 54, 0.3); -} -.select select:-moz-placeholder, .textarea:-moz-placeholder, .input:-moz-placeholder { - color: rgba(54, 54, 54, 0.3); -} -.select select:-ms-input-placeholder, .textarea:-ms-input-placeholder, .input:-ms-input-placeholder { - color: rgba(54, 54, 54, 0.3); -} -.select select:hover, .textarea:hover, .input:hover, .select select.is-hovered, .is-hovered.textarea, .is-hovered.input { - border-color: hsl(0deg, 0%, 71%); -} -.select select:focus, .textarea:focus, .input:focus, .select select.is-focused, .is-focused.textarea, .is-focused.input, .select select:active, .textarea:active, .input:active, .select select.is-active, .is-active.textarea, .is-active.input { - border-color: hsl(229deg, 53%, 53%); - box-shadow: 0 0 0 0.125em rgba(72, 95, 199, 0.25); -} -.select select[disabled], [disabled].textarea, [disabled].input, fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .textarea, fieldset[disabled] .input { - background-color: hsl(0deg, 0%, 96%); - border-color: hsl(0deg, 0%, 96%); - box-shadow: none; - color: hsl(0deg, 0%, 48%); -} -.select select[disabled]::-moz-placeholder, [disabled].textarea::-moz-placeholder, [disabled].input::-moz-placeholder, fieldset[disabled] .select select::-moz-placeholder, .select fieldset[disabled] select::-moz-placeholder, fieldset[disabled] .textarea::-moz-placeholder, fieldset[disabled] .input::-moz-placeholder { - color: rgba(122, 122, 122, 0.3); -} -.select select[disabled]::-webkit-input-placeholder, [disabled].textarea::-webkit-input-placeholder, [disabled].input::-webkit-input-placeholder, fieldset[disabled] .select select::-webkit-input-placeholder, .select fieldset[disabled] select::-webkit-input-placeholder, fieldset[disabled] .textarea::-webkit-input-placeholder, fieldset[disabled] .input::-webkit-input-placeholder { - color: rgba(122, 122, 122, 0.3); -} -.select select[disabled]:-moz-placeholder, [disabled].textarea:-moz-placeholder, [disabled].input:-moz-placeholder, fieldset[disabled] .select select:-moz-placeholder, .select fieldset[disabled] select:-moz-placeholder, fieldset[disabled] .textarea:-moz-placeholder, fieldset[disabled] .input:-moz-placeholder { - color: rgba(122, 122, 122, 0.3); -} -.select select[disabled]:-ms-input-placeholder, [disabled].textarea:-ms-input-placeholder, [disabled].input:-ms-input-placeholder, fieldset[disabled] .select select:-ms-input-placeholder, .select fieldset[disabled] select:-ms-input-placeholder, fieldset[disabled] .textarea:-ms-input-placeholder, fieldset[disabled] .input:-ms-input-placeholder { - color: rgba(122, 122, 122, 0.3); -} - -.textarea, .input { - box-shadow: inset 0 0.0625em 0.125em rgba(10, 10, 10, 0.05); - max-width: 100%; - width: 100%; -} -[readonly].textarea, [readonly].input { - box-shadow: none; -} -.is-white.textarea, .is-white.input { - border-color: hsl(0deg, 0%, 100%); -} -.is-white.textarea:focus, .is-white.input:focus, .is-white.is-focused.textarea, .is-white.is-focused.input, .is-white.textarea:active, .is-white.input:active, .is-white.is-active.textarea, .is-white.is-active.input { - box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); -} -.is-black.textarea, .is-black.input { - border-color: hsl(0deg, 0%, 4%); -} -.is-black.textarea:focus, .is-black.input:focus, .is-black.is-focused.textarea, .is-black.is-focused.input, .is-black.textarea:active, .is-black.input:active, .is-black.is-active.textarea, .is-black.is-active.input { - box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); -} -.is-light.textarea, .is-light.input { - border-color: hsl(0deg, 0%, 96%); -} -.is-light.textarea:focus, .is-light.input:focus, .is-light.is-focused.textarea, .is-light.is-focused.input, .is-light.textarea:active, .is-light.input:active, .is-light.is-active.textarea, .is-light.is-active.input { - box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); -} -.is-dark.textarea, .is-dark.input { - border-color: hsl(0deg, 0%, 21%); -} -.is-dark.textarea:focus, .is-dark.input:focus, .is-dark.is-focused.textarea, .is-dark.is-focused.input, .is-dark.textarea:active, .is-dark.input:active, .is-dark.is-active.textarea, .is-dark.is-active.input { - box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); -} -.is-primary.textarea, .is-primary.input { - border-color: hsl(171deg, 100%, 41%); -} -.is-primary.textarea:focus, .is-primary.input:focus, .is-primary.is-focused.textarea, .is-primary.is-focused.input, .is-primary.textarea:active, .is-primary.input:active, .is-primary.is-active.textarea, .is-primary.is-active.input { - box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); -} -.is-link.textarea, .is-link.input { - border-color: hsl(229deg, 53%, 53%); -} -.is-link.textarea:focus, .is-link.input:focus, .is-link.is-focused.textarea, .is-link.is-focused.input, .is-link.textarea:active, .is-link.input:active, .is-link.is-active.textarea, .is-link.is-active.input { - box-shadow: 0 0 0 0.125em rgba(72, 95, 199, 0.25); -} -.is-info.textarea, .is-info.input { - border-color: hsl(207deg, 61%, 53%); -} -.is-info.textarea:focus, .is-info.input:focus, .is-info.is-focused.textarea, .is-info.is-focused.input, .is-info.textarea:active, .is-info.input:active, .is-info.is-active.textarea, .is-info.is-active.input { - box-shadow: 0 0 0 0.125em rgba(62, 142, 208, 0.25); -} -.is-success.textarea, .is-success.input { - border-color: hsl(153deg, 53%, 53%); -} -.is-success.textarea:focus, .is-success.input:focus, .is-success.is-focused.textarea, .is-success.is-focused.input, .is-success.textarea:active, .is-success.input:active, .is-success.is-active.textarea, .is-success.is-active.input { - box-shadow: 0 0 0 0.125em rgba(72, 199, 142, 0.25); -} -.is-warning.textarea, .is-warning.input { - border-color: hsl(44deg, 100%, 77%); -} -.is-warning.textarea:focus, .is-warning.input:focus, .is-warning.is-focused.textarea, .is-warning.is-focused.input, .is-warning.textarea:active, .is-warning.input:active, .is-warning.is-active.textarea, .is-warning.is-active.input { - box-shadow: 0 0 0 0.125em rgba(255, 224, 138, 0.25); -} -.is-danger.textarea, .is-danger.input { - border-color: hsl(348deg, 86%, 61%); -} -.is-danger.textarea:focus, .is-danger.input:focus, .is-danger.is-focused.textarea, .is-danger.is-focused.input, .is-danger.textarea:active, .is-danger.input:active, .is-danger.is-active.textarea, .is-danger.is-active.input { - box-shadow: 0 0 0 0.125em rgba(241, 70, 104, 0.25); -} -.is-small.textarea, .is-small.input { - border-radius: 2px; - font-size: 0.75rem; -} -.is-medium.textarea, .is-medium.input { - font-size: 1.25rem; -} -.is-large.textarea, .is-large.input { - font-size: 1.5rem; -} -.is-fullwidth.textarea, .is-fullwidth.input { - display: block; - width: 100%; -} -.is-inline.textarea, .is-inline.input { - display: inline; - width: auto; -} - -.input.is-rounded { - border-radius: 9999px; - padding-left: calc(calc(0.75em - 1px) + 0.375em); - padding-right: calc(calc(0.75em - 1px) + 0.375em); -} -.input.is-static { - background-color: transparent; - border-color: transparent; - box-shadow: none; - padding-left: 0; - padding-right: 0; -} - -.textarea { - display: block; - max-width: 100%; - min-width: 100%; - padding: calc(0.75em - 1px); - resize: vertical; -} -.textarea:not([rows]) { - max-height: 40em; - min-height: 8em; -} -.textarea[rows] { - height: initial; -} -.textarea.has-fixed-size { - resize: none; -} - -.radio, .checkbox { - cursor: pointer; - display: inline-block; - line-height: 1.25; - position: relative; -} -.radio input, .checkbox input { - cursor: pointer; -} -.radio:hover, .checkbox:hover { - color: hsl(0deg, 0%, 21%); -} -[disabled].radio, [disabled].checkbox, fieldset[disabled] .radio, fieldset[disabled] .checkbox, -.radio input[disabled], -.checkbox input[disabled] { - color: hsl(0deg, 0%, 48%); - cursor: not-allowed; -} - -.radio + .radio { - margin-left: 0.5em; -} - -.select { - display: inline-block; - max-width: 100%; - position: relative; - vertical-align: top; -} -.select:not(.is-multiple) { - height: 2.5em; -} -.select:not(.is-multiple):not(.is-loading)::after { - border-color: hsl(229deg, 53%, 53%); - right: 1.125em; - z-index: 4; -} -.select.is-rounded select { - border-radius: 9999px; - padding-left: 1em; -} -.select select { - cursor: pointer; - display: block; - font-size: 1em; - max-width: 100%; - outline: none; -} -.select select::-ms-expand { - display: none; -} -.select select[disabled]:hover, fieldset[disabled] .select select:hover { - border-color: hsl(0deg, 0%, 96%); -} -.select select:not([multiple]) { - padding-right: 2.5em; -} -.select select[multiple] { - height: auto; - padding: 0; -} -.select select[multiple] option { - padding: 0.5em 1em; -} -.select:not(.is-multiple):not(.is-loading):hover::after { - border-color: hsl(0deg, 0%, 21%); -} -.select.is-white:not(:hover)::after { - border-color: hsl(0deg, 0%, 100%); -} -.select.is-white select { - border-color: hsl(0deg, 0%, 100%); -} -.select.is-white select:hover, .select.is-white select.is-hovered { - border-color: #f2f2f2; -} -.select.is-white select:focus, .select.is-white select.is-focused, .select.is-white select:active, .select.is-white select.is-active { - box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); -} -.select.is-black:not(:hover)::after { - border-color: hsl(0deg, 0%, 4%); -} -.select.is-black select { - border-color: hsl(0deg, 0%, 4%); -} -.select.is-black select:hover, .select.is-black select.is-hovered { - border-color: black; -} -.select.is-black select:focus, .select.is-black select.is-focused, .select.is-black select:active, .select.is-black select.is-active { - box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); -} -.select.is-light:not(:hover)::after { - border-color: hsl(0deg, 0%, 96%); -} -.select.is-light select { - border-color: hsl(0deg, 0%, 96%); -} -.select.is-light select:hover, .select.is-light select.is-hovered { - border-color: #e8e8e8; -} -.select.is-light select:focus, .select.is-light select.is-focused, .select.is-light select:active, .select.is-light select.is-active { - box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); -} -.select.is-dark:not(:hover)::after { - border-color: hsl(0deg, 0%, 21%); -} -.select.is-dark select { - border-color: hsl(0deg, 0%, 21%); -} -.select.is-dark select:hover, .select.is-dark select.is-hovered { - border-color: #292929; -} -.select.is-dark select:focus, .select.is-dark select.is-focused, .select.is-dark select:active, .select.is-dark select.is-active { - box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); -} -.select.is-primary:not(:hover)::after { - border-color: hsl(171deg, 100%, 41%); -} -.select.is-primary select { - border-color: hsl(171deg, 100%, 41%); -} -.select.is-primary select:hover, .select.is-primary select.is-hovered { - border-color: #00b89c; -} -.select.is-primary select:focus, .select.is-primary select.is-focused, .select.is-primary select:active, .select.is-primary select.is-active { - box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); -} -.select.is-link:not(:hover)::after { - border-color: hsl(229deg, 53%, 53%); -} -.select.is-link select { - border-color: hsl(229deg, 53%, 53%); -} -.select.is-link select:hover, .select.is-link select.is-hovered { - border-color: #3a51bb; -} -.select.is-link select:focus, .select.is-link select.is-focused, .select.is-link select:active, .select.is-link select.is-active { - box-shadow: 0 0 0 0.125em rgba(72, 95, 199, 0.25); -} -.select.is-info:not(:hover)::after { - border-color: hsl(207deg, 61%, 53%); -} -.select.is-info select { - border-color: hsl(207deg, 61%, 53%); -} -.select.is-info select:hover, .select.is-info select.is-hovered { - border-color: #3082c5; -} -.select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { - box-shadow: 0 0 0 0.125em rgba(62, 142, 208, 0.25); -} -.select.is-success:not(:hover)::after { - border-color: hsl(153deg, 53%, 53%); -} -.select.is-success select { - border-color: hsl(153deg, 53%, 53%); -} -.select.is-success select:hover, .select.is-success select.is-hovered { - border-color: #3abb81; -} -.select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { - box-shadow: 0 0 0 0.125em rgba(72, 199, 142, 0.25); -} -.select.is-warning:not(:hover)::after { - border-color: hsl(44deg, 100%, 77%); -} -.select.is-warning select { - border-color: hsl(44deg, 100%, 77%); -} -.select.is-warning select:hover, .select.is-warning select.is-hovered { - border-color: #ffd970; -} -.select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { - box-shadow: 0 0 0 0.125em rgba(255, 224, 138, 0.25); -} -.select.is-danger:not(:hover)::after { - border-color: hsl(348deg, 86%, 61%); -} -.select.is-danger select { - border-color: hsl(348deg, 86%, 61%); -} -.select.is-danger select:hover, .select.is-danger select.is-hovered { - border-color: #ef2e55; -} -.select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { - box-shadow: 0 0 0 0.125em rgba(241, 70, 104, 0.25); -} -.select.is-small { - border-radius: 2px; - font-size: 0.75rem; -} -.select.is-medium { - font-size: 1.25rem; -} -.select.is-large { - font-size: 1.5rem; -} -.select.is-disabled::after { - border-color: hsl(0deg, 0%, 48%) !important; - opacity: 0.5; -} -.select.is-fullwidth { - width: 100%; -} -.select.is-fullwidth select { - width: 100%; -} -.select.is-loading::after { - margin-top: 0; - position: absolute; - right: 0.625em; - top: 0.625em; - transform: none; -} -.select.is-loading.is-small:after { - font-size: 0.75rem; -} -.select.is-loading.is-medium:after { - font-size: 1.25rem; -} -.select.is-loading.is-large:after { - font-size: 1.5rem; -} - -.file { - align-items: stretch; - display: flex; - justify-content: flex-start; - position: relative; -} -.file.is-white .file-cta { - background-color: hsl(0deg, 0%, 100%); - border-color: transparent; - color: hsl(0deg, 0%, 4%); -} -.file.is-white:hover .file-cta, .file.is-white.is-hovered .file-cta { - background-color: #f9f9f9; - border-color: transparent; - color: hsl(0deg, 0%, 4%); -} -.file.is-white:focus .file-cta, .file.is-white.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25); - color: hsl(0deg, 0%, 4%); -} -.file.is-white:active .file-cta, .file.is-white.is-active .file-cta { - background-color: #f2f2f2; - border-color: transparent; - color: hsl(0deg, 0%, 4%); -} -.file.is-black .file-cta { - background-color: hsl(0deg, 0%, 4%); - border-color: transparent; - color: hsl(0deg, 0%, 100%); -} -.file.is-black:hover .file-cta, .file.is-black.is-hovered .file-cta { - background-color: #040404; - border-color: transparent; - color: hsl(0deg, 0%, 100%); -} -.file.is-black:focus .file-cta, .file.is-black.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25); - color: hsl(0deg, 0%, 100%); -} -.file.is-black:active .file-cta, .file.is-black.is-active .file-cta { - background-color: black; - border-color: transparent; - color: hsl(0deg, 0%, 100%); -} -.file.is-light .file-cta { - background-color: hsl(0deg, 0%, 96%); - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} -.file.is-light:hover .file-cta, .file.is-light.is-hovered .file-cta { - background-color: #eeeeee; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} -.file.is-light:focus .file-cta, .file.is-light.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(245, 245, 245, 0.25); - color: rgba(0, 0, 0, 0.7); -} -.file.is-light:active .file-cta, .file.is-light.is-active .file-cta { - background-color: #e8e8e8; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} -.file.is-dark .file-cta { - background-color: hsl(0deg, 0%, 21%); - border-color: transparent; - color: #fff; -} -.file.is-dark:hover .file-cta, .file.is-dark.is-hovered .file-cta { - background-color: #2f2f2f; - border-color: transparent; - color: #fff; -} -.file.is-dark:focus .file-cta, .file.is-dark.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(54, 54, 54, 0.25); - color: #fff; -} -.file.is-dark:active .file-cta, .file.is-dark.is-active .file-cta { - background-color: #292929; - border-color: transparent; - color: #fff; -} -.file.is-primary .file-cta { - background-color: hsl(171deg, 100%, 41%); - border-color: transparent; - color: #fff; -} -.file.is-primary:hover .file-cta, .file.is-primary.is-hovered .file-cta { - background-color: #00c4a7; - border-color: transparent; - color: #fff; -} -.file.is-primary:focus .file-cta, .file.is-primary.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(0, 209, 178, 0.25); - color: #fff; -} -.file.is-primary:active .file-cta, .file.is-primary.is-active .file-cta { - background-color: #00b89c; - border-color: transparent; - color: #fff; -} -.file.is-link .file-cta { - background-color: hsl(229deg, 53%, 53%); - border-color: transparent; - color: #fff; -} -.file.is-link:hover .file-cta, .file.is-link.is-hovered .file-cta { - background-color: #3e56c4; - border-color: transparent; - color: #fff; -} -.file.is-link:focus .file-cta, .file.is-link.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(72, 95, 199, 0.25); - color: #fff; -} -.file.is-link:active .file-cta, .file.is-link.is-active .file-cta { - background-color: #3a51bb; - border-color: transparent; - color: #fff; -} -.file.is-info .file-cta { - background-color: hsl(207deg, 61%, 53%); - border-color: transparent; - color: #fff; -} -.file.is-info:hover .file-cta, .file.is-info.is-hovered .file-cta { - background-color: #3488ce; - border-color: transparent; - color: #fff; -} -.file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(62, 142, 208, 0.25); - color: #fff; -} -.file.is-info:active .file-cta, .file.is-info.is-active .file-cta { - background-color: #3082c5; - border-color: transparent; - color: #fff; -} -.file.is-success .file-cta { - background-color: hsl(153deg, 53%, 53%); - border-color: transparent; - color: #fff; -} -.file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { - background-color: #3ec487; - border-color: transparent; - color: #fff; -} -.file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(72, 199, 142, 0.25); - color: #fff; -} -.file.is-success:active .file-cta, .file.is-success.is-active .file-cta { - background-color: #3abb81; - border-color: transparent; - color: #fff; -} -.file.is-warning .file-cta { - background-color: hsl(44deg, 100%, 77%); - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} -.file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { - background-color: #ffdc7d; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} -.file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(255, 224, 138, 0.25); - color: rgba(0, 0, 0, 0.7); -} -.file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { - background-color: #ffd970; - border-color: transparent; - color: rgba(0, 0, 0, 0.7); -} -.file.is-danger .file-cta { - background-color: hsl(348deg, 86%, 61%); - border-color: transparent; - color: #fff; -} -.file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { - background-color: #f03a5f; - border-color: transparent; - color: #fff; -} -.file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { - border-color: transparent; - box-shadow: 0 0 0.5em rgba(241, 70, 104, 0.25); - color: #fff; -} -.file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { - background-color: #ef2e55; - border-color: transparent; - color: #fff; -} -.file.is-small { - font-size: 0.75rem; -} -.file.is-normal { - font-size: 1rem; -} -.file.is-medium { - font-size: 1.25rem; -} -.file.is-medium .file-icon .fa { - font-size: 21px; -} -.file.is-large { - font-size: 1.5rem; -} -.file.is-large .file-icon .fa { - font-size: 28px; -} -.file.has-name .file-cta { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.file.has-name .file-name { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.file.has-name.is-empty .file-cta { - border-radius: 4px; -} -.file.has-name.is-empty .file-name { - display: none; -} -.file.is-boxed .file-label { - flex-direction: column; -} -.file.is-boxed .file-cta { - flex-direction: column; - height: auto; - padding: 1em 3em; -} -.file.is-boxed .file-name { - border-width: 0 1px 1px; -} -.file.is-boxed .file-icon { - height: 1.5em; - width: 1.5em; -} -.file.is-boxed .file-icon .fa { - font-size: 21px; -} -.file.is-boxed.is-small .file-icon .fa { - font-size: 14px; -} -.file.is-boxed.is-medium .file-icon .fa { - font-size: 28px; -} -.file.is-boxed.is-large .file-icon .fa { - font-size: 35px; -} -.file.is-boxed.has-name .file-cta { - border-radius: 4px 4px 0 0; -} -.file.is-boxed.has-name .file-name { - border-radius: 0 0 4px 4px; - border-width: 0 1px 1px; -} -.file.is-centered { - justify-content: center; -} -.file.is-fullwidth .file-label { - width: 100%; -} -.file.is-fullwidth .file-name { - flex-grow: 1; - max-width: none; -} -.file.is-right { - justify-content: flex-end; -} -.file.is-right .file-cta { - border-radius: 0 4px 4px 0; -} -.file.is-right .file-name { - border-radius: 4px 0 0 4px; - border-width: 1px 0 1px 1px; - order: -1; -} - -.file-label { - align-items: stretch; - display: flex; - cursor: pointer; - justify-content: flex-start; - overflow: hidden; - position: relative; -} -.file-label:hover .file-cta { - background-color: #eeeeee; - color: hsl(0deg, 0%, 21%); -} -.file-label:hover .file-name { - border-color: #d5d5d5; -} -.file-label:active .file-cta { - background-color: #e8e8e8; - color: hsl(0deg, 0%, 21%); -} -.file-label:active .file-name { - border-color: #cfcfcf; -} - -.file-input { - height: 100%; - left: 0; - opacity: 0; - outline: none; - position: absolute; - top: 0; - width: 100%; -} - -.file-cta, -.file-name { - border-color: hsl(0deg, 0%, 86%); - border-radius: 4px; - font-size: 1em; - padding-left: 1em; - padding-right: 1em; - white-space: nowrap; -} - -.file-cta { - background-color: hsl(0deg, 0%, 96%); - color: hsl(0deg, 0%, 29%); -} - -.file-name { - border-color: hsl(0deg, 0%, 86%); - border-style: solid; - border-width: 1px 1px 1px 0; - display: block; - max-width: 16em; - overflow: hidden; - text-align: inherit; - text-overflow: ellipsis; -} - -.file-icon { - align-items: center; - display: flex; - height: 1em; - justify-content: center; - margin-right: 0.5em; - width: 1em; -} -.file-icon .fa { - font-size: 14px; -} - -.label { - color: hsl(0deg, 0%, 21%); - display: block; - font-size: 1rem; - font-weight: 700; -} -.label:not(:last-child) { - margin-bottom: 0.5em; -} -.label.is-small { - font-size: 0.75rem; -} -.label.is-medium { - font-size: 1.25rem; -} -.label.is-large { - font-size: 1.5rem; -} - -.help { - display: block; - font-size: 0.75rem; - margin-top: 0.25rem; -} -.help.is-white { - color: hsl(0deg, 0%, 100%); -} -.help.is-black { - color: hsl(0deg, 0%, 4%); -} -.help.is-light { - color: hsl(0deg, 0%, 96%); -} -.help.is-dark { - color: hsl(0deg, 0%, 21%); -} -.help.is-primary { - color: hsl(171deg, 100%, 41%); -} -.help.is-link { - color: hsl(229deg, 53%, 53%); -} -.help.is-info { - color: hsl(207deg, 61%, 53%); -} -.help.is-success { - color: hsl(153deg, 53%, 53%); -} -.help.is-warning { - color: hsl(44deg, 100%, 77%); -} -.help.is-danger { - color: hsl(348deg, 86%, 61%); -} - -.field:not(:last-child) { - margin-bottom: 0.75rem; -} -.field.has-addons { - display: flex; - justify-content: flex-start; -} -.field.has-addons .control:not(:last-child) { - margin-right: -1px; -} -.field.has-addons .control:not(:first-child):not(:last-child) .button, -.field.has-addons .control:not(:first-child):not(:last-child) .input, -.field.has-addons .control:not(:first-child):not(:last-child) .select select { - border-radius: 0; -} -.field.has-addons .control:first-child:not(:only-child) .button, -.field.has-addons .control:first-child:not(:only-child) .input, -.field.has-addons .control:first-child:not(:only-child) .select select { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.field.has-addons .control:last-child:not(:only-child) .button, -.field.has-addons .control:last-child:not(:only-child) .input, -.field.has-addons .control:last-child:not(:only-child) .select select { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.field.has-addons .control .button:not([disabled]):hover, .field.has-addons .control .button:not([disabled]).is-hovered, -.field.has-addons .control .input:not([disabled]):hover, -.field.has-addons .control .input:not([disabled]).is-hovered, -.field.has-addons .control .select select:not([disabled]):hover, -.field.has-addons .control .select select:not([disabled]).is-hovered { - z-index: 2; -} -.field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button:not([disabled]).is-focused, .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button:not([disabled]).is-active, -.field.has-addons .control .input:not([disabled]):focus, -.field.has-addons .control .input:not([disabled]).is-focused, -.field.has-addons .control .input:not([disabled]):active, -.field.has-addons .control .input:not([disabled]).is-active, -.field.has-addons .control .select select:not([disabled]):focus, -.field.has-addons .control .select select:not([disabled]).is-focused, -.field.has-addons .control .select select:not([disabled]):active, -.field.has-addons .control .select select:not([disabled]).is-active { - z-index: 3; -} -.field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button:not([disabled]).is-focused:hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button:not([disabled]).is-active:hover, -.field.has-addons .control .input:not([disabled]):focus:hover, -.field.has-addons .control .input:not([disabled]).is-focused:hover, -.field.has-addons .control .input:not([disabled]):active:hover, -.field.has-addons .control .input:not([disabled]).is-active:hover, -.field.has-addons .control .select select:not([disabled]):focus:hover, -.field.has-addons .control .select select:not([disabled]).is-focused:hover, -.field.has-addons .control .select select:not([disabled]):active:hover, -.field.has-addons .control .select select:not([disabled]).is-active:hover { - z-index: 4; -} -.field.has-addons .control.is-expanded { - flex-grow: 1; - flex-shrink: 1; -} -.field.has-addons.has-addons-centered { - justify-content: center; -} -.field.has-addons.has-addons-right { - justify-content: flex-end; -} -.field.has-addons.has-addons-fullwidth .control { - flex-grow: 1; - flex-shrink: 0; -} -.field.is-grouped { - display: flex; - justify-content: flex-start; -} -.field.is-grouped > .control { - flex-shrink: 0; -} -.field.is-grouped > .control:not(:last-child) { - margin-bottom: 0; - margin-right: 0.75rem; -} -.field.is-grouped > .control.is-expanded { - flex-grow: 1; - flex-shrink: 1; -} -.field.is-grouped.is-grouped-centered { - justify-content: center; -} -.field.is-grouped.is-grouped-right { - justify-content: flex-end; -} -.field.is-grouped.is-grouped-multiline { - flex-wrap: wrap; -} -.field.is-grouped.is-grouped-multiline > .control:last-child, .field.is-grouped.is-grouped-multiline > .control:not(:last-child) { - margin-bottom: 0.75rem; -} -.field.is-grouped.is-grouped-multiline:last-child { - margin-bottom: -0.75rem; -} -.field.is-grouped.is-grouped-multiline:not(:last-child) { - margin-bottom: 0; -} -@media screen and (min-width: 769px), print { - .field.is-horizontal { - display: flex; - } -} - -.field-label .label { - font-size: inherit; -} -@media screen and (max-width: 768px) { - .field-label { - margin-bottom: 0.5rem; - } -} -@media screen and (min-width: 769px), print { - .field-label { - flex-basis: 0; - flex-grow: 1; - flex-shrink: 0; - margin-right: 1.5rem; - text-align: right; - } - .field-label.is-small { - font-size: 0.75rem; - padding-top: 0.375em; - } - .field-label.is-normal { - padding-top: 0.375em; - } - .field-label.is-medium { - font-size: 1.25rem; - padding-top: 0.375em; - } - .field-label.is-large { - font-size: 1.5rem; - padding-top: 0.375em; - } -} - -.field-body .field .field { - margin-bottom: 0; -} -@media screen and (min-width: 769px), print { - .field-body { - display: flex; - flex-basis: 0; - flex-grow: 5; - flex-shrink: 1; - } - .field-body .field { - margin-bottom: 0; - } - .field-body > .field { - flex-shrink: 1; - } - .field-body > .field:not(.is-narrow) { - flex-grow: 1; - } - .field-body > .field:not(:last-child) { - margin-right: 0.75rem; - } -} - -.control { - box-sizing: border-box; - clear: both; - font-size: 1rem; - position: relative; - text-align: inherit; -} -.control.has-icons-left .input:focus ~ .icon, -.control.has-icons-left .select:focus ~ .icon, .control.has-icons-right .input:focus ~ .icon, -.control.has-icons-right .select:focus ~ .icon { - color: hsl(0deg, 0%, 29%); -} -.control.has-icons-left .input.is-small ~ .icon, -.control.has-icons-left .select.is-small ~ .icon, .control.has-icons-right .input.is-small ~ .icon, -.control.has-icons-right .select.is-small ~ .icon { - font-size: 0.75rem; -} -.control.has-icons-left .input.is-medium ~ .icon, -.control.has-icons-left .select.is-medium ~ .icon, .control.has-icons-right .input.is-medium ~ .icon, -.control.has-icons-right .select.is-medium ~ .icon { - font-size: 1.25rem; -} -.control.has-icons-left .input.is-large ~ .icon, -.control.has-icons-left .select.is-large ~ .icon, .control.has-icons-right .input.is-large ~ .icon, -.control.has-icons-right .select.is-large ~ .icon { - font-size: 1.5rem; -} -.control.has-icons-left .icon, .control.has-icons-right .icon { - color: hsl(0deg, 0%, 86%); - height: 2.5em; - pointer-events: none; - position: absolute; - top: 0; - width: 2.5em; - z-index: 4; -} -.control.has-icons-left .input, -.control.has-icons-left .select select { - padding-left: 2.5em; -} -.control.has-icons-left .icon.is-left { - left: 0; -} -.control.has-icons-right .input, -.control.has-icons-right .select select { - padding-right: 2.5em; -} -.control.has-icons-right .icon.is-right { - right: 0; -} -.control.is-loading::after { - position: absolute !important; - right: 0.625em; - top: 0.625em; - z-index: 4; -} -.control.is-loading.is-small:after { - font-size: 0.75rem; -} -.control.is-loading.is-medium:after { - font-size: 1.25rem; -} -.control.is-loading.is-large:after { - font-size: 1.5rem; -} - -/* Bulma Components */ -.breadcrumb { - font-size: 1rem; - white-space: nowrap; -} -.breadcrumb a { - align-items: center; - color: hsl(229deg, 53%, 53%); - display: flex; - justify-content: center; - padding: 0 0.75em; -} -.breadcrumb a:hover { - color: hsl(0deg, 0%, 21%); -} -.breadcrumb li { - align-items: center; - display: flex; -} -.breadcrumb li:first-child a { - padding-left: 0; -} -.breadcrumb li.is-active a { - color: hsl(0deg, 0%, 21%); - cursor: default; - pointer-events: none; -} -.breadcrumb li + li::before { - color: hsl(0deg, 0%, 71%); - content: "/"; -} -.breadcrumb ul, -.breadcrumb ol { - align-items: flex-start; - display: flex; - flex-wrap: wrap; - justify-content: flex-start; -} -.breadcrumb .icon:first-child { - margin-right: 0.5em; -} -.breadcrumb .icon:last-child { - margin-left: 0.5em; -} -.breadcrumb.is-centered ol, -.breadcrumb.is-centered ul { - justify-content: center; -} -.breadcrumb.is-right ol, -.breadcrumb.is-right ul { - justify-content: flex-end; -} -.breadcrumb.is-small { - font-size: 0.75rem; -} -.breadcrumb.is-medium { - font-size: 1.25rem; -} -.breadcrumb.is-large { - font-size: 1.5rem; -} -.breadcrumb.has-arrow-separator li + li::before { - content: "→"; -} -.breadcrumb.has-bullet-separator li + li::before { - content: "•"; -} -.breadcrumb.has-dot-separator li + li::before { - content: "·"; -} -.breadcrumb.has-succeeds-separator li + li::before { - content: "≻"; -} - -.card { - background-color: hsl(0deg, 0%, 100%); - border-radius: 0.25rem; - box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02); - color: hsl(0deg, 0%, 29%); - max-width: 100%; - position: relative; -} - -.card-footer:first-child, .card-content:first-child, .card-header:first-child { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} -.card-footer:last-child, .card-content:last-child, .card-header:last-child { - border-bottom-left-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; -} - -.card-header { - background-color: transparent; - align-items: stretch; - box-shadow: 0 0.125em 0.25em rgba(10, 10, 10, 0.1); - display: flex; -} - -.card-header-title { - align-items: center; - color: hsl(0deg, 0%, 21%); - display: flex; - flex-grow: 1; - font-weight: 700; - padding: 0.75rem 1rem; -} -.card-header-title.is-centered { - justify-content: center; -} - -.card-header-icon { - -moz-appearance: none; - -webkit-appearance: none; - appearance: none; - background: none; - border: none; - color: currentColor; - font-family: inherit; - font-size: 1em; - margin: 0; - padding: 0; - align-items: center; - cursor: pointer; - display: flex; - justify-content: center; - padding: 0.75rem 1rem; -} - -.card-image { - display: block; - position: relative; -} -.card-image:first-child img { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} -.card-image:last-child img { - border-bottom-left-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; -} - -.card-content { - background-color: transparent; - padding: 1.5rem; -} - -.card-footer { - background-color: transparent; - border-top: 1px solid hsl(0deg, 0%, 93%); - align-items: stretch; - display: flex; -} - -.card-footer-item { - align-items: center; - display: flex; - flex-basis: 0; - flex-grow: 1; - flex-shrink: 0; - justify-content: center; - padding: 0.75rem; -} -.card-footer-item:not(:last-child) { - border-right: 1px solid hsl(0deg, 0%, 93%); -} - -.card .media:not(:last-child) { - margin-bottom: 1.5rem; -} - -.dropdown { - display: inline-flex; - position: relative; - vertical-align: top; -} -.dropdown.is-active .dropdown-menu, .dropdown.is-hoverable:hover .dropdown-menu { - display: block; -} -.dropdown.is-right .dropdown-menu { - left: auto; - right: 0; -} -.dropdown.is-up .dropdown-menu { - bottom: 100%; - padding-bottom: 4px; - padding-top: initial; - top: auto; -} - -.dropdown-menu { - display: none; - left: 0; - min-width: 12rem; - padding-top: 4px; - position: absolute; - top: 100%; - z-index: 20; -} - -.dropdown-content { - background-color: hsl(0deg, 0%, 100%); - border-radius: 4px; - box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02); - padding-bottom: 0.5rem; - padding-top: 0.5rem; -} - -.dropdown-item { - color: hsl(0deg, 0%, 29%); - display: block; - font-size: 0.875rem; - line-height: 1.5; - padding: 0.375rem 1rem; - position: relative; -} - -a.dropdown-item, -button.dropdown-item { - padding-right: 3rem; - text-align: inherit; - white-space: nowrap; - width: 100%; -} -a.dropdown-item:hover, -button.dropdown-item:hover { - background-color: hsl(0deg, 0%, 96%); - color: hsl(0deg, 0%, 4%); -} -a.dropdown-item.is-active, -button.dropdown-item.is-active { - background-color: hsl(229deg, 53%, 53%); - color: #fff; -} - -.dropdown-divider { - background-color: hsl(0deg, 0%, 93%); - border: none; - display: block; - height: 1px; - margin: 0.5rem 0; -} - -.level { - align-items: center; - justify-content: space-between; -} -.level code { - border-radius: 4px; -} -.level img { - display: inline-block; - vertical-align: top; -} -.level.is-mobile { - display: flex; -} -.level.is-mobile .level-left, -.level.is-mobile .level-right { - display: flex; -} -.level.is-mobile .level-left + .level-right { - margin-top: 0; -} -.level.is-mobile .level-item:not(:last-child) { - margin-bottom: 0; - margin-right: 0.75rem; -} -.level.is-mobile .level-item:not(.is-narrow) { - flex-grow: 1; -} -@media screen and (min-width: 769px), print { - .level { - display: flex; - } - .level > .level-item:not(.is-narrow) { - flex-grow: 1; - } -} - -.level-item { - align-items: center; - display: flex; - flex-basis: auto; - flex-grow: 0; - flex-shrink: 0; - justify-content: center; -} -.level-item .title, -.level-item .subtitle { - margin-bottom: 0; -} -@media screen and (max-width: 768px) { - .level-item:not(:last-child) { - margin-bottom: 0.75rem; - } -} - -.level-left, -.level-right { - flex-basis: auto; - flex-grow: 0; - flex-shrink: 0; -} -.level-left .level-item.is-flexible, -.level-right .level-item.is-flexible { - flex-grow: 1; -} -@media screen and (min-width: 769px), print { - .level-left .level-item:not(:last-child), -.level-right .level-item:not(:last-child) { - margin-right: 0.75rem; - } -} - -.level-left { - align-items: center; - justify-content: flex-start; -} -@media screen and (max-width: 768px) { - .level-left + .level-right { - margin-top: 1.5rem; - } -} -@media screen and (min-width: 769px), print { - .level-left { - display: flex; - } -} - -.level-right { - align-items: center; - justify-content: flex-end; -} -@media screen and (min-width: 769px), print { - .level-right { - display: flex; - } -} - -.media { - align-items: flex-start; - display: flex; - text-align: inherit; -} -.media .content:not(:last-child) { - margin-bottom: 0.75rem; -} -.media .media { - border-top: 1px solid rgba(219, 219, 219, 0.5); - display: flex; - padding-top: 0.75rem; -} -.media .media .content:not(:last-child), -.media .media .control:not(:last-child) { - margin-bottom: 0.5rem; -} -.media .media .media { - padding-top: 0.5rem; -} -.media .media .media + .media { - margin-top: 0.5rem; -} -.media + .media { - border-top: 1px solid rgba(219, 219, 219, 0.5); - margin-top: 1rem; - padding-top: 1rem; -} -.media.is-large + .media { - margin-top: 1.5rem; - padding-top: 1.5rem; -} - -.media-left, -.media-right { - flex-basis: auto; - flex-grow: 0; - flex-shrink: 0; -} - -.media-left { - margin-right: 1rem; -} - -.media-right { - margin-left: 1rem; -} - -.media-content { - flex-basis: auto; - flex-grow: 1; - flex-shrink: 1; - text-align: inherit; -} - -@media screen and (max-width: 768px) { - .media-content { - overflow-x: auto; - } -} -.menu { - font-size: 1rem; -} -.menu.is-small { - font-size: 0.75rem; -} -.menu.is-medium { - font-size: 1.25rem; -} -.menu.is-large { - font-size: 1.5rem; -} - -.menu-list { - line-height: 1.25; -} -.menu-list a { - border-radius: 2px; - color: hsl(0deg, 0%, 29%); - display: block; - padding: 0.5em 0.75em; -} -.menu-list a:hover { - background-color: hsl(0deg, 0%, 96%); - color: hsl(0deg, 0%, 21%); -} -.menu-list a.is-active { - background-color: hsl(229deg, 53%, 53%); - color: #fff; -} -.menu-list li ul { - border-left: 1px solid hsl(0deg, 0%, 86%); - margin: 0.75em; - padding-left: 0.75em; -} - -.menu-label { - color: hsl(0deg, 0%, 48%); - font-size: 0.75em; - letter-spacing: 0.1em; - text-transform: uppercase; -} -.menu-label:not(:first-child) { - margin-top: 1em; -} -.menu-label:not(:last-child) { - margin-bottom: 1em; -} - -.message { - background-color: hsl(0deg, 0%, 96%); - border-radius: 4px; - font-size: 1rem; -} -.message strong { - color: currentColor; -} -.message a:not(.button):not(.tag):not(.dropdown-item) { - color: currentColor; - text-decoration: underline; -} -.message.is-small { - font-size: 0.75rem; -} -.message.is-medium { - font-size: 1.25rem; -} -.message.is-large { - font-size: 1.5rem; -} -.message.is-white { - background-color: white; -} -.message.is-white .message-header { - background-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 4%); -} -.message.is-white .message-body { - border-color: hsl(0deg, 0%, 100%); -} -.message.is-black { - background-color: #fafafa; -} -.message.is-black .message-header { - background-color: hsl(0deg, 0%, 4%); - color: hsl(0deg, 0%, 100%); -} -.message.is-black .message-body { - border-color: hsl(0deg, 0%, 4%); -} -.message.is-light { - background-color: #fafafa; -} -.message.is-light .message-header { - background-color: hsl(0deg, 0%, 96%); - color: rgba(0, 0, 0, 0.7); -} -.message.is-light .message-body { - border-color: hsl(0deg, 0%, 96%); -} -.message.is-dark { - background-color: #fafafa; -} -.message.is-dark .message-header { - background-color: hsl(0deg, 0%, 21%); - color: #fff; -} -.message.is-dark .message-body { - border-color: hsl(0deg, 0%, 21%); -} -.message.is-primary { - background-color: #ebfffc; -} -.message.is-primary .message-header { - background-color: hsl(171deg, 100%, 41%); - color: #fff; -} -.message.is-primary .message-body { - border-color: hsl(171deg, 100%, 41%); - color: #00947e; -} -.message.is-link { - background-color: #eff1fa; -} -.message.is-link .message-header { - background-color: hsl(229deg, 53%, 53%); - color: #fff; -} -.message.is-link .message-body { - border-color: hsl(229deg, 53%, 53%); - color: #3850b7; -} -.message.is-info { - background-color: #eff5fb; -} -.message.is-info .message-header { - background-color: hsl(207deg, 61%, 53%); - color: #fff; -} -.message.is-info .message-body { - border-color: hsl(207deg, 61%, 53%); - color: #296fa8; -} -.message.is-success { - background-color: #effaf5; -} -.message.is-success .message-header { - background-color: hsl(153deg, 53%, 53%); - color: #fff; -} -.message.is-success .message-body { - border-color: hsl(153deg, 53%, 53%); - color: #257953; -} -.message.is-warning { - background-color: #fffaeb; -} -.message.is-warning .message-header { - background-color: hsl(44deg, 100%, 77%); - color: rgba(0, 0, 0, 0.7); -} -.message.is-warning .message-body { - border-color: hsl(44deg, 100%, 77%); - color: #946c00; -} -.message.is-danger { - background-color: #feecf0; -} -.message.is-danger .message-header { - background-color: hsl(348deg, 86%, 61%); - color: #fff; -} -.message.is-danger .message-body { - border-color: hsl(348deg, 86%, 61%); - color: #cc0f35; -} - -.message-header { - align-items: center; - background-color: hsl(0deg, 0%, 29%); - border-radius: 4px 4px 0 0; - color: #fff; - display: flex; - font-weight: 700; - justify-content: space-between; - line-height: 1.25; - padding: 0.75em 1em; - position: relative; -} -.message-header .delete { - flex-grow: 0; - flex-shrink: 0; - margin-left: 0.75em; -} -.message-header + .message-body { - border-width: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.message-body { - border-color: hsl(0deg, 0%, 86%); - border-radius: 4px; - border-style: solid; - border-width: 0 0 0 4px; - color: hsl(0deg, 0%, 29%); - padding: 1.25em 1.5em; -} -.message-body code, -.message-body pre { - background-color: hsl(0deg, 0%, 100%); -} -.message-body pre code { - background-color: transparent; -} - -.modal { - align-items: center; - display: none; - flex-direction: column; - justify-content: center; - overflow: hidden; - position: fixed; - z-index: 40; -} -.modal.is-active { - display: flex; -} - -.modal-background { - background-color: rgba(10, 10, 10, 0.86); -} - -.modal-content, -.modal-card { - margin: 0 20px; - max-height: calc(100vh - 160px); - overflow: auto; - position: relative; - width: 100%; -} -@media screen and (min-width: 769px) { - .modal-content, -.modal-card { - margin: 0 auto; - max-height: calc(100vh - 40px); - width: 640px; - } -} - -.modal-close { - background: none; - height: 40px; - position: fixed; - right: 20px; - top: 20px; - width: 40px; -} - -.modal-card { - display: flex; - flex-direction: column; - max-height: calc(100vh - 40px); - overflow: hidden; - -ms-overflow-y: visible; -} - -.modal-card-head, -.modal-card-foot { - align-items: center; - background-color: hsl(0deg, 0%, 96%); - display: flex; - flex-shrink: 0; - justify-content: flex-start; - padding: 20px; - position: relative; -} - -.modal-card-head { - border-bottom: 1px solid hsl(0deg, 0%, 86%); - border-top-left-radius: 6px; - border-top-right-radius: 6px; -} - -.modal-card-title { - color: hsl(0deg, 0%, 21%); - flex-grow: 1; - flex-shrink: 0; - font-size: 1.5rem; - line-height: 1; -} - -.modal-card-foot { - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; - border-top: 1px solid hsl(0deg, 0%, 86%); -} -.modal-card-foot .button:not(:last-child) { - margin-right: 0.5em; -} - -.modal-card-body { - -webkit-overflow-scrolling: touch; - background-color: hsl(0deg, 0%, 100%); - flex-grow: 1; - flex-shrink: 1; - overflow: auto; - padding: 20px; -} - -.navbar { - background-color: hsl(0deg, 0%, 100%); - min-height: 3.25rem; - position: relative; - z-index: 30; -} -.navbar.is-white { - background-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 4%); -} -.navbar.is-white .navbar-brand > .navbar-item, -.navbar.is-white .navbar-brand .navbar-link { - color: hsl(0deg, 0%, 4%); -} -.navbar.is-white .navbar-brand > a.navbar-item:focus, .navbar.is-white .navbar-brand > a.navbar-item:hover, .navbar.is-white .navbar-brand > a.navbar-item.is-active, -.navbar.is-white .navbar-brand .navbar-link:focus, -.navbar.is-white .navbar-brand .navbar-link:hover, -.navbar.is-white .navbar-brand .navbar-link.is-active { - background-color: #f2f2f2; - color: hsl(0deg, 0%, 4%); -} -.navbar.is-white .navbar-brand .navbar-link::after { - border-color: hsl(0deg, 0%, 4%); -} -.navbar.is-white .navbar-burger { - color: hsl(0deg, 0%, 4%); -} -@media screen and (min-width: 1024px) { - .navbar.is-white .navbar-start > .navbar-item, -.navbar.is-white .navbar-start .navbar-link, -.navbar.is-white .navbar-end > .navbar-item, -.navbar.is-white .navbar-end .navbar-link { - color: hsl(0deg, 0%, 4%); - } - .navbar.is-white .navbar-start > a.navbar-item:focus, .navbar.is-white .navbar-start > a.navbar-item:hover, .navbar.is-white .navbar-start > a.navbar-item.is-active, -.navbar.is-white .navbar-start .navbar-link:focus, -.navbar.is-white .navbar-start .navbar-link:hover, -.navbar.is-white .navbar-start .navbar-link.is-active, -.navbar.is-white .navbar-end > a.navbar-item:focus, -.navbar.is-white .navbar-end > a.navbar-item:hover, -.navbar.is-white .navbar-end > a.navbar-item.is-active, -.navbar.is-white .navbar-end .navbar-link:focus, -.navbar.is-white .navbar-end .navbar-link:hover, -.navbar.is-white .navbar-end .navbar-link.is-active { - background-color: #f2f2f2; - color: hsl(0deg, 0%, 4%); - } - .navbar.is-white .navbar-start .navbar-link::after, -.navbar.is-white .navbar-end .navbar-link::after { - border-color: hsl(0deg, 0%, 4%); - } - .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link, -.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link, -.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #f2f2f2; - color: hsl(0deg, 0%, 4%); - } - .navbar.is-white .navbar-dropdown a.navbar-item.is-active { - background-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 4%); - } -} -.navbar.is-black { - background-color: hsl(0deg, 0%, 4%); - color: hsl(0deg, 0%, 100%); -} -.navbar.is-black .navbar-brand > .navbar-item, -.navbar.is-black .navbar-brand .navbar-link { - color: hsl(0deg, 0%, 100%); -} -.navbar.is-black .navbar-brand > a.navbar-item:focus, .navbar.is-black .navbar-brand > a.navbar-item:hover, .navbar.is-black .navbar-brand > a.navbar-item.is-active, -.navbar.is-black .navbar-brand .navbar-link:focus, -.navbar.is-black .navbar-brand .navbar-link:hover, -.navbar.is-black .navbar-brand .navbar-link.is-active { - background-color: black; - color: hsl(0deg, 0%, 100%); -} -.navbar.is-black .navbar-brand .navbar-link::after { - border-color: hsl(0deg, 0%, 100%); -} -.navbar.is-black .navbar-burger { - color: hsl(0deg, 0%, 100%); -} -@media screen and (min-width: 1024px) { - .navbar.is-black .navbar-start > .navbar-item, -.navbar.is-black .navbar-start .navbar-link, -.navbar.is-black .navbar-end > .navbar-item, -.navbar.is-black .navbar-end .navbar-link { - color: hsl(0deg, 0%, 100%); - } - .navbar.is-black .navbar-start > a.navbar-item:focus, .navbar.is-black .navbar-start > a.navbar-item:hover, .navbar.is-black .navbar-start > a.navbar-item.is-active, -.navbar.is-black .navbar-start .navbar-link:focus, -.navbar.is-black .navbar-start .navbar-link:hover, -.navbar.is-black .navbar-start .navbar-link.is-active, -.navbar.is-black .navbar-end > a.navbar-item:focus, -.navbar.is-black .navbar-end > a.navbar-item:hover, -.navbar.is-black .navbar-end > a.navbar-item.is-active, -.navbar.is-black .navbar-end .navbar-link:focus, -.navbar.is-black .navbar-end .navbar-link:hover, -.navbar.is-black .navbar-end .navbar-link.is-active { - background-color: black; - color: hsl(0deg, 0%, 100%); - } - .navbar.is-black .navbar-start .navbar-link::after, -.navbar.is-black .navbar-end .navbar-link::after { - border-color: hsl(0deg, 0%, 100%); - } - .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link, -.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link, -.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link { - background-color: black; - color: hsl(0deg, 0%, 100%); - } - .navbar.is-black .navbar-dropdown a.navbar-item.is-active { - background-color: hsl(0deg, 0%, 4%); - color: hsl(0deg, 0%, 100%); - } -} -.navbar.is-light { - background-color: hsl(0deg, 0%, 96%); - color: rgba(0, 0, 0, 0.7); -} -.navbar.is-light .navbar-brand > .navbar-item, -.navbar.is-light .navbar-brand .navbar-link { - color: rgba(0, 0, 0, 0.7); -} -.navbar.is-light .navbar-brand > a.navbar-item:focus, .navbar.is-light .navbar-brand > a.navbar-item:hover, .navbar.is-light .navbar-brand > a.navbar-item.is-active, -.navbar.is-light .navbar-brand .navbar-link:focus, -.navbar.is-light .navbar-brand .navbar-link:hover, -.navbar.is-light .navbar-brand .navbar-link.is-active { - background-color: #e8e8e8; - color: rgba(0, 0, 0, 0.7); -} -.navbar.is-light .navbar-brand .navbar-link::after { - border-color: rgba(0, 0, 0, 0.7); -} -.navbar.is-light .navbar-burger { - color: rgba(0, 0, 0, 0.7); -} -@media screen and (min-width: 1024px) { - .navbar.is-light .navbar-start > .navbar-item, -.navbar.is-light .navbar-start .navbar-link, -.navbar.is-light .navbar-end > .navbar-item, -.navbar.is-light .navbar-end .navbar-link { - color: rgba(0, 0, 0, 0.7); - } - .navbar.is-light .navbar-start > a.navbar-item:focus, .navbar.is-light .navbar-start > a.navbar-item:hover, .navbar.is-light .navbar-start > a.navbar-item.is-active, -.navbar.is-light .navbar-start .navbar-link:focus, -.navbar.is-light .navbar-start .navbar-link:hover, -.navbar.is-light .navbar-start .navbar-link.is-active, -.navbar.is-light .navbar-end > a.navbar-item:focus, -.navbar.is-light .navbar-end > a.navbar-item:hover, -.navbar.is-light .navbar-end > a.navbar-item.is-active, -.navbar.is-light .navbar-end .navbar-link:focus, -.navbar.is-light .navbar-end .navbar-link:hover, -.navbar.is-light .navbar-end .navbar-link.is-active { - background-color: #e8e8e8; - color: rgba(0, 0, 0, 0.7); - } - .navbar.is-light .navbar-start .navbar-link::after, -.navbar.is-light .navbar-end .navbar-link::after { - border-color: rgba(0, 0, 0, 0.7); - } - .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link, -.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link, -.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #e8e8e8; - color: rgba(0, 0, 0, 0.7); - } - .navbar.is-light .navbar-dropdown a.navbar-item.is-active { - background-color: hsl(0deg, 0%, 96%); - color: rgba(0, 0, 0, 0.7); - } -} -.navbar.is-dark { - background-color: hsl(0deg, 0%, 21%); - color: #fff; -} -.navbar.is-dark .navbar-brand > .navbar-item, -.navbar.is-dark .navbar-brand .navbar-link { - color: #fff; -} -.navbar.is-dark .navbar-brand > a.navbar-item:focus, .navbar.is-dark .navbar-brand > a.navbar-item:hover, .navbar.is-dark .navbar-brand > a.navbar-item.is-active, -.navbar.is-dark .navbar-brand .navbar-link:focus, -.navbar.is-dark .navbar-brand .navbar-link:hover, -.navbar.is-dark .navbar-brand .navbar-link.is-active { - background-color: #292929; - color: #fff; -} -.navbar.is-dark .navbar-brand .navbar-link::after { - border-color: #fff; -} -.navbar.is-dark .navbar-burger { - color: #fff; -} -@media screen and (min-width: 1024px) { - .navbar.is-dark .navbar-start > .navbar-item, -.navbar.is-dark .navbar-start .navbar-link, -.navbar.is-dark .navbar-end > .navbar-item, -.navbar.is-dark .navbar-end .navbar-link { - color: #fff; - } - .navbar.is-dark .navbar-start > a.navbar-item:focus, .navbar.is-dark .navbar-start > a.navbar-item:hover, .navbar.is-dark .navbar-start > a.navbar-item.is-active, -.navbar.is-dark .navbar-start .navbar-link:focus, -.navbar.is-dark .navbar-start .navbar-link:hover, -.navbar.is-dark .navbar-start .navbar-link.is-active, -.navbar.is-dark .navbar-end > a.navbar-item:focus, -.navbar.is-dark .navbar-end > a.navbar-item:hover, -.navbar.is-dark .navbar-end > a.navbar-item.is-active, -.navbar.is-dark .navbar-end .navbar-link:focus, -.navbar.is-dark .navbar-end .navbar-link:hover, -.navbar.is-dark .navbar-end .navbar-link.is-active { - background-color: #292929; - color: #fff; - } - .navbar.is-dark .navbar-start .navbar-link::after, -.navbar.is-dark .navbar-end .navbar-link::after { - border-color: #fff; - } - .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link, -.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link, -.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #292929; - color: #fff; - } - .navbar.is-dark .navbar-dropdown a.navbar-item.is-active { - background-color: hsl(0deg, 0%, 21%); - color: #fff; - } -} -.navbar.is-primary { - background-color: hsl(171deg, 100%, 41%); - color: #fff; -} -.navbar.is-primary .navbar-brand > .navbar-item, -.navbar.is-primary .navbar-brand .navbar-link { - color: #fff; -} -.navbar.is-primary .navbar-brand > a.navbar-item:focus, .navbar.is-primary .navbar-brand > a.navbar-item:hover, .navbar.is-primary .navbar-brand > a.navbar-item.is-active, -.navbar.is-primary .navbar-brand .navbar-link:focus, -.navbar.is-primary .navbar-brand .navbar-link:hover, -.navbar.is-primary .navbar-brand .navbar-link.is-active { - background-color: #00b89c; - color: #fff; -} -.navbar.is-primary .navbar-brand .navbar-link::after { - border-color: #fff; -} -.navbar.is-primary .navbar-burger { - color: #fff; -} -@media screen and (min-width: 1024px) { - .navbar.is-primary .navbar-start > .navbar-item, -.navbar.is-primary .navbar-start .navbar-link, -.navbar.is-primary .navbar-end > .navbar-item, -.navbar.is-primary .navbar-end .navbar-link { - color: #fff; - } - .navbar.is-primary .navbar-start > a.navbar-item:focus, .navbar.is-primary .navbar-start > a.navbar-item:hover, .navbar.is-primary .navbar-start > a.navbar-item.is-active, -.navbar.is-primary .navbar-start .navbar-link:focus, -.navbar.is-primary .navbar-start .navbar-link:hover, -.navbar.is-primary .navbar-start .navbar-link.is-active, -.navbar.is-primary .navbar-end > a.navbar-item:focus, -.navbar.is-primary .navbar-end > a.navbar-item:hover, -.navbar.is-primary .navbar-end > a.navbar-item.is-active, -.navbar.is-primary .navbar-end .navbar-link:focus, -.navbar.is-primary .navbar-end .navbar-link:hover, -.navbar.is-primary .navbar-end .navbar-link.is-active { - background-color: #00b89c; - color: #fff; - } - .navbar.is-primary .navbar-start .navbar-link::after, -.navbar.is-primary .navbar-end .navbar-link::after { - border-color: #fff; - } - .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link, -.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link, -.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #00b89c; - color: #fff; - } - .navbar.is-primary .navbar-dropdown a.navbar-item.is-active { - background-color: hsl(171deg, 100%, 41%); - color: #fff; - } -} -.navbar.is-link { - background-color: hsl(229deg, 53%, 53%); - color: #fff; -} -.navbar.is-link .navbar-brand > .navbar-item, -.navbar.is-link .navbar-brand .navbar-link { - color: #fff; -} -.navbar.is-link .navbar-brand > a.navbar-item:focus, .navbar.is-link .navbar-brand > a.navbar-item:hover, .navbar.is-link .navbar-brand > a.navbar-item.is-active, -.navbar.is-link .navbar-brand .navbar-link:focus, -.navbar.is-link .navbar-brand .navbar-link:hover, -.navbar.is-link .navbar-brand .navbar-link.is-active { - background-color: #3a51bb; - color: #fff; -} -.navbar.is-link .navbar-brand .navbar-link::after { - border-color: #fff; -} -.navbar.is-link .navbar-burger { - color: #fff; -} -@media screen and (min-width: 1024px) { - .navbar.is-link .navbar-start > .navbar-item, -.navbar.is-link .navbar-start .navbar-link, -.navbar.is-link .navbar-end > .navbar-item, -.navbar.is-link .navbar-end .navbar-link { - color: #fff; - } - .navbar.is-link .navbar-start > a.navbar-item:focus, .navbar.is-link .navbar-start > a.navbar-item:hover, .navbar.is-link .navbar-start > a.navbar-item.is-active, -.navbar.is-link .navbar-start .navbar-link:focus, -.navbar.is-link .navbar-start .navbar-link:hover, -.navbar.is-link .navbar-start .navbar-link.is-active, -.navbar.is-link .navbar-end > a.navbar-item:focus, -.navbar.is-link .navbar-end > a.navbar-item:hover, -.navbar.is-link .navbar-end > a.navbar-item.is-active, -.navbar.is-link .navbar-end .navbar-link:focus, -.navbar.is-link .navbar-end .navbar-link:hover, -.navbar.is-link .navbar-end .navbar-link.is-active { - background-color: #3a51bb; - color: #fff; - } - .navbar.is-link .navbar-start .navbar-link::after, -.navbar.is-link .navbar-end .navbar-link::after { - border-color: #fff; - } - .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link, -.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link, -.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #3a51bb; - color: #fff; - } - .navbar.is-link .navbar-dropdown a.navbar-item.is-active { - background-color: hsl(229deg, 53%, 53%); - color: #fff; - } -} -.navbar.is-info { - background-color: hsl(207deg, 61%, 53%); - color: #fff; -} -.navbar.is-info .navbar-brand > .navbar-item, -.navbar.is-info .navbar-brand .navbar-link { - color: #fff; -} -.navbar.is-info .navbar-brand > a.navbar-item:focus, .navbar.is-info .navbar-brand > a.navbar-item:hover, .navbar.is-info .navbar-brand > a.navbar-item.is-active, -.navbar.is-info .navbar-brand .navbar-link:focus, -.navbar.is-info .navbar-brand .navbar-link:hover, -.navbar.is-info .navbar-brand .navbar-link.is-active { - background-color: #3082c5; - color: #fff; -} -.navbar.is-info .navbar-brand .navbar-link::after { - border-color: #fff; -} -.navbar.is-info .navbar-burger { - color: #fff; -} -@media screen and (min-width: 1024px) { - .navbar.is-info .navbar-start > .navbar-item, -.navbar.is-info .navbar-start .navbar-link, -.navbar.is-info .navbar-end > .navbar-item, -.navbar.is-info .navbar-end .navbar-link { - color: #fff; - } - .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, -.navbar.is-info .navbar-start .navbar-link:focus, -.navbar.is-info .navbar-start .navbar-link:hover, -.navbar.is-info .navbar-start .navbar-link.is-active, -.navbar.is-info .navbar-end > a.navbar-item:focus, -.navbar.is-info .navbar-end > a.navbar-item:hover, -.navbar.is-info .navbar-end > a.navbar-item.is-active, -.navbar.is-info .navbar-end .navbar-link:focus, -.navbar.is-info .navbar-end .navbar-link:hover, -.navbar.is-info .navbar-end .navbar-link.is-active { - background-color: #3082c5; - color: #fff; - } - .navbar.is-info .navbar-start .navbar-link::after, -.navbar.is-info .navbar-end .navbar-link::after { - border-color: #fff; - } - .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, -.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, -.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #3082c5; - color: #fff; - } - .navbar.is-info .navbar-dropdown a.navbar-item.is-active { - background-color: hsl(207deg, 61%, 53%); - color: #fff; - } -} -.navbar.is-success { - background-color: hsl(153deg, 53%, 53%); - color: #fff; -} -.navbar.is-success .navbar-brand > .navbar-item, -.navbar.is-success .navbar-brand .navbar-link { - color: #fff; -} -.navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, -.navbar.is-success .navbar-brand .navbar-link:focus, -.navbar.is-success .navbar-brand .navbar-link:hover, -.navbar.is-success .navbar-brand .navbar-link.is-active { - background-color: #3abb81; - color: #fff; -} -.navbar.is-success .navbar-brand .navbar-link::after { - border-color: #fff; -} -.navbar.is-success .navbar-burger { - color: #fff; -} -@media screen and (min-width: 1024px) { - .navbar.is-success .navbar-start > .navbar-item, -.navbar.is-success .navbar-start .navbar-link, -.navbar.is-success .navbar-end > .navbar-item, -.navbar.is-success .navbar-end .navbar-link { - color: #fff; - } - .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, -.navbar.is-success .navbar-start .navbar-link:focus, -.navbar.is-success .navbar-start .navbar-link:hover, -.navbar.is-success .navbar-start .navbar-link.is-active, -.navbar.is-success .navbar-end > a.navbar-item:focus, -.navbar.is-success .navbar-end > a.navbar-item:hover, -.navbar.is-success .navbar-end > a.navbar-item.is-active, -.navbar.is-success .navbar-end .navbar-link:focus, -.navbar.is-success .navbar-end .navbar-link:hover, -.navbar.is-success .navbar-end .navbar-link.is-active { - background-color: #3abb81; - color: #fff; - } - .navbar.is-success .navbar-start .navbar-link::after, -.navbar.is-success .navbar-end .navbar-link::after { - border-color: #fff; - } - .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, -.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, -.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #3abb81; - color: #fff; - } - .navbar.is-success .navbar-dropdown a.navbar-item.is-active { - background-color: hsl(153deg, 53%, 53%); - color: #fff; - } -} -.navbar.is-warning { - background-color: hsl(44deg, 100%, 77%); - color: rgba(0, 0, 0, 0.7); -} -.navbar.is-warning .navbar-brand > .navbar-item, -.navbar.is-warning .navbar-brand .navbar-link { - color: rgba(0, 0, 0, 0.7); -} -.navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, -.navbar.is-warning .navbar-brand .navbar-link:focus, -.navbar.is-warning .navbar-brand .navbar-link:hover, -.navbar.is-warning .navbar-brand .navbar-link.is-active { - background-color: #ffd970; - color: rgba(0, 0, 0, 0.7); -} -.navbar.is-warning .navbar-brand .navbar-link::after { - border-color: rgba(0, 0, 0, 0.7); -} -.navbar.is-warning .navbar-burger { - color: rgba(0, 0, 0, 0.7); -} -@media screen and (min-width: 1024px) { - .navbar.is-warning .navbar-start > .navbar-item, -.navbar.is-warning .navbar-start .navbar-link, -.navbar.is-warning .navbar-end > .navbar-item, -.navbar.is-warning .navbar-end .navbar-link { - color: rgba(0, 0, 0, 0.7); - } - .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, -.navbar.is-warning .navbar-start .navbar-link:focus, -.navbar.is-warning .navbar-start .navbar-link:hover, -.navbar.is-warning .navbar-start .navbar-link.is-active, -.navbar.is-warning .navbar-end > a.navbar-item:focus, -.navbar.is-warning .navbar-end > a.navbar-item:hover, -.navbar.is-warning .navbar-end > a.navbar-item.is-active, -.navbar.is-warning .navbar-end .navbar-link:focus, -.navbar.is-warning .navbar-end .navbar-link:hover, -.navbar.is-warning .navbar-end .navbar-link.is-active { - background-color: #ffd970; - color: rgba(0, 0, 0, 0.7); - } - .navbar.is-warning .navbar-start .navbar-link::after, -.navbar.is-warning .navbar-end .navbar-link::after { - border-color: rgba(0, 0, 0, 0.7); - } - .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, -.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, -.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #ffd970; - color: rgba(0, 0, 0, 0.7); - } - .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { - background-color: hsl(44deg, 100%, 77%); - color: rgba(0, 0, 0, 0.7); - } -} -.navbar.is-danger { - background-color: hsl(348deg, 86%, 61%); - color: #fff; -} -.navbar.is-danger .navbar-brand > .navbar-item, -.navbar.is-danger .navbar-brand .navbar-link { - color: #fff; -} -.navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, -.navbar.is-danger .navbar-brand .navbar-link:focus, -.navbar.is-danger .navbar-brand .navbar-link:hover, -.navbar.is-danger .navbar-brand .navbar-link.is-active { - background-color: #ef2e55; - color: #fff; -} -.navbar.is-danger .navbar-brand .navbar-link::after { - border-color: #fff; -} -.navbar.is-danger .navbar-burger { - color: #fff; -} -@media screen and (min-width: 1024px) { - .navbar.is-danger .navbar-start > .navbar-item, -.navbar.is-danger .navbar-start .navbar-link, -.navbar.is-danger .navbar-end > .navbar-item, -.navbar.is-danger .navbar-end .navbar-link { - color: #fff; - } - .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, -.navbar.is-danger .navbar-start .navbar-link:focus, -.navbar.is-danger .navbar-start .navbar-link:hover, -.navbar.is-danger .navbar-start .navbar-link.is-active, -.navbar.is-danger .navbar-end > a.navbar-item:focus, -.navbar.is-danger .navbar-end > a.navbar-item:hover, -.navbar.is-danger .navbar-end > a.navbar-item.is-active, -.navbar.is-danger .navbar-end .navbar-link:focus, -.navbar.is-danger .navbar-end .navbar-link:hover, -.navbar.is-danger .navbar-end .navbar-link.is-active { - background-color: #ef2e55; - color: #fff; - } - .navbar.is-danger .navbar-start .navbar-link::after, -.navbar.is-danger .navbar-end .navbar-link::after { - border-color: #fff; - } - .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, -.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, -.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { - background-color: #ef2e55; - color: #fff; - } - .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { - background-color: hsl(348deg, 86%, 61%); - color: #fff; - } -} -.navbar > .container { - align-items: stretch; - display: flex; - min-height: 3.25rem; - width: 100%; -} -.navbar.has-shadow { - box-shadow: 0 2px 0 0 hsl(0deg, 0%, 96%); -} -.navbar.is-fixed-bottom, .navbar.is-fixed-top { - left: 0; - position: fixed; - right: 0; - z-index: 30; -} -.navbar.is-fixed-bottom { - bottom: 0; -} -.navbar.is-fixed-bottom.has-shadow { - box-shadow: 0 -2px 0 0 hsl(0deg, 0%, 96%); -} -.navbar.is-fixed-top { - top: 0; -} - -html.has-navbar-fixed-top, -body.has-navbar-fixed-top { - padding-top: 3.25rem; -} -html.has-navbar-fixed-bottom, -body.has-navbar-fixed-bottom { - padding-bottom: 3.25rem; -} - -.navbar-brand, -.navbar-tabs { - align-items: stretch; - display: flex; - flex-shrink: 0; - min-height: 3.25rem; -} - -.navbar-brand a.navbar-item:focus, .navbar-brand a.navbar-item:hover { - background-color: transparent; -} - -.navbar-tabs { - -webkit-overflow-scrolling: touch; - max-width: 100vw; - overflow-x: auto; - overflow-y: hidden; -} - -.navbar-burger { - color: hsl(0deg, 0%, 29%); - -moz-appearance: none; - -webkit-appearance: none; - appearance: none; - background: none; - border: none; - cursor: pointer; - display: block; - height: 3.25rem; - position: relative; - width: 3.25rem; - margin-left: auto; -} -.navbar-burger span { - background-color: currentColor; - display: block; - height: 1px; - left: calc(50% - 8px); - position: absolute; - transform-origin: center; - transition-duration: 86ms; - transition-property: background-color, opacity, transform; - transition-timing-function: ease-out; - width: 16px; -} -.navbar-burger span:nth-child(1) { - top: calc(50% - 6px); -} -.navbar-burger span:nth-child(2) { - top: calc(50% - 1px); -} -.navbar-burger span:nth-child(3) { - top: calc(50% + 4px); -} -.navbar-burger:hover { - background-color: rgba(0, 0, 0, 0.05); -} -.navbar-burger.is-active span:nth-child(1) { - transform: translateY(5px) rotate(45deg); -} -.navbar-burger.is-active span:nth-child(2) { - opacity: 0; -} -.navbar-burger.is-active span:nth-child(3) { - transform: translateY(-5px) rotate(-45deg); -} - -.navbar-menu { - display: none; -} - -.navbar-item, -.navbar-link { - color: hsl(0deg, 0%, 29%); - display: block; - line-height: 1.5; - padding: 0.5rem 0.75rem; - position: relative; -} -.navbar-item .icon:only-child, -.navbar-link .icon:only-child { - margin-left: -0.25rem; - margin-right: -0.25rem; -} - -a.navbar-item, -.navbar-link { - cursor: pointer; -} -a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-item.is-active, -.navbar-link:focus, -.navbar-link:focus-within, -.navbar-link:hover, -.navbar-link.is-active { - background-color: hsl(0deg, 0%, 98%); - color: hsl(229deg, 53%, 53%); -} - -.navbar-item { - flex-grow: 0; - flex-shrink: 0; -} -.navbar-item img { - max-height: 1.75rem; -} -.navbar-item.has-dropdown { - padding: 0; -} -.navbar-item.is-expanded { - flex-grow: 1; - flex-shrink: 1; -} -.navbar-item.is-tab { - border-bottom: 1px solid transparent; - min-height: 3.25rem; - padding-bottom: calc(0.5rem - 1px); -} -.navbar-item.is-tab:focus, .navbar-item.is-tab:hover { - background-color: transparent; - border-bottom-color: hsl(229deg, 53%, 53%); -} -.navbar-item.is-tab.is-active { - background-color: transparent; - border-bottom-color: hsl(229deg, 53%, 53%); - border-bottom-style: solid; - border-bottom-width: 3px; - color: hsl(229deg, 53%, 53%); - padding-bottom: calc(0.5rem - 3px); -} - -.navbar-content { - flex-grow: 1; - flex-shrink: 1; -} - -.navbar-link:not(.is-arrowless) { - padding-right: 2.5em; -} -.navbar-link:not(.is-arrowless)::after { - border-color: hsl(229deg, 53%, 53%); - margin-top: -0.375em; - right: 1.125em; -} - -.navbar-dropdown { - font-size: 0.875rem; - padding-bottom: 0.5rem; - padding-top: 0.5rem; -} -.navbar-dropdown .navbar-item { - padding-left: 1.5rem; - padding-right: 1.5rem; -} - -.navbar-divider { - background-color: hsl(0deg, 0%, 96%); - border: none; - display: none; - height: 2px; - margin: 0.5rem 0; -} - -@media screen and (max-width: 1023px) { - .navbar > .container { - display: block; - } - .navbar-brand .navbar-item, -.navbar-tabs .navbar-item { - align-items: center; - display: flex; - } - .navbar-link::after { - display: none; - } - .navbar-menu { - background-color: hsl(0deg, 0%, 100%); - box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); - padding: 0.5rem 0; - } - .navbar-menu.is-active { - display: block; - } - .navbar.is-fixed-bottom-touch, .navbar.is-fixed-top-touch { - left: 0; - position: fixed; - right: 0; - z-index: 30; - } - .navbar.is-fixed-bottom-touch { - bottom: 0; - } - .navbar.is-fixed-bottom-touch.has-shadow { - box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); - } - .navbar.is-fixed-top-touch { - top: 0; - } - .navbar.is-fixed-top .navbar-menu, .navbar.is-fixed-top-touch .navbar-menu { - -webkit-overflow-scrolling: touch; - max-height: calc(100vh - 3.25rem); - overflow: auto; - } - html.has-navbar-fixed-top-touch, -body.has-navbar-fixed-top-touch { - padding-top: 3.25rem; - } - html.has-navbar-fixed-bottom-touch, -body.has-navbar-fixed-bottom-touch { - padding-bottom: 3.25rem; - } -} -@media screen and (min-width: 1024px) { - .navbar, -.navbar-menu, -.navbar-start, -.navbar-end { - align-items: stretch; - display: flex; - } - .navbar { - min-height: 3.25rem; - } - .navbar.is-spaced { - padding: 1rem 2rem; - } - .navbar.is-spaced .navbar-start, -.navbar.is-spaced .navbar-end { - align-items: center; - } - .navbar.is-spaced a.navbar-item, -.navbar.is-spaced .navbar-link { - border-radius: 4px; - } - .navbar.is-transparent a.navbar-item:focus, .navbar.is-transparent a.navbar-item:hover, .navbar.is-transparent a.navbar-item.is-active, -.navbar.is-transparent .navbar-link:focus, -.navbar.is-transparent .navbar-link:hover, -.navbar.is-transparent .navbar-link.is-active { - background-color: transparent !important; - } - .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link { - background-color: transparent !important; - } - .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, .navbar.is-transparent .navbar-dropdown a.navbar-item:hover { - background-color: hsl(0deg, 0%, 96%); - color: hsl(0deg, 0%, 4%); - } - .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active { - background-color: hsl(0deg, 0%, 96%); - color: hsl(229deg, 53%, 53%); - } - .navbar-burger { - display: none; - } - .navbar-item, -.navbar-link { - align-items: center; - display: flex; - } - .navbar-item.has-dropdown { - align-items: stretch; - } - .navbar-item.has-dropdown-up .navbar-link::after { - transform: rotate(135deg) translate(0.25em, -0.25em); - } - .navbar-item.has-dropdown-up .navbar-dropdown { - border-bottom: 2px solid hsl(0deg, 0%, 86%); - border-radius: 6px 6px 0 0; - border-top: none; - bottom: 100%; - box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1); - top: auto; - } - .navbar-item.is-active .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown { - display: block; - } - .navbar.is-spaced .navbar-item.is-active .navbar-dropdown, .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed { - opacity: 1; - pointer-events: auto; - transform: translateY(0); - } - .navbar-menu { - flex-grow: 1; - flex-shrink: 0; - } - .navbar-start { - justify-content: flex-start; - margin-right: auto; - } - .navbar-end { - justify-content: flex-end; - margin-left: auto; - } - .navbar-dropdown { - background-color: hsl(0deg, 0%, 100%); - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; - border-top: 2px solid hsl(0deg, 0%, 86%); - box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1); - display: none; - font-size: 0.875rem; - left: 0; - min-width: 100%; - position: absolute; - top: 100%; - z-index: 20; - } - .navbar-dropdown .navbar-item { - padding: 0.375rem 1rem; - white-space: nowrap; - } - .navbar-dropdown a.navbar-item { - padding-right: 3rem; - } - .navbar-dropdown a.navbar-item:focus, .navbar-dropdown a.navbar-item:hover { - background-color: hsl(0deg, 0%, 96%); - color: hsl(0deg, 0%, 4%); - } - .navbar-dropdown a.navbar-item.is-active { - background-color: hsl(0deg, 0%, 96%); - color: hsl(229deg, 53%, 53%); - } - .navbar.is-spaced .navbar-dropdown, .navbar-dropdown.is-boxed { - border-radius: 6px; - border-top: none; - box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); - display: block; - opacity: 0; - pointer-events: none; - top: calc(100% + (-4px)); - transform: translateY(-5px); - transition-duration: 86ms; - transition-property: opacity, transform; - } - .navbar-dropdown.is-right { - left: auto; - right: 0; - } - .navbar-divider { - display: block; - } - .navbar > .container .navbar-brand, -.container > .navbar .navbar-brand { - margin-left: -0.75rem; - } - .navbar > .container .navbar-menu, -.container > .navbar .navbar-menu { - margin-right: -0.75rem; - } - .navbar.is-fixed-bottom-desktop, .navbar.is-fixed-top-desktop { - left: 0; - position: fixed; - right: 0; - z-index: 30; - } - .navbar.is-fixed-bottom-desktop { - bottom: 0; - } - .navbar.is-fixed-bottom-desktop.has-shadow { - box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); - } - .navbar.is-fixed-top-desktop { - top: 0; - } - html.has-navbar-fixed-top-desktop, -body.has-navbar-fixed-top-desktop { - padding-top: 3.25rem; - } - html.has-navbar-fixed-bottom-desktop, -body.has-navbar-fixed-bottom-desktop { - padding-bottom: 3.25rem; - } - html.has-spaced-navbar-fixed-top, -body.has-spaced-navbar-fixed-top { - padding-top: 5.25rem; - } - html.has-spaced-navbar-fixed-bottom, -body.has-spaced-navbar-fixed-bottom { - padding-bottom: 5.25rem; - } - a.navbar-item.is-active, -.navbar-link.is-active { - color: hsl(0deg, 0%, 4%); - } - a.navbar-item.is-active:not(:focus):not(:hover), -.navbar-link.is-active:not(:focus):not(:hover) { - background-color: transparent; - } - .navbar-item.has-dropdown:focus .navbar-link, .navbar-item.has-dropdown:hover .navbar-link, .navbar-item.has-dropdown.is-active .navbar-link { - background-color: hsl(0deg, 0%, 98%); - } -} -.hero.is-fullheight-with-navbar { - min-height: calc(100vh - 3.25rem); -} - -.pagination { - font-size: 1rem; - margin: -0.25rem; -} -.pagination.is-small { - font-size: 0.75rem; -} -.pagination.is-medium { - font-size: 1.25rem; -} -.pagination.is-large { - font-size: 1.5rem; -} -.pagination.is-rounded .pagination-previous, -.pagination.is-rounded .pagination-next { - padding-left: 1em; - padding-right: 1em; - border-radius: 9999px; -} -.pagination.is-rounded .pagination-link { - border-radius: 9999px; -} - -.pagination, -.pagination-list { - align-items: center; - display: flex; - justify-content: center; - text-align: center; -} - -.pagination-previous, -.pagination-next, -.pagination-link, -.pagination-ellipsis { - font-size: 1em; - justify-content: center; - margin: 0.25rem; - padding-left: 0.5em; - padding-right: 0.5em; - text-align: center; -} - -.pagination-previous, -.pagination-next, -.pagination-link { - border-color: hsl(0deg, 0%, 86%); - color: hsl(0deg, 0%, 21%); - min-width: 2.5em; -} -.pagination-previous:hover, -.pagination-next:hover, -.pagination-link:hover { - border-color: hsl(0deg, 0%, 71%); - color: hsl(0deg, 0%, 21%); -} -.pagination-previous:focus, -.pagination-next:focus, -.pagination-link:focus { - border-color: hsl(229deg, 53%, 53%); -} -.pagination-previous:active, -.pagination-next:active, -.pagination-link:active { - box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); -} -.pagination-previous[disabled], .pagination-previous.is-disabled, -.pagination-next[disabled], -.pagination-next.is-disabled, -.pagination-link[disabled], -.pagination-link.is-disabled { - background-color: hsl(0deg, 0%, 86%); - border-color: hsl(0deg, 0%, 86%); - box-shadow: none; - color: hsl(0deg, 0%, 48%); - opacity: 0.5; -} - -.pagination-previous, -.pagination-next { - padding-left: 0.75em; - padding-right: 0.75em; - white-space: nowrap; -} - -.pagination-link.is-current { - background-color: hsl(229deg, 53%, 53%); - border-color: hsl(229deg, 53%, 53%); - color: #fff; -} - -.pagination-ellipsis { - color: hsl(0deg, 0%, 71%); - pointer-events: none; -} - -.pagination-list { - flex-wrap: wrap; -} -.pagination-list li { - list-style: none; -} - -@media screen and (max-width: 768px) { - .pagination { - flex-wrap: wrap; - } - .pagination-previous, -.pagination-next { - flex-grow: 1; - flex-shrink: 1; - } - .pagination-list li { - flex-grow: 1; - flex-shrink: 1; - } -} -@media screen and (min-width: 769px), print { - .pagination-list { - flex-grow: 1; - flex-shrink: 1; - justify-content: flex-start; - order: 1; - } - .pagination-previous, -.pagination-next, -.pagination-link, -.pagination-ellipsis { - margin-bottom: 0; - margin-top: 0; - } - .pagination-previous { - order: 2; - } - .pagination-next { - order: 3; - } - .pagination { - justify-content: space-between; - margin-bottom: 0; - margin-top: 0; - } - .pagination.is-centered .pagination-previous { - order: 1; - } - .pagination.is-centered .pagination-list { - justify-content: center; - order: 2; - } - .pagination.is-centered .pagination-next { - order: 3; - } - .pagination.is-right .pagination-previous { - order: 1; - } - .pagination.is-right .pagination-next { - order: 2; - } - .pagination.is-right .pagination-list { - justify-content: flex-end; - order: 3; - } -} -.panel { - border-radius: 6px; - box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02); - font-size: 1rem; -} -.panel:not(:last-child) { - margin-bottom: 1.5rem; -} -.panel.is-white .panel-heading { - background-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 4%); -} -.panel.is-white .panel-tabs a.is-active { - border-bottom-color: hsl(0deg, 0%, 100%); -} -.panel.is-white .panel-block.is-active .panel-icon { - color: hsl(0deg, 0%, 100%); -} -.panel.is-black .panel-heading { - background-color: hsl(0deg, 0%, 4%); - color: hsl(0deg, 0%, 100%); -} -.panel.is-black .panel-tabs a.is-active { - border-bottom-color: hsl(0deg, 0%, 4%); -} -.panel.is-black .panel-block.is-active .panel-icon { - color: hsl(0deg, 0%, 4%); -} -.panel.is-light .panel-heading { - background-color: hsl(0deg, 0%, 96%); - color: rgba(0, 0, 0, 0.7); -} -.panel.is-light .panel-tabs a.is-active { - border-bottom-color: hsl(0deg, 0%, 96%); -} -.panel.is-light .panel-block.is-active .panel-icon { - color: hsl(0deg, 0%, 96%); -} -.panel.is-dark .panel-heading { - background-color: hsl(0deg, 0%, 21%); - color: #fff; -} -.panel.is-dark .panel-tabs a.is-active { - border-bottom-color: hsl(0deg, 0%, 21%); -} -.panel.is-dark .panel-block.is-active .panel-icon { - color: hsl(0deg, 0%, 21%); -} -.panel.is-primary .panel-heading { - background-color: hsl(171deg, 100%, 41%); - color: #fff; -} -.panel.is-primary .panel-tabs a.is-active { - border-bottom-color: hsl(171deg, 100%, 41%); -} -.panel.is-primary .panel-block.is-active .panel-icon { - color: hsl(171deg, 100%, 41%); -} -.panel.is-link .panel-heading { - background-color: hsl(229deg, 53%, 53%); - color: #fff; -} -.panel.is-link .panel-tabs a.is-active { - border-bottom-color: hsl(229deg, 53%, 53%); -} -.panel.is-link .panel-block.is-active .panel-icon { - color: hsl(229deg, 53%, 53%); -} -.panel.is-info .panel-heading { - background-color: hsl(207deg, 61%, 53%); - color: #fff; -} -.panel.is-info .panel-tabs a.is-active { - border-bottom-color: hsl(207deg, 61%, 53%); -} -.panel.is-info .panel-block.is-active .panel-icon { - color: hsl(207deg, 61%, 53%); -} -.panel.is-success .panel-heading { - background-color: hsl(153deg, 53%, 53%); - color: #fff; -} -.panel.is-success .panel-tabs a.is-active { - border-bottom-color: hsl(153deg, 53%, 53%); -} -.panel.is-success .panel-block.is-active .panel-icon { - color: hsl(153deg, 53%, 53%); -} -.panel.is-warning .panel-heading { - background-color: hsl(44deg, 100%, 77%); - color: rgba(0, 0, 0, 0.7); -} -.panel.is-warning .panel-tabs a.is-active { - border-bottom-color: hsl(44deg, 100%, 77%); -} -.panel.is-warning .panel-block.is-active .panel-icon { - color: hsl(44deg, 100%, 77%); -} -.panel.is-danger .panel-heading { - background-color: hsl(348deg, 86%, 61%); - color: #fff; -} -.panel.is-danger .panel-tabs a.is-active { - border-bottom-color: hsl(348deg, 86%, 61%); -} -.panel.is-danger .panel-block.is-active .panel-icon { - color: hsl(348deg, 86%, 61%); -} - -.panel-tabs:not(:last-child), -.panel-block:not(:last-child) { - border-bottom: 1px solid hsl(0deg, 0%, 93%); -} - -.panel-heading { - background-color: hsl(0deg, 0%, 93%); - border-radius: 6px 6px 0 0; - color: hsl(0deg, 0%, 21%); - font-size: 1.25em; - font-weight: 700; - line-height: 1.25; - padding: 0.75em 1em; -} - -.panel-tabs { - align-items: flex-end; - display: flex; - font-size: 0.875em; - justify-content: center; -} -.panel-tabs a { - border-bottom: 1px solid hsl(0deg, 0%, 86%); - margin-bottom: -1px; - padding: 0.5em; -} -.panel-tabs a.is-active { - border-bottom-color: hsl(0deg, 0%, 29%); - color: hsl(0deg, 0%, 21%); -} - -.panel-list a { - color: hsl(0deg, 0%, 29%); -} -.panel-list a:hover { - color: hsl(229deg, 53%, 53%); -} - -.panel-block { - align-items: center; - color: hsl(0deg, 0%, 21%); - display: flex; - justify-content: flex-start; - padding: 0.5em 0.75em; -} -.panel-block input[type=checkbox] { - margin-right: 0.75em; -} -.panel-block > .control { - flex-grow: 1; - flex-shrink: 1; - width: 100%; -} -.panel-block.is-wrapped { - flex-wrap: wrap; -} -.panel-block.is-active { - border-left-color: hsl(229deg, 53%, 53%); - color: hsl(0deg, 0%, 21%); -} -.panel-block.is-active .panel-icon { - color: hsl(229deg, 53%, 53%); -} -.panel-block:last-child { - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; -} - -a.panel-block, -label.panel-block { - cursor: pointer; -} -a.panel-block:hover, -label.panel-block:hover { - background-color: hsl(0deg, 0%, 96%); -} - -.panel-icon { - display: inline-block; - font-size: 14px; - height: 1em; - line-height: 1em; - text-align: center; - vertical-align: top; - width: 1em; - color: hsl(0deg, 0%, 48%); - margin-right: 0.75em; -} -.panel-icon .fa { - font-size: inherit; - line-height: inherit; -} - -.tabs { - -webkit-overflow-scrolling: touch; - align-items: stretch; - display: flex; - font-size: 1rem; - justify-content: space-between; - overflow: hidden; - overflow-x: auto; - white-space: nowrap; -} -.tabs a { - align-items: center; - border-bottom-color: hsl(0deg, 0%, 86%); - border-bottom-style: solid; - border-bottom-width: 1px; - color: hsl(0deg, 0%, 29%); - display: flex; - justify-content: center; - margin-bottom: -1px; - padding: 0.5em 1em; - vertical-align: top; -} -.tabs a:hover { - border-bottom-color: hsl(0deg, 0%, 21%); - color: hsl(0deg, 0%, 21%); -} -.tabs li { - display: block; -} -.tabs li.is-active a { - border-bottom-color: hsl(229deg, 53%, 53%); - color: hsl(229deg, 53%, 53%); -} -.tabs ul { - align-items: center; - border-bottom-color: hsl(0deg, 0%, 86%); - border-bottom-style: solid; - border-bottom-width: 1px; - display: flex; - flex-grow: 1; - flex-shrink: 0; - justify-content: flex-start; -} -.tabs ul.is-left { - padding-right: 0.75em; -} -.tabs ul.is-center { - flex: none; - justify-content: center; - padding-left: 0.75em; - padding-right: 0.75em; -} -.tabs ul.is-right { - justify-content: flex-end; - padding-left: 0.75em; -} -.tabs .icon:first-child { - margin-right: 0.5em; -} -.tabs .icon:last-child { - margin-left: 0.5em; -} -.tabs.is-centered ul { - justify-content: center; -} -.tabs.is-right ul { - justify-content: flex-end; -} -.tabs.is-boxed a { - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.tabs.is-boxed a:hover { - background-color: hsl(0deg, 0%, 96%); - border-bottom-color: hsl(0deg, 0%, 86%); -} -.tabs.is-boxed li.is-active a { - background-color: hsl(0deg, 0%, 100%); - border-color: hsl(0deg, 0%, 86%); - border-bottom-color: transparent !important; -} -.tabs.is-fullwidth li { - flex-grow: 1; - flex-shrink: 0; -} -.tabs.is-toggle a { - border-color: hsl(0deg, 0%, 86%); - border-style: solid; - border-width: 1px; - margin-bottom: 0; - position: relative; -} -.tabs.is-toggle a:hover { - background-color: hsl(0deg, 0%, 96%); - border-color: hsl(0deg, 0%, 71%); - z-index: 2; -} -.tabs.is-toggle li + li { - margin-left: -1px; -} -.tabs.is-toggle li:first-child a { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} -.tabs.is-toggle li:last-child a { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} -.tabs.is-toggle li.is-active a { - background-color: hsl(229deg, 53%, 53%); - border-color: hsl(229deg, 53%, 53%); - color: #fff; - z-index: 1; -} -.tabs.is-toggle ul { - border-bottom: none; -} -.tabs.is-toggle.is-toggle-rounded li:first-child a { - border-bottom-left-radius: 9999px; - border-top-left-radius: 9999px; - padding-left: 1.25em; -} -.tabs.is-toggle.is-toggle-rounded li:last-child a { - border-bottom-right-radius: 9999px; - border-top-right-radius: 9999px; - padding-right: 1.25em; -} -.tabs.is-small { - font-size: 0.75rem; -} -.tabs.is-medium { - font-size: 1.25rem; -} -.tabs.is-large { - font-size: 1.5rem; -} - -/* Bulma Grid */ -.column { - display: block; - flex-basis: 0; - flex-grow: 1; - flex-shrink: 1; - padding: 0.75rem; -} -.columns.is-mobile > .column.is-narrow { - flex: none; - width: unset; -} -.columns.is-mobile > .column.is-full { - flex: none; - width: 100%; -} -.columns.is-mobile > .column.is-three-quarters { - flex: none; - width: 75%; -} -.columns.is-mobile > .column.is-two-thirds { - flex: none; - width: 66.6666%; -} -.columns.is-mobile > .column.is-half { - flex: none; - width: 50%; -} -.columns.is-mobile > .column.is-one-third { - flex: none; - width: 33.3333%; -} -.columns.is-mobile > .column.is-one-quarter { - flex: none; - width: 25%; -} -.columns.is-mobile > .column.is-one-fifth { - flex: none; - width: 20%; -} -.columns.is-mobile > .column.is-two-fifths { - flex: none; - width: 40%; -} -.columns.is-mobile > .column.is-three-fifths { - flex: none; - width: 60%; -} -.columns.is-mobile > .column.is-four-fifths { - flex: none; - width: 80%; -} -.columns.is-mobile > .column.is-offset-three-quarters { - margin-left: 75%; -} -.columns.is-mobile > .column.is-offset-two-thirds { - margin-left: 66.6666%; -} -.columns.is-mobile > .column.is-offset-half { - margin-left: 50%; -} -.columns.is-mobile > .column.is-offset-one-third { - margin-left: 33.3333%; -} -.columns.is-mobile > .column.is-offset-one-quarter { - margin-left: 25%; -} -.columns.is-mobile > .column.is-offset-one-fifth { - margin-left: 20%; -} -.columns.is-mobile > .column.is-offset-two-fifths { - margin-left: 40%; -} -.columns.is-mobile > .column.is-offset-three-fifths { - margin-left: 60%; -} -.columns.is-mobile > .column.is-offset-four-fifths { - margin-left: 80%; -} -.columns.is-mobile > .column.is-0 { - flex: none; - width: 0%; -} -.columns.is-mobile > .column.is-offset-0 { - margin-left: 0%; -} -.columns.is-mobile > .column.is-1 { - flex: none; - width: 8.33333337%; -} -.columns.is-mobile > .column.is-offset-1 { - margin-left: 8.33333337%; -} -.columns.is-mobile > .column.is-2 { - flex: none; - width: 16.66666674%; -} -.columns.is-mobile > .column.is-offset-2 { - margin-left: 16.66666674%; -} -.columns.is-mobile > .column.is-3 { - flex: none; - width: 25%; -} -.columns.is-mobile > .column.is-offset-3 { - margin-left: 25%; -} -.columns.is-mobile > .column.is-4 { - flex: none; - width: 33.33333337%; -} -.columns.is-mobile > .column.is-offset-4 { - margin-left: 33.33333337%; -} -.columns.is-mobile > .column.is-5 { - flex: none; - width: 41.66666674%; -} -.columns.is-mobile > .column.is-offset-5 { - margin-left: 41.66666674%; -} -.columns.is-mobile > .column.is-6 { - flex: none; - width: 50%; -} -.columns.is-mobile > .column.is-offset-6 { - margin-left: 50%; -} -.columns.is-mobile > .column.is-7 { - flex: none; - width: 58.33333337%; -} -.columns.is-mobile > .column.is-offset-7 { - margin-left: 58.33333337%; -} -.columns.is-mobile > .column.is-8 { - flex: none; - width: 66.66666674%; -} -.columns.is-mobile > .column.is-offset-8 { - margin-left: 66.66666674%; -} -.columns.is-mobile > .column.is-9 { - flex: none; - width: 75%; -} -.columns.is-mobile > .column.is-offset-9 { - margin-left: 75%; -} -.columns.is-mobile > .column.is-10 { - flex: none; - width: 83.33333337%; -} -.columns.is-mobile > .column.is-offset-10 { - margin-left: 83.33333337%; -} -.columns.is-mobile > .column.is-11 { - flex: none; - width: 91.66666674%; -} -.columns.is-mobile > .column.is-offset-11 { - margin-left: 91.66666674%; -} -.columns.is-mobile > .column.is-12 { - flex: none; - width: 100%; -} -.columns.is-mobile > .column.is-offset-12 { - margin-left: 100%; -} -@media screen and (max-width: 768px) { - .column.is-narrow-mobile { - flex: none; - width: unset; - } - .column.is-full-mobile { - flex: none; - width: 100%; - } - .column.is-three-quarters-mobile { - flex: none; - width: 75%; - } - .column.is-two-thirds-mobile { - flex: none; - width: 66.6666%; - } - .column.is-half-mobile { - flex: none; - width: 50%; - } - .column.is-one-third-mobile { - flex: none; - width: 33.3333%; - } - .column.is-one-quarter-mobile { - flex: none; - width: 25%; - } - .column.is-one-fifth-mobile { - flex: none; - width: 20%; - } - .column.is-two-fifths-mobile { - flex: none; - width: 40%; - } - .column.is-three-fifths-mobile { - flex: none; - width: 60%; - } - .column.is-four-fifths-mobile { - flex: none; - width: 80%; - } - .column.is-offset-three-quarters-mobile { - margin-left: 75%; - } - .column.is-offset-two-thirds-mobile { - margin-left: 66.6666%; - } - .column.is-offset-half-mobile { - margin-left: 50%; - } - .column.is-offset-one-third-mobile { - margin-left: 33.3333%; - } - .column.is-offset-one-quarter-mobile { - margin-left: 25%; - } - .column.is-offset-one-fifth-mobile { - margin-left: 20%; - } - .column.is-offset-two-fifths-mobile { - margin-left: 40%; - } - .column.is-offset-three-fifths-mobile { - margin-left: 60%; - } - .column.is-offset-four-fifths-mobile { - margin-left: 80%; - } - .column.is-0-mobile { - flex: none; - width: 0%; - } - .column.is-offset-0-mobile { - margin-left: 0%; - } - .column.is-1-mobile { - flex: none; - width: 8.33333337%; - } - .column.is-offset-1-mobile { - margin-left: 8.33333337%; - } - .column.is-2-mobile { - flex: none; - width: 16.66666674%; - } - .column.is-offset-2-mobile { - margin-left: 16.66666674%; - } - .column.is-3-mobile { - flex: none; - width: 25%; - } - .column.is-offset-3-mobile { - margin-left: 25%; - } - .column.is-4-mobile { - flex: none; - width: 33.33333337%; - } - .column.is-offset-4-mobile { - margin-left: 33.33333337%; - } - .column.is-5-mobile { - flex: none; - width: 41.66666674%; - } - .column.is-offset-5-mobile { - margin-left: 41.66666674%; - } - .column.is-6-mobile { - flex: none; - width: 50%; - } - .column.is-offset-6-mobile { - margin-left: 50%; - } - .column.is-7-mobile { - flex: none; - width: 58.33333337%; - } - .column.is-offset-7-mobile { - margin-left: 58.33333337%; - } - .column.is-8-mobile { - flex: none; - width: 66.66666674%; - } - .column.is-offset-8-mobile { - margin-left: 66.66666674%; - } - .column.is-9-mobile { - flex: none; - width: 75%; - } - .column.is-offset-9-mobile { - margin-left: 75%; - } - .column.is-10-mobile { - flex: none; - width: 83.33333337%; - } - .column.is-offset-10-mobile { - margin-left: 83.33333337%; - } - .column.is-11-mobile { - flex: none; - width: 91.66666674%; - } - .column.is-offset-11-mobile { - margin-left: 91.66666674%; - } - .column.is-12-mobile { - flex: none; - width: 100%; - } - .column.is-offset-12-mobile { - margin-left: 100%; - } -} -@media screen and (min-width: 769px), print { - .column.is-narrow, .column.is-narrow-tablet { - flex: none; - width: unset; - } - .column.is-full, .column.is-full-tablet { - flex: none; - width: 100%; - } - .column.is-three-quarters, .column.is-three-quarters-tablet { - flex: none; - width: 75%; - } - .column.is-two-thirds, .column.is-two-thirds-tablet { - flex: none; - width: 66.6666%; - } - .column.is-half, .column.is-half-tablet { - flex: none; - width: 50%; - } - .column.is-one-third, .column.is-one-third-tablet { - flex: none; - width: 33.3333%; - } - .column.is-one-quarter, .column.is-one-quarter-tablet { - flex: none; - width: 25%; - } - .column.is-one-fifth, .column.is-one-fifth-tablet { - flex: none; - width: 20%; - } - .column.is-two-fifths, .column.is-two-fifths-tablet { - flex: none; - width: 40%; - } - .column.is-three-fifths, .column.is-three-fifths-tablet { - flex: none; - width: 60%; - } - .column.is-four-fifths, .column.is-four-fifths-tablet { - flex: none; - width: 80%; - } - .column.is-offset-three-quarters, .column.is-offset-three-quarters-tablet { - margin-left: 75%; - } - .column.is-offset-two-thirds, .column.is-offset-two-thirds-tablet { - margin-left: 66.6666%; - } - .column.is-offset-half, .column.is-offset-half-tablet { - margin-left: 50%; - } - .column.is-offset-one-third, .column.is-offset-one-third-tablet { - margin-left: 33.3333%; - } - .column.is-offset-one-quarter, .column.is-offset-one-quarter-tablet { - margin-left: 25%; - } - .column.is-offset-one-fifth, .column.is-offset-one-fifth-tablet { - margin-left: 20%; - } - .column.is-offset-two-fifths, .column.is-offset-two-fifths-tablet { - margin-left: 40%; - } - .column.is-offset-three-fifths, .column.is-offset-three-fifths-tablet { - margin-left: 60%; - } - .column.is-offset-four-fifths, .column.is-offset-four-fifths-tablet { - margin-left: 80%; - } - .column.is-0, .column.is-0-tablet { - flex: none; - width: 0%; - } - .column.is-offset-0, .column.is-offset-0-tablet { - margin-left: 0%; - } - .column.is-1, .column.is-1-tablet { - flex: none; - width: 8.33333337%; - } - .column.is-offset-1, .column.is-offset-1-tablet { - margin-left: 8.33333337%; - } - .column.is-2, .column.is-2-tablet { - flex: none; - width: 16.66666674%; - } - .column.is-offset-2, .column.is-offset-2-tablet { - margin-left: 16.66666674%; - } - .column.is-3, .column.is-3-tablet { - flex: none; - width: 25%; - } - .column.is-offset-3, .column.is-offset-3-tablet { - margin-left: 25%; - } - .column.is-4, .column.is-4-tablet { - flex: none; - width: 33.33333337%; - } - .column.is-offset-4, .column.is-offset-4-tablet { - margin-left: 33.33333337%; - } - .column.is-5, .column.is-5-tablet { - flex: none; - width: 41.66666674%; - } - .column.is-offset-5, .column.is-offset-5-tablet { - margin-left: 41.66666674%; - } - .column.is-6, .column.is-6-tablet { - flex: none; - width: 50%; - } - .column.is-offset-6, .column.is-offset-6-tablet { - margin-left: 50%; - } - .column.is-7, .column.is-7-tablet { - flex: none; - width: 58.33333337%; - } - .column.is-offset-7, .column.is-offset-7-tablet { - margin-left: 58.33333337%; - } - .column.is-8, .column.is-8-tablet { - flex: none; - width: 66.66666674%; - } - .column.is-offset-8, .column.is-offset-8-tablet { - margin-left: 66.66666674%; - } - .column.is-9, .column.is-9-tablet { - flex: none; - width: 75%; - } - .column.is-offset-9, .column.is-offset-9-tablet { - margin-left: 75%; - } - .column.is-10, .column.is-10-tablet { - flex: none; - width: 83.33333337%; - } - .column.is-offset-10, .column.is-offset-10-tablet { - margin-left: 83.33333337%; - } - .column.is-11, .column.is-11-tablet { - flex: none; - width: 91.66666674%; - } - .column.is-offset-11, .column.is-offset-11-tablet { - margin-left: 91.66666674%; - } - .column.is-12, .column.is-12-tablet { - flex: none; - width: 100%; - } - .column.is-offset-12, .column.is-offset-12-tablet { - margin-left: 100%; - } -} -@media screen and (max-width: 1023px) { - .column.is-narrow-touch { - flex: none; - width: unset; - } - .column.is-full-touch { - flex: none; - width: 100%; - } - .column.is-three-quarters-touch { - flex: none; - width: 75%; - } - .column.is-two-thirds-touch { - flex: none; - width: 66.6666%; - } - .column.is-half-touch { - flex: none; - width: 50%; - } - .column.is-one-third-touch { - flex: none; - width: 33.3333%; - } - .column.is-one-quarter-touch { - flex: none; - width: 25%; - } - .column.is-one-fifth-touch { - flex: none; - width: 20%; - } - .column.is-two-fifths-touch { - flex: none; - width: 40%; - } - .column.is-three-fifths-touch { - flex: none; - width: 60%; - } - .column.is-four-fifths-touch { - flex: none; - width: 80%; - } - .column.is-offset-three-quarters-touch { - margin-left: 75%; - } - .column.is-offset-two-thirds-touch { - margin-left: 66.6666%; - } - .column.is-offset-half-touch { - margin-left: 50%; - } - .column.is-offset-one-third-touch { - margin-left: 33.3333%; - } - .column.is-offset-one-quarter-touch { - margin-left: 25%; - } - .column.is-offset-one-fifth-touch { - margin-left: 20%; - } - .column.is-offset-two-fifths-touch { - margin-left: 40%; - } - .column.is-offset-three-fifths-touch { - margin-left: 60%; - } - .column.is-offset-four-fifths-touch { - margin-left: 80%; - } - .column.is-0-touch { - flex: none; - width: 0%; - } - .column.is-offset-0-touch { - margin-left: 0%; - } - .column.is-1-touch { - flex: none; - width: 8.33333337%; - } - .column.is-offset-1-touch { - margin-left: 8.33333337%; - } - .column.is-2-touch { - flex: none; - width: 16.66666674%; - } - .column.is-offset-2-touch { - margin-left: 16.66666674%; - } - .column.is-3-touch { - flex: none; - width: 25%; - } - .column.is-offset-3-touch { - margin-left: 25%; - } - .column.is-4-touch { - flex: none; - width: 33.33333337%; - } - .column.is-offset-4-touch { - margin-left: 33.33333337%; - } - .column.is-5-touch { - flex: none; - width: 41.66666674%; - } - .column.is-offset-5-touch { - margin-left: 41.66666674%; - } - .column.is-6-touch { - flex: none; - width: 50%; - } - .column.is-offset-6-touch { - margin-left: 50%; - } - .column.is-7-touch { - flex: none; - width: 58.33333337%; - } - .column.is-offset-7-touch { - margin-left: 58.33333337%; - } - .column.is-8-touch { - flex: none; - width: 66.66666674%; - } - .column.is-offset-8-touch { - margin-left: 66.66666674%; - } - .column.is-9-touch { - flex: none; - width: 75%; - } - .column.is-offset-9-touch { - margin-left: 75%; - } - .column.is-10-touch { - flex: none; - width: 83.33333337%; - } - .column.is-offset-10-touch { - margin-left: 83.33333337%; - } - .column.is-11-touch { - flex: none; - width: 91.66666674%; - } - .column.is-offset-11-touch { - margin-left: 91.66666674%; - } - .column.is-12-touch { - flex: none; - width: 100%; - } - .column.is-offset-12-touch { - margin-left: 100%; - } -} -@media screen and (min-width: 1024px) { - .column.is-narrow-desktop { - flex: none; - width: unset; - } - .column.is-full-desktop { - flex: none; - width: 100%; - } - .column.is-three-quarters-desktop { - flex: none; - width: 75%; - } - .column.is-two-thirds-desktop { - flex: none; - width: 66.6666%; - } - .column.is-half-desktop { - flex: none; - width: 50%; - } - .column.is-one-third-desktop { - flex: none; - width: 33.3333%; - } - .column.is-one-quarter-desktop { - flex: none; - width: 25%; - } - .column.is-one-fifth-desktop { - flex: none; - width: 20%; - } - .column.is-two-fifths-desktop { - flex: none; - width: 40%; - } - .column.is-three-fifths-desktop { - flex: none; - width: 60%; - } - .column.is-four-fifths-desktop { - flex: none; - width: 80%; - } - .column.is-offset-three-quarters-desktop { - margin-left: 75%; - } - .column.is-offset-two-thirds-desktop { - margin-left: 66.6666%; - } - .column.is-offset-half-desktop { - margin-left: 50%; - } - .column.is-offset-one-third-desktop { - margin-left: 33.3333%; - } - .column.is-offset-one-quarter-desktop { - margin-left: 25%; - } - .column.is-offset-one-fifth-desktop { - margin-left: 20%; - } - .column.is-offset-two-fifths-desktop { - margin-left: 40%; - } - .column.is-offset-three-fifths-desktop { - margin-left: 60%; - } - .column.is-offset-four-fifths-desktop { - margin-left: 80%; - } - .column.is-0-desktop { - flex: none; - width: 0%; - } - .column.is-offset-0-desktop { - margin-left: 0%; - } - .column.is-1-desktop { - flex: none; - width: 8.33333337%; - } - .column.is-offset-1-desktop { - margin-left: 8.33333337%; - } - .column.is-2-desktop { - flex: none; - width: 16.66666674%; - } - .column.is-offset-2-desktop { - margin-left: 16.66666674%; - } - .column.is-3-desktop { - flex: none; - width: 25%; - } - .column.is-offset-3-desktop { - margin-left: 25%; - } - .column.is-4-desktop { - flex: none; - width: 33.33333337%; - } - .column.is-offset-4-desktop { - margin-left: 33.33333337%; - } - .column.is-5-desktop { - flex: none; - width: 41.66666674%; - } - .column.is-offset-5-desktop { - margin-left: 41.66666674%; - } - .column.is-6-desktop { - flex: none; - width: 50%; - } - .column.is-offset-6-desktop { - margin-left: 50%; - } - .column.is-7-desktop { - flex: none; - width: 58.33333337%; - } - .column.is-offset-7-desktop { - margin-left: 58.33333337%; - } - .column.is-8-desktop { - flex: none; - width: 66.66666674%; - } - .column.is-offset-8-desktop { - margin-left: 66.66666674%; - } - .column.is-9-desktop { - flex: none; - width: 75%; - } - .column.is-offset-9-desktop { - margin-left: 75%; - } - .column.is-10-desktop { - flex: none; - width: 83.33333337%; - } - .column.is-offset-10-desktop { - margin-left: 83.33333337%; - } - .column.is-11-desktop { - flex: none; - width: 91.66666674%; - } - .column.is-offset-11-desktop { - margin-left: 91.66666674%; - } - .column.is-12-desktop { - flex: none; - width: 100%; - } - .column.is-offset-12-desktop { - margin-left: 100%; - } -} -@media screen and (min-width: 1216px) { - .column.is-narrow-widescreen { - flex: none; - width: unset; - } - .column.is-full-widescreen { - flex: none; - width: 100%; - } - .column.is-three-quarters-widescreen { - flex: none; - width: 75%; - } - .column.is-two-thirds-widescreen { - flex: none; - width: 66.6666%; - } - .column.is-half-widescreen { - flex: none; - width: 50%; - } - .column.is-one-third-widescreen { - flex: none; - width: 33.3333%; - } - .column.is-one-quarter-widescreen { - flex: none; - width: 25%; - } - .column.is-one-fifth-widescreen { - flex: none; - width: 20%; - } - .column.is-two-fifths-widescreen { - flex: none; - width: 40%; - } - .column.is-three-fifths-widescreen { - flex: none; - width: 60%; - } - .column.is-four-fifths-widescreen { - flex: none; - width: 80%; - } - .column.is-offset-three-quarters-widescreen { - margin-left: 75%; - } - .column.is-offset-two-thirds-widescreen { - margin-left: 66.6666%; - } - .column.is-offset-half-widescreen { - margin-left: 50%; - } - .column.is-offset-one-third-widescreen { - margin-left: 33.3333%; - } - .column.is-offset-one-quarter-widescreen { - margin-left: 25%; - } - .column.is-offset-one-fifth-widescreen { - margin-left: 20%; - } - .column.is-offset-two-fifths-widescreen { - margin-left: 40%; - } - .column.is-offset-three-fifths-widescreen { - margin-left: 60%; - } - .column.is-offset-four-fifths-widescreen { - margin-left: 80%; - } - .column.is-0-widescreen { - flex: none; - width: 0%; - } - .column.is-offset-0-widescreen { - margin-left: 0%; - } - .column.is-1-widescreen { - flex: none; - width: 8.33333337%; - } - .column.is-offset-1-widescreen { - margin-left: 8.33333337%; - } - .column.is-2-widescreen { - flex: none; - width: 16.66666674%; - } - .column.is-offset-2-widescreen { - margin-left: 16.66666674%; - } - .column.is-3-widescreen { - flex: none; - width: 25%; - } - .column.is-offset-3-widescreen { - margin-left: 25%; - } - .column.is-4-widescreen { - flex: none; - width: 33.33333337%; - } - .column.is-offset-4-widescreen { - margin-left: 33.33333337%; - } - .column.is-5-widescreen { - flex: none; - width: 41.66666674%; - } - .column.is-offset-5-widescreen { - margin-left: 41.66666674%; - } - .column.is-6-widescreen { - flex: none; - width: 50%; - } - .column.is-offset-6-widescreen { - margin-left: 50%; - } - .column.is-7-widescreen { - flex: none; - width: 58.33333337%; - } - .column.is-offset-7-widescreen { - margin-left: 58.33333337%; - } - .column.is-8-widescreen { - flex: none; - width: 66.66666674%; - } - .column.is-offset-8-widescreen { - margin-left: 66.66666674%; - } - .column.is-9-widescreen { - flex: none; - width: 75%; - } - .column.is-offset-9-widescreen { - margin-left: 75%; - } - .column.is-10-widescreen { - flex: none; - width: 83.33333337%; - } - .column.is-offset-10-widescreen { - margin-left: 83.33333337%; - } - .column.is-11-widescreen { - flex: none; - width: 91.66666674%; - } - .column.is-offset-11-widescreen { - margin-left: 91.66666674%; - } - .column.is-12-widescreen { - flex: none; - width: 100%; - } - .column.is-offset-12-widescreen { - margin-left: 100%; - } -} -@media screen and (min-width: 1408px) { - .column.is-narrow-fullhd { - flex: none; - width: unset; - } - .column.is-full-fullhd { - flex: none; - width: 100%; - } - .column.is-three-quarters-fullhd { - flex: none; - width: 75%; - } - .column.is-two-thirds-fullhd { - flex: none; - width: 66.6666%; - } - .column.is-half-fullhd { - flex: none; - width: 50%; - } - .column.is-one-third-fullhd { - flex: none; - width: 33.3333%; - } - .column.is-one-quarter-fullhd { - flex: none; - width: 25%; - } - .column.is-one-fifth-fullhd { - flex: none; - width: 20%; - } - .column.is-two-fifths-fullhd { - flex: none; - width: 40%; - } - .column.is-three-fifths-fullhd { - flex: none; - width: 60%; - } - .column.is-four-fifths-fullhd { - flex: none; - width: 80%; - } - .column.is-offset-three-quarters-fullhd { - margin-left: 75%; - } - .column.is-offset-two-thirds-fullhd { - margin-left: 66.6666%; - } - .column.is-offset-half-fullhd { - margin-left: 50%; - } - .column.is-offset-one-third-fullhd { - margin-left: 33.3333%; - } - .column.is-offset-one-quarter-fullhd { - margin-left: 25%; - } - .column.is-offset-one-fifth-fullhd { - margin-left: 20%; - } - .column.is-offset-two-fifths-fullhd { - margin-left: 40%; - } - .column.is-offset-three-fifths-fullhd { - margin-left: 60%; - } - .column.is-offset-four-fifths-fullhd { - margin-left: 80%; - } - .column.is-0-fullhd { - flex: none; - width: 0%; - } - .column.is-offset-0-fullhd { - margin-left: 0%; - } - .column.is-1-fullhd { - flex: none; - width: 8.33333337%; - } - .column.is-offset-1-fullhd { - margin-left: 8.33333337%; - } - .column.is-2-fullhd { - flex: none; - width: 16.66666674%; - } - .column.is-offset-2-fullhd { - margin-left: 16.66666674%; - } - .column.is-3-fullhd { - flex: none; - width: 25%; - } - .column.is-offset-3-fullhd { - margin-left: 25%; - } - .column.is-4-fullhd { - flex: none; - width: 33.33333337%; - } - .column.is-offset-4-fullhd { - margin-left: 33.33333337%; - } - .column.is-5-fullhd { - flex: none; - width: 41.66666674%; - } - .column.is-offset-5-fullhd { - margin-left: 41.66666674%; - } - .column.is-6-fullhd { - flex: none; - width: 50%; - } - .column.is-offset-6-fullhd { - margin-left: 50%; - } - .column.is-7-fullhd { - flex: none; - width: 58.33333337%; - } - .column.is-offset-7-fullhd { - margin-left: 58.33333337%; - } - .column.is-8-fullhd { - flex: none; - width: 66.66666674%; - } - .column.is-offset-8-fullhd { - margin-left: 66.66666674%; - } - .column.is-9-fullhd { - flex: none; - width: 75%; - } - .column.is-offset-9-fullhd { - margin-left: 75%; - } - .column.is-10-fullhd { - flex: none; - width: 83.33333337%; - } - .column.is-offset-10-fullhd { - margin-left: 83.33333337%; - } - .column.is-11-fullhd { - flex: none; - width: 91.66666674%; - } - .column.is-offset-11-fullhd { - margin-left: 91.66666674%; - } - .column.is-12-fullhd { - flex: none; - width: 100%; - } - .column.is-offset-12-fullhd { - margin-left: 100%; - } -} - -.columns { - margin-left: -0.75rem; - margin-right: -0.75rem; - margin-top: -0.75rem; -} -.columns:last-child { - margin-bottom: -0.75rem; -} -.columns:not(:last-child) { - margin-bottom: calc(1.5rem - 0.75rem); -} -.columns.is-centered { - justify-content: center; -} -.columns.is-gapless { - margin-left: 0; - margin-right: 0; - margin-top: 0; -} -.columns.is-gapless > .column { - margin: 0; - padding: 0 !important; -} -.columns.is-gapless:not(:last-child) { - margin-bottom: 1.5rem; -} -.columns.is-gapless:last-child { - margin-bottom: 0; -} -.columns.is-mobile { - display: flex; -} -.columns.is-multiline { - flex-wrap: wrap; -} -.columns.is-vcentered { - align-items: center; -} -@media screen and (min-width: 769px), print { - .columns:not(.is-desktop) { - display: flex; - } -} -@media screen and (min-width: 1024px) { - .columns.is-desktop { - display: flex; - } -} - -.columns.is-variable { - --columnGap: 0.75rem; - margin-left: calc(-1 * var(--columnGap)); - margin-right: calc(-1 * var(--columnGap)); -} -.columns.is-variable > .column { - padding-left: var(--columnGap); - padding-right: var(--columnGap); -} -.columns.is-variable.is-0 { - --columnGap: 0rem; -} -@media screen and (max-width: 768px) { - .columns.is-variable.is-0-mobile { - --columnGap: 0rem; - } -} -@media screen and (min-width: 769px), print { - .columns.is-variable.is-0-tablet { - --columnGap: 0rem; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-0-tablet-only { - --columnGap: 0rem; - } -} -@media screen and (max-width: 1023px) { - .columns.is-variable.is-0-touch { - --columnGap: 0rem; - } -} -@media screen and (min-width: 1024px) { - .columns.is-variable.is-0-desktop { - --columnGap: 0rem; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-0-desktop-only { - --columnGap: 0rem; - } -} -@media screen and (min-width: 1216px) { - .columns.is-variable.is-0-widescreen { - --columnGap: 0rem; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-0-widescreen-only { - --columnGap: 0rem; - } -} -@media screen and (min-width: 1408px) { - .columns.is-variable.is-0-fullhd { - --columnGap: 0rem; - } -} -.columns.is-variable.is-1 { - --columnGap: 0.25rem; -} -@media screen and (max-width: 768px) { - .columns.is-variable.is-1-mobile { - --columnGap: 0.25rem; - } -} -@media screen and (min-width: 769px), print { - .columns.is-variable.is-1-tablet { - --columnGap: 0.25rem; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-1-tablet-only { - --columnGap: 0.25rem; - } -} -@media screen and (max-width: 1023px) { - .columns.is-variable.is-1-touch { - --columnGap: 0.25rem; - } -} -@media screen and (min-width: 1024px) { - .columns.is-variable.is-1-desktop { - --columnGap: 0.25rem; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-1-desktop-only { - --columnGap: 0.25rem; - } -} -@media screen and (min-width: 1216px) { - .columns.is-variable.is-1-widescreen { - --columnGap: 0.25rem; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-1-widescreen-only { - --columnGap: 0.25rem; - } -} -@media screen and (min-width: 1408px) { - .columns.is-variable.is-1-fullhd { - --columnGap: 0.25rem; - } -} -.columns.is-variable.is-2 { - --columnGap: 0.5rem; -} -@media screen and (max-width: 768px) { - .columns.is-variable.is-2-mobile { - --columnGap: 0.5rem; - } -} -@media screen and (min-width: 769px), print { - .columns.is-variable.is-2-tablet { - --columnGap: 0.5rem; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-2-tablet-only { - --columnGap: 0.5rem; - } -} -@media screen and (max-width: 1023px) { - .columns.is-variable.is-2-touch { - --columnGap: 0.5rem; - } -} -@media screen and (min-width: 1024px) { - .columns.is-variable.is-2-desktop { - --columnGap: 0.5rem; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-2-desktop-only { - --columnGap: 0.5rem; - } -} -@media screen and (min-width: 1216px) { - .columns.is-variable.is-2-widescreen { - --columnGap: 0.5rem; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-2-widescreen-only { - --columnGap: 0.5rem; - } -} -@media screen and (min-width: 1408px) { - .columns.is-variable.is-2-fullhd { - --columnGap: 0.5rem; - } -} -.columns.is-variable.is-3 { - --columnGap: 0.75rem; -} -@media screen and (max-width: 768px) { - .columns.is-variable.is-3-mobile { - --columnGap: 0.75rem; - } -} -@media screen and (min-width: 769px), print { - .columns.is-variable.is-3-tablet { - --columnGap: 0.75rem; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-3-tablet-only { - --columnGap: 0.75rem; - } -} -@media screen and (max-width: 1023px) { - .columns.is-variable.is-3-touch { - --columnGap: 0.75rem; - } -} -@media screen and (min-width: 1024px) { - .columns.is-variable.is-3-desktop { - --columnGap: 0.75rem; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-3-desktop-only { - --columnGap: 0.75rem; - } -} -@media screen and (min-width: 1216px) { - .columns.is-variable.is-3-widescreen { - --columnGap: 0.75rem; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-3-widescreen-only { - --columnGap: 0.75rem; - } -} -@media screen and (min-width: 1408px) { - .columns.is-variable.is-3-fullhd { - --columnGap: 0.75rem; - } -} -.columns.is-variable.is-4 { - --columnGap: 1rem; -} -@media screen and (max-width: 768px) { - .columns.is-variable.is-4-mobile { - --columnGap: 1rem; - } -} -@media screen and (min-width: 769px), print { - .columns.is-variable.is-4-tablet { - --columnGap: 1rem; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-4-tablet-only { - --columnGap: 1rem; - } -} -@media screen and (max-width: 1023px) { - .columns.is-variable.is-4-touch { - --columnGap: 1rem; - } -} -@media screen and (min-width: 1024px) { - .columns.is-variable.is-4-desktop { - --columnGap: 1rem; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-4-desktop-only { - --columnGap: 1rem; - } -} -@media screen and (min-width: 1216px) { - .columns.is-variable.is-4-widescreen { - --columnGap: 1rem; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-4-widescreen-only { - --columnGap: 1rem; - } -} -@media screen and (min-width: 1408px) { - .columns.is-variable.is-4-fullhd { - --columnGap: 1rem; - } -} -.columns.is-variable.is-5 { - --columnGap: 1.25rem; -} -@media screen and (max-width: 768px) { - .columns.is-variable.is-5-mobile { - --columnGap: 1.25rem; - } -} -@media screen and (min-width: 769px), print { - .columns.is-variable.is-5-tablet { - --columnGap: 1.25rem; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-5-tablet-only { - --columnGap: 1.25rem; - } -} -@media screen and (max-width: 1023px) { - .columns.is-variable.is-5-touch { - --columnGap: 1.25rem; - } -} -@media screen and (min-width: 1024px) { - .columns.is-variable.is-5-desktop { - --columnGap: 1.25rem; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-5-desktop-only { - --columnGap: 1.25rem; - } -} -@media screen and (min-width: 1216px) { - .columns.is-variable.is-5-widescreen { - --columnGap: 1.25rem; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-5-widescreen-only { - --columnGap: 1.25rem; - } -} -@media screen and (min-width: 1408px) { - .columns.is-variable.is-5-fullhd { - --columnGap: 1.25rem; - } -} -.columns.is-variable.is-6 { - --columnGap: 1.5rem; -} -@media screen and (max-width: 768px) { - .columns.is-variable.is-6-mobile { - --columnGap: 1.5rem; - } -} -@media screen and (min-width: 769px), print { - .columns.is-variable.is-6-tablet { - --columnGap: 1.5rem; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-6-tablet-only { - --columnGap: 1.5rem; - } -} -@media screen and (max-width: 1023px) { - .columns.is-variable.is-6-touch { - --columnGap: 1.5rem; - } -} -@media screen and (min-width: 1024px) { - .columns.is-variable.is-6-desktop { - --columnGap: 1.5rem; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-6-desktop-only { - --columnGap: 1.5rem; - } -} -@media screen and (min-width: 1216px) { - .columns.is-variable.is-6-widescreen { - --columnGap: 1.5rem; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-6-widescreen-only { - --columnGap: 1.5rem; - } -} -@media screen and (min-width: 1408px) { - .columns.is-variable.is-6-fullhd { - --columnGap: 1.5rem; - } -} -.columns.is-variable.is-7 { - --columnGap: 1.75rem; -} -@media screen and (max-width: 768px) { - .columns.is-variable.is-7-mobile { - --columnGap: 1.75rem; - } -} -@media screen and (min-width: 769px), print { - .columns.is-variable.is-7-tablet { - --columnGap: 1.75rem; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-7-tablet-only { - --columnGap: 1.75rem; - } -} -@media screen and (max-width: 1023px) { - .columns.is-variable.is-7-touch { - --columnGap: 1.75rem; - } -} -@media screen and (min-width: 1024px) { - .columns.is-variable.is-7-desktop { - --columnGap: 1.75rem; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-7-desktop-only { - --columnGap: 1.75rem; - } -} -@media screen and (min-width: 1216px) { - .columns.is-variable.is-7-widescreen { - --columnGap: 1.75rem; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-7-widescreen-only { - --columnGap: 1.75rem; - } -} -@media screen and (min-width: 1408px) { - .columns.is-variable.is-7-fullhd { - --columnGap: 1.75rem; - } -} -.columns.is-variable.is-8 { - --columnGap: 2rem; -} -@media screen and (max-width: 768px) { - .columns.is-variable.is-8-mobile { - --columnGap: 2rem; - } -} -@media screen and (min-width: 769px), print { - .columns.is-variable.is-8-tablet { - --columnGap: 2rem; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .columns.is-variable.is-8-tablet-only { - --columnGap: 2rem; - } -} -@media screen and (max-width: 1023px) { - .columns.is-variable.is-8-touch { - --columnGap: 2rem; - } -} -@media screen and (min-width: 1024px) { - .columns.is-variable.is-8-desktop { - --columnGap: 2rem; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .columns.is-variable.is-8-desktop-only { - --columnGap: 2rem; - } -} -@media screen and (min-width: 1216px) { - .columns.is-variable.is-8-widescreen { - --columnGap: 2rem; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .columns.is-variable.is-8-widescreen-only { - --columnGap: 2rem; - } -} -@media screen and (min-width: 1408px) { - .columns.is-variable.is-8-fullhd { - --columnGap: 2rem; - } -} - -.tile { - align-items: stretch; - display: block; - flex-basis: 0; - flex-grow: 1; - flex-shrink: 1; - min-height: -webkit-min-content; - min-height: -moz-min-content; - min-height: min-content; -} -.tile.is-ancestor { - margin-left: -0.75rem; - margin-right: -0.75rem; - margin-top: -0.75rem; -} -.tile.is-ancestor:last-child { - margin-bottom: -0.75rem; -} -.tile.is-ancestor:not(:last-child) { - margin-bottom: 0.75rem; -} -.tile.is-child { - margin: 0 !important; -} -.tile.is-parent { - padding: 0.75rem; -} -.tile.is-vertical { - flex-direction: column; -} -.tile.is-vertical > .tile.is-child:not(:last-child) { - margin-bottom: 1.5rem !important; -} -@media screen and (min-width: 769px), print { - .tile:not(.is-child) { - display: flex; - } - .tile.is-1 { - flex: none; - width: 8.33333337%; - } - .tile.is-2 { - flex: none; - width: 16.66666674%; - } - .tile.is-3 { - flex: none; - width: 25%; - } - .tile.is-4 { - flex: none; - width: 33.33333337%; - } - .tile.is-5 { - flex: none; - width: 41.66666674%; - } - .tile.is-6 { - flex: none; - width: 50%; - } - .tile.is-7 { - flex: none; - width: 58.33333337%; - } - .tile.is-8 { - flex: none; - width: 66.66666674%; - } - .tile.is-9 { - flex: none; - width: 75%; - } - .tile.is-10 { - flex: none; - width: 83.33333337%; - } - .tile.is-11 { - flex: none; - width: 91.66666674%; - } - .tile.is-12 { - flex: none; - width: 100%; - } -} - -/* Bulma Helpers */ -.has-text-white { - color: hsl(0deg, 0%, 100%) !important; -} - -a.has-text-white:hover, a.has-text-white:focus { - color: #e6e6e6 !important; -} - -.has-background-white { - background-color: hsl(0deg, 0%, 100%) !important; -} - -.has-text-black { - color: hsl(0deg, 0%, 4%) !important; -} - -a.has-text-black:hover, a.has-text-black:focus { - color: black !important; -} - -.has-background-black { - background-color: hsl(0deg, 0%, 4%) !important; -} - -.has-text-light { - color: hsl(0deg, 0%, 96%) !important; -} - -a.has-text-light:hover, a.has-text-light:focus { - color: #dbdbdb !important; -} - -.has-background-light { - background-color: hsl(0deg, 0%, 96%) !important; -} - -.has-text-dark { - color: hsl(0deg, 0%, 21%) !important; -} - -a.has-text-dark:hover, a.has-text-dark:focus { - color: #1c1c1c !important; -} - -.has-background-dark { - background-color: hsl(0deg, 0%, 21%) !important; -} - -.has-text-primary { - color: hsl(171deg, 100%, 41%) !important; -} - -a.has-text-primary:hover, a.has-text-primary:focus { - color: #009e86 !important; -} - -.has-background-primary { - background-color: hsl(171deg, 100%, 41%) !important; -} - -.has-text-primary-light { - color: #ebfffc !important; -} - -a.has-text-primary-light:hover, a.has-text-primary-light:focus { - color: #b8fff4 !important; -} - -.has-background-primary-light { - background-color: #ebfffc !important; -} - -.has-text-primary-dark { - color: #00947e !important; -} - -a.has-text-primary-dark:hover, a.has-text-primary-dark:focus { - color: #00c7a9 !important; -} - -.has-background-primary-dark { - background-color: #00947e !important; -} - -.has-text-link { - color: hsl(229deg, 53%, 53%) !important; -} - -a.has-text-link:hover, a.has-text-link:focus { - color: #3449a8 !important; -} - -.has-background-link { - background-color: hsl(229deg, 53%, 53%) !important; -} - -.has-text-link-light { - color: #eff1fa !important; -} - -a.has-text-link-light:hover, a.has-text-link-light:focus { - color: #c8cfee !important; -} - -.has-background-link-light { - background-color: #eff1fa !important; -} - -.has-text-link-dark { - color: #3850b7 !important; -} - -a.has-text-link-dark:hover, a.has-text-link-dark:focus { - color: #576dcb !important; -} - -.has-background-link-dark { - background-color: #3850b7 !important; -} - -.has-text-info { - color: hsl(207deg, 61%, 53%) !important; -} - -a.has-text-info:hover, a.has-text-info:focus { - color: #2b74b1 !important; -} - -.has-background-info { - background-color: hsl(207deg, 61%, 53%) !important; -} - -.has-text-info-light { - color: #eff5fb !important; -} - -a.has-text-info-light:hover, a.has-text-info-light:focus { - color: #c6ddf1 !important; -} - -.has-background-info-light { - background-color: #eff5fb !important; -} - -.has-text-info-dark { - color: #296fa8 !important; -} - -a.has-text-info-dark:hover, a.has-text-info-dark:focus { - color: #368ace !important; -} - -.has-background-info-dark { - background-color: #296fa8 !important; -} - -.has-text-success { - color: hsl(153deg, 53%, 53%) !important; -} - -a.has-text-success:hover, a.has-text-success:focus { - color: #34a873 !important; -} - -.has-background-success { - background-color: hsl(153deg, 53%, 53%) !important; -} - -.has-text-success-light { - color: #effaf5 !important; -} - -a.has-text-success-light:hover, a.has-text-success-light:focus { - color: #c8eedd !important; -} - -.has-background-success-light { - background-color: #effaf5 !important; -} - -.has-text-success-dark { - color: #257953 !important; -} - -a.has-text-success-dark:hover, a.has-text-success-dark:focus { - color: #31a06e !important; -} - -.has-background-success-dark { - background-color: #257953 !important; -} - -.has-text-warning { - color: hsl(44deg, 100%, 77%) !important; -} - -a.has-text-warning:hover, a.has-text-warning:focus { - color: #ffd257 !important; -} - -.has-background-warning { - background-color: hsl(44deg, 100%, 77%) !important; -} - -.has-text-warning-light { - color: #fffaeb !important; -} - -a.has-text-warning-light:hover, a.has-text-warning-light:focus { - color: #ffecb8 !important; -} - -.has-background-warning-light { - background-color: #fffaeb !important; -} - -.has-text-warning-dark { - color: #946c00 !important; -} - -a.has-text-warning-dark:hover, a.has-text-warning-dark:focus { - color: #c79200 !important; -} - -.has-background-warning-dark { - background-color: #946c00 !important; -} - -.has-text-danger { - color: hsl(348deg, 86%, 61%) !important; -} - -a.has-text-danger:hover, a.has-text-danger:focus { - color: #ee1742 !important; -} - -.has-background-danger { - background-color: hsl(348deg, 86%, 61%) !important; -} - -.has-text-danger-light { - color: #feecf0 !important; -} - -a.has-text-danger-light:hover, a.has-text-danger-light:focus { - color: #fabdc9 !important; -} - -.has-background-danger-light { - background-color: #feecf0 !important; -} - -.has-text-danger-dark { - color: #cc0f35 !important; -} - -a.has-text-danger-dark:hover, a.has-text-danger-dark:focus { - color: #ee2049 !important; -} - -.has-background-danger-dark { - background-color: #cc0f35 !important; -} - -.has-text-black-bis { - color: hsl(0deg, 0%, 7%) !important; -} - -.has-background-black-bis { - background-color: hsl(0deg, 0%, 7%) !important; -} - -.has-text-black-ter { - color: hsl(0deg, 0%, 14%) !important; -} - -.has-background-black-ter { - background-color: hsl(0deg, 0%, 14%) !important; -} - -.has-text-grey-darker { - color: hsl(0deg, 0%, 21%) !important; -} - -.has-background-grey-darker { - background-color: hsl(0deg, 0%, 21%) !important; -} - -.has-text-grey-dark { - color: hsl(0deg, 0%, 29%) !important; -} - -.has-background-grey-dark { - background-color: hsl(0deg, 0%, 29%) !important; -} - -.has-text-grey { - color: hsl(0deg, 0%, 48%) !important; -} - -.has-background-grey { - background-color: hsl(0deg, 0%, 48%) !important; -} - -.has-text-grey-light { - color: hsl(0deg, 0%, 71%) !important; -} - -.has-background-grey-light { - background-color: hsl(0deg, 0%, 71%) !important; -} - -.has-text-grey-lighter { - color: hsl(0deg, 0%, 86%) !important; -} - -.has-background-grey-lighter { - background-color: hsl(0deg, 0%, 86%) !important; -} - -.has-text-white-ter { - color: hsl(0deg, 0%, 96%) !important; -} - -.has-background-white-ter { - background-color: hsl(0deg, 0%, 96%) !important; -} - -.has-text-white-bis { - color: hsl(0deg, 0%, 98%) !important; -} - -.has-background-white-bis { - background-color: hsl(0deg, 0%, 98%) !important; -} - -.is-flex-direction-row { - flex-direction: row !important; -} - -.is-flex-direction-row-reverse { - flex-direction: row-reverse !important; -} - -.is-flex-direction-column { - flex-direction: column !important; -} - -.is-flex-direction-column-reverse { - flex-direction: column-reverse !important; -} - -.is-flex-wrap-nowrap { - flex-wrap: nowrap !important; -} - -.is-flex-wrap-wrap { - flex-wrap: wrap !important; -} - -.is-flex-wrap-wrap-reverse { - flex-wrap: wrap-reverse !important; -} - -.is-justify-content-flex-start { - justify-content: flex-start !important; -} - -.is-justify-content-flex-end { - justify-content: flex-end !important; -} - -.is-justify-content-center { - justify-content: center !important; -} - -.is-justify-content-space-between { - justify-content: space-between !important; -} - -.is-justify-content-space-around { - justify-content: space-around !important; -} - -.is-justify-content-space-evenly { - justify-content: space-evenly !important; -} - -.is-justify-content-start { - justify-content: start !important; -} - -.is-justify-content-end { - justify-content: end !important; -} - -.is-justify-content-left { - justify-content: left !important; -} - -.is-justify-content-right { - justify-content: right !important; -} - -.is-align-content-flex-start { - align-content: flex-start !important; -} - -.is-align-content-flex-end { - align-content: flex-end !important; -} - -.is-align-content-center { - align-content: center !important; -} - -.is-align-content-space-between { - align-content: space-between !important; -} - -.is-align-content-space-around { - align-content: space-around !important; -} - -.is-align-content-space-evenly { - align-content: space-evenly !important; -} - -.is-align-content-stretch { - align-content: stretch !important; -} - -.is-align-content-start { - align-content: start !important; -} - -.is-align-content-end { - align-content: end !important; -} - -.is-align-content-baseline { - align-content: baseline !important; -} - -.is-align-items-stretch { - align-items: stretch !important; -} - -.is-align-items-flex-start { - align-items: flex-start !important; -} - -.is-align-items-flex-end { - align-items: flex-end !important; -} - -.is-align-items-center { - align-items: center !important; -} - -.is-align-items-baseline { - align-items: baseline !important; -} - -.is-align-items-start { - align-items: start !important; -} - -.is-align-items-end { - align-items: end !important; -} - -.is-align-items-self-start { - align-items: self-start !important; -} - -.is-align-items-self-end { - align-items: self-end !important; -} - -.is-align-self-auto { - align-self: auto !important; -} - -.is-align-self-flex-start { - align-self: flex-start !important; -} - -.is-align-self-flex-end { - align-self: flex-end !important; -} - -.is-align-self-center { - align-self: center !important; -} - -.is-align-self-baseline { - align-self: baseline !important; -} - -.is-align-self-stretch { - align-self: stretch !important; -} - -.is-flex-grow-0 { - flex-grow: 0 !important; -} - -.is-flex-grow-1 { - flex-grow: 1 !important; -} - -.is-flex-grow-2 { - flex-grow: 2 !important; -} - -.is-flex-grow-3 { - flex-grow: 3 !important; -} - -.is-flex-grow-4 { - flex-grow: 4 !important; -} - -.is-flex-grow-5 { - flex-grow: 5 !important; -} - -.is-flex-shrink-0 { - flex-shrink: 0 !important; -} - -.is-flex-shrink-1 { - flex-shrink: 1 !important; -} - -.is-flex-shrink-2 { - flex-shrink: 2 !important; -} - -.is-flex-shrink-3 { - flex-shrink: 3 !important; -} - -.is-flex-shrink-4 { - flex-shrink: 4 !important; -} - -.is-flex-shrink-5 { - flex-shrink: 5 !important; -} - -.is-clearfix::after { - clear: both; - content: " "; - display: table; -} - -.is-pulled-left { - float: left !important; -} - -.is-pulled-right { - float: right !important; -} - -.is-radiusless { - border-radius: 0 !important; -} - -.is-shadowless { - box-shadow: none !important; -} - -.is-clickable { - cursor: pointer !important; - pointer-events: all !important; -} - -.is-clipped { - overflow: hidden !important; -} - -.is-relative { - position: relative !important; -} - -.is-marginless { - margin: 0 !important; -} - -.is-paddingless { - padding: 0 !important; -} - -.m-0 { - margin: 0 !important; -} - -.mt-0 { - margin-top: 0 !important; -} - -.mr-0 { - margin-right: 0 !important; -} - -.mb-0 { - margin-bottom: 0 !important; -} - -.ml-0 { - margin-left: 0 !important; -} - -.mx-0 { - margin-left: 0 !important; - margin-right: 0 !important; -} - -.my-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; -} - -.m-1 { - margin: 0.25rem !important; -} - -.mt-1 { - margin-top: 0.25rem !important; -} - -.mr-1 { - margin-right: 0.25rem !important; -} - -.mb-1 { - margin-bottom: 0.25rem !important; -} - -.ml-1 { - margin-left: 0.25rem !important; -} - -.mx-1 { - margin-left: 0.25rem !important; - margin-right: 0.25rem !important; -} - -.my-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; -} - -.m-2 { - margin: 0.5rem !important; -} - -.mt-2 { - margin-top: 0.5rem !important; -} - -.mr-2 { - margin-right: 0.5rem !important; -} - -.mb-2 { - margin-bottom: 0.5rem !important; -} - -.ml-2 { - margin-left: 0.5rem !important; -} - -.mx-2 { - margin-left: 0.5rem !important; - margin-right: 0.5rem !important; -} - -.my-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; -} - -.m-3 { - margin: 0.75rem !important; -} - -.mt-3 { - margin-top: 0.75rem !important; -} - -.mr-3 { - margin-right: 0.75rem !important; -} - -.mb-3 { - margin-bottom: 0.75rem !important; -} - -.ml-3 { - margin-left: 0.75rem !important; -} - -.mx-3 { - margin-left: 0.75rem !important; - margin-right: 0.75rem !important; -} - -.my-3 { - margin-top: 0.75rem !important; - margin-bottom: 0.75rem !important; -} - -.m-4 { - margin: 1rem !important; -} - -.mt-4 { - margin-top: 1rem !important; -} - -.mr-4 { - margin-right: 1rem !important; -} - -.mb-4 { - margin-bottom: 1rem !important; -} - -.ml-4 { - margin-left: 1rem !important; -} - -.mx-4 { - margin-left: 1rem !important; - margin-right: 1rem !important; -} - -.my-4 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; -} - -.m-5 { - margin: 1.5rem !important; -} - -.mt-5 { - margin-top: 1.5rem !important; -} - -.mr-5 { - margin-right: 1.5rem !important; -} - -.mb-5 { - margin-bottom: 1.5rem !important; -} - -.ml-5 { - margin-left: 1.5rem !important; -} - -.mx-5 { - margin-left: 1.5rem !important; - margin-right: 1.5rem !important; -} - -.my-5 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; -} - -.m-6 { - margin: 3rem !important; -} - -.mt-6 { - margin-top: 3rem !important; -} - -.mr-6 { - margin-right: 3rem !important; -} - -.mb-6 { - margin-bottom: 3rem !important; -} - -.ml-6 { - margin-left: 3rem !important; -} - -.mx-6 { - margin-left: 3rem !important; - margin-right: 3rem !important; -} - -.my-6 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; -} - -.m-auto { - margin: auto !important; -} - -.mt-auto { - margin-top: auto !important; -} - -.mr-auto { - margin-right: auto !important; -} - -.mb-auto { - margin-bottom: auto !important; -} - -.ml-auto { - margin-left: auto !important; -} - -.mx-auto { - margin-left: auto !important; - margin-right: auto !important; -} - -.my-auto { - margin-top: auto !important; - margin-bottom: auto !important; -} - -.p-0 { - padding: 0 !important; -} - -.pt-0 { - padding-top: 0 !important; -} - -.pr-0 { - padding-right: 0 !important; -} - -.pb-0 { - padding-bottom: 0 !important; -} - -.pl-0 { - padding-left: 0 !important; -} - -.px-0 { - padding-left: 0 !important; - padding-right: 0 !important; -} - -.py-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; -} - -.p-1 { - padding: 0.25rem !important; -} - -.pt-1 { - padding-top: 0.25rem !important; -} - -.pr-1 { - padding-right: 0.25rem !important; -} - -.pb-1 { - padding-bottom: 0.25rem !important; -} - -.pl-1 { - padding-left: 0.25rem !important; -} - -.px-1 { - padding-left: 0.25rem !important; - padding-right: 0.25rem !important; -} - -.py-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; -} - -.p-2 { - padding: 0.5rem !important; -} - -.pt-2 { - padding-top: 0.5rem !important; -} - -.pr-2 { - padding-right: 0.5rem !important; -} - -.pb-2 { - padding-bottom: 0.5rem !important; -} - -.pl-2 { - padding-left: 0.5rem !important; -} - -.px-2 { - padding-left: 0.5rem !important; - padding-right: 0.5rem !important; -} - -.py-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; -} - -.p-3 { - padding: 0.75rem !important; -} - -.pt-3 { - padding-top: 0.75rem !important; -} - -.pr-3 { - padding-right: 0.75rem !important; -} - -.pb-3 { - padding-bottom: 0.75rem !important; -} - -.pl-3 { - padding-left: 0.75rem !important; -} - -.px-3 { - padding-left: 0.75rem !important; - padding-right: 0.75rem !important; -} - -.py-3 { - padding-top: 0.75rem !important; - padding-bottom: 0.75rem !important; -} - -.p-4 { - padding: 1rem !important; -} - -.pt-4 { - padding-top: 1rem !important; -} - -.pr-4 { - padding-right: 1rem !important; -} - -.pb-4 { - padding-bottom: 1rem !important; -} - -.pl-4 { - padding-left: 1rem !important; -} - -.px-4 { - padding-left: 1rem !important; - padding-right: 1rem !important; -} - -.py-4 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; -} - -.p-5 { - padding: 1.5rem !important; -} - -.pt-5 { - padding-top: 1.5rem !important; -} - -.pr-5 { - padding-right: 1.5rem !important; -} - -.pb-5 { - padding-bottom: 1.5rem !important; -} - -.pl-5 { - padding-left: 1.5rem !important; -} - -.px-5 { - padding-left: 1.5rem !important; - padding-right: 1.5rem !important; -} - -.py-5 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; -} - -.p-6 { - padding: 3rem !important; -} - -.pt-6 { - padding-top: 3rem !important; -} - -.pr-6 { - padding-right: 3rem !important; -} - -.pb-6 { - padding-bottom: 3rem !important; -} - -.pl-6 { - padding-left: 3rem !important; -} - -.px-6 { - padding-left: 3rem !important; - padding-right: 3rem !important; -} - -.py-6 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; -} - -.p-auto { - padding: auto !important; -} - -.pt-auto { - padding-top: auto !important; -} - -.pr-auto { - padding-right: auto !important; -} - -.pb-auto { - padding-bottom: auto !important; -} - -.pl-auto { - padding-left: auto !important; -} - -.px-auto { - padding-left: auto !important; - padding-right: auto !important; -} - -.py-auto { - padding-top: auto !important; - padding-bottom: auto !important; -} - -.is-size-1 { - font-size: 3rem !important; -} - -.is-size-2 { - font-size: 2.5rem !important; -} - -.is-size-3 { - font-size: 2rem !important; -} - -.is-size-4 { - font-size: 1.5rem !important; -} - -.is-size-5 { - font-size: 1.25rem !important; -} - -.is-size-6 { - font-size: 1rem !important; -} - -.is-size-7 { - font-size: 0.75rem !important; -} - -@media screen and (max-width: 768px) { - .is-size-1-mobile { - font-size: 3rem !important; - } - .is-size-2-mobile { - font-size: 2.5rem !important; - } - .is-size-3-mobile { - font-size: 2rem !important; - } - .is-size-4-mobile { - font-size: 1.5rem !important; - } - .is-size-5-mobile { - font-size: 1.25rem !important; - } - .is-size-6-mobile { - font-size: 1rem !important; - } - .is-size-7-mobile { - font-size: 0.75rem !important; - } -} -@media screen and (min-width: 769px), print { - .is-size-1-tablet { - font-size: 3rem !important; - } - .is-size-2-tablet { - font-size: 2.5rem !important; - } - .is-size-3-tablet { - font-size: 2rem !important; - } - .is-size-4-tablet { - font-size: 1.5rem !important; - } - .is-size-5-tablet { - font-size: 1.25rem !important; - } - .is-size-6-tablet { - font-size: 1rem !important; - } - .is-size-7-tablet { - font-size: 0.75rem !important; - } -} -@media screen and (max-width: 1023px) { - .is-size-1-touch { - font-size: 3rem !important; - } - .is-size-2-touch { - font-size: 2.5rem !important; - } - .is-size-3-touch { - font-size: 2rem !important; - } - .is-size-4-touch { - font-size: 1.5rem !important; - } - .is-size-5-touch { - font-size: 1.25rem !important; - } - .is-size-6-touch { - font-size: 1rem !important; - } - .is-size-7-touch { - font-size: 0.75rem !important; - } -} -@media screen and (min-width: 1024px) { - .is-size-1-desktop { - font-size: 3rem !important; - } - .is-size-2-desktop { - font-size: 2.5rem !important; - } - .is-size-3-desktop { - font-size: 2rem !important; - } - .is-size-4-desktop { - font-size: 1.5rem !important; - } - .is-size-5-desktop { - font-size: 1.25rem !important; - } - .is-size-6-desktop { - font-size: 1rem !important; - } - .is-size-7-desktop { - font-size: 0.75rem !important; - } -} -@media screen and (min-width: 1216px) { - .is-size-1-widescreen { - font-size: 3rem !important; - } - .is-size-2-widescreen { - font-size: 2.5rem !important; - } - .is-size-3-widescreen { - font-size: 2rem !important; - } - .is-size-4-widescreen { - font-size: 1.5rem !important; - } - .is-size-5-widescreen { - font-size: 1.25rem !important; - } - .is-size-6-widescreen { - font-size: 1rem !important; - } - .is-size-7-widescreen { - font-size: 0.75rem !important; - } -} -@media screen and (min-width: 1408px) { - .is-size-1-fullhd { - font-size: 3rem !important; - } - .is-size-2-fullhd { - font-size: 2.5rem !important; - } - .is-size-3-fullhd { - font-size: 2rem !important; - } - .is-size-4-fullhd { - font-size: 1.5rem !important; - } - .is-size-5-fullhd { - font-size: 1.25rem !important; - } - .is-size-6-fullhd { - font-size: 1rem !important; - } - .is-size-7-fullhd { - font-size: 0.75rem !important; - } -} -.has-text-centered { - text-align: center !important; -} - -.has-text-justified { - text-align: justify !important; -} - -.has-text-left { - text-align: left !important; -} - -.has-text-right { - text-align: right !important; -} - -@media screen and (max-width: 768px) { - .has-text-centered-mobile { - text-align: center !important; - } -} -@media screen and (min-width: 769px), print { - .has-text-centered-tablet { - text-align: center !important; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .has-text-centered-tablet-only { - text-align: center !important; - } -} -@media screen and (max-width: 1023px) { - .has-text-centered-touch { - text-align: center !important; - } -} -@media screen and (min-width: 1024px) { - .has-text-centered-desktop { - text-align: center !important; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .has-text-centered-desktop-only { - text-align: center !important; - } -} -@media screen and (min-width: 1216px) { - .has-text-centered-widescreen { - text-align: center !important; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-centered-widescreen-only { - text-align: center !important; - } -} -@media screen and (min-width: 1408px) { - .has-text-centered-fullhd { - text-align: center !important; - } -} -@media screen and (max-width: 768px) { - .has-text-justified-mobile { - text-align: justify !important; - } -} -@media screen and (min-width: 769px), print { - .has-text-justified-tablet { - text-align: justify !important; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .has-text-justified-tablet-only { - text-align: justify !important; - } -} -@media screen and (max-width: 1023px) { - .has-text-justified-touch { - text-align: justify !important; - } -} -@media screen and (min-width: 1024px) { - .has-text-justified-desktop { - text-align: justify !important; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .has-text-justified-desktop-only { - text-align: justify !important; - } -} -@media screen and (min-width: 1216px) { - .has-text-justified-widescreen { - text-align: justify !important; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-justified-widescreen-only { - text-align: justify !important; - } -} -@media screen and (min-width: 1408px) { - .has-text-justified-fullhd { - text-align: justify !important; - } -} -@media screen and (max-width: 768px) { - .has-text-left-mobile { - text-align: left !important; - } -} -@media screen and (min-width: 769px), print { - .has-text-left-tablet { - text-align: left !important; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .has-text-left-tablet-only { - text-align: left !important; - } -} -@media screen and (max-width: 1023px) { - .has-text-left-touch { - text-align: left !important; - } -} -@media screen and (min-width: 1024px) { - .has-text-left-desktop { - text-align: left !important; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .has-text-left-desktop-only { - text-align: left !important; - } -} -@media screen and (min-width: 1216px) { - .has-text-left-widescreen { - text-align: left !important; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-left-widescreen-only { - text-align: left !important; - } -} -@media screen and (min-width: 1408px) { - .has-text-left-fullhd { - text-align: left !important; - } -} -@media screen and (max-width: 768px) { - .has-text-right-mobile { - text-align: right !important; - } -} -@media screen and (min-width: 769px), print { - .has-text-right-tablet { - text-align: right !important; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .has-text-right-tablet-only { - text-align: right !important; - } -} -@media screen and (max-width: 1023px) { - .has-text-right-touch { - text-align: right !important; - } -} -@media screen and (min-width: 1024px) { - .has-text-right-desktop { - text-align: right !important; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .has-text-right-desktop-only { - text-align: right !important; - } -} -@media screen and (min-width: 1216px) { - .has-text-right-widescreen { - text-align: right !important; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .has-text-right-widescreen-only { - text-align: right !important; - } -} -@media screen and (min-width: 1408px) { - .has-text-right-fullhd { - text-align: right !important; - } -} -.is-capitalized { - text-transform: capitalize !important; -} - -.is-lowercase { - text-transform: lowercase !important; -} - -.is-uppercase { - text-transform: uppercase !important; -} - -.is-italic { - font-style: italic !important; -} - -.is-underlined { - text-decoration: underline !important; -} - -.has-text-weight-light { - font-weight: 300 !important; -} - -.has-text-weight-normal { - font-weight: 400 !important; -} - -.has-text-weight-medium { - font-weight: 500 !important; -} - -.has-text-weight-semibold { - font-weight: 600 !important; -} - -.has-text-weight-bold { - font-weight: 700 !important; -} - -.is-family-primary { - font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; -} - -.is-family-secondary { - font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; -} - -.is-family-sans-serif { - font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; -} - -.is-family-monospace { - font-family: monospace !important; -} - -.is-family-code { - font-family: monospace !important; -} - -.is-block { - display: block !important; -} - -@media screen and (max-width: 768px) { - .is-block-mobile { - display: block !important; - } -} -@media screen and (min-width: 769px), print { - .is-block-tablet { - display: block !important; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .is-block-tablet-only { - display: block !important; - } -} -@media screen and (max-width: 1023px) { - .is-block-touch { - display: block !important; - } -} -@media screen and (min-width: 1024px) { - .is-block-desktop { - display: block !important; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .is-block-desktop-only { - display: block !important; - } -} -@media screen and (min-width: 1216px) { - .is-block-widescreen { - display: block !important; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-block-widescreen-only { - display: block !important; - } -} -@media screen and (min-width: 1408px) { - .is-block-fullhd { - display: block !important; - } -} -.is-flex { - display: flex !important; -} - -@media screen and (max-width: 768px) { - .is-flex-mobile { - display: flex !important; - } -} -@media screen and (min-width: 769px), print { - .is-flex-tablet { - display: flex !important; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .is-flex-tablet-only { - display: flex !important; - } -} -@media screen and (max-width: 1023px) { - .is-flex-touch { - display: flex !important; - } -} -@media screen and (min-width: 1024px) { - .is-flex-desktop { - display: flex !important; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .is-flex-desktop-only { - display: flex !important; - } -} -@media screen and (min-width: 1216px) { - .is-flex-widescreen { - display: flex !important; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-flex-widescreen-only { - display: flex !important; - } -} -@media screen and (min-width: 1408px) { - .is-flex-fullhd { - display: flex !important; - } -} -.is-inline { - display: inline !important; -} - -@media screen and (max-width: 768px) { - .is-inline-mobile { - display: inline !important; - } -} -@media screen and (min-width: 769px), print { - .is-inline-tablet { - display: inline !important; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .is-inline-tablet-only { - display: inline !important; - } -} -@media screen and (max-width: 1023px) { - .is-inline-touch { - display: inline !important; - } -} -@media screen and (min-width: 1024px) { - .is-inline-desktop { - display: inline !important; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .is-inline-desktop-only { - display: inline !important; - } -} -@media screen and (min-width: 1216px) { - .is-inline-widescreen { - display: inline !important; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-inline-widescreen-only { - display: inline !important; - } -} -@media screen and (min-width: 1408px) { - .is-inline-fullhd { - display: inline !important; - } -} -.is-inline-block { - display: inline-block !important; -} - -@media screen and (max-width: 768px) { - .is-inline-block-mobile { - display: inline-block !important; - } -} -@media screen and (min-width: 769px), print { - .is-inline-block-tablet { - display: inline-block !important; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .is-inline-block-tablet-only { - display: inline-block !important; - } -} -@media screen and (max-width: 1023px) { - .is-inline-block-touch { - display: inline-block !important; - } -} -@media screen and (min-width: 1024px) { - .is-inline-block-desktop { - display: inline-block !important; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .is-inline-block-desktop-only { - display: inline-block !important; - } -} -@media screen and (min-width: 1216px) { - .is-inline-block-widescreen { - display: inline-block !important; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-inline-block-widescreen-only { - display: inline-block !important; - } -} -@media screen and (min-width: 1408px) { - .is-inline-block-fullhd { - display: inline-block !important; - } -} -.is-inline-flex { - display: inline-flex !important; -} - -@media screen and (max-width: 768px) { - .is-inline-flex-mobile { - display: inline-flex !important; - } -} -@media screen and (min-width: 769px), print { - .is-inline-flex-tablet { - display: inline-flex !important; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .is-inline-flex-tablet-only { - display: inline-flex !important; - } -} -@media screen and (max-width: 1023px) { - .is-inline-flex-touch { - display: inline-flex !important; - } -} -@media screen and (min-width: 1024px) { - .is-inline-flex-desktop { - display: inline-flex !important; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .is-inline-flex-desktop-only { - display: inline-flex !important; - } -} -@media screen and (min-width: 1216px) { - .is-inline-flex-widescreen { - display: inline-flex !important; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-inline-flex-widescreen-only { - display: inline-flex !important; - } -} -@media screen and (min-width: 1408px) { - .is-inline-flex-fullhd { - display: inline-flex !important; - } -} -.is-hidden { - display: none !important; -} - -.is-sr-only { - border: none !important; - clip: rect(0, 0, 0, 0) !important; - height: 0.01em !important; - overflow: hidden !important; - padding: 0 !important; - position: absolute !important; - white-space: nowrap !important; - width: 0.01em !important; -} - -@media screen and (max-width: 768px) { - .is-hidden-mobile { - display: none !important; - } -} -@media screen and (min-width: 769px), print { - .is-hidden-tablet { - display: none !important; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .is-hidden-tablet-only { - display: none !important; - } -} -@media screen and (max-width: 1023px) { - .is-hidden-touch { - display: none !important; - } -} -@media screen and (min-width: 1024px) { - .is-hidden-desktop { - display: none !important; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .is-hidden-desktop-only { - display: none !important; - } -} -@media screen and (min-width: 1216px) { - .is-hidden-widescreen { - display: none !important; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-hidden-widescreen-only { - display: none !important; - } -} -@media screen and (min-width: 1408px) { - .is-hidden-fullhd { - display: none !important; - } -} -.is-invisible { - visibility: hidden !important; -} - -@media screen and (max-width: 768px) { - .is-invisible-mobile { - visibility: hidden !important; - } -} -@media screen and (min-width: 769px), print { - .is-invisible-tablet { - visibility: hidden !important; - } -} -@media screen and (min-width: 769px) and (max-width: 1023px) { - .is-invisible-tablet-only { - visibility: hidden !important; - } -} -@media screen and (max-width: 1023px) { - .is-invisible-touch { - visibility: hidden !important; - } -} -@media screen and (min-width: 1024px) { - .is-invisible-desktop { - visibility: hidden !important; - } -} -@media screen and (min-width: 1024px) and (max-width: 1215px) { - .is-invisible-desktop-only { - visibility: hidden !important; - } -} -@media screen and (min-width: 1216px) { - .is-invisible-widescreen { - visibility: hidden !important; - } -} -@media screen and (min-width: 1216px) and (max-width: 1407px) { - .is-invisible-widescreen-only { - visibility: hidden !important; - } -} -@media screen and (min-width: 1408px) { - .is-invisible-fullhd { - visibility: hidden !important; - } -} -/* Bulma Layout */ -.hero { - align-items: stretch; - display: flex; - flex-direction: column; - justify-content: space-between; -} -.hero .navbar { - background: none; -} -.hero .tabs ul { - border-bottom: none; -} -.hero.is-white { - background-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 4%); -} -.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-white strong { - color: inherit; -} -.hero.is-white .title { - color: hsl(0deg, 0%, 4%); -} -.hero.is-white .subtitle { - color: rgba(10, 10, 10, 0.9); -} -.hero.is-white .subtitle a:not(.button), -.hero.is-white .subtitle strong { - color: hsl(0deg, 0%, 4%); -} -@media screen and (max-width: 1023px) { - .hero.is-white .navbar-menu { - background-color: hsl(0deg, 0%, 100%); - } -} -.hero.is-white .navbar-item, -.hero.is-white .navbar-link { - color: rgba(10, 10, 10, 0.7); -} -.hero.is-white a.navbar-item:hover, .hero.is-white a.navbar-item.is-active, -.hero.is-white .navbar-link:hover, -.hero.is-white .navbar-link.is-active { - background-color: #f2f2f2; - color: hsl(0deg, 0%, 4%); -} -.hero.is-white .tabs a { - color: hsl(0deg, 0%, 4%); - opacity: 0.9; -} -.hero.is-white .tabs a:hover { - opacity: 1; -} -.hero.is-white .tabs li.is-active a { - color: hsl(0deg, 0%, 100%) !important; - opacity: 1; -} -.hero.is-white .tabs.is-boxed a, .hero.is-white .tabs.is-toggle a { - color: hsl(0deg, 0%, 4%); -} -.hero.is-white .tabs.is-boxed a:hover, .hero.is-white .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} -.hero.is-white .tabs.is-boxed li.is-active a, .hero.is-white .tabs.is-boxed li.is-active a:hover, .hero.is-white .tabs.is-toggle li.is-active a, .hero.is-white .tabs.is-toggle li.is-active a:hover { - background-color: hsl(0deg, 0%, 4%); - border-color: hsl(0deg, 0%, 4%); - color: hsl(0deg, 0%, 100%); -} -.hero.is-white.is-bold { - background-image: linear-gradient(141deg, #e8e3e4 0%, hsl(0deg, 0%, 100%) 71%, white 100%); -} -@media screen and (max-width: 768px) { - .hero.is-white.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #e8e3e4 0%, hsl(0deg, 0%, 100%) 71%, white 100%); - } -} -.hero.is-black { - background-color: hsl(0deg, 0%, 4%); - color: hsl(0deg, 0%, 100%); -} -.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-black strong { - color: inherit; -} -.hero.is-black .title { - color: hsl(0deg, 0%, 100%); -} -.hero.is-black .subtitle { - color: rgba(255, 255, 255, 0.9); -} -.hero.is-black .subtitle a:not(.button), -.hero.is-black .subtitle strong { - color: hsl(0deg, 0%, 100%); -} -@media screen and (max-width: 1023px) { - .hero.is-black .navbar-menu { - background-color: hsl(0deg, 0%, 4%); - } -} -.hero.is-black .navbar-item, -.hero.is-black .navbar-link { - color: rgba(255, 255, 255, 0.7); -} -.hero.is-black a.navbar-item:hover, .hero.is-black a.navbar-item.is-active, -.hero.is-black .navbar-link:hover, -.hero.is-black .navbar-link.is-active { - background-color: black; - color: hsl(0deg, 0%, 100%); -} -.hero.is-black .tabs a { - color: hsl(0deg, 0%, 100%); - opacity: 0.9; -} -.hero.is-black .tabs a:hover { - opacity: 1; -} -.hero.is-black .tabs li.is-active a { - color: hsl(0deg, 0%, 4%) !important; - opacity: 1; -} -.hero.is-black .tabs.is-boxed a, .hero.is-black .tabs.is-toggle a { - color: hsl(0deg, 0%, 100%); -} -.hero.is-black .tabs.is-boxed a:hover, .hero.is-black .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} -.hero.is-black .tabs.is-boxed li.is-active a, .hero.is-black .tabs.is-boxed li.is-active a:hover, .hero.is-black .tabs.is-toggle li.is-active a, .hero.is-black .tabs.is-toggle li.is-active a:hover { - background-color: hsl(0deg, 0%, 100%); - border-color: hsl(0deg, 0%, 100%); - color: hsl(0deg, 0%, 4%); -} -.hero.is-black.is-bold { - background-image: linear-gradient(141deg, black 0%, hsl(0deg, 0%, 4%) 71%, #181616 100%); -} -@media screen and (max-width: 768px) { - .hero.is-black.is-bold .navbar-menu { - background-image: linear-gradient(141deg, black 0%, hsl(0deg, 0%, 4%) 71%, #181616 100%); - } -} -.hero.is-light { - background-color: hsl(0deg, 0%, 96%); - color: rgba(0, 0, 0, 0.7); -} -.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-light strong { - color: inherit; -} -.hero.is-light .title { - color: rgba(0, 0, 0, 0.7); -} -.hero.is-light .subtitle { - color: rgba(0, 0, 0, 0.9); -} -.hero.is-light .subtitle a:not(.button), -.hero.is-light .subtitle strong { - color: rgba(0, 0, 0, 0.7); -} -@media screen and (max-width: 1023px) { - .hero.is-light .navbar-menu { - background-color: hsl(0deg, 0%, 96%); - } -} -.hero.is-light .navbar-item, -.hero.is-light .navbar-link { - color: rgba(0, 0, 0, 0.7); -} -.hero.is-light a.navbar-item:hover, .hero.is-light a.navbar-item.is-active, -.hero.is-light .navbar-link:hover, -.hero.is-light .navbar-link.is-active { - background-color: #e8e8e8; - color: rgba(0, 0, 0, 0.7); -} -.hero.is-light .tabs a { - color: rgba(0, 0, 0, 0.7); - opacity: 0.9; -} -.hero.is-light .tabs a:hover { - opacity: 1; -} -.hero.is-light .tabs li.is-active a { - color: hsl(0deg, 0%, 96%) !important; - opacity: 1; -} -.hero.is-light .tabs.is-boxed a, .hero.is-light .tabs.is-toggle a { - color: rgba(0, 0, 0, 0.7); -} -.hero.is-light .tabs.is-boxed a:hover, .hero.is-light .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} -.hero.is-light .tabs.is-boxed li.is-active a, .hero.is-light .tabs.is-boxed li.is-active a:hover, .hero.is-light .tabs.is-toggle li.is-active a, .hero.is-light .tabs.is-toggle li.is-active a:hover { - background-color: rgba(0, 0, 0, 0.7); - border-color: rgba(0, 0, 0, 0.7); - color: hsl(0deg, 0%, 96%); -} -.hero.is-light.is-bold { - background-image: linear-gradient(141deg, #dfd8d9 0%, hsl(0deg, 0%, 96%) 71%, white 100%); -} -@media screen and (max-width: 768px) { - .hero.is-light.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #dfd8d9 0%, hsl(0deg, 0%, 96%) 71%, white 100%); - } -} -.hero.is-dark { - background-color: hsl(0deg, 0%, 21%); - color: #fff; -} -.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-dark strong { - color: inherit; -} -.hero.is-dark .title { - color: #fff; -} -.hero.is-dark .subtitle { - color: rgba(255, 255, 255, 0.9); -} -.hero.is-dark .subtitle a:not(.button), -.hero.is-dark .subtitle strong { - color: #fff; -} -@media screen and (max-width: 1023px) { - .hero.is-dark .navbar-menu { - background-color: hsl(0deg, 0%, 21%); - } -} -.hero.is-dark .navbar-item, -.hero.is-dark .navbar-link { - color: rgba(255, 255, 255, 0.7); -} -.hero.is-dark a.navbar-item:hover, .hero.is-dark a.navbar-item.is-active, -.hero.is-dark .navbar-link:hover, -.hero.is-dark .navbar-link.is-active { - background-color: #292929; - color: #fff; -} -.hero.is-dark .tabs a { - color: #fff; - opacity: 0.9; -} -.hero.is-dark .tabs a:hover { - opacity: 1; -} -.hero.is-dark .tabs li.is-active a { - color: hsl(0deg, 0%, 21%) !important; - opacity: 1; -} -.hero.is-dark .tabs.is-boxed a, .hero.is-dark .tabs.is-toggle a { - color: #fff; -} -.hero.is-dark .tabs.is-boxed a:hover, .hero.is-dark .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} -.hero.is-dark .tabs.is-boxed li.is-active a, .hero.is-dark .tabs.is-boxed li.is-active a:hover, .hero.is-dark .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: hsl(0deg, 0%, 21%); -} -.hero.is-dark.is-bold { - background-image: linear-gradient(141deg, #1f191a 0%, hsl(0deg, 0%, 21%) 71%, #46403f 100%); -} -@media screen and (max-width: 768px) { - .hero.is-dark.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #1f191a 0%, hsl(0deg, 0%, 21%) 71%, #46403f 100%); - } -} -.hero.is-primary { - background-color: hsl(171deg, 100%, 41%); - color: #fff; -} -.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-primary strong { - color: inherit; -} -.hero.is-primary .title { - color: #fff; -} -.hero.is-primary .subtitle { - color: rgba(255, 255, 255, 0.9); -} -.hero.is-primary .subtitle a:not(.button), -.hero.is-primary .subtitle strong { - color: #fff; -} -@media screen and (max-width: 1023px) { - .hero.is-primary .navbar-menu { - background-color: hsl(171deg, 100%, 41%); - } -} -.hero.is-primary .navbar-item, -.hero.is-primary .navbar-link { - color: rgba(255, 255, 255, 0.7); -} -.hero.is-primary a.navbar-item:hover, .hero.is-primary a.navbar-item.is-active, -.hero.is-primary .navbar-link:hover, -.hero.is-primary .navbar-link.is-active { - background-color: #00b89c; - color: #fff; -} -.hero.is-primary .tabs a { - color: #fff; - opacity: 0.9; -} -.hero.is-primary .tabs a:hover { - opacity: 1; -} -.hero.is-primary .tabs li.is-active a { - color: hsl(171deg, 100%, 41%) !important; - opacity: 1; -} -.hero.is-primary .tabs.is-boxed a, .hero.is-primary .tabs.is-toggle a { - color: #fff; -} -.hero.is-primary .tabs.is-boxed a:hover, .hero.is-primary .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} -.hero.is-primary .tabs.is-boxed li.is-active a, .hero.is-primary .tabs.is-boxed li.is-active a:hover, .hero.is-primary .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: hsl(171deg, 100%, 41%); -} -.hero.is-primary.is-bold { - background-image: linear-gradient(141deg, #009e6c 0%, hsl(171deg, 100%, 41%) 71%, #00e7eb 100%); -} -@media screen and (max-width: 768px) { - .hero.is-primary.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #009e6c 0%, hsl(171deg, 100%, 41%) 71%, #00e7eb 100%); - } -} -.hero.is-link { - background-color: hsl(229deg, 53%, 53%); - color: #fff; -} -.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-link strong { - color: inherit; -} -.hero.is-link .title { - color: #fff; -} -.hero.is-link .subtitle { - color: rgba(255, 255, 255, 0.9); -} -.hero.is-link .subtitle a:not(.button), -.hero.is-link .subtitle strong { - color: #fff; -} -@media screen and (max-width: 1023px) { - .hero.is-link .navbar-menu { - background-color: hsl(229deg, 53%, 53%); - } -} -.hero.is-link .navbar-item, -.hero.is-link .navbar-link { - color: rgba(255, 255, 255, 0.7); -} -.hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, -.hero.is-link .navbar-link:hover, -.hero.is-link .navbar-link.is-active { - background-color: #3a51bb; - color: #fff; -} -.hero.is-link .tabs a { - color: #fff; - opacity: 0.9; -} -.hero.is-link .tabs a:hover { - opacity: 1; -} -.hero.is-link .tabs li.is-active a { - color: hsl(229deg, 53%, 53%) !important; - opacity: 1; -} -.hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { - color: #fff; -} -.hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} -.hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: hsl(229deg, 53%, 53%); -} -.hero.is-link.is-bold { - background-image: linear-gradient(141deg, #2959b3 0%, hsl(229deg, 53%, 53%) 71%, #5658d2 100%); -} -@media screen and (max-width: 768px) { - .hero.is-link.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #2959b3 0%, hsl(229deg, 53%, 53%) 71%, #5658d2 100%); - } -} -.hero.is-info { - background-color: hsl(207deg, 61%, 53%); - color: #fff; -} -.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-info strong { - color: inherit; -} -.hero.is-info .title { - color: #fff; -} -.hero.is-info .subtitle { - color: rgba(255, 255, 255, 0.9); -} -.hero.is-info .subtitle a:not(.button), -.hero.is-info .subtitle strong { - color: #fff; -} -@media screen and (max-width: 1023px) { - .hero.is-info .navbar-menu { - background-color: hsl(207deg, 61%, 53%); - } -} -.hero.is-info .navbar-item, -.hero.is-info .navbar-link { - color: rgba(255, 255, 255, 0.7); -} -.hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, -.hero.is-info .navbar-link:hover, -.hero.is-info .navbar-link.is-active { - background-color: #3082c5; - color: #fff; -} -.hero.is-info .tabs a { - color: #fff; - opacity: 0.9; -} -.hero.is-info .tabs a:hover { - opacity: 1; -} -.hero.is-info .tabs li.is-active a { - color: hsl(207deg, 61%, 53%) !important; - opacity: 1; -} -.hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { - color: #fff; -} -.hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} -.hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: hsl(207deg, 61%, 53%); -} -.hero.is-info.is-bold { - background-image: linear-gradient(141deg, #208fbc 0%, hsl(207deg, 61%, 53%) 71%, #4d83db 100%); -} -@media screen and (max-width: 768px) { - .hero.is-info.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #208fbc 0%, hsl(207deg, 61%, 53%) 71%, #4d83db 100%); - } -} -.hero.is-success { - background-color: hsl(153deg, 53%, 53%); - color: #fff; -} -.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-success strong { - color: inherit; -} -.hero.is-success .title { - color: #fff; -} -.hero.is-success .subtitle { - color: rgba(255, 255, 255, 0.9); -} -.hero.is-success .subtitle a:not(.button), -.hero.is-success .subtitle strong { - color: #fff; -} -@media screen and (max-width: 1023px) { - .hero.is-success .navbar-menu { - background-color: hsl(153deg, 53%, 53%); - } -} -.hero.is-success .navbar-item, -.hero.is-success .navbar-link { - color: rgba(255, 255, 255, 0.7); -} -.hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, -.hero.is-success .navbar-link:hover, -.hero.is-success .navbar-link.is-active { - background-color: #3abb81; - color: #fff; -} -.hero.is-success .tabs a { - color: #fff; - opacity: 0.9; -} -.hero.is-success .tabs a:hover { - opacity: 1; -} -.hero.is-success .tabs li.is-active a { - color: hsl(153deg, 53%, 53%) !important; - opacity: 1; -} -.hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { - color: #fff; -} -.hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} -.hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: hsl(153deg, 53%, 53%); -} -.hero.is-success.is-bold { - background-image: linear-gradient(141deg, #29b35e 0%, hsl(153deg, 53%, 53%) 71%, #56d2af 100%); -} -@media screen and (max-width: 768px) { - .hero.is-success.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #29b35e 0%, hsl(153deg, 53%, 53%) 71%, #56d2af 100%); - } -} -.hero.is-warning { - background-color: hsl(44deg, 100%, 77%); - color: rgba(0, 0, 0, 0.7); -} -.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-warning strong { - color: inherit; -} -.hero.is-warning .title { - color: rgba(0, 0, 0, 0.7); -} -.hero.is-warning .subtitle { - color: rgba(0, 0, 0, 0.9); -} -.hero.is-warning .subtitle a:not(.button), -.hero.is-warning .subtitle strong { - color: rgba(0, 0, 0, 0.7); -} -@media screen and (max-width: 1023px) { - .hero.is-warning .navbar-menu { - background-color: hsl(44deg, 100%, 77%); - } -} -.hero.is-warning .navbar-item, -.hero.is-warning .navbar-link { - color: rgba(0, 0, 0, 0.7); -} -.hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, -.hero.is-warning .navbar-link:hover, -.hero.is-warning .navbar-link.is-active { - background-color: #ffd970; - color: rgba(0, 0, 0, 0.7); -} -.hero.is-warning .tabs a { - color: rgba(0, 0, 0, 0.7); - opacity: 0.9; -} -.hero.is-warning .tabs a:hover { - opacity: 1; -} -.hero.is-warning .tabs li.is-active a { - color: hsl(44deg, 100%, 77%) !important; - opacity: 1; -} -.hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { - color: rgba(0, 0, 0, 0.7); -} -.hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} -.hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { - background-color: rgba(0, 0, 0, 0.7); - border-color: rgba(0, 0, 0, 0.7); - color: hsl(44deg, 100%, 77%); -} -.hero.is-warning.is-bold { - background-image: linear-gradient(141deg, #ffb657 0%, hsl(44deg, 100%, 77%) 71%, #fff6a3 100%); -} -@media screen and (max-width: 768px) { - .hero.is-warning.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #ffb657 0%, hsl(44deg, 100%, 77%) 71%, #fff6a3 100%); - } -} -.hero.is-danger { - background-color: hsl(348deg, 86%, 61%); - color: #fff; -} -.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), -.hero.is-danger strong { - color: inherit; -} -.hero.is-danger .title { - color: #fff; -} -.hero.is-danger .subtitle { - color: rgba(255, 255, 255, 0.9); -} -.hero.is-danger .subtitle a:not(.button), -.hero.is-danger .subtitle strong { - color: #fff; -} -@media screen and (max-width: 1023px) { - .hero.is-danger .navbar-menu { - background-color: hsl(348deg, 86%, 61%); - } -} -.hero.is-danger .navbar-item, -.hero.is-danger .navbar-link { - color: rgba(255, 255, 255, 0.7); -} -.hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, -.hero.is-danger .navbar-link:hover, -.hero.is-danger .navbar-link.is-active { - background-color: #ef2e55; - color: #fff; -} -.hero.is-danger .tabs a { - color: #fff; - opacity: 0.9; -} -.hero.is-danger .tabs a:hover { - opacity: 1; -} -.hero.is-danger .tabs li.is-active a { - color: hsl(348deg, 86%, 61%) !important; - opacity: 1; -} -.hero.is-danger .tabs.is-boxed a, .hero.is-danger .tabs.is-toggle a { - color: #fff; -} -.hero.is-danger .tabs.is-boxed a:hover, .hero.is-danger .tabs.is-toggle a:hover { - background-color: rgba(10, 10, 10, 0.1); -} -.hero.is-danger .tabs.is-boxed li.is-active a, .hero.is-danger .tabs.is-boxed li.is-active a:hover, .hero.is-danger .tabs.is-toggle li.is-active a, .hero.is-danger .tabs.is-toggle li.is-active a:hover { - background-color: #fff; - border-color: #fff; - color: hsl(348deg, 86%, 61%); -} -.hero.is-danger.is-bold { - background-image: linear-gradient(141deg, #fa0a62 0%, hsl(348deg, 86%, 61%) 71%, #f7595f 100%); -} -@media screen and (max-width: 768px) { - .hero.is-danger.is-bold .navbar-menu { - background-image: linear-gradient(141deg, #fa0a62 0%, hsl(348deg, 86%, 61%) 71%, #f7595f 100%); - } -} -.hero.is-small .hero-body { - padding: 1.5rem; -} -@media screen and (min-width: 769px), print { - .hero.is-medium .hero-body { - padding: 9rem 4.5rem; - } -} -@media screen and (min-width: 769px), print { - .hero.is-large .hero-body { - padding: 18rem 6rem; - } -} -.hero.is-halfheight .hero-body, .hero.is-fullheight .hero-body, .hero.is-fullheight-with-navbar .hero-body { - align-items: center; - display: flex; -} -.hero.is-halfheight .hero-body > .container, .hero.is-fullheight .hero-body > .container, .hero.is-fullheight-with-navbar .hero-body > .container { - flex-grow: 1; - flex-shrink: 1; -} -.hero.is-halfheight { - min-height: 50vh; -} -.hero.is-fullheight { - min-height: 100vh; -} - -.hero-video { - overflow: hidden; -} -.hero-video video { - left: 50%; - min-height: 100%; - min-width: 100%; - position: absolute; - top: 50%; - transform: translate3d(-50%, -50%, 0); -} -.hero-video.is-transparent { - opacity: 0.3; -} -@media screen and (max-width: 768px) { - .hero-video { - display: none; - } -} - -.hero-buttons { - margin-top: 1.5rem; -} -@media screen and (max-width: 768px) { - .hero-buttons .button { - display: flex; - } - .hero-buttons .button:not(:last-child) { - margin-bottom: 0.75rem; - } -} -@media screen and (min-width: 769px), print { - .hero-buttons { - display: flex; - justify-content: center; - } - .hero-buttons .button:not(:last-child) { - margin-right: 1.5rem; - } -} - -.hero-head, -.hero-foot { - flex-grow: 0; - flex-shrink: 0; -} - -.hero-body { - flex-grow: 1; - flex-shrink: 0; - padding: 3rem 1.5rem; -} -@media screen and (min-width: 769px), print { - .hero-body { - padding: 3rem 3rem; - } -} - -.section { - padding: 3rem 1.5rem; -} -@media screen and (min-width: 1024px) { - .section { - padding: 3rem 3rem; - } - .section.is-medium { - padding: 9rem 4.5rem; - } - .section.is-large { - padding: 18rem 6rem; - } -} - -.footer { - background-color: hsl(0deg, 0%, 98%); - padding: 3rem 1.5rem 6rem; -} - -.channel-icon { - max-height: 64px; -} - -.video-thumbnail { - width: 100%; -} - -.video-grid { - display: grid; - grid-row-gap: 0.5vw; - row-gap: 0.5vw; - grid-column-gap: 0.5vw; - -moz-column-gap: 0.5vw; - column-gap: 0.5vw; - grid-template-columns: repeat(2, minmax(0, 1fr)); - grid-column: auto; -} -@media screen and (min-width: 769px), print { - .video-grid { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } -} -@media screen and (min-width: 1024px) { - .video-grid { - grid-template-columns: repeat(4, minmax(0, 1fr)); - } -} -@media screen and (min-width: 1216px) { - .video-grid { - grid-template-columns: repeat(5, minmax(0, 1fr)); - } -} -@media screen and (min-width: 1408px) { - .video-grid { - grid-template-columns: repeat(6, minmax(0, 1fr)); - } -} - -.video-card { - display: flex; - flex-direction: column; -} - -.video-card-content { - padding: 0 0.5vw; -} -.video-card-content:last-child { - padding-bottom: 0.5vw; -} - -.navbar-item { - color: #fff; -} - -.overflow-x { - overflow-x: auto; -} - -/*# sourceMappingURL=style.css.map */ \ No newline at end of file diff --git a/ucast/static/bulma/css/style.css.map b/ucast/static/bulma/css/style.css.map deleted file mode 100644 index cc4f63b..0000000 --- a/ucast/static/bulma/css/style.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["style.css","../../../../node_modules/bulma/bulma.sass","../../../../node_modules/bulma/sass/utilities/_all.sass","../../../../node_modules/bulma/sass/utilities/extends.sass","../../../../node_modules/bulma/sass/utilities/controls.sass","../../../../node_modules/bulma/sass/utilities/initial-variables.sass","../../../../node_modules/bulma/sass/utilities/mixins.sass","../../../../node_modules/bulma/sass/base/_all.sass","../../../../node_modules/bulma/sass/base/minireset.sass","../../../../node_modules/bulma/sass/base/generic.sass","../../../../node_modules/bulma/sass/utilities/derived-variables.sass","../../../../node_modules/bulma/sass/base/animations.sass","../../../../node_modules/bulma/sass/elements/_all.sass","../../../../node_modules/bulma/sass/elements/box.sass","../../../../node_modules/bulma/sass/elements/button.sass","../../../../node_modules/bulma/sass/elements/container.sass","../../../../node_modules/bulma/sass/elements/content.sass","../../../../node_modules/bulma/sass/elements/icon.sass","../../../../node_modules/bulma/sass/elements/image.sass","../../../../node_modules/bulma/sass/elements/notification.sass","../../../../node_modules/bulma/sass/elements/progress.sass","../../../../node_modules/bulma/sass/elements/table.sass","../../../../node_modules/bulma/sass/elements/tag.sass","../../../../node_modules/bulma/sass/elements/title.sass","../../../../node_modules/bulma/sass/elements/other.sass","../../../../node_modules/bulma/sass/form/_all.sass","../../../../node_modules/bulma/sass/form/shared.sass","../../../../node_modules/bulma/sass/form/input-textarea.sass","../../../../node_modules/bulma/sass/form/checkbox-radio.sass","../../../../node_modules/bulma/sass/form/select.sass","../../../../node_modules/bulma/sass/form/file.sass","../../../../node_modules/bulma/sass/form/tools.sass","../../../../node_modules/bulma/sass/components/_all.sass","../../../../node_modules/bulma/sass/components/breadcrumb.sass","../../../../node_modules/bulma/sass/components/card.sass","../../../../node_modules/bulma/sass/components/dropdown.sass","../../../../node_modules/bulma/sass/components/level.sass","../../../../node_modules/bulma/sass/components/media.sass","../../../../node_modules/bulma/sass/components/menu.sass","../../../../node_modules/bulma/sass/components/message.sass","../../../../node_modules/bulma/sass/components/modal.sass","../../../../node_modules/bulma/sass/components/navbar.sass","../../../../node_modules/bulma/sass/components/pagination.sass","../../../../node_modules/bulma/sass/components/panel.sass","../../../../node_modules/bulma/sass/components/tabs.sass","../../../../node_modules/bulma/sass/grid/_all.sass","../../../../node_modules/bulma/sass/grid/columns.sass","../../../../node_modules/bulma/sass/grid/tiles.sass","../../../../node_modules/bulma/sass/helpers/_all.sass","../../../../node_modules/bulma/sass/helpers/color.sass","../../../../node_modules/bulma/sass/helpers/flexbox.sass","../../../../node_modules/bulma/sass/helpers/float.sass","../../../../node_modules/bulma/sass/helpers/other.sass","../../../../node_modules/bulma/sass/helpers/overflow.sass","../../../../node_modules/bulma/sass/helpers/position.sass","../../../../node_modules/bulma/sass/helpers/spacing.sass","../../../../node_modules/bulma/sass/helpers/typography.sass","../../../../node_modules/bulma/sass/helpers/visibility.sass","../../../../node_modules/bulma/sass/layout/_all.sass","../../../../node_modules/bulma/sass/layout/hero.sass","../../../../node_modules/bulma/sass/layout/section.sass","../../../../node_modules/bulma/sass/layout/footer.sass","../../../../assets/sass/style.sass"],"names":[],"mappings":"AAAA,gBAAgB;ACChB,6DAAA;ACDA,oBAAA;ACEA;;;;;ECYE,qBAAA;EACA,wBAAA;EACA,mBAAA;EACA,6BAAA;EACA,kBCoDO;EDnDP,gBAAA;EACA,oBAAA;EACA,eCgBO;EDfP,aAfe;EAgBf,2BAAA;EACA,gBAhBoB;EAiBpB,iCAfyB;EAgBzB,gCAf2B;EAgB3B,iCAhB2B;EAiB3B,8BAlByB;EAmBzB,kBAAA;EACA,mBAAA;AJLF;AIOE;;;;;;;;;;;;;;;;;EAIE,aAAA;AJQJ;AIPE;;;;;;;;;EAEE,mBAAA;AJgBJ;;AGlDA;;;;EG4LE,2BAAA;EACA,yBAAA;EACA,sBAAA;EACA,qBAAA;EACA,iBAAA;ANnIF;;AG1DA;EGgME,6BAAA;EACA,kBAAA;EACA,eAAA;EACA,aAAA;EACA,YAAA;EACA,cAAA;EACA,eAAA;EACA,qBAAA;EACA,oBAAA;EACA,kBAAA;EACA,QAAA;EACA,yBAAA;EACA,wBAAA;EACA,cAAA;ANlIF;;AMqIE;;EACE,qBDzKY;ALwChB;;AG1EA;EGmLE,2BAAA;EACA,yBAAA;EACA,sBAAA;EACA,qBAAA;EACA,iBAAA;EAwBA,qBAAA;EACA,wBAAA;EACA,uCAAA;EACA,YAAA;EACA,qBDzJe;EC0Jf,eAAA;EACA,oBAAA;EACA,qBAAA;EACA,YAAA;EACA,cAAA;EACA,YAAA;EACA,YAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;EACA,eAAA;EACA,aAAA;EACA,kBAAA;EACA,mBAAA;EACA,WAAA;AN5HF;AM6HE;EAEE,qCDpOW;ECqOX,WAAA;EACA,cAAA;EACA,SAAA;EACA,kBAAA;EACA,QAAA;EACA,0DAAA;EACA,+BAAA;AN5HJ;AM6HE;EACE,WAAA;EACA,UAAA;AN3HJ;AM4HE;EACE,WAAA;EACA,UAAA;AN1HJ;AM2HE;EAEE,uCAAA;AN1HJ;AM2HE;EACE,uCAAA;ANzHJ;AM2HE;EACE,YAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;EACA,eAAA;EACA,WAAA;ANzHJ;AM0HE;EACE,YAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;EACA,eAAA;EACA,WAAA;ANxHJ;AMyHE;EACE,YAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;EACA,eAAA;EACA,WAAA;ANvHJ;;AGnJA;EG6QE,mDAAA;UAAA,2CAAA;EACA,oCAAA;EACA,qBDxNe;ECyNf,+BAAA;EACA,6BAAA;EACA,WAAA;EACA,cAAA;EACA,WAAA;EACA,kBAAA;EACA,UAAA;ANtHF;;AG7JA;;;;;;;;;;;;;;;;;EGsRE,SADgB;EAEhB,OAFgB;EAGhB,kBAAA;EACA,QAJgB;EAKhB,MALgB;ANhGlB;;AGlLA;EGqDE,qBAAA;EACA,wBAAA;EACA,gBAAA;EACA,gBAAA;EACA,YAAA;EACA,mBAAA;EACA,oBAAA;EACA,cAAA;EACA,SAAA;EACA,UAAA;ANiIF;;AOtNA,eAAA,EAAA,0EAAA;ACEA;;;;;;;;;;;;;;;;;;;;;;;EAuBE,SAAA;EACA,UAAA;ARwNF;;AQrNA;;;;;;EAME,eAAA;EACA,mBAAA;ARwNF;;AQrNA;EACE,gBAAA;ARwNF;;AQrNA;;;;EAIE,SAAA;ARwNF;;AQrNA;EACE,sBAAA;ARwNF;;AQrNE;EAGE,mBAAA;ARsNJ;;AQnNA;;EAEE,YAAA;EACA,eAAA;ARsNF;;AQnNA;EACE,SAAA;ARsNF;;AQnNA;EACE,yBAAA;EACA,iBAAA;ARsNF;;AQpNA;;EAEE,UAAA;ARuNF;AQtNE;;EACE,mBAAA;ARyNJ;;AStQA;EACE,qCJnBa;EIoBb,eAhCU;EAiCV,kCAAA;EACA,mCAAA;EACA,gBAlCe;EAmCf,kBAhCgB;EAiChB,kBAhCgB;EAiChB,kCApCe;EAqCf,8BAAA;KAAA,2BAAA;UAAA,sBAAA;ATyQF;;ASvQA;;;;;;;EAOE,cAAA;AT0QF;;ASxQA;;;;;;EAME,oLJ/BkB;AL0SpB;;ASzQA;;EAEE,6BAAA;EACA,4BAAA;EACA,sBJpCiB;ALgTnB;;AS1QA;EACE,yBJ7Da;EI8Db,cA1De;EA2Df,gBJ7Bc;EI8Bd,gBA1DiB;ATuUnB;;ASzQA;EACE,4BJtDa;EIuDb,eAAA;EACA,qBAAA;AT4QF;AS3QE;EACE,mBAAA;AT6QJ;AS5QE;EACE,yBJ5EW;AL0Vf;;AS5QA;EACE,oCJxEa;EIyEb,cCnBK;EDoBL,kBArEU;EAsEV,mBAvEY;EAwEZ,4BAzEa;ATwVf;;AS7QA;EACE,oCJ/Ea;EIgFb,YAAA;EACA,cAAA;EACA,WAxEU;EAyEV,gBAxEU;ATwVZ;;AS9QA;EACE,YAAA;EACA,eAAA;ATiRF;;AS/QA;;EAEE,wBAAA;ATkRF;;AShRA;EACE,kBAvFgB;AT0WlB;;ASjRA;EACE,mBAAA;EACA,oBAAA;AToRF;;ASlRA;EACE,yBJ5Ga;EI6Gb,gBJvEY;AL4Vd;;ASjRA;EACE,YAAA;AToRF;;ASlRA;EHvDE,iCAAA;EGyDA,oCJ/Ga;EIgHb,yBJtHa;EIuHb,kBAjGc;EAkGd,gBAAA;EACA,uBAlGY;EAmGZ,gBAAA;EACA,iBAAA;ATqRF;ASpRE;EACE,6BAAA;EACA,mBAAA;EACA,cAvGiB;EAwGjB,UAAA;ATsRJ;;ASnRE;;EAEE,mBAAA;ATsRJ;ASrRI;;EACE,mBAAA;ATwRN;ASvRE;EACE,yBJ1IW;ALmaf;;AWzaA;EACE;IACE,uBAAA;EX4aF;EW3aA;IACE,yBAAA;EX6aF;AACF;;AWlbA;EACE;IACE,uBAAA;EX4aF;EW3aA;IACE,yBAAA;EX6aF;AACF;AYlbA,mBAAA;ACWA;EAEE,qCREa;EQDb,kBRyDa;EQxDb,0FHwFO;EGvFP,yBRTa;EQUb,cAAA;EACA,gBAZY;Abqbd;;AataE;EAEE,uFAfoB;AbubxB;AavaE;EACE,kFAhBqB;AbybzB;;ActYA;EAGE,qCThDa;ESiDb,gCTtDa;ESuDb,iBV5DqB;EU6DrB,yBT5Da;ES6Db,eAAA;EAGA,uBAAA;EACA,iCA7DwB;EA8DxB,iBA7D0B;EA8D1B,kBA9D0B;EA+D1B,8BAhEwB;EAiExB,kBAAA;EACA,mBAAA;AdqYF;AcpYE;EACE,cAAA;AdsYJ;AcpYI;EAIE,aAAA;EACA,YAAA;AdmYN;AclYI;ER8FA,+BQ7F0B;ER6F1B,oBQ5F0B;AdoY9B;AcnYI;ER2FA,mBQ1F0B;ER0F1B,gCQzF0B;AdqY9B;AcpYI;EACE,+BAAA;EACA,gCAAA;AdsYN;AcpYE;EAEE,gCTzFW;ES0FX,yBT7FW;ALkef;AcpYE;EAEE,mCThFW;ESiFX,yBTjGW;ALsef;AcpYI;EACE,iDAAA;AdsYN;AcrYE;EAEE,gCTrGW;ESsGX,yBTvGW;AL6ef;AcpYE;EACE,6BAAA;EACA,yBAAA;EACA,yBT3GW;ES4GX,0BA1FqB;AdgezB;AcrYI;EAIE,oCT3GS;ES4GT,yBTnHS;ALuff;AcnYI;EAEE,yBAAA;EACA,yBTvHS;AL2ff;AcnYI;EAEE,6BAAA;EACA,yBAAA;EACA,gBAAA;AdoYN;AcnYE;EACE,gBAvGsB;EAwGtB,yBAvGwB;EAwGxB,4BThHW;ESiHX,qBAvGsB;Ad4e1B;AcpYI;EAEE,4BTpHS;ESqHT,0BAzG0B;Ad8ehC;AcjYI;EACE,qCAHM;EAIN,yBAAA;EACA,wBAJa;AduYnB;AclYM;EAEE,yBAAA;EACA,yBAAA;EACA,wBATW;Ad4YnB;AclYM;EAEE,yBAAA;EACA,wBAbW;AdgZnB;AclYQ;EACE,mDAAA;AdoYV;AcnYM;EAEE,yBAAA;EACA,yBAAA;EACA,wBApBW;AdwZnB;AcnYM;EAEE,qCAxBI;EAyBJ,iCAzBI;EA0BJ,gBAAA;AdoYR;AcnYM;EACE,mCA3BW;EA4BX,0BA7BI;AdkaZ;AcpYQ;EAEE,uBAAA;AdqYV;AcpYQ;EAEE,mCAlCS;EAmCT,yBAAA;EACA,gBAAA;EACA,0BAtCE;Ad2aZ;AcnYQ;EACE,oFAAA;AdqYV;AcpYM;EACE,6BAAA;EACA,iCA5CI;EA6CJ,0BA7CI;AdmbZ;AcrYQ;EAIE,qCAlDE;EAmDF,iCAnDE;EAoDF,wBAnDS;AdubnB;AclYU;EACE,wFAAA;AdoYZ;Ac/XY;EACE,oFAAA;AdiYd;AchYQ;EAEE,6BAAA;EACA,iCAjEE;EAkEF,gBAAA;EACA,0BAnEE;AdocZ;AchYM;EACE,6BAAA;EACA,+BArEW;EAsEX,wBAtEW;AdwcnB;AcjYQ;EAIE,mCA3ES;EA4ET,0BA7EE;Ad6cZ;Ac1XY;EACE,wFAAA;Ad4Xd;Ac3XQ;EAEE,6BAAA;EACA,+BAvFS;EAwFT,gBAAA;EACA,wBAzFS;AdqdnB;AcpdI;EACE,mCAHM;EAIN,yBAAA;EACA,0BAJa;Ad0dnB;AcrdM;EAEE,yBAAA;EACA,yBAAA;EACA,0BATW;Ad+dnB;AcrdM;EAEE,yBAAA;EACA,0BAbW;AdmenB;AcrdQ;EACE,gDAAA;AdudV;ActdM;EAEE,uBAAA;EACA,yBAAA;EACA,0BApBW;Ad2enB;ActdM;EAEE,mCAxBI;EAyBJ,+BAzBI;EA0BJ,gBAAA;AdudR;ActdM;EACE,qCA3BW;EA4BX,wBA7BI;AdqfZ;AcvdQ;EAEE,yBAAA;AdwdV;AcvdQ;EAEE,qCAlCS;EAmCT,yBAAA;EACA,gBAAA;EACA,wBAtCE;Ad8fZ;ActdQ;EACE,wFAAA;AdwdV;AcvdM;EACE,6BAAA;EACA,+BA5CI;EA6CJ,wBA7CI;AdsgBZ;AcxdQ;EAIE,mCAlDE;EAmDF,+BAnDE;EAoDF,0BAnDS;Ad0gBnB;AcrdU;EACE,oFAAA;AdudZ;AcldY;EACE,wFAAA;Adodd;AcndQ;EAEE,6BAAA;EACA,+BAjEE;EAkEF,gBAAA;EACA,wBAnEE;AduhBZ;AcndM;EACE,6BAAA;EACA,iCArEW;EAsEX,0BAtEW;Ad2hBnB;AcpdQ;EAIE,qCA3ES;EA4ET,wBA7EE;AdgiBZ;Ac7cY;EACE,oFAAA;Ad+cd;Ac9cQ;EAEE,6BAAA;EACA,iCAvFS;EAwFT,gBAAA;EACA,0BAzFS;AdwiBnB;AcviBI;EACE,oCAHM;EAIN,yBAAA;EACA,yBAJa;Ad6iBnB;AcxiBM;EAEE,yBAAA;EACA,yBAAA;EACA,yBATW;AdkjBnB;AcxiBM;EAEE,yBAAA;EACA,yBAbW;AdsjBnB;AcxiBQ;EACE,mDAAA;Ad0iBV;AcziBM;EAEE,yBAAA;EACA,yBAAA;EACA,yBApBW;Ad8jBnB;AcziBM;EAEE,oCAxBI;EAyBJ,gCAzBI;EA0BJ,gBAAA;Ad0iBR;AcziBM;EACE,oCA3BW;EA4BX,yBA7BI;AdwkBZ;Ac1iBQ;EAEE,oCAAA;Ad2iBV;Ac1iBQ;EAEE,oCAlCS;EAmCT,yBAAA;EACA,gBAAA;EACA,yBAtCE;AdilBZ;AcziBQ;EACE,sFAAA;Ad2iBV;Ac1iBM;EACE,6BAAA;EACA,gCA5CI;EA6CJ,yBA7CI;AdylBZ;Ac3iBQ;EAIE,oCAlDE;EAmDF,gCAnDE;EAoDF,yBAnDS;Ad6lBnB;AcxiBU;EACE,sFAAA;Ad0iBZ;AcriBY;EACE,sFAAA;AduiBd;ActiBQ;EAEE,6BAAA;EACA,gCAjEE;EAkEF,gBAAA;EACA,yBAnEE;Ad0mBZ;ActiBM;EACE,6BAAA;EACA,gCArEW;EAsEX,yBAtEW;Ad8mBnB;AcviBQ;EAIE,oCA3ES;EA4ET,yBA7EE;AdmnBZ;AchiBY;EACE,sFAAA;AdkiBd;AcjiBQ;EAEE,6BAAA;EACA,gCAvFS;EAwFT,gBAAA;EACA,yBAzFS;Ad2nBnB;Ac1nBI;EACE,oCAHM;EAIN,yBAAA;EACA,WAJa;AdgoBnB;Ac3nBM;EAEE,yBAAA;EACA,yBAAA;EACA,WATW;AdqoBnB;Ac3nBM;EAEE,yBAAA;EACA,WAbW;AdyoBnB;Ac3nBQ;EACE,gDAAA;Ad6nBV;Ac5nBM;EAEE,yBAAA;EACA,yBAAA;EACA,WApBW;AdipBnB;Ac5nBM;EAEE,oCAxBI;EAyBJ,gCAzBI;EA0BJ,gBAAA;Ad6nBR;Ac5nBM;EACE,sBA3BW;EA4BX,yBA7BI;Ad2pBZ;Ac7nBQ;EAEE,yBAAA;Ad8nBV;Ac7nBQ;EAEE,sBAlCS;EAmCT,yBAAA;EACA,gBAAA;EACA,yBAtCE;AdoqBZ;Ac5nBQ;EACE,0DAAA;Ad8nBV;Ac7nBM;EACE,6BAAA;EACA,gCA5CI;EA6CJ,yBA7CI;Ad4qBZ;Ac9nBQ;EAIE,oCAlDE;EAmDF,gCAnDE;EAoDF,WAnDS;AdgrBnB;Ac3nBU;EACE,sFAAA;Ad6nBZ;AcxnBY;EACE,0DAAA;Ad0nBd;AcznBQ;EAEE,6BAAA;EACA,gCAjEE;EAkEF,gBAAA;EACA,yBAnEE;Ad6rBZ;AcznBM;EACE,6BAAA;EACA,kBArEW;EAsEX,WAtEW;AdisBnB;Ac1nBQ;EAIE,sBA3ES;EA4ET,yBA7EE;AdssBZ;AcnnBY;EACE,sFAAA;AdqnBd;AcpnBQ;EAEE,6BAAA;EACA,kBAvFS;EAwFT,gBAAA;EACA,WAzFS;Ad8sBnB;Ac7sBI;EACE,wCAHM;EAIN,yBAAA;EACA,WAJa;AdmtBnB;Ac9sBM;EAEE,yBAAA;EACA,yBAAA;EACA,WATW;AdwtBnB;Ac9sBM;EAEE,yBAAA;EACA,WAbW;Ad4tBnB;Ac9sBQ;EACE,iDAAA;AdgtBV;Ac/sBM;EAEE,yBAAA;EACA,yBAAA;EACA,WApBW;AdouBnB;Ac/sBM;EAEE,wCAxBI;EAyBJ,oCAzBI;EA0BJ,gBAAA;AdgtBR;Ac/sBM;EACE,sBA3BW;EA4BX,6BA7BI;Ad8uBZ;AchtBQ;EAEE,yBAAA;AditBV;AchtBQ;EAEE,sBAlCS;EAmCT,yBAAA;EACA,gBAAA;EACA,6BAtCE;AduvBZ;Ac/sBQ;EACE,0DAAA;AditBV;AchtBM;EACE,6BAAA;EACA,oCA5CI;EA6CJ,6BA7CI;Ad+vBZ;AcjtBQ;EAIE,wCAlDE;EAmDF,oCAnDE;EAoDF,WAnDS;AdmwBnB;Ac9sBU;EACE,8FAAA;AdgtBZ;Ac3sBY;EACE,0DAAA;Ad6sBd;Ac5sBQ;EAEE,6BAAA;EACA,oCAjEE;EAkEF,gBAAA;EACA,6BAnEE;AdgxBZ;Ac5sBM;EACE,6BAAA;EACA,kBArEW;EAsEX,WAtEW;AdoxBnB;Ac7sBQ;EAIE,sBA3ES;EA4ET,6BA7EE;AdyxBZ;ActsBY;EACE,8FAAA;AdwsBd;AcvsBQ;EAEE,6BAAA;EACA,kBAvFS;EAwFT,gBAAA;EACA,WAzFS;AdiyBnB;AcnsBQ;EACE,yBAHY;EAIZ,cAHW;AdwsBrB;AcpsBU;EAEE,yBAAA;EACA,yBAAA;EACA,cARS;Ad6sBrB;AcpsBU;EAEE,yBAAA;EACA,yBAAA;EACA,cAbS;AdktBrB;Ac9yBI;EACE,uCAHM;EAIN,yBAAA;EACA,WAJa;AdozBnB;Ac/yBM;EAEE,yBAAA;EACA,yBAAA;EACA,WATW;AdyzBnB;Ac/yBM;EAEE,yBAAA;EACA,WAbW;Ad6zBnB;Ac/yBQ;EACE,iDAAA;AdizBV;AchzBM;EAEE,yBAAA;EACA,yBAAA;EACA,WApBW;Adq0BnB;AchzBM;EAEE,uCAxBI;EAyBJ,mCAzBI;EA0BJ,gBAAA;AdizBR;AchzBM;EACE,sBA3BW;EA4BX,4BA7BI;Ad+0BZ;AcjzBQ;EAEE,yBAAA;AdkzBV;AcjzBQ;EAEE,sBAlCS;EAmCT,yBAAA;EACA,gBAAA;EACA,4BAtCE;Adw1BZ;AchzBQ;EACE,0DAAA;AdkzBV;AcjzBM;EACE,6BAAA;EACA,mCA5CI;EA6CJ,4BA7CI;Adg2BZ;AclzBQ;EAIE,uCAlDE;EAmDF,mCAnDE;EAoDF,WAnDS;Ado2BnB;Ac/yBU;EACE,4FAAA;AdizBZ;Ac5yBY;EACE,0DAAA;Ad8yBd;Ac7yBQ;EAEE,6BAAA;EACA,mCAjEE;EAkEF,gBAAA;EACA,4BAnEE;Adi3BZ;Ac7yBM;EACE,6BAAA;EACA,kBArEW;EAsEX,WAtEW;Adq3BnB;Ac9yBQ;EAIE,sBA3ES;EA4ET,4BA7EE;Ad03BZ;AcvyBY;EACE,4FAAA;AdyyBd;AcxyBQ;EAEE,6BAAA;EACA,kBAvFS;EAwFT,gBAAA;EACA,WAzFS;Adk4BnB;AcpyBQ;EACE,yBAHY;EAIZ,cAHW;AdyyBrB;AcryBU;EAEE,yBAAA;EACA,yBAAA;EACA,cARS;Ad8yBrB;AcryBU;EAEE,yBAAA;EACA,yBAAA;EACA,cAbS;AdmzBrB;Ac/4BI;EACE,uCAHM;EAIN,yBAAA;EACA,WAJa;Adq5BnB;Ach5BM;EAEE,yBAAA;EACA,yBAAA;EACA,WATW;Ad05BnB;Ach5BM;EAEE,yBAAA;EACA,WAbW;Ad85BnB;Ach5BQ;EACE,kDAAA;Adk5BV;Acj5BM;EAEE,yBAAA;EACA,yBAAA;EACA,WApBW;Ads6BnB;Acj5BM;EAEE,uCAxBI;EAyBJ,mCAzBI;EA0BJ,gBAAA;Adk5BR;Acj5BM;EACE,sBA3BW;EA4BX,4BA7BI;Adg7BZ;Acl5BQ;EAEE,yBAAA;Adm5BV;Acl5BQ;EAEE,sBAlCS;EAmCT,yBAAA;EACA,gBAAA;EACA,4BAtCE;Ady7BZ;Acj5BQ;EACE,0DAAA;Adm5BV;Acl5BM;EACE,6BAAA;EACA,mCA5CI;EA6CJ,4BA7CI;Adi8BZ;Acn5BQ;EAIE,uCAlDE;EAmDF,mCAnDE;EAoDF,WAnDS;Adq8BnB;Ach5BU;EACE,4FAAA;Adk5BZ;Ac74BY;EACE,0DAAA;Ad+4Bd;Ac94BQ;EAEE,6BAAA;EACA,mCAjEE;EAkEF,gBAAA;EACA,4BAnEE;Adk9BZ;Ac94BM;EACE,6BAAA;EACA,kBArEW;EAsEX,WAtEW;Ads9BnB;Ac/4BQ;EAIE,sBA3ES;EA4ET,4BA7EE;Ad29BZ;Acx4BY;EACE,4FAAA;Ad04Bd;Acz4BQ;EAEE,6BAAA;EACA,kBAvFS;EAwFT,gBAAA;EACA,WAzFS;Adm+BnB;Acr4BQ;EACE,yBAHY;EAIZ,cAHW;Ad04BrB;Act4BU;EAEE,yBAAA;EACA,yBAAA;EACA,cARS;Ad+4BrB;Act4BU;EAEE,yBAAA;EACA,yBAAA;EACA,cAbS;Ado5BrB;Ach/BI;EACE,uCAHM;EAIN,yBAAA;EACA,WAJa;Ads/BnB;Acj/BM;EAEE,yBAAA;EACA,yBAAA;EACA,WATW;Ad2/BnB;Acj/BM;EAEE,yBAAA;EACA,WAbW;Ad+/BnB;Acj/BQ;EACE,kDAAA;Adm/BV;Acl/BM;EAEE,yBAAA;EACA,yBAAA;EACA,WApBW;AdugCnB;Acl/BM;EAEE,uCAxBI;EAyBJ,mCAzBI;EA0BJ,gBAAA;Adm/BR;Acl/BM;EACE,sBA3BW;EA4BX,4BA7BI;AdihCZ;Acn/BQ;EAEE,yBAAA;Ado/BV;Acn/BQ;EAEE,sBAlCS;EAmCT,yBAAA;EACA,gBAAA;EACA,4BAtCE;Ad0hCZ;Acl/BQ;EACE,0DAAA;Ado/BV;Acn/BM;EACE,6BAAA;EACA,mCA5CI;EA6CJ,4BA7CI;AdkiCZ;Acp/BQ;EAIE,uCAlDE;EAmDF,mCAnDE;EAoDF,WAnDS;AdsiCnB;Acj/BU;EACE,4FAAA;Adm/BZ;Ac9+BY;EACE,0DAAA;Adg/Bd;Ac/+BQ;EAEE,6BAAA;EACA,mCAjEE;EAkEF,gBAAA;EACA,4BAnEE;AdmjCZ;Ac/+BM;EACE,6BAAA;EACA,kBArEW;EAsEX,WAtEW;AdujCnB;Ach/BQ;EAIE,sBA3ES;EA4ET,4BA7EE;Ad4jCZ;Acz+BY;EACE,4FAAA;Ad2+Bd;Ac1+BQ;EAEE,6BAAA;EACA,kBAvFS;EAwFT,gBAAA;EACA,WAzFS;AdokCnB;Act+BQ;EACE,yBAHY;EAIZ,cAHW;Ad2+BrB;Acv+BU;EAEE,yBAAA;EACA,yBAAA;EACA,cARS;Adg/BrB;Acv+BU;EAEE,yBAAA;EACA,yBAAA;EACA,cAbS;Adq/BrB;AcjlCI;EACE,uCAHM;EAIN,yBAAA;EACA,yBAJa;AdulCnB;AcllCM;EAEE,yBAAA;EACA,yBAAA;EACA,yBATW;Ad4lCnB;AcllCM;EAEE,yBAAA;EACA,yBAbW;AdgmCnB;AcllCQ;EACE,mDAAA;AdolCV;AcnlCM;EAEE,yBAAA;EACA,yBAAA;EACA,yBApBW;AdwmCnB;AcnlCM;EAEE,uCAxBI;EAyBJ,mCAzBI;EA0BJ,gBAAA;AdolCR;AcnlCM;EACE,oCA3BW;EA4BX,4BA7BI;AdknCZ;AcplCQ;EAEE,oCAAA;AdqlCV;AcplCQ;EAEE,oCAlCS;EAmCT,yBAAA;EACA,gBAAA;EACA,4BAtCE;Ad2nCZ;AcnlCQ;EACE,sFAAA;AdqlCV;AcplCM;EACE,6BAAA;EACA,mCA5CI;EA6CJ,4BA7CI;AdmoCZ;AcrlCQ;EAIE,uCAlDE;EAmDF,mCAnDE;EAoDF,yBAnDS;AduoCnB;AcllCU;EACE,4FAAA;AdolCZ;Ac/kCY;EACE,sFAAA;AdilCd;AchlCQ;EAEE,6BAAA;EACA,mCAjEE;EAkEF,gBAAA;EACA,4BAnEE;AdopCZ;AchlCM;EACE,6BAAA;EACA,gCArEW;EAsEX,yBAtEW;AdwpCnB;AcjlCQ;EAIE,oCA3ES;EA4ET,4BA7EE;Ad6pCZ;Ac1kCY;EACE,4FAAA;Ad4kCd;Ac3kCQ;EAEE,6BAAA;EACA,gCAvFS;EAwFT,gBAAA;EACA,yBAzFS;AdqqCnB;AcvkCQ;EACE,yBAHY;EAIZ,cAHW;Ad4kCrB;AcxkCU;EAEE,yBAAA;EACA,yBAAA;EACA,cARS;AdilCrB;AcxkCU;EAEE,yBAAA;EACA,yBAAA;EACA,cAbS;AdslCrB;AclrCI;EACE,uCAHM;EAIN,yBAAA;EACA,WAJa;AdwrCnB;AcnrCM;EAEE,yBAAA;EACA,yBAAA;EACA,WATW;Ad6rCnB;AcnrCM;EAEE,yBAAA;EACA,WAbW;AdisCnB;AcnrCQ;EACE,kDAAA;AdqrCV;AcprCM;EAEE,yBAAA;EACA,yBAAA;EACA,WApBW;AdysCnB;AcprCM;EAEE,uCAxBI;EAyBJ,mCAzBI;EA0BJ,gBAAA;AdqrCR;AcprCM;EACE,sBA3BW;EA4BX,4BA7BI;AdmtCZ;AcrrCQ;EAEE,yBAAA;AdsrCV;AcrrCQ;EAEE,sBAlCS;EAmCT,yBAAA;EACA,gBAAA;EACA,4BAtCE;Ad4tCZ;AcprCQ;EACE,0DAAA;AdsrCV;AcrrCM;EACE,6BAAA;EACA,mCA5CI;EA6CJ,4BA7CI;AdouCZ;ActrCQ;EAIE,uCAlDE;EAmDF,mCAnDE;EAoDF,WAnDS;AdwuCnB;AcnrCU;EACE,4FAAA;AdqrCZ;AchrCY;EACE,0DAAA;AdkrCd;AcjrCQ;EAEE,6BAAA;EACA,mCAjEE;EAkEF,gBAAA;EACA,4BAnEE;AdqvCZ;AcjrCM;EACE,6BAAA;EACA,kBArEW;EAsEX,WAtEW;AdyvCnB;AclrCQ;EAIE,sBA3ES;EA4ET,4BA7EE;Ad8vCZ;Ac3qCY;EACE,4FAAA;Ad6qCd;Ac5qCQ;EAEE,6BAAA;EACA,kBAvFS;EAwFT,gBAAA;EACA,WAzFS;AdswCnB;AcxqCQ;EACE,yBAHY;EAIZ,cAHW;Ad6qCrB;AczqCU;EAEE,yBAAA;EACA,yBAAA;EACA,cARS;AdkrCrB;AczqCU;EAEE,yBAAA;EACA,yBAAA;EACA,cAbS;AdurCrB;AcxqCE;EAtMA,kBTdO;AL+3CT;Acn3CE;EACE,kBTkBW;ALm2Cf;Ac5qCE;EAtMA,eTjBO;ALs4CT;Ac7qCE;EAtMA,kBTpBO;AL04CT;Ac9qCE;EAtMA,iBTvBO;AL84CT;Ac9qCE;EAEE,qCTtPW;ESuPX,gCT5PW;ES6PX,gBAjOqB;EAkOrB,YAjOsB;Adg5C1B;Ac9qCE;EACE,aAAA;EACA,WAAA;AdgrCJ;Ac/qCE;EACE,6BAAA;EACA,oBAAA;AdirCJ;AchrCI;ERtQF,kBAAA;EAKE,6BAAA;EACA,4BAAA;EQmQE,6BAAA;AdmrCN;AclrCE;EACE,oCTvQW;ESwQX,gCT3QW;ES4QX,yBT9QW;ES+QX,gBAAA;EACA,oBAAA;AdorCJ;AcnrCE;EACE,qBTlNa;ESmNb,gCAAA;EACA,iCAAA;AdqrCJ;;AcnrCA;EACE,mBAAA;EACA,aAAA;EACA,eAAA;EACA,2BAAA;AdsrCF;AcrrCE;EACE,qBAAA;AdurCJ;ActrCI;ERjHA,oBQkH0B;AdwrC9B;AcvrCE;EACE,sBAAA;AdyrCJ;AcxrCE;EACE,mBAAA;Ad0rCJ;AcvrCI;EAzPF,kBTdO;ALi8CT;Acr7CE;EACE,kBTkBW;ALq6Cf;Ac1rCI;EAxPF,kBTpBO;ALy8CT;Ac1rCI;EAzPF,iBTvBO;AL68CT;AczrCM;EACE,4BAAA;EACA,yBAAA;Ad2rCR;Ac1rCM;EACE,6BAAA;EACA,0BAAA;ERxIJ,kBQyI4B;Ad4rChC;Ac3rCM;ER1IF,eQ2I4B;Ad6rChC;Ac5rCM;EAEE,UAAA;Ad6rCR;Ac5rCM;EAKE,UAAA;Ad0rCR;AczrCQ;EACE,UAAA;Ad2rCV;Ac1rCM;EACE,YAAA;EACA,cAAA;Ad4rCR;Ac3rCE;EACE,uBAAA;Ad6rCJ;Ac3rCM;EACE,oBAAA;EACA,qBAAA;Ad6rCR;Ac5rCE;EACE,yBAAA;Ad8rCJ;Ac5rCM;EACE,oBAAA;EACA,qBAAA;Ad8rCR;;AMz7CE;EQiQM;IACE,oBAlTgB;Ed8+CxB;Ec1rCM;;IAEE,qBAtTgB;Edk/CxB;EcjsCM;IACE,kBAlTgB;Edq/CxB;EcpsCM;IACE,eAlTgB;Edw/CxB;AACF;AMr8CE;EQ6PM;IACE,qBAlTgB;Ed6/CxB;EczsCM;;IAEE,kBAtTgB;EdigDxB;EchtCM;IACE,eAlTgB;EdogDxB;EcntCM;IACE,kBAlTgB;EdugDxB;AACF;AejjDA;EACE,YAAA;EACA,cAAA;EACA,kBAAA;EACA,WAAA;AfmjDF;AeljDE;EACE,0BAAA;EACA,kBVyCE;EUxCF,mBVwCE;EUvCF,WAAA;AfojDJ;AM58CE;ESjHF;IAWI,gBAAA;EfsjDF;AACF;AMv8CI;ES9GA;IACE,iBAAA;EfwjDJ;AACF;AM77CI;ES1HA;IACE,iBAAA;Ef0jDJ;AACF;AM58CI;ES7GA;IACE,iBAAA;Ef4jDJ;AACF;AMl8CI;ESzHA;IACE,iBAAA;Ef8jDJ;AACF;;AgBhkDE;EACE,kBAAA;AhBmkDJ;AgB1jDI;;;;;;;EACE,kBAhCwB;AhBkmD9B;AgBjkDE;;;;;;EAME,yBXvCW;EWwCX,gBXHc;EWId,kBA3C0B;AhB8mD9B;AgBlkDE;EACE,cAAA;EACA,oBAAA;AhBokDJ;AgBnkDI;EACE,eAAA;AhBqkDN;AgBpkDE;EACE,iBAAA;EACA,uBAAA;AhBskDJ;AgBrkDI;EACE,oBAAA;AhBukDN;AgBtkDE;EACE,gBAAA;EACA,uBAAA;AhBwkDJ;AgBvkDI;EACE,oBAAA;AhBykDN;AgBxkDE;EACE,iBAAA;EACA,oBAAA;AhB0kDJ;AgBzkDE;EACE,kBAAA;EACA,uBAAA;AhB2kDJ;AgB1kDE;EACE,cAAA;EACA,kBAAA;AhB4kDJ;AgB3kDE;EACE,oCX5DW;ECuKX,yCU3K6B;EAkE7B,qBAjEyB;AhB8oD7B;AgB5kDE;EACE,4BAAA;EVuGA,gBUtGwB;EACxB,eAAA;AhB8kDJ;AgB7kDI;EACE,wBAAA;AhB+kDN;AgB9kDM;EACE,4BAAA;AhBglDR;AgB/kDM;EACE,4BAAA;AhBilDR;AgBhlDM;EACE,4BAAA;AhBklDR;AgBjlDM;EACE,4BAAA;AhBmlDR;AgBllDE;EACE,wBAAA;EVyFA,gBUxFwB;EACxB,eAAA;AhBolDJ;AgBnlDI;EACE,uBAAA;EACA,iBAAA;AhBqlDN;AgBplDM;EACE,uBAAA;AhBslDR;AgBrlDE;EViFE,gBUhFwB;AhBulD5B;AgBtlDE;EACE,gBAAA;EACA,iBAAA;EACA,kBAAA;AhBwlDJ;AgBvlDI;EACE,eAAA;AhBylDN;AgBxlDI;EACE,kBAAA;AhB0lDN;AgBzlDI;EACE,qBAAA;AhB2lDN;AgB1lDI;EACE,kBAAA;AhB4lDN;AgB3lDE;EV9CA,iCAAA;EUgDE,gBAAA;EACA,qBAxGkB;EAyGlB,gBAAA;EACA,iBAAA;AhB6lDJ;AgB5lDE;;EAEE,cAAA;AhB8lDJ;AgB7lDE;EACE,WAAA;AhB+lDJ;AgB9lDI;;EAEE,oCAhHsB;EAiHtB,qBAhH4B;EAiH5B,qBAhHuB;EAiHvB,mBAAA;AhBgmDN;AgB/lDI;EACE,yBX7HS;AL8tDf;AgBhmDM;EACE,mBAAA;AhBkmDR;AgBhmDM;;EAEE,qBAvH+B;EAwH/B,yBXpIO;ALsuDf;AgBhmDM;;EAEE,qBAzH+B;EA0H/B,yBXzIO;AL2uDf;AgB9lDU;;EAEE,sBAjI2C;AhBiuDvD;AgB9lDI;EACE,aAAA;AhBgmDN;AgB9lDE;EACE,kBXrHK;ALqtDT;AgB/lDE;EACE,eXxHK;ALytDT;AgBhmDE;EACE,kBX3HK;AL6tDT;AgBjmDE;EACE,iBX9HK;ALiuDT;;AiB9vDA;EACE,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,cAVgB;EAWhB,aAXgB;AjB4wDlB;AiB/vDE;EACE,YAboB;EAcpB,WAdoB;AjB+wDxB;AiBhwDE;EACE,YAfqB;EAgBrB,WAhBqB;AjBkxDzB;AiBjwDE;EACE,YAjBoB;EAkBpB,WAlBoB;AjBqxDxB;;AiBjwDA;EACE,uBAAA;EACA,cAAA;EACA,oBAAA;EACA,eAAA;EACA,mBA5BgB;EA6BhB,mBAAA;AjBowDF;AiBnwDE;EACE,YAAA;EACA,cAAA;AjBqwDJ;AiBpwDI;EAEI,oBA/BY;AjBoyDpB;AiBlwDI;EAEI,mBApCY;AjBuyDpB;;AiB/vDA;EACE,aAAA;AjBkwDF;;AkB3yDA;EACE,cAAA;EACA,kBAAA;AlB8yDF;AkB7yDE;EACE,cAAA;EACA,YAAA;EACA,WAAA;AlB+yDJ;AkB9yDI;EACE,qBb4DW;ALovDjB;AkB/yDE;EACE,WAAA;AlBizDJ;AkB/xDI;;;;;;;;;;;;;;;;;EAGE,YAAA;EACA,WAAA;AlB+yDN;AkB9yDE;EAEE,iBAAA;AlB+yDJ;AkB9yDE;EACE,gBAAA;AlBgzDJ;AkB/yDE;EACE,gBAAA;AlBizDJ;AkBhzDE;EACE,qBAAA;AlBkzDJ;AkBjzDE;EACE,gBAAA;AlBmzDJ;AkBlzDE;EACE,mBAAA;AlBozDJ;AkBnzDE;EACE,gBAAA;AlBqzDJ;AkBpzDE;EACE,qBAAA;AlBszDJ;AkBrzDE;EACE,iBAAA;AlBuzDJ;AkBtzDE;EACE,sBAAA;AlBwzDJ;AkBvzDE;EACE,iBAAA;AlByzDJ;AkBxzDE;EACE,sBAAA;AlB0zDJ;AkBzzDE;EACE,sBAAA;AlB2zDJ;AkB1zDE;EACE,iBAAA;AlB4zDJ;AkB3zDE;EACE,iBAAA;AlB6zDJ;AkB1zDI;EACE,YAAA;EACA,WAAA;AlB4zDN;AkB9zDI;EACE,YAAA;EACA,WAAA;AlBg0DN;AkBl0DI;EACE,YAAA;EACA,WAAA;AlBo0DN;AkBt0DI;EACE,YAAA;EACA,WAAA;AlBw0DN;AkB10DI;EACE,YAAA;EACA,WAAA;AlB40DN;AkB90DI;EACE,YAAA;EACA,WAAA;AlBg1DN;AkBl1DI;EACE,aAAA;EACA,YAAA;AlBo1DN;;AmBj5DA;EAEE,oCAAA;EACA,kBdwDO;EcvDP,kBAAA;EAEE,sCAXuB;AnB65D3B;AmB/4DE;EACE,mBAAA;EACA,0BAAA;AnBi5DJ;AmBh5DE;EACE,mBAAA;AnBk5DJ;AmBj5DE;;EAEE,+BdZW;AL+5Df;AmBl5DE;EACE,uBAAA;AnBo5DJ;AmBn5DE;Eb8JE,aa7Jc;EACd,kBAAA;EACA,WAAA;AnBq5DJ;AmBp5DE;;;EAGE,mBAAA;AnBs5DJ;AmBj5DI;EACE,qCAHM;EAIN,wBAHa;AnBs5DnB;AmBr5DI;EACE,mCAHM;EAIN,0BAHa;AnB05DnB;AmBz5DI;EACE,oCAHM;EAIN,yBAHa;AnB85DnB;AmB75DI;EACE,oCAHM;EAIN,WAHa;AnBk6DnB;AmBj6DI;EACE,wCAHM;EAIN,WAHa;AnBs6DnB;AmB95DQ;EACE,yBAHY;EAIZ,cAHW;AnBm6DrB;AmBz6DI;EACE,uCAHM;EAIN,WAHa;AnB86DnB;AmBt6DQ;EACE,yBAHY;EAIZ,cAHW;AnB26DrB;AmBj7DI;EACE,uCAHM;EAIN,WAHa;AnBs7DnB;AmB96DQ;EACE,yBAHY;EAIZ,cAHW;AnBm7DrB;AmBz7DI;EACE,uCAHM;EAIN,WAHa;AnB87DnB;AmBt7DQ;EACE,yBAHY;EAIZ,cAHW;AnB27DrB;AmBj8DI;EACE,uCAHM;EAIN,yBAHa;AnBs8DnB;AmB97DQ;EACE,yBAHY;EAIZ,cAHW;AnBm8DrB;AmBz8DI;EACE,uCAHM;EAIN,WAHa;AnB88DnB;AmBt8DQ;EACE,yBAHY;EAIZ,cAHW;AnB28DrB;;AoBj/DA;EAEE,qBAAA;EACA,wBAAA;EACA,YAAA;EACA,qBfyDe;EexDf,cAAA;EACA,YfoBO;EenBP,gBAAA;EACA,UAAA;EACA,WAAA;ApBm/DF;AoBl/DE;EACE,oCfXY;AL+/DhB;AoBn/DE;EACE,oCfjBW;ALsgEf;AoBp/DE;EACE,oCfnBW;ALygEf;AoBr/DE;EACE,oCfrBW;EesBX,YAAA;ApBu/DJ;AoBl/DM;EACE,qCAHI;ApBu/DZ;AoBn/DM;EACE,qCALI;ApB0/DZ;AoBp/DM;EACE,qCAPI;ApB6/DZ;AoBr/DM;EACE,4FAAA;ApBu/DR;AoB9/DM;EACE,mCAHI;ApBmgEZ;AoB//DM;EACE,mCALI;ApBsgEZ;AoBhgEM;EACE,mCAPI;ApBygEZ;AoBjgEM;EACE,0FAAA;ApBmgER;AoB1gEM;EACE,oCAHI;ApB+gEZ;AoB3gEM;EACE,oCALI;ApBkhEZ;AoB5gEM;EACE,oCAPI;ApBqhEZ;AoB7gEM;EACE,2FAAA;ApB+gER;AoBthEM;EACE,oCAHI;ApB2hEZ;AoBvhEM;EACE,oCALI;ApB8hEZ;AoBxhEM;EACE,oCAPI;ApBiiEZ;AoBzhEM;EACE,2FAAA;ApB2hER;AoBliEM;EACE,wCAHI;ApBuiEZ;AoBniEM;EACE,wCALI;ApB0iEZ;AoBpiEM;EACE,wCAPI;ApB6iEZ;AoBriEM;EACE,+FAAA;ApBuiER;AoB9iEM;EACE,uCAHI;ApBmjEZ;AoB/iEM;EACE,uCALI;ApBsjEZ;AoBhjEM;EACE,uCAPI;ApByjEZ;AoBjjEM;EACE,8FAAA;ApBmjER;AoB1jEM;EACE,uCAHI;ApB+jEZ;AoB3jEM;EACE,uCALI;ApBkkEZ;AoB5jEM;EACE,uCAPI;ApBqkEZ;AoB7jEM;EACE,8FAAA;ApB+jER;AoBtkEM;EACE,uCAHI;ApB2kEZ;AoBvkEM;EACE,uCALI;ApB8kEZ;AoBxkEM;EACE,uCAPI;ApBilEZ;AoBzkEM;EACE,8FAAA;ApB2kER;AoBllEM;EACE,uCAHI;ApBulEZ;AoBnlEM;EACE,uCALI;ApB0lEZ;AoBplEM;EACE,uCAPI;ApB6lEZ;AoBrlEM;EACE,8FAAA;ApBulER;AoB9lEM;EACE,uCAHI;ApBmmEZ;AoB/lEM;EACE,uCALI;ApBsmEZ;AoBhmEM;EACE,uCAPI;ApBymEZ;AoBjmEM;EACE,8FAAA;ApBmmER;AoBjmEE;EACE,gCAtC8B;UAsC9B,wBAtC8B;EAuC9B,2CAAA;UAAA,mCAAA;EACA,yCAAA;UAAA,iCAAA;EACA,yCAAA;UAAA,iCAAA;EACA,oCfrCY;EesCZ,2FAAA;EACA,6BAAA;EACA,4BAAA;EACA,0BAAA;ApBmmEJ;AoBlmEI;EACE,6BAAA;ApBomEN;AoBnmEI;EACE,6BAAA;ApBqmEN;AoBpmEI;EACE,oBAAA;ApBsmEN;AoBnmEE;EACE,efxBK;AL6nET;AoBpmEE;EACE,ef5BK;ALkoET;AoBrmEE;EACE,cf/BK;ALsoET;;AoBrmEA;EACE;IACE,2BAAA;EpBwmEF;EoBvmEA;IACE,4BAAA;EpBymEF;AACF;;AoB9mEA;EACE;IACE,2BAAA;EpBwmEF;EoBvmEA;IACE,4BAAA;EpBymEF;AACF;AqBppEA;EAEE,qChBjBa;EgBkBb,yBhB3Ba;ALgrEf;AqBppEE;;EAEE,oCA/BgB;EAgChB,qBA/BsB;EAgCtB,qBA/BiB;EAgCjB,mBAAA;ArBspEJ;AqBjpEM;;EACE,qCAHM;EAIN,iCAJM;EAKN,wBAJa;ArBwpErB;AqBvpEM;;EACE,mCAHM;EAIN,+BAJM;EAKN,0BAJa;ArB8pErB;AqB7pEM;;EACE,oCAHM;EAIN,gCAJM;EAKN,yBAJa;ArBoqErB;AqBnqEM;;EACE,oCAHM;EAIN,gCAJM;EAKN,WAJa;ArB0qErB;AqBzqEM;;EACE,wCAHM;EAIN,oCAJM;EAKN,WAJa;ArBgrErB;AqB/qEM;;EACE,uCAHM;EAIN,mCAJM;EAKN,WAJa;ArBsrErB;AqBrrEM;;EACE,uCAHM;EAIN,mCAJM;EAKN,WAJa;ArB4rErB;AqB3rEM;;EACE,uCAHM;EAIN,mCAJM;EAKN,WAJa;ArBksErB;AqBjsEM;;EACE,uCAHM;EAIN,mCAJM;EAKN,yBAJa;ArBwsErB;AqBvsEM;;EACE,uCAHM;EAIN,mCAJM;EAKN,WAJa;ArB8sErB;AqBxsEI;;EACE,mBAAA;EACA,SAAA;ArB2sEN;AqB1sEI;;EACE,wChBjCS;EgBkCT,WX9BW;AV2uEjB;AqB5sEM;;;;EAEE,mBAAA;ArBgtER;AqB/sEI;;EACE,sBAAA;ArBktEN;AqBjtEE;EACE,yBhBvDW;AL0wEf;AqBltEI;EACE,gBAtDkB;ArB0wExB;AqBltEI;EACE,wChB9CS;EgB+CT,WX3CW;AV+vEjB;AqBntEM;;EAEE,mBAAA;ArBqtER;AqBptEM;;EAEE,kBXjDS;EWkDT,mBAAA;ArBstER;AqBrtEE;EACE,6BA5D0B;ArBmxE9B;AqBttEI;;EAEE,qBApEyB;EAqEzB,yBhB1ES;ALkyEf;AqBvtEE;EACE,6BAhE0B;ArByxE9B;AqBxtEI;;EAEE,qBAxEyB;EAyEzB,yBhBhFS;AL0yEf;AqBztEE;EACE,6BAvE0B;ArBkyE9B;AqBxtEQ;;EAEE,sBAAA;ArB0tEV;AqBvtEI;;EAEE,iBAAA;ArBytEN;AqBttEQ;;EAEE,wBAAA;ArBwtEV;AqBvtEE;EACE,WAAA;ArBytEJ;AqBrtEQ;EACE,oChBhGK;ALuzEf;AqBntEU;EACE,oChBrGG;AL0zEf;AqBptEY;EACE,oChBxGC;AL8zEf;AqBptEI;;EAEE,qBAAA;ArBstEN;AqBltEQ;EACE,oChBhHK;ALo0Ef;;AqBltEA;Ef7DE,iCAAA;EegEA,cAAA;EACA,kBAAA;EACA,eAAA;ArBotEF;;AsBh1EA;EACE,mBAAA;EACA,aAAA;EACA,eAAA;EACA,2BAAA;AtBm1EF;AsBl1EE;EACE,qBAAA;AtBo1EJ;AsBn1EI;EhBoKA,oBgBnK0B;AtBq1E9B;AsBp1EE;EACE,sBAAA;AtBs1EJ;AsBr1EE;EACE,mBAAA;AtBu1EJ;AsBp1EI;EACE,ejBYG;AL00ET;AsBp1EI;EACE,kBjBQG;AL80ET;AsBr1EE;EACE,uBAAA;AtBu1EJ;AsBt1EI;EACE,qBAAA;EACA,oBAAA;AtBw1EN;AsBv1EE;EACE,yBAAA;AtBy1EJ;AsBv1EM;EACE,mBAAA;AtBy1ER;AsBx1EM;EACE,eAAA;AtB01ER;AsBx1EI;EhB0IA,egBzI0B;AtB01E9B;AsBz1EM;EhBwIF,cgBvI4B;EAEtB,yBAAA;EACA,4BAAA;AtB01EV;AsBt1EM;EAEI,0BAAA;EACA,6BAAA;AtBu1EV;;AsBl1EA;EACE,mBAAA;EACA,oCjBjDa;EiBkDb,kBjBOO;EiBNP,yBjBzDa;EiB0Db,oBAAA;EACA,kBjB5BO;EiB6BP,WAAA;EACA,uBAAA;EACA,gBAAA;EACA,oBAAA;EACA,qBAAA;EACA,mBAAA;AtBq1EF;AsBp1EE;EhB2GE,oBgB1GwB;EhB0GxB,uBgBzGwB;AtBs1E5B;AsBj1EI;EACE,qCAHM;EAIN,wBAHa;AtBs1EnB;AsBr1EI;EACE,mCAHM;EAIN,0BAHa;AtB01EnB;AsBz1EI;EACE,oCAHM;EAIN,yBAHa;AtB81EnB;AsB71EI;EACE,oCAHM;EAIN,WAHa;AtBk2EnB;AsBj2EI;EACE,wCAHM;EAIN,WAHa;AtBs2EnB;AsB91EQ;EACE,yBAHY;EAIZ,cAHW;AtBm2ErB;AsBz2EI;EACE,uCAHM;EAIN,WAHa;AtB82EnB;AsBt2EQ;EACE,yBAHY;EAIZ,cAHW;AtB22ErB;AsBj3EI;EACE,uCAHM;EAIN,WAHa;AtBs3EnB;AsB92EQ;EACE,yBAHY;EAIZ,cAHW;AtBm3ErB;AsBz3EI;EACE,uCAHM;EAIN,WAHa;AtB83EnB;AsBt3EQ;EACE,yBAHY;EAIZ,cAHW;AtB23ErB;AsBj4EI;EACE,uCAHM;EAIN,yBAHa;AtBs4EnB;AsB93EQ;EACE,yBAHY;EAIZ,cAHW;AtBm4ErB;AsBz4EI;EACE,uCAHM;EAIN,WAHa;AtB84EnB;AsBt4EQ;EACE,yBAHY;EAIZ,cAHW;AtB24ErB;AsBt4EE;EACE,kBjBtDK;AL87ET;AsBv4EE;EACE,ejBzDK;ALk8ET;AsBx4EE;EACE,kBjB5DK;ALs8ET;AsBx4EI;EhBkFA,qBgBjF0B;EhBiF1B,sBgBhF0B;AtB04E9B;AsBz4EI;EhB+EA,qBgB9E0B;EhB8E1B,sBgB7E0B;AtB24E9B;AsB14EI;EhB4EA,qBgB3E0B;EhB2E1B,sBgB1E0B;AtB44E9B;AsB14EE;EhBwEE,gBgB/KgB;EAyGhB,UAAA;EACA,kBAAA;EACA,UAAA;AtB44EJ;AsB34EI;EAEE,8BAAA;EACA,WAAA;EACA,cAAA;EACA,SAAA;EACA,kBAAA;EACA,QAAA;EACA,0DAAA;EACA,+BAAA;AtB44EN;AsB34EI;EACE,WAAA;EACA,UAAA;AtB64EN;AsB54EI;EACE,WAAA;EACA,UAAA;AtB84EN;AsB74EI;EAEE,yBAAA;AtB84EN;AsB74EI;EACE,yBAAA;AtB+4EN;AsB94EE;EACE,qBjB/Da;AL+8EjB;;AsB74EE;EACE,0BAAA;AtBg5EJ;;AuBtgFA;;EAGE,sBAAA;AvBwgFF;AuBvgFE;;;;EAEE,oBAAA;AvB2gFJ;AuB1gFE;;EACE,iBApBa;AvBiiFjB;AuB5gFE;;EACE,iBArBa;AvBoiFjB;AuB9gFE;;EACE,sBAAA;AvBihFJ;;AuB/gFA;EACE,yBlB9Ba;EkBiCb,elBLO;EkBMP,gBlBGgB;EkBFhB,kBAnCkB;AvBmjFpB;AuB/gFE;EACE,cApCiB;EAqCjB,oBApCkB;AvBqjFtB;AuBhhFE;EACE,oBA3BuB;AvB6iF3B;AuB9gFI;EACE,eb8DE;AVk9ER;AuBjhFI;EACE,iBb8DE;AVq9ER;AuBphFI;EACE,eb8DE;AVw9ER;AuBvhFI;EACE,iBb8DE;AV29ER;AuB1hFI;EACE,kBb8DE;AV89ER;AuB7hFI;EACE,eb8DE;AVi+ER;AuBhiFI;EACE,kBb8DE;AVo+ER;;AuBhiFA;EACE,yBlB/Ca;EkBkDb,kBlBrBO;EkBsBP,gBlBjBc;EkBkBd,iBA3CqB;AvB4kFvB;AuBhiFE;EACE,yBlBvDW;EkBwDX,gBlBnBc;ALqjFlB;AuBjiFE;EACE,oBA7CuB;AvBglF3B;AuB/hFI;EACE,eb4CE;AVq/ER;AuBliFI;EACE,iBb4CE;AVw/ER;AuBriFI;EACE,eb4CE;AV2/ER;AuBxiFI;EACE,iBb4CE;AV8/ER;AuB3iFI;EACE,kBb4CE;AVigFR;AuB9iFI;EACE,eb4CE;AVogFR;AuBjjFI;EACE,kBb4CE;AVugFR;;AwBhnFA;EACE,cAAA;EACA,eAAA;EACA,mBAAA;EACA,kBAAA;EACA,yBAAA;AxBmnFF;;AwB9mFA;EACE,mBAAA;EACA,oCnBPa;EmBQb,qBnBmDe;EmBlDf,oBAAA;EACA,kBnBaO;EmBZP,WAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,kBAAA;EACA,mBAAA;AxBinFF;;AyB/oFA,eAAA;AC0DA;EAxBE,qCrBnBa;EqBoBb,gCrBzBa;EqB0Bb,kBrBkCO;EqBjCP,yBrB/Ba;ALipFf;AM/kFI;EoBjCA,4BA7BsB;A1BgpF1B;AMllFI;EoBjCA,4BA7BsB;A1BmpF1B;AMrlFI;EoBjCA,4BA7BsB;A1BspF1B;AMxlFI;EoBjCA,4BA7BsB;A1BypF1B;A0B3nFE;EAEE,gCrBjCW;AL6pFf;A0B3nFE;EAIE,mCrBzBW;EqB0BX,iDAAA;A1B0nFJ;A0BznFE;EAEE,oCrBtCW;EqBuCX,gCrBvCW;EqBwCX,gBAAA;EACA,yBrB9CW;ALwqFf;AMxmFI;EoBhBE,+BAjC6B;A1B4pFnC;AM3mFI;EoBhBE,+BAjC6B;A1B+pFnC;AM9mFI;EoBhBE,+BAjC6B;A1BkqFnC;AMjnFI;EoBhBE,+BAjC6B;A1BqqFnC;;A2BtrFA;EAEE,2DDCa;ECAb,eAAA;EACA,WAAA;A3BwrFF;A2BvrFE;EACE,gBAAA;A3ByrFJ;A2BrrFI;EACE,iCAFM;A3ByrFZ;A2BtrFM;EAIE,mDAAA;A3BqrFR;A2B3rFI;EACE,+BAFM;A3B+rFZ;A2B5rFM;EAIE,gDAAA;A3B2rFR;A2BjsFI;EACE,gCAFM;A3BqsFZ;A2BlsFM;EAIE,mDAAA;A3BisFR;A2BvsFI;EACE,gCAFM;A3B2sFZ;A2BxsFM;EAIE,gDAAA;A3BusFR;A2B7sFI;EACE,oCAFM;A3BitFZ;A2B9sFM;EAIE,iDAAA;A3B6sFR;A2BntFI;EACE,mCAFM;A3ButFZ;A2BptFM;EAIE,iDAAA;A3BmtFR;A2BztFI;EACE,mCAFM;A3B6tFZ;A2B1tFM;EAIE,kDAAA;A3BytFR;A2B/tFI;EACE,mCAFM;A3BmuFZ;A2BhuFM;EAIE,kDAAA;A3B+tFR;A2BruFI;EACE,mCAFM;A3ByuFZ;A2BtuFM;EAIE,mDAAA;A3BquFR;A2B3uFI;EACE,mCAFM;A3B+uFZ;A2B5uFM;EAIE,kDAAA;A3B2uFR;A2BzuFE;EvBmBA,kBC0Ba;EDzBb,kBCNO;AL+tFT;A2B3uFE;EvBoBA,kBCVO;ALouFT;A2B5uFE;EvBoBA,iBCbO;ALwuFT;A2B5uFE;EACE,cAAA;EACA,WAAA;A3B8uFJ;A2B7uFE;EACE,eAAA;EACA,WAAA;A3B+uFJ;;A2B3uFE;EACE,qBtB+Ba;EsB9Bb,gDAAA;EACA,iDAAA;A3B8uFJ;A2B7uFE;EACE,6BAAA;EACA,yBAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;A3B+uFJ;;A2B7uFA;EAEE,cAAA;EACA,eAAA;EACA,eAAA;EACA,2BvB7C2B;EuB8C3B,gBAAA;A3B+uFF;A2B9uFE;EACE,gBA1DkB;EA2DlB,eA1DkB;A3B0yFtB;A2B/uFE;EACE,eAAA;A3BivFJ;A2B/uFE;EACE,YAAA;A3BivFJ;;A4BlzFA;EACE,eAAA;EACA,qBAAA;EACA,iBAAA;EACA,kBAAA;A5BqzFF;A4BpzFE;EACE,eAAA;A5BszFJ;A4BrzFE;EACE,yBvBFW;ALyzFf;A4BtzFE;;;EAGE,yBvBJW;EuBKX,mBAAA;A5BwzFJ;;A4BjzFE;EtBgKE,kBsB/JwB;A5BozF5B;;A6Bv0FA;EACE,qBAAA;EACA,eAAA;EACA,kBAAA;EACA,mBAAA;A7B00FF;A6Bz0FE;EACE,azBDa;AJ40FjB;A6Bz0FI;EAEE,mCxBUS;ECsKX,cuB/KgB;EACd,UAAA;A7B00FN;A6Bx0FI;EACE,qBxBuDW;EC4Gb,iBuBlK2B;A7B00F/B;A6Bz0FE;EAEE,eAAA;EACA,cAAA;EACA,cAAA;EACA,eAAA;EACA,aAAA;A7B00FJ;A6Bz0FI;EACE,aAAA;A7B20FN;A6B10FI;EAEE,gCxBjBS;AL41Ff;A6B10FI;EvBqJA,oBuBpJ2B;A7B40F/B;A6B30FI;EACE,YAAA;EACA,UAAA;A7B60FN;A6B50FM;EACE,kBAAA;A7B80FR;A6B30FI;EACE,gCxBnCS;ALg3Ff;A6Bx0FM;EACE,iCAHI;A7B60FZ;A6Bz0FM;EACE,iCALI;A7Bg1FZ;A6B10FQ;EAEE,qBAAA;A7B20FV;A6B10FQ;EAIE,mDAAA;A7By0FV;A6Bp1FM;EACE,+BAHI;A7By1FZ;A6Br1FM;EACE,+BALI;A7B41FZ;A6Bt1FQ;EAEE,mBAAA;A7Bu1FV;A6Bt1FQ;EAIE,gDAAA;A7Bq1FV;A6Bh2FM;EACE,gCAHI;A7Bq2FZ;A6Bj2FM;EACE,gCALI;A7Bw2FZ;A6Bl2FQ;EAEE,qBAAA;A7Bm2FV;A6Bl2FQ;EAIE,mDAAA;A7Bi2FV;A6B52FM;EACE,gCAHI;A7Bi3FZ;A6B72FM;EACE,gCALI;A7Bo3FZ;A6B92FQ;EAEE,qBAAA;A7B+2FV;A6B92FQ;EAIE,gDAAA;A7B62FV;A6Bx3FM;EACE,oCAHI;A7B63FZ;A6Bz3FM;EACE,oCALI;A7Bg4FZ;A6B13FQ;EAEE,qBAAA;A7B23FV;A6B13FQ;EAIE,iDAAA;A7By3FV;A6Bp4FM;EACE,mCAHI;A7By4FZ;A6Br4FM;EACE,mCALI;A7B44FZ;A6Bt4FQ;EAEE,qBAAA;A7Bu4FV;A6Bt4FQ;EAIE,iDAAA;A7Bq4FV;A6Bh5FM;EACE,mCAHI;A7Bq5FZ;A6Bj5FM;EACE,mCALI;A7Bw5FZ;A6Bl5FQ;EAEE,qBAAA;A7Bm5FV;A6Bl5FQ;EAIE,kDAAA;A7Bi5FV;A6B55FM;EACE,mCAHI;A7Bi6FZ;A6B75FM;EACE,mCALI;A7Bo6FZ;A6B95FQ;EAEE,qBAAA;A7B+5FV;A6B95FQ;EAIE,kDAAA;A7B65FV;A6Bx6FM;EACE,mCAHI;A7B66FZ;A6Bz6FM;EACE,mCALI;A7Bg7FZ;A6B16FQ;EAEE,qBAAA;A7B26FV;A6B16FQ;EAIE,mDAAA;A7By6FV;A6Bp7FM;EACE,mCAHI;A7By7FZ;A6Br7FM;EACE,mCALI;A7B47FZ;A6Bt7FQ;EAEE,qBAAA;A7Bu7FV;A6Bt7FQ;EAIE,kDAAA;A7Bq7FV;A6Bn7FE;EzBhBA,kBC0Ba;EDzBb,kBCNO;AL48FT;A6Br7FE;EzBfA,kBCVO;ALi9FT;A6Bt7FE;EzBfA,iBCbO;ALq9FT;A6Br7FI;EACE,2CAAA;EACA,YAAA;A7Bu7FN;A6Bt7FE;EACE,WAAA;A7Bw7FJ;A6Bv7FI;EACE,WAAA;A7By7FN;A6Bv7FI;EAEE,aAAA;EACA,kBAAA;EvB8GF,cuB7GgB;EACd,YAAA;EACA,eAAA;A7Bw7FN;A6Bv7FI;EACE,kBxB7CG;ALs+FT;A6Bx7FI;EACE,kBxBjDG;AL2+FT;A6Bz7FI;EACE,iBxBpDG;AL++FT;;A8BngGA;EAEE,oBAAA;EACA,aAAA;EACA,2BAAA;EACA,kBAAA;A9BqgGF;A8B//FM;EACE,qCAJI;EAKJ,yBAAA;EACA,wBALW;A9BsgGnB;A8B9/FQ;EACE,yBAAA;EACA,yBAAA;EACA,wBAXS;A9B2gGnB;A8B7/FQ;EACE,yBAAA;EACA,+CAAA;EACA,wBAjBS;A9BghGnB;A8B5/FQ;EACE,yBAAA;EACA,yBAAA;EACA,wBAvBS;A9BqhGnB;A8BnhGM;EACE,mCAJI;EAKJ,yBAAA;EACA,0BALW;A9B0hGnB;A8BlhGQ;EACE,yBAAA;EACA,yBAAA;EACA,0BAXS;A9B+hGnB;A8BjhGQ;EACE,yBAAA;EACA,4CAAA;EACA,0BAjBS;A9BoiGnB;A8BhhGQ;EACE,uBAAA;EACA,yBAAA;EACA,0BAvBS;A9ByiGnB;A8BviGM;EACE,oCAJI;EAKJ,yBAAA;EACA,yBALW;A9B8iGnB;A8BtiGQ;EACE,yBAAA;EACA,yBAAA;EACA,yBAXS;A9BmjGnB;A8BriGQ;EACE,yBAAA;EACA,+CAAA;EACA,yBAjBS;A9BwjGnB;A8BpiGQ;EACE,yBAAA;EACA,yBAAA;EACA,yBAvBS;A9B6jGnB;A8B3jGM;EACE,oCAJI;EAKJ,yBAAA;EACA,WALW;A9BkkGnB;A8B1jGQ;EACE,yBAAA;EACA,yBAAA;EACA,WAXS;A9BukGnB;A8BzjGQ;EACE,yBAAA;EACA,4CAAA;EACA,WAjBS;A9B4kGnB;A8BxjGQ;EACE,yBAAA;EACA,yBAAA;EACA,WAvBS;A9BilGnB;A8B/kGM;EACE,wCAJI;EAKJ,yBAAA;EACA,WALW;A9BslGnB;A8B9kGQ;EACE,yBAAA;EACA,yBAAA;EACA,WAXS;A9B2lGnB;A8B7kGQ;EACE,yBAAA;EACA,6CAAA;EACA,WAjBS;A9BgmGnB;A8B5kGQ;EACE,yBAAA;EACA,yBAAA;EACA,WAvBS;A9BqmGnB;A8BnmGM;EACE,uCAJI;EAKJ,yBAAA;EACA,WALW;A9B0mGnB;A8BlmGQ;EACE,yBAAA;EACA,yBAAA;EACA,WAXS;A9B+mGnB;A8BjmGQ;EACE,yBAAA;EACA,6CAAA;EACA,WAjBS;A9BonGnB;A8BhmGQ;EACE,yBAAA;EACA,yBAAA;EACA,WAvBS;A9BynGnB;A8BvnGM;EACE,uCAJI;EAKJ,yBAAA;EACA,WALW;A9B8nGnB;A8BtnGQ;EACE,yBAAA;EACA,yBAAA;EACA,WAXS;A9BmoGnB;A8BrnGQ;EACE,yBAAA;EACA,8CAAA;EACA,WAjBS;A9BwoGnB;A8BpnGQ;EACE,yBAAA;EACA,yBAAA;EACA,WAvBS;A9B6oGnB;A8B3oGM;EACE,uCAJI;EAKJ,yBAAA;EACA,WALW;A9BkpGnB;A8B1oGQ;EACE,yBAAA;EACA,yBAAA;EACA,WAXS;A9BupGnB;A8BzoGQ;EACE,yBAAA;EACA,8CAAA;EACA,WAjBS;A9B4pGnB;A8BxoGQ;EACE,yBAAA;EACA,yBAAA;EACA,WAvBS;A9BiqGnB;A8B/pGM;EACE,uCAJI;EAKJ,yBAAA;EACA,yBALW;A9BsqGnB;A8B9pGQ;EACE,yBAAA;EACA,yBAAA;EACA,yBAXS;A9B2qGnB;A8B7pGQ;EACE,yBAAA;EACA,+CAAA;EACA,yBAjBS;A9BgrGnB;A8B5pGQ;EACE,yBAAA;EACA,yBAAA;EACA,yBAvBS;A9BqrGnB;A8BnrGM;EACE,uCAJI;EAKJ,yBAAA;EACA,WALW;A9B0rGnB;A8BlrGQ;EACE,yBAAA;EACA,yBAAA;EACA,WAXS;A9B+rGnB;A8BjrGQ;EACE,yBAAA;EACA,8CAAA;EACA,WAjBS;A9BosGnB;A8BhrGQ;EACE,yBAAA;EACA,yBAAA;EACA,WAvBS;A9BysGnB;A8BhrGE;EACE,kBzBZK;AL8rGT;A8BjrGE;EACE,ezBfK;ALksGT;A8BlrGE;EACE,kBzBlBK;ALssGT;A8BlrGM;EACE,eAAA;A9BorGR;A8BnrGE;EACE,iBzBxBK;AL6sGT;A8BnrGM;EACE,eAAA;A9BqrGR;A8BlrGI;EACE,6BAAA;EACA,0BAAA;A9BorGN;A8BnrGI;EACE,4BAAA;EACA,yBAAA;A9BqrGN;A8BnrGM;EACE,kBzBHC;ALwrGT;A8BprGM;EACE,aAAA;A9BsrGR;A8BprGI;EACE,sBAAA;A9BsrGN;A8BrrGI;EACE,sBAAA;EACA,YAAA;EACA,gBAAA;A9BurGN;A8BtrGI;EACE,uBAAA;A9BwrGN;A8BvrGI;EACE,aAAA;EACA,YAAA;A9ByrGN;A8BxrGM;EACE,eAAA;A9B0rGR;A8BxrGM;EACE,eAAA;A9B0rGR;A8BxrGM;EACE,eAAA;A9B0rGR;A8BxrGM;EACE,eAAA;A9B0rGR;A8BxrGM;EACE,0BAAA;A9B0rGR;A8BzrGM;EACE,0BAAA;EACA,uBAAA;A9B2rGR;A8B1rGE;EACE,uBAAA;A9B4rGJ;A8B1rGI;EACE,WAAA;A9B4rGN;A8B3rGI;EACE,YAAA;EACA,eAAA;A9B6rGN;A8B5rGE;EACE,yBAAA;A9B8rGJ;A8B7rGI;EACE,0BAAA;A9B+rGN;A8B9rGI;EACE,0BAAA;EACA,2BAAA;EACA,SAAA;A9BgsGN;;A8B9rGA;EACE,oBAAA;EACA,aAAA;EACA,eAAA;EACA,2BAAA;EACA,gBAAA;EACA,kBAAA;A9BisGF;A8B/rGI;EACE,yBAAA;EACA,yBzB9HS;AL+zGf;A8BhsGI;EACE,qBAAA;A9BksGN;A8BhsGI;EACE,yBAAA;EACA,yBzBpIS;ALs0Gf;A8BjsGI;EACE,qBAAA;A9BmsGN;;A8BjsGA;EACE,YAAA;EACA,OAAA;EACA,UAAA;EACA,aAAA;EACA,kBAAA;EACA,MAAA;EACA,WAAA;A9BosGF;;A8BlsGA;;EAGE,gCzBhJa;EyBiJb,kBzBrFO;EyBsFP,cAAA;EACA,iBAAA;EACA,kBAAA;EACA,mBAAA;A9BosGF;;A8BlsGA;EACE,oCzBrJa;EyBsJb,yBzB5Ja;ALi2Gf;;A8BnsGA;EACE,gCzB5Ja;EyB6Jb,mBA9JuB;EA+JvB,2BA9JuB;EA+JvB,cAAA;EACA,eA/JoB;EAgKpB,gBAAA;EACA,mBAAA;EACA,uBAAA;A9BssGF;;A8BpsGA;EACE,mBAAA;EACA,aAAA;EACA,WAAA;EACA,uBAAA;ExBCE,mBAAA;EwBCF,UAAA;A9BusGF;A8BtsGE;EACE,eAAA;A9BwsGJ;;A+Bx3GA;EACE,yB1BFa;E0BGb,cAAA;EACA,e1B2BO;E0B1BP,gB1BiCY;AL01Gd;A+B13GE;EACE,oBAAA;A/B43GJ;A+B13GE;EACE,kB1BsBK;ALs2GT;A+B33GE;EACE,kB1BkBK;AL22GT;A+B53GE;EACE,iB1BeK;AL+2GT;;A+B53GA;EACE,cAAA;EACA,kB1BcO;E0BbP,mBAAA;A/B+3GF;A+B53GI;EACE,0BAFM;A/Bg4GZ;A+B/3GI;EACE,wBAFM;A/Bm4GZ;A+Bl4GI;EACE,yBAFM;A/Bs4GZ;A+Br4GI;EACE,yBAFM;A/By4GZ;A+Bx4GI;EACE,6BAFM;A/B44GZ;A+B34GI;EACE,4BAFM;A/B+4GZ;A+B94GI;EACE,4BAFM;A/Bk5GZ;A+Bj5GI;EACE,4BAFM;A/Bq5GZ;A+Bp5GI;EACE,4BAFM;A/Bw5GZ;A+Bv5GI;EACE,4BAFM;A/B25GZ;;A+Bp5GE;EACE,sBAAA;A/Bu5GJ;A+Br5GE;EACE,aAAA;EACA,2BAAA;A/Bu5GJ;A+Br5GM;EzB2IF,kByB1I4B;A/Bu5GhC;A+Br5GQ;;;EAGE,gBAAA;A/Bu5GV;A+Br5GQ;;;EAII,6BAAA;EACA,0BAAA;A/Bs5GZ;A+Bj5GQ;;;EAII,4BAAA;EACA,yBAAA;A/Bk5GZ;A+B14GU;;;;;EAEE,UAAA;A/B+4GZ;A+B94GU;;;;;;;;;EAIE,UAAA;A/Bq5GZ;A+Bp5GY;;;;;;;;;EACE,UAAA;A/B85Gd;A+B75GM;EACE,YAAA;EACA,cAAA;A/B+5GR;A+B95GI;EACE,uBAAA;A/Bg6GN;A+B/5GI;EACE,yBAAA;A/Bi6GN;A+B/5GM;EACE,YAAA;EACA,cAAA;A/Bi6GR;A+Bh6GE;EACE,aAAA;EACA,2BAAA;A/Bk6GJ;A+Bj6GI;EACE,cAAA;A/Bm6GN;A+Bl6GM;EACE,gBAAA;EzBiFJ,qByBhF4B;A/Bo6GhC;A+Bn6GM;EACE,YAAA;EACA,cAAA;A/Bq6GR;A+Bp6GI;EACE,uBAAA;A/Bs6GN;A+Br6GI;EACE,yBAAA;A/Bu6GN;A+Bt6GI;EACE,eAAA;A/Bw6GN;A+Bt6GQ;EAEE,sBAAA;A/Bu6GV;A+Bt6GM;EACE,uBAAA;A/Bw6GR;A+Bv6GM;EACE,gBAAA;A/By6GR;AMp7GE;EyBYA;IAEI,aAAA;E/B06GJ;AACF;;A+Bx6GE;EACE,kBAAA;A/B26GJ;AMj8GE;EyBoBF;IAII,qBAAA;E/B66GF;AACF;AMl8GE;EyBgBF;IAMI,aAAA;IACA,YAAA;IACA,cAAA;IzBkDA,oByBjDwB;IACxB,iBAAA;E/Bg7GF;E+B/6GE;IACE,kB1BhGG;I0BiGH,oBAAA;E/Bi7GJ;E+Bh7GE;IACE,oBAAA;E/Bk7GJ;E+Bj7GE;IACE,kB1BvGG;I0BwGH,oBAAA;E/Bm7GJ;E+Bl7GE;IACE,iB1B3GG;I0B4GH,oBAAA;E/Bo7GJ;AACF;;A+Bl7GE;EACE,gBAAA;A/Bq7GJ;AM99GE;EyBuCF;IAII,aAAA;IACA,aAAA;IACA,YAAA;IACA,cAAA;E/Bu7GF;E+Bt7GE;IACE,gBAAA;E/Bw7GJ;E+Bv7GE;IACE,cAAA;E/By7GJ;E+Bx7GI;IACE,YAAA;E/B07GN;E+Bz7GI;IzBqBF,qByBpB4B;E/B27G9B;AACF;;A+B17GA;EACE,sBAAA;EACA,WAAA;EACA,e1BhIO;E0BiIP,kBAAA;EACA,mBAAA;A/B67GF;A+Bt7GQ;;;EACE,yB1BxKK;ALkmHf;A+Bz7GM;;;EACE,kB1B3IC;ALwkHT;A+B57GM;;;EACE,kB1B/IC;AL+kHT;A+B/7GM;;;EACE,iB1BlJC;ALqlHT;A+Bl8GI;EACE,yB1B7KS;E0B8KT,a3BjLW;E2BkLX,oBAAA;EACA,kBAAA;EACA,MAAA;EACA,Y3BrLW;E2BsLX,UAAA;A/Bo8GN;A+Bl8GI;;EAEE,mB3B1LW;AJ8nHjB;A+Bn8GI;EACE,OAAA;A/Bq8GN;A+Bn8GI;;EAEE,oB3BhMW;AJqoHjB;A+Bp8GI;EACE,QAAA;A/Bs8GN;A+Bp8GI;EAEE,6BAAA;EzBjBF,cyBkBgB;EACd,YAAA;EACA,UAAA;A/Bq8GN;A+Bp8GI;EACE,kB1B5KG;ALknHT;A+Br8GI;EACE,kB1BhLG;ALunHT;A+Bt8GI;EACE,iB1BnLG;AL2nHT;;AgC9pHA,qBAAA;ACWA;EAGE,e5BuBO;E4BtBP,mBAAA;AjCqpHF;AiCppHE;EACE,mBAAA;EACA,4B5BIW;E4BHX,aAAA;EACA,uBAAA;EACA,iBAAA;AjCspHJ;AiCrpHI;EACE,yB5BjBS;ALwqHf;AiCtpHE;EACE,mBAAA;EACA,aAAA;AjCwpHJ;AiCvpHI;E3ByJA,e2BxJ2B;AjCypH/B;AiCvpHM;EACE,yB5BzBO;E4B0BP,eAAA;EACA,oBAAA;AjCypHR;AiCxpHI;EACE,yB5B1BS;E4B2BT,YAAA;AjC0pHN;AiCzpHE;;EAEE,uBAAA;EACA,aAAA;EACA,eAAA;EACA,2BAAA;AjC2pHJ;AiCzpHI;E3BwIA,mB2BvI0B;AjC2pH9B;AiC1pHI;E3BsIA,kB2BrI0B;AjC4pH9B;AiCzpHI;;EAEE,uBAAA;AjC2pHN;AiCzpHI;;EAEE,yBAAA;AjC2pHN;AiCzpHE;EACE,kB5BrBK;ALgrHT;AiC1pHE;EACE,kB5BzBK;ALqrHT;AiC3pHE;EACE,iB5B5BK;ALyrHT;AiC1pHI;EACE,YAAA;AjC4pHN;AiC1pHI;EACE,YAAA;AjC4pHN;AiC1pHI;EACE,YAAA;AjC4pHN;AiC1pHI;EACE,YAAA;AjC4pHN;;AkCltHA;EACE,qC7BRa;E6BSb,sBAnBY;EAoBZ,0FxB8EO;EwB7EP,yB7BnBa;E6BoBb,eAAA;EACA,kBAAA;AlCqtHF;;AkCltHE;EACE,+BA3BU;EA4BV,gCA5BU;AlCivHd;AkCptHE;EACE,kCA9BU;EA+BV,mCA/BU;AlCqvHd;;AkCptHA;EAEE,6BAjC6B;EAkC7B,oBAAA;EACA,kDAhCmB;EAiCnB,aAAA;AlCstHF;;AkCptHA;EACE,mBAAA;EACA,yB7BzCa;E6B0Cb,aAAA;EACA,YAAA;EACA,gB7BNY;E6BOZ,qBA1CoB;AlCiwHtB;AkCttHE;EACE,uBAAA;AlCwtHJ;;AkCttHA;E5BqBE,qBAAA;EACA,wBAAA;EACA,gBAAA;EACA,gBAAA;EACA,YAAA;EACA,mBAAA;EACA,oBAAA;EACA,cAAA;EACA,SAAA;EACA,UAAA;E4B5BA,mBAAA;EACA,eAAA;EACA,aAAA;EACA,uBAAA;EACA,qBApDoB;AlCsxHtB;;AkChuHA;EACE,cAAA;EACA,kBAAA;AlCmuHF;AkCjuHI;EACE,+BA/DQ;EAgER,gCAhEQ;AlCmyHd;AkCjuHI;EACE,kCAnEQ;EAoER,mCApEQ;AlCuyHd;;AkCjuHA;EAEE,6BAhE8B;EAiE9B,eAhEqB;AlCmyHvB;;AkCjuHA;EAEE,6BAlE6B;EAmE7B,wCAlEuB;EAmEvB,oBAAA;EACA,aAAA;AlCmuHF;;AkCjuHA;EACE,mBAAA;EACA,aAAA;EACA,aAAA;EACA,YAAA;EACA,cAAA;EACA,uBAAA;EACA,gBA5EoB;AlCgzHtB;AkCnuHE;E5BqFE,0C4BnKqB;AlCozHzB;;AkChuHE;EACE,qB7BtDY;ALyxHhB;;AmCpzHA;EACE,oBAAA;EACA,kBAAA;EACA,mBAAA;AnCuzHF;AmCpzHI;EACE,cAAA;AnCszHN;AmCpzHI;EACE,UAAA;EACA,QAAA;AnCszHN;AmCpzHI;EACE,YAAA;EACA,mBA9BoB;EA+BpB,oBAAA;EACA,SAAA;AnCszHN;;AmCpzHA;EACE,aAAA;E7BmJE,O6BlJY;EACd,gBAzCwB;EA0CxB,gBAtCwB;EAuCxB,kBAAA;EACA,SAAA;EACA,WApCmB;AnC21HrB;;AmCrzHA;EACE,qC9BnCa;E8BoCb,kB9BmBO;E8BlBP,0FzBmDO;EyBlDP,sBA9CgC;EA+ChC,mBA9C6B;AnCs2H/B;;AmCtzHA;EACE,yB9BlDa;E8BmDb,cAAA;EACA,mBAAA;EACA,gBAAA;EACA,sBAAA;EACA,kBAAA;AnCyzHF;;AmCvzHA;;E7BoHI,mB6BlHuB;EACzB,mBAAA;EACA,mBAAA;EACA,WAAA;AnC0zHF;AmCzzHE;;EACE,oC9B1DW;E8B2DX,wB9BtEW;ALk4Hf;AmC3zHE;;EACE,uC9BpDW;E8BqDX,WzBCU;AV6zHd;;AmC5zHA;EACE,oC9BnEc;E8BoEd,YAAA;EACA,cAAA;EACA,WAAA;EACA,gBAAA;AnC+zHF;;AoC74HA;EAEE,mBAAA;EACA,8BAAA;ApC+4HF;AoC94HE;EACE,kB/B6DK;ALm1HT;AoC/4HE;EACE,qBAAA;EACA,mBAAA;ApCi5HJ;AoC/4HE;EACE,aAAA;ApCi5HJ;AoCh5HI;;EAEE,aAAA;ApCk5HN;AoCj5HI;EACE,aAAA;ApCm5HN;AoCj5HM;EACE,gBAAA;E9B6JJ,qB8BlLiB;ApCy6HrB;AoCl5HM;EACE,YAAA;ApCo5HR;AMp0HE;E8BtGF;IAyBI,aAAA;EpCq5HF;EoCn5HI;IACE,YAAA;EpCq5HN;AACF;;AoCp5HA;EACE,mBAAA;EACA,aAAA;EACA,gBAAA;EACA,YAAA;EACA,cAAA;EACA,uBAAA;ApCu5HF;AoCt5HE;;EAEE,gBAAA;ApCw5HJ;AM71HE;E8BxDE;IACE,sBA7Ce;EpCq8HnB;AACF;;AoCv5HA;;EAEE,gBAAA;EACA,YAAA;EACA,cAAA;ApC05HF;AoCv5HI;;EACE,YAAA;ApC05HN;AMz2HE;E8B9CI;;I9BwHF,qB8BlLiB;EpCs9HnB;AACF;;AoC15HA;EACE,mBAAA;EACA,2BAAA;ApC65HF;AMx3HE;E8BlCE;IACE,kBAAA;EpC65HJ;AACF;AMz3HE;E8B3CF;IAQI,aAAA;EpCg6HF;AACF;;AoC/5HA;EACE,mBAAA;EACA,yBAAA;ApCk6HF;AMn4HE;E8BjCF;IAKI,aAAA;EpCm6HF;AACF;;AqCv+HA;EACE,uBAAA;EACA,aAAA;EACA,mBAAA;ArC0+HF;AqCz+HE;EACE,sBAVoB;ArCq/HxB;AqC1+HE;EACE,8CAAA;EACA,aAAA;EACA,oBAboB;ArCy/HxB;AqC3+HI;;EAEE,qBAf0B;ArC4/HhC;AqC5+HI;EACE,mBAhBkB;ArC8/HxB;AqC7+HM;EACE,kBAlBgB;ArCigIxB;AqC9+HE;EACE,8CAAA;EACA,gBA1BY;EA2BZ,iBA3BY;ArC2gIhB;AqC7+HI;EACE,kBA9BgB;EA+BhB,mBA/BgB;ArC8gItB;;AqC7+HA;;EAEE,gBAAA;EACA,YAAA;EACA,cAAA;ArCg/HF;;AqC9+HA;E/BwII,kB+BhLY;ArC0hIhB;;AqC/+HA;E/BqII,iB+BhLY;ArC8hIhB;;AqCh/HA;EACE,gBAAA;EACA,YAAA;EACA,cAAA;EACA,mBAAA;ArCm/HF;;AMn8HE;E+B7CA;IACE,gBAAA;ErCo/HF;AACF;AsC3hIA;EACE,ejCgBO;AL6gIT;AsC3hIE;EACE,kBjCcK;AL+gIT;AsC5hIE;EACE,kBjCUK;ALohIT;AsC7hIE;EACE,iBjCOK;ALwhIT;;AsC7hIA;EACE,iBArBsB;AtCqjIxB;AsC/hIE;EACE,kBjCoCW;EiCnCX,yBjC3BW;EiC4BX,cAAA;EACA,qBAzBqB;AtC0jIzB;AsChiII;EACE,oCjCzBS;EiC0BT,yBjCjCS;ALmkIf;AsChiII;EACE,uCjCpBS;EiCqBT,W5BiCQ;AVigId;AsChiII;EhCuIA,yCgC3KoB;EAsClB,cAnCoB;EhCwKtB,oBgCvK4B;AtCqkIhC;;AsChiIA;EACE,yBjC3Ca;EiC4Cb,iBApCqB;EAqCrB,qBApC0B;EAqC1B,yBAAA;AtCmiIF;AsCliIE;EACE,eAtCiB;AtC0kIrB;AsCniIE;EACE,kBAxCiB;AtC6kIrB;;AuCxkIA;EAEE,oClCZa;EkCab,kBlC4CO;EkC3CP,elCUO;ALgkIT;AuCzkIE;EACE,mBAAA;AvC2kIJ;AuC1kIE;EACE,mBAAA;EACA,0BAAA;AvC4kIJ;AuC1kIE;EACE,kBlCGK;ALykIT;AuC3kIE;EACE,kBlCDK;AL8kIT;AuC5kIE;EACE,iBlCJK;ALklIT;AuCzjII;EACE,uBAHc;AvC8jIpB;AuC1jIM;EACE,qCArBI;EAsBJ,wBArBW;AvCilInB;AuC3jIM;EACE,iCAxBI;AvCqlIZ;AuCnkII;EACE,yBAHc;AvCwkIpB;AuCpkIM;EACE,mCArBI;EAsBJ,0BArBW;AvC2lInB;AuCrkIM;EACE,+BAxBI;AvC+lIZ;AuC7kII;EACE,yBAHc;AvCklIpB;AuC9kIM;EACE,oCArBI;EAsBJ,yBArBW;AvCqmInB;AuC/kIM;EACE,gCAxBI;AvCymIZ;AuCvlII;EACE,yBAHc;AvC4lIpB;AuCxlIM;EACE,oCArBI;EAsBJ,WArBW;AvC+mInB;AuCzlIM;EACE,gCAxBI;AvCmnIZ;AuCjmII;EACE,yBAbc;AvCgnIpB;AuClmIM;EACE,wCArBI;EAsBJ,WArBW;AvCynInB;AuCnmIM;EACE,oCAxBI;EAyBJ,cAjBa;AvCsnIrB;AuC5mII;EACE,yBAbc;AvC2nIpB;AuC7mIM;EACE,uCArBI;EAsBJ,WArBW;AvCooInB;AuC9mIM;EACE,mCAxBI;EAyBJ,cAjBa;AvCioIrB;AuCvnII;EACE,yBAbc;AvCsoIpB;AuCxnIM;EACE,uCArBI;EAsBJ,WArBW;AvC+oInB;AuCznIM;EACE,mCAxBI;EAyBJ,cAjBa;AvC4oIrB;AuCloII;EACE,yBAbc;AvCipIpB;AuCnoIM;EACE,uCArBI;EAsBJ,WArBW;AvC0pInB;AuCpoIM;EACE,mCAxBI;EAyBJ,cAjBa;AvCupIrB;AuC7oII;EACE,yBAbc;AvC4pIpB;AuC9oIM;EACE,uCArBI;EAsBJ,yBArBW;AvCqqInB;AuC/oIM;EACE,mCAxBI;EAyBJ,cAjBa;AvCkqIrB;AuCxpII;EACE,yBAbc;AvCuqIpB;AuCzpIM;EACE,uCArBI;EAsBJ,WArBW;AvCgrInB;AuC1pIM;EACE,mCAxBI;EAyBJ,cAjBa;AvC6qIrB;;AuC1pIA;EACE,mBAAA;EACA,oClChEa;EkCiEb,0BAAA;EACA,W7BZY;E6BaZ,aAAA;EACA,gBlC/BY;EkCgCZ,8BAAA;EACA,iBAAA;EACA,mBAtEuB;EAuEvB,kBAAA;AvC6pIF;AuC5pIE;EACE,YAAA;EACA,cAAA;EjCkGA,mBiCjGwB;AvC8pI5B;AuC7pIE;EACE,eAjE+B;EAkE/B,yBAAA;EACA,0BAAA;AvC+pIJ;;AuC7pIA;EACE,gClChFa;EkCiFb,kBlCrBO;EkCsBP,mBAAA;EACA,uBAjF0B;EAkF1B,yBlCvFa;EkCwFb,qBAjFqB;AvCivIvB;AuC/pIE;;EAEE,qClCnFW;ALovIf;AuChqIE;EACE,6BAlFqC;AvCovIzC;;AwCpuIA;EAEE,mBAAA;EACA,aAAA;EACA,sBAAA;EACA,uBAAA;EACA,gBAAA;EACA,eAAA;EACA,WAxCQ;AxC8wIV;AwCpuIE;EACE,aAAA;AxCsuIJ;;AwCpuIA;EAEE,wCA7CkC;AxCmxIpC;;AwCpuIA;;EAEE,cAAA;EACA,+BAAA;EACA,cAAA;EACA,kBAAA;EACA,WAAA;AxCuuIF;AMtsIE;EkCvCF;;IASI,cAAA;IACA,8BAAA;IACA,YAxDkB;ExCiyIpB;AACF;;AwCxuIA;EAEE,gBAAA;EACA,YAxDuB;EAyDvB,eAAA;ElCwHE,WkChLgB;EA0DlB,SAzDgB;EA0DhB,WA5DuB;AxCsyIzB;;AwCxuIA;EACE,aAAA;EACA,sBAAA;EACA,8BAAA;EACA,gBAAA;EACA,uBAAA;AxC2uIF;;AwCzuIA;;EAEE,mBAAA;EACA,oCnCtEa;EmCuEb,aAAA;EACA,cAAA;EACA,2BAAA;EACA,aApEwB;EAqExB,kBAAA;AxC4uIF;;AwC1uIA;EACE,2CAzE8B;EA0E9B,2BnCrBa;EmCsBb,4BnCtBa;ALmwIf;;AwC3uIA;EACE,yBnC1Fa;EmC2Fb,YAAA;EACA,cAAA;EACA,iBnChEO;EmCiEP,cA7E6B;AxC2zI/B;;AwC5uIA;EACE,8BnChCa;EmCiCb,+BnCjCa;EmCkCb,wCA9E2B;AxC6zI7B;AwC7uII;ElCyEA,mBkCxE0B;AxC+uI9B;;AwC7uIA;ElC3CE,iCAAA;EkC6CA,qCnCjGa;EmCkGb,YAAA;EACA,cAAA;EACA,cAAA;EACA,aAtFwB;AxCs0I1B;;AyC1yIA;EACE,qCpC5Ca;EoC6Cb,mBAvDc;EAwDd,kBAAA;EACA,WAtDS;AzCm2IX;AyCzyII;EACE,qCAHM;EAIN,wBAHa;AzC8yInB;AyCzyIQ;;EAEE,wBAPS;AzCkzInB;AyCxyIU;;;;EAGE,yBAAA;EACA,wBAdO;AzCyzInB;AyCzyIU;EACE,+BAjBO;AzC4zInB;AyC1yIM;EACE,wBAnBW;AzC+zInB;AMtyIE;EmCFQ;;;;IAEE,wBAzBO;EzCs0IjB;EyC1yIU;;;;;;;;;;IAGE,yBAAA;IACA,wBAhCK;EzCm1IjB;EyCjzIU;;IACE,+BAnCK;EzCu1IjB;EyCnzIM;;;IAGE,yBAAA;IACA,wBAxCS;EzC61IjB;EyClzIU;IACE,qCA7CF;IA8CE,wBA7CK;EzCi2IjB;AACF;AyCj2II;EACE,mCAHM;EAIN,0BAHa;AzCs2InB;AyCj2IQ;;EAEE,0BAPS;AzC02InB;AyCh2IU;;;;EAGE,uBAAA;EACA,0BAdO;AzCi3InB;AyCj2IU;EACE,iCAjBO;AzCo3InB;AyCl2IM;EACE,0BAnBW;AzCu3InB;AM91IE;EmCFQ;;;;IAEE,0BAzBO;EzC83IjB;EyCl2IU;;;;;;;;;;IAGE,uBAAA;IACA,0BAhCK;EzC24IjB;EyCz2IU;;IACE,iCAnCK;EzC+4IjB;EyC32IM;;;IAGE,uBAAA;IACA,0BAxCS;EzCq5IjB;EyC12IU;IACE,mCA7CF;IA8CE,0BA7CK;EzCy5IjB;AACF;AyCz5II;EACE,oCAHM;EAIN,yBAHa;AzC85InB;AyCz5IQ;;EAEE,yBAPS;AzCk6InB;AyCx5IU;;;;EAGE,yBAAA;EACA,yBAdO;AzCy6InB;AyCz5IU;EACE,gCAjBO;AzC46InB;AyC15IM;EACE,yBAnBW;AzC+6InB;AMt5IE;EmCFQ;;;;IAEE,yBAzBO;EzCs7IjB;EyC15IU;;;;;;;;;;IAGE,yBAAA;IACA,yBAhCK;EzCm8IjB;EyCj6IU;;IACE,gCAnCK;EzCu8IjB;EyCn6IM;;;IAGE,yBAAA;IACA,yBAxCS;EzC68IjB;EyCl6IU;IACE,oCA7CF;IA8CE,yBA7CK;EzCi9IjB;AACF;AyCj9II;EACE,oCAHM;EAIN,WAHa;AzCs9InB;AyCj9IQ;;EAEE,WAPS;AzC09InB;AyCh9IU;;;;EAGE,yBAAA;EACA,WAdO;AzCi+InB;AyCj9IU;EACE,kBAjBO;AzCo+InB;AyCl9IM;EACE,WAnBW;AzCu+InB;AM98IE;EmCFQ;;;;IAEE,WAzBO;EzC8+IjB;EyCl9IU;;;;;;;;;;IAGE,yBAAA;IACA,WAhCK;EzC2/IjB;EyCz9IU;;IACE,kBAnCK;EzC+/IjB;EyC39IM;;;IAGE,yBAAA;IACA,WAxCS;EzCqgJjB;EyC19IU;IACE,oCA7CF;IA8CE,WA7CK;EzCygJjB;AACF;AyCzgJI;EACE,wCAHM;EAIN,WAHa;AzC8gJnB;AyCzgJQ;;EAEE,WAPS;AzCkhJnB;AyCxgJU;;;;EAGE,yBAAA;EACA,WAdO;AzCyhJnB;AyCzgJU;EACE,kBAjBO;AzC4hJnB;AyC1gJM;EACE,WAnBW;AzC+hJnB;AMtgJE;EmCFQ;;;;IAEE,WAzBO;EzCsiJjB;EyC1gJU;;;;;;;;;;IAGE,yBAAA;IACA,WAhCK;EzCmjJjB;EyCjhJU;;IACE,kBAnCK;EzCujJjB;EyCnhJM;;;IAGE,yBAAA;IACA,WAxCS;EzC6jJjB;EyClhJU;IACE,wCA7CF;IA8CE,WA7CK;EzCikJjB;AACF;AyCjkJI;EACE,uCAHM;EAIN,WAHa;AzCskJnB;AyCjkJQ;;EAEE,WAPS;AzC0kJnB;AyChkJU;;;;EAGE,yBAAA;EACA,WAdO;AzCilJnB;AyCjkJU;EACE,kBAjBO;AzColJnB;AyClkJM;EACE,WAnBW;AzCulJnB;AM9jJE;EmCFQ;;;;IAEE,WAzBO;EzC8lJjB;EyClkJU;;;;;;;;;;IAGE,yBAAA;IACA,WAhCK;EzC2mJjB;EyCzkJU;;IACE,kBAnCK;EzC+mJjB;EyC3kJM;;;IAGE,yBAAA;IACA,WAxCS;EzCqnJjB;EyC1kJU;IACE,uCA7CF;IA8CE,WA7CK;EzCynJjB;AACF;AyCznJI;EACE,uCAHM;EAIN,WAHa;AzC8nJnB;AyCznJQ;;EAEE,WAPS;AzCkoJnB;AyCxnJU;;;;EAGE,yBAAA;EACA,WAdO;AzCyoJnB;AyCznJU;EACE,kBAjBO;AzC4oJnB;AyC1nJM;EACE,WAnBW;AzC+oJnB;AMtnJE;EmCFQ;;;;IAEE,WAzBO;EzCspJjB;EyC1nJU;;;;;;;;;;IAGE,yBAAA;IACA,WAhCK;EzCmqJjB;EyCjoJU;;IACE,kBAnCK;EzCuqJjB;EyCnoJM;;;IAGE,yBAAA;IACA,WAxCS;EzC6qJjB;EyCloJU;IACE,uCA7CF;IA8CE,WA7CK;EzCirJjB;AACF;AyCjrJI;EACE,uCAHM;EAIN,WAHa;AzCsrJnB;AyCjrJQ;;EAEE,WAPS;AzC0rJnB;AyChrJU;;;;EAGE,yBAAA;EACA,WAdO;AzCisJnB;AyCjrJU;EACE,kBAjBO;AzCosJnB;AyClrJM;EACE,WAnBW;AzCusJnB;AM9qJE;EmCFQ;;;;IAEE,WAzBO;EzC8sJjB;EyClrJU;;;;;;;;;;IAGE,yBAAA;IACA,WAhCK;EzC2tJjB;EyCzrJU;;IACE,kBAnCK;EzC+tJjB;EyC3rJM;;;IAGE,yBAAA;IACA,WAxCS;EzCquJjB;EyC1rJU;IACE,uCA7CF;IA8CE,WA7CK;EzCyuJjB;AACF;AyCzuJI;EACE,uCAHM;EAIN,yBAHa;AzC8uJnB;AyCzuJQ;;EAEE,yBAPS;AzCkvJnB;AyCxuJU;;;;EAGE,yBAAA;EACA,yBAdO;AzCyvJnB;AyCzuJU;EACE,gCAjBO;AzC4vJnB;AyC1uJM;EACE,yBAnBW;AzC+vJnB;AMtuJE;EmCFQ;;;;IAEE,yBAzBO;EzCswJjB;EyC1uJU;;;;;;;;;;IAGE,yBAAA;IACA,yBAhCK;EzCmxJjB;EyCjvJU;;IACE,gCAnCK;EzCuxJjB;EyCnvJM;;;IAGE,yBAAA;IACA,yBAxCS;EzC6xJjB;EyClvJU;IACE,uCA7CF;IA8CE,yBA7CK;EzCiyJjB;AACF;AyCjyJI;EACE,uCAHM;EAIN,WAHa;AzCsyJnB;AyCjyJQ;;EAEE,WAPS;AzC0yJnB;AyChyJU;;;;EAGE,yBAAA;EACA,WAdO;AzCizJnB;AyCjyJU;EACE,kBAjBO;AzCozJnB;AyClyJM;EACE,WAnBW;AzCuzJnB;AM9xJE;EmCFQ;;;;IAEE,WAzBO;EzC8zJjB;EyClyJU;;;;;;;;;;IAGE,yBAAA;IACA,WAhCK;EzC20JjB;EyCzyJU;;IACE,kBAnCK;EzC+0JjB;EyC3yJM;;;IAGE,yBAAA;IACA,WAxCS;EzCq1JjB;EyC1yJU;IACE,uCA7CF;IA8CE,WA7CK;EzCy1JjB;AACF;AyC5yJE;EACE,oBAAA;EACA,aAAA;EACA,mBA7GY;EA8GZ,WAAA;AzC8yJJ;AyC7yJE;EACE,wCAAA;AzC+yJJ;AyC9yJE;EAjEA,OAAA;EACA,eAAA;EACA,QAAA;EACA,WA/Ce;AzCi6JjB;AyCjzJE;EACE,SAAA;AzCmzJJ;AyClzJI;EACE,yCAAA;AzCozJN;AyCnzJE;EACE,MAAA;AzCqzJJ;;AyCjzJE;;EACE,oBA9HY;AzCm7JhB;AyCpzJE;;EACE,uBAhIY;AzCu7JhB;;AyCrzJA;;EAEE,oBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAvIc;AzC+7JhB;;AyCpzJI;EAEE,6BAAA;AzCszJN;;AyCpzJA;EnCjFE,iCAAA;EmCmFA,gBAAA;EACA,gBAAA;EACA,kBAAA;AzCuzJF;;AyCrzJA;EAEE,yBpCrJa;ECoBb,qBAAA;EACA,wBAAA;EACA,gBAAA;EACA,gBAAA;EACA,YAAA;EACA,eAAA;EACA,cAAA;EACA,emC7Bc;EnC8Bd,kBAAA;EACA,cmC/Bc;EnC+KZ,iBmCtBsB;AzCg0J1B;AMz7JE;EACE,8BAAA;EACA,cAAA;EACA,WAAA;EACA,qBAAA;EACA,kBAAA;EACA,wBAAA;EACA,yBD6BI;EC5BJ,yDAAA;EACA,oCDsBK;ECrBL,WAAA;AN27JJ;AM17JI;EACE,oBAAA;AN47JN;AM37JI;EACE,oBAAA;AN67JN;AM57JI;EACE,oBAAA;AN87JN;AM77JE;EACE,qCAAA;AN+7JJ;AM37JM;EACE,wCAAA;AN67JR;AM57JM;EACE,UAAA;AN87JR;AM77JM;EACE,0CAAA;AN+7JR;;AyC/1JA;EACE,aAAA;AzCk2JF;;AyCh2JA;;EAEE,yBpC9Ja;EoC+Jb,cAAA;EACA,gBAAA;EACA,uBAAA;EACA,kBAAA;AzCm2JF;AyCj2JI;;EACE,qBAAA;EACA,sBAAA;AzCo2JN;;AyCl2JA;;EAEE,eAAA;AzCq2JF;AyCp2JE;;;;;EAIE,oCpCxKW;EoCyKX,4BpCjKW;ALwgKf;;AyCr2JA;EACE,YAAA;EACA,cAAA;AzCw2JF;AyCv2JE;EACE,mBA7KyB;AzCshK7B;AyCx2JE;EACE,UAAA;AzC02JJ;AyCz2JE;EACE,YAAA;EACA,cAAA;AzC22JJ;AyC12JE;EACE,oCAAA;EACA,mBAhMY;EAiMZ,kCAAA;AzC42JJ;AyC32JI;EAEE,6BArL8B;EAsL9B,0CpCpLS;ALgiKf;AyC32JI;EACE,6BArL+B;EAsL/B,0CpCvLS;EoCwLT,0BArLkC;EAsLlC,wBArLkC;EAsLlC,4BpC1LS;EoC2LT,kCAAA;AzC62JN;;AyC32JA;EACE,YAAA;EACA,cAAA;AzC82JF;;AyC52JA;EnCnCI,oBmCoCuB;AzC+2J3B;AyC92JE;EAEE,mCpCrMW;EoCsMX,oBAAA;EnChCA,cmCiCc;AzC+2JlB;;AyC72JA;EACE,mBAAA;EACA,sBAAA;EACA,mBAAA;AzCg3JF;AyC/2JE;EACE,oBAAA;EACA,qBAAA;AzCi3JJ;;AyC/2JA;EACE,oCpC3Na;EoC4Nb,YAAA;EACA,aAAA;EACA,WA/LsB;EAgMtB,gBAAA;AzCk3JF;;AMhgKE;EmCiJA;IACE,cAAA;EzCm3JF;EyCh3JE;;IACE,mBAAA;IACA,aAAA;EzCm3JJ;EyCj3JE;IACE,aAAA;EzCm3JJ;EyCl3JA;IACE,qCpC3OW;IoC4OX,4CAAA;IACA,iBAAA;EzCo3JF;EyCn3JE;IACE,cAAA;EzCq3JJ;EyCl3JE;IA5MF,OAAA;IACA,eAAA;IACA,QAAA;IACA,WA/Ce;EzCgnKf;EyCr3JE;IACE,SAAA;EzCu3JJ;EyCt3JI;IACE,4CAAA;EzCw3JN;EyCv3JE;IACE,MAAA;EzCy3JJ;EyCt3JI;InCzMJ,iCAAA;ImC2MM,iCAAA;IACA,cAAA;EzCw3JN;EyCr3JE;;IACE,oBA9QU;EzCsoKd;EyCv3JE;;IACE,uBAhRU;EzC0oKd;AACF;AMtjKE;EmC8LA;;;;IAIE,oBAAA;IACA,aAAA;EzC23JF;EyC13JA;IACE,mBA1RY;EzCspKd;EyC33JE;IACE,kBAAA;EzC63JJ;EyC53JI;;IAEE,mBAAA;EzC83JN;EyC73JI;;IAEE,kBpCjOC;ELgmKP;EyC33JM;;;;IAGE,wCAAA;EzC83JR;EyCx3JQ;IACE,wCAAA;EzC03JV;EyCv3JQ;IAEE,oCpC7SG;IoC8SH,wBpCzTG;ELirKb;EyCv3JQ;IACE,oCpChTG;IoCiTH,4BpCxSG;ELiqKb;EyCx3JA;IACE,aAAA;EzC03JF;EyCz3JA;;IAEE,mBAAA;IACA,aAAA;EzC23JF;EyCz3JE;IACE,oBAAA;EzC23JJ;EyCz3JI;IACE,oDAAA;EzC23JN;EyC13JI;IACE,2CA/SqB;IAgTrB,0BAAA;IACA,gBAAA;IACA,YAAA;IACA,4CAAA;IACA,SAAA;EzC43JN;EyCv3JI;IACE,cAAA;EzCy3JN;EyCx3JM;IAEE,UAAA;IACA,oBAAA;IACA,wBAAA;EzCy3JR;EyCx3JA;IACE,YAAA;IACA,cAAA;EzC03JF;EyCz3JA;IACE,2BAAA;InC7KA,kBmC8KwB;EzC23J1B;EyC13JA;IACE,yBAAA;InChLA,iBmCiLwB;EzC43J1B;EyC33JA;IACE,qCpCxVW;IoCyVX,8BpCjSW;IoCkSX,+BpClSW;IoCmSX,wCA7UyB;IA8UzB,2CAAA;IACA,aAAA;IACA,mBAAA;InCjLA,OmCkLc;IACd,eAAA;IACA,kBAAA;IACA,SAAA;IACA,WAjVgB;EzC8sKlB;EyC53JE;IACE,sBAAA;IACA,mBAAA;EzC83JJ;EyC73JE;InClMA,mBmCmM2B;EzC+3J7B;EyC93JI;IAEE,oCpC7WO;IoC8WP,wBpCzXO;ELwvKb;EyC93JI;IACE,oCpChXO;IoCiXP,4BpCxWO;ELwuKb;EyC/3JE;IAEE,kBpC1TS;IoC2TT,gBAAA;IACA,4EA/VyB;IAgWzB,cAAA;IACA,UAAA;IACA,oBAAA;IACA,wBAAA;IACA,2BAAA;IACA,yBpChUE;IoCiUF,uCAAA;EzCg4JJ;EyC/3JE;IACE,UAAA;IACA,QAAA;EzCi4JJ;EyCh4JA;IACE,cAAA;EzCk4JF;EyC/3JE;;InC9NA,qBmC+N0B;EzCk4J5B;EyCj4JE;;InChOA,sBmCiO0B;EzCo4J5B;EyCj4JE;IAnWF,OAAA;IACA,eAAA;IACA,QAAA;IACA,WA/Ce;EzCsxKf;EyCp4JE;IACE,SAAA;EzCs4JJ;EyCr4JI;IACE,4CAAA;EzCu4JN;EyCt4JE;IACE,MAAA;EzCw4JJ;EyCr4JE;;IACE,oBA/ZU;EzCuyKd;EyCv4JE;;IACE,uBAjaU;EzC2yKd;EyCz4JE;;IACE,oBAAA;EzC44JJ;EyC34JE;;IACE,uBAAA;EzC84JJ;EyC14JE;;IACE,wBpC7aS;EL0zKb;EyC54JE;;IACE,6BAlagC;EzCizKpC;EyC14JI;IACE,oCpCzaO;ELqzKb;AACF;AyCx4JE;EACE,iCAAA;AzC04JJ;;A0ClyKA;EAEE,erCFO;EqCGP,gBAnCkB;A1Cu0KpB;A0ClyKE;EACE,kBrCLK;ALyyKT;A0CnyKE;EACE,kBrCTK;AL8yKT;A0CpyKE;EACE,iBrCZK;ALkzKT;A0CpyKI;;EAEE,iBAAA;EACA,kBAAA;EACA,qBrCmBW;ALmxKjB;A0CryKI;EACE,qBrCiBW;ALsxKjB;;A0CryKA;;EAEE,mBAAA;EACA,aAAA;EACA,uBAAA;EACA,kBAAA;A1CwyKF;;A0CtyKA;;;;EAME,cA9D0B;EA+D1B,uBAAA;EACA,eA/DuB;EAgEvB,mBA/D6B;EAgE7B,oBA/D8B;EAgE9B,kBAAA;A1CuyKF;;A0CryKA;;;EAGE,gCrCtEa;EqCuEb,yBrC3Ea;EqC4Eb,gBtC3Ee;AJm3KjB;A0CvyKE;;;EACE,gCrC3EW;EqC4EX,yBrC/EW;AL03Kf;A0C1yKE;;;EACE,mCrCjEW;AL+2Kf;A0C7yKE;;;EACE,iDAtDsB;A1Cu2K1B;A0ChzKE;;;;;EAEE,oCrClFW;EqCmFX,gCrCnFW;EqCoFX,gBAAA;EACA,yBrCvFW;EqCwFX,YAAA;A1CqzKJ;;A0CnzKA;;EAEE,oBAvF4B;EAwF5B,qBAvF6B;EAwF7B,mBAAA;A1CszKF;;A0CnzKE;EACE,uCrCpFW;EqCqFX,mCrCrFW;EqCsFX,WhChCU;AVs1Kd;;A0CpzKA;EACE,yBrCtGa;EqCuGb,oBAAA;A1CuzKF;;A0CrzKA;EACE,eAAA;A1CwzKF;A0CvzKE;EACE,gBAAA;A1CyzKJ;;AMx0KE;EoCkBA;IACE,eAAA;E1C0zKF;E0CzzKA;;IAEE,YAAA;IACA,cAAA;E1C2zKF;E0CzzKE;IACE,YAAA;IACA,cAAA;E1C2zKJ;AACF;AMn1KE;EoC0BA;IACE,YAAA;IACA,cAAA;IACA,2BAAA;IACA,QAAA;E1C4zKF;E0C3zKA;;;;IAIE,gBAAA;IACA,aAAA;E1C6zKF;E0C5zKA;IACE,QAAA;E1C8zKF;E0C7zKA;IACE,QAAA;E1C+zKF;E0C9zKA;IACE,8BAAA;IACA,gBAAA;IACA,aAAA;E1Cg0KF;E0C9zKI;IACE,QAAA;E1Cg0KN;E0C/zKI;IACE,uBAAA;IACA,QAAA;E1Ci0KN;E0Ch0KI;IACE,QAAA;E1Ck0KN;E0Ch0KI;IACE,QAAA;E1Ck0KN;E0Cj0KI;IACE,QAAA;E1Cm0KN;E0Cl0KI;IACE,yBAAA;IACA,QAAA;E1Co0KN;AACF;A2C38KA;EACE,kBtCsCa;EsCrCb,0FjCqEO;EiCpEP,etCEO;AL28KT;A2C58KE;EACE,qBtCWY;ALm8KhB;A2Cx8KM;EACE,qCAJI;EAKJ,wBAJW;A3C88KnB;A2Cz8KM;EACE,wCAPI;A3Ck9KZ;A2C18KM;EACE,0BATI;A3Cq9KZ;A2Cl9KM;EACE,mCAJI;EAKJ,0BAJW;A3Cw9KnB;A2Cn9KM;EACE,sCAPI;A3C49KZ;A2Cp9KM;EACE,wBATI;A3C+9KZ;A2C59KM;EACE,oCAJI;EAKJ,yBAJW;A3Ck+KnB;A2C79KM;EACE,uCAPI;A3Cs+KZ;A2C99KM;EACE,yBATI;A3Cy+KZ;A2Ct+KM;EACE,oCAJI;EAKJ,WAJW;A3C4+KnB;A2Cv+KM;EACE,uCAPI;A3Cg/KZ;A2Cx+KM;EACE,yBATI;A3Cm/KZ;A2Ch/KM;EACE,wCAJI;EAKJ,WAJW;A3Cs/KnB;A2Cj/KM;EACE,2CAPI;A3C0/KZ;A2Cl/KM;EACE,6BATI;A3C6/KZ;A2C1/KM;EACE,uCAJI;EAKJ,WAJW;A3CggLnB;A2C3/KM;EACE,0CAPI;A3CogLZ;A2C5/KM;EACE,4BATI;A3CugLZ;A2CpgLM;EACE,uCAJI;EAKJ,WAJW;A3C0gLnB;A2CrgLM;EACE,0CAPI;A3C8gLZ;A2CtgLM;EACE,4BATI;A3CihLZ;A2C9gLM;EACE,uCAJI;EAKJ,WAJW;A3CohLnB;A2C/gLM;EACE,0CAPI;A3CwhLZ;A2ChhLM;EACE,4BATI;A3C2hLZ;A2CxhLM;EACE,uCAJI;EAKJ,yBAJW;A3C8hLnB;A2CzhLM;EACE,0CAPI;A3CkiLZ;A2C1hLM;EACE,4BATI;A3CqiLZ;A2CliLM;EACE,uCAJI;EAKJ,WAJW;A3CwiLnB;A2CniLM;EACE,0CAPI;A3C4iLZ;A2CpiLM;EACE,4BATI;A3C+iLZ;;A2CliLE;;EACE,2CAnDgB;A3CylLpB;;A2CpiLA;EACE,oCtC9Cc;EsC+Cd,0BAAA;EACA,yBtCrDa;EsCsDb,iBAhDmB;EAiDnB,gBtCjBY;EsCkBZ,iBArD0B;EAsD1B,mBArDsB;A3C4lLxB;;A2CriLA;EACE,qBAAA;EACA,aAAA;EACA,kBArDqB;EAsDrB,uBAAA;A3CwiLF;A2CviLE;EACE,2CAvDsB;EAwDtB,mBAAA;EACA,cAAA;A3CyiLJ;A2CviLI;EACE,uCtCrES;EsCsET,yBtCvES;ALgnLf;;A2CtiLE;EACE,yBtC1EW;ALmnLf;A2CxiLI;EACE,4BtC7DS;ALumLf;;A2CxiLA;EACE,mBAAA;EACA,yBtCjFa;EsCkFb,aAAA;EACA,2BAAA;EACA,qBAAA;A3C2iLF;A2C1iLE;ErCyFE,oBqCxFwB;A3C4iL5B;A2C3iLE;EACE,YAAA;EACA,cAAA;EACA,WAAA;A3C6iLJ;A2C5iLE;EACE,eAAA;A3C8iLJ;A2C7iLE;EACE,wCtC9EW;EsC+EX,yBtC/FW;AL8oLf;A2C9iLI;EACE,4BtCjFS;ALioLf;A2C/iLE;EACE,8BtClCW;EsCmCX,+BtCnCW;ALolLf;;A2C/iLA;;EAEE,eAAA;A3CkjLF;A2CjjLE;;EACE,oCtCnGW;ALupLf;;A2CljLA;ErChGE,qBAAA;EACA,eqCgGI;ErC/FJ,WqC+FU;ErC9FV,gBqC8FU;ErC7FV,kBAAA;EACA,mBAAA;EACA,UqC2FU;EACV,yBtC5Ga;EC4KX,oBqC/DsB;A3C2jL1B;A2C1jLE;EACE,kBAAA;EACA,oBAAA;A3C4jLJ;;A4CtpLA;EtCqCE,iCAAA;EsCjCA,oBAAA;EACA,aAAA;EACA,evCCO;EuCAP,8BAAA;EACA,gBAAA;EACA,gBAAA;EACA,mBAAA;A5CupLF;A4CtpLE;EACE,mBAAA;EACA,uCvCjCW;EuCkCX,0BAzCuB;EA0CvB,wBAzCuB;EA0CvB,yBvCvCW;EuCwCX,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,kBAxCgB;EAyChB,mBAAA;A5CwpLJ;A4CvpLI;EACE,uCvC/CS;EuCgDT,yBvChDS;ALysLf;A4CxpLE;EACE,cAAA;A5C0pLJ;A4CxpLM;EACE,0CvCrCO;EuCsCP,4BvCtCO;ALgsLf;A4CzpLE;EACE,mBAAA;EACA,uCvCrDW;EuCsDX,0BA7DuB;EA8DvB,wBA7DuB;EA8DvB,aAAA;EACA,YAAA;EACA,cAAA;EACA,2BAAA;A5C2pLJ;A4C1pLI;EACE,qBAAA;A5C4pLN;A4C3pLI;EACE,UAAA;EACA,uBAAA;EACA,oBAAA;EACA,qBAAA;A5C6pLN;A4C5pLI;EACE,yBAAA;EACA,oBAAA;A5C8pLN;A4C5pLI;EtCmGA,mBsClG0B;A5C8pL9B;A4C7pLI;EtCiGA,kBsChG0B;A5C+pL9B;A4C5pLI;EACE,uBAAA;A5C8pLN;A4C5pLI;EACE,yBAAA;A5C8pLN;A4C3pLI;EACE,6BAAA;EAEE,0BAAA;A5C4pLR;A4CzpLM;EACE,oCvCxFO;EuCyFP,uCvC5FO;ALuvLf;A4CxpLQ;EACE,qCvC3FK;EuC4FL,gCvCjGK;EuCkGL,2CAAA;A5C0pLV;A4CxpLI;EACE,YAAA;EACA,cAAA;A5C0pLN;A4CxpLI;EACE,gCvCzGS;EuC0GT,mBA/F0B;EAgG1B,iBA/F0B;EAgG1B,gBAAA;EACA,kBAAA;A5C0pLN;A4CzpLM;EACE,oCvC5GO;EuC6GP,gCvCjHO;EuCkHP,UAAA;A5C2pLR;A4CzpLM;EtCuDF,iBsCtD4B;A5C2pLhC;A4C1pLM;EAEI,2BvC3DD;EuC4DC,8BvC5DD;ALutLT;A4CvpLM;EAEI,4BvClED;EuCmEC,+BvCnED;AL2tLT;A4CnpLQ;EACE,uCvCzHK;EuC0HL,mCvC1HK;EuC2HL,WlCrEI;EkCsEJ,UAAA;A5CqpLV;A4CppLI;EACE,mBAAA;A5CspLN;A4CnpLQ;EAEI,iCvCjFK;EuCkFL,8BvClFK;EuCmFL,oBAAA;A5CopLZ;A4C/oLQ;EAEI,kCvC1FK;EuC2FL,+BvC3FK;EuC4FL,qBAAA;A5CgpLZ;A4C1oLE;EACE,kBvCrIK;ALixLT;A4C3oLE;EACE,kBvCzIK;ALsxLT;A4C5oLE;EACE,iBvC5IK;AL0xLT;;A6C7zLA,eAAA;ACIA;EACE,cAAA;EACA,aAAA;EACA,YAAA;EACA,cAAA;EACA,gBAPW;A9Co0Lb;A8C5zLE;EACE,UAAA;EACA,YAAA;A9C8zLJ;A8C7zLE;EACE,UAAA;EACA,WAAA;A9C+zLJ;A8C9zLE;EACE,UAAA;EACA,UAAA;A9Cg0LJ;A8C/zLE;EACE,UAAA;EACA,eAAA;A9Ci0LJ;A8Ch0LE;EACE,UAAA;EACA,UAAA;A9Ck0LJ;A8Cj0LE;EACE,UAAA;EACA,eAAA;A9Cm0LJ;A8Cl0LE;EACE,UAAA;EACA,UAAA;A9Co0LJ;A8Cn0LE;EACE,UAAA;EACA,UAAA;A9Cq0LJ;A8Cp0LE;EACE,UAAA;EACA,UAAA;A9Cs0LJ;A8Cr0LE;EACE,UAAA;EACA,UAAA;A9Cu0LJ;A8Ct0LE;EACE,UAAA;EACA,UAAA;A9Cw0LJ;A8Cv0LE;ExCyIE,gBwCxIwB;A9Cy0L5B;A8Cx0LE;ExCuIE,qBwCtIwB;A9C00L5B;A8Cz0LE;ExCqIE,gBwCpIwB;A9C20L5B;A8C10LE;ExCmIE,qBwClIwB;A9C40L5B;A8C30LE;ExCiIE,gBwChIwB;A9C60L5B;A8C50LE;ExC+HE,gBwC9HwB;A9C80L5B;A8C70LE;ExC6HE,gBwC5HwB;A9C+0L5B;A8C90LE;ExC2HE,gBwC1HwB;A9Cg1L5B;A8C/0LE;ExCyHE,gBwCxHwB;A9Ci1L5B;A8C/0LI;EACE,UAAA;EACA,SAAA;A9Ci1LN;A8Ch1LI;ExCmHA,ewClH0B;A9Ck1L9B;A8Ct1LI;EACE,UAAA;EACA,kBAAA;A9Cw1LN;A8Cv1LI;ExCmHA,wBwClH0B;A9Cy1L9B;A8C71LI;EACE,UAAA;EACA,mBAAA;A9C+1LN;A8C91LI;ExCmHA,yBwClH0B;A9Cg2L9B;A8Cp2LI;EACE,UAAA;EACA,UAAA;A9Cs2LN;A8Cr2LI;ExCmHA,gBwClH0B;A9Cu2L9B;A8C32LI;EACE,UAAA;EACA,mBAAA;A9C62LN;A8C52LI;ExCmHA,yBwClH0B;A9C82L9B;A8Cl3LI;EACE,UAAA;EACA,mBAAA;A9Co3LN;A8Cn3LI;ExCmHA,yBwClH0B;A9Cq3L9B;A8Cz3LI;EACE,UAAA;EACA,UAAA;A9C23LN;A8C13LI;ExCmHA,gBwClH0B;A9C43L9B;A8Ch4LI;EACE,UAAA;EACA,mBAAA;A9Ck4LN;A8Cj4LI;ExCmHA,yBwClH0B;A9Cm4L9B;A8Cv4LI;EACE,UAAA;EACA,mBAAA;A9Cy4LN;A8Cx4LI;ExCmHA,yBwClH0B;A9C04L9B;A8C94LI;EACE,UAAA;EACA,UAAA;A9Cg5LN;A8C/4LI;ExCmHA,gBwClH0B;A9Ci5L9B;A8Cr5LI;EACE,UAAA;EACA,mBAAA;A9Cu5LN;A8Ct5LI;ExCmHA,yBwClH0B;A9Cw5L9B;A8C55LI;EACE,UAAA;EACA,mBAAA;A9C85LN;A8C75LI;ExCmHA,yBwClH0B;A9C+5L9B;A8Cn6LI;EACE,UAAA;EACA,WAAA;A9Cq6LN;A8Cp6LI;ExCmHA,iBwClH0B;A9Cs6L9B;AMl4LE;EwClCE;IACE,UAAA;IACA,YAAA;E9Cu6LJ;E8Ct6LE;IACE,UAAA;IACA,WAAA;E9Cw6LJ;E8Cv6LE;IACE,UAAA;IACA,UAAA;E9Cy6LJ;E8Cx6LE;IACE,UAAA;IACA,eAAA;E9C06LJ;E8Cz6LE;IACE,UAAA;IACA,UAAA;E9C26LJ;E8C16LE;IACE,UAAA;IACA,eAAA;E9C46LJ;E8C36LE;IACE,UAAA;IACA,UAAA;E9C66LJ;E8C56LE;IACE,UAAA;IACA,UAAA;E9C86LJ;E8C76LE;IACE,UAAA;IACA,UAAA;E9C+6LJ;E8C96LE;IACE,UAAA;IACA,UAAA;E9Cg7LJ;E8C/6LE;IACE,UAAA;IACA,UAAA;E9Ci7LJ;E8Ch7LE;IxC+EA,gBwC9E0B;E9Ck7L5B;E8Cj7LE;IxC6EA,qBwC5E0B;E9Cm7L5B;E8Cl7LE;IxC2EA,gBwC1E0B;E9Co7L5B;E8Cn7LE;IxCyEA,qBwCxE0B;E9Cq7L5B;E8Cp7LE;IxCuEA,gBwCtE0B;E9Cs7L5B;E8Cr7LE;IxCqEA,gBwCpE0B;E9Cu7L5B;E8Ct7LE;IxCmEA,gBwClE0B;E9Cw7L5B;E8Cv7LE;IxCiEA,gBwChE0B;E9Cy7L5B;E8Cx7LE;IxC+DA,gBwC9D0B;E9C07L5B;E8Cx7LI;IACE,UAAA;IACA,SAAA;E9C07LN;E8Cz7LI;IxCyDF,ewCxD4B;E9C27L9B;E8C/7LI;IACE,UAAA;IACA,kBAAA;E9Ci8LN;E8Ch8LI;IxCyDF,wBwCxD4B;E9Ck8L9B;E8Ct8LI;IACE,UAAA;IACA,mBAAA;E9Cw8LN;E8Cv8LI;IxCyDF,yBwCxD4B;E9Cy8L9B;E8C78LI;IACE,UAAA;IACA,UAAA;E9C+8LN;E8C98LI;IxCyDF,gBwCxD4B;E9Cg9L9B;E8Cp9LI;IACE,UAAA;IACA,mBAAA;E9Cs9LN;E8Cr9LI;IxCyDF,yBwCxD4B;E9Cu9L9B;E8C39LI;IACE,UAAA;IACA,mBAAA;E9C69LN;E8C59LI;IxCyDF,yBwCxD4B;E9C89L9B;E8Cl+LI;IACE,UAAA;IACA,UAAA;E9Co+LN;E8Cn+LI;IxCyDF,gBwCxD4B;E9Cq+L9B;E8Cz+LI;IACE,UAAA;IACA,mBAAA;E9C2+LN;E8C1+LI;IxCyDF,yBwCxD4B;E9C4+L9B;E8Ch/LI;IACE,UAAA;IACA,mBAAA;E9Ck/LN;E8Cj/LI;IxCyDF,yBwCxD4B;E9Cm/L9B;E8Cv/LI;IACE,UAAA;IACA,UAAA;E9Cy/LN;E8Cx/LI;IxCyDF,gBwCxD4B;E9C0/L9B;E8C9/LI;IACE,UAAA;IACA,mBAAA;E9CggMN;E8C//LI;IxCyDF,yBwCxD4B;E9CigM9B;E8CrgMI;IACE,UAAA;IACA,mBAAA;E9CugMN;E8CtgMI;IxCyDF,yBwCxD4B;E9CwgM9B;E8C5gMI;IACE,UAAA;IACA,WAAA;E9C8gMN;E8C7gMI;IxCyDF,iBwCxD4B;E9C+gM9B;AACF;AMliME;EwCoBE;IAEE,UAAA;IACA,YAAA;E9CghMJ;E8C/gME;IAEE,UAAA;IACA,WAAA;E9CghMJ;E8C/gME;IAEE,UAAA;IACA,UAAA;E9CghMJ;E8C/gME;IAEE,UAAA;IACA,eAAA;E9CghMJ;E8C/gME;IAEE,UAAA;IACA,UAAA;E9CghMJ;E8C/gME;IAEE,UAAA;IACA,eAAA;E9CghMJ;E8C/gME;IAEE,UAAA;IACA,UAAA;E9CghMJ;E8C/gME;IAEE,UAAA;IACA,UAAA;E9CghMJ;E8C/gME;IAEE,UAAA;IACA,UAAA;E9CghMJ;E8C/gME;IAEE,UAAA;IACA,UAAA;E9CghMJ;E8C/gME;IAEE,UAAA;IACA,UAAA;E9CghMJ;E8C/gME;IxCUA,gBwCR0B;E9CghM5B;E8C/gME;IxCOA,qBwCL0B;E9CghM5B;E8C/gME;IxCIA,gBwCF0B;E9CghM5B;E8C/gME;IxCCA,qBwCC0B;E9CghM5B;E8C/gME;IxCFA,gBwCI0B;E9CghM5B;E8C/gME;IxCLA,gBwCO0B;E9CghM5B;E8C/gME;IxCRA,gBwCU0B;E9CghM5B;E8C/gME;IxCXA,gBwCa0B;E9CghM5B;E8C/gME;IxCdA,gBwCgB0B;E9CghM5B;E8C9gMI;IAEE,UAAA;IACA,SAAA;E9C+gMN;E8C9gMI;IxCtBF,ewCwB4B;E9C+gM9B;E8CrhMI;IAEE,UAAA;IACA,kBAAA;E9CshMN;E8CrhMI;IxCtBF,wBwCwB4B;E9CshM9B;E8C5hMI;IAEE,UAAA;IACA,mBAAA;E9C6hMN;E8C5hMI;IxCtBF,yBwCwB4B;E9C6hM9B;E8CniMI;IAEE,UAAA;IACA,UAAA;E9CoiMN;E8CniMI;IxCtBF,gBwCwB4B;E9CoiM9B;E8C1iMI;IAEE,UAAA;IACA,mBAAA;E9C2iMN;E8C1iMI;IxCtBF,yBwCwB4B;E9C2iM9B;E8CjjMI;IAEE,UAAA;IACA,mBAAA;E9CkjMN;E8CjjMI;IxCtBF,yBwCwB4B;E9CkjM9B;E8CxjMI;IAEE,UAAA;IACA,UAAA;E9CyjMN;E8CxjMI;IxCtBF,gBwCwB4B;E9CyjM9B;E8C/jMI;IAEE,UAAA;IACA,mBAAA;E9CgkMN;E8C/jMI;IxCtBF,yBwCwB4B;E9CgkM9B;E8CtkMI;IAEE,UAAA;IACA,mBAAA;E9CukMN;E8CtkMI;IxCtBF,yBwCwB4B;E9CukM9B;E8C7kMI;IAEE,UAAA;IACA,UAAA;E9C8kMN;E8C7kMI;IxCtBF,gBwCwB4B;E9C8kM9B;E8CplMI;IAEE,UAAA;IACA,mBAAA;E9CqlMN;E8CplMI;IxCtBF,yBwCwB4B;E9CqlM9B;E8C3lMI;IAEE,UAAA;IACA,mBAAA;E9C4lMN;E8C3lMI;IxCtBF,yBwCwB4B;E9C4lM9B;E8ClmMI;IAEE,UAAA;IACA,WAAA;E9CmmMN;E8ClmMI;IxCtBF,iBwCwB4B;E9CmmM9B;AACF;AM9rME;EwC4FE;IACE,UAAA;IACA,YAAA;E9CqmMJ;E8CpmME;IACE,UAAA;IACA,WAAA;E9CsmMJ;E8CrmME;IACE,UAAA;IACA,UAAA;E9CumMJ;E8CtmME;IACE,UAAA;IACA,eAAA;E9CwmMJ;E8CvmME;IACE,UAAA;IACA,UAAA;E9CymMJ;E8CxmME;IACE,UAAA;IACA,eAAA;E9C0mMJ;E8CzmME;IACE,UAAA;IACA,UAAA;E9C2mMJ;E8C1mME;IACE,UAAA;IACA,UAAA;E9C4mMJ;E8C3mME;IACE,UAAA;IACA,UAAA;E9C6mMJ;E8C5mME;IACE,UAAA;IACA,UAAA;E9C8mMJ;E8C7mME;IACE,UAAA;IACA,UAAA;E9C+mMJ;E8C9mME;IxC3DA,gBwC4D0B;E9CgnM5B;E8C/mME;IxC7DA,qBwC8D0B;E9CinM5B;E8ChnME;IxC/DA,gBwCgE0B;E9CknM5B;E8CjnME;IxCjEA,qBwCkE0B;E9CmnM5B;E8ClnME;IxCnEA,gBwCoE0B;E9ConM5B;E8CnnME;IxCrEA,gBwCsE0B;E9CqnM5B;E8CpnME;IxCvEA,gBwCwE0B;E9CsnM5B;E8CrnME;IxCzEA,gBwC0E0B;E9CunM5B;E8CtnME;IxC3EA,gBwC4E0B;E9CwnM5B;E8CtnMI;IACE,UAAA;IACA,SAAA;E9CwnMN;E8CvnMI;IxCjFF,ewCkF4B;E9CynM9B;E8C7nMI;IACE,UAAA;IACA,kBAAA;E9C+nMN;E8C9nMI;IxCjFF,wBwCkF4B;E9CgoM9B;E8CpoMI;IACE,UAAA;IACA,mBAAA;E9CsoMN;E8CroMI;IxCjFF,yBwCkF4B;E9CuoM9B;E8C3oMI;IACE,UAAA;IACA,UAAA;E9C6oMN;E8C5oMI;IxCjFF,gBwCkF4B;E9C8oM9B;E8ClpMI;IACE,UAAA;IACA,mBAAA;E9CopMN;E8CnpMI;IxCjFF,yBwCkF4B;E9CqpM9B;E8CzpMI;IACE,UAAA;IACA,mBAAA;E9C2pMN;E8C1pMI;IxCjFF,yBwCkF4B;E9C4pM9B;E8ChqMI;IACE,UAAA;IACA,UAAA;E9CkqMN;E8CjqMI;IxCjFF,gBwCkF4B;E9CmqM9B;E8CvqMI;IACE,UAAA;IACA,mBAAA;E9CyqMN;E8CxqMI;IxCjFF,yBwCkF4B;E9C0qM9B;E8C9qMI;IACE,UAAA;IACA,mBAAA;E9CgrMN;E8C/qMI;IxCjFF,yBwCkF4B;E9CirM9B;E8CrrMI;IACE,UAAA;IACA,UAAA;E9CurMN;E8CtrMI;IxCjFF,gBwCkF4B;E9CwrM9B;E8C5rMI;IACE,UAAA;IACA,mBAAA;E9C8rMN;E8C7rMI;IxCjFF,yBwCkF4B;E9C+rM9B;E8CnsMI;IACE,UAAA;IACA,mBAAA;E9CqsMN;E8CpsMI;IxCjFF,yBwCkF4B;E9CssM9B;E8C1sMI;IACE,UAAA;IACA,WAAA;E9C4sMN;E8C3sMI;IxCjFF,iBwCkF4B;E9C6sM9B;AACF;AM91ME;EwCkJE;IACE,UAAA;IACA,YAAA;E9C+sMJ;E8C9sME;IACE,UAAA;IACA,WAAA;E9CgtMJ;E8C/sME;IACE,UAAA;IACA,UAAA;E9CitMJ;E8ChtME;IACE,UAAA;IACA,eAAA;E9CktMJ;E8CjtME;IACE,UAAA;IACA,UAAA;E9CmtMJ;E8CltME;IACE,UAAA;IACA,eAAA;E9CotMJ;E8CntME;IACE,UAAA;IACA,UAAA;E9CqtMJ;E8CptME;IACE,UAAA;IACA,UAAA;E9CstMJ;E8CrtME;IACE,UAAA;IACA,UAAA;E9CutMJ;E8CttME;IACE,UAAA;IACA,UAAA;E9CwtMJ;E8CvtME;IACE,UAAA;IACA,UAAA;E9CytMJ;E8CxtME;IxCrHA,gBwCsH0B;E9C0tM5B;E8CztME;IxCvHA,qBwCwH0B;E9C2tM5B;E8C1tME;IxCzHA,gBwC0H0B;E9C4tM5B;E8C3tME;IxC3HA,qBwC4H0B;E9C6tM5B;E8C5tME;IxC7HA,gBwC8H0B;E9C8tM5B;E8C7tME;IxC/HA,gBwCgI0B;E9C+tM5B;E8C9tME;IxCjIA,gBwCkI0B;E9CguM5B;E8C/tME;IxCnIA,gBwCoI0B;E9CiuM5B;E8ChuME;IxCrIA,gBwCsI0B;E9CkuM5B;E8ChuMI;IACE,UAAA;IACA,SAAA;E9CkuMN;E8CjuMI;IxC3IF,ewC4I4B;E9CmuM9B;E8CvuMI;IACE,UAAA;IACA,kBAAA;E9CyuMN;E8CxuMI;IxC3IF,wBwC4I4B;E9C0uM9B;E8C9uMI;IACE,UAAA;IACA,mBAAA;E9CgvMN;E8C/uMI;IxC3IF,yBwC4I4B;E9CivM9B;E8CrvMI;IACE,UAAA;IACA,UAAA;E9CuvMN;E8CtvMI;IxC3IF,gBwC4I4B;E9CwvM9B;E8C5vMI;IACE,UAAA;IACA,mBAAA;E9C8vMN;E8C7vMI;IxC3IF,yBwC4I4B;E9C+vM9B;E8CnwMI;IACE,UAAA;IACA,mBAAA;E9CqwMN;E8CpwMI;IxC3IF,yBwC4I4B;E9CswM9B;E8C1wMI;IACE,UAAA;IACA,UAAA;E9C4wMN;E8C3wMI;IxC3IF,gBwC4I4B;E9C6wM9B;E8CjxMI;IACE,UAAA;IACA,mBAAA;E9CmxMN;E8ClxMI;IxC3IF,yBwC4I4B;E9CoxM9B;E8CxxMI;IACE,UAAA;IACA,mBAAA;E9C0xMN;E8CzxMI;IxC3IF,yBwC4I4B;E9C2xM9B;E8C/xMI;IACE,UAAA;IACA,UAAA;E9CiyMN;E8ChyMI;IxC3IF,gBwC4I4B;E9CkyM9B;E8CtyMI;IACE,UAAA;IACA,mBAAA;E9CwyMN;E8CvyMI;IxC3IF,yBwC4I4B;E9CyyM9B;E8C7yMI;IACE,UAAA;IACA,mBAAA;E9C+yMN;E8C9yMI;IxC3IF,yBwC4I4B;E9CgzM9B;E8CpzMI;IACE,UAAA;IACA,WAAA;E9CszMN;E8CrzMI;IxC3IF,iBwC4I4B;E9CuzM9B;AACF;AMn/MI;EwC6LA;IACE,UAAA;IACA,YAAA;E9CyzMJ;E8CxzME;IACE,UAAA;IACA,WAAA;E9C0zMJ;E8CzzME;IACE,UAAA;IACA,UAAA;E9C2zMJ;E8C1zME;IACE,UAAA;IACA,eAAA;E9C4zMJ;E8C3zME;IACE,UAAA;IACA,UAAA;E9C6zMJ;E8C5zME;IACE,UAAA;IACA,eAAA;E9C8zMJ;E8C7zME;IACE,UAAA;IACA,UAAA;E9C+zMJ;E8C9zME;IACE,UAAA;IACA,UAAA;E9Cg0MJ;E8C/zME;IACE,UAAA;IACA,UAAA;E9Ci0MJ;E8Ch0ME;IACE,UAAA;IACA,UAAA;E9Ck0MJ;E8Cj0ME;IACE,UAAA;IACA,UAAA;E9Cm0MJ;E8Cl0ME;IxC/KA,gBwCgL0B;E9Co0M5B;E8Cn0ME;IxCjLA,qBwCkL0B;E9Cq0M5B;E8Cp0ME;IxCnLA,gBwCoL0B;E9Cs0M5B;E8Cr0ME;IxCrLA,qBwCsL0B;E9Cu0M5B;E8Ct0ME;IxCvLA,gBwCwL0B;E9Cw0M5B;E8Cv0ME;IxCzLA,gBwC0L0B;E9Cy0M5B;E8Cx0ME;IxC3LA,gBwC4L0B;E9C00M5B;E8Cz0ME;IxC7LA,gBwC8L0B;E9C20M5B;E8C10ME;IxC/LA,gBwCgM0B;E9C40M5B;E8C10MI;IACE,UAAA;IACA,SAAA;E9C40MN;E8C30MI;IxCrMF,ewCsM4B;E9C60M9B;E8Cj1MI;IACE,UAAA;IACA,kBAAA;E9Cm1MN;E8Cl1MI;IxCrMF,wBwCsM4B;E9Co1M9B;E8Cx1MI;IACE,UAAA;IACA,mBAAA;E9C01MN;E8Cz1MI;IxCrMF,yBwCsM4B;E9C21M9B;E8C/1MI;IACE,UAAA;IACA,UAAA;E9Ci2MN;E8Ch2MI;IxCrMF,gBwCsM4B;E9Ck2M9B;E8Ct2MI;IACE,UAAA;IACA,mBAAA;E9Cw2MN;E8Cv2MI;IxCrMF,yBwCsM4B;E9Cy2M9B;E8C72MI;IACE,UAAA;IACA,mBAAA;E9C+2MN;E8C92MI;IxCrMF,yBwCsM4B;E9Cg3M9B;E8Cp3MI;IACE,UAAA;IACA,UAAA;E9Cs3MN;E8Cr3MI;IxCrMF,gBwCsM4B;E9Cu3M9B;E8C33MI;IACE,UAAA;IACA,mBAAA;E9C63MN;E8C53MI;IxCrMF,yBwCsM4B;E9C83M9B;E8Cl4MI;IACE,UAAA;IACA,mBAAA;E9Co4MN;E8Cn4MI;IxCrMF,yBwCsM4B;E9Cq4M9B;E8Cz4MI;IACE,UAAA;IACA,UAAA;E9C24MN;E8C14MI;IxCrMF,gBwCsM4B;E9C44M9B;E8Ch5MI;IACE,UAAA;IACA,mBAAA;E9Ck5MN;E8Cj5MI;IxCrMF,yBwCsM4B;E9Cm5M9B;E8Cv5MI;IACE,UAAA;IACA,mBAAA;E9Cy5MN;E8Cx5MI;IxCrMF,yBwCsM4B;E9C05M9B;E8C95MI;IACE,UAAA;IACA,WAAA;E9Cg6MN;E8C/5MI;IxCrMF,iBwCsM4B;E9Ci6M9B;AACF;AMxoNI;EwCwOA;IACE,UAAA;IACA,YAAA;E9Cm6MJ;E8Cl6ME;IACE,UAAA;IACA,WAAA;E9Co6MJ;E8Cn6ME;IACE,UAAA;IACA,UAAA;E9Cq6MJ;E8Cp6ME;IACE,UAAA;IACA,eAAA;E9Cs6MJ;E8Cr6ME;IACE,UAAA;IACA,UAAA;E9Cu6MJ;E8Ct6ME;IACE,UAAA;IACA,eAAA;E9Cw6MJ;E8Cv6ME;IACE,UAAA;IACA,UAAA;E9Cy6MJ;E8Cx6ME;IACE,UAAA;IACA,UAAA;E9C06MJ;E8Cz6ME;IACE,UAAA;IACA,UAAA;E9C26MJ;E8C16ME;IACE,UAAA;IACA,UAAA;E9C46MJ;E8C36ME;IACE,UAAA;IACA,UAAA;E9C66MJ;E8C56ME;IxCzOA,gBwC0O0B;E9C86M5B;E8C76ME;IxC3OA,qBwC4O0B;E9C+6M5B;E8C96ME;IxC7OA,gBwC8O0B;E9Cg7M5B;E8C/6ME;IxC/OA,qBwCgP0B;E9Ci7M5B;E8Ch7ME;IxCjPA,gBwCkP0B;E9Ck7M5B;E8Cj7ME;IxCnPA,gBwCoP0B;E9Cm7M5B;E8Cl7ME;IxCrPA,gBwCsP0B;E9Co7M5B;E8Cn7ME;IxCvPA,gBwCwP0B;E9Cq7M5B;E8Cp7ME;IxCzPA,gBwC0P0B;E9Cs7M5B;E8Cp7MI;IACE,UAAA;IACA,SAAA;E9Cs7MN;E8Cr7MI;IxC/PF,ewCgQ4B;E9Cu7M9B;E8C37MI;IACE,UAAA;IACA,kBAAA;E9C67MN;E8C57MI;IxC/PF,wBwCgQ4B;E9C87M9B;E8Cl8MI;IACE,UAAA;IACA,mBAAA;E9Co8MN;E8Cn8MI;IxC/PF,yBwCgQ4B;E9Cq8M9B;E8Cz8MI;IACE,UAAA;IACA,UAAA;E9C28MN;E8C18MI;IxC/PF,gBwCgQ4B;E9C48M9B;E8Ch9MI;IACE,UAAA;IACA,mBAAA;E9Ck9MN;E8Cj9MI;IxC/PF,yBwCgQ4B;E9Cm9M9B;E8Cv9MI;IACE,UAAA;IACA,mBAAA;E9Cy9MN;E8Cx9MI;IxC/PF,yBwCgQ4B;E9C09M9B;E8C99MI;IACE,UAAA;IACA,UAAA;E9Cg+MN;E8C/9MI;IxC/PF,gBwCgQ4B;E9Ci+M9B;E8Cr+MI;IACE,UAAA;IACA,mBAAA;E9Cu+MN;E8Ct+MI;IxC/PF,yBwCgQ4B;E9Cw+M9B;E8C5+MI;IACE,UAAA;IACA,mBAAA;E9C8+MN;E8C7+MI;IxC/PF,yBwCgQ4B;E9C++M9B;E8Cn/MI;IACE,UAAA;IACA,UAAA;E9Cq/MN;E8Cp/MI;IxC/PF,gBwCgQ4B;E9Cs/M9B;E8C1/MI;IACE,UAAA;IACA,mBAAA;E9C4/MN;E8C3/MI;IxC/PF,yBwCgQ4B;E9C6/M9B;E8CjgNI;IACE,UAAA;IACA,mBAAA;E9CmgNN;E8ClgNI;IxC/PF,yBwCgQ4B;E9CogN9B;E8CxgNI;IACE,UAAA;IACA,WAAA;E9C0gNN;E8CzgNI;IxC/PF,iBwCgQ4B;E9C2gN9B;AACF;;A8C1gNA;ExClQI,qBwCmQsB;ExCnQtB,sBwCoQsB;EACxB,oBAAA;A9C6gNF;A8C5gNE;EACE,uBAAA;A9C8gNJ;A8C7gNE;EACE,qCAAA;A9C+gNJ;A8C7gNE;EACE,uBAAA;A9C+gNJ;A8C9gNE;ExC7QE,cwC8QwB;ExC9QxB,ewC+QwB;EACxB,aAAA;A9CghNJ;A8C/gNI;EACE,SAAA;EACA,qBAAA;A9CihNN;A8ChhNI;EACE,qBAAA;A9CkhNN;A8CjhNI;EACE,gBAAA;A9CmhNN;A8ClhNE;EACE,aAAA;A9CohNJ;A8CnhNE;EACE,eAAA;A9CqhNJ;A8CphNE;EACE,mBAAA;A9CshNJ;AM73NE;EwC0WE;IACE,aAAA;E9CshNJ;AACF;AMt3NE;EwCkWE;IACE,aAAA;E9CuhNJ;AACF;;A8CrhNE;EACE,oBAAA;ExCzSA,wCwC0SwB;ExC1SxB,yCwC2SwB;A9CwhN5B;A8CvhNI;EACE,8BAAA;EACA,+BAAA;A9CyhNN;A8CvhNM;EACE,iBAAA;A9CyhNR;AMx5NE;EwCiYM;IACE,iBAAA;E9C0hNR;AACF;AMz5NE;EwCgYM;IACE,iBAAA;E9C4hNR;AACF;AM15NE;EwC+XM;IACE,iBAAA;E9C8hNR;AACF;AM35NE;EwC8XM;IACE,iBAAA;E9CgiNR;AACF;AM55NE;EwC6XM;IACE,iBAAA;E9CkiNR;AACF;AM55NI;EwC2XI;IACE,iBAAA;E9CoiNR;AACF;AMv5NI;EwCoXI;IACE,iBAAA;E9CsiNR;AACF;AMv5NI;EwCkXI;IACE,iBAAA;E9CwiNR;AACF;AMl5NI;EwC2WI;IACE,iBAAA;E9C0iNR;AACF;A8CvkNM;EACE,oBAAA;A9CykNR;AMx8NE;EwCiYM;IACE,oBAAA;E9C0kNR;AACF;AMz8NE;EwCgYM;IACE,oBAAA;E9C4kNR;AACF;AM18NE;EwC+XM;IACE,oBAAA;E9C8kNR;AACF;AM38NE;EwC8XM;IACE,oBAAA;E9CglNR;AACF;AM58NE;EwC6XM;IACE,oBAAA;E9CklNR;AACF;AM58NI;EwC2XI;IACE,oBAAA;E9ColNR;AACF;AMv8NI;EwCoXI;IACE,oBAAA;E9CslNR;AACF;AMv8NI;EwCkXI;IACE,oBAAA;E9CwlNR;AACF;AMl8NI;EwC2WI;IACE,oBAAA;E9C0lNR;AACF;A8CvnNM;EACE,mBAAA;A9CynNR;AMx/NE;EwCiYM;IACE,mBAAA;E9C0nNR;AACF;AMz/NE;EwCgYM;IACE,mBAAA;E9C4nNR;AACF;AM1/NE;EwC+XM;IACE,mBAAA;E9C8nNR;AACF;AM3/NE;EwC8XM;IACE,mBAAA;E9CgoNR;AACF;AM5/NE;EwC6XM;IACE,mBAAA;E9CkoNR;AACF;AM5/NI;EwC2XI;IACE,mBAAA;E9CooNR;AACF;AMv/NI;EwCoXI;IACE,mBAAA;E9CsoNR;AACF;AMv/NI;EwCkXI;IACE,mBAAA;E9CwoNR;AACF;AMl/NI;EwC2WI;IACE,mBAAA;E9C0oNR;AACF;A8CvqNM;EACE,oBAAA;A9CyqNR;AMxiOE;EwCiYM;IACE,oBAAA;E9C0qNR;AACF;AMziOE;EwCgYM;IACE,oBAAA;E9C4qNR;AACF;AM1iOE;EwC+XM;IACE,oBAAA;E9C8qNR;AACF;AM3iOE;EwC8XM;IACE,oBAAA;E9CgrNR;AACF;AM5iOE;EwC6XM;IACE,oBAAA;E9CkrNR;AACF;AM5iOI;EwC2XI;IACE,oBAAA;E9CorNR;AACF;AMviOI;EwCoXI;IACE,oBAAA;E9CsrNR;AACF;AMviOI;EwCkXI;IACE,oBAAA;E9CwrNR;AACF;AMliOI;EwC2WI;IACE,oBAAA;E9C0rNR;AACF;A8CvtNM;EACE,iBAAA;A9CytNR;AMxlOE;EwCiYM;IACE,iBAAA;E9C0tNR;AACF;AMzlOE;EwCgYM;IACE,iBAAA;E9C4tNR;AACF;AM1lOE;EwC+XM;IACE,iBAAA;E9C8tNR;AACF;AM3lOE;EwC8XM;IACE,iBAAA;E9CguNR;AACF;AM5lOE;EwC6XM;IACE,iBAAA;E9CkuNR;AACF;AM5lOI;EwC2XI;IACE,iBAAA;E9CouNR;AACF;AMvlOI;EwCoXI;IACE,iBAAA;E9CsuNR;AACF;AMvlOI;EwCkXI;IACE,iBAAA;E9CwuNR;AACF;AMllOI;EwC2WI;IACE,iBAAA;E9C0uNR;AACF;A8CvwNM;EACE,oBAAA;A9CywNR;AMxoOE;EwCiYM;IACE,oBAAA;E9C0wNR;AACF;AMzoOE;EwCgYM;IACE,oBAAA;E9C4wNR;AACF;AM1oOE;EwC+XM;IACE,oBAAA;E9C8wNR;AACF;AM3oOE;EwC8XM;IACE,oBAAA;E9CgxNR;AACF;AM5oOE;EwC6XM;IACE,oBAAA;E9CkxNR;AACF;AM5oOI;EwC2XI;IACE,oBAAA;E9CoxNR;AACF;AMvoOI;EwCoXI;IACE,oBAAA;E9CsxNR;AACF;AMvoOI;EwCkXI;IACE,oBAAA;E9CwxNR;AACF;AMloOI;EwC2WI;IACE,oBAAA;E9C0xNR;AACF;A8CvzNM;EACE,mBAAA;A9CyzNR;AMxrOE;EwCiYM;IACE,mBAAA;E9C0zNR;AACF;AMzrOE;EwCgYM;IACE,mBAAA;E9C4zNR;AACF;AM1rOE;EwC+XM;IACE,mBAAA;E9C8zNR;AACF;AM3rOE;EwC8XM;IACE,mBAAA;E9Cg0NR;AACF;AM5rOE;EwC6XM;IACE,mBAAA;E9Ck0NR;AACF;AM5rOI;EwC2XI;IACE,mBAAA;E9Co0NR;AACF;AMvrOI;EwCoXI;IACE,mBAAA;E9Cs0NR;AACF;AMvrOI;EwCkXI;IACE,mBAAA;E9Cw0NR;AACF;AMlrOI;EwC2WI;IACE,mBAAA;E9C00NR;AACF;A8Cv2NM;EACE,oBAAA;A9Cy2NR;AMxuOE;EwCiYM;IACE,oBAAA;E9C02NR;AACF;AMzuOE;EwCgYM;IACE,oBAAA;E9C42NR;AACF;AM1uOE;EwC+XM;IACE,oBAAA;E9C82NR;AACF;AM3uOE;EwC8XM;IACE,oBAAA;E9Cg3NR;AACF;AM5uOE;EwC6XM;IACE,oBAAA;E9Ck3NR;AACF;AM5uOI;EwC2XI;IACE,oBAAA;E9Co3NR;AACF;AMvuOI;EwCoXI;IACE,oBAAA;E9Cs3NR;AACF;AMvuOI;EwCkXI;IACE,oBAAA;E9Cw3NR;AACF;AMluOI;EwC2WI;IACE,oBAAA;E9C03NR;AACF;A8Cv5NM;EACE,iBAAA;A9Cy5NR;AMxxOE;EwCiYM;IACE,iBAAA;E9C05NR;AACF;AMzxOE;EwCgYM;IACE,iBAAA;E9C45NR;AACF;AM1xOE;EwC+XM;IACE,iBAAA;E9C85NR;AACF;AM3xOE;EwC8XM;IACE,iBAAA;E9Cg6NR;AACF;AM5xOE;EwC6XM;IACE,iBAAA;E9Ck6NR;AACF;AM5xOI;EwC2XI;IACE,iBAAA;E9Co6NR;AACF;AMvxOI;EwCoXI;IACE,iBAAA;E9Cs6NR;AACF;AMvxOI;EwCkXI;IACE,iBAAA;E9Cw6NR;AACF;AMlxOI;EwC2WI;IACE,iBAAA;E9C06NR;AACF;;A+Cv6OA;EACE,oBAAA;EACA,cAAA;EACA,aAAA;EACA,YAAA;EACA,cAAA;EACA,+BAAA;EAAA,4BAAA;EAAA,uBAAA;A/C06OF;A+Cx6OE;EACE,qBAAA;EACA,sBAAA;EACA,oBAAA;A/C06OJ;A+Cz6OI;EACE,uBAAA;A/C26ON;A+C16OI;EACE,sBAjBS;A/C67Of;A+C36OE;EACE,oBAAA;A/C66OJ;A+C56OE;EACE,gBArBW;A/Cm8Of;A+C76OE;EACE,sBAAA;A/C+6OJ;A+C96OI;EACE,gCAAA;A/Cg7ON;AMj2OE;EyC5EE;IACE,aAAA;E/Cg7OJ;E+C96OI;IACE,UAAA;IACA,kBAAA;E/Cg7ON;E+Cl7OI;IACE,UAAA;IACA,mBAAA;E/Co7ON;E+Ct7OI;IACE,UAAA;IACA,UAAA;E/Cw7ON;E+C17OI;IACE,UAAA;IACA,mBAAA;E/C47ON;E+C97OI;IACE,UAAA;IACA,mBAAA;E/Cg8ON;E+Cl8OI;IACE,UAAA;IACA,UAAA;E/Co8ON;E+Ct8OI;IACE,UAAA;IACA,mBAAA;E/Cw8ON;E+C18OI;IACE,UAAA;IACA,mBAAA;E/C48ON;E+C98OI;IACE,UAAA;IACA,UAAA;E/Cg9ON;E+Cl9OI;IACE,UAAA;IACA,mBAAA;E/Co9ON;E+Ct9OI;IACE,UAAA;IACA,mBAAA;E/Cw9ON;E+C19OI;IACE,UAAA;IACA,WAAA;E/C49ON;AACF;;AgDhgPA,kBAAA;ACIE;EACE,qCAAA;AjDggPJ;;AiD9/OI;EAEE,yBAAA;AjDggPN;;AiD//OE;EACE,gDAAA;AjDkgPJ;;AiDzgPE;EACE,mCAAA;AjD4gPJ;;AiD1gPI;EAEE,uBAAA;AjD4gPN;;AiD3gPE;EACE,8CAAA;AjD8gPJ;;AiDrhPE;EACE,oCAAA;AjDwhPJ;;AiDthPI;EAEE,yBAAA;AjDwhPN;;AiDvhPE;EACE,+CAAA;AjD0hPJ;;AiDjiPE;EACE,oCAAA;AjDoiPJ;;AiDliPI;EAEE,yBAAA;AjDoiPN;;AiDniPE;EACE,+CAAA;AjDsiPJ;;AiD7iPE;EACE,wCAAA;AjDgjPJ;;AiD9iPI;EAEE,yBAAA;AjDgjPN;;AiD/iPE;EACE,mDAAA;AjDkjPJ;;AiD7iPI;EACE,yBAAA;AjDgjPN;;AiD9iPM;EAEE,yBAAA;AjDgjPR;;AiD/iPI;EACE,oCAAA;AjDkjPN;;AiDhjPI;EACE,yBAAA;AjDmjPN;;AiDjjPM;EAEE,yBAAA;AjDmjPR;;AiDljPI;EACE,oCAAA;AjDqjPN;;AiDjlPE;EACE,uCAAA;AjDolPJ;;AiDllPI;EAEE,yBAAA;AjDolPN;;AiDnlPE;EACE,kDAAA;AjDslPJ;;AiDjlPI;EACE,yBAAA;AjDolPN;;AiDllPM;EAEE,yBAAA;AjDolPR;;AiDnlPI;EACE,oCAAA;AjDslPN;;AiDplPI;EACE,yBAAA;AjDulPN;;AiDrlPM;EAEE,yBAAA;AjDulPR;;AiDtlPI;EACE,oCAAA;AjDylPN;;AiDrnPE;EACE,uCAAA;AjDwnPJ;;AiDtnPI;EAEE,yBAAA;AjDwnPN;;AiDvnPE;EACE,kDAAA;AjD0nPJ;;AiDrnPI;EACE,yBAAA;AjDwnPN;;AiDtnPM;EAEE,yBAAA;AjDwnPR;;AiDvnPI;EACE,oCAAA;AjD0nPN;;AiDxnPI;EACE,yBAAA;AjD2nPN;;AiDznPM;EAEE,yBAAA;AjD2nPR;;AiD1nPI;EACE,oCAAA;AjD6nPN;;AiDzpPE;EACE,uCAAA;AjD4pPJ;;AiD1pPI;EAEE,yBAAA;AjD4pPN;;AiD3pPE;EACE,kDAAA;AjD8pPJ;;AiDzpPI;EACE,yBAAA;AjD4pPN;;AiD1pPM;EAEE,yBAAA;AjD4pPR;;AiD3pPI;EACE,oCAAA;AjD8pPN;;AiD5pPI;EACE,yBAAA;AjD+pPN;;AiD7pPM;EAEE,yBAAA;AjD+pPR;;AiD9pPI;EACE,oCAAA;AjDiqPN;;AiD7rPE;EACE,uCAAA;AjDgsPJ;;AiD9rPI;EAEE,yBAAA;AjDgsPN;;AiD/rPE;EACE,kDAAA;AjDksPJ;;AiD7rPI;EACE,yBAAA;AjDgsPN;;AiD9rPM;EAEE,yBAAA;AjDgsPR;;AiD/rPI;EACE,oCAAA;AjDksPN;;AiDhsPI;EACE,yBAAA;AjDmsPN;;AiDjsPM;EAEE,yBAAA;AjDmsPR;;AiDlsPI;EACE,oCAAA;AjDqsPN;;AiDjuPE;EACE,uCAAA;AjDouPJ;;AiDluPI;EAEE,yBAAA;AjDouPN;;AiDnuPE;EACE,kDAAA;AjDsuPJ;;AiDjuPI;EACE,yBAAA;AjDouPN;;AiDluPM;EAEE,yBAAA;AjDouPR;;AiDnuPI;EACE,oCAAA;AjDsuPN;;AiDpuPI;EACE,yBAAA;AjDuuPN;;AiDruPM;EAEE,yBAAA;AjDuuPR;;AiDtuPI;EACE,oCAAA;AjDyuPN;;AiDtuPE;EACE,mCAAA;AjDyuPJ;;AiDxuPE;EACE,8CAAA;AjD2uPJ;;AiD9uPE;EACE,oCAAA;AjDivPJ;;AiDhvPE;EACE,+CAAA;AjDmvPJ;;AiDtvPE;EACE,oCAAA;AjDyvPJ;;AiDxvPE;EACE,+CAAA;AjD2vPJ;;AiD9vPE;EACE,oCAAA;AjDiwPJ;;AiDhwPE;EACE,+CAAA;AjDmwPJ;;AiDtwPE;EACE,oCAAA;AjDywPJ;;AiDxwPE;EACE,+CAAA;AjD2wPJ;;AiD9wPE;EACE,oCAAA;AjDixPJ;;AiDhxPE;EACE,+CAAA;AjDmxPJ;;AiDtxPE;EACE,oCAAA;AjDyxPJ;;AiDxxPE;EACE,+CAAA;AjD2xPJ;;AiD9xPE;EACE,oCAAA;AjDiyPJ;;AiDhyPE;EACE,+CAAA;AjDmyPJ;;AiDtyPE;EACE,oCAAA;AjDyyPJ;;AiDxyPE;EACE,+CAAA;AjD2yPJ;;AkD/0PE;EACE,8BAAA;AlDk1PJ;;AkDn1PE;EACE,sCAAA;AlDs1PJ;;AkDv1PE;EACE,iCAAA;AlD01PJ;;AkD31PE;EACE,yCAAA;AlD81PJ;;AkD11PE;EACE,4BAAA;AlD61PJ;;AkD91PE;EACE,0BAAA;AlDi2PJ;;AkDl2PE;EACE,kCAAA;AlDq2PJ;;AkDj2PE;EACE,sCAAA;AlDo2PJ;;AkDr2PE;EACE,oCAAA;AlDw2PJ;;AkDz2PE;EACE,kCAAA;AlD42PJ;;AkD72PE;EACE,yCAAA;AlDg3PJ;;AkDj3PE;EACE,wCAAA;AlDo3PJ;;AkDr3PE;EACE,wCAAA;AlDw3PJ;;AkDz3PE;EACE,iCAAA;AlD43PJ;;AkD73PE;EACE,+BAAA;AlDg4PJ;;AkDj4PE;EACE,gCAAA;AlDo4PJ;;AkDr4PE;EACE,iCAAA;AlDw4PJ;;AkDp4PE;EACE,oCAAA;AlDu4PJ;;AkDx4PE;EACE,kCAAA;AlD24PJ;;AkD54PE;EACE,gCAAA;AlD+4PJ;;AkDh5PE;EACE,uCAAA;AlDm5PJ;;AkDp5PE;EACE,sCAAA;AlDu5PJ;;AkDx5PE;EACE,sCAAA;AlD25PJ;;AkD55PE;EACE,iCAAA;AlD+5PJ;;AkDh6PE;EACE,+BAAA;AlDm6PJ;;AkDp6PE;EACE,6BAAA;AlDu6PJ;;AkDx6PE;EACE,kCAAA;AlD26PJ;;AkDv6PE;EACE,+BAAA;AlD06PJ;;AkD36PE;EACE,kCAAA;AlD86PJ;;AkD/6PE;EACE,gCAAA;AlDk7PJ;;AkDn7PE;EACE,8BAAA;AlDs7PJ;;AkDv7PE;EACE,gCAAA;AlD07PJ;;AkD37PE;EACE,6BAAA;AlD87PJ;;AkD/7PE;EACE,2BAAA;AlDk8PJ;;AkDn8PE;EACE,kCAAA;AlDs8PJ;;AkDv8PE;EACE,gCAAA;AlD08PJ;;AkDt8PE;EACE,2BAAA;AlDy8PJ;;AkD18PE;EACE,iCAAA;AlD68PJ;;AkD98PE;EACE,+BAAA;AlDi9PJ;;AkDl9PE;EACE,6BAAA;AlDq9PJ;;AkDt9PE;EACE,+BAAA;AlDy9PJ;;AkD19PE;EACE,8BAAA;AlD69PJ;;AkDx9PI;EACE,uBAAA;AlD29PN;;AkD59PI;EACE,uBAAA;AlD+9PN;;AkDh+PI;EACE,uBAAA;AlDm+PN;;AkDp+PI;EACE,uBAAA;AlDu+PN;;AkDx+PI;EACE,uBAAA;AlD2+PN;;AkD5+PI;EACE,uBAAA;AlD++PN;;AkDh/PI;EACE,yBAAA;AlDm/PN;;AkDp/PI;EACE,yBAAA;AlDu/PN;;AkDx/PI;EACE,yBAAA;AlD2/PN;;AkD5/PI;EACE,yBAAA;AlD+/PN;;AkDhgQI;EACE,yBAAA;AlDmgQN;;AkDpgQI;EACE,yBAAA;AlDugQN;;AMtiQE;EACE,WAAA;EACA,YAAA;EACA,cAAA;ANyiQJ;;AmD1iQA;EACE,sBAAA;AnD6iQF;;AmD3iQA;EACE,uBAAA;AnD8iQF;;AoDrjQA;EACE,2BAAA;ApDwjQF;;AoDtjQA;EACE,2BAAA;ApDyjQF;;AoDvjQA;EACE,0BAAA;EACA,8BAAA;ApD0jQF;;AqDpkQA;EACE,2BAAA;ArDukQF;;AsDnkQA;EACE,6BAAA;AtDskQF;;AuD5kQA;EACE,oBAAA;AvD+kQF;;AuD7kQA;EACE,qBAAA;AvDglQF;;AuDrkQI;EACE,oBAAA;AvDwkQN;;AuDrkQM;EACE,wBAAA;AvDwkQR;;AuDzkQM;EACE,0BAAA;AvD4kQR;;AuD7kQM;EACE,2BAAA;AvDglQR;;AuDjlQM;EACE,yBAAA;AvDolQR;;AuDjlQM;EACE,yBAAA;EACA,0BAAA;AvDolQR;;AuDjlQM;EACE,wBAAA;EACA,2BAAA;AvDolQR;;AuDnmQI;EACE,0BAAA;AvDsmQN;;AuDnmQM;EACE,8BAAA;AvDsmQR;;AuDvmQM;EACE,gCAAA;AvD0mQR;;AuD3mQM;EACE,iCAAA;AvD8mQR;;AuD/mQM;EACE,+BAAA;AvDknQR;;AuD/mQM;EACE,+BAAA;EACA,gCAAA;AvDknQR;;AuD/mQM;EACE,8BAAA;EACA,iCAAA;AvDknQR;;AuDjoQI;EACE,yBAAA;AvDooQN;;AuDjoQM;EACE,6BAAA;AvDooQR;;AuDroQM;EACE,+BAAA;AvDwoQR;;AuDzoQM;EACE,gCAAA;AvD4oQR;;AuD7oQM;EACE,8BAAA;AvDgpQR;;AuD7oQM;EACE,8BAAA;EACA,+BAAA;AvDgpQR;;AuD7oQM;EACE,6BAAA;EACA,gCAAA;AvDgpQR;;AuD/pQI;EACE,0BAAA;AvDkqQN;;AuD/pQM;EACE,8BAAA;AvDkqQR;;AuDnqQM;EACE,gCAAA;AvDsqQR;;AuDvqQM;EACE,iCAAA;AvD0qQR;;AuD3qQM;EACE,+BAAA;AvD8qQR;;AuD3qQM;EACE,+BAAA;EACA,gCAAA;AvD8qQR;;AuD3qQM;EACE,8BAAA;EACA,iCAAA;AvD8qQR;;AuD7rQI;EACE,uBAAA;AvDgsQN;;AuD7rQM;EACE,2BAAA;AvDgsQR;;AuDjsQM;EACE,6BAAA;AvDosQR;;AuDrsQM;EACE,8BAAA;AvDwsQR;;AuDzsQM;EACE,4BAAA;AvD4sQR;;AuDzsQM;EACE,4BAAA;EACA,6BAAA;AvD4sQR;;AuDzsQM;EACE,2BAAA;EACA,8BAAA;AvD4sQR;;AuD3tQI;EACE,yBAAA;AvD8tQN;;AuD3tQM;EACE,6BAAA;AvD8tQR;;AuD/tQM;EACE,+BAAA;AvDkuQR;;AuDnuQM;EACE,gCAAA;AvDsuQR;;AuDvuQM;EACE,8BAAA;AvD0uQR;;AuDvuQM;EACE,8BAAA;EACA,+BAAA;AvD0uQR;;AuDvuQM;EACE,6BAAA;EACA,gCAAA;AvD0uQR;;AuDzvQI;EACE,uBAAA;AvD4vQN;;AuDzvQM;EACE,2BAAA;AvD4vQR;;AuD7vQM;EACE,6BAAA;AvDgwQR;;AuDjwQM;EACE,8BAAA;AvDowQR;;AuDrwQM;EACE,4BAAA;AvDwwQR;;AuDrwQM;EACE,4BAAA;EACA,6BAAA;AvDwwQR;;AuDrwQM;EACE,2BAAA;EACA,8BAAA;AvDwwQR;;AuDvxQI;EACE,uBAAA;AvD0xQN;;AuDvxQM;EACE,2BAAA;AvD0xQR;;AuD3xQM;EACE,6BAAA;AvD8xQR;;AuD/xQM;EACE,8BAAA;AvDkyQR;;AuDnyQM;EACE,4BAAA;AvDsyQR;;AuDnyQM;EACE,4BAAA;EACA,6BAAA;AvDsyQR;;AuDnyQM;EACE,2BAAA;EACA,8BAAA;AvDsyQR;;AuDrzQI;EACE,qBAAA;AvDwzQN;;AuDrzQM;EACE,yBAAA;AvDwzQR;;AuDzzQM;EACE,2BAAA;AvD4zQR;;AuD7zQM;EACE,4BAAA;AvDg0QR;;AuDj0QM;EACE,0BAAA;AvDo0QR;;AuDj0QM;EACE,0BAAA;EACA,2BAAA;AvDo0QR;;AuDj0QM;EACE,yBAAA;EACA,4BAAA;AvDo0QR;;AuDn1QI;EACE,2BAAA;AvDs1QN;;AuDn1QM;EACE,+BAAA;AvDs1QR;;AuDv1QM;EACE,iCAAA;AvD01QR;;AuD31QM;EACE,kCAAA;AvD81QR;;AuD/1QM;EACE,gCAAA;AvDk2QR;;AuD/1QM;EACE,gCAAA;EACA,iCAAA;AvDk2QR;;AuD/1QM;EACE,+BAAA;EACA,kCAAA;AvDk2QR;;AuDj3QI;EACE,0BAAA;AvDo3QN;;AuDj3QM;EACE,8BAAA;AvDo3QR;;AuDr3QM;EACE,gCAAA;AvDw3QR;;AuDz3QM;EACE,iCAAA;AvD43QR;;AuD73QM;EACE,+BAAA;AvDg4QR;;AuD73QM;EACE,+BAAA;EACA,gCAAA;AvDg4QR;;AuD73QM;EACE,8BAAA;EACA,iCAAA;AvDg4QR;;AuD/4QI;EACE,2BAAA;AvDk5QN;;AuD/4QM;EACE,+BAAA;AvDk5QR;;AuDn5QM;EACE,iCAAA;AvDs5QR;;AuDv5QM;EACE,kCAAA;AvD05QR;;AuD35QM;EACE,gCAAA;AvD85QR;;AuD35QM;EACE,gCAAA;EACA,iCAAA;AvD85QR;;AuD35QM;EACE,+BAAA;EACA,kCAAA;AvD85QR;;AuD76QI;EACE,wBAAA;AvDg7QN;;AuD76QM;EACE,4BAAA;AvDg7QR;;AuDj7QM;EACE,8BAAA;AvDo7QR;;AuDr7QM;EACE,+BAAA;AvDw7QR;;AuDz7QM;EACE,6BAAA;AvD47QR;;AuDz7QM;EACE,6BAAA;EACA,8BAAA;AvD47QR;;AuDz7QM;EACE,4BAAA;EACA,+BAAA;AvD47QR;;AuD38QI;EACE,0BAAA;AvD88QN;;AuD38QM;EACE,8BAAA;AvD88QR;;AuD/8QM;EACE,gCAAA;AvDk9QR;;AuDn9QM;EACE,iCAAA;AvDs9QR;;AuDv9QM;EACE,+BAAA;AvD09QR;;AuDv9QM;EACE,+BAAA;EACA,gCAAA;AvD09QR;;AuDv9QM;EACE,8BAAA;EACA,iCAAA;AvD09QR;;AuDz+QI;EACE,wBAAA;AvD4+QN;;AuDz+QM;EACE,4BAAA;AvD4+QR;;AuD7+QM;EACE,8BAAA;AvDg/QR;;AuDj/QM;EACE,+BAAA;AvDo/QR;;AuDr/QM;EACE,6BAAA;AvDw/QR;;AuDr/QM;EACE,6BAAA;EACA,8BAAA;AvDw/QR;;AuDr/QM;EACE,4BAAA;EACA,+BAAA;AvDw/QR;;AuDvgRI;EACE,wBAAA;AvD0gRN;;AuDvgRM;EACE,4BAAA;AvD0gRR;;AuD3gRM;EACE,8BAAA;AvD8gRR;;AuD/gRM;EACE,+BAAA;AvDkhRR;;AuDnhRM;EACE,6BAAA;AvDshRR;;AuDnhRM;EACE,6BAAA;EACA,8BAAA;AvDshRR;;AuDnhRM;EACE,4BAAA;EACA,+BAAA;AvDshRR;;AwD/iRI;EACE,0BAAA;AxDkjRN;;AwDnjRI;EACE,4BAAA;AxDsjRN;;AwDvjRI;EACE,0BAAA;AxD0jRN;;AwD3jRI;EACE,4BAAA;AxD8jRN;;AwD/jRI;EACE,6BAAA;AxDkkRN;;AwDnkRI;EACE,0BAAA;AxDskRN;;AwDvkRI;EACE,6BAAA;AxD0kRN;;AM1+QE;EkDjGE;IACE,0BAAA;ExD+kRJ;EwDhlRE;IACE,4BAAA;ExDklRJ;EwDnlRE;IACE,0BAAA;ExDqlRJ;EwDtlRE;IACE,4BAAA;ExDwlRJ;EwDzlRE;IACE,6BAAA;ExD2lRJ;EwD5lRE;IACE,0BAAA;ExD8lRJ;EwD/lRE;IACE,6BAAA;ExDimRJ;AACF;AM9/QE;EkDrGE;IACE,0BAAA;ExDsmRJ;EwDvmRE;IACE,4BAAA;ExDymRJ;EwD1mRE;IACE,0BAAA;ExD4mRJ;EwD7mRE;IACE,4BAAA;ExD+mRJ;EwDhnRE;IACE,6BAAA;ExDknRJ;EwDnnRE;IACE,0BAAA;ExDqnRJ;EwDtnRE;IACE,6BAAA;ExDwnRJ;AACF;AM7gRE;EkD7GE;IACE,0BAAA;ExD6nRJ;EwD9nRE;IACE,4BAAA;ExDgoRJ;EwDjoRE;IACE,0BAAA;ExDmoRJ;EwDpoRE;IACE,4BAAA;ExDsoRJ;EwDvoRE;IACE,6BAAA;ExDyoRJ;EwD1oRE;IACE,0BAAA;ExD4oRJ;EwD7oRE;IACE,6BAAA;ExD+oRJ;AACF;AMhiRE;EkDjHE;IACE,0BAAA;ExDopRJ;EwDrpRE;IACE,4BAAA;ExDupRJ;EwDxpRE;IACE,0BAAA;ExD0pRJ;EwD3pRE;IACE,4BAAA;ExD6pRJ;EwD9pRE;IACE,6BAAA;ExDgqRJ;EwDjqRE;IACE,0BAAA;ExDmqRJ;EwDpqRE;IACE,6BAAA;ExDsqRJ;AACF;AMxiRI;EkDhIA;IACE,0BAAA;ExD2qRJ;EwD5qRE;IACE,4BAAA;ExD8qRJ;EwD/qRE;IACE,0BAAA;ExDirRJ;EwDlrRE;IACE,4BAAA;ExDorRJ;EwDrrRE;IACE,6BAAA;ExDurRJ;EwDxrRE;IACE,0BAAA;ExD0rRJ;EwD3rRE;IACE,6BAAA;ExD6rRJ;AACF;AMhjRI;EkD/IA;IACE,0BAAA;ExDksRJ;EwDnsRE;IACE,4BAAA;ExDqsRJ;EwDtsRE;IACE,0BAAA;ExDwsRJ;EwDzsRE;IACE,4BAAA;ExD2sRJ;EwD5sRE;IACE,6BAAA;ExD8sRJ;EwD/sRE;IACE,0BAAA;ExDitRJ;EwDltRE;IACE,6BAAA;ExDotRJ;AACF;AwD5rRE;EACE,6BAAA;AxD8rRJ;;AwD/rRE;EACE,8BAAA;AxDksRJ;;AwDnsRE;EACE,2BAAA;AxDssRJ;;AwDvsRE;EACE,4BAAA;AxD0sRJ;;AMpoRE;EkDlEE;IACE,6BAAA;ExD0sRJ;AACF;AMtoRE;EkDnEE;IACE,6BAAA;ExD4sRJ;AACF;AMvoRE;EkDpEE;IACE,6BAAA;ExD8sRJ;AACF;AMxoRE;EkDrEE;IACE,6BAAA;ExDgtRJ;AACF;AMzoRE;EkDtEE;IACE,6BAAA;ExDktRJ;AACF;AMzoRI;EkDxEA;IACE,6BAAA;ExDotRJ;AACF;AMpoRI;EkD/EA;IACE,6BAAA;ExDstRJ;AACF;AMpoRI;EkDjFA;IACE,6BAAA;ExDwtRJ;AACF;AM/nRI;EkDxFA;IACE,6BAAA;ExD0tRJ;AACF;AMlrRE;EkDlEE;IACE,8BAAA;ExDuvRJ;AACF;AMnrRE;EkDnEE;IACE,8BAAA;ExDyvRJ;AACF;AMprRE;EkDpEE;IACE,8BAAA;ExD2vRJ;AACF;AMrrRE;EkDrEE;IACE,8BAAA;ExD6vRJ;AACF;AMtrRE;EkDtEE;IACE,8BAAA;ExD+vRJ;AACF;AMtrRI;EkDxEA;IACE,8BAAA;ExDiwRJ;AACF;AMjrRI;EkD/EA;IACE,8BAAA;ExDmwRJ;AACF;AMjrRI;EkDjFA;IACE,8BAAA;ExDqwRJ;AACF;AM5qRI;EkDxFA;IACE,8BAAA;ExDuwRJ;AACF;AM/tRE;EkDlEE;IACE,2BAAA;ExDoyRJ;AACF;AMhuRE;EkDnEE;IACE,2BAAA;ExDsyRJ;AACF;AMjuRE;EkDpEE;IACE,2BAAA;ExDwyRJ;AACF;AMluRE;EkDrEE;IACE,2BAAA;ExD0yRJ;AACF;AMnuRE;EkDtEE;IACE,2BAAA;ExD4yRJ;AACF;AMnuRI;EkDxEA;IACE,2BAAA;ExD8yRJ;AACF;AM9tRI;EkD/EA;IACE,2BAAA;ExDgzRJ;AACF;AM9tRI;EkDjFA;IACE,2BAAA;ExDkzRJ;AACF;AMztRI;EkDxFA;IACE,2BAAA;ExDozRJ;AACF;AM5wRE;EkDlEE;IACE,4BAAA;ExDi1RJ;AACF;AM7wRE;EkDnEE;IACE,4BAAA;ExDm1RJ;AACF;AM9wRE;EkDpEE;IACE,4BAAA;ExDq1RJ;AACF;AM/wRE;EkDrEE;IACE,4BAAA;ExDu1RJ;AACF;AMhxRE;EkDtEE;IACE,4BAAA;ExDy1RJ;AACF;AMhxRI;EkDxEA;IACE,4BAAA;ExD21RJ;AACF;AM3wRI;EkD/EA;IACE,4BAAA;ExD61RJ;AACF;AM3wRI;EkDjFA;IACE,4BAAA;ExD+1RJ;AACF;AMtwRI;EkDxFA;IACE,4BAAA;ExDi2RJ;AACF;AwDh2RA;EACE,qCAAA;AxDk2RF;;AwDh2RA;EACE,oCAAA;AxDm2RF;;AwDj2RA;EACE,oCAAA;AxDo2RF;;AwDl2RA;EACE,6BAAA;AxDq2RF;;AwDn2RA;EACE,qCAAA;AxDs2RF;;AwDp2RA;EACE,2BAAA;AxDu2RF;;AwDt2RA;EACE,2BAAA;AxDy2RF;;AwDx2RA;EACE,2BAAA;AxD22RF;;AwD12RA;EACE,2BAAA;AxD62RF;;AwD52RA;EACE,2BAAA;AxD+2RF;;AwD72RA;EACE,+LAAA;AxDg3RF;;AwD92RA;EACE,+LAAA;AxDi3RF;;AwD/2RA;EACE,+LAAA;AxDk3RF;;AwDh3RA;EACE,iCAAA;AxDm3RF;;AwDj3RA;EACE,iCAAA;AxDo3RF;;AyDr9RE;EACE,yBAAA;AzDw9RJ;;AMx3RE;EmD9FE;IACE,yBAAA;EzD09RJ;AACF;AM13RE;EmD/FE;IACE,yBAAA;EzD49RJ;AACF;AM33RE;EmDhGE;IACE,yBAAA;EzD89RJ;AACF;AM53RE;EmDjGE;IACE,yBAAA;EzDg+RJ;AACF;AM73RE;EmDlGE;IACE,yBAAA;EzDk+RJ;AACF;AM73RI;EmDpGA;IACE,yBAAA;EzDo+RJ;AACF;AMx3RI;EmD3GA;IACE,yBAAA;EzDs+RJ;AACF;AMx3RI;EmD7GA;IACE,yBAAA;EzDw+RJ;AACF;AMn3RI;EmDpHA;IACE,yBAAA;EzD0+RJ;AACF;AyDvgSE;EACE,wBAAA;AzDygSJ;;AMz6RE;EmD9FE;IACE,wBAAA;EzD2gSJ;AACF;AM36RE;EmD/FE;IACE,wBAAA;EzD6gSJ;AACF;AM56RE;EmDhGE;IACE,wBAAA;EzD+gSJ;AACF;AM76RE;EmDjGE;IACE,wBAAA;EzDihSJ;AACF;AM96RE;EmDlGE;IACE,wBAAA;EzDmhSJ;AACF;AM96RI;EmDpGA;IACE,wBAAA;EzDqhSJ;AACF;AMz6RI;EmD3GA;IACE,wBAAA;EzDuhSJ;AACF;AMz6RI;EmD7GA;IACE,wBAAA;EzDyhSJ;AACF;AMp6RI;EmDpHA;IACE,wBAAA;EzD2hSJ;AACF;AyDxjSE;EACE,0BAAA;AzD0jSJ;;AM19RE;EmD9FE;IACE,0BAAA;EzD4jSJ;AACF;AM59RE;EmD/FE;IACE,0BAAA;EzD8jSJ;AACF;AM79RE;EmDhGE;IACE,0BAAA;EzDgkSJ;AACF;AM99RE;EmDjGE;IACE,0BAAA;EzDkkSJ;AACF;AM/9RE;EmDlGE;IACE,0BAAA;EzDokSJ;AACF;AM/9RI;EmDpGA;IACE,0BAAA;EzDskSJ;AACF;AM19RI;EmD3GA;IACE,0BAAA;EzDwkSJ;AACF;AM19RI;EmD7GA;IACE,0BAAA;EzD0kSJ;AACF;AMr9RI;EmDpHA;IACE,0BAAA;EzD4kSJ;AACF;AyDzmSE;EACE,gCAAA;AzD2mSJ;;AM3gSE;EmD9FE;IACE,gCAAA;EzD6mSJ;AACF;AM7gSE;EmD/FE;IACE,gCAAA;EzD+mSJ;AACF;AM9gSE;EmDhGE;IACE,gCAAA;EzDinSJ;AACF;AM/gSE;EmDjGE;IACE,gCAAA;EzDmnSJ;AACF;AMhhSE;EmDlGE;IACE,gCAAA;EzDqnSJ;AACF;AMhhSI;EmDpGA;IACE,gCAAA;EzDunSJ;AACF;AM3gSI;EmD3GA;IACE,gCAAA;EzDynSJ;AACF;AM3gSI;EmD7GA;IACE,gCAAA;EzD2nSJ;AACF;AMtgSI;EmDpHA;IACE,gCAAA;EzD6nSJ;AACF;AyD1pSE;EACE,+BAAA;AzD4pSJ;;AM5jSE;EmD9FE;IACE,+BAAA;EzD8pSJ;AACF;AM9jSE;EmD/FE;IACE,+BAAA;EzDgqSJ;AACF;AM/jSE;EmDhGE;IACE,+BAAA;EzDkqSJ;AACF;AMhkSE;EmDjGE;IACE,+BAAA;EzDoqSJ;AACF;AMjkSE;EmDlGE;IACE,+BAAA;EzDsqSJ;AACF;AMjkSI;EmDpGA;IACE,+BAAA;EzDwqSJ;AACF;AM5jSI;EmD3GA;IACE,+BAAA;EzD0qSJ;AACF;AM5jSI;EmD7GA;IACE,+BAAA;EzD4qSJ;AACF;AMvjSI;EmDpHA;IACE,+BAAA;EzD8qSJ;AACF;AyD7qSA;EACE,wBAAA;AzD+qSF;;AyD7qSA;EACE,uBAAA;EACA,iCAAA;EACA,yBAAA;EACA,2BAAA;EACA,qBAAA;EACA,6BAAA;EACA,8BAAA;EACA,wBAAA;AzDgrSF;;AMxnSE;EmDrDA;IACE,wBAAA;EzDirSF;AACF;AM1nSE;EmDrDA;IACE,wBAAA;EzDkrSF;AACF;AM3nSE;EmDrDA;IACE,wBAAA;EzDmrSF;AACF;AM5nSE;EmDrDA;IACE,wBAAA;EzDorSF;AACF;AM7nSE;EmDrDA;IACE,wBAAA;EzDqrSF;AACF;AM7nSI;EmDtDF;IACE,wBAAA;EzDsrSF;AACF;AMxnSI;EmD5DF;IACE,wBAAA;EzDurSF;AACF;AMxnSI;EmD7DF;IACE,wBAAA;EzDwrSF;AACF;AMnnSI;EmDnEF;IACE,wBAAA;EzDyrSF;AACF;AyDxrSA;EACE,6BAAA;AzD0rSF;;AMzqSE;EmDdA;IACE,6BAAA;EzD2rSF;AACF;AM3qSE;EmDdA;IACE,6BAAA;EzD4rSF;AACF;AM5qSE;EmDdA;IACE,6BAAA;EzD6rSF;AACF;AM7qSE;EmDdA;IACE,6BAAA;EzD8rSF;AACF;AM9qSE;EmDdA;IACE,6BAAA;EzD+rSF;AACF;AM9qSI;EmDfF;IACE,6BAAA;EzDgsSF;AACF;AMzqSI;EmDrBF;IACE,6BAAA;EzDisSF;AACF;AMzqSI;EmDtBF;IACE,6BAAA;EzDksSF;AACF;AMpqSI;EmD5BF;IACE,6BAAA;EzDmsSF;AACF;A0D7zSA,iBAAA;ACWA;EACE,oBAAA;EACA,aAAA;EACA,sBAAA;EACA,8BAAA;A3DqzSF;A2DpzSE;EACE,gBAAA;A3DszSJ;A2DpzSI;EACE,mBAAA;A3DszSN;A2DjzSI;EACE,qCAHM;EAIN,wBAHa;A3DszSnB;A2DlzSM;;EAEE,cAAA;A3DozSR;A2DnzSM;EACE,wBARW;A3D6zSnB;A2DpzSM;EACE,4BAAA;A3DszSR;A2DrzSQ;;EAEE,wBAbS;A3Do0SnB;AM1uSE;EqD5EI;IAEI,qCAjBE;E3Dy0SV;AACF;A2DxzSM;;EAEE,4BAAA;A3D0zSR;A2DvzSQ;;;EAEE,yBAAA;EACA,wBAzBS;A3Dm1SnB;A2DxzSQ;EACE,wBA5BS;EA6BT,YAAA;A3D0zSV;A2DzzSU;EACE,UAAA;A3D2zSZ;A2DzzSU;EACE,qCAAA;EACA,UAAA;A3D2zSZ;A2DxzSU;EACE,wBAvCO;A3Di2SnB;A2DzzSY;EACE,uCAAA;A3D2zSd;A2DzzSY;EAEE,mCA7CK;EA8CL,+BA9CK;EA+CL,0BAhDF;A3D02SZ;A2DvzSQ;EAGE,0FAAA;A3DuzSV;AM9xSE;EqDvBU;IACE,0FAAA;E3DwzSZ;AACF;A2Dh3SI;EACE,mCAHM;EAIN,0BAHa;A3Dq3SnB;A2Dj3SM;;EAEE,cAAA;A3Dm3SR;A2Dl3SM;EACE,0BARW;A3D43SnB;A2Dn3SM;EACE,+BAAA;A3Dq3SR;A2Dp3SQ;;EAEE,0BAbS;A3Dm4SnB;AMzySE;EqD5EI;IAEI,mCAjBE;E3Dw4SV;AACF;A2Dv3SM;;EAEE,+BAAA;A3Dy3SR;A2Dt3SQ;;;EAEE,uBAAA;EACA,0BAzBS;A3Dk5SnB;A2Dv3SQ;EACE,0BA5BS;EA6BT,YAAA;A3Dy3SV;A2Dx3SU;EACE,UAAA;A3D03SZ;A2Dx3SU;EACE,mCAAA;EACA,UAAA;A3D03SZ;A2Dv3SU;EACE,0BAvCO;A3Dg6SnB;A2Dx3SY;EACE,uCAAA;A3D03Sd;A2Dx3SY;EAEE,qCA7CK;EA8CL,iCA9CK;EA+CL,wBAhDF;A3Dy6SZ;A2Dt3SQ;EAGE,wFAAA;A3Ds3SV;AM71SE;EqDvBU;IACE,wFAAA;E3Du3SZ;AACF;A2D/6SI;EACE,oCAHM;EAIN,yBAHa;A3Do7SnB;A2Dh7SM;;EAEE,cAAA;A3Dk7SR;A2Dj7SM;EACE,yBARW;A3D27SnB;A2Dl7SM;EACE,yBAAA;A3Do7SR;A2Dn7SQ;;EAEE,yBAbS;A3Dk8SnB;AMx2SE;EqD5EI;IAEI,oCAjBE;E3Du8SV;AACF;A2Dt7SM;;EAEE,yBAAA;A3Dw7SR;A2Dr7SQ;;;EAEE,yBAAA;EACA,yBAzBS;A3Di9SnB;A2Dt7SQ;EACE,yBA5BS;EA6BT,YAAA;A3Dw7SV;A2Dv7SU;EACE,UAAA;A3Dy7SZ;A2Dv7SU;EACE,oCAAA;EACA,UAAA;A3Dy7SZ;A2Dt7SU;EACE,yBAvCO;A3D+9SnB;A2Dv7SY;EACE,uCAAA;A3Dy7Sd;A2Dv7SY;EAEE,oCA7CK;EA8CL,gCA9CK;EA+CL,yBAhDF;A3Dw+SZ;A2Dr7SQ;EAGE,yFAAA;A3Dq7SV;AM55SE;EqDvBU;IACE,yFAAA;E3Ds7SZ;AACF;A2D9+SI;EACE,oCAHM;EAIN,WAHa;A3Dm/SnB;A2D/+SM;;EAEE,cAAA;A3Di/SR;A2Dh/SM;EACE,WARW;A3D0/SnB;A2Dj/SM;EACE,+BAAA;A3Dm/SR;A2Dl/SQ;;EAEE,WAbS;A3DigTnB;AMv6SE;EqD5EI;IAEI,oCAjBE;E3DsgTV;AACF;A2Dr/SM;;EAEE,+BAAA;A3Du/SR;A2Dp/SQ;;;EAEE,yBAAA;EACA,WAzBS;A3DghTnB;A2Dr/SQ;EACE,WA5BS;EA6BT,YAAA;A3Du/SV;A2Dt/SU;EACE,UAAA;A3Dw/SZ;A2Dt/SU;EACE,oCAAA;EACA,UAAA;A3Dw/SZ;A2Dr/SU;EACE,WAvCO;A3D8hTnB;A2Dt/SY;EACE,uCAAA;A3Dw/Sd;A2Dt/SY;EAEE,sBA7CK;EA8CL,kBA9CK;EA+CL,yBAhDF;A3DuiTZ;A2Dp/SQ;EAGE,2FAAA;A3Do/SV;AM39SE;EqDvBU;IACE,2FAAA;E3Dq/SZ;AACF;A2D7iTI;EACE,wCAHM;EAIN,WAHa;A3DkjTnB;A2D9iTM;;EAEE,cAAA;A3DgjTR;A2D/iTM;EACE,WARW;A3DyjTnB;A2DhjTM;EACE,+BAAA;A3DkjTR;A2DjjTQ;;EAEE,WAbS;A3DgkTnB;AMt+SE;EqD5EI;IAEI,wCAjBE;E3DqkTV;AACF;A2DpjTM;;EAEE,+BAAA;A3DsjTR;A2DnjTQ;;;EAEE,yBAAA;EACA,WAzBS;A3D+kTnB;A2DpjTQ;EACE,WA5BS;EA6BT,YAAA;A3DsjTV;A2DrjTU;EACE,UAAA;A3DujTZ;A2DrjTU;EACE,wCAAA;EACA,UAAA;A3DujTZ;A2DpjTU;EACE,WAvCO;A3D6lTnB;A2DrjTY;EACE,uCAAA;A3DujTd;A2DrjTY;EAEE,sBA7CK;EA8CL,kBA9CK;EA+CL,6BAhDF;A3DsmTZ;A2DnjTQ;EAGE,+FAAA;A3DmjTV;AM1hTE;EqDvBU;IACE,+FAAA;E3DojTZ;AACF;A2D5mTI;EACE,uCAHM;EAIN,WAHa;A3DinTnB;A2D7mTM;;EAEE,cAAA;A3D+mTR;A2D9mTM;EACE,WARW;A3DwnTnB;A2D/mTM;EACE,+BAAA;A3DinTR;A2DhnTQ;;EAEE,WAbS;A3D+nTnB;AMriTE;EqD5EI;IAEI,uCAjBE;E3DooTV;AACF;A2DnnTM;;EAEE,+BAAA;A3DqnTR;A2DlnTQ;;;EAEE,yBAAA;EACA,WAzBS;A3D8oTnB;A2DnnTQ;EACE,WA5BS;EA6BT,YAAA;A3DqnTV;A2DpnTU;EACE,UAAA;A3DsnTZ;A2DpnTU;EACE,uCAAA;EACA,UAAA;A3DsnTZ;A2DnnTU;EACE,WAvCO;A3D4pTnB;A2DpnTY;EACE,uCAAA;A3DsnTd;A2DpnTY;EAEE,sBA7CK;EA8CL,kBA9CK;EA+CL,4BAhDF;A3DqqTZ;A2DlnTQ;EAGE,8FAAA;A3DknTV;AMzlTE;EqDvBU;IACE,8FAAA;E3DmnTZ;AACF;A2D3qTI;EACE,uCAHM;EAIN,WAHa;A3DgrTnB;A2D5qTM;;EAEE,cAAA;A3D8qTR;A2D7qTM;EACE,WARW;A3DurTnB;A2D9qTM;EACE,+BAAA;A3DgrTR;A2D/qTQ;;EAEE,WAbS;A3D8rTnB;AMpmTE;EqD5EI;IAEI,uCAjBE;E3DmsTV;AACF;A2DlrTM;;EAEE,+BAAA;A3DorTR;A2DjrTQ;;;EAEE,yBAAA;EACA,WAzBS;A3D6sTnB;A2DlrTQ;EACE,WA5BS;EA6BT,YAAA;A3DorTV;A2DnrTU;EACE,UAAA;A3DqrTZ;A2DnrTU;EACE,uCAAA;EACA,UAAA;A3DqrTZ;A2DlrTU;EACE,WAvCO;A3D2tTnB;A2DnrTY;EACE,uCAAA;A3DqrTd;A2DnrTY;EAEE,sBA7CK;EA8CL,kBA9CK;EA+CL,4BAhDF;A3DouTZ;A2DjrTQ;EAGE,8FAAA;A3DirTV;AMxpTE;EqDvBU;IACE,8FAAA;E3DkrTZ;AACF;A2D1uTI;EACE,uCAHM;EAIN,WAHa;A3D+uTnB;A2D3uTM;;EAEE,cAAA;A3D6uTR;A2D5uTM;EACE,WARW;A3DsvTnB;A2D7uTM;EACE,+BAAA;A3D+uTR;A2D9uTQ;;EAEE,WAbS;A3D6vTnB;AMnqTE;EqD5EI;IAEI,uCAjBE;E3DkwTV;AACF;A2DjvTM;;EAEE,+BAAA;A3DmvTR;A2DhvTQ;;;EAEE,yBAAA;EACA,WAzBS;A3D4wTnB;A2DjvTQ;EACE,WA5BS;EA6BT,YAAA;A3DmvTV;A2DlvTU;EACE,UAAA;A3DovTZ;A2DlvTU;EACE,uCAAA;EACA,UAAA;A3DovTZ;A2DjvTU;EACE,WAvCO;A3D0xTnB;A2DlvTY;EACE,uCAAA;A3DovTd;A2DlvTY;EAEE,sBA7CK;EA8CL,kBA9CK;EA+CL,4BAhDF;A3DmyTZ;A2DhvTQ;EAGE,8FAAA;A3DgvTV;AMvtTE;EqDvBU;IACE,8FAAA;E3DivTZ;AACF;A2DzyTI;EACE,uCAHM;EAIN,yBAHa;A3D8yTnB;A2D1yTM;;EAEE,cAAA;A3D4yTR;A2D3yTM;EACE,yBARW;A3DqzTnB;A2D5yTM;EACE,yBAAA;A3D8yTR;A2D7yTQ;;EAEE,yBAbS;A3D4zTnB;AMluTE;EqD5EI;IAEI,uCAjBE;E3Di0TV;AACF;A2DhzTM;;EAEE,yBAAA;A3DkzTR;A2D/yTQ;;;EAEE,yBAAA;EACA,yBAzBS;A3D20TnB;A2DhzTQ;EACE,yBA5BS;EA6BT,YAAA;A3DkzTV;A2DjzTU;EACE,UAAA;A3DmzTZ;A2DjzTU;EACE,uCAAA;EACA,UAAA;A3DmzTZ;A2DhzTU;EACE,yBAvCO;A3Dy1TnB;A2DjzTY;EACE,uCAAA;A3DmzTd;A2DjzTY;EAEE,oCA7CK;EA8CL,gCA9CK;EA+CL,4BAhDF;A3Dk2TZ;A2D/yTQ;EAGE,8FAAA;A3D+yTV;AMtxTE;EqDvBU;IACE,8FAAA;E3DgzTZ;AACF;A2Dx2TI;EACE,uCAHM;EAIN,WAHa;A3D62TnB;A2Dz2TM;;EAEE,cAAA;A3D22TR;A2D12TM;EACE,WARW;A3Do3TnB;A2D32TM;EACE,+BAAA;A3D62TR;A2D52TQ;;EAEE,WAbS;A3D23TnB;AMjyTE;EqD5EI;IAEI,uCAjBE;E3Dg4TV;AACF;A2D/2TM;;EAEE,+BAAA;A3Di3TR;A2D92TQ;;;EAEE,yBAAA;EACA,WAzBS;A3D04TnB;A2D/2TQ;EACE,WA5BS;EA6BT,YAAA;A3Di3TV;A2Dh3TU;EACE,UAAA;A3Dk3TZ;A2Dh3TU;EACE,uCAAA;EACA,UAAA;A3Dk3TZ;A2D/2TU;EACE,WAvCO;A3Dw5TnB;A2Dh3TY;EACE,uCAAA;A3Dk3Td;A2Dh3TY;EAEE,sBA7CK;EA8CL,kBA9CK;EA+CL,4BAhDF;A3Di6TZ;A2D92TQ;EAGE,8FAAA;A3D82TV;AMr1TE;EqDvBU;IACE,8FAAA;E3D+2TZ;AACF;A2D72TI;EACE,eAhFoB;A3D+7T1B;AMz1TE;EqDnBI;IACE,oBAnFmB;E3Dk8TzB;AACF;AM91TE;EqDfI;IACE,mBAtFkB;E3Ds8TxB;AACF;A2D72TI;EACE,mBAAA;EACA,aAAA;A3D+2TN;A2D92TM;EACE,YAAA;EACA,cAAA;A3Dg3TR;A2D/2TE;EACE,gBAAA;A3Di3TJ;A2Dh3TE;EACE,iBAAA;A3Dk3TJ;;A2D92TA;EAEE,gBAAA;A3Dg3TF;A2D/2TE;EACE,SAAA;EACA,gBAAA;EACA,eAAA;EACA,kBAAA;EACA,QAAA;EACA,qCAAA;A3Di3TJ;A2D/2TE;EACE,YAAA;A3Di3TJ;AMp4TE;EqDOF;IAeI,aAAA;E3Dk3TF;AACF;;A2Dj3TA;EACE,kBAAA;A3Do3TF;AM74TE;EqD4BE;IACE,aAAA;E3Do3TJ;E2Dn3TI;IACE,sBAAA;E3Dq3TN;AACF;AMj5TE;EqDoBF;IASI,aAAA;IACA,uBAAA;E3Dw3TF;E2Dv3TE;IrD2CA,oBqD1C0B;E3Dy3T5B;AACF;;A2Dt3TA;;EAEE,YAAA;EACA,cAAA;A3Dy3TF;;A2Dv3TA;EACE,YAAA;EACA,cAAA;EACA,oBApJkB;A3D8gUpB;AMt6TE;EqDyCF;IAKI,kBArJuB;E3DihUzB;AACF;;A4D9gUA;EACE,oBANgB;A5DuhUlB;AMn6TE;EsD/GF;IAII,kBARsB;E5D0hUxB;E4DhhUE;IACE,oBAVmB;E5D4hUvB;E4DjhUE;IACE,mBAXkB;E5D8hUtB;AACF;;A6D9hUA;EACE,oCxDOa;EwDNb,yBAJe;A7DqiUjB;;A8DtiUA;EACI,gBAAA;A9DyiUJ;;A8DviUA;EACI,WAAA;A9D0iUJ;;A8DxiUA;EAGI,aAAA;EACA,mBAHU;EAIV,cAJU;EAKV,sBALU;EAMV,sBANU;OAMV,iBANU;EAOV,gDAAA;EACA,iBAAA;A9DyiUJ;AMj9TE;EwDjGF;IAYQ,gDAAA;E9D0iUN;AACF;AM18TE;EwD7GF;IAeQ,gDAAA;E9D4iUN;AACF;AMh8TI;EwD5HJ;IAkBQ,gDAAA;E9D8iUN;AACF;AMt7TI;EwD3IJ;IAqBQ,gDAAA;E9DgjUN;AACF;;A8D/iUA;EACI,aAAA;EACA,sBAAA;A9DkjUJ;;A8DhjUA;EACI,gBAAA;A9DmjUJ;A8DjjUI;EACI,qBAAA;A9DmjUR;;A8DhjUA;EACI,WAAA;A9DmjUJ;;A8DjjUA;EACI,gBAAA;A9DojUJ","file":"style.css"} \ No newline at end of file diff --git a/ucast/static/bulma/css/style.min.css b/ucast/static/bulma/css/style.min.css deleted file mode 100644 index 80c2b3f..0000000 --- a/ucast/static/bulma/css/style.min.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";/*! bulma.io v0.9.4 | MIT License | github.com/jgthms/bulma */.button,.file-cta,.file-name,.input,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.select select,.textarea{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(.5em - 1px);padding-left:calc(.75em - 1px);padding-right:calc(.75em - 1px);padding-top:calc(.5em - 1px);position:relative;vertical-align:top}.button:active,.button:focus,.file-cta:active,.file-cta:focus,.file-name:active,.file-name:focus,.input:active,.input:focus,.is-active.button,.is-active.file-cta,.is-active.file-name,.is-active.input,.is-active.pagination-ellipsis,.is-active.pagination-link,.is-active.pagination-next,.is-active.pagination-previous,.is-active.textarea,.is-focused.button,.is-focused.file-cta,.is-focused.file-name,.is-focused.input,.is-focused.pagination-ellipsis,.is-focused.pagination-link,.is-focused.pagination-next,.is-focused.pagination-previous,.is-focused.textarea,.pagination-ellipsis:active,.pagination-ellipsis:focus,.pagination-link:active,.pagination-link:focus,.pagination-next:active,.pagination-next:focus,.pagination-previous:active,.pagination-previous:focus,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{outline:0}.select fieldset[disabled] select,.select select[disabled],[disabled].button,[disabled].file-cta,[disabled].file-name,[disabled].input,[disabled].pagination-ellipsis,[disabled].pagination-link,[disabled].pagination-next,[disabled].pagination-previous,[disabled].textarea,fieldset[disabled] .button,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .input,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-previous,fieldset[disabled] .select select,fieldset[disabled] .textarea{cursor:not-allowed}.breadcrumb,.button,.file,.is-unselectable,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid transparent;border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:.625em;margin-top:-.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:.625em}.block:not(:last-child),.box:not(:last-child),.breadcrumb:not(:last-child),.content:not(:last-child),.level:not(:last-child),.message:not(:last-child),.notification:not(:last-child),.pagination:not(:last-child),.progress:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.tabs:not(:last-child),.title:not(:last-child){margin-bottom:1.5rem}.delete,.modal-close{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:0;position:relative;vertical-align:top;width:20px}.delete::after,.delete::before,.modal-close::after,.modal-close::before{background-color:hsl(0deg,0%,100%);content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.delete::before,.modal-close::before{height:2px;width:50%}.delete::after,.modal-close::after{height:50%;width:2px}.delete:focus,.delete:hover,.modal-close:focus,.modal-close:hover{background-color:rgba(10,10,10,.3)}.delete:active,.modal-close:active{background-color:rgba(10,10,10,.4)}.is-small.delete,.is-small.modal-close{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.delete,.is-medium.modal-close{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.delete,.is-large.modal-close{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.button.is-loading::after,.control.is-loading::after,.loader,.select.is-loading::after{-webkit-animation:spinAround .5s infinite linear;animation:spinAround .5s infinite linear;border:2px solid hsl(0deg,0%,86%);border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img,.is-overlay,.modal,.modal-background{bottom:0;left:0;position:absolute;right:0;top:0}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:0 0;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */blockquote,body,dd,dl,dt,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,html,iframe,legend,li,ol,p,pre,textarea,ul{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,::after,::before{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:hsl(0deg,0%,100%);font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:hidden;overflow-y:scroll;text-rendering:optimizeLegibility;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:monospace}body{color:hsl(0deg,0%,29%);font-size:1em;font-weight:400;line-height:1.5}a{color:hsl(229deg,53%,53%);cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:hsl(0deg,0%,21%)}code{background-color:hsl(0deg,0%,96%);color:#da1039;font-size:.875em;font-weight:400;padding:.25em .5em .25em}hr{background-color:hsl(0deg,0%,96%);border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type=checkbox],input[type=radio]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:hsl(0deg,0%,21%);font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:hsl(0deg,0%,96%);color:hsl(0deg,0%,29%);font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:hsl(0deg,0%,21%)}@-webkit-keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}.box{background-color:hsl(0deg,0%,100%);border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:hsl(0deg,0%,29%);display:block;padding:1.25rem}a.box:focus,a.box:hover{box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px hsl(229deg,53%,53%)}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2),0 0 0 1px hsl(229deg,53%,53%)}.button{background-color:hsl(0deg,0%,100%);border-color:hsl(0deg,0%,86%);border-width:1px;color:hsl(0deg,0%,21%);cursor:pointer;justify-content:center;padding-bottom:calc(.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-large,.button .icon.is-medium,.button .icon.is-small{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-.5em - 1px);margin-right:calc(-.5em - 1px)}.button.is-hovered,.button:hover{border-color:hsl(0deg,0%,71%);color:hsl(0deg,0%,21%)}.button.is-focused,.button:focus{border-color:hsl(229deg,53%,53%);color:hsl(0deg,0%,21%)}.button.is-focused:not(:active),.button:focus:not(:active){box-shadow:0 0 0 .125em rgba(72,95,199,.25)}.button.is-active,.button:active{border-color:hsl(0deg,0%,29%);color:hsl(0deg,0%,21%)}.button.is-text{background-color:transparent;border-color:transparent;color:hsl(0deg,0%,29%);text-decoration:underline}.button.is-text.is-focused,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text:hover{background-color:hsl(0deg,0%,96%);color:hsl(0deg,0%,21%)}.button.is-text.is-active,.button.is-text:active{background-color:#e8e8e8;color:hsl(0deg,0%,21%)}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:0 0;border-color:transparent;color:hsl(229deg,53%,53%);text-decoration:none}.button.is-ghost.is-hovered,.button.is-ghost:hover{color:hsl(229deg,53%,53%);text-decoration:underline}.button.is-white{background-color:hsl(0deg,0%,100%);border-color:transparent;color:hsl(0deg,0%,4%)}.button.is-white.is-hovered,.button.is-white:hover{background-color:#f9f9f9;border-color:transparent;color:hsl(0deg,0%,4%)}.button.is-white.is-focused,.button.is-white:focus{border-color:transparent;color:hsl(0deg,0%,4%)}.button.is-white.is-focused:not(:active),.button.is-white:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.button.is-white.is-active,.button.is-white:active{background-color:#f2f2f2;border-color:transparent;color:hsl(0deg,0%,4%)}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:hsl(0deg,0%,100%);border-color:hsl(0deg,0%,100%);box-shadow:none}.button.is-white.is-inverted{background-color:hsl(0deg,0%,4%);color:hsl(0deg,0%,100%)}.button.is-white.is-inverted.is-hovered,.button.is-white.is-inverted:hover{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:hsl(0deg,0%,4%);border-color:transparent;box-shadow:none;color:hsl(0deg,0%,100%)}.button.is-white.is-loading::after{border-color:transparent transparent hsl(0deg,0%,4%) hsl(0deg,0%,4%)!important}.button.is-white.is-outlined{background-color:transparent;border-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,100%)}.button.is-white.is-outlined.is-focused,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined:hover{background-color:hsl(0deg,0%,100%);border-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,4%)}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent hsl(0deg,0%,100%) hsl(0deg,0%,100%)!important}.button.is-white.is-outlined.is-loading.is-focused::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading:hover::after{border-color:transparent transparent hsl(0deg,0%,4%) hsl(0deg,0%,4%)!important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:hsl(0deg,0%,100%);box-shadow:none;color:hsl(0deg,0%,100%)}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:hsl(0deg,0%,4%);color:hsl(0deg,0%,4%)}.button.is-white.is-inverted.is-outlined.is-focused,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined:hover{background-color:hsl(0deg,0%,4%);color:hsl(0deg,0%,100%)}.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent hsl(0deg,0%,100%) hsl(0deg,0%,100%)!important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:hsl(0deg,0%,4%);box-shadow:none;color:hsl(0deg,0%,4%)}.button.is-black{background-color:hsl(0deg,0%,4%);border-color:transparent;color:hsl(0deg,0%,100%)}.button.is-black.is-hovered,.button.is-black:hover{background-color:#040404;border-color:transparent;color:hsl(0deg,0%,100%)}.button.is-black.is-focused,.button.is-black:focus{border-color:transparent;color:hsl(0deg,0%,100%)}.button.is-black.is-focused:not(:active),.button.is-black:focus:not(:active){box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.button.is-black.is-active,.button.is-black:active{background-color:#000;border-color:transparent;color:hsl(0deg,0%,100%)}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:hsl(0deg,0%,4%);border-color:hsl(0deg,0%,4%);box-shadow:none}.button.is-black.is-inverted{background-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,4%)}.button.is-black.is-inverted.is-hovered,.button.is-black.is-inverted:hover{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:hsl(0deg,0%,100%);border-color:transparent;box-shadow:none;color:hsl(0deg,0%,4%)}.button.is-black.is-loading::after{border-color:transparent transparent hsl(0deg,0%,100%) hsl(0deg,0%,100%)!important}.button.is-black.is-outlined{background-color:transparent;border-color:hsl(0deg,0%,4%);color:hsl(0deg,0%,4%)}.button.is-black.is-outlined.is-focused,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined:hover{background-color:hsl(0deg,0%,4%);border-color:hsl(0deg,0%,4%);color:hsl(0deg,0%,100%)}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent hsl(0deg,0%,4%) hsl(0deg,0%,4%)!important}.button.is-black.is-outlined.is-loading.is-focused::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading:hover::after{border-color:transparent transparent hsl(0deg,0%,100%) hsl(0deg,0%,100%)!important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:hsl(0deg,0%,4%);box-shadow:none;color:hsl(0deg,0%,4%)}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,100%)}.button.is-black.is-inverted.is-outlined.is-focused,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined:hover{background-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,4%)}.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent hsl(0deg,0%,4%) hsl(0deg,0%,4%)!important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:hsl(0deg,0%,100%);box-shadow:none;color:hsl(0deg,0%,100%)}.button.is-light{background-color:hsl(0deg,0%,96%);border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-hovered,.button.is-light:hover{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused,.button.is-light:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused:not(:active),.button.is-light:focus:not(:active){box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.button.is-light.is-active,.button.is-light:active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:hsl(0deg,0%,96%);border-color:hsl(0deg,0%,96%);box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,.7);color:hsl(0deg,0%,96%)}.button.is-light.is-inverted.is-hovered,.button.is-light.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:hsl(0deg,0%,96%)}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined{background-color:transparent;border-color:hsl(0deg,0%,96%);color:hsl(0deg,0%,96%)}.button.is-light.is-outlined.is-focused,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined:hover{background-color:hsl(0deg,0%,96%);border-color:hsl(0deg,0%,96%);color:rgba(0,0,0,.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent hsl(0deg,0%,96%) hsl(0deg,0%,96%)!important}.button.is-light.is-outlined.is-loading.is-focused::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:hsl(0deg,0%,96%);box-shadow:none;color:hsl(0deg,0%,96%)}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-light.is-inverted.is-outlined.is-focused,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:hsl(0deg,0%,96%)}.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent hsl(0deg,0%,96%) hsl(0deg,0%,96%)!important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-dark{background-color:hsl(0deg,0%,21%);border-color:transparent;color:#fff}.button.is-dark.is-hovered,.button.is-dark:hover{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark.is-focused,.button.is-dark:focus{border-color:transparent;color:#fff}.button.is-dark.is-focused:not(:active),.button.is-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.button.is-dark.is-active,.button.is-dark:active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],fieldset[disabled] .button.is-dark{background-color:hsl(0deg,0%,21%);border-color:hsl(0deg,0%,21%);box-shadow:none}.button.is-dark.is-inverted{background-color:#fff;color:hsl(0deg,0%,21%)}.button.is-dark.is-inverted.is-hovered,.button.is-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:hsl(0deg,0%,21%)}.button.is-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined{background-color:transparent;border-color:hsl(0deg,0%,21%);color:hsl(0deg,0%,21%)}.button.is-dark.is-outlined.is-focused,.button.is-dark.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.button.is-dark.is-outlined:hover{background-color:hsl(0deg,0%,21%);border-color:hsl(0deg,0%,21%);color:#fff}.button.is-dark.is-outlined.is-loading::after{border-color:transparent transparent hsl(0deg,0%,21%) hsl(0deg,0%,21%)!important}.button.is-dark.is-outlined.is-loading.is-focused::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined{background-color:transparent;border-color:hsl(0deg,0%,21%);box-shadow:none;color:hsl(0deg,0%,21%)}.button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined.is-focused,.button.is-dark.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined:hover{background-color:#fff;color:hsl(0deg,0%,21%)}.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent hsl(0deg,0%,21%) hsl(0deg,0%,21%)!important}.button.is-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary{background-color:hsl(171deg,100%,41%);border-color:transparent;color:#fff}.button.is-primary.is-hovered,.button.is-primary:hover{background-color:#00c4a7;border-color:transparent;color:#fff}.button.is-primary.is-focused,.button.is-primary:focus{border-color:transparent;color:#fff}.button.is-primary.is-focused:not(:active),.button.is-primary:focus:not(:active){box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.button.is-primary.is-active,.button.is-primary:active{background-color:#00b89c;border-color:transparent;color:#fff}.button.is-primary[disabled],fieldset[disabled] .button.is-primary{background-color:hsl(171deg,100%,41%);border-color:hsl(171deg,100%,41%);box-shadow:none}.button.is-primary.is-inverted{background-color:#fff;color:hsl(171deg,100%,41%)}.button.is-primary.is-inverted.is-hovered,.button.is-primary.is-inverted:hover{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],fieldset[disabled] .button.is-primary.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:hsl(171deg,100%,41%)}.button.is-primary.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined{background-color:transparent;border-color:hsl(171deg,100%,41%);color:hsl(171deg,100%,41%)}.button.is-primary.is-outlined.is-focused,.button.is-primary.is-outlined.is-hovered,.button.is-primary.is-outlined:focus,.button.is-primary.is-outlined:hover{background-color:hsl(171deg,100%,41%);border-color:hsl(171deg,100%,41%);color:#fff}.button.is-primary.is-outlined.is-loading::after{border-color:transparent transparent hsl(171deg,100%,41%) hsl(171deg,100%,41%)!important}.button.is-primary.is-outlined.is-loading.is-focused::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-outlined.is-loading:focus::after,.button.is-primary.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-outlined{background-color:transparent;border-color:hsl(171deg,100%,41%);box-shadow:none;color:hsl(171deg,100%,41%)}.button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined.is-focused,.button.is-primary.is-inverted.is-outlined.is-hovered,.button.is-primary.is-inverted.is-outlined:focus,.button.is-primary.is-inverted.is-outlined:hover{background-color:#fff;color:hsl(171deg,100%,41%)}.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent hsl(171deg,100%,41%) hsl(171deg,100%,41%)!important}.button.is-primary.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light{background-color:#ebfffc;color:#00947e}.button.is-primary.is-light.is-hovered,.button.is-primary.is-light:hover{background-color:#defffa;border-color:transparent;color:#00947e}.button.is-primary.is-light.is-active,.button.is-primary.is-light:active{background-color:#d1fff8;border-color:transparent;color:#00947e}.button.is-link{background-color:hsl(229deg,53%,53%);border-color:transparent;color:#fff}.button.is-link.is-hovered,.button.is-link:hover{background-color:#3e56c4;border-color:transparent;color:#fff}.button.is-link.is-focused,.button.is-link:focus{border-color:transparent;color:#fff}.button.is-link.is-focused:not(:active),.button.is-link:focus:not(:active){box-shadow:0 0 0 .125em rgba(72,95,199,.25)}.button.is-link.is-active,.button.is-link:active{background-color:#3a51bb;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:hsl(229deg,53%,53%);border-color:hsl(229deg,53%,53%);box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:hsl(229deg,53%,53%)}.button.is-link.is-inverted.is-hovered,.button.is-link.is-inverted:hover{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:hsl(229deg,53%,53%)}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined{background-color:transparent;border-color:hsl(229deg,53%,53%);color:hsl(229deg,53%,53%)}.button.is-link.is-outlined.is-focused,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined:hover{background-color:hsl(229deg,53%,53%);border-color:hsl(229deg,53%,53%);color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent hsl(229deg,53%,53%) hsl(229deg,53%,53%)!important}.button.is-link.is-outlined.is-loading.is-focused::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:hsl(229deg,53%,53%);box-shadow:none;color:hsl(229deg,53%,53%)}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined.is-focused,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined:hover{background-color:#fff;color:hsl(229deg,53%,53%)}.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent hsl(229deg,53%,53%) hsl(229deg,53%,53%)!important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eff1fa;color:#3850b7}.button.is-link.is-light.is-hovered,.button.is-link.is-light:hover{background-color:#e6e9f7;border-color:transparent;color:#3850b7}.button.is-link.is-light.is-active,.button.is-link.is-light:active{background-color:#dce0f4;border-color:transparent;color:#3850b7}.button.is-info{background-color:hsl(207deg,61%,53%);border-color:transparent;color:#fff}.button.is-info.is-hovered,.button.is-info:hover{background-color:#3488ce;border-color:transparent;color:#fff}.button.is-info.is-focused,.button.is-info:focus{border-color:transparent;color:#fff}.button.is-info.is-focused:not(:active),.button.is-info:focus:not(:active){box-shadow:0 0 0 .125em rgba(62,142,208,.25)}.button.is-info.is-active,.button.is-info:active{background-color:#3082c5;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:hsl(207deg,61%,53%);border-color:hsl(207deg,61%,53%);box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:hsl(207deg,61%,53%)}.button.is-info.is-inverted.is-hovered,.button.is-info.is-inverted:hover{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:hsl(207deg,61%,53%)}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined{background-color:transparent;border-color:hsl(207deg,61%,53%);color:hsl(207deg,61%,53%)}.button.is-info.is-outlined.is-focused,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined:hover{background-color:hsl(207deg,61%,53%);border-color:hsl(207deg,61%,53%);color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent hsl(207deg,61%,53%) hsl(207deg,61%,53%)!important}.button.is-info.is-outlined.is-loading.is-focused::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:hsl(207deg,61%,53%);box-shadow:none;color:hsl(207deg,61%,53%)}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined.is-focused,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined:hover{background-color:#fff;color:hsl(207deg,61%,53%)}.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent hsl(207deg,61%,53%) hsl(207deg,61%,53%)!important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#eff5fb;color:#296fa8}.button.is-info.is-light.is-hovered,.button.is-info.is-light:hover{background-color:#e4eff9;border-color:transparent;color:#296fa8}.button.is-info.is-light.is-active,.button.is-info.is-light:active{background-color:#dae9f6;border-color:transparent;color:#296fa8}.button.is-success{background-color:hsl(153deg,53%,53%);border-color:transparent;color:#fff}.button.is-success.is-hovered,.button.is-success:hover{background-color:#3ec487;border-color:transparent;color:#fff}.button.is-success.is-focused,.button.is-success:focus{border-color:transparent;color:#fff}.button.is-success.is-focused:not(:active),.button.is-success:focus:not(:active){box-shadow:0 0 0 .125em rgba(72,199,142,.25)}.button.is-success.is-active,.button.is-success:active{background-color:#3abb81;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:hsl(153deg,53%,53%);border-color:hsl(153deg,53%,53%);box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:hsl(153deg,53%,53%)}.button.is-success.is-inverted.is-hovered,.button.is-success.is-inverted:hover{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:hsl(153deg,53%,53%)}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined{background-color:transparent;border-color:hsl(153deg,53%,53%);color:hsl(153deg,53%,53%)}.button.is-success.is-outlined.is-focused,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined:hover{background-color:hsl(153deg,53%,53%);border-color:hsl(153deg,53%,53%);color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent hsl(153deg,53%,53%) hsl(153deg,53%,53%)!important}.button.is-success.is-outlined.is-loading.is-focused::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:hsl(153deg,53%,53%);box-shadow:none;color:hsl(153deg,53%,53%)}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined.is-focused,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined:hover{background-color:#fff;color:hsl(153deg,53%,53%)}.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent hsl(153deg,53%,53%) hsl(153deg,53%,53%)!important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#effaf5;color:#257953}.button.is-success.is-light.is-hovered,.button.is-success.is-light:hover{background-color:#e6f7ef;border-color:transparent;color:#257953}.button.is-success.is-light.is-active,.button.is-success.is-light:active{background-color:#dcf4e9;border-color:transparent;color:#257953}.button.is-warning{background-color:hsl(44deg,100%,77%);border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-hovered,.button.is-warning:hover{background-color:#ffdc7d;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused,.button.is-warning:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused:not(:active),.button.is-warning:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,224,138,.25)}.button.is-warning.is-active,.button.is-warning:active{background-color:#ffd970;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:hsl(44deg,100%,77%);border-color:hsl(44deg,100%,77%);box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);color:hsl(44deg,100%,77%)}.button.is-warning.is-inverted.is-hovered,.button.is-warning.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:hsl(44deg,100%,77%)}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined{background-color:transparent;border-color:hsl(44deg,100%,77%);color:hsl(44deg,100%,77%)}.button.is-warning.is-outlined.is-focused,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined:hover{background-color:hsl(44deg,100%,77%);border-color:hsl(44deg,100%,77%);color:rgba(0,0,0,.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent hsl(44deg,100%,77%) hsl(44deg,100%,77%)!important}.button.is-warning.is-outlined.is-loading.is-focused::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:hsl(44deg,100%,77%);box-shadow:none;color:hsl(44deg,100%,77%)}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-warning.is-inverted.is-outlined.is-focused,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:hsl(44deg,100%,77%)}.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent hsl(44deg,100%,77%) hsl(44deg,100%,77%)!important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-warning.is-light{background-color:#fffaeb;color:#946c00}.button.is-warning.is-light.is-hovered,.button.is-warning.is-light:hover{background-color:#fff6de;border-color:transparent;color:#946c00}.button.is-warning.is-light.is-active,.button.is-warning.is-light:active{background-color:#fff3d1;border-color:transparent;color:#946c00}.button.is-danger{background-color:hsl(348deg,86%,61%);border-color:transparent;color:#fff}.button.is-danger.is-hovered,.button.is-danger:hover{background-color:#f03a5f;border-color:transparent;color:#fff}.button.is-danger.is-focused,.button.is-danger:focus{border-color:transparent;color:#fff}.button.is-danger.is-focused:not(:active),.button.is-danger:focus:not(:active){box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.button.is-danger.is-active,.button.is-danger:active{background-color:#ef2e55;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:hsl(348deg,86%,61%);border-color:hsl(348deg,86%,61%);box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:hsl(348deg,86%,61%)}.button.is-danger.is-inverted.is-hovered,.button.is-danger.is-inverted:hover{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:hsl(348deg,86%,61%)}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined{background-color:transparent;border-color:hsl(348deg,86%,61%);color:hsl(348deg,86%,61%)}.button.is-danger.is-outlined.is-focused,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined:hover{background-color:hsl(348deg,86%,61%);border-color:hsl(348deg,86%,61%);color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent hsl(348deg,86%,61%) hsl(348deg,86%,61%)!important}.button.is-danger.is-outlined.is-loading.is-focused::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:hsl(348deg,86%,61%);box-shadow:none;color:hsl(348deg,86%,61%)}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined.is-focused,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined:hover{background-color:#fff;color:hsl(348deg,86%,61%)}.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent hsl(348deg,86%,61%) hsl(348deg,86%,61%)!important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.button.is-danger.is-light.is-hovered,.button.is-danger.is-light:hover{background-color:#fde0e6;border-color:transparent;color:#cc0f35}.button.is-danger.is-light.is-active,.button.is-danger.is-light:active{background-color:#fcd4dc;border-color:transparent;color:#cc0f35}.button.is-small{font-size:.75rem}.button.is-small:not(.is-rounded){border-radius:2px}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:hsl(0deg,0%,100%);border-color:hsl(0deg,0%,86%);box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent!important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em * .5));top:calc(50% - (1em * .5));position:absolute!important}.button.is-static{background-color:hsl(0deg,0%,96%);border-color:hsl(0deg,0%,86%);color:hsl(0deg,0%,48%);box-shadow:none;pointer-events:none}.button.is-rounded{border-radius:9999px;padding-left:calc(1em + .25em);padding-right:calc(1em + .25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button.is-hovered,.buttons.has-addons .button:hover{z-index:2}.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-focused,.buttons.has-addons .button.is-selected,.buttons.has-addons .button:active,.buttons.has-addons .button:focus{z-index:3}.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button.is-selected:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button:focus:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}@media screen and (max-width:768px){.button.is-responsive.is-small{font-size:.5625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.65625rem}.button.is-responsive.is-medium{font-size:.75rem}.button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width:769px) and (max-width:1023px){.button.is-responsive.is-small{font-size:.65625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.75rem}.button.is-responsive.is-medium{font-size:1rem}.button.is-responsive.is-large{font-size:1.25rem}}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none!important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width:1024px){.container{max-width:960px}}@media screen and (max-width:1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width:1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width:1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width:1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:.25em}.content blockquote:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content p:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child),.content ul:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:hsl(0deg,0%,21%);font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:.8em}.content h5{font-size:1.125em;margin-bottom:.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:hsl(0deg,0%,96%);border-left:5px solid hsl(0deg,0%,86%);padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol:not([type]).is-lower-alpha{list-style-type:lower-alpha}.content ol:not([type]).is-lower-roman{list-style-type:lower-roman}.content ol:not([type]).is-upper-alpha{list-style-type:upper-alpha}.content ol:not([type]).is-upper-roman{list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:1.25em 1.5em;white-space:pre;word-wrap:normal}.content sub,.content sup{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid hsl(0deg,0%,86%);border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.content table th{color:hsl(0deg,0%,21%)}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:hsl(0deg,0%,21%)}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:hsl(0deg,0%,21%)}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small{font-size:.75rem}.content.is-normal{font-size:1rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image{display:block;position:relative}.image img{display:block;height:auto;width:100%}.image img.is-rounded{border-radius:9999px}.image.is-fullwidth{width:100%}.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img{height:100%;width:100%}.image.is-1by1,.image.is-square{padding-top:100%}.image.is-5by4{padding-top:80%}.image.is-4by3{padding-top:75%}.image.is-3by2{padding-top:66.6666%}.image.is-5by3{padding-top:60%}.image.is-16by9{padding-top:56.25%}.image.is-2by1{padding-top:50%}.image.is-3by1{padding-top:33.3333%}.image.is-4by5{padding-top:125%}.image.is-3by4{padding-top:133.3333%}.image.is-2by3{padding-top:150%}.image.is-3by5{padding-top:166.6666%}.image.is-9by16{padding-top:177.7777%}.image.is-1by2{padding-top:200%}.image.is-1by3{padding-top:300%}.image.is-16x16{height:16px;width:16px}.image.is-24x24{height:24px;width:24px}.image.is-32x32{height:32px;width:32px}.image.is-48x48{height:48px;width:48px}.image.is-64x64{height:64px;width:64px}.image.is-96x96{height:96px;width:96px}.image.is-128x128{height:128px;width:128px}.notification{background-color:hsl(0deg,0%,96%);border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:hsl(0deg,0%,100%)}.notification pre code{background:0 0}.notification>.delete{right:.5rem;position:absolute;top:.5rem}.notification .content,.notification .subtitle,.notification .title{color:currentColor}.notification.is-white{background-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,4%)}.notification.is-black{background-color:hsl(0deg,0%,4%);color:hsl(0deg,0%,100%)}.notification.is-light{background-color:hsl(0deg,0%,96%);color:rgba(0,0,0,.7)}.notification.is-dark{background-color:hsl(0deg,0%,21%);color:#fff}.notification.is-primary{background-color:hsl(171deg,100%,41%);color:#fff}.notification.is-primary.is-light{background-color:#ebfffc;color:#00947e}.notification.is-link{background-color:hsl(229deg,53%,53%);color:#fff}.notification.is-link.is-light{background-color:#eff1fa;color:#3850b7}.notification.is-info{background-color:hsl(207deg,61%,53%);color:#fff}.notification.is-info.is-light{background-color:#eff5fb;color:#296fa8}.notification.is-success{background-color:hsl(153deg,53%,53%);color:#fff}.notification.is-success.is-light{background-color:#effaf5;color:#257953}.notification.is-warning{background-color:hsl(44deg,100%,77%);color:rgba(0,0,0,.7)}.notification.is-warning.is-light{background-color:#fffaeb;color:#946c00}.notification.is-danger{background-color:hsl(348deg,86%,61%);color:#fff}.notification.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:hsl(0deg,0%,93%)}.progress::-webkit-progress-value{background-color:hsl(0deg,0%,29%)}.progress::-moz-progress-bar{background-color:hsl(0deg,0%,29%)}.progress::-ms-fill{background-color:hsl(0deg,0%,29%);border:none}.progress.is-white::-webkit-progress-value{background-color:hsl(0deg,0%,100%)}.progress.is-white::-moz-progress-bar{background-color:hsl(0deg,0%,100%)}.progress.is-white::-ms-fill{background-color:hsl(0deg,0%,100%)}.progress.is-white:indeterminate{background-image:linear-gradient(to right,hsl(0deg,0%,100%) 30%,hsl(0deg,0%,93%) 30%)}.progress.is-black::-webkit-progress-value{background-color:hsl(0deg,0%,4%)}.progress.is-black::-moz-progress-bar{background-color:hsl(0deg,0%,4%)}.progress.is-black::-ms-fill{background-color:hsl(0deg,0%,4%)}.progress.is-black:indeterminate{background-image:linear-gradient(to right,hsl(0deg,0%,4%) 30%,hsl(0deg,0%,93%) 30%)}.progress.is-light::-webkit-progress-value{background-color:hsl(0deg,0%,96%)}.progress.is-light::-moz-progress-bar{background-color:hsl(0deg,0%,96%)}.progress.is-light::-ms-fill{background-color:hsl(0deg,0%,96%)}.progress.is-light:indeterminate{background-image:linear-gradient(to right,hsl(0deg,0%,96%) 30%,hsl(0deg,0%,93%) 30%)}.progress.is-dark::-webkit-progress-value{background-color:hsl(0deg,0%,21%)}.progress.is-dark::-moz-progress-bar{background-color:hsl(0deg,0%,21%)}.progress.is-dark::-ms-fill{background-color:hsl(0deg,0%,21%)}.progress.is-dark:indeterminate{background-image:linear-gradient(to right,hsl(0deg,0%,21%) 30%,hsl(0deg,0%,93%) 30%)}.progress.is-primary::-webkit-progress-value{background-color:hsl(171deg,100%,41%)}.progress.is-primary::-moz-progress-bar{background-color:hsl(171deg,100%,41%)}.progress.is-primary::-ms-fill{background-color:hsl(171deg,100%,41%)}.progress.is-primary:indeterminate{background-image:linear-gradient(to right,hsl(171deg,100%,41%) 30%,hsl(0deg,0%,93%) 30%)}.progress.is-link::-webkit-progress-value{background-color:hsl(229deg,53%,53%)}.progress.is-link::-moz-progress-bar{background-color:hsl(229deg,53%,53%)}.progress.is-link::-ms-fill{background-color:hsl(229deg,53%,53%)}.progress.is-link:indeterminate{background-image:linear-gradient(to right,hsl(229deg,53%,53%) 30%,hsl(0deg,0%,93%) 30%)}.progress.is-info::-webkit-progress-value{background-color:hsl(207deg,61%,53%)}.progress.is-info::-moz-progress-bar{background-color:hsl(207deg,61%,53%)}.progress.is-info::-ms-fill{background-color:hsl(207deg,61%,53%)}.progress.is-info:indeterminate{background-image:linear-gradient(to right,hsl(207deg,61%,53%) 30%,hsl(0deg,0%,93%) 30%)}.progress.is-success::-webkit-progress-value{background-color:hsl(153deg,53%,53%)}.progress.is-success::-moz-progress-bar{background-color:hsl(153deg,53%,53%)}.progress.is-success::-ms-fill{background-color:hsl(153deg,53%,53%)}.progress.is-success:indeterminate{background-image:linear-gradient(to right,hsl(153deg,53%,53%) 30%,hsl(0deg,0%,93%) 30%)}.progress.is-warning::-webkit-progress-value{background-color:hsl(44deg,100%,77%)}.progress.is-warning::-moz-progress-bar{background-color:hsl(44deg,100%,77%)}.progress.is-warning::-ms-fill{background-color:hsl(44deg,100%,77%)}.progress.is-warning:indeterminate{background-image:linear-gradient(to right,hsl(44deg,100%,77%) 30%,hsl(0deg,0%,93%) 30%)}.progress.is-danger::-webkit-progress-value{background-color:hsl(348deg,86%,61%)}.progress.is-danger::-moz-progress-bar{background-color:hsl(348deg,86%,61%)}.progress.is-danger::-ms-fill{background-color:hsl(348deg,86%,61%)}.progress.is-danger:indeterminate{background-image:linear-gradient(to right,hsl(348deg,86%,61%) 30%,hsl(0deg,0%,93%) 30%)}.progress:indeterminate{-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moveIndeterminate;animation-name:moveIndeterminate;-webkit-animation-timing-function:linear;animation-timing-function:linear;background-color:hsl(0deg,0%,93%);background-image:linear-gradient(to right,hsl(0deg,0%,29%) 30%,hsl(0deg,0%,93%) 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@-webkit-keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,21%)}.table td,.table th{border:1px solid hsl(0deg,0%,86%);border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:hsl(0deg,0%,100%);border-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,4%)}.table td.is-black,.table th.is-black{background-color:hsl(0deg,0%,4%);border-color:hsl(0deg,0%,4%);color:hsl(0deg,0%,100%)}.table td.is-light,.table th.is-light{background-color:hsl(0deg,0%,96%);border-color:hsl(0deg,0%,96%);color:rgba(0,0,0,.7)}.table td.is-dark,.table th.is-dark{background-color:hsl(0deg,0%,21%);border-color:hsl(0deg,0%,21%);color:#fff}.table td.is-primary,.table th.is-primary{background-color:hsl(171deg,100%,41%);border-color:hsl(171deg,100%,41%);color:#fff}.table td.is-link,.table th.is-link{background-color:hsl(229deg,53%,53%);border-color:hsl(229deg,53%,53%);color:#fff}.table td.is-info,.table th.is-info{background-color:hsl(207deg,61%,53%);border-color:hsl(207deg,61%,53%);color:#fff}.table td.is-success,.table th.is-success{background-color:hsl(153deg,53%,53%);border-color:hsl(153deg,53%,53%);color:#fff}.table td.is-warning,.table th.is-warning{background-color:hsl(44deg,100%,77%);border-color:hsl(44deg,100%,77%);color:rgba(0,0,0,.7)}.table td.is-danger,.table th.is-danger{background-color:hsl(348deg,86%,61%);border-color:hsl(348deg,86%,61%);color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:hsl(171deg,100%,41%);color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:hsl(0deg,0%,21%)}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:hsl(171deg,100%,41%);color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:transparent}.table thead td,.table thead th{border-width:0 0 2px;color:hsl(0deg,0%,21%)}.table tfoot{background-color:transparent}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:hsl(0deg,0%,21%)}.table tbody{background-color:transparent}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:hsl(0deg,0%,98%)}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:hsl(0deg,0%,98%)}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(2n){background-color:hsl(0deg,0%,96%)}.table.is-narrow td,.table.is-narrow th{padding:.25em .5em}.table.is-striped tbody tr:not(.is-selected):nth-child(2n){background-color:hsl(0deg,0%,98%)}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag{margin-bottom:.5rem}.tags .tag:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag{margin-right:.25rem;margin-left:.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child){margin-left:.5rem}.tags.is-right .tag:not(:last-child){margin-right:0}.tags.has-addons .tag{margin-right:0}.tags.has-addons .tag:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body){align-items:center;background-color:hsl(0deg,0%,96%);border-radius:4px;color:hsl(0deg,0%,29%);display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:.75em;padding-right:.75em;white-space:nowrap}.tag:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag:not(body).is-white{background-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,4%)}.tag:not(body).is-black{background-color:hsl(0deg,0%,4%);color:hsl(0deg,0%,100%)}.tag:not(body).is-light{background-color:hsl(0deg,0%,96%);color:rgba(0,0,0,.7)}.tag:not(body).is-dark{background-color:hsl(0deg,0%,21%);color:#fff}.tag:not(body).is-primary{background-color:hsl(171deg,100%,41%);color:#fff}.tag:not(body).is-primary.is-light{background-color:#ebfffc;color:#00947e}.tag:not(body).is-link{background-color:hsl(229deg,53%,53%);color:#fff}.tag:not(body).is-link.is-light{background-color:#eff1fa;color:#3850b7}.tag:not(body).is-info{background-color:hsl(207deg,61%,53%);color:#fff}.tag:not(body).is-info.is-light{background-color:#eff5fb;color:#296fa8}.tag:not(body).is-success{background-color:hsl(153deg,53%,53%);color:#fff}.tag:not(body).is-success.is-light{background-color:#effaf5;color:#257953}.tag:not(body).is-warning{background-color:hsl(44deg,100%,77%);color:rgba(0,0,0,.7)}.tag:not(body).is-warning.is-light{background-color:#fffaeb;color:#946c00}.tag:not(body).is-danger{background-color:hsl(348deg,86%,61%);color:#fff}.tag:not(body).is-danger.is-light{background-color:#feecf0;color:#cc0f35}.tag:not(body).is-normal{font-size:.75rem}.tag:not(body).is-medium{font-size:1rem}.tag:not(body).is-large{font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag:not(body).is-delete{margin-left:1px;padding:0;position:relative;width:2em}.tag:not(body).is-delete::after,.tag:not(body).is-delete::before{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag:not(body).is-delete::before{height:1px;width:50%}.tag:not(body).is-delete::after{height:50%;width:1px}.tag:not(body).is-delete:focus,.tag:not(body).is-delete:hover{background-color:#e8e8e8}.tag:not(body).is-delete:active{background-color:#dbdbdb}.tag:not(body).is-rounded{border-radius:9999px}a.tag:hover{text-decoration:underline}.subtitle,.title{word-break:break-word}.subtitle em,.subtitle span,.title em,.title span{font-weight:inherit}.subtitle sub,.title sub{font-size:.75em}.subtitle sup,.title sup{font-size:.75em}.subtitle .tag,.title .tag{vertical-align:middle}.title{color:hsl(0deg,0%,21%);font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:hsl(0deg,0%,29%);font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:hsl(0deg,0%,21%);font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.number{align-items:center;background-color:hsl(0deg,0%,96%);border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:.25rem .5rem;text-align:center;vertical-align:top}.input,.select select,.textarea{background-color:hsl(0deg,0%,100%);border-color:hsl(0deg,0%,86%);border-radius:4px;color:hsl(0deg,0%,21%)}.input::-moz-placeholder,.select select::-moz-placeholder,.textarea::-moz-placeholder{color:rgba(54,54,54,.3)}.input::-webkit-input-placeholder,.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder{color:rgba(54,54,54,.3)}.input:-moz-placeholder,.select select:-moz-placeholder,.textarea:-moz-placeholder{color:rgba(54,54,54,.3)}.input:-ms-input-placeholder,.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder{color:rgba(54,54,54,.3)}.input:hover,.is-hovered.input,.is-hovered.textarea,.select select.is-hovered,.select select:hover,.textarea:hover{border-color:hsl(0deg,0%,71%)}.input:active,.input:focus,.is-active.input,.is-active.textarea,.is-focused.input,.is-focused.textarea,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{border-color:hsl(229deg,53%,53%);box-shadow:0 0 0 .125em rgba(72,95,199,.25)}.select fieldset[disabled] select,.select select[disabled],[disabled].input,[disabled].textarea,fieldset[disabled] .input,fieldset[disabled] .select select,fieldset[disabled] .textarea{background-color:hsl(0deg,0%,96%);border-color:hsl(0deg,0%,96%);box-shadow:none;color:hsl(0deg,0%,48%)}.select fieldset[disabled] select::-moz-placeholder,.select select[disabled]::-moz-placeholder,[disabled].input::-moz-placeholder,[disabled].textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder{color:rgba(122,122,122,.3)}.select fieldset[disabled] select::-webkit-input-placeholder,.select select[disabled]::-webkit-input-placeholder,[disabled].input::-webkit-input-placeholder,[disabled].textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder{color:rgba(122,122,122,.3)}.select fieldset[disabled] select:-moz-placeholder,.select select[disabled]:-moz-placeholder,[disabled].input:-moz-placeholder,[disabled].textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder{color:rgba(122,122,122,.3)}.select fieldset[disabled] select:-ms-input-placeholder,.select select[disabled]:-ms-input-placeholder,[disabled].input:-ms-input-placeholder,[disabled].textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder{color:rgba(122,122,122,.3)}.input,.textarea{box-shadow:inset 0 .0625em .125em rgba(10,10,10,.05);max-width:100%;width:100%}[readonly].input,[readonly].textarea{box-shadow:none}.is-white.input,.is-white.textarea{border-color:hsl(0deg,0%,100%)}.is-white.input:active,.is-white.input:focus,.is-white.is-active.input,.is-white.is-active.textarea,.is-white.is-focused.input,.is-white.is-focused.textarea,.is-white.textarea:active,.is-white.textarea:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.is-black.input,.is-black.textarea{border-color:hsl(0deg,0%,4%)}.is-black.input:active,.is-black.input:focus,.is-black.is-active.input,.is-black.is-active.textarea,.is-black.is-focused.input,.is-black.is-focused.textarea,.is-black.textarea:active,.is-black.textarea:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.is-light.input,.is-light.textarea{border-color:hsl(0deg,0%,96%)}.is-light.input:active,.is-light.input:focus,.is-light.is-active.input,.is-light.is-active.textarea,.is-light.is-focused.input,.is-light.is-focused.textarea,.is-light.textarea:active,.is-light.textarea:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.is-dark.input,.is-dark.textarea{border-color:hsl(0deg,0%,21%)}.is-dark.input:active,.is-dark.input:focus,.is-dark.is-active.input,.is-dark.is-active.textarea,.is-dark.is-focused.input,.is-dark.is-focused.textarea,.is-dark.textarea:active,.is-dark.textarea:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.is-primary.input,.is-primary.textarea{border-color:hsl(171deg,100%,41%)}.is-primary.input:active,.is-primary.input:focus,.is-primary.is-active.input,.is-primary.is-active.textarea,.is-primary.is-focused.input,.is-primary.is-focused.textarea,.is-primary.textarea:active,.is-primary.textarea:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.is-link.input,.is-link.textarea{border-color:hsl(229deg,53%,53%)}.is-link.input:active,.is-link.input:focus,.is-link.is-active.input,.is-link.is-active.textarea,.is-link.is-focused.input,.is-link.is-focused.textarea,.is-link.textarea:active,.is-link.textarea:focus{box-shadow:0 0 0 .125em rgba(72,95,199,.25)}.is-info.input,.is-info.textarea{border-color:hsl(207deg,61%,53%)}.is-info.input:active,.is-info.input:focus,.is-info.is-active.input,.is-info.is-active.textarea,.is-info.is-focused.input,.is-info.is-focused.textarea,.is-info.textarea:active,.is-info.textarea:focus{box-shadow:0 0 0 .125em rgba(62,142,208,.25)}.is-success.input,.is-success.textarea{border-color:hsl(153deg,53%,53%)}.is-success.input:active,.is-success.input:focus,.is-success.is-active.input,.is-success.is-active.textarea,.is-success.is-focused.input,.is-success.is-focused.textarea,.is-success.textarea:active,.is-success.textarea:focus{box-shadow:0 0 0 .125em rgba(72,199,142,.25)}.is-warning.input,.is-warning.textarea{border-color:hsl(44deg,100%,77%)}.is-warning.input:active,.is-warning.input:focus,.is-warning.is-active.input,.is-warning.is-active.textarea,.is-warning.is-focused.input,.is-warning.is-focused.textarea,.is-warning.textarea:active,.is-warning.textarea:focus{box-shadow:0 0 0 .125em rgba(255,224,138,.25)}.is-danger.input,.is-danger.textarea{border-color:hsl(348deg,86%,61%)}.is-danger.input:active,.is-danger.input:focus,.is-danger.is-active.input,.is-danger.is-active.textarea,.is-danger.is-focused.input,.is-danger.is-focused.textarea,.is-danger.textarea:active,.is-danger.textarea:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.is-small.input,.is-small.textarea{border-radius:2px;font-size:.75rem}.is-medium.input,.is-medium.textarea{font-size:1.25rem}.is-large.input,.is-large.textarea{font-size:1.5rem}.is-fullwidth.input,.is-fullwidth.textarea{display:block;width:100%}.is-inline.input,.is-inline.textarea{display:inline;width:auto}.input.is-rounded{border-radius:9999px;padding-left:calc(calc(.75em - 1px) + .375em);padding-right:calc(calc(.75em - 1px) + .375em)}.input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.checkbox,.radio{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.checkbox input,.radio input{cursor:pointer}.checkbox:hover,.radio:hover{color:hsl(0deg,0%,21%)}.checkbox input[disabled],.radio input[disabled],[disabled].checkbox,[disabled].radio,fieldset[disabled] .checkbox,fieldset[disabled] .radio{color:hsl(0deg,0%,48%);cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:hsl(229deg,53%,53%);right:1.125em;z-index:4}.select.is-rounded select{border-radius:9999px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:0}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:hsl(0deg,0%,96%)}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:hsl(0deg,0%,21%)}.select.is-white:not(:hover)::after{border-color:hsl(0deg,0%,100%)}.select.is-white select{border-color:hsl(0deg,0%,100%)}.select.is-white select.is-hovered,.select.is-white select:hover{border-color:#f2f2f2}.select.is-white select.is-active,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.select.is-black:not(:hover)::after{border-color:hsl(0deg,0%,4%)}.select.is-black select{border-color:hsl(0deg,0%,4%)}.select.is-black select.is-hovered,.select.is-black select:hover{border-color:#000}.select.is-black select.is-active,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.select.is-light:not(:hover)::after{border-color:hsl(0deg,0%,96%)}.select.is-light select{border-color:hsl(0deg,0%,96%)}.select.is-light select.is-hovered,.select.is-light select:hover{border-color:#e8e8e8}.select.is-light select.is-active,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.select.is-dark:not(:hover)::after{border-color:hsl(0deg,0%,21%)}.select.is-dark select{border-color:hsl(0deg,0%,21%)}.select.is-dark select.is-hovered,.select.is-dark select:hover{border-color:#292929}.select.is-dark select.is-active,.select.is-dark select.is-focused,.select.is-dark select:active,.select.is-dark select:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.select.is-primary:not(:hover)::after{border-color:hsl(171deg,100%,41%)}.select.is-primary select{border-color:hsl(171deg,100%,41%)}.select.is-primary select.is-hovered,.select.is-primary select:hover{border-color:#00b89c}.select.is-primary select.is-active,.select.is-primary select.is-focused,.select.is-primary select:active,.select.is-primary select:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.select.is-link:not(:hover)::after{border-color:hsl(229deg,53%,53%)}.select.is-link select{border-color:hsl(229deg,53%,53%)}.select.is-link select.is-hovered,.select.is-link select:hover{border-color:#3a51bb}.select.is-link select.is-active,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select:focus{box-shadow:0 0 0 .125em rgba(72,95,199,.25)}.select.is-info:not(:hover)::after{border-color:hsl(207deg,61%,53%)}.select.is-info select{border-color:hsl(207deg,61%,53%)}.select.is-info select.is-hovered,.select.is-info select:hover{border-color:#3082c5}.select.is-info select.is-active,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select:focus{box-shadow:0 0 0 .125em rgba(62,142,208,.25)}.select.is-success:not(:hover)::after{border-color:hsl(153deg,53%,53%)}.select.is-success select{border-color:hsl(153deg,53%,53%)}.select.is-success select.is-hovered,.select.is-success select:hover{border-color:#3abb81}.select.is-success select.is-active,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select:focus{box-shadow:0 0 0 .125em rgba(72,199,142,.25)}.select.is-warning:not(:hover)::after{border-color:hsl(44deg,100%,77%)}.select.is-warning select{border-color:hsl(44deg,100%,77%)}.select.is-warning select.is-hovered,.select.is-warning select:hover{border-color:#ffd970}.select.is-warning select.is-active,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select:focus{box-shadow:0 0 0 .125em rgba(255,224,138,.25)}.select.is-danger:not(:hover)::after{border-color:hsl(348deg,86%,61%)}.select.is-danger select{border-color:hsl(348deg,86%,61%)}.select.is-danger select.is-hovered,.select.is-danger select:hover{border-color:#ef2e55}.select.is-danger select.is-active,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.select.is-small{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:hsl(0deg,0%,48%)!important;opacity:.5}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:.625em;transform:none}.select.is-loading.is-small:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:hsl(0deg,0%,100%);border-color:transparent;color:hsl(0deg,0%,4%)}.file.is-white.is-hovered .file-cta,.file.is-white:hover .file-cta{background-color:#f9f9f9;border-color:transparent;color:hsl(0deg,0%,4%)}.file.is-white.is-focused .file-cta,.file.is-white:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,255,255,.25);color:hsl(0deg,0%,4%)}.file.is-white.is-active .file-cta,.file.is-white:active .file-cta{background-color:#f2f2f2;border-color:transparent;color:hsl(0deg,0%,4%)}.file.is-black .file-cta{background-color:hsl(0deg,0%,4%);border-color:transparent;color:hsl(0deg,0%,100%)}.file.is-black.is-hovered .file-cta,.file.is-black:hover .file-cta{background-color:#040404;border-color:transparent;color:hsl(0deg,0%,100%)}.file.is-black.is-focused .file-cta,.file.is-black:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(10,10,10,.25);color:hsl(0deg,0%,100%)}.file.is-black.is-active .file-cta,.file.is-black:active .file-cta{background-color:#000;border-color:transparent;color:hsl(0deg,0%,100%)}.file.is-light .file-cta{background-color:hsl(0deg,0%,96%);border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-hovered .file-cta,.file.is-light:hover .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-focused .file-cta,.file.is-light:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(245,245,245,.25);color:rgba(0,0,0,.7)}.file.is-light.is-active .file-cta,.file.is-light:active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-dark .file-cta{background-color:hsl(0deg,0%,21%);border-color:transparent;color:#fff}.file.is-dark.is-hovered .file-cta,.file.is-dark:hover .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark.is-focused .file-cta,.file.is-dark:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(54,54,54,.25);color:#fff}.file.is-dark.is-active .file-cta,.file.is-dark:active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta{background-color:hsl(171deg,100%,41%);border-color:transparent;color:#fff}.file.is-primary.is-hovered .file-cta,.file.is-primary:hover .file-cta{background-color:#00c4a7;border-color:transparent;color:#fff}.file.is-primary.is-focused .file-cta,.file.is-primary:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(0,209,178,.25);color:#fff}.file.is-primary.is-active .file-cta,.file.is-primary:active .file-cta{background-color:#00b89c;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:hsl(229deg,53%,53%);border-color:transparent;color:#fff}.file.is-link.is-hovered .file-cta,.file.is-link:hover .file-cta{background-color:#3e56c4;border-color:transparent;color:#fff}.file.is-link.is-focused .file-cta,.file.is-link:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(72,95,199,.25);color:#fff}.file.is-link.is-active .file-cta,.file.is-link:active .file-cta{background-color:#3a51bb;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:hsl(207deg,61%,53%);border-color:transparent;color:#fff}.file.is-info.is-hovered .file-cta,.file.is-info:hover .file-cta{background-color:#3488ce;border-color:transparent;color:#fff}.file.is-info.is-focused .file-cta,.file.is-info:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(62,142,208,.25);color:#fff}.file.is-info.is-active .file-cta,.file.is-info:active .file-cta{background-color:#3082c5;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:hsl(153deg,53%,53%);border-color:transparent;color:#fff}.file.is-success.is-hovered .file-cta,.file.is-success:hover .file-cta{background-color:#3ec487;border-color:transparent;color:#fff}.file.is-success.is-focused .file-cta,.file.is-success:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(72,199,142,.25);color:#fff}.file.is-success.is-active .file-cta,.file.is-success:active .file-cta{background-color:#3abb81;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:hsl(44deg,100%,77%);border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-hovered .file-cta,.file.is-warning:hover .file-cta{background-color:#ffdc7d;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-focused .file-cta,.file.is-warning:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,224,138,.25);color:rgba(0,0,0,.7)}.file.is-warning.is-active .file-cta,.file.is-warning:active .file-cta{background-color:#ffd970;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-danger .file-cta{background-color:hsl(348deg,86%,61%);border-color:transparent;color:#fff}.file.is-danger.is-hovered .file-cta,.file.is-danger:hover .file-cta{background-color:#f03a5f;border-color:transparent;color:#fff}.file.is-danger.is-focused .file-cta,.file.is-danger:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(241,70,104,.25);color:#fff}.file.is-danger.is-active .file-cta,.file.is-danger:active .file-cta{background-color:#ef2e55;border-color:transparent;color:#fff}.file.is-small{font-size:.75rem}.file.is-normal{font-size:1rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:hsl(0deg,0%,21%)}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:hsl(0deg,0%,21%)}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:0;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:hsl(0deg,0%,86%);border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:hsl(0deg,0%,96%);color:hsl(0deg,0%,29%)}.file-name{border-color:hsl(0deg,0%,86%);border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:hsl(0deg,0%,21%);display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:.5em}.label.is-small{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:.25rem}.help.is-white{color:hsl(0deg,0%,100%)}.help.is-black{color:hsl(0deg,0%,4%)}.help.is-light{color:hsl(0deg,0%,96%)}.help.is-dark{color:hsl(0deg,0%,21%)}.help.is-primary{color:hsl(171deg,100%,41%)}.help.is-link{color:hsl(229deg,53%,53%)}.help.is-info{color:hsl(207deg,61%,53%)}.help.is-success{color:hsl(153deg,53%,53%)}.help.is-warning{color:hsl(44deg,100%,77%)}.help.is-danger{color:hsl(348deg,86%,61%)}.field:not(:last-child){margin-bottom:.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]).is-hovered,.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .input:not([disabled]).is-hovered,.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]).is-hovered,.field.has-addons .control .select select:not([disabled]):hover{z-index:2}.field.has-addons .control .button:not([disabled]).is-active,.field.has-addons .control .button:not([disabled]).is-focused,.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .input:not([disabled]).is-active,.field.has-addons .control .input:not([disabled]).is-focused,.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control .select select:not([disabled]).is-active,.field.has-addons .control .select select:not([disabled]).is-focused,.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select:not([disabled]):focus{z-index:3}.field.has-addons .control .button:not([disabled]).is-active:hover,.field.has-addons .control .button:not([disabled]).is-focused:hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .input:not([disabled]).is-active:hover,.field.has-addons .control .input:not([disabled]).is-focused:hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control .select select:not([disabled]).is-active:hover,.field.has-addons .control .select select:not([disabled]).is-focused:hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select:not([disabled]):focus:hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width:769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width:768px){.field-label{margin-bottom:.5rem}}@media screen and (min-width:769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small{font-size:.75rem;padding-top:.375em}.field-label.is-normal{padding-top:.375em}.field-label.is-medium{font-size:1.25rem;padding-top:.375em}.field-label.is-large{font-size:1.5rem;padding-top:.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width:769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:hsl(0deg,0%,29%)}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:hsl(0deg,0%,86%);height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute!important;right:.625em;top:.625em;z-index:4}.control.is-loading.is-small:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:hsl(229deg,53%,53%);display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:hsl(0deg,0%,21%)}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:hsl(0deg,0%,21%);cursor:default;pointer-events:none}.breadcrumb li+li::before{color:hsl(0deg,0%,71%);content:"/"}.breadcrumb ol,.breadcrumb ul{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"→"}.breadcrumb.has-bullet-separator li+li::before{content:"•"}.breadcrumb.has-dot-separator li+li::before{content:"·"}.breadcrumb.has-succeeds-separator li+li::before{content:"≻"}.card{background-color:hsl(0deg,0%,100%);border-radius:.25rem;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:hsl(0deg,0%,29%);max-width:100%;position:relative}.card-content:first-child,.card-footer:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-content:last-child,.card-footer:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:transparent;align-items:stretch;box-shadow:0 .125em .25em rgba(10,10,10,.1);display:flex}.card-header-title{align-items:center;color:hsl(0deg,0%,21%);display:flex;flex-grow:1;font-weight:700;padding:.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:0 0;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:transparent;padding:1.5rem}.card-footer{background-color:transparent;border-top:1px solid hsl(0deg,0%,93%);align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid hsl(0deg,0%,93%)}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:hsl(0deg,0%,100%);border-radius:4px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:hsl(0deg,0%,29%);display:block;font-size:.875rem;line-height:1.5;padding:.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:hsl(0deg,0%,96%);color:hsl(0deg,0%,4%)}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:hsl(229deg,53%,53%);color:#fff}.dropdown-divider{background-color:hsl(0deg,0%,93%);border:none;display:block;height:1px;margin:.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width:769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .subtitle,.level-item .title{margin-bottom:0}@media screen and (max-width:768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width:769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width:768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width:769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width:769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width:768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:hsl(0deg,0%,29%);display:block;padding:.5em .75em}.menu-list a:hover{background-color:hsl(0deg,0%,96%);color:hsl(0deg,0%,21%)}.menu-list a.is-active{background-color:hsl(229deg,53%,53%);color:#fff}.menu-list li ul{border-left:1px solid hsl(0deg,0%,86%);margin:.75em;padding-left:.75em}.menu-label{color:hsl(0deg,0%,48%);font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:hsl(0deg,0%,96%);border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,4%)}.message.is-white .message-body{border-color:hsl(0deg,0%,100%)}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:hsl(0deg,0%,4%);color:hsl(0deg,0%,100%)}.message.is-black .message-body{border-color:hsl(0deg,0%,4%)}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:hsl(0deg,0%,96%);color:rgba(0,0,0,.7)}.message.is-light .message-body{border-color:hsl(0deg,0%,96%)}.message.is-dark{background-color:#fafafa}.message.is-dark .message-header{background-color:hsl(0deg,0%,21%);color:#fff}.message.is-dark .message-body{border-color:hsl(0deg,0%,21%)}.message.is-primary{background-color:#ebfffc}.message.is-primary .message-header{background-color:hsl(171deg,100%,41%);color:#fff}.message.is-primary .message-body{border-color:hsl(171deg,100%,41%);color:#00947e}.message.is-link{background-color:#eff1fa}.message.is-link .message-header{background-color:hsl(229deg,53%,53%);color:#fff}.message.is-link .message-body{border-color:hsl(229deg,53%,53%);color:#3850b7}.message.is-info{background-color:#eff5fb}.message.is-info .message-header{background-color:hsl(207deg,61%,53%);color:#fff}.message.is-info .message-body{border-color:hsl(207deg,61%,53%);color:#296fa8}.message.is-success{background-color:#effaf5}.message.is-success .message-header{background-color:hsl(153deg,53%,53%);color:#fff}.message.is-success .message-body{border-color:hsl(153deg,53%,53%);color:#257953}.message.is-warning{background-color:#fffaeb}.message.is-warning .message-header{background-color:hsl(44deg,100%,77%);color:rgba(0,0,0,.7)}.message.is-warning .message-body{border-color:hsl(44deg,100%,77%);color:#946c00}.message.is-danger{background-color:#feecf0}.message.is-danger .message-header{background-color:hsl(348deg,86%,61%);color:#fff}.message.is-danger .message-body{border-color:hsl(348deg,86%,61%);color:#cc0f35}.message-header{align-items:center;background-color:hsl(0deg,0%,29%);border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:hsl(0deg,0%,86%);border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:hsl(0deg,0%,29%);padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:hsl(0deg,0%,100%)}.message-body pre code{background-color:transparent}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,.86)}.modal-card,.modal-content{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width:769px){.modal-card,.modal-content{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:0 0;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-foot,.modal-card-head{align-items:center;background-color:hsl(0deg,0%,96%);display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid hsl(0deg,0%,86%);border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:hsl(0deg,0%,21%);flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid hsl(0deg,0%,86%)}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:hsl(0deg,0%,100%);flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:hsl(0deg,0%,100%);min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,4%)}.navbar.is-white .navbar-brand .navbar-link,.navbar.is-white .navbar-brand>.navbar-item{color:hsl(0deg,0%,4%)}.navbar.is-white .navbar-brand .navbar-link.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover{background-color:#f2f2f2;color:hsl(0deg,0%,4%)}.navbar.is-white .navbar-brand .navbar-link::after{border-color:hsl(0deg,0%,4%)}.navbar.is-white .navbar-burger{color:hsl(0deg,0%,4%)}@media screen and (min-width:1024px){.navbar.is-white .navbar-end .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-start>.navbar-item{color:hsl(0deg,0%,4%)}.navbar.is-white .navbar-end .navbar-link.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover{background-color:#f2f2f2;color:hsl(0deg,0%,4%)}.navbar.is-white .navbar-end .navbar-link::after,.navbar.is-white .navbar-start .navbar-link::after{border-color:hsl(0deg,0%,4%)}.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link{background-color:#f2f2f2;color:hsl(0deg,0%,4%)}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,4%)}}.navbar.is-black{background-color:hsl(0deg,0%,4%);color:hsl(0deg,0%,100%)}.navbar.is-black .navbar-brand .navbar-link,.navbar.is-black .navbar-brand>.navbar-item{color:hsl(0deg,0%,100%)}.navbar.is-black .navbar-brand .navbar-link.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover{background-color:#000;color:hsl(0deg,0%,100%)}.navbar.is-black .navbar-brand .navbar-link::after{border-color:hsl(0deg,0%,100%)}.navbar.is-black .navbar-burger{color:hsl(0deg,0%,100%)}@media screen and (min-width:1024px){.navbar.is-black .navbar-end .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-start>.navbar-item{color:hsl(0deg,0%,100%)}.navbar.is-black .navbar-end .navbar-link.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover{background-color:#000;color:hsl(0deg,0%,100%)}.navbar.is-black .navbar-end .navbar-link::after,.navbar.is-black .navbar-start .navbar-link::after{border-color:hsl(0deg,0%,100%)}.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link{background-color:#000;color:hsl(0deg,0%,100%)}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:hsl(0deg,0%,4%);color:hsl(0deg,0%,100%)}}.navbar.is-light{background-color:hsl(0deg,0%,96%);color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link,.navbar.is-light .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-light .navbar-end .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link::after,.navbar.is-light .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:hsl(0deg,0%,96%);color:rgba(0,0,0,.7)}}.navbar.is-dark{background-color:hsl(0deg,0%,21%);color:#fff}.navbar.is-dark .navbar-brand .navbar-link,.navbar.is-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-dark .navbar-brand .navbar-link.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-dark .navbar-end .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.navbar.is-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-dark .navbar-end .navbar-link.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-end .navbar-link::after,.navbar.is-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active{background-color:hsl(0deg,0%,21%);color:#fff}}.navbar.is-primary{background-color:hsl(171deg,100%,41%);color:#fff}.navbar.is-primary .navbar-brand .navbar-link,.navbar.is-primary .navbar-brand>.navbar-item{color:#fff}.navbar.is-primary .navbar-brand .navbar-link.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-primary .navbar-end .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.navbar.is-primary .navbar-start>.navbar-item{color:#fff}.navbar.is-primary .navbar-end .navbar-link.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-end .navbar-link::after,.navbar.is-primary .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active{background-color:hsl(171deg,100%,41%);color:#fff}}.navbar.is-link{background-color:hsl(229deg,53%,53%);color:#fff}.navbar.is-link .navbar-brand .navbar-link,.navbar.is-link .navbar-brand>.navbar-item{color:#fff}.navbar.is-link .navbar-brand .navbar-link.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover{background-color:#3a51bb;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-link .navbar-end .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-start>.navbar-item{color:#fff}.navbar.is-link .navbar-end .navbar-link.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover{background-color:#3a51bb;color:#fff}.navbar.is-link .navbar-end .navbar-link::after,.navbar.is-link .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link{background-color:#3a51bb;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:hsl(229deg,53%,53%);color:#fff}}.navbar.is-info{background-color:hsl(207deg,61%,53%);color:#fff}.navbar.is-info .navbar-brand .navbar-link,.navbar.is-info .navbar-brand>.navbar-item{color:#fff}.navbar.is-info .navbar-brand .navbar-link.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover{background-color:#3082c5;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-info .navbar-end .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-start>.navbar-item{color:#fff}.navbar.is-info .navbar-end .navbar-link.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover{background-color:#3082c5;color:#fff}.navbar.is-info .navbar-end .navbar-link::after,.navbar.is-info .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link{background-color:#3082c5;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:hsl(207deg,61%,53%);color:#fff}}.navbar.is-success{background-color:hsl(153deg,53%,53%);color:#fff}.navbar.is-success .navbar-brand .navbar-link,.navbar.is-success .navbar-brand>.navbar-item{color:#fff}.navbar.is-success .navbar-brand .navbar-link.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover{background-color:#3abb81;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-success .navbar-end .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-start>.navbar-item{color:#fff}.navbar.is-success .navbar-end .navbar-link.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover{background-color:#3abb81;color:#fff}.navbar.is-success .navbar-end .navbar-link::after,.navbar.is-success .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link{background-color:#3abb81;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:hsl(153deg,53%,53%);color:#fff}}.navbar.is-warning{background-color:hsl(44deg,100%,77%);color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link,.navbar.is-warning .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover{background-color:#ffd970;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-warning .navbar-end .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover{background-color:#ffd970;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link::after,.navbar.is-warning .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link{background-color:#ffd970;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:hsl(44deg,100%,77%);color:rgba(0,0,0,.7)}}.navbar.is-danger{background-color:hsl(348deg,86%,61%);color:#fff}.navbar.is-danger .navbar-brand .navbar-link,.navbar.is-danger .navbar-brand>.navbar-item{color:#fff}.navbar.is-danger .navbar-brand .navbar-link.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-danger .navbar-end .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-start>.navbar-item{color:#fff}.navbar.is-danger .navbar-end .navbar-link.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-end .navbar-link::after,.navbar.is-danger .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:hsl(348deg,86%,61%);color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 hsl(0deg,0%,96%)}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 hsl(0deg,0%,96%)}.navbar.is-fixed-top{top:0}body.has-navbar-fixed-top,html.has-navbar-fixed-top{padding-top:3.25rem}body.has-navbar-fixed-bottom,html.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:hsl(0deg,0%,29%);-moz-appearance:none;-webkit-appearance:none;appearance:none;background:0 0;border:none;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color,opacity,transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:first-child{top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,.05)}.navbar-burger.is-active span:first-child{transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:hsl(0deg,0%,29%);display:block;line-height:1.5;padding:.5rem .75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-.25rem;margin-right:-.25rem}.navbar-link,a.navbar-item{cursor:pointer}.navbar-link.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,a.navbar-item.is-active,a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover{background-color:hsl(0deg,0%,98%);color:hsl(229deg,53%,53%)}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:transparent;border-bottom-color:hsl(229deg,53%,53%)}.navbar-item.is-tab.is-active{background-color:transparent;border-bottom-color:hsl(229deg,53%,53%);border-bottom-style:solid;border-bottom-width:3px;color:hsl(229deg,53%,53%);padding-bottom:calc(.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:hsl(229deg,53%,53%);margin-top:-.375em;right:1.125em}.navbar-dropdown{font-size:.875rem;padding-bottom:.5rem;padding-top:.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:hsl(0deg,0%,96%);border:none;display:none;height:2px;margin:.5rem 0}@media screen and (max-width:1023px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:hsl(0deg,0%,100%);box-shadow:0 8px 16px rgba(10,10,10,.1);padding:.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}body.has-navbar-fixed-top-touch,html.has-navbar-fixed-top-touch{padding-top:3.25rem}body.has-navbar-fixed-bottom-touch,html.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width:1024px){.navbar,.navbar-end,.navbar-menu,.navbar-start{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-end,.navbar.is-spaced .navbar-start{align-items:center}.navbar.is-spaced .navbar-link,.navbar.is-spaced a.navbar-item{border-radius:4px}.navbar.is-transparent .navbar-link.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover{background-color:transparent!important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent!important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:hsl(0deg,0%,96%);color:hsl(0deg,0%,4%)}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:hsl(0deg,0%,96%);color:hsl(229deg,53%,53%)}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(.25em,-.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid hsl(0deg,0%,86%);border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:hsl(0deg,0%,100%);border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid hsl(0deg,0%,86%);box-shadow:0 8px 8px rgba(10,10,10,.1);display:none;font-size:.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:hsl(0deg,0%,96%);color:hsl(0deg,0%,4%)}.navbar-dropdown a.navbar-item.is-active{background-color:hsl(0deg,0%,96%);color:hsl(229deg,53%,53%)}.navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-dropdown{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity,transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.container>.navbar .navbar-brand,.navbar>.container .navbar-brand{margin-left:-.75rem}.container>.navbar .navbar-menu,.navbar>.container .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-desktop{top:0}body.has-navbar-fixed-top-desktop,html.has-navbar-fixed-top-desktop{padding-top:3.25rem}body.has-navbar-fixed-bottom-desktop,html.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}body.has-spaced-navbar-fixed-top,html.has-spaced-navbar-fixed-top{padding-top:5.25rem}body.has-spaced-navbar-fixed-bottom,html.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}.navbar-link.is-active,a.navbar-item.is-active{color:hsl(0deg,0%,4%)}.navbar-link.is-active:not(:focus):not(:hover),a.navbar-item.is-active:not(:focus):not(:hover){background-color:transparent}.navbar-item.has-dropdown.is-active .navbar-link,.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link{background-color:hsl(0deg,0%,98%)}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-next,.pagination.is-rounded .pagination-previous{padding-left:1em;padding-right:1em;border-radius:9999px}.pagination.is-rounded .pagination-link{border-radius:9999px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-link,.pagination-next,.pagination-previous{border-color:hsl(0deg,0%,86%);color:hsl(0deg,0%,21%);min-width:2.5em}.pagination-link:hover,.pagination-next:hover,.pagination-previous:hover{border-color:hsl(0deg,0%,71%);color:hsl(0deg,0%,21%)}.pagination-link:focus,.pagination-next:focus,.pagination-previous:focus{border-color:hsl(229deg,53%,53%)}.pagination-link:active,.pagination-next:active,.pagination-previous:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2)}.pagination-link.is-disabled,.pagination-link[disabled],.pagination-next.is-disabled,.pagination-next[disabled],.pagination-previous.is-disabled,.pagination-previous[disabled]{background-color:hsl(0deg,0%,86%);border-color:hsl(0deg,0%,86%);box-shadow:none;color:hsl(0deg,0%,48%);opacity:.5}.pagination-next,.pagination-previous{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:hsl(229deg,53%,53%);border-color:hsl(229deg,53%,53%);color:#fff}.pagination-ellipsis{color:hsl(0deg,0%,71%);pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width:768px){.pagination{flex-wrap:wrap}.pagination-next,.pagination-previous{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width:769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,4%)}.panel.is-white .panel-tabs a.is-active{border-bottom-color:hsl(0deg,0%,100%)}.panel.is-white .panel-block.is-active .panel-icon{color:hsl(0deg,0%,100%)}.panel.is-black .panel-heading{background-color:hsl(0deg,0%,4%);color:hsl(0deg,0%,100%)}.panel.is-black .panel-tabs a.is-active{border-bottom-color:hsl(0deg,0%,4%)}.panel.is-black .panel-block.is-active .panel-icon{color:hsl(0deg,0%,4%)}.panel.is-light .panel-heading{background-color:hsl(0deg,0%,96%);color:rgba(0,0,0,.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:hsl(0deg,0%,96%)}.panel.is-light .panel-block.is-active .panel-icon{color:hsl(0deg,0%,96%)}.panel.is-dark .panel-heading{background-color:hsl(0deg,0%,21%);color:#fff}.panel.is-dark .panel-tabs a.is-active{border-bottom-color:hsl(0deg,0%,21%)}.panel.is-dark .panel-block.is-active .panel-icon{color:hsl(0deg,0%,21%)}.panel.is-primary .panel-heading{background-color:hsl(171deg,100%,41%);color:#fff}.panel.is-primary .panel-tabs a.is-active{border-bottom-color:hsl(171deg,100%,41%)}.panel.is-primary .panel-block.is-active .panel-icon{color:hsl(171deg,100%,41%)}.panel.is-link .panel-heading{background-color:hsl(229deg,53%,53%);color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:hsl(229deg,53%,53%)}.panel.is-link .panel-block.is-active .panel-icon{color:hsl(229deg,53%,53%)}.panel.is-info .panel-heading{background-color:hsl(207deg,61%,53%);color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:hsl(207deg,61%,53%)}.panel.is-info .panel-block.is-active .panel-icon{color:hsl(207deg,61%,53%)}.panel.is-success .panel-heading{background-color:hsl(153deg,53%,53%);color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:hsl(153deg,53%,53%)}.panel.is-success .panel-block.is-active .panel-icon{color:hsl(153deg,53%,53%)}.panel.is-warning .panel-heading{background-color:hsl(44deg,100%,77%);color:rgba(0,0,0,.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:hsl(44deg,100%,77%)}.panel.is-warning .panel-block.is-active .panel-icon{color:hsl(44deg,100%,77%)}.panel.is-danger .panel-heading{background-color:hsl(348deg,86%,61%);color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:hsl(348deg,86%,61%)}.panel.is-danger .panel-block.is-active .panel-icon{color:hsl(348deg,86%,61%)}.panel-block:not(:last-child),.panel-tabs:not(:last-child){border-bottom:1px solid hsl(0deg,0%,93%)}.panel-heading{background-color:hsl(0deg,0%,93%);border-radius:6px 6px 0 0;color:hsl(0deg,0%,21%);font-size:1.25em;font-weight:700;line-height:1.25;padding:.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid hsl(0deg,0%,86%);margin-bottom:-1px;padding:.5em}.panel-tabs a.is-active{border-bottom-color:hsl(0deg,0%,29%);color:hsl(0deg,0%,21%)}.panel-list a{color:hsl(0deg,0%,29%)}.panel-list a:hover{color:hsl(229deg,53%,53%)}.panel-block{align-items:center;color:hsl(0deg,0%,21%);display:flex;justify-content:flex-start;padding:.5em .75em}.panel-block input[type=checkbox]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:hsl(229deg,53%,53%);color:hsl(0deg,0%,21%)}.panel-block.is-active .panel-icon{color:hsl(229deg,53%,53%)}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:hsl(0deg,0%,96%)}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:hsl(0deg,0%,48%);margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:hsl(0deg,0%,86%);border-bottom-style:solid;border-bottom-width:1px;color:hsl(0deg,0%,29%);display:flex;justify-content:center;margin-bottom:-1px;padding:.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:hsl(0deg,0%,21%);color:hsl(0deg,0%,21%)}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:hsl(229deg,53%,53%);color:hsl(229deg,53%,53%)}.tabs ul{align-items:center;border-bottom-color:hsl(0deg,0%,86%);border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:.75em;padding-right:.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:hsl(0deg,0%,96%);border-bottom-color:hsl(0deg,0%,86%)}.tabs.is-boxed li.is-active a{background-color:hsl(0deg,0%,100%);border-color:hsl(0deg,0%,86%);border-bottom-color:transparent!important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:hsl(0deg,0%,86%);border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:hsl(0deg,0%,96%);border-color:hsl(0deg,0%,71%);z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:hsl(229deg,53%,53%);border-color:hsl(229deg,53%,53%);color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}.tabs.is-small{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none;width:unset}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0}.columns.is-mobile>.column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>.column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>.column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>.column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>.column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width:768px){.column.is-narrow-mobile{flex:none;width:unset}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0}.column.is-1-mobile{flex:none;width:8.33333337%}.column.is-offset-1-mobile{margin-left:8.33333337%}.column.is-2-mobile{flex:none;width:16.66666674%}.column.is-offset-2-mobile{margin-left:16.66666674%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333337%}.column.is-offset-4-mobile{margin-left:33.33333337%}.column.is-5-mobile{flex:none;width:41.66666674%}.column.is-offset-5-mobile{margin-left:41.66666674%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333337%}.column.is-offset-7-mobile{margin-left:58.33333337%}.column.is-8-mobile{flex:none;width:66.66666674%}.column.is-offset-8-mobile{margin-left:66.66666674%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333337%}.column.is-offset-10-mobile{margin-left:83.33333337%}.column.is-11-mobile{flex:none;width:91.66666674%}.column.is-offset-11-mobile{margin-left:91.66666674%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width:769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none;width:unset}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333337%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333337%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66666674%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66666674%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333337%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333337%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66666674%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66666674%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333337%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333337%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66666674%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66666674%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333337%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333337%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66666674%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66666674%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width:1023px){.column.is-narrow-touch{flex:none;width:unset}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0}.column.is-1-touch{flex:none;width:8.33333337%}.column.is-offset-1-touch{margin-left:8.33333337%}.column.is-2-touch{flex:none;width:16.66666674%}.column.is-offset-2-touch{margin-left:16.66666674%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333337%}.column.is-offset-4-touch{margin-left:33.33333337%}.column.is-5-touch{flex:none;width:41.66666674%}.column.is-offset-5-touch{margin-left:41.66666674%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333337%}.column.is-offset-7-touch{margin-left:58.33333337%}.column.is-8-touch{flex:none;width:66.66666674%}.column.is-offset-8-touch{margin-left:66.66666674%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333337%}.column.is-offset-10-touch{margin-left:83.33333337%}.column.is-11-touch{flex:none;width:91.66666674%}.column.is-offset-11-touch{margin-left:91.66666674%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width:1024px){.column.is-narrow-desktop{flex:none;width:unset}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0}.column.is-1-desktop{flex:none;width:8.33333337%}.column.is-offset-1-desktop{margin-left:8.33333337%}.column.is-2-desktop{flex:none;width:16.66666674%}.column.is-offset-2-desktop{margin-left:16.66666674%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333337%}.column.is-offset-4-desktop{margin-left:33.33333337%}.column.is-5-desktop{flex:none;width:41.66666674%}.column.is-offset-5-desktop{margin-left:41.66666674%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333337%}.column.is-offset-7-desktop{margin-left:58.33333337%}.column.is-8-desktop{flex:none;width:66.66666674%}.column.is-offset-8-desktop{margin-left:66.66666674%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333337%}.column.is-offset-10-desktop{margin-left:83.33333337%}.column.is-11-desktop{flex:none;width:91.66666674%}.column.is-offset-11-desktop{margin-left:91.66666674%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width:1216px){.column.is-narrow-widescreen{flex:none;width:unset}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0}.column.is-1-widescreen{flex:none;width:8.33333337%}.column.is-offset-1-widescreen{margin-left:8.33333337%}.column.is-2-widescreen{flex:none;width:16.66666674%}.column.is-offset-2-widescreen{margin-left:16.66666674%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333337%}.column.is-offset-4-widescreen{margin-left:33.33333337%}.column.is-5-widescreen{flex:none;width:41.66666674%}.column.is-offset-5-widescreen{margin-left:41.66666674%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333337%}.column.is-offset-7-widescreen{margin-left:58.33333337%}.column.is-8-widescreen{flex:none;width:66.66666674%}.column.is-offset-8-widescreen{margin-left:66.66666674%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333337%}.column.is-offset-10-widescreen{margin-left:83.33333337%}.column.is-11-widescreen{flex:none;width:91.66666674%}.column.is-offset-11-widescreen{margin-left:91.66666674%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width:1408px){.column.is-narrow-fullhd{flex:none;width:unset}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0}.column.is-1-fullhd{flex:none;width:8.33333337%}.column.is-offset-1-fullhd{margin-left:8.33333337%}.column.is-2-fullhd{flex:none;width:16.66666674%}.column.is-offset-2-fullhd{margin-left:16.66666674%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333337%}.column.is-offset-4-fullhd{margin-left:33.33333337%}.column.is-5-fullhd{flex:none;width:41.66666674%}.column.is-offset-5-fullhd{margin-left:41.66666674%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333337%}.column.is-offset-7-fullhd{margin-left:58.33333337%}.column.is-8-fullhd{flex:none;width:66.66666674%}.column.is-offset-8-fullhd{margin-left:66.66666674%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333337%}.column.is-offset-10-fullhd{margin-left:83.33333337%}.column.is-11-fullhd{flex:none;width:91.66666674%}.column.is-offset-11-fullhd{margin-left:91.66666674%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0!important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width:769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width:1024px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap:0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap:0rem}@media screen and (max-width:768px){.columns.is-variable.is-0-mobile{--columnGap:0rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-0-tablet{--columnGap:0rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-0-tablet-only{--columnGap:0rem}}@media screen and (max-width:1023px){.columns.is-variable.is-0-touch{--columnGap:0rem}}@media screen and (min-width:1024px){.columns.is-variable.is-0-desktop{--columnGap:0rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-0-desktop-only{--columnGap:0rem}}@media screen and (min-width:1216px){.columns.is-variable.is-0-widescreen{--columnGap:0rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-0-widescreen-only{--columnGap:0rem}}@media screen and (min-width:1408px){.columns.is-variable.is-0-fullhd{--columnGap:0rem}}.columns.is-variable.is-1{--columnGap:0.25rem}@media screen and (max-width:768px){.columns.is-variable.is-1-mobile{--columnGap:0.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-1-tablet{--columnGap:0.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-1-tablet-only{--columnGap:0.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-1-touch{--columnGap:0.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-1-desktop{--columnGap:0.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-1-desktop-only{--columnGap:0.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-1-widescreen{--columnGap:0.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-1-widescreen-only{--columnGap:0.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-1-fullhd{--columnGap:0.25rem}}.columns.is-variable.is-2{--columnGap:0.5rem}@media screen and (max-width:768px){.columns.is-variable.is-2-mobile{--columnGap:0.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-2-tablet{--columnGap:0.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-2-tablet-only{--columnGap:0.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-2-touch{--columnGap:0.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-2-desktop{--columnGap:0.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-2-desktop-only{--columnGap:0.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-2-widescreen{--columnGap:0.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-2-widescreen-only{--columnGap:0.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-2-fullhd{--columnGap:0.5rem}}.columns.is-variable.is-3{--columnGap:0.75rem}@media screen and (max-width:768px){.columns.is-variable.is-3-mobile{--columnGap:0.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-3-tablet{--columnGap:0.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-3-tablet-only{--columnGap:0.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-3-touch{--columnGap:0.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-3-desktop{--columnGap:0.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-3-desktop-only{--columnGap:0.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-3-widescreen{--columnGap:0.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-3-widescreen-only{--columnGap:0.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-3-fullhd{--columnGap:0.75rem}}.columns.is-variable.is-4{--columnGap:1rem}@media screen and (max-width:768px){.columns.is-variable.is-4-mobile{--columnGap:1rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-4-tablet{--columnGap:1rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-4-tablet-only{--columnGap:1rem}}@media screen and (max-width:1023px){.columns.is-variable.is-4-touch{--columnGap:1rem}}@media screen and (min-width:1024px){.columns.is-variable.is-4-desktop{--columnGap:1rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-4-desktop-only{--columnGap:1rem}}@media screen and (min-width:1216px){.columns.is-variable.is-4-widescreen{--columnGap:1rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-4-widescreen-only{--columnGap:1rem}}@media screen and (min-width:1408px){.columns.is-variable.is-4-fullhd{--columnGap:1rem}}.columns.is-variable.is-5{--columnGap:1.25rem}@media screen and (max-width:768px){.columns.is-variable.is-5-mobile{--columnGap:1.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-5-tablet{--columnGap:1.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-5-tablet-only{--columnGap:1.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-5-touch{--columnGap:1.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-5-desktop{--columnGap:1.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-5-desktop-only{--columnGap:1.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-5-widescreen{--columnGap:1.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-5-widescreen-only{--columnGap:1.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-5-fullhd{--columnGap:1.25rem}}.columns.is-variable.is-6{--columnGap:1.5rem}@media screen and (max-width:768px){.columns.is-variable.is-6-mobile{--columnGap:1.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-6-tablet{--columnGap:1.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-6-tablet-only{--columnGap:1.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-6-touch{--columnGap:1.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-6-desktop{--columnGap:1.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-6-desktop-only{--columnGap:1.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-6-widescreen{--columnGap:1.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-6-widescreen-only{--columnGap:1.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-6-fullhd{--columnGap:1.5rem}}.columns.is-variable.is-7{--columnGap:1.75rem}@media screen and (max-width:768px){.columns.is-variable.is-7-mobile{--columnGap:1.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-7-tablet{--columnGap:1.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-7-tablet-only{--columnGap:1.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-7-touch{--columnGap:1.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-7-desktop{--columnGap:1.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-7-desktop-only{--columnGap:1.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-7-widescreen{--columnGap:1.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-7-widescreen-only{--columnGap:1.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-7-fullhd{--columnGap:1.75rem}}.columns.is-variable.is-8{--columnGap:2rem}@media screen and (max-width:768px){.columns.is-variable.is-8-mobile{--columnGap:2rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-8-tablet{--columnGap:2rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-8-tablet-only{--columnGap:2rem}}@media screen and (max-width:1023px){.columns.is-variable.is-8-touch{--columnGap:2rem}}@media screen and (min-width:1024px){.columns.is-variable.is-8-desktop{--columnGap:2rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-8-desktop-only{--columnGap:2rem}}@media screen and (min-width:1216px){.columns.is-variable.is-8-widescreen{--columnGap:2rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-8-widescreen-only{--columnGap:2rem}}@media screen and (min-width:1408px){.columns.is-variable.is-8-fullhd{--columnGap:2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:-webkit-min-content;min-height:-moz-min-content;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0!important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem!important}@media screen and (min-width:769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333337%}.tile.is-2{flex:none;width:16.66666674%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333337%}.tile.is-5{flex:none;width:41.66666674%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333337%}.tile.is-8{flex:none;width:66.66666674%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333337%}.tile.is-11{flex:none;width:91.66666674%}.tile.is-12{flex:none;width:100%}}.has-text-white{color:hsl(0deg,0%,100%)!important}a.has-text-white:focus,a.has-text-white:hover{color:#e6e6e6!important}.has-background-white{background-color:hsl(0deg,0%,100%)!important}.has-text-black{color:hsl(0deg,0%,4%)!important}a.has-text-black:focus,a.has-text-black:hover{color:#000!important}.has-background-black{background-color:hsl(0deg,0%,4%)!important}.has-text-light{color:hsl(0deg,0%,96%)!important}a.has-text-light:focus,a.has-text-light:hover{color:#dbdbdb!important}.has-background-light{background-color:hsl(0deg,0%,96%)!important}.has-text-dark{color:hsl(0deg,0%,21%)!important}a.has-text-dark:focus,a.has-text-dark:hover{color:#1c1c1c!important}.has-background-dark{background-color:hsl(0deg,0%,21%)!important}.has-text-primary{color:hsl(171deg,100%,41%)!important}a.has-text-primary:focus,a.has-text-primary:hover{color:#009e86!important}.has-background-primary{background-color:hsl(171deg,100%,41%)!important}.has-text-primary-light{color:#ebfffc!important}a.has-text-primary-light:focus,a.has-text-primary-light:hover{color:#b8fff4!important}.has-background-primary-light{background-color:#ebfffc!important}.has-text-primary-dark{color:#00947e!important}a.has-text-primary-dark:focus,a.has-text-primary-dark:hover{color:#00c7a9!important}.has-background-primary-dark{background-color:#00947e!important}.has-text-link{color:hsl(229deg,53%,53%)!important}a.has-text-link:focus,a.has-text-link:hover{color:#3449a8!important}.has-background-link{background-color:hsl(229deg,53%,53%)!important}.has-text-link-light{color:#eff1fa!important}a.has-text-link-light:focus,a.has-text-link-light:hover{color:#c8cfee!important}.has-background-link-light{background-color:#eff1fa!important}.has-text-link-dark{color:#3850b7!important}a.has-text-link-dark:focus,a.has-text-link-dark:hover{color:#576dcb!important}.has-background-link-dark{background-color:#3850b7!important}.has-text-info{color:hsl(207deg,61%,53%)!important}a.has-text-info:focus,a.has-text-info:hover{color:#2b74b1!important}.has-background-info{background-color:hsl(207deg,61%,53%)!important}.has-text-info-light{color:#eff5fb!important}a.has-text-info-light:focus,a.has-text-info-light:hover{color:#c6ddf1!important}.has-background-info-light{background-color:#eff5fb!important}.has-text-info-dark{color:#296fa8!important}a.has-text-info-dark:focus,a.has-text-info-dark:hover{color:#368ace!important}.has-background-info-dark{background-color:#296fa8!important}.has-text-success{color:hsl(153deg,53%,53%)!important}a.has-text-success:focus,a.has-text-success:hover{color:#34a873!important}.has-background-success{background-color:hsl(153deg,53%,53%)!important}.has-text-success-light{color:#effaf5!important}a.has-text-success-light:focus,a.has-text-success-light:hover{color:#c8eedd!important}.has-background-success-light{background-color:#effaf5!important}.has-text-success-dark{color:#257953!important}a.has-text-success-dark:focus,a.has-text-success-dark:hover{color:#31a06e!important}.has-background-success-dark{background-color:#257953!important}.has-text-warning{color:hsl(44deg,100%,77%)!important}a.has-text-warning:focus,a.has-text-warning:hover{color:#ffd257!important}.has-background-warning{background-color:hsl(44deg,100%,77%)!important}.has-text-warning-light{color:#fffaeb!important}a.has-text-warning-light:focus,a.has-text-warning-light:hover{color:#ffecb8!important}.has-background-warning-light{background-color:#fffaeb!important}.has-text-warning-dark{color:#946c00!important}a.has-text-warning-dark:focus,a.has-text-warning-dark:hover{color:#c79200!important}.has-background-warning-dark{background-color:#946c00!important}.has-text-danger{color:hsl(348deg,86%,61%)!important}a.has-text-danger:focus,a.has-text-danger:hover{color:#ee1742!important}.has-background-danger{background-color:hsl(348deg,86%,61%)!important}.has-text-danger-light{color:#feecf0!important}a.has-text-danger-light:focus,a.has-text-danger-light:hover{color:#fabdc9!important}.has-background-danger-light{background-color:#feecf0!important}.has-text-danger-dark{color:#cc0f35!important}a.has-text-danger-dark:focus,a.has-text-danger-dark:hover{color:#ee2049!important}.has-background-danger-dark{background-color:#cc0f35!important}.has-text-black-bis{color:hsl(0deg,0%,7%)!important}.has-background-black-bis{background-color:hsl(0deg,0%,7%)!important}.has-text-black-ter{color:hsl(0deg,0%,14%)!important}.has-background-black-ter{background-color:hsl(0deg,0%,14%)!important}.has-text-grey-darker{color:hsl(0deg,0%,21%)!important}.has-background-grey-darker{background-color:hsl(0deg,0%,21%)!important}.has-text-grey-dark{color:hsl(0deg,0%,29%)!important}.has-background-grey-dark{background-color:hsl(0deg,0%,29%)!important}.has-text-grey{color:hsl(0deg,0%,48%)!important}.has-background-grey{background-color:hsl(0deg,0%,48%)!important}.has-text-grey-light{color:hsl(0deg,0%,71%)!important}.has-background-grey-light{background-color:hsl(0deg,0%,71%)!important}.has-text-grey-lighter{color:hsl(0deg,0%,86%)!important}.has-background-grey-lighter{background-color:hsl(0deg,0%,86%)!important}.has-text-white-ter{color:hsl(0deg,0%,96%)!important}.has-background-white-ter{background-color:hsl(0deg,0%,96%)!important}.has-text-white-bis{color:hsl(0deg,0%,98%)!important}.has-background-white-bis{background-color:hsl(0deg,0%,98%)!important}.is-flex-direction-row{flex-direction:row!important}.is-flex-direction-row-reverse{flex-direction:row-reverse!important}.is-flex-direction-column{flex-direction:column!important}.is-flex-direction-column-reverse{flex-direction:column-reverse!important}.is-flex-wrap-nowrap{flex-wrap:nowrap!important}.is-flex-wrap-wrap{flex-wrap:wrap!important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse!important}.is-justify-content-flex-start{justify-content:flex-start!important}.is-justify-content-flex-end{justify-content:flex-end!important}.is-justify-content-center{justify-content:center!important}.is-justify-content-space-between{justify-content:space-between!important}.is-justify-content-space-around{justify-content:space-around!important}.is-justify-content-space-evenly{justify-content:space-evenly!important}.is-justify-content-start{justify-content:start!important}.is-justify-content-end{justify-content:end!important}.is-justify-content-left{justify-content:left!important}.is-justify-content-right{justify-content:right!important}.is-align-content-flex-start{align-content:flex-start!important}.is-align-content-flex-end{align-content:flex-end!important}.is-align-content-center{align-content:center!important}.is-align-content-space-between{align-content:space-between!important}.is-align-content-space-around{align-content:space-around!important}.is-align-content-space-evenly{align-content:space-evenly!important}.is-align-content-stretch{align-content:stretch!important}.is-align-content-start{align-content:start!important}.is-align-content-end{align-content:end!important}.is-align-content-baseline{align-content:baseline!important}.is-align-items-stretch{align-items:stretch!important}.is-align-items-flex-start{align-items:flex-start!important}.is-align-items-flex-end{align-items:flex-end!important}.is-align-items-center{align-items:center!important}.is-align-items-baseline{align-items:baseline!important}.is-align-items-start{align-items:start!important}.is-align-items-end{align-items:end!important}.is-align-items-self-start{align-items:self-start!important}.is-align-items-self-end{align-items:self-end!important}.is-align-self-auto{align-self:auto!important}.is-align-self-flex-start{align-self:flex-start!important}.is-align-self-flex-end{align-self:flex-end!important}.is-align-self-center{align-self:center!important}.is-align-self-baseline{align-self:baseline!important}.is-align-self-stretch{align-self:stretch!important}.is-flex-grow-0{flex-grow:0!important}.is-flex-grow-1{flex-grow:1!important}.is-flex-grow-2{flex-grow:2!important}.is-flex-grow-3{flex-grow:3!important}.is-flex-grow-4{flex-grow:4!important}.is-flex-grow-5{flex-grow:5!important}.is-flex-shrink-0{flex-shrink:0!important}.is-flex-shrink-1{flex-shrink:1!important}.is-flex-shrink-2{flex-shrink:2!important}.is-flex-shrink-3{flex-shrink:3!important}.is-flex-shrink-4{flex-shrink:4!important}.is-flex-shrink-5{flex-shrink:5!important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left!important}.is-pulled-right{float:right!important}.is-radiusless{border-radius:0!important}.is-shadowless{box-shadow:none!important}.is-clickable{cursor:pointer!important;pointer-events:all!important}.is-clipped{overflow:hidden!important}.is-relative{position:relative!important}.is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.m-auto{margin:auto!important}.mt-auto{margin-top:auto!important}.mr-auto{margin-right:auto!important}.mb-auto{margin-bottom:auto!important}.ml-auto{margin-left:auto!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.p-auto{padding:auto!important}.pt-auto{padding-top:auto!important}.pr-auto{padding-right:auto!important}.pb-auto{padding-bottom:auto!important}.pl-auto{padding-left:auto!important}.px-auto{padding-left:auto!important;padding-right:auto!important}.py-auto{padding-top:auto!important;padding-bottom:auto!important}.is-size-1{font-size:3rem!important}.is-size-2{font-size:2.5rem!important}.is-size-3{font-size:2rem!important}.is-size-4{font-size:1.5rem!important}.is-size-5{font-size:1.25rem!important}.is-size-6{font-size:1rem!important}.is-size-7{font-size:.75rem!important}@media screen and (max-width:768px){.is-size-1-mobile{font-size:3rem!important}.is-size-2-mobile{font-size:2.5rem!important}.is-size-3-mobile{font-size:2rem!important}.is-size-4-mobile{font-size:1.5rem!important}.is-size-5-mobile{font-size:1.25rem!important}.is-size-6-mobile{font-size:1rem!important}.is-size-7-mobile{font-size:.75rem!important}}@media screen and (min-width:769px),print{.is-size-1-tablet{font-size:3rem!important}.is-size-2-tablet{font-size:2.5rem!important}.is-size-3-tablet{font-size:2rem!important}.is-size-4-tablet{font-size:1.5rem!important}.is-size-5-tablet{font-size:1.25rem!important}.is-size-6-tablet{font-size:1rem!important}.is-size-7-tablet{font-size:.75rem!important}}@media screen and (max-width:1023px){.is-size-1-touch{font-size:3rem!important}.is-size-2-touch{font-size:2.5rem!important}.is-size-3-touch{font-size:2rem!important}.is-size-4-touch{font-size:1.5rem!important}.is-size-5-touch{font-size:1.25rem!important}.is-size-6-touch{font-size:1rem!important}.is-size-7-touch{font-size:.75rem!important}}@media screen and (min-width:1024px){.is-size-1-desktop{font-size:3rem!important}.is-size-2-desktop{font-size:2.5rem!important}.is-size-3-desktop{font-size:2rem!important}.is-size-4-desktop{font-size:1.5rem!important}.is-size-5-desktop{font-size:1.25rem!important}.is-size-6-desktop{font-size:1rem!important}.is-size-7-desktop{font-size:.75rem!important}}@media screen and (min-width:1216px){.is-size-1-widescreen{font-size:3rem!important}.is-size-2-widescreen{font-size:2.5rem!important}.is-size-3-widescreen{font-size:2rem!important}.is-size-4-widescreen{font-size:1.5rem!important}.is-size-5-widescreen{font-size:1.25rem!important}.is-size-6-widescreen{font-size:1rem!important}.is-size-7-widescreen{font-size:.75rem!important}}@media screen and (min-width:1408px){.is-size-1-fullhd{font-size:3rem!important}.is-size-2-fullhd{font-size:2.5rem!important}.is-size-3-fullhd{font-size:2rem!important}.is-size-4-fullhd{font-size:1.5rem!important}.is-size-5-fullhd{font-size:1.25rem!important}.is-size-6-fullhd{font-size:1rem!important}.is-size-7-fullhd{font-size:.75rem!important}}.has-text-centered{text-align:center!important}.has-text-justified{text-align:justify!important}.has-text-left{text-align:left!important}.has-text-right{text-align:right!important}@media screen and (max-width:768px){.has-text-centered-mobile{text-align:center!important}}@media screen and (min-width:769px),print{.has-text-centered-tablet{text-align:center!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-centered-tablet-only{text-align:center!important}}@media screen and (max-width:1023px){.has-text-centered-touch{text-align:center!important}}@media screen and (min-width:1024px){.has-text-centered-desktop{text-align:center!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-centered-desktop-only{text-align:center!important}}@media screen and (min-width:1216px){.has-text-centered-widescreen{text-align:center!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-centered-widescreen-only{text-align:center!important}}@media screen and (min-width:1408px){.has-text-centered-fullhd{text-align:center!important}}@media screen and (max-width:768px){.has-text-justified-mobile{text-align:justify!important}}@media screen and (min-width:769px),print{.has-text-justified-tablet{text-align:justify!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-justified-tablet-only{text-align:justify!important}}@media screen and (max-width:1023px){.has-text-justified-touch{text-align:justify!important}}@media screen and (min-width:1024px){.has-text-justified-desktop{text-align:justify!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-justified-desktop-only{text-align:justify!important}}@media screen and (min-width:1216px){.has-text-justified-widescreen{text-align:justify!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-justified-widescreen-only{text-align:justify!important}}@media screen and (min-width:1408px){.has-text-justified-fullhd{text-align:justify!important}}@media screen and (max-width:768px){.has-text-left-mobile{text-align:left!important}}@media screen and (min-width:769px),print{.has-text-left-tablet{text-align:left!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-left-tablet-only{text-align:left!important}}@media screen and (max-width:1023px){.has-text-left-touch{text-align:left!important}}@media screen and (min-width:1024px){.has-text-left-desktop{text-align:left!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-left-desktop-only{text-align:left!important}}@media screen and (min-width:1216px){.has-text-left-widescreen{text-align:left!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-left-widescreen-only{text-align:left!important}}@media screen and (min-width:1408px){.has-text-left-fullhd{text-align:left!important}}@media screen and (max-width:768px){.has-text-right-mobile{text-align:right!important}}@media screen and (min-width:769px),print{.has-text-right-tablet{text-align:right!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-right-tablet-only{text-align:right!important}}@media screen and (max-width:1023px){.has-text-right-touch{text-align:right!important}}@media screen and (min-width:1024px){.has-text-right-desktop{text-align:right!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-right-desktop-only{text-align:right!important}}@media screen and (min-width:1216px){.has-text-right-widescreen{text-align:right!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-right-widescreen-only{text-align:right!important}}@media screen and (min-width:1408px){.has-text-right-fullhd{text-align:right!important}}.is-capitalized{text-transform:capitalize!important}.is-lowercase{text-transform:lowercase!important}.is-uppercase{text-transform:uppercase!important}.is-italic{font-style:italic!important}.is-underlined{text-decoration:underline!important}.has-text-weight-light{font-weight:300!important}.has-text-weight-normal{font-weight:400!important}.has-text-weight-medium{font-weight:500!important}.has-text-weight-semibold{font-weight:600!important}.has-text-weight-bold{font-weight:700!important}.is-family-primary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-secondary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-sans-serif{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-monospace{font-family:monospace!important}.is-family-code{font-family:monospace!important}.is-block{display:block!important}@media screen and (max-width:768px){.is-block-mobile{display:block!important}}@media screen and (min-width:769px),print{.is-block-tablet{display:block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-block-tablet-only{display:block!important}}@media screen and (max-width:1023px){.is-block-touch{display:block!important}}@media screen and (min-width:1024px){.is-block-desktop{display:block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-block-desktop-only{display:block!important}}@media screen and (min-width:1216px){.is-block-widescreen{display:block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-block-widescreen-only{display:block!important}}@media screen and (min-width:1408px){.is-block-fullhd{display:block!important}}.is-flex{display:flex!important}@media screen and (max-width:768px){.is-flex-mobile{display:flex!important}}@media screen and (min-width:769px),print{.is-flex-tablet{display:flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-flex-tablet-only{display:flex!important}}@media screen and (max-width:1023px){.is-flex-touch{display:flex!important}}@media screen and (min-width:1024px){.is-flex-desktop{display:flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-flex-desktop-only{display:flex!important}}@media screen and (min-width:1216px){.is-flex-widescreen{display:flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-flex-widescreen-only{display:flex!important}}@media screen and (min-width:1408px){.is-flex-fullhd{display:flex!important}}.is-inline{display:inline!important}@media screen and (max-width:768px){.is-inline-mobile{display:inline!important}}@media screen and (min-width:769px),print{.is-inline-tablet{display:inline!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-tablet-only{display:inline!important}}@media screen and (max-width:1023px){.is-inline-touch{display:inline!important}}@media screen and (min-width:1024px){.is-inline-desktop{display:inline!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-desktop-only{display:inline!important}}@media screen and (min-width:1216px){.is-inline-widescreen{display:inline!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-widescreen-only{display:inline!important}}@media screen and (min-width:1408px){.is-inline-fullhd{display:inline!important}}.is-inline-block{display:inline-block!important}@media screen and (max-width:768px){.is-inline-block-mobile{display:inline-block!important}}@media screen and (min-width:769px),print{.is-inline-block-tablet{display:inline-block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-block-tablet-only{display:inline-block!important}}@media screen and (max-width:1023px){.is-inline-block-touch{display:inline-block!important}}@media screen and (min-width:1024px){.is-inline-block-desktop{display:inline-block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-block-desktop-only{display:inline-block!important}}@media screen and (min-width:1216px){.is-inline-block-widescreen{display:inline-block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-block-widescreen-only{display:inline-block!important}}@media screen and (min-width:1408px){.is-inline-block-fullhd{display:inline-block!important}}.is-inline-flex{display:inline-flex!important}@media screen and (max-width:768px){.is-inline-flex-mobile{display:inline-flex!important}}@media screen and (min-width:769px),print{.is-inline-flex-tablet{display:inline-flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-flex-tablet-only{display:inline-flex!important}}@media screen and (max-width:1023px){.is-inline-flex-touch{display:inline-flex!important}}@media screen and (min-width:1024px){.is-inline-flex-desktop{display:inline-flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-flex-desktop-only{display:inline-flex!important}}@media screen and (min-width:1216px){.is-inline-flex-widescreen{display:inline-flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-flex-widescreen-only{display:inline-flex!important}}@media screen and (min-width:1408px){.is-inline-flex-fullhd{display:inline-flex!important}}.is-hidden{display:none!important}.is-sr-only{border:none!important;clip:rect(0,0,0,0)!important;height:.01em!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:.01em!important}@media screen and (max-width:768px){.is-hidden-mobile{display:none!important}}@media screen and (min-width:769px),print{.is-hidden-tablet{display:none!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-hidden-tablet-only{display:none!important}}@media screen and (max-width:1023px){.is-hidden-touch{display:none!important}}@media screen and (min-width:1024px){.is-hidden-desktop{display:none!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-hidden-desktop-only{display:none!important}}@media screen and (min-width:1216px){.is-hidden-widescreen{display:none!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-hidden-widescreen-only{display:none!important}}@media screen and (min-width:1408px){.is-hidden-fullhd{display:none!important}}.is-invisible{visibility:hidden!important}@media screen and (max-width:768px){.is-invisible-mobile{visibility:hidden!important}}@media screen and (min-width:769px),print{.is-invisible-tablet{visibility:hidden!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-invisible-tablet-only{visibility:hidden!important}}@media screen and (max-width:1023px){.is-invisible-touch{visibility:hidden!important}}@media screen and (min-width:1024px){.is-invisible-desktop{visibility:hidden!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-invisible-desktop-only{visibility:hidden!important}}@media screen and (min-width:1216px){.is-invisible-widescreen{visibility:hidden!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-invisible-widescreen-only{visibility:hidden!important}}@media screen and (min-width:1408px){.is-invisible-fullhd{visibility:hidden!important}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:0 0}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,4%)}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:hsl(0deg,0%,4%)}.hero.is-white .subtitle{color:rgba(10,10,10,.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:hsl(0deg,0%,4%)}@media screen and (max-width:1023px){.hero.is-white .navbar-menu{background-color:hsl(0deg,0%,100%)}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,.7)}.hero.is-white .navbar-link.is-active,.hero.is-white .navbar-link:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white a.navbar-item:hover{background-color:#f2f2f2;color:hsl(0deg,0%,4%)}.hero.is-white .tabs a{color:hsl(0deg,0%,4%);opacity:.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{color:hsl(0deg,0%,100%)!important;opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:hsl(0deg,0%,4%)}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:hsl(0deg,0%,4%);border-color:hsl(0deg,0%,4%);color:hsl(0deg,0%,100%)}.hero.is-white.is-bold{background-image:linear-gradient(141deg,#e8e3e4 0,hsl(0deg,0%,100%) 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg,#e8e3e4 0,hsl(0deg,0%,100%) 71%,#fff 100%)}}.hero.is-black{background-color:hsl(0deg,0%,4%);color:hsl(0deg,0%,100%)}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:hsl(0deg,0%,100%)}.hero.is-black .subtitle{color:rgba(255,255,255,.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:hsl(0deg,0%,100%)}@media screen and (max-width:1023px){.hero.is-black .navbar-menu{background-color:hsl(0deg,0%,4%)}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,.7)}.hero.is-black .navbar-link.is-active,.hero.is-black .navbar-link:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black a.navbar-item:hover{background-color:#000;color:hsl(0deg,0%,100%)}.hero.is-black .tabs a{color:hsl(0deg,0%,100%);opacity:.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{color:hsl(0deg,0%,4%)!important;opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:hsl(0deg,0%,100%)}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:hsl(0deg,0%,100%);border-color:hsl(0deg,0%,100%);color:hsl(0deg,0%,4%)}.hero.is-black.is-bold{background-image:linear-gradient(141deg,#000 0,hsl(0deg,0%,4%) 71%,#181616 100%)}@media screen and (max-width:768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg,#000 0,hsl(0deg,0%,4%) 71%,#181616 100%)}}.hero.is-light{background-color:hsl(0deg,0%,96%);color:rgba(0,0,0,.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,.7)}.hero.is-light .subtitle{color:rgba(0,0,0,.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-light .navbar-menu{background-color:hsl(0deg,0%,96%)}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,.7)}.hero.is-light .navbar-link.is-active,.hero.is-light .navbar-link:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.hero.is-light .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:hsl(0deg,0%,96%)!important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:hsl(0deg,0%,96%)}.hero.is-light.is-bold{background-image:linear-gradient(141deg,#dfd8d9 0,hsl(0deg,0%,96%) 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg,#dfd8d9 0,hsl(0deg,0%,96%) 71%,#fff 100%)}}.hero.is-dark{background-color:hsl(0deg,0%,21%);color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong{color:inherit}.hero.is-dark .title{color:#fff}.hero.is-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-dark .subtitle a:not(.button),.hero.is-dark .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-dark .navbar-menu{background-color:hsl(0deg,0%,21%)}}.hero.is-dark .navbar-item,.hero.is-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-dark .navbar-link.is-active,.hero.is-dark .navbar-link:hover,.hero.is-dark a.navbar-item.is-active,.hero.is-dark a.navbar-item:hover{background-color:#292929;color:#fff}.hero.is-dark .tabs a{color:#fff;opacity:.9}.hero.is-dark .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a{color:hsl(0deg,0%,21%)!important;opacity:1}.hero.is-dark .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:hsl(0deg,0%,21%)}.hero.is-dark.is-bold{background-image:linear-gradient(141deg,#1f191a 0,hsl(0deg,0%,21%) 71%,#46403f 100%)}@media screen and (max-width:768px){.hero.is-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1f191a 0,hsl(0deg,0%,21%) 71%,#46403f 100%)}}.hero.is-primary{background-color:hsl(171deg,100%,41%);color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong{color:inherit}.hero.is-primary .title{color:#fff}.hero.is-primary .subtitle{color:rgba(255,255,255,.9)}.hero.is-primary .subtitle a:not(.button),.hero.is-primary .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-primary .navbar-menu{background-color:hsl(171deg,100%,41%)}}.hero.is-primary .navbar-item,.hero.is-primary .navbar-link{color:rgba(255,255,255,.7)}.hero.is-primary .navbar-link.is-active,.hero.is-primary .navbar-link:hover,.hero.is-primary a.navbar-item.is-active,.hero.is-primary a.navbar-item:hover{background-color:#00b89c;color:#fff}.hero.is-primary .tabs a{color:#fff;opacity:.9}.hero.is-primary .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a{color:hsl(171deg,100%,41%)!important;opacity:1}.hero.is-primary .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:hsl(171deg,100%,41%)}.hero.is-primary.is-bold{background-image:linear-gradient(141deg,#009e6c 0,hsl(171deg,100%,41%) 71%,#00e7eb 100%)}@media screen and (max-width:768px){.hero.is-primary.is-bold .navbar-menu{background-image:linear-gradient(141deg,#009e6c 0,hsl(171deg,100%,41%) 71%,#00e7eb 100%)}}.hero.is-link{background-color:hsl(229deg,53%,53%);color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-link .navbar-menu{background-color:hsl(229deg,53%,53%)}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,.7)}.hero.is-link .navbar-link.is-active,.hero.is-link .navbar-link:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link a.navbar-item:hover{background-color:#3a51bb;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{color:hsl(229deg,53%,53%)!important;opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:hsl(229deg,53%,53%)}.hero.is-link.is-bold{background-image:linear-gradient(141deg,#2959b3 0,hsl(229deg,53%,53%) 71%,#5658d2 100%)}@media screen and (max-width:768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg,#2959b3 0,hsl(229deg,53%,53%) 71%,#5658d2 100%)}}.hero.is-info{background-color:hsl(207deg,61%,53%);color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-info .navbar-menu{background-color:hsl(207deg,61%,53%)}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,.7)}.hero.is-info .navbar-link.is-active,.hero.is-info .navbar-link:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info a.navbar-item:hover{background-color:#3082c5;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{color:hsl(207deg,61%,53%)!important;opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:hsl(207deg,61%,53%)}.hero.is-info.is-bold{background-image:linear-gradient(141deg,#208fbc 0,hsl(207deg,61%,53%) 71%,#4d83db 100%)}@media screen and (max-width:768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg,#208fbc 0,hsl(207deg,61%,53%) 71%,#4d83db 100%)}}.hero.is-success{background-color:hsl(153deg,53%,53%);color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-success .navbar-menu{background-color:hsl(153deg,53%,53%)}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,.7)}.hero.is-success .navbar-link.is-active,.hero.is-success .navbar-link:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success a.navbar-item:hover{background-color:#3abb81;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{color:hsl(153deg,53%,53%)!important;opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:hsl(153deg,53%,53%)}.hero.is-success.is-bold{background-image:linear-gradient(141deg,#29b35e 0,hsl(153deg,53%,53%) 71%,#56d2af 100%)}@media screen and (max-width:768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg,#29b35e 0,hsl(153deg,53%,53%) 71%,#56d2af 100%)}}.hero.is-warning{background-color:hsl(44deg,100%,77%);color:rgba(0,0,0,.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-warning .navbar-menu{background-color:hsl(44deg,100%,77%)}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,.7)}.hero.is-warning .navbar-link.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning a.navbar-item:hover{background-color:#ffd970;color:rgba(0,0,0,.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:hsl(44deg,100%,77%)!important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:hsl(44deg,100%,77%)}.hero.is-warning.is-bold{background-image:linear-gradient(141deg,#ffb657 0,hsl(44deg,100%,77%) 71%,#fff6a3 100%)}@media screen and (max-width:768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg,#ffb657 0,hsl(44deg,100%,77%) 71%,#fff6a3 100%)}}.hero.is-danger{background-color:hsl(348deg,86%,61%);color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-danger .navbar-menu{background-color:hsl(348deg,86%,61%)}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,.7)}.hero.is-danger .navbar-link.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger a.navbar-item:hover{background-color:#ef2e55;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{color:hsl(348deg,86%,61%)!important;opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:hsl(348deg,86%,61%)}.hero.is-danger.is-bold{background-image:linear-gradient(141deg,#fa0a62 0,hsl(348deg,86%,61%) 71%,#f7595f 100%)}@media screen and (max-width:768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg,#fa0a62 0,hsl(348deg,86%,61%) 71%,#f7595f 100%)}}.hero.is-small .hero-body{padding:1.5rem}@media screen and (min-width:769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width:769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body,.hero.is-halfheight .hero-body{align-items:center;display:flex}.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container,.hero.is-halfheight .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%,-50%,0)}.hero-video.is-transparent{opacity:.3}@media screen and (max-width:768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width:768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:.75rem}}@media screen and (min-width:769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-foot,.hero-head{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width:769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width:1024px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.footer{background-color:hsl(0deg,0%,98%);padding:3rem 1.5rem 6rem}.channel-icon{max-height:64px}.video-thumbnail{width:100%}.video-grid{display:grid;grid-row-gap:0.5vw;row-gap:.5vw;grid-column-gap:0.5vw;-moz-column-gap:0.5vw;column-gap:.5vw;grid-template-columns:repeat(2,minmax(0,1fr));grid-column:auto}@media screen and (min-width:769px),print{.video-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media screen and (min-width:1024px){.video-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media screen and (min-width:1216px){.video-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}@media screen and (min-width:1408px){.video-grid{grid-template-columns:repeat(6,minmax(0,1fr))}}.video-card{display:flex;flex-direction:column}.video-card-content{padding:0 .5vw}.video-card-content:last-child{padding-bottom:.5vw}.navbar-item{color:#fff}.overflow-x{overflow-x:auto} \ No newline at end of file diff --git a/ucast/static/ucast/css/fontawesome.css b/ucast/static/ucast/css/fontawesome.css deleted file mode 100644 index 9b2ac09..0000000 --- a/ucast/static/ucast/css/fontawesome.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2022 Fonticons, Inc. - */ -.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-duotone,.fa-light,.fa-regular,.fa-solid,.fa-thin,.fab,.fad,.fal,.far,.fas,.fat{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-a:before{content:"\41"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-anchor:before{content:"\f13d"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-anchor-lock:before{content:"\e4ad"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-ankh:before{content:"\f644"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-archway:before{content:"\f557"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-arrow-trend-down:before{content:"\e097"}.fa-arrow-trend-up:before{content:"\e098"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-arrows-spin:before{content:"\e4bb"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-asterisk:before{content:"\2a"}.fa-at:before{content:"\40"}.fa-atom:before{content:"\f5d2"}.fa-audio-description:before{content:"\f29e"}.fa-austral-sign:before{content:"\e0a9"}.fa-award:before{content:"\f559"}.fa-b:before{content:"\42"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-backward:before{content:"\f04a"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-bahai:before{content:"\f666"}.fa-baht-sign:before{content:"\e0ac"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-barcode:before{content:"\f02a"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-bell:before{content:"\f0f3"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bicycle:before{content:"\f206"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blog:before{content:"\f781"}.fa-bold:before{content:"\f032"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-book-bookmark:before{content:"\e0bb"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-bookmark:before{content:"\f02e"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-bore-hole:before{content:"\e4c3"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-bottle-water:before{content:"\e4c5"}.fa-bowl-food:before{content:"\e4c6"}.fa-bowl-rice:before{content:"\e2eb"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes-packing:before{content:"\e4c7"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-bread-slice:before{content:"\f7ec"}.fa-bridge:before{content:"\e4c8"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-bridge-water:before{content:"\e4ce"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broom:before{content:"\f51a"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-brush:before{content:"\f55d"}.fa-bucket:before{content:"\e4cf"}.fa-bug:before{content:"\f188"}.fa-bug-slash:before{content:"\e490"}.fa-bugs:before{content:"\e4d0"}.fa-building:before{content:"\f1ad"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-building-circle-check:before{content:"\e4d2"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-building-flag:before{content:"\e4d5"}.fa-building-lock:before{content:"\e4d6"}.fa-building-ngo:before{content:"\e4d7"}.fa-building-shield:before{content:"\e4d8"}.fa-building-un:before{content:"\e4d9"}.fa-building-user:before{content:"\e4da"}.fa-building-wheat:before{content:"\e4db"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-burst:before{content:"\e4dc"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-c:before{content:"\43"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-week:before{content:"\f784"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-camera-rotate:before{content:"\e0d8"}.fa-campground:before{content:"\f6bb"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-car-on:before{content:"\e4dd"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-car-side:before{content:"\f5e4"}.fa-car-tunnel:before{content:"\e4de"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-cart-plus:before{content:"\f217"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cedi-sign:before{content:"\e0df"}.fa-cent-sign:before{content:"\e3f5"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-charging-station:before{content:"\f5e7"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-chart-column:before{content:"\e0e3"}.fa-chart-gantt:before{content:"\e0e4"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-chart-simple:before{content:"\e473"}.fa-check:before{content:"\f00c"}.fa-check-double:before{content:"\f560"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-child-dress:before{content:"\e59c"}.fa-child-reaching:before{content:"\e59d"}.fa-child-rifle:before{content:"\e4e0"}.fa-children:before{content:"\e4e1"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-circle-nodes:before{content:"\e4e2"}.fa-circle-notch:before{content:"\f1ce"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-city:before{content:"\f64f"}.fa-clapperboard:before{content:"\e131"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clipboard-question:before{content:"\e4e3"}.fa-clipboard-user:before{content:"\f7f3"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-clover:before{content:"\e139"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-code-commit:before{content:"\f386"}.fa-code-compare:before{content:"\e13a"}.fa-code-fork:before{content:"\e13b"}.fa-code-merge:before{content:"\f387"}.fa-code-pull-request:before{content:"\e13c"}.fa-coins:before{content:"\f51e"}.fa-colon-sign:before{content:"\e140"}.fa-comment:before{content:"\f075"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-compress:before{content:"\f066"}.fa-computer:before{content:"\e4e5"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cow:before{content:"\f6c8"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-d:before{content:"\44"}.fa-database:before{content:"\f1c0"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-democrat:before{content:"\f747"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-dharmachakra:before{content:"\f655"}.fa-diagram-next:before{content:"\e476"}.fa-diagram-predecessor:before{content:"\e477"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-diagram-successor:before{content:"\e47a"}.fa-diamond:before{content:"\f219"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-disease:before{content:"\f7fa"}.fa-display:before{content:"\e163"}.fa-divide:before{content:"\f529"}.fa-dna:before{content:"\f471"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-dong-sign:before{content:"\e169"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dove:before{content:"\f4ba"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-download:before{content:"\f019"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-e:before{content:"\45"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elevator:before{content:"\e16d"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-equals:before{content:"\3d"}.fa-eraser:before{content:"\f12d"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-exclamation:before{content:"\21"}.fa-expand:before{content:"\f065"}.fa-explosion:before{content:"\e4e9"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-eye-slash:before{content:"\f070"}.fa-f:before{content:"\46"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-fan:before{content:"\f863"}.fa-faucet:before{content:"\e005"}.fa-faucet-drip:before{content:"\e006"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-ferry:before{content:"\e4ea"}.fa-file:before{content:"\f15b"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-file-audio:before{content:"\f1c7"}.fa-file-circle-check:before{content:"\e493"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-file-circle-plus:before{content:"\e4ee"}.fa-file-circle-question:before{content:"\e4ef"}.fa-file-circle-xmark:before{content:"\e494"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-excel:before{content:"\f1c3"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-file-medical:before{content:"\f477"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-shield:before{content:"\e4f0"}.fa-file-signature:before{content:"\f573"}.fa-file-video:before{content:"\f1c8"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-file-word:before{content:"\f1c2"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-burner:before{content:"\e4f1"}.fa-fire-extinguisher:before{content:"\f134"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-fish:before{content:"\f578"}.fa-fish-fins:before{content:"\e4f2"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flask-vial:before{content:"\e4f3"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-florin-sign:before{content:"\e184"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-folder-closed:before{content:"\e185"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-folder-tree:before{content:"\f802"}.fa-font:before{content:"\f031"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-franc-sign:before{content:"\e18f"}.fa-frog:before{content:"\f52e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-g:before{content:"\47"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-glass-water:before{content:"\e4f4"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-glasses:before{content:"\f530"}.fa-globe:before{content:"\f0ac"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-greater-than:before{content:"\3e"}.fa-greater-than-equal:before{content:"\f532"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-guarani-sign:before{content:"\e19a"}.fa-guitar:before{content:"\f7a6"}.fa-gun:before{content:"\e19b"}.fa-h:before{content:"\48"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-handcuffs:before{content:"\e4f8"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-hands-bound:before{content:"\e4f9"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-hands-clapping:before{content:"\e1a8"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-handshake:before{content:"\f2b5"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-hashtag:before{content:"\23"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-heart-circle-plus:before{content:"\e500"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-helicopter-symbol:before{content:"\e502"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-helmet-un:before{content:"\e503"}.fa-highlighter:before{content:"\f591"}.fa-hill-avalanche:before{content:"\e507"}.fa-hill-rockslide:before{content:"\e508"}.fa-hippo:before{content:"\f6ed"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hourglass-2:before,.fa-hourglass-half:before,.fa-hourglass:before{content:"\f254"}.fa-hourglass-empty:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-house-chimney-user:before{content:"\e065"}.fa-house-chimney-window:before{content:"\e00d"}.fa-house-circle-check:before{content:"\e509"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-house-crack:before{content:"\e3b1"}.fa-house-fire:before{content:"\e50c"}.fa-house-flag:before{content:"\e50d"}.fa-house-flood-water:before{content:"\e50e"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-house-lock:before{content:"\e510"}.fa-house-medical:before{content:"\e3b2"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-house-medical-flag:before{content:"\e514"}.fa-house-signal:before{content:"\e012"}.fa-house-tsunami:before{content:"\e515"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-hurricane:before{content:"\f751"}.fa-i:before{content:"\49"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-images:before{content:"\f302"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-italic:before{content:"\f033"}.fa-j:before{content:"\4a"}.fa-jar:before{content:"\e516"}.fa-jar-wheat:before{content:"\e517"}.fa-jedi:before{content:"\f669"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-jet-fighter-up:before{content:"\e518"}.fa-joint:before{content:"\f595"}.fa-jug-detergent:before{content:"\e519"}.fa-k:before{content:"\4b"}.fa-kaaba:before{content:"\f66b"}.fa-key:before{content:"\f084"}.fa-keyboard:before{content:"\f11c"}.fa-khanda:before{content:"\f66d"}.fa-kip-sign:before{content:"\e1c4"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-kitchen-set:before{content:"\e51a"}.fa-kiwi-bird:before{content:"\f535"}.fa-l:before{content:"\4c"}.fa-land-mine-on:before{content:"\e51b"}.fa-landmark:before{content:"\f66f"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-landmark-flag:before{content:"\e51c"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-file:before{content:"\e51d"}.fa-laptop-medical:before{content:"\f812"}.fa-lari-sign:before{content:"\e1c8"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-lemon:before{content:"\f094"}.fa-less-than:before{content:"\3c"}.fa-less-than-equal:before{content:"\f537"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-lines-leaning:before{content:"\e51e"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-lira-sign:before{content:"\f195"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-location-arrow:before{content:"\f124"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-location-pin-lock:before{content:"\e51f"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-locust:before{content:"\e520"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-m:before{content:"\4d"}.fa-magnet:before{content:"\f076"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-manat-sign:before{content:"\e1d5"}.fa-map:before{content:"\f279"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-pin:before{content:"\f276"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-and-venus:before{content:"\f224"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-mask:before{content:"\f6fa"}.fa-mask-face:before{content:"\e1d7"}.fa-mask-ventilator:before{content:"\e524"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-mattress-pillow:before{content:"\e525"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-medal:before{content:"\f5a2"}.fa-memory:before{content:"\f538"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-mill-sign:before{content:"\e1ed"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-mitten:before{content:"\f7b5"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-mobile-button:before{content:"\f10b"}.fa-mobile-retro:before{content:"\e527"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-money-bills:before{content:"\e1f3"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-mosquito-net:before{content:"\e52c"}.fa-motorcycle:before{content:"\f21c"}.fa-mound:before{content:"\e52d"}.fa-mountain:before{content:"\f6fc"}.fa-mountain-city:before{content:"\e52e"}.fa-mountain-sun:before{content:"\e52f"}.fa-mug-hot:before{content:"\f7b6"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-music:before{content:"\f001"}.fa-n:before{content:"\4e"}.fa-naira-sign:before{content:"\e1f6"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-not-equal:before{content:"\f53e"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-notes-medical:before{content:"\f481"}.fa-o:before{content:"\4f"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-oil-can:before{content:"\f613"}.fa-oil-well:before{content:"\e532"}.fa-om:before{content:"\f679"}.fa-otter:before{content:"\f700"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-p:before{content:"\50"}.fa-pager:before{content:"\f815"}.fa-paint-roller:before{content:"\f5aa"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-palette:before{content:"\f53f"}.fa-pallet:before{content:"\f482"}.fa-panorama:before{content:"\e209"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-passport:before{content:"\f5ab"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-pause:before{content:"\f04c"}.fa-paw:before{content:"\f1b0"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-people-group:before{content:"\e533"}.fa-people-line:before{content:"\e534"}.fa-people-pulling:before{content:"\e535"}.fa-people-robbery:before{content:"\e536"}.fa-people-roof:before{content:"\e537"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-person-booth:before{content:"\f756"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-person-burst:before{content:"\e53b"}.fa-person-cane:before{content:"\e53c"}.fa-person-chalkboard:before{content:"\e53d"}.fa-person-circle-check:before{content:"\e53e"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-person-circle-minus:before{content:"\e540"}.fa-person-circle-plus:before{content:"\e541"}.fa-person-circle-question:before{content:"\e542"}.fa-person-circle-xmark:before{content:"\e543"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-person-dress-burst:before{content:"\e544"}.fa-person-drowning:before{content:"\e545"}.fa-person-falling:before{content:"\e546"}.fa-person-falling-burst:before{content:"\e547"}.fa-person-half-dress:before{content:"\e548"}.fa-person-harassing:before{content:"\e549"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-person-military-pointing:before{content:"\e54a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-person-military-to-person:before{content:"\e54c"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-person-pregnant:before{content:"\e31e"}.fa-person-rays:before{content:"\e54d"}.fa-person-rifle:before{content:"\e54e"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-person-shelter:before{content:"\e54f"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-person-through-window:before{content:"\e433"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-person-walking-luggage:before{content:"\e554"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-peseta-sign:before{content:"\e221"}.fa-peso-sign:before{content:"\e222"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-circle-check:before{content:"\e555"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-lock:before{content:"\e558"}.fa-plane-slash:before{content:"\e069"}.fa-plane-up:before{content:"\e22d"}.fa-plant-wilt:before{content:"\e43b"}.fa-plate-wheat:before{content:"\e55a"}.fa-play:before{content:"\f04b"}.fa-plug:before{content:"\f1e6"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-plug-circle-check:before{content:"\e55c"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-plus-minus:before{content:"\e43c"}.fa-podcast:before{content:"\f2ce"}.fa-poo:before{content:"\f2fe"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-power-off:before{content:"\f011"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-puzzle-piece:before{content:"\f12e"}.fa-q:before{content:"\51"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\3f"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-r:before{content:"\52"}.fa-radiation:before{content:"\f7b9"}.fa-radio:before{content:"\f8d7"}.fa-rainbow:before{content:"\f75b"}.fa-ranking-star:before{content:"\e561"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-recycle:before{content:"\f1b8"}.fa-registered:before{content:"\f25d"}.fa-repeat:before{content:"\f363"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-republican:before{content:"\f75e"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-ribbon:before{content:"\f4d6"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-road-barrier:before{content:"\e562"}.fa-road-bridge:before{content:"\e563"}.fa-road-circle-check:before{content:"\e564"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-road-circle-xmark:before{content:"\e566"}.fa-road-lock:before{content:"\e567"}.fa-road-spikes:before{content:"\e568"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-route:before{content:"\f4d7"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-rug:before{content:"\e569"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-rupiah-sign:before{content:"\e23d"}.fa-s:before{content:"\53"}.fa-sack-dollar:before{content:"\f81d"}.fa-sack-xmark:before{content:"\e56a"}.fa-sailboat:before{content:"\e445"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-school:before{content:"\f549"}.fa-school-circle-check:before{content:"\e56b"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-school-flag:before{content:"\e56e"}.fa-school-lock:before{content:"\e56f"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-screwdriver:before{content:"\f54a"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-scroll:before{content:"\f70e"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-sd-card:before{content:"\f7c2"}.fa-section:before{content:"\e447"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-server:before{content:"\f233"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-sheet-plastic:before{content:"\e571"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-shield-cat:before{content:"\e572"}.fa-shield-dog:before{content:"\e573"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-shield-heart:before{content:"\e574"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-shoe-prints:before{content:"\f54b"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-shop-lock:before{content:"\e4a5"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-shower:before{content:"\f2cc"}.fa-shrimp:before{content:"\e448"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-sim-card:before{content:"\f7c4"}.fa-sink:before{content:"\e06d"}.fa-sitemap:before{content:"\f0e8"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-spa:before{content:"\f5bb"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-spray-can:before{content:"\f5bd"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-square:before{content:"\f0c8"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-square-full:before{content:"\f45c"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-square-nfi:before{content:"\e576"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-square-person-confined:before{content:"\e577"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-square-virus:before{content:"\e578"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-stairs:before{content:"\e289"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-stethoscope:before{content:"\f0f1"}.fa-stop:before{content:"\f04d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-slash:before{content:"\e071"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stroopwafel:before{content:"\f551"}.fa-subscript:before{content:"\f12c"}.fa-suitcase:before{content:"\f0f2"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-superscript:before{content:"\f12b"}.fa-swatchbook:before{content:"\f5c3"}.fa-synagogue:before{content:"\f69b"}.fa-syringe:before{content:"\f48e"}.fa-t:before{content:"\54"}.fa-table:before{content:"\f0ce"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-tablet-button:before{content:"\f10a"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tarp:before{content:"\e57b"}.fa-tarp-droplet:before{content:"\e57c"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-tent:before{content:"\e57d"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tent-arrows-down:before{content:"\e581"}.fa-tents:before{content:"\e582"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-text-width:before{content:"\f035"}.fa-thermometer:before{content:"\f491"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-ticket:before{content:"\f145"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-timeline:before{content:"\e29c"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toilet-portable:before{content:"\e583"}.fa-toilets-portable:before{content:"\e584"}.fa-toolbox:before{content:"\f552"}.fa-tooth:before{content:"\f5c9"}.fa-torii-gate:before{content:"\f6a1"}.fa-tornado:before{content:"\f76f"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-tower-cell:before{content:"\e585"}.fa-tower-observation:before{content:"\e586"}.fa-tractor:before{content:"\f722"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-train-tram:before,.fa-tram:before{content:"\f7da"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-tree-city:before{content:"\e587"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-trophy:before{content:"\f091"}.fa-trowel:before{content:"\e589"}.fa-trowel-bricks:before{content:"\e58a"}.fa-truck:before{content:"\f0d1"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-truck-droplet:before{content:"\e58c"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-truck-field:before{content:"\e58d"}.fa-truck-field-un:before{content:"\e58e"}.fa-truck-front:before{content:"\e2b7"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-truck-plane:before{content:"\e58f"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-u:before{content:"\55"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-universal-access:before{content:"\f29a"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-upload:before{content:"\f093"}.fa-user:before{content:"\f007"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-clock:before{content:"\f4fd"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-user-graduate:before{content:"\f501"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-user-injured:before{content:"\f728"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-user-lock:before{content:"\f502"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-between-lines:before{content:"\e591"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-users-line:before{content:"\e592"}.fa-users-rays:before{content:"\e593"}.fa-users-rectangle:before{content:"\e594"}.fa-users-slash:before{content:"\e073"}.fa-users-viewfinder:before{content:"\e595"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-v:before{content:"\56"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-vault:before{content:"\e2c5"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-vial:before{content:"\f492"}.fa-vial-circle-check:before{content:"\e596"}.fa-vial-virus:before{content:"\e597"}.fa-vials:before{content:"\f493"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-virus:before{content:"\e074"}.fa-virus-covid:before{content:"\e4a8"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-voicemail:before{content:"\f897"}.fa-volcano:before{content:"\f770"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-volume-off:before{content:"\f026"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-vr-cardboard:before{content:"\f729"}.fa-w:before{content:"\57"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-wallet:before{content:"\f555"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-wand-sparkles:before{content:"\f72b"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-wave-square:before{content:"\f83e"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-wheelchair:before{content:"\f193"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-wind:before{content:"\f72e"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-worm:before{content:"\e599"}.fa-wrench:before{content:"\f0ad"}.fa-x:before{content:"\58"}.fa-x-ray:before{content:"\f497"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-xmarks-lines:before{content:"\e59a"}.fa-y:before{content:"\59"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-z:before{content:"\5a"}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-family:"Font Awesome 6 Brands";font-weight:400}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-alipay:before{content:"\f642"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-amilia:before{content:"\f36d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-pay:before{content:"\f415"}.fa-artstation:before{content:"\f77a"}.fa-asymmetrik:before{content:"\f372"}.fa-atlassian:before{content:"\f77b"}.fa-audible:before{content:"\f373"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-aws:before{content:"\f375"}.fa-bandcamp:before{content:"\f2d5"}.fa-battle-net:before{content:"\f835"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bilibili:before{content:"\e3d9"}.fa-bimobject:before{content:"\f378"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bootstrap:before{content:"\f836"}.fa-bots:before{content:"\e340"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-buromobelexperte:before{content:"\f37f"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cmplid:before{content:"\e360"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cotton-bureau:before{content:"\f89e"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-critical-role:before{content:"\f6c9"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dhl:before{content:"\f790"}.fa-diaspora:before{content:"\f791"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-draft2digital:before{content:"\f396"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drupal:before{content:"\f1a9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-elementor:before{content:"\f430"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-etsy:before{content:"\f2d7"}.fa-evernote:before{content:"\f839"}.fa-expeditedssl:before{content:"\f23e"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-figma:before{content:"\f799"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-fly:before{content:"\f417"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-fulcrum:before{content:"\f50b"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-gofore:before{content:"\f3a7"}.fa-golang:before{content:"\e40f"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-gulp:before{content:"\f3ae"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hashnode:before{content:"\e499"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-hive:before{content:"\e07f"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-hotjar:before{content:"\f3b1"}.fa-houzz:before{content:"\f27c"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-ideal:before{content:"\e013"}.fa-imdb:before{content:"\f2d8"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joomla:before{content:"\f1aa"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaggle:before{content:"\f5fa"}.fa-keybase:before{content:"\f4f5"}.fa-keycdn:before{content:"\f3ba"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-korvue:before{content:"\f42f"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-leanpub:before{content:"\f212"}.fa-less:before{content:"\f41d"}.fa-line:before{content:"\f3c0"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-mailchimp:before{content:"\f59e"}.fa-mandalorian:before{content:"\f50f"}.fa-markdown:before{content:"\f60f"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medapps:before{content:"\f3c6"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-mendeley:before{content:"\f7b3"}.fa-microblog:before{content:"\e01a"}.fa-microsoft:before{content:"\f3ca"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-nfc-directional:before{content:"\e530"}.fa-nfc-symbol:before{content:"\e531"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-old-republic:before{content:"\f510"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-padlet:before{content:"\e4a0"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-palfed:before{content:"\f3d8"}.fa-patreon:before{content:"\f3d9"}.fa-paypal:before{content:"\f1ed"}.fa-perbyte:before{content:"\e083"}.fa-periscope:before{content:"\f3da"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pix:before{content:"\e43a"}.fa-playstation:before{content:"\f3df"}.fa-product-hunt:before{content:"\f288"}.fa-pushed:before{content:"\f3e1"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-r-project:before{content:"\f4f7"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-renren:before{content:"\f18b"}.fa-replyd:before{content:"\f3e6"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-rev:before{content:"\f5b2"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-rust:before{content:"\e07a"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-schlix:before{content:"\f3ea"}.fa-screenpal:before{content:"\e570"}.fa-scribd:before{content:"\f28a"}.fa-searchengin:before{content:"\f3eb"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-servicestack:before{content:"\f3ec"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shopify:before{content:"\e057"}.fa-shopware:before{content:"\f5b5"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sith:before{content:"\f512"}.fa-sitrox:before{content:"\e44a"}.fa-sketch:before{content:"\f7c6"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-slideshare:before{content:"\f1e7"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-square:before{content:"\f2ad"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spotify:before{content:"\f1bc"}.fa-square-font-awesome:before{content:"\f425"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-sticker-mule:before{content:"\f3f7"}.fa-strava:before{content:"\f428"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-superpowers:before{content:"\f2dd"}.fa-supple:before{content:"\f3f9"}.fa-suse:before{content:"\f7d6"}.fa-swift:before{content:"\f8e1"}.fa-symfony:before{content:"\f83d"}.fa-teamspeak:before{content:"\f4f9"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-the-red-yeti:before{content:"\f69d"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-think-peaks:before{content:"\f731"}.fa-tiktok:before{content:"\e07b"}.fa-trade-federation:before{content:"\f513"}.fa-trello:before{content:"\f181"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-uncharted:before{content:"\e084"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-vaadin:before{content:"\f408"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-viber:before{content:"\f409"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-vuejs:before{content:"\f41f"}.fa-watchman-monitoring:before{content:"\e087"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-whmcs:before{content:"\f40d"}.fa-wikipedia-w:before{content:"\f266"}.fa-windows:before{content:"\f17a"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-family:"Font Awesome 6 Free";font-weight:400}:host,:root{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-family:"Font Awesome 6 Free";font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f250,u+f252,u+f27a} \ No newline at end of file diff --git a/ucast/static/ucast/favicon.ico b/ucast/static/ucast/favicon.ico deleted file mode 100644 index 68ab596..0000000 Binary files a/ucast/static/ucast/favicon.ico and /dev/null differ diff --git a/ucast/static/ucast/js/clipboard.min.js b/ucast/static/ucast/js/clipboard.min.js deleted file mode 100644 index 98d959b..0000000 --- a/ucast/static/ucast/js/clipboard.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * clipboard.js v2.0.11 - * https://clipboardjs.com/ - * - * Licensed MIT © Zeno Rocha - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{container:document.body},n="";return"string"==typeof t?n=o(t,e):t instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(null==t?void 0:t.type)?n=o(t.value,e):(n=r()(t),c("copy")),n};function l(t){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var s=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},e=t.action,n=void 0===e?"copy":e,o=t.container,e=t.target,t=t.text;if("copy"!==n&&"cut"!==n)throw new Error('Invalid "action" value, use either "copy" or "cut"');if(void 0!==e){if(!e||"object"!==l(e)||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===n&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===n&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes')}return t?f(t,{container:o}):e?"cut"===n?a(e):f(e,{container:o}):void 0};function p(t){return(p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function d(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function y(t,e){return(y=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function h(n){var o=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(t){return!1}}();return function(){var t,e=v(n);return t=o?(t=v(this).constructor,Reflect.construct(e,arguments,t)):e.apply(this,arguments),e=this,!(t=t)||"object"!==p(t)&&"function"!=typeof t?function(t){if(void 0!==t)return t;throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}(e):t}}function v(t){return(v=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function m(t,e){t="data-clipboard-".concat(t);if(e.hasAttribute(t))return e.getAttribute(t)}var b=function(){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&y(t,e)}(r,i());var t,e,n,o=h(r);function r(t,e){var n;return function(t){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this),(n=o.call(this)).resolveOptions(e),n.listenClick(t),n}return t=r,n=[{key:"copy",value:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{container:document.body};return f(t,e)}},{key:"cut",value:function(t){return a(t)}},{key:"isSupported",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof t?[t]:t,e=!!document.queryCommandSupported;return t.forEach(function(t){e=e&&!!document.queryCommandSupported(t)}),e}}],(e=[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===p(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=u()(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget,n=this.action(e)||"copy",t=s({action:n,container:this.container,target:this.target(e),text:this.text(e)});this.emit(t?"success":"error",{action:n,text:t,trigger:e,clearSelection:function(){e&&e.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(t){return m("action",t)}},{key:"defaultTarget",value:function(t){t=m("target",t);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(t){return m("text",t)}},{key:"destroy",value:function(){this.listener.destroy()}}])&&d(t.prototype,e),n&&d(t,n),r}()},828:function(t){var e;"undefined"==typeof Element||Element.prototype.matches||((e=Element.prototype).matches=e.matchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector),t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}},438:function(t,e,n){var u=n(828);function i(t,e,n,o,r){var i=function(e,n,t,o){return function(t){t.delegateTarget=u(t.target,n),t.delegateTarget&&o.call(e,t)}}.apply(this,arguments);return t.addEventListener(n,i,r),{destroy:function(){t.removeEventListener(n,i,r)}}}t.exports=function(t,e,n,o,r){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return i(t,e,n,o,r)}))}},879:function(t,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},370:function(t,e,n){var f=n(879),l=n(438);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!f.string(e))throw new TypeError("Second argument must be a String");if(!f.fn(n))throw new TypeError("Third argument must be a Function");if(f.node(t))return c=e,a=n,(u=t).addEventListener(c,a),{destroy:function(){u.removeEventListener(c,a)}};if(f.nodeList(t))return o=t,r=e,i=n,Array.prototype.forEach.call(o,function(t){t.addEventListener(r,i)}),{destroy:function(){Array.prototype.forEach.call(o,function(t){t.removeEventListener(r,i)})}};if(f.string(t))return t=t,e=e,n=n,l(document.body,t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");var o,r,i,u,c,a}},817:function(t){t.exports=function(t){var e,n="SELECT"===t.nodeName?(t.focus(),t.value):"INPUT"===t.nodeName||"TEXTAREA"===t.nodeName?((e=t.hasAttribute("readonly"))||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),e||t.removeAttribute("readonly"),t.value):(t.hasAttribute("contenteditable")&&t.focus(),n=window.getSelection(),(e=document.createRange()).selectNodeContents(t),n.removeAllRanges(),n.addRange(e),n.toString());return n}},279:function(t){function e(){}e.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var o=this;function r(){o.off(t,r),e.apply(n,arguments)}return r._=e,this.on(t,r,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;o<r;o++)n[o].fn.apply(n[o].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),o=n[t],r=[];if(o&&e)for(var i=0,u=o.length;i<u;i++)o[i].fn!==e&&o[i].fn._!==e&&r.push(o[i]);return r.length?n[t]=r:delete n[t],this}},t.exports=e,t.exports.TinyEmitter=e}},r={},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o(686).default;function o(t){if(r[t])return r[t].exports;var e=r[t]={exports:{}};return n[t](e,e.exports,o),e.exports}var n,r}); diff --git a/ucast/static/ucast/js/htmx.min.js b/ucast/static/ucast/js/htmx.min.js deleted file mode 100644 index 778ebbb..0000000 --- a/ucast/static/ucast/js/htmx.min.js +++ /dev/null @@ -1,2 +0,0 @@ -// HTMX 1.7.0 by Big Sky Software, BSD 2-Clause License -(function(e,t){if(typeof define==="function"&&define.amd){define([],t)}else{e.htmx=t()}})(typeof self!=="undefined"?self:this,function(){return function(){"use strict";var U={onLoad:t,process:ct,on:M,off:D,trigger:$,ajax:er,find:C,findAll:R,closest:H,values:function(e,t){var r=Mt(e,t||"post");return r.values},remove:O,addClass:L,removeClass:q,toggleClass:A,takeClass:T,defineExtension:or,removeExtension:ar,logAll:E,logger:null,config:{historyEnabled:true,historyCacheSize:10,refreshOnHistoryMiss:false,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:true,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:true,inlineScriptNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:false,timeout:0,wsReconnectDelay:"full-jitter",disableSelector:"[hx-disable], [data-hx-disable]",useTemplateFragments:false,scrollBehavior:"smooth",defaultFocusScroll:false},parseInterval:v,_:e,createEventSource:function(e){return new EventSource(e,{withCredentials:true})},createWebSocket:function(e){return new WebSocket(e,[])},version:"1.7.0"};var r={bodyContains:Y,filterValues:jt,hasAttribute:s,getAttributeValue:V,getClosestMatch:h,getExpressionVars:Gt,getHeaders:Xt,getInputValues:Mt,getInternalData:_,getSwapSpecification:Ut,getTriggerSpecs:ke,getTarget:ne,makeFragment:g,mergeObjects:Q,makeSettleInfo:zt,oobSwap:B,selectAndSwap:we,settleImmediately:Ct,shouldCancel:Pe,triggerEvent:$,triggerErrorEvent:J,withExtensions:gt};var n=["get","post","put","delete","patch"];var i=n.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function v(e){if(e==undefined){return undefined}if(e.slice(-2)=="ms"){return parseFloat(e.slice(0,-2))||undefined}if(e.slice(-1)=="s"){return parseFloat(e.slice(0,-1))*1e3||undefined}return parseFloat(e)||undefined}function f(e,t){return e.getAttribute&&e.getAttribute(t)}function s(e,t){return e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function V(e,t){return f(e,t)||f(e,"data-"+t)}function u(e){return e.parentElement}function z(){return document}function h(e,t){if(t(e)){return e}else if(u(e)){return h(u(e),t)}else{return null}}function o(e,t,r){var n=V(t,r);var i=V(t,"hx-disinherit");if(e!==t&&i&&(i==="*"||i.split(" ").indexOf(r)>=0)){return"unset"}else{return n}}function G(t,r){var n=null;h(t,function(e){return n=o(t,e,r)});if(n!=="unset"){return n}}function d(e,t){var r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector;return r&&r.call(e,t)}function a(e){var t=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i;var r=t.exec(e);if(r){return r[1].toLowerCase()}else{return""}}function l(e,t){var r=new DOMParser;var n=r.parseFromString(e,"text/html");var i=n.body;while(t>0){t--;i=i.firstChild}if(i==null){i=z().createDocumentFragment()}return i}function g(e){if(U.config.useTemplateFragments){var t=l("<body><template>"+e+"</template></body>",0);return t.querySelector("template").content}else{var r=a(e);switch(r){case"thead":case"tbody":case"tfoot":case"colgroup":case"caption":return l("<table>"+e+"</table>",1);case"col":return l("<table><colgroup>"+e+"</colgroup></table>",2);case"tr":return l("<table><tbody>"+e+"</tbody></table>",2);case"td":case"th":return l("<table><tbody><tr>"+e+"</tr></tbody></table>",3);case"script":return l("<div>"+e+"</div>",1);default:return l(e,0)}}}function K(e){if(e){e()}}function p(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function m(e){return p(e,"Function")}function x(e){return p(e,"Object")}function _(e){var t="htmx-internal-data";var r=e[t];if(!r){r=e[t]={}}return r}function y(e){var t=[];if(e){for(var r=0;r<e.length;r++){t.push(e[r])}}return t}function W(e,t){if(e){for(var r=0;r<e.length;r++){t(e[r])}}}function b(e){var t=e.getBoundingClientRect();var r=t.top;var n=t.bottom;return r<window.innerHeight&&n>=0}function Y(e){if(e.getRootNode()instanceof ShadowRoot){return z().body.contains(e.getRootNode().host)}else{return z().body.contains(e)}}function w(e){return e.trim().split(/\s+/)}function Q(e,t){for(var r in t){if(t.hasOwnProperty(r)){e[r]=t[r]}}return e}function S(e){try{return JSON.parse(e)}catch(e){pt(e);return null}}function e(e){return Jt(z().body,function(){return eval(e)})}function t(t){var e=U.on("htmx:load",function(e){t(e.detail.elt)});return e}function E(){U.logger=function(e,t,r){if(console){console.log(t,e,r)}}}function C(e,t){if(t){return e.querySelector(t)}else{return C(z(),e)}}function R(e,t){if(t){return e.querySelectorAll(t)}else{return R(z(),e)}}function O(e,t){e=k(e);if(t){setTimeout(function(){O(e)},t)}else{e.parentElement.removeChild(e)}}function L(e,t,r){e=k(e);if(r){setTimeout(function(){L(e,t)},r)}else{e.classList&&e.classList.add(t)}}function q(e,t,r){e=k(e);if(r){setTimeout(function(){q(e,t)},r)}else{if(e.classList){e.classList.remove(t);if(e.classList.length===0){e.removeAttribute("class")}}}}function A(e,t){e=k(e);e.classList.toggle(t)}function T(e,t){e=k(e);W(e.parentElement.children,function(e){q(e,t)});L(e,t)}function H(e,t){e=k(e);if(e.closest){return e.closest(t)}else{do{if(e==null||d(e,t)){return e}}while(e=e&&u(e))}}function N(e,t){if(t.indexOf("closest ")===0){return[H(e,t.substr(8))]}else if(t.indexOf("find ")===0){return[C(e,t.substr(5))]}else if(t==="document"){return[document]}else if(t==="window"){return[window]}else{return z().querySelectorAll(t)}}function ee(e,t){if(t){return N(e,t)[0]}else{return N(z().body,e)[0]}}function k(e){if(p(e,"String")){return C(e)}else{return e}}function I(e,t,r){if(m(t)){return{target:z().body,event:e,listener:t}}else{return{target:k(e),event:t,listener:r}}}function M(t,r,n){lr(function(){var e=I(t,r,n);e.target.addEventListener(e.event,e.listener)});var e=m(r);return e?r:n}function D(t,r,n){lr(function(){var e=I(t,r,n);e.target.removeEventListener(e.event,e.listener)});return m(r)?r:n}var te=z().createElement("output");function F(e,t){var r=G(e,t);if(r){if(r==="this"){return[re(e,t)]}else{var n=N(e,r);if(n.length===0){pt('The selector "'+r+'" on '+t+" returned no matches!");return[te]}else{return n}}}}function re(e,t){return h(e,function(e){return V(e,t)!=null})}function ne(e){var t=G(e,"hx-target");if(t){if(t==="this"){return re(e,"hx-target")}else{return ee(e,t)}}else{var r=_(e);if(r.boosted){return z().body}else{return e}}}function P(e){var t=U.config.attributesToSettle;for(var r=0;r<t.length;r++){if(e===t[r]){return true}}return false}function X(t,r){W(t.attributes,function(e){if(!r.hasAttribute(e.name)&&P(e.name)){t.removeAttribute(e.name)}});W(r.attributes,function(e){if(P(e.name)){t.setAttribute(e.name,e.value)}})}function j(e,t){var r=sr(t);for(var n=0;n<r.length;n++){var i=r[n];try{if(i.isInlineSwap(e)){return true}}catch(e){pt(e)}}return e==="outerHTML"}function B(e,i,o){var t="#"+i.id;var a="outerHTML";if(e==="true"){}else if(e.indexOf(":")>0){a=e.substr(0,e.indexOf(":"));t=e.substr(e.indexOf(":")+1,e.length)}else{a=e}var r=z().querySelectorAll(t);if(r){W(r,function(e){var t;var r=i.cloneNode(true);t=z().createDocumentFragment();t.appendChild(r);if(!j(a,e)){t=r}var n={shouldSwap:true,target:e,fragment:t};if(!$(e,"htmx:oobBeforeSwap",n))return;e=n.target;if(n["shouldSwap"]){ye(a,e,e,t,o)}W(o.elts,function(e){$(e,"htmx:oobAfterSwap",n)})});i.parentNode.removeChild(i)}else{i.parentNode.removeChild(i);J(z().body,"htmx:oobErrorNoTarget",{content:i})}return e}function ie(e,r){W(R(e,"[hx-swap-oob], [data-hx-swap-oob]"),function(e){var t=V(e,"hx-swap-oob");if(t!=null){B(t,e,r)}})}function oe(e){W(R(e,"[hx-preserve], [data-hx-preserve]"),function(e){var t=V(e,"id");var r=z().getElementById(t);if(r!=null){e.parentNode.replaceChild(r,e)}})}function ae(n,e,i){W(e.querySelectorAll("[id]"),function(e){if(e.id&&e.id.length>0){var t=n.querySelector(e.tagName+"[id='"+e.id+"']");if(t&&t!==n){var r=e.cloneNode();X(e,t);i.tasks.push(function(){X(e,r)})}}})}function se(e){return function(){q(e,U.config.addedClass);ct(e);at(e);le(e);$(e,"htmx:load")}}function le(e){var t="[autofocus]";var r=d(e,t)?e:e.querySelector(t);if(r!=null){r.focus()}}function ue(e,t,r,n){ae(e,r,n);while(r.childNodes.length>0){var i=r.firstChild;L(i,U.config.addedClass);e.insertBefore(i,t);if(i.nodeType!==Node.TEXT_NODE&&i.nodeType!==Node.COMMENT_NODE){n.tasks.push(se(i))}}}function fe(t){var e=_(t);if(e.webSocket){e.webSocket.close()}if(e.sseEventSource){e.sseEventSource.close()}$(t,"htmx:beforeCleanupElement");if(e.listenerInfos){W(e.listenerInfos,function(e){if(t!==e.on){e.on.removeEventListener(e.trigger,e.listener)}})}if(t.children){W(t.children,function(e){fe(e)})}}function ce(e,t,r){if(e.tagName==="BODY"){return me(e,t,r)}else{var n;var i=e.previousSibling;ue(u(e),e,t,r);if(i==null){n=u(e).firstChild}else{n=i.nextSibling}_(e).replacedWith=n;r.elts=[];while(n&&n!==e){if(n.nodeType===Node.ELEMENT_NODE){r.elts.push(n)}n=n.nextElementSibling}fe(e);u(e).removeChild(e)}}function he(e,t,r){return ue(e,e.firstChild,t,r)}function de(e,t,r){return ue(u(e),e,t,r)}function ve(e,t,r){return ue(e,null,t,r)}function ge(e,t,r){return ue(u(e),e.nextSibling,t,r)}function pe(e,t,r){fe(e);return u(e).removeChild(e)}function me(e,t,r){var n=e.firstChild;ue(e,n,t,r);if(n){while(n.nextSibling){fe(n.nextSibling);e.removeChild(n.nextSibling)}fe(n);e.removeChild(n)}}function xe(e,t){var r=G(e,"hx-select");if(r){var n=z().createDocumentFragment();W(t.querySelectorAll(r),function(e){n.appendChild(e)});t=n}return t}function ye(e,t,r,n,i){switch(e){case"none":return;case"outerHTML":ce(r,n,i);return;case"afterbegin":he(r,n,i);return;case"beforebegin":de(r,n,i);return;case"beforeend":ve(r,n,i);return;case"afterend":ge(r,n,i);return;case"delete":pe(r,n,i);return;default:var o=sr(t);for(var a=0;a<o.length;a++){var f=o[a];try{var s=f.handleSwap(e,r,n,i);if(s){if(typeof s.length!=="undefined"){for(var l=0;l<s.length;l++){var u=s[l];if(u.nodeType!==Node.TEXT_NODE&&u.nodeType!==Node.COMMENT_NODE){i.tasks.push(se(u))}}}return}}catch(e){pt(e)}}if(e==="innerHTML"){me(r,n,i)}else{ye(U.config.defaultSwapStyle,t,r,n,i)}}}function be(e){if(e.indexOf("<title")>-1){var t=e.replace(/<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim,"");var r=t.match(/<title(\s[^>]*>|>)([\s\S]*?)<\/title>/im);if(r){return r[2]}}}function we(e,t,r,n,i){i.title=be(n);var o=g(n);if(o){ie(o,i);o=xe(r,o);oe(o);return ye(e,r,t,o,i)}}function Se(e,t,r){var n=e.getResponseHeader(t);if(n.indexOf("{")===0){var i=S(n);for(var o in i){if(i.hasOwnProperty(o)){var a=i[o];if(!x(a)){a={value:a}}$(r,o,a)}}}else{$(r,n,[])}}var Ee=/\s/;var Ce=/[\s,]/;var Re=/[_$a-zA-Z]/;var Oe=/[_$a-zA-Z0-9]/;var Le=['"',"'","/"];var qe=/[^\s]/;function Ae(e){var t=[];var r=0;while(r<e.length){if(Re.exec(e.charAt(r))){var n=r;while(Oe.exec(e.charAt(r+1))){r++}t.push(e.substr(n,r-n+1))}else if(Le.indexOf(e.charAt(r))!==-1){var i=e.charAt(r);var n=r;r++;while(r<e.length&&e.charAt(r)!==i){if(e.charAt(r)==="\\"){r++}r++}t.push(e.substr(n,r-n+1))}else{var o=e.charAt(r);t.push(o)}r++}return t}function Te(e,t,r){return Re.exec(e.charAt(0))&&e!=="true"&&e!=="false"&&e!=="this"&&e!==r&&t!=="."}function He(e,t,r){if(t[0]==="["){t.shift();var n=1;var i=" return (function("+r+"){ return (";var o=null;while(t.length>0){var a=t[0];if(a==="]"){n--;if(n===0){if(o===null){i=i+"true"}t.shift();i+=")})";try{var s=Jt(e,function(){return Function(i)()},function(){return true});s.source=i;return s}catch(e){J(z().body,"htmx:syntax:error",{error:e,source:i});return null}}}else if(a==="["){n++}if(Te(a,o,r)){i+="(("+r+"."+a+") ? ("+r+"."+a+") : (window."+a+"))"}else{i=i+a}o=t.shift()}}}function c(e,t){var r="";while(e.length>0&&!e[0].match(t)){r+=e.shift()}return r}var Ne="input, textarea, select";function ke(e){var t=V(e,"hx-trigger");var r=[];if(t){var n=Ae(t);do{c(n,qe);var f=n.length;var i=c(n,/[,\[\s]/);if(i!==""){if(i==="every"){var o={trigger:"every"};c(n,qe);o.pollInterval=v(c(n,/[,\[\s]/));c(n,qe);var a=He(e,n,"event");if(a){o.eventFilter=a}r.push(o)}else if(i.indexOf("sse:")===0){r.push({trigger:"sse",sseEvent:i.substr(4)})}else{var s={trigger:i};var a=He(e,n,"event");if(a){s.eventFilter=a}while(n.length>0&&n[0]!==","){c(n,qe);var l=n.shift();if(l==="changed"){s.changed=true}else if(l==="once"){s.once=true}else if(l==="consume"){s.consume=true}else if(l==="delay"&&n[0]===":"){n.shift();s.delay=v(c(n,Ce))}else if(l==="from"&&n[0]===":"){n.shift();var u=c(n,Ce);if(u==="closest"||u==="find"){n.shift();u+=" "+c(n,Ce)}s.from=u}else if(l==="target"&&n[0]===":"){n.shift();s.target=c(n,Ce)}else if(l==="throttle"&&n[0]===":"){n.shift();s.throttle=v(c(n,Ce))}else if(l==="queue"&&n[0]===":"){n.shift();s.queue=c(n,Ce)}else if((l==="root"||l==="threshold")&&n[0]===":"){n.shift();s[l]=c(n,Ce)}else{J(e,"htmx:syntax:error",{token:n.shift()})}}r.push(s)}}if(n.length===f){J(e,"htmx:syntax:error",{token:n.shift()})}c(n,qe)}while(n[0]===","&&n.shift())}if(r.length>0){return r}else if(d(e,"form")){return[{trigger:"submit"}]}else if(d(e,Ne)){return[{trigger:"change"}]}else{return[{trigger:"click"}]}}function Ie(e){_(e).cancelled=true}function Me(e,t,r,n){var i=_(e);i.timeout=setTimeout(function(){if(Y(e)&&i.cancelled!==true){if(!je(n,dt("hx:poll:trigger",{triggerSpec:n,target:e}))){Z(t,r,e)}Me(e,t,V(e,"hx-"+t),n)}},n.pollInterval)}function De(e){return location.hostname===e.hostname&&f(e,"href")&&f(e,"href").indexOf("#")!==0}function Fe(t,r,e){if(t.tagName==="A"&&De(t)&&t.target===""||t.tagName==="FORM"){r.boosted=true;var n,i;if(t.tagName==="A"){n="get";i=f(t,"href");r.pushURL=true}else{var o=f(t,"method");n=o?o.toLowerCase():"get";if(n==="get"){r.pushURL=true}i=f(t,"action")}e.forEach(function(e){Be(t,n,i,r,e,true)})}}function Pe(e,t){if(e.type==="submit"||e.type==="click"){if(t.tagName==="FORM"){return true}if(d(t,'input[type="submit"], button')&&H(t,"form")!==null){return true}if(t.tagName==="A"&&t.href&&(t.getAttribute("href")==="#"||t.getAttribute("href").indexOf("#")!==0)){return true}}return false}function Xe(e,t){return _(e).boosted&&e.tagName==="A"&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function je(e,t){var r=e.eventFilter;if(r){try{return r(t)!==true}catch(e){J(z().body,"htmx:eventFilter:error",{error:e,source:r.source});return true}}return false}function Be(o,a,s,e,l,u){var t;if(l.from){t=N(o,l.from)}else{t=[o]}W(t,function(n){var i=function(e){if(!Y(o)){n.removeEventListener(l.trigger,i);return}if(Xe(o,e)){return}if(u||Pe(e,o)){e.preventDefault()}if(je(l,e)){return}var t=_(e);t.triggerSpec=l;if(t.handledFor==null){t.handledFor=[]}var r=_(o);if(t.handledFor.indexOf(o)<0){t.handledFor.push(o);if(l.consume){e.stopPropagation()}if(l.target&&e.target){if(!d(e.target,l.target)){return}}if(l.once){if(r.triggeredOnce){return}else{r.triggeredOnce=true}}if(l.changed){if(r.lastValue===o.value){return}else{r.lastValue=o.value}}if(r.delayed){clearTimeout(r.delayed)}if(r.throttle){return}if(l.throttle){if(!r.throttle){Z(a,s,o,e);r.throttle=setTimeout(function(){r.throttle=null},l.throttle)}}else if(l.delay){r.delayed=setTimeout(function(){Z(a,s,o,e)},l.delay)}else{Z(a,s,o,e)}}};if(e.listenerInfos==null){e.listenerInfos=[]}e.listenerInfos.push({trigger:l.trigger,listener:i,on:n});n.addEventListener(l.trigger,i)})}var Ue=false;var Ve=null;function ze(){if(!Ve){Ve=function(){Ue=true};window.addEventListener("scroll",Ve);setInterval(function(){if(Ue){Ue=false;W(z().querySelectorAll("[hx-trigger='revealed'],[data-hx-trigger='revealed']"),function(e){_e(e)})}},200)}}function _e(e){if(!s(e,"data-hx-revealed")&&b(e)){e.setAttribute("data-hx-revealed","true");var t=_(e);if(t.initialized){Z(t.verb,t.path,e)}else{e.addEventListener("htmx:afterProcessNode",function(){Z(t.verb,t.path,e)},{once:true})}}}function We(e,t,r){var n=w(r);for(var i=0;i<n.length;i++){var o=n[i].split(/:(.+)/);if(o[0]==="connect"){Je(e,o[1],0)}if(o[0]==="send"){Ze(e)}}}function Je(s,r,n){if(!Y(s)){return}if(r.indexOf("/")==0){var e=location.hostname+(location.port?":"+location.port:"");if(location.protocol=="https:"){r="wss://"+e+r}else if(location.protocol=="http:"){r="ws://"+e+r}}var t=U.createWebSocket(r);t.onerror=function(e){J(s,"htmx:wsError",{error:e,socket:t});$e(s)};t.onclose=function(e){if([1006,1012,1013].indexOf(e.code)>=0){var t=Ge(n);setTimeout(function(){Je(s,r,n+1)},t)}};t.onopen=function(e){n=0};_(s).webSocket=t;t.addEventListener("message",function(e){if($e(s)){return}var t=e.data;gt(s,function(e){t=e.transformResponse(t,null,s)});var r=zt(s);var n=g(t);var i=y(n.children);for(var o=0;o<i.length;o++){var a=i[o];B(V(a,"hx-swap-oob")||"true",a,r)}Ct(r.tasks)})}function $e(e){if(!Y(e)){_(e).webSocket.close();return true}}function Ze(u){var f=h(u,function(e){return _(e).webSocket!=null});if(f){u.addEventListener(ke(u)[0].trigger,function(e){var t=_(f).webSocket;var r=Xt(u,f);var n=Mt(u,"post");var i=n.errors;var o=n.values;var a=Gt(u);var s=Q(o,a);var l=jt(s,u);l["HEADERS"]=r;if(i&&i.length>0){$(u,"htmx:validation:halted",i);return}t.send(JSON.stringify(l));if(Pe(e,u)){e.preventDefault()}})}else{J(u,"htmx:noWebSocketSourceError")}}function Ge(e){var t=U.config.wsReconnectDelay;if(typeof t==="function"){return t(e)}if(t==="full-jitter"){var r=Math.min(e,6);var n=1e3*Math.pow(2,r);return n*Math.random()}pt('htmx.config.wsReconnectDelay must either be a function or the string "full-jitter"')}function Ke(e,t,r){var n=w(r);for(var i=0;i<n.length;i++){var o=n[i].split(/:(.+)/);if(o[0]==="connect"){Ye(e,o[1])}if(o[0]==="swap"){Qe(e,o[1])}}}function Ye(t,e){var r=U.createEventSource(e);r.onerror=function(e){J(t,"htmx:sseError",{error:e,source:r});tt(t)};_(t).sseEventSource=r}function Qe(o,a){var s=h(o,rt);if(s){var l=_(s).sseEventSource;var u=function(e){if(tt(s)){l.removeEventListener(a,u);return}var t=e.data;gt(o,function(e){t=e.transformResponse(t,null,o)});var r=Ut(o);var n=ne(o);var i=zt(o);we(r.swapStyle,o,n,t,i);Ct(i.tasks);$(o,"htmx:sseMessage",e)};_(o).sseListener=u;l.addEventListener(a,u)}else{J(o,"htmx:noSSESourceError")}}function et(e,t,r,n){var i=h(e,rt);if(i){var o=_(i).sseEventSource;var a=function(){if(!tt(i)){if(Y(e)){Z(t,r,e)}else{o.removeEventListener(n,a)}}};_(e).sseListener=a;o.addEventListener(n,a)}else{J(e,"htmx:noSSESourceError")}}function tt(e){if(!Y(e)){_(e).sseEventSource.close();return true}}function rt(e){return _(e).sseEventSource!=null}function nt(e,t,r,n,i){var o=function(){if(!n.loaded){n.loaded=true;Z(t,r,e)}};if(i){setTimeout(o,i)}else{o()}}function it(o,a,e){var t=false;W(n,function(n){if(s(o,"hx-"+n)){var i=V(o,"hx-"+n);t=true;a.path=i;a.verb=n;e.forEach(function(e){if(e.sseEvent){et(o,n,i,e.sseEvent)}else if(e.trigger==="revealed"){ze();_e(o)}else if(e.trigger==="intersect"){var t={};if(e.root){t.root=ee(o,e.root)}if(e.threshold){t.threshold=parseFloat(e.threshold)}var r=new IntersectionObserver(function(e){for(var t=0;t<e.length;t++){var r=e[t];if(r.isIntersecting){$(o,"intersect");break}}},t);r.observe(o);Be(o,n,i,a,e)}else if(e.trigger==="load"){nt(o,n,i,a,e.delay)}else if(e.pollInterval){a.polling=true;Me(o,n,i,e)}else{Be(o,n,i,a,e)}})}});return t}function ot(e){if(e.type==="text/javascript"||e.type==="module"||e.type===""){var t=z().createElement("script");W(e.attributes,function(e){t.setAttribute(e.name,e.value)});t.textContent=e.textContent;t.async=false;if(U.config.inlineScriptNonce){t.nonce=U.config.inlineScriptNonce}var r=e.parentElement;try{r.insertBefore(t,e)}catch(e){pt(e)}finally{r.removeChild(e)}}}function at(e){if(d(e,"script")){ot(e)}W(R(e,"script"),function(e){ot(e)})}function st(){return document.querySelector("[hx-boost], [data-hx-boost]")}function lt(e){if(e.querySelectorAll){var t=st()?", a, form":"";var r=e.querySelectorAll(i+t+", [hx-sse], [data-hx-sse], [hx-ws],"+" [data-hx-ws], [hx-ext], [hx-data-ext]");return r}else{return[]}}function ut(r){var e=function(e){if(d(e.target,"button, input[type='submit']")){var t=_(r);t.lastButtonClicked=e.target}};r.addEventListener("click",e);r.addEventListener("focusin",e);r.addEventListener("focusout",function(e){var t=_(r);t.lastButtonClicked=null})}function ft(e){if(e.closest&&e.closest(U.config.disableSelector)){return}var t=_(e);if(!t.initialized){t.initialized=true;$(e,"htmx:beforeProcessNode");if(e.value){t.lastValue=e.value}var r=ke(e);var n=it(e,t,r);if(!n&&G(e,"hx-boost")==="true"){Fe(e,t,r)}if(e.tagName==="FORM"){ut(e)}var i=V(e,"hx-sse");if(i){Ke(e,t,i)}var o=V(e,"hx-ws");if(o){We(e,t,o)}$(e,"htmx:afterProcessNode")}}function ct(e){e=k(e);ft(e);W(lt(e),function(e){ft(e)})}function ht(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}function dt(e,t){var r;if(window.CustomEvent&&typeof window.CustomEvent==="function"){r=new CustomEvent(e,{bubbles:true,cancelable:true,detail:t})}else{r=z().createEvent("CustomEvent");r.initCustomEvent(e,true,true,t)}return r}function J(e,t,r){$(e,t,Q({error:t},r))}function vt(e){return e==="htmx:afterProcessNode"}function gt(e,t){W(sr(e),function(e){try{t(e)}catch(e){pt(e)}})}function pt(e){if(console.error){console.error(e)}else if(console.log){console.log("ERROR: ",e)}}function $(e,t,r){e=k(e);if(r==null){r={}}r["elt"]=e;var n=dt(t,r);if(U.logger&&!vt(t)){U.logger(e,t,r)}if(r.error){pt(r.error);$(e,"htmx:error",{errorInfo:r})}var i=e.dispatchEvent(n);var o=ht(t);if(i&&o!==t){var a=dt(o,n.detail);i=i&&e.dispatchEvent(a)}gt(e,function(e){i=i&&e.onEvent(t,n)!==false});return i}var mt=location.pathname+location.search;function xt(){var e=z().querySelector("[hx-history-elt],[data-hx-history-elt]");return e||z().body}function yt(e,t,r,n){var i=S(localStorage.getItem("htmx-history-cache"))||[];for(var o=0;o<i.length;o++){if(i[o].url===e){i.splice(o,1);break}}i.push({url:e,content:t,title:r,scroll:n});while(i.length>U.config.historyCacheSize){i.shift()}while(i.length>0){try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(e){J(z().body,"htmx:historyCacheError",{cause:e,cache:i});i.shift()}}}function bt(e){var t=S(localStorage.getItem("htmx-history-cache"))||[];for(var r=0;r<t.length;r++){if(t[r].url===e){return t[r]}}return null}function wt(e){var t=U.config.requestClass;var r=e.cloneNode(true);W(R(r,"."+t),function(e){q(e,t)});return r.innerHTML}function St(){var e=xt();var t=mt||location.pathname+location.search;$(z().body,"htmx:beforeHistorySave",{path:t,historyElt:e});if(U.config.historyEnabled)history.replaceState({htmx:true},z().title,window.location.href);yt(t,wt(e),z().title,window.scrollY)}function Et(e){if(U.config.historyEnabled)history.pushState({htmx:true},"",e);mt=e}function Ct(e){W(e,function(e){e.call()})}function Rt(n){var e=new XMLHttpRequest;var i={path:n,xhr:e};$(z().body,"htmx:historyCacheMiss",i);e.open("GET",n,true);e.setRequestHeader("HX-History-Restore-Request","true");e.onload=function(){if(this.status>=200&&this.status<400){$(z().body,"htmx:historyCacheMissLoad",i);var e=g(this.response);e=e.querySelector("[hx-history-elt],[data-hx-history-elt]")||e;var t=xt();var r=zt(t);me(t,e,r);Ct(r.tasks);mt=n;$(z().body,"htmx:historyRestore",{path:n})}else{J(z().body,"htmx:historyCacheMissLoadError",i)}};e.send()}function Ot(e){St();e=e||location.pathname+location.search;var t=bt(e);if(t){var r=g(t.content);var n=xt();var i=zt(n);me(n,r,i);Ct(i.tasks);document.title=t.title;window.scrollTo(0,t.scroll);mt=e;$(z().body,"htmx:historyRestore",{path:e})}else{if(U.config.refreshOnHistoryMiss){window.location.reload(true)}else{Rt(e)}}}function Lt(e){var t=G(e,"hx-push-url");return t&&t!=="false"||_(e).boosted&&_(e).pushURL}function qt(e){var t=G(e,"hx-push-url");return t==="true"||t==="false"?null:t}function At(e){var t=F(e,"hx-indicator");if(t==null){t=[e]}W(t,function(e){e.classList["add"].call(e.classList,U.config.requestClass)});return t}function Tt(e){W(e,function(e){e.classList["remove"].call(e.classList,U.config.requestClass)})}function Ht(e,t){for(var r=0;r<e.length;r++){var n=e[r];if(n.isSameNode(t)){return true}}return false}function Nt(e){if(e.name===""||e.name==null||e.disabled){return false}if(e.type==="button"||e.type==="submit"||e.tagName==="image"||e.tagName==="reset"||e.tagName==="file"){return false}if(e.type==="checkbox"||e.type==="radio"){return e.checked}return true}function kt(t,r,n,e,i){if(e==null||Ht(t,e)){return}else{t.push(e)}if(Nt(e)){var o=f(e,"name");var a=e.value;if(e.multiple){a=y(e.querySelectorAll("option:checked")).map(function(e){return e.value})}if(e.files){a=y(e.files)}if(o!=null&&a!=null){var s=r[o];if(s){if(Array.isArray(s)){if(Array.isArray(a)){r[o]=s.concat(a)}else{s.push(a)}}else{if(Array.isArray(a)){r[o]=[s].concat(a)}else{r[o]=[s,a]}}}else{r[o]=a}}if(i){It(e,n)}}if(d(e,"form")){var l=e.elements;W(l,function(e){kt(t,r,n,e,i)})}}function It(e,t){if(e.willValidate){$(e,"htmx:validation:validate");if(!e.checkValidity()){t.push({elt:e,message:e.validationMessage,validity:e.validity});$(e,"htmx:validation:failed",{message:e.validationMessage,validity:e.validity})}}}function Mt(e,t){var r=[];var n={};var i={};var o=[];var a=_(e);var s=d(e,"form")&&e.noValidate!==true;if(a.lastButtonClicked){s=s&&a.lastButtonClicked.formNoValidate!==true}if(t!=="get"){kt(r,i,o,H(e,"form"),s)}kt(r,n,o,e,s);if(a.lastButtonClicked){var l=f(a.lastButtonClicked,"name");if(l){n[l]=a.lastButtonClicked.value}}var u=F(e,"hx-include");W(u,function(e){kt(r,n,o,e,s);if(!d(e,"form")){W(e.querySelectorAll(Ne),function(e){kt(r,n,o,e,s)})}});n=Q(n,i);return{errors:o,values:n}}function Dt(e,t,r){if(e!==""){e+="&"}if(String(r)==="[object Object]"){r=JSON.stringify(r)}var n=encodeURIComponent(r);e+=encodeURIComponent(t)+"="+n;return e}function Ft(e){var t="";for(var r in e){if(e.hasOwnProperty(r)){var n=e[r];if(Array.isArray(n)){W(n,function(e){t=Dt(t,r,e)})}else{t=Dt(t,r,n)}}}return t}function Pt(e){var t=new FormData;for(var r in e){if(e.hasOwnProperty(r)){var n=e[r];if(Array.isArray(n)){W(n,function(e){t.append(r,e)})}else{t.append(r,n)}}}return t}function Xt(e,t,r){var n={"HX-Request":"true","HX-Trigger":f(e,"id"),"HX-Trigger-Name":f(e,"name"),"HX-Target":V(t,"id"),"HX-Current-URL":z().location.href};Wt(e,"hx-headers",false,n);if(r!==undefined){n["HX-Prompt"]=r}if(_(e).boosted){n["HX-Boosted"]="true"}return n}function jt(t,e){var r=G(e,"hx-params");if(r){if(r==="none"){return{}}else if(r==="*"){return t}else if(r.indexOf("not ")===0){W(r.substr(4).split(","),function(e){e=e.trim();delete t[e]});return t}else{var n={};W(r.split(","),function(e){e=e.trim();n[e]=t[e]});return n}}else{return t}}function Bt(e){return f(e,"href")&&f(e,"href").indexOf("#")>=0}function Ut(e,t){var r=t?t:G(e,"hx-swap");var n={swapStyle:_(e).boosted?"innerHTML":U.config.defaultSwapStyle,swapDelay:U.config.defaultSwapDelay,settleDelay:U.config.defaultSettleDelay};if(_(e).boosted&&!Bt(e)){n["show"]="top"}if(r){var i=w(r);if(i.length>0){n["swapStyle"]=i[0];for(var o=1;o<i.length;o++){var a=i[o];if(a.indexOf("swap:")===0){n["swapDelay"]=v(a.substr(5))}if(a.indexOf("settle:")===0){n["settleDelay"]=v(a.substr(7))}if(a.indexOf("scroll:")===0){var s=a.substr(7);var l=s.split(":");var f=l.pop();var u=l.length>0?l.join(":"):null;n["scroll"]=f;n["scrollTarget"]=u}if(a.indexOf("show:")===0){var c=a.substr(5);var l=c.split(":");var h=l.pop();var u=l.length>0?l.join(":"):null;n["show"]=h;n["showTarget"]=u}if(a.indexOf("focus-scroll:")===0){var d=a.substr("focus-scroll:".length);n["focusScroll"]=d=="true"}}}}return n}function Vt(t,r,n){var i=null;gt(r,function(e){if(i==null){i=e.encodeParameters(t,n,r)}});if(i!=null){return i}else{if(G(r,"hx-encoding")==="multipart/form-data"||d(r,"form")&&f(r,"enctype")==="multipart/form-data"){return Pt(n)}else{return Ft(n)}}}function zt(e){return{tasks:[],elts:[e]}}function _t(e,t){var r=e[0];var n=e[e.length-1];if(t.scroll){var i=null;if(t.scrollTarget){i=ee(r,t.scrollTarget)}if(t.scroll==="top"&&(r||i)){i=i||r;i.scrollTop=0}if(t.scroll==="bottom"&&(n||i)){i=i||n;i.scrollTop=i.scrollHeight}}if(t.show){var i=null;if(t.showTarget){var o=t.showTarget;if(t.showTarget==="window"){o="body"}i=ee(r,o)}if(t.show==="top"&&(r||i)){i=i||r;i.scrollIntoView({block:"start",behavior:U.config.scrollBehavior})}if(t.show==="bottom"&&(n||i)){i=i||n;i.scrollIntoView({block:"end",behavior:U.config.scrollBehavior})}}}function Wt(e,t,r,n){if(n==null){n={}}if(e==null){return n}var i=V(e,t);if(i){var o=i.trim();var a=r;if(o.indexOf("javascript:")===0){o=o.substr(11);a=true}else if(o.indexOf("js:")===0){o=o.substr(3);a=true}if(o.indexOf("{")!==0){o="{"+o+"}"}var s;if(a){s=Jt(e,function(){return Function("return ("+o+")")()},{})}else{s=S(o)}for(var l in s){if(s.hasOwnProperty(l)){if(n[l]==null){n[l]=s[l]}}}}return Wt(u(e),t,r,n)}function Jt(e,t,r){if(U.config.allowEval){return t()}else{J(e,"htmx:evalDisallowedError");return r}}function $t(e,t){return Wt(e,"hx-vars",true,t)}function Zt(e,t){return Wt(e,"hx-vals",false,t)}function Gt(e){return Q($t(e),Zt(e))}function Kt(t,r,n){if(n!==null){try{t.setRequestHeader(r,n)}catch(e){t.setRequestHeader(r,encodeURIComponent(n));t.setRequestHeader(r+"-URI-AutoEncoded","true")}}}function Yt(t){if(t.responseURL&&typeof URL!=="undefined"){try{var e=new URL(t.responseURL);return e.pathname+e.search}catch(e){J(z().body,"htmx:badResponseUrl",{url:t.responseURL})}}}function Qt(e,t){return e.getAllResponseHeaders().match(t)}function er(e,t,r){e=e.toLowerCase();if(r){if(r instanceof Element||p(r,"String")){return Z(e,t,null,null,{targetOverride:k(r),returnPromise:true})}else{return Z(e,t,k(r.source),r.event,{handler:r.handler,headers:r.headers,values:r.values,targetOverride:k(r.target),swapOverride:r.swap,returnPromise:true})}}else{return Z(e,t,null,null,{returnPromise:true})}}function tr(e){var t=[];while(e){t.push(e);e=e.parentElement}return t}function Z(e,t,n,f,r){var c=null;var h=null;r=r!=null?r:{};if(r.returnPromise&&typeof Promise!=="undefined"){var d=new Promise(function(e,t){c=e;h=t})}if(n==null){n=z().body}var v=r.handler||rr;if(!Y(n)){return}var g=r.targetOverride||ne(n);if(g==null||g==te){J(n,"htmx:targetError",{target:V(n,"hx-target")});return}var p=n;var i=_(n);var o=G(n,"hx-sync");var m=null;var x=false;if(o){var y=o.split(":");var b=y[0].trim();if(b==="this"){p=re(n,"hx-sync")}else{p=ee(n,b)}o=(y[1]||"drop").trim();i=_(p);if(o==="drop"&&i.xhr&&i.abortable!==true){return}else if(o==="abort"){if(i.xhr){return}else{x=true}}else if(o==="replace"){$(p,"htmx:abort")}else if(o.indexOf("queue")===0){var w=o.split(" ");m=(w[1]||"last").trim()}}if(i.xhr){if(i.abortable){$(p,"htmx:abort")}else{if(m==null){if(f){var S=_(f);if(S&&S.triggerSpec&&S.triggerSpec.queue){m=S.triggerSpec.queue}}if(m==null){m="last"}}if(i.queuedRequests==null){i.queuedRequests=[]}if(m==="first"&&i.queuedRequests.length===0){i.queuedRequests.push(function(){Z(e,t,n,f,r)})}else if(m==="all"){i.queuedRequests.push(function(){Z(e,t,n,f,r)})}else if(m==="last"){i.queuedRequests=[];i.queuedRequests.push(function(){Z(e,t,n,f,r)})}return}}var a=new XMLHttpRequest;i.xhr=a;i.abortable=x;var s=function(){i.xhr=null;i.abortable=false;if(i.queuedRequests!=null&&i.queuedRequests.length>0){var e=i.queuedRequests.shift();e()}};var E=G(n,"hx-prompt");if(E){var C=prompt(E);if(C===null||!$(n,"htmx:prompt",{prompt:C,target:g})){K(c);s();return d}}var R=G(n,"hx-confirm");if(R){if(!confirm(R)){K(c);s();return d}}var O=Xt(n,g,C);if(r.headers){O=Q(O,r.headers)}var L=Mt(n,e);var q=L.errors;var A=L.values;if(r.values){A=Q(A,r.values)}var T=Gt(n);var H=Q(A,T);var N=jt(H,n);if(e!=="get"&&G(n,"hx-encoding")==null){O["Content-Type"]="application/x-www-form-urlencoded"}if(t==null||t===""){t=z().location.href}var k=Wt(n,"hx-request");var l={parameters:N,unfilteredParameters:H,headers:O,target:g,verb:e,errors:q,withCredentials:r.credentials||k.credentials||U.config.withCredentials,timeout:r.timeout||k.timeout||U.config.timeout,path:t,triggeringEvent:f};if(!$(n,"htmx:configRequest",l)){K(c);s();return d}t=l.path;e=l.verb;O=l.headers;N=l.parameters;q=l.errors;if(q&&q.length>0){$(n,"htmx:validation:halted",l);K(c);s();return d}var I=t.split("#");var M=I[0];var D=I[1];if(e==="get"){var F=M;var P=Object.keys(N).length!==0;if(P){if(F.indexOf("?")<0){F+="?"}else{F+="&"}F+=Ft(N);if(D){F+="#"+D}}a.open("GET",F,true)}else{a.open(e.toUpperCase(),t,true)}a.overrideMimeType("text/html");a.withCredentials=l.withCredentials;a.timeout=l.timeout;if(k.noHeaders){}else{for(var X in O){if(O.hasOwnProperty(X)){var j=O[X];Kt(a,X,j)}}}var u={xhr:a,target:g,requestConfig:l,etc:r,pathInfo:{path:t,finalPath:F,anchor:D}};a.onload=function(){try{var e=tr(n);v(n,u);Tt(B);$(n,"htmx:afterRequest",u);$(n,"htmx:afterOnLoad",u);if(!Y(n)){var t=null;while(e.length>0&&t==null){var r=e.shift();if(Y(r)){t=r}}if(t){$(t,"htmx:afterRequest",u);$(t,"htmx:afterOnLoad",u)}}K(c);s()}catch(e){J(n,"htmx:onLoadError",Q({error:e},u));throw e}};a.onerror=function(){Tt(B);J(n,"htmx:afterRequest",u);J(n,"htmx:sendError",u);K(h);s()};a.onabort=function(){Tt(B);J(n,"htmx:afterRequest",u);J(n,"htmx:sendAbort",u);K(h);s()};a.ontimeout=function(){Tt(B);J(n,"htmx:afterRequest",u);J(n,"htmx:timeout",u);K(h);s()};if(!$(n,"htmx:beforeRequest",u)){K(c);s();return d}var B=At(n);W(["loadstart","loadend","progress","abort"],function(t){W([a,a.upload],function(e){e.addEventListener(t,function(e){$(n,"htmx:xhr:"+t,{lengthComputable:e.lengthComputable,loaded:e.loaded,total:e.total})})})});$(n,"htmx:beforeSend",u);a.send(e==="get"?null:Vt(a,n,N));return d}function rr(s,l){var u=l.xhr;var f=l.target;var r=l.etc;if(!$(s,"htmx:beforeOnLoad",l))return;if(Qt(u,/HX-Trigger:/i)){Se(u,"HX-Trigger",s)}if(Qt(u,/HX-Push:/i)){var c=u.getResponseHeader("HX-Push")}if(Qt(u,/HX-Redirect:/i)){window.location.href=u.getResponseHeader("HX-Redirect");return}if(Qt(u,/HX-Refresh:/i)){if("true"===u.getResponseHeader("HX-Refresh")){location.reload();return}}if(Qt(u,/HX-Retarget:/i)){l.target=z().querySelector(u.getResponseHeader("HX-Retarget"))}var h;if(c=="false"){h=false}else{h=Lt(s)||c}var n=u.status>=200&&u.status<400&&u.status!==204;var d=u.response;var e=u.status>=400;var t=Q({shouldSwap:n,serverResponse:d,isError:e},l);if(!$(f,"htmx:beforeSwap",t))return;f=t.target;d=t.serverResponse;e=t.isError;l.failed=e;l.successful=!e;if(t.shouldSwap){if(u.status===286){Ie(s)}gt(s,function(e){d=e.transformResponse(d,u,s)});if(h){St()}var i=r.swapOverride;var v=Ut(s,i);f.classList.add(U.config.swappingClass);var o=function(){try{var e=document.activeElement;var t={};try{t={elt:e,start:e?e.selectionStart:null,end:e?e.selectionEnd:null}}catch(e){}var n=zt(f);we(v.swapStyle,f,s,d,n);if(t.elt&&!Y(t.elt)&&t.elt.id){var r=document.getElementById(t.elt.id);var i={preventScroll:v.focusScroll!==undefined?!v.focusScroll:!U.config.defaultFocusScroll};if(r){if(t.start&&r.setSelectionRange){r.setSelectionRange(t.start,t.end)}r.focus(i)}}f.classList.remove(U.config.swappingClass);W(n.elts,function(e){if(e.classList){e.classList.add(U.config.settlingClass)}$(e,"htmx:afterSwap",l)});if(l.pathInfo.anchor){location.hash=l.pathInfo.anchor}if(Qt(u,/HX-Trigger-After-Swap:/i)){var o=s;if(!Y(s)){o=z().body}Se(u,"HX-Trigger-After-Swap",o)}var a=function(){W(n.tasks,function(e){e.call()});W(n.elts,function(e){if(e.classList){e.classList.remove(U.config.settlingClass)}$(e,"htmx:afterSettle",l)});if(h){var e=c||qt(s)||Yt(u)||l.pathInfo.finalPath||l.pathInfo.path;Et(e);$(z().body,"htmx:pushedIntoHistory",{path:e})}if(n.title){var t=C("title");if(t){t.innerHTML=n.title}else{window.document.title=n.title}}_t(n.elts,v);if(Qt(u,/HX-Trigger-After-Settle:/i)){var r=s;if(!Y(s)){r=z().body}Se(u,"HX-Trigger-After-Settle",r)}};if(v.settleDelay>0){setTimeout(a,v.settleDelay)}else{a()}}catch(e){J(s,"htmx:swapError",l);throw e}};if(v.swapDelay>0){setTimeout(o,v.swapDelay)}else{o()}}if(e){J(s,"htmx:responseError",Q({error:"Response Status Error Code "+u.status+" from "+l.pathInfo.path},l))}}var nr={};function ir(){return{init:function(e){return null},onEvent:function(e,t){return true},transformResponse:function(e,t,r){return e},isInlineSwap:function(e){return false},handleSwap:function(e,t,r,n){return false},encodeParameters:function(e,t,r){return null}}}function or(e,t){if(t.init){t.init(r)}nr[e]=Q(ir(),t)}function ar(e){delete nr[e]}function sr(e,r,n){if(e==undefined){return r}if(r==undefined){r=[]}if(n==undefined){n=[]}var t=V(e,"hx-ext");if(t){W(t.split(","),function(e){e=e.replace(/ /g,"");if(e.slice(0,7)=="ignore:"){n.push(e.slice(7));return}if(n.indexOf(e)<0){var t=nr[e];if(t&&r.indexOf(t)<0){r.push(t)}}})}return sr(u(e),r,n)}function lr(e){if(z().readyState!=="loading"){e()}else{z().addEventListener("DOMContentLoaded",e)}}function ur(){if(U.config.includeIndicatorStyles!==false){z().head.insertAdjacentHTML("beforeend","<style> ."+U.config.indicatorClass+"{opacity:0;transition: opacity 200ms ease-in;} ."+U.config.requestClass+" ."+U.config.indicatorClass+"{opacity:1} ."+U.config.requestClass+"."+U.config.indicatorClass+"{opacity:1} </style>")}}function fr(){var e=z().querySelector('meta[name="htmx-config"]');if(e){return S(e.content)}else{return null}}function cr(){var e=fr();if(e){U.config=Q(U.config,e)}}lr(function(){cr();ur();var e=z().body;ct(e);var t=z().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(e){var t=e.target;var r=_(t);if(r&&r.xhr){r.xhr.abort()}});window.onpopstate=function(e){if(e.state&&e.state.htmx){Ot();W(t,function(e){$(e,"htmx:restored",{document:z(),triggerEvent:$})})}};setTimeout(function(){$(e,"htmx:load",{})},0)});return U}()}); diff --git a/ucast/static/ucast/js/ucast.js b/ucast/static/ucast/js/ucast.js deleted file mode 100644 index 5d914b4..0000000 --- a/ucast/static/ucast/js/ucast.js +++ /dev/null @@ -1,9 +0,0 @@ -const confirmButtons = document.getElementsByClassName("dialog-confirm") -for(let btn of confirmButtons) { - btn.addEventListener("click", function(e) { - const result = window.confirm(btn.getAttribute("confirm-msg")); - if(!result) { - e.preventDefault(); - } - }); -} diff --git a/ucast/static/ucast/logo.svg b/ucast/static/ucast/logo.svg deleted file mode 100644 index fa59e11..0000000 --- a/ucast/static/ucast/logo.svg +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg id="svg5" width="68.5mm" height="15.79mm" version="1.1" viewBox="0 0 68.5 15.79" xmlns="http://www.w3.org/2000/svg"><g id="layer1" transform="translate(-1.4688 -18.46)" fill="none" stroke-linecap="square"><path id="path3041" d="m67.469 21.167h-10.583" stroke="#282828"/><path id="path3043" d="m62.177 21.445v10.305" stroke="#282828" stroke-width=".98677"/><path id="path3572" d="m3.9688 21.167v6.6146l3.9687 3.9688h2.6458l3.9688-3.9688v-6.6146" stroke="#e00"/><path id="path3687" d="m27.781 21.167h-6.6146l-3.9688 3.9688v2.6458l3.9688 3.9688h6.6146" stroke="#282828"/><path id="path3802" d="m30.427 31.75v-5.2917l5.2917-5.2917 5.2917 5.2917v5.2917" stroke="#282828"/><path id="path3954" d="m54.24 21.167h-7.9375l-2.6458 2.6458 2.6458 2.6458h5.2917l2.6458 2.6458-2.6458 2.6458h-7.9375" stroke="#282828"/></g></svg> diff --git a/ucast/static/ucast/logo_dark.svg b/ucast/static/ucast/logo_dark.svg deleted file mode 100644 index 25c7b5d..0000000 --- a/ucast/static/ucast/logo_dark.svg +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg id="svg5" width="68.5mm" height="15.79mm" version="1.1" viewBox="0 0 68.5 15.79" xmlns="http://www.w3.org/2000/svg"><g id="layer1" transform="translate(-1.4688 -18.46)" fill="none" stroke-linecap="square"><path id="path3041" d="m67.469 21.167h-10.583" stroke="#fff"/><path id="path3043" d="m62.177 21.445v10.305" stroke="#fff" stroke-width=".98677"/><path id="path3572" d="m3.9688 21.167v6.6146l3.9687 3.9688h2.6458l3.9688-3.9688v-6.6146" stroke="#e00"/><path id="path3687" d="m27.781 21.167h-6.6146l-3.9688 3.9688v2.6458l3.9688 3.9688h6.6146" stroke="#fff"/><path id="path3802" d="m30.427 31.75v-5.2917l5.2917-5.2917 5.2917 5.2917v5.2917" stroke="#fff"/><path id="path3954" d="m54.24 21.167h-7.9375l-2.6458 2.6458 2.6458 2.6458h5.2917l2.6458 2.6458-2.6458 2.6458h-7.9375" stroke="#fff"/></g></svg> diff --git a/ucast/static/ucast/webfonts/fa-brands-400.ttf b/ucast/static/ucast/webfonts/fa-brands-400.ttf deleted file mode 100644 index 430a02e..0000000 Binary files a/ucast/static/ucast/webfonts/fa-brands-400.ttf and /dev/null differ diff --git a/ucast/static/ucast/webfonts/fa-brands-400.woff2 b/ucast/static/ucast/webfonts/fa-brands-400.woff2 deleted file mode 100644 index 4d904aa..0000000 Binary files a/ucast/static/ucast/webfonts/fa-brands-400.woff2 and /dev/null differ diff --git a/ucast/static/ucast/webfonts/fa-regular-400.ttf b/ucast/static/ucast/webfonts/fa-regular-400.ttf deleted file mode 100644 index 23e3feb..0000000 Binary files a/ucast/static/ucast/webfonts/fa-regular-400.ttf and /dev/null differ diff --git a/ucast/static/ucast/webfonts/fa-regular-400.woff2 b/ucast/static/ucast/webfonts/fa-regular-400.woff2 deleted file mode 100644 index 80e3b12..0000000 Binary files a/ucast/static/ucast/webfonts/fa-regular-400.woff2 and /dev/null differ diff --git a/ucast/static/ucast/webfonts/fa-solid-900.ttf b/ucast/static/ucast/webfonts/fa-solid-900.ttf deleted file mode 100644 index da90824..0000000 Binary files a/ucast/static/ucast/webfonts/fa-solid-900.ttf and /dev/null differ diff --git a/ucast/static/ucast/webfonts/fa-solid-900.woff2 b/ucast/static/ucast/webfonts/fa-solid-900.woff2 deleted file mode 100644 index 360ba11..0000000 Binary files a/ucast/static/ucast/webfonts/fa-solid-900.woff2 and /dev/null differ diff --git a/ucast/static/ucast/webfonts/fa-v4compatibility.ttf b/ucast/static/ucast/webfonts/fa-v4compatibility.ttf deleted file mode 100644 index e9545ed..0000000 Binary files a/ucast/static/ucast/webfonts/fa-v4compatibility.ttf and /dev/null differ diff --git a/ucast/static/ucast/webfonts/fa-v4compatibility.woff2 b/ucast/static/ucast/webfonts/fa-v4compatibility.woff2 deleted file mode 100644 index db5b0b9..0000000 Binary files a/ucast/static/ucast/webfonts/fa-v4compatibility.woff2 and /dev/null differ diff --git a/ucast/storage.py b/ucast/storage.py new file mode 100644 index 0000000..ccdb2af --- /dev/null +++ b/ucast/storage.py @@ -0,0 +1,44 @@ +# coding=utf-8 +import os +from pathlib import Path + +UCAST_DIRNAME = ".ucast" + + +class ChannelFolder: + def __init__(self, dir_root: Path): + self.dir_root = dir_root + dir_ucast = self.dir_root / UCAST_DIRNAME + + self.file_videos = dir_ucast / "videos.json" + self.file_options = dir_ucast / "options.json" + self.file_avatar = dir_ucast / "avatar.png" + self.file_feed = dir_ucast / "feed.xml" + self.dir_covers = dir_ucast / "covers" + + def does_exist(self) -> bool: + return os.path.isdir(self.dir_covers) + + def create(self): + os.makedirs(self.dir_covers, exist_ok=True) + + +class Storage: + def __init__(self, config_dir: Path, data_dir: Path): + self.dir_config = config_dir + self.dir_data = data_dir + + def get_channel_folder(self, channel_name: str): + cf = ChannelFolder(self.dir_data / channel_name) + if not cf.does_exist(): + raise FileNotFoundError("channel folder does not exist") + + return cf + + def create_channel_folder(self, channel_name: str): + cf = ChannelFolder(self.dir_data / channel_name) + if cf.does_exist(): + raise FileExistsError("channel folder already exists") + + cf.create() + return cf diff --git a/ucast/tasks/__init__.py b/ucast/tasks/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/ucast/tasks/download.py b/ucast/tasks/download.py deleted file mode 100644 index 8ee1a9d..0000000 --- a/ucast/tasks/download.py +++ /dev/null @@ -1,178 +0,0 @@ -import mimetypes -import os - -from django.db.models import ObjectDoesNotExist -from django.utils import timezone -from yt_dlp.utils import DownloadError - -from ucast import queue -from ucast.models import Channel, Video -from ucast.service import controller, cover, storage, videoutil, youtube - - -def _load_scraped_video(vid: youtube.VideoScraped, channel: Channel): - # Use Redis to ensure the same video is not processed multiple times - redis = queue.get_redis_connection() - lock_key = f"ucast:lock_load_video:{vid.id}" - - if not redis.set(lock_key, "1", 120, nx=True): - return - - # Create video object if it does not exist - try: - video = Video.objects.get(video_id=vid.id) - except ObjectDoesNotExist: - try: - details = youtube.get_video_details(vid.id) - except DownloadError as e: - if "available" in e.msg: - # Create dummy video to prevent further download attempts - # of unavailable videos - video = Video( - video_id=vid.id, - title="", - slug="", - channel=channel, - published=timezone.datetime(2000, 1, 1, tzinfo=timezone.utc), - description="", - duration=0, - is_deleted=True, - ) - video.save() - return - raise e - - # Dont load active livestreams - if details.is_currently_live: - redis.delete(lock_key) - return - - slug = Video.get_new_slug( - details.title, details.published.date(), channel.channel_id - ) - - video = Video( - video_id=details.id, - title=details.title, - slug=slug, - channel=channel, - published=details.published, - description=details.description, - duration=details.duration, - is_livestream=details.is_livestream, - is_short=details.is_short, - ) - video.save() - - if ( - video.downloaded is None - and video.is_deleted is False - and channel.should_download(video) - ): - queue.enqueue(download_video, video.id) - - redis.delete(lock_key) - - -def download_video(v_id: int): - """ - Download a video including its thumbnail, create a cover image - and store everything in the channel folder. - - :param v_id: Video ID - """ - # Return if the video was already downloaded by a previous task - try: - video = Video.objects.get(id=v_id) - except ObjectDoesNotExist: - return - if video.downloaded: - return - - store = storage.Storage() - channel_folder = store.get_or_create_channel_folder(video.channel.slug) - - audio_file = channel_folder.get_audio(video.slug) - try: - details = youtube.download_audio(video.video_id, audio_file) - except DownloadError as e: - if "available" in e.msg: - video.is_deleted = True - video.save() - return - raise e - - # Download/convert thumbnails - tn_path = channel_folder.get_thumbnail(video.slug) - youtube.download_thumbnail(details, tn_path) - videoutil.resize_thumbnail(tn_path, channel_folder.get_thumbnail(video.slug, True)) - cover_file = channel_folder.get_cover(video.slug) - - if not os.path.isfile(channel_folder.file_avatar): - controller.download_channel_avatar(video.channel) - - cover.create_cover_file( - tn_path, - channel_folder.file_avatar, - video.title, - video.channel.name, - cover.COVER_STYLE_BLUR, - cover_file, - ) - - videoutil.tag_audio( - audio_file, - video.title, - video.channel.name, - video.published.date(), - video.get_full_description(), - cover_file, - ) - - video.downloaded = timezone.now() - video.download_size = os.path.getsize(audio_file) - video.download_type, _ = mimetypes.guess_type(audio_file) - video.save() - - -def update_channel(c_id: int): - """Update a single channel from its RSS feed""" - try: - channel = Channel.objects.get(id=c_id) - except ObjectDoesNotExist: - return - videos = youtube.get_channel_videos_from_feed(channel.channel_id) - - for vid in videos: - _load_scraped_video(vid, channel) - - channel.last_update = timezone.now() - channel.save() - - -def update_channels(): - """ - Update all channels from their RSS feeds and download new videos. - This task is scheduled a regular intervals. - """ - for channel in Channel.objects.filter(active=True): - queue.enqueue(update_channel, channel.id) - - -def download_channel(c_id: int, limit: int): - """ - Download maximum number of videos from a channel. - - :param c_id: Channel ID (Database) - :param limit: Max number of videos - """ - if limit < 1: - return - - try: - channel = Channel.objects.get(id=c_id) - except ObjectDoesNotExist: - return - - for vid in youtube.get_channel_videos_from_scraper(channel.channel_id, limit): - _load_scraped_video(vid, channel) diff --git a/ucast/tasks/library.py b/ucast/tasks/library.py deleted file mode 100644 index 624cfc8..0000000 --- a/ucast/tasks/library.py +++ /dev/null @@ -1,154 +0,0 @@ -import os - -from django.db.models import ObjectDoesNotExist -from django.utils import timezone -from PIL import Image - -from ucast import queue -from ucast.models import Channel, Video -from ucast.service import cover, storage, util, videoutil, youtube - - -def recreate_cover(v_id: int): - try: - video = Video.objects.get(id=v_id) - except ObjectDoesNotExist: - return - - store = storage.Storage() - cf = store.get_channel_folder(video.channel.slug) - - thumbnail_file = cf.get_thumbnail(video.slug) - cover_file = cf.get_cover(video.slug) - audio_file = cf.get_audio(video.slug) - - if not os.path.isfile(cf.file_avatar): - raise FileNotFoundError(f"could not find avatar for channel {video.channel_id}") - - if not os.path.isfile(thumbnail_file): - raise FileNotFoundError(f"could not find thumbnail for video {video.video_id}") - - cover.create_cover_file( - thumbnail_file, - cf.file_avatar, - video.title, - video.channel.name, - cover.COVER_STYLE_BLUR, - cover_file, - ) - - videoutil.tag_audio( - audio_file, - video.title, - video.channel.name, - video.published.date(), - video.get_full_description(), - cover_file, - ) - - -def recreate_covers(): - for video in Video.objects.filter(downloaded__isnull=False): - queue.enqueue(recreate_cover, video.id) - - -def resize_thumbnail(v_id: int): - try: - video = Video.objects.get(id=v_id) - except ObjectDoesNotExist: - return - - store = storage.Storage() - cf = store.get_channel_folder(video.channel.slug) - - tn_path = cf.get_thumbnail(video.slug) - tn_img = Image.open(tn_path) - if tn_img.size != videoutil.THUMBNAIL_SIZE: - tn_img = util.resize_image(tn_img, videoutil.THUMBNAIL_SIZE) - tn_img.save(tn_path) - videoutil.resize_thumbnail(tn_path, cf.get_thumbnail(video.slug, True)) - - -def resize_thumbnails(): - """ - Used to unify thumbnail sizes for the existing collection before v0.4.2. - Needs to be triggered manually: ``manage.py rqenqueue ucast.tasks.library.resize_thumbnails``. - """ - for video in Video.objects.filter(downloaded__isnull=False): - queue.enqueue(resize_thumbnail, video.id) - - -def update_file_storage(): - store = storage.Storage() - - for video in Video.objects.all(): - try: - cf = store.get_channel_folder(video.channel.slug) - except FileNotFoundError: - video.downloaded = None - video.download_size = None - video.save() - return - - audio_file = cf.get_audio(video.slug) - cover_file = cf.get_cover(video.slug) - tn_file = cf.get_thumbnail(video.slug) - tn_file_sm = cf.get_thumbnail(video.slug, True) - - if not os.path.isfile(audio_file) or not os.path.isfile(tn_file): - video.downloaded = None - video.download_size = None - video.save() - return - - if not os.path.isfile(tn_file_sm): - videoutil.resize_thumbnail(tn_file, tn_file_sm) - - if not os.path.isfile(cover_file): - recreate_cover(video) - - if video.downloaded is None: - video.downloaded = timezone.now() - - video.download_size = os.path.getsize(audio_file) - video.save() - - -def update_channel_info(ch_id: int): - try: - channel = Channel.objects.get(id=ch_id) - except ObjectDoesNotExist: - return - - channel_data = youtube.get_channel_metadata( - youtube.channel_url_from_id(channel.channel_id) - ) - - if channel_data.avatar_url != channel.avatar_url: - store = storage.Storage() - channel_folder = store.get_or_create_channel_folder(channel.slug) - - util.download_image_file( - channel_data.avatar_url, channel_folder.file_avatar, videoutil.AVATAR_SIZE - ) - videoutil.resize_avatar( - channel_folder.file_avatar, channel_folder.file_avatar_sm - ) - - channel.avatar_url = channel_data.avatar_url - - channel.name = channel_data.name - channel.description = channel_data.description - channel.subscribers = channel_data.subscribers - - channel.save() - - -def update_channel_infos(): - for channel in Channel.objects.filter(active=True): - queue.enqueue(update_channel_info, channel.id) - - -def clean_cache(): - cache = storage.Cache() - cache.cleanup() diff --git a/ucast/tasks/schedule.py b/ucast/tasks/schedule.py deleted file mode 100644 index 9786e93..0000000 --- a/ucast/tasks/schedule.py +++ /dev/null @@ -1,42 +0,0 @@ -import logging -from datetime import datetime, timedelta - -from django.conf import settings - -from ucast import queue -from ucast.tasks import download, library - -log = logging.getLogger(__name__) - - -def clear_scheduled_jobs(): - """Delete all scheduled jobs to prevent duplicates""" - scheduler = queue.get_scheduler() - for job in scheduler.get_jobs(): - log.debug("Deleting scheduled job %s", job) - job.delete() - - -def register_scheduled_jobs(): - """Register all scheduled jobs""" - scheduler = queue.get_scheduler() - scheduler.schedule( - datetime.utcnow(), - download.update_channels, - id="schedule_update_channels", - interval=settings.YT_UPDATE_INTERVAL, - ) - - scheduler.schedule( - datetime.utcnow() + timedelta(days=1), - library.update_channel_infos, - id="schedule_update_channel_infos", - interval=24 * 3600, - ) - - scheduler.schedule( - datetime.utcnow() + timedelta(days=1), - library.clean_cache, - id="schedule_clean_cache", - interval=24 * 3600, - ) diff --git a/ucast/templates/bulma/base.html b/ucast/templates/bulma/base.html deleted file mode 100644 index fee155e..0000000 --- a/ucast/templates/bulma/base.html +++ /dev/null @@ -1,87 +0,0 @@ -{% load static bulma_tags %} -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - <title>{% block title %}{% endblock title %} - {% block css %} - - - - - - {% block extra_css %}{% endblock extra_css %} - {% endblock css %} - - - -{% block header %} -
- -
-{% endblock header %} - -{% block hero %}{% endblock hero %} - -
-
- {% block messages %} - {% if messages %} -
-
- {% for message in messages %} -
-
{{ message }}
-
- {% endfor %} -
-
- {% endif %} - {% endblock messages %} - - {% block content_area %} - {% block content_title %}{% endblock content_title %} - {% block content %}{% endblock content %} - {% endblock content_area %} -
-
- -{% block modal %}{% endblock modal %} - -{% block footer %} -{% endblock footer %} - -{% block javascript %} - {% block extra_javascript %}{% endblock extra_javascript %} -{% endblock javascript %} - - diff --git a/ucast/templates/ucast/channel_download.html b/ucast/templates/ucast/channel_download.html deleted file mode 100644 index 64ac6f0..0000000 --- a/ucast/templates/ucast/channel_download.html +++ /dev/null @@ -1,24 +0,0 @@ -{% extends 'base.html' %} -{% load bulma_tags %} - -{% block title %}ucast - {{ channel.name }}{% endblock %} - -{% block content %} -
- -
- Batch download -
-
-
- {% csrf_token %} - {{ form|bulma }} -
- - Back -
-
- -{% endblock content %} diff --git a/ucast/templates/ucast/channel_edit.html b/ucast/templates/ucast/channel_edit.html deleted file mode 100644 index d00a999..0000000 --- a/ucast/templates/ucast/channel_edit.html +++ /dev/null @@ -1,24 +0,0 @@ -{% extends 'base.html' %} -{% load bulma_tags %} - -{% block title %}ucast - {{ channel.name }}{% endblock %} - -{% block content %} -
- -
- Edit -
-
-
- {% csrf_token %} - {{ form|bulma }} -
- - Back -
-
- -{% endblock content %} diff --git a/ucast/templates/ucast/channels.html b/ucast/templates/ucast/channels.html deleted file mode 100644 index 9b93a86..0000000 --- a/ucast/templates/ucast/channels.html +++ /dev/null @@ -1,80 +0,0 @@ -{% extends 'base.html' %} -{% load static %} - -{% block title %}ucast - Channels{% endblock %} - -{% block content %} -

Channels

- -
- {% if form.errors %} - {% for field in form %} - {% for error in field.errors %} -
- {{ error|escape }} -
- {% endfor %} - {% endfor %} - {% for error in form.non_field_errors %} -
- {{ error|escape }} -
- {% endfor %} - {% endif %} -
- {% csrf_token %} -
-
- -
-
- -
-
-
-
- - {% for channel in channels %} -
-
- - - -
-
- {{ channel.name }} -
-
- - - -
-
- -
-
- -
-
-
-
- {% endfor %} - - -{% endblock content %} - -{% block javascript %} - - -{% endblock %} diff --git a/ucast/templates/ucast/downloads.html b/ucast/templates/ucast/downloads.html deleted file mode 100644 index 9f51790..0000000 --- a/ucast/templates/ucast/downloads.html +++ /dev/null @@ -1,80 +0,0 @@ -{% extends 'base.html' %} - -{% block title %}ucast - Downloads{% endblock %} - -{% block content %} -
-
- Downloading -
-
- - {% if downloading_videos %} -
- {% include "ucast/downloads_items.html" %} -
- {% else %} -
-

Not downloading any videos

-
- {% endif %} - -
-
- Download errors -
-
- -
- {% if failed_jobs %} -
-
- {% csrf_token %} - -
-
- {% csrf_token %} - -
-
- - - - - - - - - - - - - {% for job in failed_jobs %} - - - - - - - - {% endfor %} - -
IDFunctionDetailsRequeueDelete
{{ job.id }}{{ job.func_name }}Details -
- {% csrf_token %} - - -
-
-
- {% csrf_token %} - - -
-
- {% else %} -

No download errors

- {% endif %} -
- -{% endblock content %} diff --git a/ucast/templates/ucast/downloads_items.html b/ucast/templates/ucast/downloads_items.html deleted file mode 100644 index 86f5b28..0000000 --- a/ucast/templates/ucast/downloads_items.html +++ /dev/null @@ -1,26 +0,0 @@ - -
- - - - - - - - - - - {% for video in downloading_videos %} - - - - - - - {% endfor %} - -
Video-IDTitleChannelPublished
{{ video.video_id }}{{ video.title }}{{ video.channel.name }} - {{ video.published|date:"SHORT_DATE_FORMAT" }}
-
diff --git a/ucast/templates/ucast/error_details.html b/ucast/templates/ucast/error_details.html deleted file mode 100644 index 4928008..0000000 --- a/ucast/templates/ucast/error_details.html +++ /dev/null @@ -1,32 +0,0 @@ -{% extends 'base.html' %} - -{% block title %}ucast - Error Details{% endblock %} - -{% block content %} -
-
- Job {{ job.id }} -
-
- {{ job.func_name }} -
-
- -
-  {{ job.exc_info }}
-  
- -
-
- {% csrf_token %} - - -
-
- {% csrf_token %} - - -
-
- -{% endblock content %} diff --git a/ucast/templates/ucast/search.html b/ucast/templates/ucast/search.html deleted file mode 100644 index a6c6b07..0000000 --- a/ucast/templates/ucast/search.html +++ /dev/null @@ -1,67 +0,0 @@ -{% extends 'base.html' %} - -{% block title %}ucast - Search{% endblock %} - -{% block content %} -
-
-
-
- -
-
- -
-
-
-
- -
- {% if videos %} - {% for video in videos %} -
- - - - - - -
- -
-
- -   {{ video.channel.name }} - - -   {{ video.published|date:"SHORT_DATE_FORMAT" }} - -
- -
-
- - - -
-
-
-
-
- {% endfor %} - - {% elif query %} -

No videos

- {% endif %} -
-{% endblock content %} diff --git a/ucast/templates/ucast/videos.html b/ucast/templates/ucast/videos.html deleted file mode 100644 index a491a8b..0000000 --- a/ucast/templates/ucast/videos.html +++ /dev/null @@ -1,102 +0,0 @@ -{% extends 'base.html' %} - -{% block title %}ucast - {{ channel.name }}{% endblock %} - -{% block content %} -
-
-

{{ channel.name }}

-

Last update: {{ channel.last_update }}

-
- -
-   {{ channel.subscribers }} -   {{ videos.paginator.count }} - {% if n_pending %} - ({{ n_pending }}) - {% endif %} - -   {{ channel.download_size|filesizeformat }} -   {{ channel.channel_id }} -
- -
-
-
- - - -
-
- {% if channel.active %} - - {% else %} - - {% endif %} -
-
- - - -
-
- - - -
-
- -
-
- {% csrf_token %} -
-
- - {% if not videos %} - {% if n_pending %} -

There are {{ n_pending }} videos waiting to be downloaded. - Please wait a few minutes and refesh this page. - You can see the current status in the Downloads tab. -

- {% else %} -

No videos. If you have just added this channel, - you have to wait a minute for ucast to start looking for videos.

- {% endif %} - {% else %} -
- {% include "ucast/videos_items.html" %} -
- {% endif %} - - {% if videos.has_previous or videos.has_next %} - - {% endif %} -{% endblock content %} diff --git a/ucast/templates/ucast/videos_items.html b/ucast/templates/ucast/videos_items.html deleted file mode 100644 index 45a24df..0000000 --- a/ucast/templates/ucast/videos_items.html +++ /dev/null @@ -1,48 +0,0 @@ -{% for video in videos %} -
- - - - - - -
- -
- -   {{ video.published|date:"SHORT_DATE_FORMAT" }} - - -
-
- - - -
-
-
- {% csrf_token %} - - -
-
-
-
-
-
-{% endfor %} diff --git a/ucast/tests/__init__.py b/ucast/tests/__init__.py deleted file mode 100644 index bb7d9a4..0000000 --- a/ucast/tests/__init__.py +++ /dev/null @@ -1,80 +0,0 @@ -import json -import uuid -from dataclasses import dataclass -from datetime import datetime -from importlib import resources -from typing import Dict, List - -from ucast.service import youtube - -DIR_TESTFILES = resources.path("ucast.tests", "_testfiles") - - -def get_video_details(video_id: str): - with open(DIR_TESTFILES / "object" / "videodetails.json") as f: - videodetails = json.load(f) - - vd_raw = videodetails[video_id] - vd_raw["published"] = datetime.fromisoformat(vd_raw["published"]) - - return youtube.VideoDetails(**vd_raw) - - -def get_channel_metadata(channel_url: str): - with open(DIR_TESTFILES / "object" / "channelmeta.json") as f: - channelmeta = json.load(f) - - return youtube.ChannelMetadata(**channelmeta[channel_url]) - - -_global_mock_calls: Dict[str, List["_GlobalMockCall"]] = {} - - -@dataclass -class _GlobalMockCall: - args: list - kwargs: dict - - -class GlobalMock: - def __init__(self): - self.uuid = str(uuid.uuid4()) - - @property - def calls(self) -> List[_GlobalMockCall]: - global _global_mock_calls - - if self.uuid not in _global_mock_calls: - _global_mock_calls[self.uuid] = [] - - return _global_mock_calls[self.uuid] - - @property - def n_calls(self) -> int: - return len(self.calls) - - def __call__(self, *args, **kwargs): - call = _GlobalMockCall(args, kwargs) - self.calls.append(call) - - def assert_called(self): - if not self.calls: - raise AssertionError("Mock has never been called") - - def assert_any_call(self, *args, **kwargs): - self.assert_called() - - for call in self.calls: - if call.args == args and call.kwargs == kwargs: - return - - raise AssertionError( - f"Call with args: {args}, kwargs: {kwargs} not found.\ -Registered calls: {self.calls}" - ) - - def assert_called_with(self, *args, **kwargs): - self.assert_called() - - call = self.calls[-1] - assert call.args == args and call.kwargs == kwargs diff --git a/ucast/tests/_testfiles/audio/audio1.mp3 b/ucast/tests/_testfiles/audio/audio1.mp3 deleted file mode 100644 index 97431c9..0000000 Binary files a/ucast/tests/_testfiles/audio/audio1.mp3 and /dev/null differ diff --git a/ucast/tests/_testfiles/avatar/a4.jpg b/ucast/tests/_testfiles/avatar/a4.jpg deleted file mode 100644 index 6985cc4..0000000 Binary files a/ucast/tests/_testfiles/avatar/a4.jpg and /dev/null differ diff --git a/ucast/tests/_testfiles/cover/blank.png b/ucast/tests/_testfiles/cover/blank.png deleted file mode 100644 index 6e79a4d..0000000 Binary files a/ucast/tests/_testfiles/cover/blank.png and /dev/null differ diff --git a/ucast/tests/_testfiles/cover/c1_blur.png b/ucast/tests/_testfiles/cover/c1_blur.png deleted file mode 100644 index 12a71c8..0000000 Binary files a/ucast/tests/_testfiles/cover/c1_blur.png and /dev/null differ diff --git a/ucast/tests/_testfiles/cover/c1_noavatar.png b/ucast/tests/_testfiles/cover/c1_noavatar.png deleted file mode 100644 index d708050..0000000 Binary files a/ucast/tests/_testfiles/cover/c1_noavatar.png and /dev/null differ diff --git a/ucast/tests/_testfiles/cover/c2_blur.png b/ucast/tests/_testfiles/cover/c2_blur.png deleted file mode 100644 index a36d31c..0000000 Binary files a/ucast/tests/_testfiles/cover/c2_blur.png and /dev/null differ diff --git a/ucast/tests/_testfiles/cover/c2_gradient.png b/ucast/tests/_testfiles/cover/c2_gradient.png deleted file mode 100644 index ea128e3..0000000 Binary files a/ucast/tests/_testfiles/cover/c2_gradient.png and /dev/null differ diff --git a/ucast/tests/_testfiles/cover/c3_blur.png b/ucast/tests/_testfiles/cover/c3_blur.png deleted file mode 100644 index 3b919de..0000000 Binary files a/ucast/tests/_testfiles/cover/c3_blur.png and /dev/null differ diff --git a/ucast/tests/_testfiles/fixture/models.json b/ucast/tests/_testfiles/fixture/models.json deleted file mode 100644 index d437539..0000000 --- a/ucast/tests/_testfiles/fixture/models.json +++ /dev/null @@ -1,168 +0,0 @@ -[ - { - "model": "ucast.channel", - "pk": 1, - "fields": { - "channel_id": "UCGiJh0NZ52wRhYKYnuZI08Q", - "name": "ThetaDev", - "slug": "ThetaDev", - "description": "I'm ThetaDev. I love creating cool projects using electronics, 3D printers and other awesome tech-based stuff.", - "subscribers": "37", - "active": true, - "skip_livestreams": true, - "skip_shorts": true, - "avatar_url": "https://yt3.ggpht.com/ytc/AKedOLSnFfmpibLLoqyaYdsF6bJ-zaLPzomII__FrJve1w=s900-c-k-c0x00ffffff-no-rj" - } - }, - { - "model": "ucast.channel", - "pk": 2, - "fields": { - "channel_id": "UC2TXq_t06Hjdr2g_KdKpHQg", - "name": "media.ccc.de", - "slug": "media_ccc_de", - "description": "The real official channel of the chaos computer club, operated by the CCC VOC (https://c3voc.de)", - "subscribers": "166K", - "active": true, - "skip_livestreams": true, - "skip_shorts": true, - "avatar_url": "https://yt3.ggpht.com/c1jcNSbPuOMDUieixkWIlXc82kMNJ8pCDmq5KtL8hjt74rAXLobsT9Y078-w5DK7ymKyDaqr=s900-c-k-c0x00ffffff-no-rj" - } - }, - { - "model": "ucast.channel", - "pk": 3, - "fields": { - "channel_id": "UCmLTTbctUZobNQrr8RtX8uQ", - "name": "Creative Commons", - "slug": "Creative_Commons", - "description": "Hello friends,\nWelcome to my channel CREATIVE COMMONS.\nOn this channel you will get all the videos absolutely free copyright and no matter how many videos you download there is no copyright claim you can download them and upload them to your channel and all the music is young Is on the channel they can also download and use in their videos on this channel you will find different videos in which OUTRO Videos, INTRO Videos, FREE MUSIC, FREE SOUND EFFECTS, LOWER THIRDS, and more.", - "subscribers": null, - "active": true, - "skip_livestreams": true, - "skip_shorts": true, - "avatar_url": "https://yt3.ggpht.com/-ybcsEHc8YCmKUZMr2bf4DZoDv7SKrutgKIh8kSxXugj296QkqtBZQXVzpuZ1Izs8kNUz35B=s900-c-k-c0x00ffffff-no-rj" - } - }, - { - "model": "ucast.video", - "pk": 1, - "fields": { - "video_id": "ZPxEr4YdWt8", - "title": "ThetaDev @ Embedded World 2019", - "slug": "20190602_ThetaDev_Embedded_World_2019", - "channel": 1, - "published": "2019-06-02T00:00:00Z", - "downloaded": "2022-05-15T22:16:03.096Z", - "description": "This february I spent one day at the Embedded World in Nuremberg. They showed tons of interesting electronics stuff, so I had to take some pictures and videos for you to see ;-)\n\nSorry for the late upload, I just didn't have time to edit my footage.\n\nEmbedded World: https://www.embedded-world.de/\n\nMy website: https://thdev.org\nTwitter: https://twitter.com/Theta_Dev", - "duration": 267, - "is_livestream": false, - "is_short": false, - "download_size": 4558477 - } - }, - { - "model": "ucast.video", - "pk": 2, - "fields": { - "video_id": "_I5IFObm_-k", - "title": "Easter special: 3D printed Bunny", - "slug": "20180331_Easter_special_3D_printed_Bunny", - "channel": 1, - "published": "2018-03-31T00:00:00Z", - "downloaded": "2022-05-15T22:16:12.514Z", - "description": "Happy Easter 2018!\nThis is just a special video where I print a little bunny as an Easter gift for friends or relatives. I hope you like the model, too.\n\nSadly my camera doesn't support timelapses, so I had to record the whole 4h printing process in real time, resulting in 30GB of footage. But I think it was worth it ;-)\n\n__PROJECT_LINKS___________________________\nBunny: https://www.thingiverse.com/thing:287884\n\n__COMPONENT_SUPPLIERS__________________\n3D printer: https://www.prusa3d.com/\n3D printing filament: https://www.dasfilament.de/\n______________________________________________\nMy website: https://thdev.org\nTwitter: https://twitter.com/Theta_Dev", - "duration": 511, - "is_livestream": false, - "is_short": false, - "download_size": 8444518 - } - }, - { - "model": "ucast.video", - "pk": 3, - "fields": { - "video_id": "mmEDPbbSnaY", - "title": "ThetaDevlog#2 - MySensors singleLED", - "slug": "20180326_ThetaDevlog_2_MySensors_singleLED", - "channel": 1, - "published": "2018-03-26T00:00:00Z", - "downloaded": "2022-05-15T22:16:20.280Z", - "description": "The PCBs and components for the MySensors smart home devices arrived!\nIn this video I'll show you how to build the singleLED controller to switch/dim your 12V led lights. Detailed building instructions can be found on OpenHardware or GitHub.\n\n__PROJECT_LINKS___________________________\nOpenHardware: https://www.openhardware.io/view/563\nGitHub: https://github.com/Theta-Dev/MySensors-singleLED\n\nProgramming adapter: https://thdev.org/?Projects___misc___micro_JST\nBoard definitions: http://files.thdev.org/arduino/atmega.zip\n\n__COMPONENT_SUPPLIERS__________________\nElectronic components: https://www.aliexpress.com/\nPCBs: http://www.allpcb.com/\n3D printing filament: https://www.dasfilament.de/\n______________________________________________\nMy website: https://thdev.org\nTwitter: https://twitter.com/Theta_Dev\n______________________________________________\nMusic by Bartlebeats: https://bartlebeats.bandcamp.com", - "duration": 463, - "is_livestream": false, - "is_short": false, - "download_size": 7648860 - } - }, - { - "model": "ucast.video", - "pk": 4, - "fields": { - "video_id": "Cda4zS-1j-k", - "title": "ThetaDevlog#1 - MySensors Smart Home!", - "slug": "20180217_ThetaDevlog_1_MySensors_Smart_Home", - "channel": 1, - "published": "2018-02-17T00:00:00Z", - "downloaded": "2022-05-15T22:16:25.237Z", - "description": "Smart Home devices have been around for some time and can really make your life easier. But most of them are quite pricey and not always worth the money.\n\nHow about a sytem that costs only 5€ per device and has all the benefits of the expensive solutions? The open source project MySensors claims to do that. In this series I'll try this and find out whether it works!\n\n______________________________________________\nMy website: https://thdev.org\nTwitter: https://twitter.com/Theta_Dev", - "duration": 303, - "is_livestream": false, - "is_short": false, - "download_size": 5091124 - } - }, - { - "model": "ucast.video", - "pk": 5, - "fields": { - "video_id": "2xfXsqyd8YA", - "title": "cy: Log4Shell - Bug oder Feature", - "slug": "20220521_cy_Log4Shell_Bug_oder_Feature", - "channel": 2, - "published": "2022-05-21T00:00:00Z", - "downloaded": null, - "description": "https://media.ccc.de/v/gpn20-60-log4shell-bug-oder-feature\n\n\n\nUm den Jahreswechsel ging ein Aufschrei durch die IT-Abteilungen der Welt, der es bis in die Mainstream-Medien geschafft hat. Noch Wochen später zeigen sich Folgeprobleme in weit verbreiteter Software.\n \nIn Log4j, einer weit verbreiteten Java-Bibliothek wurde eine massive Sicherheitslücke gefunden, die die Ausführung von Schadcode auf einem entfernten System erlaubt.\nIn diesem Vortrag soll rekapitulierend erklärt werden, warum und wann es zu dem Problem kam und welche Auswirkungen bisher erkennbar sind. Ausserdem werden die technischen Details der Schwachstelle erklärt und in einer Live-Demo gezeigt, wie die Schwachstelle ausgenutzt werden kann.\n\n\n\ncy\n\nhttps://cfp.gulas.ch/gpn20/talk/77BCXN/\n\n#gpn20 #Security", - "duration": 3547, - "is_livestream": false, - "is_short": false, - "download_size": null - } - }, - { - "model": "ucast.video", - "pk": 6, - "fields": { - "video_id": "I0RRENheeTo", - "title": "No copyright intro free fire intro | no text | free copy right | free templates | free download", - "slug": "20211010_No_copyright_intro_free_fire_intro_no_text_free_copy_right_free_templates_free_download", - "channel": 3, - "published": "2021-10-10T00:00:00Z", - "downloaded": null, - "description": "Like Video▬▬▬▬▬❤\uD83D\uDC4D❤\n▬▬\uD83D\uDC47SUBSCRIBE OUR CHANNEL FOR LATEST UPDATES\uD83D\uDC46▬▬\nThis Channel: https://www.youtube.com/channel/UCmLTTbctUZobNQrr8RtX8uQ?sub_confirmation=1\nOther Channel: https://www.youtube.com/channel/UCKtfYFXi5A4KLIUdjgvfmHg?sub_confirmation=1\n▬▬▬▬▬▬▬▬/Subscription Free\\▬▬▬▬▬▬▬▬▬\n▬▬▬▬▬\uD83C\uDF81...Share Video To Friends...\uD83C\uDF81▬▬▬▬▬▬▬\n▬▬▬▬\uD83E\uDD14...Comment Any Questions....\uD83E\uDD14▬▬▬▬▬▬\nHello friends, \n Shahzaib Hassan and you are watching Creative Commons YouTube channel. On this channel, you will find all the videos absolutely free copyright which you can download and use in any project.\n It is copyright free so you won't have any problem using end screen for YouTube. if you use it or download and reupload it to your channel. By doing this you can use it for YouTube its use is absolutely free.\n ►I hope you'll like the video.◄\n ►Thanks For Watching◄ \nIf you really like this video then please don't forget to...\n\n\n▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n▬▬▬▬▬▬▬▬▬▬Tags\uD83D\uDC47▬▬▬▬▬▬▬▬▬▬\n#Creativecommons #commoncreative #free #freecopyright #nocopyright #nowatermark #freetouse #intro #notext #fireefire #channelintro", - "duration": 8, - "is_livestream": false, - "is_short": false, - "download_size": null - } - }, - { - "model": "ucast.user", - "pk": 1, - "fields": { - "password": "pbkdf2_sha256$320000$2XXzT2OZlzSOnB1n7NCgAB$9zBJXdGbJv9YnS+kP5RUMkGxeIuqAbDRBBzXlmPJizw=", - "last_login": "2022-05-29T21:08:21.383Z", - "is_superuser": true, - "username": "admin", - "first_name": "", - "last_name": "", - "email": "admin@example.com", - "is_staff": true, - "is_active": true, - "date_joined": "2022-05-29T21:05:24.014Z", - "feed_key": null, - "groups": [], - "user_permissions": [] - } - } -] diff --git a/ucast/tests/_testfiles/img/normal.png b/ucast/tests/_testfiles/img/normal.png deleted file mode 100644 index e15ceee..0000000 Binary files a/ucast/tests/_testfiles/img/normal.png and /dev/null differ diff --git a/ucast/tests/_testfiles/img/tall.png b/ucast/tests/_testfiles/img/tall.png deleted file mode 100644 index c109fc2..0000000 Binary files a/ucast/tests/_testfiles/img/tall.png and /dev/null differ diff --git a/ucast/tests/_testfiles/img/wide.png b/ucast/tests/_testfiles/img/wide.png deleted file mode 100644 index 1aaad30..0000000 Binary files a/ucast/tests/_testfiles/img/wide.png and /dev/null differ diff --git a/ucast/tests/_testfiles/object/channelmeta.json b/ucast/tests/_testfiles/object/channelmeta.json deleted file mode 100644 index 5fd41ef..0000000 --- a/ucast/tests/_testfiles/object/channelmeta.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "https://www.youtube.com/channel/UCGiJh0NZ52wRhYKYnuZI08Q": { - "id": "UCGiJh0NZ52wRhYKYnuZI08Q", - "name": "ThetaDev", - "description": "I'm ThetaDev. I love creating cool projects using electronics, 3D printers and other awesome tech-based stuff.", - "avatar_url": "https://yt3.ggpht.com/ytc/AKedOLSnFfmpibLLoqyaYdsF6bJ-zaLPzomII__FrJve1w=s900-c-k-c0x00ffffff-no-rj", - "subscribers": "37" - }, - "https://www.youtube.com/channel/UC2TXq_t06Hjdr2g_KdKpHQg": { - "id": "UC2TXq_t06Hjdr2g_KdKpHQg", - "name": "media.ccc.de", - "description": "The real official channel of the chaos computer club, operated by the CCC VOC (https://c3voc.de)", - "avatar_url": "https://yt3.ggpht.com/c1jcNSbPuOMDUieixkWIlXc82kMNJ8pCDmq5KtL8hjt74rAXLobsT9Y078-w5DK7ymKyDaqr=s900-c-k-c0x00ffffff-no-rj", - "subscribers": "166K" - }, - "https://www.youtube.com/channel/UCmLTTbctUZobNQrr8RtX8uQ": { - "id": "UCmLTTbctUZobNQrr8RtX8uQ", - "name": "Creative Commons", - "description": "Hello friends,\nWelcome to my channel CREATIVE COMMONS.\nOn this channel you will get all the videos absolutely free copyright and no matter how many videos you download there is no copyright claim you can download them and upload them to your channel and all the music is young Is on the channel they can also download and use in their videos on this channel you will find different videos in which OUTRO Videos, INTRO Videos, FREE MUSIC, FREE SOUND EFFECTS, LOWER THIRDS, and more.", - "avatar_url": "https://yt3.ggpht.com/-ybcsEHc8YCmKUZMr2bf4DZoDv7SKrutgKIh8kSxXugj296QkqtBZQXVzpuZ1Izs8kNUz35B=s900-c-k-c0x00ffffff-no-rj", - "subscribers": null - } -} diff --git a/ucast/tests/_testfiles/object/videodetails.json b/ucast/tests/_testfiles/object/videodetails.json deleted file mode 100644 index 6f360c6..0000000 --- a/ucast/tests/_testfiles/object/videodetails.json +++ /dev/null @@ -1,2524 +0,0 @@ -{ - "Cda4zS-1j-k": { - "id": "Cda4zS-1j-k", - "title": "ThetaDevlog#1 - MySensors Smart Home!", - "description": "Smart Home devices have been around for some time and can really make your life easier. But most of them are quite pricey and not always worth the money.\\n\\nHow about a sytem that costs only 5€ per device and has all the benefits of the expensive solutions? The open source project MySensors claims to do that. In this series I'll try this and find out whether it works!\\n\\n______________________________________________\\nMy website: https://thdev.org\\nTwitter: https://twitter.com/Theta_Dev", - "channel_id": "UCGiJh0NZ52wRhYKYnuZI08Q", - "channel_name": "ThetaDev", - "duration": 303, - "published": "2018-02-17T00:00:00+00:00", - "thumbnails": [ - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/3.jpg", - "preference": -37, - "id": "0" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/3.webp", - "preference": -36, - "id": "1" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/2.jpg", - "preference": -35, - "id": "2" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/2.webp", - "preference": -34, - "id": "3" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/1.jpg", - "preference": -33, - "id": "4" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/1.webp", - "preference": -32, - "id": "5" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/mq3.jpg", - "preference": -31, - "id": "6" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/mq3.webp", - "preference": -30, - "id": "7" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/mq2.jpg", - "preference": -29, - "id": "8" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/mq2.webp", - "preference": -28, - "id": "9" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/mq1.jpg", - "preference": -27, - "id": "10" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/mq1.webp", - "preference": -26, - "id": "11" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/hq3.jpg", - "preference": -25, - "id": "12" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/hq3.webp", - "preference": -24, - "id": "13" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/hq2.jpg", - "preference": -23, - "id": "14" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/hq2.webp", - "preference": -22, - "id": "15" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/hq1.jpg", - "preference": -21, - "id": "16" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/hq1.webp", - "preference": -20, - "id": "17" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/sd3.jpg", - "preference": -19, - "id": "18" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/sd3.webp", - "preference": -18, - "id": "19" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/sd2.jpg", - "preference": -17, - "id": "20" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/sd2.webp", - "preference": -16, - "id": "21" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/sd1.jpg", - "preference": -15, - "id": "22" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/sd1.webp", - "preference": -14, - "id": "23" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/default.jpg", - "preference": -13, - "id": "24" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/default.webp", - "height": 90, - "width": 120, - "preference": -12, - "id": "25", - "resolution": "120x90" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/mqdefault.jpg", - "preference": -11, - "id": "26" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/mqdefault.webp", - "height": 180, - "width": 320, - "preference": -10, - "id": "27", - "resolution": "320x180" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/0.jpg", - "preference": -9, - "id": "28" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/0.webp", - "preference": -8, - "id": "29" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/hqdefault.jpg", - "preference": -7, - "id": "30" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBo35ByiZVi2KJJeCV-8-yoYvBdAQ", - "height": 94, - "width": 168, - "preference": -7, - "id": "31", - "resolution": "168x94" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCDdK44y6kY1C0qC3mROP4gfj8_NA", - "height": 110, - "width": 196, - "preference": -7, - "id": "32", - "resolution": "196x110" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCcisQxuJJIaxR24OmmokBS6fptdw", - "height": 138, - "width": 246, - "preference": -7, - "id": "33", - "resolution": "246x138" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCueV3Mpte283qx1bxflp6QLw7njQ", - "height": 188, - "width": 336, - "preference": -7, - "id": "34", - "resolution": "336x188" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/hqdefault.webp", - "height": 360, - "width": 480, - "preference": -6, - "id": "35", - "resolution": "480x360" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/sddefault.jpg", - "preference": -5, - "id": "36" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/sddefault.webp", - "height": 480, - "width": 640, - "preference": -4, - "id": "37", - "resolution": "640x480" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/hq720.jpg", - "preference": -3, - "id": "38" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/hq720.webp", - "preference": -2, - "id": "39" - }, - { - "url": "https://i.ytimg.com/vi/Cda4zS-1j-k/maxresdefault.jpg", - "height": 720, - "width": 1280, - "preference": -1, - "id": "40", - "resolution": "1280x720" - }, - { - "url": "https://i.ytimg.com/vi_webp/Cda4zS-1j-k/maxresdefault.webp", - "height": 1080, - "width": 1920, - "preference": 0, - "id": "41", - "resolution": "1920x1080" - } - ], - "is_currently_live": false, - "is_livestream": false, - "is_short": false - }, - "mmEDPbbSnaY": { - "id": "mmEDPbbSnaY", - "title": "ThetaDevlog#2 - MySensors singleLED", - "description": "The PCBs and components for the MySensors smart home devices arrived!\nIn this video I'll show you how to build the singleLED controller to switch/dim your 12V led lights. Detailed building instructions can be found on OpenHardware or GitHub.\n\n__PROJECT_LINKS___________________________\nOpenHardware: https://www.openhardware.io/view/563\nGitHub: https://github.com/Theta-Dev/MySensors-singleLED\n\nProgramming adapter: https://thdev.org/?Projects___misc___micro_JST\nBoard definitions: http://files.thdev.org/arduino/atmega.zip\n\n__COMPONENT_SUPPLIERS__________________\nElectronic components: https://www.aliexpress.com/\nPCBs: http://www.allpcb.com/\n3D printing filament: https://www.dasfilament.de/\n______________________________________________\nMy website: https://thdev.org\nTwitter: https://twitter.com/Theta_Dev\n______________________________________________\nMusic by Bartlebeats: https://bartlebeats.bandcamp.com", - "channel_id": "UCGiJh0NZ52wRhYKYnuZI08Q", - "channel_name": "ThetaDev", - "duration": 463, - "published": "2018-03-26T00:00:00+00:00", - "thumbnails": [ - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/3.jpg", - "preference": -37, - "id": "0" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/3.webp", - "preference": -36, - "id": "1" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/2.jpg", - "preference": -35, - "id": "2" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/2.webp", - "preference": -34, - "id": "3" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/1.jpg", - "preference": -33, - "id": "4" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/1.webp", - "preference": -32, - "id": "5" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/mq3.jpg", - "preference": -31, - "id": "6" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/mq3.webp", - "preference": -30, - "id": "7" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/mq2.jpg", - "preference": -29, - "id": "8" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/mq2.webp", - "preference": -28, - "id": "9" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/mq1.jpg", - "preference": -27, - "id": "10" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/mq1.webp", - "preference": -26, - "id": "11" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/hq3.jpg", - "preference": -25, - "id": "12" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/hq3.webp", - "preference": -24, - "id": "13" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/hq2.jpg", - "preference": -23, - "id": "14" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/hq2.webp", - "preference": -22, - "id": "15" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/hq1.jpg", - "preference": -21, - "id": "16" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/hq1.webp", - "preference": -20, - "id": "17" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/sd3.jpg", - "preference": -19, - "id": "18" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/sd3.webp", - "preference": -18, - "id": "19" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/sd2.jpg", - "preference": -17, - "id": "20" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/sd2.webp", - "preference": -16, - "id": "21" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/sd1.jpg", - "preference": -15, - "id": "22" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/sd1.webp", - "preference": -14, - "id": "23" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/default.jpg", - "preference": -13, - "id": "24" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/default.webp", - "height": 90, - "width": 120, - "preference": -12, - "id": "25", - "resolution": "120x90" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/mqdefault.jpg", - "preference": -11, - "id": "26" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/mqdefault.webp", - "height": 180, - "width": 320, - "preference": -10, - "id": "27", - "resolution": "320x180" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/0.jpg", - "preference": -9, - "id": "28" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/0.webp", - "preference": -8, - "id": "29" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/hqdefault.jpg", - "preference": -7, - "id": "30" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBtbbM_j3hyFktGGEEGbkjvBEgogg", - "height": 94, - "width": 168, - "preference": -7, - "id": "31", - "resolution": "168x94" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDzu2Ay5fneJ54vZvxST6swEnZHkQ", - "height": 110, - "width": 196, - "preference": -7, - "id": "32", - "resolution": "196x110" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAb_W3QsfMhtHbZ1J8WXuwN7zgm8w", - "height": 138, - "width": 246, - "preference": -7, - "id": "33", - "resolution": "246x138" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCmNj6gp3dek9IalRYwkxl2UKaPaw", - "height": 188, - "width": 336, - "preference": -7, - "id": "34", - "resolution": "336x188" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/hqdefault.webp", - "height": 360, - "width": 480, - "preference": -6, - "id": "35", - "resolution": "480x360" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/sddefault.jpg", - "preference": -5, - "id": "36" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/sddefault.webp", - "height": 480, - "width": 640, - "preference": -4, - "id": "37", - "resolution": "640x480" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/hq720.jpg", - "preference": -3, - "id": "38" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/hq720.webp", - "preference": -2, - "id": "39" - }, - { - "url": "https://i.ytimg.com/vi/mmEDPbbSnaY/maxresdefault.jpg", - "height": 720, - "width": 1280, - "preference": -1, - "id": "40", - "resolution": "1280x720" - }, - { - "url": "https://i.ytimg.com/vi_webp/mmEDPbbSnaY/maxresdefault.webp", - "height": 1080, - "width": 1920, - "preference": 0, - "id": "41", - "resolution": "1920x1080" - } - ], - "is_currently_live": false, - "is_livestream": false, - "is_short": false - }, - "_I5IFObm_-k": { - "id": "_I5IFObm_-k", - "title": "Easter special: 3D printed Bunny", - "description": "Happy Easter 2018!\nThis is just a special video where I print a little bunny as an Easter gift for friends or relatives. I hope you like the model, too.\n\nSadly my camera doesn't support timelapses, so I had to record the whole 4h printing process in real time, resulting in 30GB of footage. But I think it was worth it ;-)\n\n__PROJECT_LINKS___________________________\nBunny: https://www.thingiverse.com/thing:287884\n\n__COMPONENT_SUPPLIERS__________________\n3D printer: https://www.prusa3d.com/\n3D printing filament: https://www.dasfilament.de/\n______________________________________________\nMy website: https://thdev.org\nTwitter: https://twitter.com/Theta_Dev", - "channel_id": "UCGiJh0NZ52wRhYKYnuZI08Q", - "channel_name": "ThetaDev", - "duration": 511, - "published": "2018-03-31T00:00:00+00:00", - "thumbnails": [ - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/3.jpg", - "preference": -37, - "id": "0" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/3.webp", - "preference": -36, - "id": "1" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/2.jpg", - "preference": -35, - "id": "2" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/2.webp", - "preference": -34, - "id": "3" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/1.jpg", - "preference": -33, - "id": "4" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/1.webp", - "preference": -32, - "id": "5" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/mq3.jpg", - "preference": -31, - "id": "6" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/mq3.webp", - "preference": -30, - "id": "7" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/mq2.jpg", - "preference": -29, - "id": "8" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/mq2.webp", - "preference": -28, - "id": "9" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/mq1.jpg", - "preference": -27, - "id": "10" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/mq1.webp", - "preference": -26, - "id": "11" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/hq3.jpg", - "preference": -25, - "id": "12" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/hq3.webp", - "preference": -24, - "id": "13" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/hq2.jpg", - "preference": -23, - "id": "14" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/hq2.webp", - "preference": -22, - "id": "15" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/hq1.jpg", - "preference": -21, - "id": "16" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/hq1.webp", - "preference": -20, - "id": "17" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/sd3.jpg", - "preference": -19, - "id": "18" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/sd3.webp", - "preference": -18, - "id": "19" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/sd2.jpg", - "preference": -17, - "id": "20" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/sd2.webp", - "preference": -16, - "id": "21" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/sd1.jpg", - "preference": -15, - "id": "22" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/sd1.webp", - "preference": -14, - "id": "23" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/default.jpg", - "preference": -13, - "id": "24" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/default.webp", - "height": 90, - "width": 120, - "preference": -12, - "id": "25", - "resolution": "120x90" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/mqdefault.jpg", - "preference": -11, - "id": "26" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/mqdefault.webp", - "height": 180, - "width": 320, - "preference": -10, - "id": "27", - "resolution": "320x180" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/0.jpg", - "preference": -9, - "id": "28" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/0.webp", - "preference": -8, - "id": "29" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/hqdefault.jpg", - "preference": -7, - "id": "30" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBckXFnIUTPIo3du7Aib07GR5XvXQ", - "height": 94, - "width": 168, - "preference": -7, - "id": "31", - "resolution": "168x94" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCm-FRLtAgtEqVPhn5s903AxI14tQ", - "height": 110, - "width": 196, - "preference": -7, - "id": "32", - "resolution": "196x110" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDxmRpK0m6NzFC3pKsnhHoWOk5TxQ", - "height": 138, - "width": 246, - "preference": -7, - "id": "33", - "resolution": "246x138" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDAQAhfpPIcSl2Phbbb07pjX_MgxQ", - "height": 188, - "width": 336, - "preference": -7, - "id": "34", - "resolution": "336x188" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/hqdefault.webp", - "height": 360, - "width": 480, - "preference": -6, - "id": "35", - "resolution": "480x360" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/sddefault.jpg", - "preference": -5, - "id": "36" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/sddefault.webp", - "height": 480, - "width": 640, - "preference": -4, - "id": "37", - "resolution": "640x480" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/hq720.jpg", - "preference": -3, - "id": "38" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/hq720.webp", - "preference": -2, - "id": "39" - }, - { - "url": "https://i.ytimg.com/vi/_I5IFObm_-k/maxresdefault.jpg", - "height": 720, - "width": 1280, - "preference": -1, - "id": "40", - "resolution": "1280x720" - }, - { - "url": "https://i.ytimg.com/vi_webp/_I5IFObm_-k/maxresdefault.webp", - "height": 1080, - "width": 1920, - "preference": 0, - "id": "41", - "resolution": "1920x1080" - } - ], - "is_currently_live": false, - "is_livestream": false, - "is_short": false - }, - "ZPxEr4YdWt8": { - "id": "ZPxEr4YdWt8", - "title": "ThetaDev @ Embedded World 2019", - "description": "This february I spent one day at the Embedded World in Nuremberg. They showed tons of interesting electronics stuff, so I had to take some pictures and videos for you to see ;-)\n\nSorry for the late upload, I just didn't have time to edit my footage.\n\nEmbedded World: https://www.embedded-world.de/\n\nMy website: https://thdev.org\nTwitter: https://twitter.com/Theta_Dev", - "channel_id": "UCGiJh0NZ52wRhYKYnuZI08Q", - "channel_name": "ThetaDev", - "duration": 267, - "published": "2019-06-02T00:00:00+00:00", - "thumbnails": [ - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/3.jpg", - "preference": -37, - "id": "0" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/3.webp", - "preference": -36, - "id": "1" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/2.jpg", - "preference": -35, - "id": "2" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/2.webp", - "preference": -34, - "id": "3" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/1.jpg", - "preference": -33, - "id": "4" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/1.webp", - "preference": -32, - "id": "5" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/mq3.jpg", - "preference": -31, - "id": "6" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/mq3.webp", - "preference": -30, - "id": "7" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/mq2.jpg", - "preference": -29, - "id": "8" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/mq2.webp", - "preference": -28, - "id": "9" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/mq1.jpg", - "preference": -27, - "id": "10" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/mq1.webp", - "preference": -26, - "id": "11" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/hq3.jpg", - "preference": -25, - "id": "12" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/hq3.webp", - "preference": -24, - "id": "13" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/hq2.jpg", - "preference": -23, - "id": "14" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/hq2.webp", - "preference": -22, - "id": "15" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/hq1.jpg", - "preference": -21, - "id": "16" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/hq1.webp", - "preference": -20, - "id": "17" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/sd3.jpg", - "preference": -19, - "id": "18" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/sd3.webp", - "preference": -18, - "id": "19" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/sd2.jpg", - "preference": -17, - "id": "20" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/sd2.webp", - "preference": -16, - "id": "21" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/sd1.jpg", - "preference": -15, - "id": "22" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/sd1.webp", - "preference": -14, - "id": "23" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/default.jpg", - "preference": -13, - "id": "24" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/default.webp", - "height": 90, - "width": 120, - "preference": -12, - "id": "25", - "resolution": "120x90" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/mqdefault.jpg", - "preference": -11, - "id": "26" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/mqdefault.webp", - "height": 180, - "width": 320, - "preference": -10, - "id": "27", - "resolution": "320x180" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/0.jpg", - "preference": -9, - "id": "28" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/0.webp", - "preference": -8, - "id": "29" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/hqdefault.jpg", - "preference": -7, - "id": "30" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBr0uwI7zmo7wj2p1WYdubjepm30A", - "height": 94, - "width": 168, - "preference": -7, - "id": "31", - "resolution": "168x94" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLA5V9yVTJ3astmnCNEYzOL2NAEjEQ", - "height": 110, - "width": 196, - "preference": -7, - "id": "32", - "resolution": "196x110" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBobN_nBJtfzaL9v2Uzzj6AznoBWw", - "height": 138, - "width": 246, - "preference": -7, - "id": "33", - "resolution": "246x138" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAB74khszPrPc5pDsTBs7SaqrGcJQ", - "height": 188, - "width": 336, - "preference": -7, - "id": "34", - "resolution": "336x188" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/hqdefault.webp", - "height": 360, - "width": 480, - "preference": -6, - "id": "35", - "resolution": "480x360" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/sddefault.jpg", - "preference": -5, - "id": "36" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/sddefault.webp", - "height": 480, - "width": 640, - "preference": -4, - "id": "37", - "resolution": "640x480" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/hq720.jpg", - "preference": -3, - "id": "38" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/hq720.webp", - "preference": -2, - "id": "39" - }, - { - "url": "https://i.ytimg.com/vi/ZPxEr4YdWt8/maxresdefault.jpg", - "height": 720, - "width": 1280, - "preference": -1, - "id": "40", - "resolution": "1280x720" - }, - { - "url": "https://i.ytimg.com/vi_webp/ZPxEr4YdWt8/maxresdefault.webp", - "height": 1080, - "width": 1920, - "preference": 0, - "id": "41", - "resolution": "1920x1080" - } - ], - "is_currently_live": false, - "is_livestream": false, - "is_short": false - }, - "2xfXsqyd8YA": { - "id": "2xfXsqyd8YA", - "title": "cy: Log4Shell - Bug oder Feature", - "description": "https://media.ccc.de/v/gpn20-60-log4shell-bug-oder-feature\n\n\n\nUm den Jahreswechsel ging ein Aufschrei durch die IT-Abteilungen der Welt, der es bis in die Mainstream-Medien geschafft hat. Noch Wochen später zeigen sich Folgeprobleme in weit verbreiteter Software.\n \nIn Log4j, einer weit verbreiteten Java-Bibliothek wurde eine massive Sicherheitslücke gefunden, die die Ausführung von Schadcode auf einem entfernten System erlaubt.\nIn diesem Vortrag soll rekapitulierend erklärt werden, warum und wann es zu dem Problem kam und welche Auswirkungen bisher erkennbar sind. Ausserdem werden die technischen Details der Schwachstelle erklärt und in einer Live-Demo gezeigt, wie die Schwachstelle ausgenutzt werden kann.\n\n\n\ncy\n\nhttps://cfp.gulas.ch/gpn20/talk/77BCXN/\n\n#gpn20 #Security", - "channel_id": "UC2TXq_t06Hjdr2g_KdKpHQg", - "channel_name": "media.ccc.de", - "duration": 3547, - "published": "2022-05-21T00:00:00+00:00", - "thumbnails": [ - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/3.jpg", - "preference": -37, - "id": "0" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/3.webp", - "preference": -36, - "id": "1" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/2.jpg", - "preference": -35, - "id": "2" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/2.webp", - "preference": -34, - "id": "3" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/1.jpg", - "preference": -33, - "id": "4" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/1.webp", - "preference": -32, - "id": "5" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/mq3.jpg", - "preference": -31, - "id": "6" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/mq3.webp", - "preference": -30, - "id": "7" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/mq2.jpg", - "preference": -29, - "id": "8" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/mq2.webp", - "preference": -28, - "id": "9" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/mq1.jpg", - "preference": -27, - "id": "10" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/mq1.webp", - "preference": -26, - "id": "11" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/hq3.jpg", - "preference": -25, - "id": "12" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/hq3.webp", - "preference": -24, - "id": "13" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/hq2.jpg", - "preference": -23, - "id": "14" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/hq2.webp", - "preference": -22, - "id": "15" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/hq1.jpg", - "preference": -21, - "id": "16" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/hq1.webp", - "preference": -20, - "id": "17" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/sd3.jpg", - "preference": -19, - "id": "18" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/sd3.webp", - "preference": -18, - "id": "19" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/sd2.jpg", - "preference": -17, - "id": "20" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/sd2.webp", - "preference": -16, - "id": "21" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/sd1.jpg", - "preference": -15, - "id": "22" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/sd1.webp", - "preference": -14, - "id": "23" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/default.jpg", - "preference": -13, - "id": "24" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/default.webp", - "height": 90, - "width": 120, - "preference": -12, - "id": "25", - "resolution": "120x90" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/mqdefault.jpg", - "preference": -11, - "id": "26" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/mqdefault.webp", - "height": 180, - "width": 320, - "preference": -10, - "id": "27", - "resolution": "320x180" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/0.jpg", - "preference": -9, - "id": "28" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/0.webp", - "preference": -8, - "id": "29" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/hqdefault.jpg", - "preference": -7, - "id": "30" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBSekjbNaSjlWz9X6pxuXdyf2sXzQ", - "height": 94, - "width": 168, - "preference": -7, - "id": "31", - "resolution": "168x94" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDXmdLqsOkLDy14dfCi8LGyZjeVRw", - "height": 110, - "width": 196, - "preference": -7, - "id": "32", - "resolution": "196x110" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDNKNNj2ak8Tnro1uUXfC5dYRkADQ", - "height": 138, - "width": 246, - "preference": -7, - "id": "33", - "resolution": "246x138" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCVsc9fva5LJoDIj5MD3veu7W3Xjg", - "height": 188, - "width": 336, - "preference": -7, - "id": "34", - "resolution": "336x188" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/hqdefault.webp", - "height": 360, - "width": 480, - "preference": -6, - "id": "35", - "resolution": "480x360" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/sddefault.jpg", - "preference": -5, - "id": "36" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/sddefault.webp", - "height": 480, - "width": 640, - "preference": -4, - "id": "37", - "resolution": "640x480" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/hq720.jpg", - "preference": -3, - "id": "38" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/hq720.webp", - "preference": -2, - "id": "39" - }, - { - "url": "https://i.ytimg.com/vi/2xfXsqyd8YA/maxresdefault.jpg", - "height": 720, - "width": 1280, - "preference": -1, - "id": "40", - "resolution": "1280x720" - }, - { - "url": "https://i.ytimg.com/vi_webp/2xfXsqyd8YA/maxresdefault.webp", - "height": 1080, - "width": 1920, - "preference": 0, - "id": "41", - "resolution": "1920x1080" - } - ], - "is_currently_live": false, - "is_livestream": false, - "is_short": false - }, - "I0RRENheeTo": { - "id": "I0RRENheeTo", - "title": "No copyright intro free fire intro | no text | free copy right | free templates | free download", - "description": "Like Video▬▬▬▬▬❤👍❤\n▬▬👇SUBSCRIBE OUR CHANNEL FOR LATEST UPDATES👆▬▬\nThis Channel: https://www.youtube.com/channel/UCmLTTbctUZobNQrr8RtX8uQ?sub_confirmation=1\nOther Channel: https://www.youtube.com/channel/UCKtfYFXi5A4KLIUdjgvfmHg?sub_confirmation=1\n▬▬▬▬▬▬▬▬/Subscription Free\\▬▬▬▬▬▬▬▬▬\n▬▬▬▬▬🎁...Share Video To Friends...🎁▬▬▬▬▬▬▬\n▬▬▬▬🤔...Comment Any Questions....🤔▬▬▬▬▬▬\nHello friends, \n Shahzaib Hassan and you are watching Creative Commons YouTube channel. On this channel, you will find all the videos absolutely free copyright which you can download and use in any project.\n It is copyright free so you won't have any problem using end screen for YouTube. if you use it or download and reupload it to your channel. By doing this you can use it for YouTube its use is absolutely free.\n ►I hope you'll like the video.◄\n ►Thanks For Watching◄ \nIf you really like this video then please don't forget to...\n\n\n▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n▬▬▬▬▬▬▬▬▬▬Tags👇▬▬▬▬▬▬▬▬▬▬\n#Creativecommons #commoncreative #free #freecopyright #nocopyright #nowatermark #freetouse #intro #notext #fireefire #channelintro", - "channel_id": "UCmLTTbctUZobNQrr8RtX8uQ", - "channel_name": "Creative Commons", - "duration": 8, - "published": "2021-10-10T00:00:00+00:00", - "thumbnails": [ - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/3.jpg", - "preference": -37, - "id": "0" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/3.webp", - "preference": -36, - "id": "1" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/2.jpg", - "preference": -35, - "id": "2" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/2.webp", - "preference": -34, - "id": "3" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/1.jpg", - "preference": -33, - "id": "4" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/1.webp", - "preference": -32, - "id": "5" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/mq3.jpg", - "preference": -31, - "id": "6" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/mq3.webp", - "preference": -30, - "id": "7" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/mq2.jpg", - "preference": -29, - "id": "8" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/mq2.webp", - "preference": -28, - "id": "9" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/mq1.jpg", - "preference": -27, - "id": "10" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/mq1.webp", - "preference": -26, - "id": "11" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/hq3.jpg", - "preference": -25, - "id": "12" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/hq3.webp", - "preference": -24, - "id": "13" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/hq2.jpg", - "preference": -23, - "id": "14" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/hq2.webp", - "preference": -22, - "id": "15" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/hq1.jpg", - "preference": -21, - "id": "16" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/hq1.webp", - "preference": -20, - "id": "17" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/sd3.jpg", - "preference": -19, - "id": "18" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/sd3.webp", - "preference": -18, - "id": "19" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/sd2.jpg", - "preference": -17, - "id": "20" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/sd2.webp", - "preference": -16, - "id": "21" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/sd1.jpg", - "preference": -15, - "id": "22" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/sd1.webp", - "preference": -14, - "id": "23" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/default.jpg", - "preference": -13, - "id": "24" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/default.webp", - "height": 90, - "width": 120, - "preference": -12, - "id": "25", - "resolution": "120x90" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/mqdefault.jpg", - "preference": -11, - "id": "26" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/mqdefault.webp", - "height": 180, - "width": 320, - "preference": -10, - "id": "27", - "resolution": "320x180" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/0.jpg", - "preference": -9, - "id": "28" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/0.webp", - "preference": -8, - "id": "29" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/hqdefault.jpg", - "preference": -7, - "id": "30" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLA6-nUmpOc633CJvtsLQURQykuEuQ", - "height": 94, - "width": 168, - "preference": -7, - "id": "31", - "resolution": "168x94" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDDD2-nMxugQDOGNrUnf8gL0xgXfg", - "height": 110, - "width": 196, - "preference": -7, - "id": "32", - "resolution": "196x110" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBYUwqOOluRhv0J67HBC_JP9ftTkQ", - "height": 138, - "width": 246, - "preference": -7, - "id": "33", - "resolution": "246x138" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAEGPfsNqAqP-BUikDkRGkkxlx94g", - "height": 188, - "width": 336, - "preference": -7, - "id": "34", - "resolution": "336x188" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/hqdefault.webp", - "height": 360, - "width": 480, - "preference": -6, - "id": "35", - "resolution": "480x360" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/sddefault.jpg", - "preference": -5, - "id": "36" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/sddefault.webp", - "height": 480, - "width": 640, - "preference": -4, - "id": "37", - "resolution": "640x480" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/hq720.jpg", - "preference": -3, - "id": "38" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/hq720.webp", - "preference": -2, - "id": "39" - }, - { - "url": "https://i.ytimg.com/vi/I0RRENheeTo/maxresdefault.jpg", - "height": 720, - "width": 1280, - "preference": -1, - "id": "40", - "resolution": "1280x720" - }, - { - "url": "https://i.ytimg.com/vi_webp/I0RRENheeTo/maxresdefault.webp", - "height": 1080, - "width": 1920, - "preference": 0, - "id": "41", - "resolution": "1920x1080" - } - ], - "is_currently_live": false, - "is_livestream": false, - "is_short": false - }, - "uFqgQ35wyYY": { - "id": "uFqgQ35wyYY", - "title": "Systemabsturz Teaser zur DiVOC bb3", - "description": "https://media.ccc.de/v/divoc_bb3-teaser\n\n\n\n#divocbb3", - "channel_id": "UC2TXq_t06Hjdr2g_KdKpHQg", - "channel_name": "media.ccc.de", - "duration": 221, - "published": "2022-04-12T00:00:00+00:00", - "thumbnails": [ - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/3.jpg", - "preference": -37, - "id": "0" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/3.webp", - "preference": -36, - "id": "1" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/2.jpg", - "preference": -35, - "id": "2" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/2.webp", - "preference": -34, - "id": "3" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/1.jpg", - "preference": -33, - "id": "4" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/1.webp", - "preference": -32, - "id": "5" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/mq3.jpg", - "preference": -31, - "id": "6" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/mq3.webp", - "preference": -30, - "id": "7" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/mq2.jpg", - "preference": -29, - "id": "8" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/mq2.webp", - "preference": -28, - "id": "9" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/mq1.jpg", - "preference": -27, - "id": "10" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/mq1.webp", - "preference": -26, - "id": "11" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/hq3.jpg", - "preference": -25, - "id": "12" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/hq3.webp", - "preference": -24, - "id": "13" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/hq2.jpg", - "preference": -23, - "id": "14" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/hq2.webp", - "preference": -22, - "id": "15" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/hq1.jpg", - "preference": -21, - "id": "16" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/hq1.webp", - "preference": -20, - "id": "17" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/sd3.jpg", - "preference": -19, - "id": "18" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/sd3.webp", - "preference": -18, - "id": "19" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/sd2.jpg", - "preference": -17, - "id": "20" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/sd2.webp", - "preference": -16, - "id": "21" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/sd1.jpg", - "preference": -15, - "id": "22" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/sd1.webp", - "preference": -14, - "id": "23" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/default.jpg", - "preference": -13, - "id": "24" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/default.webp", - "height": 90, - "width": 120, - "preference": -12, - "id": "25", - "resolution": "120x90" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/mqdefault.jpg", - "preference": -11, - "id": "26" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/mqdefault.webp", - "height": 180, - "width": 320, - "preference": -10, - "id": "27", - "resolution": "320x180" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/0.jpg", - "preference": -9, - "id": "28" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/0.webp", - "preference": -8, - "id": "29" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/hqdefault.jpg", - "preference": -7, - "id": "30" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAIDX4AmOoLQj833ycCgtlK2Dk7bw", - "height": 94, - "width": 168, - "preference": -7, - "id": "31", - "resolution": "168x94" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLApG6dF4XsZ0z6fwrFBjtD0cdzWgg", - "height": 110, - "width": 196, - "preference": -7, - "id": "32", - "resolution": "196x110" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC0XaToFw8t1WgIEg84iw_nzYvrrg", - "height": 138, - "width": 246, - "preference": -7, - "id": "33", - "resolution": "246x138" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAC67SefniVt5l_G434hYLuXTSQ7w", - "height": 188, - "width": 336, - "preference": -7, - "id": "34", - "resolution": "336x188" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/hqdefault.webp", - "height": 360, - "width": 480, - "preference": -6, - "id": "35", - "resolution": "480x360" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/sddefault.jpg", - "preference": -5, - "id": "36" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/sddefault.webp", - "height": 480, - "width": 640, - "preference": -4, - "id": "37", - "resolution": "640x480" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/hq720.jpg", - "preference": -3, - "id": "38" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/hq720.webp", - "preference": -2, - "id": "39" - }, - { - "url": "https://i.ytimg.com/vi/uFqgQ35wyYY/maxresdefault.jpg", - "height": 720, - "width": 1280, - "preference": -1, - "id": "40", - "resolution": "1280x720" - }, - { - "url": "https://i.ytimg.com/vi_webp/uFqgQ35wyYY/maxresdefault.webp", - "height": 1080, - "width": 1920, - "preference": 0, - "id": "41", - "resolution": "1920x1080" - } - ], - "is_currently_live": false, - "is_livestream": false, - "is_short": false - }, - "eRsGyueVLvQ": { - "id": "eRsGyueVLvQ", - "title": "Sintel - Open Movie by Blender Foundation", - "description": "Help us making Free/Open Movies: https://cloud.blender.org/join\n\n\"Sintel\" is an independently produced short film, initiated by the Blender Foundation as a means to further improve and validate the free/open source 3D creation suite Blender. With initial funding provided by 1000s of donations via the internet community, it has again proven to be a viable development model for both open 3D technology as for independent animation film.\nThis 15 minute film has been realized in the studio of the Amsterdam Blender Institute, by an international team of artists and developers. In addition to that, several crucial technical and creative targets have been realized online, by developers and artists and teams all over the world.\n\nwww.sintel.org", - "channel_id": "UCSMOQeBJ2RAnuFungnQOxLg", - "channel_name": "Blender", - "duration": 888, - "published": "2010-09-30T00:00:00+00:00", - "thumbnails": [ - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/3.jpg", - "preference": -37, - "id": "0" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/3.webp", - "preference": -36, - "id": "1" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/2.jpg", - "preference": -35, - "id": "2" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/2.webp", - "preference": -34, - "id": "3" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/1.jpg", - "preference": -33, - "id": "4" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/1.webp", - "preference": -32, - "id": "5" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/mq3.jpg", - "preference": -31, - "id": "6" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/mq3.webp", - "preference": -30, - "id": "7" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/mq2.jpg", - "preference": -29, - "id": "8" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/mq2.webp", - "preference": -28, - "id": "9" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/mq1.jpg", - "preference": -27, - "id": "10" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/mq1.webp", - "preference": -26, - "id": "11" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/hq3.jpg", - "preference": -25, - "id": "12" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/hq3.webp", - "preference": -24, - "id": "13" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/hq2.jpg", - "preference": -23, - "id": "14" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/hq2.webp", - "preference": -22, - "id": "15" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/hq1.jpg", - "preference": -21, - "id": "16" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/hq1.webp", - "preference": -20, - "id": "17" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/sd3.jpg", - "preference": -19, - "id": "18" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/sd3.webp", - "preference": -18, - "id": "19" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/sd2.jpg", - "preference": -17, - "id": "20" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/sd2.webp", - "preference": -16, - "id": "21" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/sd1.jpg", - "preference": -15, - "id": "22" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/sd1.webp", - "preference": -14, - "id": "23" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/default.jpg", - "height": 90, - "width": 120, - "preference": -13, - "id": "24", - "resolution": "120x90" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/default.webp", - "preference": -12, - "id": "25" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/mqdefault.jpg", - "height": 180, - "width": 320, - "preference": -11, - "id": "26", - "resolution": "320x180" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/mqdefault.webp", - "preference": -10, - "id": "27" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/0.jpg", - "preference": -9, - "id": "28" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/0.webp", - "preference": -8, - "id": "29" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDCPKgbu0CMK28UFd1Sxndgz3RYvg", - "height": 94, - "width": 168, - "preference": -7, - "id": "30", - "resolution": "168x94" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLC4m2OfMNLRDR-3LB9UU8YRsmTeCw", - "height": 110, - "width": 196, - "preference": -7, - "id": "31", - "resolution": "196x110" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCHy8hDbiekvhpps4Ka64uo9DWJcA", - "height": 138, - "width": 246, - "preference": -7, - "id": "32", - "resolution": "246x138" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLB2qqvrDCJDt3VrOWbESqL3fuyjww", - "height": 188, - "width": 336, - "preference": -7, - "id": "33", - "resolution": "336x188" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/hqdefault.jpg", - "height": 360, - "width": 480, - "preference": -7, - "id": "34", - "resolution": "480x360" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/hqdefault.webp", - "preference": -6, - "id": "35" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/sddefault.jpg", - "preference": -5, - "id": "36" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/sddefault.webp", - "preference": -4, - "id": "37" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/hq720.jpg", - "preference": -3, - "id": "38" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/hq720.webp", - "preference": -2, - "id": "39" - }, - { - "url": "https://i.ytimg.com/vi/eRsGyueVLvQ/maxresdefault.jpg", - "preference": -1, - "id": "40" - }, - { - "url": "https://i.ytimg.com/vi_webp/eRsGyueVLvQ/maxresdefault.webp", - "preference": 0, - "id": "41" - } - ], - "is_currently_live": false, - "is_livestream": false, - "is_short": false - }, - "DWjFW7Yq1fA": { - "id": "DWjFW7Yq1fA", - "title": "Persuasion (Instrumental) – RYYZN (No Copyright Music)", - "description": "Download free and safe music for content creators (Free Music, No Copyright Music, Royalty-free Music, and Creative Commons) · http://bit.ly/Join-the-family\n\nPlease subscribe! ❤️\nWe upload a new song EVERY day http://bit.ly/32TUZyy\n\n———\n\n⭐ Free Download: https://bit.ly/-persuasion\n\n———\n\n⚠️ You’re free to use this song in any of your YouTube videos, but you MUST include the following in your video description (Copy & Paste):\n\n––––––––––––––––––––––––––––––\nPersuasion (Instrumental) by RYYZN https://soundcloud.com/ryyzn\nCreative Commons — Attribution 3.0 Unported — CC BY 3.0\nFree Download / Stream: https://bit.ly/-persuasion\nMusic promoted by Audio Library https://youtu.be/DWjFW7Yq1fA\n––––––––––––––––––––––––––––––\n\n🎵 Track Info:\n\nTitle: Persuasion (Instrumental) by RYYZN\nGenre and Mood: Hip Hop & Rap + Inspirational\n\n———\n\n🎧 Available on: \n\nSpotify: https://spoti.fi/33Yd3d2\niTunes: https://apple.co/3m3CGiM\nDeezer: https://deezer.com/us/track/1118163262\nYouTube: https://youtube.com/watch?v=xU4eG3wi6kI\nSoundCloud: https://soundcloud.com/ryyzn/persuasion\nYouTube Music: https://music.youtube.com/watch?v=xU4eG3wi6kI\n\n———\n\n😊 Contact the Artist:\n\nRYYZN:\nweareryyzn@gmail.com\nhttps://www.weareryyzn.com\nhttps://soundcloud.com/ryyzn\nhttps://open.spotify.com/artist/54YpMpAIJC7FV2toZvVo5f\nhttps://music.apple.com/us/artist/ryyzn/1370606286\nhttps://youtube.com/channel/UCOFoLUyWX1yHmiYGQuCMhuA\nhttps://instagram.com/weareryyzn\nhttps://twitter.com/weareryyzn\nhttps://facebook.com/RYYZNN\n\n———\n\n✅ About using the music:\n\n- You MUST include the full credits in your video description.\n- You can NOT claim the music as your own.\n- You can NOT sell the music anywhere.\n- You can NOT use the music as background music for your own musical work without the artist's consent.\n- You can NOT use the music without giving any credits in the video description.\n- You can NOT remove or add parts from/to the credits.\n- You can NOT use third-party software to download the video/track, always use our download links\n- You MUST contact the artist if you wish to use the music on any kind of project outside of YouTube.\n\n⚠️ Important:\n\n- If you don't follow these policies, you can get a copyright claim/strike.\n- If you need more information about using music, please get in touch with the artist.\n- This channel is not an official YouTube channel.\n\n———\n\n💚 Listen to our Spotify playlists\n\nEDM: http://spoti.fi/30R0jTw\nLo-Fi: http://spoti.fi/38OptGM\nChill: http://spoti.fi/3rX5gWN\nHappy: https://spoti.fi/2Qjk6JD\n\n———\n\n🔴 Official Releases: http://bit.ly/al-plus\n\nWe have created a new channel where we do an agreement with the artist and our record label to make sure all the music is free and 100% safe. \n\n———\n\n🔀 More free music:\n\nPop Music: http://bit.ly/pop-music-playlist\nHip Hop & Rap Music: http://bit.ly/hip-hop-rap-playlist\nDance & Electronic Music: http://bit.ly/dance-electronic-playlist\n\nMore playlists: http://bit.ly/audiolibrary-playlists\n\n———\n\n❤️ Get in touch with Audio Library:\n\nE-mail: hello@audiolibrary.com.co\nWebsite: https://audiolibrary.com.co\nInstagram: http://bit.ly/aI-instagram\nFacebook: http://bit.ly/al-facebook\nSoundCloud: http://bit.ly/al-soundcloud\nTwitter: http://bit.ly/aI-twitter\n\n———\n\n🔥 Send your demo: http://audiolibrary.com.co/demo\n\n———\n\nPlease report to (report@audiolibrary.com.co) any issues with this video/song/image, from broken links, copyright claim/strikes to someone using the music without giving credit or selling the music.\n\n———\n\nRead our disclaimer before using the music.\nhttp://bit.ly/2KA71pn\n\n———\n\n#VlogMusic #NoCopyrightMusic #AudioLibrary", - "channel_id": "UCht8qITGkBvXKsR1Byln-wA", - "channel_name": "Audio Library — Music for content creators", - "duration": 100, - "published": "2020-12-29T00:00:00+00:00", - "thumbnails": [ - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/3.jpg", - "preference": -37, - "id": "0" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/3.webp", - "preference": -36, - "id": "1" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/2.jpg", - "preference": -35, - "id": "2" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/2.webp", - "preference": -34, - "id": "3" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/1.jpg", - "preference": -33, - "id": "4" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/1.webp", - "preference": -32, - "id": "5" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/mq3.jpg", - "preference": -31, - "id": "6" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/mq3.webp", - "preference": -30, - "id": "7" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/mq2.jpg", - "preference": -29, - "id": "8" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/mq2.webp", - "preference": -28, - "id": "9" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/mq1.jpg", - "preference": -27, - "id": "10" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/mq1.webp", - "preference": -26, - "id": "11" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/hq3.jpg", - "preference": -25, - "id": "12" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/hq3.webp", - "preference": -24, - "id": "13" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/hq2.jpg", - "preference": -23, - "id": "14" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/hq2.webp", - "preference": -22, - "id": "15" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/hq1.jpg", - "preference": -21, - "id": "16" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/hq1.webp", - "preference": -20, - "id": "17" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/sd3.jpg", - "preference": -19, - "id": "18" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/sd3.webp", - "preference": -18, - "id": "19" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/sd2.jpg", - "preference": -17, - "id": "20" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/sd2.webp", - "preference": -16, - "id": "21" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/sd1.jpg", - "preference": -15, - "id": "22" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/sd1.webp", - "preference": -14, - "id": "23" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/default.jpg", - "height": 90, - "width": 120, - "preference": -13, - "id": "24", - "resolution": "120x90" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/default.webp", - "preference": -12, - "id": "25" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/mqdefault.jpg", - "height": 180, - "width": 320, - "preference": -11, - "id": "26", - "resolution": "320x180" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/mqdefault.webp", - "preference": -10, - "id": "27" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/0.jpg", - "preference": -9, - "id": "28" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/0.webp", - "preference": -8, - "id": "29" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLASWvhaBau7aoe2SBMRHymTkFKoXg", - "height": 94, - "width": 168, - "preference": -7, - "id": "30", - "resolution": "168x94" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCVZxlF6DzA5EqSPlE8JE0LuEm7FA", - "height": 110, - "width": 196, - "preference": -7, - "id": "31", - "resolution": "196x110" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCwToXcSOEbLv5Ypoog4FTJSEeTKA", - "height": 138, - "width": 246, - "preference": -7, - "id": "32", - "resolution": "246x138" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC2JkE-QccK1h_aJ8-AY0bWZaOoYg", - "height": 188, - "width": 336, - "preference": -7, - "id": "33", - "resolution": "336x188" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/hqdefault.jpg", - "height": 360, - "width": 480, - "preference": -7, - "id": "34", - "resolution": "480x360" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/hqdefault.webp", - "preference": -6, - "id": "35" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/sddefault.jpg", - "height": 480, - "width": 640, - "preference": -5, - "id": "36", - "resolution": "640x480" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/sddefault.webp", - "preference": -4, - "id": "37" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/hq720.jpg", - "preference": -3, - "id": "38" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/hq720.webp", - "preference": -2, - "id": "39" - }, - { - "url": "https://i.ytimg.com/vi/DWjFW7Yq1fA/maxresdefault.jpg", - "height": 1080, - "width": 1920, - "preference": -1, - "id": "40", - "resolution": "1920x1080" - }, - { - "url": "https://i.ytimg.com/vi_webp/DWjFW7Yq1fA/maxresdefault.webp", - "preference": 0, - "id": "41" - } - ], - "is_currently_live": false, - "is_livestream": false, - "is_short": false - }, - "lcQZ6YwQHiw": { - "id": "lcQZ6YwQHiw", - "title": "Small pink flowers | #shorts | Free Stock Video | creative commons short videos | creative #short", - "description": "Like Video▬▬▬▬▬❤👍❤\n▬▬👇SUBSCRIBE OUR CHANNEL FOR LATEST UPDATES👆▬▬\nThis Channel: https://www.youtube.com/channel/UCmLTTbctUZobNQrr8RtX8uQ?sub_confirmation=1\nOther Channel: https://www.youtube.com/channel/UCKtfYFXi5A4KLIUdjgvfmHg?sub_confirmation=1\n▬▬▬▬▬▬▬▬/Subscription Free\\▬▬▬▬▬▬▬▬▬\n▬▬▬▬▬🎁...Share Video To Friends...🎁▬▬▬▬▬▬▬\n▬▬▬▬🤔...Comment Any Questions....🤔▬▬▬▬▬▬\nHello friends, \n Shahzaib Hassan and you are watching Creative Commons YouTube channel. On this channel, you will find all the videos absolutely free copyright which you can download and use in any project.\n It is copyright free so you won't have any problem using end screen for YouTube. if you use it or download and reupload it to your channel. By doing this you can use it for YouTube its use is absolutely free.\n ►I hope you'll like the video.◄\n ►Thanks For Watching◄ \nIf you really like this video then please don't forget to...\n❤❤❤❤❤❤❤❤❤❤❤❤❤❤\n▬▬▬▬▬▬▬▬▬⭐Other Playlists⭐▬▬▬▬▬▬▬▬▬\n►Outro or End Screen :➜ https://www.youtube.com/watch?v=nmY5xtWNs5E&list=PLHVlnSiwtzdsgRnQkjGRESdLfHX-THA_w\n►Free Count Down :➜ https://www.youtube.com/watch?v=U9mQM1Cd0iI&list=PLHVlnSiwtzduzjs5cyGqjUeZkwN6nf_t7\n►Free Lower Thirds :➜ https://www.youtube.com/watch?v=JJgUCNWQ3BM&list=PLHVlnSiwtzdsfozn_qXSHnvBPDHvqyAD2\n►Free Green Screen :➜ https://www.youtube.com/watch?v=JJgUCNWQ3BM&list=PLHVlnSiwtzds64zSAgPIuItuAD50ishi3\n►Free Channel Intro :➜ https://www.youtube.com/watch?v=twje3dtjlUo&list=PLHVlnSiwtzduBEp_f8yvqE3yZMJ7CrR6c\n►Free Cut Video Footage:➜ https://www.youtube.com/watch?v=2zv7Wl0lWhI&list=PLHVlnSiwtzdv8hW3PbvkDLvMKPVGwsHbO\n►Free Waterfall Videos :➜ https://www.youtube.com/watch?v=nRsnME_4zjc&list=PLHVlnSiwtzduKqb7TDYORlx29pDWXJrhE\n\n▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n▬▬▬▬▬▬▬▬▬▬Tags👇▬▬▬▬▬▬▬▬▬▬\n#Creativecommons #commoncreative #free #freecopyright #nocopyright #nowatermark #freetouse #short #Shorts video #FreeStockVideo #freetouse #freedownload #shorts#creativecommonsshortvideos #creativecommons #shortvideos #shorts", - "channel_id": "UCmLTTbctUZobNQrr8RtX8uQ", - "channel_name": "Creative Commons", - "duration": 21, - "published": "2021-08-21T00:00:00+00:00", - "thumbnails": [ - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/3.jpg", - "preference": -37, - "id": "0" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/3.webp", - "preference": -36, - "id": "1" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/2.jpg", - "preference": -35, - "id": "2" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/2.webp", - "preference": -34, - "id": "3" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/1.jpg", - "preference": -33, - "id": "4" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/1.webp", - "preference": -32, - "id": "5" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/mq3.jpg", - "preference": -31, - "id": "6" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/mq3.webp", - "preference": -30, - "id": "7" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/mq2.jpg", - "preference": -29, - "id": "8" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/mq2.webp", - "preference": -28, - "id": "9" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/mq1.jpg", - "preference": -27, - "id": "10" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/mq1.webp", - "preference": -26, - "id": "11" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/hq3.jpg", - "preference": -25, - "id": "12" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/hq3.webp", - "preference": -24, - "id": "13" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/hq2.jpg", - "height": 360, - "width": 480, - "preference": -23, - "id": "14", - "resolution": "480x360" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/hq2.webp", - "preference": -22, - "id": "15" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/hq1.jpg", - "preference": -21, - "id": "16" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/hq1.webp", - "preference": -20, - "id": "17" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/sd3.jpg", - "preference": -19, - "id": "18" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/sd3.webp", - "preference": -18, - "id": "19" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/sd2.jpg", - "preference": -17, - "id": "20" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/sd2.webp", - "preference": -16, - "id": "21" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/sd1.jpg", - "preference": -15, - "id": "22" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/sd1.webp", - "preference": -14, - "id": "23" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/default.jpg", - "height": 90, - "width": 120, - "preference": -13, - "id": "24", - "resolution": "120x90" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/default.webp", - "preference": -12, - "id": "25" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/mqdefault.jpg", - "height": 180, - "width": 320, - "preference": -11, - "id": "26", - "resolution": "320x180" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/mqdefault.webp", - "preference": -10, - "id": "27" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/0.jpg", - "preference": -9, - "id": "28" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/0.webp", - "preference": -8, - "id": "29" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAQ60jDMSyKbLn_U8Ivdz5FN2b2Zw", - "height": 94, - "width": 168, - "preference": -7, - "id": "30", - "resolution": "168x94" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCib9e26bIx66au4IXYm3QzvLWRQw", - "height": 110, - "width": 196, - "preference": -7, - "id": "31", - "resolution": "196x110" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBqXjbOoHD14mcL3OysN4lKmM573w", - "height": 138, - "width": 246, - "preference": -7, - "id": "32", - "resolution": "246x138" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDG-0HC7Y3oOH8Jbh3_xQ4gIfJ_Bw", - "height": 188, - "width": 336, - "preference": -7, - "id": "33", - "resolution": "336x188" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/hqdefault.jpg", - "height": 360, - "width": 480, - "preference": -7, - "id": "34", - "resolution": "480x360" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/hqdefault.webp", - "preference": -6, - "id": "35" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/sddefault.jpg", - "preference": -5, - "id": "36" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/sddefault.webp", - "preference": -4, - "id": "37" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/hq720.jpg", - "preference": -3, - "id": "38" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/hq720.webp", - "preference": -2, - "id": "39" - }, - { - "url": "https://i.ytimg.com/vi/lcQZ6YwQHiw/maxresdefault.jpg", - "preference": -1, - "id": "40" - }, - { - "url": "https://i.ytimg.com/vi_webp/lcQZ6YwQHiw/maxresdefault.webp", - "preference": 0, - "id": "41" - } - ], - "is_currently_live": false, - "is_livestream": false, - "is_short": true - } -} diff --git a/ucast/tests/_testfiles/sources.md b/ucast/tests/_testfiles/sources.md deleted file mode 100644 index 8fdcc6a..0000000 --- a/ucast/tests/_testfiles/sources.md +++ /dev/null @@ -1,11 +0,0 @@ -### Quellen der Thumbnails/Avatarbilder/Audiodateien zum Testen - -- a1/t1: [ThetaDev @ Embedded World 2019](https://www.youtube.com/watch?v=ZPxEr4YdWt8), by [ThetaDev](https://www.youtube.com/channel/UCGiJh0NZ52wRhYKYnuZI08Q) (CC-BY) -- a2/t2: [Sintel - Open Movie by Blender Foundation](https://www.youtube.com/watch?v=eRsGyueVLvQ), by [Blender](https://www.youtube.com/c/BlenderFoundation) (CC-BY) -- a3/t3: [Systemabsturz Teaser zur DiVOC bb3](https://www.youtube.com/watch?v=uFqgQ35wyYY), by [media.ccc.de](https://www.youtube.com/channel/UC2TXq_t06Hjdr2g_KdKpHQg) (CC-BY) -- audio1: [No copyright intro free fire intro](https://www.youtube.com/watch?v=I0RRENheeTo), by [Shahzaib Hassan](https://www.youtube.com/channel/UCmLTTbctUZobNQrr8RtX8uQ), (CC-BY) - -### Weitere Testvideos - -- [Persuasion (Instrumental) – RYYZN (No Copyright Music)](https://www.youtube.com/watch?v=DWjFW7Yq1fA), by [RYYZN](https://soundcloud.com/ryyzn) (CC-BY) -- [Small pink flowers | #shorts | Free Stock Video](https://www.youtube.com/watch?v=lcQZ6YwQHiw), by [Shahzaib Hassan](https://www.youtube.com/channel/UCmLTTbctUZobNQrr8RtX8uQ), (CC-BY) diff --git a/ucast/tests/_testfiles/thumbnail/Cda4zS-1j-k.webp b/ucast/tests/_testfiles/thumbnail/Cda4zS-1j-k.webp deleted file mode 100644 index 4994c80..0000000 Binary files a/ucast/tests/_testfiles/thumbnail/Cda4zS-1j-k.webp and /dev/null differ diff --git a/ucast/tests/_testfiles/thumbnail/ZPxEr4YdWt8.webp b/ucast/tests/_testfiles/thumbnail/ZPxEr4YdWt8.webp deleted file mode 100644 index 7c1bfb3..0000000 Binary files a/ucast/tests/_testfiles/thumbnail/ZPxEr4YdWt8.webp and /dev/null differ diff --git a/ucast/tests/_testfiles/thumbnail/_I5IFObm_-k.webp b/ucast/tests/_testfiles/thumbnail/_I5IFObm_-k.webp deleted file mode 100644 index 6da0984..0000000 Binary files a/ucast/tests/_testfiles/thumbnail/_I5IFObm_-k.webp and /dev/null differ diff --git a/ucast/tests/_testfiles/thumbnail/mmEDPbbSnaY.webp b/ucast/tests/_testfiles/thumbnail/mmEDPbbSnaY.webp deleted file mode 100644 index f16cda4..0000000 Binary files a/ucast/tests/_testfiles/thumbnail/mmEDPbbSnaY.webp and /dev/null differ diff --git a/ucast/tests/_testfiles/thumbnail/t2.webp b/ucast/tests/_testfiles/thumbnail/t2.webp deleted file mode 100644 index 0ed7f2b..0000000 Binary files a/ucast/tests/_testfiles/thumbnail/t2.webp and /dev/null differ diff --git a/ucast/tests/conftest.py b/ucast/tests/conftest.py deleted file mode 100644 index 23279de..0000000 --- a/ucast/tests/conftest.py +++ /dev/null @@ -1,169 +0,0 @@ -import json -import shutil -import tempfile -from datetime import datetime -from pathlib import Path -from tempfile import TemporaryDirectory -from typing import Tuple -from unittest import mock - -import pytest -import rq -from django.conf import settings -from django.core.management import call_command -from fakeredis import FakeRedis - -from ucast import queue, tests -from ucast.models import User -from ucast.service import cover, storage, util, videoutil, youtube - - -@pytest.fixture(scope="session", autouse=True) -def default_config(): - settings.DOWNLOAD_ROOT = Path("does/not/exist") - settings.REDIS_URL = "no redis" - - -@pytest.fixture(scope="session") -def django_db_setup(django_db_setup, django_db_blocker): - with django_db_blocker.unblock(): - fixture_path = tests.DIR_TESTFILES / "fixture" / "models.json" - call_command("loaddata", fixture_path) - - -def _create_download_dir() -> Tuple[Path, TemporaryDirectory]: - tmpdir_o = tempfile.TemporaryDirectory() - tmpdir = Path(tmpdir_o.name) - settings.DOWNLOAD_ROOT = tmpdir - - # Copy channel avatars - store = storage.Storage() - - for slug, avatar in ( - ("ThetaDev", "a1"), - ("media_ccc_de", "a3"), - ("Creative_Commons", "a4"), - ): - cf = store.get_or_create_channel_folder(slug) - shutil.copyfile( - tests.DIR_TESTFILES / "avatar" / f"{avatar}.jpg", cf.file_avatar - ) - videoutil.resize_avatar(cf.file_avatar, cf.file_avatar_sm) - - return tmpdir, tmpdir_o - - -def _add_download_dir_content(): - store = storage.Storage() - - with open(tests.DIR_TESTFILES / "object" / "videodetails.json") as f: - videodetails = json.load(f) - - for vid in ("ZPxEr4YdWt8", "_I5IFObm_-k", "mmEDPbbSnaY", "Cda4zS-1j-k"): - video_detail = videodetails[vid] - channel_name = video_detail["channel_name"] - channel_slug = util.get_slug(channel_name) - published = datetime.fromisoformat(video_detail["published"]) - title = video_detail["title"] - video_slug = util.get_slug(f"{published.strftime('%Y%m%d')}_{title}") - description = video_detail["description"] - - cf = store.get_or_create_channel_folder(channel_slug) - file_audio = cf.get_audio(video_slug) - file_tn = cf.get_thumbnail(video_slug) - file_cover = cf.get_cover(video_slug) - - shutil.copyfile(tests.DIR_TESTFILES / "audio" / "audio1.mp3", file_audio) - shutil.copyfile(tests.DIR_TESTFILES / "thumbnail" / f"{vid}.webp", file_tn) - videoutil.resize_thumbnail(file_tn, cf.get_thumbnail(video_slug, True)) - cover.create_cover_file( - file_tn, - cf.file_avatar, - title, - channel_name, - cover.COVER_STYLE_BLUR, - file_cover, - ) - videoutil.tag_audio( - file_audio, - title, - channel_name, - published.date(), - f"{description}\n\nhttps://youtu.be/{vid}", - file_cover, - ) - - -@pytest.fixture -def download_dir() -> Path: - tmpdir, tmpdir_o = _create_download_dir() - yield tmpdir - - -@pytest.fixture(scope="session") -def download_dir_content() -> Path: - tmpdir, tmpdir_o = _create_download_dir() - settings.DOWNLOAD_ROOT = tmpdir - _add_download_dir_content() - yield tmpdir - - -@pytest.fixture -def download_dir_content_mut() -> Path: - tmpdir, tmpdir_o = _create_download_dir() - settings.DOWNLOAD_ROOT = tmpdir - _add_download_dir_content() - yield tmpdir - - -@pytest.fixture -def mock_redis(mocker) -> FakeRedis: - redis = FakeRedis() - mocker.patch.object(queue, "get_redis_connection") - queue.get_redis_connection.return_value = redis - return redis - - -@pytest.fixture -def rq_queue(mocker) -> rq.Queue: - test_queue = rq.Queue(is_async=False, connection=FakeRedis()) - mocker.patch.object(queue, "get_queue") - queue.get_queue.return_value = test_queue - return test_queue - - -@pytest.fixture -def mock_download_audio(mocker) -> mock.Mock: - def mockfn_download_audio( - video_id: str, download_path: Path, sponsorblock=False - ) -> youtube.VideoDetails: - shutil.copyfile(tests.DIR_TESTFILES / "audio" / "audio1.mp3", download_path) - return tests.get_video_details(video_id) - - download_mock: mock.Mock = mocker.patch.object(youtube, "download_audio") - download_mock.side_effect = mockfn_download_audio - return download_mock - - -@pytest.fixture -def mock_get_video_details(mocker) -> mock.Mock: - video_details_mock: mock.Mock = mocker.patch.object(youtube, "get_video_details") - video_details_mock.side_effect = tests.get_video_details - return video_details_mock - - -@pytest.fixture -def mock_get_channel_metadata(mocker) -> mock.Mock: - channel_meta_mock: mock.Mock = mocker.patch.object(youtube, "get_channel_metadata") - channel_meta_mock.side_effect = tests.get_channel_metadata - return channel_meta_mock - - -@pytest.fixture -def user_admin(db): - return User.objects.get(id=1) - - -@pytest.fixture -def feed_key(user_admin) -> str: - return user_admin.get_feed_key() diff --git a/ucast/tests/service/__init__.py b/ucast/tests/service/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/ucast/tests/service/test_storage.py b/ucast/tests/service/test_storage.py deleted file mode 100644 index fa99f2a..0000000 --- a/ucast/tests/service/test_storage.py +++ /dev/null @@ -1,84 +0,0 @@ -import os -import tempfile -from datetime import datetime, timedelta -from pathlib import Path - -from ucast.service import storage - - -def test_create_channel_folders(settings): - tmpdir_o = tempfile.TemporaryDirectory() - tmpdir = Path(tmpdir_o.name) - settings.DOWNLOAD_ROOT = tmpdir - - store = storage.Storage() - cf1 = store.get_or_create_channel_folder("ThetaDev") - cf2 = store.get_or_create_channel_folder("Jeff_Geerling") - cf1b = store.get_channel_folder("ThetaDev") - - cf1_path = tmpdir / "ThetaDev" - cf2_path = tmpdir / "Jeff_Geerling" - - assert cf1.dir_root == cf1_path - assert cf1b.dir_root == cf1_path - assert cf2.dir_root == cf2_path - - assert os.path.isdir(cf1_path) - assert os.path.isdir(cf2_path) - - -def test_channel_folder(): - tmpdir_o = tempfile.TemporaryDirectory() - tmpdir = Path(tmpdir_o.name) - ucast_dir = tmpdir / "_ucast" - - cf = storage.ChannelFolder(tmpdir) - - # Verify internal paths - assert cf.file_avatar == ucast_dir / "avatar.jpg" - assert cf.file_avatar_sm == ucast_dir / "avatar_sm.webp" - assert cf.dir_covers == ucast_dir / "covers" - assert cf.dir_thumbnails == ucast_dir / "thumbnails" - - # Create the folder - assert not cf.does_exist() - cf.create() - assert cf.does_exist() - - assert cf.get_cover("my_video_title") == ucast_dir / "covers" / "my_video_title.png" - assert ( - cf.get_thumbnail("my_video_title") - == ucast_dir / "thumbnails" / "my_video_title.webp" - ) - assert ( - cf.get_thumbnail("my_video_title", True) - == ucast_dir / "thumbnails" / "my_video_title_sm.webp" - ) - assert cf.get_audio("my_video_title") == tmpdir / "my_video_title.mp3" - - -def test_clean_cache(settings, mocker): - tmpdir_o = tempfile.TemporaryDirectory() - tmpdir = Path(tmpdir_o.name) - - os.mkdir(tmpdir / "yt_dlp") - os.mkdir(tmpdir / "dld_old") - os.mkdir(tmpdir / "dld_new") - - def mock_ctime(path): - if path == "dld_new": - return datetime.now().timestamp() - if path == "dld_old": - return (datetime.now() - timedelta(days=1, minutes=1)).timestamp() - raise Exception("invalid path") - - mocker.patch.object(os.path, "getctime", mock_ctime) - - settings.CACHE_ROOT = tmpdir - cache = storage.Cache() - - cache.cleanup() - - assert os.path.isdir(tmpdir / "yt_dlp") - assert os.path.isdir(tmpdir / "dld_new") - assert not os.path.exists(tmpdir / "dld_old") diff --git a/ucast/tests/service/test_util.py b/ucast/tests/service/test_util.py deleted file mode 100644 index 671e7d9..0000000 --- a/ucast/tests/service/test_util.py +++ /dev/null @@ -1,106 +0,0 @@ -import tempfile -from pathlib import Path - -import pytest -from PIL import Image, ImageChops - -from ucast import tests -from ucast.service import util - -TEST_FILE_URL = "https://yt3.ggpht.com/ytc/AKedOLSnFfmpibLLoqyaYdsF6bJ-zaLPzomII__FrJve1w=s900-c-k-c0x00ffffff-no-rj" - - -def test_download_file(): - tmpdir_o = tempfile.TemporaryDirectory() - tmpdir = Path(tmpdir_o.name) - download_file = tmpdir / "download.jpg" - expected_tn_file = tests.DIR_TESTFILES / "avatar" / "a1.jpg" - - util.download_file(TEST_FILE_URL, download_file) - - downloaded_avatar = Image.open(download_file) - expected_avatar = Image.open(expected_tn_file) - - diff = ImageChops.difference(downloaded_avatar, expected_avatar) - assert diff.getbbox() is None - - -def test_download_image_file(): - tmpdir_o = tempfile.TemporaryDirectory() - tmpdir = Path(tmpdir_o.name) - download_file = tmpdir / "download.jpg" - expected_tn_file = tests.DIR_TESTFILES / "avatar" / "a1.jpg" - - util.download_image_file(TEST_FILE_URL, download_file) - - downloaded_avatar = Image.open(download_file) - expected_avatar = Image.open(expected_tn_file) - - diff = ImageChops.difference(downloaded_avatar, expected_avatar) - assert diff.getbbox() is None - - -def test_download_image_file_conv(): - tmpdir_o = tempfile.TemporaryDirectory() - tmpdir = Path(tmpdir_o.name) - download_file = tmpdir / "download.png" - expected_tn_file = tests.DIR_TESTFILES / "avatar" / "a1.jpg" - - util.download_image_file(TEST_FILE_URL, download_file) - - downloaded_avatar = Image.open(download_file) - expected_avatar = Image.open(expected_tn_file) - - diff = ImageChops.difference(downloaded_avatar, expected_avatar) - assert diff.getbbox() is None - - -@pytest.mark.parametrize( - "src_file", - [ - "normal", - "tall", - "wide", - ], -) -def test_resize_image(src_file: str): - src_path = tests.DIR_TESTFILES / "img" / f"{src_file}.png" - src_img = Image.open(src_path) - resized = util.resize_image(src_img, (500, 250)) - - normal_img = Image.open(tests.DIR_TESTFILES / "img" / "normal.png") - diff = ImageChops.difference(resized, normal_img) - assert diff.getbbox() is None - - -@pytest.mark.parametrize( - "text,expected_slug", - [ - ("Hello World 👋", "Hello_World"), - ("ÄäÖöÜüß", "AaOoUuss"), - ("오징어 게임", "ojingeo_geim"), - ], -) -def test_slug(text: str, expected_slug: str): - slug = util.get_slug(text) - assert slug == expected_slug - - -@pytest.mark.parametrize( - "url,expect", - [ - ("/files/audio/My_Video.mp3", "/files/audio/My_Video.mp3?key=my-key"), - ( - "https://example.com/files/audio/My_Video.mp3", - "https://example.com/files/audio/My_Video.mp3?key=my-key", - ), - ("/files/avatar/ThetaDev.webp?sm", "/files/avatar/ThetaDev.webp?sm&key=my-key"), - ( - "https://example.com/files/avatar/ThetaDev.webp?sm", - "https://example.com/files/avatar/ThetaDev.webp?sm&key=my-key", - ), - ], -) -def test_add_key_to_url(url: str, expect: str): - url_w_key = util.add_key_to_url(url, "my-key") - assert url_w_key == expect diff --git a/ucast/tests/service/test_videoutil.py b/ucast/tests/service/test_videoutil.py deleted file mode 100644 index 8ac488c..0000000 --- a/ucast/tests/service/test_videoutil.py +++ /dev/null @@ -1,83 +0,0 @@ -import io -import shutil -import tempfile -from pathlib import Path - -import pytest -from mutagen import id3 -from PIL import Image, ImageChops - -from ucast import tests -from ucast.models import Video -from ucast.service import videoutil - - -@pytest.mark.django_db -def test_tag_audio(): - video = Video.objects.get(video_id="ZPxEr4YdWt8") - - tmpdir_o = tempfile.TemporaryDirectory() - tmpdir = Path(tmpdir_o.name) - audio_file = tmpdir / "audio.mp3" - cover_file = tests.DIR_TESTFILES / "cover" / "c1_blur.png" - shutil.copyfile(tests.DIR_TESTFILES / "audio" / "audio1.mp3", audio_file) - - videoutil.tag_audio( - audio_file, - video.title, - video.channel.name, - video.published.date(), - video.get_full_description(), - cover_file, - ) - - tag = id3.ID3(audio_file) - assert tag["TPE1"].text[0] == "ThetaDev" - assert tag["TALB"].text[0] == "ThetaDev" - assert tag["TIT2"].text[0] == "2019-06-02 ThetaDev @ Embedded World 2019" - assert tag["TDRC"].text[0].text == "2019-06-02" - assert ( - tag["COMM::XXX"].text[0] - == """This february I spent one day at the Embedded World in Nuremberg. They showed tons of interesting electronics stuff, so I had to take some pictures and videos for you to see ;-) - -Sorry for the late upload, I just didn't have time to edit my footage. - -Embedded World: https://www.embedded-world.de/ - -My website: https://thdev.org -Twitter: https://twitter.com/Theta_Dev - -https://youtu.be/ZPxEr4YdWt8""" - ) - - tag_cover = tag["APIC:Cover"] - assert tag_cover.mime == "image/png" - - tag_cover_img = Image.open(io.BytesIO(tag_cover.data)) - expected_cover_img = Image.open(cover_file) - diff = ImageChops.difference(tag_cover_img, expected_cover_img) - assert diff.getbbox() is None - - -def test_resize_avatar(): - tmpdir_o = tempfile.TemporaryDirectory() - tmpdir = Path(tmpdir_o.name) - source_file = tests.DIR_TESTFILES / "avatar" / "a1.jpg" - resized_file = tmpdir / "avatar.webp" - - videoutil.resize_avatar(source_file, resized_file) - - resized_avatar = Image.open(resized_file) - assert resized_avatar.size == (100, 100) - - -def test_resize_thumbnail(): - tmpdir_o = tempfile.TemporaryDirectory() - tmpdir = Path(tmpdir_o.name) - source_file = tests.DIR_TESTFILES / "thumbnail" / "t1.webp" - resized_file = tmpdir / "thumbnail.webp" - - videoutil.resize_thumbnail(source_file, resized_file) - - resized_thumbnail = Image.open(resized_file) - assert resized_thumbnail.size == (360, 202) diff --git a/ucast/tests/service/test_youtube.py b/ucast/tests/service/test_youtube.py deleted file mode 100644 index c57c2c7..0000000 --- a/ucast/tests/service/test_youtube.py +++ /dev/null @@ -1,174 +0,0 @@ -import datetime -import re -import subprocess -import tempfile -from pathlib import Path - -import pytest -from PIL import Image, ImageChops - -from ucast import tests -from ucast.service import youtube - -VIDEO_ID_THETADEV = "ZPxEr4YdWt8" -VIDEO_ID_SHORT = "lcQZ6YwQHiw" -VIDEO_ID_PERSUASION = "DWjFW7Yq1fA" - -CHANNEL_ID_THETADEV = "UCGiJh0NZ52wRhYKYnuZI08Q" -CHANNEL_ID_BLENDER = "UCSMOQeBJ2RAnuFungnQOxLg" -CHANNEL_URL_BLENDER = "https://www.youtube.com/c/BlenderFoundation" - - -@pytest.fixture(scope="module") -def video_details() -> youtube.VideoDetails: - return youtube.get_video_details(VIDEO_ID_THETADEV) - - -def test_download_thumbnail(video_details): - tmpdir_o = tempfile.TemporaryDirectory() - tmpdir = Path(tmpdir_o.name) - tn_file = tmpdir / "thumbnail.webp" - expected_tn_file = tests.DIR_TESTFILES / "thumbnail" / "t1.webp" - - youtube.download_thumbnail(video_details, tn_file) - - tn = Image.open(tn_file) - expected_tn = Image.open(expected_tn_file) - - diff = ImageChops.difference(tn, expected_tn) - assert diff.getbbox() is None - - -def test_get_video_details(video_details): - assert video_details.id == VIDEO_ID_THETADEV - assert video_details.title == "ThetaDev @ Embedded World 2019" - assert video_details.channel_id == "UCGiJh0NZ52wRhYKYnuZI08Q" - assert ( - video_details.description - == """This february I spent one day at the Embedded World in Nuremberg. They showed tons of interesting electronics stuff, so I had to take some pictures and videos for you to see ;-) - -Sorry for the late upload, I just didn't have time to edit my footage. - -Embedded World: https://www.embedded-world.de/ - -My website: https://thdev.org -Twitter: https://twitter.com/Theta_Dev""" - ) - assert video_details.duration == 267 - assert not video_details.is_currently_live - assert not video_details.is_livestream - assert not video_details.is_short - assert video_details.published == datetime.datetime( - 2019, 6, 2, tzinfo=datetime.timezone.utc - ) - - -def test_get_video_details_short(): - vinfo = youtube.get_video_details(VIDEO_ID_SHORT) - assert vinfo.id == VIDEO_ID_SHORT - assert ( - vinfo.title - == "Small pink flowers | #shorts | Free Stock Video | \ -creative commons short videos | creative #short" - ) - assert not vinfo.is_currently_live - assert not vinfo.is_livestream - assert vinfo.is_short - - -def test_download_audio(): - tmpdir_o = tempfile.TemporaryDirectory() - tmpdir = Path(tmpdir_o.name) - download_file = tmpdir / "download.mp3" - - vinfo = youtube.download_audio(VIDEO_ID_PERSUASION, download_file) - assert vinfo.id == VIDEO_ID_PERSUASION - assert vinfo.title == "Persuasion (Instrumental) – RYYZN (No Copyright Music)" - assert vinfo.duration == 100 - - # Check with ffmpeg if the audio file is valid - res = subprocess.run( - ["ffmpeg", "-i", str(download_file)], - capture_output=True, - universal_newlines=True, - ) - assert "Stream #0:0: Audio: mp3" in res.stderr - - match = re.search(r"Duration: (\d{2}:\d{2}:\d{2})", res.stderr) - assert match[1] == "00:01:40" - - -@pytest.mark.parametrize( - "channel_str,channel_url", - [ - ( - "https://www.youtube.com/channel/UCGiJh0NZ52wRhYKYnuZI08Q", - "https://www.youtube.com/channel/UCGiJh0NZ52wRhYKYnuZI08Q", - ), - ( - "https://www.youtube.com/c/MrBeast6000", - "https://www.youtube.com/c/MrBeast6000", - ), - ( - "https://www.youtube.com/user/LinusTechTips", - "https://www.youtube.com/user/LinusTechTips", - ), - ( - "UCGiJh0NZ52wRhYKYnuZI08Q", - "https://www.youtube.com/channel/UCGiJh0NZ52wRhYKYnuZI08Q", - ), - ( - "https://piped.mha.fi/user/LinusTechTips", - "https://www.youtube.com/user/LinusTechTips", - ), - ], -) -def test_channel_url_from_str(channel_str: str, channel_url: str): - url = youtube.channel_url_from_str(channel_str) - assert url == channel_url - - -@pytest.mark.parametrize( - "channel_url,channel_id,name,avatar_url", - [ - ( - youtube.channel_url_from_id(CHANNEL_ID_THETADEV), - CHANNEL_ID_THETADEV, - "ThetaDev", - "https://yt3.ggpht.com/ytc/AKedOLSnFfmpibLLoqyaYdsF6bJ-zaLPzomII__FrJve1w=s900-c-k-c0x00ffffff-no-rj", - ), - ( - CHANNEL_URL_BLENDER, - CHANNEL_ID_BLENDER, - "Blender", - "https://yt3.ggpht.com/ytc/AKedOLT_31fFSD3FWEBnHZnyZeJx-GPHJwYCQKcEpaq8NQ=s900-c-k-c0x00ffffff-no-rj", - ), - ], -) -def test_channel_metadata( - channel_url: str, channel_id: str, name: str, avatar_url: str -): - metadata = youtube.get_channel_metadata(channel_url) - assert metadata.id == channel_id - assert metadata.name == name - assert metadata.avatar_url == avatar_url - assert metadata.description - - -def test_get_channel_videos_from_feed(): - videos = youtube.get_channel_videos_from_feed(CHANNEL_ID_THETADEV) - assert videos - - v1 = videos[0] - assert len(v1.id) == 11 - assert v1.published.tzinfo == datetime.timezone.utc - assert v1.published.second > 0 or v1.published.minute > 0 or v1.published.hour > 0 - - -def test_get_channel_videos_from_scraper(): - videos = youtube.get_channel_videos_from_scraper(CHANNEL_ID_THETADEV) - assert videos - - v1 = videos.__next__() - assert len(v1.id) == 11 - assert v1.published is None diff --git a/ucast/tests/tasks/__init__.py b/ucast/tests/tasks/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/ucast/tests/tasks/test_download.py b/ucast/tests/tasks/test_download.py deleted file mode 100644 index 8d12f27..0000000 --- a/ucast/tests/tasks/test_download.py +++ /dev/null @@ -1,92 +0,0 @@ -import os - -import pytest -from django.utils import timezone - -from ucast import queue, tests -from ucast.models import Channel, Video -from ucast.service import storage -from ucast.service.youtube import VideoScraped -from ucast.tasks import download - -CHANNEL_ID_THETADEV = "UCGiJh0NZ52wRhYKYnuZI08Q" -VIDEO_ID_INTRO = "I0RRENheeTo" -VIDEO_SLUG_INTRO = "20211010_No_copyright_intro_free_fire_intro_no_text_free_copy_right_free_templates_free_download" -VIDEO_ID_UNAVAILABLE = "K6CBuTy09CE" - - -@pytest.mark.django_db -def test_download_video(download_dir, rq_queue): - video = Video.objects.get(video_id=VIDEO_ID_INTRO) - job = queue.enqueue(download.download_video, video.id) - - store = storage.Storage() - cf = store.get_or_create_channel_folder(video.channel.slug) - - assert job.is_finished - - assert os.path.isfile(cf.get_audio(VIDEO_SLUG_INTRO)) - assert os.path.isfile(cf.get_cover(VIDEO_SLUG_INTRO)) - assert os.path.isfile(cf.get_thumbnail(VIDEO_SLUG_INTRO)) - assert os.path.isfile(cf.get_thumbnail(VIDEO_SLUG_INTRO, True)) - - -@pytest.mark.django_db -def test_load_unavailable_video(download_dir, rq_queue, mock_redis): - channel = Channel.objects.get(channel_id=CHANNEL_ID_THETADEV) - download._load_scraped_video(VideoScraped(VIDEO_ID_UNAVAILABLE, None), channel) - - video = Video.objects.get(video_id=VIDEO_ID_UNAVAILABLE) - assert video.is_deleted is True - - -@pytest.mark.django_db -def test_download_unavailable_video(download_dir, rq_queue): - channel = Channel.objects.get(channel_id=CHANNEL_ID_THETADEV) - video = Video( - video_id=VIDEO_ID_UNAVAILABLE, - title="", - slug="", - channel=channel, - published=timezone.datetime(2000, 1, 1, tzinfo=timezone.utc), - description="", - duration=0, - ) - video.save() - job = queue.enqueue(download.download_video, video.id) - video.refresh_from_db() - - assert job.is_finished - assert video.is_deleted - - -@pytest.mark.django_db -def test_update_channel( - download_dir, rq_queue, mock_redis, mock_get_video_details, mock_download_audio -): - # Remove 2 videos from the database so they can be imported - Video.objects.get(video_id="ZPxEr4YdWt8").delete() - Video.objects.get(video_id="_I5IFObm_-k").delete() - - channel = Channel.objects.get(channel_id=CHANNEL_ID_THETADEV) - job = rq_queue.enqueue(download.update_channel, channel.id) - assert job.is_finished - - mock_download_audio.assert_any_call( - "_I5IFObm_-k", - download_dir / "ThetaDev" / "20180331_Easter_special_3D_printed_Bunny.mp3", - ) - mock_download_audio.assert_any_call( - "ZPxEr4YdWt8", - download_dir / "ThetaDev" / "20190602_ThetaDev_Embedded_World_2019.mp3", - ) - - -@pytest.mark.django_db -def test_update_channels(rq_queue, mocker): - update_channel_mock = tests.GlobalMock() - mocker.patch.object(download, "update_channel", update_channel_mock) - job = rq_queue.enqueue(download.update_channels) - assert job.is_finished - - assert update_channel_mock.n_calls == 3 diff --git a/ucast/tests/tasks/test_library.py b/ucast/tests/tasks/test_library.py deleted file mode 100644 index 19b213b..0000000 --- a/ucast/tests/tasks/test_library.py +++ /dev/null @@ -1,81 +0,0 @@ -from unittest import mock - -import pytest - -from ucast import tests -from ucast.models import Channel, Video -from ucast.service import cover, storage -from ucast.tasks import library - -CHANNEL_ID_THETADEV = "UCGiJh0NZ52wRhYKYnuZI08Q" - - -@pytest.mark.django_db -def test_recreate_cover(download_dir_content_mut, rq_queue, mocker): - create_cover_mock: mock.Mock = mocker.patch.object(cover, "create_cover_file") - - video = Video.objects.get(video_id="ZPxEr4YdWt8") - - store = storage.Storage() - cf = store.get_or_create_channel_folder(video.channel.slug) - - job = rq_queue.enqueue(library.recreate_cover, video.id) - assert job.is_finished - - create_cover_mock.assert_called_once_with( - cf.get_thumbnail(video.slug), - cf.file_avatar, - video.title, - video.channel.name, - cover.COVER_STYLE_BLUR, - cf.get_cover(video.slug), - ) - - -@pytest.mark.django_db -def test_recreate_covers(rq_queue, mocker): - recreate_cover_mock = tests.GlobalMock() - mocker.patch.object(library, "recreate_cover", recreate_cover_mock) - - job = rq_queue.enqueue(library.recreate_covers) - assert job.is_finished - - assert recreate_cover_mock.n_calls == 4 - - -@pytest.mark.django_db -def test_update_channel_info(rq_queue, mock_get_channel_metadata): - channel = Channel.objects.get(channel_id=CHANNEL_ID_THETADEV) - - channel.name = "Old name" - channel.description = "Old description" - channel.subscribers = "Old" - channel.avatar_url = "Old avatar url" - channel.save() - - job = rq_queue.enqueue(library.update_channel_info, channel.id) - assert job.is_finished - - channel.refresh_from_db() - assert channel.name == "ThetaDev" - assert ( - channel.description - == "I'm ThetaDev. I love creating cool projects \ -using electronics, 3D printers and other awesome tech-based stuff." - ) - assert channel.subscribers == "37" - assert ( - channel.avatar_url - == "https://yt3.ggpht.com/ytc/AKedOLSnFfmpibLLoqyaYdsF6bJ-zaLPzomII__FrJve1w=s900-c-k-c0x00ffffff-no-rj" - ) - - -@pytest.mark.django_db -def test_update_channel_infos(rq_queue, mocker): - update_channel_mock = tests.GlobalMock() - mocker.patch.object(library, "update_channel_info", update_channel_mock) - - job = rq_queue.enqueue(library.update_channel_infos) - assert job.is_finished - - assert update_channel_mock.n_calls == 3 diff --git a/ucast/tests/test_feed.py b/ucast/tests/test_feed.py deleted file mode 100644 index 22bfcf1..0000000 --- a/ucast/tests/test_feed.py +++ /dev/null @@ -1,85 +0,0 @@ -import feedparser -import pytest -from django.test.client import Client -from django.utils.feedgenerator import rfc2822_date - -from ucast import feed -from ucast.models import Video - - -@pytest.mark.django_db -def test_feed(feed_key): - client = Client() - response = client.get(f"/feed/ThetaDev?key={feed_key}") - parsed_feed = feedparser.parse(response.getvalue()) - - assert parsed_feed["bozo"] is False - - assert parsed_feed["namespaces"] == { - "": "http://www.w3.org/2005/Atom", - "itunes": "http://www.itunes.com/dtds/podcast-1.0.dtd", - } - - meta = parsed_feed["feed"] - assert meta["title"] == "ThetaDev" - assert meta["link"] == "https://www.youtube.com/channel/UCGiJh0NZ52wRhYKYnuZI08Q" - assert ( - meta["subtitle"] - == "I'm ThetaDev. I love creating cool projects using electronics, 3D printers and other awesome tech-based stuff." - ) - assert meta["updated"] == "Sun, 15 May 2022 22:16:25 +0000" - assert ( - meta["image"]["href"] - == f"http://testserver/files/avatar/ThetaDev.jpg?key={feed_key}" - ) - - assert len(parsed_feed["entries"]) == 4 - - video_ids = ["ZPxEr4YdWt8", "_I5IFObm_-k", "mmEDPbbSnaY", "Cda4zS-1j-k"] - - for i, entry in enumerate(parsed_feed["entries"]): - video = Video.objects.get(video_id=video_ids[i]) - assert entry["title"] == video.title - assert entry["link"] == video.get_absolute_url() - assert entry["summary"] == feed.PodcastFeedType._xml_escape( - video.description - ).replace("
", "
") - assert entry["published"] == rfc2822_date(video.published) - assert entry["id"] == video.get_absolute_url() - assert ( - entry["image"]["href"] - == f"http://testserver/files/cover/ThetaDev/{video.slug}.png?key={feed_key}" - ) - assert entry["itunes_duration"] == feed.PodcastFeedType._format_secs( - video.duration - ) - - -@pytest.mark.parametrize( - "text,expect", - [ - ("Hello ", "Hello <World>"), - ( - "go to https://example.org/test", - 'go to https://example.org/test', - ), - ("line1\nline2\nline3", "line1
line2
line3"), - ], -) -def test_xml_escape(text: str, expect: str): - escaped = feed.PodcastFeedType._xml_escape(text) - assert escaped == expect - - -@pytest.mark.parametrize( - "secs,expect", - [ - (0, "00:00:00"), - (16, "00:00:16"), - (100, "00:01:40"), - (3800, "01:03:20"), - ], -) -def test_format_secs(secs: int, expect: str): - time_str = feed.PodcastFeedType._format_secs(secs) - assert time_str == expect diff --git a/ucast/tests/test_views.py b/ucast/tests/test_views.py deleted file mode 100644 index 7c6b27d..0000000 --- a/ucast/tests/test_views.py +++ /dev/null @@ -1,106 +0,0 @@ -import pytest -from django.conf import settings -from django.test.client import Client - -from ucast.service import util - - -@pytest.mark.parametrize( - "url_path,internal_path", - [ - ( - "audio/ThetaDev/20190602_ThetaDev_Embedded_World_2019.mp3", - "/internal_files/ThetaDev/20190602_ThetaDev_Embedded_World_2019.mp3", - ), - ( - "cover/ThetaDev/20190602_ThetaDev_Embedded_World_2019.png", - "/internal_files/ThetaDev/_ucast/covers/20190602_ThetaDev_Embedded_World_2019.png", - ), - ( - "thumbnail/ThetaDev/20190602_ThetaDev_Embedded_World_2019.webp", - "/internal_files/ThetaDev/_ucast/thumbnails/20190602_ThetaDev_Embedded_World_2019.webp", - ), - ( - "thumbnail/ThetaDev/20190602_ThetaDev_Embedded_World_2019.webp?sm", - "/internal_files/ThetaDev/_ucast/thumbnails/20190602_ThetaDev_Embedded_World_2019_sm.webp", - ), - ( - "avatar/ThetaDev.jpg", - "/internal_files/ThetaDev/_ucast/avatar.jpg", - ), - ( - "avatar/ThetaDev.webp?sm", - "/internal_files/ThetaDev/_ucast/avatar_sm.webp", - ), - ], -) -def test_files_internal_redirect( - url_path: str, internal_path: str, download_dir_content, feed_key, admin_client -): - settings.INTERNAL_REDIRECT_HEADER = "X-Accel-Redirect" - - def check_response(resp): - assert resp.getvalue() == b"" - assert resp.headers.get("X-Accel-Redirect") == internal_path - assert "Content-Type" not in resp.headers - - # Access with key - client = Client() - url = util.add_key_to_url("/files/" + url_path, feed_key) - response = client.get(url) - check_response(response) - - # Access with login - response = admin_client.get("/files/" + url_path) - check_response(response) - - -@pytest.mark.parametrize( - "url_path,file_path", - [ - ( - "audio/ThetaDev/20190602_ThetaDev_Embedded_World_2019.mp3", - "ThetaDev/20190602_ThetaDev_Embedded_World_2019.mp3", - ), - ( - "cover/ThetaDev/20190602_ThetaDev_Embedded_World_2019.png", - "ThetaDev/_ucast/covers/20190602_ThetaDev_Embedded_World_2019.png", - ), - ( - "thumbnail/ThetaDev/20190602_ThetaDev_Embedded_World_2019.webp", - "ThetaDev/_ucast/thumbnails/20190602_ThetaDev_Embedded_World_2019.webp", - ), - ( - "thumbnail/ThetaDev/20190602_ThetaDev_Embedded_World_2019.webp?sm", - "ThetaDev/_ucast/thumbnails/20190602_ThetaDev_Embedded_World_2019_sm.webp", - ), - ( - "avatar/ThetaDev.jpg", - "ThetaDev/_ucast/avatar.jpg", - ), - ( - "avatar/ThetaDev.webp?sm", - "ThetaDev/_ucast/avatar_sm.webp", - ), - ], -) -def test_files_response( - url_path: str, file_path: str, download_dir_content, feed_key, admin_client -): - settings.INTERNAL_REDIRECT_HEADER = "" - - response_file = settings.DOWNLOAD_ROOT / file_path - with open(response_file, "rb") as f: - file_bts = f.read() - - # Access with key - client = Client() - url = util.add_key_to_url("/files/" + url_path, feed_key) - response = client.get(url) - response_bts = response.getvalue() - assert response_bts == file_bts - - # Access with login - response = admin_client.get("/files/" + url_path) - response_bts = response.getvalue() - assert response_bts == file_bts diff --git a/ucast/service/typ.py b/ucast/typ.py similarity index 78% rename from ucast/service/typ.py rename to ucast/typ.py index 75efbf1..dbf0d5a 100644 --- a/ucast/service/typ.py +++ b/ucast/typ.py @@ -1,3 +1,4 @@ +# coding=utf-8 from typing import Tuple Color = Tuple[int, int, int] diff --git a/ucast/urls.py b/ucast/urls.py deleted file mode 100644 index 35fbc2d..0000000 --- a/ucast/urls.py +++ /dev/null @@ -1,49 +0,0 @@ -from django.contrib.staticfiles.storage import staticfiles_storage -from django.urls import path -from django.views.generic.base import RedirectView - -from ucast import views - -urlpatterns = [ - path("", views.home), - path( - "favicon.ico", - RedirectView.as_view(url=staticfiles_storage.url("ucast/favicon.ico")), - ), - path("channel/", views.videos, name="videos"), - path("channel//edit", views.channel_edit, name="channel_edit"), - path( - "channel//download", - views.channel_download, - name="channel_download", - ), - path("downloads", views.downloads, name="downloads"), - path( - "downloads/requeue", - views.download_errors_requeue, - name="download_errors_requeue", - ), - path( - "downloads/requeue_all", - views.download_errors_requeue_all, - name="download_errors_requeue_all", - ), - path( - "downloads/delete", - views.download_errors_delete, - name="download_errors_delete", - ), - path( - "downloads/delete_all", - views.download_errors_delete_all, - name="download_errors_delete_all", - ), - path("downloads/error/", views.error_details, name="error_details"), - path("feed/", views.podcast_feed, name="feed"), - path("opml", views.channels_opml, name="channels_opml"), - path("search", views.search, name="search"), - path("files/audio//", views.audio), - path("files/cover//", views.cover), - path("files/thumbnail//", views.thumbnail), - path("files/avatar/", views.avatar), -] diff --git a/ucast/util.py b/ucast/util.py new file mode 100644 index 0000000..aef2c75 --- /dev/null +++ b/ucast/util.py @@ -0,0 +1,9 @@ +# coding=utf-8 +from pathlib import Path + +import requests + + +def download_file(url: str, download_path: Path): + r = requests.get(url, allow_redirects=True) + open(download_path, "wb").write(r.content) diff --git a/ucast/views.py b/ucast/views.py index 230748c..c018e9f 100644 --- a/ucast/views.py +++ b/ucast/views.py @@ -1,347 +1,13 @@ -import os -from functools import wraps -from pathlib import Path -from typing import Callable +# coding=utf-8 +from starlette.requests import Request +from starlette.responses import Response -from django import http -from django.conf import settings -from django.contrib.auth.decorators import login_required -from django.contrib.sites.shortcuts import get_current_site -from django.contrib.syndication.views import add_domain -from django.core.paginator import Paginator -from django.middleware.http import ConditionalGetMiddleware -from django.shortcuts import render -from django.urls import reverse -from django.utils.decorators import decorator_from_middleware +# from ucast import db -from ucast import feed, forms, queue -from ucast.models import Channel, User, Video -from ucast.service import controller, opml, storage -from ucast.tasks import download +async def homepage(request: Request) -> Response: + return Response("Hello World!") -@login_required -def home(request: http.HttpRequest): - channels = Channel.objects.all() - site_url = add_domain(get_current_site(request).domain, "", request.is_secure()) - form = forms.AddChannelForm() - - if request.method == "POST": - form = forms.AddChannelForm(request.POST) - if form.is_valid(): - channel_str = form.cleaned_data["channel_str"] - try: - channel = controller.create_channel(channel_str) - queue.enqueue(download.update_channel, channel.id) - except ValueError: - form.add_error("channel_str", "Channel URL invalid") - except controller.ChannelAlreadyExistsException: - form.add_error("channel_str", "Channel already exists") - - if form.is_valid(): - return http.HttpResponseRedirect(reverse(home)) - - return render( - request, - "ucast/channels.html", - { - "channels": channels, - "site_url": site_url, - "form": form, - }, - ) - - -@login_required -def videos(request: http.HttpRequest, channel: str): - chan = Channel.objects.get(slug=channel) - - if request.method == "POST": - if "activate" in request.POST: - chan.active = True - chan.save() - elif "deactivate" in request.POST: - chan.active = False - chan.save() - elif "delete_video" in request.POST: - form = forms.DeleteVideoForm(request.POST) - if form.is_valid(): - id = form.cleaned_data["id"] - controller.delete_video(id) - else: - return http.HttpResponseBadRequest() - elif "delete_channel" in request.POST: - controller.delete_channel(chan.id) - return http.HttpResponseRedirect(reverse(home)) - else: - return http.HttpResponseBadRequest() - - return http.HttpResponseRedirect(reverse(videos, args=[channel])) - - vids = Video.objects.filter(channel=chan, downloaded__isnull=False).order_by( - "-published" - ) - site_url = add_domain(get_current_site(request).domain, "", request.is_secure()) - - page_number = request.GET.get("page") - videos_p = Paginator(vids, 20) - - template_name = "ucast/videos.html" - if request.htmx: - template_name = "ucast/videos_items.html" - - n_pending = Video.objects.filter( - channel=chan, - downloaded__isnull=True, - is_deleted=False, - **chan.vfilter_args(), - ).count() - - return render( - request, - template_name, - { - "videos": videos_p.get_page(page_number), - "channel": chan, - "site_url": site_url, - "n_pending": n_pending, - }, - ) - - -@login_required -def channel_edit(request: http.HttpRequest, channel: str): - chan = Channel.objects.get(slug=channel) - form = forms.EditChannelForm( - initial={ - "skip_shorts": chan.skip_shorts, - "skip_livestreams": chan.skip_livestreams, - } - ) - - if request.method == "POST": - form = forms.EditChannelForm(request.POST) - if form.is_valid(): - chan.skip_shorts = form.cleaned_data["skip_shorts"] - chan.skip_livestreams = form.cleaned_data["skip_livestreams"] - chan.save() - - return http.HttpResponseRedirect(reverse(videos, args=[channel])) - - return render( - request, - "ucast/channel_edit.html", - { - "channel": chan, - "form": form, - }, - ) - - -@login_required -def channel_download(request: http.HttpRequest, channel: str): - chan = Channel.objects.get(slug=channel) - - if request.method == "POST": - form = forms.DownloadChannelForm(request.POST) - if form.is_valid(): - queue.enqueue( - download.download_channel, chan.id, form.cleaned_data["n_videos"] - ) - return http.HttpResponseRedirect(reverse(videos, args=[channel])) - - return render( - request, - "ucast/channel_download.html", - { - "channel": chan, - "form": forms.DownloadChannelForm(), - }, - ) - - -@login_required -def downloads(request: http.HttpRequest): - freg = queue.get_failed_job_registry() - ids = freg.get_job_ids(0, 50) - failed_jobs = freg.job_class.fetch_many(ids, freg.connection, freg.serializer) - - downloading_videos = queue.get_downloading_videos(limit=100) - - template_name = "ucast/downloads.html" - if request.htmx: - template_name = "ucast/downloads_items.html" - - return render( - request, - template_name, - { - "failed_jobs": failed_jobs, - "downloading_videos": downloading_videos, - "n_tasks": queue.get_queue().count, - }, - ) - - -@login_required -def error_details(request: http.HttpRequest, job_id: str): - freg = queue.get_failed_job_registry() - job = freg.job_class.fetch(job_id, freg.connection, freg.serializer) - - return render(request, "ucast/error_details.html", {"job": job}) - - -@login_required -def download_errors_requeue(request: http.HttpRequest): - form = forms.RequeueForm(request.POST) - - if form.is_valid(): - freg = queue.get_failed_job_registry() - freg.requeue(str(form.cleaned_data["id"])) - - return http.HttpResponseRedirect(reverse(downloads)) - - -@login_required -def download_errors_requeue_all(request: http.HttpRequest): - freg = queue.get_failed_job_registry() - for job_id in freg.get_job_ids(): - freg.requeue(job_id) - - return http.HttpResponseRedirect(reverse(downloads)) - - -@login_required -def download_errors_delete(request: http.HttpRequest): - form = forms.RequeueForm(request.POST) - - if form.is_valid(): - freg = queue.get_failed_job_registry() - freg.remove(str(form.cleaned_data["id"]), delete_job=True) - - return http.HttpResponseRedirect(reverse(downloads)) - - -@login_required -def download_errors_delete_all(request: http.HttpRequest): - freg = queue.get_failed_job_registry() - for job_id in freg.get_job_ids(): - freg.remove(job_id, delete_job=True) - - return http.HttpResponseRedirect(reverse(downloads)) - - -@login_required -def channels_opml(request: http.HttpRequest): - response = http.HttpResponse( - content_type="application/xml", - headers={"Content-Disposition": "attachment; filename=ucast_channels.opml"}, - ) - site_url = add_domain(get_current_site(request).domain, "", request.is_secure()) - opml.write_channels_opml( - Channel.objects.all(), site_url, request.user.get_feed_key(), response - ) - return response - - -@login_required -def search(request: http.HttpRequest): - query = request.GET.get("q") - vids = [] - if query: - vids = Video.objects.filter(downloaded__isnull=False, title__icontains=query)[ - :30 - ] - - return render(request, "ucast/search.html", {"query": query, "videos": vids}) - - -def _channel_file(channel: str, get_file: Callable[[storage.ChannelFolder], Path]): - store = storage.Storage() - - try: - cf = store.get_channel_folder(channel) - except FileNotFoundError: - raise http.Http404 - - file_path = get_file(cf) - if not os.path.isfile(file_path): - raise http.Http404 - - if not settings.INTERNAL_REDIRECT_HEADER: - return http.FileResponse(open(file_path, "rb")) - - file_path_rel = file_path.relative_to(store.dir_data) - url_path_internal = f"/{settings.INTERNAL_FILES_ROOT}/{file_path_rel.as_posix()}" - - response = http.HttpResponse() - response.headers[settings.INTERNAL_REDIRECT_HEADER] = url_path_internal - # Content type is set to text/html by default and has to be unset - del response.headers["Content-Type"] - return response - - -def login_or_key_required(function): - def decorator(view_func): - @wraps(view_func) - def _wrapped_view(request, *args, **kwargs): - key = request.GET.get("key") - if key: - try: - request.user = User.objects.get(feed_key=key) - except User.DoesNotExist: - pass - - if request.user.is_authenticated: - return view_func(request, *args, **kwargs) - - return http.HttpResponse("401 Unauthorized", status=401) - - return _wrapped_view - - return decorator(function) - - -@login_or_key_required -def audio(request: http.HttpRequest, channel: str, video: str): - # Trim off file extension - video_slug = video.rsplit(".")[0] - - return _channel_file(channel, lambda cf: cf.get_audio(video_slug)) - - -@login_or_key_required -def cover(request: http.HttpRequest, channel: str, video: str): - # Trim off file extension - video_slug = video.rsplit(".")[0] - - return _channel_file(channel, lambda cf: cf.get_cover(video_slug)) - - -@login_or_key_required -def thumbnail(request: http.HttpRequest, channel: str, video: str): - # Trim off file extension - video_slug = video.rsplit(".")[0] - - is_sm = "sm" in request.GET - - return _channel_file(channel, lambda cf: cf.get_thumbnail(video_slug, is_sm)) - - -@login_or_key_required -def avatar(request: http.HttpRequest, channel: str): - # Trim off file extension - channel_slug = channel.rsplit(".")[0] - - is_sm = "sm" in request.GET - - if is_sm: - return _channel_file(channel_slug, lambda cf: cf.file_avatar_sm) - return _channel_file(channel_slug, lambda cf: cf.file_avatar) - - -@login_or_key_required -@decorator_from_middleware(ConditionalGetMiddleware) -def podcast_feed(request: http.HttpRequest, *args, **kwargs): - return feed.UcastFeed()(request, *args, **kwargs) +async def error(request: Request) -> Response: + raise Exception("this is an error") diff --git a/ucast/youtube.py b/ucast/youtube.py new file mode 100644 index 0000000..8e56d79 --- /dev/null +++ b/ucast/youtube.py @@ -0,0 +1,76 @@ +# coding=utf-8 +import json +from dataclasses import dataclass +from operator import itemgetter + +import requests +from scrapetube import scrapetube +from yt_dlp import YoutubeDL + + +def get_thumbnail_url(vinfo): + """Get the best quality thumbnail""" + return max(vinfo["thumbnails"], key=itemgetter("preference"))["url"] + + +def get_video_info(video_id): + with YoutubeDL() as ydl: + return ydl.extract_info(video_id, download=False) + + +def download_video(video_id, download_path, sponsorblock=False): + ydl_params = { + "format": "bestaudio", + "postprocessors": [ + {"key": "FFmpegExtractAudio", "preferredcodec": "mp3"}, + ], + "outtmpl": download_path, + } + + if sponsorblock: + # noinspection PyTypeChecker + ydl_params["postprocessors"].extend( + [ + { + "key": "SponsorBlock", + "categories": ["sponsor"], + "when": "after_filter", + }, + {"key": "ModifyChapters", "remove_sponsor_segments": ["sponsor"]}, + ] + ) + + with YoutubeDL(ydl_params) as ydl: + # extract_info downloads the video and returns its metadata + return ydl.extract_info(video_id) + + +@dataclass +class ChannelMetadata: + id: str + name: str + description: str + avatar_url: str + + +def get_channel_metadata(channel_url): + session = requests.Session() + session.headers[ + "User-Agent" + ] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \ +(KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36" + + url = f"{channel_url}/videos?view=0&flow=grid" + + html = scrapetube.get_initial_data(session, url) + data = json.loads( + scrapetube.get_json_from_html(html, "var ytInitialData = ", 0, "};") + "}" + ) + metadata = data["metadata"]["channelMetadataRenderer"] + + channel_id = metadata["externalId"] + name = metadata["title"] + description = metadata["description"] + avatar = metadata["avatar"]["thumbnails"][0]["url"] + + return ChannelMetadata(channel_id, name, description, avatar) diff --git a/ucast_project/__init__.py b/ucast_project/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/ucast_project/asgi.py b/ucast_project/asgi.py deleted file mode 100644 index 23dea34..0000000 --- a/ucast_project/asgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -ASGI config for ucast project. - -It exposes the ASGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/4.0/howto/deployment/asgi/ -""" - -import os - -from django.core.asgi import get_asgi_application - -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ucast_project.settings") - -application = get_asgi_application() diff --git a/ucast_project/manage.py b/ucast_project/manage.py deleted file mode 100755 index f4ede1d..0000000 --- a/ucast_project/manage.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python -"""Django's command-line utility for administrative tasks.""" -import os -import sys - - -def main(): - """Run administrative tasks.""" - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ucast_project.settings") - try: - from django.core.management import execute_from_command_line - except ImportError as exc: - raise ImportError( - "Couldn't import Django. Are you sure it's installed and " - "available on your PYTHONPATH environment variable? Did you " - "forget to activate a virtual environment?" - ) from exc - execute_from_command_line(sys.argv) - - -if __name__ == "__main__": - main() diff --git a/ucast_project/settings.py b/ucast_project/settings.py deleted file mode 100644 index c5d6f28..0000000 --- a/ucast_project/settings.py +++ /dev/null @@ -1,236 +0,0 @@ -""" -Django settings for ucast project. - -Generated by 'django-admin startproject' using Django 4.0.4. - -For more information on this file, see -https://docs.djangoproject.com/en/4.0/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/4.0/ref/settings/ -""" - -import os -import time -from importlib import resources -from pathlib import Path - -import dotenv - -VAR_PREFIX = "UCAST_" - - -def get_env(name, default=None): - val_raw = os.environ.get(VAR_PREFIX + name, default) - - if default is not None: - return type(default)(val_raw) - - return val_raw - - -def get_env_path(name, default=None): - raw_env = get_env(name) - if not raw_env: - folder = default - else: - folder = Path(raw_env).absolute() - os.makedirs(folder, exist_ok=True) - return folder - - -def get_env_list(name): - raw_env = get_env(name) - if not raw_env: - return [] - return [i.strip() for i in raw_env.split(",")] - - -def _load_dotenv() -> Path: - """ - Look for a .env file in the current working directory or - its parent directories. - - The directory containing the .env file becomes the application - working directory, if no ``UCAST_WORKDIR`` environment variable - is present. - - :return: Application working directory - """ - dotenv_path = dotenv.find_dotenv() - default_workdir = Path().resolve() - - if dotenv_path: - dotenv.load_dotenv(dotenv_path) - default_workdir = Path(dotenv_path).resolve().parent - - os.chdir(default_workdir) - - env_workdir = get_env("WORKDIR") - if env_workdir: - env_workdir_path = Path(env_workdir).resolve() - os.makedirs(env_workdir_path, exist_ok=True) - os.chdir(env_workdir_path) - return env_workdir_path - - return default_workdir - - -# Build paths inside the project like this: BASE_DIR / 'subdir'. -BASE_DIR = _load_dotenv() - -# SECURITY WARNING: keep the secret key used in production secret! -# generate with openssl rand -base64 64 -SECRET_KEY = get_env( - "SECRET_KEY", "django-insecure-$b25pq-s+(_zx2!2$+i+^0$kft0&y3kwmj7j5a#d_jop)$d061" -) - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = get_env("DEBUG", False) - -ALLOWED_HOSTS = get_env_list("ALLOWED_HOSTS") - -# Application definition - -INSTALLED_APPS = [ - "ucast", - "django.contrib.admin", - "django.contrib.auth", - "django.contrib.contenttypes", - "django.contrib.sessions", - "django.contrib.messages", - "django.contrib.staticfiles", - "bulma", - "django_htmx", -] - -MIDDLEWARE = [ - "django.middleware.security.SecurityMiddleware", - "django.contrib.sessions.middleware.SessionMiddleware", - "django.middleware.locale.LocaleMiddleware", - "django.middleware.common.CommonMiddleware", - "django.middleware.csrf.CsrfViewMiddleware", - "django.contrib.auth.middleware.AuthenticationMiddleware", - "django.contrib.messages.middleware.MessageMiddleware", - "django.middleware.clickjacking.XFrameOptionsMiddleware", - "django_htmx.middleware.HtmxMiddleware", -] - -ROOT_URLCONF = "ucast_project.urls" - -TEMPLATES = [ - { - "BACKEND": "django.template.backends.django.DjangoTemplates", - "DIRS": [], - "APP_DIRS": True, - "OPTIONS": { - "context_processors": [ - "django.template.context_processors.debug", - "django.template.context_processors.request", - "django.contrib.auth.context_processors.auth", - "django.contrib.messages.context_processors.messages", - "ucast.template_context", - ], - }, - }, -] - -WSGI_APPLICATION = "ucast_project.wsgi.application" - - -def _get_db_config() -> dict: - db_name = get_env("DB_NAME", "db") - db_engine = get_env("DB_ENGINE", "sqlite") - - if db_engine == "sqlite": - return { - "ENGINE": "django.db.backends.sqlite3", - "NAME": DB_DIR / f"{db_name}.sqlite", - "OPTIONS": { - "timeout": 20, - }, - } - - db_port = get_env("DB_PORT") - if not db_port: - if db_engine == "postgresql": - db_port = "5432" - elif db_engine == "mysql": - db_port = "3306" - - return { - "ENGINE": f"django.db.backends.{db_engine}", - "NAME": db_name, - "USER": get_env("DB_USER"), - "PASSWORD": get_env("DB_PASSWORD"), - "HOST": get_env("DB_HOST", "127.0.0.1"), - "PORT": db_port, - } - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/4.0/howto/static-files/ - -STATIC_URL = "static/" -STATIC_ROOT = get_env_path("STATIC_ROOT", BASE_DIR / "static") -DOWNLOAD_ROOT = get_env_path("DOWNLOAD_ROOT", BASE_DIR / "data") -CACHE_ROOT = get_env_path("CACHE_ROOT", BASE_DIR / "cache") -DB_DIR = get_env_path("DB_DIR", BASE_DIR / "db") - -STATICFILES_DIRS = [resources.path("ucast", "static")] - - -# Database -# https://docs.djangoproject.com/en/4.0/ref/settings/#databases -DATABASES = { - "default": _get_db_config(), -} - -# Password validation -# https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators - -AUTH_PASSWORD_VALIDATORS = [ - { - "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", - }, - { - "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", - }, - { - "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", - }, - { - "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", - }, -] - -AUTH_USER_MODEL = "ucast.user" - -LOGIN_REDIRECT_URL = "/" -LOGOUT_REDIRECT_URL = "/" - -# Internationalization -# https://docs.djangoproject.com/en/4.0/topics/i18n/ - -LANGUAGE_CODE = "en-us" - -TIME_ZONE = get_env("TZ", time.tzname[0]) - -USE_I18N = True - -USE_TZ = True - -# Default primary key field type -# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field - -DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" - -REDIS_URL = get_env("REDIS_URL", "redis://localhost:6379") -REDIS_QUEUE_TIMEOUT = get_env("REDIS_QUEUE_TIMEOUT", 600) -REDIS_QUEUE_RESULT_TTL = 600 - -YT_UPDATE_INTERVAL = get_env("YT_UPDATE_INTERVAL", 900) -FEED_MAX_ITEMS = get_env("FEED_MAX_ITEMS", 100) - -INTERNAL_FILES_ROOT = get_env("INTERNAL_FILES_ROOT", "internal_files") -INTERNAL_REDIRECT_HEADER = get_env("INTERNAL_REDIRECT_HEADER", "X-Accel-Redirect") diff --git a/ucast_project/urls.py b/ucast_project/urls.py deleted file mode 100644 index 42cb61d..0000000 --- a/ucast_project/urls.py +++ /dev/null @@ -1,23 +0,0 @@ -"""ucast URL Configuration - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/4.0/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" -from django.contrib import admin -from django.urls import include, path - -urlpatterns = [ - path("admin/", admin.site.urls), - path("accounts/", include("django.contrib.auth.urls")), - path("", include("ucast.urls")), -] diff --git a/ucast_project/wsgi.py b/ucast_project/wsgi.py deleted file mode 100644 index b8762e6..0000000 --- a/ucast_project/wsgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -WSGI config for ucast project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/ -""" - -import os - -from django.core.wsgi import get_wsgi_application - -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ucast_project.settings") - -application = get_wsgi_application()