commit 39875407743e874aa508c4dff4ee4ae921245d7e
Author: rodolphe
Date: Fri Mar 10 03:06:14 2023 +0100
(Grav GitSync) Automatic Commit from rodolphe
diff --git a/pages/01.home/default.md b/pages/01.home/default.md
new file mode 100644
index 0000000..372c02c
--- /dev/null
+++ b/pages/01.home/default.md
@@ -0,0 +1,34 @@
+---
+title: 'Les services Linux07'
+body_classes: 'title-center title-h1h2'
+published: true
+---
+
+### Qu'est-ce que c'est ?
+
+Un ensemble d'Alternatives aux services propriétaires dit [GAFAM](https://fr.wikipedia.org/wiki/GAFAM) mis en place par une l'association [Linux07](https://blog.linux07.fr).
+Des services Libres sans aucune exploitation commerciale ou autres de vos données accessibles à cette adresse: [Services numériques Linux07](https://services.linux07.fr)
+
+### Pourquoi ?
+
+Notre souhait est de pouvoir continuer à **partager**, **échanger** et à **faire la promotion du Libre** autours de nous.
+
+Proposer ces services ont pour but de vous montrer comment des outils numériques éthiques, libres et respectueux de vos données pour collaborer sont des alternatives à privilégier.
+
+## Documentation services numériques Linux07
+
+Cette documentation est à votre disposition pour au fur et à mesure qu'elle sera complétée:
+
+* Découvrir les bases d'utilisation des services Linux07 pour ses heureux utilisateurs.
+* Connaître l'infrastructure des services numériques Linux07
+* Documenter les étapes techniques.
+
+Cette documentation est librement inspirée de doucumentaions existantes, pour aider les utilisateurs des [services numériques Linux07](https://services.linux07.fr), utilisant des logiciels libres comme:
+* Nextcloud (Cloud Linux07)
+* Rouncube (Mails Linux07)
+* Mattermost (Linux07 Teams)
+* Mobilizon (Mobilizon Linux07)
+* Cryptpad (Cryptpad Linux07)
+* Opensondage (Linux07date)
+* Mypads (Mypads Linux07)
+* Libreto (Libreto Linux07)
diff --git a/pages/02.l-infrastructure/01.deploiement-du-serveur/docs.md b/pages/02.l-infrastructure/01.deploiement-du-serveur/docs.md
new file mode 100644
index 0000000..0161c16
--- /dev/null
+++ b/pages/02.l-infrastructure/01.deploiement-du-serveur/docs.md
@@ -0,0 +1,85 @@
+---
+title: 'Déploiement du serveur'
+child_type: docs
+taxonomy:
+ category:
+ - docs
+---
+
+Le système est déployé avec [Yunohost](https://yunohost.org).
+
+Le service d'annuaire [LDAP](https://fr.wikipedia.org/wiki/LDAP_Data_Interchange_Format) pour le serveur Yunohost n'est pas compatibles avec toutes les applications hébergées. L'identification LDAP ne fonctionne que pour les mails (Roundcube), pour le Cloud Linux07 (Nextcloud) et pour Mypads Linux07 (Etherpad_Mypads).
+
+
+> ! Certains utilisateurs du Cloud Linux07 (Nextcloud) **ne sont pas connectés à l'annuaire LDAP**, ils ont un compte gratuit de 400 Mo et se sont inscrits par eux-même, leur compte à été validé ensuite.
+
+Le serveur a été partitionner en LVM pour pouvoir alloué des volumes partitionnés à certains dossiers ou certaines applications, déplacés avec des `mount --bind`, sauf pour la partition `\var\mail` qui elle montée dans le fichier `/etc/fstab`.
+
+**lsblk**
+
+```
+NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
+sda 8:0 0 1.8T 0 disk
+├─sda1 8:1 0 68.4G 0 part
+│ └─md1 9:1 0 68.3G 0 raid1 /
+├─sda2 8:2 0 2G 0 part [SWAP]
+├─sda3 8:3 0 1.8T 0 part
+│ └─md3 9:3 0 1.8T 0 raid1
+│ ├─vg-mail 253:0 0 195.3G 0 lvm /var/mail
+│ ├─vg-data 253:1 0 293G 0 lvm /mnt/media
+│ ├─vg-CRYPTPAD 253:2 0 97.7G 0 lvm /mnt/pad
+│ ├─vg-APPS 253:3 0 293G 0 lvm /mnt/apps
+│ └─vg-backups 253:4 0 913.7G 0 lvm /mnt/backups
+├─sda4 8:4 0 1K 0 part
+└─sda5 8:5 0 1.9M 0 part
+sdb 8:16 0 1.8T 0 disk
+├─sdb1 8:17 0 68.4G 0 part
+│ └─md1 9:1 0 68.3G 0 raid1 /
+├─sdb2 8:18 0 2G 0 part [SWAP]
+└─sdb3 8:19 0 1.8T 0 part
+ └─md3 9:3 0 1.8T 0 raid1
+ ├─vg-mail 253:0 0 195.3G 0 lvm /var/mail
+ ├─vg-data 253:1 0 293G 0 lvm /mnt/media
+ ├─vg-CRYPTPAD 253:2 0 97.7G 0 lvm /mnt/pad
+ ├─vg-APPS 253:3 0 293G 0 lvm /mnt/apps
+ └─vg-backups 253:4 0 913.7G 0 lvm /mnt/backups
+sdc 8:32 1 1.8T 0 disk
+├─sdc1 8:33 1 68.4G 0 part
+│ └─md1 9:1 0 68.3G 0 raid1 /
+├─sdc2 8:34 1 2G 0 part [SWAP]
+└─sdc3 8:35 1 1.8T 0 part
+ └─md3 9:3 0 1.8T 0 raid1
+ ├─vg-mail 253:0 0 195.3G 0 lvm /var/mail
+ ├─vg-data 253:1 0 293G 0 lvm /mnt/media
+ ├─vg-CRYPTPAD 253:2 0 97.7G 0 lvm /mnt/pad
+ ├─vg-APPS 253:3 0 293G 0 lvm /mnt/apps
+ └─vg-backups 253:4 0 913.7G 0 lvm /mnt/backups
+zram0 252:0 0 256M 0 disk [SWAP]
+```
+
+**/etc/fstab**
+
+```
+UUID=84123fb9-bde8-41dd-a9fc-afd4fe57b0e6 / ext4 defaults 01
+# partition apps mattermost mobilizon
+UUID=cc55dbd0-1abc-411a-a7aa-8a4f6d5eaf50 /mnt/apps ext4 defaults,nofail 0 0
+/mnt/apps/mobilizon /home/yunohost.app/mobilizon none defaults,bind 0 0
+/mnt/apps/mattermost /home/yunohost.app/mattermost none defaults,bind 0 0
+# partition backups borg__2
+UUID=86131a6e-ed0d-4071-aa81-41b50e8d3a50 /mnt/backups ext4 defaults,nofail 0 0
+# partition avec data nextcloud
+UUID=4a5b5a94-88ea-4328-a05b-4a3fae339ed2 /mnt/media ext4 defaults,nofail 0 0
+/mnt/media/nextcloud /home/yunohost.app/nextcloud none defaults,bind 0 0
+# partition mails
+UUID=d0294479-075c-480b-972e-0131fef47a5d /var/mail ext4 defaults0 1
+# partition apps cryptpad et etherpad_mypads
+UUID=983ea66d-4732-431a-9d31-86eb85bb9431 /mnt/pad ext4 defaults,nofail 0 0
+/mnt/pad/cryptpad /var/www/cryptpad none defaults,bind 0 0
+/mnt/pad/etherpad_mypads /var/www/etherpad_mypads none defaults,bind 0 0
+/mnt/pad/libreto /var/www/libreto none defaults,bind 0 0
+# partition swap
+UUID=7ed24519-ae94-459b-acff-af6b12a72c2a swap swap defaults 00
+UUID=37dc28a5-c4ab-4260-bd4f-d9006f40cfaa swap swap defaults 00
+UUID=f0ccd1dd-4592-43ac-85de-ee1c149dd688 swap swap defaults 00
+```
+
diff --git a/pages/02.l-infrastructure/02.sauvegardes/docs.md b/pages/02.l-infrastructure/02.sauvegardes/docs.md
new file mode 100644
index 0000000..59bf346
--- /dev/null
+++ b/pages/02.l-infrastructure/02.sauvegardes/docs.md
@@ -0,0 +1,222 @@
+---
+title: Sauvegardes
+taxonomy:
+ category:
+ - docs
+---
+
+Pour la sécurité en cas de besoins de restauration des données:
+
+Nous avons des sauvegardes locales journalières des données et du système sur le volume `/mnt/backups/borgarchives` de 1 To avec avec [Borg App](https://github.com/YunoHost-Apps/borg_ynh), plus une sauvegarde journalière (aussi avec Borg App), chiffrée sur un serveur Yunohost auto-hébergé où est installé [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) sur un disque dur de 2 To.
+
+> ! Il est tout de même conseillé malgré toutes ces précautions aux utilisateurs qui ont des données sur Nextcloud (Cloud Linux07) de bien faire des sauvegardes de temps à autres. Nous ne pouvons pas garantir à 100% de ne jamais rien perdre, mais nous faisons tout notre possible pour éviter de risquer de perdre vos données.
+
+
+Fichier de configuration des sauvegardes distantes vers BorgServer (machine auto-hébergé à l'adresse de l'association Linux07)
+
+**/etc/yunohost/hooks.d/backup_method/05-borg_app**
+
+```
+#!/bin/bash
+
+set -eo pipefail
+app="${0#"./05-"}"
+app="${app%"_app"}"
+
+BORG_PASSPHRASE="$(yunohost app setting $app passphrase)"
+repo="$(yunohost app setting $app repository)" #$4
+if ssh-keygen -F "[domain.tld]:6060" >/dev/null ; then
+ BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes "
+else
+ BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=no "
+fi
+
+do_need_mount() {
+ true
+}
+
+LOGFILE=/var/log/backup_borg.err
+log_with_timestamp() {
+ sed -e "s/^/[$(date +"%Y-%m-%d_%H:%M:%S")] /" | tee -a $LOGFILE
+}
+
+do_backup() {
+
+ export BORG_PASSPHRASE
+ export BORG_RSH
+ export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
+ work_dir="$1"
+ name="$2"
+ repo="$3"
+ size="$4"
+ description="$5"
+ current_date=$(date +"%Y-%m-%d_%H:%M")
+ pushd "$work_dir"
+ set +e
+ if borg init -e repokey "$repo" ; then
+ #human_size=`echo $size | awk '{ suffix=" KMGT"; for(i=1; $1>1024 && i < length(suffix); i++) $1/=1024; print int($1) substr(suffix, i, 1), $3; }'`
+ # Speed in Kbps
+ #speed=1000
+ #evaluated_time=$(($size / ($speed * 1000 / 8) / 3600))
+ echo "Hello,
+
+Your first backup on $repo is starting.
+
+This is an automated message from your beloved YunoHost server." | /usr/bin/mail.mailutils -a "Content-Type: text/plain; charset=UTF-8" -s "[YNH] First backup is starting" "root"
+ fi
+ set -e
+
+ borg create "$repo::_${name}-${current_date}" ./ 2>&1 >/dev/null | log_with_timestamp
+ popd
+
+ # About thi _20 it's a crazy fix to avoid pruning wordpress__2
+ # if you prune wordpress
+ borg prune "$repo" -P "_${name}-" --keep-hourly 2 --keep-daily=7 --keep-weekly=8 --keep-monthly=12 2>&1 >/dev/null | log_with_timestamp
+
+ # Prune legacy archive name without error on wordpress/wordpress__2
+ borg prune "$repo" -P "${name}_" --keep-within 2m --keep-monthly=12 2>&1 >/dev/null | log_with_timestamp
+
+ # We prune potential manual backup older than 1 year
+ borg prune "$repo" --keep-within 1y 2>&1 >/dev/null | log_with_timestamp
+}
+
+do_mount() {
+ export BORG_PASSPHRASE
+ export BORG_RSH
+ work_dir="$1"
+ name="$2"
+ repo="$3"
+ size="$4"
+ description="$5"
+ borg mount "$repo::$name" "$work_dir" 2>&1 >/dev/null | log_with_timestamp
+}
+
+work_dir="$2"
+name="$3"
+
+size="$5"
+description="$6"
+
+case "$1" in
+ need_mount)
+ do_need_mount "$work_dir" "$name" "$repo" "$size" "$description"
+ ;;
+ backup)
+ do_backup "$work_dir" "$name" "$repo" "$size" "$description"
+ ;;
+ mount)
+ do_mount
+ ;;
+ *)
+ echo "hook called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
+```
+
+Fichier de configuration des sauvegardes locales
+
+**/etc/yunohost/hooks.d/backup_method/05-borg__2_app**
+
+```
+#!/bin/bash
+
+set -eo pipefail
+app="${0#"./05-"}"
+app="${app%"_app"}"
+
+BORG_PASSPHRASE="$(yunohost app setting $app passphrase)"
+repo="$(yunohost app setting $app repository)" #$4
+if ssh-keygen -F "" >/dev/null ; then
+ BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes "
+else
+ BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=no "
+fi
+
+do_need_mount() {
+ true
+}
+
+LOGFILE=/var/log/backup_borg.err
+log_with_timestamp() {
+ sed -e "s/^/[$(date +"%Y-%m-%d_%H:%M:%S")] /" | tee -a $LOGFILE
+}
+
+do_backup() {
+
+ export BORG_PASSPHRASE
+ export BORG_RSH
+ export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
+ work_dir="$1"
+ name="$2"
+ repo="$3"
+ size="$4"
+ description="$5"
+ current_date=$(date +"%Y-%m-%d_%H:%M")
+ pushd "$work_dir"
+ set +e
+ if borg init -e repokey "$repo" ; then
+ #human_size=`echo $size | awk '{ suffix=" KMGT"; for(i=1; $1>1024 && i < length(suffix); i++) $1/=1024; print int($1) substr(suffix, i, 1), $3; }'`
+ # Speed in Kbps
+ #speed=1000
+ #evaluated_time=$(($size / ($speed * 1000 / 8) / 3600))
+ echo "Hello,
+
+Your first backup on $repo is starting.
+
+This is an automated message from your beloved YunoHost server." | /usr/bin/mail.mailutils -a "Content-Type: text/plain; charset=UTF-8" -s "[YNH] First backup is starting" "root"
+ fi
+ set -e
+
+ borg create "$repo::_${name}-${current_date}" ./ 2>&1 >/dev/null | log_with_timestamp
+ popd
+
+ # About thi _20 it's a crazy fix to avoid pruning wordpress__2
+ # if you prune wordpress
+ borg prune "$repo" -P "_${name}-" --keep-hourly 2 --keep-daily=7 --keep-weekly=8 --keep-monthly=12 2>&1 >/dev/null | log_with_timestamp
+
+ # Prune legacy archive name without error on wordpress/wordpress__2
+ borg prune "$repo" -P "${name}_" --keep-within 2m --keep-monthly=12 2>&1 >/dev/null | log_with_timestamp
+
+ # We prune potential manual backup older than 1 year
+ borg prune "$repo" --keep-within 1y 2>&1 >/dev/null | log_with_timestamp
+}
+
+do_mount() {
+ export BORG_PASSPHRASE
+ export BORG_RSH
+ work_dir="$1"
+ name="$2"
+ repo="$3"
+ size="$4"
+ description="$5"
+ borg mount "$repo::$name" "$work_dir" 2>&1 >/dev/null | log_with_timestamp
+}
+
+work_dir="$2"
+name="$3"
+
+size="$5"
+description="$6"
+
+case "$1" in
+ need_mount)
+ do_need_mount "$work_dir" "$name" "$repo" "$size" "$description"
+ ;;
+ backup)
+ do_backup "$work_dir" "$name" "$repo" "$size" "$description"
+ ;;
+ mount)
+ do_mount
+ ;;
+ *)
+ echo "hook called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
+```
+
diff --git a/pages/02.l-infrastructure/chapter.md b/pages/02.l-infrastructure/chapter.md
new file mode 100644
index 0000000..58d5848
--- /dev/null
+++ b/pages/02.l-infrastructure/chapter.md
@@ -0,0 +1,81 @@
+---
+title: 'L'' infrastructure'
+child_type: docs
+taxonomy:
+ category:
+ - docs
+---
+
+Nous hébergeons ces services sur un serveur dédié Kimsufi avec 3 disques de 2 To montés en SoftRaid 1 (c'est à dire que le premier disque est dupliqué en miroir et synchronisé sur les 2 autres. Si le disque lâche où s'abîme, les données répliquées sur les autres disques peuvent prendre le relais) avec 32 Go de ram et 8 CPUs.
+
+
+Informations détaillées sur le serveur:
+
+```
+System:
+ Host: linux07.fr Kernel: 5.10.0-18-amd64 x86_64 bits: 64 Console: tty 0
+ Distro: Debian GNU/Linux 11 (bullseye)
+Machine:
+ Type: Desktop Mobo: Intel model: DH67BL v: AAG10189-213
+ serial: BIOS: Intel
+ v: BLH6710H.86A.0163.2018.1023.1559 date: 10/23/2018
+CPU:
+ Info: Quad Core model: Intel Xeon E3-1245 V2 bits: 64 type: MT MCP
+ L2 cache: 8 MiB
+ Speed: 1634 MHz min/max: 1600/3800 MHz Core speeds (MHz): 1: 1634 2: 1751
+ 3: 1616 4: 1623 5: 1705 6: 2418 7: 1676 8: 1755
+Memory:
+ RAM: total: 31.26 GiB used: 4.56 GiB (14.6%)
+ Array-1: capacity: 32 GiB slots: 4 EC: None
+ Device-1: CHANNEL A DIMM0 size: 8 GiB speed: 1600 MT/s
+ Device-2: CHANNEL A DIMM1 size: 8 GiB speed: 1600 MT/s
+ Device-3: CHANNEL B DIMM0 size: 8 GiB speed: 1600 MT/s
+ Device-4: CHANNEL B DIMM1 size: 8 GiB speed: 1600 MT/s
+Network:
+ Device-1: Intel 82579V Gigabit Network driver: e1000e
+ IF: eno1 state: up speed: 1000 Mbps duplex: full mac: 4c:72:b9:d1:e3:fb
+RAID:
+ Device-1: md1 type: mdraid level: mirror status: active size: 68.3 GiB
+ report: 3/3 UUU
+ Components: Online: 0: sda1 1: sdb1 2: sdc1
+ Device-2: md3 type: mdraid level: mirror status: active size: 1.75 TiB
+ report: 3/3 UUU
+ Components: Online: 0: sda3 1: sdb3 2: sdc3
+Drives:
+ Local Storage: total: raw: 5.46 TiB usable: 1.82 TiB
+ used: 51.67 GiB (2.8%)
+ ID-1: /dev/sda vendor: HGST (Hitachi) model: HUS724020ALA640
+ size: 1.82 TiB
+ ID-2: /dev/sdb vendor: HGST (Hitachi) model: HUS724020ALA640
+ size: 1.82 TiB
+ ID-3: /dev/sdc vendor: HGST (Hitachi) model: HUS724020ALA640
+ size: 1.82 TiB
+Partition:
+ ID-1: / size: 67.05 GiB used: 16.3 GiB (24.3%) fs: ext4 dev: /dev/md1
+ ID-2: /mnt/apps size: 288.19 GiB used: 391.2 MiB (0.1%) fs: ext4
+ dev: /dev/dm-3
+ ID-3: /mnt/backups size: 899.14 GiB used: 29.35 GiB (3.3%) fs: ext4
+ dev: /dev/dm-4
+ ID-4: /mnt/media size: 288.19 GiB used: 4.15 GiB (1.4%) fs: ext4
+ dev: /dev/dm-1
+ ID-5: /mnt/pad size: 95.94 GiB used: 1.35 GiB (1.4%) fs: ext4
+ dev: /dev/dm-2
+ ID-6: /var/mail size: 192.06 GiB used: 146.5 MiB (0.1%) fs: ext4
+ dev: /dev/dm-0
+Swap:
+ ID-1: swap-1 type: partition size: 1.95 GiB used: 0 KiB (0.0%)
+ dev: /dev/sdc2
+ ID-2: swap-2 type: partition size: 1.95 GiB used: 0 KiB (0.0%)
+ dev: /dev/sdb2
+ ID-3: swap-3 type: partition size: 1.95 GiB used: 0 KiB (0.0%)
+ dev: /dev/sda2
+ ID-4: swap-4 type: zram size: 256 MiB used: 0 KiB (0.0%) dev: /dev/zram0
+```
+
+
+
+
+
+
+
+
diff --git a/pages/03.cloud-linux07-nextcloud/01.premier-pas/01.1-1-la-page-daccueil/docs.md b/pages/03.cloud-linux07-nextcloud/01.premier-pas/01.1-1-la-page-daccueil/docs.md
new file mode 100644
index 0000000..3bdd380
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/01.premier-pas/01.1-1-la-page-daccueil/docs.md
@@ -0,0 +1,27 @@
+---
+title: '1.1 - La page d''accueil'
+taxonomy:
+ category:
+ - docs
+---
+
+# Découvrir la page d'accueil
+
+Lorsque vous vous connectez pour la première fois, vous êtes accueilli par une bannière de présentation de Nextcloud. Vous pouvez cliquer sur la flèche pour visionner les 3 diapositives ou cliquer sur la croix pour la fermer.
+
+
+
+La page d'accueil est celle de vos dossiers et contenus.
+
+
+
+La vue principale montre les dossiers et fichiers disponibles sur l'espace. À gauche, un menu de navigation. En haut, une barre d'accès aux différent modules, à gauche, et à la recherche et au profil, à droite.
+
+Repérez les icônes des modules disponibles. Passez la souris sur la barre d'icônes pour voir leur nom apparaître.
+
+
+
+
+
+! Depuis la version 22 de Nextcloud, en vous connectant vous arriverez sur votre **Tableau de Bord** et non plus sur la page des contenus **Fichiers**.
+
diff --git a/pages/03.cloud-linux07-nextcloud/01.premier-pas/02.1-2-personaliser-le-tableau-de-bord/docs.md b/pages/03.cloud-linux07-nextcloud/01.premier-pas/02.1-2-personaliser-le-tableau-de-bord/docs.md
new file mode 100644
index 0000000..b3a92d4
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/01.premier-pas/02.1-2-personaliser-le-tableau-de-bord/docs.md
@@ -0,0 +1,15 @@
+---
+title: '1.2 - Personaliser le Tableau de Bord'
+taxonomy:
+ category:
+ - docs
+---
+
+En vous connectant vous arrivez sur le **Tableau de Bord**, en scrollant en bas, vous pouvez le personnaliser.
+
+![Peronnaliser tableau de bord](https://ahp.li/1d2cd2e50901890f3007.png "tableau-de-bord-personnaliser")
+
+Choisir d'activer ou non des **Widgets**, blocs avec des informations, choisir votre ville pour la météo si vous gardez son Widget, changer l'image de fond...
+
+
+
diff --git a/pages/03.cloud-linux07-nextcloud/01.premier-pas/03.1-3-personnaliser-ses-parametres/docs.md b/pages/03.cloud-linux07-nextcloud/01.premier-pas/03.1-3-personnaliser-ses-parametres/docs.md
new file mode 100644
index 0000000..e6a0a8d
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/01.premier-pas/03.1-3-personnaliser-ses-parametres/docs.md
@@ -0,0 +1,53 @@
+---
+title: '1.3 - Personnaliser ses paramètres'
+taxonomy:
+ category:
+ - docs
+---
+
+Cliquez sur l'icône ronde colorée portant vos initiales dans le coin supérieur droit.
+
+![Choisir paramètres](chttps://ahp.li/a25fc43ce1ecb915a152.png)
+
+Choisissez "Paramètres".
+
+
+
+
+Vérifiez vos informations personnelles.
+
+
+
+1. Une adresse email est nécessaire pour réinitialiser votre mot de passe et éventuellement recevoir des notifications. Les autres informations sont facultatives.
+2. Vous pouvez déposer une photo qui sera affichée sous forme de pastille dans certains modules, comme les discussions (*chat*) ou les partages de documents. Vous pouvez également utiliser une image déjà présente dans votre espace.
+3. Assurez-vous que la langue et les paramètres régionaux (heure locale, début de semaine) sont bons.
+4. Vous pouvez ajoutez des informations qui apparaîtront sur votre profil.
+
+ ![Paramètres profil](https://ahp.li/45b5d201f11466505154.png)
+
+Depuis les versions plus récents de Nextcloud, vous pouvez paramétrer finement qui peut voir ou pas les différents champs de votre profil. Cliquez sur **Visibilté profil** (_PS depuis ces versions récentes, le thème sombre de votre système est pris en compte, ici c'est mon cas dans les captures d'écran suivantes_)
+
+![Visibilité Profil](https://ahp.li/8d6c11d23ce03e8268e5.png)
+
+Vous pourrez ici pour choisir pour les différents champ remplis les permissions qui permettent de choisir qui peut voir ces données.
+
+![Champs profil visibilité et permissions](https://ahp.li/39ce9356c9433a8ac0d5.png)
+
+En cliquant sur un champ, vous verrez une fenêtre se dérouler avec ces choix: Montrer à tout le monde, Montrer seulement aux utilisateurs enregistrés, Cacher
+
+![Choix visibilité champ profil](https://ahp.li/e64d8103f0111d1ef9ff.png)
+
+!!!! Si vous vous êtes inscrit par vous même avec un compte sans adhésions, vous voudrez sûrement que votre adresse mail soit cachée pour les autres utilisateurs qui comme vous se sont enregistrés par eux-même !
+
+En-dessous se trouve aussi la possibilité de demander aux administrateurs du Cloud Linux07 un export de vos données (nous pourrons vous accompagner pour que vous récupériez vos données dans la mesure du possible) et la demande de suppression de votre compte...
+
+![Compte suppression et export données](https://ahp.li/6b4a05cb52ab2d61a270.png)
+
+
+
+
+L'enregistrement des paramètres est automatique, vous pouvez reprendre vos activités.
+
+
+! **Attention à votre bloqueur de publicités** Si vous utilisez un bloqueur de publicité, il peut bloquer certaines fonctionnalités de Nextcloud selon les filtres que vous avez choisis. Si c'est le cas, vous pouvez désactiver votre bloqueur de publicités pour l'adresse de votre espace Nextcloud (et seulement pour cette adresse).
+
diff --git a/pages/03.cloud-linux07-nextcloud/01.premier-pas/chapter.md b/pages/03.cloud-linux07-nextcloud/01.premier-pas/chapter.md
new file mode 100644
index 0000000..6f9af11
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/01.premier-pas/chapter.md
@@ -0,0 +1,19 @@
+---
+title: '1 - Premiers Pas'
+taxonomy:
+ category:
+ - docs
+child_type: docs
+---
+
+Pour utiliser Cloud Linux07 sur un navigateur web, entrez directement l’url de l'espace que vous souhaitez rejoindre dans la barre d'adresse de votre navigateur. En général, elle se présente sous la forme .
+
+!!! Pour les adhérents à Linux07, vous pouvez vous connecter directement au [portail Linux07](https://linux07.fr/yunohost/sso/) pour accéder à tous vos services, vous pourrez ensuite entrer dans le Cloud Linux07 sans avoir besoin de vous identifier de nouveau.
+
+Sur cet espace que vous rejoignez:
+
+* soit vous devez créer un compte vous-même : suivez les étapes indiquées en cliquant sur **S'inscrire**, vous pouvez aussi nous en faire la demande en nous contactant. Le compte sera automatiquement créé si nous avons assez d'espace pour un compte gratuit (sans les discussions Talk et sans éditeur collaboratif OnlyOffice).
+* soit un identifiant et un mot de passe ont été déjà enregistrés et votre compte est validé (suite à une adhésion ou demande).
+
+! Si vous êtes sur un ordinateur public ou qui n’est pas le vôtre, assurez-vous de ne pas sauvegarder vos mots de passe dans le navigateur web. Si vous êtes sur votre ordinateur habituel, vous pouvez demander à votre navigateur ou à votre gestionnaire de mots de passe de s'en souvenir.
+
diff --git a/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/01.2-1-creer-un-nouveau-dossier/docs.md b/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/01.2-1-creer-un-nouveau-dossier/docs.md
new file mode 100644
index 0000000..cb95334
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/01.2-1-creer-un-nouveau-dossier/docs.md
@@ -0,0 +1,34 @@
+---
+title: '2.1 - Créer un nouveau dossier'
+taxonomy:
+ category:
+ - docs
+---
+
+## D'un coup d’œil
+
+
+
+## Étape par étape
+
+1. Cliquez sur le bouton **+** en haut de la vue principale pour ouvrir le menu.
+
+ ![Nouveau dossier](https://ahp.li/7e5823e54fcef5936bee.png)
+
+2. Choisissez "Nouveau dossier" dans le menu déroulant.
+
+ - Définissez un nom.
+
+ - Validez en cliquant sur la flèche ou avec la touche "Entrée" du
+ clavier.
+
+ ![Définir nom](https://ahp.li/7c0ef4ece8ca28cd8a79.png)
+
+3. Le dossier apparaît dans la liste ainsi que sa fenêtre de détails à droite.
+
+ ![Panneau information](https://ahp.li/030a17de3e7778910979.png)
+
+4. Cliquez sur le nom du nouveau dossier dans la liste pour l'ouvrir.
+
+
+
diff --git a/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/02.2-2-deposer-un-document/docs.md b/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/02.2-2-deposer-un-document/docs.md
new file mode 100644
index 0000000..27ab8db
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/02.2-2-deposer-un-document/docs.md
@@ -0,0 +1,26 @@
+---
+title: '2.2 - Déposer un document'
+taxonomy:
+ category:
+ - docs
+---
+
+- Cliquez sur le bouton **+** en haut de la vue principale pour ouvrir le menu.
+
+- Choisissez "Envoyer un fichier" dans le menu déroulant.
+
+ ![Envoyer fichier](https://ahp.li/fece1d6c6eee181c8dec.png)
+
+- La fenêtre "Ouvrir un fichier" de votre navigateur apparaît et vous
+ pouvez ainsi parcourir vos données locales (sur votre ordinateur).
+ Sélectionnez le ou les fichiers (Maintenez la touche Ctrl enfoncée
+ pour sélectionner plusieurs fichiers) puis validez.
+
+- Patientez pendant l'envoi.
+
+
+
+Déposer par cliquer-glisser
+---------------------------
+
+
diff --git a/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/03.2-3-deplacer-des-documents/docs.md b/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/03.2-3-deplacer-des-documents/docs.md
new file mode 100644
index 0000000..cb3874f
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/03.2-3-deplacer-des-documents/docs.md
@@ -0,0 +1,42 @@
+---
+title: '2.3 - Déplacer des documents'
+taxonomy:
+ category:
+ - docs
+---
+
+### D'un coup d'œil
+
+
+
+### Étape par étape
+
+1. Cochez les fichiers à copier ou déplacer dans la liste des dossiers.
+
+2. Ouvrez le menu "Actions" dont le bouton apparaît en haut de la liste dès qu'un fichier
+ ou dossier est sélectionné.
+
+3. Choisissez "Déplacer ou copier" dans le menu déroulant.
+
+ ![Déplacer plusieurs fichiers menu](https://ahp.li/9c2c8bf70e0ccc12837e.png)
+
+ - Vous pouvez ensuite parcourir l'arborescence de votre espace
+ Nextcloud (l'icône « maison » représente la racine de votre
+ dossier personnel).
+
+4. Choisissez le dossier de destination.
+
+5. Choisissez de copier (le document reste présent dans le dossier
+ d'origine) ou de déplacer (le document est supprimé du dossier
+ d'origine).
+
+6. Patientez quelques secondes.
+
+Déplacer par cliquer-glisser
+----------------------------
+
+
+1. Cochez les fichiers à copier ou déplacer dans la liste des dossiers.
+2. Cliquez sur l'un des fichiers puis déplacez la souris sans lâcher le
+ bouton gauche. Déposez les fichiers sur le dossier de votre choix.
+
diff --git a/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/04.2-4-supprimer-et-restaurer-des-fichiers/docs.md b/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/04.2-4-supprimer-et-restaurer-des-fichiers/docs.md
new file mode 100644
index 0000000..867da60
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/04.2-4-supprimer-et-restaurer-des-fichiers/docs.md
@@ -0,0 +1,32 @@
+---
+title: '2.4 - Supprimer et restaurer des fichiers'
+taxonomy:
+ category:
+ - docs
+---
+
+## Supprimer des fichiers
+
+1. Cochez les fichiers à supprimer dans la liste des dossiers.
+
+2. Ouvrez le menu "Actions" dont le bouton apparaît en haut de la liste dès qu'un fichier
+ ou dossier est sélectionné.
+
+3. Choisissez "Supprimer" dans le menu déroulant.
+
+ ![Supprimer fichiers](https://ahp.li/785432fc159cf8b69f17.png)
+
+Restaurer des fichiers supprimés
+--------------------------------
+
+1. Cliquez sur "Fichiers supprimés" en bas à gauche de l'interface.
+
+2. Cochez les fichiers à restaurer dans la liste.
+
+3. Ouvrez le menu "Actions" dont le bouton apparaît en haut de la litste dès qu'un fichier
+ ou dossier est sélectionné.
+
+4. Choisissez "Restaurer" dans le menu déroulant.
+
+ ![Restaurer fichiers](https://ahp.li/70599c94c7d3cdd68e8c.png)
+
diff --git a/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/05.2-5-restaurer-une-ancienne-version-dun-document/docs.md b/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/05.2-5-restaurer-une-ancienne-version-dun-document/docs.md
new file mode 100644
index 0000000..9de5f82
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/05.2-5-restaurer-une-ancienne-version-dun-document/docs.md
@@ -0,0 +1,22 @@
+---
+title: '2.5 - Restaurer une ancienne version d''un document'
+taxonomy:
+ category:
+ - docs
+---
+
+Nextcloud **sauvegarde des versions successives d'un même document**. Cette fonction est utile par exemple pour retrouver une copie d'un document en cas d'erreur d'édition.
+
+Pour **restaurer une ancienne version** d'un document :
+
+1. Cliquer sur le choix des actions du document sur la ligne (trois petits points).
+2. Choisissez **i Détails** pour voir s'ouvrir la colonne des détails du fichier.
+
+ ![Choix fichier](https://ahp.li/31f4f3110d543318ff4f.png)
+
+3. Cliquez sur l'onglet "Versions".
+
+4. Cliquez sur la flèche circulaire en bout de ligne de la version que vous
+ souhaitez restaurer.
+
+ ![Détail fichier versions](https://ahp.li/9a119e0e9ea50ad0eb9d.png)
\ No newline at end of file
diff --git a/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/chapter.md b/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/chapter.md
new file mode 100644
index 0000000..0510895
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/02.2-gerer-se-documents-en-ligne/chapter.md
@@ -0,0 +1,33 @@
+---
+title: '2 - Gérer se documents en ligne'
+child_type: docs
+taxonomy:
+ category:
+ - docs
+---
+
+# Gérer ses documents en ligne
+
+Le module **Fichiers** permet d'organiser ses documents et de les partager avec d'autres personnes en interne ou à l'extérieur.
+
+Tour d'horizon de l'interface :
+
+![Fichiers](https://ahp.li/7e0fddff9d3debb3d302.png)
+
+1. Le menu de gauche permet de **filtrer l'affichage**. "Tous les fichiers" permet de parcourir l'arborescence générale.
+2. Le contenu du dossier courant est affiché par défaut sous forme de liste dans la vue principale.
+ - La case à cocher en tête de ligne permet de sélectionner un (ou
+ plusieurs) document ou dossier.
+ - Cliquez sur le nom d'un dossier ou d'un document pour l'ouvrir.
+ - En fin de ligne se trouvent deux boutons. Le premier pour
+ **partager le document**, le second (trois points) pour ouvrir un
+ menu d'actions.
+ - La taille (poids) et la date de dernière modification du fichier
+ sont affichés ensuite.
+3. Le bouton **+** en haut de la vue principale permet de **déposer des documents**, de **créer un nouveau
+ dossier** ou un **nouveau fichier** (document en docx, feuille de calcul, présentation, nouveau lien, modèle de formulaire).
+4. En bas à gauche de la page se trouvent :
+ - l'accès à la **corbeille** ;
+ - l'état d'occupation de votre espace en fonction de votre quota ;
+ - un menu de paramètres (spécifique à chaque module).
+
diff --git a/pages/03.cloud-linux07-nextcloud/03.3-partager-un-fichier/01.3-1-partager-en-interne/docs.md b/pages/03.cloud-linux07-nextcloud/03.3-partager-un-fichier/01.3-1-partager-en-interne/docs.md
new file mode 100644
index 0000000..3c5b73c
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/03.3-partager-un-fichier/01.3-1-partager-en-interne/docs.md
@@ -0,0 +1,63 @@
+---
+title: '3.1 - Partager en interne'
+taxonomy:
+ category:
+ - docs
+---
+
+# Partager en interne
+
+Pour **partager un contenu avec une autre personne inscrite sur votre instance Nextcloud** :
+
+1. Dans la liste des fichiers, cliquez sur l'icône de partage du fichier que vous souhaitez partager.
+ * La fenêtre "Détails" s'ouvre sur la partie droite de l'écran.
+
+ ![Menu partage](https://ahp.li/6fdfa0571cc77ae7a55e.png)
+2. Dans le champ de saisie commencez à écrire le nom de la personne ou du cercle à qui vous voulez partager votre fichier.
+
+ ![Selectionner groupe partage](https://ahp.li/103b458b80f8fa817951.png)
+3. Cliquez sur le nom qui apparaît.
+ * Les destinataires apparaissent dans une liste sous le champ de saisie.
+
+ ![Listes Partages](https://ahp.li/e09630378b6ac5426fb6.png)
+
+Une fois le partage effectué, les destinataires retrouvent le document ou le dossier dans leur espace personnel. Il est aussi possible de leur **communiquer un lien interne**, permettant l'accès direct. Pour générer ce lien :
+
+1. Cliquez sur l'icône de presse-papier au bout de la ligne "lien interne" dans la fenêtre de détails.
+ - le lien est automatiquement copié dans votre presse-papier.
+
+ ![Lien interne](https://ahp.li/0f29b473e1ef26fd2faf.png)
+2. Transmettez le liens aux destinataires de la manière de votre choix.
+
+Les destinataires peuvent **renommer** et **déplacer** le dossier ou le document dans leur espace sans que la modification affecte votre copie.
+
+**Dans le cas d'un dossier, les destinataires ont accès à tout son contenu**, y compris les sous-dossiers.
+
+Par défaut, les destinataires d'un partage interne ont la possibilité de **modifier et repartager le contenu** du document ou du dossier partagé. Il est possible de modifier ces autorisations.
+
+## Autorisations pour un document
+
+1. Cliquez sur le menu d'action sur la ligne du ou de la destinataire du document.
+
+ ![Accès document](https://ahp.li/a2df1adce7feab1d97af.png)
+2. Cochez ou décochez les différents paramètres selon votre souhait.
+ * *Autoriser la modification* : les destinataires peuvent modifier le contenu du fichier (mais pas le supprimer).
+ * *Autoriser le repartage* : les destinataires peuvent partager le fichier en interne ou à l'extérieur.
+ * *Définir une date d’expiration* : le partage sera automatiquement révoqué à la date de votre choix.
+ * *Note au destinataire* : précisez une courte information.
+ * *Ne plus partager* : révoquez le partage de ce fichier.
+
+## Autorisations pour un dossier
+
+1. Cliquez sur le menu d'action sur la ligne du ou de la destinataire du document.
+
+ ![Accès dossier](https://ahp.li/87b13bc3c8b2301b5389.png)
+2. Cochez ou décochez les différents paramètres selon votre souhait.
+ * *Autoriser la modification* : les destinataires peuvent modifier le contenu du dossier (mais pas le supprimer).
+ * *Autoriser la création* : les destinataires peuvent créer de nouveaux documents ou dossiers dans le dossier partagé.
+ * *Autoriser la suppression* : les destinataires peuvent supprimer des éléments contenus dans le dossier partagé (non recommandé).
+ * *Autoriser le repartage* : les destinataires peuvent partager le fichier en interne ou à l'extérieur.
+ * *Définir une date d’expiration* : le partage sera automatiquement révoqué à la date de votre choix.
+ * *Note au destinataire* : précisez une courte information.
+ * *Ne plus partager* : révoquez le partage de ce fichier.
+
diff --git a/pages/03.cloud-linux07-nextcloud/03.3-partager-un-fichier/02.3-2-partager-a-lexterieur/docs.md b/pages/03.cloud-linux07-nextcloud/03.3-partager-un-fichier/02.3-2-partager-a-lexterieur/docs.md
new file mode 100644
index 0000000..08616e7
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/03.3-partager-un-fichier/02.3-2-partager-a-lexterieur/docs.md
@@ -0,0 +1,60 @@
+---
+title: '3.2 - Publier à l''extérieur'
+taxonomy:
+ category:
+ - docs
+---
+
+Pour **rendre un contenu public** (accessible sans compte sur votre instance Nextcloud)** :
+
+1. Dans la liste des fichiers, cliquez sur l'icône de partage du fichier que vous souhaitez publier.
+ * La fenêtre "Détails" s'ouvre sur la partie droite de l'écran.
+
+ ![Menu partage](https://ahp.li/6fdfa0571cc77ae7a55e.png)
+2. Cliquez sur le bouton **+** de la ligne "Lien de partage".
+
+ ![Line partage](https://ahp.li/6950931949931a473694.png)
+
+
+3. Transmettez le liens aux destinataires de la manière de votre choix.
+
+**Dans le cas d'un dossier, les destinataires ont accès à tout son contenu**, y compris les sous-dossiers.
+
+Par défaut, les destinataires d'un partage extérieur ne peuvent que **lire et télécharger** le document ou le dossier partagé. Il est possible de modifier ces autorisations.
+
+> [!Warning]
+> Ce lien est **public** et peut circuler partout, à moins que vous ne révoquiez son partage (voir "Autorisations").
+
+## Autorisations pour un document
+
+1. Cliquez sur le menu d'action sur la ligne "Lien de partage" (et scroller vers le bas pour voir toutes les autorisations).
+
+ ![Accès extérieur](https://ahp.li/0810c60370ea90a4b9d6.png)
+
+2. Cochez ou décochez les différents paramètres selon votre souhait.
+ * *Autoriser la modification* : les destinataires peuvent modifier le contenu du fichier (mais pas le supprimer).
+ * *Masquer le téléchargement* : empêche les destinataires de télécharger le document.
+ * *Protéger par un mot de passe* : ajoutez un mot de passe à votre lien.
+ * *Définir une date d’expiration* : le partage sera automatiquement révoqué à la date de votre choix.
+ * *Note au destinataire* : précisez une courte information.
+ * *Ne plus partager* : révoquez le partage de ce fichier.
+ * *Ajouter un autre lien* : créer un deuxième lien de partage (utile pour avoir des liens avec des autorisations différentes).
+
+## Autorisations pour un dossier
+
+1. Cliquez sur le menu d'action sur la ligne du ou de la destinataire du document.
+
+ ![Accès dossier extérieur](https://ahp.li/87b13bc3c8b2301b5389.png)
+2. Cochez ou décochez les différents paramètres selon votre souhait.
+ * *Lecture seule* : les destinataires ne peuvent que lire le contenu du dossier.
+ * *Autoriser l'ajout et la modification* : les destinataires peuvent modifier le contenu du dossier et y ajouter des documents ou sous-dossier (mais pas le supprimer).
+ * *Dépôt de fichier* : les destinataires peuvent déposer des documents ou dossiers, mais ne voient pas le contenu du dossier.
+
+ ![Dépôt fichier](https://ahp.li/de1d8aec9b3272a1e178.png)
+ * *Masquer le téléchargement* : empêche les destinataires de télécharger le dossier et son contenu.
+ * *Protéger par un mot de passe* : ajoutez un mot de passe à votre lien.
+ * *Définir une date d’expiration* : le partage sera automatiquement révoqué à la date de votre choix.
+ * *Note au destinataire* : précisez une courte information.
+ * *Ne plus partager* : révoquez le partage de ce fichier.
+ * *Ajouter un autre lien* : créer un deuxième lien de partage (utile pour avoir des liens avec des autorisations différentes).
+
diff --git a/pages/03.cloud-linux07-nextcloud/03.3-partager-un-fichier/chapter.md b/pages/03.cloud-linux07-nextcloud/03.3-partager-un-fichier/chapter.md
new file mode 100644
index 0000000..4e6626f
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/03.3-partager-un-fichier/chapter.md
@@ -0,0 +1,16 @@
+---
+title: '3 - Partager un fichier'
+taxonomy:
+ category:
+ - docs
+child_type: docs
+---
+
+# Partager un fichier
+
+Nextcloud permet de partager un document ou un dossier avec d'autres personnes, au sein de votre collectif ou à l'extérieur. Les membres de votre instance auront accès à ce fichier avec un **lien interne.** Pour une personne extérieure, l'accès se fait avec un **lien de partage**.
+
+Si un fichier est partagé avec autorisation de modification, alors les destinataires pourront modifier le fichier ou le contenu du dossier. Il est possible de partager un fichier ou un dossier sans possibilité de modification (lecture seule).
+
+**Lorsqu’un dossier est partagé, tout son contenu l’est également.**
+
diff --git a/pages/03.cloud-linux07-nextcloud/04.4-discuter/01.4-1-creer-une-discussion/docs.md b/pages/03.cloud-linux07-nextcloud/04.4-discuter/01.4-1-creer-une-discussion/docs.md
new file mode 100644
index 0000000..4c77861
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/04.4-discuter/01.4-1-creer-une-discussion/docs.md
@@ -0,0 +1,57 @@
+---
+title: '4.1 - Créer une discussion'
+taxonomy:
+ category:
+ - docs
+---
+
+## Créer une **discussion privée**
+
+1. Cherchez le nom de la personne à qui vous voulez parler dans le champ de recherche à gauche de la page et cliquez
+ dessus.
+
+ ![](chttps://ahp.li/0ffe6d1bff9b4fbca4ef.png)
+
+2. La discussion est immédiatement créée et apparaît dans la vue principale.
+
+## Créer une **discussion de groupe**
+
+1. Cliquez sur le bouton **+** à côté du champ de recherche à gauche de la page.
+
+ ![](https://ahp.li/44433449a11ea222ac78.png)
+
+2. Donnez un nom à la discussion dans la boîte de dialogue qui apparaît.
+3. Sélectionnez les paramètres souhaités
+ * Autoriser les invités à rejoindre la conversation avec le lien -> pour inviter des personnes non inscrites sur l'instance.
+ * Ajoutez éventuellement un mot de passe.
+ * Ouvrir la conversations aux utilisateurs enregistrés -> pour rendre la discussion publique et permettre aux membres de l'instance de s'y joindre spontanément.
+
+ ![](https://ahp.li/e6befffc3fc8541f56ab.png)
+4. Cliquez sur Ajouter des participants.
+5. Une nouvelle vue apparaît. Recherchez les membres, groupes ou cercles que vous souhaitez ajouter.
+ * Utilisez la barre de défilement pour accéder aux groupes existants
+
+ ![](https://ahp.li/6cfceb5bebc2f443255c.png)
+6. Cliquez sur Créer une conversation.
+
+> [!NOTE]
+> Pour annuler la création d'une conversation, cliquez en dehors de la boîte de dialogue.
+
+## Gérer les rôles
+
+Quand vous créez une discussion de groupe, vous en êtes automatiquement **modérateur⋅ice**.
+
+
+Pour accorder ce droit aux autres membres de la discussion :
+1. Ouvrez l'onglet d'informations de la discussion avec l'icône sandwich en haut à droite
+![](https://ahp.li/b5df5255ed71ef570a57.png)
+
+2. Cliquez sur le menu d'actions à droite de leur nom
+3. Choisissez "Promouvoir en modérateur" dans le menu déroulant.
+
+![](https://ahp.li/2a26370e2ec62ed886c5.png)
+
+Vous pouvez aussi retirer des membres de la discussion.
+
+Les modérateur⋅ices peuvent **modifier les paramètres** de la discussion (nom, accès, description, mais aussi suppression).
+
diff --git a/pages/03.cloud-linux07-nextcloud/04.4-discuter/02.4-2-commencer-les-echanges/docs.md b/pages/03.cloud-linux07-nextcloud/04.4-discuter/02.4-2-commencer-les-echanges/docs.md
new file mode 100644
index 0000000..871382d
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/04.4-discuter/02.4-2-commencer-les-echanges/docs.md
@@ -0,0 +1,44 @@
+---
+title: '4.2 - Commencer les échanges'
+taxonomy:
+ category:
+ - docs
+---
+
+## Discuter
+
+Pour commencer à discuter :
+
+- Écrivez votre message dans le champ en bas de la vue principale et appuyez sur
+ la touche entrée du clavier.
+* Vous pouvez ajouter des émojis en cliquant à gauche du champ d'écriture.
+
+ ![](https://ahp.li/23490ffbee894212b72e.png)
+* Vous pouvez **répondre à un message** en particulier en cliquant sur la flèche qui apparaît à droite au survol de ce message.
+
+
+
+* Dans le menu d'action du message, vous pouvez choisir de **répondre en privé** à l'expéditeur⋅ice. Cette action démarre une discussion privée.
+
+ ![](https://ahp.li/32503bdabfda4c30ffda.png)
+
+## Lancer un appel vidéo
+
+> ! Cette option fonctionne bien en discussion privée (deux personnes). Si vous êtes un groupe et que vous rencontrez des difficultés, nous vous recommandons plutôt d'utiliser un outil dédié à la visioconférence comme [Big Blue Button](https://bigbluebutton.org/) ou [Jitsi](https://meet.jit.si/).
+
+Quand vous êtes dans une discussion, vous pouvez débuter un **appel vidéo** en cliquant sur "Commencer l'appel". Une notification est envoyée à votre interlocuteur⋅ice. Si c'est vous qui rejoignez un appel déjà commencé, le bouton apparaît en vert et affiche "Rejoindre l'appel".
+
+![](https://ahp.li/ee0d7c49010f92c78170.png)
+
+Pendant un appel, vous pouvez :
+
+1. Couper votre micro
+2. Couper votre caméra
+3. Partager votre écran
+4. Cacher votre vidéo (pour vous)
+
+
+
+La vue principale affiche la vidéo de votre correspondant⋅e. Un aperçu de votre vidéo est en bas à droite. Vous pouvez le cacher en cliquant sur la flèche descendante au-dessus de cet aperçu. Les icônes du micro, de la caméra et du partage d'écran sont en bas de l'aperçu.
+
+
diff --git a/pages/03.cloud-linux07-nextcloud/04.4-discuter/03.4-3-discuter-autour-dun-document/docs.md b/pages/03.cloud-linux07-nextcloud/04.4-discuter/03.4-3-discuter-autour-dun-document/docs.md
new file mode 100644
index 0000000..b707c91
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/04.4-discuter/03.4-3-discuter-autour-dun-document/docs.md
@@ -0,0 +1,68 @@
+---
+title: '4.3 - Discuter autour d''un document'
+taxonomy:
+ category:
+ - docs
+---
+
+## Partager un document
+
+Il y a deux façons de partager un document dans une conversation.
+
+* Cliquez-glissez le document directement dans la conversation.
+* Cliquez sur le trombone à gauche de la zone d'écriture.
+
+ ![](https://ahp.li/6b7c44b7bec71e707b03.png)
+
+ Le menu déroulant propose :
+ * Envoyer de nouveaux fichiers -> depuis votre ordinateur.
+ * Partager vos fichiers déjà stockés -> depuis votre espace personnel sur Nextcloud.
+
+Vous pouvez ajouter plusieurs fichiers en une seule fois.
+
+Tou⋅tes les membres de la discussion pourront **voir, éditer ou télécharger** le document, qu'ils ou elles soient inscrit⋅es sur l'instance ou venant de l'extérieur.
+
+## Lier une discussion à un document
+
+Dans le module **Fichiers**, vous pouvez démarrer une discussion écrite ou vidéo **depuis la barre latérale** de chaque document pendant que vous l'éditez.
+
+1. Ouvrez un document.
+2. Cliquer sur le menu d'actions en haut à droite de la page pour ouvrir la barre latérale.
+
+ ![](https://ahp.li/2af92a1f532f916af935.png)
+
+3. Cliquez sur l'onglet "Tchat".
+
+4. Cliquez sur le bouton "Partager ce fichier".
+
+ ![](https://ahp.li/9992917254bcc2a886a0.png)
+
+5. Dans le champ de recherche en tapant les premiers mots du nom de la conversation, elle apparaît, vous pouvez cliquez sur la conversation que vous voulez rejoindre.
+
+![](https://ahp.li/04af007450a057cdcc17.png)
+
+6. Tapez votre message dans la zone d'écriture ou cliquez sur "Commencer l'appel".
+
+Vous pouvez aussi rejoindre la discussion **depuis la liste des documents** :
+
+1. Cliquez sur le menu de partage pour ouvrir la barre latérale ou actions (trois points de suspension) et infos.
+
+ ![](https://ahp.li/770c0df87dff133dbab3.png)
+
+2. Cliquez sur l'onglet "Tchat"
+3. Cliquez sur le bouton "Partager ce fichier"
+
+ ![](https://ahp.li/ea90b0cd0f6400c036b4.png)
+
+5. Dans le champ de recherche en tapant les premiers mots du nom de la conversation, elle apparaît, vous pouvez cliquez sur la conversation que vous voulez rejoindre.
+
+![](https://ahp.li/be93f79dc33adac7c4e8.png)
+
+4. Tapez votre message dans la zone d'écriture ou cliquez sur "Commencer l'appel".
+
+La conversation ainsi créée apparaît dans la **liste du module Discussion**. Vous pouvez y ajuster les paramètres en cliquant sur le menu d'action correspondant.
+
+![](https://ahp.li/63305057549f893d1350.png)
+
+============================================================================
+
diff --git a/pages/03.cloud-linux07-nextcloud/04.4-discuter/chapter.md b/pages/03.cloud-linux07-nextcloud/04.4-discuter/chapter.md
new file mode 100644
index 0000000..9e56d67
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/04.4-discuter/chapter.md
@@ -0,0 +1,19 @@
+---
+title: '4 - Discuter'
+taxonomy:
+ category:
+ - docs
+child_type: docs
+---
+
+# Discuter
+
+Le module **Discussion** permet de discuter par écrit (conversation) ou en vidéo (appel) sans quitter Nextcloud.
+
+![Icône Discussion](https://ahp.li/ee31aed4bad134dad3a9.png)
+
+Il existe deux types de discussion :
+
+1. **les discussion privées,** avec une seule autre personne. Ce type de discussion ne peut pas être partagé à d'autres personnes. Il n'est pas possible de discuter avec quelqu'un n'ayant pas un compte sur votre instance.
+2. **les discussions de groupe,** avec autant de personnes que nécessaire. Ce type de discussion peut être partagé à des personnes n'ayant pas de compte sur votre instance. Il est aussi possible de les rendre publiques, pour que d'autres personnes inscrites sur l'instance puissent s'y joindre spontanément.
+
diff --git a/pages/03.cloud-linux07-nextcloud/05.5-contacts/01.5-1-creer-un-contact/docs.md b/pages/03.cloud-linux07-nextcloud/05.5-contacts/01.5-1-creer-un-contact/docs.md
new file mode 100644
index 0000000..3ae53c8
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/05.5-contacts/01.5-1-creer-un-contact/docs.md
@@ -0,0 +1,77 @@
+---
+title: '5.1 - Créer un Contact'
+taxonomy:
+ category:
+ - docs
+---
+
+## Importer un fichier de contacts
+-------------------------------
+
+Plutôt que de recréer des contacts uns à uns, vous pouvez importer vos
+répertoires issus d'autres logiciels et applications.
+
+!!! L'import n'est possible qu'avec des fichiers Virtual Contact File (**VCF/Vcard**) en **version 3.0 ou 4.0**.
+
+1. Cliquez sur Paramètres en bas à gauche de l'interface.
+
+ ![](https://ahp.li/88a8d89985b2e9896cd3.png)
+
+2. (Optionnel) Si vous ne souhaitez pas mélanger plusieurs listes de contacts, créez un nouveau carnet d'adresse.
+
+ ![](https://ahp.li/2e09434f4d0f40dd27e5.png)
+
+ - Entrez le nom de votre choix dans le champ de saisie et cliquez sur la flèche à droite pour valider.
+
+3. Cliquez sur "Importer les contacts".
+
+ ![](https://ahp.li/526d832e7122a1d6335b.png)
+
+4. Une boîte de dialogue apparaît. Cliquez sur "Importer dans le carnet d'adresses Contacts" pour ouvrir la liste des différents carnets d'adresses (menu déroulant).
+
+ ![](https://ahp.li/f0c4cc4a659109a290ae.png)
+
+5. Sélectionnez le carnet d'adresse dans lequel importer les nouveaux contacts.
+
+ ![](https://ahp.li/528354ae0f54e596aa59.png)
+
+6. Cliquez sur "Sélectionnez un fichier local" pour importer un fichier(format .vcf) depuis votre ordinateur, ou sur "Importer depuis Fichiers" pour choisir un fichier (format .vcf) présent dans votre espace Nextcloud.
+
+7. Patientez pendant l'import de vos contacts. Ceux-ci apparaissent dans la section "Non groupé" de la liste des contacts, à gauche de l'interface.
+
+8. Vous pouvez choisir de désactiver l'affichage d'un carnet d'adresse dans les paramètres.
+ - Cliquez sur le menu d'action correspondant.
+ - Décochez la case "Activé" dans le menu déroulant.
+
+ ![](https://ahp.li/085131bdf75106c356b5.png)
+
+ - Rechargez la page pour afficher les changements.
+
+## Créer une entrée à la main
+--------------------------
+
+Si vous n'avez pas de fichier de contacts existant, il vous faudra créer
+une fiche par contact à la main.
+
+1. Cliquez sur "Nouveau contact" en haut de la liste des contacts.
+
+ ![](https://ahp.li/10131741e803ce980856.png)
+
+2. La fiche du contact apparaît dans la vue principale.
+
+ ![](https://ahp.li/372ac557237b5974a77b.png)
+
+ 1. Cliquez sur "Nouveau contact" dans la fiche pour indiquer le nom de votre contact. Vous pouvez aussi indiquer la société à laquelle il appartient, son titre au sein de la société et modifier son avatar.
+ - L'enregistrement est automatique.
+ 2. Renseignez un numéro de téléphone, un email et/ou une adresse.
+ 3. Cliquez dans le champ "Carnet d'adresses" pour faire apparaître la liste des carnets d'adresses et
+ indiquer où ranger ce contact.
+ - Un contact ne peut être que dans un carnet à la fois. Cette limite se contourne en créant deux contacts identiques.
+ 4. Cliquez dans le champ "Groupes" pour faire apparaître la liste des groupes déjà créés ou
+ tapez directement un nouveau nom de groupe pour le créer (*amis, famille, clients, fournisseurs*...)
+ - Un contact peut être dans plusieurs groupes à la fois.
+ - Les groupes aparaissent en tant que section dans la liste des contacts.
+ 5. Cliquez sur "Ajouter une nouvelle propriété" pour ajouter de nouveaux champs à la fiche (adresse
+ supplémentaire, prononciation du nom, langues parlées, notes, fuseau horaire...)
+ - Une corbeille apparaît au survol de chaque propriété, permettant de la supprimer au besoin.
+
diff --git a/pages/03.cloud-linux07-nextcloud/05.5-contacts/02.5-2-creer-un-cercle/docs.md b/pages/03.cloud-linux07-nextcloud/05.5-contacts/02.5-2-creer-un-cercle/docs.md
new file mode 100644
index 0000000..2d33984
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/05.5-contacts/02.5-2-creer-un-cercle/docs.md
@@ -0,0 +1,77 @@
+---
+title: '5.2 - Créer un Cercle'
+taxonomy:
+ category:
+ - docs
+---
+
+Un cercle sert à **grouper des utilisateur⋅ices** de votre instance Nextcloud, dans l'idée de **partager** un agenda, des contacts, une
+discussion, des notes (grâce au module Collectif), une liste de tâches
+(grâce au module Deck) et des fichiers. Autrement dit, à **organiser du
+travail collectif**.
+
+1. Cliquez sur le bouton **+** de la section Cercles dans la liste des contacts.
+
+ ![](https://ahp.li/99b2fafd13da3cfd50fe.png)
+
+2. Une boîte de dialogue apparaît. Donnez un nom au cercle et cliquez sur "Créer un cercle".
+
+ ![](https://ahp.li/3788071ecc5105881f95.png)
+
+3. Cliquez sur "Ajouter des membres" en haut du menu, à gauche de la vue principale.
+
+ ![](https://ahp.li/e891157b3371438111aa.png)
+
+4. Une boîte de dialogue apparaît. Commencez à taper le nom de membres à ajouter dans le champ de saisie et cliquez dessus pour
+ les sélectionner.
+
+ ![](https://ahp.li/e78990600b4b07066066.png)
+
+## Gérer les rôles
+---------------
+
+Quand vous créez un Cercle, vous en êtes automatiquement **propriétaire (*Owner*)**.
+
+Vous pouvez accorder différents droits aux autres membres de la
+discussion en cliquant sur le menu d'actions à droite de leur nom, dans la liste des membres.
+
+![](https://ahp.li/7f44cd1bddf02322f27b.png)
+
+- Modérateur⋅ice (*Moderator)* : donne l'autorisation d'ajouter et de supprimer des **membres** du cercle.
+
+- Administrateur⋅ice (*Admin*) : donne l'autorisation de **modifier les paramètres** et d'ajouter et supprimer des **membres** et des **modérateu⋅ices** du cercle.
+
+- *Promouvoir en tant que seul propriétaire* : **remplace** **le⋅a propriétaire actuel⋅le**, donne l'autorisation de **supprimer le cercle**, de **modifier les paramètres** et d'ajouter et supprimer des **membres**, des **modérateur⋅ices** et des **administrateur⋅ices** du cercle.
+
+ > [!NOTE]
+ > Dans le cas où le compte propriétaire est supprimé de
+ > Nextcloud, l'administrateur⋅ice le⋅a plus ancien⋅ne du cercle
+ > devient propriétaire.
+
+## Définir les paramètres
+----------------------
+
+Un Cercle peut être public ou privé selon le degré de visibilité que vous lui accordez. Les réglages se font dans la vue principale.
+
+![](https://ahp.li/daa3636f3f1d2f1f6132.png)
+
+- *Tout le monde peut demander l'adhésion* : le cercle est **ouvert** à tous⋅tes les utilisateur⋅ices.
+
+- *Les membres doivent accepter les invitations* : ajouter un⋅e membre déclenche l'envoi d'une **invitation qui doit être acceptée** par le⋅a destinataire.
+
+- *Les adhésions doivent être confirmées/acceptées par un modérateur (nécessite Open)* : les utilisateur⋅ices doivent **faire une demande** pour devenir membre.
+
+ Bouton "Demander à rejoindre" dans la vue principale d'un cercle public
+ ![Bouton "Demander à rejoindre" dans la vue principale d'un cercle public](https://ahp.li/f1c530035d3a138963a3.png)**
+
+ Le bouton notification est le deuxième dans le groupe à droite de la barre d'accès
+ ![Le bouton notification est le deuxième dans le groupe à droite de la barre d'accès](https://ahp.li/347fa155996dced1e6e6.png)
+
+! Cette condition nécessite d'avoir aussi coché "Tout le monde peut demander l'adhésion".
+
+- *Les membres peuvent aussi inviter* : **les membres ont la
+ possibilité d'inviter** d'autres utilisateur⋅ices dans le Cercle (sans passer par un⋅e modérateur⋅ice).
+
+- *Visible à tous* : le cercle **apparaît dans la liste de contacts** de tous⋅tes les utilisateur⋅ices, ainsi que dans la **fonction recherche**. Si la case est décochée, seul⋅es les membres du cercle le verront apparaître dans leur liste.
+
+ ![la fonction recherche est le premier bouton dans le groupe à droite de la barre d'accès](https://ahp.li/9a84403835ad8a27019f.png)
\ No newline at end of file
diff --git a/pages/03.cloud-linux07-nextcloud/05.5-contacts/03.5-3-partager-un-carnet-dadresses/docs.md b/pages/03.cloud-linux07-nextcloud/05.5-contacts/03.5-3-partager-un-carnet-dadresses/docs.md
new file mode 100644
index 0000000..56bff4b
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/05.5-contacts/03.5-3-partager-un-carnet-dadresses/docs.md
@@ -0,0 +1,30 @@
+---
+title: '5.3 - Partager un carnet d''adresses'
+taxonomy:
+ category:
+ - docs
+---
+
+Vous pouvez **partager** un carnet d'adresses à **d'autres
+utilisateur⋅ices** (inscrit⋅es sur votre instance Nextcloud).
+
+1. Cliquez sur Paramètres en bas à gauche de l'interface.
+
+ ![](https://ahp.li/88a8d89985b2e9896cd3.png)
+
+2. Cliquez sur le bouton de partage correspondant au carnet d'adresses que vous voulez partager.
+
+ ![](https://ahp.li/71aba9891770ee6e0478.png)
+
+3. Entrez le nom des destinataires dans le champ de saisie qui apparaît et sélectionnez-les dans la liste déroulante.
+
+4. Accordez ou non l'autorisation de modifier le carnet d'adresses, ou révoquez le partage.
+
+ Case "peut modifier" à cocher et icône corbeille à côté de chaque nom
+ ![](https://ahp.li/907a3085002905020006.png)
+
+!!! Il n'est pas possible de partager directement un carnet d'adresses avec l'extérieur, mais vous pouvez le télécharger (format .vcf) et ensuite le transmettre par le moyen de votre choix.
+!!! 1. Cliquez sur le menu d'action correspondant au carnet d'adresses.
+!!! 2. Choisissez "Télécharger" dans le menu déroulant.
+!!!
+!!! ![](https://ahp.li/9069519672511ca1d310.png)
\ No newline at end of file
diff --git a/pages/03.cloud-linux07-nextcloud/05.5-contacts/docs.md b/pages/03.cloud-linux07-nextcloud/05.5-contacts/docs.md
new file mode 100644
index 0000000..de120ec
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/05.5-contacts/docs.md
@@ -0,0 +1,21 @@
+---
+title: '5 - Contacts'
+taxonomy:
+ category:
+ - docs
+child_type: docs
+---
+
+Le module **Contacts** permet d'organiser ses contacts et de partager
+des carnets d'adresse avec d'autres personnes inscrites sur votre instance Nextcloud. Il permet aussi de créer des **Cercles**, utiles pour
+organiser du travail collectif dans les autres modules de Nextcloud
+(Collectifs, Fichiers, Agenda...).
+
+!!! Le vocabulaire employé par le module peut prêter à confusion. Voici quelques définitions :
+!!! - **Contact** = une entrée dans votre répertoire personnel, à renseigner à la main ou à importer depuis un autre logiciel.
+!!! - **Groupe** = Un mode d'organisation de ses contacts personnels. Les groupes ne sont pas publics.
+!!! - **Carnet d'adresse** = Un autre mode d'organisation de ses contacts, qui permet le partage de contacts avec des utilisateur⋅ices.
+!!! - **Utilisateur⋅ice** = Un ⋅e membres de Cloud Linux07 inscrit⋅e sur votre instance Nextcloud. Vous pouvez les retrouver dans l'annuaire en haut à droite de l'interface générale, si ceux-ci ont été rendus publics.
+!!! ![l'annuaire est le troisième bouton dans le groupe à droite de la barre d'accès](https://ahp.li/082ba1e13ccefc202d7c.png)
+!!! - **Cercle** = Un outil pour créer des groupes d'utilisateur⋅ices. Ils peuvent être privés ou publics. Les membres savent qu'ils sont dans un cercle, et le cercle apparaît dans leur propre liste des contacts.
+
diff --git a/pages/03.cloud-linux07-nextcloud/06.6-agenda/01.6-1-gerer-ses-agendas/docs.md b/pages/03.cloud-linux07-nextcloud/06.6-agenda/01.6-1-gerer-ses-agendas/docs.md
new file mode 100644
index 0000000..daf336d
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/06.6-agenda/01.6-1-gerer-ses-agendas/docs.md
@@ -0,0 +1,74 @@
+---
+title: '6.1 - Gérer ses Agendas'
+taxonomy:
+ category:
+ - docs
+---
+
+## Créer un nouvel agenda
+
+Le module comporte par défaut un agenda intitulé "Personnel". Si vous avez besoin d'en créer un nouveau :
+
+1. Cliquez sur "Nouvel agenda" dans la liste des agendas. Dans le menu déroulant, cliquez sur l'option qui vous convient :
+
+ ![Nouvel Agenda](https://ahp.li/0e07a741ef970fdf1787.png)
+
+ - *Nouvel agenda* : pour ajouter un agenda
+ - *Nouvel agenda avec liste de tâches* : pour créer un deck associé au nouvel agenda
+ - *Nouvel abonnement par lien* : pour intégrer un [agenda public](../6-3-partager-un-agenda) dans la liste des agendas
+
+2. Entrez un nom pour votre agenda et cliquez sur la flèche à droite pour valider.
+
+ ![Nom Agenda](https://ahp.li/12cfa0ca910bd66762b6.png)
+
+3. Le nouvel agenda apparaît dans la liste.
+
+## Éditer, Télécharger ou Supprimer un Agenda
+
+Les agendas apparaissent tous dans la même vue, chacun avec leur **couleur associée**. Vous pouvez désactiver l'affichage de chaque
+agenda individuellement en cliquant sur sa pastille de couleur, à gauche du nom, dans la liste.
+
+Le menu d'actions à droite de chaque agenda, permet de :
+
+![Action Agenda](https://ahp.li/b3643c7a94bdb44744e4.png)
+
+- *Modifier le nom* : renommer l'agenda
+- *Modifier la couleur* : changer la couleur d'affichage de l'agenda
+- *Copier le lien privé* : copier le lien de l'agenda pour les
+ personnes y ayant accès
+- *Télécharger* : télécharger l'agenda au format .ics
+- *Supprimer* : supprimer l'agenda
+
+!!! Vous pouvez retrouver vos agendas supprimés dans la corbeille en bas à gauche de la vue générale et les restaurer pendant 30 jours.
+
+## Importer un agenda
+
+Vous pouvez **importer un agenda** et ses évènements depuis un autre
+logiciel :
+
+1. Cliquez sur "Paramètres & Importation" en bas à gauche de l'écran.
+
+ ![Paramètes Importation](https://ahp.li/27869ba81aa9da68559b.png)
+
+2. Cliquez sur "Importer un agenda".
+
+ ![Importer un agenda](https://ahp.li/3890ef1901eaf45f8191.png)
+
+3. Sélectionnez un ou plusieurs fichiers de calendrier sur votre
+ ordinateur (fichiers avec l'**extension .ics**) et cliquez sur
+ "Ouvrir".
+
+4. Dans la boîte de dialogue qui s'ouvre, cliquez sur "Select option" pour définir dans quel agenda effectuer l'import :
+
+ ![Select Option](https://ahp.li/48464a6a18024010c088.png)
+
+ - Vous pouvez ajouter l'agenda à un agenda déjà existant.
+ - Ou le conserver à part en cliquant sur "Nouvel agenda".
+
+5. Cliquez sur "Importer un agenda".
+
+ ![Valid Import](https://ahp.li/d5435474d4fa21158a34.png)
+
+
+! Cette action permet de **créer une copie**, mais pas de synchroniser des agendas. Toute nouvelle action sur l'agenda d'origine ne sera donc pas reportée sur l'agenda importé et inversement.
+! Pour synchroniser des agendas, voir la fiche [Synchroniser ses contacts et son agenda](https://documentations.linux07.fr/cloud-linux07-nextcloud/7-nextcloud-sur-mobile/7-3-synchroniser-ses-contacts-et-agendas).
\ No newline at end of file
diff --git a/pages/03.cloud-linux07-nextcloud/06.6-agenda/02.6-2-organiser-ses-evenements/docs.md b/pages/03.cloud-linux07-nextcloud/06.6-agenda/02.6-2-organiser-ses-evenements/docs.md
new file mode 100644
index 0000000..a865959
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/06.6-agenda/02.6-2-organiser-ses-evenements/docs.md
@@ -0,0 +1,84 @@
+---
+title: '6.2 - Organiser ses événements'
+taxonomy:
+ category:
+ - docs
+---
+
+## Créer un nouvel évènement
+
+Pour créer un événement, cliquez sur le bouton "Nouvel événement" ou, selon la vue choisie (jour, semaine, mois), cliquez sur le jour ou le créneau horaire souhaité dans la vue principale.
+
+Une boîte de dialogue apparaît, vous pouvez y indiquer :
+
+![Fenêtre nouvel événement](https://ahp.li/5738132457be63fcb23f.png)
+
+1. Le nom de l'événement
+2. L'agenda auquel l'associer
+3. Les heures de début et de fin et le fuseau horaire. Par défaut, la
+ durée de l'événement est de :
+ - 30 minutes pour les vues "jour" et "semaine".
+ - Toute la journée pour la vue "mois". Dans ce cas, décocher
+ "Toute la journée" pour pouvoir modifier les heures de début et
+ de fin.
+4. Le lieu
+5. La description
+
+Si ces options suffisent, cliquez sur "Enregistrer".
+
+### Options avancées
+
+Pour des **options avancées**, cliquez sur "Plus". La barre latérale s'ouvre sur la droite de l'écran. En plus des options précédentes, vous pouvez :
+
+**Dans l'onglet "Détails"**
+
+![Onglet détails](https://ahp.li/63737c842534bd64c67d.png)
+
+![Onglet Détails](https://ahp.li/d5cb173e9dca554ff23c.png)
+
+1. Indiquer le statut de l'événement : "*confirmé*", "*provisoire*" ou "*annulé*".
+2. Indiquer la visibilité de cet événement précis en cas d'agenda
+ partagé : "*afficher l'événement entier*", "*afficher seulement
+ comme occupé*", "*masquer l'événement*".
+3. Ajouter une Catégories (Anniversaire, Voyage, Réunion, ce que vous voulez)
+4. Prévoir un rappel
+5. Configurer une récurrence : "*jamais*", "*tous les jours*", "*toutes les semaines*", "*tous les mois*" ou "*tous les ans*", avec ou sans date de fin.
+
+**Dans l'onglet "Participants"**
+
+![Onglet participants](https://ahp.li/7b5c578a9297c1a19c10.png)
+
+1. Utilisez le champ de saisie pour rechercher dans l'annuaire ou dans vos contacts privés le nom des participant⋅es à ajouter. Un email d'invitation est automatiquement envoyé. Par la suite, en cliquant sur le menu d'action associé à chaque nom, vous pouvez :
+
+ ![Ajout participants événement](https://ahp.li/8b55fe14e1e104e350a1.png)
+
+ - Envoyer une nouvelle invitation par email à chaque modification de l'événement en cochant la case "Envoyer par courriel".
+ - Modifier le statut de chaque participant⋅e ("*président*", "*obligatoire*", "*facultatif*", "*ne participe pas*") voire le⋅a supprimer de la liste.
+
+2. Le bouton "Créer une salle de discussion pour cet événement" ajoute un lien vers le module Discussion dans la description de l'événement.
+
+!!! **L'onglet ressource** est utile en cas de gestion de réservation de salles avec Nextcloud et n'est pas encore documenté.
+
+Cliquez sur "Enregistrer" ou "Mettre à jour" pour valider vos choix.
+
+## Supprimer un événement
+----------------------
+
+Pour supprimer un évènement, cliquez dessus. Une boîte de dialogue apparaît.
+
+Cliquez sur le menu d'actions en haut à droite de cette fenêtre.
+Sélectionnez "Supprimer" dans le menu déroulant.
+
+![Supprimer événement](https://ahp.li/f564c4d7bb3eee812ed3.png)
+
+Pour retrouver un événement supprimé, cliquez sur la corbeille en bas à gauche de la vue générale.
+
+![Corbeille](https://ahp.li/1a4e9b664c6cf77d0aa9.png)
+
+Vous pouvez dans les actions (trois petits points) :
+
+- Restaurer l'événement
+- Supprimer définitivement l'événement.
+- Vider la corbeille
+
+! Les événements mis dans la corbeille sont automatiquement supprimés **définitivement** 30 jours après.
\ No newline at end of file
diff --git a/pages/03.cloud-linux07-nextcloud/06.6-agenda/03.6-3-partager-un-agenda/docs.md b/pages/03.cloud-linux07-nextcloud/06.6-agenda/03.6-3-partager-un-agenda/docs.md
new file mode 100644
index 0000000..adfb287
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/06.6-agenda/03.6-3-partager-un-agenda/docs.md
@@ -0,0 +1,66 @@
+---
+title: '6.3 - Partager un Agenda'
+taxonomy:
+ category:
+ - docs
+---
+
+## Partage interne
+---------------
+
+Vous pouvez **partager votre agenda** avec d'autres **utilisateur⋅ices ou cercles** (l'interface utilise le terme "groupes") de votre instance Nextcloud.
+
+Cliquez sur l'icône de partage au bout de la ligne de l'agenda que vous souhaitez partager.
+
+![Partage agenda](https://ahp.li/743787f58288ef88e2e5.png)
+
+Vous pouvez autoriser la modification de l'agenda (création, modification, suppression d'événements) en cochant la case "peut modifier" associée à chaque destinataire du partage. Si la case n'est pas cochée, seule la consultation de l'agenda est possible.
+
+![Autorisation modification agenda](https://ahp.li/61ab6077713a7b0715a7.png)
+
+Vous pouvez arrêter de partager l'agenda en cliquant sur la corbeille en bout de ligne de chaque destinataire.
+
+!!! Les agendas partagés avec vous apparaissent dans la liste au même niveau que les vôtres.
+!!! Ils se distinguent par la présence de l'avatar de leur propriétaire à la place du bouton de partage.
+
+Pour supprimer un agenda qui vous a été partagé, cliquez sur le menu d'action puis sur "Cesser le partage de ma part". Vous avez quelques secondes pour changer d'avis en cliquant sur la flèche circulaire qui apparaît.
+
+! Cette action n'est pas possible si le partage est fait pour un groupe dont vous faites partie.
+
+![Cesser partage](https://ahp.li/63ea3235ed9a2f0997f3.png)
+
+## Publier à l'extérieur
+---------------------
+
+Les agendas peuvent être **publiés** via un lien de partage pour les rendre accessibles (en lecture seule) à des **personnes externes** (non inscrites sur votre instance Nextcloud).
+
+1. Cliquez sur l'icône de partage de l'agenda à publier.
+
+ ![Partage agenda](https://ahp.li/743787f58288ef88e2e5.png)
+
+2. Cliquez sur le bouton "**+**" au bout de la ligne "Lien de partage".
+
+ ![Lien publication](https://ahp.li/07a9629a8f89887c5c9e.png)
+
+3. Cliquez sur l'icône de copie du lien public. Le lien est copié
+ automatiquement dans votre presse-papier.
+
+ ![Copier lien](https://ahp.li/0701be3101741949ce5f.png)
+
+4. Transmettez le liens aux destinataires de la manière de votre choix.
+
+Les personnes ayant accès à ce lien ont la possibilité d'**ajouter l'agenda** à leur logiciel de calendrier personnel et de **télécharger** la totalité de l'agenda au format .ics
+
+
+
+Côté destinataire, l'interface de l'agenda partagé est semblable à la vôtre, sans le bouton "Nouvel événement". Le menu d'action correspondant à l'agenda ne propose que les options "Copier le lien d'inscription" et "Télécharger".
+
+
+
+! Ce lien est **public** et peut circuler partout, à moins que vous ne révoquiez son partage.
+!
+! ![Option "supprimer le lien de partage" dans le menu d'actions du lien de partage.](https://ahp.li/7759eae4a294515883d2.png)
+
+=================================================================
+
+!!!! Si vous êtes dans le besoin avec votre association d'avoir un calendrier partagé et éditable, il est possible sur notre instance Cloud Linux07 d'ajouter des utilisateurs avec très peu de quota dans un groupe isolé qui sera partagé avec votre groupe, cela leur permettra d'éditer un calendrier partagé.
\ No newline at end of file
diff --git a/pages/03.cloud-linux07-nextcloud/06.6-agenda/docs.md b/pages/03.cloud-linux07-nextcloud/06.6-agenda/docs.md
new file mode 100644
index 0000000..f20d13f
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/06.6-agenda/docs.md
@@ -0,0 +1,21 @@
+---
+title: '6 - Agenda'
+taxonomy:
+ category:
+ - docs
+child_type: docs
+---
+
+Le module **Agenda** permet d'organiser ses rendez-vous et événements et de les partager avec d'autres personnes en interne ou à l'extérieur.
+
+Tour d'horizon de l'interface :
+
+![Interface Agenda](https://ahp.li/11516df84c586a48fcb2.png)
+
+1. Les événements sont affichés dans la **vue principale**.
+2. **Indicateur** de la vue affichée se trouve en haut du menu à gauche. Il permet de **naviguer** vers une autre journée, semaine ou mois.
+3. Sous l'indicateur, un bouton permet de créer un **nouvel événement**.
+4. À côté, le bouton "Auj" permet de **recentrer la vue** sur la journée, la semaine ou le mois en cours.
+5. En bout de ligne, une icône permet de choisir le **type de vue** : journée, semaine, mois (comme ici) ou liste des événements.
+6. Le reste du menu contient la **liste des agendas** auxquels vous avez accès (les vôtres et ceux qui vous sont partagés).
+7. Tout en bas, vous avez accès à la **corbeille** et aux **paramètres** pour ce module.
diff --git a/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/01.7-1-gerer-ser-fichiers-sur-mobile/docs.md b/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/01.7-1-gerer-ser-fichiers-sur-mobile/docs.md
new file mode 100644
index 0000000..dd3b9ff
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/01.7-1-gerer-ser-fichiers-sur-mobile/docs.md
@@ -0,0 +1,129 @@
+---
+title: '7.1 - Gérer ser fichiers sur mobile'
+taxonomy:
+ category:
+ - docs
+---
+
+## Installer l'application Nextcloud
+
+L'installation de l'application Nextcloud se fait de la même manière sur
+**iPhone** et sur **Android**.
+
+1. Recherchez l'application "Nextcloud" dans votre magasin habituel
+ d'applications.
+
+ ![](https://ahp.li/bc0ff08e85cf00bcb6aa.png)
+
+2. Installez l'application puis ouvrez-la.
+
+3. Appuyez sur "Se connecter"
+
+
+
+4. **Ajouter un mot de passe d'application**
+
+ En cas de perte ou de vol de votre mobile, il peut être utile de
+ **révoquer à distance l'accès à votre espace**. Pour cela, il faut
+ avoir créé un mot de passe d'application au moment de
+ l'installation.
+
+ 1. Posez votre téléphone et connectez vous à Nextcloud **depuis
+ votre ordinateur.**
+
+ 2. Ouvrez les paramètres.
+
+ - Voir : [1.2. Personnaliser les paramètres](
+
+ 7. Scannez le QR code de votre ordinateur avec votre mobile.
+
+5. Appuyez sur "Se connecter" sur la page de votre collectif qui vient de charger (les captures d'écran sont avec une autre instance Nextcloud, mais le principe est le même).
+
+
+
+6. Entrez l'adresse mail et le mot de passe utilisés pour cet espace et cliquez sur "Se connecter".
+
+
+
+7. Appuyez sur "Autoriser l'accès".
+
+
+
+8. Appuyez sur "Autoriser" dans la boîte de dialogue qui aparaît, pour que l'application puisse bien accéder à
+ vos fichiers sur votre mobile.
+
+
+
+Vous avez désormais accès à votre espace Nextcloud depuis votre mobile.
+Vous pouvez y réaliser les mêmes actions que sur l'interface Web.
+
+
+## Envoyer et télécharger des fichiers
+
+### Sur Android
+
+#### Envoyer un fichier depuis votre téléphone vers Nextcloud
+
+##### À partir de la liste de vos fichiers
+
+1. Faites un appui long sur le nom du fichier.
+2. Appuyez sur l'icône de partage de ce fichier.
+
+
+3. Sélectionnez "Nextcloud"
+4. Choisissez le dossier de destination.
+5. Appuyez sur "Envoyer".
+
+
+
+##### À partir de l'application Nextcloud
+
+1. Placez-vous dans le dossier de destination.
+2. Appuyez sur le bouton **+** en bas à droite de l'écran.
+
+
+3. Appuyez sur "Téléverser des fichiers" dans la boîte de dialogue.
+
+
+4. Sélectionnez le fichier à envoyer.
+5. Appuyez sur "Envoyer".
+
+
+
+#### Télécharger un fichier depuis Nextcloud vers votre téléphone
+
+1. Appuyez sur le menu d'actions du fichier concerné
+2. Appuyez sur "Télécharger" dans le menu déroulant.
+
+
+
+### Sur iPhone
+
+🚧 Documentation à venir 🚧
+
+## Révoquer l'accès d'un appareil
+
+Si vous changez de téléphone, ou que vous le perdez ou qu'on vous le vole, vous pouvez révoquer l'accès à votre espace depuis l'interface web.
+
+1. Ouvrez les paramètres
+- Voir : [1.2. Personnaliser les paramètres](https://documentations.linux07.fr/cloud-linux07-nextcloud/premier-pas/1-3-personnaliser-ses-parametres).
+2. Cliquez sur "Sécurité" dans le menu de gauche
+3. Cliquez sur le menu d'action correspondant à l'appareil dont vous souhaitez révoquer l'accès, dans la section "Appareils et sessions".
+
+ ![revoquer-acces-appareil.png](https://ahp.li/a44a5186df0aa4db5024.png)
+4. Cliquez sur "Révoquer" dans le menu déroulant.
\ No newline at end of file
diff --git a/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/02.7-2-synchroniser-ses-discussions/docs.md b/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/02.7-2-synchroniser-ses-discussions/docs.md
new file mode 100644
index 0000000..922c22c
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/02.7-2-synchroniser-ses-discussions/docs.md
@@ -0,0 +1,38 @@
+---
+title: '7.2 - Synchroniser ses discussions'
+taxonomy:
+ category:
+ - docs
+---
+
+L'installation de l'application Nextcloud Talk se fait de la même
+manière sur **iPhone** et sur **Android**.
+
+1. Recherchez l'application "Nextcloud Talk" dans votre magasin
+ habituel d'applications.
+
+
+
+2. Installez l'application puis ouvrez-la.
+
+3. Entrez l'adresse de votre instance Nextcloud dans le champ de saisie.
+
+
+
+4. Appuyez sur "Se connecter" sur la page de votre collectif (les captures sont avec une autre instance, mais les principes sont les mêmes).
+
+
+
+5. Entrez le nom d'utilisateur et le mot de passe utilisés pour cet espace et cliquez sur "Se connecter".
+
+
+
+6. Appuyez sur "Autoriser l'accès".
+
+
+
+Vous avez désormais accès à vos discussions Nextcloud depuis votre
+mobile. Vous pouvez y réaliser les mêmes actions que sur l'interface
+Web.
+
+
\ No newline at end of file
diff --git a/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/03.7-3-synchroniser-ses-contacts-et-agendas/docs.md b/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/03.7-3-synchroniser-ses-contacts-et-agendas/docs.md
new file mode 100644
index 0000000..762f2be
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/03.7-3-synchroniser-ses-contacts-et-agendas/docs.md
@@ -0,0 +1,86 @@
+---
+title: '7.3 - Synchroniser ses contacts et agendas'
+taxonomy:
+ category:
+ - docs
+---
+
+Synchroniser ses contacts et agendas sur Android
+------------------------------------------------
+
+Nextcloud ne propose pas spécifiquement d'application mobile pour les
+contacts et les agendas. Il est cependant possible de les synchroniser
+avec vos propres applications **sur Android**, en utilisant
+Davx5 .
+
+1. Recherchez l'application "DAVx5" dans votre magasin habituel
+ d'applications.
+
+ ![](https://ahp.li/64a51abeacb9164afc49.png)
+
+ - DAVx5 est gratuit quand il est installé depuis le magasin
+ d'applications [F-droid](https://f-droid.org/fr/) et payant depuis les autres magasins
+ d'applications, afin de soutenir ce projet open source.
+
+2. Installez l'application puis ouvrez-la.
+
+3. Passez l'écran d'accueil et l'écran de gestion des tâches en appuyant sur la flèche en bas à droite.
+
+
+
+4. Autorisez la synchronisation des contacts et/ou des calendriers
+ selon vos besoins.
+
+
+
+5. Pour chaque, autorisez l'accès à votre mobile dans la boîte de dialogue qui apparaît.
+
+ ![](https://ahp.li/66dc6aa11632f2bf2bc7.png)
+
+6. Passez l'écran d'autorisations puis l'écran d'information sur
+ l'application en cliquant sur a flèche en bas à droite.
+
+7. Cliquez sur le bouton **+** en bas à droite pour créer un nouveau
+ compte.
+
+
+
+8. Choisissez "Connexion avec une URL et un nom d'utilisateur", entrez vos informations de connexion au Nextcloud de CLoud Linux07 et cliquez sur "Se connecter" en bas à droite.
+
+
+
+9. Cliquez sur "Créer un compte" en bas à droite de la nouvelle page.
+
+
+
+10. Dans les onglets correspondants, cochez les carnets d'adresse et les agendas Nextcloud que vous souhaitez
+ ajouter à vos applications mobile de contacts et de calendrier.
+
+ ![](https://ahp.li/2416981f030a3b9898f2.png)
+
+!!! Pour que les contacts et les événements sur votre mobile apparaissent dans votre espace Nextcloud, créez ou copiez-les sur le compte Davx désormais proposé dans votre application de contact ou de calendrier.
+
+===================================================================
+
+!!! La synchronisation prend du temps, parfois plusieurs minutes. Si des contacts ou des événements n'apparaissent pas sur votre espace Nextcloud ou sur votre mobile, patientez une dizaine de minutes et rafraîchissez les pages.
+
+Synchroniser ses contacts et agendas sur iOS
+--------------------------------------------
+
+! Cette partie de la documentation est théorique, il faut encore la tester.
+
+### Synchroniser ses contacts
+
+1. Ouvrir *Réglages -\> Contacts -\> Comptes -\> Ajouter un compte -\>
+ Autre -\> Ajouter un compte CardDAV*
+2. Entrez l'adresse nc.linux07.fr et vos informations de
+ connexion au Nextcloud de Cloud Linux07
+
+### Synchroniser ses agendas
+
+Ouvrir *Réglages -\> Contacts -\> Comptes -\> Ajouter un compte -\>
+Autre -\> Ajouter un compte CalDAV*
+
+1. Entrez l'adresse nc.linux07.fr et vos informations de
+ connexion au Nextcloud de Cloud Linux07
+2. Validez.
diff --git a/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/04.7-4-synchroniser-ses-notes/docs.md b/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/04.7-4-synchroniser-ses-notes/docs.md
new file mode 100644
index 0000000..a3bb7b3
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/04.7-4-synchroniser-ses-notes/docs.md
@@ -0,0 +1,37 @@
+---
+title: '7.4 - Synchroniser ses Notes'
+taxonomy:
+ category:
+ - docs
+---
+
+L'installation de l'application Nextcloud Notes se fait de la même
+manière sur **iPhone** et sur **Android**.
+
+Elle necessite que soit déjà installé l'application Nextcloud
+
+1. Recherchez l'application "Nextcloud Notes" dans votre magasin
+ habituel d'applications (se trouve aussi sur le dépôt F-Droid).
+
+ ![Application Nextcloud Notes](https://ahp.li/b7ac202eafeda57dbba3.png)
+
+2. Installez l'application puis ouvrez-la.
+
+3. Choisissez l'adresse de connexion au serveur Nextcloud voulu.
+
+4. Appuyez sur "Se connecter" sur la page de votre collectif (les captures sont avec une autre instance, mais les principes sont les mêmes).
+
+
+
+5. Entrez le nom d'utilisateur et le mot de passe utilisés pour cet espace et cliquez sur "Se connecter".
+
+
+
+6. Appuyez sur "Autoriser l'accès".
+
+
+
+
+Vous avez désormais accès à vos notes Nextcloud depuis votre
+mobile. Vous pouvez y réaliser les mêmes actions que sur l'interface
+Web.
diff --git a/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/docs.md b/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/docs.md
new file mode 100644
index 0000000..e9c3790
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/07.7-nextcloud-sur-mobile/docs.md
@@ -0,0 +1,26 @@
+---
+title: '7 - Nextcloud sur mobile'
+taxonomy:
+ category:
+ - docs
+child_type: docs
+---
+
+Nextcloud permet la synchronisation de plusieurs de ses modules sur mobile (Android et iOS) :
+
+* Fichiers
+* Discussion
+* Contacts et Agenda
+* Notes
+* Tâches
+
+Pour chaque module, une application différente est nécessaire.
+
+!!!! Sur un Android, vous pouvez utiliser un autre dépôt que le PlayStore de Google.
+!!!! Je recommande le dépôt **F-Droid**. Plusieurs applications libres sont dans ce dépôt et parfois certaines applications payantes sur le PlayStore seront gratuites sur ce dépôt.
+!!!! F-Droid, en dehors d'être un dépôt d’applications Android, propose également un client Android permettant d'installer facilement ces applications et de les mettre à jour.
+!!! [Téléchargement F-Droid](https://f-droid.org/fr/)
+
+!!! Pour installer l’application F-Droid, l'utilisateur doit cocher l'option permettant l’installation d'applications depuis des sources inconnues dans ces paramètres, et avoir au préalable téléchargé l'apk depuis le site officiel avec un navigateur internet classique.
+
+! Sauf pour l'application Fichiers (Files) qui elle doit d'abord être téléchargée sur le PlayStore ( ou bien sur [AuroraStore](https://aurora-store.fr.uptodown.com/android), autre dépôt qui permet d'accéder au PlayStore sans avoir besoin d'un compte Google) pour que fonctionne les autres applications que vous pouvez ensuite télécharger sur F-Droid.
\ No newline at end of file
diff --git a/pages/03.cloud-linux07-nextcloud/08.8-nextcloud-et-client-mail-thundebird/01.8-1-synchroniser-ses-contacts-avec-thunderbird/docs.md b/pages/03.cloud-linux07-nextcloud/08.8-nextcloud-et-client-mail-thundebird/01.8-1-synchroniser-ses-contacts-avec-thunderbird/docs.md
new file mode 100644
index 0000000..914b551
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/08.8-nextcloud-et-client-mail-thundebird/01.8-1-synchroniser-ses-contacts-avec-thunderbird/docs.md
@@ -0,0 +1,145 @@
+---
+title: '8.1 - Synchroniser ses contacts avec Thunderbird'
+taxonomy:
+ category:
+ - docs
+---
+
+! Depuis peu Thunderbird a eu une mise à jour importante vers une nouvelle version numérotée 102, celle-ci vient améliorer bien des éléments de l'application open source. Si votre version est antérieure, je vous conseille vivement dans un premier temps de mettre à jour Thunderbird avant de continuer.
+
+===
+
+!!! Avant cette nouvelle version, pour bien synchroniser les Contacts et Agendas de Nextcloud, étaient nécessaires 3 modules complémentaires (extensions) de Thunderbird, Cardav&Caldav Provider, TBSync et Category Manager. Ce n'est plus nécessaire. Il ne reste plus qu'une extension que je conseille encore de rajouter, Cardbook.
+
+
+La nouvelle interface de Thunderbird ajoute une barre à gauche de sa fenêtre où se trouve les icônes pour les Courriers, les Contacts, les Agendas, les Tâches, les Discussions et autre modules si ajoutés.
+
+## 1. Ouvrez l'onglet **Contacts** en cliquant sur son icône
+
+![Onglet Contacts](https://ahp.li/a4ff47aae0aea527a07a.png)
+
+L'onglet des Carnets d'adresses s'ouvre
+
+![Interface du Carnet d'adresses](https://ahp.li/cf107fcb65bb2fe1ff67.png)
+
+## 2. Ajouter un carnet d'adresse
+
+Cliquez sur Nouveau carnet d'adresses, puis sur Ajouter un carnet d'adresses CardDAV
+
+![Nouveau carnet adresses Cardav](https://ahp.li/99d46a9f60f7df607725.png)
+
+Une fenêtre popup s'affiche où vous devez entrer votre nom d'utilisateur Nextcloud et l'adresse web de votre serveur Nextcloud.
+
+![Identifiant et adresse serveur](https://ahp.li/f5982bbbed02db2ef3f1.png)
+
+Cliquez ensuite sur Continuer. Une nouvelle fenêtre popup s'ouvre pour vous authentifier auprès du serveur Nextcloud. Entrez votre nom d'utilisateur et votre mot de passe Nextcloud.
+
+![Authentification Nextcloud](https://ahp.li/d90bf11d77df5c33c82d.png)
+
+Vérifiez aussi que la case _Utilisez le gestionnaire de mot de passe pour se souvenir de ce mot de passe_ en bien cochée, puis cliquez sur OK
+
+Il faut patienter un peu pour qu'il trouve le carnet ou les carnets d'adresses, puis la liste va apparaître.
+
+![Liste carnets d'adresses](https://ahp.li/9a89495b8429e9a96c55.png)
+
+On peut choisir le carnet ou les carnets d'adresses que l'on veut synchroniser.
+
+![Choix des carnets d'adresses à synchroniser](https://ahp.li/64e6764a6a08820b3549.png)
+
+Puis on clique sur Continuer, on attends que la synchronisation soit finie. Les carnets se retrouvent dans l'onglet de gauche avec la liste des utilisateurs et de leur adresses courriel.
+
+![Carnets adresses synchronisés](https://ahp.li/72b071b72ac71640f764.png)
+
+## 3. Utiliser les Groupes comme des listes de courriels
+
+Une fonction très utile, les Groupes dans les Contacts de Nextcloud peuvent servir à créer des listes de mails, un utilisateur peut appartenir à plusieurs Groupes. Pour cela, nous avons besoin du module CardBook de Thunderbird.
+
+
+Sur la page Courrier (l'onglet Courrier entrant), en haut à droite se trouve une icône sandwich (trois petite ligne), en cliquant dessus on déplie le **menu** et on va descendre sur **Module complémentaires et thème**
+
+
+![menu module complémentaires et thèmes](https://ahp.li/3e49b49b5b5bbbb8d586.png)
+
+Ensuite on va cliquer sur **Extensions** dans la colonne de gauche et dans le champ de recherche on tape _cardbook_ et on clique sur la loupe.
+
+![Recherche Cardbook](https://ahp.li/2103236a573689772819.png)
+
+Une page des modules de Thunderbird va s'ouvrir et vous pourrez cliquer sur Installer Cardbook
+
+![Installation Cardbook](https://ahp.li/147481faef4e88802808.png)
+
+Après l'installation, il a une petite configuration post-installation, cliquez sur _Suivant_
+
+![Configuration Cardbook](https://ahp.li/14b7d547b1061d02ff46.png)
+
+Il va vous proposez les carnets d'adresses qu'il a trouver.
+
+![Choix carnets cardbook](https://ahp.li/64e6764a6a08820b3549.png)
+
+Vous pouvez changer des couleurs, les noms des carnets, je vous conseille de garder par défaut _Travailler hors connexion_ coché et _vCard 3.0_.
+
+![Choix carnets Cardbook](https://ahp.li/de55c499cab07d95e89c.png)
+
+La dernière fenêtre devrait afficher un message: _Vos carnets d'adresses ont été configurés avec succès_
+Cliquer sur Suivant.
+
+Vous avez maintenant une nouvelle icône pour ouvrir CradBook dans la colonne de droite tout en bas.
+
+Au-dessus des carnets d'adresses un bouton pour synchroniser les Carnets d'adresses liés avec le serveur Nextcloud.
+
+Si vous dépliez un carnet d'adresse, vous verrez les fameux Groupes dans Nextcloud, CardBook appelle ces Groupes des Catégories.
+
+
+![Vue Cardbook](https://ahp.li/42ab305481b39d13affc.png)
+
+Par exemple, si je vais sur une categorie, je vois la liste des contacts qui sont dans cette categorie.
+
+![Vue courriels categorie](https://ahp.li/09f4e7a20addf450cb9a.png)
+
+Cette categorie peut me servir de liste de courriels. Si je me lance dans _Écrire un nouveau message_, s'ouvre la fenêtre de rédaction. Pour afficher la _Barre de contacts_, soit je clique sur la touche F9, soit dans l'onglet _Affichage_ je clique sur _Barre de contacts_
+
+![Affichage barre de contacts](https://ahp.li/18a96b555907a797b9f6.png)
+
+Dans la barre de Contacts, on peux choisir:
+* le Carnet d'Adresses (ou Tous les carnets d'adresses),
+* Filtrer sur les Catégories,
+* chercher un contact.
+
+Vous aurez tous les contacts d'un Carnet et d'une Catégorie si elle est choisie, avec une icône d'une personne et les Categories (liste courriels) avec une icône de groupe (deux personnes).
+
+Si vous choisissez une Catégorie ou un contact, vous pouvez en-dessous choisir:
+* si le message lui est adressé,
+* en Copie (CC),
+* Copie cachée (CCi)
+* ou Répondre à.
+
+
+![Barre de Contacts choix](https://ahp.li/b2e836bdf4263bbb932d.png)
+
+!!!! Si vous avez beaucoup d'adresses dans une Catégorie, préférez Ajout Copie cachée. Les longues listes de courriel ne sont pas très sûres en matière de sécurité.
+
+## Éditer un contact
+
+Privilégiez CardBook pour gérer vos contacts. Voyons comment éditer un contact
+
+Cliquer sur le contact. vous pouvez utiliser le bouton _Modifier_ dans la barre en haut à droite, ou juste double-cliquer sur le contact pour l'éditer.
+
+![Cardbook choix utilisateur](https://ahp.li/960b07742700f63470ff.png)
+
+Vous pouvez choisir de le mettre dans un autre carnet d'adresses en dépliant les carnets d'adresses.
+
+![modifier carnets d'adresses](https://ahp.li/81c364ef4a28adfc42fd.png)
+
+Vous pouvez choisir dans quelles categories ajouter le contact (comme expliqué au-dessus, très pratique pour avoir des listes mails)
+
+![modifier catégories](https://ahp.li/3967d9cd679db5a8a377.png)
+
+En descendant vous avez aussi plusieurs informations à ajouter ou modifier. avec le **+** devant l'adresse courriel, vous pouvez attribuer plusieurs adresses courriels, ajouter un ou des numéros de téléphones, ajouter une ou des adresses, des comptes de communication VOIP sur internet (Google Talk, Skpe, Jammi, Jabber), des URLS de site, et évenements ??
+
+![modifier options](https://ahp.li/e38a2993f683b3e9eb28.png)
+
+! N'oubliez pas de cliquer sur _Sauver_ en bas de la fenêtre pour sauvegarder vos modifications.
+
+!!! Si vous créez un nouveau contact, vous aurez les mêmes options qu'ici.
+
+!!!! Pensez aussi après avoir effectué des changements à synchroniser vos contacts dans votre interface des carnets d'adresses Cardbook
\ No newline at end of file
diff --git a/pages/03.cloud-linux07-nextcloud/08.8-nextcloud-et-client-mail-thundebird/02.8-2-synchroniser-ses-agendas-sur-thunderbird/docs.md b/pages/03.cloud-linux07-nextcloud/08.8-nextcloud-et-client-mail-thundebird/02.8-2-synchroniser-ses-agendas-sur-thunderbird/docs.md
new file mode 100644
index 0000000..38fc3f1
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/08.8-nextcloud-et-client-mail-thundebird/02.8-2-synchroniser-ses-agendas-sur-thunderbird/docs.md
@@ -0,0 +1,99 @@
+---
+title: '8.2 - Synchroniser ses Agendas sur Thunderbird'
+---
+
+! Depuis peu Thunderbird a eu une mise à jour importante vers une nouvelle version numérotée 102, celle-ci vient améliorer bien des éléments de l'application open source. Si votre version est antérieure, je vous conseille vivement dans un premier temps de mettre à jour Thunderbird avant de continuer.
+
+===
+
+!!! Avant cette nouvelle version, pour bien synchroniser les Contacts et Agendas de Nextcloud, étaient nécessaires 3 modules complémentaires (extensions) de Thunderbird, Cardav&Caldav Provider, TBSync et Category Manager. Ce n'est plus necessaire. Il ne reste qu'une extension que je conseille encore de rajouter, Cardbook.
+
+
+La nouvelle interface de Thunderbird ajoute une barre à gauche de sa fenêtre où se trouve les icônes pour les Courriers, les Contacts, les Agendas, les Tâches, les Discussions et autre modules si ajoutés.
+
+## 1. Ouvrez l'onglet **Agendas** en cliquant sur son icône
+
+![Onglet Agendas](https://ahp.li/33cee7d4eee444e0eb1e.png)
+
+L'onglet des Agendas s'ouvre
+
+## 2. Cliquez sur créer un nouvel Agenda
+
+En cliquant sur le **+** devant Agendas
+
+![créer un nouvel agenda](https://ahp.li/0c4efdc235ff2ff48d94.png)
+
+
+une fenêtre popup va s'ouvrir, choisissez Sur le réseau
+
+![créer un nouvel agenda sur le réseau](https://ahp.li/4cac5454c4ea293a4442.png)
+
+
+Puis _Suivant_, Une nouvelle fenêtre s'ouvre, vous devez mettre votre nom d'utilisateur et l'adresse internet de votre instance Nextcloud (ici celle du Cloud Linux07)
+
+![nouvel agenda identifiant et url](https://ahp.li/2019971b484b1b0010f1.png)
+
+Puis cliquez sur _Chercher de Agendas_, une fenêtre popup va vous demander de vous authentifier avec votre mot de passe de l'instance Nextcloud
+
+![nouvel agenda authentifiaction nextcloud](https://ahp.li/206c4b9611bd91e9512f.png)
+
+Mettez votre mot de passe et pensez à cocher _Utiliser le gestionnaire de mot de passe pour se souvenir de ce mot de passe_
+
+Attendre un peu qu'il recherche les agendas, vous allez voir la liste des Agendas et ceux partagés avec vous que vous avez sur votre instance Nextcloud.
+
+![Séléctions Agendas](https://ahp.li/58b6daaabc0a403d0e53.png)
+
+Vous avez le choix de cocher ceux que vous voulez synchroniser avec Thunderbird en les gardant cochés. Il y aussi un onglet Propriétés, qui est aussi accessible plus tard.
+
+Cliquez ensuite sur _S'abonner_.
+
+
+Les Agendas sélectionner vont apparaître. Voilà c'est fait !
+
+## L'interface et les options
+
+Une fois les agendas importés.
+
+![agendas thunderbird](https://ahp.li/a40d5c190322293d1c02.png)
+
+1. Dans la barre de navigation en haut on a _synchroniser_ (synchroniser les agendas entre Thunderbird et l'instance Nextcloud),_Évenements_ (créer un nouvel événement), _Tâche_ (ajouter une tâche, si l'agenda est un agenda avec des tâches), _Modifier_ (modifier un événement sur le calendrier, cliquer dessus auparavant), _Supprimer_ (supprimer un événement, cliquer dessus auparavant).
+2. Un espace ou sont listés les évenements.
+3. Un outil de navigation pour avancer ou reculer dans le temps.
+
+![choix liste événement et options](https://ahp.li/d939ed5298d38e157058.png)
+
+
+1. En haut à droite, vous avez un bouton pour les synchroniser,après un changement effectué.
+2. Un choix pour la liste des événements à voir au-dessus du calendrier (tous, du jour, semaine, mois, futurs, etc...)
+3. devant une barre de recherche par mot clé (avec une loupe).
+4. au-dessus de l'agenda, des onglets pour une vue par journée, semaine, multisemaine ou mois
+
+En se positionnant sur un agenda et avec clic droit on a des options qui apparraîssent
+
+![agenda choix clic droit propriétés](https://ahp.li/5cacdcdb77f607adf0af.png)
+
+Choix d'affichages (vous pouvez aussi simplement cliquer sur l'icône avec un oeil devant un agenda pour le masquer ou le voir), nouvel Agenda (créer un nouvel Agenda), se désabonner de l'agenda, exporter l'agenda, publier l'agenda, puis synchroniser les agendas et Propriétés.
+
+Cliquez sur Propriétés de l'agenda, une fenêtre s'ouvre pour modifier un agenda
+
+![modifier agenda](https://ahp.li/8be28aa21148a581a03e.png)
+
+Vous pouvez changer le nom de l'agenda, changer sa couleur, choisir le temps imparti avant l'actualisation de l'agenda (sa synchronisation), vous pouvez le lier à une autre adresse mail si vous en avez plusieurs configurées, puis des réglages pour les notifications.
+Cliquer sur OK, une fois fini.
+
+Pour créer un événement, vous pouvez aussi simplement faire un double clic dans une date choisie du calendrier, une fenêtre va s'ouvrir pour sa création.
+
+![créer événement](https://ahp.li/afc3cb0443768ca689ab.png)
+
+Vous pouvez choisir
+* à quel Agenda attribuer cet événement,
+* le Titre,
+* le Lieu,
+* la Catégorie (vous pouvez créer aussi de catégories d'événements),
+* si c'est sur la journée entière cochez Évenement sur la journée, sinon date et heure du début et date et heure de la fin,
+* Répétition (permet de répéter un événement sur un choix de laps de temps)
+* Description de l'événement
+
+! Quand vous êtes satisfait, n'oubliez pas de cliquer sur _Enregistrer et fermer_ dans la barre du haut, sinon vous aurez perdu votre édition...
+
+Il reste les fonctions comme inviter des participants, confidentialité ou joindre, qui peuvent avoir un intérêt, mais pas documenter ici pour l'instant.
diff --git a/pages/03.cloud-linux07-nextcloud/08.8-nextcloud-et-client-mail-thundebird/docs.md b/pages/03.cloud-linux07-nextcloud/08.8-nextcloud-et-client-mail-thundebird/docs.md
new file mode 100644
index 0000000..3132245
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/08.8-nextcloud-et-client-mail-thundebird/docs.md
@@ -0,0 +1,11 @@
+---
+title: '8 - Nextcloud et client mail Thundebird'
+taxonomy:
+ category:
+ - docs
+---
+
+Nextcloud permet la synchronisation des modules **Contacts** et **Agendas** avec une boîte mail Thunbderbird.
+
+
+!!! Avec autre client mail aussi ce doit être possible, je me contenterai ici de documenter comment utiliser Thunderbird qui est un logiciel libre performant qui mérite d'être utilisé.
diff --git a/pages/03.cloud-linux07-nextcloud/chapter.md b/pages/03.cloud-linux07-nextcloud/chapter.md
new file mode 100644
index 0000000..6eb90c0
--- /dev/null
+++ b/pages/03.cloud-linux07-nextcloud/chapter.md
@@ -0,0 +1,32 @@
+---
+title: 'Cloud Linux07 (Nextcloud)'
+taxonomy:
+ category:
+ - docs
+child_type: chapter
+---
+
+# Cloud Linux07
+
+Le **Cloud Linux07** est un service pour **Stocker**,**organiser**, **partager** et **sécuriser** toutes sortes de documents est désormais indispensable pour de nombreux utilisateurs. Le Cloud fournit une solution flexible grâce à laquelle il est possible d’avoir accès à ces fichiers depuis n’importe quel appareil connecté. Si le stockage sur le Cloud apporte une réponse concrète à un besoin bien réel, les services proposant diverses versions et interfaces pour ce type de stockage sont légion.
+
+Ce service utilise le logiciel libre [Nextcloud](https://fr.wikipedia.org/wiki/Nextcloud/). Le logiciel **Nextcloud** comporte ainsi ses propres spécificités.
+Sur celui-ci nous avons ajouter ces extensions
+* [Contacts](https://apps.nextcloud.com/apps/contacts) pour gérer ses contacts,
+* [Agenda](https://apps.nextcloud.com/apps/calendar) pour créer des Agendas,
+* [Talk](https://apps.nextcloud.com/apps/spreed) pour créer des discussions (réservé aux adhérents),
+* [Notes](https://apps.nextcloud.com/apps/notes) pour créer des notes,
+* [Formulaires](https://apps.nextcloud.com/apps/forms) pour créer des formulaires,
+* [Tâches](https://apps.nextcloud.com/apps/tasks) pour créer des tâches,
+* [Deck](https://apps.nextcloud.com/apps/deck) sorte de kaban, outil de planification pour s'organiser des tâches intégré à Nextcloud,
+* [Passwords](https://apps.nextcloud.com/apps/passwords) gestionnaire de mots de passe sécurisé, permettant aussi de les partager,
+* [OnlyOffice](https://apps.nextcloud.com/apps/onlyoffice) suite bureautique pour l'édition collaborative (réservé aux adhérents),
+* [Ownpad](https://apps.nextcloud.com/apps/ownpad) permet de créer et d'ouvrir des documents collaboratifs Etherpad et Ethercalc,
+* [Mind Map](https://apps.nextcloud.com/apps/files_mindmap) une méthode pratique et rapide de rassembler vos idées au fur et à mesure, qu'elles vous viennent à l'esprit, sans vous soucier de leur ordre initial, puis de les structurer visuellement pour faciliter leur analyse et leur mémorisation,
+* [Excalidraw Integration](https://apps.nextcloud.com/apps/integration_excalidraw) integration de diagrammes avec Excalidraw.
+
+OnlyOffice est maintenant connecté sur le serveur installé sur le même serveur que les services Linux07. Les textes collaboratifs Etherpad aussi sont sur le serveur.
+
+Toutes ces applications et les données peuvent être partagées et/ou synchronisées avec des applications clientes sur un ordinateur de bureau et/ou un mobile.
+
+! Les modules Talk et OnlyOffice sont réservées aux utilisateurs avec une adhésion à l'association...
\ No newline at end of file
diff --git a/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/01.1-1-connexion-a-lespace-mypads/docs.md b/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/01.1-1-connexion-a-lespace-mypads/docs.md
new file mode 100644
index 0000000..c53bd8a
--- /dev/null
+++ b/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/01.1-1-connexion-a-lespace-mypads/docs.md
@@ -0,0 +1,42 @@
+---
+title: '1.1 - Connexion à l''espace Mypads'
+---
+
+! L'espace Mypads est réservé aux utilisateurs Yunohost, donc aux adhérent·e·s à l'association Linux07
+
+Dans un premier temps, il faut se connecter au [portail linux07](https://linux07.fr).
+
+![Connexion portail Yunohost](https://ahp.li/ef8617e1cf3198a5ad20.png)
+
+Une fois connecté vous aurez dans cet espace plusieurs tuiles avec les services disponibles de Yunohost.
+
+Les tuiles ont été renommée avec un nom court correspondant à leur fonction pour plus de lisibilité. Pour Etherpad_Mypads, il s'agit de la tuile **Textes Collaboratifs**
+
+![Portail Linux07 Tuiles](https://ahp.li/6d1d69f027d8d9889828.png)
+
+!!! Le portail dans cet environnement Yunohost permet d'être connecté au **SSO**, vous êtes ainsi automatiquement authentifié pour les services **Cloud Linux07**(Nextcloud) et à votre boîte **Mails**(Roundcube). Pour l'espace **Mypads** vous devez néanmoins vous authentifier de nouveau avec le même nom d"utilisateur et même mot de passe.
+
+En cliquant sur la tuile, vous arrivez sur une page avec ces possibilités
+
+![Choix pad ou Mypads](https://ahp.li/8b089751145dc871a7db.png)
+
+1. **Créer ou ouvrir un bloc-notes intitulé** permet de créer un texte collaboratif (public) avec le nom que vous choisirez ou d'en ouvrir un déjà créer avec le même nom.
+2. **MyPads** permet quand à lui de vous connecter dans votre espace personnel de textes collaboratifs Mypads.
+
+En cliquant sur MyPads vous devrez vous authentifié avec votre nom d'utilisateur Yunohost et votre mot de passe
+
+![Connexion MyPads](https://ahp.li/0283c2d2590b22c00c92.png)
+
+Une fois connecter vous arrivez sur l'onglet **Mes Dossiers**
+
+![Mypads Mes Dossiers](https://ahp.li/73b7fdf2a15271be2bea.png)
+
+1. Onglets Mes Dossiers & Pads, Mes Favoris, Mes listes Utilisateurs, Mon Profil, Déconnexion
+2. Créer un nouveau dossier
+3. Un champ de recherche par nom pour les Dossiers
+4. Une colonne avec les Dossiers créés avec devant une icône en forme de clé pour modifier les paramètres du Dossier et une autre icône pour supprimer le dossier
+5. Une colonne des Pads(textes) dans le dossier avec leur nombre une icône **+** pour en ajouter les permissions des pads (par défaut celles du dossier), le Nombre d'administrateurs du dossier, un **+** pour en ajouter, le nombre d'utilisateurs et un **+** pour en ajouter.
+6. Une colonne Labels, des étiquettes que l'on peut ajouter au dossier
+7. Cette icône avec le logo de Linux07 sert à revenir au portail utilisateur Yunohost. Elle est présente aussi dans d'autres applications comme le Cloud ou les Mails, vous pouvez la déplacer avec un clic droit dessus et en laissant appuyer en déplaçant la souris ou le pad.
+
+Vous avez toujours une Aide qui s'affichera pour vous guider à droite (que l'on peut désactiver dans son profil).
diff --git a/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/02.1-2-les-dossiers-dans-mypads/docs.md b/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/02.1-2-les-dossiers-dans-mypads/docs.md
new file mode 100644
index 0000000..3dc4138
--- /dev/null
+++ b/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/02.1-2-les-dossiers-dans-mypads/docs.md
@@ -0,0 +1,26 @@
+---
+title: '1.2 - Les Dossiers dans Mypads'
+taxonomy:
+ category:
+ - docs
+---
+
+En cliquant sur un dossier, on va voir la liste des textes(pads) en-dessous.
+
+![Dossier Mypads](https://ahp.li/c5386ee82968e8553586.png)
+
+Les détails d’un dossier vous montrent :
+
+* les options définies lorsque le dossier a été créé ou mis à jour ;
+* la liste des pads créés pour ce dossier ;
+* et la liste des administrateurs et utilisateurs de ce dossier.
+
+À partir de là, vous pouvez :
+
+* créer de nouveaux pads, les modifier, les supprimer ou les mettre en favoris ;
+* partager l’administration de votre dossier avec d’autres utilisateurs ;
+* inviter d’autres utilisateurs à voir et participer aux pads de ce dossier.
+
+En dessous en descendant, vous avez la liste des Administrateurs et Utilisateurs et la possibilité d'en ajouter ou d'en supprimer
+
+![Administrateurs & Utilisateurs](https://ahp.li/e5a35af69fbffadc3ff5.png)
diff --git a/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/03.1-3-les-onglets-dans-mypads/docs.md b/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/03.1-3-les-onglets-dans-mypads/docs.md
new file mode 100644
index 0000000..4db5bb8
--- /dev/null
+++ b/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/03.1-3-les-onglets-dans-mypads/docs.md
@@ -0,0 +1,45 @@
+---
+title: '1.3 - Les Onglets dans Mypads'
+taxonomy:
+ category:
+ - docs
+---
+
+## Favoris
+
+La page de favoris vous permet de voir l’ensemble des éléments de MyPads que vous avez mis en favoris et éventuellement de les en supprimer.
+
+## Mes listes utilisateurs
+
+Vous trouverez ici toutes vos listes d’utilisateurs, rangées par date de création. Des informations résumées sont disponibles avec le nom de chaque liste et le nombre d’utilisateurs liés.
+
+Avec les icônes d’actions, situées en haut à droite de chaque liste, vous pouvez modifier ou supprimer les listes. Davantage de détails sont disponibles sur le formulaire d’édition.
+
+! Les utilisateurs doivent avoir des comptes adhérents, on ne peut pas ajouter de personnes extérieures aux listes.
+
+![Liste Utilisateurs](https://ahp.li/bed2b2e6d07a4fba2044.png)
+
+On peut modifier une liste ou en créer une nouvelle en ajoutant des noms d'utilisateurs ou mail.
+
+! Ce doit être des nom d'utilisateurs Yunohost ou des mails liés à l'instance Yunohost ([at] linux07.fr pour les adhérents Linux07) qui ce sont déjà connectés à leur espace MyPads au moins une fois.
+
+
+![Modifier liste utilisateurs](https://ahp.li/04c2d22e822c8dbc44cc.png)
+
+!!!! Les listes utilisateurs permettent ensuite d'être ajoutées à un dossier restreint ou un pad restreint avec les permissions choisies.
+
+
+## Mon profil
+
+Tout changement dans votre profil nécessite votre mot de passe actuel. Merci de noter que :
+
+* vous pouvez modifier toute information en utilisant le champ correspondant ;
+* laisser les champs de mot de passe et de confirmation vides n’aura pas d’effet sur votre mot de passe actuel ;
+
+Ici vous pourrez ajouter une Organisation, choisir votre couleur par défaut pour le surlignage des textes collaboratifs, cacher les blocs d'aide si vous cochez la case correspondante.
+![Profil](https://ahp.li/18acbb1af083e66dfdd3.png)
+
+ ## Déconnexion
+
+ Le bouton de déconnexion ne fonctionne pas toujours. Sinon, vous pouvez revenir au portail adhérent avec l'icône du logo Linux07 et vous déconnecter de l'instance Yunohost. En fermant le navigateur vous serez déconnectés.
+
diff --git a/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/04.1-4-edition-texte-collaboratif-mypads/docs.md b/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/04.1-4-edition-texte-collaboratif-mypads/docs.md
new file mode 100644
index 0000000..f7c5357
--- /dev/null
+++ b/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/04.1-4-edition-texte-collaboratif-mypads/docs.md
@@ -0,0 +1,75 @@
+---
+title: '1.4 - Édition texte collaboratif Mypads'
+taxonomy:
+ category:
+ - docs
+---
+
+## Pad
+
+En cliquant sur un pad vous arriverez vers un éditeur collaboratif de texte
+
+En haut se trouve une barre d'édition avec:
+* caractère Gras,
+* Italique,
+* Surligné,
+* Barré,
+* Liste ordonnée,
+* Liste désordonnée,
+* Indenter
+* Désindenter
+* Annuler la dernière édition
+* Rétablir l'anulation
+* Effacer le surlignage (attention cela ne peut être rétabli par la suite, le surlignage permet de voir qui a éditer des changements, à faire que quand la collaboration est finalisé),
+* Ajouter un tableau,
+* Superscript pour faire de racine carré,
+* Subscript, valeur en dessous,
+* Le Style de la ligne éditée,
+* Annoté la sélection (en sélectionnant une phrase ou un paragraphe on peut ajouter une note)
+
+Devant se trouve un **+** pour voir plus de possibilités:
+* Taille de la police
+* Couleur des caractères
+* Aligner à gauche
+* Centrer
+* Aligner à droite
+* Justifier
+
+==============================================================
+
+![Édition pad](https://ahp.li/c443272fd2a75c9df35b.png)
+
+
+
+1. Les icônes en haut à droite permettent de passer en plein écran ou d'ouvrir dans un nouvel onglet en plein écran aussi.
+ ![Édition Plein écran](https://ahp.li/0687248772c0202d6155.png)
+
+2. Le Style est ce qui permet d'avoir un menu comme ici à droite avec les Titres et sous-titres, on peut ensuite naviguer plus aisèment vers les paragraphes avec ce moyen.
+
+3. En bas à droite des icônes qui permettent:
+ * Afficher le nombre de mots
+ * Importer/Exporter des formats différents
+
+ ![Importer ou Exporter](https://ahp.li/14c3437a919e440d336e.png)
+
+ * Historique Dynamique montre un historique des versions enregistrées auparavant et la possibilté de revenir en arrière
+
+ ![Révision pad](https://ahp.li/9a033e6d9d0aa07220d2.png)
+
+ * Enregistrer la révision
+ * Paramètres du bloc-notes
+
+ ![Paramètres du bloc-notes](https://ahp.li/bd9fcddabdcbbdfa17a2.png)
+
+ * Partager ce bloc-notes qui donne 2 liens, un lien vers le pad (si le pad est restreint, seul les utilisateurs autorisés pourront y accéder en se connectant) et un lien iframe pour ajouter le pad dans un site sur une page web.
+
+ ![lien pad](https://ahp.li/377323934e3c72187d3e.png)
+
+4. Icône des utilisateurs pour ce pad, en cliquant dessus on peut aussi éditer son pseudo et changer sa couleur de surlignage
+
+ ![utilisateurs pad](https://ahp.li/1fc8ec8dbc8cfffe3dea.png)
+
+5. Clavardage, permet de discuter avec les utilisateurs connectés pendant un travail collaboratif, en cliquant dessus une fenêtre de discussion s'ouvre
+
+ ![Clavardage](https://ahp.li/79738322c26c4963b79a.png)
+
diff --git a/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/05.1-5-avancees-et-permissions-mypads/docs.md b/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/05.1-5-avancees-et-permissions-mypads/docs.md
new file mode 100644
index 0000000..45076f8
--- /dev/null
+++ b/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/05.1-5-avancees-et-permissions-mypads/docs.md
@@ -0,0 +1,60 @@
+---
+title: '1.5 - Avancées et Permissions Mypads'
+taxonomy:
+ category:
+ - docs
+---
+
+## Modifier un Dossier
+
+![Modifier un Dossier](https://ahp.li/abaea5fed9144a8ed65e.png)
+
+### Accès
+
+Vous avez le choix entre trois niveaux de visibilité. Cela impactera tous les pads liés :
+
+* restreint, le choix par défaut : l’accès aux pads sera limité à une liste d’utilisateurs invités que vous aurez choisis ;
+* privé : dans ce mode vous aurez à saisir un mot de passe qui sera vérifié pour autoriser l’accès ;
+* public : dans ce mode, tous les pads sont publics, les utilisateurs n’ont alors besoin que de l’adresse URL pour y accéder.
+
+### Lecture seule
+
+Si vous activez la lecture seule, tous les pads attachés conserveront leur dernier état connu et ne pourront être édités. Notez que la visibilité fonctionnera toujours.
+
+### Labels
+
+Vous pouvez associer des labels à cet élément en cliquant sur le champ correspondant et en les sélectionnant un par un.
+
+Pour créer un nouveau label, saisissez-le et appuyez sur la touche ENTRÉE ou cliquez sur le bouton « Ok ». Une fois le label ajouté, il sera automatiquement sélectionné sur ce formulaire.
+
+Vous pouvez supprimer un label en cliquant sur la croix située à sa droite.
+
+## Modifier un Pad
+
+![Modifier un pad](https://ahp.li/63076c662e920198972c.png)
+
+Par défaut les pads créés ont les mêmes paramètres que le dossier, pour les changer on peut déchocher **Paramètres du Dossier**
+
+![Modifier paramètres pad par défaut](https://ahp.li/a16b06f5925a6e512a11.png)
+
+Dans ce cas comme pour un dossier:
+
+### Accès
+
+Vous avez le choix entre trois niveaux de visibilité. Cela impactera tous les pads liés :
+
+* restreint, le choix par défaut : l’accès aux pads sera limité à une liste d’utilisateurs invités que vous aurez choisis ;
+* privé : dans ce mode vous aurez à saisir un mot de passe qui sera vérifié pour autoriser l’accès ;
+* public : dans ce mode, tous les pads sont publics, les utilisateurs n’ont alors besoin que de l’adresse URL pour y accéder.
+
+### Lecture seule
+
+Si vous activez la lecture seule, tous les pads attachés conserveront leur dernier état connu et ne pourront être édités. Notez que la visibilité fonctionnera toujours.
+
+### Labels
+
+Vous pouvez associer des labels à cet élément en cliquant sur le champ correspondant et en les sélectionnant un par un.
+
+Pour créer un nouveau label, saisissez-le et appuyez sur la touche ENTRÉE ou cliquez sur le bouton « Ok ». Une fois le label ajouté, il sera automatiquement sélectionné sur ce formulaire.
+
+Vous pouvez supprimer un label en cliquant sur la croix située à sa droite.
\ No newline at end of file
diff --git a/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/chapter.md b/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/chapter.md
new file mode 100644
index 0000000..65f52b5
--- /dev/null
+++ b/pages/04.textes-colloratifs-linux07-etherpad_mypads/05.1-mypads/chapter.md
@@ -0,0 +1,12 @@
+---
+title: '1 - Mypads'
+taxonomy:
+ category:
+ - docs
+---
+
+MyPads est une extension qui permet de gérer un espace avec des dossiers et des Textes collaboratifs et de créer des groupes privés ou public de collaboration.
+
+!!! Avec Yunohost, seuls les utilisateurs Yunohost ont accès à leur espace dédié de collaboration.
+
+!!!! Cela ne les empêchent pas de créer dans leur espace un texte Public ouvert à la collaboration avec des personnes non-inscrites.
\ No newline at end of file
diff --git a/pages/04.textes-colloratifs-linux07-etherpad_mypads/chapter.md b/pages/04.textes-colloratifs-linux07-etherpad_mypads/chapter.md
new file mode 100644
index 0000000..f0091d9
--- /dev/null
+++ b/pages/04.textes-colloratifs-linux07-etherpad_mypads/chapter.md
@@ -0,0 +1,30 @@
+---
+title: 'Textes Colloratifs Linux07 (Etherpad_Mypads)'
+taxonomy:
+ category:
+ - docs
+child_type: docs
+---
+
+## Etherpad
+
+Etherpad est un éditeur de texte libre en ligne fonctionnant en mode collaboratif et en temps réel. Il permet à plusieurs personnes de partager l'élaboration simultanée d'un texte, et d'en discuter en parallèle, via une messagerie instantanée. Il peut avoir des usages pédagogiques, notamment pour l'apprentissage collaboratif.
+
+Le système ne requiert ni installation ni inscription, il suffit d'avoir une connexion Internet et un navigateur web, puisque c'est une application en ligne. Etherpad (la partie reçue par l'ordinateur client) est écrit en JavaScript.
+
+N'importe quel utilisateur peut modifier un document, nommé pad. Chaque pad a sa propre URL, et chaque personne qui connaît ce lien peut modifier le contenu du pad et participer à la messagerie instantanée associée. Chaque participant est identifié par une couleur et un nom ou pseudo.
+
+Le logiciel enregistre automatiquement le document, à très courts intervalles, ce qui permet à tous les participants d'avoir l'impression d'éditer instantanément entre eux. Ils peuvent aussi enregistrer des versions spécifiquement, des « images » (enregistrement à un moment donné de l'état actuel du document). Il est possible d'importer et de télécharger le document aux formats HTML, Open Document (OpenOffice ou LibreOffice), Microsoft Word, ou PDF.
+
+Ainsi, les contributions de chacun apparaissent immédiatement sur l'écran de tous les participants, et chaque ajout qu'il fait est signalé par cette couleur.
+
+Une fenêtre de messagerie instantanée est également disponible, elle aussi utilisant le système de couleur dans le nom des expéditeurs. Il est possible de la laisser sur le côté droit de l'écran, mais elle peut être cachée et invisible pour l'utilisateur s’il le souhaite.
+
+_source: Wikipédia_
+
+## MyPads
+
+MyPads est une extension qui permet de créer des groupes privés de collaboration avec Etherpad.
+
+!!! Avec Yunohost, seuls les utilisateurs Yunohost ont accès à leur espace dédié de collaboration.
+!!! Cela ne les empêchent pas de créer dans leur espace Mypads un texte Public ouvert à la collaboration avec des personnes non-inscrites.
diff --git a/pages/typography/default.md b/pages/typography/default.md
new file mode 100644
index 0000000..aef3eff
--- /dev/null
+++ b/pages/typography/default.md
@@ -0,0 +1,156 @@
+---
+title: Typography
+published: false
+---
+
+! Details on the full capabilities of Spectre.css can be found in the [Official Spectre Documentation](https://picturepan2.github.io/spectre/elements.html)
+
+The [Quark theme](https://github.com/getgrav/grav-theme-quark) is the new default theme for Grav built with [Spectre.css](https://picturepan2.github.io/spectre/) the lightweight, responsive and modern CSS framework. Spectre provides basic styles for typography, elements, and a responsive layout system that utilizes best practices and consistent language design.
+
+### Headings
+
+# H1 Heading `40px`
+
+## H2 Heading `32px`
+
+### H3 Heading `28px`
+
+#### H4 Heading `24px`
+
+##### H5 Heading `20px`
+
+###### H6 Heading `16px`
+
+```html
+# H1 Heading
+# H1 Heading `40px``
+
+H1 Heading
+```
+
+### Paragraphs
+
+Lorem ipsum dolor sit amet, consectetur [adipiscing elit. Praesent risus leo, dictum in vehicula sit amet](#), feugiat tempus tellus. Duis quis sodales risus. Etiam euismod ornare consequat.
+
+Climb leg rub face on everything give attitude nap all day for under the bed. Chase mice attack feet but rub face on everything hopped up on goofballs.
+
+### Markdown Semantic Text Elements
+
+**Bold** `**Bold**`
+
+_Italic_ `_Italic_`
+
+~~Deleted~~ `~~Deleted~~`
+
+`Inline Code` `` `Inline Code` ``
+
+### HTML Semantic Text Elements
+
+I18N ``
+
+Citation ``
+
+Ctrl + S ``
+
+TextSuperscripted ``
+
+TextSubscripted ``
+
+Underlined ``
+
+Highlighted ``
+
+20:14 ``
+
+x = y + 2 ``
+
+### Blockquote
+
+> The advance of technology is based on making it fit in so that you don't really even notice it,
+> so it's part of everyday life.
+>
+> - Bill Gates
+
+```markdown
+> The advance of technology is based on making it fit in so that you don't really even notice it,
+> so it's part of everyday life.
+>
+> - Bill Gates
+```
+
+### Unordered List
+
+* list item 1
+* list item 2
+ * list item 2.1
+ * list item 2.2
+ * list item 2.3
+* list item 3
+
+```markdown
+* list item 1
+* list item 2
+ * list item 2.1
+ * list item 2.2
+ * list item 2.3
+* list item 3
+```
+
+### Ordered List
+
+1. list item 1
+1. list item 2
+ 1. list item 2.1
+ 1. list item 2.2
+ 1. list item 2.3
+1. list item 3
+
+```markdown
+1. list item 1
+1. list item 2
+ 1. list item 2.1
+ 1. list item 2.2
+ 1. list item 2.3
+1. list item 3
+```
+
+### Table
+
+| Name | Genre | Release date |
+| :-------------------------- | :---------------------------: | -------------------: |
+| The Shawshank Redemption | Crime, Drama | 14 October 1994 |
+| The Godfather | Crime, Drama | 24 March 1972 |
+| Schindler's List | Biography, Drama, History | 4 February 1994 |
+| Se7en | Crime, Drama, Mystery | 22 September 1995 |
+
+```markdown
+| Name | Genre | Release date |
+| :-------------------------- | :---------------------------: | -------------------: |
+| The Shawshank Redemption | Crime, Drama | 14 October 1994 |
+| The Godfather | Crime, Drama | 24 March 1972 |
+| Schindler's List | Biography, Drama, History | 4 February 1994 |
+| Se7en | Crime, Drama, Mystery | 22 September 1995 |
+```
+
+### Notices
+
+The notices styles are actually provided by the `markdown-notices` plugin but are useful enough to include here:
+
+! This is a warning notification
+
+!! This is a error notification
+
+!!! This is a default notification
+
+!!!! This is a success notification
+
+```markdown
+! This is a warning notification
+
+!! This is a error notification
+
+!!! This is a default notification
+
+!!!! This is a success notification
+```
+
diff --git a/themes/.gitkeep b/themes/.gitkeep
new file mode 100644
index 0000000..8efbf1f
--- /dev/null
+++ b/themes/.gitkeep
@@ -0,0 +1 @@
+/* @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. */
diff --git a/themes/documentations-linux07/CHANGELOG.md b/themes/documentations-linux07/CHANGELOG.md
new file mode 100644
index 0000000..df44e9f
--- /dev/null
+++ b/themes/documentations-linux07/CHANGELOG.md
@@ -0,0 +1,5 @@
+# v0.1.0
+## 03/10/2023
+
+1. [](#new)
+ * ChangeLog started...
diff --git a/themes/documentations-linux07/LICENSE b/themes/documentations-linux07/LICENSE
new file mode 100644
index 0000000..ab84125
--- /dev/null
+++ b/themes/documentations-linux07/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2023 Rodolphe Robles
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/themes/documentations-linux07/README.md b/themes/documentations-linux07/README.md
new file mode 100644
index 0000000..4f8cdc3
--- /dev/null
+++ b/themes/documentations-linux07/README.md
@@ -0,0 +1,7 @@
+# Documentations Linux07 Theme
+
+The **Documentations Linux07** Theme is for [Grav CMS](http://github.com/getgrav/grav). This README.md file should be modified to describe the features, installation, configuration, and general usage of this theme.
+
+## Description
+
+Thème documentations pour les services numériques Linux07
diff --git a/themes/documentations-linux07/blueprints.yaml b/themes/documentations-linux07/blueprints.yaml
new file mode 100644
index 0000000..b7b849e
--- /dev/null
+++ b/themes/documentations-linux07/blueprints.yaml
@@ -0,0 +1,66 @@
+name: Documentations Linux07
+slug: documentations-linux07
+type: theme
+version: 0.1.0
+description: Thème documentations pour les services numériques Linux07
+icon: rebel
+author:
+ name: Rodolphe Robles
+ email: rodolphe@linux07.fr
+homepage: https://gitea.linux07.fr/Linux07/Documentations-Linux07
+demo: http://demo.yoursite.com
+keywords: grav, theme, etc
+bugs: https://gitea.linux07.fr/Linux07/Documentations-Linux07/issues
+readme: https://gitea.linux07.fr/Linux07/Documentations-Linux07/src/branch/main/README.md
+license: MIT
+
+dependencies:
+ - { name: grav, version: '>=1.6.0' }
+
+form:
+ validation: loose
+ fields:
+ top_level_version:
+ type: toggle
+ label: Top Level Version
+ highlight: 1
+ default: 0
+ options:
+ 1: Enabled
+ 0: Disabled
+ validate:
+ type: bool
+
+ home_url:
+ type: text
+ label: Home URL
+ placeholder: http://getgrav.org
+ validate:
+ type: text
+
+ google_analytics_code:
+ type: text
+ label: Google Analytics Code
+ placeholder: UA-XXXXXXXX-X
+ validate:
+ type: text
+
+ github.position:
+ type: select
+ size: medium
+ classes: fancy
+ label: GitHub Position
+ options:
+ top: Top
+ bottom: Bottom
+ off: Off
+
+ github.tree:
+ type: text
+ label: GitHub Tree
+ default: https://gitea.linux07.fr/Linux07/Documentations-Linux07/src/branch/main/
+
+ github.commits:
+ type: text
+ label: GitHub Commits
+ default: https://gitea.linux07.fr/Linux07/Documentations-Linux07/commits/branch/main/
diff --git a/themes/documentations-linux07/blueprints/chapter.yaml b/themes/documentations-linux07/blueprints/chapter.yaml
new file mode 100644
index 0000000..baa2b91
--- /dev/null
+++ b/themes/documentations-linux07/blueprints/chapter.yaml
@@ -0,0 +1,4 @@
+title: Chapter
+'@extends':
+ type: default
+ context: blueprints://pages
diff --git a/themes/documentations-linux07/blueprints/docs.yaml b/themes/documentations-linux07/blueprints/docs.yaml
new file mode 100644
index 0000000..f1d430a
--- /dev/null
+++ b/themes/documentations-linux07/blueprints/docs.yaml
@@ -0,0 +1,4 @@
+title: Docs
+'@extends':
+ type: default
+ context: blueprints://pages
diff --git a/themes/documentations-linux07/documentations-linux07.php b/themes/documentations-linux07/documentations-linux07.php
new file mode 100644
index 0000000..f0c459e
--- /dev/null
+++ b/themes/documentations-linux07/documentations-linux07.php
@@ -0,0 +1,9 @@
+> NOTE: This theme is a modular component for Grav which requires the [Grav](http://github.com/getgrav/grav), [Error](https://github.com/getgrav/grav-theme-error) and [Problems](https://github.com/getgrav/grav-plugin-problems) plugins.
+
+# Updating
+
+As development for the Learn2 theme continues, new versions may become available that add additional features and functionality, improve compatibility with newer Grav releases, and generally provide a better user experience. Updating Learn2 is easy, and can be done through Grav's GPM system, as well as manually.
+
+## GPM Update (Preferred)
+
+The simplest way to update this theme is via the [Grav Package Manager (GPM)](http://learn.getgrav.org/advanced/grav-gpm). You can do this with this by navigating to the root directory of your Grav install using your system's Terminal (also called command line) and typing the following:
+
+ bin/gpm update learn2
+
+This command will check your Grav install to see if your Learn2 theme is due for an update. If a newer release is found, you will be asked whether or not you wish to update. To continue, type `y` and hit enter. The theme will automatically update and clear Grav's cache.
+
+## Manual Update
+
+Manually updating Learn2 is pretty simple. Here is what you will need to do to get this done:
+
+* Delete the `your/site/user/themes/learn2` directory.
+* Download the new version of the Learn2 theme from either [GitHub](https://github.com/getgrav/grav-theme-learn2) or [GetGrav.org](http://getgrav.org/downloads/themes#extras).
+* Unzip the zip file in `your/site/user/themes` and rename the resulting folder to `learn2`.
+* Clear the Grav cache. The simplest way to do this is by going to the root Grav directory in terminal and typing `bin/grav clear-cache`.
+
+> Note: Any changes you have made to any of the files listed under this directory will also be removed and replaced by the new set. Any files located elsewhere (for example a YAML settings file placed in `user/config/themes`) will remain intact.
+
+## Features
+
+* Lightweight and minimal for optimal performance
+* Fully responsive with off-page mobile navigation
+* SCSS based CSS source files for easy customization
+* Built specifically for providing easy to read documentation
+* Fontawesome icon support
+
+### Supported Page Templates
+
+* "Docs" template
+* "Chapter" template
+* Error view template
+
+
+## Setup
+
+If you want to set Learn2 as the default theme, you can do so by following these steps:
+
+* Navigate to `/your/site/grav/user/config`.
+* Open the **system.yaml** file.
+* Change the `theme:` setting to `theme: learn2`.
+* Save your changes.
+* Clear the Grav cache. The simplest way to do this is by going to the root Grav directory in Terminal and typing `bin/grav clear-cache`.
+
+Once this is done, you should be able to see the new theme on the frontend. Keep in mind any customizations made to the previous theme will not be reflected as all of the theme and templating information is now being pulled from the **learn2** folder.
diff --git a/themes/learn2/blueprints.yaml b/themes/learn2/blueprints.yaml
new file mode 100644
index 0000000..7f767d4
--- /dev/null
+++ b/themes/learn2/blueprints.yaml
@@ -0,0 +1,66 @@
+name: Learn2
+slug: learn2
+type: theme
+version: 1.8.2
+description: "Learn2 is a new modern documentation theme for Grav"
+icon: book
+author:
+ name: Team Grav
+ email: devs@getgrav.org
+ url: http://getgrav.org
+homepage: https://github.com/getgrav/grav-theme-learn2
+demo: http://learn.getgrav.org
+keywords: heme, docs, modern, fast, responsive, html5, css3
+bugs: https://github.com/getgrav/grav-theme-learn2/issues
+license: MIT
+
+dependencies:
+ - { name: grav, version: '>=1.5.10' }
+
+form:
+ validation: loose
+ fields:
+ top_level_version:
+ type: toggle
+ label: Top Level Version
+ highlight: 1
+ default: 0
+ options:
+ 1: Enabled
+ 0: Disabled
+ validate:
+ type: bool
+
+ home_url:
+ type: text
+ label: Home URL
+ placeholder: http://getgrav.org
+ validate:
+ type: text
+
+ google_analytics_code:
+ type: text
+ label: Google Analytics Code
+ placeholder: UA-XXXXXXXX-X
+ validate:
+ type: text
+
+ github.position:
+ type: select
+ size: medium
+ classes: fancy
+ label: GitHub Position
+ options:
+ top: Top
+ bottom: Bottom
+ off: Off
+
+ github.tree:
+ type: text
+ label: GitHub Tree
+ default: https://github.com/getgrav/grav-skeleton-rtfm-site/blob/develop/
+
+ github.commits:
+ type: text
+ label: GitHub Commits
+ default: https://github.com/getgrav/grav-skeleton-rtfm-site/commits/develop/
diff --git a/themes/learn2/blueprints/chapter.yaml b/themes/learn2/blueprints/chapter.yaml
new file mode 100644
index 0000000..baa2b91
--- /dev/null
+++ b/themes/learn2/blueprints/chapter.yaml
@@ -0,0 +1,4 @@
+title: Chapter
+'@extends':
+ type: default
+ context: blueprints://pages
diff --git a/themes/learn2/blueprints/docs.yaml b/themes/learn2/blueprints/docs.yaml
new file mode 100644
index 0000000..f1d430a
--- /dev/null
+++ b/themes/learn2/blueprints/docs.yaml
@@ -0,0 +1,4 @@
+title: Docs
+'@extends':
+ type: default
+ context: blueprints://pages
diff --git a/themes/learn2/css-compiled/nucleus.css b/themes/learn2/css-compiled/nucleus.css
new file mode 100644
index 0000000..ed2c0a3
--- /dev/null
+++ b/themes/learn2/css-compiled/nucleus.css
@@ -0,0 +1,617 @@
+*, *::before, *::after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box; }
+
+@-webkit-viewport {
+ width: device-width; }
+@-moz-viewport {
+ width: device-width; }
+@-ms-viewport {
+ width: device-width; }
+@-o-viewport {
+ width: device-width; }
+@viewport {
+ width: device-width; }
+html {
+ font-size: 100%;
+ -ms-text-size-adjust: 100%;
+ -webkit-text-size-adjust: 100%; }
+
+body {
+ margin: 0; }
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+ display: block; }
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ vertical-align: baseline; }
+
+audio:not([controls]) {
+ display: none;
+ height: 0; }
+
+[hidden],
+template {
+ display: none; }
+
+a {
+ background: transparent;
+ text-decoration: none; }
+
+a:active,
+a:hover {
+ outline: 0; }
+
+abbr[title] {
+ border-bottom: 1px dotted; }
+
+b,
+strong {
+ font-weight: bold; }
+
+dfn {
+ font-style: italic; }
+
+mark {
+ background: #FFFF27;
+ color: #333; }
+
+sub,
+sup {
+ font-size: 0.8rem;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline; }
+
+sup {
+ top: -0.5em; }
+
+sub {
+ bottom: -0.25em; }
+
+img {
+ border: 0;
+ max-width: 100%; }
+
+svg:not(:root) {
+ overflow: hidden; }
+
+figure {
+ margin: 1em 40px; }
+
+hr {
+ height: 0; }
+
+pre {
+ overflow: auto; }
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit;
+ font: inherit;
+ margin: 0; }
+
+button {
+ overflow: visible; }
+
+button,
+select {
+ text-transform: none; }
+
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer; }
+
+button[disabled],
+html input[disabled] {
+ cursor: default; }
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0; }
+
+input {
+ line-height: normal; }
+
+input[type="checkbox"],
+input[type="radio"] {
+ padding: 0; }
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto; }
+
+input[type="search"] {
+ -webkit-appearance: textfield; }
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none; }
+
+legend {
+ border: 0;
+ padding: 0; }
+
+textarea {
+ overflow: auto; }
+
+optgroup {
+ font-weight: bold; }
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ table-layout: fixed;
+ width: 100%; }
+
+tr, td, th {
+ vertical-align: middle; }
+
+th, td {
+ padding: 0.425rem 0; }
+
+th {
+ text-align: left; }
+
+.container {
+ width: 75em;
+ margin: 0 auto;
+ padding: 0; }
+ @media only all and (min-width: 60em) and (max-width: 74.938em) {
+ .container {
+ width: 60em; } }
+ @media only all and (min-width: 48em) and (max-width: 59.938em) {
+ .container {
+ width: 48em; } }
+ @media only all and (min-width: 30.063em) and (max-width: 47.938em) {
+ .container {
+ width: 30em; } }
+ @media only all and (max-width: 30em) {
+ .container {
+ width: 100%; } }
+
+.grid {
+ display: -webkit-box;
+ display: -moz-box;
+ display: box;
+ display: -webkit-flex;
+ display: -moz-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-flow: row;
+ -moz-flex-flow: row;
+ flex-flow: row;
+ list-style: none;
+ margin: 0;
+ padding: 0; }
+ @media only all and (max-width: 47.938em) {
+ .grid {
+ -webkit-flex-flow: row wrap;
+ -moz-flex-flow: row wrap;
+ flex-flow: row wrap; } }
+
+.block {
+ -webkit-box-flex: 1;
+ -moz-box-flex: 1;
+ box-flex: 1;
+ -webkit-flex: 1;
+ -moz-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ min-width: 0;
+ min-height: 0; }
+ @media only all and (max-width: 47.938em) {
+ .block {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 100%;
+ -moz-flex: 0 100%;
+ -ms-flex: 0 100%;
+ flex: 0 100%; } }
+
+.content {
+ margin: 0.625rem;
+ padding: 0.938rem; }
+
+@media only all and (max-width: 47.938em) {
+ body [class*="size-"] {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 100%;
+ -moz-flex: 0 100%;
+ -ms-flex: 0 100%;
+ flex: 0 100%; } }
+
+.size-1-2 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 50%;
+ -moz-flex: 0 50%;
+ -ms-flex: 0 50%;
+ flex: 0 50%; }
+
+.size-1-3 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 33.33333%;
+ -moz-flex: 0 33.33333%;
+ -ms-flex: 0 33.33333%;
+ flex: 0 33.33333%; }
+
+.size-1-4 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 25%;
+ -moz-flex: 0 25%;
+ -ms-flex: 0 25%;
+ flex: 0 25%; }
+
+.size-1-5 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 20%;
+ -moz-flex: 0 20%;
+ -ms-flex: 0 20%;
+ flex: 0 20%; }
+
+.size-1-6 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 16.66667%;
+ -moz-flex: 0 16.66667%;
+ -ms-flex: 0 16.66667%;
+ flex: 0 16.66667%; }
+
+.size-1-7 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 14.28571%;
+ -moz-flex: 0 14.28571%;
+ -ms-flex: 0 14.28571%;
+ flex: 0 14.28571%; }
+
+.size-1-8 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 12.5%;
+ -moz-flex: 0 12.5%;
+ -ms-flex: 0 12.5%;
+ flex: 0 12.5%; }
+
+.size-1-9 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 11.11111%;
+ -moz-flex: 0 11.11111%;
+ -ms-flex: 0 11.11111%;
+ flex: 0 11.11111%; }
+
+.size-1-10 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 10%;
+ -moz-flex: 0 10%;
+ -ms-flex: 0 10%;
+ flex: 0 10%; }
+
+.size-1-11 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 9.09091%;
+ -moz-flex: 0 9.09091%;
+ -ms-flex: 0 9.09091%;
+ flex: 0 9.09091%; }
+
+.size-1-12 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 8.33333%;
+ -moz-flex: 0 8.33333%;
+ -ms-flex: 0 8.33333%;
+ flex: 0 8.33333%; }
+
+@media only all and (min-width: 48em) and (max-width: 59.938em) {
+ .size-tablet-1-2 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 50%;
+ -moz-flex: 0 50%;
+ -ms-flex: 0 50%;
+ flex: 0 50%; }
+
+ .size-tablet-1-3 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 33.33333%;
+ -moz-flex: 0 33.33333%;
+ -ms-flex: 0 33.33333%;
+ flex: 0 33.33333%; }
+
+ .size-tablet-1-4 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 25%;
+ -moz-flex: 0 25%;
+ -ms-flex: 0 25%;
+ flex: 0 25%; }
+
+ .size-tablet-1-5 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 20%;
+ -moz-flex: 0 20%;
+ -ms-flex: 0 20%;
+ flex: 0 20%; }
+
+ .size-tablet-1-6 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 16.66667%;
+ -moz-flex: 0 16.66667%;
+ -ms-flex: 0 16.66667%;
+ flex: 0 16.66667%; }
+
+ .size-tablet-1-7 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 14.28571%;
+ -moz-flex: 0 14.28571%;
+ -ms-flex: 0 14.28571%;
+ flex: 0 14.28571%; }
+
+ .size-tablet-1-8 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 12.5%;
+ -moz-flex: 0 12.5%;
+ -ms-flex: 0 12.5%;
+ flex: 0 12.5%; }
+
+ .size-tablet-1-9 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 11.11111%;
+ -moz-flex: 0 11.11111%;
+ -ms-flex: 0 11.11111%;
+ flex: 0 11.11111%; }
+
+ .size-tablet-1-10 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 10%;
+ -moz-flex: 0 10%;
+ -ms-flex: 0 10%;
+ flex: 0 10%; }
+
+ .size-tablet-1-11 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 9.09091%;
+ -moz-flex: 0 9.09091%;
+ -ms-flex: 0 9.09091%;
+ flex: 0 9.09091%; }
+
+ .size-tablet-1-12 {
+ -webkit-box-flex: 0;
+ -moz-box-flex: 0;
+ box-flex: 0;
+ -webkit-flex: 0 8.33333%;
+ -moz-flex: 0 8.33333%;
+ -ms-flex: 0 8.33333%;
+ flex: 0 8.33333%; } }
+@media only all and (max-width: 47.938em) {
+ @supports not (flex-wrap: wrap) {
+ .grid {
+ display: block;
+ -webkit-box-lines: inherit;
+ -moz-box-lines: inherit;
+ box-lines: inherit;
+ -webkit-flex-wrap: inherit;
+ -moz-flex-wrap: inherit;
+ -ms-flex-wrap: inherit;
+ flex-wrap: inherit; }
+
+ .block {
+ display: block;
+ -webkit-box-flex: inherit;
+ -moz-box-flex: inherit;
+ box-flex: inherit;
+ -webkit-flex: inherit;
+ -moz-flex: inherit;
+ -ms-flex: inherit;
+ flex: inherit; } } }
+.first-block {
+ -webkit-box-ordinal-group: 0;
+ -webkit-order: -1;
+ -ms-flex-order: -1;
+ order: -1; }
+
+.last-block {
+ -webkit-box-ordinal-group: 2;
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1; }
+
+.fixed-blocks {
+ -webkit-flex-flow: row wrap;
+ -moz-flex-flow: row wrap;
+ flex-flow: row wrap; }
+ .fixed-blocks .block {
+ -webkit-box-flex: inherit;
+ -moz-box-flex: inherit;
+ box-flex: inherit;
+ -webkit-flex: inherit;
+ -moz-flex: inherit;
+ -ms-flex: inherit;
+ flex: inherit;
+ width: 25%; }
+ @media only all and (min-width: 60em) and (max-width: 74.938em) {
+ .fixed-blocks .block {
+ width: 33.33333%; } }
+ @media only all and (min-width: 48em) and (max-width: 59.938em) {
+ .fixed-blocks .block {
+ width: 50%; } }
+ @media only all and (max-width: 47.938em) {
+ .fixed-blocks .block {
+ width: 100%; } }
+
+body {
+ font-size: 1.05rem;
+ line-height: 1.7; }
+
+h1, h2, h3, h4, h5, h6 {
+ margin: 0.85rem 0 1.7rem 0;
+ text-rendering: optimizeLegibility; }
+
+h1 {
+ font-size: 3.25rem; }
+
+h2 {
+ font-size: 2.55rem; }
+
+h3 {
+ font-size: 2.15rem; }
+
+h4 {
+ font-size: 1.8rem; }
+
+h5 {
+ font-size: 1.4rem; }
+
+h6 {
+ font-size: 0.9rem; }
+
+p {
+ margin: 1.7rem 0; }
+
+ul, ol {
+ margin-top: 1.7rem;
+ margin-bottom: 1.7rem; }
+ ul ul, ul ol, ol ul, ol ol {
+ margin-top: 0;
+ margin-bottom: 0; }
+
+blockquote {
+ margin: 1.7rem 0;
+ padding-left: 0.85rem; }
+
+cite {
+ display: block;
+ font-size: 0.925rem; }
+ cite:before {
+ content: "\2014 \0020"; }
+
+pre {
+ margin: 1.7rem 0;
+ padding: 0.938rem; }
+
+code {
+ vertical-align: bottom; }
+
+small {
+ font-size: 0.925rem; }
+
+hr {
+ border-left: none;
+ border-right: none;
+ border-top: none;
+ margin: 1.7rem 0; }
+
+fieldset {
+ border: 0;
+ padding: 0.938rem;
+ margin: 0 0 1.7rem 0; }
+
+input,
+label,
+select {
+ display: block; }
+
+label {
+ margin-bottom: 0.425rem; }
+ label.required:after {
+ content: "*"; }
+ label abbr {
+ display: none; }
+
+textarea, input[type="email"], input[type="number"], input[type="password"], input[type="search"], input[type="tel"], input[type="text"], input[type="url"], input[type="color"], input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="month"], input[type="time"], input[type="week"], select[multiple=multiple] {
+ -webkit-transition: border-color;
+ -moz-transition: border-color;
+ transition: border-color;
+ border-radius: 0.1875rem;
+ margin-bottom: 0.85rem;
+ padding: 0.425rem 0.425rem;
+ width: 100%; }
+ textarea:focus, input[type="email"]:focus, input[type="number"]:focus, input[type="password"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="text"]:focus, input[type="url"]:focus, input[type="color"]:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, select[multiple=multiple]:focus {
+ outline: none; }
+
+textarea {
+ resize: vertical; }
+
+input[type="checkbox"], input[type="radio"] {
+ display: inline;
+ margin-right: 0.425rem; }
+
+input[type="file"] {
+ width: 100%; }
+
+select {
+ width: auto;
+ max-width: 100%;
+ margin-bottom: 1.7rem; }
+
+button,
+input[type="submit"] {
+ cursor: pointer;
+ user-select: none;
+ vertical-align: middle;
+ white-space: nowrap;
+ border: inherit; }
+
+/*# sourceMappingURL=nucleus.css.map */
diff --git a/themes/learn2/css-compiled/nucleus.css.map b/themes/learn2/css-compiled/nucleus.css.map
new file mode 100644
index 0000000..8e4a50e
--- /dev/null
+++ b/themes/learn2/css-compiled/nucleus.css.map
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": "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",
+"sources": ["../scss/nucleus/_core.scss","../scss/vendor/bourbon/addons/_prefixer.scss","../scss/nucleus/_flex.scss","../scss/configuration/nucleus/_breakpoints.scss","../scss/nucleus/mixins/_breakpoints.scss","../scss/vendor/bourbon/css3/_flex-box.scss","../scss/configuration/nucleus/_layout.scss","../scss/nucleus/_typography.scss","../scss/configuration/nucleus/_typography.scss","../scss/nucleus/_forms.scss","../scss/configuration/nucleus/_core.scss"],
+"names": [],
+"file": "nucleus.css"
+}
\ No newline at end of file
diff --git a/themes/learn2/css-compiled/theme.css b/themes/learn2/css-compiled/theme.css
new file mode 100644
index 0000000..2965e5f
--- /dev/null
+++ b/themes/learn2/css-compiled/theme.css
@@ -0,0 +1,940 @@
+@charset "UTF-8";
+@import url(//fonts.googleapis.com/css?family=Montserrat:400|Muli:300,400|Inconsolata);
+#top-github-link, #body #breadcrumbs {
+ position: relative;
+ top: 50%;
+ -webkit-transform: translateY(-50%);
+ -moz-transform: translateY(-50%);
+ -o-transform: translateY(-50%);
+ -ms-transform: translateY(-50%);
+ transform: translateY(-50%); }
+
+.button, .button-secondary {
+ display: inline-block;
+ padding: 7px 12px; }
+ .button:active, .button-secondary:active {
+ margin: 2px 0 -2px 0; }
+
+body {
+ background: #fff;
+ color: #555;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale; }
+
+a {
+ color: #1694CA; }
+ a:hover {
+ color: #0e6185; }
+
+pre {
+ position: relative; }
+
+.bg {
+ background: #fff;
+ border: 1px solid #eaeaea; }
+
+b, strong, label, th {
+ font-weight: 600; }
+
+.default-animation, #header #logo-svg, #header #logo-svg path, #sidebar, #sidebar ul, #body, #body .padding, #body .nav {
+ -webkit-transition: all 0.5s ease;
+ -moz-transition: all 0.5s ease;
+ transition: all 0.5s ease; }
+
+fieldset {
+ border: 1px solid #ddd; }
+
+textarea, input[type="email"], input[type="number"], input[type="password"], input[type="search"], input[type="tel"], input[type="text"], input[type="url"], input[type="color"], input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="month"], input[type="time"], input[type="week"], select[multiple=multiple] {
+ background-color: white;
+ border: 1px solid #ddd;
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.06); }
+ textarea:hover, input[type="email"]:hover, input[type="number"]:hover, input[type="password"]:hover, input[type="search"]:hover, input[type="tel"]:hover, input[type="text"]:hover, input[type="url"]:hover, input[type="color"]:hover, input[type="date"]:hover, input[type="datetime"]:hover, input[type="datetime-local"]:hover, input[type="month"]:hover, input[type="time"]:hover, input[type="week"]:hover, select[multiple=multiple]:hover {
+ border-color: #c4c4c4; }
+ textarea:focus, input[type="email"]:focus, input[type="number"]:focus, input[type="password"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="text"]:focus, input[type="url"]:focus, input[type="color"]:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, select[multiple=multiple]:focus {
+ border-color: #1694CA;
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.06), 0 0 5px rgba(19, 131, 179, 0.7); }
+
+#header {
+ background: #1694CA;
+ color: #fff;
+ text-align: center;
+ padding: 1rem; }
+ #header a {
+ display: inline-block; }
+ #header #logo-svg {
+ width: 8rem;
+ height: 2rem; }
+ #header #logo-svg path {
+ fill: #fff; }
+
+.searchbox {
+ margin-top: 0.5rem;
+ position: relative;
+ border: 1px solid #19a5e1;
+ background: #1383b3;
+ border-radius: 4px; }
+ .searchbox label {
+ color: rgba(255, 255, 255, 0.8);
+ position: absolute;
+ left: 10px;
+ top: 3px; }
+ .searchbox span {
+ color: rgba(255, 255, 255, 0.6);
+ position: absolute;
+ right: 10px;
+ top: 3px;
+ cursor: pointer; }
+ .searchbox span:hover {
+ color: rgba(255, 255, 255, 0.9); }
+ .searchbox input {
+ display: inline-block;
+ color: #fff;
+ width: 100%;
+ height: 30px;
+ background: transparent;
+ border: 0;
+ padding: 0 25px 0 30px;
+ margin: 0;
+ font-weight: 400; }
+ .searchbox input::-webkit-input-placeholder {
+ color: rgba(255, 255, 255, 0.6); }
+ .searchbox input::-moz-placeholder {
+ color: rgba(255, 255, 255, 0.6); }
+ .searchbox input:-moz-placeholder {
+ color: rgba(255, 255, 255, 0.6); }
+ .searchbox input:-ms-input-placeholder {
+ color: rgba(255, 255, 255, 0.6); }
+
+#sidebar-toggle {
+ display: none; }
+ @media only all and (max-width: 47.938em) {
+ #sidebar-toggle {
+ display: inline-block; } }
+
+#sidebar {
+ background-color: #38424D;
+ position: fixed;
+ top: 0;
+ width: 300px;
+ bottom: 0;
+ left: 0;
+ font-weight: 500;
+ font-size: 15px; }
+ #sidebar a {
+ color: #bbbbbb; }
+ #sidebar a:hover {
+ color: #d5d5d5; }
+ #sidebar a.subtitle {
+ color: rgba(187, 187, 187, 0.6); }
+ #sidebar hr {
+ border-bottom: 1px solid #323a44; }
+ #sidebar a.padding {
+ padding: 0 1rem; }
+ #sidebar h5 {
+ margin: 2rem 0 0;
+ position: relative;
+ line-height: 2; }
+ #sidebar h5 a {
+ display: block;
+ margin-left: 0;
+ margin-right: 0;
+ padding-left: 1rem;
+ padding-right: 1rem; }
+ #sidebar h5 i {
+ color: rgba(187, 187, 187, 0.6);
+ position: absolute;
+ right: 0.6rem;
+ top: 0.7rem;
+ font-size: 80%; }
+ #sidebar h5.parent a {
+ background: #293038;
+ color: #c8c8c8 !important; }
+ #sidebar h5.active a {
+ background: #fff;
+ color: #555 !important; }
+ #sidebar h5.active i {
+ color: #555 !important; }
+ #sidebar h5 + ul.topics {
+ display: none;
+ margin-top: 0; }
+ #sidebar h5.parent + ul.topics, #sidebar h5.active + ul.topics {
+ display: block; }
+ #sidebar ul {
+ list-style: none;
+ padding: 0;
+ margin: 0; }
+ #sidebar ul.searched a {
+ color: #888888; }
+ #sidebar ul.searched .search-match a {
+ color: #d5d5d5; }
+ #sidebar ul.searched .search-match a:hover {
+ color: #eeeeee; }
+ #sidebar ul.topics {
+ margin: 0 1rem; }
+ #sidebar ul.topics.searched ul {
+ display: block; }
+ #sidebar ul.topics ul {
+ display: none;
+ padding-bottom: 1rem; }
+ #sidebar ul.topics ul ul {
+ padding-bottom: 0; }
+ #sidebar ul.topics li.parent ul, #sidebar ul.topics > li.active ul {
+ display: block; }
+ #sidebar ul.topics > li > a {
+ line-height: 2rem;
+ font-size: 1.1rem; }
+ #sidebar ul.topics > li > a b {
+ opacity: 0.5;
+ font-weight: normal; }
+ #sidebar ul.topics > li > a .fa {
+ margin-top: 9px; }
+ #sidebar ul.topics > li.parent, #sidebar ul.topics > li.active {
+ background: #2d353e;
+ margin-left: -1rem;
+ margin-right: -1rem;
+ padding-left: 1rem;
+ padding-right: 1rem; }
+ #sidebar ul li.active > a {
+ background: #fff;
+ color: #555 !important;
+ margin-left: -1rem;
+ margin-right: -1rem;
+ padding-left: 1rem;
+ padding-right: 1rem; }
+ #sidebar ul li {
+ padding: 0; }
+ #sidebar ul li.visited + span {
+ margin-right: 16px; }
+ #sidebar ul li a {
+ display: block;
+ padding: 2px 0; }
+ #sidebar ul li a span {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ display: block; }
+ #sidebar ul li > a {
+ padding: 4px 0; }
+ #sidebar ul li .fa {
+ display: none;
+ float: right;
+ font-size: 13px;
+ min-width: 16px;
+ margin: 4px 0 0 0;
+ text-align: right; }
+ #sidebar ul li.visited > a .read-icon {
+ color: #1694CA;
+ display: inline; }
+ #sidebar ul li li {
+ padding-left: 1rem;
+ text-indent: 0.2rem; }
+
+#main {
+ background: #f7f7f7;
+ margin: 0 0 1.563rem 0; }
+
+#body {
+ position: relative;
+ margin-left: 300px;
+ min-height: 100%; }
+ #body img, #body .video-container {
+ margin: 3rem auto;
+ display: block;
+ text-align: center; }
+ #body img.border, #body .video-container.border {
+ border: 2px solid #e6e6e6 !important;
+ padding: 2px; }
+ #body img.shadow, #body .video-container.shadow {
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); }
+ #body .bordered {
+ border: 1px solid #ccc; }
+ #body .padding {
+ padding: 3rem 6rem; }
+ @media only all and (max-width: 59.938em) {
+ #body .padding {
+ position: static;
+ padding: 15px 3rem; } }
+ @media only all and (max-width: 47.938em) {
+ #body .padding {
+ padding: 5px 1rem; } }
+ #body h1 + hr {
+ margin-top: -1.7rem;
+ margin-bottom: 3rem; }
+ @media only all and (max-width: 59.938em) {
+ #body #navigation {
+ position: static;
+ margin-right: 0 !important;
+ width: 100%;
+ display: table; } }
+ #body .nav {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ width: 4rem;
+ font-size: 50px;
+ height: 100%;
+ cursor: pointer;
+ display: table;
+ text-align: center; }
+ #body .nav > i {
+ display: table-cell;
+ vertical-align: middle;
+ text-align: center; }
+ @media only all and (max-width: 59.938em) {
+ #body .nav {
+ display: table-cell;
+ position: static;
+ top: auto;
+ width: 50%;
+ text-align: center;
+ height: 100px;
+ line-height: 100px;
+ padding-top: 0; }
+ #body .nav > i {
+ display: inline-block; } }
+ #body .nav:hover {
+ background: #F6F6F6; }
+ #body .nav.nav-pref {
+ left: 0; }
+ #body .nav.nav-next {
+ right: 0; }
+
+#body-inner {
+ margin-bottom: 5rem; }
+
+#chapter {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100%;
+ padding: 2rem 0; }
+ #chapter #body-inner {
+ padding-bottom: 3rem;
+ max-width: 80%; }
+ #chapter h3 {
+ font-family: "Muli", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+ font-weight: 400;
+ text-align: center; }
+ #chapter h1 {
+ font-size: 5rem;
+ border-bottom: 4px solid #F0F2F4; }
+ #chapter p {
+ text-align: center;
+ font-size: 1.2rem; }
+
+#footer {
+ padding: 3rem 1rem;
+ color: #a2a2a2;
+ font-size: 13px; }
+ #footer p {
+ margin: 0; }
+
+body {
+ font-family: "Muli", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+ letter-spacing: -0.03rem;
+ font-weight: 400; }
+
+h1, h2, h3, h4, h5, h6 {
+ font-family: "Montserrat", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+ font-weight: 400;
+ text-rendering: optimizeLegibility;
+ line-height: 150%;
+ letter-spacing: -0px; }
+
+h1 {
+ text-align: center;
+ letter-spacing: -3px; }
+
+h2 {
+ letter-spacing: -2px; }
+
+h3 {
+ letter-spacing: -1px; }
+
+blockquote {
+ border-left: 10px solid #F0F2F4; }
+ blockquote p {
+ font-size: 1.1rem;
+ color: #999; }
+ blockquote cite {
+ display: block;
+ text-align: right;
+ color: #666;
+ font-size: 1.2rem; }
+
+blockquote {
+ position: relative; }
+
+blockquote blockquote {
+ position: static; }
+
+blockquote > blockquote > blockquote {
+ margin: 0; }
+ blockquote > blockquote > blockquote p {
+ padding: 15px;
+ display: block;
+ font-size: 1rem;
+ margin-top: 0rem;
+ margin-bottom: 0rem;
+ color: #666; }
+ blockquote > blockquote > blockquote p:first-child:before {
+ position: absolute;
+ top: 2px;
+ color: #fff;
+ font-family: FontAwesome;
+ content: '';
+ left: 10px; }
+ blockquote > blockquote > blockquote p:first-child:after {
+ position: absolute;
+ top: 2px;
+ color: #fff;
+ left: 2rem;
+ font-weight: bold;
+ content: 'Info'; }
+ blockquote > blockquote > blockquote > p {
+ margin-left: -71px;
+ border-top: 30px solid #F0B37E;
+ background: #FFF2DB; }
+ blockquote > blockquote > blockquote > blockquote > p {
+ margin-left: -94px;
+ border-top: 30px solid rgba(217, 83, 79, 0.8);
+ background: #FAE2E2; }
+ blockquote > blockquote > blockquote > blockquote > p:first-child:after {
+ content: 'Warning'; }
+ blockquote > blockquote > blockquote > blockquote > blockquote > p {
+ margin-left: -118px;
+ border-top: 30px solid #6AB0DE;
+ background: #E7F2FA; }
+ blockquote > blockquote > blockquote > blockquote > blockquote > p:first-child:after {
+ content: 'Note'; }
+ blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > p {
+ margin-left: -142px;
+ border-top: 30px solid rgba(92, 184, 92, 0.8);
+ background: #E6F9E6; }
+ blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > p:first-child:after {
+ content: 'Tip'; }
+
+code,
+kbd,
+pre,
+samp {
+ font-family: "Inconsolata", monospace; }
+
+code {
+ background: #f9f2f4;
+ color: #9c1d3d;
+ padding: .2rem .4rem;
+ border-radius: 3px; }
+
+pre {
+ padding: 1rem;
+ margin: 2rem 0;
+ background: #f6f6f6;
+ border: 1px solid #ddd;
+ border-radius: 2px;
+ line-height: 1.15;
+ font-size: 1rem; }
+ pre code {
+ color: #237794;
+ background: inherit;
+ font-size: 1rem; }
+
+hr {
+ border-bottom: 4px solid #F0F2F4; }
+
+.page-title {
+ margin-top: -25px;
+ padding: 25px;
+ float: left;
+ clear: both;
+ background: #1694CA;
+ color: #fff; }
+
+#body a.anchor-link {
+ color: #ccc; }
+#body a.anchor-link:hover {
+ color: #1694CA; }
+
+.scrollbar-inner > .scroll-element .scroll-element_track {
+ background-color: rgba(255, 255, 255, 0.3); }
+
+.scrollbar-inner > .scroll-element .scroll-bar {
+ background-color: #b5d1eb; }
+
+.scrollbar-inner > .scroll-element:hover .scroll-bar {
+ background-color: #ccc; }
+
+.scrollbar-inner > .scroll-element.scroll-draggable .scroll-bar {
+ background-color: #ccc; }
+
+table {
+ border: 1px solid #eaeaea;
+ table-layout: auto; }
+
+th {
+ background: #f7f7f7;
+ padding: 0.5rem; }
+
+td {
+ padding: 0.5rem;
+ border: 1px solid #eaeaea; }
+
+.button {
+ background: #1694CA;
+ color: #fff;
+ box-shadow: 0 3px 0 #1380ae; }
+ .button:hover {
+ background: #1380ae;
+ box-shadow: 0 3px 0 #106c93;
+ color: #fff; }
+ .button:active {
+ box-shadow: 0 1px 0 #106c93; }
+
+.button-secondary {
+ background: #F8B450;
+ color: #fff;
+ box-shadow: 0 3px 0 #f7a733; }
+ .button-secondary:hover {
+ background: #f7a733;
+ box-shadow: 0 3px 0 #f69b15;
+ color: #fff; }
+ .button-secondary:active {
+ box-shadow: 0 1px 0 #f69b15; }
+
+.bullets {
+ margin: 1.7rem 0;
+ margin-left: -0.85rem;
+ margin-right: -0.85rem;
+ overflow: auto; }
+
+.bullet {
+ float: left;
+ padding: 0 0.85rem; }
+
+.two-column-bullet {
+ width: 50%; }
+ @media only all and (max-width: 47.938em) {
+ .two-column-bullet {
+ width: 100%; } }
+
+.three-column-bullet {
+ width: 33.33333%; }
+ @media only all and (max-width: 47.938em) {
+ .three-column-bullet {
+ width: 100%; } }
+
+.four-column-bullet {
+ width: 25%; }
+ @media only all and (max-width: 47.938em) {
+ .four-column-bullet {
+ width: 100%; } }
+
+.bullet-icon {
+ float: left;
+ background: #1694CA;
+ padding: 0.875rem;
+ width: 3.5rem;
+ height: 3.5rem;
+ border-radius: 50%;
+ color: #fff;
+ font-size: 1.75rem;
+ text-align: center; }
+
+.bullet-icon-1 {
+ background: #1694CA; }
+
+.bullet-icon-2 {
+ background: #16cac4; }
+
+.bullet-icon-3 {
+ background: #b2ca16; }
+
+.bullet-content {
+ margin-left: 4.55rem; }
+
+.tooltipped {
+ position: relative; }
+
+.tooltipped:after {
+ position: absolute;
+ z-index: 1000000;
+ display: none;
+ padding: 5px 8px;
+ font: normal normal 11px/1.5 "Muli", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+ color: #fff;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-wrap: break-word;
+ white-space: pre;
+ pointer-events: none;
+ content: attr(aria-label);
+ background: rgba(0, 0, 0, 0.8);
+ border-radius: 3px;
+ -webkit-font-smoothing: subpixel-antialiased; }
+
+.tooltipped:before {
+ position: absolute;
+ z-index: 1000001;
+ display: none;
+ width: 0;
+ height: 0;
+ color: rgba(0, 0, 0, 0.8);
+ pointer-events: none;
+ content: "";
+ border: 5px solid transparent; }
+
+.tooltipped:hover:before, .tooltipped:hover:after,
+.tooltipped:active:before,
+.tooltipped:active:after,
+.tooltipped:focus:before,
+.tooltipped:focus:after {
+ display: inline-block;
+ text-decoration: none; }
+
+.tooltipped-s:after,
+.tooltipped-se:after,
+.tooltipped-sw:after {
+ top: 100%;
+ right: 50%;
+ margin-top: 5px; }
+.tooltipped-s:before,
+.tooltipped-se:before,
+.tooltipped-sw:before {
+ top: auto;
+ right: 50%;
+ bottom: -5px;
+ margin-right: -5px;
+ border-bottom-color: rgba(0, 0, 0, 0.8); }
+
+.tooltipped-se:after {
+ right: auto;
+ left: 50%;
+ margin-left: -15px; }
+
+.tooltipped-sw:after {
+ margin-right: -15px; }
+
+.tooltipped-n:after,
+.tooltipped-ne:after,
+.tooltipped-nw:after {
+ right: 50%;
+ bottom: 100%;
+ margin-bottom: 5px; }
+.tooltipped-n:before,
+.tooltipped-ne:before,
+.tooltipped-nw:before {
+ top: -5px;
+ right: 50%;
+ bottom: auto;
+ margin-right: -5px;
+ border-top-color: rgba(0, 0, 0, 0.8); }
+
+.tooltipped-ne:after {
+ right: auto;
+ left: 50%;
+ margin-left: -15px; }
+
+.tooltipped-nw:after {
+ margin-right: -15px; }
+
+.tooltipped-s:after,
+.tooltipped-n:after {
+ transform: translateX(50%); }
+
+.tooltipped-w:after {
+ right: 100%;
+ bottom: 50%;
+ margin-right: 5px;
+ transform: translateY(50%); }
+.tooltipped-w:before {
+ top: 50%;
+ bottom: 50%;
+ left: -5px;
+ margin-top: -5px;
+ border-left-color: rgba(0, 0, 0, 0.8); }
+
+.tooltipped-e:after {
+ bottom: 50%;
+ left: 100%;
+ margin-left: 5px;
+ transform: translateY(50%); }
+.tooltipped-e:before {
+ top: 50%;
+ right: -5px;
+ bottom: 50%;
+ margin-top: -5px;
+ border-right-color: rgba(0, 0, 0, 0.8); }
+
+/*************** SCROLLBAR BASE CSS ***************/
+.highlightable {
+ padding: 25px 0 15px; }
+
+.scroll-wrapper {
+ overflow: hidden !important;
+ padding: 0 !important;
+ position: relative; }
+
+.scroll-wrapper > .scroll-content {
+ border: none !important;
+ box-sizing: content-box !important;
+ height: auto;
+ left: 0;
+ margin: 0;
+ max-height: none;
+ max-width: none !important;
+ overflow: scroll !important;
+ padding: 0;
+ position: relative !important;
+ top: 0;
+ width: auto !important; }
+
+.scroll-wrapper > .scroll-content::-webkit-scrollbar {
+ height: 0;
+ width: 0; }
+
+.scroll-element {
+ display: none; }
+
+.scroll-element, .scroll-element div {
+ box-sizing: content-box; }
+
+.scroll-element.scroll-x.scroll-scrollx_visible,
+.scroll-element.scroll-y.scroll-scrolly_visible {
+ display: block; }
+
+.scroll-element .scroll-bar,
+.scroll-element .scroll-arrow {
+ cursor: default; }
+
+.scroll-textarea > .scroll-content {
+ overflow: hidden !important; }
+
+.scroll-textarea > .scroll-content > textarea {
+ border: none !important;
+ box-sizing: border-box;
+ height: 100% !important;
+ margin: 0;
+ max-height: none !important;
+ max-width: none !important;
+ overflow: scroll !important;
+ outline: none;
+ padding: 2px;
+ position: relative !important;
+ top: 0;
+ width: 100% !important; }
+
+.scroll-textarea > .scroll-content > textarea::-webkit-scrollbar {
+ height: 0;
+ width: 0; }
+
+/*************** SIMPLE INNER SCROLLBAR ***************/
+.scrollbar-inner > .scroll-element,
+.scrollbar-inner > .scroll-element div {
+ border: none;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ z-index: 10; }
+
+.scrollbar-inner > .scroll-element div {
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%; }
+
+.scrollbar-inner > .scroll-element.scroll-x {
+ bottom: 2px;
+ height: 8px;
+ left: 0;
+ width: 100%; }
+
+.scrollbar-inner > .scroll-element.scroll-y {
+ height: 100%;
+ right: 2px;
+ top: 0;
+ width: 8px; }
+
+.scrollbar-inner > .scroll-element .scroll-element_outer {
+ overflow: hidden; }
+
+.scrollbar-inner > .scroll-element .scroll-element_outer,
+.scrollbar-inner > .scroll-element .scroll-element_track,
+.scrollbar-inner > .scroll-element .scroll-bar {
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px; }
+
+.scrollbar-inner > .scroll-element .scroll-element_track,
+.scrollbar-inner > .scroll-element .scroll-bar {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
+ filter: alpha(opacity=30);
+ opacity: 0.3; }
+
+/* update scrollbar offset if both scrolls are visible */
+.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track {
+ left: -12px; }
+
+.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track {
+ top: -12px; }
+
+.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size {
+ left: -12px; }
+
+.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size {
+ top: -12px; }
+
+.lightbox-active #body {
+ overflow: visible; }
+ .lightbox-active #body .padding {
+ overflow: visible; }
+
+#github-contrib i {
+ vertical-align: middle; }
+
+.featherlight img {
+ margin: 0 !important; }
+
+.lifecycle #body-inner ul {
+ list-style: none;
+ margin: 0;
+ padding: 2rem 0 0;
+ position: relative; }
+.lifecycle #body-inner ol {
+ margin: 1rem 0 1rem 0;
+ padding: 2rem;
+ position: relative; }
+ .lifecycle #body-inner ol li {
+ margin-left: 1rem; }
+ .lifecycle #body-inner ol strong, .lifecycle #body-inner ol label, .lifecycle #body-inner ol th {
+ text-decoration: underline; }
+ .lifecycle #body-inner ol ol {
+ margin-left: -1rem; }
+.lifecycle #body-inner h3[class*='level'] {
+ font-size: 20px;
+ position: absolute;
+ margin: 0;
+ padding: 4px 10px;
+ right: 0;
+ z-index: 1000;
+ color: #fff;
+ background: #1ABC9C; }
+.lifecycle #body-inner ol h3 {
+ margin-top: 1rem !important;
+ right: 2rem !important; }
+.lifecycle #body-inner .level-1 + ol {
+ background: #f6fefc;
+ border: 4px solid #1ABC9C;
+ color: #16A085; }
+ .lifecycle #body-inner .level-1 + ol h3 {
+ background: #2ECC71; }
+.lifecycle #body-inner .level-2 + ol {
+ background: #f7fdf9;
+ border: 4px solid #2ECC71;
+ color: #27AE60; }
+ .lifecycle #body-inner .level-2 + ol h3 {
+ background: #3498DB; }
+.lifecycle #body-inner .level-3 + ol {
+ background: #f3f9fd;
+ border: 4px solid #3498DB;
+ color: #2980B9; }
+ .lifecycle #body-inner .level-3 + ol h3 {
+ background: #34495E; }
+.lifecycle #body-inner .level-4 + ol {
+ background: #e4eaf0;
+ border: 4px solid #34495E;
+ color: #2C3E50; }
+ .lifecycle #body-inner .level-4 + ol h3 {
+ background: #34495E; }
+
+#top-bar {
+ background: #F6F6F6;
+ border-radius: 2px;
+ margin: 0rem -1rem 2rem;
+ padding: 0 1rem;
+ height: 0;
+ min-height: 3rem; }
+
+#top-github-link {
+ position: relative;
+ z-index: 1;
+ float: right;
+ display: block; }
+
+#body #breadcrumbs {
+ height: auto;
+ display: block;
+ margin-bottom: 0;
+ padding-left: 0;
+ line-height: 1.4; }
+ #body #breadcrumbs span {
+ padding: 0 0.1rem; }
+
+@media only all and (max-width: 59.938em) {
+ #sidebar {
+ width: 230px; }
+
+ #body {
+ margin-left: 230px; } }
+@media only all and (max-width: 47.938em) {
+ #sidebar {
+ width: 230px;
+ left: -230px; }
+
+ #body {
+ margin-left: 0;
+ width: 100%; }
+
+ .sidebar-hidden {
+ overflow: hidden; }
+ .sidebar-hidden #sidebar {
+ left: 0; }
+ .sidebar-hidden #body {
+ margin-left: 230px;
+ overflow: hidden; }
+ .sidebar-hidden #overlay {
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ z-index: 10;
+ background: rgba(255, 255, 255, 0.5);
+ cursor: pointer; } }
+.copy-to-clipboard {
+ background-image: url(../images/clippy.svg);
+ background-position: 50% 50%;
+ background-size: 16px 16px;
+ background-repeat: no-repeat;
+ width: 27px;
+ height: 1.45rem;
+ top: -1px;
+ display: inline-block;
+ vertical-align: middle;
+ position: relative;
+ color: #3c3c3c;
+ background-color: #f9f2f4;
+ margin-left: -.2rem;
+ cursor: pointer;
+ border-radius: 0 2px 2px 0; }
+ .copy-to-clipboard:hover {
+ background-color: #f1e1e5; }
+ pre .copy-to-clipboard {
+ position: absolute;
+ right: 4px;
+ top: 4px;
+ background-color: #eee;
+ border-color: #ddd;
+ border-radius: 2px; }
+ pre .copy-to-clipboard:hover {
+ background-color: #d9d9d9; }
+
+.parent-element {
+ -webkit-transform-style: preserve-3d;
+ -moz-transform-style: preserve-3d;
+ transform-style: preserve-3d; }
+
+/*# sourceMappingURL=theme.css.map */
diff --git a/themes/learn2/css-compiled/theme.css.map b/themes/learn2/css-compiled/theme.css.map
new file mode 100644
index 0000000..b734503
--- /dev/null
+++ b/themes/learn2/css-compiled/theme.css.map
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": "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",
+"sources": ["../scss/theme/_fonts.scss","../scss/nucleus/mixins/_utilities.scss","../scss/theme/modules/_buttons.scss","../scss/theme/_core.scss","../scss/configuration/theme/_colors.scss","../scss/theme/_configuration.scss","../scss/vendor/bourbon/addons/_prefixer.scss","../scss/theme/_forms.scss","../scss/theme/_header.scss","../scss/vendor/bourbon/css3/_placeholder.scss","../scss/theme/_nav.scss","../scss/nucleus/mixins/_breakpoints.scss","../scss/theme/_main.scss","../scss/theme/_typography.scss","../scss/theme/_tables.scss","../scss/theme/_buttons.scss","../scss/theme/_bullets.scss","../scss/configuration/theme/_bullets.scss","../scss/theme/_tooltips.scss","../scss/theme/_scrollbar.scss","../scss/theme/_custom.scss"],
+"names": [],
+"file": "theme.css"
+}
\ No newline at end of file
diff --git a/themes/learn2/css/featherlight.min.css b/themes/learn2/css/featherlight.min.css
new file mode 100644
index 0000000..f225bec
--- /dev/null
+++ b/themes/learn2/css/featherlight.min.css
@@ -0,0 +1,8 @@
+/**
+ * Featherlight - ultra slim jQuery lightbox
+ * Version 1.2.3 - http://noelboss.github.io/featherlight/
+ *
+ * Copyright 2015, Noël Raoul Bossart (http://www.noelboss.com)
+ * MIT Licensed.
+**/
+@media all{.featherlight{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:2147483647;text-align:center;white-space:nowrap;cursor:pointer;background:#333;background:rgba(0,0,0,0)}.featherlight:last-of-type{background:rgba(0,0,0,.8)}.featherlight:before{content:'';display:inline-block;height:100%;vertical-align:middle;margin-right:-.25em}.featherlight .featherlight-content{position:relative;text-align:left;vertical-align:middle;display:inline-block;overflow:auto;padding:25px 25px 0;border-bottom:25px solid transparent;min-width:30%;margin-left:5%;margin-right:5%;max-height:95%;background:#fff;cursor:auto;white-space:normal}.featherlight .featherlight-inner{display:block}.featherlight .featherlight-close-icon{position:absolute;z-index:9999;top:0;right:0;line-height:25px;width:25px;cursor:pointer;text-align:center;font:Arial,sans-serif;background:#fff;background:rgba(255,255,255,.3);color:#000}.featherlight .featherlight-image{width:100%}.featherlight-iframe .featherlight-content{border-bottom:0;padding:0}.featherlight iframe{border:0}}@media only screen and (max-width:1024px){.featherlight .featherlight-content{margin-left:10px;margin-right:10px;max-height:98%;padding:10px 10px 0;border-bottom:10px solid transparent}}
\ No newline at end of file
diff --git a/themes/learn2/css/font-awesome.min.css b/themes/learn2/css/font-awesome.min.css
new file mode 100644
index 0000000..540440c
--- /dev/null
+++ b/themes/learn2/css/font-awesome.min.css
@@ -0,0 +1,4 @@
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
diff --git a/themes/learn2/css/nucleus-ie10.css b/themes/learn2/css/nucleus-ie10.css
new file mode 100644
index 0000000..3111047
--- /dev/null
+++ b/themes/learn2/css/nucleus-ie10.css
@@ -0,0 +1,9 @@
+button {
+ overflow: visible;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+}
\ No newline at end of file
diff --git a/themes/learn2/css/nucleus-ie9.css b/themes/learn2/css/nucleus-ie9.css
new file mode 100644
index 0000000..46df376
--- /dev/null
+++ b/themes/learn2/css/nucleus-ie9.css
@@ -0,0 +1,62 @@
+/* IE9 Resets and Normalization */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+ display: block;
+}
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+}
+
+[hidden],
+template {
+ display: none;
+}
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+img {
+ border: 0;
+}
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+figure {
+ margin: 1em 40px;
+}
+
+button {
+ overflow: visible;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+
+legend {
+ border: 0;
+ padding: 0;
+}
+
+textarea {
+ overflow: auto;
+}
\ No newline at end of file
diff --git a/themes/learn2/css/pure-0.5.0/grids-min.css b/themes/learn2/css/pure-0.5.0/grids-min.css
new file mode 100644
index 0000000..82bf816
--- /dev/null
+++ b/themes/learn2/css/pure-0.5.0/grids-min.css
@@ -0,0 +1,15 @@
+/*!
+Pure v0.5.0-rc-1
+Copyright 2014 Yahoo! Inc. All rights reserved.
+Licensed under the BSD License.
+https://github.com/yui/pure/blob/master/LICENSE.md
+*/
+.pure-g{letter-spacing:-.31em;*letter-spacing:normal;*word-spacing:-.43em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-flex;-webkit-flex-flow:row wrap;display:-ms-flexbox;-ms-flex-flow:row wrap}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class *="pure-u"]{font-family:sans-serif}.pure-u-1,.pure-u-1-1,.pure-u-1-2,.pure-u-1-3,.pure-u-2-3,.pure-u-1-4,.pure-u-3-4,.pure-u-1-5,.pure-u-2-5,.pure-u-3-5,.pure-u-4-5,.pure-u-5-5,.pure-u-1-6,.pure-u-5-6,.pure-u-1-8,.pure-u-3-8,.pure-u-5-8,.pure-u-7-8,.pure-u-1-12,.pure-u-5-12,.pure-u-7-12,.pure-u-11-12,.pure-u-1-24,.pure-u-2-24,.pure-u-3-24,.pure-u-4-24,.pure-u-5-24,.pure-u-6-24,.pure-u-7-24,.pure-u-8-24,.pure-u-9-24,.pure-u-10-24,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%;*width:4.1357%}.pure-u-1-12,.pure-u-2-24{width:8.3333%;*width:8.3023%}.pure-u-1-8,.pure-u-3-24{width:12.5%;*width:12.469%}.pure-u-1-6,.pure-u-4-24{width:16.6667%;*width:16.6357%}.pure-u-1-5{width:20%;*width:19.969%}.pure-u-5-24{width:20.8333%;*width:20.8023%}.pure-u-1-4,.pure-u-6-24{width:25%;*width:24.969%}.pure-u-7-24{width:29.1667%;*width:29.1357%}.pure-u-1-3,.pure-u-8-24{width:33.3333%;*width:33.3023%}.pure-u-3-8,.pure-u-9-24{width:37.5%;*width:37.469%}.pure-u-2-5{width:40%;*width:39.969%}.pure-u-5-12,.pure-u-10-24{width:41.6667%;*width:41.6357%}.pure-u-11-24{width:45.8333%;*width:45.8023%}.pure-u-1-2,.pure-u-12-24{width:50%;*width:49.969%}.pure-u-13-24{width:54.1667%;*width:54.1357%}.pure-u-7-12,.pure-u-14-24{width:58.3333%;*width:58.3023%}.pure-u-3-5{width:60%;*width:59.969%}.pure-u-5-8,.pure-u-15-24{width:62.5%;*width:62.469%}.pure-u-2-3,.pure-u-16-24{width:66.6667%;*width:66.6357%}.pure-u-17-24{width:70.8333%;*width:70.8023%}.pure-u-3-4,.pure-u-18-24{width:75%;*width:74.969%}.pure-u-19-24{width:79.1667%;*width:79.1357%}.pure-u-4-5{width:80%;*width:79.969%}.pure-u-5-6,.pure-u-20-24{width:83.3333%;*width:83.3023%}.pure-u-7-8,.pure-u-21-24{width:87.5%;*width:87.469%}.pure-u-11-12,.pure-u-22-24{width:91.6667%;*width:91.6357%}.pure-u-23-24{width:95.8333%;*width:95.8023%}.pure-u-1,.pure-u-1-1,.pure-u-5-5,.pure-u-24-24{width:100%}
+
+/* Custom */
+[class *="pure-u"] {display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto;}
+.pure-u-1-7 {width: 14.285%;}.pure-u-2-7 {width: 28.571%;}.pure-u-3-7 {width: 42.857%;}.pure-u-4-7 {width: 57.142%;}.pure-u-5-7 {width: 71.428%;}.pure-u-6-7 {width: 85.714%;}
+.pure-u-1-9 {width: 11.111%;}.pure-u-2-9 {width: 22.222%;}.pure-u-3-9 {width: 33.333%;}.pure-u-4-9 {width: 44.444%;}.pure-u-5-9 {width: 55.555%;}.pure-u-6-9 {width: 66.666%;}.pure-u-7-9 {width: 77.777%;}.pure-u-8-9 {width: 88.888%;}
+.pure-u-1-10 {width: 10%;}.pure-u-2-10 {width: 20%;}.pure-u-3-10 {width: 30%;}.pure-u-4-10 {width: 40%;}.pure-u-5-10 {width: 50%;}.pure-u-6-10 {width: 60%;}.pure-u-7-10 {width: 70%;}.pure-u-8-10 {width: 80%;}.pure-u-9-10 {width: 90%;}
+
+.pure-u-1-11 {width: 9.090%;}.pure-u-2-11 {width: 18.181%;}.pure-u-3-11 {width: 27.272%;}.pure-u-4-11 {width: 36.363%;}.pure-u-5-11 {width: 45.454%;}.pure-u-6-11 {width: 54.545%;}.pure-u-7-11 {width: 63.636%;}.pure-u-8-11 {width: 72.727%;}.pure-u-9-11 {width: 81.818%;}.pure-u-10-11 {width: 90.909%;}
\ No newline at end of file
diff --git a/themes/learn2/fonts/fontawesome-webfont.eot b/themes/learn2/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000..e9f60ca
Binary files /dev/null and b/themes/learn2/fonts/fontawesome-webfont.eot differ
diff --git a/themes/learn2/fonts/fontawesome-webfont.svg b/themes/learn2/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000..855c845
--- /dev/null
+++ b/themes/learn2/fonts/fontawesome-webfont.svg
@@ -0,0 +1,2671 @@
+
+
+
+
+Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
+ By ,,,
+Copyright Dave Gandy 2016. All rights reserved.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/themes/learn2/fonts/fontawesome-webfont.ttf b/themes/learn2/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000..35acda2
Binary files /dev/null and b/themes/learn2/fonts/fontawesome-webfont.ttf differ
diff --git a/themes/learn2/fonts/fontawesome-webfont.woff b/themes/learn2/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000..400014a
Binary files /dev/null and b/themes/learn2/fonts/fontawesome-webfont.woff differ
diff --git a/themes/learn2/fonts/fontawesome-webfont.woff2 b/themes/learn2/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000..4d13fc6
Binary files /dev/null and b/themes/learn2/fonts/fontawesome-webfont.woff2 differ
diff --git a/themes/learn2/images/clippy.svg b/themes/learn2/images/clippy.svg
new file mode 100644
index 0000000..e1b1703
--- /dev/null
+++ b/themes/learn2/images/clippy.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/themes/learn2/images/favicon.png b/themes/learn2/images/favicon.png
new file mode 100644
index 0000000..ec645f1
Binary files /dev/null and b/themes/learn2/images/favicon.png differ
diff --git a/themes/learn2/images/logo.png b/themes/learn2/images/logo.png
new file mode 100644
index 0000000..287a4e7
Binary files /dev/null and b/themes/learn2/images/logo.png differ
diff --git a/themes/learn2/js/clipboard.min.js b/themes/learn2/js/clipboard.min.js
new file mode 100644
index 0000000..000e4b4
--- /dev/null
+++ b/themes/learn2/js/clipboard.min.js
@@ -0,0 +1,7 @@
+/*!
+ * clipboard.js v1.5.5
+ * https://zenorocha.github.io/clipboard.js
+ *
+ * Licensed MIT © Zeno Rocha
+ */
+!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Clipboard=t()}}(function(){var t,e,n;return function t(e,n,r){function o(a,c){if(!n[a]){if(!e[a]){var s="function"==typeof require&&require;if(!c&&s)return s(a,!0);if(i)return i(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;ar;r++)n[r].fn.apply(n[r].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),r=n[t],o=[];if(r&&e)for(var i=0,a=r.length;a>i;i++)r[i].fn!==e&&r[i].fn._!==e&&o.push(r[i]);return o.length?n[t]=o:delete n[t],this}},e.exports=r},{}],8:[function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}n.__esModule=!0;var i=function(){function t(t,e){for(var n=0;n0})},e=function(a,b){var c={},d=new RegExp("^"+b+"([A-Z])(.*)");for(var e in a){var f=e.match(d);if(f){var g=(f[1]+f[2].replace(/([A-Z])/g,"-$1")).toLowerCase();c[g]=a[e]}}return c},f={keyup:"onKeyUp",resize:"onResize"},g=function(c){a.each(b.opened().reverse(),function(){return c.isDefaultPrevented()||!1!==this[f[c.type]](c)?void 0:(c.preventDefault(),c.stopPropagation(),!1)})},h=function(c){if(c!==b._globalHandlerInstalled){b._globalHandlerInstalled=c;var d=a.map(f,function(a,c){return c+"."+b.prototype.namespace}).join(" ");a(window)[c?"on":"off"](d,g)}};b.prototype={constructor:b,namespace:"featherlight",targetAttr:"data-featherlight",variant:null,resetCss:!1,background:null,openTrigger:"click",closeTrigger:"click",filter:null,root:"body",openSpeed:250,closeSpeed:250,closeOnClick:"background",closeOnEsc:!0,closeIcon:"✕",loading:"",otherClose:null,beforeOpen:a.noop,beforeContent:a.noop,beforeClose:a.noop,afterOpen:a.noop,afterContent:a.noop,afterClose:a.noop,onKeyUp:a.noop,onResize:a.noop,type:null,contentFilters:["jquery","image","html","ajax","iframe","text"],setup:function(b,c){"object"!=typeof b||b instanceof a!=!1||c||(c=b,b=void 0);var d=a.extend(this,c,{target:b}),e=d.resetCss?d.namespace+"-reset":d.namespace,f=a(d.background||['','
','
',d.closeIcon," ",'
'+d.loading+"
","
","
"].join("")),g="."+d.namespace+"-close"+(d.otherClose?","+d.otherClose:"");return d.$instance=f.clone().addClass(d.variant),d.$instance.on(d.closeTrigger+"."+d.namespace,function(b){var c=a(b.target);("background"===d.closeOnClick&&c.is("."+d.namespace)||"anywhere"===d.closeOnClick||c.closest(g).length)&&(b.preventDefault(),d.close())}),this},getContent:function(){var b=this,c=this.constructor.contentFilters,d=function(a){return b.$currentTarget&&b.$currentTarget.attr(a)},e=d(b.targetAttr),f=b.target||e||"",g=c[b.type];if(!g&&f in c&&(g=c[f],f=b.target&&e),f=f||d("href")||"",!g)for(var h in c)b[h]&&(g=c[h],f=b[h]);if(!g){var i=f;if(f=null,a.each(b.contentFilters,function(){return g=c[this],g.test&&(f=g.test(i)),!f&&g.regex&&i.match&&i.match(g.regex)&&(f=i),!f}),!f)return"console"in window&&window.console.error("Featherlight: no content filter found "+(i?' for "'+i+'"':" (no target specified)")),!1}return g.process.call(b,f)},setContent:function(b){var c=this;return(b.is("iframe")||a("iframe",b).length>0)&&c.$instance.addClass(c.namespace+"-iframe"),c.$instance.removeClass(c.namespace+"-loading"),c.$instance.find("."+c.namespace+"-inner").slice(1).remove().end().replaceWith(a.contains(c.$instance[0],b[0])?"":b),c.$content=b.addClass(c.namespace+"-inner"),c},open:function(b){var d=this;if(d.$instance.hide().appendTo(d.root),!(b&&b.isDefaultPrevented()||d.beforeOpen(b)===!1)){b&&b.preventDefault();var e=d.getContent();if(e)return c.push(d),h(!0),d.$instance.fadeIn(d.openSpeed),d.beforeContent(b),a.when(e).always(function(a){d.setContent(a),d.afterContent(b)}).then(d.$instance.promise()).done(function(){d.afterOpen(b)})}return d.$instance.detach(),a.Deferred().reject().promise()},close:function(b){var c=this,e=a.Deferred();return c.beforeClose(b)===!1?e.reject():(0===d(c).length&&h(!1),c.$instance.fadeOut(c.closeSpeed,function(){c.$instance.detach(),c.afterClose(b),e.resolve()})),e.promise()},chainCallbacks:function(b){for(var c in b)this[c]=a.proxy(b[c],this,a.proxy(this[c],this))}},a.extend(b,{id:0,autoBind:"[data-featherlight]",defaults:b.prototype,contentFilters:{jquery:{regex:/^[#.]\w/,test:function(b){return b instanceof a&&b},process:function(b){return a(b).clone(!0)}},image:{regex:/\.(png|jpg|jpeg|gif|tiff|bmp)(\?\S*)?$/i,process:function(b){var c=this,d=a.Deferred(),e=new Image,f=a(' ');return e.onload=function(){f.naturalWidth=e.width,f.naturalHeight=e.height,d.resolve(f)},e.onerror=function(){d.reject(f)},e.src=b,d.promise()}},html:{regex:/^\s*<[\w!][^<]*>/,process:function(b){return a(b)}},ajax:{regex:/./,process:function(b){var c=a.Deferred(),d=a("
").load(b,function(a,b){"error"!==b&&c.resolve(d.contents()),c.fail()});return c.promise()}},iframe:{process:function(b){var c=new a.Deferred,d=a("").hide().attr("src",b).css(e(this,"iframe")).on("load",function(){c.resolve(d.show())}).appendTo(this.$instance.find("."+this.namespace+"-content"));return c.promise()}},text:{process:function(b){return a("",{text:b})}}},functionAttributes:["beforeOpen","afterOpen","beforeContent","afterContent","beforeClose","afterClose"],readElementConfig:function(b,c){var d=this,e=new RegExp("^data-"+c+"-(.*)"),f={};return b&&b.attributes&&a.each(b.attributes,function(){var b=this.name.match(e);if(b){var c=this.value,g=a.camelCase(b[1]);if(a.inArray(g,d.functionAttributes)>=0)c=new Function(c);else try{c=a.parseJSON(c)}catch(h){}f[g]=c}}),f},extend:function(b,c){var d=function(){this.constructor=b};return d.prototype=this.prototype,b.prototype=new d,b.__super__=this.prototype,a.extend(b,this,c),b.defaults=b.prototype,b},attach:function(b,c,d){var e=this;"object"!=typeof c||c instanceof a!=!1||d||(d=c,c=void 0),d=a.extend({},d);var f=d.namespace||e.defaults.namespace,g=a.extend({},e.defaults,e.readElementConfig(b[0],f),d);return b.on(g.openTrigger+"."+g.namespace,g.filter,function(f){var h=a.extend({$source:b,$currentTarget:a(this)},e.readElementConfig(b[0],g.namespace),e.readElementConfig(this,g.namespace),d);new e(c,h).open(f)}),b},current:function(){var a=this.opened();return a[a.length-1]||null},opened:function(){var b=this;return d(),a.grep(c,function(a){return a instanceof b})},close:function(){var a=this.current();return a?a.close():void 0},_onReady:function(){var b=this;b.autoBind&&(b.attach(a(document),{filter:b.autoBind}),a(b.autoBind).filter("[data-featherlight-filter]").each(function(){b.attach(a(this))}))},_callbackChain:{onKeyUp:function(a,b){return 27===b.keyCode?(this.closeOnEsc&&this.$instance.find("."+this.namespace+"-close:first").click(),!1):a(b)},onResize:function(a,b){if(this.$content.naturalWidth){var c=this.$content.naturalWidth,d=this.$content.naturalHeight;this.$content.css("width","").css("height","");var e=Math.max(c/parseInt(this.$content.parent().css("width"),10),d/parseInt(this.$content.parent().css("height"),10));e>1&&this.$content.css("width",""+c/e+"px").css("height",""+d/e+"px")}return a(b)},afterContent:function(a,b){var c=a(b);return this.onResize(b),c}}}),a.featherlight=b,a.fn.featherlight=function(a,c){return b.attach(this,a,c)},a(document).ready(function(){b._onReady()})}(jQuery);
\ No newline at end of file
diff --git a/themes/learn2/js/html5shiv-printshiv.min.js b/themes/learn2/js/html5shiv-printshiv.min.js
new file mode 100644
index 0000000..9c78ee3
--- /dev/null
+++ b/themes/learn2/js/html5shiv-printshiv.min.js
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=x.elements;return"string"==typeof a?a.split(" "):a}function e(a){var b=w[a[u]];return b||(b={},v++,a[u]=v,w[v]=b),b}function f(a,c,d){if(c||(c=b),p)return c.createElement(a);d||(d=e(c));var f;return f=d.cache[a]?d.cache[a].cloneNode():t.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!f.canHaveChildren||s.test(a)||f.tagUrn?f:d.frag.appendChild(f)}function g(a,c){if(a||(a=b),p)return a.createDocumentFragment();c=c||e(a);for(var f=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)f.createElement(h[g]);return f}function h(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return x.shivMethods?f(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(x,b.frag)}function i(a){a||(a=b);var d=e(a);return!x.shivCSS||o||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),p||h(a,d),a}function j(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(k(b)));return g}function k(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(z+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function l(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+z+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function m(a){for(var b=a.length;b--;)a[b].removeNode()}function n(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,f,g=e(a),h=a.namespaces,i=a.parentWindow;return!A||a.printShived?a:("undefined"==typeof h[z]&&h.add(z),i.attachEvent("onbeforeprint",function(){b();for(var e,g,h,i=a.styleSheets,k=[],m=i.length,n=Array(m);m--;)n[m]=i[m];for(;h=n.pop();)if(!h.disabled&&y.test(h.media)){try{e=h.imports,g=e.length}catch(o){g=0}for(m=0;g>m;m++)n.push(e[m]);try{k.push(h.cssText)}catch(o){}}k=l(k.reverse().join("")),f=j(a),d=c(a,k)}),i.attachEvent("onafterprint",function(){m(f),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var o,p,q="3.7.0",r=a.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,t=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,u="_html5shiv",v=0,w={};!function(){try{var a=b.createElement("a");a.innerHTML="
",o="hidden"in a,p=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){o=!0,p=!0}}();var x={elements:r.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:q,shivCSS:r.shivCSS!==!1,supportsUnknownElements:p,shivMethods:r.shivMethods!==!1,type:"default",shivDocument:i,createElement:f,createDocumentFragment:g};a.html5=x,i(b);var y=/^$|\b(?:all|print)\b/,z="html5shiv",A=!p&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();x.type+=" print",x.shivPrint=n,n(b)}(this,document);
\ No newline at end of file
diff --git a/themes/learn2/js/jquery.scrollbar.min.js b/themes/learn2/js/jquery.scrollbar.min.js
new file mode 100644
index 0000000..ed3455a
--- /dev/null
+++ b/themes/learn2/js/jquery.scrollbar.min.js
@@ -0,0 +1,16 @@
+/**
+ * jQuery CSS Customizable Scrollbar
+ *
+ * Copyright 2015, Yuriy Khabarov
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * If you found bug, please contact me via email <13real008@gmail.com>
+ *
+ * Compressed by http://jscompress.com/
+ *
+ * @author Yuriy Khabarov aka Gromo
+ * @version 0.2.9
+ * @url https://github.com/gromo/jquery.scrollbar/
+ *
+ */
+!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("
").css(l.extend({},o)),t.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return e.axis&&e.axis===e.HORIZONTAL_AXIS?!1:e.wheelDeltaX?!1:!0}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:/mac/i.test(navigator.platform),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),a(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();(o.height!==t.scroll.height||o.width!==t.scroll.width)&&(t.scroll=o,l=!0)}a(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,h={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay)return!1;if(d)i.css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""});else{if(this.wrapper=d=l("
").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"==r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""}),r.on("scroll"+n,function(){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var p=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,p),d.on("mousewheel"+n,p),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,h="x"===e?"scrollLeft":"scrollTop",p=c.scrollStep,u=function(){var l=r[h]();r[h](l+p),1==d&&l+p>=f&&(l=r[h]()),-1==d&&f>=l+p&&(l=r[h]()),r[h]()==l&&i&&i()},f=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,n=t.size-t.visible-t.offset;return(i>0&&n>f||0>i&&f>0)&&(f+=i,0>f&&(f=0),f>n&&(f=n),o.scrollTo=o.scrollTo||{},o.scrollTo[h]=f,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){f=r[h]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){f=r[h]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,p=c.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset
','
','
','
','"," "].join(""),simple:['
"].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1},_updateScroll:function(e,o){var s=this.container,r=this.containerWrapper||s,i="scroll-scroll"+e+"_visible",n="x"===e?this.scrolly:this.scrollx,c=parseInt(this.container.css("x"===e?"left":"top"),10)||0,a=this.wrapper,d=o.size,h=o.visible+c;o.isVisible=d-h>1,o.isVisible?(o.scroll.addClass(i),n.scroll.addClass(i),r.addClass(i)):(o.scroll.removeClass(i),n.scroll.removeClass(i),r.removeClass(i)),"y"===e&&r.css(s.is("textarea")||h>d?{height:h+t.scroll.height+"px","max-height":"none"}:{"max-height":h+t.scroll.height+"px"}),(o.size!=s.prop("scrollWidth")||n.size!=s.prop("scrollHeight")||o.visible!=a.width()||n.visible!=a.height()||o.offset!=(parseInt(s.css("left"),10)||0)||n.offset!=(parseInt(s.css("top"),10)||0))&&(l.extend(this.scrollx,{offset:parseInt(s.css("left"),10)||0,size:s.prop("scrollWidth"),visible:a.width()}),l.extend(this.scrolly,{offset:parseInt(s.css("top"),10)||0,size:this.container.prop("scrollHeight"),visible:a.height()}),this._updateScroll("x"===e?"y":"x",n))}};var c=n;l.fn.scrollbar=function(e,o){return"string"!=typeof e&&(o=e,e="init"),"undefined"==typeof o&&(o=[]),l.isArray(o)||(o=[o]),this.not("body, .scroll-wrapper").each(function(){var s=l(this),r=s.data(t.data.name);(r||"init"===e)&&(r||(r=new c(s)),r[e]&&r[e].apply(r,o))}),this},l.fn.scrollbar.options=i;var a=function(){var l=0,e=0;return function(o){var s,i,n,c,d,h,p;for(s=0;s
10?(window.console&&console.log("Scroll updates exceed 10"),a=function(){}):(clearTimeout(l),l=setTimeout(a,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}})}(window.angular)});
diff --git a/themes/learn2/js/learn.js b/themes/learn2/js/learn.js
new file mode 100644
index 0000000..73bd860
--- /dev/null
+++ b/themes/learn2/js/learn.js
@@ -0,0 +1,342 @@
+// Scrollbar Width function
+function getScrollBarWidth() {
+ var inner = document.createElement('p');
+ inner.style.width = "100%";
+ inner.style.height = "200px";
+
+ var outer = document.createElement('div');
+ outer.style.position = "absolute";
+ outer.style.top = "0px";
+ outer.style.left = "0px";
+ outer.style.visibility = "hidden";
+ outer.style.width = "200px";
+ outer.style.height = "150px";
+ outer.style.overflow = "hidden";
+ outer.appendChild(inner);
+
+ document.body.appendChild(outer);
+ var w1 = inner.offsetWidth;
+ outer.style.overflow = 'scroll';
+ var w2 = inner.offsetWidth;
+ if (w1 == w2) w2 = outer.clientWidth;
+
+ document.body.removeChild(outer);
+
+ return (w1 - w2);
+};
+
+function setMenuHeight() {
+ $('#sidebar .highlightable').height($('#sidebar').innerHeight() - $('#header-wrapper').height() - 40);
+}
+
+function fallbackMessage(action) {
+ var actionMsg = '';
+ var actionKey = (action === 'cut' ? 'X' : 'C');
+
+ if (/iPhone|iPad/i.test(navigator.userAgent)) {
+ actionMsg = 'No support :(';
+ }
+ else if (/Mac/i.test(navigator.userAgent)) {
+ actionMsg = 'Press ⌘-' + actionKey + ' to ' + action;
+ }
+ else {
+ actionMsg = 'Press Ctrl-' + actionKey + ' to ' + action;
+ }
+
+ return actionMsg;
+}
+
+// for the window resize
+$(window).resize(function() {
+ setMenuHeight();
+});
+
+// debouncing function from John Hann
+// http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
+(function($, sr) {
+
+ var debounce = function(func, threshold, execAsap) {
+ var timeout;
+
+ return function debounced() {
+ var obj = this, args = arguments;
+
+ function delayed() {
+ if (!execAsap)
+ func.apply(obj, args);
+ timeout = null;
+ };
+
+ if (timeout)
+ clearTimeout(timeout);
+ else if (execAsap)
+ func.apply(obj, args);
+
+ timeout = setTimeout(delayed, threshold || 100);
+ };
+ }
+ // smartresize
+ jQuery.fn[sr] = function(fn) { return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); };
+
+})(jQuery, 'smartresize');
+
+
+jQuery(document).ready(function() {
+ var sidebarStatus = searchStatus = 'open';
+
+ // set the menu height
+ setMenuHeight();
+
+ jQuery('#overlay').on('click', function() {
+ jQuery(document.body).toggleClass('sidebar-hidden');
+ sidebarStatus = (jQuery(document.body).hasClass('sidebar-hidden') ? 'closed' : 'open');
+
+ return false;
+ });
+
+ jQuery('.scrollbar-inner').scrollbar();
+
+ jQuery('[data-sidebar-toggle]').on('click', function() {
+ jQuery(document.body).toggleClass('sidebar-hidden');
+ sidebarStatus = (jQuery(document.body).hasClass('sidebar-hidden') ? 'closed' : 'open');
+
+ return false;
+ });
+ jQuery('[data-clear-history-toggle]').on('click', function() {
+ sessionStorage.clear();
+ location.reload();
+ return false;
+ });
+ jQuery('[data-search-toggle]').on('click', function() {
+ if (sidebarStatus == 'closed') {
+ jQuery('[data-sidebar-toggle]').trigger('click');
+ jQuery(document.body).removeClass('searchbox-hidden');
+ searchStatus = 'open';
+
+ return false;
+ }
+
+ jQuery(document.body).toggleClass('searchbox-hidden');
+ searchStatus = (jQuery(document.body).hasClass('searchbox-hidden') ? 'closed' : 'open');
+
+ return false;
+ });
+
+ var ajax;
+ jQuery('[data-search-input]').on('input', function() {
+ var input = jQuery(this),
+ value = input.val(),
+ items = jQuery('[data-nav-id]');
+
+ items.removeClass('search-match');
+ if (!value.length) {
+ $('ul.topics').removeClass('searched');
+ items.css('display', 'block');
+ sessionStorage.removeItem('search-value');
+ $(".highlightable").unhighlight({ element: 'mark' })
+ return;
+ }
+
+ sessionStorage.setItem('search-value', value);
+ $(".highlightable").unhighlight({ element: 'mark' }).highlight(value, { element: 'mark' });
+
+ if (ajax && ajax.abort) ajax.abort();
+ ajax = jQuery.ajax({
+ url: input.data('search-input') + ':' + value
+ }).done(function(data) {
+ if (data && data.results && data.results.length) {
+ items.css('display', 'none');
+ $('ul.topics').addClass('searched');
+ data.results.forEach(function(navitem) {
+ jQuery('[data-nav-id="' + navitem + '"]').css('display', 'block').addClass('search-match');
+ jQuery('[data-nav-id="' + navitem + '"]').parents('li').css('display', 'block');
+ });
+ }
+ ;
+
+ });
+ jQuery('[data-search-clear]').on('click', function() {
+ jQuery('[data-search-input]').val('').trigger('input');
+ sessionStorage.removeItem('search-input');
+ $(".highlightable").unhighlight({ element: 'mark' })
+ });
+ });
+
+ if (sessionStorage.getItem('search-value')) {
+ jQuery(document.body).removeClass('searchbox-hidden');
+ jQuery('[data-search-input]').val(sessionStorage.getItem('search-value'));
+ jQuery('[data-search-input]').trigger('input');
+ }
+
+ // clipboard
+ var clipInit = false;
+ $('code').each(function() {
+ var code = $(this),
+ text = code.text();
+
+ if (text.length > 5) {
+ if (!clipInit) {
+ var text, clip = new Clipboard('.copy-to-clipboard', {
+ text: function(trigger) {
+ text = $(trigger).prev('code').text();
+ return text.replace(/^\$\s/gm, '');
+ }
+ });
+
+ var inPre;
+ clip.on('success', function(e) {
+ e.clearSelection();
+ inPre = $(e.trigger).parent().prop('tagName') == 'PRE';
+ $(e.trigger).attr('aria-label', 'Copied to clipboard!').addClass('tooltipped tooltipped-' + (inPre ? 'w' : 's'));
+ });
+
+ clip.on('error', function(e) {
+ inPre = $(e.trigger).parent().prop('tagName') == 'PRE';
+ $(e.trigger).attr('aria-label', fallbackMessage(e.action)).addClass('tooltipped tooltipped-' + (inPre ? 'w' : 's'));
+ $(document).one('copy', function(){
+ $(e.trigger).attr('aria-label', 'Copied to clipboard!').addClass('tooltipped tooltipped-' + (inPre ? 'w' : 's'));
+ });
+ });
+
+ clipInit = true;
+ }
+
+ code.after(' ');
+ code.next('.copy-to-clipboard').on('mouseleave', function() {
+ $(this).attr('aria-label', null).removeClass('tooltipped tooltipped-s tooltipped-w');
+ });
+ }
+ });
+
+ // allow keyboard control for prev/next links
+ jQuery(function() {
+ jQuery('.nav-prev').click(function(){
+ location.href = jQuery(this).attr('href');
+ });
+ jQuery('.nav-next').click(function() {
+ location.href = jQuery(this).attr('href');
+ });
+ });
+
+ jQuery(document).keydown(function(e) {
+ // prev links - left arrow key
+ if(e.which == '37') {
+ jQuery('.nav.nav-prev').click();
+ }
+
+ // next links - right arrow key
+ if(e.which == '39') {
+ jQuery('.nav.nav-next').click();
+ }
+ });
+
+});
+
+jQuery(window).on('load', function() {
+
+ function adjustForScrollbar() {
+ if ((parseInt(jQuery('#body-inner').height()) + 83) >= jQuery('#body').height()) {
+ jQuery('.nav.nav-next').css({ 'margin-right': getScrollBarWidth() });
+ } else {
+ jQuery('.nav.nav-next').css({ 'margin-right': 0 });
+ }
+ }
+
+ // adjust sidebar for scrollbar
+ adjustForScrollbar();
+
+ jQuery(window).smartresize(function() {
+ adjustForScrollbar();
+ });
+
+ // store this page in session
+ sessionStorage.setItem(jQuery('body').data('url'), 1);
+
+ // loop through the sessionStorage and see if something should be marked as visited
+ for (var url in sessionStorage) {
+ if (sessionStorage.getItem(url) == 1) jQuery('[data-nav-id="' + url + '"]').addClass('visited');
+ }
+
+
+ $(".highlightable").highlight(sessionStorage.getItem('search-value'), { element: 'mark' });
+});
+
+$(function() {
+ $('a[rel="lightbox"]').featherlight({
+ root: 'section#body'
+ });
+});
+
+jQuery.extend({
+ highlight: function(node, re, nodeName, className) {
+ if (node.nodeType === 3) {
+ var match = node.data.match(re);
+ if (match) {
+ var highlight = document.createElement(nodeName || 'span');
+ highlight.className = className || 'highlight';
+ var wordNode = node.splitText(match.index);
+ wordNode.splitText(match[0].length);
+ var wordClone = wordNode.cloneNode(true);
+ highlight.appendChild(wordClone);
+ wordNode.parentNode.replaceChild(highlight, wordNode);
+ return 1; //skip added node in parent
+ }
+ } else if ((node.nodeType === 1 && node.childNodes) && // only element nodes that have children
+ !/(script|style)/i.test(node.tagName) && // ignore script and style nodes
+ !(node.tagName === nodeName.toUpperCase() && node.className === className)) { // skip if already highlighted
+ for (var i = 0; i < node.childNodes.length; i++) {
+ i += jQuery.highlight(node.childNodes[i], re, nodeName, className);
+ }
+ }
+ return 0;
+ }
+});
+
+jQuery.fn.unhighlight = function(options) {
+ var settings = {
+ className: 'highlight',
+ element: 'span'
+ };
+ jQuery.extend(settings, options);
+
+ return this.find(settings.element + "." + settings.className).each(function() {
+ var parent = this.parentNode;
+ parent.replaceChild(this.firstChild, this);
+ parent.normalize();
+ }).end();
+};
+
+jQuery.fn.highlight = function(words, options) {
+ var settings = {
+ className: 'highlight',
+ element: 'span',
+ caseSensitive: false,
+ wordsOnly: false
+ };
+ jQuery.extend(settings, options);
+
+ if (!words) { return; }
+
+ if (words.constructor === String) {
+ words = [words];
+ }
+ words = jQuery.grep(words, function(word, i) {
+ return word != '';
+ });
+ words = jQuery.map(words, function(word, i) {
+ return word.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
+ });
+ if (words.length == 0) { return this; }
+ ;
+
+ var flag = settings.caseSensitive ? "" : "i";
+ var pattern = "(" + words.join("|") + ")";
+ if (settings.wordsOnly) {
+ pattern = "\\b" + pattern + "\\b";
+ }
+ var re = new RegExp(pattern, flag);
+
+ return this.each(function() {
+ jQuery.highlight(this, re, settings.element, settings.className);
+ });
+};
diff --git a/themes/learn2/js/modernizr.custom.71422.js b/themes/learn2/js/modernizr.custom.71422.js
new file mode 100644
index 0000000..63cc6c2
--- /dev/null
+++ b/themes/learn2/js/modernizr.custom.71422.js
@@ -0,0 +1,4 @@
+/* Modernizr 2.7.1 (Custom Build) | MIT & BSD
+ * Build: http://modernizr.com/download/#-csstransforms3d-shiv-cssclasses-teststyles-testprop-testallprops-prefixes-domprefixes-load
+ */
+;window.Modernizr=function(a,b,c){function z(a){j.cssText=a}function A(a,b){return z(m.join(a+";")+(b||""))}function B(a,b){return typeof a===b}function C(a,b){return!!~(""+a).indexOf(b)}function D(a,b){for(var d in a){var e=a[d];if(!C(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function E(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:B(f,"function")?f.bind(d||b):f}return!1}function F(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+o.join(d+" ")+d).split(" ");return B(b,"string")||B(b,"undefined")?D(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),E(e,b,c))}var d="2.7.1",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n="Webkit Moz O ms",o=n.split(" "),p=n.toLowerCase().split(" "),q={},r={},s={},t=[],u=t.slice,v,w=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["",'"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},x={}.hasOwnProperty,y;!B(x,"undefined")&&!B(x.call,"undefined")?y=function(a,b){return x.call(a,b)}:y=function(a,b){return b in a&&B(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e}),q.csstransforms3d=function(){var a=!!F("perspective");return a&&"webkitPerspective"in g.style&&w("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a};for(var G in q)y(q,G)&&(v=G.toLowerCase(),e[v]=q[G](),t.push((e[v]?"":"no-")+v));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)y(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},z(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.testProp=function(a){return D([a])},e.testAllProps=F,e.testStyles=w,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+t.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;fGrav - The Modern Flat File CMS
+ THEME_LEARN2_SEARCH_DOCUMENTATION: Search Documentation
+cn:
+ THEME_LEARN2_GITHUB_EDIT_THIS_PAGE: 编辑此页
+ THEME_LEARN2_GITHUB_NOTE: 发现错误?请帮忙改进,谢谢!
+ THEME_LEARN2_CLEAR_HISTORY: 清除历史
+ THEME_LEARN2_BUILT_WITH_GRAV: Built with Grav - The Modern Flat File CMS
+ THEME_LEARN2_SEARCH_DOCUMENTATION: 搜索文档
+cs:
+ THEME_LEARN2_GITHUB_EDIT_THIS_PAGE: Upravte tuto stránku
+ THEME_LEARN2_GITHUB_NOTE: Našli jste chybu? Myslíte, že můžete vylepšit tuto dokumentaci?
+ THEME_LEARN2_CLEAR_HISTORY: Smazat historii
+ THEME_LEARN2_BUILT_WITH_GRAV: Postaveno na Grav - Moderní správce obsahu pomocí souborů prostých textů
+ THEME_LEARN2_SEARCH_DOCUMENTATION: Vyhledat v dokumentaci
+de:
+ THEME_LEARN2_GITHUB_EDIT_THIS_PAGE: diese Seite bearbeiten
+ THEME_LEARN2_GITHUB_NOTE: Fehler gefunden? Möchten Sie diese Seite verbessern?
+ THEME_LEARN2_CLEAR_HISTORY: Verlauf löschen
+ THEME_LEARN2_BUILT_WITH_GRAV: Seite erstellt mit Grav - The Modern Flat File CMS
+ THEME_LEARN2_SEARCH_DOCUMENTATION: Dokumentation durchsuchen
+es:
+ THEME_LEARN2_GITHUB_EDIT_THIS_PAGE: editar esta página
+ THEME_LEARN2_GITHUB_NOTE: ¿Encontraste errores? ¿Crees que puedes mejorar esta documentación?
+ THEME_LEARN2_CLEAR_HISTORY: Limpiar historial
+ THEME_LEARN2_BUILT_WITH_GRAV: Hecho con Grav - El CMS moderno de archivos planos
+ THEME_LEARN2_SEARCH_DOCUMENTATION: Buscar en la documentación
+fr:
+ THEME_LEARN2_GITHUB_EDIT_THIS_PAGE: modifier cette page
+ THEME_LEARN2_GITHUB_NOTE: Vous avez découvert des erreurs ? Vous pensez pouvoir améliorer cette documentation ?
+ THEME_LEARN2_CLEAR_HISTORY: Effacer l'historique
+ THEME_LEARN2_BUILT_WITH_GRAV: Créé avec Grav - Le CMS moderne sans base de données
+ THEME_LEARN2_SEARCH_DOCUMENTATION: Rechercher dans la documentation
+it:
+ THEME_LEARN2_GITHUB_EDIT_THIS_PAGE: modifica pagina
+ THEME_LEARN2_GITHUB_NOTE: Hai trovato degli errori? Pensi di poter migliorare questa documentazione?
+ THEME_LEARN2_CLEAR_HISTORY: Cancella Cronologia
+ THEME_LEARN2_BUILT_WITH_GRAV: Built with Grav - The Modern Flat File CMS
+ THEME_LEARN2_SEARCH_DOCUMENTATION: Cerca nella Documentatione
+ru:
+ THEME_LEARN2_GITHUB_EDIT_THIS_PAGE: редактировать эту страницу
+ THEME_LEARN2_GITHUB_NOTE: Нашли ошибки? Думаете, что можете улучшить документацию?
+ THEME_LEARN2_CLEAR_HISTORY: Очистить историю
+ THEME_LEARN2_BUILT_WITH_GRAV: Сделано на Grav — современной файловой CMS
+ THEME_LEARN2_SEARCH_DOCUMENTATION: Поиск по документации
diff --git a/themes/learn2/learn2.php b/themes/learn2/learn2.php
new file mode 100644
index 0000000..ff3e3a0
--- /dev/null
+++ b/themes/learn2/learn2.php
@@ -0,0 +1,9 @@
+ i {
+ display: table-cell;
+ vertical-align: middle;
+ text-align: center;
+ }
+
+ @include breakpoint(desktop-only) {
+ display: table-cell;
+ position: static;
+ top: auto;
+ width: 50%;
+ text-align: center;
+ height: 100px;
+ line-height: 100px;
+ padding-top: 0;
+ > i {
+ display: inline-block;
+ }
+ }
+
+
+ &:hover {
+ background: $navbar-bg;
+ }
+
+ &.nav-pref {
+ left: 0;
+ }
+
+ &.nav-next {
+ right: 0;
+ }
+ }
+}
+
+#body-inner {
+ margin-bottom: 5rem;
+}
+
+// Chapter title
+#chapter {
+
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100%;
+ padding: 2rem 0;
+
+ #body-inner {
+ padding-bottom: 3rem;
+ max-width: 80%;
+ }
+
+ h3 {
+ font-family: $font-family-default;
+ font-weight: $font-weight-regular;
+ text-align: center;
+ }
+
+ h1 {
+ font-size: 5rem;
+ border-bottom: 4px solid $rule-color;
+ }
+
+ p {
+ text-align: center;
+ font-size: 1.2rem;
+ }
+}
+
+#footer {
+ padding: 3rem 1rem;
+ color: darken($sidebar-link, 10%);
+ font-size: 13px;
+
+ p {
+ margin: 0;
+ }
+}
diff --git a/themes/learn2/scss/theme/_nav.scss b/themes/learn2/scss/theme/_nav.scss
new file mode 100644
index 0000000..e83ce6c
--- /dev/null
+++ b/themes/learn2/scss/theme/_nav.scss
@@ -0,0 +1,212 @@
+#sidebar-toggle {
+ display: none;
+
+ @include breakpoint(mobile-only) {
+ display: inline-block;
+ }
+
+}
+
+#sidebar {
+ @extend .default-animation;
+ background-color: $sidebar-bg;
+ position: fixed;
+ top: 0;
+ width: $sidebar-width;
+ bottom: 0;
+ left: 0;
+ font-weight: $font-weight-medium;
+ font-size: 15px;
+
+ a {
+ color: $sidebar-link;
+ &:hover {
+ color: lighten($sidebar-link, 10%);
+ }
+ &.subtitle {
+ color: rgba($sidebar-link, 0.6);
+ }
+ }
+
+ hr {
+ border-bottom: 1px solid darken($sidebar-bg, 3%);
+ }
+
+ a.padding {
+ padding: 0 1rem;
+ }
+
+ h5 {
+ margin: 2rem 0 0;
+ position: relative;
+ line-height: 2;
+
+ a {
+ display: block;
+ margin-left: 0;
+ margin-right: 0;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ }
+
+ i {
+ color: rgba($sidebar-link, 0.6);
+ position: absolute;
+ right: 0.6rem;
+ top: 0.7rem;
+ font-size: 80%;
+ }
+
+ &.parent {
+ a {
+ background: darken($sidebar-bg, 7%);
+ color: lighten($sidebar-link, 5%) !important;
+ }
+ }
+
+ &.active {
+ a {
+ background: $white;
+ color: $core-text !important;
+ }
+
+ i {
+ color: $core-text !important;
+ }
+ }
+
+
+ }
+
+ h5 + ul.topics {
+ display: none;
+ margin-top: 0;
+ }
+
+ h5.parent, h5.active {
+ + ul.topics {
+ display: block;
+ }
+ }
+
+
+ ul {
+ @extend .default-animation;
+ list-style: none;
+ padding: 0;
+ margin: 0;
+
+ &.searched {
+ a {
+ color: darken($sidebar-link, 20%);
+ }
+
+ .search-match {
+ a {
+ color: lighten($sidebar-link, 10%);
+ &:hover {
+ color: lighten($sidebar-link, 20%);
+ }
+ }
+ }
+ }
+
+ &.topics {
+ margin: 0 1rem;
+
+ &.searched {
+ ul {
+ display: block;
+ }
+ }
+
+ ul {
+ display: none;
+ padding-bottom: 1rem;
+
+ ul {
+ padding-bottom: 0;
+ }
+ }
+
+ li.parent ul, > li.active ul {
+ display: block;
+ }
+
+ > li {
+ > a {
+ line-height: 2rem;
+ font-size: 1.1rem;
+
+ b {
+ opacity: 0.5;
+ font-weight: normal;
+ }
+
+ .fa {
+ margin-top: 9px;
+ }
+ }
+
+ &.parent, &.active {
+ background: darken($sidebar-bg, 5%);
+ margin-left: -1rem;
+ margin-right: -1rem;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ }
+ }
+ }
+
+ li.active > a {
+ background: $white;
+ color: $core-text !important;
+ margin-left: -1rem;
+ margin-right: -1rem;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ }
+
+ li {
+ padding: 0;
+ &.visited + span {
+ margin-right: 16px;
+ }
+ a {
+ display: block;
+ padding: 2px 0;
+ span {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ display: block;
+ }
+ }
+ > a {
+ padding: 4px 0;
+ }
+
+ .fa {
+ display: none;
+ float: right;
+ font-size: 13px;
+ min-width: 16px;
+ margin: 4px 0 0 0;
+ text-align: right;
+ }
+
+ &.visited {
+ > a .read-icon {
+ color: $core-accent;
+ display: inline;
+ }
+ }
+
+ li {
+ padding-left: 1rem;
+ text-indent: 0.2rem;
+ }
+ }
+
+ }
+}
diff --git a/themes/learn2/scss/theme/_scrollbar.scss b/themes/learn2/scss/theme/_scrollbar.scss
new file mode 100644
index 0000000..00c9cfc
--- /dev/null
+++ b/themes/learn2/scss/theme/_scrollbar.scss
@@ -0,0 +1,139 @@
+/*************** SCROLLBAR BASE CSS ***************/
+
+.highlightable {
+ padding: 25px 0 15px;
+}
+
+.scroll-wrapper {
+ overflow: hidden !important;
+ padding: 0 !important;
+ position: relative;
+}
+
+.scroll-wrapper > .scroll-content {
+ border: none !important;
+ box-sizing: content-box !important;
+ height: auto;
+ left: 0;
+ margin: 0;
+ max-height: none;
+ max-width: none !important;
+ overflow: scroll !important;
+ padding: 0;
+ position: relative !important;
+ top: 0;
+ width: auto !important;
+}
+
+.scroll-wrapper > .scroll-content::-webkit-scrollbar {
+ height: 0;
+ width: 0;
+}
+
+.scroll-element {
+ display: none;
+}
+.scroll-element, .scroll-element div {
+ box-sizing: content-box;
+}
+
+.scroll-element.scroll-x.scroll-scrollx_visible,
+.scroll-element.scroll-y.scroll-scrolly_visible {
+ display: block;
+}
+
+.scroll-element .scroll-bar,
+.scroll-element .scroll-arrow {
+ cursor: default;
+}
+
+.scroll-textarea {
+
+}
+.scroll-textarea > .scroll-content {
+ overflow: hidden !important;
+}
+.scroll-textarea > .scroll-content > textarea {
+ border: none !important;
+ box-sizing: border-box;
+ height: 100% !important;
+ margin: 0;
+ max-height: none !important;
+ max-width: none !important;
+ overflow: scroll !important;
+ outline: none;
+ padding: 2px;
+ position: relative !important;
+ top: 0;
+ width: 100% !important;
+}
+.scroll-textarea > .scroll-content > textarea::-webkit-scrollbar {
+ height: 0;
+ width: 0;
+}
+
+
+
+
+/*************** SIMPLE INNER SCROLLBAR ***************/
+
+.scrollbar-inner > .scroll-element,
+.scrollbar-inner > .scroll-element div
+{
+ border: none;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
+}
+
+.scrollbar-inner > .scroll-element div {
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
+}
+
+.scrollbar-inner > .scroll-element.scroll-x {
+ bottom: 2px;
+ height: 8px;
+ left: 0;
+ width: 100%;
+}
+
+.scrollbar-inner > .scroll-element.scroll-y {
+ height: 100%;
+ right: 2px;
+ top: 0;
+ width: 8px;
+}
+
+.scrollbar-inner > .scroll-element .scroll-element_outer {
+ overflow: hidden;
+}
+
+.scrollbar-inner > .scroll-element .scroll-element_outer,
+.scrollbar-inner > .scroll-element .scroll-element_track,
+.scrollbar-inner > .scroll-element .scroll-bar {
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+}
+
+.scrollbar-inner > .scroll-element .scroll-element_track,
+.scrollbar-inner > .scroll-element .scroll-bar {
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
+ filter: alpha(opacity=30);
+ opacity: 0.3;
+}
+
+
+/* update scrollbar offset if both scrolls are visible */
+
+.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -12px; }
+.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -12px; }
+
+
+.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -12px; }
+.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -12px; }
diff --git a/themes/learn2/scss/theme/_tables.scss b/themes/learn2/scss/theme/_tables.scss
new file mode 100644
index 0000000..923eb7f
--- /dev/null
+++ b/themes/learn2/scss/theme/_tables.scss
@@ -0,0 +1,15 @@
+table {
+ border: 1px solid lighten($core-border-color,5%);
+ table-layout: auto;
+}
+
+th {
+ @extend strong;
+ background: lighten($core-border-color,10%);
+ padding: 0.5rem;
+}
+
+td {
+ padding: 0.5rem;
+ border: 1px solid lighten($core-border-color,5%);
+}
diff --git a/themes/learn2/scss/theme/_tooltips.scss b/themes/learn2/scss/theme/_tooltips.scss
new file mode 100644
index 0000000..9ec8ef8
--- /dev/null
+++ b/themes/learn2/scss/theme/_tooltips.scss
@@ -0,0 +1,157 @@
+$multiline-max-width: 250px;
+$tooltip-background-color: rgba(0, 0, 0, 0.8);
+$tooltip-text-color: #fff;
+
+.tooltipped {
+ position: relative;
+}
+
+// This is the tooltip bubble
+.tooltipped:after {
+ position: absolute;
+ z-index: 1000000;
+ display: none;
+ padding: 5px 8px;
+ font: normal normal 11px/1.5 $font-family-default;
+ color: $tooltip-text-color;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-wrap: break-word;
+ white-space: pre;
+ pointer-events: none;
+ content: attr(aria-label);
+ background: $tooltip-background-color;
+ border-radius: 3px;
+ -webkit-font-smoothing: subpixel-antialiased;
+}
+
+// This is the tooltip arrow
+.tooltipped:before {
+ position: absolute;
+ z-index: 1000001;
+ display: none;
+ width: 0;
+ height: 0;
+ color: $tooltip-background-color;
+ pointer-events: none;
+ content: "";
+ border: 5px solid transparent;
+}
+
+// This will indicate when we'll activate the tooltip
+.tooltipped:hover,
+.tooltipped:active,
+.tooltipped:focus {
+ &:before,
+ &:after {
+ display: inline-block;
+ text-decoration: none;
+ }
+}
+
+// Tooltipped south
+.tooltipped-s,
+.tooltipped-se,
+.tooltipped-sw {
+ &:after {
+ top: 100%;
+ right: 50%;
+ margin-top: 5px;
+ }
+
+ &:before {
+ top: auto;
+ right: 50%;
+ bottom: -5px;
+ margin-right: -5px;
+ border-bottom-color: $tooltip-background-color;
+ }
+}
+
+.tooltipped-se {
+ &:after {
+ right: auto;
+ left: 50%;
+ margin-left: -15px;
+ }
+}
+
+.tooltipped-sw:after {
+ margin-right: -15px;
+}
+
+// Tooltips above the object
+.tooltipped-n,
+.tooltipped-ne,
+.tooltipped-nw {
+ &:after {
+ right: 50%;
+ bottom: 100%;
+ margin-bottom: 5px;
+ }
+
+ &:before {
+ top: -5px;
+ right: 50%;
+ bottom: auto;
+ margin-right: -5px;
+ border-top-color: $tooltip-background-color;
+ }
+}
+
+.tooltipped-ne {
+ &:after {
+ right: auto;
+ left: 50%;
+ margin-left: -15px;
+ }
+}
+
+.tooltipped-nw:after {
+ margin-right: -15px;
+}
+
+// Move the tooltip body to the center of the object.
+.tooltipped-s:after,
+.tooltipped-n:after {
+ transform: translateX(50%);
+}
+
+// Tooltipped to the left
+.tooltipped-w {
+ &:after {
+ right: 100%;
+ bottom: 50%;
+ margin-right: 5px;
+ transform: translateY(50%);
+ }
+
+ &:before {
+ top: 50%;
+ bottom: 50%;
+ left: -5px;
+ margin-top: -5px;
+ border-left-color: $tooltip-background-color;
+ }
+}
+
+// tooltipped to the right
+.tooltipped-e {
+ &:after {
+ bottom: 50%;
+ left: 100%;
+ margin-left: 5px;
+ transform: translateY(50%);
+ }
+
+ &:before {
+ top: 50%;
+ right: -5px;
+ bottom: 50%;
+ margin-top: -5px;
+ border-right-color: $tooltip-background-color;
+ }
+}
diff --git a/themes/learn2/scss/theme/_typography.scss b/themes/learn2/scss/theme/_typography.scss
new file mode 100644
index 0000000..631a8c3
--- /dev/null
+++ b/themes/learn2/scss/theme/_typography.scss
@@ -0,0 +1,181 @@
+// Body Base
+body {
+ font-family: $font-family-default;
+ letter-spacing: -0.03rem;
+ font-weight: 400;
+}
+
+// Headings
+h1, h2, h3, h4, h5, h6 {
+ font-family: $font-family-header;
+ font-weight: 400;
+ text-rendering: optimizeLegibility;
+ line-height: 150%;
+ letter-spacing: -0px;
+}
+
+h1 {
+ text-align: center;
+ letter-spacing: -3px;
+}
+
+h2 {
+ letter-spacing: -2px;
+}
+
+h3 {
+ letter-spacing: -1px;
+}
+
+// Blockquote
+blockquote {
+ border-left: 10px solid $rule-color;
+ p {
+ font-size: 1.1rem;
+ color: #999;
+ }
+ cite {
+ display: block;
+ text-align: right;
+ color: #666;
+ font-size: 1.2rem;
+ }
+}
+
+// NOTES!!!!
+blockquote {
+ position: relative;
+}
+
+blockquote blockquote {
+ position: static;
+}
+
+blockquote > blockquote > blockquote {
+
+ margin: 0;
+
+ p {
+ padding: 15px;
+ display: block;
+ font-size: 1rem;
+ margin-top: 0rem;
+ margin-bottom: 0rem;
+ color: #666;
+
+ &:first-child {
+ &:before {
+ position: absolute;
+ top: 2px;
+ color: $white;
+ font-family: FontAwesome;
+ content: '';
+ left: 10px;
+ }
+ &:after {
+ position: absolute;
+ top: 2px;
+ color: $white;
+ left: 2rem;
+ font-weight: bold;
+ content: 'Info';
+ }
+ }
+ }
+
+ > p {
+ // Yellow
+ margin-left: -71px;
+ border-top: 30px solid #F0B37E;
+ background: #FFF2DB;
+ }
+
+ > blockquote > p {
+ // Red
+ margin-left: -94px;
+ border-top: 30px solid rgba(#D9534F, 0.8);
+ background: #FAE2E2;
+ &:first-child:after {
+ content: 'Warning';
+ }
+ }
+
+ > blockquote > blockquote > p {
+ // Blue
+ margin-left: -118px;
+ border-top: 30px solid #6AB0DE;
+ background: #E7F2FA;
+ &:first-child:after {
+ content: 'Note';
+ }
+ }
+
+ > blockquote > blockquote > blockquote > p {
+ // Green
+ margin-left: -142px;
+ border-top: 30px solid rgba(#5CB85C, 0.8);
+ background: #E6F9E6;
+ &:first-child:after {
+ content: 'Tip';
+ }
+ }
+
+}
+
+// Inline and Code
+code,
+kbd,
+pre,
+samp {
+ font-family: $font-family-mono;
+}
+
+code {
+ background: $code-bg;
+ color: darken($code-text,10%);
+ padding: .2rem .4rem;
+ border-radius: 3px;
+}
+
+pre {
+ padding: 1rem;
+ margin: 2rem 0;
+ background: $pre-bg;
+ border: 1px solid $core-border-color;
+ border-radius: 2px;
+ line-height: 1.15;
+ font-size: 1rem;
+
+ code {
+ color: $pre-text;
+ background: inherit;
+ font-size: 1rem;
+ }
+}
+
+// Extras
+hr {
+ border-bottom: 4px solid $rule-color;
+}
+
+// Page Title
+.page-title {
+ margin-top: -25px;
+ padding: 25px;
+ float: left;
+ clear: both;
+ background: $core-accent;
+ color: $white;
+}
+
+// Anchor links
+#body {
+ a.anchor-link { color: #ccc; }
+ a.anchor-link:hover { color: $core-accent; }
+}
+
+// Scrollbar
+.scrollbar-inner > .scroll-element .scroll-element_track { background-color: rgba($white, 0.3); }
+.scrollbar-inner > .scroll-element .scroll-bar { background-color: lighten(#A1C4E5, 5%); }
+.scrollbar-inner > .scroll-element:hover .scroll-bar { background-color: #ccc; }
+.scrollbar-inner > .scroll-element.scroll-draggable .scroll-bar { background-color: #ccc; }
diff --git a/themes/learn2/scss/theme/modules/_base.scss b/themes/learn2/scss/theme/modules/_base.scss
new file mode 100644
index 0000000..1de274b
--- /dev/null
+++ b/themes/learn2/scss/theme/modules/_base.scss
@@ -0,0 +1,2 @@
+// Buttons
+@import "buttons";
diff --git a/themes/learn2/scss/theme/modules/_buttons.scss b/themes/learn2/scss/theme/modules/_buttons.scss
new file mode 100644
index 0000000..88d0340
--- /dev/null
+++ b/themes/learn2/scss/theme/modules/_buttons.scss
@@ -0,0 +1,21 @@
+%button {
+ display: inline-block;
+ padding: 7px 12px;
+ &:active {
+ margin: 2px 0 -2px 0;
+ }
+}
+
+@mixin button-color($color) {
+ background: $color;
+ color: $white;
+ box-shadow: 0 3px 0 darken($color, 6%);
+ &:hover {
+ background: darken($color, 6%);
+ box-shadow: 0 3px 0 darken($color, 12%);
+ color: $white;
+ }
+ &:active {
+ box-shadow: 0 1px 0 darken($color, 12%);
+ }
+}
\ No newline at end of file
diff --git a/themes/learn2/scss/vendor/bourbon/_bourbon-deprecated-upcoming.scss b/themes/learn2/scss/vendor/bourbon/_bourbon-deprecated-upcoming.scss
new file mode 100644
index 0000000..f946b3b
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/_bourbon-deprecated-upcoming.scss
@@ -0,0 +1,8 @@
+//************************************************************************//
+// These mixins/functions are deprecated
+// They will be removed in the next MAJOR version release
+//************************************************************************//
+@mixin inline-block {
+ display: inline-block;
+ @warn "inline-block mixin is deprecated and will be removed in the next major version release";
+}
diff --git a/themes/learn2/scss/vendor/bourbon/_bourbon.scss b/themes/learn2/scss/vendor/bourbon/_bourbon.scss
new file mode 100644
index 0000000..64cb6ea
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/_bourbon.scss
@@ -0,0 +1,77 @@
+// Settings
+@import "settings/prefixer";
+@import "settings/px-to-em";
+
+// Custom Helpers
+@import "helpers/convert-units";
+@import "helpers/gradient-positions-parser";
+@import "helpers/is-num";
+@import "helpers/linear-angle-parser";
+@import "helpers/linear-gradient-parser";
+@import "helpers/linear-positions-parser";
+@import "helpers/linear-side-corner-parser";
+@import "helpers/radial-arg-parser";
+@import "helpers/radial-positions-parser";
+@import "helpers/radial-gradient-parser";
+@import "helpers/render-gradients";
+@import "helpers/shape-size-stripper";
+@import "helpers/str-to-num";
+
+// Custom Functions
+@import "functions/assign";
+@import "functions/color-lightness";
+@import "functions/flex-grid";
+@import "functions/golden-ratio";
+@import "functions/grid-width";
+@import "functions/modular-scale";
+@import "functions/px-to-em";
+@import "functions/px-to-rem";
+@import "functions/strip-units";
+@import "functions/tint-shade";
+@import "functions/transition-property-name";
+@import "functions/unpack";
+
+// CSS3 Mixins
+@import "css3/animation";
+@import "css3/appearance";
+@import "css3/backface-visibility";
+@import "css3/background";
+@import "css3/background-image";
+@import "css3/border-image";
+@import "css3/border-radius";
+@import "css3/box-sizing";
+@import "css3/calc";
+@import "css3/columns";
+@import "css3/filter";
+@import "css3/flex-box";
+@import "css3/font-face";
+@import "css3/hyphens";
+@import "css3/hidpi-media-query";
+@import "css3/image-rendering";
+@import "css3/keyframes";
+@import "css3/linear-gradient";
+@import "css3/perspective";
+@import "css3/radial-gradient";
+@import "css3/transform";
+@import "css3/transition";
+@import "css3/user-select";
+@import "css3/placeholder";
+
+// Addons & other mixins
+@import "addons/button";
+@import "addons/clearfix";
+@import "addons/directional-values";
+@import "addons/ellipsis";
+@import "addons/font-family";
+@import "addons/hide-text";
+@import "addons/html5-input-types";
+@import "addons/position";
+@import "addons/prefixer";
+@import "addons/retina-image";
+@import "addons/size";
+@import "addons/timing-functions";
+@import "addons/triangle";
+@import "addons/word-wrap";
+
+// Soon to be deprecated Mixins
+@import "bourbon-deprecated-upcoming";
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_button.scss b/themes/learn2/scss/vendor/bourbon/addons/_button.scss
new file mode 100644
index 0000000..14a89e4
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_button.scss
@@ -0,0 +1,374 @@
+@mixin button ($style: simple, $base-color: #4294f0, $text-size: inherit, $padding: 7px 18px) {
+
+ @if type-of($style) == string and type-of($base-color) == color {
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == string and type-of($base-color) == number {
+ $padding: $text-size;
+ $text-size: $base-color;
+ $base-color: #4294f0;
+
+ @if $padding == inherit {
+ $padding: 7px 18px;
+ }
+
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == color and type-of($base-color) == color {
+ $base-color: $style;
+ $style: simple;
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == color and type-of($base-color) == number {
+ $padding: $text-size;
+ $text-size: $base-color;
+ $base-color: $style;
+ $style: simple;
+
+ @if $padding == inherit {
+ $padding: 7px 18px;
+ }
+
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == number {
+ $padding: $base-color;
+ $text-size: $style;
+ $base-color: #4294f0;
+ $style: simple;
+
+ @if $padding == #4294f0 {
+ $padding: 7px 18px;
+ }
+
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ &:disabled {
+ opacity: 0.5;
+ cursor: not-allowed;
+ }
+}
+
+
+// Selector Style Button
+//************************************************************************//
+@mixin buttonstyle($type, $b-color, $t-size, $pad) {
+ // Grayscale button
+ @if $type == simple and $b-color == grayscale($b-color) {
+ @include simple($b-color, true, $t-size, $pad);
+ }
+
+ @if $type == shiny and $b-color == grayscale($b-color) {
+ @include shiny($b-color, true, $t-size, $pad);
+ }
+
+ @if $type == pill and $b-color == grayscale($b-color) {
+ @include pill($b-color, true, $t-size, $pad);
+ }
+
+ @if $type == flat and $b-color == grayscale($b-color) {
+ @include flat($b-color, true, $t-size, $pad);
+ }
+
+ // Colored button
+ @if $type == simple {
+ @include simple($b-color, false, $t-size, $pad);
+ }
+
+ @else if $type == shiny {
+ @include shiny($b-color, false, $t-size, $pad);
+ }
+
+ @else if $type == pill {
+ @include pill($b-color, false, $t-size, $pad);
+ }
+
+ @else if $type == flat {
+ @include flat($b-color, false, $t-size, $pad);
+ }
+}
+
+
+// Simple Button
+//************************************************************************//
+@mixin simple($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+ $border: adjust-color($base-color, $saturation: 9%, $lightness: -14%);
+ $inset-shadow: adjust-color($base-color, $saturation: -8%, $lightness: 15%);
+ $stop-gradient: adjust-color($base-color, $saturation: 9%, $lightness: -11%);
+ $text-shadow: adjust-color($base-color, $saturation: 15%, $lightness: -18%);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border: grayscale($border);
+ $inset-shadow: grayscale($inset-shadow);
+ $stop-gradient: grayscale($stop-gradient);
+ $text-shadow: grayscale($text-shadow);
+ }
+
+ border: 1px solid $border;
+ border-radius: 3px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow;
+ color: $color;
+ display: inline-block;
+ font-size: $textsize;
+ font-weight: bold;
+ @include linear-gradient ($base-color, $stop-gradient);
+ padding: $padding;
+ text-decoration: none;
+ text-shadow: 0 1px 0 $text-shadow;
+ background-clip: padding-box;
+
+ &:hover:not(:disabled) {
+ $base-color-hover: adjust-color($base-color, $saturation: -4%, $lightness: -5%);
+ $inset-shadow-hover: adjust-color($base-color, $saturation: -7%, $lightness: 5%);
+ $stop-gradient-hover: adjust-color($base-color, $saturation: 8%, $lightness: -14%);
+
+ @if $grayscale == true {
+ $base-color-hover: grayscale($base-color-hover);
+ $inset-shadow-hover: grayscale($inset-shadow-hover);
+ $stop-gradient-hover: grayscale($stop-gradient-hover);
+ }
+
+ box-shadow: inset 0 1px 0 0 $inset-shadow-hover;
+ cursor: pointer;
+ @include linear-gradient ($base-color-hover, $stop-gradient-hover);
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $border-active: adjust-color($base-color, $saturation: 9%, $lightness: -14%);
+ $inset-shadow-active: adjust-color($base-color, $saturation: 7%, $lightness: -17%);
+
+ @if $grayscale == true {
+ $border-active: grayscale($border-active);
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ }
+
+ border: 1px solid $border-active;
+ box-shadow: inset 0 0 8px 4px $inset-shadow-active, inset 0 0 8px 4px $inset-shadow-active;
+ }
+}
+
+
+// Shiny Button
+//************************************************************************//
+@mixin shiny($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+ $border: adjust-color($base-color, $red: -117, $green: -111, $blue: -81);
+ $border-bottom: adjust-color($base-color, $red: -126, $green: -127, $blue: -122);
+ $fourth-stop: adjust-color($base-color, $red: -79, $green: -70, $blue: -46);
+ $inset-shadow: adjust-color($base-color, $red: 37, $green: 29, $blue: 12);
+ $second-stop: adjust-color($base-color, $red: -56, $green: -50, $blue: -33);
+ $text-shadow: adjust-color($base-color, $red: -140, $green: -141, $blue: -114);
+ $third-stop: adjust-color($base-color, $red: -86, $green: -75, $blue: -48);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border: grayscale($border);
+ $border-bottom: grayscale($border-bottom);
+ $fourth-stop: grayscale($fourth-stop);
+ $inset-shadow: grayscale($inset-shadow);
+ $second-stop: grayscale($second-stop);
+ $text-shadow: grayscale($text-shadow);
+ $third-stop: grayscale($third-stop);
+ }
+
+ border: 1px solid $border;
+ border-bottom: 1px solid $border-bottom;
+ border-radius: 5px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow;
+ color: $color;
+ display: inline-block;
+ font-size: $textsize;
+ font-weight: bold;
+ @include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%);
+ padding: $padding;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: 0 -1px 1px $text-shadow;
+
+ &:hover:not(:disabled) {
+ $first-stop-hover: adjust-color($base-color, $red: -13, $green: -15, $blue: -18);
+ $second-stop-hover: adjust-color($base-color, $red: -66, $green: -62, $blue: -51);
+ $third-stop-hover: adjust-color($base-color, $red: -93, $green: -85, $blue: -66);
+ $fourth-stop-hover: adjust-color($base-color, $red: -86, $green: -80, $blue: -63);
+
+ @if $grayscale == true {
+ $first-stop-hover: grayscale($first-stop-hover);
+ $second-stop-hover: grayscale($second-stop-hover);
+ $third-stop-hover: grayscale($third-stop-hover);
+ $fourth-stop-hover: grayscale($fourth-stop-hover);
+ }
+
+ cursor: pointer;
+ @include linear-gradient(top, $first-stop-hover 0%,
+ $second-stop-hover 50%,
+ $third-stop-hover 50%,
+ $fourth-stop-hover 100%);
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $inset-shadow-active: adjust-color($base-color, $red: -111, $green: -116, $blue: -122);
+
+ @if $grayscale == true {
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ }
+
+ box-shadow: inset 0 0 20px 0 $inset-shadow-active;
+ }
+}
+
+
+// Pill Button
+//************************************************************************//
+@mixin pill($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+ $border-bottom: adjust-color($base-color, $hue: 8, $saturation: -11%, $lightness: -26%);
+ $border-sides: adjust-color($base-color, $hue: 4, $saturation: -21%, $lightness: -21%);
+ $border-top: adjust-color($base-color, $hue: -1, $saturation: -30%, $lightness: -15%);
+ $inset-shadow: adjust-color($base-color, $hue: -1, $saturation: -1%, $lightness: 7%);
+ $stop-gradient: adjust-color($base-color, $hue: 8, $saturation: 14%, $lightness: -10%);
+ $text-shadow: adjust-color($base-color, $hue: 5, $saturation: -19%, $lightness: -15%);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border-bottom: grayscale($border-bottom);
+ $border-sides: grayscale($border-sides);
+ $border-top: grayscale($border-top);
+ $inset-shadow: grayscale($inset-shadow);
+ $stop-gradient: grayscale($stop-gradient);
+ $text-shadow: grayscale($text-shadow);
+ }
+
+ border: 1px solid $border-top;
+ border-color: $border-top $border-sides $border-bottom;
+ border-radius: 16px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow;
+ color: $color;
+ display: inline-block;
+ font-size: $textsize;
+ font-weight: normal;
+ line-height: 1;
+ @include linear-gradient ($base-color, $stop-gradient);
+ padding: $padding;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: 0 -1px 1px $text-shadow;
+ background-clip: padding-box;
+
+ &:hover:not(:disabled) {
+ $base-color-hover: adjust-color($base-color, $lightness: -4.5%);
+ $border-bottom: adjust-color($base-color, $hue: 8, $saturation: 13.5%, $lightness: -32%);
+ $border-sides: adjust-color($base-color, $hue: 4, $saturation: -2%, $lightness: -27%);
+ $border-top: adjust-color($base-color, $hue: -1, $saturation: -17%, $lightness: -21%);
+ $inset-shadow-hover: adjust-color($base-color, $saturation: -1%, $lightness: 3%);
+ $stop-gradient-hover: adjust-color($base-color, $hue: 8, $saturation: -4%, $lightness: -15.5%);
+ $text-shadow-hover: adjust-color($base-color, $hue: 5, $saturation: -5%, $lightness: -22%);
+
+ @if $grayscale == true {
+ $base-color-hover: grayscale($base-color-hover);
+ $border-bottom: grayscale($border-bottom);
+ $border-sides: grayscale($border-sides);
+ $border-top: grayscale($border-top);
+ $inset-shadow-hover: grayscale($inset-shadow-hover);
+ $stop-gradient-hover: grayscale($stop-gradient-hover);
+ $text-shadow-hover: grayscale($text-shadow-hover);
+ }
+
+ border: 1px solid $border-top;
+ border-color: $border-top $border-sides $border-bottom;
+ box-shadow: inset 0 1px 0 0 $inset-shadow-hover;
+ cursor: pointer;
+ @include linear-gradient ($base-color-hover, $stop-gradient-hover);
+ text-shadow: 0 -1px 1px $text-shadow-hover;
+ background-clip: padding-box;
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $active-color: adjust-color($base-color, $hue: 4, $saturation: -12%, $lightness: -10%);
+ $border-active: adjust-color($base-color, $hue: 6, $saturation: -2.5%, $lightness: -30%);
+ $border-bottom-active: adjust-color($base-color, $hue: 11, $saturation: 6%, $lightness: -31%);
+ $inset-shadow-active: adjust-color($base-color, $hue: 9, $saturation: 2%, $lightness: -21.5%);
+ $text-shadow-active: adjust-color($base-color, $hue: 5, $saturation: -12%, $lightness: -21.5%);
+
+ @if $grayscale == true {
+ $active-color: grayscale($active-color);
+ $border-active: grayscale($border-active);
+ $border-bottom-active: grayscale($border-bottom-active);
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ $text-shadow-active: grayscale($text-shadow-active);
+ }
+
+ background: $active-color;
+ border: 1px solid $border-active;
+ border-bottom: 1px solid $border-bottom-active;
+ box-shadow: inset 0 0 6px 3px $inset-shadow-active;
+ text-shadow: 0 -1px 1px $text-shadow-active;
+ }
+}
+
+
+
+// Flat Button
+//************************************************************************//
+@mixin flat($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ }
+
+ background-color: $base-color;
+ border-radius: 3px;
+ border: none;
+ color: $color;
+ display: inline-block;
+ font-size: inherit;
+ font-weight: bold;
+ padding: 7px 18px;
+ text-decoration: none;
+ background-clip: padding-box;
+
+ &:hover:not(:disabled){
+ $base-color-hover: adjust-color($base-color, $saturation: 4%, $lightness: 5%);
+
+ @if $grayscale == true {
+ $base-color-hover: grayscale($base-color-hover);
+ }
+
+ background-color: $base-color-hover;
+ cursor: pointer;
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $base-color-active: adjust-color($base-color, $saturation: -4%, $lightness: -5%);
+
+ @if $grayscale == true {
+ $base-color-active: grayscale($base-color-active);
+ }
+
+ background-color: $base-color-active;
+ cursor: pointer;
+ }
+}
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_clearfix.scss b/themes/learn2/scss/vendor/bourbon/addons/_clearfix.scss
new file mode 100644
index 0000000..783cfbc
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_clearfix.scss
@@ -0,0 +1,23 @@
+// Modern micro clearfix provides an easy way to contain floats without adding additional markup.
+//
+// Example usage:
+//
+// // Contain all floats within .wrapper
+// .wrapper {
+// @include clearfix;
+// .content,
+// .sidebar {
+// float : left;
+// }
+// }
+
+@mixin clearfix {
+ &:after {
+ content:"";
+ display:table;
+ clear:both;
+ }
+}
+
+// Acknowledgements
+// Beat *that* clearfix: [Thierry Koblentz](http://www.css-101.org/articles/clearfix/latest-new-clearfix-so-far.php)
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_directional-values.scss b/themes/learn2/scss/vendor/bourbon/addons/_directional-values.scss
new file mode 100644
index 0000000..742f103
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_directional-values.scss
@@ -0,0 +1,111 @@
+// directional-property mixins are shorthands
+// for writing properties like the following
+//
+// @include margin(null 0 10px);
+// ------
+// margin-right: 0;
+// margin-bottom: 10px;
+// margin-left: 0;
+//
+// - or -
+//
+// @include border-style(dotted null);
+// ------
+// border-top-style: dotted;
+// border-bottom-style: dotted;
+//
+// ------
+//
+// Note: You can also use false instead of null
+
+@function collapse-directionals($vals) {
+ $output: null;
+
+ $A: nth( $vals, 1 );
+ $B: if( length($vals) < 2, $A, nth($vals, 2));
+ $C: if( length($vals) < 3, $A, nth($vals, 3));
+ $D: if( length($vals) < 2, $A, nth($vals, if( length($vals) < 4, 2, 4) ));
+
+ @if $A == 0 { $A: 0 }
+ @if $B == 0 { $B: 0 }
+ @if $C == 0 { $C: 0 }
+ @if $D == 0 { $D: 0 }
+
+ @if $A == $B and $A == $C and $A == $D { $output: $A }
+ @else if $A == $C and $B == $D { $output: $A $B }
+ @else if $B == $D { $output: $A $B $C }
+ @else { $output: $A $B $C $D }
+
+ @return $output;
+}
+
+@function contains-falsy($list) {
+ @each $item in $list {
+ @if not $item {
+ @return true;
+ }
+ }
+
+ @return false;
+}
+
+@mixin directional-property($pre, $suf, $vals) {
+ // Property Names
+ $top: $pre + "-top" + if($suf, "-#{$suf}", "");
+ $bottom: $pre + "-bottom" + if($suf, "-#{$suf}", "");
+ $left: $pre + "-left" + if($suf, "-#{$suf}", "");
+ $right: $pre + "-right" + if($suf, "-#{$suf}", "");
+ $all: $pre + if($suf, "-#{$suf}", "");
+
+ $vals: collapse-directionals($vals);
+
+ @if contains-falsy($vals) {
+ @if nth($vals, 1) { #{$top}: nth($vals, 1); }
+
+ @if length($vals) == 1 {
+ @if nth($vals, 1) { #{$right}: nth($vals, 1); }
+ } @else {
+ @if nth($vals, 2) { #{$right}: nth($vals, 2); }
+ }
+
+ // prop: top/bottom right/left
+ @if length($vals) == 2 {
+ @if nth($vals, 1) { #{$bottom}: nth($vals, 1); }
+ @if nth($vals, 2) { #{$left}: nth($vals, 2); }
+
+ // prop: top right/left bottom
+ } @else if length($vals) == 3 {
+ @if nth($vals, 3) { #{$bottom}: nth($vals, 3); }
+ @if nth($vals, 2) { #{$left}: nth($vals, 2); }
+
+ // prop: top right bottom left
+ } @else if length($vals) == 4 {
+ @if nth($vals, 3) { #{$bottom}: nth($vals, 3); }
+ @if nth($vals, 4) { #{$left}: nth($vals, 4); }
+ }
+
+ // prop: top/right/bottom/left
+ } @else {
+ #{$all}: $vals;
+ }
+}
+
+@mixin margin($vals...) {
+ @include directional-property(margin, false, $vals...);
+}
+
+@mixin padding($vals...) {
+ @include directional-property(padding, false, $vals...);
+}
+
+@mixin border-style($vals...) {
+ @include directional-property(border, style, $vals...);
+}
+
+@mixin border-color($vals...) {
+ @include directional-property(border, color, $vals...);
+}
+
+@mixin border-width($vals...) {
+ @include directional-property(border, width, $vals...);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_ellipsis.scss b/themes/learn2/scss/vendor/bourbon/addons/_ellipsis.scss
new file mode 100644
index 0000000..a8ea2a4
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_ellipsis.scss
@@ -0,0 +1,7 @@
+@mixin ellipsis($width: 100%) {
+ display: inline-block;
+ max-width: $width;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_font-family.scss b/themes/learn2/scss/vendor/bourbon/addons/_font-family.scss
new file mode 100644
index 0000000..31f5d9c
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_font-family.scss
@@ -0,0 +1,5 @@
+$georgia: Georgia, Cambria, "Times New Roman", Times, serif;
+$helvetica: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif;
+$lucida-grande: "Lucida Grande", Tahoma, Verdana, Arial, sans-serif;
+$monospace: "Bitstream Vera Sans Mono", Consolas, Courier, monospace;
+$verdana: Verdana, Geneva, sans-serif;
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_hide-text.scss b/themes/learn2/scss/vendor/bourbon/addons/_hide-text.scss
new file mode 100644
index 0000000..fc79438
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_hide-text.scss
@@ -0,0 +1,10 @@
+@mixin hide-text {
+ overflow: hidden;
+
+ &:before {
+ content: "";
+ display: block;
+ width: 0;
+ height: 100%;
+ }
+}
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_html5-input-types.scss b/themes/learn2/scss/vendor/bourbon/addons/_html5-input-types.scss
new file mode 100644
index 0000000..9e9324a
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_html5-input-types.scss
@@ -0,0 +1,86 @@
+//************************************************************************//
+// Generate a variable ($all-text-inputs) with a list of all html5
+// input types that have a text-based input, excluding textarea.
+// http://diveintohtml5.org/forms.html
+//************************************************************************//
+$inputs-list: 'input[type="email"]',
+ 'input[type="number"]',
+ 'input[type="password"]',
+ 'input[type="search"]',
+ 'input[type="tel"]',
+ 'input[type="text"]',
+ 'input[type="url"]',
+
+ // Webkit & Gecko may change the display of these in the future
+ 'input[type="color"]',
+ 'input[type="date"]',
+ 'input[type="datetime"]',
+ 'input[type="datetime-local"]',
+ 'input[type="month"]',
+ 'input[type="time"]',
+ 'input[type="week"]';
+
+// Bare inputs
+//************************************************************************//
+$all-text-inputs: assign-inputs($inputs-list);
+
+// Hover Pseudo-class
+//************************************************************************//
+$all-text-inputs-hover: assign-inputs($inputs-list, hover);
+
+// Focus Pseudo-class
+//************************************************************************//
+$all-text-inputs-focus: assign-inputs($inputs-list, focus);
+
+
+
+// You must use interpolation on the variable:
+// #{$all-text-inputs}
+// #{$all-text-inputs-hover}
+// #{$all-text-inputs-focus}
+
+// Example
+//************************************************************************//
+// #{$all-text-inputs}, textarea {
+// border: 1px solid red;
+// }
+
+
+
+//************************************************************************//
+// Generate a variable ($all-button-inputs) with a list of all html5
+// input types that have a button-based input, excluding button.
+//************************************************************************//
+$inputs-button-list: 'input[type="button"]',
+ 'input[type="reset"]',
+ 'input[type="submit"]';
+
+// Bare inputs
+//************************************************************************//
+$all-button-inputs: assign-inputs($inputs-button-list);
+
+// Hover Pseudo-class
+//************************************************************************//
+$all-button-inputs-hover: assign-inputs($inputs-button-list, hover);
+
+// Focus Pseudo-class
+//************************************************************************//
+$all-button-inputs-focus: assign-inputs($inputs-button-list, focus);
+
+// Active Pseudo-class
+//************************************************************************//
+$all-button-inputs-active: assign-inputs($inputs-button-list, active);
+
+
+
+// You must use interpolation on the variable:
+// #{$all-button-inputs}
+// #{$all-button-inputs-hover}
+// #{$all-button-inputs-focus}
+// #{$all-button-inputs-active}
+
+// Example
+//************************************************************************//
+// #{$all-button-inputs}, button {
+// border: 1px solid red;
+// }
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_position.scss b/themes/learn2/scss/vendor/bourbon/addons/_position.scss
new file mode 100644
index 0000000..7de7518
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_position.scss
@@ -0,0 +1,32 @@
+@mixin position ($position: relative, $coordinates: null null null null) {
+
+ @if type-of($position) == list {
+ $coordinates: $position;
+ $position: relative;
+ }
+
+ $coordinates: unpack($coordinates);
+
+ $top: nth($coordinates, 1);
+ $right: nth($coordinates, 2);
+ $bottom: nth($coordinates, 3);
+ $left: nth($coordinates, 4);
+
+ position: $position;
+
+ @if ($top and $top == auto) or (type-of($top) == number) {
+ top: $top;
+ }
+
+ @if ($right and $right == auto) or (type-of($right) == number) {
+ right: $right;
+ }
+
+ @if ($bottom and $bottom == auto) or (type-of($bottom) == number) {
+ bottom: $bottom;
+ }
+
+ @if ($left and $left == auto) or (type-of($left) == number) {
+ left: $left;
+ }
+}
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_prefixer.scss b/themes/learn2/scss/vendor/bourbon/addons/_prefixer.scss
new file mode 100644
index 0000000..c32f502
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_prefixer.scss
@@ -0,0 +1,45 @@
+//************************************************************************//
+// Example: @include prefixer(border-radius, $radii, webkit ms spec);
+//************************************************************************//
+// Variables located in /settings/_prefixer.scss
+
+@mixin prefixer ($property, $value, $prefixes) {
+ @each $prefix in $prefixes {
+ @if $prefix == webkit {
+ @if $prefix-for-webkit {
+ -webkit-#{$property}: $value;
+ }
+ }
+ @else if $prefix == moz {
+ @if $prefix-for-mozilla {
+ -moz-#{$property}: $value;
+ }
+ }
+ @else if $prefix == ms {
+ @if $prefix-for-microsoft {
+ -ms-#{$property}: $value;
+ }
+ }
+ @else if $prefix == o {
+ @if $prefix-for-opera {
+ -o-#{$property}: $value;
+ }
+ }
+ @else if $prefix == spec {
+ @if $prefix-for-spec {
+ #{$property}: $value;
+ }
+ }
+ @else {
+ @warn "Unrecognized prefix: #{$prefix}";
+ }
+ }
+}
+
+@mixin disable-prefix-for-all() {
+ $prefix-for-webkit: false !global;
+ $prefix-for-mozilla: false !global;
+ $prefix-for-microsoft: false !global;
+ $prefix-for-opera: false !global;
+ $prefix-for-spec: false !global;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_rem.scss b/themes/learn2/scss/vendor/bourbon/addons/_rem.scss
new file mode 100644
index 0000000..ddd7022
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_rem.scss
@@ -0,0 +1,33 @@
+@mixin rem($property, $size, $base: $em-base) {
+ @if not unitless($base) {
+ $base: strip-units($base);
+ }
+
+ $unitless_values: ();
+ @each $num in $size {
+ @if not unitless($num) {
+ @if unit($num) == "em" {
+ $num: $num * $base;
+ }
+
+ $num: strip-units($num);
+ }
+
+ $unitless_values: append($unitless_values, $num);
+ }
+ $size: $unitless_values;
+
+ $pixel_values: ();
+ $rem_values: ();
+ @each $value in $pxval {
+ $pixel_value: $value * 1px;
+ $pixel_values: append($pixel_values, $pixel_value);
+
+ $rem_value: ($value / $base) * 1rem;
+ $rem_values: append($rem_values, $rem_value);
+ }
+
+ #{$property}: $pixel_values;
+ #{$property}: $rem_values;
+}
+
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_retina-image.scss b/themes/learn2/scss/vendor/bourbon/addons/_retina-image.scss
new file mode 100644
index 0000000..7931bd1
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_retina-image.scss
@@ -0,0 +1,31 @@
+@mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: false) {
+ @if $asset-pipeline {
+ background-image: image-url("#{$filename}.#{$extension}");
+ }
+ @else {
+ background-image: url("#{$filename}.#{$extension}");
+ }
+
+ @include hidpi {
+ @if $asset-pipeline {
+ @if $retina-filename {
+ background-image: image-url("#{$retina-filename}.#{$extension}");
+ }
+ @else {
+ background-image: image-url("#{$filename}#{$retina-suffix}.#{$extension}");
+ }
+ }
+
+ @else {
+ @if $retina-filename {
+ background-image: url("#{$retina-filename}.#{$extension}");
+ }
+ @else {
+ background-image: url("#{$filename}#{$retina-suffix}.#{$extension}");
+ }
+ }
+
+ background-size: $background-size;
+
+ }
+}
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_size.scss b/themes/learn2/scss/vendor/bourbon/addons/_size.scss
new file mode 100644
index 0000000..ac705e2
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_size.scss
@@ -0,0 +1,16 @@
+@mixin size($size) {
+ $height: nth($size, 1);
+ $width: $height;
+
+ @if length($size) > 1 {
+ $height: nth($size, 2);
+ }
+
+ @if $height == auto or (type-of($height) == number and not unitless($height)) {
+ height: $height;
+ }
+
+ @if $width == auto or (type-of($height) == number and not unitless($width)) {
+ width: $width;
+ }
+}
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_timing-functions.scss b/themes/learn2/scss/vendor/bourbon/addons/_timing-functions.scss
new file mode 100644
index 0000000..51b2410
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_timing-functions.scss
@@ -0,0 +1,32 @@
+// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie)
+// Timing functions are the same as demo'ed here: http://jqueryui.com/demos/effect/easing.html
+
+// EASE IN
+$ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530);
+$ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+$ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220);
+$ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+$ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715);
+$ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035);
+$ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335);
+$ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045);
+
+// EASE OUT
+$ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940);
+$ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+$ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000);
+$ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000);
+$ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000);
+$ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000);
+$ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000);
+$ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275);
+
+// EASE IN OUT
+$ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955);
+$ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000);
+$ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000);
+$ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000);
+$ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950);
+$ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000);
+$ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860);
+$ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550);
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_triangle.scss b/themes/learn2/scss/vendor/bourbon/addons/_triangle.scss
new file mode 100644
index 0000000..573954e
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_triangle.scss
@@ -0,0 +1,83 @@
+@mixin triangle ($size, $color, $direction) {
+ height: 0;
+ width: 0;
+
+ $width: nth($size, 1);
+ $height: nth($size, length($size));
+
+ $foreground-color: nth($color, 1);
+ $background-color: if(length($color) == 2, nth($color, 2), transparent);
+
+ @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) {
+
+ $width: $width / 2;
+ $height: if(length($size) > 1, $height, $height/2);
+
+ @if $direction == up {
+ border-left: $width solid $background-color;
+ border-right: $width solid $background-color;
+ border-bottom: $height solid $foreground-color;
+
+ } @else if $direction == right {
+ border-top: $width solid $background-color;
+ border-bottom: $width solid $background-color;
+ border-left: $height solid $foreground-color;
+
+ } @else if $direction == down {
+ border-left: $width solid $background-color;
+ border-right: $width solid $background-color;
+ border-top: $height solid $foreground-color;
+
+ } @else if $direction == left {
+ border-top: $width solid $background-color;
+ border-bottom: $width solid $background-color;
+ border-right: $height solid $foreground-color;
+ }
+ }
+
+ @else if ($direction == up-right) or ($direction == up-left) {
+ border-top: $height solid $foreground-color;
+
+ @if $direction == up-right {
+ border-left: $width solid $background-color;
+
+ } @else if $direction == up-left {
+ border-right: $width solid $background-color;
+ }
+ }
+
+ @else if ($direction == down-right) or ($direction == down-left) {
+ border-bottom: $height solid $foreground-color;
+
+ @if $direction == down-right {
+ border-left: $width solid $background-color;
+
+ } @else if $direction == down-left {
+ border-right: $width solid $background-color;
+ }
+ }
+
+ @else if ($direction == inset-up) {
+ border-width: $height $width;
+ border-style: solid;
+ border-color: $background-color $background-color $foreground-color;
+ }
+
+ @else if ($direction == inset-down) {
+ border-width: $height $width;
+ border-style: solid;
+ border-color: $foreground-color $background-color $background-color;
+ }
+
+ @else if ($direction == inset-right) {
+ border-width: $width $height;
+ border-style: solid;
+ border-color: $background-color $background-color $background-color $foreground-color;
+ }
+
+ @else if ($direction == inset-left) {
+ border-width: $width $height;
+ border-style: solid;
+ border-color: $background-color $foreground-color $background-color $background-color;
+ }
+}
diff --git a/themes/learn2/scss/vendor/bourbon/addons/_word-wrap.scss b/themes/learn2/scss/vendor/bourbon/addons/_word-wrap.scss
new file mode 100644
index 0000000..9734a59
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/addons/_word-wrap.scss
@@ -0,0 +1,8 @@
+@mixin word-wrap($wrap: break-word) {
+ word-wrap: $wrap;
+
+ @if $wrap == break-word {
+ overflow-wrap: break-word;
+ word-break: break-all;
+ }
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_animation.scss b/themes/learn2/scss/vendor/bourbon/css3/_animation.scss
new file mode 100644
index 0000000..08c3dbf
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_animation.scss
@@ -0,0 +1,52 @@
+// http://www.w3.org/TR/css3-animations/#the-animation-name-property-
+// Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties.
+
+// Official animation shorthand property.
+@mixin animation ($animations...) {
+ @include prefixer(animation, $animations, webkit moz spec);
+}
+
+// Individual Animation Properties
+@mixin animation-name ($names...) {
+ @include prefixer(animation-name, $names, webkit moz spec);
+}
+
+
+@mixin animation-duration ($times...) {
+ @include prefixer(animation-duration, $times, webkit moz spec);
+}
+
+
+@mixin animation-timing-function ($motions...) {
+// ease | linear | ease-in | ease-out | ease-in-out
+ @include prefixer(animation-timing-function, $motions, webkit moz spec);
+}
+
+
+@mixin animation-iteration-count ($values...) {
+// infinite |
+ @include prefixer(animation-iteration-count, $values, webkit moz spec);
+}
+
+
+@mixin animation-direction ($directions...) {
+// normal | alternate
+ @include prefixer(animation-direction, $directions, webkit moz spec);
+}
+
+
+@mixin animation-play-state ($states...) {
+// running | paused
+ @include prefixer(animation-play-state, $states, webkit moz spec);
+}
+
+
+@mixin animation-delay ($times...) {
+ @include prefixer(animation-delay, $times, webkit moz spec);
+}
+
+
+@mixin animation-fill-mode ($modes...) {
+// none | forwards | backwards | both
+ @include prefixer(animation-fill-mode, $modes, webkit moz spec);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_appearance.scss b/themes/learn2/scss/vendor/bourbon/css3/_appearance.scss
new file mode 100644
index 0000000..3eb16e4
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_appearance.scss
@@ -0,0 +1,3 @@
+@mixin appearance ($value) {
+ @include prefixer(appearance, $value, webkit moz ms o spec);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_backface-visibility.scss b/themes/learn2/scss/vendor/bourbon/css3/_backface-visibility.scss
new file mode 100644
index 0000000..1161fe6
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_backface-visibility.scss
@@ -0,0 +1,6 @@
+//************************************************************************//
+// Backface-visibility mixin
+//************************************************************************//
+@mixin backface-visibility($visibility) {
+ @include prefixer(backface-visibility, $visibility, webkit spec);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_background-image.scss b/themes/learn2/scss/vendor/bourbon/css3/_background-image.scss
new file mode 100644
index 0000000..6abe88b
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_background-image.scss
@@ -0,0 +1,42 @@
+//************************************************************************//
+// Background-image property for adding multiple background images with
+// gradients, or for stringing multiple gradients together.
+//************************************************************************//
+
+@mixin background-image($images...) {
+ $webkit-images: ();
+ $spec-images: ();
+
+ @each $image in $images {
+ $webkit-image: ();
+ $spec-image: ();
+
+ @if (type-of($image) == string) {
+ $url-str: str-slice($image, 0, 3);
+ $gradient-type: str-slice($image, 0, 6);
+
+ @if $url-str == "url" {
+ $webkit-image: $image;
+ $spec-image: $image;
+ }
+
+ @else if $gradient-type == "linear" {
+ $gradients: _linear-gradient-parser($image);
+ $webkit-image: map-get($gradients, webkit-image);
+ $spec-image: map-get($gradients, spec-image);
+ }
+
+ @else if $gradient-type == "radial" {
+ $gradients: _radial-gradient-parser($image);
+ $webkit-image: map-get($gradients, webkit-image);
+ $spec-image: map-get($gradients, spec-image);
+ }
+ }
+
+ $webkit-images: append($webkit-images, $webkit-image, comma);
+ $spec-images: append($spec-images, $spec-image, comma);
+ }
+
+ background-image: $webkit-images;
+ background-image: $spec-images;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_background.scss b/themes/learn2/scss/vendor/bourbon/css3/_background.scss
new file mode 100644
index 0000000..9bce930
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_background.scss
@@ -0,0 +1,55 @@
+//************************************************************************//
+// Background property for adding multiple backgrounds using shorthand
+// notation.
+//************************************************************************//
+
+@mixin background($backgrounds...) {
+ $webkit-backgrounds: ();
+ $spec-backgrounds: ();
+
+ @each $background in $backgrounds {
+ $webkit-background: ();
+ $spec-background: ();
+ $background-type: type-of($background);
+
+ @if $background-type == string or list {
+ $background-str: if($background-type == list, nth($background, 1), $background);
+
+ $url-str: str-slice($background-str, 0, 3);
+ $gradient-type: str-slice($background-str, 0, 6);
+
+ @if $url-str == "url" {
+ $webkit-background: $background;
+ $spec-background: $background;
+ }
+
+ @else if $gradient-type == "linear" {
+ $gradients: _linear-gradient-parser("#{$background}");
+ $webkit-background: map-get($gradients, webkit-image);
+ $spec-background: map-get($gradients, spec-image);
+ }
+
+ @else if $gradient-type == "radial" {
+ $gradients: _radial-gradient-parser("#{$background}");
+ $webkit-background: map-get($gradients, webkit-image);
+ $spec-background: map-get($gradients, spec-image);
+ }
+
+ @else {
+ $webkit-background: $background;
+ $spec-background: $background;
+ }
+ }
+
+ @else {
+ $webkit-background: $background;
+ $spec-background: $background;
+ }
+
+ $webkit-backgrounds: append($webkit-backgrounds, $webkit-background, comma);
+ $spec-backgrounds: append($spec-backgrounds, $spec-background, comma);
+ }
+
+ background: $webkit-backgrounds;
+ background: $spec-backgrounds;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_border-image.scss b/themes/learn2/scss/vendor/bourbon/css3/_border-image.scss
new file mode 100644
index 0000000..e338c2d
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_border-image.scss
@@ -0,0 +1,59 @@
+@mixin border-image($borders...) {
+ $webkit-borders: ();
+ $spec-borders: ();
+
+ @each $border in $borders {
+ $webkit-border: ();
+ $spec-border: ();
+ $border-type: type-of($border);
+
+ @if $border-type == string or list {
+ $border-str: if($border-type == list, nth($border, 1), $border);
+
+ $url-str: str-slice($border-str, 0, 3);
+ $gradient-type: str-slice($border-str, 0, 6);
+
+ @if $url-str == "url" {
+ $webkit-border: $border;
+ $spec-border: $border;
+ }
+
+ @else if $gradient-type == "linear" {
+ $gradients: _linear-gradient-parser("#{$border}");
+ $webkit-border: map-get($gradients, webkit-image);
+ $spec-border: map-get($gradients, spec-image);
+ }
+
+ @else if $gradient-type == "radial" {
+ $gradients: _radial-gradient-parser("#{$border}");
+ $webkit-border: map-get($gradients, webkit-image);
+ $spec-border: map-get($gradients, spec-image);
+ }
+
+ @else {
+ $webkit-border: $border;
+ $spec-border: $border;
+ }
+ }
+
+ @else {
+ $webkit-border: $border;
+ $spec-border: $border;
+ }
+
+ $webkit-borders: append($webkit-borders, $webkit-border, comma);
+ $spec-borders: append($spec-borders, $spec-border, comma);
+ }
+
+ -webkit-border-image: $webkit-borders;
+ border-image: $spec-borders;
+ border-style: solid;
+}
+
+//Examples:
+// @include border-image(url("image.png"));
+// @include border-image(url("image.png") 20 stretch);
+// @include border-image(linear-gradient(45deg, orange, yellow));
+// @include border-image(linear-gradient(45deg, orange, yellow) stretch);
+// @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round);
+// @include border-image(radial-gradient(top, cover, orange, yellow, orange));
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_border-radius.scss b/themes/learn2/scss/vendor/bourbon/css3/_border-radius.scss
new file mode 100644
index 0000000..7c17190
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_border-radius.scss
@@ -0,0 +1,22 @@
+//************************************************************************//
+// Shorthand Border-radius mixins
+//************************************************************************//
+@mixin border-top-radius($radii) {
+ @include prefixer(border-top-left-radius, $radii, spec);
+ @include prefixer(border-top-right-radius, $radii, spec);
+}
+
+@mixin border-bottom-radius($radii) {
+ @include prefixer(border-bottom-left-radius, $radii, spec);
+ @include prefixer(border-bottom-right-radius, $radii, spec);
+}
+
+@mixin border-left-radius($radii) {
+ @include prefixer(border-top-left-radius, $radii, spec);
+ @include prefixer(border-bottom-left-radius, $radii, spec);
+}
+
+@mixin border-right-radius($radii) {
+ @include prefixer(border-top-right-radius, $radii, spec);
+ @include prefixer(border-bottom-right-radius, $radii, spec);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_box-sizing.scss b/themes/learn2/scss/vendor/bourbon/css3/_box-sizing.scss
new file mode 100644
index 0000000..f07e1d4
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_box-sizing.scss
@@ -0,0 +1,4 @@
+@mixin box-sizing ($box) {
+// content-box | border-box | inherit
+ @include prefixer(box-sizing, $box, webkit moz spec);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_calc.scss b/themes/learn2/scss/vendor/bourbon/css3/_calc.scss
new file mode 100644
index 0000000..94d7e4c
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_calc.scss
@@ -0,0 +1,4 @@
+@mixin calc($property, $value) {
+ #{$property}: -webkit-calc(#{$value});
+ #{$property}: calc(#{$value});
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_columns.scss b/themes/learn2/scss/vendor/bourbon/css3/_columns.scss
new file mode 100644
index 0000000..96f601c
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_columns.scss
@@ -0,0 +1,47 @@
+@mixin columns($arg: auto) {
+// ||
+ @include prefixer(columns, $arg, webkit moz spec);
+}
+
+@mixin column-count($int: auto) {
+// auto || integer
+ @include prefixer(column-count, $int, webkit moz spec);
+}
+
+@mixin column-gap($length: normal) {
+// normal || length
+ @include prefixer(column-gap, $length, webkit moz spec);
+}
+
+@mixin column-fill($arg: auto) {
+// auto || length
+ @include prefixer(column-fill, $arg, webkit moz spec);
+}
+
+@mixin column-rule($arg) {
+// || ||
+ @include prefixer(column-rule, $arg, webkit moz spec);
+}
+
+@mixin column-rule-color($color) {
+ @include prefixer(column-rule-color, $color, webkit moz spec);
+}
+
+@mixin column-rule-style($style: none) {
+// none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid
+ @include prefixer(column-rule-style, $style, webkit moz spec);
+}
+
+@mixin column-rule-width ($width: none) {
+ @include prefixer(column-rule-width, $width, webkit moz spec);
+}
+
+@mixin column-span($arg: none) {
+// none || all
+ @include prefixer(column-span, $arg, webkit moz spec);
+}
+
+@mixin column-width($length: auto) {
+// auto || length
+ @include prefixer(column-width, $length, webkit moz spec);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_filter.scss b/themes/learn2/scss/vendor/bourbon/css3/_filter.scss
new file mode 100644
index 0000000..8560d77
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_filter.scss
@@ -0,0 +1,5 @@
+@mixin filter($function: none) {
+ // [
+ @include prefixer(perspective, $depth, webkit moz spec);
+}
+
+@mixin perspective-origin($value: 50% 50%) {
+ @include prefixer(perspective-origin, $value, webkit moz spec);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_placeholder.scss b/themes/learn2/scss/vendor/bourbon/css3/_placeholder.scss
new file mode 100644
index 0000000..5682fd0
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_placeholder.scss
@@ -0,0 +1,8 @@
+@mixin placeholder {
+ $placeholders: ":-webkit-input" ":-moz" "-moz" "-ms-input";
+ @each $placeholder in $placeholders {
+ &:#{$placeholder}-placeholder {
+ @content;
+ }
+ }
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_radial-gradient.scss b/themes/learn2/scss/vendor/bourbon/css3/_radial-gradient.scss
new file mode 100644
index 0000000..7a8c376
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_radial-gradient.scss
@@ -0,0 +1,39 @@
+// Requires Sass 3.1+
+@mixin radial-gradient($G1, $G2,
+ $G3: null, $G4: null,
+ $G5: null, $G6: null,
+ $G7: null, $G8: null,
+ $G9: null, $G10: null,
+ $pos: null,
+ $shape-size: null,
+ $fallback: null) {
+
+ $data: _radial-arg-parser($G1, $G2, $pos, $shape-size);
+ $G1: nth($data, 1);
+ $G2: nth($data, 2);
+ $pos: nth($data, 3);
+ $shape-size: nth($data, 4);
+
+ $full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10;
+
+ // Strip deprecated cover/contain for spec
+ $shape-size-spec: _shape-size-stripper($shape-size);
+
+ // Set $G1 as the default fallback color
+ $first-color: nth($full, 1);
+ $fallback-color: nth($first-color, 1);
+
+ @if (type-of($fallback) == color) or ($fallback == "transparent") {
+ $fallback-color: $fallback;
+ }
+
+ // Add Commas and spaces
+ $shape-size: if($shape-size, '#{$shape-size}, ', null);
+ $pos: if($pos, '#{$pos}, ', null);
+ $pos-spec: if($pos, 'at #{$pos}', null);
+ $shape-size-spec: if(($shape-size-spec != ' ') and ($pos == null), '#{$shape-size-spec}, ', '#{$shape-size-spec} ');
+
+ background-color: $fallback-color;
+ background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full}));
+ background-image: unquote("radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})");
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_transform.scss b/themes/learn2/scss/vendor/bourbon/css3/_transform.scss
new file mode 100644
index 0000000..8cc3596
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_transform.scss
@@ -0,0 +1,15 @@
+@mixin transform($property: none) {
+// none |
+ @include prefixer(transform, $property, webkit moz ms o spec);
+}
+
+@mixin transform-origin($axes: 50%) {
+// x-axis - left | center | right | length | %
+// y-axis - top | center | bottom | length | %
+// z-axis - length
+ @include prefixer(transform-origin, $axes, webkit moz ms o spec);
+}
+
+@mixin transform-style ($style: flat) {
+ @include prefixer(transform-style, $style, webkit moz ms o spec);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_transition.scss b/themes/learn2/scss/vendor/bourbon/css3/_transition.scss
new file mode 100644
index 0000000..5ad4c0a
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_transition.scss
@@ -0,0 +1,77 @@
+// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable.
+// Example: @include transition (all 2s ease-in-out);
+// @include transition (opacity 1s ease-in 2s, width 2s ease-out);
+// @include transition-property (transform, opacity);
+
+@mixin transition ($properties...) {
+ // Fix for vendor-prefix transform property
+ $needs-prefixes: false;
+ $webkit: ();
+ $moz: ();
+ $spec: ();
+
+ // Create lists for vendor-prefixed transform
+ @each $list in $properties {
+ @if nth($list, 1) == "transform" {
+ $needs-prefixes: true;
+ $list1: -webkit-transform;
+ $list2: -moz-transform;
+ $list3: ();
+
+ @each $var in $list {
+ $list3: join($list3, $var);
+
+ @if $var != "transform" {
+ $list1: join($list1, $var);
+ $list2: join($list2, $var);
+ }
+ }
+
+ $webkit: append($webkit, $list1);
+ $moz: append($moz, $list2);
+ $spec: append($spec, $list3);
+ }
+
+ // Create lists for non-prefixed transition properties
+ @else {
+ $webkit: append($webkit, $list, comma);
+ $moz: append($moz, $list, comma);
+ $spec: append($spec, $list, comma);
+ }
+ }
+
+ @if $needs-prefixes {
+ -webkit-transition: $webkit;
+ -moz-transition: $moz;
+ transition: $spec;
+ }
+ @else {
+ @if length($properties) >= 1 {
+ @include prefixer(transition, $properties, webkit moz spec);
+ }
+
+ @else {
+ $properties: all 0.15s ease-out 0s;
+ @include prefixer(transition, $properties, webkit moz spec);
+ }
+ }
+}
+
+@mixin transition-property ($properties...) {
+ -webkit-transition-property: transition-property-names($properties, 'webkit');
+ -moz-transition-property: transition-property-names($properties, 'moz');
+ transition-property: transition-property-names($properties, false);
+}
+
+@mixin transition-duration ($times...) {
+ @include prefixer(transition-duration, $times, webkit moz spec);
+}
+
+@mixin transition-timing-function ($motions...) {
+// ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier()
+ @include prefixer(transition-timing-function, $motions, webkit moz spec);
+}
+
+@mixin transition-delay ($times...) {
+ @include prefixer(transition-delay, $times, webkit moz spec);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/css3/_user-select.scss b/themes/learn2/scss/vendor/bourbon/css3/_user-select.scss
new file mode 100644
index 0000000..1380aa8
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/css3/_user-select.scss
@@ -0,0 +1,3 @@
+@mixin user-select($arg: none) {
+ @include prefixer(user-select, $arg, webkit moz ms spec);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/functions/_assign.scss b/themes/learn2/scss/vendor/bourbon/functions/_assign.scss
new file mode 100644
index 0000000..9a1db93
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/functions/_assign.scss
@@ -0,0 +1,11 @@
+@function assign-inputs($inputs, $pseudo: null) {
+ $list : ();
+
+ @each $input in $inputs {
+ $input: unquote($input);
+ $input: if($pseudo, $input + ":" + $pseudo, $input);
+ $list: append($list, $input, comma);
+ }
+
+ @return $list;
+}
\ No newline at end of file
diff --git a/themes/learn2/scss/vendor/bourbon/functions/_color-lightness.scss b/themes/learn2/scss/vendor/bourbon/functions/_color-lightness.scss
new file mode 100644
index 0000000..8c6df4e
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/functions/_color-lightness.scss
@@ -0,0 +1,13 @@
+// Programatically determines whether a color is light or dark
+// Returns a boolean
+// More details here http://robots.thoughtbot.com/closer-look-color-lightness
+
+@function is-light($hex-color) {
+ $-local-red: red(rgba($hex-color, 1.0));
+ $-local-green: green(rgba($hex-color, 1.0));
+ $-local-blue: blue(rgba($hex-color, 1.0));
+
+ $-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255;
+
+ @return $-local-lightness > .6;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/functions/_flex-grid.scss b/themes/learn2/scss/vendor/bourbon/functions/_flex-grid.scss
new file mode 100644
index 0000000..3bbd866
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/functions/_flex-grid.scss
@@ -0,0 +1,39 @@
+// Flexible grid
+@function flex-grid($columns, $container-columns: $fg-max-columns) {
+ $width: $columns * $fg-column + ($columns - 1) * $fg-gutter;
+ $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
+ @return percentage($width / $container-width);
+}
+
+// Flexible gutter
+@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) {
+ $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
+ @return percentage($gutter / $container-width);
+}
+
+// The $fg-column, $fg-gutter and $fg-max-columns variables must be defined in your base stylesheet to properly use the flex-grid function.
+// This function takes the fluid grid equation (target / context = result) and uses columns to help define each.
+//
+// The calculation presumes that your column structure will be missing the last gutter:
+//
+// -- column -- gutter -- column -- gutter -- column
+//
+// $fg-column: 60px; // Column Width
+// $fg-gutter: 25px; // Gutter Width
+// $fg-max-columns: 12; // Total Columns For Main Container
+//
+// div {
+// width: flex-grid(4); // returns (315px / 995px) = 31.65829%;
+// margin-left: flex-gutter(); // returns (25px / 995px) = 2.51256%;
+//
+// p {
+// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;
+// float: left;
+// margin: flex-gutter(4); // returns (25px / 315px) = 7.936508%;
+// }
+//
+// blockquote {
+// float: left;
+// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;
+// }
+// }
\ No newline at end of file
diff --git a/themes/learn2/scss/vendor/bourbon/functions/_golden-ratio.scss b/themes/learn2/scss/vendor/bourbon/functions/_golden-ratio.scss
new file mode 100644
index 0000000..463d14a
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/functions/_golden-ratio.scss
@@ -0,0 +1,3 @@
+@function golden-ratio($value, $increment) {
+ @return modular-scale($value, $increment, $golden)
+}
diff --git a/themes/learn2/scss/vendor/bourbon/functions/_grid-width.scss b/themes/learn2/scss/vendor/bourbon/functions/_grid-width.scss
new file mode 100644
index 0000000..8e63d83
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/functions/_grid-width.scss
@@ -0,0 +1,13 @@
+@function grid-width($n) {
+ @return $n * $gw-column + ($n - 1) * $gw-gutter;
+}
+
+// The $gw-column and $gw-gutter variables must be defined in your base stylesheet to properly use the grid-width function.
+//
+// $gw-column: 100px; // Column Width
+// $gw-gutter: 40px; // Gutter Width
+//
+// div {
+// width: grid-width(4); // returns 520px;
+// margin-left: $gw-gutter; // returns 40px;
+// }
diff --git a/themes/learn2/scss/vendor/bourbon/functions/_modular-scale.scss b/themes/learn2/scss/vendor/bourbon/functions/_modular-scale.scss
new file mode 100644
index 0000000..afc59eb
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/functions/_modular-scale.scss
@@ -0,0 +1,66 @@
+// Scaling Variables
+$golden: 1.618;
+$minor-second: 1.067;
+$major-second: 1.125;
+$minor-third: 1.2;
+$major-third: 1.25;
+$perfect-fourth: 1.333;
+$augmented-fourth: 1.414;
+$perfect-fifth: 1.5;
+$minor-sixth: 1.6;
+$major-sixth: 1.667;
+$minor-seventh: 1.778;
+$major-seventh: 1.875;
+$octave: 2;
+$major-tenth: 2.5;
+$major-eleventh: 2.667;
+$major-twelfth: 3;
+$double-octave: 4;
+
+@function modular-scale($value, $increment, $ratio) {
+ $v1: nth($value, 1);
+ $v2: nth($value, length($value));
+ $value: $v1;
+
+ // scale $v2 to just above $v1
+ @while $v2 > $v1 {
+ $v2: ($v2 / $ratio); // will be off-by-1
+ }
+ @while $v2 < $v1 {
+ $v2: ($v2 * $ratio); // will fix off-by-1
+ }
+
+ // check AFTER scaling $v2 to prevent double-counting corner-case
+ $double-stranded: $v2 > $v1;
+
+ @if $increment > 0 {
+ @for $i from 1 through $increment {
+ @if $double-stranded and ($v1 * $ratio) > $v2 {
+ $value: $v2;
+ $v2: ($v2 * $ratio);
+ } @else {
+ $v1: ($v1 * $ratio);
+ $value: $v1;
+ }
+ }
+ }
+
+ @if $increment < 0 {
+ // adjust $v2 to just below $v1
+ @if $double-stranded {
+ $v2: ($v2 / $ratio);
+ }
+
+ @for $i from $increment through -1 {
+ @if $double-stranded and ($v1 / $ratio) < $v2 {
+ $value: $v2;
+ $v2: ($v2 / $ratio);
+ } @else {
+ $v1: ($v1 / $ratio);
+ $value: $v1;
+ }
+ }
+ }
+
+ @return $value;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/functions/_px-to-em.scss b/themes/learn2/scss/vendor/bourbon/functions/_px-to-em.scss
new file mode 100644
index 0000000..4832245
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/functions/_px-to-em.scss
@@ -0,0 +1,13 @@
+// Convert pixels to ems
+// eg. for a relational value of 12px write em(12) when the parent is 16px
+// if the parent is another value say 24px write em(12, 24)
+
+@function em($pxval, $base: $em-base) {
+ @if not unitless($pxval) {
+ $pxval: strip-units($pxval);
+ }
+ @if not unitless($base) {
+ $base: strip-units($base);
+ }
+ @return ($pxval / $base) * 1em;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/functions/_px-to-rem.scss b/themes/learn2/scss/vendor/bourbon/functions/_px-to-rem.scss
new file mode 100644
index 0000000..96b244e
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/functions/_px-to-rem.scss
@@ -0,0 +1,15 @@
+// Convert pixels to rems
+// eg. for a relational value of 12px write rem(12)
+// Assumes $em-base is the font-size of
+
+@function rem($pxval) {
+ @if not unitless($pxval) {
+ $pxval: strip-units($pxval);
+ }
+
+ $base: $em-base;
+ @if not unitless($base) {
+ $base: strip-units($base);
+ }
+ @return ($pxval / $base) * 1rem;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/functions/_strip-units.scss b/themes/learn2/scss/vendor/bourbon/functions/_strip-units.scss
new file mode 100644
index 0000000..6afc6e6
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/functions/_strip-units.scss
@@ -0,0 +1,5 @@
+// Srtips the units from a value. e.g. 12px -> 12
+
+@function strip-units($val) {
+ @return ($val / ($val * 0 + 1));
+}
diff --git a/themes/learn2/scss/vendor/bourbon/functions/_tint-shade.scss b/themes/learn2/scss/vendor/bourbon/functions/_tint-shade.scss
new file mode 100644
index 0000000..f717200
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/functions/_tint-shade.scss
@@ -0,0 +1,9 @@
+// Add percentage of white to a color
+@function tint($color, $percent){
+ @return mix(white, $color, $percent);
+}
+
+// Add percentage of black to a color
+@function shade($color, $percent){
+ @return mix(black, $color, $percent);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/functions/_transition-property-name.scss b/themes/learn2/scss/vendor/bourbon/functions/_transition-property-name.scss
new file mode 100644
index 0000000..54cd422
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/functions/_transition-property-name.scss
@@ -0,0 +1,22 @@
+// Return vendor-prefixed property names if appropriate
+// Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background
+//************************************************************************//
+@function transition-property-names($props, $vendor: false) {
+ $new-props: ();
+
+ @each $prop in $props {
+ $new-props: append($new-props, transition-property-name($prop, $vendor), comma);
+ }
+
+ @return $new-props;
+}
+
+@function transition-property-name($prop, $vendor: false) {
+ // put other properties that need to be prefixed here aswell
+ @if $vendor and $prop == transform {
+ @return unquote('-'+$vendor+'-'+$prop);
+ }
+ @else {
+ @return $prop;
+ }
+}
\ No newline at end of file
diff --git a/themes/learn2/scss/vendor/bourbon/functions/_unpack.scss b/themes/learn2/scss/vendor/bourbon/functions/_unpack.scss
new file mode 100644
index 0000000..3775963
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/functions/_unpack.scss
@@ -0,0 +1,17 @@
+// Convert shorthand to the 4-value syntax
+
+@function unpack($shorthand) {
+ @if length($shorthand) == 1 {
+ @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1);
+ }
+ @else if length($shorthand) == 2 {
+ @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2);
+ }
+ @else if length($shorthand) == 3 {
+ @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2);
+ }
+ @else {
+ @return $shorthand;
+ }
+}
+
diff --git a/themes/learn2/scss/vendor/bourbon/helpers/_convert-units.scss b/themes/learn2/scss/vendor/bourbon/helpers/_convert-units.scss
new file mode 100644
index 0000000..3443db3
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/helpers/_convert-units.scss
@@ -0,0 +1,15 @@
+//************************************************************************//
+// Helper function for str-to-num fn.
+// Source: http://sassmeister.com/gist/9647408
+//************************************************************************//
+@function _convert-units($number, $unit) {
+ $strings: 'px' 'cm' 'mm' '%' 'ch' 'pica' 'in' 'em' 'rem' 'pt' 'pc' 'ex' 'vw' 'vh' 'vmin' 'vmax', 'deg', 'rad', 'grad', 'turn';
+ $units: 1px 1cm 1mm 1% 1ch 1pica 1in 1em 1rem 1pt 1pc 1ex 1vw 1vh 1vmin 1vmax, 1deg, 1rad, 1grad, 1turn;
+ $index: index($strings, $unit);
+
+ @if not $index {
+ @warn "Unknown unit `#{$unit}`.";
+ @return false;
+ }
+ @return $number * nth($units, $index);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/helpers/_gradient-positions-parser.scss b/themes/learn2/scss/vendor/bourbon/helpers/_gradient-positions-parser.scss
new file mode 100644
index 0000000..07d30b6
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/helpers/_gradient-positions-parser.scss
@@ -0,0 +1,13 @@
+@function _gradient-positions-parser($gradient-type, $gradient-positions) {
+ @if $gradient-positions
+ and ($gradient-type == linear)
+ and (type-of($gradient-positions) != color) {
+ $gradient-positions: _linear-positions-parser($gradient-positions);
+ }
+ @else if $gradient-positions
+ and ($gradient-type == radial)
+ and (type-of($gradient-positions) != color) {
+ $gradient-positions: _radial-positions-parser($gradient-positions);
+ }
+ @return $gradient-positions;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/helpers/_is-num.scss b/themes/learn2/scss/vendor/bourbon/helpers/_is-num.scss
new file mode 100644
index 0000000..71459e1
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/helpers/_is-num.scss
@@ -0,0 +1,8 @@
+//************************************************************************//
+// Helper for linear-gradient-parser
+//************************************************************************//
+@function _is-num($char) {
+ $values: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 0 1 2 3 4 5 6 7 8 9;
+ $index: index($values, $char);
+ @return if($index, true, false);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/helpers/_linear-angle-parser.scss b/themes/learn2/scss/vendor/bourbon/helpers/_linear-angle-parser.scss
new file mode 100644
index 0000000..e0401ed
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/helpers/_linear-angle-parser.scss
@@ -0,0 +1,25 @@
+// Private function for linear-gradient-parser
+@function _linear-angle-parser($image, $first-val, $prefix, $suffix) {
+ $offset: null;
+ $unit-short: str-slice($first-val, str-length($first-val) - 2, str-length($first-val));
+ $unit-long: str-slice($first-val, str-length($first-val) - 3, str-length($first-val));
+
+ @if ($unit-long == "grad") or
+ ($unit-long == "turn") {
+ $offset: if($unit-long == "grad", -100grad * 3, -0.75turn);
+ }
+
+ @else if ($unit-short == "deg") or
+ ($unit-short == "rad") {
+ $offset: if($unit-short == "deg", -90 * 3, 1.6rad);
+ }
+
+ @if $offset {
+ $num: _str-to-num($first-val);
+
+ @return (
+ webkit-image: -webkit- + $prefix + ($offset - $num) + $suffix,
+ spec-image: $image
+ );
+ }
+}
diff --git a/themes/learn2/scss/vendor/bourbon/helpers/_linear-gradient-parser.scss b/themes/learn2/scss/vendor/bourbon/helpers/_linear-gradient-parser.scss
new file mode 100644
index 0000000..12bcdcd
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/helpers/_linear-gradient-parser.scss
@@ -0,0 +1,41 @@
+@function _linear-gradient-parser($image) {
+ $image: unquote($image);
+ $gradients: ();
+ $start: str-index($image, "(");
+ $end: str-index($image, ",");
+ $first-val: str-slice($image, $start + 1, $end - 1);
+
+ $prefix: str-slice($image, 0, $start);
+ $suffix: str-slice($image, $end, str-length($image));
+
+ $has-multiple-vals: str-index($first-val, " ");
+ $has-single-position: unquote(_position-flipper($first-val) + "");
+ $has-angle: _is-num(str-slice($first-val, 0, 0));
+
+ @if $has-multiple-vals {
+ $gradients: _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals);
+ }
+
+ @else if $has-single-position != "" {
+ $pos: unquote($has-single-position + "");
+
+ $gradients: (
+ webkit-image: -webkit- + $image,
+ spec-image: $prefix + "to " + $pos + $suffix
+ );
+ }
+
+ @else if $has-angle {
+ // Rotate degree for webkit
+ $gradients: _linear-angle-parser($image, $first-val, $prefix, $suffix);
+ }
+
+ @else {
+ $gradients: (
+ webkit-image: -webkit- + $image,
+ spec-image: $image
+ );
+ }
+
+ @return $gradients;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/helpers/_linear-positions-parser.scss b/themes/learn2/scss/vendor/bourbon/helpers/_linear-positions-parser.scss
new file mode 100644
index 0000000..d26383e
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/helpers/_linear-positions-parser.scss
@@ -0,0 +1,61 @@
+@function _linear-positions-parser($pos) {
+ $type: type-of(nth($pos, 1));
+ $spec: null;
+ $degree: null;
+ $side: null;
+ $corner: null;
+ $length: length($pos);
+ // Parse Side and corner positions
+ @if ($length > 1) {
+ @if nth($pos, 1) == "to" { // Newer syntax
+ $side: nth($pos, 2);
+
+ @if $length == 2 { // eg. to top
+ // Swap for backwards compatability
+ $degree: _position-flipper(nth($pos, 2));
+ }
+ @else if $length == 3 { // eg. to top left
+ $corner: nth($pos, 3);
+ }
+ }
+ @else if $length == 2 { // Older syntax ("top left")
+ $side: _position-flipper(nth($pos, 1));
+ $corner: _position-flipper(nth($pos, 2));
+ }
+
+ @if ("#{$side} #{$corner}" == "left top") or ("#{$side} #{$corner}" == "top left") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "right top") or ("#{$side} #{$corner}" == "top right") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "right bottom") or ("#{$side} #{$corner}" == "bottom right") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "left bottom") or ("#{$side} #{$corner}" == "bottom left") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ $spec: to $side $corner;
+ }
+ @else if $length == 1 {
+ // Swap for backwards compatability
+ @if $type == string {
+ $degree: $pos;
+ $spec: to _position-flipper($pos);
+ }
+ @else {
+ $degree: -270 - $pos; //rotate the gradient opposite from spec
+ $spec: $pos;
+ }
+ }
+ $degree: unquote($degree + ",");
+ $spec: unquote($spec + ",");
+ @return $degree $spec;
+}
+
+@function _position-flipper($pos) {
+ @return if($pos == left, right, null)
+ if($pos == right, left, null)
+ if($pos == top, bottom, null)
+ if($pos == bottom, top, null);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/helpers/_linear-side-corner-parser.scss b/themes/learn2/scss/vendor/bourbon/helpers/_linear-side-corner-parser.scss
new file mode 100644
index 0000000..86ad88f
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/helpers/_linear-side-corner-parser.scss
@@ -0,0 +1,31 @@
+// Private function for linear-gradient-parser
+@function _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals) {
+ $val-1: str-slice($first-val, 0, $has-multiple-vals - 1 );
+ $val-2: str-slice($first-val, $has-multiple-vals + 1, str-length($first-val));
+ $val-3: null;
+ $has-val-3: str-index($val-2, " ");
+
+ @if $has-val-3 {
+ $val-3: str-slice($val-2, $has-val-3 + 1, str-length($val-2));
+ $val-2: str-slice($val-2, 0, $has-val-3 - 1);
+ }
+
+ $pos: _position-flipper($val-1) _position-flipper($val-2) _position-flipper($val-3);
+ $pos: unquote($pos + "");
+
+ // Use old spec for webkit
+ @if $val-1 == "to" {
+ @return (
+ webkit-image: -webkit- + $prefix + $pos + $suffix,
+ spec-image: $image
+ );
+ }
+
+ // Bring the code up to spec
+ @else {
+ @return (
+ webkit-image: -webkit- + $image,
+ spec-image: $prefix + "to " + $pos + $suffix
+ );
+ }
+}
diff --git a/themes/learn2/scss/vendor/bourbon/helpers/_radial-arg-parser.scss b/themes/learn2/scss/vendor/bourbon/helpers/_radial-arg-parser.scss
new file mode 100644
index 0000000..a3a3704
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/helpers/_radial-arg-parser.scss
@@ -0,0 +1,69 @@
+@function _radial-arg-parser($G1, $G2, $pos, $shape-size) {
+ @each $value in $G1, $G2 {
+ $first-val: nth($value, 1);
+ $pos-type: type-of($first-val);
+ $spec-at-index: null;
+
+ // Determine if spec was passed to mixin
+ @if type-of($value) == list {
+ $spec-at-index: if(index($value, at), index($value, at), false);
+ }
+ @if $spec-at-index {
+ @if $spec-at-index > 1 {
+ @for $i from 1 through ($spec-at-index - 1) {
+ $shape-size: $shape-size nth($value, $i);
+ }
+ @for $i from ($spec-at-index + 1) through length($value) {
+ $pos: $pos nth($value, $i);
+ }
+ }
+ @else if $spec-at-index == 1 {
+ @for $i from ($spec-at-index + 1) through length($value) {
+ $pos: $pos nth($value, $i);
+ }
+ }
+ $G1: null;
+ }
+
+ // If not spec calculate correct values
+ @else {
+ @if ($pos-type != color) or ($first-val != "transparent") {
+ @if ($pos-type == number)
+ or ($first-val == "center")
+ or ($first-val == "top")
+ or ($first-val == "right")
+ or ($first-val == "bottom")
+ or ($first-val == "left") {
+
+ $pos: $value;
+
+ @if $pos == $G1 {
+ $G1: null;
+ }
+ }
+
+ @else if
+ ($first-val == "ellipse")
+ or ($first-val == "circle")
+ or ($first-val == "closest-side")
+ or ($first-val == "closest-corner")
+ or ($first-val == "farthest-side")
+ or ($first-val == "farthest-corner")
+ or ($first-val == "contain")
+ or ($first-val == "cover") {
+
+ $shape-size: $value;
+
+ @if $value == $G1 {
+ $G1: null;
+ }
+
+ @else if $value == $G2 {
+ $G2: null;
+ }
+ }
+ }
+ }
+ }
+ @return $G1, $G2, $pos, $shape-size;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/helpers/_radial-gradient-parser.scss b/themes/learn2/scss/vendor/bourbon/helpers/_radial-gradient-parser.scss
new file mode 100644
index 0000000..6dde50f
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/helpers/_radial-gradient-parser.scss
@@ -0,0 +1,50 @@
+@function _radial-gradient-parser($image) {
+ $image: unquote($image);
+ $gradients: ();
+ $start: str-index($image, "(");
+ $end: str-index($image, ",");
+ $first-val: str-slice($image, $start + 1, $end - 1);
+
+ $prefix: str-slice($image, 0, $start);
+ $suffix: str-slice($image, $end, str-length($image));
+
+ $is-spec-syntax: str-index($first-val, "at");
+
+ @if $is-spec-syntax and $is-spec-syntax > 1 {
+ $keyword: str-slice($first-val, 1, $is-spec-syntax - 2);
+ $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val));
+ $pos: append($pos, $keyword, comma);
+
+ $gradients: (
+ webkit-image: -webkit- + $prefix + $pos + $suffix,
+ spec-image: $image
+ )
+ }
+
+ @else if $is-spec-syntax == 1 {
+ $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val));
+
+ $gradients: (
+ webkit-image: -webkit- + $prefix + $pos + $suffix,
+ spec-image: $image
+ )
+ }
+
+ @else if str-index($image, "cover") or str-index($image, "contain") {
+ @warn "Radial-gradient needs to be updated to conform to latest spec.";
+
+ $gradients: (
+ webkit-image: null,
+ spec-image: $image
+ )
+ }
+
+ @else {
+ $gradients: (
+ webkit-image: -webkit- + $image,
+ spec-image: $image
+ )
+ }
+
+ @return $gradients;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/helpers/_radial-positions-parser.scss b/themes/learn2/scss/vendor/bourbon/helpers/_radial-positions-parser.scss
new file mode 100644
index 0000000..6a5b477
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/helpers/_radial-positions-parser.scss
@@ -0,0 +1,18 @@
+@function _radial-positions-parser($gradient-pos) {
+ $shape-size: nth($gradient-pos, 1);
+ $pos: nth($gradient-pos, 2);
+ $shape-size-spec: _shape-size-stripper($shape-size);
+
+ $pre-spec: unquote(if($pos, "#{$pos}, ", null))
+ unquote(if($shape-size, "#{$shape-size},", null));
+ $pos-spec: if($pos, "at #{$pos}", null);
+
+ $spec: "#{$shape-size-spec} #{$pos-spec}";
+
+ // Add comma
+ @if ($spec != ' ') {
+ $spec: "#{$spec},"
+ }
+
+ @return $pre-spec $spec;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/helpers/_render-gradients.scss b/themes/learn2/scss/vendor/bourbon/helpers/_render-gradients.scss
new file mode 100644
index 0000000..5765676
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/helpers/_render-gradients.scss
@@ -0,0 +1,26 @@
+// User for linear and radial gradients within background-image or border-image properties
+
+@function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) {
+ $pre-spec: null;
+ $spec: null;
+ $vendor-gradients: null;
+ @if $gradient-type == linear {
+ @if $gradient-positions {
+ $pre-spec: nth($gradient-positions, 1);
+ $spec: nth($gradient-positions, 2);
+ }
+ }
+ @else if $gradient-type == radial {
+ $pre-spec: nth($gradient-positions, 1);
+ $spec: nth($gradient-positions, 2);
+ }
+
+ @if $vendor {
+ $vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients);
+ }
+ @else if $vendor == false {
+ $vendor-gradients: "#{$gradient-type}-gradient(#{$spec} #{$gradients})";
+ $vendor-gradients: unquote($vendor-gradients);
+ }
+ @return $vendor-gradients;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/helpers/_shape-size-stripper.scss b/themes/learn2/scss/vendor/bourbon/helpers/_shape-size-stripper.scss
new file mode 100644
index 0000000..ee5eda4
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/helpers/_shape-size-stripper.scss
@@ -0,0 +1,10 @@
+@function _shape-size-stripper($shape-size) {
+ $shape-size-spec: null;
+ @each $value in $shape-size {
+ @if ($value == "cover") or ($value == "contain") {
+ $value: null;
+ }
+ $shape-size-spec: "#{$shape-size-spec} #{$value}";
+ }
+ @return $shape-size-spec;
+}
diff --git a/themes/learn2/scss/vendor/bourbon/helpers/_str-to-num.scss b/themes/learn2/scss/vendor/bourbon/helpers/_str-to-num.scss
new file mode 100644
index 0000000..b3d6168
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/helpers/_str-to-num.scss
@@ -0,0 +1,50 @@
+//************************************************************************//
+// Helper function for linear/radial-gradient-parsers.
+// Source: http://sassmeister.com/gist/9647408
+//************************************************************************//
+@function _str-to-num($string) {
+ // Matrices
+ $strings: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9';
+ $numbers: 0 1 2 3 4 5 6 7 8 9;
+
+ // Result
+ $result: 0;
+ $divider: 0;
+ $minus: false;
+
+ // Looping through all characters
+ @for $i from 1 through str-length($string) {
+ $character: str-slice($string, $i, $i);
+ $index: index($strings, $character);
+
+ @if $character == '-' {
+ $minus: true;
+ }
+
+ @else if $character == '.' {
+ $divider: 1;
+ }
+
+ @else {
+ @if not $index {
+ $result: if($minus, $result * -1, $result);
+ @return _convert-units($result, str-slice($string, $i));
+ }
+
+ $number: nth($numbers, $index);
+
+ @if $divider == 0 {
+ $result: $result * 10;
+ }
+
+ @else {
+ // Move the decimal dot to the left
+ $divider: $divider * 10;
+ $number: $number / $divider;
+ }
+
+ $result: $result + $number;
+ }
+ }
+ @return if($minus, $result * -1, $result);
+}
diff --git a/themes/learn2/scss/vendor/bourbon/settings/_prefixer.scss b/themes/learn2/scss/vendor/bourbon/settings/_prefixer.scss
new file mode 100644
index 0000000..ecab49f
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/settings/_prefixer.scss
@@ -0,0 +1,6 @@
+// Variable settings for /addons/prefixer.scss
+$prefix-for-webkit: true !default;
+$prefix-for-mozilla: true !default;
+$prefix-for-microsoft: true !default;
+$prefix-for-opera: true !default;
+$prefix-for-spec: true !default; // required for keyframe mixin
diff --git a/themes/learn2/scss/vendor/bourbon/settings/_px-to-em.scss b/themes/learn2/scss/vendor/bourbon/settings/_px-to-em.scss
new file mode 100644
index 0000000..f2f9a3e
--- /dev/null
+++ b/themes/learn2/scss/vendor/bourbon/settings/_px-to-em.scss
@@ -0,0 +1 @@
+$em-base: 16px !default;
diff --git a/themes/learn2/scss/vendor/color-schemer/_color-schemer.scss b/themes/learn2/scss/vendor/color-schemer/_color-schemer.scss
new file mode 100644
index 0000000..469c697
--- /dev/null
+++ b/themes/learn2/scss/vendor/color-schemer/_color-schemer.scss
@@ -0,0 +1,31 @@
+@import "blend-modes";
+
+// Defaults
+$cs-primary : #f00 !default;
+$cs-scheme : mono !default; // mono, complement, triad, tetrad, analogic, accented-analogic
+$cs-hue-offset : 30 !default;
+$cs-brightness-offset : false !default;
+$cs-color-model : rgb !default; // rgb, ryb
+$cs-colorblind : normal !default;
+$cs-harmonize-mode : null !default;
+$cs-harmonize-color : $cs-primary !default;
+$cs-harmonize-amount : 10% !default;
+
+// Partials
+@import "color-schemer/interpolation";
+@import "color-schemer/cmyk";
+@import "color-schemer/ryb";
+@import "color-schemer/colorblind";
+@import "color-schemer/equalize";
+@import "color-schemer/mix";
+@import "color-schemer/tint-shade";
+@import "color-schemer/color-adjustments";
+@import "color-schemer/harmonize";
+@import "color-schemer/color-schemer";
+
+@import "color-schemer/comparison";
+
+@import "color-schemer/mixins";
+
+// Tell other files that this is loaded.
+$color-schemer-loaded : true;
diff --git a/themes/learn2/scss/vendor/color-schemer/color-schemer/_cmyk.scss b/themes/learn2/scss/vendor/color-schemer/color-schemer/_cmyk.scss
new file mode 100644
index 0000000..847115e
--- /dev/null
+++ b/themes/learn2/scss/vendor/color-schemer/color-schemer/_cmyk.scss
@@ -0,0 +1,14 @@
+@function cmyk($cyan, $magenta, $yellow, $black) {
+
+ // Get the color values out of white
+ $cyan : mix(cyan , white, $cyan );
+ $magenta : mix(magenta, white, $magenta);
+ $yellow : mix(yellow , white, $yellow );
+ $black : mix(black , white, $black );
+
+ // Subtract the colors from white
+ $color: white - invert($cyan) - invert($magenta) - invert($yellow) - invert($black);
+
+
+ @return $color;
+}
\ No newline at end of file
diff --git a/themes/learn2/scss/vendor/color-schemer/color-schemer/_color-adjustments.scss b/themes/learn2/scss/vendor/color-schemer/color-schemer/_color-adjustments.scss
new file mode 100644
index 0000000..6028b49
--- /dev/null
+++ b/themes/learn2/scss/vendor/color-schemer/color-schemer/_color-adjustments.scss
@@ -0,0 +1,30 @@
+// RGB functions
+@function set-red($color, $red) {
+ @return rgba($red, green($color), blue($color), alpha($color));
+}
+
+@function set-green($color, $green) {
+ @return rgba(red($color), $green, blue($color), alpha($color));
+}
+
+@function set-blue($color, $blue) {
+ @return rgba(red($color), green($color), $blue, alpha($color));
+}
+
+
+// HSL Functions
+@function set-hue($color, $hue) {
+ @return hsla($hue, saturation($color), lightness($color), alpha($color));
+}
+
+@function set-saturation($color, $saturation) {
+ @return hsla(hue($color), $saturation, lightness($color), alpha($color));
+}
+
+@function set-lightness($color, $lightness) {
+ @return hsla(hue($color), saturation($color), $lightness, alpha($color));
+}
+
+@function set-alpha($color, $alpha) {
+ @return hsla(hue($color), saturation($color), lightness($color), $alpha);
+}
\ No newline at end of file
diff --git a/themes/learn2/scss/vendor/color-schemer/color-schemer/_color-schemer.scss b/themes/learn2/scss/vendor/color-schemer/color-schemer/_color-schemer.scss
new file mode 100644
index 0000000..c092734
--- /dev/null
+++ b/themes/learn2/scss/vendor/color-schemer/color-schemer/_color-schemer.scss
@@ -0,0 +1,208 @@
+// brightness and hue offsets are based on the lightness and saturation of the color
+// unless defined otherwise.
+@function cs-brightness-offset($cs-brightness-offset) {
+ @if $cs-brightness-offset == false {
+ // find the difference between lightness
+ @return lightness($cs-primary) - lightness(invert($cs-primary));
+ }
+ @else {
+ @return $cs-brightness-offset;
+ }
+}
+
+// Harmonized or Unaltered Color
+@function clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount) {
+ @if $cs-harmonize-mode != null {
+ @return cs-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ } @else {
+ @return $color;
+ }
+}
+
+// Primary color
+@function cs-primary($cs-primary:$cs-primary, $cs-scheme:$cs-scheme, $cs-hue-offset:$cs-hue-offset, $cs-brightness-offset:$cs-brightness-offset, $cs-harmonize-mode:$cs-harmonize-mode, $cs-harmonize-color:$cs-harmonize-color, $cs-harmonize-amount:$cs-harmonize-amount) {
+ @return clean-or-harmonize($cs-primary, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+}
+
+// Secondary color scheme
+@function cs-secondary($cs-primary:$cs-primary, $cs-scheme:$cs-scheme, $cs-hue-offset:$cs-hue-offset, $cs-brightness-offset:$cs-brightness-offset, $cs-harmonize-mode:$cs-harmonize-mode, $cs-harmonize-color:$cs-harmonize-color, $cs-harmonize-amount:$cs-harmonize-amount) {
+ $cs-brightness-offset: cs-brightness-offset($cs-brightness-offset);
+
+ // mono
+ @if $cs-scheme == mono {
+ @if $cs-brightness-offset < 0 {
+ $color: lighten($cs-primary, abs($cs-brightness-offset));
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: darken($cs-primary, abs($cs-brightness-offset));
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // complement
+ @if $cs-scheme == complement {
+ @if $cs-color-model == ryb {
+ $color: ryb-complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // triad
+ @if $cs-scheme == triad {
+ @if $cs-color-model == ryb {
+ $color: ryb-adjust-hue(ryb-complement($cs-primary), $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: adjust-hue(complement($cs-primary), $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // tetrad
+ @if $cs-scheme == tetrad {
+ @if $cs-color-model == ryb {
+ $color: ryb-adjust-hue($cs-primary, $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: adjust-hue($cs-primary, $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // analogic
+ @if $cs-scheme == analogic or $cs-scheme == accented-analogic {
+ @if $cs-color-model == ryb {
+ $color: ryb-adjust-hue($cs-primary, $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: adjust-hue($cs-primary, $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+}
+
+// Tertiary color scheme
+@function cs-tertiary($cs-primary:$cs-primary, $cs-scheme:$cs-scheme, $cs-hue-offset:$cs-hue-offset, $cs-brightness-offset:$cs-brightness-offset, $cs-harmonize-mode:$cs-harmonize-mode, $cs-harmonize-color:$cs-harmonize-color, $cs-harmonize-amount:$cs-harmonize-amount) {
+ $cs-brightness-offset: cs-brightness-offset($cs-brightness-offset);
+
+ // mono
+ @if $cs-scheme == mono {
+ $color: mix(cs-primary(), cs-secondary());
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+
+ // complement
+ @if $cs-scheme == complement {
+ $color: equalize($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+
+ // triad
+ @if $cs-scheme == triad {
+ @if $cs-color-model == ryb {
+ $color: ryb-adjust-hue(ryb-complement($cs-primary), $cs-hue-offset * -1);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: adjust-hue(complement($cs-primary), $cs-hue-offset * -1);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // tetrad
+ @if $cs-scheme == tetrad {
+ @if $cs-color-model == ryb {
+ $color: ryb-complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // analogic
+ @if $cs-scheme == analogic or $cs-scheme == accented-analogic {
+ @if $cs-color-model == ryb {
+ $color: ryb-adjust-hue($cs-primary, $cs-hue-offset * -1);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: adjust-hue($cs-primary, $cs-hue-offset * -1);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // accented-analogic
+ @if $cs-scheme == accented-analogic {
+ @if $cs-color-model == ryb {
+ $color: ryb-complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+}
+
+// Quadrary color scheme
+@function cs-quadrary($cs-primary:$cs-primary, $cs-scheme:$cs-scheme, $cs-hue-offset:$cs-hue-offset, $cs-brightness-offset:$cs-brightness-offset, $cs-harmonize-mode:$cs-harmonize-mode, $cs-harmonize-color:$cs-harmonize-color, $cs-harmonize-amount:$cs-harmonize-amount) {
+ $cs-brightness-offset: cs-brightness-offset($cs-brightness-offset);
+
+ // mono
+ @if $cs-scheme == mono {
+ $color: equalize($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+
+ // complement
+ @if $cs-scheme == complement {
+ $color: equalize(ryb-complement($cs-primary));
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+
+ // triad
+ @if $cs-scheme == triad {
+ $color: equalize($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+
+ // tetrad
+ @if $cs-scheme == tetrad {
+ @if $cs-color-model == ryb {
+ $color: ryb-adjust-hue(ryb-complement($cs-primary), $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: adjust-hue(complement($cs-primary), $cs-hue-offset);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+
+ // analogic
+ @if $cs-scheme == analogic {
+ $color: equalize($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+
+ // accented-analogic
+ @if $cs-scheme == accented-analogic {
+ @if $cs-color-model == ryb {
+ $color: ryb-complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ @else {
+ $color: complement($cs-primary);
+ @return clean-or-harmonize($color, $cs-harmonize-color, $cs-harmonize-mode, $cs-harmonize-amount);
+ }
+ }
+}
diff --git a/themes/learn2/scss/vendor/color-schemer/color-schemer/_colorblind.scss b/themes/learn2/scss/vendor/color-schemer/color-schemer/_colorblind.scss
new file mode 100644
index 0000000..b509183
--- /dev/null
+++ b/themes/learn2/scss/vendor/color-schemer/color-schemer/_colorblind.scss
@@ -0,0 +1,29 @@
+@function cs-colorblind($color, $mode: $cs-colorblind) {
+
+ // Refrence: http://www.w3.org/TR/AERT#color-contrast
+
+ // Deuteranopia
+ @if $mode == deuteranopia {
+ @return $color;
+ }
+
+ // Protanopia
+ @if $mode == protanopia {
+ @return $color;
+ }
+
+ // Tritanopia
+ @if $mode == tritanopia {
+ @return $color;
+ }
+
+
+ // Return color if no color blind mode.
+ @else {
+ @return $color;
+ }
+}
+
+@function cs-cb($color, $mode: $cs-colorblind) {
+ @return cs-colorblind($color, $mode);
+}
\ No newline at end of file
diff --git a/themes/learn2/scss/vendor/color-schemer/color-schemer/_comparison.scss b/themes/learn2/scss/vendor/color-schemer/color-schemer/_comparison.scss
new file mode 100644
index 0000000..84ed665
--- /dev/null
+++ b/themes/learn2/scss/vendor/color-schemer/color-schemer/_comparison.scss
@@ -0,0 +1,15 @@
+//////////////////////////////
+// Color Is Dark
+//
+// Checks to see if the input color is a dark color taking into account both lightness and hue.
+// Suitable for determining, for instance, if a background should have a dark or light text color.
+// @return true/false (boolean)
+//////////////////////////////
+
+@function cs-is-dark($color) {
+ @if (lightness($color) < 60% and (hue($color) >= 210 or hue($color) <= 27)) or (lightness($color) <= 32%) {
+ @return true;
+ } @else {
+ @return false;
+ }
+}
\ No newline at end of file
diff --git a/themes/learn2/scss/vendor/color-schemer/color-schemer/_equalize.scss b/themes/learn2/scss/vendor/color-schemer/color-schemer/_equalize.scss
new file mode 100644
index 0000000..d043bc8
--- /dev/null
+++ b/themes/learn2/scss/vendor/color-schemer/color-schemer/_equalize.scss
@@ -0,0 +1,5 @@
+// Color equalize credit to Mason Wendell:
+// https://github.com/canarymason/The-Coding-Designers-Survival-Kit/blob/master/sass/partials/lib/variables/_color_schemes.sass
+@function equalize($color) {
+ @return hsl(hue($color), 100%, 50%);
+}
\ No newline at end of file
diff --git a/themes/learn2/scss/vendor/color-schemer/color-schemer/_harmonize.scss b/themes/learn2/scss/vendor/color-schemer/color-schemer/_harmonize.scss
new file mode 100644
index 0000000..719b43d
--- /dev/null
+++ b/themes/learn2/scss/vendor/color-schemer/color-schemer/_harmonize.scss
@@ -0,0 +1,59 @@
+@function cs-harmonize($background, $foreground: $cs-harmonize-color, $mode: $cs-harmonize-mode, $amount: $cs-harmonize-amount) {
+ $blend: null;
+ @if ($mode == normal) {
+ $blend: blend-normal($foreground, $background); }
+ @else if ($mode == multiply) {
+ $blend: blend-multiply($foreground, $background); }
+ @else if ($mode == lighten) {
+ $blend: blend-lighten($foreground, $background); }
+ @else if ($mode == darken) {
+ $blend: blend-darken($foreground, $background); }
+ @else if ($mode == darkercolor) {
+ $blend: blend-darkercolor($foreground, $background); }
+ @else if ($mode == lightercolor) {
+ $blend: blend-lightercolor($foreground, $background); }
+ @else if ($mode == lineardodge) {
+ $blend: blend-lineardodge($foreground, $background); }
+ @else if ($mode == linearburn) {
+ $blend: blend-linearburn($foreground, $background); }
+ @else if ($mode == difference) {
+ $blend: blend-difference($foreground, $background); }
+ @else if ($mode == screen) {
+ $blend: blend-screen($foreground, $background); }
+ @else if ($mode == exclusion) {
+ $blend: blend-exclusion($foreground, $background); }
+ @else if ($mode == overlay) {
+ $blend: blend-overlay($foreground, $background); }
+ @else if ($mode == softlight) {
+ $blend: blend-softlight($foreground, $background); }
+ @else if ($mode == hardlight) {
+ $blend: blend-hardlight($foreground, $background); }
+ @else if ($mode == colordodge) {
+ $blend: blend-colordodge($foreground, $background); }
+ @else if ($mode == colorburn) {
+ $blend: blend-colorburn($foreground, $background); }
+ @else if ($mode == linearlight) {
+ $blend: blend-linearlight($foreground, $background); }
+ @else if ($mode == vividlight) {
+ $blend: blend-vividlight($foreground, $background); }
+ @else if ($mode == pinlight) {
+ $blend: blend-pinlight($foreground, $background); }
+ @else if ($mode == hardmix) {
+ $blend: blend-hardmix($foreground, $background); }
+ @else if ($mode == colorblend) {
+ $blend: blend-colorblend($foreground, $background); }
+ @else if ($mode == dissolve) {
+ $blend: blend-dissolve($foreground, $background); }
+ @else if ($mode == divide) {
+ $blend: blend-divide($foreground, $background); }
+ @else if ($mode == hue) {
+ $blend: blend-hue($foreground, $background); }
+ @else if ($mode == luminosity) {
+ $blend: blend-luminosity($foreground, $background); }
+ @else if ($mode == saturation) {
+ $blend: blend-saturation($foreground, $background); }
+ @else if ($mode == subtract) {
+ $blend: blend-subtract($foreground, $background); }
+ $mixed: mix($blend, $background, $amount);
+ @return $mixed;
+}
diff --git a/themes/learn2/scss/vendor/color-schemer/color-schemer/_interpolation.scss b/themes/learn2/scss/vendor/color-schemer/color-schemer/_interpolation.scss
new file mode 100644
index 0000000..2ec182e
--- /dev/null
+++ b/themes/learn2/scss/vendor/color-schemer/color-schemer/_interpolation.scss
@@ -0,0 +1,34 @@
+@function cs-interpolate($value, $units: 360, $stops: $ryb-interpolation) {
+
+ // Loop numbers out of scale back into the scale.
+ @while $value >= 360 {
+ $value: $value - 360;
+ }
+ @while $value < 0 {
+ $value: $value + 360;
+ }
+
+ // Find out how many units in each stop
+ $cs-color-deg: $units / length($stops);
+
+ // Count through stops
+ $cs-deg-count: $cs-color-deg;
+ $cs-stop-count: 1;
+
+ // Add the first stop to the end so it will be
+ // interpolated with the last stop.
+ $stops: append($stops, nth($stops, 1));
+
+ // Start interpolating
+ @for $i from 0 through length($stops) {
+ @if $value < $cs-deg-count {
+ @return cs-mix(nth($stops, $cs-stop-count + 1), nth($stops, $cs-stop-count), abs(percentage(($cs-deg-count - $value) / $cs-color-deg) - 100 ), $model: rgb);
+ }
+
+ // If the value is not in this stop, loop up to another stop.
+ @else {
+ $cs-deg-count: $cs-deg-count + $cs-color-deg;
+ $cs-stop-count: $cs-stop-count + 1
+ }
+ }
+}
diff --git a/themes/learn2/scss/vendor/color-schemer/color-schemer/_mix.scss b/themes/learn2/scss/vendor/color-schemer/color-schemer/_mix.scss
new file mode 100644
index 0000000..4d3a68f
--- /dev/null
+++ b/themes/learn2/scss/vendor/color-schemer/color-schemer/_mix.scss
@@ -0,0 +1,40 @@
+@function cs-mix($color1, $color2, $percent: 50%, $model: $cs-color-model) {
+
+ $decimal : abs($percent - 100%) / 100%;
+ $hue-offset : ();
+
+ @if $model == rgb {
+ $hue-offset : (hue($color1) - hue($color2)) * $decimal;
+ @if (hue($color1) - hue($color2)) * .5 < -90deg {
+ $hue-offset : (hue($color1) + 360deg - hue($color2)) * $decimal;
+ }
+ @if (hue($color1) - hue($color2)) * .5 > 90deg {
+ $hue-offset : (hue($color1) - 360deg - hue($color2)) * $decimal;
+ }
+ }
+
+ @if $model == ryb {
+ $hue-offset : (ryb-hue($color1) - ryb-hue($color2)) * $decimal;
+ @if (ryb-hue($color1) - ryb-hue($color2)) * .5 < -90deg {
+ $hue-offset : (ryb-hue($color1) + 360deg - ryb-hue($color2)) * $decimal;
+ }
+ @if (ryb-hue($color1) - ryb-hue($color2)) * .5 > 90deg {
+ $hue-offset : (ryb-hue($color1) - 360deg - ryb-hue($color2)) * $decimal;
+ }
+ }
+
+ $saturation-offset : (saturation($color1) - saturation($color2)) * $decimal;
+ $lightness-offset : (lightness($color1) - lightness($color2)) * $decimal;
+
+ @if $model == ryb {
+ $color1: ryb-adjust-hue($color1, $hue-offset * -1);
+ }
+ @else {
+ $color1: adjust-hue($color1, $hue-offset * -1);
+ }
+
+ $color1: set-saturation($color1, saturation($color1) - $saturation-offset);
+ $color1: set-lightness($color1, lightness($color1) - $lightness-offset);
+
+ @return $color1;
+}
\ No newline at end of file
diff --git a/themes/learn2/scss/vendor/color-schemer/color-schemer/_mixins.scss b/themes/learn2/scss/vendor/color-schemer/color-schemer/_mixins.scss
new file mode 100644
index 0000000..7e3a8f4
--- /dev/null
+++ b/themes/learn2/scss/vendor/color-schemer/color-schemer/_mixins.scss
@@ -0,0 +1,29 @@
+////////////////////////////////////////////
+// From Jina Bolton and Eric Meyer -- http://codepen.io/jina/pen/iosjp
+@function cs-stripes($position, $colors) {
+ $colors: if(type-of($colors) != 'list', compact($colors), $colors);
+ $gradient: ();
+ $width: 100% / length($colors);
+
+ @for $i from 1 through length($colors) {
+ $pop: nth($colors,$i);
+ $new: $pop ($width * ($i - 1)), $pop ($width * $i);
+ $gradient: join($gradient, $new, comma);
+ }
+
+ @return linear-gradient($position, $gradient);
+}
+
+////////////////////////////////////////////
+// Color tester
+
+@mixin cs-test($colors, $height: 2em, $element: "body:before") {
+ #{$element} {
+ content: "";
+ display: block;
+ height: $height;
+ @include background(cs-stripes(left, ($colors)));
+ position: relative;
+ z-index: 999999999999;
+ }
+}
\ No newline at end of file
diff --git a/themes/learn2/scss/vendor/color-schemer/color-schemer/_ryb.scss b/themes/learn2/scss/vendor/color-schemer/color-schemer/_ryb.scss
new file mode 100644
index 0000000..1a6de0e
--- /dev/null
+++ b/themes/learn2/scss/vendor/color-schemer/color-schemer/_ryb.scss
@@ -0,0 +1,76 @@
+$ryb-interpolation: #FF0000 #FF4900 #FF7400 #FF9200 #FFAA00 #FFBF00 #FFD300 #FFE800 #FFFF00 #CCF600 #9FEE00 #67E300 #00CC00 #00AF64 #009999 #0B61A4 #1240AB #1B1BB3 #3914AF #530FAD #7109AA #A600A6 #CD0074 #E40045;
+
+// RYB color interpolation
+@function find-ryb($hue) {
+
+ // remove units on $hue
+ @if unit($hue) == deg { $hue: $hue / 1deg; }
+
+ // return an interpolated hue
+ @return hue(cs-interpolate($hue));
+}
+
+// Find the RYB hue instead of RGB hue of a color.
+
+// map of the RYB offset
+$ryb-offset: 0 1 2 3 5 6 7 8 9 10 11 13 14 15 16 17 18 19 19 20 21 21 22 23 23 24 25 25 26 27 27 28 28 29 29 30 30 31 31 32 32 32 33 33 34 34 35 35 35 36 36 37 37 37 38 38 38 39 39 40 40 40 41 41 41 42 42 42 43 43 43 44 44 44 45 45 45 46 46 46 47 47 47 47 48 48 48 49 49 49 50 50 50 51 51 51 52 52 52 53 53 53 54 54 54 55 55 55 56 56 56 57 57 57 58 58 59 59 59 60 60 61 61 62 63 63 64 65 65 66 67 68 68 69 70 70 71 72 72 73 73 74 75 75 76 77 77 78 79 79 80 81 82 82 83 84 85 86 87 88 88 89 90 91 92 93 95 96 98 100 102 104 105 107 109 111 113 115 116 118 120 122 125 127 129 131 134 136 138 141 143 145 147 150 152 154 156 158 159 161 163 165 166 168 170 171 173 175 177 178 180 182 184 185 187 189 191 192 194 196 198 199 201 203 205 206 207 208 209 210 212 213 214 215 216 217 218 219 220 221 222 223 224 226 227 228 229 230 232 233 234 235 236 238 239 240 241 242 243 244 245 246 247 248 249 250 251 251 252 253 254 255 256 257 257 258 259 260 260 261 262 263 264 264 265 266 267 268 268 269 270 271 272 273 274 274 275 276 277 278 279 280 282 283 284 286 287 289 290 292 293 294 296 297 299 300 302 303 305 307 309 310 312 314 316 317 319 321 323 324 326 327 328 329 330 331 332 333 334 336 337 338 339 340 341 342 343 344 345 347 348 349 350 352 353 354 355 356 358 359 360;
+
+// loop through the map to find the matching hue.
+@function ryb-hue($color) {
+ @for $i from 1 through length($ryb-offset) {
+ @if nth($ryb-offset, $i) > hue($color) {
+ @return $i - 2deg;
+ }
+ }
+}
+
+// Changes the hue of a color.
+@function ryb-adjust-hue($color, $degrees) {
+
+ // Convert precentag to degrees.
+ @if unit($degrees) == "%" {
+ $degrees: 360 * ($degrees / 100%);
+ }
+
+ // Start at the current hue and loop in the adjustment.
+ $hue-adjust: (ryb-hue($color) + $degrees) / 1deg;
+
+ @return hsl(hue(cs-interpolate($hue-adjust)), saturation($color), lightness($color));
+}
+
+@function ryba($red, $yellow, $blue, $alpha) {
+ $hue: 0;
+ $saturation: 0;
+ $lightness: percentage(($red + $yellow + $blue) / (255 * 3));
+ @if $red == $yellow and $yellow == $blue {
+ @return hsla(0, 0, $lightness, $alpha);
+ }
+ @if $red >= $yellow and $red >= $blue {
+ $hue: 0;
+ }
+ @elseif $yellow >= $red and $yellow >= $blue {
+ $hue: 360 / 3;
+ }
+ @elseif $blue >= $red and $blue >= $yellow {
+ $hue: 360 / 3 * 2;
+ }
+ @return hsla(hue(cs-interpolate($hue)), 100%, 50%, 1);
+}
+
+@function ryb($red, $yellow, $blue) {
+ @return ryba($red, $yellow, $blue, 1);
+}
+
+@function set-ryb-hue($color, $hue) {
+ @return hsla(hue(cs-interpolate($hue)), saturation($color), lightness($color), alpha($color));
+}
+
+// Returns the complement of a color.
+@function ryb-complement($color) {
+ @return ryb-adjust-hue($color, 180deg);
+}
+
+// Returns the inverse of a color.
+@function ryb-invert($color) {
+ @return ryb-adjust-hue(hsl(hue($color), saturation(invert($color)), lightness(invert($color))), 180deg);
+}
\ No newline at end of file
diff --git a/themes/learn2/scss/vendor/color-schemer/color-schemer/_tint-shade.scss b/themes/learn2/scss/vendor/color-schemer/color-schemer/_tint-shade.scss
new file mode 100644
index 0000000..d1198d0
--- /dev/null
+++ b/themes/learn2/scss/vendor/color-schemer/color-schemer/_tint-shade.scss
@@ -0,0 +1,9 @@
+// Add percentage of white to a color
+@function tint($color, $percent) {
+ @return mix(white, $color, $percent);
+}
+
+// Add percentage of black to a color
+@function shade($color, $percent) {
+ @return mix(black, $color, $percent);
+}
diff --git a/themes/learn2/templates/chapter.html.twig b/themes/learn2/templates/chapter.html.twig
new file mode 100644
index 0000000..bfea9f0
--- /dev/null
+++ b/themes/learn2/templates/chapter.html.twig
@@ -0,0 +1,9 @@
+{% extends 'docs.html.twig' %}
+
+{% block content %}
+
+
+ {{ page.content|raw }}
+
+
+{% endblock %}
diff --git a/themes/learn2/templates/default.html.twig b/themes/learn2/templates/default.html.twig
new file mode 100644
index 0000000..4f88349
--- /dev/null
+++ b/themes/learn2/templates/default.html.twig
@@ -0,0 +1,9 @@
+{% embed 'partials/base.html.twig' with { github_link_position: false } %}
+
+ {% block content %}
+ {% include 'partials/page.html.twig' %}
+ {% endblock %}
+
+ {% block footer %}{% endblock %}
+
+{% endembed %}
diff --git a/themes/learn2/templates/docs.html.twig b/themes/learn2/templates/docs.html.twig
new file mode 100644
index 0000000..62c5292
--- /dev/null
+++ b/themes/learn2/templates/docs.html.twig
@@ -0,0 +1,23 @@
+{% extends 'partials/base.html.twig' %}
+{% set tags = page.taxonomy.tag %}
+{% if tags %}
+ {% set progress = page.collection({'items':{'@taxonomy':{'category': 'docs', 'tag': tags}},'order': {'by': 'default', 'dir': 'asc'}}) %}
+{% else %}
+ {% set progress = page.collection({'items':{'@taxonomy':{'category': 'docs'}},'order': {'by': 'default', 'dir': 'asc'}}) %}
+{% endif %}
+
+{% block navigation %}
+
+ {% if not progress.isFirst(page.path) %}
+
+ {% endif %}
+
+ {% if not progress.isLast(page.path) %}
+
+ {% endif %}
+
+{% endblock %}
+
+{% block content %}
+ {% include 'partials/page.html.twig' %}
+{% endblock %}
diff --git a/themes/learn2/templates/error.html.twig b/themes/learn2/templates/error.html.twig
new file mode 100644
index 0000000..237674e
--- /dev/null
+++ b/themes/learn2/templates/error.html.twig
@@ -0,0 +1,15 @@
+{% extends 'partials/base.html.twig' %}
+
+{% block topbar %}{% endblock %}
+{% block navigation %}{% endblock %}
+
+{% block content %}
+
+
+
{{ 'PLUGIN_ERROR.ERROR'|t }} {{ header.http_response_code }}
+
+ {{ page.content|raw }}
+
+
+
+{% endblock %}
diff --git a/themes/learn2/templates/partials/analytics.html.twig b/themes/learn2/templates/partials/analytics.html.twig
new file mode 100644
index 0000000..53107dc
--- /dev/null
+++ b/themes/learn2/templates/partials/analytics.html.twig
@@ -0,0 +1,10 @@
+
diff --git a/themes/learn2/templates/partials/base.html.twig b/themes/learn2/templates/partials/base.html.twig
new file mode 100644
index 0000000..05c6183
--- /dev/null
+++ b/themes/learn2/templates/partials/base.html.twig
@@ -0,0 +1,102 @@
+{% set theme_config = attribute(config.themes, config.system.pages.theme) %}
+{% set github_link_position = github_link_position is defined ? github_link_position : theme_config.github.position %}
+
+
+
+{% block head %}
+
+ {% if header.title %}{{ header.title }} | {% endif %}{{ site.title }}
+ {% include 'partials/metadata.html.twig' %}
+
+
+
+
+
+ {% block stylesheets %}
+ {% do assets.addCss('theme://css-compiled/nucleus.css',102) %}
+ {% do assets.addCss('theme://css-compiled/theme.css',101) %}
+ {% do assets.addCss('theme://css/custom.css',100) %}
+ {% do assets.addCss('theme://css/font-awesome.min.css',100) %}
+ {% do assets.addCss('theme://css/featherlight.min.css') %}
+
+ {% if browser.getBrowser == 'msie' and browser.getVersion >= 8 and browser.getVersion <= 9 %}
+ {% do assets.addCss('theme://css/nucleus-ie9.css') %}
+ {% do assets.addCss('theme://css/pure-0.5.0/grids-min.css') %}
+ {% do assets.addJs('theme://js/html5shiv-printshiv.min.js') %}
+ {% endif %}
+ {% endblock %}
+
+ {% block javascripts %}
+ {% do assets.addJs('jquery',101) %}
+ {% do assets.addJs('theme://js/modernizr.custom.71422.js',100) %}
+ {% do assets.addJs('theme://js/featherlight.min.js') %}
+ {% do assets.addJs('theme://js/clipboard.min.js') %}
+ {% do assets.addJs('theme://js/jquery.scrollbar.min.js') %}
+ {% do assets.addJs('theme://js/learn.js') %}
+ {% endblock %}
+
+ {% block assets deferred %}
+ {{ assets.css()|raw }}
+ {{ assets.js()|raw }}
+ {% endblock %}
+
+{% endblock head %}
+
+
+ {% block sidebar %}
+
+ {% endblock %}
+
+ {% block body %}
+
+
+
+
+
+
+ {% block topbar %}{% if github_link_position == 'top' or config.plugins.breadcrumbs.enabled %}
+
+ {% if github_link_position == 'top' %}
+
+ {% include 'partials/github_link.html.twig' %}
+
+ {% endif %}
+
+ {% if config.plugins.breadcrumbs.enabled %}
+ {% include 'partials/breadcrumbs.html.twig' %}
+ {% endif %}
+
+ {% endif %}{% endblock %}
+
+ {% block content %}{% endblock %}
+
+ {% block footer %}
+ {% if github_link_position == 'bottom' %}
+ {% include 'partials/github_note.html.twig' %}
+ {% endif %}
+ {% endblock %}
+
+
+ {% block navigation %}{% endblock %}
+
+ {% endblock %}
+
+ {% block analytics %}
+ {% if theme_config.google_analytics_code %}
+ {% include 'partials/analytics.html.twig' %}
+ {% endif %}
+ {% endblock %}
+
+ {% block bottom %}
+ {{ assets.js('bottom')|raw }}
+ {% endblock %}
+
+
diff --git a/themes/learn2/templates/partials/github_link.html.twig b/themes/learn2/templates/partials/github_link.html.twig
new file mode 100644
index 0000000..f39c4ab
--- /dev/null
+++ b/themes/learn2/templates/partials/github_link.html.twig
@@ -0,0 +1 @@
+ {{ 'THEME_LEARN2_GITHUB_EDIT_THIS_PAGE'|t }}
diff --git a/themes/learn2/templates/partials/github_note.html.twig b/themes/learn2/templates/partials/github_note.html.twig
new file mode 100644
index 0000000..8198220
--- /dev/null
+++ b/themes/learn2/templates/partials/github_note.html.twig
@@ -0,0 +1,7 @@
+
+
+ {{ 'THEME_LEARN2_GITHUB_NOTE'|t }}
+
+ {% include 'partials/github_link.html.twig' %}
+
+
diff --git a/themes/learn2/templates/partials/logo.html.twig b/themes/learn2/templates/partials/logo.html.twig
new file mode 100644
index 0000000..45f5912
--- /dev/null
+++ b/themes/learn2/templates/partials/logo.html.twig
@@ -0,0 +1,9 @@
+
+
+
+
+
+
diff --git a/themes/learn2/templates/partials/page.html.twig b/themes/learn2/templates/partials/page.html.twig
new file mode 100644
index 0000000..d2614a1
--- /dev/null
+++ b/themes/learn2/templates/partials/page.html.twig
@@ -0,0 +1,6 @@
+
+
{{ page.title }}
+
+ {{ page.content|raw }}
+
+
diff --git a/themes/learn2/templates/partials/search.html.twig b/themes/learn2/templates/partials/search.html.twig
new file mode 100644
index 0000000..f48565c
--- /dev/null
+++ b/themes/learn2/templates/partials/search.html.twig
@@ -0,0 +1,6 @@
+
+
+
+
+
diff --git a/themes/learn2/templates/partials/sidebar.html.twig b/themes/learn2/templates/partials/sidebar.html.twig
new file mode 100644
index 0000000..ae90804
--- /dev/null
+++ b/themes/learn2/templates/partials/sidebar.html.twig
@@ -0,0 +1,68 @@
+{% macro loop(page, parent_loop) %}
+ {% import _self as self %}
+
+ {% if parent_loop|length > 0 %}
+ {% set data_level = parent_loop %}
+ {% else %}
+ {% set data_level = 0 %}
+ {% endif %}
+ {% for p in page.children.visible %}
+ {% set parent_page = p.activeChild ? ' parent' : '' %}
+ {% set current_page = p.active ? ' active' : '' %}
+
+
+
+ {% if data_level == 0 %}{{ loop.index }}. {% endif %} {{ p.menu }}
+
+ {% if p.children.count > 0 %}
+
+ {{ self.loop(p, parent_loop|default(0)+loop.index) }}
+
+ {% endif %}
+
+ {% endfor %}
+{% endmacro %}
+
+{% macro version(p) %}
+ {% set parent_page = p.activeChild ? ' parent' : '' %}
+ {% set current_page = p.active ? ' active' : '' %}
+
+ {% if p.activeChild or p.active %}
+
+ {% else %}
+
+ {% endif %}
+ {{ p.menu }}
+
+{% endmacro %}
+
+{% import _self as macro %}
+
+
diff --git a/themes/learn2/templates/search.html.twig b/themes/learn2/templates/search.html.twig
new file mode 100644
index 0000000..9696e6c
--- /dev/null
+++ b/themes/learn2/templates/search.html.twig
@@ -0,0 +1,11 @@
+{% embed 'partials/base.html.twig' with { github_link_position: false } %}
+
+ {% block content %}
+ {{ page.content|raw }}
+
+ {% include 'partials/tntsearch.html.twig' with { in_page: true, placeholder: "Search the Grav documentation..." }%}
+ {% endblock %}
+
+ {% block footer %}{% endblock %}
+
+{% endembed %}
diff --git a/themes/learn2/thumbnail.jpg b/themes/learn2/thumbnail.jpg
new file mode 100644
index 0000000..2f54f1c
Binary files /dev/null and b/themes/learn2/thumbnail.jpg differ
diff --git a/themes/quark/CHANGELOG.md b/themes/quark/CHANGELOG.md
new file mode 100644
index 0000000..a758007
--- /dev/null
+++ b/themes/quark/CHANGELOG.md
@@ -0,0 +1,186 @@
+# v2.0.4
+## 09/29/2021
+
+1. [](#new)
+ * Added simple gallery modular page for `lightbox-gallery` plugin
+2. [](#bugfix)
+ * Fixed `radio` form field error when admin isn't installed
+ * Translate `grid size` text
+
+# v2.0.3
+## 06/08/2020
+
+1. [](#improved)
+ * Updated some JS libraries
+ * Simplified navigation macro
+ * Use `site.title` in logo alt text [#139](https://github.com/getgrav/grav-theme-quark/pull/109)
+
+# v2.0.2
+## 08/09/2019
+
+1. [](#improved)
+ * Allow for overriding of `{% block content %}{% endblock %}`
+ * Improved default `.table` styling
+ * Simplified navigation macro
+1. [](#bugfix)
+ * Fixed issue with Prism Highlight [prism-highlight#1](https://github.com/trilbymedia/grav-plugin-prism-highlight/issues/1)
+ * Use slug for onpage links [#115](https://github.com/getgrav/grav-theme-quark/issues/115)
+ * Fixed 2 minor YAML linting issues
+
+# v2.0.1
+## 05/09/2019
+
+1. [](#improved)
+ * Typo in blueprints [#109](https://github.com/getgrav/grav-theme-quark/pull/109)
+ * Added convenience scripts to `package.json` [#110](https://github.com/getgrav/grav-theme-quark/pull/110)
+ * Added Czech translation [#106](https://github.com/getgrav/grav-theme-quark/pull/106)
+ * Added Chinese translation [#114](https://github.com/getgrav/grav-theme-quark/pull/114)
+ * Removed redundant code [#104](https://github.com/getgrav/grav-theme-quark/pull/104)
+ * Updated to match Archives plugin translation output
+1. [](#bugfix)
+ * Bugfix to class in macro [#105](https://github.com/getgrav/grav-theme-quark/pull/105)
+ * Bugfix a z-index issue [#75](https://github.com/getgrav/grav-theme-quark/pull/75)
+
+# v2.0.0
+## 04/11/2019
+
+1. [](#improved)
+ * Updated to use new `GRAV` core language prefix
+ * Updated [Spectre.css](https://picturepan2.github.io/spectre/) to latest `0.5.8` version
+ * Support for 2FA panel styling
+ * Updated to Yarn 4.0 syntax
+ * Restructured SCSS to ensure easier Spectre updates in future
+1. [](#bugfix)
+ * Some checkboxes fixes for Forms 3.0
+ * More Twig 2.0 compatibility fixes
+ * Fixed a Twig 2.0 issue with assets rendering
+
+# v1.2.6
+## 03/21/2019
+
+1. [](#new)
+ * Set Dependency of Grav 1.5.10+ which has support for new **Deferred Block** Twig extension
+ * Implement assets rendering using **Deferred Block** Twig extension
+
+# v1.2.5
+## 12/07/2018
+
+1. [](#improved)
+ * Updated [Spectre.css](https://picturepan2.github.io/spectre/) to latest `0.5.7` version
+1. [](#bugfix)
+ * Fixed missing `` close tag in bae template [#76](https://github.com/getgrav/grav-theme-quark/pull/76)
+
+# v1.2.4
+## 11/12/2018
+
+1. [](#improved)
+ * Updated [Spectre.css](https://picturepan2.github.io/spectre/) to latest `0.5.5` version
+ * Added link support to modular `features` [#39](https://github.com/getgrav/grav-theme-quark/pull/39/)
+ * Remove desktop menu when in mobile mode [#59](https://github.com/getgrav/grav-theme-quark/pull/59/)
+ * Support modular `text` full-width if no image [#70](https://github.com/getgrav/grav-theme-quark/issues/70)
+ * Shim for IE support of BrickLayer.js [#64](https://github.com/getgrav/grav-theme-quark/issues/64)
+1. [](#bugfix)
+ * Fixed `continue_link:` showing up as toggled [#65](https://github.com/getgrav/grav-theme-quark/issues/65)
+ * Fixed issue with modular pages not hidden in on-page menu with `visible: false` [#71](https://github.com/getgrav/grav-theme-quark/issues/71)
+
+
+# v1.2.3
+## 11/05/2018
+
+1. [](#improved)
+ * Moved footer into standalone twig to allow for easier extensibility [#63](https://github.com/getgrav/grav-theme-quark/pull/63)
+1. [](#bugfix)
+ * Fix variable name for prouction mode [#61](https://github.com/getgrav/grav-theme-quark/pull/61)
+ * Fix layout size in features blueprint [#67](https://github.com/getgrav/grav-theme-quark/pull/67)
+ * Fix active page logic in `nav` so there's no empty class attributes [#68](https://github.com/getgrav/grav-theme-quark/pull/68)
+ * Fix for features blueprint because `class` didn't work [#69](https://github.com/getgrav/grav-theme-quark/pull/69)
+
+# v1.2.2
+## 10/24/2018
+
+1. [](#improved)
+ * Changed nav macro to format supported by Twig 2.0
+ * Updated `partials/form-messages.html.twig` to be more inline with latest Forms plugin
+1. [](#bugfix)
+ * Make the theme to work with Twig auto-escaping turned on
+ * Moved language strings under `THEME_QUARK`
+
+# v1.2.1
+## 08/23/2018
+
+1. [](#improved)
+ * Added additional "mobile custom logo" support
+1. [](#bugfix)
+ * Addressed some CSS issues by forcing logo height
+
+# v1.2.0
+## 08/23/2018
+
+1. [](#new)
+ * Added new "custom logo" support [#3](https://github.com/getgrav/grav-theme-quark/issues/3)
+ * Added option JSON feed syndication support in sidebar [#47](https://github.com/getgrav/grav-theme-quark/pull/47)
+ * Added basic form field `array` styling
+
+# v1.1.0
+## 07/25/2018
+
+1. [](#new)
+ * Responsive font sizing [#28](https://github.com/getgrav/grav-theme-quark/issues/28)
+1. [](#improved)
+ * Updated [Spectre.css](https://picturepan2.github.io/spectre/) to latest `0.5.3` version
+ * Make blog settings toggleable [#38](https://github.com/getgrav/grav-theme-quark/pull/38)
+1. [](#bugfix)
+ * Proper fix for sticky footer in IE10 and IE11 [#21](https://github.com/getgrav/grav-theme-quark/issues/21)
+ * Fix for lists wrapping weirdly due to `outside` attribute
+ * Updated checkbox + radio to take into account `client_side_validation` form option
+ * Fixes for fallback values [#37](https://github.com/getgrav/grav-theme-quark/pull/37)
+ * Fix inheritance for images folder [#30](https://github.com/getgrav/grav-theme-quark/pull/30)
+ * Added blueprint option for `continue_link` [#45](https://github.com/getgrav/grav-theme-quark/issues/45)
+ * Added blueprint option for Feature `class` [#14](https://github.com/getgrav/grav-theme-quark/issues/14)
+ * Fixed `Duplicate ID` issues with modular sections. Might break CSS on first load, need to refresh to pick up new CSS [#24](https://github.com/getgrav/grav-theme-quark/issues/24)
+ * Fixed Text feature alignment issue [#4](https://github.com/getgrav/grav-theme-quark/issues/4)
+ * Overlapping menu and mobile button [#7](https://github.com/getgrav/grav-theme-quark/issues/7)
+
+# v1.0.3
+## 05/11/2018
+
+1. [](#new)
+ * Added new primary button mixin
+1. [](#improved)
+ * Updated [Spectre.css](https://picturepan2.github.io/spectre/) to latest `0.5.1` version
+ * Improved default login styling
+ * Removed core Spectre.css override to make upgrading Spectre easier
+ * Added screenshot to README.md
+ * Override focus to prevent overzealous blue blurs
+1. [](#bugfix)
+ * Fix for `highlight` plugin not changing background of code blocks
+ * Removed extraneous `dump()` in Twig output
+
+# v1.0.2
+## 02/19/2018
+
+1. [](#new)
+ * Added toggle options to enable Spectre.css _experimentals_ and _icons_ CSS files
+ * Switched to a fork of LineAwesome icons compatible with FontAwesome 4.7.0
+1. [](#improved)
+ * Font tweaks
+1. [](#bugfix)
+ * Pagination fixes
+
+# v1.0.1
+## 01/22/2018
+
+1. [](#new)
+ * Added blueprints for admin editing
+1. [](#improved)
+ * Use default lang from `site.yaml`
+1. [](#bugfix)
+ * Fixed Current path to address issues with extending Quark
+ * Fixed parallax to start in same position as standard
+ * Fixed modular image size
+
+# v1.0.0
+## 12/28/2017
+
+1. [](#new)
+ * ChangeLog started...
diff --git a/themes/quark/LICENSE b/themes/quark/LICENSE
new file mode 100644
index 0000000..b5e7990
--- /dev/null
+++ b/themes/quark/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2018 Trilby Media
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/themes/quark/README.md b/themes/quark/README.md
new file mode 100644
index 0000000..a65d821
--- /dev/null
+++ b/themes/quark/README.md
@@ -0,0 +1,152 @@
+# Quark Theme
+
+![](assets/quark-screenshots.jpg)
+
+**Quark** is the new default theme for [Grav CMS](http://github.com/getgrav/grav). This theme is built with the [Spectre.css](https://picturepan2.github.io/spectre/) framework and provides a powerful base for developing your own themes. Quark uses functionality that is only available in Grav 1.4+, as such you cannot run Quark on earlier versions of Grav.
+
+## Features
+
+* Lightweight and minimal for optimal performance
+* Spectre CSS Framework
+* Fully responsive with full-page mobile navigation
+* SCSS based CSS source files for easy customization
+* Built-in support for on-page navigation
+* Multiple page template types
+* Fontawesome icon support
+
+### Supported Page Templates
+
+* Default view template `default.md`
+* Error view template `error.md`
+* Blog view template `blog.md`
+* Blog item view template `item.md`
+* Modular view templates: `modular.md`
+ * Features Modular view template `features.md`
+ * Hero Modular view template `hero.md`
+ * Text Modular view template `text.md`
+
+# Installation
+
+Installing the Quark theme can be done in one of two ways. Our GPM (Grav Package Manager) installation method enables you to quickly and easily install the theme with a simple terminal command, while the manual method enables you to do so via a zip file.
+
+The theme by itself is useful, but you may have an easier time getting up and running by installing a skeleton. The Quark theme can be found in both the [One-page](https://github.com/getgrav/grav-skeleton-onepage-site) and [Blog Site](https://github.com/getgrav/grav-skeleton-blog-site) which are self-contained repositories for a complete sites which include: sample content, configuration, theme, and plugins.
+
+## GPM Installation (Preferred)
+
+The simplest way to install this theme is via the [Grav Package Manager (GPM)](http://learn.getgrav.org/advanced/grav-gpm) through your system's Terminal (also called the command line). From the root of your Grav install type:
+
+ bin/gpm install quark
+
+This will install the Quark theme into your `/user/themes` directory within Grav. Its files can be found under `/your/site/grav/user/themes/quark`.
+
+## Manual Installation
+
+To install this theme, just download the zip version of this repository and unzip it under `/your/site/grav/user/themes`. Then, rename the folder to `quark`. You can find these files either on [GitHub](https://github.com/getgrav/grav-theme-quark) or via [GetGrav.org](http://getgrav.org/downloads/themes).
+
+You should now have all the theme files under
+
+ /your/site/grav/user/themes/quark
+
+## Default Options
+
+Quark comes with a few default options that can be set site-wide. These options are:
+
+```yaml
+enabled: true # Enable the theme
+production-mode: true # In production mode, only minified CSS is used. When disabled, nested CSS with sourcemaps are enabled
+grid-size: grid-lg # The max-width of the theme, options include: `grid-xl`, `grid-lg`, and `grid-md`
+header-fixed: true # Cause the header to be fixed at the top of the browser
+header-animated: true # Allows the fixed header to resize to a smaller header when scrolled
+header-dark: false # Inverts the text/logo to work better on dark backgrounds
+header-transparent: false # Allows the fixed header to be transparent over the page
+sticky-footer: true # Causes the footer to be sticky at the bottom of the page
+blog-page: '/blog' # The route to the blog listing page, useful for a blog style layout with sidebar
+custom_logo: # A custom logo rather than the default (see below)
+custom_logo_mobile: # A custom logo to use for mobile navigation
+```
+
+To make modifications, you can copy the `user/themes/quark/quark.yaml` file to `user/config/themes/` folder and modify, or you can use the admin plugin.
+
+> NOTE: Do not modify the `user/themes/quark/quark.yaml` file directly or your changes will be lost with any updates
+
+## Custom Logos
+
+To add a custom logo, you should put the log into the `user/themes/quark/images/logo` folder. Standard image formats are support (`.png`,`.jpg`, `.gif`, `.svg`, etc.). Then reference the logo via the YAML like so:
+
+```yaml
+custom_logo:
+ - name: 'my-logo.png'
+custom_logo_mobile:
+ - name: 'my-mobile-logo.png'
+```
+
+Alternatively, you can you use the drag-n-drop "Custom Logo" field in the Quark theme options.
+
+## Page Overrides
+
+Quark has the ability to allow pages to override some of the default options by letting the user set `body_classes` for any page. The theme will merge the combination of the defaults with any `body_classes` set. For example:
+
+```yaml
+body_classes: "header-dark header-transparent"
+```
+
+On a particular page will ensure that page has those options enabled (assuming they are false by default).
+
+## Hero Options
+
+The hero template allows some options to be set in the page frontmatter. This is used by the modular `hero` as well as the blog and item templates to provide a more dynamic header.
+
+```yaml
+hero_classes: text-light title-h1h2 parallax overlay-dark-gradient hero-large
+hero_image: road.jpg
+hero_align: center
+```
+
+The `hero_classes` option allows a variety of hero classes to be set dynamically these include:
+
+* `text-light` | `text-dark` - Controls if the text should be light or dark depending on the content
+* `title-h1h2` - Enforced a close matched h1/h2 title pairing
+* `parallax` - Enables a CSS-powered parallax effect
+* `overlay-dark-gradient` - Displays a transparent gradient which further darkens the underlying image
+* `overlay-light-gradient` - Displays a transparent gradient which further lightens the underlying image
+* `overlay-dark` - Displays a solid transparent overlay which further darkens the underlying image
+* `overlay-light` - Displays a solid transparent overlay which further darkens the underlying image
+* `hero-fullscreen` | `hero-large` | `hero-medium` | `hero-small` | `hero-tiny` - Size of the hero block
+
+The `hero_image` should point to an image file in the current page folder.
+
+## Features Modular Options
+
+The features modular template provides the ability to set a class on the features, as well as an array of feature items. For example:
+
+```yaml
+class: offset-box
+features:
+ - header: Crazy Fast
+ text: "Performance is not just an afterthought, we baked it in from the start!"
+ icon: fighter-jet
+ - header: Easy to build
+ text: "Simple text files means Grav is trivial to install, and easy to maintain"
+ icon: database
+ - header: Awesome Technology
+ text: "Grav employs best-in-class technologies such as Twig, Markdown & Yaml"
+ icon: cubes
+ - header: Super Flexible
+ text: "From the ground up, with many plugin hooks, Grav is extremely extensible"
+ icon: object-ungroup
+ - header: Abundant Plugins
+ text: "A vibrant developer community means over 200 themes available to download"
+ icon: puzzle-piece
+ - header: Free / Open Source
+ text: "Grav is an open source project, so you can spend your money on other stuff"
+ icon: money
+```
+
+## Text Modular Options
+
+The text box provides a single option to control if any image found in the page folder should be left or right aligned:
+
+```yaml
+image_align: right
+```
+
diff --git a/themes/quark/assets/quark-screenshots.jpg b/themes/quark/assets/quark-screenshots.jpg
new file mode 100644
index 0000000..b4b0c91
Binary files /dev/null and b/themes/quark/assets/quark-screenshots.jpg differ
diff --git a/themes/quark/blueprints.yaml b/themes/quark/blueprints.yaml
new file mode 100644
index 0000000..24da111
--- /dev/null
+++ b/themes/quark/blueprints.yaml
@@ -0,0 +1,176 @@
+name: Quark
+slug: quark
+type: theme
+version: 2.0.4
+description: New Grav Default Theme
+icon: microchip
+author:
+ name: Team Grav
+ email: devs@getgrav.org
+ url: https://getgrav.org
+homepage: https://github.com/getgrav/grav-theme-quark
+demo: https://demo.getgrav.org/onepage-skeleton
+keywords: quark, spectre, theme, core, modern, fast, responsive, html5, css3
+bugs: https://github.com/getgrav/grav-theme-quark/issues
+license: MIT
+
+dependencies:
+ - { name: grav, version: '>=1.6.0' }
+
+form:
+ validation: loose
+
+ fields:
+ production-mode:
+ type: toggle
+ label: Production mode
+ help: When enabled, Quark will render with minified CSS
+ highlight: 1
+ default: 1
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
+
+ grid-size:
+ type: select
+ label: THEME_QUARK.ADMIN.GRID_SIZE
+ help: The maximum width of the theme
+ size: small
+ options:
+ '': None (full width)
+ grid-xl: Extra Large
+ grid-lg: Large
+ grid-md: Medium
+
+ header_section:
+ type: section
+ title: Header Defaults
+ underline: true
+
+ custom_logo:
+ type: file
+ label: Custom Logo
+ size: large
+ destination: 'theme://images/logo'
+ multiple: false
+ markdown: true
+ description: Will be used instead of default logo `theme://images/grav-logo.svg`
+ accept:
+ - image/*
+
+ custom_logo_mobile:
+ type: file
+ label: Mobile Custom Logo
+ size: large
+ destination: 'theme://images/logo'
+ multiple: false
+ accept:
+ - image/*
+
+ header-fixed:
+ type: toggle
+ label: Fixed header
+ help: When enabled, the header will be fixed at the top of the browser
+ highlight: 1
+ default: 1
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
+
+ header-animated:
+ type: toggle
+ label: Animated
+ help: When enabled, the header will animate to a smaller header when scrolling
+ highlight: 1
+ default: 1
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
+
+ header-dark:
+ type: toggle
+ label: Dark Style
+ help: When enabled, a dark-friendly style will be used
+ highlight: 0
+ default: 0
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
+
+ header-transparent:
+ type: toggle
+ label: Transparent
+ help: When enabled, a transparent style will be used
+ highlight: 0
+ default: 0
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
+
+ footer_section:
+ type: section
+ title: Footer Defaults
+ underline: true
+
+ sticky-footer:
+ type: toggle
+ label: Sticky footer
+ help: When enabled, the footer will be sticky at the bottom of the browser
+ highlight: 1
+ default: 1
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
+
+ blog_section:
+ type: section
+ title: Blog Defaults
+ underline: true
+
+ blog-page:
+ type: text
+ label: Blog Page
+ help: The route to the blog page when working with blog sidebar
+ size: medium
+ default: '/blog'
+
+ spectre_section:
+ type: section
+ title: Spectre.css Options
+ underline: true
+
+ spectre.exp:
+ type: toggle
+ label: Experimentals CSS
+ help: When enabled, the `spectre-exp.css` file will be included
+ highlight: 0
+ default: 0
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
+
+ spectre.icons:
+ type: toggle
+ label: Icons CSS
+ help: When enabled, the `spectre-icons.css` file will be included
+ highlight: 0
+ default: 0
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
diff --git a/themes/quark/blueprints/blog.yaml b/themes/quark/blueprints/blog.yaml
new file mode 100644
index 0000000..8600143
--- /dev/null
+++ b/themes/quark/blueprints/blog.yaml
@@ -0,0 +1,94 @@
+extends@: default
+child_type: item
+
+rules:
+ slug:
+ pattern: "[a-z][a-z0-9_-]+"
+ min: 2
+ max: 80
+
+form:
+ fields:
+ tabs:
+ type: tabs
+ active: 1
+
+ fields:
+ advanced:
+ fields:
+ overrides:
+ fields:
+ header.child_type:
+ default: item
+ blog:
+ type: tab
+ title: Blog Config
+
+ fields:
+
+ content_title:
+ type: spacer
+ title: Content Definition
+
+ header.content.items:
+ type: textarea
+ yaml: true
+ label: Items
+ default: '@self.children'
+ validate:
+ type: yaml
+
+ header.content.limit:
+ type: text
+ label: Max Item Count
+ default: 5
+ validate:
+ required: true
+ type: int
+ min: 1
+
+ header.content.order.by:
+ type: select
+ label: Order By
+ default: date
+ options:
+ folder: Folder
+ title: Title
+ date: Date
+ default: Default
+
+ header.content.order.dir:
+ type: select
+ label: Order
+ default: desc
+ options:
+ asc: Ascending
+ desc: Descending
+
+ header.content.pagination:
+ type: toggle
+ label: Pagination
+ highlight: 1
+ default: 1
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
+
+ header.content.url_taxonomy_filters:
+ type: toggle
+ label: URL Taxonomy Filters
+ highlight: 1
+ default: 1
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
+
+ import@:
+ type: partials/blog-bits
+ context: blueprints://pages
+
+
diff --git a/themes/quark/blueprints/default.yaml b/themes/quark/blueprints/default.yaml
new file mode 100644
index 0000000..3219221
--- /dev/null
+++ b/themes/quark/blueprints/default.yaml
@@ -0,0 +1,15 @@
+extends@: default
+
+form:
+ fields:
+ tabs:
+ fields:
+ advanced:
+ fields:
+ columns:
+ fields:
+ column1:
+ fields:
+ header.body_classes:
+ markdown: true
+ description: 'Available classes in Quark Theme (space separated): `header-fixed`, `header-animated`, `header-dark`, `header-transparent`, `sticky-footer`'
\ No newline at end of file
diff --git a/themes/quark/blueprints/item.yaml b/themes/quark/blueprints/item.yaml
new file mode 100644
index 0000000..60cc3e1
--- /dev/null
+++ b/themes/quark/blueprints/item.yaml
@@ -0,0 +1,113 @@
+extends@: default
+
+form:
+ fields:
+ tabs:
+
+ fields:
+ blog:
+ type: tab
+ title: Blog Item
+
+ fields:
+
+ header_options:
+ type: section
+ title: Header Options
+ underline: true
+
+ header.continue_link:
+ type: toggle
+ toggleable: true
+ label: DF Style Link
+ help: Daring Fireball style title link
+ highlight: 1
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
+
+ header.header_image:
+ type: toggle
+ toggleable: true
+ label: Display Header Image
+ help: Enabled displaying of a header image
+ highlight: 1
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+
+ header.header_image_file:
+ type: text
+ toggleable: true
+ label: Image File
+ help: image filename that exists in the page folder. If not provided, will use the first image found.
+ placeholder: "For example: myimage.jpg"
+
+ header.header_image_width:
+ type: text
+ toggleable: true
+ label: Image Width
+ size: small
+ help: Header width in px
+ placeholder: Default is 900
+ validate:
+ type: int
+ min: 0
+ max: 5000
+
+ header.header_image_height:
+ type: text
+ toggleable: true
+ label: Image Height
+ size: small
+ help: Header height in px
+ placeholder: Default is 300
+ validate:
+ type: int
+ min: 0
+ max: 5000
+
+ summary:
+ type: section
+ title: Summary
+ underline: true
+
+ header.summary.enabled:
+ type: toggle
+ toggleable: true
+ label: Summary
+ highlight: 1
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+
+ header.summary.format:
+ type: select
+ toggleable: true
+ label: Format
+ classes: fancy
+ options:
+ 'short': 'Use the first occurence of delimiter or size'
+ 'long': 'Summary delimiter will be ignored'
+
+ header.summary.size:
+ type: text
+ toggleable: true
+ label: Size
+ classes: large
+ placeholder: 300
+ validate:
+ type: int
+ min: 1
+
+ header.summary.delimiter:
+ type: text
+ toggleable: true
+ label: Summary delimiter
+ classes: large
+ placeholder: ===
+
+ import@:
+ type: partials/blog-bits
diff --git a/themes/quark/blueprints/modular/features.yaml b/themes/quark/blueprints/modular/features.yaml
new file mode 100644
index 0000000..187696f
--- /dev/null
+++ b/themes/quark/blueprints/modular/features.yaml
@@ -0,0 +1,38 @@
+title: Features
+'@extends': default
+
+form:
+ fields:
+ tabs:
+ fields:
+ features:
+ type: tab
+ title: Features
+ fields:
+ header.class:
+ type: select
+ label: Layout
+ default: small
+ size: medium
+ options:
+ small: Small = 4 / 3 / 2 columns
+ standard: Standard = 3 / 2 / 1 columns
+
+ header.features:
+ name: features
+ type: list
+ label: Features
+
+ fields:
+ .icon:
+ type: iconpicker
+ label: Icon
+ .header:
+ type: text
+ label: Header
+ .text:
+ type: text
+ label: Text
+ .url:
+ type: text
+ label: Link
diff --git a/themes/quark/blueprints/modular/hero.yaml b/themes/quark/blueprints/modular/hero.yaml
new file mode 100644
index 0000000..5e8abf5
--- /dev/null
+++ b/themes/quark/blueprints/modular/hero.yaml
@@ -0,0 +1,23 @@
+title: Hero
+'@extends': default
+
+form:
+ fields:
+ tabs:
+ fields:
+ buttons:
+ type: tab
+ title: Hero
+ fields:
+ header.hero_classes:
+ type: text
+ label: Hero Classes
+ markdown: true
+ description: 'There are several Hero class options that can be listed here (space separated): `text-light`, `text-dark`, `title-h1h2`, `parallax`, `overlay-dark-gradient`, `overlay-light-gradient`, `overlay-dark`, `overlay-light`, `hero-fullscreen`, `hero-large`, `hero-medium`, `hero-small`, `hero-tiny` Please consult the [Quark documentation](https://github.com/getgrav/grav-theme-quark#hero-options) for more details.'
+ header.hero_image:
+ type: filepicker
+ label: Hero Image
+ preview_images: true
+ description: 'If not specified, this defaults to the first image found in the page''s folder'
+
+
diff --git a/themes/quark/blueprints/modular/text.yaml b/themes/quark/blueprints/modular/text.yaml
new file mode 100644
index 0000000..023c272
--- /dev/null
+++ b/themes/quark/blueprints/modular/text.yaml
@@ -0,0 +1,19 @@
+title: Text
+'@extends': default
+
+form:
+ fields:
+ tabs:
+ fields:
+ content:
+ fields:
+ header.media_order:
+ label: Page Media (first one will be displayed next to your content)
+ header.image_align:
+ type: select
+ label: Image position
+ classes: fancy
+ default: left
+ options:
+ 'left': 'Left'
+ 'right': 'Right'
diff --git a/themes/quark/blueprints/partials/blog-bits.yaml b/themes/quark/blueprints/partials/blog-bits.yaml
new file mode 100644
index 0000000..6ab4148
--- /dev/null
+++ b/themes/quark/blueprints/partials/blog-bits.yaml
@@ -0,0 +1,64 @@
+form:
+ fields:
+
+ hero_title:
+ type: spacer
+ title: Hero Section
+
+ header.hero_classes:
+ type: text
+ label: Hero Classes
+ markdown: true
+ description: 'There are several Hero class options that can be listed here (space separated): `text-light`, `text-dark`, `title-h1h2`, `parallax`, `overlay-dark-gradient`, `overlay-light-gradient`, `overlay-dark`, `overlay-light`, `hero-fullscreen`, `hero-large`, `hero-medium`, `hero-small`, `hero-tiny` Please consult the [Quark documentation](https://github.com/getgrav/grav-theme-quark#hero-options) for more details.'
+
+ header.hero_image:
+ type: filepicker
+ label: Hero Image
+ preview_images: true
+ description: 'If not specified, this defaults to the first image found in the page''s folder'
+
+ toggles_title:
+ type: spacer
+ title: Configuration
+
+ header.blog_url:
+ type: text
+ toggleable: true
+ label: Blog Route
+ help: The route to the main blog page that contains the "Show ..." configuration
+ default: '/blog'
+ placeholder: '/blog'
+ size: medium
+
+ header.show_sidebar:
+ type: toggle
+ toggleable: true
+ label: Show Sidebar
+ highlight: 1
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
+
+ header.show_breadcrumbs:
+ type: toggle
+ toggleable: true
+ label: Show Breadcrumbs
+ highlight: 1
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
+
+ header.show_pagination:
+ type: toggle
+ toggleable: true
+ label: Show Pagination
+ highlight: 1
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
\ No newline at end of file
diff --git a/themes/quark/css-compiled/spectre-exp.css b/themes/quark/css-compiled/spectre-exp.css
new file mode 100644
index 0000000..6eadf7a
--- /dev/null
+++ b/themes/quark/css-compiled/spectre-exp.css
@@ -0,0 +1,369 @@
+/*! Spectre.css Experimentals v0.5.8 | MIT License | github.com/picturepan2/spectre */
+.form-autocomplete { position: relative; }
+
+.form-autocomplete .form-autocomplete-input { -ms-flex-line-pack: start; align-content: flex-start; display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; height: auto; min-height: 1.6rem; padding: 0.1rem; }
+
+.form-autocomplete .form-autocomplete-input.is-focused { box-shadow: 0 0 0 0.1rem rgba(48, 133, 238, 0.2); border-color: #3085EE; }
+
+.form-autocomplete .form-autocomplete-input .form-input { border-color: transparent; box-shadow: none; display: inline-block; -ms-flex: 1 0 auto; flex: 1 0 auto; height: 1.2rem; line-height: 0.8rem; margin: 0.1rem; width: auto; }
+
+.form-autocomplete .menu { left: 0; position: absolute; top: 100%; width: 100%; }
+
+.form-autocomplete.autocomplete-oneline .form-autocomplete-input { -ms-flex-wrap: nowrap; flex-wrap: nowrap; overflow-x: auto; }
+
+.form-autocomplete.autocomplete-oneline .chip { -ms-flex: 1 0 auto; flex: 1 0 auto; }
+
+.calendar { border: 0.05rem solid #e7e9ed; border-radius: 0.1rem; display: block; min-width: 280px; }
+
+.calendar .calendar-nav { -ms-flex-align: center; align-items: center; background: #f8f9fa; border-top-left-radius: 0.1rem; border-top-right-radius: 0.1rem; display: -ms-flexbox; display: flex; font-size: 0.9rem; padding: 0.4rem; }
+
+.calendar .calendar-header, .calendar .calendar-body { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms-flex-pack: center; justify-content: center; padding: 0.4rem 0; }
+
+.calendar .calendar-header .calendar-date, .calendar .calendar-body .calendar-date { -ms-flex: 0 0 14.28%; flex: 0 0 14.28%; max-width: 14.28%; }
+
+.calendar .calendar-header { background: #f8f9fa; border-bottom: 0.05rem solid #e7e9ed; color: #acb3c2; font-size: 0.7rem; text-align: center; }
+
+.calendar .calendar-body { color: #667189; }
+
+.calendar .calendar-date { border: 0; padding: 0.2rem; }
+
+.calendar .calendar-date .date-item { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: transparent; border: 0.05rem solid transparent; border-radius: 50%; color: #667189; cursor: pointer; font-size: 0.7rem; height: 1.4rem; line-height: 1rem; outline: none; padding: 0.1rem; position: relative; text-align: center; text-decoration: none; transition: background .2s, border .2s, box-shadow .2s, color .2s; vertical-align: middle; white-space: nowrap; width: 1.4rem; }
+
+.calendar .calendar-date .date-item.date-today { border-color: #d3e5fb; color: #3085EE; }
+
+.calendar .calendar-date .date-item:focus { box-shadow: 0 0 0 0.1rem rgba(48, 133, 238, 0.2); }
+
+.calendar .calendar-date .date-item:focus, .calendar .calendar-date .date-item:hover { background: #eff5fe; border-color: #d3e5fb; color: #3085EE; text-decoration: none; }
+
+.calendar .calendar-date .date-item:active, .calendar .calendar-date .date-item.active { background: #227ded; border-color: #1370e3; color: #fff; }
+
+.calendar .calendar-date .date-item.badge::after { position: absolute; top: 3px; right: 3px; transform: translate(50%, -50%); }
+
+.calendar .calendar-date .date-item:disabled, .calendar .calendar-date .date-item.disabled, .calendar .calendar-date .calendar-event:disabled, .calendar .calendar-date .calendar-event.disabled { cursor: default; opacity: .25; pointer-events: none; }
+
+.calendar .calendar-date.prev-month .date-item, .calendar .calendar-date.prev-month .calendar-event, .calendar .calendar-date.next-month .date-item, .calendar .calendar-date.next-month .calendar-event { opacity: .25; }
+
+.calendar .calendar-range { position: relative; }
+
+.calendar .calendar-range::before { background: #e1edfd; content: ""; height: 1.4rem; left: 0; position: absolute; right: 0; top: 50%; transform: translateY(-50%); }
+
+.calendar .calendar-range.range-start::before { left: 50%; }
+
+.calendar .calendar-range.range-end::before { right: 50%; }
+
+.calendar .calendar-range.range-start .date-item, .calendar .calendar-range.range-end .date-item { background: #227ded; border-color: #1370e3; color: #fff; }
+
+.calendar .calendar-range .date-item { color: #3085EE; }
+
+.calendar.calendar-lg .calendar-body { padding: 0; }
+
+.calendar.calendar-lg .calendar-body .calendar-date { border-bottom: 0.05rem solid #e7e9ed; border-right: 0.05rem solid #e7e9ed; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; height: 5.5rem; padding: 0; }
+
+.calendar.calendar-lg .calendar-body .calendar-date:nth-child(7n) { border-right: 0; }
+
+.calendar.calendar-lg .calendar-body .calendar-date:nth-last-child(-n+7) { border-bottom: 0; }
+
+.calendar.calendar-lg .date-item { -ms-flex-item-align: end; align-self: flex-end; height: 1.4rem; margin-right: 0.2rem; margin-top: 0.2rem; }
+
+.calendar.calendar-lg .calendar-range::before { top: 19px; }
+
+.calendar.calendar-lg .calendar-range.range-start::before { left: auto; width: 19px; }
+
+.calendar.calendar-lg .calendar-range.range-end::before { right: 19px; }
+
+.calendar.calendar-lg .calendar-events { -ms-flex-positive: 1; flex-grow: 1; line-height: 1; overflow-y: auto; padding: 0.2rem; }
+
+.calendar.calendar-lg .calendar-event { border-radius: 0.1rem; font-size: 0.7rem; display: block; margin: 0.1rem auto; overflow: hidden; padding: 3px 4px; text-overflow: ellipsis; white-space: nowrap; }
+
+.carousel .carousel-locator:nth-of-type(1):checked ~ .carousel-container .carousel-item:nth-of-type(1), .carousel .carousel-locator:nth-of-type(2):checked ~ .carousel-container .carousel-item:nth-of-type(2), .carousel .carousel-locator:nth-of-type(3):checked ~ .carousel-container .carousel-item:nth-of-type(3), .carousel .carousel-locator:nth-of-type(4):checked ~ .carousel-container .carousel-item:nth-of-type(4), .carousel .carousel-locator:nth-of-type(5):checked ~ .carousel-container .carousel-item:nth-of-type(5), .carousel .carousel-locator:nth-of-type(6):checked ~ .carousel-container .carousel-item:nth-of-type(6), .carousel .carousel-locator:nth-of-type(7):checked ~ .carousel-container .carousel-item:nth-of-type(7), .carousel .carousel-locator:nth-of-type(8):checked ~ .carousel-container .carousel-item:nth-of-type(8) { animation: carousel-slidein .75s ease-in-out 1; opacity: 1; z-index: 100; }
+
+.carousel .carousel-locator:nth-of-type(1):checked ~ .carousel-nav .nav-item:nth-of-type(1), .carousel .carousel-locator:nth-of-type(2):checked ~ .carousel-nav .nav-item:nth-of-type(2), .carousel .carousel-locator:nth-of-type(3):checked ~ .carousel-nav .nav-item:nth-of-type(3), .carousel .carousel-locator:nth-of-type(4):checked ~ .carousel-nav .nav-item:nth-of-type(4), .carousel .carousel-locator:nth-of-type(5):checked ~ .carousel-nav .nav-item:nth-of-type(5), .carousel .carousel-locator:nth-of-type(6):checked ~ .carousel-nav .nav-item:nth-of-type(6), .carousel .carousel-locator:nth-of-type(7):checked ~ .carousel-nav .nav-item:nth-of-type(7), .carousel .carousel-locator:nth-of-type(8):checked ~ .carousel-nav .nav-item:nth-of-type(8) { color: #e7e9ed; }
+
+.carousel { background: #f8f9fa; display: block; overflow: hidden; position: relative; width: 100%; -webkit-overflow-scrolling: touch; z-index: 1; }
+
+.carousel .carousel-container { height: 100%; left: 0; position: relative; }
+
+.carousel .carousel-container::before { content: ""; display: block; padding-bottom: 56.25%; }
+
+.carousel .carousel-container .carousel-item { animation: carousel-slideout 1s ease-in-out 1; height: 100%; left: 0; margin: 0; opacity: 0; position: absolute; top: 0; width: 100%; }
+
+.carousel .carousel-container .carousel-item:hover .item-prev, .carousel .carousel-container .carousel-item:hover .item-next { opacity: 1; }
+
+.carousel .carousel-container .item-prev, .carousel .carousel-container .item-next { background: rgba(231, 233, 237, 0.25); border-color: rgba(231, 233, 237, 0.5); color: #e7e9ed; opacity: 0; position: absolute; top: 50%; transition: all .4s; transform: translateY(-50%); z-index: 100; }
+
+.carousel .carousel-container .item-prev { left: 1rem; }
+
+.carousel .carousel-container .item-next { right: 1rem; }
+
+.carousel .carousel-nav { bottom: 0.4rem; display: -ms-flexbox; display: flex; -ms-flex-pack: center; justify-content: center; left: 50%; position: absolute; transform: translateX(-50%); width: 10rem; z-index: 100; }
+
+.carousel .carousel-nav .nav-item { color: rgba(231, 233, 237, 0.5); display: block; -ms-flex: 1 0 auto; flex: 1 0 auto; height: 1.6rem; margin: 0.2rem; max-width: 2.5rem; position: relative; }
+
+.carousel .carousel-nav .nav-item::before { background: currentColor; content: ""; display: block; height: 0.1rem; position: absolute; top: .5rem; width: 100%; }
+
+@keyframes carousel-slidein { 0% { transform: translateX(100%); }
+ 100% { transform: translateX(0); } }
+
+@keyframes carousel-slideout { 0% { opacity: 1;
+ transform: translateX(0); }
+ 100% { opacity: 1;
+ transform: translateX(-50%); } }
+
+.comparison-slider { height: 50vh; overflow: hidden; position: relative; width: 100%; -webkit-overflow-scrolling: touch; }
+
+.comparison-slider .comparison-before, .comparison-slider .comparison-after { height: 100%; left: 0; margin: 0; overflow: hidden; position: absolute; top: 0; }
+
+.comparison-slider .comparison-before img, .comparison-slider .comparison-after img { height: 100%; object-fit: cover; object-position: left center; position: absolute; width: 100%; }
+
+.comparison-slider .comparison-before { width: 100%; z-index: 1; }
+
+.comparison-slider .comparison-before .comparison-label { right: 0.8rem; }
+
+.comparison-slider .comparison-after { max-width: 100%; min-width: 0; z-index: 2; }
+
+.comparison-slider .comparison-after::before { background: transparent; content: ""; cursor: default; height: 100%; left: 0; position: absolute; right: 0.8rem; top: 0; z-index: 1; }
+
+.comparison-slider .comparison-after::after { background: currentColor; border-radius: 50%; box-shadow: 0 -5px, 0 5px; color: #fff; content: ""; height: 3px; position: absolute; right: 0.4rem; top: 50%; transform: translate(50%, -50%); width: 3px; }
+
+.comparison-slider .comparison-after .comparison-label { left: 0.8rem; }
+
+.comparison-slider .comparison-resizer { animation: first-run 1.5s 1 ease-in-out; cursor: ew-resize; height: 0.8rem; left: 0; max-width: 100%; min-width: 0.8rem; opacity: 0; outline: none; position: relative; resize: horizontal; top: 50%; transform: translateY(-50%) scaleY(30); width: 0; }
+
+.comparison-slider .comparison-label { background: rgba(69, 77, 93, 0.5); bottom: 0.8rem; color: #fff; padding: 0.2rem 0.4rem; position: absolute; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }
+
+@keyframes first-run { 0% { width: 0; }
+ 25% { width: 2.4rem; }
+ 50% { width: 0.8rem; }
+ 75% { width: 1.2rem; }
+ 100% { width: 0; } }
+
+.filter .filter-tag#tag-0:checked ~ .filter-nav .chip[for="tag-0"], .filter .filter-tag#tag-1:checked ~ .filter-nav .chip[for="tag-1"], .filter .filter-tag#tag-2:checked ~ .filter-nav .chip[for="tag-2"], .filter .filter-tag#tag-3:checked ~ .filter-nav .chip[for="tag-3"], .filter .filter-tag#tag-4:checked ~ .filter-nav .chip[for="tag-4"], .filter .filter-tag#tag-5:checked ~ .filter-nav .chip[for="tag-5"], .filter .filter-tag#tag-6:checked ~ .filter-nav .chip[for="tag-6"], .filter .filter-tag#tag-7:checked ~ .filter-nav .chip[for="tag-7"], .filter .filter-tag#tag-8:checked ~ .filter-nav .chip[for="tag-8"] { background: #3085EE; color: #fff; }
+
+.filter .filter-tag#tag-1:checked ~ .filter-body .filter-item:not([data-tag~="tag-1"]), .filter .filter-tag#tag-2:checked ~ .filter-body .filter-item:not([data-tag~="tag-2"]), .filter .filter-tag#tag-3:checked ~ .filter-body .filter-item:not([data-tag~="tag-3"]), .filter .filter-tag#tag-4:checked ~ .filter-body .filter-item:not([data-tag~="tag-4"]), .filter .filter-tag#tag-5:checked ~ .filter-body .filter-item:not([data-tag~="tag-5"]), .filter .filter-tag#tag-6:checked ~ .filter-body .filter-item:not([data-tag~="tag-6"]), .filter .filter-tag#tag-7:checked ~ .filter-body .filter-item:not([data-tag~="tag-7"]), .filter .filter-tag#tag-8:checked ~ .filter-body .filter-item:not([data-tag~="tag-8"]) { display: none; }
+
+.filter .filter-nav { margin: 0.4rem 0; }
+
+.filter .filter-body { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; }
+
+.meter { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #f8f9fa; border: 0; border-radius: 0.1rem; display: block; width: 100%; height: 0.8rem; }
+
+.meter::-webkit-meter-inner-element { display: block; }
+
+.meter::-webkit-meter-bar, .meter::-webkit-meter-optimum-value, .meter::-webkit-meter-suboptimum-value, .meter::-webkit-meter-even-less-good-value { border-radius: 0.1rem; }
+
+.meter::-webkit-meter-bar { background: #f8f9fa; }
+
+.meter::-webkit-meter-optimum-value { background: #32b643; }
+
+.meter::-webkit-meter-suboptimum-value { background: #ffb700; }
+
+.meter::-webkit-meter-even-less-good-value { background: #e85600; }
+
+.meter::-moz-meter-bar, .meter:-moz-meter-optimum, .meter:-moz-meter-sub-optimum, .meter:-moz-meter-sub-sub-optimum { border-radius: 0.1rem; }
+
+.meter:-moz-meter-optimum::-moz-meter-bar { background: #32b643; }
+
+.meter:-moz-meter-sub-optimum::-moz-meter-bar { background: #ffb700; }
+
+.meter:-moz-meter-sub-sub-optimum::-moz-meter-bar { background: #e85600; }
+
+.off-canvas { display: -ms-flexbox; display: flex; -ms-flex-flow: nowrap; flex-flow: nowrap; height: 100%; position: relative; width: 100%; }
+
+.off-canvas .off-canvas-toggle { display: block; position: absolute; top: 0.4rem; transition: none; z-index: 1; left: 0.4rem; }
+
+.off-canvas .off-canvas-sidebar { background: #f8f9fa; bottom: 0; min-width: 10rem; overflow-y: auto; position: fixed; top: 0; transition: transform .25s; z-index: 200; left: 0; transform: translateX(-100%); }
+
+.off-canvas .off-canvas-content { -ms-flex: 1 1 auto; flex: 1 1 auto; height: 100%; padding: 0.4rem 0.4rem 0.4rem 4rem; }
+
+.off-canvas .off-canvas-overlay { background: rgba(69, 77, 93, 0.1); border-color: transparent; border-radius: 0; bottom: 0; display: none; height: 100%; left: 0; position: fixed; right: 0; top: 0; width: 100%; }
+
+.off-canvas .off-canvas-sidebar:target, .off-canvas .off-canvas-sidebar.active { transform: translateX(0); }
+
+.off-canvas .off-canvas-sidebar:target ~ .off-canvas-overlay, .off-canvas .off-canvas-sidebar.active ~ .off-canvas-overlay { display: block; z-index: 100; }
+
+@media (min-width: 960px) { .off-canvas.off-canvas-sidebar-show .off-canvas-toggle { display: none; }
+ .off-canvas.off-canvas-sidebar-show .off-canvas-sidebar { -ms-flex: 0 0 auto; flex: 0 0 auto; position: relative; transform: none; }
+ .off-canvas.off-canvas-sidebar-show .off-canvas-overlay { display: none !important; } }
+
+.parallax { display: block; height: auto; position: relative; width: auto; }
+
+.parallax .parallax-content { box-shadow: 0 1rem 2.1rem rgba(69, 77, 93, 0.3); height: auto; transform: perspective(1000px); transform-style: preserve-3d; transition: all .4s ease; width: 100%; }
+
+.parallax .parallax-content::before { content: ""; display: block; height: 100%; left: 0; position: absolute; top: 0; width: 100%; }
+
+.parallax .parallax-front { -ms-flex-align: center; align-items: center; color: #fff; display: -ms-flexbox; display: flex; height: 100%; -ms-flex-pack: center; justify-content: center; left: 0; position: absolute; text-align: center; text-shadow: 0 0 20px rgba(69, 77, 93, 0.75); top: 0; transform: translateZ(50px) scale(0.95); transition: transform .4s; width: 100%; z-index: 1; }
+
+.parallax .parallax-top-left { height: 50%; outline: none; position: absolute; width: 50%; z-index: 100; left: 0; top: 0; }
+
+.parallax .parallax-top-left:focus ~ .parallax-content, .parallax .parallax-top-left:hover ~ .parallax-content { transform: perspective(1000px) rotateX(3deg) rotateY(-3deg); }
+
+.parallax .parallax-top-left:focus ~ .parallax-content::before, .parallax .parallax-top-left:hover ~ .parallax-content::before { background: linear-gradient(135deg, rgba(255, 255, 255, 0.35) 0%, transparent 50%); }
+
+.parallax .parallax-top-left:focus ~ .parallax-content .parallax-front, .parallax .parallax-top-left:hover ~ .parallax-content .parallax-front { transform: translate3d(4.5px, 4.5px, 50px) scale(0.95); }
+
+.parallax .parallax-top-right { height: 50%; outline: none; position: absolute; width: 50%; z-index: 100; right: 0; top: 0; }
+
+.parallax .parallax-top-right:focus ~ .parallax-content, .parallax .parallax-top-right:hover ~ .parallax-content { transform: perspective(1000px) rotateX(3deg) rotateY(3deg); }
+
+.parallax .parallax-top-right:focus ~ .parallax-content::before, .parallax .parallax-top-right:hover ~ .parallax-content::before { background: linear-gradient(-135deg, rgba(255, 255, 255, 0.35) 0%, transparent 50%); }
+
+.parallax .parallax-top-right:focus ~ .parallax-content .parallax-front, .parallax .parallax-top-right:hover ~ .parallax-content .parallax-front { transform: translate3d(-4.5px, 4.5px, 50px) scale(0.95); }
+
+.parallax .parallax-bottom-left { height: 50%; outline: none; position: absolute; width: 50%; z-index: 100; bottom: 0; left: 0; }
+
+.parallax .parallax-bottom-left:focus ~ .parallax-content, .parallax .parallax-bottom-left:hover ~ .parallax-content { transform: perspective(1000px) rotateX(-3deg) rotateY(-3deg); }
+
+.parallax .parallax-bottom-left:focus ~ .parallax-content::before, .parallax .parallax-bottom-left:hover ~ .parallax-content::before { background: linear-gradient(45deg, rgba(255, 255, 255, 0.35) 0%, transparent 50%); }
+
+.parallax .parallax-bottom-left:focus ~ .parallax-content .parallax-front, .parallax .parallax-bottom-left:hover ~ .parallax-content .parallax-front { transform: translate3d(4.5px, -4.5px, 50px) scale(0.95); }
+
+.parallax .parallax-bottom-right { height: 50%; outline: none; position: absolute; width: 50%; z-index: 100; bottom: 0; right: 0; }
+
+.parallax .parallax-bottom-right:focus ~ .parallax-content, .parallax .parallax-bottom-right:hover ~ .parallax-content { transform: perspective(1000px) rotateX(-3deg) rotateY(3deg); }
+
+.parallax .parallax-bottom-right:focus ~ .parallax-content::before, .parallax .parallax-bottom-right:hover ~ .parallax-content::before { background: linear-gradient(-45deg, rgba(255, 255, 255, 0.35) 0%, transparent 50%); }
+
+.parallax .parallax-bottom-right:focus ~ .parallax-content .parallax-front, .parallax .parallax-bottom-right:hover ~ .parallax-content .parallax-front { transform: translate3d(-4.5px, -4.5px, 50px) scale(0.95); }
+
+.progress { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #f0f1f4; border: 0; border-radius: 0.1rem; color: #3085EE; height: 0.2rem; position: relative; width: 100%; }
+
+.progress::-webkit-progress-bar { background: transparent; border-radius: 0.1rem; }
+
+.progress::-webkit-progress-value { background: #3085EE; border-radius: 0.1rem; }
+
+.progress::-moz-progress-bar { background: #3085EE; border-radius: 0.1rem; }
+
+.progress:indeterminate { animation: progress-indeterminate 1.5s linear infinite; background: #f0f1f4 linear-gradient(to right, #3085EE 30%, #f0f1f4 30%) top left/150% 150% no-repeat; }
+
+.progress:indeterminate::-moz-progress-bar { background: transparent; }
+
+@keyframes progress-indeterminate { 0% { background-position: 200% 0; }
+ 100% { background-position: -200% 0; } }
+
+.slider { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: transparent; display: block; width: 100%; height: 1.2rem; }
+
+.slider:focus { box-shadow: 0 0 0 0.1rem rgba(48, 133, 238, 0.2); outline: none; }
+
+.slider.tooltip:not([data-tooltip])::after { content: attr(value); }
+
+.slider::-webkit-slider-thumb { -webkit-appearance: none; background: #3085EE; border: 0; border-radius: 50%; height: 0.6rem; margin-top: -0.25rem; transition: transform .2s; width: 0.6rem; }
+
+.slider::-moz-range-thumb { background: #3085EE; border: 0; border-radius: 50%; height: 0.6rem; transition: transform .2s; width: 0.6rem; }
+
+.slider::-ms-thumb { background: #3085EE; border: 0; border-radius: 50%; height: 0.6rem; transition: transform .2s; width: 0.6rem; }
+
+.slider:active::-webkit-slider-thumb { transform: scale(1.25); }
+
+.slider:active::-moz-range-thumb { transform: scale(1.25); }
+
+.slider:active::-ms-thumb { transform: scale(1.25); }
+
+.slider:disabled::-webkit-slider-thumb, .slider.disabled::-webkit-slider-thumb { background: #e7e9ed; transform: scale(1); }
+
+.slider:disabled::-moz-range-thumb, .slider.disabled::-moz-range-thumb { background: #e7e9ed; transform: scale(1); }
+
+.slider:disabled::-ms-thumb, .slider.disabled::-ms-thumb { background: #e7e9ed; transform: scale(1); }
+
+.slider::-webkit-slider-runnable-track { background: #f0f1f4; border-radius: 0.1rem; height: 0.1rem; width: 100%; }
+
+.slider::-moz-range-track { background: #f0f1f4; border-radius: 0.1rem; height: 0.1rem; width: 100%; }
+
+.slider::-ms-track { background: #f0f1f4; border-radius: 0.1rem; height: 0.1rem; width: 100%; }
+
+.slider::-ms-fill-lower { background: #3085EE; }
+
+.timeline .timeline-item { display: -ms-flexbox; display: flex; margin-bottom: 1.2rem; position: relative; }
+
+.timeline .timeline-item::before { background: #e7e9ed; content: ""; height: 100%; left: 11px; position: absolute; top: 1.2rem; width: 2px; }
+
+.timeline .timeline-item .timeline-left { -ms-flex: 0 0 auto; flex: 0 0 auto; }
+
+.timeline .timeline-item .timeline-content { -ms-flex: 1 1 auto; flex: 1 1 auto; padding: 2px 0 2px 0.8rem; }
+
+.timeline .timeline-item .timeline-icon { -ms-flex-align: center; align-items: center; border-radius: 50%; color: #fff; display: -ms-flexbox; display: flex; height: 1.2rem; -ms-flex-pack: center; justify-content: center; text-align: center; width: 1.2rem; }
+
+.timeline .timeline-item .timeline-icon::before { border: 0.1rem solid #3085EE; border-radius: 50%; content: ""; display: block; height: 0.4rem; left: 0.4rem; position: absolute; top: 0.4rem; width: 0.4rem; }
+
+.timeline .timeline-item .timeline-icon.icon-lg { background: #3085EE; line-height: 1.2rem; }
+
+.timeline .timeline-item .timeline-icon.icon-lg::before { content: none; }
+
+.viewer-360 { -ms-flex-align: center; align-items: center; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; }
+
+.viewer-360 .viewer-slider[max='36'][value='1'] + .viewer-image { background-position-y: 0%; }
+
+.viewer-360 .viewer-slider[max='36'][value='2'] + .viewer-image { background-position-y: 2.8571428571%; }
+
+.viewer-360 .viewer-slider[max='36'][value='3'] + .viewer-image { background-position-y: 5.7142857143%; }
+
+.viewer-360 .viewer-slider[max='36'][value='4'] + .viewer-image { background-position-y: 8.5714285714%; }
+
+.viewer-360 .viewer-slider[max='36'][value='5'] + .viewer-image { background-position-y: 11.4285714286%; }
+
+.viewer-360 .viewer-slider[max='36'][value='6'] + .viewer-image { background-position-y: 14.2857142857%; }
+
+.viewer-360 .viewer-slider[max='36'][value='7'] + .viewer-image { background-position-y: 17.1428571429%; }
+
+.viewer-360 .viewer-slider[max='36'][value='8'] + .viewer-image { background-position-y: 20%; }
+
+.viewer-360 .viewer-slider[max='36'][value='9'] + .viewer-image { background-position-y: 22.8571428571%; }
+
+.viewer-360 .viewer-slider[max='36'][value='10'] + .viewer-image { background-position-y: 25.7142857143%; }
+
+.viewer-360 .viewer-slider[max='36'][value='11'] + .viewer-image { background-position-y: 28.5714285714%; }
+
+.viewer-360 .viewer-slider[max='36'][value='12'] + .viewer-image { background-position-y: 31.4285714286%; }
+
+.viewer-360 .viewer-slider[max='36'][value='13'] + .viewer-image { background-position-y: 34.2857142857%; }
+
+.viewer-360 .viewer-slider[max='36'][value='14'] + .viewer-image { background-position-y: 37.1428571429%; }
+
+.viewer-360 .viewer-slider[max='36'][value='15'] + .viewer-image { background-position-y: 40%; }
+
+.viewer-360 .viewer-slider[max='36'][value='16'] + .viewer-image { background-position-y: 42.8571428571%; }
+
+.viewer-360 .viewer-slider[max='36'][value='17'] + .viewer-image { background-position-y: 45.7142857143%; }
+
+.viewer-360 .viewer-slider[max='36'][value='18'] + .viewer-image { background-position-y: 48.5714285714%; }
+
+.viewer-360 .viewer-slider[max='36'][value='19'] + .viewer-image { background-position-y: 51.4285714286%; }
+
+.viewer-360 .viewer-slider[max='36'][value='20'] + .viewer-image { background-position-y: 54.2857142857%; }
+
+.viewer-360 .viewer-slider[max='36'][value='21'] + .viewer-image { background-position-y: 57.1428571429%; }
+
+.viewer-360 .viewer-slider[max='36'][value='22'] + .viewer-image { background-position-y: 60%; }
+
+.viewer-360 .viewer-slider[max='36'][value='23'] + .viewer-image { background-position-y: 62.8571428571%; }
+
+.viewer-360 .viewer-slider[max='36'][value='24'] + .viewer-image { background-position-y: 65.7142857143%; }
+
+.viewer-360 .viewer-slider[max='36'][value='25'] + .viewer-image { background-position-y: 68.5714285714%; }
+
+.viewer-360 .viewer-slider[max='36'][value='26'] + .viewer-image { background-position-y: 71.4285714286%; }
+
+.viewer-360 .viewer-slider[max='36'][value='27'] + .viewer-image { background-position-y: 74.2857142857%; }
+
+.viewer-360 .viewer-slider[max='36'][value='28'] + .viewer-image { background-position-y: 77.1428571429%; }
+
+.viewer-360 .viewer-slider[max='36'][value='29'] + .viewer-image { background-position-y: 80%; }
+
+.viewer-360 .viewer-slider[max='36'][value='30'] + .viewer-image { background-position-y: 82.8571428571%; }
+
+.viewer-360 .viewer-slider[max='36'][value='31'] + .viewer-image { background-position-y: 85.7142857143%; }
+
+.viewer-360 .viewer-slider[max='36'][value='32'] + .viewer-image { background-position-y: 88.5714285714%; }
+
+.viewer-360 .viewer-slider[max='36'][value='33'] + .viewer-image { background-position-y: 91.4285714286%; }
+
+.viewer-360 .viewer-slider[max='36'][value='34'] + .viewer-image { background-position-y: 94.2857142857%; }
+
+.viewer-360 .viewer-slider[max='36'][value='35'] + .viewer-image { background-position-y: 97.1428571429%; }
+
+.viewer-360 .viewer-slider[max='36'][value='36'] + .viewer-image { background-position-y: 100%; }
+
+.viewer-360 .viewer-slider { cursor: ew-resize; margin: 1rem; -ms-flex-order: 2; order: 2; width: 60%; }
+
+.viewer-360 .viewer-image { background-position-y: 0; background-repeat: no-repeat; background-size: 100%; max-width: 100%; -ms-flex-order: 1; order: 1; }
+
+/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY3RyZS1leHAuY3NzIiwic291cmNlcyI6WyJzcGVjdHJlLWV4cC5zY3NzIiwidGhlbWUvX3ZhcmlhYmxlcy5zY3NzIiwic3BlY3RyZS9fdmFyaWFibGVzLnNjc3MiLCJzcGVjdHJlL19taXhpbnMuc2NzcyIsInNwZWN0cmUvbWl4aW5zL19hdmF0YXIuc2NzcyIsInNwZWN0cmUvbWl4aW5zL19idXR0b24uc2NzcyIsInNwZWN0cmUvbWl4aW5zL19jbGVhcmZpeC5zY3NzIiwic3BlY3RyZS9taXhpbnMvX2NvbG9yLnNjc3MiLCJzcGVjdHJlL21peGlucy9fbGFiZWwuc2NzcyIsInNwZWN0cmUvbWl4aW5zL19wb3NpdGlvbi5zY3NzIiwic3BlY3RyZS9taXhpbnMvX3NoYWRvdy5zY3NzIiwic3BlY3RyZS9taXhpbnMvX3RleHQuc2NzcyIsInNwZWN0cmUvbWl4aW5zL190b2FzdC5zY3NzIiwic3BlY3RyZS9fYXV0b2NvbXBsZXRlLnNjc3MiLCJzcGVjdHJlL19jYWxlbmRhcnMuc2NzcyIsInNwZWN0cmUvX2Nhcm91c2Vscy5zY3NzIiwic3BlY3RyZS9fY29tcGFyaXNvbi1zbGlkZXJzLnNjc3MiLCJzcGVjdHJlL19maWx0ZXJzLnNjc3MiLCJzcGVjdHJlL19tZXRlcnMuc2NzcyIsInNwZWN0cmUvX29mZi1jYW52YXMuc2NzcyIsInNwZWN0cmUvX3BhcmFsbGF4LnNjc3MiLCJzcGVjdHJlL19wcm9ncmVzcy5zY3NzIiwic3BlY3RyZS9fc2xpZGVycy5zY3NzIiwic3BlY3RyZS9fdGltZWxpbmVzLnNjc3MiLCJzcGVjdHJlL192aWV3ZXItMzYwLnNjc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVmFyaWFibGVzIGFuZCBtaXhpbnNcbkBpbXBvcnQgXCJ0aGVtZS92YXJpYWJsZXNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3ZhcmlhYmxlc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvbWl4aW5zXCI7XG5cbi8qISBTcGVjdHJlLmNzcyBFeHBlcmltZW50YWxzIHYjeyR2ZXJzaW9ufSB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9waWN0dXJlcGFuMi9zcGVjdHJlICovXG4vLyBFeHBlcmltZW50YWxzXG5AaW1wb3J0IFwic3BlY3RyZS9hdXRvY29tcGxldGVcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL2NhbGVuZGFyc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvY2Fyb3VzZWxzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9jb21wYXJpc29uLXNsaWRlcnNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL2ZpbHRlcnNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL21ldGVyc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvb2ZmLWNhbnZhc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvcGFyYWxsYXhcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3Byb2dyZXNzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9zbGlkZXJzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS90aW1lbGluZXNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3ZpZXdlci0zNjBcIjtcbiIsIi8vIFNwZWN0cmUgT3ZlcnJpZGVzXG4kcHJpbWFyeS1jb2xvcjogIzMwODVFRSAhZGVmYXVsdDtcbiRkYXJrLWNvbG9yOiAjNDU0ZDVkICFkZWZhdWx0O1xuJGxpZ2h0LWNvbG9yOiAjZmZmICFkZWZhdWx0O1xuJGdyYXktY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDQwJSkgIWRlZmF1bHQ7XG4kZ3JheS1jb2xvci1kYXJrOiBkYXJrZW4oJGdyYXktY29sb3IsIDI1JSkgIWRlZmF1bHQ7XG4kYm9yZGVyLWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA2MCUpICFkZWZhdWx0O1xuJGJnLWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA2NiUpICFkZWZhdWx0O1xuJGJvZHktZm9udC1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNSUpICFkZWZhdWx0O1xuXG4vLyBMYXlvdXRcbiRob3Jpei1wYWRkaW5nOiAxcmVtO1xuJHZlcnQtcGFkZGluZzogMnJlbSAwIDJyZW07XG5cbi8vIEZvbnRzXG4kbWluLXJlc3BvbnNpdmUtZm9udC1zaXplOiAxNnB4O1xuXG4vLyBIZWFkZXJcbiRoZWFkZXItaGVpZ2h0LWxhcmdlOiA0cmVtO1xuJGhlYWRlci1oZWlnaHQtc21hbGw6IDIuM3JlbTtcbiRoZWFkZXItY29sb3ItZGFyazogIzIyMjtcbiRoZWFkZXItdGV4dC1saWdodDogJGxpZ2h0LWNvbG9yO1xuJGhlYWRlci10ZXh0LWRhcms6IGRhcmtlbigkZGFyay1jb2xvciwgMTUlKTtcblxuLy8gRHJvcGRvd24gTWVudVxuJGRyb3BtZW51LWJnOiAkbGlnaHQtY29sb3I7XG4kZHJvcG1lbnUtaG92ZXItdGV4dDogJHByaW1hcnktY29sb3I7XG4kZHJvcG1lbnUtaG9yaXotcGFkZGluZzogMjBweDtcbiRkcm9wbWVudS12ZXJ0LXBhZGRpbmc6IDdweDtcbiRkcm9wbWVudS1jaGlsZC1wYWRkaW5nOiAxMHB4O1xuJGRyb3BtZW51LXNoYWRvdzogMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblxuLy8gTW9iaWxlIE1lbnVcbiRtb2JpbGUtY29sb3ItbWFpbjogJHByaW1hcnktY29sb3I7XG4kbW9iaWxlLWNvbG9yLWFjdGl2ZTogI0ZGRjtcbiRtb2JpbGUtY29sb3ItbGluazogI0ZGRjtcbiRtb2JpbGUtYnV0dG9uLWhlaWdodDogMjRweDtcbiRtb2JpbGUtYnV0dG9uLXdpZHRoOiAyOHB4OyIsIi8vIENvcmUgdmFyaWFibGVzXG4kdmVyc2lvbjogXCIwLjUuOFwiO1xuXG4vLyBDb3JlIGZlYXR1cmVzXG4kcnRsOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gQ29yZSBjb2xvcnNcbiRwcmltYXJ5LWNvbG9yOiAjNTc1NWQ5ICFkZWZhdWx0O1xuJHByaW1hcnktY29sb3ItZGFyazogZGFya2VuKCRwcmltYXJ5LWNvbG9yLCAzJSkgIWRlZmF1bHQ7XG4kcHJpbWFyeS1jb2xvci1saWdodDogbGlnaHRlbigkcHJpbWFyeS1jb2xvciwgMyUpICFkZWZhdWx0O1xuJHNlY29uZGFyeS1jb2xvcjogbGlnaHRlbigkcHJpbWFyeS1jb2xvciwgMzcuNSUpICFkZWZhdWx0O1xuJHNlY29uZGFyeS1jb2xvci1kYXJrOiBkYXJrZW4oJHNlY29uZGFyeS1jb2xvciwgMyUpICFkZWZhdWx0O1xuJHNlY29uZGFyeS1jb2xvci1saWdodDogbGlnaHRlbigkc2Vjb25kYXJ5LWNvbG9yLCAzJSkgIWRlZmF1bHQ7XG5cbi8vIEdyYXkgY29sb3JzXG4kZGFyay1jb2xvcjogIzMwMzc0MiAhZGVmYXVsdDtcbiRsaWdodC1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcbiRncmF5LWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA1NSUpICFkZWZhdWx0O1xuJGdyYXktY29sb3ItZGFyazogZGFya2VuKCRncmF5LWNvbG9yLCAzMCUpICFkZWZhdWx0O1xuJGdyYXktY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJGdyYXktY29sb3IsIDIwJSkgIWRlZmF1bHQ7XG5cbiRib3JkZXItY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDY1JSkgIWRlZmF1bHQ7XG4kYm9yZGVyLWNvbG9yLWRhcms6IGRhcmtlbigkYm9yZGVyLWNvbG9yLCAxMCUpICFkZWZhdWx0O1xuJGJvcmRlci1jb2xvci1saWdodDogbGlnaHRlbigkYm9yZGVyLWNvbG9yLCA4JSkgIWRlZmF1bHQ7XG4kYmctY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDc1JSkgIWRlZmF1bHQ7XG4kYmctY29sb3ItZGFyazogZGFya2VuKCRiZy1jb2xvciwgMyUpICFkZWZhdWx0O1xuJGJnLWNvbG9yLWxpZ2h0OiAkbGlnaHQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vIENvbnRyb2wgY29sb3JzXG4kc3VjY2Vzcy1jb2xvcjogIzMyYjY0MyAhZGVmYXVsdDtcbiR3YXJuaW5nLWNvbG9yOiAjZmZiNzAwICFkZWZhdWx0O1xuJGVycm9yLWNvbG9yOiAjZTg1NjAwICFkZWZhdWx0O1xuXG4vLyBPdGhlciBjb2xvcnNcbiRjb2RlLWNvbG9yOiAjZDczZTQ4ICFkZWZhdWx0O1xuJGhpZ2hsaWdodC1jb2xvcjogI2ZmZTliMyAhZGVmYXVsdDtcbiRib2R5LWJnOiAkYmctY29sb3ItbGlnaHQgIWRlZmF1bHQ7XG4kYm9keS1mb250LWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA1JSkgIWRlZmF1bHQ7XG4kbGluay1jb2xvcjogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG4kbGluay1jb2xvci1kYXJrOiBkYXJrZW4oJGxpbmstY29sb3IsIDEwJSkgIWRlZmF1bHQ7XG4kbGluay1jb2xvci1saWdodDogbGlnaHRlbigkbGluay1jb2xvciwgMTAlKSAhZGVmYXVsdDtcblxuLy8gRm9udHNcbi8vIENyZWRpdDogaHR0cHM6Ly93d3cuc21hc2hpbmdtYWdhemluZS5jb20vMjAxNS8xMS91c2luZy1zeXN0ZW0tdWktZm9udHMtcHJhY3RpY2FsLWd1aWRlL1xuJGJhc2UtZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIHN5c3RlbS11aSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90byAhZGVmYXVsdDtcbiRtb25vLWZvbnQtZmFtaWx5OiBcIlNGIE1vbm9cIiwgXCJTZWdvZSBVSSBNb25vXCIsIFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZSAhZGVmYXVsdDtcbiRmYWxsYmFjay1mb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmICFkZWZhdWx0O1xuJGNqay16aC1oYW5zLWZvbnQtZmFtaWx5OiAkYmFzZS1mb250LWZhbWlseSwgXCJQaW5nRmFuZyBTQ1wiLCBcIkhpcmFnaW5vIFNhbnMgR0JcIiwgXCJNaWNyb3NvZnQgWWFIZWlcIiwgJGZhbGxiYWNrLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuJGNqay16aC1oYW50LWZvbnQtZmFtaWx5OiAkYmFzZS1mb250LWZhbWlseSwgXCJQaW5nRmFuZyBUQ1wiLCBcIkhpcmFnaW5vIFNhbnMgQ05TXCIsIFwiTWljcm9zb2Z0IEpoZW5nSGVpXCIsICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRjamstanAtZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5LCBcIkhpcmFnaW5vIFNhbnNcIiwgXCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9cIiwgXCJZdSBHb3RoaWNcIiwgWXVHb3RoaWMsIE1laXJ5bywgJGZhbGxiYWNrLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuJGNqay1rby1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksIFwiTWFsZ3VuIEdvdGhpY1wiLCAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG4kYm9keS1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcblxuLy8gVW5pdCBzaXplc1xuJHVuaXQtbzogLjA1cmVtICFkZWZhdWx0O1xuJHVuaXQtaDogLjFyZW0gIWRlZmF1bHQ7XG4kdW5pdC0xOiAuMnJlbSAhZGVmYXVsdDtcbiR1bml0LTI6IC40cmVtICFkZWZhdWx0O1xuJHVuaXQtMzogLjZyZW0gIWRlZmF1bHQ7XG4kdW5pdC00OiAuOHJlbSAhZGVmYXVsdDtcbiR1bml0LTU6IDFyZW0gIWRlZmF1bHQ7XG4kdW5pdC02OiAxLjJyZW0gIWRlZmF1bHQ7XG4kdW5pdC03OiAxLjRyZW0gIWRlZmF1bHQ7XG4kdW5pdC04OiAxLjZyZW0gIWRlZmF1bHQ7XG4kdW5pdC05OiAxLjhyZW0gIWRlZmF1bHQ7XG4kdW5pdC0xMDogMnJlbSAhZGVmYXVsdDtcbiR1bml0LTEyOiAyLjRyZW0gIWRlZmF1bHQ7XG4kdW5pdC0xNjogMy4ycmVtICFkZWZhdWx0O1xuXG4vLyBGb250IHNpemVzXG4kaHRtbC1mb250LXNpemU6IDIwcHggIWRlZmF1bHQ7XG4kaHRtbC1saW5lLWhlaWdodDogMS41ICFkZWZhdWx0O1xuJGZvbnQtc2l6ZTogLjhyZW0gIWRlZmF1bHQ7XG4kZm9udC1zaXplLXNtOiAuN3JlbSAhZGVmYXVsdDtcbiRmb250LXNpemUtbGc6IC45cmVtICFkZWZhdWx0O1xuJGxpbmUtaGVpZ2h0OiAxLjJyZW0gIWRlZmF1bHQ7XG5cbi8vIFNpemVzXG4kbGF5b3V0LXNwYWNpbmc6ICR1bml0LTIgIWRlZmF1bHQ7XG4kbGF5b3V0LXNwYWNpbmctc206ICR1bml0LTEgIWRlZmF1bHQ7XG4kbGF5b3V0LXNwYWNpbmctbGc6ICR1bml0LTQgIWRlZmF1bHQ7XG4kYm9yZGVyLXJhZGl1czogJHVuaXQtaCAhZGVmYXVsdDtcbiRib3JkZXItd2lkdGg6ICR1bml0LW8gIWRlZmF1bHQ7XG4kYm9yZGVyLXdpZHRoLWxnOiAkdW5pdC1oICFkZWZhdWx0O1xuJGNvbnRyb2wtc2l6ZTogJHVuaXQtOSAhZGVmYXVsdDtcbiRjb250cm9sLXNpemUtc206ICR1bml0LTcgIWRlZmF1bHQ7XG4kY29udHJvbC1zaXplLWxnOiAkdW5pdC0xMCAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteDogJHVuaXQtMiAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteC1zbTogJHVuaXQtMiAqIC43NSAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteC1sZzogJHVuaXQtMiAqIDEuNSAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteTogKCRjb250cm9sLXNpemUgLSAkbGluZS1oZWlnaHQpIC8gMiAtICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXktc206ICgkY29udHJvbC1zaXplLXNtIC0gJGxpbmUtaGVpZ2h0KSAvIDIgLSAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuJGNvbnRyb2wtcGFkZGluZy15LWxnOiAoJGNvbnRyb2wtc2l6ZS1sZyAtICRsaW5lLWhlaWdodCkgLyAyIC0gJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRjb250cm9sLWljb24tc2l6ZTogLjhyZW0gIWRlZmF1bHQ7XG5cbiRjb250cm9sLXdpZHRoLXhzOiAxODBweCAhZGVmYXVsdDtcbiRjb250cm9sLXdpZHRoLXNtOiAzMjBweCAhZGVmYXVsdDtcbiRjb250cm9sLXdpZHRoLW1kOiA2NDBweCAhZGVmYXVsdDtcbiRjb250cm9sLXdpZHRoLWxnOiA5NjBweCAhZGVmYXVsdDtcbiRjb250cm9sLXdpZHRoLXhsOiAxMjgwcHggIWRlZmF1bHQ7XG5cbi8vIFJlc3BvbnNpdmUgYnJlYWtwb2ludHNcbiRzaXplLXhzOiA0ODBweCAhZGVmYXVsdDtcbiRzaXplLXNtOiA2MDBweCAhZGVmYXVsdDtcbiRzaXplLW1kOiA4NDBweCAhZGVmYXVsdDtcbiRzaXplLWxnOiA5NjBweCAhZGVmYXVsdDtcbiRzaXplLXhsOiAxMjgwcHggIWRlZmF1bHQ7XG4kc2l6ZS0yeDogMTQ0MHB4ICFkZWZhdWx0O1xuXG4kcmVzcG9uc2l2ZS1icmVha3BvaW50OiAkc2l6ZS14cyAhZGVmYXVsdDtcblxuLy8gWi1pbmRleFxuJHppbmRleC0wOiAxICFkZWZhdWx0O1xuJHppbmRleC0xOiAxMDAgIWRlZmF1bHQ7XG4kemluZGV4LTI6IDIwMCAhZGVmYXVsdDtcbiR6aW5kZXgtMzogMzAwICFkZWZhdWx0O1xuJHppbmRleC00OiA0MDAgIWRlZmF1bHQ7XG4iLCIvLyBNaXhpbnNcbkBpbXBvcnQgXCJtaXhpbnMvYXZhdGFyXCI7XG5AaW1wb3J0IFwibWl4aW5zL2J1dHRvblwiO1xuQGltcG9ydCBcIm1peGlucy9jbGVhcmZpeFwiO1xuQGltcG9ydCBcIm1peGlucy9jb2xvclwiO1xuQGltcG9ydCBcIm1peGlucy9sYWJlbFwiO1xuQGltcG9ydCBcIm1peGlucy9wb3NpdGlvblwiO1xuQGltcG9ydCBcIm1peGlucy9zaGFkb3dcIjtcbkBpbXBvcnQgXCJtaXhpbnMvdGV4dFwiO1xuQGltcG9ydCBcIm1peGlucy90b2FzdFwiOyIsIi8vIEF2YXRhciBtaXhpblxuQG1peGluIGF2YXRhci1iYXNlKCRzaXplOiAkdW5pdC04KSB7XG4gIGZvbnQtc2l6ZTogJHNpemUgLyAyO1xuICBoZWlnaHQ6ICRzaXplO1xuICB3aWR0aDogJHNpemU7XG59XG4iLCIvLyBCdXR0b24gdmFyaWFudCBtaXhpblxuQG1peGluIGJ1dHRvbi12YXJpYW50KCRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgYmFja2dyb3VuZDogJGNvbG9yO1xuICBib3JkZXItY29sb3I6IGRhcmtlbigkY29sb3IsIDMlKTtcbiAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgJjpmb2N1cyB7XG4gICAgQGluY2x1ZGUgY29udHJvbC1zaGFkb3coJGNvbG9yKTtcbiAgfVxuICAmOmZvY3VzLFxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJGNvbG9yLCAyJSk7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCA1JSk7XG4gICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgfVxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUge1xuICAgIGJhY2tncm91bmQ6IGRhcmtlbigkY29sb3IsIDclKTtcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkY29sb3IsIDEwJSk7XG4gICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgfVxuICAmLmxvYWRpbmcge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBidXR0b24tb3V0bGluZS12YXJpYW50KCRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgYmFja2dyb3VuZDogJGxpZ2h0LWNvbG9yO1xuICBib3JkZXItY29sb3I6ICRjb2xvcjtcbiAgY29sb3I6ICRjb2xvcjtcbiAgJjpmb2N1cyB7XG4gICAgQGluY2x1ZGUgY29udHJvbC1zaGFkb3coJGNvbG9yKTtcbiAgfVxuICAmOmZvY3VzLFxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCRjb2xvciwgNTAlKTtcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkY29sb3IsIDIlKTtcbiAgICBjb2xvcjogJGNvbG9yO1xuICB9XG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yO1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRjb2xvciwgNSUpO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gIH1cbiAgJi5sb2FkaW5nIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkY29sb3I7XG4gICAgICBib3JkZXItbGVmdC1jb2xvcjogJGNvbG9yO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ2xlYXJmaXggbWl4aW5cbkBtaXhpbiBjbGVhcmZpeCgpIHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgZGlzcGxheTogdGFibGU7XG4gIH1cbn1cbiIsIi8vIEJhY2tncm91bmQgY29sb3IgdXRpbGl0eSBtaXhpblxuQG1peGluIGJnLWNvbG9yLXZhcmlhbnQoJG5hbWU6IFwiLmJnLXByaW1hcnlcIiwgJGNvbG9yOiAkcHJpbWFyeS1jb2xvcikge1xuICAjeyRuYW1lfSB7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yICFpbXBvcnRhbnQ7XG5cbiAgICBAaWYgKGxpZ2h0bmVzcygkY29sb3IpIDwgNjApIHtcbiAgICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cbi8vIFRleHQgY29sb3IgdXRpbGl0eSBtaXhpblxuQG1peGluIHRleHQtY29sb3ItdmFyaWFudCgkbmFtZTogXCIudGV4dC1wcmltYXJ5XCIsICRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgI3skbmFtZX0ge1xuICAgIGNvbG9yOiAkY29sb3IgIWltcG9ydGFudDtcbiAgfVxuXG4gIGEjeyRuYW1lfSB7XG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBkYXJrZW4oJGNvbG9yLCA1JSk7XG4gICAgfVxuICAgICY6dmlzaXRlZCB7XG4gICAgICBjb2xvcjogbGlnaHRlbigkY29sb3IsIDUlKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIExhYmVsIGJhc2Ugc3R5bGVcbkBtaXhpbiBsYWJlbC1iYXNlKCkge1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gIHBhZGRpbmc6IC4xcmVtIC4ycmVtO1xufVxuXG5AbWl4aW4gbGFiZWwtdmFyaWFudCgkY29sb3I6ICRsaWdodC1jb2xvciwgJGJnLWNvbG9yOiAkcHJpbWFyeS1jb2xvcikge1xuICBiYWNrZ3JvdW5kOiAkYmctY29sb3I7XG4gIGNvbG9yOiAkY29sb3I7XG59XG4iLCIvLyBNYXJnaW4gdXRpbGl0eSBtaXhpblxuQG1peGluIG1hcmdpbi12YXJpYW50KCRpZDogMSwgJHNpemU6ICR1bml0LTEpIHtcbiAgLm0tI3skaWR9IHtcbiAgICBtYXJnaW46ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubWItI3skaWR9IHtcbiAgICBtYXJnaW4tYm90dG9tOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1sLSN7JGlkfSB7XG4gICAgbWFyZ2luLWxlZnQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubXItI3skaWR9IHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubXQtI3skaWR9IHtcbiAgICBtYXJnaW4tdG9wOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm14LSN7JGlkfSB7XG4gICAgbWFyZ2luLWxlZnQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm15LSN7JGlkfSB7XG4gICAgbWFyZ2luLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgICBtYXJnaW4tdG9wOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi8vIFBhZGRpbmcgdXRpbGl0eSBtaXhpblxuQG1peGluIHBhZGRpbmctdmFyaWFudCgkaWQ6IDEsICRzaXplOiAkdW5pdC0xKSB7XG4gIC5wLSN7JGlkfSB7XG4gICAgcGFkZGluZzogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5wYi0jeyRpZH0ge1xuICAgIHBhZGRpbmctYm90dG9tOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnBsLSN7JGlkfSB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnByLSN7JGlkfSB7XG4gICAgcGFkZGluZy1yaWdodDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5wdC0jeyRpZH0ge1xuICAgIHBhZGRpbmctdG9wOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnB4LSN7JGlkfSB7XG4gICAgcGFkZGluZy1sZWZ0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cbiAgXG4gIC5weS0jeyRpZH0ge1xuICAgIHBhZGRpbmctYm90dG9tOiAkc2l6ZSAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctdG9wOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG59XG4iLCIvLyBDb21wb25lbnQgZm9jdXMgc2hhZG93XG5AbWl4aW4gY29udHJvbC1zaGFkb3coJGNvbG9yOiAkcHJpbWFyeS1jb2xvcikge1xuICBib3gtc2hhZG93OiAwIDAgMCAuMXJlbSByZ2JhKCRjb2xvciwgLjIpO1xufVxuXG4vLyBTaGFkb3cgbWl4aW5cbkBtaXhpbiBzaGFkb3ctdmFyaWFudCgkb2Zmc2V0KSB7XG4gIGJveC1zaGFkb3c6IDAgJG9mZnNldCAoJG9mZnNldCArIC4wNXJlbSkgKiAyIHJnYmEoJGRhcmstY29sb3IsIC4zKTtcbn1cbiIsIi8vIFRleHQgRWxsaXBzaXNcbkBtaXhpbiB0ZXh0LWVsbGlwc2lzKCkge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbiIsIi8vIFRvYXN0IHZhcmlhbnQgbWl4aW5cbkBtaXhpbiB0b2FzdC12YXJpYW50KCRjb2xvcjogJGRhcmstY29sb3IpIHtcbiAgYmFja2dyb3VuZDogcmdiYSgkY29sb3IsIC45NSk7XG4gIGJvcmRlci1jb2xvcjogJGNvbG9yO1xufVxuIiwiLy8gQXV0b2NvbXBsZXRlXG4uZm9ybS1hdXRvY29tcGxldGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmZvcm0tYXV0b2NvbXBsZXRlLWlucHV0IHtcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGhlaWdodDogYXV0bztcbiAgICBtaW4taGVpZ2h0OiAkdW5pdC04O1xuICAgIHBhZGRpbmc6ICR1bml0LWg7XG5cbiAgICAmLmlzLWZvY3VzZWQge1xuICAgICAgQGluY2x1ZGUgY29udHJvbC1zaGFkb3coKTtcbiAgICAgIGJvcmRlci1jb2xvcjogJHByaW1hcnktY29sb3I7XG4gICAgfVxuXG4gICAgLmZvcm0taW5wdXQge1xuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBmbGV4OiAxIDAgYXV0bztcbiAgICAgIGhlaWdodDogJHVuaXQtNjtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdW5pdC00O1xuICAgICAgbWFyZ2luOiAkdW5pdC1oO1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICB9XG5cbiAgLm1lbnUge1xuICAgIGxlZnQ6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gICYuYXV0b2NvbXBsZXRlLW9uZWxpbmUge1xuICAgIC5mb3JtLWF1dG9jb21wbGV0ZS1pbnB1dCB7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgfVxuXG4gICAgLmNoaXAge1xuICAgICAgZmxleDogMSAwIGF1dG87XG4gICAgfVxuICB9XG59XG4iLCIvLyBDYWxlbmRhcnNcbi5jYWxlbmRhciB7XG4gIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1pbi13aWR0aDogMjgwcHg7XG5cbiAgLmNhbGVuZGFyLW5hdiB7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3I7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLWxnO1xuICAgIHBhZGRpbmc6ICRsYXlvdXQtc3BhY2luZztcbiAgfVxuXG4gIC5jYWxlbmRhci1oZWFkZXIsXG4gIC5jYWxlbmRhci1ib2R5IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAkbGF5b3V0LXNwYWNpbmcgMDtcblxuICAgIC5jYWxlbmRhci1kYXRlIHtcbiAgICAgIGZsZXg6IDAgMCAxNC4yOCU7IC8vIDcgY2FsZW5kYXItaXRlbXMgZWFjaCByb3dcbiAgICAgIG1heC13aWR0aDogMTQuMjglO1xuICAgIH1cbiAgfVxuXG4gIC5jYWxlbmRhci1oZWFkZXIge1xuICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvcjtcbiAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3I7XG4gICAgY29sb3I6ICRncmF5LWNvbG9yO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuY2FsZW5kYXItYm9keSB7XG4gICAgY29sb3I6ICRncmF5LWNvbG9yLWRhcms7XG4gIH1cblxuICAuY2FsZW5kYXItZGF0ZSB7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBhZGRpbmc6ICR1bml0LTE7XG5cbiAgICAuZGF0ZS1pdGVtIHtcbiAgICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGNvbG9yOiAkZ3JheS1jb2xvci1kYXJrO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICAgICAgaGVpZ2h0OiAkdW5pdC03O1xuICAgICAgbGluZS1oZWlnaHQ6ICR1bml0LTU7XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgcGFkZGluZzogJHVuaXQtaDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgLjJzLCBib3JkZXIgLjJzLCBib3gtc2hhZG93IC4ycywgY29sb3IgLjJzO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB3aWR0aDogJHVuaXQtNztcblxuICAgICAgJi5kYXRlLXRvZGF5IHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yLWRhcms7XG4gICAgICAgIGNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCk7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMsXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHNlY29uZGFyeS1jb2xvci1saWdodDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yLWRhcms7XG4gICAgICAgIGNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgfVxuICAgICAgJjphY3RpdmUsXG4gICAgICAmLmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yLWRhcms7XG4gICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRwcmltYXJ5LWNvbG9yLWRhcmssIDUlKTtcbiAgICAgICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsZW5kYXIgYmFkZ2Ugc3VwcG9ydFxuICAgICAgJi5iYWRnZSB7XG4gICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgdG9wOiAzcHg7XG4gICAgICAgICAgcmlnaHQ6IDNweDtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIC01MCUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmRhdGUtaXRlbSxcbiAgICAuY2FsZW5kYXItZXZlbnQge1xuICAgICAgJjpkaXNhYmxlZCxcbiAgICAgICYuZGlzYWJsZWQge1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIG9wYWNpdHk6IC4yNTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5wcmV2LW1vbnRoLFxuICAgICYubmV4dC1tb250aCB7XG4gICAgICAuZGF0ZS1pdGVtLFxuICAgICAgLmNhbGVuZGFyLWV2ZW50IHtcbiAgICAgICAgb3BhY2l0eTogLjI1O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5jYWxlbmRhci1yYW5nZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6ICRzZWNvbmRhcnktY29sb3I7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgaGVpZ2h0OiAkdW5pdC03O1xuICAgICAgbGVmdDogMDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgfVxuICAgICYucmFuZ2Utc3RhcnQge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgfVxuICAgIH1cbiAgICAmLnJhbmdlLWVuZCB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICByaWdodDogNTAlO1xuICAgICAgfVxuICAgIH1cblxuICAgICYucmFuZ2Utc3RhcnQsXG4gICAgJi5yYW5nZS1lbmQge1xuICAgICAgLmRhdGUtaXRlbSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yLWRhcms7XG4gICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRwcmltYXJ5LWNvbG9yLWRhcmssIDUlKTtcbiAgICAgICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGF0ZS1pdGVtIHtcbiAgICAgIGNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBDYWxlbmRhcnMgc2l6ZVxuICAmLmNhbGVuZGFyLWxnIHtcbiAgICAuY2FsZW5kYXItYm9keSB7XG4gICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAuY2FsZW5kYXItZGF0ZSB7XG4gICAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItd2lkdGggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3I7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogNS41cmVtO1xuICAgICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAgICY6bnRoLWNoaWxkKDduKSB7XG4gICAgICAgICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgICAgICB9XG4gICAgICAgICY6bnRoLWxhc3QtY2hpbGQoLW4rNykge1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGF0ZS1pdGVtIHtcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xuICAgICAgaGVpZ2h0OiAkdW5pdC03O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAkbGF5b3V0LXNwYWNpbmctc207XG4gICAgICBtYXJnaW4tdG9wOiAkbGF5b3V0LXNwYWNpbmctc207XG4gICAgfVxuXG4gICAgLmNhbGVuZGFyLXJhbmdlIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIHRvcDogMTlweDtcbiAgICAgIH1cbiAgICAgICYucmFuZ2Utc3RhcnQge1xuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgICAgd2lkdGg6IDE5cHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICYucmFuZ2UtZW5kIHtcbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICByaWdodDogMTlweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5jYWxlbmRhci1ldmVudHMge1xuICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgcGFkZGluZzogJGxheW91dC1zcGFjaW5nLXNtO1xuICAgIH1cblxuICAgIC5jYWxlbmRhci1ldmVudCB7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbWFyZ2luOiAkdW5pdC1oIGF1dG87XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgcGFkZGluZzogM3B4IDRweDtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENhcm91c2Vsc1xuLy8gVGhlIG51bWJlciBvZiBjYXJvdXNlbCBpbWFnZXNcbiRjYXJvdXNlbC1udW1iZXI6IDg7XG5cbiVjYXJvdXNlbC1pbWFnZS1jaGVja2VkIHsgXG4gIGFuaW1hdGlvbjogY2Fyb3VzZWwtc2xpZGVpbiAuNzVzIGVhc2UtaW4tb3V0IDE7XG4gIG9wYWNpdHk6IDE7XG4gIHotaW5kZXg6ICR6aW5kZXgtMTtcbn1cblxuJWNhcm91c2VsLW5hdi1jaGVja2VkIHsgXG4gIGNvbG9yOiAkZ3JheS1jb2xvci1saWdodDtcbn1cblxuLmNhcm91c2VsIHtcbiAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICB6LWluZGV4OiAkemluZGV4LTA7XG5cbiAgLmNhcm91c2VsLWNvbnRhaW5lciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGxlZnQ6IDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNTYuMjUlO1xuICAgIH1cblxuICAgIC5jYXJvdXNlbC1pdGVtIHtcbiAgICAgIGFuaW1hdGlvbjogY2Fyb3VzZWwtc2xpZGVvdXQgMXMgZWFzZS1pbi1vdXQgMTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgd2lkdGg6IDEwMCU7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICAuaXRlbS1wcmV2LFxuICAgICAgICAuaXRlbS1uZXh0IHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLml0ZW0tcHJldixcbiAgICAuaXRlbS1uZXh0IHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoJGdyYXktY29sb3ItbGlnaHQsIC4yNSk7XG4gICAgICBib3JkZXItY29sb3I6IHJnYmEoJGdyYXktY29sb3ItbGlnaHQsIC41KTtcbiAgICAgIGNvbG9yOiAkZ3JheS1jb2xvci1saWdodDtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAuNHM7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICB6LWluZGV4OiAkemluZGV4LTE7XG4gICAgfVxuICAgIC5pdGVtLXByZXYge1xuICAgICAgbGVmdDogMXJlbTtcbiAgICB9XG4gICAgLml0ZW0tbmV4dCB7XG4gICAgICByaWdodDogMXJlbTtcbiAgICB9XG4gIH1cblxuICAuY2Fyb3VzZWwtbG9jYXRvciB7XG4gICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAoJGNhcm91c2VsLW51bWJlcikge1xuICAgICAgJjpudGgtb2YtdHlwZSgjeyRpfSk6Y2hlY2tlZCB+IC5jYXJvdXNlbC1jb250YWluZXIgLmNhcm91c2VsLWl0ZW06bnRoLW9mLXR5cGUoI3skaX0pIHtcbiAgICAgICAgQGV4dGVuZCAlY2Fyb3VzZWwtaW1hZ2UtY2hlY2tlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICgkY2Fyb3VzZWwtbnVtYmVyKSB7XG4gICAgICAmOm50aC1vZi10eXBlKCN7JGl9KTpjaGVja2VkIH4gLmNhcm91c2VsLW5hdiAubmF2LWl0ZW06bnRoLW9mLXR5cGUoI3skaX0pIHtcbiAgICAgICAgQGV4dGVuZCAlY2Fyb3VzZWwtbmF2LWNoZWNrZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmNhcm91c2VsLW5hdiB7XG4gICAgYm90dG9tOiAkbGF5b3V0LXNwYWNpbmc7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBsZWZ0OiA1MCU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICB3aWR0aDogMTByZW07XG4gICAgei1pbmRleDogJHppbmRleC0xO1xuXG4gICAgLm5hdi1pdGVtIHtcbiAgICAgIGNvbG9yOiByZ2JhKCRncmF5LWNvbG9yLWxpZ2h0LCAuNSk7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGZsZXg6IDEgMCBhdXRvO1xuICAgICAgaGVpZ2h0OiAkdW5pdC04O1xuICAgICAgbWFyZ2luOiAkdW5pdC0xO1xuICAgICAgbWF4LXdpZHRoOiAyLjVyZW07XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogJHVuaXQtaDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IC41cmVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQGtleWZyYW1lcyBjYXJvdXNlbC1zbGlkZWluIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBjYXJvdXNlbC1zbGlkZW91dCB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgfVxufVxuIiwiLy8gSW1hZ2UgY29tcGFyaXNvbiBzbGlkZXJcbi8vIENyZWRpdDogaHR0cDovL2NvZGVwZW4uaW8vc29saXBzaXN0YWNwL3Blbi9HcG1hcVxuLmNvbXBhcmlzb24tc2xpZGVyIHtcbiAgaGVpZ2h0OiA1MHZoO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG5cbiAgLmNvbXBhcmlzb24tYmVmb3JlLFxuICAuY29tcGFyaXNvbi1hZnRlciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGxlZnQ6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcblxuICAgIGltZyB7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgIG9iamVjdC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAuY29tcGFyaXNvbi1iZWZvcmUge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHotaW5kZXg6IDE7XG5cbiAgICAuY29tcGFyaXNvbi1sYWJlbCB7XG4gICAgICByaWdodDogJHVuaXQtNDtcbiAgICB9XG4gIH1cblxuICAuY29tcGFyaXNvbi1hZnRlciB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1pbi13aWR0aDogMDtcbiAgICB6LWluZGV4OiAyO1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogJHVuaXQtNDtcbiAgICAgIHRvcDogMDtcbiAgICAgIHotaW5kZXg6ICR6aW5kZXgtMDtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBib3gtc2hhZG93OiAwIC01cHgsIDAgNXB4O1xuICAgICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBoZWlnaHQ6IDNweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAkdW5pdC0yO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIC01MCUpO1xuICAgICAgd2lkdGg6IDNweDtcbiAgICB9XG5cbiAgICAuY29tcGFyaXNvbi1sYWJlbCB7XG4gICAgICBsZWZ0OiAkdW5pdC00O1xuICAgIH1cbiAgfVxuXG4gIC5jb21wYXJpc29uLXJlc2l6ZXIge1xuICAgIGFuaW1hdGlvbjogZmlyc3QtcnVuIDEuNXMgMSBlYXNlLWluLW91dDtcbiAgICBjdXJzb3I6IGV3LXJlc2l6ZTtcbiAgICBoZWlnaHQ6ICR1bml0LTQ7XG4gICAgbGVmdDogMDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiAkdW5pdC00O1xuICAgIG9wYWNpdHk6IDA7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcmVzaXplOiBob3Jpem9udGFsO1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSBzY2FsZVkoMzApO1xuICAgIHdpZHRoOiAwO1xuICB9XG5cbiAgLmNvbXBhcmlzb24tbGFiZWwge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoJGRhcmstY29sb3IsIC41KTtcbiAgICBib3R0b206ICR1bml0LTQ7XG4gICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICBwYWRkaW5nOiAkdW5pdC0xICR1bml0LTI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgZmlyc3QtcnVuIHtcbiAgMCUge1xuICAgIHdpZHRoOiAwO1xuICB9XG4gIDI1JSB7XG4gICAgd2lkdGg6ICR1bml0LTEyO1xuICB9XG4gIDUwJSB7XG4gICAgd2lkdGg6ICR1bml0LTQ7XG4gIH1cbiAgNzUlIHtcbiAgICB3aWR0aDogJHVuaXQtNjtcbiAgfVxuICAxMDAlIHtcbiAgICB3aWR0aDogMDtcbiAgfVxufVxuIiwiLy8gRmlsdGVycyBcbi8vIFRoZSBudW1iZXIgb2YgZmlsdGVyIG9wdGlvbnMgXG4kZmlsdGVyLW51bWJlcjogOCAhZGVmYXVsdDtcblxuJWZpbHRlci1jaGVja2VkLW5hdiB7IFxuICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgY29sb3I6ICRsaWdodC1jb2xvcjtcbn1cblxuJWZpbHRlci1jaGVja2VkLWJvZHkgeyBcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmZpbHRlciB7XG4gIC5maWx0ZXItbmF2IHtcbiAgICBtYXJnaW46ICRsYXlvdXQtc3BhY2luZyAwO1xuICB9XG5cbiAgLmZpbHRlci1ib2R5IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgfVxuXG4gIC5maWx0ZXItdGFnIHtcbiAgICBAZm9yICRpIGZyb20gMCB0aHJvdWdoICgkZmlsdGVyLW51bWJlcikge1xuICAgICAgJiN0YWctI3skaX06Y2hlY2tlZCB+IC5maWx0ZXItbmF2IC5jaGlwW2Zvcj1cInRhZy0jeyRpfVwiXSB7XG4gICAgICAgIEBleHRlbmQgJWZpbHRlci1jaGVja2VkLW5hdjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICgkZmlsdGVyLW51bWJlcikge1xuICAgICAgJiN0YWctI3skaX06Y2hlY2tlZCB+IC5maWx0ZXItYm9keSAuZmlsdGVyLWl0ZW06bm90KFtkYXRhLXRhZ349XCJ0YWctI3skaX1cIl0pIHtcbiAgICAgICAgQGV4dGVuZCAlZmlsdGVyLWNoZWNrZWQtYm9keTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIE1ldGVyc1xuLy8gQ3JlZGl0OiBodHRwczovL2Nzcy10cmlja3MuY29tL2h0bWw1LW1ldGVyLWVsZW1lbnQvXG4ubWV0ZXIge1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBiYWNrZ3JvdW5kOiAkYmctY29sb3I7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAkdW5pdC00O1xuXG4gICY6Oi13ZWJraXQtbWV0ZXItaW5uZXItZWxlbWVudCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAmOjotd2Via2l0LW1ldGVyLWJhcixcbiAgJjo6LXdlYmtpdC1tZXRlci1vcHRpbXVtLXZhbHVlLFxuICAmOjotd2Via2l0LW1ldGVyLXN1Ym9wdGltdW0tdmFsdWUsXG4gICY6Oi13ZWJraXQtbWV0ZXItZXZlbi1sZXNzLWdvb2QtdmFsdWUge1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICB9XG5cbiAgJjo6LXdlYmtpdC1tZXRlci1iYXIge1xuICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvcjtcbiAgfVxuXG4gICY6Oi13ZWJraXQtbWV0ZXItb3B0aW11bS12YWx1ZSB7XG4gICAgYmFja2dyb3VuZDogJHN1Y2Nlc3MtY29sb3I7XG4gIH1cblxuICAmOjotd2Via2l0LW1ldGVyLXN1Ym9wdGltdW0tdmFsdWUge1xuICAgIGJhY2tncm91bmQ6ICR3YXJuaW5nLWNvbG9yO1xuICB9XG5cbiAgJjo6LXdlYmtpdC1tZXRlci1ldmVuLWxlc3MtZ29vZC12YWx1ZSB7XG4gICAgYmFja2dyb3VuZDogJGVycm9yLWNvbG9yO1xuICB9XG5cbiAgJjo6LW1vei1tZXRlci1iYXIsXG4gICY6LW1vei1tZXRlci1vcHRpbXVtLFxuICAmOi1tb3otbWV0ZXItc3ViLW9wdGltdW0sXG4gICY6LW1vei1tZXRlci1zdWItc3ViLW9wdGltdW0ge1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICB9XG5cbiAgJjotbW96LW1ldGVyLW9wdGltdW06Oi1tb3otbWV0ZXItYmFyIHtcbiAgICBiYWNrZ3JvdW5kOiAkc3VjY2Vzcy1jb2xvcjtcbiAgfVxuXG4gICY6LW1vei1tZXRlci1zdWItb3B0aW11bTo6LW1vei1tZXRlci1iYXIge1xuICAgIGJhY2tncm91bmQ6ICR3YXJuaW5nLWNvbG9yO1xuICB9XG5cbiAgJjotbW96LW1ldGVyLXN1Yi1zdWItb3B0aW11bTo6LW1vei1tZXRlci1iYXIge1xuICAgIGJhY2tncm91bmQ6ICRlcnJvci1jb2xvcjtcbiAgfVxufVxuIiwiLy8gT2ZmIGNhbnZhcyBtZW51c1xuJG9mZi1jYW52YXMtYnJlYWtwb2ludDogJHNpemUtbGcgIWRlZmF1bHQ7XG5cbi5vZmYtY2FudmFzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiBub3dyYXA7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcblxuICAub2ZmLWNhbnZhcy10b2dnbGUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6ICRsYXlvdXQtc3BhY2luZztcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICAgIHotaW5kZXg6ICR6aW5kZXgtMDtcbiAgICBAaWYgJHJ0bCA9PSB0cnVlIHtcbiAgICAgIHJpZ2h0OiAkbGF5b3V0LXNwYWNpbmc7XG4gICAgfSBAZWxzZSB7XG4gICAgICBsZWZ0OiAkbGF5b3V0LXNwYWNpbmc7XG4gICAgfVxuICB9XG5cbiAgLm9mZi1jYW52YXMtc2lkZWJhciB7XG4gICAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICAgIGJvdHRvbTogMDtcbiAgICBtaW4td2lkdGg6IDEwcmVtO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cztcbiAgICB6LWluZGV4OiAkemluZGV4LTI7XG4gICAgQGlmICRydGwgPT0gdHJ1ZSB7XG4gICAgICByaWdodDogMDtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICAgIH1cbiAgfVxuXG4gIC5vZmYtY2FudmFzLWNvbnRlbnQge1xuICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBwYWRkaW5nOiAkbGF5b3V0LXNwYWNpbmcgJGxheW91dC1zcGFjaW5nICRsYXlvdXQtc3BhY2luZyA0cmVtO1xuICB9XG5cbiAgLm9mZi1jYW52YXMtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgkZGFyay1jb2xvciwgLjEpO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBib3R0b206IDA7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbGVmdDogMDtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLm9mZi1jYW52YXMtc2lkZWJhciB7XG4gICAgJjp0YXJnZXQsXG4gICAgJi5hY3RpdmUge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgIH1cblxuICAgICY6dGFyZ2V0IH4gLm9mZi1jYW52YXMtb3ZlcmxheSxcbiAgICAmLmFjdGl2ZSB+IC5vZmYtY2FudmFzLW92ZXJsYXkge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB6LWluZGV4OiAkemluZGV4LTE7XG4gICAgfVxuICB9XG59XG5cbi8vIFJlc3BvbnNpdmUgbGF5b3V0XG5AbWVkaWEgKG1pbi13aWR0aDogJG9mZi1jYW52YXMtYnJlYWtwb2ludCkge1xuICAub2ZmLWNhbnZhcyB7XG4gICAgJi5vZmYtY2FudmFzLXNpZGViYXItc2hvdyB7XG4gICAgICAub2ZmLWNhbnZhcy10b2dnbGUge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICBcbiAgICAgIC5vZmYtY2FudmFzLXNpZGViYXIge1xuICAgICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIC5vZmYtY2FudmFzLW92ZXJsYXkge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBQYXJhbGxheFxuJHBhcmFsbGF4LWRlZzogM2RlZyAhZGVmYXVsdDtcbiRwYXJhbGxheC1vZmZzZXQ6IDQuNXB4ICFkZWZhdWx0O1xuJHBhcmFsbGF4LW9mZnNldC16OiA1MHB4ICFkZWZhdWx0O1xuJHBhcmFsbGF4LXBlcnNwZWN0aXZlOiAxMDAwcHggIWRlZmF1bHQ7XG4kcGFyYWxsYXgtc2NhbGU6IC45NSAhZGVmYXVsdDtcbiRwYXJhbGxheC1mYWRlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC4zNSkgIWRlZmF1bHQ7XG5cbi8vIE1peGluOiBQYXJhbGxheCBkaXJlY3Rpb25cbkBtaXhpbiBwYXJhbGxheC1kaXIoKSB7XG4gIGhlaWdodDogNTAlO1xuICBvdXRsaW5lOiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiA1MCU7XG4gIHotaW5kZXg6ICR6aW5kZXgtMTtcbn1cblxuLnBhcmFsbGF4IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogYXV0bztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogYXV0bztcblxuICAucGFyYWxsYXgtY29udGVudCB7XG4gICAgQGluY2x1ZGUgc2hhZG93LXZhcmlhbnQoMXJlbSk7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoJHBhcmFsbGF4LXBlcnNwZWN0aXZlKTtcbiAgICB0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkO1xuICAgIHRyYW5zaXRpb246IGFsbCAuNHMgZWFzZTtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgLnBhcmFsbGF4LWZyb250IHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbGVmdDogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHRleHQtc2hhZG93OiAwIDAgMjBweCByZ2JhKCRkYXJrLWNvbG9yLCAuNzUpO1xuICAgIHRvcDogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooJHBhcmFsbGF4LW9mZnNldC16KSBzY2FsZSgkcGFyYWxsYXgtc2NhbGUpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuNHM7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgei1pbmRleDogJHppbmRleC0wO1xuICB9XG5cbiAgLnBhcmFsbGF4LXRvcC1sZWZ0IHtcbiAgICBAaW5jbHVkZSBwYXJhbGxheC1kaXIoKTtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcblxuICAgICY6Zm9jdXMgfiAucGFyYWxsYXgtY29udGVudCxcbiAgICAmOmhvdmVyIH4gLnBhcmFsbGF4LWNvbnRlbnQge1xuICAgICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgkcGFyYWxsYXgtcGVyc3BlY3RpdmUpIHJvdGF0ZVgoJHBhcmFsbGF4LWRlZykgcm90YXRlWSgtJHBhcmFsbGF4LWRlZyk7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICRwYXJhbGxheC1mYWRlLWNvbG9yIDAlLCB0cmFuc3BhcmVudCA1MCUpO1xuICAgICAgfVxuXG4gICAgICAucGFyYWxsYXgtZnJvbnQge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKCRwYXJhbGxheC1vZmZzZXQsICRwYXJhbGxheC1vZmZzZXQsICRwYXJhbGxheC1vZmZzZXQteikgc2NhbGUoJHBhcmFsbGF4LXNjYWxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAucGFyYWxsYXgtdG9wLXJpZ2h0IHtcbiAgICBAaW5jbHVkZSBwYXJhbGxheC1kaXIoKTtcbiAgICByaWdodDogMDtcbiAgICB0b3A6IDA7XG5cbiAgICAmOmZvY3VzIH4gLnBhcmFsbGF4LWNvbnRlbnQsXG4gICAgJjpob3ZlciB+IC5wYXJhbGxheC1jb250ZW50IHtcbiAgICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoJHBhcmFsbGF4LXBlcnNwZWN0aXZlKSByb3RhdGVYKCRwYXJhbGxheC1kZWcpIHJvdGF0ZVkoJHBhcmFsbGF4LWRlZyk7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgtMTM1ZGVnLCAkcGFyYWxsYXgtZmFkZS1jb2xvciAwJSwgdHJhbnNwYXJlbnQgNTAlKTtcbiAgICAgIH1cblxuICAgICAgLnBhcmFsbGF4LWZyb250IHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtJHBhcmFsbGF4LW9mZnNldCwgJHBhcmFsbGF4LW9mZnNldCwgJHBhcmFsbGF4LW9mZnNldC16KSBzY2FsZSgkcGFyYWxsYXgtc2NhbGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5wYXJhbGxheC1ib3R0b20tbGVmdCB7XG4gICAgQGluY2x1ZGUgcGFyYWxsYXgtZGlyKCk7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG5cbiAgICAmOmZvY3VzIH4gLnBhcmFsbGF4LWNvbnRlbnQsXG4gICAgJjpob3ZlciB+IC5wYXJhbGxheC1jb250ZW50IHtcbiAgICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoJHBhcmFsbGF4LXBlcnNwZWN0aXZlKSByb3RhdGVYKC0kcGFyYWxsYXgtZGVnKSByb3RhdGVZKC0kcGFyYWxsYXgtZGVnKTtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAkcGFyYWxsYXgtZmFkZS1jb2xvciAwJSwgdHJhbnNwYXJlbnQgNTAlKTtcbiAgICAgIH1cblxuICAgICAgLnBhcmFsbGF4LWZyb250IHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgkcGFyYWxsYXgtb2Zmc2V0LCAtJHBhcmFsbGF4LW9mZnNldCwgJHBhcmFsbGF4LW9mZnNldC16KSBzY2FsZSgkcGFyYWxsYXgtc2NhbGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5wYXJhbGxheC1ib3R0b20tcmlnaHQge1xuICAgIEBpbmNsdWRlIHBhcmFsbGF4LWRpcigpO1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogMDtcblxuICAgICY6Zm9jdXMgfiAucGFyYWxsYXgtY29udGVudCxcbiAgICAmOmhvdmVyIH4gLnBhcmFsbGF4LWNvbnRlbnQge1xuICAgICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgkcGFyYWxsYXgtcGVyc3BlY3RpdmUpIHJvdGF0ZVgoLSRwYXJhbGxheC1kZWcpIHJvdGF0ZVkoJHBhcmFsbGF4LWRlZyk7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgtNDVkZWcsICRwYXJhbGxheC1mYWRlLWNvbG9yIDAlLCB0cmFuc3BhcmVudCA1MCUpO1xuICAgICAgfVxuXG4gICAgICAucGFyYWxsYXgtZnJvbnQge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0kcGFyYWxsYXgtb2Zmc2V0LCAtJHBhcmFsbGF4LW9mZnNldCwgJHBhcmFsbGF4LW9mZnNldC16KSBzY2FsZSgkcGFyYWxsYXgtc2NhbGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gUHJvZ3Jlc3Ncbi8vIENyZWRpdDogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9odG1sNS1wcm9ncmVzcy1lbGVtZW50L1xuLnByb2dyZXNzIHtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWRhcms7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiAgaGVpZ2h0OiAkdW5pdC0xO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuXG4gICY6Oi13ZWJraXQtcHJvZ3Jlc3MtYmFyIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgfVxuXG4gICY6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWUge1xuICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICB9XG5cbiAgJjo6LW1vei1wcm9ncmVzcy1iYXIge1xuICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICB9XG5cbiAgJjppbmRldGVybWluYXRlIHtcbiAgICBhbmltYXRpb246IHByb2dyZXNzLWluZGV0ZXJtaW5hdGUgMS41cyBsaW5lYXIgaW5maW5pdGU7XG4gICAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWRhcmsgbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAkcHJpbWFyeS1jb2xvciAzMCUsICRiZy1jb2xvci1kYXJrIDMwJSkgdG9wIGxlZnQgLyAxNTAlIDE1MCUgbm8tcmVwZWF0O1xuXG4gICAgJjo6LW1vei1wcm9ncmVzcy1iYXIge1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgfVxuICB9XG59XG5cbkBrZXlmcmFtZXMgcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZSB7XG4gIDAlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAyMDAlIDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwMCUgMDtcbiAgfVxufVxuIiwiLy8gU2xpZGVyc1xuLy8gQ3JlZGl0OiBodHRwczovL2Nzcy10cmlja3MuY29tL3N0eWxpbmctY3Jvc3MtYnJvd3Nlci1jb21wYXRpYmxlLXJhbmdlLWlucHV0cy1jc3MvXG4uc2xpZGVyIHtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAkdW5pdC02O1xuXG4gICY6Zm9jdXMge1xuICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCk7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuXG4gICYudG9vbHRpcDpub3QoW2RhdGEtdG9vbHRpcF0pIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBjb250ZW50OiBhdHRyKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvLyBTbGlkZXIgVGh1bWJcbiAgJjo6LXdlYmtpdC1zbGlkZXItdGh1bWIge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgICBib3JkZXI6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGhlaWdodDogJHVuaXQtMztcbiAgICBtYXJnaW4tdG9wOiAtKCR1bml0LTMgLSAkdW5pdC1oKSAvIDI7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4ycztcbiAgICB3aWR0aDogJHVuaXQtMztcbiAgfVxuICAmOjotbW96LXJhbmdlLXRodW1iIHtcbiAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgICBib3JkZXI6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGhlaWdodDogJHVuaXQtMztcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzO1xuICAgIHdpZHRoOiAkdW5pdC0zO1xuICB9XG4gICY6Oi1tcy10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBoZWlnaHQ6ICR1bml0LTM7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4ycztcbiAgICB3aWR0aDogJHVuaXQtMztcbiAgfVxuXG4gICY6YWN0aXZlIHtcbiAgICAmOjotd2Via2l0LXNsaWRlci10aHVtYiB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpO1xuICAgIH1cbiAgICAmOjotbW96LXJhbmdlLXRodW1iIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yNSk7XG4gICAgfVxuICAgICY6Oi1tcy10aHVtYiB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpO1xuICAgIH1cbiAgfVxuXG4gICY6ZGlzYWJsZWQsXG4gICYuZGlzYWJsZWQge1xuICAgICY6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQ6ICRncmF5LWNvbG9yLWxpZ2h0O1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICB9XG4gICAgJjo6LW1vei1yYW5nZS10aHVtYiB7XG4gICAgICBiYWNrZ3JvdW5kOiAkZ3JheS1jb2xvci1saWdodDtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgfVxuICAgICY6Oi1tcy10aHVtYiB7XG4gICAgICBiYWNrZ3JvdW5kOiAkZ3JheS1jb2xvci1saWdodDtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2xpZGVyIFRyYWNrXG4gICY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItZGFyaztcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBoZWlnaHQ6ICR1bml0LWg7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgJjo6LW1vei1yYW5nZS10cmFjayB7XG4gICAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWRhcms7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgaGVpZ2h0OiAkdW5pdC1oO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gICY6Oi1tcy10cmFjayB7XG4gICAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWRhcms7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgaGVpZ2h0OiAkdW5pdC1oO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gICY6Oi1tcy1maWxsLWxvd2VyIHtcbiAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgfVxufVxuIiwiLy8gVGltZWxpbmVzXG4udGltZWxpbmUge1xuICAudGltZWxpbmUtaXRlbSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXJnaW4tYm90dG9tOiAkdW5pdC02O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogJGJvcmRlci1jb2xvcjtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBsZWZ0OiAxMXB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAkdW5pdC02O1xuICAgICAgd2lkdGg6IDJweDtcbiAgICB9XG5cbiAgICAudGltZWxpbmUtbGVmdCB7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB9XG5cbiAgICAudGltZWxpbmUtY29udGVudCB7XG4gICAgICBmbGV4OiAxIDEgYXV0bztcbiAgICAgIHBhZGRpbmc6IDJweCAwIDJweCAkbGF5b3V0LXNwYWNpbmctbGc7XG4gICAgfVxuXG4gICAgLnRpbWVsaW5lLWljb24ge1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgaGVpZ2h0OiAkdW5pdC02O1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB3aWR0aDogJHVuaXQtNjtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aC1sZyBzb2xpZCAkcHJpbWFyeS1jb2xvcjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAkdW5pdC0yO1xuICAgICAgICBsZWZ0OiAkdW5pdC0yO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogJHVuaXQtMjtcbiAgICAgICAgd2lkdGg6ICR1bml0LTI7XG4gICAgICB9XG5cbiAgICAgICYuaWNvbi1sZyB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuICAgICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIGNvbnRlbnQ6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIDM2MCBEZWdyZWUgVmlld2VyXG5cbi8vIE1peGluOiBWaWV3ZXIgc2xpZGVyIHNpemVzXG5AbWl4aW4gdmlld2VyLXNsaWRlci1zaXplKCRpbWFnZS1udW1iZXI6IDM2KSB7XG4gIEBmb3IgJHMgZnJvbSAxIHRocm91Z2ggKCRpbWFnZS1udW1iZXIpIHtcbiAgICAudmlld2VyLXNsaWRlclttYXg9JyN7JGltYWdlLW51bWJlcn0nXVt2YWx1ZT0nI3skc30nXSArIC52aWV3ZXItaW1hZ2Uge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiBwZXJjZW50YWdlKCgoJHMpLTEpICogMS8oKCRpbWFnZS1udW1iZXIpLTEpKTtcbiAgICB9XG4gIH1cbn1cblxuLnZpZXdlci0zNjAge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gIC8vIENvcHkgYW5kIGFkZCBtb3JlIG51bWJlcnMgaWYgeW91IG5lZWRcbiAgQGluY2x1ZGUgdmlld2VyLXNsaWRlci1zaXplKDM2KTtcblxuICAudmlld2VyLXNsaWRlciB7XG4gICAgY3Vyc29yOiBldy1yZXNpemU7XG4gICAgbWFyZ2luOiAxcmVtO1xuICAgIG9yZGVyOiAyO1xuICAgIHdpZHRoOiA2MCU7XG4gIH1cblxuICAudmlld2VyLWltYWdlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDA7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG9yZGVyOiAxO1xuICB9XG59Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLHNGQUE0RjtBYUo1RixBQUFBLGtCQUFrQixDQUFDLEVBQ2pCLFFBQVEsRUFBRSxRQUFRLEdBNENuQjs7QUE3Q0QsQUFHRSxrQkFIZ0IsQ0FHaEIsd0JBQXdCLENBQUMsRUFDdkIsYUFBYSxFQUFFLFVBQVUsRUFDekIsT0FBTyxFQUFFLElBQUksRUFDYixTQUFTLEVBQUUsSUFBSSxFQUNmLE1BQU0sRUFBRSxJQUFJLEVBQ1osVUFBVSxFWHNETCxNQUFNLEVXckRYLE9BQU8sRVg2Q0YsTUFBSyxHVzVCWDs7QUExQkgsQUFXSSxrQkFYYyxDQUdoQix3QkFBd0IsQUFRckIsV0FBVyxDQUFDLEVIVmYsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQUssQ1REVCx1QkFBTyxFWWFqQixZQUFZLEVaYkYsT0FBTyxHWWNsQjs7QUFkTCxBQWdCSSxrQkFoQmMsQ0FHaEIsd0JBQXdCLENBYXRCLFdBQVcsQ0FBQyxFQUNWLFlBQVksRUFBRSxXQUFXLEVBQ3pCLFVBQVUsRUFBRSxJQUFJLEVBQ2hCLE9BQU8sRUFBRSxZQUFZLEVBQ3JCLElBQUksRUFBRSxRQUFRLEVBQ2QsTUFBTSxFWHVDSCxNQUFNLEVXdENULFdBQVcsRVhvQ1IsTUFBSyxFV25DUixNQUFNLEVYK0JILE1BQUssRVc5QlIsS0FBSyxFQUFFLElBQUksR0FDWjs7QUF6QkwsQUE0QkUsa0JBNUJnQixDQTRCaEIsS0FBSyxDQUFDLEVBQ0osSUFBSSxFQUFFLENBQUMsRUFDUCxRQUFRLEVBQUUsUUFBUSxFQUNsQixHQUFHLEVBQUUsSUFBSSxFQUNULEtBQUssRUFBRSxJQUFJ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QUFtQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sR0FBRyxBQUFULElBQWEsYUFBYSxDQUFtQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sR0FBRyxBQUFULElBQWEsYUFBYSxDQUFtQixFQUNwRSxxQkFBcUIsRUFBRSxHQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sR0FBRyxBQUFULElBQWEsYUFBYSxDQUFtQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxHQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxHQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxHQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxjQUE0QyxHQUNwRTs7QUFJTCxBQU5JLFdBTU8sQ0FOUCxjQUFjLENBQUEsQUFBQSxHQUFDLENBQUksSUFBSSxBQUFSLEVBQVMsQUFBQSxLQUFDLENBQU0sSUFBSSxBQUFWLElBQWMsYUFBYSxDQUFrQixFQUNwRSxxQkFBcUIsRUFBRSxJQUE0QyxHQUNwRTs7QUFJTCxBQVFFLFdBUlMsQ0FRVCxjQUFjLENBQUMsRUFDYixNQUFNLEVBQUUsU0FBUyxFQUNqQixNQUFNLEVBQUUsSUFBSSxFQUNaLEtBQUssRUFBRSxDQUFDLEVBQ1IsS0FBSyxFQUFFLEdBQUcsR0FDWDs7QUFiSCxBQWVFLFdBZlMsQ0FlVCxhQUFhLENBQUMsRUFDWixxQkFBcUIsRUFBRSxDQUFDLEVBQ3hCLGlCQUFpQixFQUFFLFNBQVMsRUFDNUIsZUFBZSxFQUFFLElBQUksRUFDckIsU0FBUyxFQUFFLElBQUksRUFDZixLQUFLLEVBQUUsQ0FBQyxHQUNUIn0= */
diff --git a/themes/quark/css-compiled/spectre-exp.min.css b/themes/quark/css-compiled/spectre-exp.min.css
new file mode 100644
index 0000000..104787b
--- /dev/null
+++ b/themes/quark/css-compiled/spectre-exp.min.css
@@ -0,0 +1 @@
+/*! Spectre.css Experimentals v0.5.8 | MIT License | github.com/picturepan2/spectre */.form-autocomplete{position:relative}.form-autocomplete .form-autocomplete-input{display:-ms-flexbox;display:flex;height:auto;min-height:1.6rem;padding:.1rem;-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap}.form-autocomplete .form-autocomplete-input.is-focused{border-color:#3085ee;box-shadow:0 0 0 .1rem rgba(48,133,238,.2)}.form-autocomplete .form-autocomplete-input .form-input{line-height:.8rem;display:inline-block;width:auto;height:1.2rem;margin:.1rem;border-color:transparent;box-shadow:none;-ms-flex:1 0 auto;flex:1 0 auto}.form-autocomplete .menu{position:absolute;top:100%;left:0;width:100%}.form-autocomplete.autocomplete-oneline .form-autocomplete-input{overflow-x:auto;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.form-autocomplete.autocomplete-oneline .chip{-ms-flex:1 0 auto;flex:1 0 auto}.calendar{display:block;min-width:280px;border:.05rem solid #e7e9ed;border-radius:.1rem}.calendar .calendar-nav{font-size:.9rem;display:-ms-flexbox;display:flex;padding:.4rem;border-top-left-radius:.1rem;border-top-right-radius:.1rem;background:#f8f9fa;-ms-flex-align:center;align-items:center}.calendar .calendar-body,.calendar .calendar-header{display:-ms-flexbox;display:flex;padding:.4rem 0;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center}.calendar .calendar-body .calendar-date,.calendar .calendar-header .calendar-date{max-width:14.28%;-ms-flex:0 0 14.28%;flex:0 0 14.28%}.calendar .calendar-header{font-size:.7rem;text-align:center;color:#acb3c2;border-bottom:.05rem solid #e7e9ed;background:#f8f9fa}.calendar .calendar-body{color:#667189}.calendar .calendar-date{padding:.2rem;border:0}.calendar .calendar-date .date-item{font-size:.7rem;line-height:1rem;position:relative;width:1.4rem;height:1.4rem;padding:.1rem;cursor:pointer;transition:background .2s,border .2s,box-shadow .2s,color .2s;text-align:center;vertical-align:middle;white-space:nowrap;text-decoration:none;color:#667189;border:.05rem solid transparent;border-radius:50%;outline:0;background:0 0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.calendar .calendar-date .date-item.date-today{color:#3085ee;border-color:#d3e5fb}.calendar .calendar-date .date-item:focus{box-shadow:0 0 0 .1rem rgba(48,133,238,.2)}.calendar .calendar-date .date-item:focus,.calendar .calendar-date .date-item:hover{text-decoration:none;color:#3085ee;border-color:#d3e5fb;background:#eff5fe}.calendar .calendar-date .date-item.active,.calendar .calendar-date .date-item:active{color:#fff;border-color:#1370e3;background:#227ded}.calendar .calendar-date .date-item.badge::after{position:absolute;top:3px;right:3px;transform:translate(50%,-50%)}.calendar .calendar-date .calendar-event.disabled,.calendar .calendar-date .calendar-event:disabled,.calendar .calendar-date .date-item.disabled,.calendar .calendar-date .date-item:disabled{cursor:default;pointer-events:none;opacity:.25}.calendar .calendar-date.next-month .calendar-event,.calendar .calendar-date.next-month .date-item,.calendar .calendar-date.prev-month .calendar-event,.calendar .calendar-date.prev-month .date-item{opacity:.25}.calendar .calendar-range{position:relative}.calendar .calendar-range::before{position:absolute;top:50%;right:0;left:0;height:1.4rem;content:'';transform:translateY(-50%);background:#e1edfd}.calendar .calendar-range.range-start::before{left:50%}.calendar .calendar-range.range-end::before{right:50%}.calendar .calendar-range.range-end .date-item,.calendar .calendar-range.range-start .date-item{color:#fff;border-color:#1370e3;background:#227ded}.calendar .calendar-range .date-item{color:#3085ee}.calendar.calendar-lg .calendar-body{padding:0}.calendar.calendar-lg .calendar-body .calendar-date{display:-ms-flexbox;display:flex;flex-direction:column;height:5.5rem;padding:0;border-right:.05rem solid #e7e9ed;border-bottom:.05rem solid #e7e9ed;-ms-flex-direction:column}.calendar.calendar-lg .calendar-body .calendar-date:nth-child(7n){border-right:0}.calendar.calendar-lg .calendar-body .calendar-date:nth-last-child(-n+7){border-bottom:0}.calendar.calendar-lg .date-item{height:1.4rem;margin-top:.2rem;margin-right:.2rem;-ms-flex-item-align:end;align-self:flex-end}.calendar.calendar-lg .calendar-range::before{top:19px}.calendar.calendar-lg .calendar-range.range-start::before{left:auto;width:19px}.calendar.calendar-lg .calendar-range.range-end::before{right:19px}.calendar.calendar-lg .calendar-events{line-height:1;overflow-y:auto;padding:.2rem;-ms-flex-positive:1;flex-grow:1}.calendar.calendar-lg .calendar-event{font-size:.7rem;display:block;overflow:hidden;margin:.1rem auto;padding:3px 4px;white-space:nowrap;text-overflow:ellipsis;border-radius:.1rem}.carousel .carousel-locator:nth-of-type(1):checked~.carousel-container .carousel-item:nth-of-type(1),.carousel .carousel-locator:nth-of-type(2):checked~.carousel-container .carousel-item:nth-of-type(2),.carousel .carousel-locator:nth-of-type(3):checked~.carousel-container .carousel-item:nth-of-type(3),.carousel .carousel-locator:nth-of-type(4):checked~.carousel-container .carousel-item:nth-of-type(4),.carousel .carousel-locator:nth-of-type(5):checked~.carousel-container .carousel-item:nth-of-type(5),.carousel .carousel-locator:nth-of-type(6):checked~.carousel-container .carousel-item:nth-of-type(6),.carousel .carousel-locator:nth-of-type(7):checked~.carousel-container .carousel-item:nth-of-type(7),.carousel .carousel-locator:nth-of-type(8):checked~.carousel-container .carousel-item:nth-of-type(8){z-index:100;animation:carousel-slidein .75s ease-in-out 1;opacity:1}.carousel .carousel-locator:nth-of-type(1):checked~.carousel-nav .nav-item:nth-of-type(1),.carousel .carousel-locator:nth-of-type(2):checked~.carousel-nav .nav-item:nth-of-type(2),.carousel .carousel-locator:nth-of-type(3):checked~.carousel-nav .nav-item:nth-of-type(3),.carousel .carousel-locator:nth-of-type(4):checked~.carousel-nav .nav-item:nth-of-type(4),.carousel .carousel-locator:nth-of-type(5):checked~.carousel-nav .nav-item:nth-of-type(5),.carousel .carousel-locator:nth-of-type(6):checked~.carousel-nav .nav-item:nth-of-type(6),.carousel .carousel-locator:nth-of-type(7):checked~.carousel-nav .nav-item:nth-of-type(7),.carousel .carousel-locator:nth-of-type(8):checked~.carousel-nav .nav-item:nth-of-type(8){color:#e7e9ed}.carousel{position:relative;z-index:1;display:block;overflow:hidden;width:100%;background:#f8f9fa;-webkit-overflow-scrolling:touch}.carousel .carousel-container{position:relative;left:0;height:100%}.carousel .carousel-container::before{display:block;padding-bottom:56.25%;content:''}.carousel .carousel-container .carousel-item{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;animation:carousel-slideout 1s ease-in-out 1;opacity:0}.carousel .carousel-container .carousel-item:hover .item-next,.carousel .carousel-container .carousel-item:hover .item-prev{opacity:1}.carousel .carousel-container .item-next,.carousel .carousel-container .item-prev{position:absolute;z-index:100;top:50%;transition:all .4s;transform:translateY(-50%);opacity:0;color:#e7e9ed;border-color:rgba(231,233,237,.5);background:rgba(231,233,237,.25)}.carousel .carousel-container .item-prev{left:1rem}.carousel .carousel-container .item-next{right:1rem}.carousel .carousel-nav{position:absolute;z-index:100;bottom:.4rem;left:50%;display:-ms-flexbox;display:flex;width:10rem;transform:translateX(-50%);-ms-flex-pack:center;justify-content:center}.carousel .carousel-nav .nav-item{position:relative;display:block;max-width:2.5rem;height:1.6rem;margin:.2rem;color:rgba(231,233,237,.5);-ms-flex:1 0 auto;flex:1 0 auto}.carousel .carousel-nav .nav-item::before{position:absolute;top:.5rem;display:block;width:100%;height:.1rem;content:'';background:currentColor}@keyframes carousel-slidein{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@keyframes carousel-slideout{0%{transform:translateX(0);opacity:1}100%{transform:translateX(-50%);opacity:1}}.comparison-slider{position:relative;overflow:hidden;width:100%;height:50vh;-webkit-overflow-scrolling:touch}.comparison-slider .comparison-after,.comparison-slider .comparison-before{position:absolute;top:0;left:0;overflow:hidden;height:100%;margin:0}.comparison-slider .comparison-after img,.comparison-slider .comparison-before img{position:absolute;width:100%;height:100%;object-fit:cover;object-position:left center}.comparison-slider .comparison-before{z-index:1;width:100%}.comparison-slider .comparison-before .comparison-label{right:.8rem}.comparison-slider .comparison-after{z-index:2;min-width:0;max-width:100%}.comparison-slider .comparison-after::before{position:absolute;z-index:1;top:0;right:.8rem;left:0;height:100%;content:'';cursor:default;background:0 0}.comparison-slider .comparison-after::after{position:absolute;top:50%;right:.4rem;width:3px;height:3px;content:'';transform:translate(50%,-50%);color:#fff;border-radius:50%;background:currentColor;box-shadow:0 -5px,0 5px}.comparison-slider .comparison-after .comparison-label{left:.8rem}.comparison-slider .comparison-resizer{position:relative;top:50%;left:0;width:0;min-width:.8rem;max-width:100%;height:.8rem;resize:horizontal;cursor:ew-resize;transform:translateY(-50%) scaleY(30);animation:first-run 1.5s 1 ease-in-out;opacity:0;outline:0}.comparison-slider .comparison-label{position:absolute;bottom:.8rem;padding:.2rem .4rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#fff;background:rgba(69,77,93,.5)}@keyframes first-run{0%{width:0}25%{width:2.4rem}50%{width:.8rem}75%{width:1.2rem}100%{width:0}}.filter .filter-tag#tag-0:checked~.filter-nav .chip[for=tag-0],.filter .filter-tag#tag-1:checked~.filter-nav .chip[for=tag-1],.filter .filter-tag#tag-2:checked~.filter-nav .chip[for=tag-2],.filter .filter-tag#tag-3:checked~.filter-nav .chip[for=tag-3],.filter .filter-tag#tag-4:checked~.filter-nav .chip[for=tag-4],.filter .filter-tag#tag-5:checked~.filter-nav .chip[for=tag-5],.filter .filter-tag#tag-6:checked~.filter-nav .chip[for=tag-6],.filter .filter-tag#tag-7:checked~.filter-nav .chip[for=tag-7],.filter .filter-tag#tag-8:checked~.filter-nav .chip[for=tag-8]{color:#fff;background:#3085ee}.filter .filter-tag#tag-1:checked~.filter-body .filter-item:not([data-tag~=tag-1]),.filter .filter-tag#tag-2:checked~.filter-body .filter-item:not([data-tag~=tag-2]),.filter .filter-tag#tag-3:checked~.filter-body .filter-item:not([data-tag~=tag-3]),.filter .filter-tag#tag-4:checked~.filter-body .filter-item:not([data-tag~=tag-4]),.filter .filter-tag#tag-5:checked~.filter-body .filter-item:not([data-tag~=tag-5]),.filter .filter-tag#tag-6:checked~.filter-body .filter-item:not([data-tag~=tag-6]),.filter .filter-tag#tag-7:checked~.filter-body .filter-item:not([data-tag~=tag-7]),.filter .filter-tag#tag-8:checked~.filter-body .filter-item:not([data-tag~=tag-8]){display:none}.filter .filter-nav{margin:.4rem 0}.filter .filter-body{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.meter{display:block;width:100%;height:.8rem;border:0;border-radius:.1rem;background:#f8f9fa;-webkit-appearance:none;-moz-appearance:none;appearance:none}.meter::-webkit-meter-inner-element{display:block}.meter::-webkit-meter-bar,.meter::-webkit-meter-even-less-good-value,.meter::-webkit-meter-optimum-value,.meter::-webkit-meter-suboptimum-value{border-radius:.1rem}.meter::-webkit-meter-bar{background:#f8f9fa}.meter::-webkit-meter-optimum-value{background:#32b643}.meter::-webkit-meter-suboptimum-value{background:#ffb700}.meter::-webkit-meter-even-less-good-value{background:#e85600}.meter:-moz-meter-optimum,.meter:-moz-meter-sub-optimum,.meter:-moz-meter-sub-sub-optimum,.meter::-moz-meter-bar{border-radius:.1rem}.meter:-moz-meter-optimum::-moz-meter-bar{background:#32b643}.meter:-moz-meter-sub-optimum::-moz-meter-bar{background:#ffb700}.meter:-moz-meter-sub-sub-optimum::-moz-meter-bar{background:#e85600}.off-canvas{position:relative;display:-ms-flexbox;display:flex;width:100%;height:100%;-ms-flex-flow:nowrap;flex-flow:nowrap}.off-canvas .off-canvas-toggle{position:absolute;z-index:1;top:.4rem;left:.4rem;display:block;transition:none}.off-canvas .off-canvas-sidebar{position:fixed;z-index:200;top:0;bottom:0;left:0;overflow-y:auto;min-width:10rem;transition:transform .25s;transform:translateX(-100%);background:#f8f9fa}.off-canvas .off-canvas-content{height:100%;padding:.4rem .4rem .4rem 4rem;-ms-flex:1 1 auto;flex:1 1 auto}.off-canvas .off-canvas-overlay{position:fixed;top:0;right:0;bottom:0;left:0;display:none;width:100%;height:100%;border-color:transparent;border-radius:0;background:rgba(69,77,93,.1)}.off-canvas .off-canvas-sidebar.active,.off-canvas .off-canvas-sidebar:target{transform:translateX(0)}.off-canvas .off-canvas-sidebar.active~.off-canvas-overlay,.off-canvas .off-canvas-sidebar:target~.off-canvas-overlay{z-index:100;display:block}@media (min-width:960px){.off-canvas.off-canvas-sidebar-show .off-canvas-toggle{display:none}.off-canvas.off-canvas-sidebar-show .off-canvas-sidebar{position:relative;transform:none;-ms-flex:0 0 auto;flex:0 0 auto}.off-canvas.off-canvas-sidebar-show .off-canvas-overlay{display:none!important}}.parallax{position:relative;display:block;width:auto;height:auto}.parallax .parallax-content{width:100%;height:auto;transition:all .4s ease;transform:perspective(1000px);box-shadow:0 1rem 2.1rem rgba(69,77,93,.3);transform-style:preserve-3d}.parallax .parallax-content::before{position:absolute;top:0;left:0;display:block;width:100%;height:100%;content:''}.parallax .parallax-front{position:absolute;z-index:1;top:0;left:0;display:-ms-flexbox;display:flex;width:100%;height:100%;transition:transform .4s;transform:translateZ(50px) scale(.95);text-align:center;color:#fff;text-shadow:0 0 20px rgba(69,77,93,.75);-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.parallax .parallax-top-left{position:absolute;z-index:100;top:0;left:0;width:50%;height:50%;outline:0}.parallax .parallax-top-left:focus~.parallax-content,.parallax .parallax-top-left:hover~.parallax-content{transform:perspective(1000px) rotateX(3deg) rotateY(-3deg)}.parallax .parallax-top-left:focus~.parallax-content::before,.parallax .parallax-top-left:hover~.parallax-content::before{background:linear-gradient(135deg,rgba(255,255,255,.35) 0,transparent 50%)}.parallax .parallax-top-left:focus~.parallax-content .parallax-front,.parallax .parallax-top-left:hover~.parallax-content .parallax-front{transform:translate3d(4.5px,4.5px,50px) scale(.95)}.parallax .parallax-top-right{position:absolute;z-index:100;top:0;right:0;width:50%;height:50%;outline:0}.parallax .parallax-top-right:focus~.parallax-content,.parallax .parallax-top-right:hover~.parallax-content{transform:perspective(1000px) rotateX(3deg) rotateY(3deg)}.parallax .parallax-top-right:focus~.parallax-content::before,.parallax .parallax-top-right:hover~.parallax-content::before{background:linear-gradient(-135deg,rgba(255,255,255,.35) 0,transparent 50%)}.parallax .parallax-top-right:focus~.parallax-content .parallax-front,.parallax .parallax-top-right:hover~.parallax-content .parallax-front{transform:translate3d(-4.5px,4.5px,50px) scale(.95)}.parallax .parallax-bottom-left{position:absolute;z-index:100;bottom:0;left:0;width:50%;height:50%;outline:0}.parallax .parallax-bottom-left:focus~.parallax-content,.parallax .parallax-bottom-left:hover~.parallax-content{transform:perspective(1000px) rotateX(-3deg) rotateY(-3deg)}.parallax .parallax-bottom-left:focus~.parallax-content::before,.parallax .parallax-bottom-left:hover~.parallax-content::before{background:linear-gradient(45deg,rgba(255,255,255,.35) 0,transparent 50%)}.parallax .parallax-bottom-left:focus~.parallax-content .parallax-front,.parallax .parallax-bottom-left:hover~.parallax-content .parallax-front{transform:translate3d(4.5px,-4.5px,50px) scale(.95)}.parallax .parallax-bottom-right{position:absolute;z-index:100;right:0;bottom:0;width:50%;height:50%;outline:0}.parallax .parallax-bottom-right:focus~.parallax-content,.parallax .parallax-bottom-right:hover~.parallax-content{transform:perspective(1000px) rotateX(-3deg) rotateY(3deg)}.parallax .parallax-bottom-right:focus~.parallax-content::before,.parallax .parallax-bottom-right:hover~.parallax-content::before{background:linear-gradient(-45deg,rgba(255,255,255,.35) 0,transparent 50%)}.parallax .parallax-bottom-right:focus~.parallax-content .parallax-front,.parallax .parallax-bottom-right:hover~.parallax-content .parallax-front{transform:translate3d(-4.5px,-4.5px,50px) scale(.95)}.progress{position:relative;width:100%;height:.2rem;color:#3085ee;border:0;border-radius:.1rem;background:#f0f1f4;-webkit-appearance:none;-moz-appearance:none;appearance:none}.progress::-webkit-progress-bar{border-radius:.1rem;background:0 0}.progress::-webkit-progress-value{border-radius:.1rem;background:#3085ee}.progress::-moz-progress-bar{border-radius:.1rem;background:#3085ee}.progress:indeterminate{animation:progress-indeterminate 1.5s linear infinite;background:#f0f1f4 linear-gradient(to right,#3085ee 30%,#f0f1f4 30%) top left/150% 150% no-repeat}.progress:indeterminate::-moz-progress-bar{background:0 0}@keyframes progress-indeterminate{0%{background-position:200% 0}100%{background-position:-200% 0}}.slider{display:block;width:100%;height:1.2rem;background:0 0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.slider:focus{outline:0;box-shadow:0 0 0 .1rem rgba(48,133,238,.2)}.slider.tooltip:not([data-tooltip])::after{content:attr(value)}.slider::-webkit-slider-thumb{width:.6rem;height:.6rem;margin-top:-.25rem;transition:transform .2s;border:0;border-radius:50%;background:#3085ee;-webkit-appearance:none}.slider::-moz-range-thumb{width:.6rem;height:.6rem;transition:transform .2s;border:0;border-radius:50%;background:#3085ee}.slider::-ms-thumb{width:.6rem;height:.6rem;transition:transform .2s;border:0;border-radius:50%;background:#3085ee}.slider:active::-webkit-slider-thumb{transform:scale(1.25)}.slider:active::-moz-range-thumb{transform:scale(1.25)}.slider:active::-ms-thumb{transform:scale(1.25)}.slider.disabled::-webkit-slider-thumb,.slider:disabled::-webkit-slider-thumb{transform:scale(1);background:#e7e9ed}.slider.disabled::-moz-range-thumb,.slider:disabled::-moz-range-thumb{transform:scale(1);background:#e7e9ed}.slider.disabled::-ms-thumb,.slider:disabled::-ms-thumb{transform:scale(1);background:#e7e9ed}.slider::-webkit-slider-runnable-track{width:100%;height:.1rem;border-radius:.1rem;background:#f0f1f4}.slider::-moz-range-track{width:100%;height:.1rem;border-radius:.1rem;background:#f0f1f4}.slider::-ms-track{width:100%;height:.1rem;border-radius:.1rem;background:#f0f1f4}.slider::-ms-fill-lower{background:#3085ee}.timeline .timeline-item{position:relative;display:-ms-flexbox;display:flex;margin-bottom:1.2rem}.timeline .timeline-item::before{position:absolute;top:1.2rem;left:11px;width:2px;height:100%;content:'';background:#e7e9ed}.timeline .timeline-item .timeline-left{-ms-flex:0 0 auto;flex:0 0 auto}.timeline .timeline-item .timeline-content{padding:2px 0 2px .8rem;-ms-flex:1 1 auto;flex:1 1 auto}.timeline .timeline-item .timeline-icon{display:-ms-flexbox;display:flex;width:1.2rem;height:1.2rem;text-align:center;color:#fff;border-radius:50%;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.timeline .timeline-item .timeline-icon::before{position:absolute;top:.4rem;left:.4rem;display:block;width:.4rem;height:.4rem;content:'';border:.1rem solid #3085ee;border-radius:50%}.timeline .timeline-item .timeline-icon.icon-lg{line-height:1.2rem;background:#3085ee}.timeline .timeline-item .timeline-icon.icon-lg::before{content:none}.viewer-360{display:-ms-flexbox;display:flex;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-direction:column}.viewer-360 .viewer-slider[max='36'][value='1']+.viewer-image{background-position-y:0}.viewer-360 .viewer-slider[max='36'][value='2']+.viewer-image{background-position-y:2.8571428571%}.viewer-360 .viewer-slider[max='36'][value='3']+.viewer-image{background-position-y:5.7142857143%}.viewer-360 .viewer-slider[max='36'][value='4']+.viewer-image{background-position-y:8.5714285714%}.viewer-360 .viewer-slider[max='36'][value='5']+.viewer-image{background-position-y:11.4285714286%}.viewer-360 .viewer-slider[max='36'][value='6']+.viewer-image{background-position-y:14.2857142857%}.viewer-360 .viewer-slider[max='36'][value='7']+.viewer-image{background-position-y:17.1428571429%}.viewer-360 .viewer-slider[max='36'][value='8']+.viewer-image{background-position-y:20%}.viewer-360 .viewer-slider[max='36'][value='9']+.viewer-image{background-position-y:22.8571428571%}.viewer-360 .viewer-slider[max='36'][value='10']+.viewer-image{background-position-y:25.7142857143%}.viewer-360 .viewer-slider[max='36'][value='11']+.viewer-image{background-position-y:28.5714285714%}.viewer-360 .viewer-slider[max='36'][value='12']+.viewer-image{background-position-y:31.4285714286%}.viewer-360 .viewer-slider[max='36'][value='13']+.viewer-image{background-position-y:34.2857142857%}.viewer-360 .viewer-slider[max='36'][value='14']+.viewer-image{background-position-y:37.1428571429%}.viewer-360 .viewer-slider[max='36'][value='15']+.viewer-image{background-position-y:40%}.viewer-360 .viewer-slider[max='36'][value='16']+.viewer-image{background-position-y:42.8571428571%}.viewer-360 .viewer-slider[max='36'][value='17']+.viewer-image{background-position-y:45.7142857143%}.viewer-360 .viewer-slider[max='36'][value='18']+.viewer-image{background-position-y:48.5714285714%}.viewer-360 .viewer-slider[max='36'][value='19']+.viewer-image{background-position-y:51.4285714286%}.viewer-360 .viewer-slider[max='36'][value='20']+.viewer-image{background-position-y:54.2857142857%}.viewer-360 .viewer-slider[max='36'][value='21']+.viewer-image{background-position-y:57.1428571429%}.viewer-360 .viewer-slider[max='36'][value='22']+.viewer-image{background-position-y:60%}.viewer-360 .viewer-slider[max='36'][value='23']+.viewer-image{background-position-y:62.8571428571%}.viewer-360 .viewer-slider[max='36'][value='24']+.viewer-image{background-position-y:65.7142857143%}.viewer-360 .viewer-slider[max='36'][value='25']+.viewer-image{background-position-y:68.5714285714%}.viewer-360 .viewer-slider[max='36'][value='26']+.viewer-image{background-position-y:71.4285714286%}.viewer-360 .viewer-slider[max='36'][value='27']+.viewer-image{background-position-y:74.2857142857%}.viewer-360 .viewer-slider[max='36'][value='28']+.viewer-image{background-position-y:77.1428571429%}.viewer-360 .viewer-slider[max='36'][value='29']+.viewer-image{background-position-y:80%}.viewer-360 .viewer-slider[max='36'][value='30']+.viewer-image{background-position-y:82.8571428571%}.viewer-360 .viewer-slider[max='36'][value='31']+.viewer-image{background-position-y:85.7142857143%}.viewer-360 .viewer-slider[max='36'][value='32']+.viewer-image{background-position-y:88.5714285714%}.viewer-360 .viewer-slider[max='36'][value='33']+.viewer-image{background-position-y:91.4285714286%}.viewer-360 .viewer-slider[max='36'][value='34']+.viewer-image{background-position-y:94.2857142857%}.viewer-360 .viewer-slider[max='36'][value='35']+.viewer-image{background-position-y:97.1428571429%}.viewer-360 .viewer-slider[max='36'][value='36']+.viewer-image{background-position-y:100%}.viewer-360 .viewer-slider{width:60%;margin:1rem;cursor:ew-resize;-ms-flex-order:2;order:2}.viewer-360 .viewer-image{max-width:100%;background-repeat:no-repeat;background-position-y:0;background-size:100%;-ms-flex-order:1;order:1}
\ No newline at end of file
diff --git a/themes/quark/css-compiled/spectre-icons.css b/themes/quark/css-compiled/spectre-icons.css
new file mode 100644
index 0000000..d968a23
--- /dev/null
+++ b/themes/quark/css-compiled/spectre-icons.css
@@ -0,0 +1,172 @@
+/*! Spectre.css Icons v0.5.8 | MIT License | github.com/picturepan2/spectre */
+.icon { box-sizing: border-box; display: inline-block; font-size: inherit; font-style: normal; height: 1em; position: relative; text-indent: -9999px; vertical-align: middle; width: 1em; }
+
+.icon::before, .icon::after { content: ""; display: block; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); }
+
+.icon.icon-2x { font-size: 1.6rem; }
+
+.icon.icon-3x { font-size: 2.4rem; }
+
+.icon.icon-4x { font-size: 3.2rem; }
+
+.accordion .icon, .btn .icon, .toast .icon, .menu .icon { vertical-align: -10%; }
+
+.btn-lg .icon { vertical-align: -15%; }
+
+.icon-arrow-down::before, .icon-arrow-left::before, .icon-arrow-right::before, .icon-arrow-up::before, .icon-downward::before, .icon-back::before, .icon-forward::before, .icon-upward::before { border: 0.1rem solid currentColor; border-bottom: 0; border-right: 0; height: .65em; width: .65em; }
+
+.icon-arrow-down::before { transform: translate(-50%, -75%) rotate(225deg); }
+
+.icon-arrow-left::before { transform: translate(-25%, -50%) rotate(-45deg); }
+
+.icon-arrow-right::before { transform: translate(-75%, -50%) rotate(135deg); }
+
+.icon-arrow-up::before { transform: translate(-50%, -25%) rotate(45deg); }
+
+.icon-back::after, .icon-forward::after { background: currentColor; height: 0.1rem; width: .8em; }
+
+.icon-downward::after, .icon-upward::after { background: currentColor; height: .8em; width: 0.1rem; }
+
+.icon-back::after { left: 55%; }
+
+.icon-back::before { transform: translate(-50%, -50%) rotate(-45deg); }
+
+.icon-downward::after { top: 45%; }
+
+.icon-downward::before { transform: translate(-50%, -50%) rotate(-135deg); }
+
+.icon-forward::after { left: 45%; }
+
+.icon-forward::before { transform: translate(-50%, -50%) rotate(135deg); }
+
+.icon-upward::after { top: 55%; }
+
+.icon-upward::before { transform: translate(-50%, -50%) rotate(45deg); }
+
+.icon-caret::before { border-top: .3em solid currentColor; border-right: .3em solid transparent; border-left: .3em solid transparent; height: 0; transform: translate(-50%, -25%); width: 0; }
+
+.icon-menu::before { background: currentColor; box-shadow: 0 -.35em, 0 .35em; height: 0.1rem; width: 100%; }
+
+.icon-apps::before { background: currentColor; box-shadow: -.35em -.35em, -.35em 0, -.35em .35em, 0 -.35em, 0 .35em, .35em -.35em, .35em 0, .35em .35em; height: 3px; width: 3px; }
+
+.icon-resize-horiz::before, .icon-resize-horiz::after, .icon-resize-vert::before, .icon-resize-vert::after { border: 0.1rem solid currentColor; border-bottom: 0; border-right: 0; height: .45em; width: .45em; }
+
+.icon-resize-horiz::before, .icon-resize-vert::before { transform: translate(-50%, -90%) rotate(45deg); }
+
+.icon-resize-horiz::after, .icon-resize-vert::after { transform: translate(-50%, -10%) rotate(225deg); }
+
+.icon-resize-horiz::before { transform: translate(-90%, -50%) rotate(-45deg); }
+
+.icon-resize-horiz::after { transform: translate(-10%, -50%) rotate(135deg); }
+
+.icon-more-horiz::before, .icon-more-vert::before { background: currentColor; box-shadow: -.4em 0, .4em 0; border-radius: 50%; height: 3px; width: 3px; }
+
+.icon-more-vert::before { box-shadow: 0 -.4em, 0 .4em; }
+
+.icon-plus::before, .icon-minus::before, .icon-cross::before { background: currentColor; height: 0.1rem; width: 100%; }
+
+.icon-plus::after, .icon-cross::after { background: currentColor; height: 100%; width: 0.1rem; }
+
+.icon-cross::before { width: 100%; }
+
+.icon-cross::after { height: 100%; }
+
+.icon-cross::before, .icon-cross::after { transform: translate(-50%, -50%) rotate(45deg); }
+
+.icon-check::before { border: 0.1rem solid currentColor; border-right: 0; border-top: 0; height: .5em; width: .9em; transform: translate(-50%, -75%) rotate(-45deg); }
+
+.icon-stop { border: 0.1rem solid currentColor; border-radius: 50%; }
+
+.icon-stop::before { background: currentColor; height: 0.1rem; transform: translate(-50%, -50%) rotate(45deg); width: 1em; }
+
+.icon-shutdown { border: 0.1rem solid currentColor; border-radius: 50%; border-top-color: transparent; }
+
+.icon-shutdown::before { background: currentColor; content: ""; height: .5em; top: .1em; width: 0.1rem; }
+
+.icon-refresh::before { border: 0.1rem solid currentColor; border-radius: 50%; border-right-color: transparent; height: 1em; width: 1em; }
+
+.icon-refresh::after { border: .2em solid currentColor; border-top-color: transparent; border-left-color: transparent; height: 0; left: 80%; top: 20%; width: 0; }
+
+.icon-search::before { border: 0.1rem solid currentColor; border-radius: 50%; height: .75em; left: 5%; top: 5%; transform: translate(0, 0) rotate(45deg); width: .75em; }
+
+.icon-search::after { background: currentColor; height: 0.1rem; left: 80%; top: 80%; transform: translate(-50%, -50%) rotate(45deg); width: .4em; }
+
+.icon-edit::before { border: 0.1rem solid currentColor; height: .4em; transform: translate(-40%, -60%) rotate(-45deg); width: .85em; }
+
+.icon-edit::after { border: .15em solid currentColor; border-top-color: transparent; border-right-color: transparent; height: 0; left: 5%; top: 95%; transform: translate(0, -100%); width: 0; }
+
+.icon-delete::before { border: 0.1rem solid currentColor; border-bottom-left-radius: 0.1rem; border-bottom-right-radius: 0.1rem; border-top: 0; height: .75em; top: 60%; width: .75em; }
+
+.icon-delete::after { background: currentColor; box-shadow: -.25em .2em, .25em .2em; height: 0.1rem; top: 0.05rem; width: .5em; }
+
+.icon-share { border: 0.1rem solid currentColor; border-radius: 0.1rem; border-right: 0; border-top: 0; }
+
+.icon-share::before { border: 0.1rem solid currentColor; border-left: 0; border-top: 0; height: .4em; left: 100%; top: .25em; transform: translate(-125%, -50%) rotate(-45deg); width: .4em; }
+
+.icon-share::after { border: 0.1rem solid currentColor; border-bottom: 0; border-right: 0; border-radius: 75% 0; height: .5em; width: .6em; }
+
+.icon-flag::before { background: currentColor; height: 1em; left: 15%; width: 0.1rem; }
+
+.icon-flag::after { border: 0.1rem solid currentColor; border-bottom-right-radius: 0.1rem; border-left: 0; border-top-right-radius: 0.1rem; height: .65em; top: 35%; left: 60%; width: .8em; }
+
+.icon-bookmark::before { border: 0.1rem solid currentColor; border-bottom: 0; border-top-left-radius: 0.1rem; border-top-right-radius: 0.1rem; height: .9em; width: .8em; }
+
+.icon-bookmark::after { border: 0.1rem solid currentColor; border-bottom: 0; border-left: 0; border-radius: 0.1rem; height: .5em; transform: translate(-50%, 35%) rotate(-45deg) skew(15deg, 15deg); width: .5em; }
+
+.icon-download, .icon-upload { border-bottom: 0.1rem solid currentColor; }
+
+.icon-download::before, .icon-upload::before { border: 0.1rem solid currentColor; border-bottom: 0; border-right: 0; height: .5em; width: .5em; transform: translate(-50%, -60%) rotate(-135deg); }
+
+.icon-download::after, .icon-upload::after { background: currentColor; height: .6em; top: 40%; width: 0.1rem; }
+
+.icon-upload::before { transform: translate(-50%, -60%) rotate(45deg); }
+
+.icon-upload::after { top: 50%; }
+
+.icon-copy::before { border: 0.1rem solid currentColor; border-radius: 0.1rem; border-right: 0; border-bottom: 0; height: .8em; left: 40%; top: 35%; width: .8em; }
+
+.icon-copy::after { border: 0.1rem solid currentColor; border-radius: 0.1rem; height: .8em; left: 60%; top: 60%; width: .8em; }
+
+.icon-time { border: 0.1rem solid currentColor; border-radius: 50%; }
+
+.icon-time::before { background: currentColor; height: .4em; transform: translate(-50%, -75%); width: 0.1rem; }
+
+.icon-time::after { background: currentColor; height: .3em; transform: translate(-50%, -75%) rotate(90deg); transform-origin: 50% 90%; width: 0.1rem; }
+
+.icon-mail::before { border: 0.1rem solid currentColor; border-radius: 0.1rem; height: .8em; width: 1em; }
+
+.icon-mail::after { border: 0.1rem solid currentColor; border-right: 0; border-top: 0; height: .5em; transform: translate(-50%, -90%) rotate(-45deg) skew(10deg, 10deg); width: .5em; }
+
+.icon-people::before { border: 0.1rem solid currentColor; border-radius: 50%; height: .45em; top: 25%; width: .45em; }
+
+.icon-people::after { border: 0.1rem solid currentColor; border-radius: 50% 50% 0 0; height: .4em; top: 75%; width: .9em; }
+
+.icon-message { border: 0.1rem solid currentColor; border-bottom: 0; border-radius: 0.1rem; border-right: 0; }
+
+.icon-message::before { border: 0.1rem solid currentColor; border-bottom-right-radius: 0.1rem; border-left: 0; border-top: 0; height: .8em; left: 65%; top: 40%; width: .7em; }
+
+.icon-message::after { background: currentColor; border-radius: 0.1rem; height: .3em; left: 10%; top: 100%; transform: translate(0, -90%) rotate(45deg); width: 0.1rem; }
+
+.icon-photo { border: 0.1rem solid currentColor; border-radius: 0.1rem; }
+
+.icon-photo::before { border: 0.1rem solid currentColor; border-radius: 50%; height: .25em; left: 35%; top: 35%; width: .25em; }
+
+.icon-photo::after { border: 0.1rem solid currentColor; border-bottom: 0; border-left: 0; height: .5em; left: 60%; transform: translate(-50%, 25%) rotate(-45deg); width: .5em; }
+
+.icon-link::before, .icon-link::after { border: 0.1rem solid currentColor; border-radius: 5em 0 0 5em; border-right: 0; height: .5em; width: .75em; }
+
+.icon-link::before { transform: translate(-70%, -45%) rotate(-45deg); }
+
+.icon-link::after { transform: translate(-30%, -55%) rotate(135deg); }
+
+.icon-location::before { border: 0.1rem solid currentColor; border-radius: 50% 50% 50% 0; height: .8em; transform: translate(-50%, -60%) rotate(-45deg); width: .8em; }
+
+.icon-location::after { border: 0.1rem solid currentColor; border-radius: 50%; height: .2em; transform: translate(-50%, -80%); width: .2em; }
+
+.icon-emoji { border: 0.1rem solid currentColor; border-radius: 50%; }
+
+.icon-emoji::before { border-radius: 50%; box-shadow: -.17em -.1em, .17em -.1em; height: .15em; width: .15em; }
+
+.icon-emoji::after { border: 0.1rem solid currentColor; border-bottom-color: transparent; border-radius: 50%; border-right-color: transparent; height: .5em; transform: translate(-50%, -40%) rotate(-135deg); width: .5em; }
+
+/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY3RyZS1pY29ucy5jc3MiLCJzb3VyY2VzIjpbInNwZWN0cmUtaWNvbnMuc2NzcyIsInRoZW1lL192YXJpYWJsZXMuc2NzcyIsInNwZWN0cmUvX3ZhcmlhYmxlcy5zY3NzIiwic3BlY3RyZS9fbWl4aW5zLnNjc3MiLCJzcGVjdHJlL21peGlucy9fYXZhdGFyLnNjc3MiLCJzcGVjdHJlL21peGlucy9fYnV0dG9uLnNjc3MiLCJzcGVjdHJlL21peGlucy9fY2xlYXJmaXguc2NzcyIsInNwZWN0cmUvbWl4aW5zL19jb2xvci5zY3NzIiwic3BlY3RyZS9taXhpbnMvX2xhYmVsLnNjc3MiLCJzcGVjdHJlL21peGlucy9fcG9zaXRpb24uc2NzcyIsInNwZWN0cmUvbWl4aW5zL19zaGFkb3cuc2NzcyIsInNwZWN0cmUvbWl4aW5zL190ZXh0LnNjc3MiLCJzcGVjdHJlL21peGlucy9fdG9hc3Quc2NzcyIsInNwZWN0cmUvaWNvbnMvX2ljb25zLWNvcmUuc2NzcyIsInNwZWN0cmUvaWNvbnMvX2ljb25zLW5hdmlnYXRpb24uc2NzcyIsInNwZWN0cmUvaWNvbnMvX2ljb25zLWFjdGlvbi5zY3NzIiwic3BlY3RyZS9pY29ucy9faWNvbnMtb2JqZWN0LnNjc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVmFyaWFibGVzIGFuZCBtaXhpbnNcbkBpbXBvcnQgXCJ0aGVtZS92YXJpYWJsZXNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3ZhcmlhYmxlc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvbWl4aW5zXCI7XG5cbi8qISBTcGVjdHJlLmNzcyBJY29ucyB2I3skdmVyc2lvbn0gfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vcGljdHVyZXBhbjIvc3BlY3RyZSAqL1xuLy8gSWNvbnNcbkBpbXBvcnQgXCJzcGVjdHJlL2ljb25zL2ljb25zLWNvcmVcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL2ljb25zL2ljb25zLW5hdmlnYXRpb25cIjtcbkBpbXBvcnQgXCJzcGVjdHJlL2ljb25zL2ljb25zLWFjdGlvblwiO1xuQGltcG9ydCBcInNwZWN0cmUvaWNvbnMvaWNvbnMtb2JqZWN0XCI7XG4iLCIvLyBTcGVjdHJlIE92ZXJyaWRlc1xuJHByaW1hcnktY29sb3I6ICMzMDg1RUUgIWRlZmF1bHQ7XG4kZGFyay1jb2xvcjogIzQ1NGQ1ZCAhZGVmYXVsdDtcbiRsaWdodC1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcbiRncmF5LWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA0MCUpICFkZWZhdWx0O1xuJGdyYXktY29sb3ItZGFyazogZGFya2VuKCRncmF5LWNvbG9yLCAyNSUpICFkZWZhdWx0O1xuJGJvcmRlci1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNjAlKSAhZGVmYXVsdDtcbiRiZy1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNjYlKSAhZGVmYXVsdDtcbiRib2R5LWZvbnQtY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDUlKSAhZGVmYXVsdDtcblxuLy8gTGF5b3V0XG4kaG9yaXotcGFkZGluZzogMXJlbTtcbiR2ZXJ0LXBhZGRpbmc6IDJyZW0gMCAycmVtO1xuXG4vLyBGb250c1xuJG1pbi1yZXNwb25zaXZlLWZvbnQtc2l6ZTogMTZweDtcblxuLy8gSGVhZGVyXG4kaGVhZGVyLWhlaWdodC1sYXJnZTogNHJlbTtcbiRoZWFkZXItaGVpZ2h0LXNtYWxsOiAyLjNyZW07XG4kaGVhZGVyLWNvbG9yLWRhcms6ICMyMjI7XG4kaGVhZGVyLXRleHQtbGlnaHQ6ICRsaWdodC1jb2xvcjtcbiRoZWFkZXItdGV4dC1kYXJrOiBkYXJrZW4oJGRhcmstY29sb3IsIDE1JSk7XG5cbi8vIERyb3Bkb3duIE1lbnVcbiRkcm9wbWVudS1iZzogJGxpZ2h0LWNvbG9yO1xuJGRyb3BtZW51LWhvdmVyLXRleHQ6ICRwcmltYXJ5LWNvbG9yO1xuJGRyb3BtZW51LWhvcml6LXBhZGRpbmc6IDIwcHg7XG4kZHJvcG1lbnUtdmVydC1wYWRkaW5nOiA3cHg7XG4kZHJvcG1lbnUtY2hpbGQtcGFkZGluZzogMTBweDtcbiRkcm9wbWVudS1zaGFkb3c6IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cbi8vIE1vYmlsZSBNZW51XG4kbW9iaWxlLWNvbG9yLW1haW46ICRwcmltYXJ5LWNvbG9yO1xuJG1vYmlsZS1jb2xvci1hY3RpdmU6ICNGRkY7XG4kbW9iaWxlLWNvbG9yLWxpbms6ICNGRkY7XG4kbW9iaWxlLWJ1dHRvbi1oZWlnaHQ6IDI0cHg7XG4kbW9iaWxlLWJ1dHRvbi13aWR0aDogMjhweDsiLCIvLyBDb3JlIHZhcmlhYmxlc1xuJHZlcnNpb246IFwiMC41LjhcIjtcblxuLy8gQ29yZSBmZWF0dXJlc1xuJHJ0bDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIENvcmUgY29sb3JzXG4kcHJpbWFyeS1jb2xvcjogIzU3NTVkOSAhZGVmYXVsdDtcbiRwcmltYXJ5LWNvbG9yLWRhcms6IGRhcmtlbigkcHJpbWFyeS1jb2xvciwgMyUpICFkZWZhdWx0O1xuJHByaW1hcnktY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJHByaW1hcnktY29sb3IsIDMlKSAhZGVmYXVsdDtcbiRzZWNvbmRhcnktY29sb3I6IGxpZ2h0ZW4oJHByaW1hcnktY29sb3IsIDM3LjUlKSAhZGVmYXVsdDtcbiRzZWNvbmRhcnktY29sb3ItZGFyazogZGFya2VuKCRzZWNvbmRhcnktY29sb3IsIDMlKSAhZGVmYXVsdDtcbiRzZWNvbmRhcnktY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJHNlY29uZGFyeS1jb2xvciwgMyUpICFkZWZhdWx0O1xuXG4vLyBHcmF5IGNvbG9yc1xuJGRhcmstY29sb3I6ICMzMDM3NDIgIWRlZmF1bHQ7XG4kbGlnaHQtY29sb3I6ICNmZmYgIWRlZmF1bHQ7XG4kZ3JheS1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNTUlKSAhZGVmYXVsdDtcbiRncmF5LWNvbG9yLWRhcms6IGRhcmtlbigkZ3JheS1jb2xvciwgMzAlKSAhZGVmYXVsdDtcbiRncmF5LWNvbG9yLWxpZ2h0OiBsaWdodGVuKCRncmF5LWNvbG9yLCAyMCUpICFkZWZhdWx0O1xuXG4kYm9yZGVyLWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA2NSUpICFkZWZhdWx0O1xuJGJvcmRlci1jb2xvci1kYXJrOiBkYXJrZW4oJGJvcmRlci1jb2xvciwgMTAlKSAhZGVmYXVsdDtcbiRib3JkZXItY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJGJvcmRlci1jb2xvciwgOCUpICFkZWZhdWx0O1xuJGJnLWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA3NSUpICFkZWZhdWx0O1xuJGJnLWNvbG9yLWRhcms6IGRhcmtlbigkYmctY29sb3IsIDMlKSAhZGVmYXVsdDtcbiRiZy1jb2xvci1saWdodDogJGxpZ2h0LWNvbG9yICFkZWZhdWx0O1xuXG4vLyBDb250cm9sIGNvbG9yc1xuJHN1Y2Nlc3MtY29sb3I6ICMzMmI2NDMgIWRlZmF1bHQ7XG4kd2FybmluZy1jb2xvcjogI2ZmYjcwMCAhZGVmYXVsdDtcbiRlcnJvci1jb2xvcjogI2U4NTYwMCAhZGVmYXVsdDtcblxuLy8gT3RoZXIgY29sb3JzXG4kY29kZS1jb2xvcjogI2Q3M2U0OCAhZGVmYXVsdDtcbiRoaWdobGlnaHQtY29sb3I6ICNmZmU5YjMgIWRlZmF1bHQ7XG4kYm9keS1iZzogJGJnLWNvbG9yLWxpZ2h0ICFkZWZhdWx0O1xuJGJvZHktZm9udC1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNSUpICFkZWZhdWx0O1xuJGxpbmstY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuJGxpbmstY29sb3ItZGFyazogZGFya2VuKCRsaW5rLWNvbG9yLCAxMCUpICFkZWZhdWx0O1xuJGxpbmstY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJGxpbmstY29sb3IsIDEwJSkgIWRlZmF1bHQ7XG5cbi8vIEZvbnRzXG4vLyBDcmVkaXQ6IGh0dHBzOi8vd3d3LnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMTUvMTEvdXNpbmctc3lzdGVtLXVpLWZvbnRzLXByYWN0aWNhbC1ndWlkZS9cbiRiYXNlLWZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8gIWRlZmF1bHQ7XG4kbW9uby1mb250LWZhbWlseTogXCJTRiBNb25vXCIsIFwiU2Vnb2UgVUkgTW9ub1wiLCBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2UgIWRlZmF1bHQ7XG4kZmFsbGJhY2stZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgc2Fucy1zZXJpZiAhZGVmYXVsdDtcbiRjamstemgtaGFucy1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksIFwiUGluZ0ZhbmcgU0NcIiwgXCJIaXJhZ2lubyBTYW5zIEdCXCIsIFwiTWljcm9zb2Z0IFlhSGVpXCIsICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRjamstemgtaGFudC1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksIFwiUGluZ0ZhbmcgVENcIiwgXCJIaXJhZ2lubyBTYW5zIENOU1wiLCBcIk1pY3Jvc29mdCBKaGVuZ0hlaVwiLCAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG4kY2prLWpwLWZvbnQtZmFtaWx5OiAkYmFzZS1mb250LWZhbWlseSwgXCJIaXJhZ2lubyBTYW5zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwiWXUgR290aGljXCIsIFl1R290aGljLCBNZWlyeW8sICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRjamsta28tZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5LCBcIk1hbGd1biBHb3RoaWNcIiwgJGZhbGxiYWNrLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuJGJvZHktZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5LCAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG5cbi8vIFVuaXQgc2l6ZXNcbiR1bml0LW86IC4wNXJlbSAhZGVmYXVsdDtcbiR1bml0LWg6IC4xcmVtICFkZWZhdWx0O1xuJHVuaXQtMTogLjJyZW0gIWRlZmF1bHQ7XG4kdW5pdC0yOiAuNHJlbSAhZGVmYXVsdDtcbiR1bml0LTM6IC42cmVtICFkZWZhdWx0O1xuJHVuaXQtNDogLjhyZW0gIWRlZmF1bHQ7XG4kdW5pdC01OiAxcmVtICFkZWZhdWx0O1xuJHVuaXQtNjogMS4ycmVtICFkZWZhdWx0O1xuJHVuaXQtNzogMS40cmVtICFkZWZhdWx0O1xuJHVuaXQtODogMS42cmVtICFkZWZhdWx0O1xuJHVuaXQtOTogMS44cmVtICFkZWZhdWx0O1xuJHVuaXQtMTA6IDJyZW0gIWRlZmF1bHQ7XG4kdW5pdC0xMjogMi40cmVtICFkZWZhdWx0O1xuJHVuaXQtMTY6IDMuMnJlbSAhZGVmYXVsdDtcblxuLy8gRm9udCBzaXplc1xuJGh0bWwtZm9udC1zaXplOiAyMHB4ICFkZWZhdWx0O1xuJGh0bWwtbGluZS1oZWlnaHQ6IDEuNSAhZGVmYXVsdDtcbiRmb250LXNpemU6IC44cmVtICFkZWZhdWx0O1xuJGZvbnQtc2l6ZS1zbTogLjdyZW0gIWRlZmF1bHQ7XG4kZm9udC1zaXplLWxnOiAuOXJlbSAhZGVmYXVsdDtcbiRsaW5lLWhlaWdodDogMS4ycmVtICFkZWZhdWx0O1xuXG4vLyBTaXplc1xuJGxheW91dC1zcGFjaW5nOiAkdW5pdC0yICFkZWZhdWx0O1xuJGxheW91dC1zcGFjaW5nLXNtOiAkdW5pdC0xICFkZWZhdWx0O1xuJGxheW91dC1zcGFjaW5nLWxnOiAkdW5pdC00ICFkZWZhdWx0O1xuJGJvcmRlci1yYWRpdXM6ICR1bml0LWggIWRlZmF1bHQ7XG4kYm9yZGVyLXdpZHRoOiAkdW5pdC1vICFkZWZhdWx0O1xuJGJvcmRlci13aWR0aC1sZzogJHVuaXQtaCAhZGVmYXVsdDtcbiRjb250cm9sLXNpemU6ICR1bml0LTkgIWRlZmF1bHQ7XG4kY29udHJvbC1zaXplLXNtOiAkdW5pdC03ICFkZWZhdWx0O1xuJGNvbnRyb2wtc2l6ZS1sZzogJHVuaXQtMTAgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXg6ICR1bml0LTIgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXgtc206ICR1bml0LTIgKiAuNzUgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXgtbGc6ICR1bml0LTIgKiAxLjUgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXk6ICgkY29udHJvbC1zaXplIC0gJGxpbmUtaGVpZ2h0KSAvIDIgLSAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuJGNvbnRyb2wtcGFkZGluZy15LXNtOiAoJGNvbnRyb2wtc2l6ZS1zbSAtICRsaW5lLWhlaWdodCkgLyAyIC0gJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteS1sZzogKCRjb250cm9sLXNpemUtbGcgLSAkbGluZS1oZWlnaHQpIC8gMiAtICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XG4kY29udHJvbC1pY29uLXNpemU6IC44cmVtICFkZWZhdWx0O1xuXG4kY29udHJvbC13aWR0aC14czogMTgwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC1zbTogMzIwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC1tZDogNjQwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC1sZzogOTYwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC14bDogMTI4MHB4ICFkZWZhdWx0O1xuXG4vLyBSZXNwb25zaXZlIGJyZWFrcG9pbnRzXG4kc2l6ZS14czogNDgwcHggIWRlZmF1bHQ7XG4kc2l6ZS1zbTogNjAwcHggIWRlZmF1bHQ7XG4kc2l6ZS1tZDogODQwcHggIWRlZmF1bHQ7XG4kc2l6ZS1sZzogOTYwcHggIWRlZmF1bHQ7XG4kc2l6ZS14bDogMTI4MHB4ICFkZWZhdWx0O1xuJHNpemUtMng6IDE0NDBweCAhZGVmYXVsdDtcblxuJHJlc3BvbnNpdmUtYnJlYWtwb2ludDogJHNpemUteHMgIWRlZmF1bHQ7XG5cbi8vIFotaW5kZXhcbiR6aW5kZXgtMDogMSAhZGVmYXVsdDtcbiR6aW5kZXgtMTogMTAwICFkZWZhdWx0O1xuJHppbmRleC0yOiAyMDAgIWRlZmF1bHQ7XG4kemluZGV4LTM6IDMwMCAhZGVmYXVsdDtcbiR6aW5kZXgtNDogNDAwICFkZWZhdWx0O1xuIiwiLy8gTWl4aW5zXG5AaW1wb3J0IFwibWl4aW5zL2F2YXRhclwiO1xuQGltcG9ydCBcIm1peGlucy9idXR0b25cIjtcbkBpbXBvcnQgXCJtaXhpbnMvY2xlYXJmaXhcIjtcbkBpbXBvcnQgXCJtaXhpbnMvY29sb3JcIjtcbkBpbXBvcnQgXCJtaXhpbnMvbGFiZWxcIjtcbkBpbXBvcnQgXCJtaXhpbnMvcG9zaXRpb25cIjtcbkBpbXBvcnQgXCJtaXhpbnMvc2hhZG93XCI7XG5AaW1wb3J0IFwibWl4aW5zL3RleHRcIjtcbkBpbXBvcnQgXCJtaXhpbnMvdG9hc3RcIjsiLCIvLyBBdmF0YXIgbWl4aW5cbkBtaXhpbiBhdmF0YXItYmFzZSgkc2l6ZTogJHVuaXQtOCkge1xuICBmb250LXNpemU6ICRzaXplIC8gMjtcbiAgaGVpZ2h0OiAkc2l6ZTtcbiAgd2lkdGg6ICRzaXplO1xufVxuIiwiLy8gQnV0dG9uIHZhcmlhbnQgbWl4aW5cbkBtaXhpbiBidXR0b24tdmFyaWFudCgkY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gIGJhY2tncm91bmQ6ICRjb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAzJSk7XG4gIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICY6Zm9jdXMge1xuICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCRjb2xvcik7XG4gIH1cbiAgJjpmb2N1cyxcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogZGFya2VuKCRjb2xvciwgMiUpO1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRjb2xvciwgNSUpO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gIH1cbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJGNvbG9yLCA3JSk7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAxMCUpO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gIH1cbiAgJi5sb2FkaW5nIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICBib3JkZXItbGVmdC1jb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gYnV0dG9uLW91dGxpbmUtdmFyaWFudCgkY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gIGJhY2tncm91bmQ6ICRsaWdodC1jb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiAkY29sb3I7XG4gIGNvbG9yOiAkY29sb3I7XG4gICY6Zm9jdXMge1xuICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCRjb2xvcik7XG4gIH1cbiAgJjpmb2N1cyxcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogbGlnaHRlbigkY29sb3IsIDUwJSk7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAyJSk7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgfVxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUge1xuICAgIGJhY2tncm91bmQ6ICRjb2xvcjtcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkY29sb3IsIDUlKTtcbiAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICB9XG4gICYubG9hZGluZyB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGNvbG9yO1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICRjb2xvcjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENsZWFyZml4IG1peGluXG5AbWl4aW4gY2xlYXJmaXgoKSB7XG4gICY6OmFmdGVyIHtcbiAgICBjbGVhcjogYm90aDtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICB9XG59XG4iLCIvLyBCYWNrZ3JvdW5kIGNvbG9yIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiBiZy1jb2xvci12YXJpYW50KCRuYW1lOiBcIi5iZy1wcmltYXJ5XCIsICRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgI3skbmFtZX0ge1xuICAgIGJhY2tncm91bmQ6ICRjb2xvciAhaW1wb3J0YW50O1xuXG4gICAgQGlmIChsaWdodG5lc3MoJGNvbG9yKSA8IDYwKSB7XG4gICAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUZXh0IGNvbG9yIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiB0ZXh0LWNvbG9yLXZhcmlhbnQoJG5hbWU6IFwiLnRleHQtcHJpbWFyeVwiLCAkY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gICN7JG5hbWV9IHtcbiAgICBjb2xvcjogJGNvbG9yICFpbXBvcnRhbnQ7XG4gIH1cblxuICBhI3skbmFtZX0ge1xuICAgICY6Zm9jdXMsXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogZGFya2VuKCRjb2xvciwgNSUpO1xuICAgIH1cbiAgICAmOnZpc2l0ZWQge1xuICAgICAgY29sb3I6IGxpZ2h0ZW4oJGNvbG9yLCA1JSk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBMYWJlbCBiYXNlIHN0eWxlXG5AbWl4aW4gbGFiZWwtYmFzZSgpIHtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGxpbmUtaGVpZ2h0OiAxLjI1O1xuICBwYWRkaW5nOiAuMXJlbSAuMnJlbTtcbn1cblxuQG1peGluIGxhYmVsLXZhcmlhbnQoJGNvbG9yOiAkbGlnaHQtY29sb3IsICRiZy1jb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICBjb2xvcjogJGNvbG9yO1xufVxuIiwiLy8gTWFyZ2luIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiBtYXJnaW4tdmFyaWFudCgkaWQ6IDEsICRzaXplOiAkdW5pdC0xKSB7XG4gIC5tLSN7JGlkfSB7XG4gICAgbWFyZ2luOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1iLSN7JGlkfSB7XG4gICAgbWFyZ2luLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5tbC0jeyRpZH0ge1xuICAgIG1hcmdpbi1sZWZ0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1yLSN7JGlkfSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm10LSN7JGlkfSB7XG4gICAgbWFyZ2luLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5teC0jeyRpZH0ge1xuICAgIG1hcmdpbi1sZWZ0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi1yaWdodDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5teS0jeyRpZH0ge1xuICAgIG1hcmdpbi1ib3R0b206ICRzaXplICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4vLyBQYWRkaW5nIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiBwYWRkaW5nLXZhcmlhbnQoJGlkOiAxLCAkc2l6ZTogJHVuaXQtMSkge1xuICAucC0jeyRpZH0ge1xuICAgIHBhZGRpbmc6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAucGItI3skaWR9IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5wbC0jeyRpZH0ge1xuICAgIHBhZGRpbmctbGVmdDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5wci0jeyRpZH0ge1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAucHQtI3skaWR9IHtcbiAgICBwYWRkaW5nLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5weC0jeyRpZH0ge1xuICAgIHBhZGRpbmctbGVmdDogJHNpemUgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG4gIFxuICAucHktI3skaWR9IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxufVxuIiwiLy8gQ29tcG9uZW50IGZvY3VzIHNoYWRvd1xuQG1peGluIGNvbnRyb2wtc2hhZG93KCRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgYm94LXNoYWRvdzogMCAwIDAgLjFyZW0gcmdiYSgkY29sb3IsIC4yKTtcbn1cblxuLy8gU2hhZG93IG1peGluXG5AbWl4aW4gc2hhZG93LXZhcmlhbnQoJG9mZnNldCkge1xuICBib3gtc2hhZG93OiAwICRvZmZzZXQgKCRvZmZzZXQgKyAuMDVyZW0pICogMiByZ2JhKCRkYXJrLWNvbG9yLCAuMyk7XG59XG4iLCIvLyBUZXh0IEVsbGlwc2lzXG5AbWl4aW4gdGV4dC1lbGxpcHNpcygpIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4iLCIvLyBUb2FzdCB2YXJpYW50IG1peGluXG5AbWl4aW4gdG9hc3QtdmFyaWFudCgkY29sb3I6ICRkYXJrLWNvbG9yKSB7XG4gIGJhY2tncm91bmQ6IHJnYmEoJGNvbG9yLCAuOTUpO1xuICBib3JkZXItY29sb3I6ICRjb2xvcjtcbn1cbiIsIi8vIEljb24gdmFyaWFibGVzXG4kaWNvbi1ib3JkZXItd2lkdGg6ICRib3JkZXItd2lkdGgtbGc7XG4kaWNvbi1wcmVmaXg6IFwiaWNvblwiO1xuXG4vLyBJY29uIGJhc2Ugc3R5bGVcbi4jeyRpY29uLXByZWZpeH0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBoZWlnaHQ6IDFlbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWluZGVudDogLTk5OTlweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDFlbTtcbiAgJjo6YmVmb3JlLFxuICAmOjphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBsZWZ0OiA1MCU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB9XG5cbiAgLy8gSWNvbiBzaXplc1xuICAmLmljb24tMngge1xuICAgIGZvbnQtc2l6ZTogMS42cmVtO1xuICB9XG5cbiAgJi5pY29uLTN4IHtcbiAgICBmb250LXNpemU6IDIuNHJlbTtcbiAgfVxuXG4gICYuaWNvbi00eCB7XG4gICAgZm9udC1zaXplOiAzLjJyZW07XG4gIH1cbn1cblxuLy8gQ29tcG9uZW50IGljb24gc3VwcG9ydFxuLmFjY29yZGlvbixcbi5idG4sXG4udG9hc3QsXG4ubWVudSB7XG4gIC4jeyRpY29uLXByZWZpeH0ge1xuICAgIHZlcnRpY2FsLWFsaWduOiAtMTAlO1xuICB9XG59XG5cbi5idG4tbGcge1xuICAuI3skaWNvbi1wcmVmaXh9IHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogLTE1JTtcbiAgfVxufVxuIiwiLy8gSWNvbiBhcnJvd3Ncbi5pY29uLWFycm93LWRvd24sXG4uaWNvbi1hcnJvdy1sZWZ0LFxuLmljb24tYXJyb3ctcmlnaHQsXG4uaWNvbi1hcnJvdy11cCxcbi5pY29uLWRvd253YXJkLFxuLmljb24tYmFjayxcbi5pY29uLWZvcndhcmQsXG4uaWNvbi11cHdhcmQge1xuICAmOjpiZWZvcmUge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBoZWlnaHQ6IC42NWVtO1xuICAgIHdpZHRoOiAuNjVlbTtcbiAgfVxufVxuXG4uaWNvbi1hcnJvdy1kb3duIHtcbiAgJjo6YmVmb3JlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNzUlKSByb3RhdGUoMjI1ZGVnKTtcbiAgfVxufVxuXG4uaWNvbi1hcnJvdy1sZWZ0IHtcbiAgJjo6YmVmb3JlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMjUlLCAtNTAlKSByb3RhdGUoLTQ1ZGVnKTtcbiAgfVxufVxuXG4uaWNvbi1hcnJvdy1yaWdodCB7XG4gICY6OmJlZm9yZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTc1JSwgLTUwJSkgcm90YXRlKDEzNWRlZyk7XG4gIH1cbn1cblxuLmljb24tYXJyb3ctdXAge1xuICAmOjpiZWZvcmUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC0yNSUpIHJvdGF0ZSg0NWRlZyk7XG4gIH1cbn1cblxuLmljb24tYmFjayxcbi5pY29uLWZvcndhcmQge1xuICAmOjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xuICAgIGhlaWdodDogJGljb24tYm9yZGVyLXdpZHRoO1xuICAgIHdpZHRoOiAuOGVtO1xuICB9XG59XG5cbi5pY29uLWRvd253YXJkLFxuLmljb24tdXB3YXJkIHtcbiAgJjo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICBoZWlnaHQ6IC44ZW07XG4gICAgd2lkdGg6ICRpY29uLWJvcmRlci13aWR0aDtcbiAgfVxufVxuXG4uaWNvbi1iYWNrIHtcbiAgJjo6YWZ0ZXIge1xuICAgIGxlZnQ6IDU1JTtcbiAgfVxuICAmOjpiZWZvcmUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSgtNDVkZWcpO1xuICB9XG59XG5cbi5pY29uLWRvd253YXJkIHtcbiAgJjo6YWZ0ZXIge1xuICAgIHRvcDogNDUlO1xuICB9XG4gICY6OmJlZm9yZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKC0xMzVkZWcpO1xuICB9XG59XG5cbi5pY29uLWZvcndhcmQge1xuICAmOjphZnRlciB7XG4gICAgbGVmdDogNDUlO1xuICB9XG4gICY6OmJlZm9yZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKDEzNWRlZyk7XG4gIH1cbn1cblxuLmljb24tdXB3YXJkIHtcbiAgJjo6YWZ0ZXIge1xuICAgIHRvcDogNTUlO1xuICB9XG4gICY6OmJlZm9yZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKDQ1ZGVnKTtcbiAgfVxufVxuXG4vLyBJY29uIGNhcmV0XG4uaWNvbi1jYXJldCB7XG4gICY6OmJlZm9yZSB7XG4gICAgYm9yZGVyLXRvcDogLjNlbSBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLXJpZ2h0OiAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1sZWZ0OiAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGhlaWdodDogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMjUlKTtcbiAgICB3aWR0aDogMDtcbiAgfVxufVxuXG4vLyBJY29uIG1lbnVcbi5pY29uLW1lbnUge1xuICAmOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICBib3gtc2hhZG93OiAwIC0uMzVlbSwgMCAuMzVlbTtcbiAgICBoZWlnaHQ6ICRpY29uLWJvcmRlci13aWR0aDtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuXG4vLyBJY29uIGFwcHNcbi5pY29uLWFwcHMge1xuICAmOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICBib3gtc2hhZG93OiAtLjM1ZW0gLS4zNWVtLCAtLjM1ZW0gMCwgLS4zNWVtIC4zNWVtLCAwIC0uMzVlbSwgMCAuMzVlbSwgLjM1ZW0gLS4zNWVtLCAuMzVlbSAwLCAuMzVlbSAuMzVlbTtcbiAgICBoZWlnaHQ6IDNweDtcbiAgICB3aWR0aDogM3B4O1xuICB9XG59XG4iLCIvLyBJY29uIHJlc2l6ZVxuLmljb24tcmVzaXplLWhvcml6LFxuLmljb24tcmVzaXplLXZlcnQge1xuICAmOjpiZWZvcmUsXG4gICY6OmFmdGVyIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgaGVpZ2h0OiAuNDVlbTtcbiAgICB3aWR0aDogLjQ1ZW07XG4gIH1cbiAgJjo6YmVmb3JlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtOTAlKSByb3RhdGUoNDVkZWcpO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTAlKSByb3RhdGUoMjI1ZGVnKTtcbiAgfVxufVxuXG4uaWNvbi1yZXNpemUtaG9yaXoge1xuICAmOjpiZWZvcmUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC05MCUsIC01MCUpIHJvdGF0ZSgtNDVkZWcpO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTAlLCAtNTAlKSByb3RhdGUoMTM1ZGVnKTtcbiAgfVxufVxuXG4vLyBJY29uIG1vcmVcbi5pY29uLW1vcmUtaG9yaXosXG4uaWNvbi1tb3JlLXZlcnQge1xuICAmOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICBib3gtc2hhZG93OiAtLjRlbSAwLCAuNGVtIDA7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGhlaWdodDogM3B4O1xuICAgIHdpZHRoOiAzcHg7XG4gIH1cbn1cblxuLmljb24tbW9yZS12ZXJ0IHtcbiAgJjo6YmVmb3JlIHtcbiAgICBib3gtc2hhZG93OiAwIC0uNGVtLCAwIC40ZW07XG4gIH1cbn1cblxuLy8gSWNvbiBwbHVzLCBtaW51cywgY3Jvc3Ncbi5pY29uLXBsdXMsXG4uaWNvbi1taW51cyxcbi5pY29uLWNyb3NzIHtcbiAgJjo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgaGVpZ2h0OiAkaWNvbi1ib3JkZXItd2lkdGg7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmljb24tcGx1cyxcbi5pY29uLWNyb3NzIHtcbiAgJjo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6ICRpY29uLWJvcmRlci13aWR0aDtcbiAgfVxufVxuXG4uaWNvbi1jcm9zcyB7XG4gICY6OmJlZm9yZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuICAmOjpiZWZvcmUsXG4gICY6OmFmdGVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoNDVkZWcpO1xuICB9XG59XG5cbi8vIEljb24gY2hlY2tcbi5pY29uLWNoZWNrIHtcbiAgJjo6YmVmb3JlIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgaGVpZ2h0OiAuNWVtO1xuICAgIHdpZHRoOiAuOWVtO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC03NSUpIHJvdGF0ZSgtNDVkZWcpO1xuICB9XG59XG5cbi8vIEljb24gc3RvcFxuLmljb24tc3RvcCB7XG4gIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAmOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICBoZWlnaHQ6ICRpY29uLWJvcmRlci13aWR0aDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoNDVkZWcpO1xuICAgIHdpZHRoOiAxZW07XG4gIH1cbn1cblxuLy8gSWNvbiBzaHV0ZG93blxuLmljb24tc2h1dGRvd24ge1xuICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICY6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgaGVpZ2h0OiAuNWVtO1xuICAgIHRvcDogLjFlbTtcbiAgICB3aWR0aDogJGljb24tYm9yZGVyLXdpZHRoO1xuICB9XG59XG5cbi8vIEljb24gcmVmcmVzaFxuLmljb24tcmVmcmVzaCB7XG4gICY6OmJlZm9yZSB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGhlaWdodDogMWVtO1xuICAgIHdpZHRoOiAxZW07XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIGJvcmRlcjogLjJlbSBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGhlaWdodDogMDtcbiAgICBsZWZ0OiA4MCU7XG4gICAgdG9wOiAyMCU7XG4gICAgd2lkdGg6IDA7XG4gIH1cbn1cblxuLy8gSWNvbiBzZWFyY2hcbi5pY29uLXNlYXJjaCB7XG4gICY6OmJlZm9yZSB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBoZWlnaHQ6IC43NWVtO1xuICAgIGxlZnQ6IDUlO1xuICAgIHRvcDogNSU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCkgcm90YXRlKDQ1ZGVnKTtcbiAgICB3aWR0aDogLjc1ZW07XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICBoZWlnaHQ6ICRpY29uLWJvcmRlci13aWR0aDtcbiAgICBsZWZ0OiA4MCU7XG4gICAgdG9wOiA4MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKDQ1ZGVnKTtcbiAgICB3aWR0aDogLjRlbTtcbiAgfVxufVxuXG4vLyBJY29uIGVkaXRcbi5pY29uLWVkaXQge1xuICAmOjpiZWZvcmUge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBoZWlnaHQ6IC40ZW07XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTQwJSwgLTYwJSkgcm90YXRlKC00NWRlZyk7XG4gICAgd2lkdGg6IC44NWVtO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICBib3JkZXI6IC4xNWVtIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItdG9wLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGhlaWdodDogMDtcbiAgICBsZWZ0OiA1JTtcbiAgICB0b3A6IDk1JTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMTAwJSk7XG4gICAgd2lkdGg6IDA7XG4gIH1cbn1cblxuLy8gSWNvbiBkZWxldGVcbi5pY29uLWRlbGV0ZSB7XG4gICY6OmJlZm9yZSB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGhlaWdodDogLjc1ZW07XG4gICAgdG9wOiA2MCU7XG4gICAgd2lkdGg6IC43NWVtO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgYm94LXNoYWRvdzogLS4yNWVtIC4yZW0sIC4yNWVtIC4yZW07XG4gICAgaGVpZ2h0OiAkaWNvbi1ib3JkZXItd2lkdGg7XG4gICAgdG9wOiAkaWNvbi1ib3JkZXItd2lkdGgvMjtcbiAgICB3aWR0aDogLjVlbTtcbiAgfVxufVxuXG4vLyBJY29uIHNoYXJlXG4uaWNvbi1zaGFyZSB7XG4gIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGJvcmRlci1yaWdodDogMDtcbiAgYm9yZGVyLXRvcDogMDtcbiAgJjo6YmVmb3JlIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgICBoZWlnaHQ6IC40ZW07XG4gICAgbGVmdDogMTAwJTtcbiAgICB0b3A6IC4yNWVtO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMjUlLCAtNTAlKSByb3RhdGUoLTQ1ZGVnKTtcbiAgICB3aWR0aDogLjRlbTtcbiAgfVxuICAmOjphZnRlciB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDc1JSAwO1xuICAgIGhlaWdodDogLjVlbTtcbiAgICB3aWR0aDogLjZlbTtcbiAgfVxufVxuXG4vLyBJY29uIGZsYWdcbi5pY29uLWZsYWcge1xuICAmOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgICBsZWZ0OiAxNSU7XG4gICAgd2lkdGg6ICRpY29uLWJvcmRlci13aWR0aDtcbiAgfVxuICAmOjphZnRlciB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItbGVmdDogMDtcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgaGVpZ2h0OiAuNjVlbTtcbiAgICB0b3A6IDM1JTtcbiAgICBsZWZ0OiA2MCU7XG4gICAgd2lkdGg6IC44ZW07XG4gIH1cbn1cblxuLy8gSWNvbiBib29rbWFya1xuLmljb24tYm9va21hcmsge1xuICAmOjpiZWZvcmUge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBoZWlnaHQ6IC45ZW07XG4gICAgd2lkdGg6IC44ZW07XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGhlaWdodDogLjVlbTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAzNSUpIHJvdGF0ZSgtNDVkZWcpIHNrZXcoMTVkZWcsIDE1ZGVnKTtcbiAgICB3aWR0aDogLjVlbTtcbiAgfVxufVxuXG4vLyBJY29uIGRvd25sb2FkICYgdXBsb2FkXG4uaWNvbi1kb3dubG9hZCxcbi5pY29uLXVwbG9hZCB7XG4gIGJvcmRlci1ib3R0b206ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICY6OmJlZm9yZSB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIGhlaWdodDogLjVlbTtcbiAgICB3aWR0aDogLjVlbTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNjAlKSByb3RhdGUoLTEzNWRlZyk7XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICBoZWlnaHQ6IC42ZW07XG4gICAgdG9wOiA0MCU7XG4gICAgd2lkdGg6ICRpY29uLWJvcmRlci13aWR0aDtcbiAgfVxufVxuXG4uaWNvbi11cGxvYWQge1xuICAmOjpiZWZvcmUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC02MCUpIHJvdGF0ZSg0NWRlZyk7XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIHRvcDogNTAlO1xuICB9XG59XG5cbi8vIEljb24gY29weVxuLmljb24tY29weSB7XG4gICY6OmJlZm9yZSB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIGhlaWdodDogLjhlbTtcbiAgICBsZWZ0OiA0MCU7XG4gICAgdG9wOiAzNSU7XG4gICAgd2lkdGg6IC44ZW07XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBoZWlnaHQ6IC44ZW07XG4gICAgbGVmdDogNjAlO1xuICAgIHRvcDogNjAlO1xuICAgIHdpZHRoOiAuOGVtO1xuICB9XG59IiwiLy8gSWNvbiB0aW1lXG4uaWNvbi10aW1lIHtcbiAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICY6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xuICAgIGhlaWdodDogLjRlbTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNzUlKTtcbiAgICB3aWR0aDogJGljb24tYm9yZGVyLXdpZHRoO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgaGVpZ2h0OiAuM2VtO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC03NSUpIHJvdGF0ZSg5MGRlZyk7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDkwJTtcbiAgICB3aWR0aDogJGljb24tYm9yZGVyLXdpZHRoO1xuICB9XG59XG5cbi8vIEljb24gbWFpbFxuLmljb24tbWFpbCB7XG4gICY6OmJlZm9yZSB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGhlaWdodDogLjhlbTtcbiAgICB3aWR0aDogMWVtO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgaGVpZ2h0OiAuNWVtO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC05MCUpIHJvdGF0ZSgtNDVkZWcpIHNrZXcoMTBkZWcsIDEwZGVnKTtcbiAgICB3aWR0aDogLjVlbTtcbiAgfVxufVxuXG4vLyBJY29uIHBlb3BsZVxuLmljb24tcGVvcGxlIHtcbiAgJjo6YmVmb3JlIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGhlaWdodDogLjQ1ZW07XG4gICAgdG9wOiAyNSU7XG4gICAgd2lkdGg6IC40NWVtO1xuICB9XG4gICY6OmFmdGVyIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSAwIDA7XG4gICAgaGVpZ2h0OiAuNGVtO1xuICAgIHRvcDogNzUlO1xuICAgIHdpZHRoOiAuOWVtO1xuICB9XG59XG5cbi8vIEljb24gbWVzc2FnZVxuLmljb24tbWVzc2FnZSB7XG4gIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGJvcmRlci1yaWdodDogMDtcbiAgJjo6YmVmb3JlIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgaGVpZ2h0OiAuOGVtO1xuICAgIGxlZnQ6IDY1JTtcbiAgICB0b3A6IDQwJTtcbiAgICB3aWR0aDogLjdlbTtcbiAgfVxuICAmOjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGhlaWdodDogLjNlbTtcbiAgICBsZWZ0OiAxMCU7XG4gICAgdG9wOiAxMDAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC05MCUpIHJvdGF0ZSg0NWRlZyk7XG4gICAgd2lkdGg6ICRpY29uLWJvcmRlci13aWR0aDtcbiAgfVxufVxuXG4vLyBJY29uIHBob3RvXG4uaWNvbi1waG90byB7XG4gIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICY6OmJlZm9yZSB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBoZWlnaHQ6IC4yNWVtO1xuICAgIGxlZnQ6IDM1JTtcbiAgICB0b3A6IDM1JTtcbiAgICB3aWR0aDogLjI1ZW07XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgIGhlaWdodDogLjVlbTtcbiAgICBsZWZ0OiA2MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMjUlKSByb3RhdGUoLTQ1ZGVnKTtcbiAgICB3aWR0aDogLjVlbTtcbiAgfVxufVxuXG4vLyBJY29uIGxpbmtcbi5pY29uLWxpbmsge1xuICAmOjpiZWZvcmUsXG4gICY6OmFmdGVyIHtcbiAgICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogNWVtIDAgMCA1ZW07XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIGhlaWdodDogLjVlbTtcbiAgICB3aWR0aDogLjc1ZW07XG4gIH1cbiAgJjo6YmVmb3JlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNzAlLCAtNDUlKSByb3RhdGUoLTQ1ZGVnKTtcbiAgfVxuICAmOjphZnRlciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTMwJSwgLTU1JSkgcm90YXRlKDEzNWRlZyk7XG4gIH1cbn1cblxuLy8gSWNvbiBsb2NhdGlvblxuLmljb24tbG9jYXRpb24ge1xuICAmOjpiZWZvcmUge1xuICAgIGJvcmRlcjogJGljb24tYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCUgNTAlIDUwJSAwO1xuICAgIGhlaWdodDogLjhlbTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNjAlKSByb3RhdGUoLTQ1ZGVnKTtcbiAgICB3aWR0aDogLjhlbTtcbiAgfVxuICAmOjphZnRlciB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBoZWlnaHQ6IC4yZW07XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTgwJSk7XG4gICAgd2lkdGg6IC4yZW07XG4gIH1cbn1cblxuLy8gSWNvbiBlbW9qaVxuLmljb24tZW1vamkge1xuICBib3JkZXI6ICRpY29uLWJvcmRlci13aWR0aCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgJjo6YmVmb3JlIHtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYm94LXNoYWRvdzogLS4xN2VtIC0uMWVtLCAuMTdlbSAtLjFlbTtcbiAgICBoZWlnaHQ6IC4xNWVtO1xuICAgIHdpZHRoOiAuMTVlbTtcbiAgfVxuICAmOjphZnRlciB7XG4gICAgYm9yZGVyOiAkaWNvbi1ib3JkZXItd2lkdGggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGhlaWdodDogLjVlbTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNDAlKSByb3RhdGUoLTEzNWRlZyk7XG4gICAg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 */
diff --git a/themes/quark/css-compiled/spectre-icons.min.css b/themes/quark/css-compiled/spectre-icons.min.css
new file mode 100644
index 0000000..8f00a92
--- /dev/null
+++ b/themes/quark/css-compiled/spectre-icons.min.css
@@ -0,0 +1 @@
+/*! Spectre.css Icons v0.5.8 | MIT License | github.com/picturepan2/spectre */.icon{font-size:inherit;font-style:normal;position:relative;display:inline-block;box-sizing:border-box;width:1em;height:1em;vertical-align:middle;text-indent:-9999px}.icon::after,.icon::before{position:absolute;top:50%;left:50%;display:block;content:'';transform:translate(-50%,-50%)}.icon.icon-2x{font-size:1.6rem}.icon.icon-3x{font-size:2.4rem}.icon.icon-4x{font-size:3.2rem}.accordion .icon,.btn .icon,.menu .icon,.toast .icon{vertical-align:-10%}.btn-lg .icon{vertical-align:-15%}.icon-arrow-down::before,.icon-arrow-left::before,.icon-arrow-right::before,.icon-arrow-up::before,.icon-back::before,.icon-downward::before,.icon-forward::before,.icon-upward::before{width:.65em;height:.65em;border:.1rem solid currentColor;border-right:0;border-bottom:0}.icon-arrow-down::before{transform:translate(-50%,-75%) rotate(225deg)}.icon-arrow-left::before{transform:translate(-25%,-50%) rotate(-45deg)}.icon-arrow-right::before{transform:translate(-75%,-50%) rotate(135deg)}.icon-arrow-up::before{transform:translate(-50%,-25%) rotate(45deg)}.icon-back::after,.icon-forward::after{width:.8em;height:.1rem;background:currentColor}.icon-downward::after,.icon-upward::after{width:.1rem;height:.8em;background:currentColor}.icon-back::after{left:55%}.icon-back::before{transform:translate(-50%,-50%) rotate(-45deg)}.icon-downward::after{top:45%}.icon-downward::before{transform:translate(-50%,-50%) rotate(-135deg)}.icon-forward::after{left:45%}.icon-forward::before{transform:translate(-50%,-50%) rotate(135deg)}.icon-upward::after{top:55%}.icon-upward::before{transform:translate(-50%,-50%) rotate(45deg)}.icon-caret::before{width:0;height:0;transform:translate(-50%,-25%);border-top:.3em solid currentColor;border-right:.3em solid transparent;border-left:.3em solid transparent}.icon-menu::before{width:100%;height:.1rem;background:currentColor;box-shadow:0 -.35em,0 .35em}.icon-apps::before{width:3px;height:3px;background:currentColor;box-shadow:-.35em -.35em,-.35em 0,-.35em .35em,0 -.35em,0 .35em,.35em -.35em,.35em 0,.35em .35em}.icon-resize-horiz::after,.icon-resize-horiz::before,.icon-resize-vert::after,.icon-resize-vert::before{width:.45em;height:.45em;border:.1rem solid currentColor;border-right:0;border-bottom:0}.icon-resize-horiz::before,.icon-resize-vert::before{transform:translate(-50%,-90%) rotate(45deg)}.icon-resize-horiz::after,.icon-resize-vert::after{transform:translate(-50%,-10%) rotate(225deg)}.icon-resize-horiz::before{transform:translate(-90%,-50%) rotate(-45deg)}.icon-resize-horiz::after{transform:translate(-10%,-50%) rotate(135deg)}.icon-more-horiz::before,.icon-more-vert::before{width:3px;height:3px;border-radius:50%;background:currentColor;box-shadow:-.4em 0,.4em 0}.icon-more-vert::before{box-shadow:0 -.4em,0 .4em}.icon-cross::before,.icon-minus::before,.icon-plus::before{width:100%;height:.1rem;background:currentColor}.icon-cross::after,.icon-plus::after{width:.1rem;height:100%;background:currentColor}.icon-cross::before{width:100%}.icon-cross::after{height:100%}.icon-cross::after,.icon-cross::before{transform:translate(-50%,-50%) rotate(45deg)}.icon-check::before{width:.9em;height:.5em;transform:translate(-50%,-75%) rotate(-45deg);border:.1rem solid currentColor;border-top:0;border-right:0}.icon-stop{border:.1rem solid currentColor;border-radius:50%}.icon-stop::before{width:1em;height:.1rem;transform:translate(-50%,-50%) rotate(45deg);background:currentColor}.icon-shutdown{border:.1rem solid currentColor;border-top-color:transparent;border-radius:50%}.icon-shutdown::before{top:.1em;width:.1rem;height:.5em;content:'';background:currentColor}.icon-refresh::before{width:1em;height:1em;border:.1rem solid currentColor;border-right-color:transparent;border-radius:50%}.icon-refresh::after{top:20%;left:80%;width:0;height:0;border:.2em solid currentColor;border-top-color:transparent;border-left-color:transparent}.icon-search::before{top:5%;left:5%;width:.75em;height:.75em;transform:translate(0,0) rotate(45deg);border:.1rem solid currentColor;border-radius:50%}.icon-search::after{top:80%;left:80%;width:.4em;height:.1rem;transform:translate(-50%,-50%) rotate(45deg);background:currentColor}.icon-edit::before{width:.85em;height:.4em;transform:translate(-40%,-60%) rotate(-45deg);border:.1rem solid currentColor}.icon-edit::after{top:95%;left:5%;width:0;height:0;transform:translate(0,-100%);border:.15em solid currentColor;border-top-color:transparent;border-right-color:transparent}.icon-delete::before{top:60%;width:.75em;height:.75em;border:.1rem solid currentColor;border-top:0;border-bottom-right-radius:.1rem;border-bottom-left-radius:.1rem}.icon-delete::after{top:.05rem;width:.5em;height:.1rem;background:currentColor;box-shadow:-.25em .2em,.25em .2em}.icon-share{border:.1rem solid currentColor;border-top:0;border-right:0;border-radius:.1rem}.icon-share::before{top:.25em;left:100%;width:.4em;height:.4em;transform:translate(-125%,-50%) rotate(-45deg);border:.1rem solid currentColor;border-top:0;border-left:0}.icon-share::after{width:.6em;height:.5em;border:.1rem solid currentColor;border-right:0;border-bottom:0;border-radius:75% 0}.icon-flag::before{left:15%;width:.1rem;height:1em;background:currentColor}.icon-flag::after{top:35%;left:60%;width:.8em;height:.65em;border:.1rem solid currentColor;border-left:0;border-top-right-radius:.1rem;border-bottom-right-radius:.1rem}.icon-bookmark::before{width:.8em;height:.9em;border:.1rem solid currentColor;border-bottom:0;border-top-left-radius:.1rem;border-top-right-radius:.1rem}.icon-bookmark::after{width:.5em;height:.5em;transform:translate(-50%,35%) rotate(-45deg) skew(15deg,15deg);border:.1rem solid currentColor;border-bottom:0;border-left:0;border-radius:.1rem}.icon-download,.icon-upload{border-bottom:.1rem solid currentColor}.icon-download::before,.icon-upload::before{width:.5em;height:.5em;transform:translate(-50%,-60%) rotate(-135deg);border:.1rem solid currentColor;border-right:0;border-bottom:0}.icon-download::after,.icon-upload::after{top:40%;width:.1rem;height:.6em;background:currentColor}.icon-upload::before{transform:translate(-50%,-60%) rotate(45deg)}.icon-upload::after{top:50%}.icon-copy::before{top:35%;left:40%;width:.8em;height:.8em;border:.1rem solid currentColor;border-right:0;border-bottom:0;border-radius:.1rem}.icon-copy::after{top:60%;left:60%;width:.8em;height:.8em;border:.1rem solid currentColor;border-radius:.1rem}.icon-time{border:.1rem solid currentColor;border-radius:50%}.icon-time::before{width:.1rem;height:.4em;transform:translate(-50%,-75%);background:currentColor}.icon-time::after{width:.1rem;height:.3em;transform:translate(-50%,-75%) rotate(90deg);transform-origin:50% 90%;background:currentColor}.icon-mail::before{width:1em;height:.8em;border:.1rem solid currentColor;border-radius:.1rem}.icon-mail::after{width:.5em;height:.5em;transform:translate(-50%,-90%) rotate(-45deg) skew(10deg,10deg);border:.1rem solid currentColor;border-top:0;border-right:0}.icon-people::before{top:25%;width:.45em;height:.45em;border:.1rem solid currentColor;border-radius:50%}.icon-people::after{top:75%;width:.9em;height:.4em;border:.1rem solid currentColor;border-radius:50% 50% 0 0}.icon-message{border:.1rem solid currentColor;border-right:0;border-bottom:0;border-radius:.1rem}.icon-message::before{top:40%;left:65%;width:.7em;height:.8em;border:.1rem solid currentColor;border-top:0;border-left:0;border-bottom-right-radius:.1rem}.icon-message::after{top:100%;left:10%;width:.1rem;height:.3em;transform:translate(0,-90%) rotate(45deg);border-radius:.1rem;background:currentColor}.icon-photo{border:.1rem solid currentColor;border-radius:.1rem}.icon-photo::before{top:35%;left:35%;width:.25em;height:.25em;border:.1rem solid currentColor;border-radius:50%}.icon-photo::after{left:60%;width:.5em;height:.5em;transform:translate(-50%,25%) rotate(-45deg);border:.1rem solid currentColor;border-bottom:0;border-left:0}.icon-link::after,.icon-link::before{width:.75em;height:.5em;border:.1rem solid currentColor;border-right:0;border-radius:5em 0 0 5em}.icon-link::before{transform:translate(-70%,-45%) rotate(-45deg)}.icon-link::after{transform:translate(-30%,-55%) rotate(135deg)}.icon-location::before{width:.8em;height:.8em;transform:translate(-50%,-60%) rotate(-45deg);border:.1rem solid currentColor;border-radius:50% 50% 50% 0}.icon-location::after{width:.2em;height:.2em;transform:translate(-50%,-80%);border:.1rem solid currentColor;border-radius:50%}.icon-emoji{border:.1rem solid currentColor;border-radius:50%}.icon-emoji::before{width:.15em;height:.15em;border-radius:50%;box-shadow:-.17em -.1em,.17em -.1em}.icon-emoji::after{width:.5em;height:.5em;transform:translate(-50%,-40%) rotate(-135deg);border:.1rem solid currentColor;border-right-color:transparent;border-bottom-color:transparent;border-radius:50%}
\ No newline at end of file
diff --git a/themes/quark/css-compiled/spectre.css b/themes/quark/css-compiled/spectre.css
new file mode 100644
index 0000000..54aaa22
--- /dev/null
+++ b/themes/quark/css-compiled/spectre.css
@@ -0,0 +1,1257 @@
+/*! Spectre.css v0.5.8 | MIT License | github.com/picturepan2/spectre */
+/* Manually forked from Normalize.css */
+/* normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */
+/** 1. Change the default font family in all browsers (opinionated). 2. Correct the line height in all browsers. 3. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS. */
+/* Document ========================================================================== */
+html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 3 */ -webkit-text-size-adjust: 100%; /* 3 */ }
+
+/* Sections ========================================================================== */
+/** Remove the margin in all browsers (opinionated). */
+body { margin: 0; }
+
+/** Add the correct display in IE 9-. */
+article, aside, footer, header, nav, section { display: block; }
+
+/** Correct the font size and margin on `h1` elements within `section` and `article` contexts in Chrome, Firefox, and Safari. */
+h1 { font-size: 2em; margin: 0.67em 0; }
+
+/* Grouping content ========================================================================== */
+/** Add the correct display in IE 9-. 1. Add the correct display in IE. */
+figcaption, figure, main { /* 1 */ display: block; }
+
+/** Add the correct margin in IE 8 (removed). */
+/** 1. Add the correct box sizing in Firefox. 2. Show the overflow in Edge and IE. */
+hr { box-sizing: content-box; /* 1 */ height: 0; /* 1 */ overflow: visible; /* 2 */ }
+
+/** 1. Correct the inheritance and scaling of font size in all browsers. (removed) 2. Correct the odd `em` font sizing in all browsers. */
+/* Text-level semantics ========================================================================== */
+/** 1. Remove the gray background on active links in IE 10. 2. Remove gaps in links underline in iOS 8+ and Safari 8+. */
+a { background-color: transparent; /* 1 */ -webkit-text-decoration-skip: objects; /* 2 */ }
+
+/** Remove the outline on focused links when they are also active or hovered in all browsers (opinionated). */
+a:active, a:hover { outline-width: 0; }
+
+/** Modify default styling of address. */
+address { font-style: normal; }
+
+/** 1. Remove the bottom border in Firefox 39-. 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. (removed) */
+/** Prevent the duplicate application of `bolder` by the next rule in Safari 6. */
+b, strong { font-weight: inherit; }
+
+/** Add the correct font weight in Chrome, Edge, and Safari. */
+b, strong { font-weight: bolder; }
+
+/** 1. Correct the inheritance and scaling of font size in all browsers. 2. Correct the odd `em` font sizing in all browsers. */
+code, kbd, pre, samp { font-family: "SF Mono", "Segoe UI Mono", "Roboto Mono", Menlo, Courier, monospace; /* 1 (changed) */ font-size: 1em; /* 2 */ }
+
+/** Add the correct font style in Android 4.3-. */
+dfn { font-style: italic; }
+
+/** Add the correct background and color in IE 9-. (Removed) */
+/** Add the correct font size in all browsers. */
+small { font-size: 80%; font-weight: 400; /* (added) */ }
+
+/** Prevent `sub` and `sup` elements from affecting the line height in all browsers. */
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+
+sub { bottom: -0.25em; }
+
+sup { top: -0.5em; }
+
+/* Embedded content ========================================================================== */
+/** Add the correct display in IE 9-. */
+audio, video { display: inline-block; }
+
+/** Add the correct display in iOS 4-7. */
+audio:not([controls]) { display: none; height: 0; }
+
+/** Remove the border on images inside links in IE 10-. */
+img { border-style: none; }
+
+/** Hide the overflow in IE. */
+svg:not(:root) { overflow: hidden; }
+
+/* Forms ========================================================================== */
+/** 1. Change the font styles in all browsers (opinionated). 2. Remove the margin in Firefox and Safari. */
+button, input, optgroup, select, textarea { font-family: inherit; /* 1 (changed) */ font-size: inherit; /* 1 (changed) */ line-height: inherit; /* 1 (changed) */ margin: 0; /* 2 */ }
+
+/** Show the overflow in IE. 1. Show the overflow in Edge. */
+button, input { /* 1 */ overflow: visible; }
+
+/** Remove the inheritance of text transform in Edge, Firefox, and IE. 1. Remove the inheritance of text transform in Firefox. */
+button, select { /* 1 */ text-transform: none; }
+
+/** 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` controls in Android 4. 2. Correct the inability to style clickable types in iOS and Safari. */
+button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; /* 2 */ }
+
+/** Remove the inner border and padding in Firefox. */
+button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; }
+
+/** Restore the focus styles unset by the previous rule (removed). */
+/** Change the border, margin, and padding in all browsers (opinionated) (changed). */
+fieldset { border: 0; margin: 0; padding: 0; }
+
+/** 1. Correct the text wrapping in Edge and IE. 2. Correct the color inheritance from `fieldset` elements in IE. 3. Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers. */
+legend { box-sizing: border-box; /* 1 */ color: inherit; /* 2 */ display: table; /* 1 */ max-width: 100%; /* 1 */ padding: 0; /* 3 */ white-space: normal; /* 1 */ }
+
+/** 1. Add the correct display in IE 9-. 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. */
+progress { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ }
+
+/** Remove the default vertical scrollbar in IE. */
+textarea { overflow: auto; }
+
+/** 1. Add the correct box sizing in IE 10-. 2. Remove the padding in IE 10-. */
+[type="checkbox"], [type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
+
+/** Correct the cursor style of increment and decrement buttons in Chrome. */
+[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; }
+
+/** 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */
+[type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ }
+
+/** Remove the inner padding and cancel buttons in Chrome and Safari on macOS. */
+[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
+
+/** 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */
+::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ }
+
+/* Interactive ========================================================================== */
+/* Add the correct display in IE 9-. 1. Add the correct display in Edge, IE, and Firefox. */
+details, menu { display: block; }
+
+/* Add the correct display in all browsers. */
+summary { display: list-item; outline: none; }
+
+/* Scripting ========================================================================== */
+/** Add the correct display in IE 9-. */
+canvas { display: inline-block; }
+
+/** Add the correct display in IE. */
+template { display: none; }
+
+/* Hidden ========================================================================== */
+/** Add the correct display in IE 10-. */
+[hidden] { display: none; }
+
+*, *::before, *::after { box-sizing: inherit; }
+
+html { box-sizing: border-box; font-size: 20px; line-height: 1.5; -webkit-tap-highlight-color: transparent; }
+
+body { background: #fff; color: #50596c; font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif; font-size: 0.8rem; overflow-x: hidden; text-rendering: optimizeLegibility; }
+
+a { color: #3085EE; outline: none; text-decoration: none; }
+
+a:focus { box-shadow: 0 0 0 0.1rem rgba(48, 133, 238, 0.2); }
+
+a:focus, a:hover, a:active, a.active { color: #126bd9; text-decoration: underline; }
+
+a:visited { color: #5fa1f2; }
+
+h1, h2, h3, h4, h5, h6 { color: inherit; font-weight: 500; line-height: 1.2; margin-bottom: .5em; margin-top: 0; }
+
+.h1, .h2, .h3, .h4, .h5, .h6 { font-weight: 500; }
+
+h1, .h1 { font-size: 2rem; }
+
+h2, .h2 { font-size: 1.6rem; }
+
+h3, .h3 { font-size: 1.4rem; }
+
+h4, .h4 { font-size: 1.2rem; }
+
+h5, .h5 { font-size: 1rem; }
+
+h6, .h6 { font-size: .8rem; }
+
+p { margin: 0 0 1.2rem; }
+
+a, ins, u { -webkit-text-decoration-skip: ink edges; text-decoration-skip: ink edges; }
+
+abbr[title] { border-bottom: 0.05rem dotted; cursor: help; text-decoration: none; }
+
+kbd { border-radius: 0.1rem; line-height: 1.25; padding: .1rem .2rem; background: #454d5d; color: #fff; font-size: 0.7rem; }
+
+mark { background: #ffe9b3; color: #50596c; border-bottom: 0.05rem solid #ffd367; border-radius: 0.1rem; padding: 0.05rem 0.1rem 0; }
+
+blockquote { border-left: 0.1rem solid #e7e9ed; margin-left: 0; padding: 0.4rem 0.8rem; }
+
+blockquote p:last-child { margin-bottom: 0; }
+
+ul, ol { margin: 0.8rem 0 0.8rem 0.8rem; padding: 0; }
+
+ul ul, ul ol, ol ul, ol ol { margin: 0.8rem 0 0.8rem 0.8rem; }
+
+ul li, ol li { margin-top: 0.4rem; }
+
+ul { list-style: disc inside; }
+
+ul ul { list-style-type: circle; }
+
+ol { list-style: decimal inside; }
+
+ol ol { list-style-type: lower-alpha; }
+
+dl dt { font-weight: bold; }
+
+dl dd { margin: 0.4rem 0 0.8rem 0; }
+
+html:lang(zh), html:lang(zh-Hans), .lang-zh, .lang-zh-hans { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif; }
+
+html:lang(zh-Hant), .lang-zh-hant { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang TC", "Hiragino Sans CNS", "Microsoft JhengHei", "Helvetica Neue", sans-serif; }
+
+html:lang(ja), .lang-ja { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Hiragino Sans", "Hiragino Kaku Gothic Pro", "Yu Gothic", YuGothic, Meiryo, "Helvetica Neue", sans-serif; }
+
+html:lang(ko), .lang-ko { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Malgun Gothic", "Helvetica Neue", sans-serif; }
+
+:lang(zh) ins, :lang(zh) u, :lang(ja) ins, :lang(ja) u, .lang-cjk ins, .lang-cjk u { border-bottom: 0.05rem solid; text-decoration: none; }
+
+:lang(zh) del + del, :lang(zh) del + s, :lang(zh) ins + ins, :lang(zh) ins + u, :lang(zh) s + del, :lang(zh) s + s, :lang(zh) u + ins, :lang(zh) u + u, :lang(ja) del + del, :lang(ja) del + s, :lang(ja) ins + ins, :lang(ja) ins + u, :lang(ja) s + del, :lang(ja) s + s, :lang(ja) u + ins, :lang(ja) u + u, .lang-cjk del + del, .lang-cjk del + s, .lang-cjk ins + ins, .lang-cjk ins + u, .lang-cjk s + del, .lang-cjk s + s, .lang-cjk u + ins, .lang-cjk u + u { margin-left: .125em; }
+
+.table { border-collapse: collapse; border-spacing: 0; width: 100%; text-align: left; }
+
+.table.table-striped tbody tr:nth-of-type(odd) { background: #f8f9fa; }
+
+.table tbody tr.active, .table.table-striped tbody tr.active { background: #f0f1f4; }
+
+.table.table-hover tbody tr:hover { background: #f0f1f4; }
+
+.table.table-scroll { display: block; overflow-x: auto; padding-bottom: .75rem; white-space: nowrap; }
+
+.table td, .table th { border-bottom: 0.05rem solid #e7e9ed; padding: 0.6rem 0.4rem; }
+
+.table th { border-bottom-width: 0.1rem; }
+
+.btn, .button { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #fff; border: 0.05rem solid #3085EE; border-radius: 0.1rem; color: #3085EE; cursor: pointer; display: inline-block; font-size: 0.8rem; height: 1.8rem; line-height: 1.2rem; outline: none; padding: 0.25rem 0.4rem; text-align: center; text-decoration: none; transition: background .2s, border .2s, box-shadow .2s, color .2s; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; white-space: nowrap; }
+
+.btn:focus, .button:focus { box-shadow: 0 0 0 0.1rem rgba(48, 133, 238, 0.2); }
+
+.btn:focus, .button:focus, .btn:hover, .button:hover { background: #e1edfd; border-color: #227ded; text-decoration: none; }
+
+.btn:active, .button:active, .btn.active, .active.button { background: #227ded; border-color: #1370e3; color: #fff; text-decoration: none; }
+
+.btn:active.loading::after, .button:active.loading::after, .btn.active.loading::after, .active.loading.button::after { border-bottom-color: #fff; border-left-color: #fff; }
+
+.btn[disabled], .button[disabled], .btn:disabled, .button:disabled, .btn.disabled, .disabled.button { cursor: default; opacity: .5; pointer-events: none; }
+
+.btn.btn-primary, .btn-primary.button { background: #3085EE; border-color: #227ded; color: #fff; }
+
+.btn.btn-primary:focus, .btn-primary.button:focus, .btn.btn-primary:hover, .btn-primary.button:hover { background: #1877ec; border-color: #1370e3; color: #fff; }
+
+.btn.btn-primary:active, .btn-primary.button:active, .btn.btn-primary.active, .btn-primary.active.button { background: #1372e7; border-color: #126bd9; color: #fff; }
+
+.btn.btn-primary.loading::after, .btn-primary.loading.button::after { border-bottom-color: #fff; border-left-color: #fff; }
+
+.btn.btn-success, .btn-success.button { background: #32b643; border-color: #2faa3f; color: #fff; }
+
+.btn.btn-success:focus, .btn-success.button:focus { box-shadow: 0 0 0 0.1rem rgba(50, 182, 67, 0.2); }
+
+.btn.btn-success:focus, .btn-success.button:focus, .btn.btn-success:hover, .btn-success.button:hover { background: #30ae40; border-color: #2da23c; color: #fff; }
+
+.btn.btn-success:active, .btn-success.button:active, .btn.btn-success.active, .btn-success.active.button { background: #2a9a39; border-color: #278e34; color: #fff; }
+
+.btn.btn-success.loading::after, .btn-success.loading.button::after { border-bottom-color: #fff; border-left-color: #fff; }
+
+.btn.btn-error, .btn-error.button { background: #e85600; border-color: #d95000; color: #fff; }
+
+.btn.btn-error:focus, .btn-error.button:focus { box-shadow: 0 0 0 0.1rem rgba(232, 86, 0, 0.2); }
+
+.btn.btn-error:focus, .btn-error.button:focus, .btn.btn-error:hover, .btn-error.button:hover { background: #de5200; border-color: #cf4d00; color: #fff; }
+
+.btn.btn-error:active, .btn-error.button:active, .btn.btn-error.active, .btn-error.active.button { background: #c44900; border-color: #b54300; color: #fff; }
+
+.btn.btn-error.loading::after, .btn-error.loading.button::after { border-bottom-color: #fff; border-left-color: #fff; }
+
+.btn.btn-link, .btn-link.button { background: transparent; border-color: transparent; color: #3085EE; }
+
+.btn.btn-link:focus, .btn-link.button:focus, .btn.btn-link:hover, .btn-link.button:hover, .btn.btn-link:active, .btn-link.button:active, .btn.btn-link.active, .btn-link.active.button { color: #126bd9; }
+
+.btn.btn-sm, .btn-sm.button { font-size: 0.7rem; height: 1.4rem; padding: 0.05rem 0.3rem; }
+
+.btn.btn-lg, .btn-lg.button { font-size: 0.9rem; height: 2rem; padding: 0.35rem 0.6rem; }
+
+.btn.btn-block, .btn-block.button { display: block; width: 100%; }
+
+.btn.btn-action, .btn-action.button { width: 1.8rem; padding-left: 0; padding-right: 0; }
+
+.btn.btn-action.btn-sm, .btn-action.btn-sm.button { width: 1.4rem; }
+
+.btn.btn-action.btn-lg, .btn-action.btn-lg.button { width: 2rem; }
+
+.btn.btn-clear, .btn-clear.button { background: transparent; border: 0; color: currentColor; height: 1rem; line-height: 0.8rem; margin-left: 0.2rem; margin-right: -2px; opacity: 1; padding: 0.1rem; text-decoration: none; width: 1rem; }
+
+.btn.btn-clear:focus, .btn-clear.button:focus, .btn.btn-clear:hover, .btn-clear.button:hover { background: rgba(248, 249, 250, 0.5); opacity: .95; }
+
+.btn.btn-clear::before, .btn-clear.button::before { content: "\2715"; }
+
+.btn-group { display: -ms-inline-flexbox; display: inline-flex; -ms-flex-wrap: wrap; flex-wrap: wrap; }
+
+.btn-group .btn, .btn-group .button { -ms-flex: 1 0 auto; flex: 1 0 auto; }
+
+.btn-group .btn:first-child:not(:last-child), .btn-group .button:first-child:not(:last-child) { border-bottom-right-radius: 0; border-top-right-radius: 0; }
+
+.btn-group .btn:not(:first-child):not(:last-child), .btn-group .button:not(:first-child):not(:last-child) { border-radius: 0; margin-left: -0.05rem; }
+
+.btn-group .btn:last-child:not(:first-child), .btn-group .button:last-child:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; margin-left: -0.05rem; }
+
+.btn-group .btn:focus, .btn-group .button:focus, .btn-group .btn:hover, .btn-group .button:hover, .btn-group .btn:active, .btn-group .button:active, .btn-group .btn.active, .btn-group .active.button { z-index: 1; }
+
+.btn-group.btn-group-block { display: -ms-flexbox; display: flex; }
+
+.btn-group.btn-group-block .btn, .btn-group.btn-group-block .button { -ms-flex: 1 0 0px; flex: 1 0 0; }
+
+.form-group:not(:last-child) { margin-bottom: 0.4rem; }
+
+fieldset { margin-bottom: 0.8rem; }
+
+legend { font-size: 0.9rem; font-weight: 500; margin-bottom: 0.8rem; }
+
+.form-label { display: block; line-height: 1.2rem; padding: 0.3rem 0; }
+
+.form-label.label-sm { font-size: 0.7rem; padding: 0.1rem 0; }
+
+.form-label.label-lg { font-size: 0.9rem; padding: 0.4rem 0; }
+
+.form-input, .search-input, [data-grav-field="array"] input, [data-grav-field="array"] textarea { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #fff; background-image: none; border: 0.05rem solid #caced7; border-radius: 0.1rem; color: #50596c; display: block; font-size: 0.8rem; height: 1.8rem; line-height: 1.2rem; max-width: 100%; outline: none; padding: 0.25rem 0.4rem; position: relative; transition: background .2s, border .2s, box-shadow .2s, color .2s; width: 100%; }
+
+.form-input:focus, .search-input:focus, [data-grav-field="array"] input:focus, [data-grav-field="array"] textarea:focus { box-shadow: 0 0 0 0.1rem rgba(48, 133, 238, 0.2); border-color: #3085EE; }
+
+.form-input::-webkit-input-placeholder, .search-input::-webkit-input-placeholder, [data-grav-field="array"] input::-webkit-input-placeholder, [data-grav-field="array"] textarea::-webkit-input-placeholder { color: #acb3c2; }
+
+.form-input:-ms-input-placeholder, .search-input:-ms-input-placeholder, [data-grav-field="array"] input:-ms-input-placeholder, [data-grav-field="array"] textarea:-ms-input-placeholder { color: #acb3c2; }
+
+.form-input::-ms-input-placeholder, .search-input::-ms-input-placeholder, [data-grav-field="array"] input::-ms-input-placeholder, [data-grav-field="array"] textarea::-ms-input-placeholder { color: #acb3c2; }
+
+.form-input::placeholder, .search-input::placeholder, [data-grav-field="array"] input::placeholder, [data-grav-field="array"] textarea::placeholder { color: #acb3c2; }
+
+.form-input.input-sm, .input-sm.search-input, [data-grav-field="array"] input.input-sm, [data-grav-field="array"] textarea.input-sm { font-size: 0.7rem; height: 1.4rem; padding: 0.05rem 0.3rem; }
+
+.form-input.input-lg, .input-lg.search-input, [data-grav-field="array"] input.input-lg, [data-grav-field="array"] textarea.input-lg { font-size: 0.9rem; height: 2rem; padding: 0.35rem 0.6rem; }
+
+.form-input.input-inline, .input-inline.search-input, [data-grav-field="array"] input.input-inline, [data-grav-field="array"] textarea.input-inline { display: inline-block; vertical-align: middle; width: auto; }
+
+.form-input[type="file"], .search-input[type="file"], [data-grav-field="array"] input[type="file"], [data-grav-field="array"] textarea[type="file"] { height: auto; }
+
+textarea.form-input, textarea.search-input, [data-grav-field="array"] textarea, textarea.form-input.input-lg, textarea.input-lg.search-input, [data-grav-field="array"] textarea.input-lg, textarea.form-input.input-sm, textarea.input-sm.search-input, [data-grav-field="array"] textarea.input-sm { height: auto; }
+
+.form-input-hint { color: #acb3c2; font-size: 0.7rem; margin-top: 0.2rem; }
+
+.has-success .form-input-hint, .is-success + .form-input-hint { color: #32b643; }
+
+.has-error .form-input-hint, .is-error + .form-input-hint { color: #e85600; }
+
+.form-select { -webkit-appearance: none; -moz-appearance: none; appearance: none; border: 0.05rem solid #caced7; border-radius: 0.1rem; color: inherit; font-size: 0.8rem; height: 1.8rem; line-height: 1.2rem; outline: none; padding: 0.25rem 0.4rem; vertical-align: middle; width: 100%; background: #fff; }
+
+.form-select:focus { box-shadow: 0 0 0 0.1rem rgba(48, 133, 238, 0.2); border-color: #3085EE; }
+
+.form-select::-ms-expand { display: none; }
+
+.form-select.select-sm { font-size: 0.7rem; height: 1.4rem; padding: 0.05rem 1.1rem 0.05rem 0.3rem; }
+
+.form-select.select-lg { font-size: 0.9rem; height: 2rem; padding: 0.35rem 1.4rem 0.35rem 0.6rem; }
+
+.form-select[size], .form-select[multiple] { height: auto; padding: 0.25rem 0.4rem; }
+
+.form-select[size] option, .form-select[multiple] option { padding: 0.1rem 0.2rem; }
+
+.form-select:not([multiple]):not([size]) { background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%204%205'%3E%3Cpath%20fill='%23667189'%20d='M2%200L0%202h4zm0%205L0%203h4z'/%3E%3C/svg%3E") no-repeat right 0.35rem center/0.4rem 0.5rem; padding-right: 1.2rem; }
+
+.has-icon-left, .has-icon-right { position: relative; }
+
+.has-icon-left .form-icon, .has-icon-right .form-icon { height: 0.8rem; margin: 0 0.25rem; position: absolute; top: 50%; transform: translateY(-50%); width: 0.8rem; z-index: 2; }
+
+.has-icon-left .form-icon { left: 0.05rem; }
+
+.has-icon-left .form-input, .has-icon-left .search-input, .has-icon-left [data-grav-field="array"] input, [data-grav-field="array"] .has-icon-left input, .has-icon-left [data-grav-field="array"] textarea, [data-grav-field="array"] .has-icon-left textarea { padding-left: 1.3rem; }
+
+.has-icon-right .form-icon { right: 0.05rem; }
+
+.has-icon-right .form-input, .has-icon-right .search-input, .has-icon-right [data-grav-field="array"] input, [data-grav-field="array"] .has-icon-right input, .has-icon-right [data-grav-field="array"] textarea, [data-grav-field="array"] .has-icon-right textarea { padding-right: 1.3rem; }
+
+.form-checkbox, .form-radio, .form-switch { display: block; line-height: 1.2rem; margin: 0.2rem 0; min-height: 1.4rem; padding: 0.1rem 0.4rem 0.1rem 1.2rem; position: relative; }
+
+.form-checkbox input, .form-radio input, .form-switch input { clip: rect(0, 0, 0, 0); height: 1px; margin: -1px; overflow: hidden; position: absolute; width: 1px; }
+
+.form-checkbox input:focus + .form-icon, .form-radio input:focus + .form-icon, .form-switch input:focus + .form-icon { box-shadow: 0 0 0 0.1rem rgba(48, 133, 238, 0.2); border-color: #3085EE; }
+
+.form-checkbox input:checked + .form-icon, .form-radio input:checked + .form-icon, .form-switch input:checked + .form-icon { background: #3085EE; border-color: #3085EE; }
+
+.form-checkbox .form-icon, .form-radio .form-icon, .form-switch .form-icon { border: 0.05rem solid #caced7; cursor: pointer; display: inline-block; position: absolute; transition: background .2s, border .2s, box-shadow .2s, color .2s; }
+
+.form-checkbox.input-sm, .form-radio.input-sm, .form-switch.input-sm { font-size: 0.7rem; margin: 0; }
+
+.form-checkbox.input-lg, .form-radio.input-lg, .form-switch.input-lg { font-size: 0.9rem; margin: 0.3rem 0; }
+
+.form-checkbox .form-icon, .form-radio .form-icon { background: #fff; height: 0.8rem; left: 0; top: 0.3rem; width: 0.8rem; }
+
+.form-checkbox input:active + .form-icon, .form-radio input:active + .form-icon { background: #f0f1f4; }
+
+.form-checkbox .form-icon { border-radius: 0.1rem; }
+
+.form-checkbox input:checked + .form-icon::before { background-clip: padding-box; border: 0.1rem solid #fff; border-left-width: 0; border-top-width: 0; content: ""; height: 9px; left: 50%; margin-left: -3px; margin-top: -6px; position: absolute; top: 50%; transform: rotate(45deg); width: 6px; }
+
+.form-checkbox input:indeterminate + .form-icon { background: #3085EE; border-color: #3085EE; }
+
+.form-checkbox input:indeterminate + .form-icon::before { background: #fff; content: ""; height: 2px; left: 50%; margin-left: -5px; margin-top: -1px; position: absolute; top: 50%; width: 10px; }
+
+.form-radio .form-icon { border-radius: 50%; }
+
+.form-radio input:checked + .form-icon::before { background: #fff; border-radius: 50%; content: ""; height: 6px; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); width: 6px; }
+
+.form-switch { padding-left: 2rem; }
+
+.form-switch .form-icon { background: #acb3c2; background-clip: padding-box; border-radius: 0.45rem; height: 0.9rem; left: 0; top: 0.25rem; width: 1.6rem; }
+
+.form-switch .form-icon::before { background: #fff; border-radius: 50%; content: ""; display: block; height: 0.8rem; left: 0; position: absolute; top: 0; transition: background .2s, border .2s, box-shadow .2s, color .2s, left .2s; width: 0.8rem; }
+
+.form-switch input:checked + .form-icon::before { left: 14px; }
+
+.form-switch input:active + .form-icon::before { background: #f8f9fa; }
+
+.input-group { display: -ms-flexbox; display: flex; }
+
+.input-group .input-group-addon { background: #f8f9fa; border: 0.05rem solid #caced7; border-radius: 0.1rem; line-height: 1.2rem; padding: 0.25rem 0.4rem; white-space: nowrap; }
+
+.input-group .input-group-addon.addon-sm { font-size: 0.7rem; padding: 0.05rem 0.3rem; }
+
+.input-group .input-group-addon.addon-lg { font-size: 0.9rem; padding: 0.35rem 0.6rem; }
+
+.input-group .form-input, .input-group .search-input, .input-group [data-grav-field="array"] input, [data-grav-field="array"] .input-group input, .input-group [data-grav-field="array"] textarea, [data-grav-field="array"] .input-group textarea, .input-group .form-select { -ms-flex: 1 1 auto; flex: 1 1 auto; width: 1%; }
+
+.input-group .input-group-btn { z-index: 1; }
+
+.input-group .form-input:first-child:not(:last-child), .input-group .search-input:first-child:not(:last-child), .input-group [data-grav-field="array"] input:first-child:not(:last-child), [data-grav-field="array"] .input-group input:first-child:not(:last-child), .input-group [data-grav-field="array"] textarea:first-child:not(:last-child), [data-grav-field="array"] .input-group textarea:first-child:not(:last-child), .input-group .form-select:first-child:not(:last-child), .input-group .input-group-addon:first-child:not(:last-child), .input-group .input-group-btn:first-child:not(:last-child) { border-bottom-right-radius: 0; border-top-right-radius: 0; }
+
+.input-group .form-input:not(:first-child):not(:last-child), .input-group .search-input:not(:first-child):not(:last-child), .input-group [data-grav-field="array"] input:not(:first-child):not(:last-child), [data-grav-field="array"] .input-group input:not(:first-child):not(:last-child), .input-group [data-grav-field="array"] textarea:not(:first-child):not(:last-child), [data-grav-field="array"] .input-group textarea:not(:first-child):not(:last-child), .input-group .form-select:not(:first-child):not(:last-child), .input-group .input-group-addon:not(:first-child):not(:last-child), .input-group .input-group-btn:not(:first-child):not(:last-child) { border-radius: 0; margin-left: -0.05rem; }
+
+.input-group .form-input:last-child:not(:first-child), .input-group .search-input:last-child:not(:first-child), .input-group [data-grav-field="array"] input:last-child:not(:first-child), [data-grav-field="array"] .input-group input:last-child:not(:first-child), .input-group [data-grav-field="array"] textarea:last-child:not(:first-child), [data-grav-field="array"] .input-group textarea:last-child:not(:first-child), .input-group .form-select:last-child:not(:first-child), .input-group .input-group-addon:last-child:not(:first-child), .input-group .input-group-btn:last-child:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; margin-left: -0.05rem; }
+
+.input-group .form-input:focus, .input-group .search-input:focus, .input-group [data-grav-field="array"] input:focus, [data-grav-field="array"] .input-group input:focus, .input-group [data-grav-field="array"] textarea:focus, [data-grav-field="array"] .input-group textarea:focus, .input-group .form-select:focus, .input-group .input-group-addon:focus, .input-group .input-group-btn:focus { z-index: 2; }
+
+.input-group .form-select { width: auto; }
+
+.input-group.input-inline { display: -ms-inline-flexbox; display: inline-flex; }
+
+.has-success .form-input, .has-success .search-input, .has-success [data-grav-field="array"] input, [data-grav-field="array"] .has-success input, .has-success [data-grav-field="array"] textarea, [data-grav-field="array"] .has-success textarea, .form-input.is-success, .is-success.search-input, [data-grav-field="array"] input.is-success, [data-grav-field="array"] textarea.is-success, .has-success .form-select, .form-select.is-success { background: #f9fdfa; border-color: #32b643; }
+
+.has-success .form-input:focus, .has-success .search-input:focus, .has-success [data-grav-field="array"] input:focus, [data-grav-field="array"] .has-success input:focus, .has-success [data-grav-field="array"] textarea:focus, [data-grav-field="array"] .has-success textarea:focus, .form-input.is-success:focus, .is-success.search-input:focus, [data-grav-field="array"] input.is-success:focus, [data-grav-field="array"] textarea.is-success:focus, .has-success .form-select:focus, .form-select.is-success:focus { box-shadow: 0 0 0 0.1rem rgba(50, 182, 67, 0.2); }
+
+.has-error .form-input, .has-error .search-input, .has-error [data-grav-field="array"] input, [data-grav-field="array"] .has-error input, .has-error [data-grav-field="array"] textarea, [data-grav-field="array"] .has-error textarea, .form-input.is-error, .is-error.search-input, [data-grav-field="array"] input.is-error, [data-grav-field="array"] textarea.is-error, .has-error .form-select, .form-select.is-error { background: #fffaf7; border-color: #e85600; }
+
+.has-error .form-input:focus, .has-error .search-input:focus, .has-error [data-grav-field="array"] input:focus, [data-grav-field="array"] .has-error input:focus, .has-error [data-grav-field="array"] textarea:focus, [data-grav-field="array"] .has-error textarea:focus, .form-input.is-error:focus, .is-error.search-input:focus, [data-grav-field="array"] input.is-error:focus, [data-grav-field="array"] textarea.is-error:focus, .has-error .form-select:focus, .form-select.is-error:focus { box-shadow: 0 0 0 0.1rem rgba(232, 86, 0, 0.2); }
+
+.has-error .form-checkbox .form-icon, .form-checkbox.is-error .form-icon, .has-error .form-radio .form-icon, .form-radio.is-error .form-icon, .has-error .form-switch .form-icon, .form-switch.is-error .form-icon { border-color: #e85600; }
+
+.has-error .form-checkbox input:checked + .form-icon, .form-checkbox.is-error input:checked + .form-icon, .has-error .form-radio input:checked + .form-icon, .form-radio.is-error input:checked + .form-icon, .has-error .form-switch input:checked + .form-icon, .form-switch.is-error input:checked + .form-icon { background: #e85600; border-color: #e85600; }
+
+.has-error .form-checkbox input:focus + .form-icon, .form-checkbox.is-error input:focus + .form-icon, .has-error .form-radio input:focus + .form-icon, .form-radio.is-error input:focus + .form-icon, .has-error .form-switch input:focus + .form-icon, .form-switch.is-error input:focus + .form-icon { box-shadow: 0 0 0 0.1rem rgba(232, 86, 0, 0.2); border-color: #e85600; }
+
+.has-error .form-checkbox input:indeterminate + .form-icon, .form-checkbox.is-error input:indeterminate + .form-icon { background: #e85600; border-color: #e85600; }
+
+.form-input:not(:placeholder-shown):invalid, .search-input:not(:placeholder-shown):invalid, [data-grav-field="array"] input:not(:placeholder-shown):invalid, [data-grav-field="array"] textarea:not(:placeholder-shown):invalid { border-color: #e85600; }
+
+.form-input:not(:placeholder-shown):invalid:focus, .search-input:not(:placeholder-shown):invalid:focus, [data-grav-field="array"] input:not(:placeholder-shown):invalid:focus, [data-grav-field="array"] textarea:not(:placeholder-shown):invalid:focus { box-shadow: 0 0 0 0.1rem rgba(232, 86, 0, 0.2); background: #fffaf7; }
+
+.form-input:not(:placeholder-shown):invalid + .form-input-hint, .search-input:not(:placeholder-shown):invalid + .form-input-hint, [data-grav-field="array"] input:not(:placeholder-shown):invalid + .form-input-hint, [data-grav-field="array"] textarea:not(:placeholder-shown):invalid + .form-input-hint { color: #e85600; }
+
+.form-input:disabled, .search-input:disabled, [data-grav-field="array"] input:disabled, [data-grav-field="array"] textarea:disabled, .form-input.disabled, .disabled.search-input, [data-grav-field="array"] input.disabled, [data-grav-field="array"] textarea.disabled, .form-select:disabled, .form-select.disabled { background-color: #f0f1f4; cursor: not-allowed; opacity: .5; }
+
+.form-input[readonly], .search-input[readonly], [data-grav-field="array"] input[readonly], [data-grav-field="array"] textarea[readonly] { background-color: #f8f9fa; }
+
+input:disabled + .form-icon, input.disabled + .form-icon { background: #f0f1f4; cursor: not-allowed; opacity: .5; }
+
+.form-switch input:disabled + .form-icon::before, .form-switch input.disabled + .form-icon::before { background: #fff; }
+
+.form-horizontal { padding: 0.4rem 0; }
+
+.form-horizontal .form-group { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; }
+
+.form-inline { display: inline-block; }
+
+.label { border-radius: 0.1rem; line-height: 1.25; padding: .1rem .2rem; background: #f0f1f4; color: #5b657a; display: inline-block; }
+
+.label.label-rounded { border-radius: 5rem; padding-left: .4rem; padding-right: .4rem; }
+
+.label.label-primary { background: #3085EE; color: #fff; }
+
+.label.label-secondary { background: #e1edfd; color: #3085EE; }
+
+.label.label-success { background: #32b643; color: #fff; }
+
+.label.label-warning { background: #ffb700; color: #fff; }
+
+.label.label-error { background: #e85600; color: #fff; }
+
+code { border-radius: 0.1rem; line-height: 1.25; padding: .1rem .2rem; background: #fcf2f2; color: #d73e48; font-size: 85%; }
+
+.code { border-radius: 0.1rem; color: #50596c; position: relative; }
+
+.code::before { color: #acb3c2; content: attr(data-lang); font-size: 0.7rem; position: absolute; right: 0.4rem; top: 0.1rem; }
+
+.code code { background: #f8f9fa; color: inherit; display: block; line-height: 1.5; overflow-x: auto; padding: 1rem; width: 100%; }
+
+.img-responsive { display: block; height: auto; max-width: 100%; }
+
+.img-fit-cover { object-fit: cover; }
+
+.img-fit-contain { object-fit: contain; }
+
+.video-responsive { display: block; overflow: hidden; padding: 0; position: relative; width: 100%; }
+
+.video-responsive::before { content: ""; display: block; padding-bottom: 56.25%; }
+
+.video-responsive iframe, .video-responsive object, .video-responsive embed { border: 0; bottom: 0; height: 100%; left: 0; position: absolute; right: 0; top: 0; width: 100%; }
+
+video.video-responsive { height: auto; max-width: 100%; }
+
+video.video-responsive::before { content: none; }
+
+.video-responsive-4-3::before { padding-bottom: 75%; }
+
+.video-responsive-1-1::before { padding-bottom: 100%; }
+
+.figure { margin: 0 0 0.4rem 0; }
+
+.figure .figure-caption { color: #667189; margin-top: 0.4rem; }
+
+.container { margin-left: auto; margin-right: auto; padding-left: 0.4rem; padding-right: 0.4rem; width: 100%; }
+
+.container.grid-xl { max-width: 1296px; }
+
+.container.grid-lg { max-width: 976px; }
+
+.container.grid-md { max-width: 856px; }
+
+.container.grid-sm { max-width: 616px; }
+
+.container.grid-xs { max-width: 496px; }
+
+.show-xs, .show-sm, .show-md, .show-lg, .show-xl { display: none !important; }
+
+.columns { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-left: -0.4rem; margin-right: -0.4rem; }
+
+.columns.col-gapless { margin-left: 0; margin-right: 0; }
+
+.columns.col-gapless > .column { padding-left: 0; padding-right: 0; }
+
+.columns.col-oneline { -ms-flex-wrap: nowrap; flex-wrap: nowrap; overflow-x: auto; }
+
+.column { -ms-flex: 1; flex: 1; max-width: 100%; padding-left: 0.4rem; padding-right: 0.4rem; }
+
+.column.col-12, .column.col-11, .column.col-10, .column.col-9, .column.col-8, .column.col-7, .column.col-6, .column.col-5, .column.col-4, .column.col-3, .column.col-2, .column.col-1, .column.col-auto { -ms-flex: none; flex: none; }
+
+.col-12 { width: 100%; }
+
+.col-11 { width: 91.66666667%; }
+
+.col-10 { width: 83.33333333%; }
+
+.col-9 { width: 75%; }
+
+.col-8 { width: 66.66666667%; }
+
+.col-7 { width: 58.33333333%; }
+
+.col-6 { width: 50%; }
+
+.col-5 { width: 41.66666667%; }
+
+.col-4 { width: 33.33333333%; }
+
+.col-3 { width: 25%; }
+
+.col-2 { width: 16.66666667%; }
+
+.col-1 { width: 8.33333333%; }
+
+.col-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; max-width: none; width: auto; }
+
+.col-mx-auto { margin-left: auto; margin-right: auto; }
+
+.col-ml-auto { margin-left: auto; }
+
+.col-mr-auto { margin-right: auto; }
+
+@media (max-width: 1280px) { .col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-xl-auto { -ms-flex: none; flex: none; }
+ .col-xl-12 { width: 100%; }
+ .col-xl-11 { width: 91.66666667%; }
+ .col-xl-10 { width: 83.33333333%; }
+ .col-xl-9 { width: 75%; }
+ .col-xl-8 { width: 66.66666667%; }
+ .col-xl-7 { width: 58.33333333%; }
+ .col-xl-6 { width: 50%; }
+ .col-xl-5 { width: 41.66666667%; }
+ .col-xl-4 { width: 33.33333333%; }
+ .col-xl-3 { width: 25%; }
+ .col-xl-2 { width: 16.66666667%; }
+ .col-xl-1 { width: 8.33333333%; }
+ .col-xl-auto { width: auto; }
+ .hide-xl { display: none !important; }
+ .show-xl { display: block !important; } }
+
+@media (max-width: 960px) { .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-lg-auto { -ms-flex: none; flex: none; }
+ .col-lg-12 { width: 100%; }
+ .col-lg-11 { width: 91.66666667%; }
+ .col-lg-10 { width: 83.33333333%; }
+ .col-lg-9 { width: 75%; }
+ .col-lg-8 { width: 66.66666667%; }
+ .col-lg-7 { width: 58.33333333%; }
+ .col-lg-6 { width: 50%; }
+ .col-lg-5 { width: 41.66666667%; }
+ .col-lg-4 { width: 33.33333333%; }
+ .col-lg-3 { width: 25%; }
+ .col-lg-2 { width: 16.66666667%; }
+ .col-lg-1 { width: 8.33333333%; }
+ .col-lg-auto { width: auto; }
+ .hide-lg { display: none !important; }
+ .show-lg { display: block !important; } }
+
+@media (max-width: 840px) { .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-md-auto { -ms-flex: none; flex: none; }
+ .col-md-12 { width: 100%; }
+ .col-md-11 { width: 91.66666667%; }
+ .col-md-10 { width: 83.33333333%; }
+ .col-md-9 { width: 75%; }
+ .col-md-8 { width: 66.66666667%; }
+ .col-md-7 { width: 58.33333333%; }
+ .col-md-6 { width: 50%; }
+ .col-md-5 { width: 41.66666667%; }
+ .col-md-4 { width: 33.33333333%; }
+ .col-md-3 { width: 25%; }
+ .col-md-2 { width: 16.66666667%; }
+ .col-md-1 { width: 8.33333333%; }
+ .col-md-auto { width: auto; }
+ .hide-md { display: none !important; }
+ .show-md { display: block !important; } }
+
+@media (max-width: 600px) { .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col-sm-auto { -ms-flex: none; flex: none; }
+ .col-sm-12 { width: 100%; }
+ .col-sm-11 { width: 91.66666667%; }
+ .col-sm-10 { width: 83.33333333%; }
+ .col-sm-9 { width: 75%; }
+ .col-sm-8 { width: 66.66666667%; }
+ .col-sm-7 { width: 58.33333333%; }
+ .col-sm-6 { width: 50%; }
+ .col-sm-5 { width: 41.66666667%; }
+ .col-sm-4 { width: 33.33333333%; }
+ .col-sm-3 { width: 25%; }
+ .col-sm-2 { width: 16.66666667%; }
+ .col-sm-1 { width: 8.33333333%; }
+ .col-sm-auto { width: auto; }
+ .hide-sm { display: none !important; }
+ .show-sm { display: block !important; } }
+
+@media (max-width: 480px) { .col-xs-12, .col-xs-11, .col-xs-10, .col-xs-9, .col-xs-8, .col-xs-7, .col-xs-6, .col-xs-5, .col-xs-4, .col-xs-3, .col-xs-2, .col-xs-1, .col-xs-auto { -ms-flex: none; flex: none; }
+ .col-xs-12 { width: 100%; }
+ .col-xs-11 { width: 91.66666667%; }
+ .col-xs-10 { width: 83.33333333%; }
+ .col-xs-9 { width: 75%; }
+ .col-xs-8 { width: 66.66666667%; }
+ .col-xs-7 { width: 58.33333333%; }
+ .col-xs-6 { width: 50%; }
+ .col-xs-5 { width: 41.66666667%; }
+ .col-xs-4 { width: 33.33333333%; }
+ .col-xs-3 { width: 25%; }
+ .col-xs-2 { width: 16.66666667%; }
+ .col-xs-1 { width: 8.33333333%; }
+ .col-xs-auto { width: auto; }
+ .hide-xs { display: none !important; }
+ .show-xs { display: block !important; } }
+
+.hero { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; -ms-flex-pack: justify; justify-content: space-between; padding-bottom: 4rem; padding-top: 4rem; }
+
+.hero.hero-sm { padding-bottom: 2rem; padding-top: 2rem; }
+
+.hero.hero-lg { padding-bottom: 8rem; padding-top: 8rem; }
+
+.hero .hero-body { padding: 0.4rem; }
+
+.navbar { -ms-flex-align: stretch; align-items: stretch; display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms-flex-pack: justify; justify-content: space-between; }
+
+.navbar .navbar-section { -ms-flex-align: center; align-items: center; display: -ms-flexbox; display: flex; -ms-flex: 1 0 0px; flex: 1 0 0; }
+
+.navbar .navbar-section:not(:first-child):last-child { -ms-flex-pack: end; justify-content: flex-end; }
+
+.navbar .navbar-center { -ms-flex-align: center; align-items: center; display: -ms-flexbox; display: flex; -ms-flex: 0 0 auto; flex: 0 0 auto; }
+
+.navbar .navbar-brand { font-size: 0.9rem; text-decoration: none; }
+
+.accordion input:checked ~ .accordion-header .icon, .accordion[open] .accordion-header .icon { transform: rotate(90deg); }
+
+.accordion input:checked ~ .accordion-body, .accordion[open] .accordion-body { max-height: 50rem; }
+
+.accordion .accordion-header { display: block; padding: 0.2rem 0.4rem; }
+
+.accordion .accordion-header .icon { transition: transform .25s; }
+
+.accordion .accordion-body { margin-bottom: 0.4rem; max-height: 0; overflow: hidden; transition: max-height .25s; }
+
+summary.accordion-header::-webkit-details-marker { display: none; }
+
+.avatar { font-size: 0.8rem; height: 1.6rem; width: 1.6rem; background: #3085EE; border-radius: 50%; color: rgba(255, 255, 255, 0.85); display: inline-block; font-weight: 300; line-height: 1.25; margin: 0; position: relative; vertical-align: middle; }
+
+.avatar.avatar-xs { font-size: 0.4rem; height: 0.8rem; width: 0.8rem; }
+
+.avatar.avatar-sm { font-size: 0.6rem; height: 1.2rem; width: 1.2rem; }
+
+.avatar.avatar-lg { font-size: 1.2rem; height: 2.4rem; width: 2.4rem; }
+
+.avatar.avatar-xl { font-size: 1.6rem; height: 3.2rem; width: 3.2rem; }
+
+.avatar img { border-radius: 50%; height: 100%; position: relative; width: 100%; z-index: 1; }
+
+.avatar .avatar-icon, .avatar .avatar-presence { background: #fff; bottom: 14.64%; height: 50%; padding: 0.1rem; position: absolute; right: 14.64%; transform: translate(50%, 50%); width: 50%; z-index: 2; }
+
+.avatar .avatar-presence { background: #acb3c2; box-shadow: 0 0 0 0.1rem #fff; border-radius: 50%; height: .5em; width: .5em; }
+
+.avatar .avatar-presence.online { background: #32b643; }
+
+.avatar .avatar-presence.busy { background: #e85600; }
+
+.avatar .avatar-presence.away { background: #ffb700; }
+
+.avatar[data-initial]::before { color: currentColor; content: attr(data-initial); left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); z-index: 1; }
+
+.badge { position: relative; white-space: nowrap; }
+
+.badge[data-badge]::after, .badge:not([data-badge])::after { background: #3085EE; background-clip: padding-box; border-radius: .5rem; box-shadow: 0 0 0 0.1rem #fff; color: #fff; content: attr(data-badge); display: inline-block; transform: translate(-0.05rem, -0.5rem); }
+
+.badge[data-badge]::after { font-size: 0.7rem; height: .9rem; line-height: 1; min-width: .9rem; padding: .1rem .2rem; text-align: center; white-space: nowrap; }
+
+.badge:not([data-badge])::after, .badge[data-badge=""]::after { height: 6px; min-width: 6px; padding: 0; width: 6px; }
+
+.badge.btn::after, .badge.button::after { position: absolute; top: 0; right: 0; transform: translate(50%, -50%); }
+
+.badge.avatar::after { position: absolute; top: 14.64%; right: 14.64%; transform: translate(50%, -50%); z-index: 100; }
+
+.breadcrumb { list-style: none; margin: 0.2rem 0; padding: 0.2rem 0; }
+
+.breadcrumb .breadcrumb-item { color: #667189; display: inline-block; margin: 0; padding: 0.2rem 0; }
+
+.breadcrumb .breadcrumb-item:not(:last-child) { margin-right: 0.2rem; }
+
+.breadcrumb .breadcrumb-item:not(:last-child) a { color: #667189; }
+
+.breadcrumb .breadcrumb-item:not(:first-child)::before { color: #667189; content: "/"; padding-right: 0.4rem; }
+
+.bar { background: #f0f1f4; border-radius: 0.1rem; display: -ms-flexbox; display: flex; -ms-flex-wrap: nowrap; flex-wrap: nowrap; height: 0.8rem; width: 100%; }
+
+.bar.bar-sm { height: 0.2rem; }
+
+.bar .bar-item { background: #3085EE; color: #fff; display: block; font-size: 0.7rem; -ms-flex-negative: 0; flex-shrink: 0; line-height: 0.8rem; height: 100%; position: relative; text-align: center; width: 0; }
+
+.bar .bar-item:first-child { border-bottom-left-radius: 0.1rem; border-top-left-radius: 0.1rem; }
+
+.bar .bar-item:last-child { border-bottom-right-radius: 0.1rem; border-top-right-radius: 0.1rem; -ms-flex-negative: 1; flex-shrink: 1; }
+
+.bar-slider { height: 0.1rem; margin: 0.4rem 0; position: relative; }
+
+.bar-slider .bar-item { left: 0; padding: 0; position: absolute; }
+
+.bar-slider .bar-item:not(:last-child):first-child { background: #f0f1f4; z-index: 1; }
+
+.bar-slider .bar-slider-btn { background: #3085EE; border: 0; border-radius: 50%; height: 0.6rem; padding: 0; position: absolute; right: 0; top: 50%; transform: translate(50%, -50%); width: 0.6rem; }
+
+.bar-slider .bar-slider-btn:active { box-shadow: 0 0 0 0.1rem #3085EE; }
+
+.card { background: #fff; border: 0.05rem solid #e7e9ed; border-radius: 0.1rem; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; }
+
+.card .card-header, .card .card-body, .card .card-footer { padding: 0.8rem; padding-bottom: 0; }
+
+.card .card-header:last-child, .card .card-body:last-child, .card .card-footer:last-child { padding-bottom: 0.8rem; }
+
+.card .card-body { -ms-flex: 1 1 auto; flex: 1 1 auto; }
+
+.card .card-image { padding-top: 0.8rem; }
+
+.card .card-image:first-child { padding-top: 0; }
+
+.card .card-image:first-child img { border-top-left-radius: 0.1rem; border-top-right-radius: 0.1rem; }
+
+.card .card-image:last-child img { border-bottom-left-radius: 0.1rem; border-bottom-right-radius: 0.1rem; }
+
+.chip { -ms-flex-align: center; align-items: center; background: #f0f1f4; border-radius: 5rem; display: -ms-inline-flexbox; display: inline-flex; font-size: 90%; height: 1.2rem; line-height: 0.8rem; margin: 0.1rem; max-width: 320px; overflow: hidden; padding: 0.2rem 0.4rem; text-decoration: none; text-overflow: ellipsis; vertical-align: middle; white-space: nowrap; }
+
+.chip.active { background: #3085EE; color: #fff; }
+
+.chip .avatar { margin-left: -0.4rem; margin-right: 0.2rem; }
+
+.chip .btn-clear { border-radius: 50%; transform: scale(0.75); }
+
+.dropdown { display: inline-block; position: relative; }
+
+.dropdown .menu { animation: slide-down .15s ease 1; display: none; left: 0; max-height: 50vh; overflow-y: auto; position: absolute; top: 100%; }
+
+.dropdown.dropdown-right .menu { left: auto; right: 0; }
+
+.dropdown.active .menu, .dropdown .dropdown-toggle:focus + .menu, .dropdown .menu:hover { display: block; }
+
+.dropdown .btn-group .dropdown-toggle:nth-last-child(2) { border-bottom-right-radius: 0.1rem; border-top-right-radius: 0.1rem; }
+
+.empty { background: #f8f9fa; border-radius: 0.1rem; color: #667189; text-align: center; padding: 3.2rem 1.6rem; }
+
+.empty .empty-icon { margin-bottom: 0.8rem; }
+
+.empty .empty-title, .empty .empty-subtitle { margin: 0.4rem auto; }
+
+.empty .empty-action { margin-top: 0.8rem; }
+
+.menu { box-shadow: 0 0.05rem 0.2rem rgba(69, 77, 93, 0.3); background: #fff; border-radius: 0.1rem; list-style: none; margin: 0; min-width: 180px; padding: 0.4rem; transform: translateY(0.2rem); z-index: 300; }
+
+.menu.menu-nav { background: transparent; box-shadow: none; }
+
+.menu .menu-item { margin-top: 0; padding: 0 0.4rem; position: relative; text-decoration: none; }
+
+.menu .menu-item > a { border-radius: 0.1rem; color: inherit; display: block; margin: 0 -0.4rem; padding: 0.2rem 0.4rem; text-decoration: none; }
+
+.menu .menu-item > a:focus, .menu .menu-item > a:hover { background: #e1edfd; color: #3085EE; }
+
+.menu .menu-item > a:active, .menu .menu-item > a.active { background: #e1edfd; color: #3085EE; }
+
+.menu .menu-item .form-checkbox, .menu .menu-item .form-radio, .menu .menu-item .form-switch { margin: 0.1rem 0; }
+
+.menu .menu-item + .menu-item { margin-top: 0.2rem; }
+
+.menu .menu-badge { -ms-flex-align: center; align-items: center; display: -ms-flexbox; display: flex; height: 100%; position: absolute; right: 0; top: 0; }
+
+.menu .menu-badge .label { margin-right: 0.4rem; }
+
+.modal { -ms-flex-align: center; align-items: center; bottom: 0; display: none; -ms-flex-pack: center; justify-content: center; left: 0; opacity: 0; overflow: hidden; padding: 0.4rem; position: fixed; right: 0; top: 0; }
+
+.modal:target, .modal.active { display: -ms-flexbox; display: flex; opacity: 1; z-index: 400; }
+
+.modal:target .modal-overlay, .modal.active .modal-overlay { background: rgba(248, 249, 250, 0.75); bottom: 0; cursor: default; display: block; left: 0; position: absolute; right: 0; top: 0; }
+
+.modal:target .modal-container, .modal.active .modal-container { animation: slide-down .2s ease 1; z-index: 1; }
+
+.modal.modal-sm .modal-container { max-width: 320px; padding: 0 0.4rem; }
+
+.modal.modal-lg .modal-overlay { background: #fff; }
+
+.modal.modal-lg .modal-container { box-shadow: none; max-width: 960px; }
+
+.modal-container { box-shadow: 0 0.2rem 0.5rem rgba(69, 77, 93, 0.3); background: #fff; border-radius: 0.1rem; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; max-height: 75vh; max-width: 640px; padding: 0 0.8rem; width: 100%; }
+
+.modal-container.modal-fullheight { max-height: 100vh; }
+
+.modal-container .modal-header { color: #454d5d; padding: 0.8rem; }
+
+.modal-container .modal-body { overflow-y: auto; padding: 0.8rem; position: relative; }
+
+.modal-container .modal-footer { padding: 0.8rem; text-align: right; }
+
+.nav { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; list-style: none; margin: 0.2rem 0; }
+
+.nav .nav-item a { color: #667189; padding: 0.2rem 0.4rem; text-decoration: none; }
+
+.nav .nav-item a:focus, .nav .nav-item a:hover { color: #3085EE; }
+
+.nav .nav-item.active > a { color: #50596c; font-weight: bold; }
+
+.nav .nav-item.active > a:focus, .nav .nav-item.active > a:hover { color: #3085EE; }
+
+.nav .nav { margin-bottom: 0.4rem; margin-left: 0.8rem; }
+
+.pagination { display: -ms-flexbox; display: flex; list-style: none; margin: 0.2rem 0; padding: 0.2rem 0; }
+
+.pagination .page-item { margin: 0.2rem 0.05rem; }
+
+.pagination .page-item span { display: inline-block; padding: 0.2rem 0.2rem; }
+
+.pagination .page-item a { border-radius: 0.1rem; display: inline-block; padding: 0.2rem 0.4rem; text-decoration: none; }
+
+.pagination .page-item a:focus, .pagination .page-item a:hover { color: #3085EE; }
+
+.pagination .page-item.disabled a { cursor: default; opacity: .5; pointer-events: none; }
+
+.pagination .page-item.active a { background: #3085EE; color: #fff; }
+
+.pagination .page-item.page-prev, .pagination .page-item.page-next { -ms-flex: 1 0 50%; flex: 1 0 50%; }
+
+.pagination .page-item.page-next { text-align: right; }
+
+.pagination .page-item .page-item-title { margin: 0; }
+
+.pagination .page-item .page-item-subtitle { margin: 0; opacity: .5; }
+
+.panel { border: 0.05rem solid #e7e9ed; border-radius: 0.1rem; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; }
+
+.panel .panel-header, .panel .panel-footer { -ms-flex: 0 0 auto; flex: 0 0 auto; padding: 0.8rem; }
+
+.panel .panel-nav { -ms-flex: 0 0 auto; flex: 0 0 auto; }
+
+.panel .panel-body { -ms-flex: 1 1 auto; flex: 1 1 auto; overflow-y: auto; padding: 0 0.8rem; }
+
+.popover { display: inline-block; position: relative; }
+
+.popover .popover-container { left: 50%; opacity: 0; padding: 0.4rem; position: absolute; top: 0; transform: translate(-50%, -50%) scale(0); transition: transform .2s; width: 320px; z-index: 300; }
+
+.popover *:focus + .popover-container, .popover:hover .popover-container { display: block; opacity: 1; transform: translate(-50%, -100%) scale(1); }
+
+.popover.popover-right .popover-container { left: 100%; top: 50%; }
+
+.popover.popover-right *:focus + .popover-container, .popover.popover-right:hover .popover-container { transform: translate(0, -50%) scale(1); }
+
+.popover.popover-bottom .popover-container { left: 50%; top: 100%; }
+
+.popover.popover-bottom *:focus + .popover-container, .popover.popover-bottom:hover .popover-container { transform: translate(-50%, 0) scale(1); }
+
+.popover.popover-left .popover-container { left: 0; top: 50%; }
+
+.popover.popover-left *:focus + .popover-container, .popover.popover-left:hover .popover-container { transform: translate(-100%, -50%) scale(1); }
+
+.popover .card { box-shadow: 0 0.2rem 0.5rem rgba(69, 77, 93, 0.3); border: 0; }
+
+.step { display: -ms-flexbox; display: flex; -ms-flex-wrap: nowrap; flex-wrap: nowrap; list-style: none; margin: 0.2rem 0; width: 100%; }
+
+.step .step-item { -ms-flex: 1 1 0px; flex: 1 1 0; margin-top: 0; min-height: 1rem; text-align: center; position: relative; }
+
+.step .step-item:not(:first-child)::before { background: #3085EE; content: ""; height: 2px; left: -50%; position: absolute; top: 9px; width: 100%; }
+
+.step .step-item a { color: #3085EE; display: inline-block; padding: 20px 10px 0; text-decoration: none; }
+
+.step .step-item a::before { background: #3085EE; border: 0.1rem solid #fff; border-radius: 50%; content: ""; display: block; height: 0.6rem; left: 50%; position: absolute; top: 0.2rem; transform: translateX(-50%); width: 0.6rem; z-index: 1; }
+
+.step .step-item.active a::before { background: #fff; border: 0.1rem solid #3085EE; }
+
+.step .step-item.active ~ .step-item::before { background: #e7e9ed; }
+
+.step .step-item.active ~ .step-item a { color: #acb3c2; }
+
+.step .step-item.active ~ .step-item a::before { background: #e7e9ed; }
+
+.tab { -ms-flex-align: center; align-items: center; border-bottom: 0.05rem solid #e7e9ed; display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; list-style: none; margin: 0.2rem 0 0.15rem 0; }
+
+.tab .tab-item { margin-top: 0; }
+
+.tab .tab-item a { border-bottom: 0.1rem solid transparent; color: inherit; display: block; margin: 0 0.4rem 0 0; padding: 0.4rem 0.2rem 0.3rem 0.2rem; text-decoration: none; }
+
+.tab .tab-item a:focus, .tab .tab-item a:hover { color: #3085EE; }
+
+.tab .tab-item.active a, .tab .tab-item a.active { border-bottom-color: #3085EE; color: #3085EE; }
+
+.tab .tab-item.tab-action { -ms-flex: 1 0 auto; flex: 1 0 auto; text-align: right; }
+
+.tab .tab-item .btn-clear { margin-top: -0.2rem; }
+
+.tab.tab-block .tab-item { -ms-flex: 1 0 0px; flex: 1 0 0; text-align: center; }
+
+.tab.tab-block .tab-item a { margin: 0; }
+
+.tab.tab-block .tab-item .badge[data-badge]::after { position: absolute; right: 0.1rem; top: 0.1rem; transform: translate(0, 0); }
+
+.tab:not(.tab-block) .badge { padding-right: 0; }
+
+.tile { -ms-flex-line-pack: justify; align-content: space-between; -ms-flex-align: start; align-items: flex-start; display: -ms-flexbox; display: flex; }
+
+.tile .tile-icon, .tile .tile-action { -ms-flex: 0 0 auto; flex: 0 0 auto; }
+
+.tile .tile-content { -ms-flex: 1 1 auto; flex: 1 1 auto; }
+
+.tile .tile-content:not(:first-child) { padding-left: 0.4rem; }
+
+.tile .tile-content:not(:last-child) { padding-right: 0.4rem; }
+
+.tile .tile-title, .tile .tile-subtitle { line-height: 1.2rem; }
+
+.tile.tile-centered { -ms-flex-align: center; align-items: center; }
+
+.tile.tile-centered .tile-content { overflow: hidden; }
+
+.tile.tile-centered .tile-title, .tile.tile-centered .tile-subtitle { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; margin-bottom: 0; }
+
+.toast { background: rgba(69, 77, 93, 0.95); border-color: #454d5d; border: 0.05rem solid #454d5d; border-radius: 0.1rem; color: #fff; display: block; padding: 0.4rem; width: 100%; }
+
+.toast.toast-primary { background: rgba(48, 133, 238, 0.95); border-color: #3085EE; }
+
+.toast.toast-success { background: rgba(50, 182, 67, 0.95); border-color: #32b643; }
+
+.toast.toast-warning { background: rgba(255, 183, 0, 0.95); border-color: #ffb700; }
+
+.toast.toast-error { background: rgba(232, 86, 0, 0.95); border-color: #e85600; }
+
+.toast a { color: #fff; text-decoration: underline; }
+
+.toast a:focus, .toast a:hover, .toast a:active, .toast a.active { opacity: .75; }
+
+.toast .btn-clear { margin: 0.1rem; }
+
+.toast p:last-child { margin-bottom: 0; }
+
+.tooltip { position: relative; }
+
+.tooltip::after { background: rgba(69, 77, 93, 0.95); border-radius: 0.1rem; bottom: 100%; color: #fff; content: attr(data-tooltip); display: block; font-size: 0.7rem; left: 50%; max-width: 320px; opacity: 0; overflow: hidden; padding: 0.2rem 0.4rem; pointer-events: none; position: absolute; text-overflow: ellipsis; transform: translate(-50%, 0.4rem); transition: opacity .2s, transform .2s; white-space: pre; z-index: 300; }
+
+.tooltip:focus::after, .tooltip:hover::after { opacity: 1; transform: translate(-50%, -0.2rem); }
+
+.tooltip[disabled], .tooltip.disabled { pointer-events: auto; }
+
+.tooltip.tooltip-right::after { bottom: 50%; left: 100%; transform: translate(-0.2rem, 50%); }
+
+.tooltip.tooltip-right:focus::after, .tooltip.tooltip-right:hover::after { transform: translate(0.2rem, 50%); }
+
+.tooltip.tooltip-bottom::after { bottom: auto; top: 100%; transform: translate(-50%, -0.4rem); }
+
+.tooltip.tooltip-bottom:focus::after, .tooltip.tooltip-bottom:hover::after { transform: translate(-50%, 0.2rem); }
+
+.tooltip.tooltip-left::after { bottom: 50%; left: auto; right: 100%; transform: translate(0.4rem, 50%); }
+
+.tooltip.tooltip-left:focus::after, .tooltip.tooltip-left:hover::after { transform: translate(-0.2rem, 50%); }
+
+@keyframes loading { 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); } }
+
+@keyframes slide-down { 0% { opacity: 0;
+ transform: translateY(-1.6rem); }
+ 100% { opacity: 1;
+ transform: translateY(0); } }
+
+.text-primary { color: #3085EE !important; }
+
+a.text-primary:focus, a.text-primary:hover { color: #1877ec; }
+
+a.text-primary:visited { color: #4893f0; }
+
+.text-secondary { color: #d3e5fb !important; }
+
+a.text-secondary:focus, a.text-secondary:hover { color: #bbd7f9; }
+
+a.text-secondary:visited { color: #eaf3fd; }
+
+.text-gray { color: #acb3c2 !important; }
+
+a.text-gray:focus, a.text-gray:hover { color: #9ea6b7; }
+
+a.text-gray:visited { color: #bbc1cd; }
+
+.text-light { color: #fff !important; }
+
+a.text-light:focus, a.text-light:hover { color: #f2f2f2; }
+
+a.text-light:visited { color: white; }
+
+.text-dark { color: #50596c !important; }
+
+a.text-dark:focus, a.text-dark:hover { color: #454d5d; }
+
+a.text-dark:visited { color: #5b657a; }
+
+.text-success { color: #32b643 !important; }
+
+a.text-success:focus, a.text-success:hover { color: #2da23c; }
+
+a.text-success:visited { color: #39c94b; }
+
+.text-warning { color: #ffb700 !important; }
+
+a.text-warning:focus, a.text-warning:hover { color: #e6a500; }
+
+a.text-warning:visited { color: #ffbe1a; }
+
+.text-error { color: #e85600 !important; }
+
+a.text-error:focus, a.text-error:hover { color: #cf4d00; }
+
+a.text-error:visited { color: #ff6003; }
+
+.bg-primary { background: #3085EE !important; color: #fff; }
+
+.bg-secondary { background: #e1edfd !important; }
+
+.bg-dark { background: #454d5d !important; color: #fff; }
+
+.bg-gray { background: #f8f9fa !important; }
+
+.bg-success { background: #32b643 !important; color: #fff; }
+
+.bg-warning { background: #ffb700 !important; color: #fff; }
+
+.bg-error { background: #e85600 !important; color: #fff; }
+
+.c-hand { cursor: pointer; }
+
+.c-move { cursor: move; }
+
+.c-zoom-in { cursor: zoom-in; }
+
+.c-zoom-out { cursor: zoom-out; }
+
+.c-not-allowed { cursor: not-allowed; }
+
+.c-auto { cursor: auto; }
+
+.d-block { display: block; }
+
+.d-inline { display: inline; }
+
+.d-inline-block { display: inline-block; }
+
+.d-flex { display: -ms-flexbox; display: flex; }
+
+.d-inline-flex { display: -ms-inline-flexbox; display: inline-flex; }
+
+.d-none, .d-hide { display: none !important; }
+
+.d-visible { visibility: visible; }
+
+.d-invisible { visibility: hidden; }
+
+.text-hide { background: transparent; border: 0; color: transparent; font-size: 0; line-height: 0; text-shadow: none; }
+
+.text-assistive { border: 0; clip: rect(0, 0, 0, 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
+
+.divider, .divider-vert { display: block; position: relative; }
+
+.divider[data-content]::after, .divider-vert[data-content]::after { background: #fff; color: #acb3c2; content: attr(data-content); display: inline-block; font-size: 0.7rem; padding: 0 0.4rem; transform: translateY(-0.65rem); }
+
+.divider { border-top: 0.05rem solid #fefefe; height: 0.05rem; margin: 0.4rem 0; }
+
+.divider[data-content] { margin: 0.8rem 0; }
+
+.divider-vert { display: block; padding: 0.8rem; }
+
+.divider-vert::before { border-left: 0.05rem solid #e7e9ed; bottom: 0.4rem; content: ""; display: block; left: 50%; position: absolute; top: 0.4rem; transform: translateX(-50%); }
+
+.divider-vert[data-content]::after { left: 50%; padding: 0.2rem 0; position: absolute; top: 50%; transform: translate(-50%, -50%); }
+
+.loading { color: transparent !important; min-height: 0.8rem; pointer-events: none; position: relative; }
+
+.loading::after { animation: loading 500ms infinite linear; border: 0.1rem solid #3085EE; border-radius: 50%; border-right-color: transparent; border-top-color: transparent; content: ""; display: block; height: 0.8rem; left: 50%; margin-left: -0.4rem; margin-top: -0.4rem; position: absolute; top: 50%; width: 0.8rem; z-index: 1; }
+
+.loading.loading-lg { min-height: 2rem; }
+
+.loading.loading-lg::after { height: 1.6rem; margin-left: -0.8rem; margin-top: -0.8rem; width: 1.6rem; }
+
+.clearfix::after { clear: both; content: ""; display: table; }
+
+.float-left { float: left !important; }
+
+.float-right { float: right !important; }
+
+.p-relative { position: relative !important; }
+
+.p-absolute { position: absolute !important; }
+
+.p-fixed { position: fixed !important; }
+
+.p-sticky { position: -webkit-sticky !important; position: sticky !important; }
+
+.p-centered { display: block; float: none; margin-left: auto; margin-right: auto; }
+
+.flex-centered { -ms-flex-align: center; align-items: center; display: -ms-flexbox; display: flex; -ms-flex-pack: center; justify-content: center; }
+
+.m-0 { margin: 0 !important; }
+
+.mb-0 { margin-bottom: 0 !important; }
+
+.ml-0 { margin-left: 0 !important; }
+
+.mr-0 { margin-right: 0 !important; }
+
+.mt-0 { margin-top: 0 !important; }
+
+.mx-0 { margin-left: 0 !important; margin-right: 0 !important; }
+
+.my-0 { margin-bottom: 0 !important; margin-top: 0 !important; }
+
+.m-1 { margin: 0.2rem !important; }
+
+.mb-1 { margin-bottom: 0.2rem !important; }
+
+.ml-1 { margin-left: 0.2rem !important; }
+
+.mr-1 { margin-right: 0.2rem !important; }
+
+.mt-1 { margin-top: 0.2rem !important; }
+
+.mx-1 { margin-left: 0.2rem !important; margin-right: 0.2rem !important; }
+
+.my-1 { margin-bottom: 0.2rem !important; margin-top: 0.2rem !important; }
+
+.m-2 { margin: 0.4rem !important; }
+
+.mb-2 { margin-bottom: 0.4rem !important; }
+
+.ml-2 { margin-left: 0.4rem !important; }
+
+.mr-2 { margin-right: 0.4rem !important; }
+
+.mt-2 { margin-top: 0.4rem !important; }
+
+.mx-2 { margin-left: 0.4rem !important; margin-right: 0.4rem !important; }
+
+.my-2 { margin-bottom: 0.4rem !important; margin-top: 0.4rem !important; }
+
+.p-0 { padding: 0 !important; }
+
+.pb-0 { padding-bottom: 0 !important; }
+
+.pl-0 { padding-left: 0 !important; }
+
+.pr-0 { padding-right: 0 !important; }
+
+.pt-0 { padding-top: 0 !important; }
+
+.px-0 { padding-left: 0 !important; padding-right: 0 !important; }
+
+.py-0 { padding-bottom: 0 !important; padding-top: 0 !important; }
+
+.p-1 { padding: 0.2rem !important; }
+
+.pb-1 { padding-bottom: 0.2rem !important; }
+
+.pl-1 { padding-left: 0.2rem !important; }
+
+.pr-1 { padding-right: 0.2rem !important; }
+
+.pt-1 { padding-top: 0.2rem !important; }
+
+.px-1 { padding-left: 0.2rem !important; padding-right: 0.2rem !important; }
+
+.py-1 { padding-bottom: 0.2rem !important; padding-top: 0.2rem !important; }
+
+.p-2 { padding: 0.4rem !important; }
+
+.pb-2 { padding-bottom: 0.4rem !important; }
+
+.pl-2 { padding-left: 0.4rem !important; }
+
+.pr-2 { padding-right: 0.4rem !important; }
+
+.pt-2 { padding-top: 0.4rem !important; }
+
+.px-2 { padding-left: 0.4rem !important; padding-right: 0.4rem !important; }
+
+.py-2 { padding-bottom: 0.4rem !important; padding-top: 0.4rem !important; }
+
+.s-rounded { border-radius: 0.1rem; }
+
+.s-circle { border-radius: 50%; }
+
+.text-left { text-align: left; }
+
+.text-right { text-align: right; }
+
+.text-center { text-align: center; }
+
+.text-justify { text-align: justify; }
+
+.text-lowercase { text-transform: lowercase; }
+
+.text-uppercase { text-transform: uppercase; }
+
+.text-capitalize { text-transform: capitalize; }
+
+.text-normal { font-weight: normal; }
+
+.text-bold { font-weight: bold; }
+
+.text-italic { font-style: italic; }
+
+.text-large { font-size: 1.2em; }
+
+.text-ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
+
+.text-clip { overflow: hidden; text-overflow: clip; white-space: nowrap; }
+
+.text-break { -webkit-hyphens: auto; -ms-hyphens: auto; hyphens: auto; word-break: break-word; word-wrap: break-word; }
+
+/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY3RyZS5jc3MiLCJzb3VyY2VzIjpbInNwZWN0cmUuc2NzcyIsInRoZW1lL192YXJpYWJsZXMuc2NzcyIsInNwZWN0cmUvX3ZhcmlhYmxlcy5zY3NzIiwic3BlY3RyZS9fbWl4aW5zLnNjc3MiLCJzcGVjdHJlL21peGlucy9fYXZhdGFyLnNjc3MiLCJzcGVjdHJlL21peGlucy9fYnV0dG9uLnNjc3MiLCJzcGVjdHJlL21peGlucy9fY2xlYXJmaXguc2NzcyIsInNwZWN0cmUvbWl4aW5zL19jb2xvci5zY3NzIiwic3BlY3RyZS9taXhpbnMvX2xhYmVsLnNjc3MiLCJzcGVjdHJlL21peGlucy9fcG9zaXRpb24uc2NzcyIsInNwZWN0cmUvbWl4aW5zL19zaGFkb3cuc2NzcyIsInNwZWN0cmUvbWl4aW5zL190ZXh0LnNjc3MiLCJzcGVjdHJlL21peGlucy9fdG9hc3Quc2NzcyIsInNwZWN0cmUvX25vcm1hbGl6ZS5zY3NzIiwic3BlY3RyZS9fYmFzZS5zY3NzIiwic3BlY3RyZS9fdHlwb2dyYXBoeS5zY3NzIiwic3BlY3RyZS9fYXNpYW4uc2NzcyIsInNwZWN0cmUvX3RhYmxlcy5zY3NzIiwic3BlY3RyZS9fYnV0dG9ucy5zY3NzIiwic3BlY3RyZS9fZm9ybXMuc2NzcyIsInNwZWN0cmUvX2xhYmVscy5zY3NzIiwic3BlY3RyZS9fY29kZXMuc2NzcyIsInNwZWN0cmUvX21lZGlhLnNjc3MiLCJzcGVjdHJlL19sYXlvdXQuc2NzcyIsInNwZWN0cmUvX2hlcm8uc2NzcyIsInNwZWN0cmUvX25hdmJhci5zY3NzIiwic3BlY3RyZS9fYWNjb3JkaW9ucy5zY3NzIiwic3BlY3RyZS9fYXZhdGFycy5zY3NzIiwic3BlY3RyZS9fYmFkZ2VzLnNjc3MiLCJzcGVjdHJlL19icmVhZGNydW1icy5zY3NzIiwic3BlY3RyZS9fYmFycy5zY3NzIiwic3BlY3RyZS9fY2FyZHMuc2NzcyIsInNwZWN0cmUvX2NoaXBzLnNjc3MiLCJzcGVjdHJlL19kcm9wZG93bnMuc2NzcyIsInNwZWN0cmUvX2VtcHR5LnNjc3MiLCJzcGVjdHJlL19tZW51cy5zY3NzIiwic3BlY3RyZS9fbW9kYWxzLnNjc3MiLCJzcGVjdHJlL19uYXZzLnNjc3MiLCJzcGVjdHJlL19wYWdpbmF0aW9uLnNjc3MiLCJzcGVjdHJlL19wYW5lbHMuc2NzcyIsInNwZWN0cmUvX3BvcG92ZXJzLnNjc3MiLCJzcGVjdHJlL19zdGVwcy5zY3NzIiwic3BlY3RyZS9fdGFicy5zY3NzIiwic3BlY3RyZS9fdGlsZXMuc2NzcyIsInNwZWN0cmUvX3RvYXN0cy5zY3NzIiwic3BlY3RyZS9fdG9vbHRpcHMuc2NzcyIsInNwZWN0cmUvX2FuaW1hdGlvbnMuc2NzcyIsInNwZWN0cmUvX3V0aWxpdGllcy5zY3NzIiwic3BlY3RyZS91dGlsaXRpZXMvX2NvbG9ycy5zY3NzIiwic3BlY3RyZS91dGlsaXRpZXMvX2N1cnNvcnMuc2NzcyIsInNwZWN0cmUvdXRpbGl0aWVzL19kaXNwbGF5LnNjc3MiLCJzcGVjdHJlL3V0aWxpdGllcy9fZGl2aWRlci5zY3NzIiwic3BlY3RyZS91dGlsaXRpZXMvX2xvYWRpbmcuc2NzcyIsInNwZWN0cmUvdXRpbGl0aWVzL19wb3NpdGlvbi5zY3NzIiwic3BlY3RyZS91dGlsaXRpZXMvX3NoYXBlcy5zY3NzIiwic3BlY3RyZS91dGlsaXRpZXMvX3RleHQuc2NzcyIsInRoZW1lL19leHRlbnNpb25zLnNjc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVmFyaWFibGVzIGFuZCBtaXhpbnNcbkBpbXBvcnQgXCJ0aGVtZS92YXJpYWJsZXNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3ZhcmlhYmxlc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvbWl4aW5zXCI7XG5cbi8qISBTcGVjdHJlLmNzcyB2I3skdmVyc2lvbn0gfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vcGljdHVyZXBhbjIvc3BlY3RyZSAqL1xuLy8gUmVzZXQgYW5kIGRlcGVuZGVuY2llc1xuQGltcG9ydCBcInNwZWN0cmUvbm9ybWFsaXplXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9iYXNlXCI7XG5cbi8vIEVsZW1lbnRzXG5AaW1wb3J0IFwic3BlY3RyZS90eXBvZ3JhcGh5XCI7XG5AaW1wb3J0IFwic3BlY3RyZS9hc2lhblwiO1xuQGltcG9ydCBcInNwZWN0cmUvdGFibGVzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9idXR0b25zXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9mb3Jtc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvbGFiZWxzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9jb2Rlc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvbWVkaWFcIjtcblxuLy8gTGF5b3V0XG5AaW1wb3J0IFwic3BlY3RyZS9sYXlvdXRcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL2hlcm9cIjtcbkBpbXBvcnQgXCJzcGVjdHJlL25hdmJhclwiO1xuXG4vLyBDb21wb25lbnRzXG5AaW1wb3J0IFwic3BlY3RyZS9hY2NvcmRpb25zXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9hdmF0YXJzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9iYWRnZXNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL2JyZWFkY3J1bWJzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9iYXJzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9jYXJkc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvY2hpcHNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL2Ryb3Bkb3duc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvZW1wdHlcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL21lbnVzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS9tb2RhbHNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL25hdnNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3BhZ2luYXRpb25cIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3BhbmVsc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvcG9wb3ZlcnNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3N0ZXBzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS90YWJzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS90aWxlc1wiO1xuQGltcG9ydCBcInNwZWN0cmUvdG9hc3RzXCI7XG5AaW1wb3J0IFwic3BlY3RyZS90b29sdGlwc1wiO1xuXG4vLyBVdGlsaXR5IGNsYXNzZXNcbkBpbXBvcnQgXCJzcGVjdHJlL2FuaW1hdGlvbnNcIjtcbkBpbXBvcnQgXCJzcGVjdHJlL3V0aWxpdGllc1wiO1xuXG4vLyBFeHRyYXNcbkBpbXBvcnQgXCJ0aGVtZS9leHRlbnNpb25zXCI7XG4iLCIvLyBTcGVjdHJlIE92ZXJyaWRlc1xuJHByaW1hcnktY29sb3I6ICMzMDg1RUUgIWRlZmF1bHQ7XG4kZGFyay1jb2xvcjogIzQ1NGQ1ZCAhZGVmYXVsdDtcbiRsaWdodC1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcbiRncmF5LWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA0MCUpICFkZWZhdWx0O1xuJGdyYXktY29sb3ItZGFyazogZGFya2VuKCRncmF5LWNvbG9yLCAyNSUpICFkZWZhdWx0O1xuJGJvcmRlci1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNjAlKSAhZGVmYXVsdDtcbiRiZy1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNjYlKSAhZGVmYXVsdDtcbiRib2R5LWZvbnQtY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDUlKSAhZGVmYXVsdDtcblxuLy8gTGF5b3V0XG4kaG9yaXotcGFkZGluZzogMXJlbTtcbiR2ZXJ0LXBhZGRpbmc6IDJyZW0gMCAycmVtO1xuXG4vLyBGb250c1xuJG1pbi1yZXNwb25zaXZlLWZvbnQtc2l6ZTogMTZweDtcblxuLy8gSGVhZGVyXG4kaGVhZGVyLWhlaWdodC1sYXJnZTogNHJlbTtcbiRoZWFkZXItaGVpZ2h0LXNtYWxsOiAyLjNyZW07XG4kaGVhZGVyLWNvbG9yLWRhcms6ICMyMjI7XG4kaGVhZGVyLXRleHQtbGlnaHQ6ICRsaWdodC1jb2xvcjtcbiRoZWFkZXItdGV4dC1kYXJrOiBkYXJrZW4oJGRhcmstY29sb3IsIDE1JSk7XG5cbi8vIERyb3Bkb3duIE1lbnVcbiRkcm9wbWVudS1iZzogJGxpZ2h0LWNvbG9yO1xuJGRyb3BtZW51LWhvdmVyLXRleHQ6ICRwcmltYXJ5LWNvbG9yO1xuJGRyb3BtZW51LWhvcml6LXBhZGRpbmc6IDIwcHg7XG4kZHJvcG1lbnUtdmVydC1wYWRkaW5nOiA3cHg7XG4kZHJvcG1lbnUtY2hpbGQtcGFkZGluZzogMTBweDtcbiRkcm9wbWVudS1zaGFkb3c6IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cbi8vIE1vYmlsZSBNZW51XG4kbW9iaWxlLWNvbG9yLW1haW46ICRwcmltYXJ5LWNvbG9yO1xuJG1vYmlsZS1jb2xvci1hY3RpdmU6ICNGRkY7XG4kbW9iaWxlLWNvbG9yLWxpbms6ICNGRkY7XG4kbW9iaWxlLWJ1dHRvbi1oZWlnaHQ6IDI0cHg7XG4kbW9iaWxlLWJ1dHRvbi13aWR0aDogMjhweDsiLCIvLyBDb3JlIHZhcmlhYmxlc1xuJHZlcnNpb246IFwiMC41LjhcIjtcblxuLy8gQ29yZSBmZWF0dXJlc1xuJHJ0bDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIENvcmUgY29sb3JzXG4kcHJpbWFyeS1jb2xvcjogIzU3NTVkOSAhZGVmYXVsdDtcbiRwcmltYXJ5LWNvbG9yLWRhcms6IGRhcmtlbigkcHJpbWFyeS1jb2xvciwgMyUpICFkZWZhdWx0O1xuJHByaW1hcnktY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJHByaW1hcnktY29sb3IsIDMlKSAhZGVmYXVsdDtcbiRzZWNvbmRhcnktY29sb3I6IGxpZ2h0ZW4oJHByaW1hcnktY29sb3IsIDM3LjUlKSAhZGVmYXVsdDtcbiRzZWNvbmRhcnktY29sb3ItZGFyazogZGFya2VuKCRzZWNvbmRhcnktY29sb3IsIDMlKSAhZGVmYXVsdDtcbiRzZWNvbmRhcnktY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJHNlY29uZGFyeS1jb2xvciwgMyUpICFkZWZhdWx0O1xuXG4vLyBHcmF5IGNvbG9yc1xuJGRhcmstY29sb3I6ICMzMDM3NDIgIWRlZmF1bHQ7XG4kbGlnaHQtY29sb3I6ICNmZmYgIWRlZmF1bHQ7XG4kZ3JheS1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNTUlKSAhZGVmYXVsdDtcbiRncmF5LWNvbG9yLWRhcms6IGRhcmtlbigkZ3JheS1jb2xvciwgMzAlKSAhZGVmYXVsdDtcbiRncmF5LWNvbG9yLWxpZ2h0OiBsaWdodGVuKCRncmF5LWNvbG9yLCAyMCUpICFkZWZhdWx0O1xuXG4kYm9yZGVyLWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA2NSUpICFkZWZhdWx0O1xuJGJvcmRlci1jb2xvci1kYXJrOiBkYXJrZW4oJGJvcmRlci1jb2xvciwgMTAlKSAhZGVmYXVsdDtcbiRib3JkZXItY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJGJvcmRlci1jb2xvciwgOCUpICFkZWZhdWx0O1xuJGJnLWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA3NSUpICFkZWZhdWx0O1xuJGJnLWNvbG9yLWRhcms6IGRhcmtlbigkYmctY29sb3IsIDMlKSAhZGVmYXVsdDtcbiRiZy1jb2xvci1saWdodDogJGxpZ2h0LWNvbG9yICFkZWZhdWx0O1xuXG4vLyBDb250cm9sIGNvbG9yc1xuJHN1Y2Nlc3MtY29sb3I6ICMzMmI2NDMgIWRlZmF1bHQ7XG4kd2FybmluZy1jb2xvcjogI2ZmYjcwMCAhZGVmYXVsdDtcbiRlcnJvci1jb2xvcjogI2U4NTYwMCAhZGVmYXVsdDtcblxuLy8gT3RoZXIgY29sb3JzXG4kY29kZS1jb2xvcjogI2Q3M2U0OCAhZGVmYXVsdDtcbiRoaWdobGlnaHQtY29sb3I6ICNmZmU5YjMgIWRlZmF1bHQ7XG4kYm9keS1iZzogJGJnLWNvbG9yLWxpZ2h0ICFkZWZhdWx0O1xuJGJvZHktZm9udC1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNSUpICFkZWZhdWx0O1xuJGxpbmstY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuJGxpbmstY29sb3ItZGFyazogZGFya2VuKCRsaW5rLWNvbG9yLCAxMCUpICFkZWZhdWx0O1xuJGxpbmstY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJGxpbmstY29sb3IsIDEwJSkgIWRlZmF1bHQ7XG5cbi8vIEZvbnRzXG4vLyBDcmVkaXQ6IGh0dHBzOi8vd3d3LnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMTUvMTEvdXNpbmctc3lzdGVtLXVpLWZvbnRzLXByYWN0aWNhbC1ndWlkZS9cbiRiYXNlLWZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8gIWRlZmF1bHQ7XG4kbW9uby1mb250LWZhbWlseTogXCJTRiBNb25vXCIsIFwiU2Vnb2UgVUkgTW9ub1wiLCBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2UgIWRlZmF1bHQ7XG4kZmFsbGJhY2stZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgc2Fucy1zZXJpZiAhZGVmYXVsdDtcbiRjamstemgtaGFucy1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksIFwiUGluZ0ZhbmcgU0NcIiwgXCJIaXJhZ2lubyBTYW5zIEdCXCIsIFwiTWljcm9zb2Z0IFlhSGVpXCIsICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRjamstemgtaGFudC1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksIFwiUGluZ0ZhbmcgVENcIiwgXCJIaXJhZ2lubyBTYW5zIENOU1wiLCBcIk1pY3Jvc29mdCBKaGVuZ0hlaVwiLCAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG4kY2prLWpwLWZvbnQtZmFtaWx5OiAkYmFzZS1mb250LWZhbWlseSwgXCJIaXJhZ2lubyBTYW5zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwiWXUgR290aGljXCIsIFl1R290aGljLCBNZWlyeW8sICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRjamsta28tZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5LCBcIk1hbGd1biBHb3RoaWNcIiwgJGZhbGxiYWNrLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuJGJvZHktZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5LCAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG5cbi8vIFVuaXQgc2l6ZXNcbiR1bml0LW86IC4wNXJlbSAhZGVmYXVsdDtcbiR1bml0LWg6IC4xcmVtICFkZWZhdWx0O1xuJHVuaXQtMTogLjJyZW0gIWRlZmF1bHQ7XG4kdW5pdC0yOiAuNHJlbSAhZGVmYXVsdDtcbiR1bml0LTM6IC42cmVtICFkZWZhdWx0O1xuJHVuaXQtNDogLjhyZW0gIWRlZmF1bHQ7XG4kdW5pdC01OiAxcmVtICFkZWZhdWx0O1xuJHVuaXQtNjogMS4ycmVtICFkZWZhdWx0O1xuJHVuaXQtNzogMS40cmVtICFkZWZhdWx0O1xuJHVuaXQtODogMS42cmVtICFkZWZhdWx0O1xuJHVuaXQtOTogMS44cmVtICFkZWZhdWx0O1xuJHVuaXQtMTA6IDJyZW0gIWRlZmF1bHQ7XG4kdW5pdC0xMjogMi40cmVtICFkZWZhdWx0O1xuJHVuaXQtMTY6IDMuMnJlbSAhZGVmYXVsdDtcblxuLy8gRm9udCBzaXplc1xuJGh0bWwtZm9udC1zaXplOiAyMHB4ICFkZWZhdWx0O1xuJGh0bWwtbGluZS1oZWlnaHQ6IDEuNSAhZGVmYXVsdDtcbiRmb250LXNpemU6IC44cmVtICFkZWZhdWx0O1xuJGZvbnQtc2l6ZS1zbTogLjdyZW0gIWRlZmF1bHQ7XG4kZm9udC1zaXplLWxnOiAuOXJlbSAhZGVmYXVsdDtcbiRsaW5lLWhlaWdodDogMS4ycmVtICFkZWZhdWx0O1xuXG4vLyBTaXplc1xuJGxheW91dC1zcGFjaW5nOiAkdW5pdC0yICFkZWZhdWx0O1xuJGxheW91dC1zcGFjaW5nLXNtOiAkdW5pdC0xICFkZWZhdWx0O1xuJGxheW91dC1zcGFjaW5nLWxnOiAkdW5pdC00ICFkZWZhdWx0O1xuJGJvcmRlci1yYWRpdXM6ICR1bml0LWggIWRlZmF1bHQ7XG4kYm9yZGVyLXdpZHRoOiAkdW5pdC1vICFkZWZhdWx0O1xuJGJvcmRlci13aWR0aC1sZzogJHVuaXQtaCAhZGVmYXVsdDtcbiRjb250cm9sLXNpemU6ICR1bml0LTkgIWRlZmF1bHQ7XG4kY29udHJvbC1zaXplLXNtOiAkdW5pdC03ICFkZWZhdWx0O1xuJGNvbnRyb2wtc2l6ZS1sZzogJHVuaXQtMTAgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXg6ICR1bml0LTIgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXgtc206ICR1bml0LTIgKiAuNzUgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXgtbGc6ICR1bml0LTIgKiAxLjUgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXk6ICgkY29udHJvbC1zaXplIC0gJGxpbmUtaGVpZ2h0KSAvIDIgLSAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuJGNvbnRyb2wtcGFkZGluZy15LXNtOiAoJGNvbnRyb2wtc2l6ZS1zbSAtICRsaW5lLWhlaWdodCkgLyAyIC0gJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteS1sZzogKCRjb250cm9sLXNpemUtbGcgLSAkbGluZS1oZWlnaHQpIC8gMiAtICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XG4kY29udHJvbC1pY29uLXNpemU6IC44cmVtICFkZWZhdWx0O1xuXG4kY29udHJvbC13aWR0aC14czogMTgwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC1zbTogMzIwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC1tZDogNjQwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC1sZzogOTYwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC14bDogMTI4MHB4ICFkZWZhdWx0O1xuXG4vLyBSZXNwb25zaXZlIGJyZWFrcG9pbnRzXG4kc2l6ZS14czogNDgwcHggIWRlZmF1bHQ7XG4kc2l6ZS1zbTogNjAwcHggIWRlZmF1bHQ7XG4kc2l6ZS1tZDogODQwcHggIWRlZmF1bHQ7XG4kc2l6ZS1sZzogOTYwcHggIWRlZmF1bHQ7XG4kc2l6ZS14bDogMTI4MHB4ICFkZWZhdWx0O1xuJHNpemUtMng6IDE0NDBweCAhZGVmYXVsdDtcblxuJHJlc3BvbnNpdmUtYnJlYWtwb2ludDogJHNpemUteHMgIWRlZmF1bHQ7XG5cbi8vIFotaW5kZXhcbiR6aW5kZXgtMDogMSAhZGVmYXVsdDtcbiR6aW5kZXgtMTogMTAwICFkZWZhdWx0O1xuJHppbmRleC0yOiAyMDAgIWRlZmF1bHQ7XG4kemluZGV4LTM6IDMwMCAhZGVmYXVsdDtcbiR6aW5kZXgtNDogNDAwICFkZWZhdWx0O1xuIiwiLy8gTWl4aW5zXG5AaW1wb3J0IFwibWl4aW5zL2F2YXRhclwiO1xuQGltcG9ydCBcIm1peGlucy9idXR0b25cIjtcbkBpbXBvcnQgXCJtaXhpbnMvY2xlYXJmaXhcIjtcbkBpbXBvcnQgXCJtaXhpbnMvY29sb3JcIjtcbkBpbXBvcnQgXCJtaXhpbnMvbGFiZWxcIjtcbkBpbXBvcnQgXCJtaXhpbnMvcG9zaXRpb25cIjtcbkBpbXBvcnQgXCJtaXhpbnMvc2hhZG93XCI7XG5AaW1wb3J0IFwibWl4aW5zL3RleHRcIjtcbkBpbXBvcnQgXCJtaXhpbnMvdG9hc3RcIjsiLCIvLyBBdmF0YXIgbWl4aW5cbkBtaXhpbiBhdmF0YXItYmFzZSgkc2l6ZTogJHVuaXQtOCkge1xuICBmb250LXNpemU6ICRzaXplIC8gMjtcbiAgaGVpZ2h0OiAkc2l6ZTtcbiAgd2lkdGg6ICRzaXplO1xufVxuIiwiLy8gQnV0dG9uIHZhcmlhbnQgbWl4aW5cbkBtaXhpbiBidXR0b24tdmFyaWFudCgkY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gIGJhY2tncm91bmQ6ICRjb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAzJSk7XG4gIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICY6Zm9jdXMge1xuICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCRjb2xvcik7XG4gIH1cbiAgJjpmb2N1cyxcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogZGFya2VuKCRjb2xvciwgMiUpO1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRjb2xvciwgNSUpO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gIH1cbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJGNvbG9yLCA3JSk7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAxMCUpO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gIH1cbiAgJi5sb2FkaW5nIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICBib3JkZXItbGVmdC1jb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gYnV0dG9uLW91dGxpbmUtdmFyaWFudCgkY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gIGJhY2tncm91bmQ6ICRsaWdodC1jb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiAkY29sb3I7XG4gIGNvbG9yOiAkY29sb3I7XG4gICY6Zm9jdXMge1xuICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCRjb2xvcik7XG4gIH1cbiAgJjpmb2N1cyxcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogbGlnaHRlbigkY29sb3IsIDUwJSk7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAyJSk7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgfVxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUge1xuICAgIGJhY2tncm91bmQ6ICRjb2xvcjtcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkY29sb3IsIDUlKTtcbiAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICB9XG4gICYubG9hZGluZyB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGNvbG9yO1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICRjb2xvcjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENsZWFyZml4IG1peGluXG5AbWl4aW4gY2xlYXJmaXgoKSB7XG4gICY6OmFmdGVyIHtcbiAgICBjbGVhcjogYm90aDtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICB9XG59XG4iLCIvLyBCYWNrZ3JvdW5kIGNvbG9yIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiBiZy1jb2xvci12YXJpYW50KCRuYW1lOiBcIi5iZy1wcmltYXJ5XCIsICRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgI3skbmFtZX0ge1xuICAgIGJhY2tncm91bmQ6ICRjb2xvciAhaW1wb3J0YW50O1xuXG4gICAgQGlmIChsaWdodG5lc3MoJGNvbG9yKSA8IDYwKSB7XG4gICAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUZXh0IGNvbG9yIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiB0ZXh0LWNvbG9yLXZhcmlhbnQoJG5hbWU6IFwiLnRleHQtcHJpbWFyeVwiLCAkY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gICN7JG5hbWV9IHtcbiAgICBjb2xvcjogJGNvbG9yICFpbXBvcnRhbnQ7XG4gIH1cblxuICBhI3skbmFtZX0ge1xuICAgICY6Zm9jdXMsXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogZGFya2VuKCRjb2xvciwgNSUpO1xuICAgIH1cbiAgICAmOnZpc2l0ZWQge1xuICAgICAgY29sb3I6IGxpZ2h0ZW4oJGNvbG9yLCA1JSk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBMYWJlbCBiYXNlIHN0eWxlXG5AbWl4aW4gbGFiZWwtYmFzZSgpIHtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGxpbmUtaGVpZ2h0OiAxLjI1O1xuICBwYWRkaW5nOiAuMXJlbSAuMnJlbTtcbn1cblxuQG1peGluIGxhYmVsLXZhcmlhbnQoJGNvbG9yOiAkbGlnaHQtY29sb3IsICRiZy1jb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICBjb2xvcjogJGNvbG9yO1xufVxuIiwiLy8gTWFyZ2luIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiBtYXJnaW4tdmFyaWFudCgkaWQ6IDEsICRzaXplOiAkdW5pdC0xKSB7XG4gIC5tLSN7JGlkfSB7XG4gICAgbWFyZ2luOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1iLSN7JGlkfSB7XG4gICAgbWFyZ2luLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5tbC0jeyRpZH0ge1xuICAgIG1hcmdpbi1sZWZ0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1yLSN7JGlkfSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm10LSN7JGlkfSB7XG4gICAgbWFyZ2luLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5teC0jeyRpZH0ge1xuICAgIG1hcmdpbi1sZWZ0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi1yaWdodDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5teS0jeyRpZH0ge1xuICAgIG1hcmdpbi1ib3R0b206ICRzaXplICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4vLyBQYWRkaW5nIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiBwYWRkaW5nLXZhcmlhbnQoJGlkOiAxLCAkc2l6ZTogJHVuaXQtMSkge1xuICAucC0jeyRpZH0ge1xuICAgIHBhZGRpbmc6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAucGItI3skaWR9IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5wbC0jeyRpZH0ge1xuICAgIHBhZGRpbmctbGVmdDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5wci0jeyRpZH0ge1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAucHQtI3skaWR9IHtcbiAgICBwYWRkaW5nLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5weC0jeyRpZH0ge1xuICAgIHBhZGRpbmctbGVmdDogJHNpemUgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG4gIFxuICAucHktI3skaWR9IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxufVxuIiwiLy8gQ29tcG9uZW50IGZvY3VzIHNoYWRvd1xuQG1peGluIGNvbnRyb2wtc2hhZG93KCRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgYm94LXNoYWRvdzogMCAwIDAgLjFyZW0gcmdiYSgkY29sb3IsIC4yKTtcbn1cblxuLy8gU2hhZG93IG1peGluXG5AbWl4aW4gc2hhZG93LXZhcmlhbnQoJG9mZnNldCkge1xuICBib3gtc2hhZG93OiAwICRvZmZzZXQgKCRvZmZzZXQgKyAuMDVyZW0pICogMiByZ2JhKCRkYXJrLWNvbG9yLCAuMyk7XG59XG4iLCIvLyBUZXh0IEVsbGlwc2lzXG5AbWl4aW4gdGV4dC1lbGxpcHNpcygpIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4iLCIvLyBUb2FzdCB2YXJpYW50IG1peGluXG5AbWl4aW4gdG9hc3QtdmFyaWFudCgkY29sb3I6ICRkYXJrLWNvbG9yKSB7XG4gIGJhY2tncm91bmQ6IHJnYmEoJGNvbG9yLCAuOTUpO1xuICBib3JkZXItY29sb3I6ICRjb2xvcjtcbn1cbiIsIi8qIE1hbnVhbGx5IGZvcmtlZCBmcm9tIE5vcm1hbGl6ZS5jc3MgKi9cbi8qIG5vcm1hbGl6ZS5jc3MgdjUuMC4wIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqL1xuXG4vKipcbiAqIDEuIENoYW5nZSB0aGUgZGVmYXVsdCBmb250IGZhbWlseSBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqIDIuIENvcnJlY3QgdGhlIGxpbmUgaGVpZ2h0IGluIGFsbCBicm93c2Vycy5cbiAqIDMuIFByZXZlbnQgYWRqdXN0bWVudHMgb2YgZm9udCBzaXplIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZXMgaW5cbiAqICAgIElFIG9uIFdpbmRvd3MgUGhvbmUgYW5kIGluIGlPUy5cbiAqL1xuXG4vKiBEb2N1bWVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuaHRtbCB7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyAvKiAxICovXG4gIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvKiAzICovXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogMyAqL1xufVxuXG4vKiBTZWN0aW9uc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqL1xuXG5ib2R5IHtcbiAgbWFyZ2luOiAwO1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDktLlxuICovXG5cbmFydGljbGUsXG5hc2lkZSxcbmZvb3RlcixcbmhlYWRlcixcbm5hdixcbnNlY3Rpb24ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSBmb250IHNpemUgYW5kIG1hcmdpbiBvbiBgaDFgIGVsZW1lbnRzIHdpdGhpbiBgc2VjdGlvbmAgYW5kXG4gKiBgYXJ0aWNsZWAgY29udGV4dHMgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgU2FmYXJpLlxuICovXG5cbmgxIHtcbiAgZm9udC1zaXplOiAyZW07XG4gIG1hcmdpbjogMC42N2VtIDA7XG59XG5cbi8qIEdyb3VwaW5nIGNvbnRlbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uXG4gKiAxLiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRS5cbiAqL1xuXG5maWdjYXB0aW9uLFxuZmlndXJlLFxubWFpbiB7IC8qIDEgKi9cbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IG1hcmdpbiBpbiBJRSA4IChyZW1vdmVkKS5cbiAqL1xuXG4vKipcbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIEZpcmVmb3guXG4gKiAyLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlIGFuZCBJRS5cbiAqL1xuXG5ociB7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvKiAxICovXG4gIGhlaWdodDogMDsgLyogMSAqL1xuICBvdmVyZmxvdzogdmlzaWJsZTsgLyogMiAqL1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuIChyZW1vdmVkKVxuICogMi4gQ29ycmVjdCB0aGUgb2RkIGBlbWAgZm9udCBzaXppbmcgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbi8qIFRleHQtbGV2ZWwgc2VtYW50aWNzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIDEuIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cbiAqIDIuIFJlbW92ZSBnYXBzIGluIGxpbmtzIHVuZGVybGluZSBpbiBpT1MgOCsgYW5kIFNhZmFyaSA4Ky5cbiAqL1xuXG5hIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IC8qIDEgKi9cbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDogb2JqZWN0czsgLyogMiAqL1xufVxuXG4vKipcbiAqIFJlbW92ZSB0aGUgb3V0bGluZSBvbiBmb2N1c2VkIGxpbmtzIHdoZW4gdGhleSBhcmUgYWxzbyBhY3RpdmUgb3IgaG92ZXJlZFxuICogaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gKi9cblxuYTphY3RpdmUsXG5hOmhvdmVyIHtcbiAgb3V0bGluZS13aWR0aDogMDtcbn1cblxuLyoqXG4gKiBNb2RpZnkgZGVmYXVsdCBzdHlsaW5nIG9mIGFkZHJlc3MuXG4gKi9cblxuYWRkcmVzcyB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cblxuLyoqXG4gKiAxLiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgaW4gRmlyZWZveCAzOS0uXG4gKiAyLiBBZGQgdGhlIGNvcnJlY3QgdGV4dCBkZWNvcmF0aW9uIGluIENocm9tZSwgRWRnZSwgSUUsIE9wZXJhLCBhbmQgU2FmYXJpLiAocmVtb3ZlZClcbiAqL1xuXG4vKipcbiAqIFByZXZlbnQgdGhlIGR1cGxpY2F0ZSBhcHBsaWNhdGlvbiBvZiBgYm9sZGVyYCBieSB0aGUgbmV4dCBydWxlIGluIFNhZmFyaSA2LlxuICovXG5cbmIsXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogaW5oZXJpdDtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZm9udCB3ZWlnaHQgaW4gQ2hyb21lLCBFZGdlLCBhbmQgU2FmYXJpLlxuICovXG5cbmIsXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogJG1vbm8tZm9udC1mYW1pbHk7IC8qIDEgKGNoYW5nZWQpICovXG4gIGZvbnQtc2l6ZTogMWVtOyAvKiAyICovXG59XG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGZvbnQgc3R5bGUgaW4gQW5kcm9pZCA0LjMtLlxuICovXG5cbmRmbiB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgYmFja2dyb3VuZCBhbmQgY29sb3IgaW4gSUUgOS0uIChSZW1vdmVkKVxuICovXG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc21hbGwge1xuICBmb250LXNpemU6IDgwJTtcbiAgZm9udC13ZWlnaHQ6IDQwMDsgLyogKGFkZGVkKSAqL1xufVxuXG4vKipcbiAqIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGVsZW1lbnRzIGZyb20gYWZmZWN0aW5nIHRoZSBsaW5lIGhlaWdodCBpblxuICogYWxsIGJyb3dzZXJzLlxuICovXG5cbnN1YixcbnN1cCB7XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5cbnN1YiB7XG4gIGJvdHRvbTogLTAuMjVlbTtcbn1cblxuc3VwIHtcbiAgdG9wOiAtMC41ZW07XG59XG5cbi8qIEVtYmVkZGVkIGNvbnRlbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uXG4gKi9cblxuYXVkaW8sXG52aWRlbyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBpT1MgNC03LlxuICovXG5cbmF1ZGlvOm5vdChbY29udHJvbHNdKSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGhlaWdodDogMDtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLS5cbiAqL1xuXG5pbWcge1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG5cbi8qKlxuICogSGlkZSB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gKi9cblxuc3ZnOm5vdCg6cm9vdCkge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vKiBGb3Jtc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiAxLiBDaGFuZ2UgdGhlIGZvbnQgc3R5bGVzIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICogMi4gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gRmlyZWZveCBhbmQgU2FmYXJpLlxuICovXG5cbmJ1dHRvbixcbmlucHV0LFxub3B0Z3JvdXAsXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0OyAvKiAxIChjaGFuZ2VkKSAqL1xuICBmb250LXNpemU6IGluaGVyaXQ7IC8qIDEgKGNoYW5nZWQpICovXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0OyAvKiAxIChjaGFuZ2VkKSAqL1xuICBtYXJnaW46IDA7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBTaG93IHRoZSBvdmVyZmxvdyBpbiBJRS5cbiAqIDEuIFNob3cgdGhlIG92ZXJmbG93IGluIEVkZ2UuXG4gKi9cblxuYnV0dG9uLFxuaW5wdXQgeyAvKiAxICovXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG4vKipcbiAqIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRWRnZSwgRmlyZWZveCwgYW5kIElFLlxuICogMS4gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBGaXJlZm94LlxuICovXG5cbmJ1dHRvbixcbnNlbGVjdCB7IC8qIDEgKi9cbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG59XG5cbi8qKlxuICogMS4gUHJldmVudCBhIFdlYktpdCBidWcgd2hlcmUgKDIpIGRlc3Ryb3lzIG5hdGl2ZSBgYXVkaW9gIGFuZCBgdmlkZW9gXG4gKiAgICBjb250cm9scyBpbiBBbmRyb2lkIDQuXG4gKiAyLiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxuICovXG5cbmJ1dHRvbixcbmh0bWwgW3R5cGU9XCJidXR0b25cIl0sIC8qIDEgKi9cblt0eXBlPVwicmVzZXRcIl0sXG5bdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvKiAyICovXG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBpbm5lciBib3JkZXIgYW5kIHBhZGRpbmcgaW4gRmlyZWZveC5cbiAqL1xuXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cImJ1dHRvblwiXTo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwicmVzZXRcIl06Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgcGFkZGluZzogMDtcbn1cblxuLyoqXG4gKiBSZXN0b3JlIHRoZSBmb2N1cyBzdHlsZXMgdW5zZXQgYnkgdGhlIHByZXZpb3VzIHJ1bGUgKHJlbW92ZWQpLlxuICovXG5cblxuLyoqXG4gKiBDaGFuZ2UgdGhlIGJvcmRlciwgbWFyZ2luLCBhbmQgcGFkZGluZyBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKSAoY2hhbmdlZCkuXG4gKi9cblxuZmllbGRzZXQge1xuICBib3JkZXI6IDA7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSB0ZXh0IHdyYXBwaW5nIGluIEVkZ2UgYW5kIElFLlxuICogMi4gQ29ycmVjdCB0aGUgY29sb3IgaW5oZXJpdGFuY2UgZnJvbSBgZmllbGRzZXRgIGVsZW1lbnRzIGluIElFLlxuICogMy4gUmVtb3ZlIHRoZSBwYWRkaW5nIHNvIGRldmVsb3BlcnMgYXJlIG5vdCBjYXVnaHQgb3V0IHdoZW4gdGhleSB6ZXJvIG91dFxuICogICAgYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxubGVnZW5kIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLyogMSAqL1xuICBjb2xvcjogaW5oZXJpdDsgLyogMiAqL1xuICBkaXNwbGF5OiB0YWJsZTsgLyogMSAqL1xuICBtYXgtd2lkdGg6IDEwMCU7IC8qIDEgKi9cbiAgcGFkZGluZzogMDsgLyogMyAqL1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsOyAvKiAxICovXG59XG5cbi8qKlxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uXG4gKiAyLiBBZGQgdGhlIGNvcnJlY3QgdmVydGljYWwgYWxpZ25tZW50IGluIENocm9tZSwgRmlyZWZveCwgYW5kIE9wZXJhLlxuICovXG5cbnByb2dyZXNzIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAvKiAxICovXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgLyogMiAqL1xufVxuXG4vKipcbiAqIFJlbW92ZSB0aGUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUuXG4gKi9cblxudGV4dGFyZWEge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuLyoqXG4gKiAxLiBBZGQgdGhlIGNvcnJlY3QgYm94IHNpemluZyBpbiBJRSAxMC0uXG4gKiAyLiBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gSUUgMTAtLlxuICovXG5cblt0eXBlPVwiY2hlY2tib3hcIl0sXG5bdHlwZT1cInJhZGlvXCJdIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLyogMSAqL1xuICBwYWRkaW5nOiAwOyAvKiAyICovXG59XG5cbi8qKlxuICogQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLlxuICovXG5cblt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgb2RkIGFwcGVhcmFuY2UgaW4gQ2hyb21lIGFuZCBTYWZhcmkuXG4gKiAyLiBDb3JyZWN0IHRoZSBvdXRsaW5lIHN0eWxlIGluIFNhZmFyaS5cbiAqL1xuXG5bdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOyAvKiAxICovXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4OyAvKiAyICovXG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBpbm5lciBwYWRkaW5nIGFuZCBjYW5jZWwgYnV0dG9ucyBpbiBDaHJvbWUgYW5kIFNhZmFyaSBvbiBtYWNPUy5cbiAqL1xuXG5bdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcblt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gKiAyLiBDaGFuZ2UgZm9udCBwcm9wZXJ0aWVzIHRvIGBpbmhlcml0YCBpbiBTYWZhcmkuXG4gKi9cblxuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvKiAxICovXG4gIGZvbnQ6IGluaGVyaXQ7IC8qIDIgKi9cbn1cblxuLyogSW50ZXJhY3RpdmVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSA5LS5cbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIEVkZ2UsIElFLCBhbmQgRmlyZWZveC5cbiAqL1xuXG5kZXRhaWxzLCAvKiAxICovXG5tZW51IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc3VtbWFyeSB7XG4gIGRpc3BsYXk6IGxpc3QtaXRlbTtcbiAgb3V0bGluZTogbm9uZTtcbn1cblxuLyogU2NyaXB0aW5nXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDktLlxuICovXG5cbmNhbnZhcyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRS5cbiAqL1xuXG50ZW1wbGF0ZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIEhpZGRlblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSAxMC0uXG4gKi9cblxuW2hpZGRlbl0ge1xuICBkaXNwbGF5OiBub25lO1xufVxuIiwiLy8gQmFzZVxuKixcbio6OmJlZm9yZSxcbio6OmFmdGVyIHtcbiAgYm94LXNpemluZzogaW5oZXJpdDtcbn1cblxuaHRtbCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGZvbnQtc2l6ZTogJGh0bWwtZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogJGh0bWwtbGluZS1oZWlnaHQ7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbmJvZHkge1xuICBiYWNrZ3JvdW5kOiAkYm9keS1iZztcbiAgY29sb3I6ICRib2R5LWZvbnQtY29sb3I7XG4gIGZvbnQtZmFtaWx5OiAkYm9keS1mb250LWZhbWlseTtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplO1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG59XG5cbmEge1xuICBjb2xvcjogJGxpbmstY29sb3I7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAmOmZvY3VzIHtcbiAgICBAaW5jbHVkZSBjb250cm9sLXNoYWRvdygpO1xuICB9XG5cbiAgJjpmb2N1cyxcbiAgJjpob3ZlcixcbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlIHtcbiAgICBjb2xvcjogJGxpbmstY29sb3ItZGFyaztcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgfVxuXG4gICY6dmlzaXRlZCB7XG4gICAgY29sb3I6ICRsaW5rLWNvbG9yLWxpZ2h0O1xuICB9XG59XG4iLCIvLyBUeXBvZ3JhcGh5XG4vLyBIZWFkaW5nc1xuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG4gIG1hcmdpbi1ib3R0b206IC41ZW07XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uaDEsXG4uaDIsXG4uaDMsXG4uaDQsXG4uaDUsXG4uaDYge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuaDEsXG4uaDEge1xuICBmb250LXNpemU6IDJyZW07XG59XG5oMixcbi5oMiB7XG4gIGZvbnQtc2l6ZTogMS42cmVtO1xufVxuaDMsXG4uaDMge1xuICBmb250LXNpemU6IDEuNHJlbTtcbn1cbmg0LFxuLmg0IHtcbiAgZm9udC1zaXplOiAxLjJyZW07XG59XG5oNSxcbi5oNSB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbn1cbmg2LFxuLmg2IHtcbiAgZm9udC1zaXplOiAuOHJlbTtcbn1cblxuLy8gUGFyYWdyYXBoc1xucCB7XG4gIG1hcmdpbjogMCAwICRsaW5lLWhlaWdodDtcbn1cblxuLy8gU2VtYW50aWMgdGV4dCBlbGVtZW50c1xuYSxcbmlucyxcbnUge1xuICB0ZXh0LWRlY29yYXRpb24tc2tpcDogaW5rIGVkZ2VzO1xufVxuXG5hYmJyW3RpdGxlXSB7XG4gIGJvcmRlci1ib3R0b206ICRib3JkZXItd2lkdGggZG90dGVkO1xuICBjdXJzb3I6IGhlbHA7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxua2JkIHtcbiAgQGluY2x1ZGUgbGFiZWwtYmFzZSgpO1xuICBAaW5jbHVkZSBsYWJlbC12YXJpYW50KCRsaWdodC1jb2xvciwgJGRhcmstY29sb3IpO1xuICBmb250LXNpemU6ICRmb250LXNpemUtc207XG59XG5cbm1hcmsge1xuICBAaW5jbHVkZSBsYWJlbC12YXJpYW50KCRib2R5LWZvbnQtY29sb3IsICRoaWdobGlnaHQtY29sb3IpO1xuICBib3JkZXItYm90dG9tOiAkdW5pdC1vIHNvbGlkIGRhcmtlbigkaGlnaGxpZ2h0LWNvbG9yLCAxNSUpO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgcGFkZGluZzogJHVuaXQtbyAkdW5pdC1oIDA7XG59XG5cbi8vIEJsb2NrcXVvdGVcbmJsb2NrcXVvdGUge1xuICBib3JkZXItbGVmdDogJGJvcmRlci13aWR0aC1sZyBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICBtYXJnaW4tbGVmdDogMDtcbiAgcGFkZGluZzogJHVuaXQtMiAkdW5pdC00O1xuXG4gIHA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLyBMaXN0c1xudWwsXG5vbCB7XG4gIG1hcmdpbjogJHVuaXQtNCAwICR1bml0LTQgJHVuaXQtNDtcbiAgcGFkZGluZzogMDtcblxuICB1bCxcbiAgb2wge1xuICAgIG1hcmdpbjogJHVuaXQtNCAwICR1bml0LTQgJHVuaXQtNDtcbiAgfVxuXG4gIGxpIHtcbiAgICBtYXJnaW4tdG9wOiAkdW5pdC0yO1xuICB9XG59XG5cbnVsIHtcbiAgbGlzdC1zdHlsZTogZGlzYyBpbnNpZGU7XG5cbiAgdWwge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogY2lyY2xlO1xuICB9XG59XG5cbm9sIHtcbiAgbGlzdC1zdHlsZTogZGVjaW1hbCBpbnNpZGU7XG5cbiAgb2wge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbG93ZXItYWxwaGE7XG4gIH1cbn1cblxuZGwge1xuICBkdCB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cbiAgZGQge1xuICAgIG1hcmdpbjogJHVuaXQtMiAwICR1bml0LTQgMDtcbiAgfVxufVxuIiwiLy8gT3B0aW1pemVkIGZvciBFYXN0IEFzaWFuIENKS1xuaHRtbDpsYW5nKHpoKSxcbmh0bWw6bGFuZyh6aC1IYW5zKSxcbi5sYW5nLXpoLFxuLmxhbmctemgtaGFucyB7XG4gIGZvbnQtZmFtaWx5OiAkY2prLXpoLWhhbnMtZm9udC1mYW1pbHk7XG59XG5cbmh0bWw6bGFuZyh6aC1IYW50KSxcbi5sYW5nLXpoLWhhbnQge1xuICBmb250LWZhbWlseTogJGNqay16aC1oYW50LWZvbnQtZmFtaWx5O1xufVxuXG5odG1sOmxhbmcoamEpLFxuLmxhbmctamEge1xuICBmb250LWZhbWlseTogJGNqay1qcC1mb250LWZhbWlseTtcbn1cblxuaHRtbDpsYW5nKGtvKSxcbi5sYW5nLWtvIHtcbiAgZm9udC1mYW1pbHk6ICRjamsta28tZm9udC1mYW1pbHk7XG59XG5cbjpsYW5nKHpoKSxcbjpsYW5nKGphKSxcbi5sYW5nLWNqayB7XG4gIGlucyxcbiAgdSB7XG4gICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci13aWR0aCBzb2xpZDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICBkZWwgKyBkZWwsXG4gIGRlbCArIHMsXG4gIGlucyArIGlucyxcbiAgaW5zICsgdSxcbiAgcyArIGRlbCxcbiAgcyArIHMsXG4gIHUgKyBpbnMsXG4gIHUgKyB1IHtcbiAgICBtYXJnaW4tbGVmdDogLjEyNWVtO1xuICB9XG59XG4iLCIvLyBUYWJsZXNcbi50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgQGlmICRydGwgPT0gdHJ1ZSB7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIH0gQGVsc2Uge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gIH1cblxuICAmLnRhYmxlLXN0cmlwZWQge1xuICAgIHRib2R5IHtcbiAgICAgIHRyOm50aC1vZi10eXBlKG9kZCkge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJixcbiAgJi50YWJsZS1zdHJpcGVkIHtcbiAgICB0Ym9keSB7XG4gICAgICB0ciB7XG4gICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItZGFyaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYudGFibGUtaG92ZXIge1xuICAgIHRib2R5IHtcbiAgICAgIHRyIHtcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWRhcms7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTY29sbGFibGUgdGFibGVzXG4gICYudGFibGUtc2Nyb2xsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIHBhZGRpbmctYm90dG9tOiAuNzVyZW07XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gIHRkLFxuICB0aCB7XG4gICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICAgIHBhZGRpbmc6ICR1bml0LTMgJHVuaXQtMjtcbiAgfVxuICB0aCB7XG4gICAgYm9yZGVyLWJvdHRvbS13aWR0aDogJGJvcmRlci13aWR0aC1sZztcbiAgfVxufVxuIiwiLy8gQnV0dG9uc1xuLmJ0biB7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGJhY2tncm91bmQ6ICRiZy1jb2xvci1saWdodDtcbiAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRwcmltYXJ5LWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAkZm9udC1zaXplO1xuICBoZWlnaHQ6ICRjb250cm9sLXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmc6ICRjb250cm9sLXBhZGRpbmcteSAkY29udHJvbC1wYWRkaW5nLXg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4ycywgYm9yZGVyIC4ycywgYm94LXNoYWRvdyAuMnMsIGNvbG9yIC4ycztcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICY6Zm9jdXMge1xuICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCk7XG4gIH1cbiAgJjpmb2N1cyxcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogJHNlY29uZGFyeS1jb2xvcjtcbiAgICBib3JkZXItY29sb3I6ICRwcmltYXJ5LWNvbG9yLWRhcms7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3ItZGFyaztcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkcHJpbWFyeS1jb2xvci1kYXJrLCA1JSk7XG4gICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgJi5sb2FkaW5nIHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAmW2Rpc2FibGVkXSxcbiAgJjpkaXNhYmxlZCxcbiAgJi5kaXNhYmxlZCB7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIG9wYWNpdHk6IC41O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLy8gQnV0dG9uIFByaW1hcnlcbiAgJi5idG4tcHJpbWFyeSB7XG4gICAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG4gICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeS1jb2xvci1kYXJrO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IGRhcmtlbigkcHJpbWFyeS1jb2xvci1kYXJrLCAyJSk7XG4gICAgICBib3JkZXItY29sb3I6IGRhcmtlbigkcHJpbWFyeS1jb2xvci1kYXJrLCA1JSk7XG4gICAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgIH1cbiAgICAmOmFjdGl2ZSxcbiAgICAmLmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJHByaW1hcnktY29sb3ItZGFyaywgNCUpO1xuICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJHByaW1hcnktY29sb3ItZGFyaywgNyUpO1xuICAgICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICB9XG4gICAgJi5sb2FkaW5nIHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEJ1dHRvbiBDb2xvcnNcbiAgJi5idG4tc3VjY2VzcyB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJHN1Y2Nlc3MtY29sb3IpO1xuICB9XG5cbiAgJi5idG4tZXJyb3Ige1xuICAgIEBpbmNsdWRlIGJ1dHRvbi12YXJpYW50KCRlcnJvci1jb2xvcik7XG4gIH1cblxuICAvLyBCdXR0b24gTGlua1xuICAmLmJ0bi1saW5rIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiAkbGluay1jb2xvcjtcbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIsXG4gICAgJjphY3RpdmUsXG4gICAgJi5hY3RpdmUge1xuICAgICAgY29sb3I6ICRsaW5rLWNvbG9yLWRhcms7XG4gICAgfVxuICB9XG5cbiAgLy8gQnV0dG9uIFNpemVzXG4gICYuYnRuLXNtIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgaGVpZ2h0OiAkY29udHJvbC1zaXplLXNtO1xuICAgIHBhZGRpbmc6ICRjb250cm9sLXBhZGRpbmcteS1zbSAkY29udHJvbC1wYWRkaW5nLXgtc207XG4gIH1cblxuICAmLmJ0bi1sZyB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLWxnO1xuICAgIGhlaWdodDogJGNvbnRyb2wtc2l6ZS1sZztcbiAgICBwYWRkaW5nOiAkY29udHJvbC1wYWRkaW5nLXktbGcgJGNvbnRyb2wtcGFkZGluZy14LWxnO1xuICB9XG5cbiAgLy8gQnV0dG9uIEJsb2NrXG4gICYuYnRuLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC8vIEJ1dHRvbiBBY3Rpb25cbiAgJi5idG4tYWN0aW9uIHtcbiAgICB3aWR0aDogJGNvbnRyb2wtc2l6ZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICYuYnRuLXNtIHtcbiAgICAgIHdpZHRoOiAkY29udHJvbC1zaXplLXNtO1xuICAgIH1cblxuICAgICYuYnRuLWxnIHtcbiAgICAgIHdpZHRoOiAkY29udHJvbC1zaXplLWxnO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJ1dHRvbiBDbGVhclxuICAmLmJ0bi1jbGVhciB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiAwO1xuICAgIGNvbG9yOiBjdXJyZW50Q29sb3I7XG4gICAgaGVpZ2h0OiAkdW5pdC01O1xuICAgIGxpbmUtaGVpZ2h0OiAkdW5pdC00O1xuICAgIG1hcmdpbi1sZWZ0OiAkdW5pdC0xO1xuICAgIG1hcmdpbi1yaWdodDogLTJweDtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHBhZGRpbmc6ICR1bml0LWg7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIHdpZHRoOiAkdW5pdC01O1xuXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoJGJnLWNvbG9yLCAuNSk7XG4gICAgICBvcGFjaXR5OiAuOTU7XG4gICAgfVxuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiXFwyNzE1XCI7XG4gICAgfVxuICB9XG59XG5cbi8vIEJ1dHRvbiBncm91cHNcbi5idG4tZ3JvdXAge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuXG4gIC5idG4ge1xuICAgIGZsZXg6IDEgMCBhdXRvO1xuICAgICY6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cbiAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtJGJvcmRlci13aWR0aDtcbiAgICB9XG4gICAgJjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0kYm9yZGVyLXdpZHRoO1xuICAgIH1cbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIsXG4gICAgJjphY3RpdmUsXG4gICAgJi5hY3RpdmUge1xuICAgICAgei1pbmRleDogJHppbmRleC0wO1xuICAgIH1cbiAgfVxuXG4gICYuYnRuLWdyb3VwLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgLmJ0biB7XG4gICAgICBmbGV4OiAxIDAgMDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvcm1zXG4uZm9ybS1ncm91cCB7XG4gICY6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogJGxheW91dC1zcGFjaW5nO1xuICB9XG59XG5cbmZpZWxkc2V0IHtcbiAgbWFyZ2luLWJvdHRvbTogJGxheW91dC1zcGFjaW5nLWxnO1xufVxuXG5sZWdlbmQge1xuICBmb250LXNpemU6ICRmb250LXNpemUtbGc7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIG1hcmdpbi1ib3R0b206ICRsYXlvdXQtc3BhY2luZy1sZztcbn1cblxuLy8gRm9ybSBlbGVtZW50OiBMYWJlbFxuLmZvcm0tbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgcGFkZGluZzogJGNvbnRyb2wtcGFkZGluZy15ICsgJGJvcmRlci13aWR0aCAwO1xuXG4gICYubGFiZWwtc20ge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgICBwYWRkaW5nOiAkY29udHJvbC1wYWRkaW5nLXktc20gKyAkYm9yZGVyLXdpZHRoIDA7XG4gIH1cblxuICAmLmxhYmVsLWxnIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtbGc7XG4gICAgcGFkZGluZzogJGNvbnRyb2wtcGFkZGluZy15LWxnICsgJGJvcmRlci13aWR0aCAwO1xuICB9XG59XG5cbi8vIEZvcm0gZWxlbWVudDogSW5wdXRcbi5mb3JtLWlucHV0IHtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWxpZ2h0O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGJvcmRlci1jb2xvci1kYXJrO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgY29sb3I6ICRib2R5LWZvbnQtY29sb3I7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6ICRmb250LXNpemU7XG4gIGhlaWdodDogJGNvbnRyb2wtc2l6ZTtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBvdXRsaW5lOiBub25lO1xuICBwYWRkaW5nOiAkY29udHJvbC1wYWRkaW5nLXkgJGNvbnRyb2wtcGFkZGluZy14O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgLjJzLCBib3JkZXIgLjJzLCBib3gtc2hhZG93IC4ycywgY29sb3IgLjJzO1xuICB3aWR0aDogMTAwJTtcbiAgJjpmb2N1cyB7XG4gICAgQGluY2x1ZGUgY29udHJvbC1zaGFkb3coKTtcbiAgICBib3JkZXItY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuICB9XG4gICY6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGdyYXktY29sb3I7XG4gIH1cblxuICAvLyBJbnB1dCBzaXplc1xuICAmLmlucHV0LXNtIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgaGVpZ2h0OiAkY29udHJvbC1zaXplLXNtO1xuICAgIHBhZGRpbmc6ICRjb250cm9sLXBhZGRpbmcteS1zbSAkY29udHJvbC1wYWRkaW5nLXgtc207XG4gIH1cblxuICAmLmlucHV0LWxnIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtbGc7XG4gICAgaGVpZ2h0OiAkY29udHJvbC1zaXplLWxnO1xuICAgIHBhZGRpbmc6ICRjb250cm9sLXBhZGRpbmcteS1sZyAkY29udHJvbC1wYWRkaW5nLXgtbGc7XG4gIH1cblxuICAmLmlucHV0LWlubGluZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cblxuICAvLyBJbnB1dCB0eXBlc1xuICAmW3R5cGU9XCJmaWxlXCJdIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cbn1cblxuLy8gRm9ybSBlbGVtZW50OiBUZXh0YXJlYVxudGV4dGFyZWEuZm9ybS1pbnB1dCB7XG4gICYsXG4gICYuaW5wdXQtbGcsXG4gICYuaW5wdXQtc20ge1xuICAgIGhlaWdodDogYXV0bztcbiAgfVxufVxuXG4vLyBGb3JtIGVsZW1lbnQ6IElucHV0IGhpbnRcbi5mb3JtLWlucHV0LWhpbnQge1xuICBjb2xvcjogJGdyYXktY29sb3I7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgbWFyZ2luLXRvcDogJHVuaXQtMTtcblxuICAuaGFzLXN1Y2Nlc3MgJixcbiAgLmlzLXN1Y2Nlc3MgKyAmIHtcbiAgICBjb2xvcjogJHN1Y2Nlc3MtY29sb3I7XG4gIH1cblxuICAuaGFzLWVycm9yICYsXG4gIC5pcy1lcnJvciArICYge1xuICAgIGNvbG9yOiAkZXJyb3ItY29sb3I7XG4gIH1cbn1cblxuLy8gRm9ybSBlbGVtZW50OiBTZWxlY3Rcbi5mb3JtLXNlbGVjdCB7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yLWRhcms7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBjb2xvcjogaW5oZXJpdDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplO1xuICBoZWlnaHQ6ICRjb250cm9sLXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmc6ICRjb250cm9sLXBhZGRpbmcteSAkY29udHJvbC1wYWRkaW5nLXg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItbGlnaHQ7IFxuICAmOmZvY3VzIHtcbiAgICBAaW5jbHVkZSBjb250cm9sLXNoYWRvdygpO1xuICAgIGJvcmRlci1jb2xvcjogJHByaW1hcnktY29sb3I7XG4gIH1cbiAgJjo6LW1zLWV4cGFuZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC8vIFNlbGVjdCBzaXplc1xuICAmLnNlbGVjdC1zbSB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICAgIGhlaWdodDogJGNvbnRyb2wtc2l6ZS1zbTtcbiAgICBwYWRkaW5nOiAkY29udHJvbC1wYWRkaW5nLXktc20gKCRjb250cm9sLWljb24tc2l6ZSArICRjb250cm9sLXBhZGRpbmcteC1zbSkgJGNvbnRyb2wtcGFkZGluZy15LXNtICRjb250cm9sLXBhZGRpbmcteC1zbTtcbiAgfVxuXG4gICYuc2VsZWN0LWxnIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtbGc7XG4gICAgaGVpZ2h0OiAkY29udHJvbC1zaXplLWxnO1xuICAgIHBhZGRpbmc6ICRjb250cm9sLXBhZGRpbmcteS1sZyAoJGNvbnRyb2wtaWNvbi1zaXplICsgJGNvbnRyb2wtcGFkZGluZy14LWxnKSAkY29udHJvbC1wYWRkaW5nLXktbGcgJGNvbnRyb2wtcGFkZGluZy14LWxnO1xuICB9XG5cbiAgLy8gTXVsdGlwbGUgc2VsZWN0XG4gICZbc2l6ZV0sXG4gICZbbXVsdGlwbGVdIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgcGFkZGluZzogJGNvbnRyb2wtcGFkZGluZy15ICRjb250cm9sLXBhZGRpbmcteDtcblxuICAgIG9wdGlvbiB7XG4gICAgICBwYWRkaW5nOiAkdW5pdC1oICR1bml0LTE7XG4gICAgfVxuICB9XG4gICY6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItbGlnaHQgdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmlld0JveD0nMCUyMDAlMjA0JTIwNSclM0UlM0NwYXRoJTIwZmlsbD0nJTIzNjY3MTg5JyUyMGQ9J00yJTIwMEwwJTIwMmg0em0wJTIwNUwwJTIwM2g0eicvJTNFJTNDL3N2ZyUzRVwiKSBuby1yZXBlYXQgcmlnaHQgLjM1cmVtIGNlbnRlciAvIC40cmVtIC41cmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRjb250cm9sLWljb24tc2l6ZSArICRjb250cm9sLXBhZGRpbmcteDtcbiAgfVxufVxuXG4vLyBGb3JtIEljb25zXG4uaGFzLWljb24tbGVmdCxcbi5oYXMtaWNvbi1yaWdodCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZm9ybS1pY29uIHtcbiAgICBoZWlnaHQ6ICRjb250cm9sLWljb24tc2l6ZTtcbiAgICBtYXJnaW46IDAgJGNvbnRyb2wtcGFkZGluZy15O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgd2lkdGg6ICRjb250cm9sLWljb24tc2l6ZTtcbiAgICB6LWluZGV4OiAkemluZGV4LTAgKyAxO1xuICB9XG59XG5cbi5oYXMtaWNvbi1sZWZ0IHtcbiAgLmZvcm0taWNvbiB7XG4gICAgbGVmdDogJGJvcmRlci13aWR0aDtcbiAgfVxuXG4gIC5mb3JtLWlucHV0IHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRjb250cm9sLWljb24tc2l6ZSArICRjb250cm9sLXBhZGRpbmcteSAqIDI7XG4gIH1cbn1cblxuLmhhcy1pY29uLXJpZ2h0IHtcbiAgLmZvcm0taWNvbiB7XG4gICAgcmlnaHQ6ICRib3JkZXItd2lkdGg7XG4gIH1cblxuICAuZm9ybS1pbnB1dCB7XG4gICAgcGFkZGluZy1yaWdodDogJGNvbnRyb2wtaWNvbi1zaXplICsgJGNvbnRyb2wtcGFkZGluZy15ICogMjtcbiAgfVxufVxuXG4vLyBGb3JtIGVsZW1lbnQ6IENoZWNrYm94IGFuZCBSYWRpb1xuLmZvcm0tY2hlY2tib3gsXG4uZm9ybS1yYWRpbyxcbi5mb3JtLXN3aXRjaCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICBtYXJnaW46ICgkY29udHJvbC1zaXplIC0gJGNvbnRyb2wtc2l6ZS1zbSkgLyAyIDA7XG4gIG1pbi1oZWlnaHQ6ICRjb250cm9sLXNpemUtc207XG4gIHBhZGRpbmc6ICgoJGNvbnRyb2wtc2l6ZS1zbSAtICRsaW5lLWhlaWdodCkgLyAyKSAkY29udHJvbC1wYWRkaW5nLXggKCgkY29udHJvbC1zaXplLXNtIC0gJGxpbmUtaGVpZ2h0KSAvIDIpICgkY29udHJvbC1pY29uLXNpemUgKyAkY29udHJvbC1wYWRkaW5nLXgpO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgaW5wdXQge1xuICAgIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgbWFyZ2luOiAtMXB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxcHg7XG4gICAgJjpmb2N1cyArIC5mb3JtLWljb24ge1xuICAgICAgQGluY2x1ZGUgY29udHJvbC1zaGFkb3coKTtcbiAgICAgIGJvcmRlci1jb2xvcjogJHByaW1hcnktY29sb3I7XG4gICAgfVxuICAgICY6Y2hlY2tlZCArIC5mb3JtLWljb24ge1xuICAgICAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG4gICAgICBib3JkZXItY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5mb3JtLWljb24ge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yLWRhcms7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMnMsIGJvcmRlciAuMnMsIGJveC1zaGFkb3cgLjJzLCBjb2xvciAuMnM7XG4gIH1cblxuICAvLyBJbnB1dCBjaGVja2JveCwgcmFkaW8gYW5kIHN3aXRjaCBzaXplc1xuICAmLmlucHV0LXNtIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgJi5pbnB1dC1sZyB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLWxnO1xuICAgIG1hcmdpbjogKCRjb250cm9sLXNpemUtbGcgLSAkY29udHJvbC1zaXplLXNtKSAvIDIgMDtcbiAgfVxufVxuXG4uZm9ybS1jaGVja2JveCxcbi5mb3JtLXJhZGlvIHtcbiAgLmZvcm0taWNvbiB7XG4gICAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWxpZ2h0O1xuICAgIGhlaWdodDogJGNvbnRyb2wtaWNvbi1zaXplO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAoJGNvbnRyb2wtc2l6ZS1zbSAtICRjb250cm9sLWljb24tc2l6ZSkgLyAyO1xuICAgIHdpZHRoOiAkY29udHJvbC1pY29uLXNpemU7XG4gIH1cblxuICBpbnB1dCB7XG4gICAgJjphY3RpdmUgKyAuZm9ybS1pY29uIHtcbiAgICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvci1kYXJrO1xuICAgIH1cbiAgfVxufVxuLmZvcm0tY2hlY2tib3gge1xuICAuZm9ybS1pY29uIHtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgfVxuXG4gIGlucHV0IHtcbiAgICAmOmNoZWNrZWQgKyAuZm9ybS1pY29uIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aC1sZyBzb2xpZCAkbGlnaHQtY29sb3I7XG4gICAgICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICAgICAgICBib3JkZXItdG9wLXdpZHRoOiAwO1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICBoZWlnaHQ6IDlweDtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICBtYXJnaW4tbGVmdDogLTNweDtcbiAgICAgICAgbWFyZ2luLXRvcDogLTZweDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgICB3aWR0aDogNnB4O1xuICAgICAgfVxuICAgIH1cbiAgICAmOmluZGV0ZXJtaW5hdGUgKyAuZm9ybS1pY29uIHtcbiAgICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuICAgICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvci1saWdodDtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgaGVpZ2h0OiAycHg7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IC0xcHg7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIHdpZHRoOiAxMHB4O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLmZvcm0tcmFkaW8ge1xuICAuZm9ybS1pY29uIHtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIH1cblxuICBpbnB1dCB7XG4gICAgJjpjaGVja2VkICsgLmZvcm0taWNvbiB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItbGlnaHQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgaGVpZ2h0OiA2cHg7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICAgIHdpZHRoOiA2cHg7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEZvcm0gZWxlbWVudDogU3dpdGNoXG4uZm9ybS1zd2l0Y2gge1xuICBwYWRkaW5nLWxlZnQ6ICgkdW5pdC04ICsgJGNvbnRyb2wtcGFkZGluZy14KTtcblxuICAuZm9ybS1pY29uIHtcbiAgICBiYWNrZ3JvdW5kOiAkZ3JheS1jb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICAgIGJvcmRlci1yYWRpdXM6ICR1bml0LTIgKyAkYm9yZGVyLXdpZHRoO1xuICAgIGhlaWdodDogJHVuaXQtNCArICRib3JkZXItd2lkdGggKiAyO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAoJGNvbnRyb2wtc2l6ZS1zbSAtICR1bml0LTQpIC8gMiAtICRib3JkZXItd2lkdGg7XG4gICAgd2lkdGg6ICR1bml0LTg7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvci1saWdodDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGhlaWdodDogJHVuaXQtNDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4ycywgYm9yZGVyIC4ycywgYm94LXNoYWRvdyAuMnMsIGNvbG9yIC4ycywgbGVmdCAuMnM7XG4gICAgICB3aWR0aDogJHVuaXQtNDtcbiAgICB9XG4gIH1cblxuICBpbnB1dCB7XG4gICAgJjpjaGVja2VkICsgLmZvcm0taWNvbiB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBsZWZ0OiAxNHB4O1xuICAgICAgfVxuICAgIH1cbiAgICAmOmFjdGl2ZSArIC5mb3JtLWljb24ge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBGb3JtIGVsZW1lbnQ6IElucHV0IGdyb3Vwc1xuLmlucHV0LWdyb3VwIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuaW5wdXQtZ3JvdXAtYWRkb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZy1jb2xvcjtcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGJvcmRlci1jb2xvci1kYXJrO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgcGFkZGluZzogJGNvbnRyb2wtcGFkZGluZy15ICRjb250cm9sLXBhZGRpbmcteDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgJi5hZGRvbi1zbSB7XG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgICBwYWRkaW5nOiAkY29udHJvbC1wYWRkaW5nLXktc20gJGNvbnRyb2wtcGFkZGluZy14LXNtO1xuICAgIH1cblxuICAgICYuYWRkb24tbGcge1xuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLWxnO1xuICAgICAgcGFkZGluZzogJGNvbnRyb2wtcGFkZGluZy15LWxnICRjb250cm9sLXBhZGRpbmcteC1sZztcbiAgICB9XG4gIH1cblxuICAuZm9ybS1pbnB1dCxcbiAgLmZvcm0tc2VsZWN0IHtcbiAgICBmbGV4OiAxIDEgYXV0bztcbiAgICB3aWR0aDogMSU7XG4gIH1cblxuICAuaW5wdXQtZ3JvdXAtYnRuIHtcbiAgICB6LWluZGV4OiAkemluZGV4LTA7XG4gIH1cblxuICAuZm9ybS1pbnB1dCxcbiAgLmZvcm0tc2VsZWN0LFxuICAuaW5wdXQtZ3JvdXAtYWRkb24sXG4gIC5pbnB1dC1ncm91cC1idG4ge1xuICAgICY6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cbiAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtJGJvcmRlci13aWR0aDtcbiAgICB9XG4gICAgJjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0kYm9yZGVyLXdpZHRoO1xuICAgIH1cbiAgICAmOmZvY3VzIHtcbiAgICAgIHotaW5kZXg6ICR6aW5kZXgtMCArIDE7XG4gICAgfVxuICB9XG5cbiAgLmZvcm0tc2VsZWN0IHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuXG4gICYuaW5wdXQtaW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgfVxufVxuXG4vLyBGb3JtIHZhbGlkYXRpb24gc3RhdGVzXG4uZm9ybS1pbnB1dCxcbi5mb3JtLXNlbGVjdCB7XG4gIC5oYXMtc3VjY2VzcyAmLFxuICAmLmlzLXN1Y2Nlc3Mge1xuICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJHN1Y2Nlc3MtY29sb3IsIDUzJSk7XG4gICAgYm9yZGVyLWNvbG9yOiAkc3VjY2Vzcy1jb2xvcjtcbiAgICAmOmZvY3VzIHtcbiAgICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCRzdWNjZXNzLWNvbG9yKTtcbiAgICB9XG4gIH1cblxuICAuaGFzLWVycm9yICYsXG4gICYuaXMtZXJyb3Ige1xuICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJGVycm9yLWNvbG9yLCA1MyUpO1xuICAgIGJvcmRlci1jb2xvcjogJGVycm9yLWNvbG9yO1xuICAgICY6Zm9jdXMge1xuICAgICAgQGluY2x1ZGUgY29udHJvbC1zaGFkb3coJGVycm9yLWNvbG9yKTtcbiAgICB9XG4gIH1cbn1cblxuLmZvcm0tY2hlY2tib3gsXG4uZm9ybS1yYWRpbyxcbi5mb3JtLXN3aXRjaCB7XG4gIC5oYXMtZXJyb3IgJixcbiAgJi5pcy1lcnJvciB7XG4gICAgLmZvcm0taWNvbiB7XG4gICAgICBib3JkZXItY29sb3I6ICRlcnJvci1jb2xvcjtcbiAgICB9XG5cbiAgICBpbnB1dCB7XG4gICAgICAmOmNoZWNrZWQgKyAuZm9ybS1pY29uIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGVycm9yLWNvbG9yO1xuICAgICAgICBib3JkZXItY29sb3I6ICRlcnJvci1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgJjpmb2N1cyArIC5mb3JtLWljb24ge1xuICAgICAgICBAaW5jbHVkZSBjb250cm9sLXNoYWRvdygkZXJyb3ItY29sb3IpO1xuICAgICAgICBib3JkZXItY29sb3I6ICRlcnJvci1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLmZvcm0tY2hlY2tib3gge1xuICAuaGFzLWVycm9yICYsXG4gICYuaXMtZXJyb3Ige1xuICAgIGlucHV0IHtcbiAgICAgICY6aW5kZXRlcm1pbmF0ZSArIC5mb3JtLWljb24ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkZXJyb3ItY29sb3I7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGVycm9yLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyB2YWxpZGF0aW9uIGJhc2VkIG9uIDpwbGFjZWhvbGRlci1zaG93biAoRWRnZSBkb2Vzbid0IHN1cHBvcnQgaXQgeWV0KVxuLmZvcm0taW5wdXQge1xuICAmOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pIHtcbiAgICAmOmludmFsaWQge1xuICAgICAgYm9yZGVyLWNvbG9yOiAkZXJyb3ItY29sb3I7XG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgQGluY2x1ZGUgY29udHJvbC1zaGFkb3coJGVycm9yLWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlbigkZXJyb3ItY29sb3IsIDUzJSk7XG4gICAgICB9XG5cbiAgICAgICYgKyAuZm9ybS1pbnB1dC1oaW50IHtcbiAgICAgICAgY29sb3I6ICRlcnJvci1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gRm9ybSBkaXNhYmxlZCBhbmQgcmVhZG9ubHlcbi5mb3JtLWlucHV0LFxuLmZvcm0tc2VsZWN0IHtcbiAgJjpkaXNhYmxlZCxcbiAgJi5kaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJnLWNvbG9yLWRhcms7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICBvcGFjaXR5OiAuNTtcbiAgfVxufVxuXG4uZm9ybS1pbnB1dCB7XG4gICZbcmVhZG9ubHldIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmctY29sb3I7XG4gIH1cbn1cblxuaW5wdXQge1xuICAmOmRpc2FibGVkLFxuICAmLmRpc2FibGVkIHtcbiAgICAmICsgLmZvcm0taWNvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItZGFyaztcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICBvcGFjaXR5OiAuNTtcbiAgICB9XG4gIH1cbn1cblxuLmZvcm0tc3dpdGNoIHtcbiAgaW5wdXQge1xuICAgICY6ZGlzYWJsZWQsXG4gICAgJi5kaXNhYmxlZCB7XG4gICAgICAmICsgLmZvcm0taWNvbjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWxpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBGb3JtIGhvcml6b250YWxcbi5mb3JtLWhvcml6b250YWwge1xuICBwYWRkaW5nOiAkbGF5b3V0LXNwYWNpbmcgMDtcblxuICAuZm9ybS1ncm91cCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cbn1cblxuLy8gRm9ybSBpbmxpbmVcbi5mb3JtLWlubGluZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbiIsIi8vIExhYmVsc1xuLmxhYmVsIHtcbiAgQGluY2x1ZGUgbGFiZWwtYmFzZSgpO1xuICBAaW5jbHVkZSBsYWJlbC12YXJpYW50KGxpZ2h0ZW4oJGJvZHktZm9udC1jb2xvciwgNSUpLCAkYmctY29sb3ItZGFyayk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICAvLyBMYWJlbCByb3VuZGVkXG4gICYubGFiZWwtcm91bmRlZCB7XG4gICAgYm9yZGVyLXJhZGl1czogNXJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IC40cmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6IC40cmVtOyBcbiAgfVxuXG4gIC8vIExhYmVsIGNvbG9yc1xuICAmLmxhYmVsLXByaW1hcnkge1xuICAgIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxpZ2h0LWNvbG9yLCAkcHJpbWFyeS1jb2xvcik7XG4gIH1cblxuICAmLmxhYmVsLXNlY29uZGFyeSB7XG4gICAgQGluY2x1ZGUgbGFiZWwtdmFyaWFudCgkcHJpbWFyeS1jb2xvciwgJHNlY29uZGFyeS1jb2xvcik7XG4gIH1cblxuICAmLmxhYmVsLXN1Y2Nlc3Mge1xuICAgIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxpZ2h0LWNvbG9yLCAkc3VjY2Vzcy1jb2xvcik7XG4gIH1cblxuICAmLmxhYmVsLXdhcm5pbmcge1xuICAgIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxpZ2h0LWNvbG9yLCAkd2FybmluZy1jb2xvcik7XG4gIH1cblxuICAmLmxhYmVsLWVycm9yIHtcbiAgICBAaW5jbHVkZSBsYWJlbC12YXJpYW50KCRsaWdodC1jb2xvciwgJGVycm9yLWNvbG9yKTtcbiAgfVxufVxuIiwiLy8gQ29kZXNcbmNvZGUge1xuICBAaW5jbHVkZSBsYWJlbC1iYXNlKCk7XG4gIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGNvZGUtY29sb3IsIGxpZ2h0ZW4oJGNvZGUtY29sb3IsIDQyLjUlKSk7XG4gIGZvbnQtc2l6ZTogODUlO1xufVxuXG4uY29kZSB7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBjb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICY6OmJlZm9yZSB7XG4gICAgY29sb3I6ICRncmF5LWNvbG9yO1xuICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1sYW5nKTtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAkbGF5b3V0LXNwYWNpbmc7XG4gICAgdG9wOiAkdW5pdC1oO1xuICB9XG5cbiAgY29kZSB7XG4gICAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICBwYWRkaW5nOiAxcmVtO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4iLCIvLyBNZWRpYVxuLy8gSW1hZ2UgcmVzcG9uc2l2ZVxuLmltZy1yZXNwb25zaXZlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4vLyBvYmplY3QtZml0IHN1cHBvcnQgaXMgY29taW5nIHRvIE1pY3Jvc29mdCBFZGdlXG4vLyBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL3N0YXR1cy9vYmplY3RmaXRhbmRvYmplY3Rwb3NpdGlvbi9cbi5pbWctZml0LWNvdmVyIHtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG59XG5cbi5pbWctZml0LWNvbnRhaW4ge1xuICBvYmplY3QtZml0OiBjb250YWluO1xufVxuXG4vLyBWaWRlbyByZXNwb25zaXZlXG4udmlkZW8tcmVzcG9uc2l2ZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICAmOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZy1ib3R0b206IDU2LjI1JTsgLy8gRGVmYXVsdCByYXRpbyAxNjo5LCB5b3UgY2FuIGNhbGN1bGF0ZSB0aGlzIHZhbHVlIGJ5IGRpdmlkaW5nIDkgYnkgMTZcbiAgfVxuXG4gIGlmcmFtZSxcbiAgb2JqZWN0LFxuICBlbWJlZCB7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbGVmdDogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5cbnZpZGVvLnZpZGVvLXJlc3BvbnNpdmUge1xuICBoZWlnaHQ6IGF1dG87XG4gIG1heC13aWR0aDogMTAwJTtcblxuICAmOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IG5vbmU7XG4gIH1cbn1cblxuLnZpZGVvLXJlc3BvbnNpdmUtNC0zIHtcbiAgJjo6YmVmb3JlIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNzUlOyAvLyBSYXRpbyA0OjNcbiAgfVxufVxuXG4udmlkZW8tcmVzcG9uc2l2ZS0xLTEge1xuICAmOjpiZWZvcmUge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMDAlOyAvLyBSYXRpbyAxOjFcbiAgfVxufVxuXG4vLyBGaWd1cmVcbi5maWd1cmUge1xuICBtYXJnaW46IDAgMCAkbGF5b3V0LXNwYWNpbmcgMDtcblxuICAuZmlndXJlLWNhcHRpb24ge1xuICAgIGNvbG9yOiAkZ3JheS1jb2xvci1kYXJrO1xuICAgIG1hcmdpbi10b3A6ICRsYXlvdXQtc3BhY2luZztcbiAgfVxufVxuIiwiLy8gTGF5b3V0XG4uY29udGFpbmVyIHtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgcGFkZGluZy1sZWZ0OiAkbGF5b3V0LXNwYWNpbmc7XG4gIHBhZGRpbmctcmlnaHQ6ICRsYXlvdXQtc3BhY2luZztcbiAgd2lkdGg6IDEwMCU7XG5cbiAgJGdyaWQtc3BhY2luZzogKCRsYXlvdXQtc3BhY2luZyAvICgkbGF5b3V0LXNwYWNpbmcgKiAwICsgMSkpICogJGh0bWwtZm9udC1zaXplO1xuXG4gICYuZ3JpZC14bCB7XG4gICAgbWF4LXdpZHRoOiAkZ3JpZC1zcGFjaW5nICogMiArICRzaXplLXhsO1xuICB9XG5cbiAgJi5ncmlkLWxnIHtcbiAgICBtYXgtd2lkdGg6ICRncmlkLXNwYWNpbmcgKiAyICsgJHNpemUtbGc7XG4gIH1cblxuICAmLmdyaWQtbWQge1xuICAgIG1heC13aWR0aDogJGdyaWQtc3BhY2luZyAqIDIgKyAkc2l6ZS1tZDtcbiAgfVxuXG4gICYuZ3JpZC1zbSB7XG4gICAgbWF4LXdpZHRoOiAkZ3JpZC1zcGFjaW5nICogMiArICRzaXplLXNtO1xuICB9XG5cbiAgJi5ncmlkLXhzIHtcbiAgICBtYXgtd2lkdGg6ICRncmlkLXNwYWNpbmcgKiAyICsgJHNpemUteHM7XG4gIH1cbn1cblxuLy8gUmVzcG9uc2l2ZSBicmVha3BvaW50IHN5c3RlbVxuLnNob3cteHMsXG4uc2hvdy1zbSxcbi5zaG93LW1kLFxuLnNob3ctbGcsXG4uc2hvdy14bCB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLy8gUmVzcG9uc2l2ZSBncmlkIHN5c3RlbVxuLmNvbHVtbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1hcmdpbi1sZWZ0OiAtJGxheW91dC1zcGFjaW5nO1xuICBtYXJnaW4tcmlnaHQ6IC0kbGF5b3V0LXNwYWNpbmc7XG5cbiAgJi5jb2wtZ2FwbGVzcyB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuXG4gICAgJiA+IC5jb2x1bW4ge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cbiAgJi5jb2wtb25lbGluZSB7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgfVxufVxuLmNvbHVtbiB7XG4gIGZsZXg6IDE7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgcGFkZGluZy1sZWZ0OiAkbGF5b3V0LXNwYWNpbmc7XG4gIHBhZGRpbmctcmlnaHQ6ICRsYXlvdXQtc3BhY2luZztcblxuICAmLmNvbC0xMixcbiAgJi5jb2wtMTEsXG4gICYuY29sLTEwLFxuICAmLmNvbC05LFxuICAmLmNvbC04LFxuICAmLmNvbC03LFxuICAmLmNvbC02LFxuICAmLmNvbC01LFxuICAmLmNvbC00LFxuICAmLmNvbC0zLFxuICAmLmNvbC0yLFxuICAmLmNvbC0xLFxuICAmLmNvbC1hdXRvIHtcbiAgICBmbGV4OiBub25lO1xuICB9XG59XG4uY29sLTEyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4uY29sLTExIHtcbiAgd2lkdGg6IDkxLjY2NjY2NjY3JTtcbn1cbi5jb2wtMTAge1xuICB3aWR0aDogODMuMzMzMzMzMzMlO1xufVxuLmNvbC05IHtcbiAgd2lkdGg6IDc1JTtcbn1cbi5jb2wtOCB7XG4gIHdpZHRoOiA2Ni42NjY2NjY2NyU7XG59XG4uY29sLTcge1xuICB3aWR0aDogNTguMzMzMzMzMzMlO1xufVxuLmNvbC02IHtcbiAgd2lkdGg6IDUwJTtcbn1cbi5jb2wtNSB7XG4gIHdpZHRoOiA0MS42NjY2NjY2NyU7XG59XG4uY29sLTQge1xuICB3aWR0aDogMzMuMzMzMzMzMzMlO1xufVxuLmNvbC0zIHtcbiAgd2lkdGg6IDI1JTtcbn1cbi5jb2wtMiB7XG4gIHdpZHRoOiAxNi42NjY2NjY2NyU7XG59XG4uY29sLTEge1xuICB3aWR0aDogOC4zMzMzMzMzMyU7XG59XG4uY29sLWF1dG8ge1xuICBmbGV4OiAwIDAgYXV0bztcbiAgbWF4LXdpZHRoOiBub25lO1xuICB3aWR0aDogYXV0bztcbn1cbi5jb2wtbXgtYXV0byB7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG4uY29sLW1sLWF1dG8ge1xuICBtYXJnaW4tbGVmdDogYXV0bztcbn1cbi5jb2wtbXItYXV0byB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiAkc2l6ZS14bCkge1xuICAuY29sLXhsLTEyLFxuICAuY29sLXhsLTExLFxuICAuY29sLXhsLTEwLFxuICAuY29sLXhsLTksXG4gIC5jb2wteGwtOCxcbiAgLmNvbC14bC03LFxuICAuY29sLXhsLTYsXG4gIC5jb2wteGwtNSxcbiAgLmNvbC14bC00LFxuICAuY29sLXhsLTMsXG4gIC5jb2wteGwtMixcbiAgLmNvbC14bC0xLFxuICAuY29sLXhsLWF1dG8ge1xuICAgIGZsZXg6IG5vbmU7XG4gIH1cbiAgLmNvbC14bC0xMiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbC14bC0xMSB7XG4gICAgd2lkdGg6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXhsLTEwIHtcbiAgICB3aWR0aDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wteGwtOSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgfVxuICAuY29sLXhsLTgge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC14bC03IHtcbiAgICB3aWR0aDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wteGwtNiB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxuICAuY29sLXhsLTUge1xuICAgIHdpZHRoOiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC14bC00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wteGwtMyB7XG4gICAgd2lkdGg6IDI1JTtcbiAgfVxuICAuY29sLXhsLTIge1xuICAgIHdpZHRoOiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC14bC0xIHtcbiAgICB3aWR0aDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC14bC1hdXRvIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuICAuaGlkZS14bCB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG4gIC5zaG93LXhsIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogJHNpemUtbGcpIHtcbiAgLmNvbC1sZy0xMixcbiAgLmNvbC1sZy0xMSxcbiAgLmNvbC1sZy0xMCxcbiAgLmNvbC1sZy05LFxuICAuY29sLWxnLTgsXG4gIC5jb2wtbGctNyxcbiAgLmNvbC1sZy02LFxuICAuY29sLWxnLTUsXG4gIC5jb2wtbGctNCxcbiAgLmNvbC1sZy0zLFxuICAuY29sLWxnLTIsXG4gIC5jb2wtbGctMSxcbiAgLmNvbC1sZy1hdXRvIHtcbiAgICBmbGV4OiBub25lO1xuICB9XG4gIC5jb2wtbGctMTIge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb2wtbGctMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLTkge1xuICAgIHdpZHRoOiA3NSU7XG4gIH1cbiAgLmNvbC1sZy04IHtcbiAgICB3aWR0aDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLTYge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbiAgLmNvbC1sZy01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctNCB7XG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLTMge1xuICAgIHdpZHRoOiAyNSU7XG4gIH1cbiAgLmNvbC1sZy0yIHtcbiAgICB3aWR0aDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctMSB7XG4gICAgd2lkdGg6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctYXV0byB7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbiAgLmhpZGUtbGcge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuICAuc2hvdy1sZyB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtYXgtd2lkdGg6ICRzaXplLW1kKSB7XG4gIC5jb2wtbWQtMTIsXG4gIC5jb2wtbWQtMTEsXG4gIC5jb2wtbWQtMTAsXG4gIC5jb2wtbWQtOSxcbiAgLmNvbC1tZC04LFxuICAuY29sLW1kLTcsXG4gIC5jb2wtbWQtNixcbiAgLmNvbC1tZC01LFxuICAuY29sLW1kLTQsXG4gIC5jb2wtbWQtMyxcbiAgLmNvbC1tZC0yLFxuICAuY29sLW1kLTEsXG4gIC5jb2wtbWQtYXV0byB7XG4gICAgZmxleDogbm9uZTtcbiAgfVxuICAuY29sLW1kLTEyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuY29sLW1kLTExIHtcbiAgICB3aWR0aDogOTEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtMTAge1xuICAgIHdpZHRoOiA4My4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC05IHtcbiAgICB3aWR0aDogNzUlO1xuICB9XG4gIC5jb2wtbWQtOCB7XG4gICAgd2lkdGg6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLTcge1xuICAgIHdpZHRoOiA1OC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC02IHtcbiAgICB3aWR0aDogNTAlO1xuICB9XG4gIC5jb2wtbWQtNSB7XG4gICAgd2lkdGg6IDQxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLTQge1xuICAgIHdpZHRoOiAzMy4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC0zIHtcbiAgICB3aWR0aDogMjUlO1xuICB9XG4gIC5jb2wtbWQtMiB7XG4gICAgd2lkdGg6IDE2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLTEge1xuICAgIHdpZHRoOiA4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLWF1dG8ge1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG4gIC5oaWRlLW1kIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbiAgLnNob3ctbWQge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiAkc2l6ZS1zbSkge1xuICAuY29sLXNtLTEyLFxuICAuY29sLXNtLTExLFxuICAuY29sLXNtLTEwLFxuICAuY29sLXNtLTksXG4gIC5jb2wtc20tOCxcbiAgLmNvbC1zbS03LFxuICAuY29sLXNtLTYsXG4gIC5jb2wtc20tNSxcbiAgLmNvbC1zbS00LFxuICAuY29sLXNtLTMsXG4gIC5jb2wtc20tMixcbiAgLmNvbC1zbS0xLFxuICAuY29sLXNtLWF1dG8ge1xuICAgIGZsZXg6IG5vbmU7XG4gIH1cbiAgLmNvbC1zbS0xMiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbC1zbS0xMSB7XG4gICAgd2lkdGg6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLTEwIHtcbiAgICB3aWR0aDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tOSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgfVxuICAuY29sLXNtLTgge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS03IHtcbiAgICB3aWR0aDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tNiB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxuICAuY29sLXNtLTUge1xuICAgIHdpZHRoOiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tMyB7XG4gICAgd2lkdGg6IDI1JTtcbiAgfVxuICAuY29sLXNtLTIge1xuICAgIHdpZHRoOiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS0xIHtcbiAgICB3aWR0aDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1hdXRvIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuICAuaGlkZS1zbSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG4gIC5zaG93LXNtIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogJHNpemUteHMpIHtcbiAgLmNvbC14cy0xMixcbiAgLmNvbC14cy0xMSxcbiAgLmNvbC14cy0xMCxcbiAgLmNvbC14cy05LFxuICAuY29sLXhzLTgsXG4gIC5jb2wteHMtNyxcbiAgLmNvbC14cy02LFxuICAuY29sLXhzLTUsXG4gIC5jb2wteHMtNCxcbiAgLmNvbC14cy0zLFxuICAuY29sLXhzLTIsXG4gIC5jb2wteHMtMSxcbiAgLmNvbC14cy1hdXRvIHtcbiAgICBmbGV4OiBub25lO1xuICB9XG4gIC5jb2wteHMtMTIge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb2wteHMtMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC14cy0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXhzLTkge1xuICAgIHdpZHRoOiA3NSU7XG4gIH1cbiAgLmNvbC14cy04IHtcbiAgICB3aWR0aDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wteHMtNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXhzLTYge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbiAgLmNvbC14cy01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wteHMtNCB7XG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXhzLTMge1xuICAgIHdpZHRoOiAyNSU7XG4gIH1cbiAgLmNvbC14cy0yIHtcbiAgICB3aWR0aDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wteHMtMSB7XG4gICAgd2lkdGg6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wteHMtYXV0byB7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbiAgLmhpZGUteHMge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuICAuc2hvdy14cyB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuIiwiLy8gSGVyb1xuLmhlcm8ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBhZGRpbmctYm90dG9tOiA0cmVtO1xuICBwYWRkaW5nLXRvcDogNHJlbTtcblxuICAmLmhlcm8tc20ge1xuICAgIHBhZGRpbmctYm90dG9tOiAycmVtO1xuICAgIHBhZGRpbmctdG9wOiAycmVtO1xuICB9XG5cbiAgJi5oZXJvLWxnIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogOHJlbTtcbiAgICBwYWRkaW5nLXRvcDogOHJlbTtcbiAgfVxuXG4gIC5oZXJvLWJvZHkge1xuICAgIHBhZGRpbmc6ICRsYXlvdXQtc3BhY2luZztcbiAgfVxufSIsIi8vIE5hdmJhclxuLm5hdmJhciB7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAubmF2YmFyLXNlY3Rpb24ge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4OiAxIDAgMDtcblxuICAgICY6bm90KDpmaXJzdC1jaGlsZCk6bGFzdC1jaGlsZCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItY2VudGVyIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleDogMCAwIGF1dG87XG4gIH1cblxuICAubmF2YmFyLWJyYW5kIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtbGc7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG59XG4iLCIvLyBBY2NvcmRpb25zXG4uYWNjb3JkaW9uIHtcbiAgaW5wdXQ6Y2hlY2tlZCB+LFxuICAmW29wZW5dIHtcbiAgICAmIC5hY2NvcmRpb24taGVhZGVyIHtcbiAgICAgIC5pY29uIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgICYgLmFjY29yZGlvbi1ib2R5IHtcbiAgICAgIG1heC1oZWlnaHQ6IDUwcmVtO1xuICAgIH1cbiAgfVxuXG4gIC5hY2NvcmRpb24taGVhZGVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAkdW5pdC0xICR1bml0LTI7XG5cbiAgICAuaWNvbiB7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cztcbiAgICB9XG4gIH1cblxuICAuYWNjb3JkaW9uLWJvZHkge1xuICAgIG1hcmdpbi1ib3R0b206ICRsYXlvdXQtc3BhY2luZztcbiAgICBtYXgtaGVpZ2h0OiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAuMjVzO1xuICB9XG59XG5cbi8vIFJlbW92ZSBkZWZhdWx0IGRldGFpbHMgbWFya2VyIGluIFdlYmtpdFxuc3VtbWFyeS5hY2NvcmRpb24taGVhZGVyIHtcbiAgJjo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuIiwiLy8gQXZhdGFyc1xuLmF2YXRhciB7XG4gIEBpbmNsdWRlIGF2YXRhci1iYXNlKCk7XG4gIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGNvbG9yOiByZ2JhKCRsaWdodC1jb2xvciwgLjg1KTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXdlaWdodDogMzAwO1xuICBsaW5lLWhlaWdodDogMS4yNTtcbiAgbWFyZ2luOiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgJi5hdmF0YXIteHMge1xuICAgIEBpbmNsdWRlIGF2YXRhci1iYXNlKCR1bml0LTQpO1xuICB9XG4gICYuYXZhdGFyLXNtIHtcbiAgICBAaW5jbHVkZSBhdmF0YXItYmFzZSgkdW5pdC02KTtcbiAgfVxuICAmLmF2YXRhci1sZyB7XG4gICAgQGluY2x1ZGUgYXZhdGFyLWJhc2UoJHVuaXQtMTIpO1xuICB9XG4gICYuYXZhdGFyLXhsIHtcbiAgICBAaW5jbHVkZSBhdmF0YXItYmFzZSgkdW5pdC0xNik7XG4gIH1cblxuICBpbWcge1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHotaW5kZXg6ICR6aW5kZXgtMDtcbiAgfVxuXG4gIC5hdmF0YXItaWNvbixcbiAgLmF2YXRhci1wcmVzZW5jZSB7XG4gICAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWxpZ2h0O1xuICAgIGJvdHRvbTogMTQuNjQlO1xuICAgIGhlaWdodDogNTAlO1xuICAgIHBhZGRpbmc6ICRib3JkZXItd2lkdGgtbGc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAxNC42NCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCA1MCUpO1xuICAgIHdpZHRoOiA1MCU7XG4gICAgei1pbmRleDogJHppbmRleC0wICsgMTtcbiAgfVxuXG4gIC5hdmF0YXItcHJlc2VuY2Uge1xuICAgIGJhY2tncm91bmQ6ICRncmF5LWNvbG9yO1xuICAgIGJveC1zaGFkb3c6IDAgMCAwICRib3JkZXItd2lkdGgtbGcgJGxpZ2h0LWNvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBoZWlnaHQ6IC41ZW07XG4gICAgd2lkdGg6IC41ZW07XG5cbiAgICAmLm9ubGluZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkc3VjY2Vzcy1jb2xvcjtcbiAgICB9XG5cbiAgICAmLmJ1c3kge1xuICAgICAgYmFja2dyb3VuZDogJGVycm9yLWNvbG9yO1xuICAgIH1cblxuICAgICYuYXdheSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkd2FybmluZy1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAmW2RhdGEtaW5pdGlhbF06OmJlZm9yZSB7XG4gICAgY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgICBjb250ZW50OiBhdHRyKGRhdGEtaW5pdGlhbCk7XG4gICAgbGVmdDogNTAlO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICB6LWluZGV4OiAkemluZGV4LTA7XG4gIH1cbn0iLCIvLyBCYWRnZXNcbi5iYWRnZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAmW2RhdGEtYmFkZ2VdLFxuICAmOm5vdChbZGF0YS1iYWRnZV0pIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgICBib3JkZXItcmFkaXVzOiAuNXJlbTtcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIC4xcmVtICRiZy1jb2xvci1saWdodDtcbiAgICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICBjb250ZW50OiBhdHRyKGRhdGEtYmFkZ2UpO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLS4wNXJlbSwgLS41cmVtKTtcbiAgICB9XG4gIH1cbiAgJltkYXRhLWJhZGdlXSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICAgICAgaGVpZ2h0OiAuOXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgbWluLXdpZHRoOiAuOXJlbTtcbiAgICAgIHBhZGRpbmc6IC4xcmVtIC4ycmVtO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG4gIH1cbiAgJjpub3QoW2RhdGEtYmFkZ2VdKSxcbiAgJltkYXRhLWJhZGdlPVwiXCJdIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBoZWlnaHQ6IDZweDtcbiAgICAgIG1pbi13aWR0aDogNnB4O1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIHdpZHRoOiA2cHg7XG4gICAgfVxuICB9XG5cbiAgLy8gQmFkZ2VzIGZvciBCdXR0b25zXG4gICYuYnRuIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgLTUwJSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQmFkZ2VzIGZvciBBdmF0YXJzXG4gICYuYXZhdGFyIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDE0LjY0JTtcbiAgICAgIHJpZ2h0OiAxNC42NCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIC01MCUpO1xuICAgICAgei1pbmRleDogJHppbmRleC0xO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQnJlYWRjcnVtYnNcbi5icmVhZGNydW1iIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbWFyZ2luOiAkdW5pdC0xIDA7XG4gIHBhZGRpbmc6ICR1bml0LTEgMDtcblxuICAuYnJlYWRjcnVtYi1pdGVtIHtcbiAgICBjb2xvcjogJGdyYXktY29sb3ItZGFyaztcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6ICR1bml0LTEgMDtcblxuICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6ICR1bml0LTE7XG5cbiAgICAgIGEge1xuICAgICAgICBjb2xvcjogJGdyYXktY29sb3ItZGFyaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGNvbG9yOiAkZ3JheS1jb2xvci1kYXJrO1xuICAgICAgICBjb250ZW50OiBcIi9cIjtcbiAgICAgICAgcGFkZGluZy1yaWdodDogJHVuaXQtMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEJhcnNcbi5iYXIge1xuICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItZGFyaztcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogbm93cmFwO1xuICBoZWlnaHQ6ICR1bml0LTQ7XG4gIHdpZHRoOiAxMDAlO1xuXG4gICYuYmFyLXNtIHtcbiAgICBoZWlnaHQ6ICR1bml0LTE7XG4gIH1cblxuICAvLyBUT0RPOiBhdHRyKCkgc3VwcG9ydFxuICAuYmFyLWl0ZW0ge1xuICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIGxpbmUtaGVpZ2h0OiAkdW5pdC00O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdpZHRoOiAwO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIH1cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgZmxleC1zaHJpbms6IDE7XG4gICAgfVxuICB9XG59XG5cbi8vIFNsaWRlciBiYXJcbi5iYXItc2xpZGVyIHtcbiAgaGVpZ2h0OiAkYm9yZGVyLXdpZHRoLWxnO1xuICBtYXJnaW46ICRsYXlvdXQtc3BhY2luZyAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmJhci1pdGVtIHtcbiAgICBsZWZ0OiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICY6bm90KDpsYXN0LWNoaWxkKTpmaXJzdC1jaGlsZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItZGFyaztcbiAgICAgIHotaW5kZXg6ICR6aW5kZXgtMDtcbiAgICB9XG4gIH1cblxuICAuYmFyLXNsaWRlci1idG4ge1xuICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgaGVpZ2h0OiAkdW5pdC0zO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgLTUwJSk7XG4gICAgd2lkdGg6ICR1bml0LTM7XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAuMXJlbSAkcHJpbWFyeS1jb2xvcjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENhcmRzXG4uY2FyZCB7XG4gIGJhY2tncm91bmQ6ICRiZy1jb2xvci1saWdodDtcbiAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3I7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gIC5jYXJkLWhlYWRlcixcbiAgLmNhcmQtYm9keSxcbiAgLmNhcmQtZm9vdGVyIHtcbiAgICBwYWRkaW5nOiAkbGF5b3V0LXNwYWNpbmctbGc7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgcGFkZGluZy1ib3R0b206ICRsYXlvdXQtc3BhY2luZy1sZztcbiAgICB9XG4gIH1cblxuICAuY2FyZC1ib2R5IHtcbiAgICBmbGV4OiAxIDEgYXV0bztcbiAgfVxuXG4gIC5jYXJkLWltYWdlIHtcbiAgICBwYWRkaW5nLXRvcDogJGxheW91dC1zcGFjaW5nLWxnO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLXRvcDogMDtcblxuICAgICAgaW1nIHtcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgaW1nIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIENoaXBzXG4uY2hpcCB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6ICRiZy1jb2xvci1kYXJrO1xuICBib3JkZXItcmFkaXVzOiA1cmVtO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZm9udC1zaXplOiA5MCU7XG4gIGhlaWdodDogJHVuaXQtNjtcbiAgbGluZS1oZWlnaHQ6ICR1bml0LTQ7XG4gIG1hcmdpbjogJHVuaXQtaDtcbiAgbWF4LXdpZHRoOiAkY29udHJvbC13aWR0aC1zbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogJHVuaXQtMSAkdW5pdC0yO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICYuYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICB9XG5cbiAgLmF2YXRhciB7XG4gICAgbWFyZ2luLWxlZnQ6IC0kdW5pdC0yO1xuICAgIG1hcmdpbi1yaWdodDogJHVuaXQtMTtcbiAgfVxuXG4gIC5idG4tY2xlYXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKC43NSk7XG4gIH1cbn1cbiIsIi8vIERyb3Bkb3duXG4uZHJvcGRvd24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAubWVudSB7XG4gICAgYW5pbWF0aW9uOiBzbGlkZS1kb3duIC4xNXMgZWFzZSAxO1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgbGVmdDogMDtcbiAgICBtYXgtaGVpZ2h0OiA1MHZoO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMTAwJTtcbiAgfVxuXG4gICYuZHJvcGRvd24tcmlnaHQge1xuICAgIC5tZW51IHtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgICByaWdodDogMDtcbiAgICB9XG4gIH1cblxuICAmLmFjdGl2ZSAubWVudSxcbiAgLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyArIC5tZW51LFxuICAubWVudTpob3ZlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAvLyBGaXggZHJvcGRvd24tdG9nZ2xlIGJvcmRlciByYWRpdXMgaW4gYnV0dG9uIGdyb3Vwc1xuICAuYnRuLWdyb3VwIHtcbiAgICAuZHJvcGRvd24tdG9nZ2xlOm50aC1sYXN0LWNoaWxkKDIpIHtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEVtcHR5IHN0YXRlcyAob3IgQmxhbmsgc2xhdGVzKVxuLmVtcHR5IHtcbiAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgY29sb3I6ICRncmF5LWNvbG9yLWRhcms7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogJHVuaXQtMTYgJHVuaXQtODtcblxuICAuZW1wdHktaWNvbiB7XG4gICAgbWFyZ2luLWJvdHRvbTogJGxheW91dC1zcGFjaW5nLWxnO1xuICB9XG5cbiAgLmVtcHR5LXRpdGxlLFxuICAuZW1wdHktc3VidGl0bGUge1xuICAgIG1hcmdpbjogJGxheW91dC1zcGFjaW5nIGF1dG87XG4gIH1cblxuICAuZW1wdHktYWN0aW9uIHtcbiAgICBtYXJnaW4tdG9wOiAkbGF5b3V0LXNwYWNpbmctbGc7XG4gIH1cbn1cbiIsIi8vIE1lbnVzXG4ubWVudSB7XG4gIEBpbmNsdWRlIHNoYWRvdy12YXJpYW50KC4wNXJlbSk7XG4gIGJhY2tncm91bmQ6ICRiZy1jb2xvci1saWdodDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIG1hcmdpbjogMDtcbiAgbWluLXdpZHRoOiAkY29udHJvbC13aWR0aC14cztcbiAgcGFkZGluZzogJHVuaXQtMjtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKCRsYXlvdXQtc3BhY2luZy1zbSk7XG4gIHotaW5kZXg6ICR6aW5kZXgtMztcblxuICAmLm1lbnUtbmF2IHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG5cbiAgLm1lbnUtaXRlbSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBwYWRkaW5nOiAwICR1bml0LTI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICYgPiBhIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbjogMCAoLSR1bml0LTIpO1xuICAgICAgcGFkZGluZzogJHVuaXQtMSAkdW5pdC0yO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgJjpmb2N1cyxcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkc2Vjb25kYXJ5LWNvbG9yO1xuICAgICAgICBjb2xvcjogJHByaW1hcnktY29sb3I7XG4gICAgICB9XG4gICAgICAmOmFjdGl2ZSxcbiAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHNlY29uZGFyeS1jb2xvcjtcbiAgICAgICAgY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5mb3JtLWNoZWNrYm94LFxuICAgIC5mb3JtLXJhZGlvLFxuICAgIC5mb3JtLXN3aXRjaCB7XG4gICAgICBtYXJnaW46ICR1bml0LWggMDtcbiAgICB9XG5cbiAgICAmICsgLm1lbnUtaXRlbSB7XG4gICAgICBtYXJnaW4tdG9wOiAkdW5pdC0xO1xuICAgIH1cbiAgfVxuXG4gIC5tZW51LWJhZGdlIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogMDtcbiAgICB0b3A6IDA7XG5cbiAgICAubGFiZWwge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAkdW5pdC0yO1xuICAgIH1cbiAgfVxufSIsIi8vIE1vZGFsc1xuLm1vZGFsIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm90dG9tOiAwO1xuICBkaXNwbGF5OiBub25lO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbGVmdDogMDtcbiAgb3BhY2l0eTogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogJGxheW91dC1zcGFjaW5nO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IDA7XG5cbiAgJjp0YXJnZXQsXG4gICYuYWN0aXZlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG9wYWNpdHk6IDE7XG4gICAgei1pbmRleDogJHppbmRleC00O1xuXG4gICAgLm1vZGFsLW92ZXJsYXkge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgkYmctY29sb3IsIC43NSk7XG4gICAgICBib3R0b206IDA7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogMDtcbiAgICAgIHRvcDogMDtcbiAgICB9XG5cbiAgICAubW9kYWwtY29udGFpbmVyIHtcbiAgICAgIGFuaW1hdGlvbjogc2xpZGUtZG93biAuMnMgZWFzZSAxO1xuICAgICAgei1pbmRleDogJHppbmRleC0wO1xuICAgIH1cbiAgfVxuXG4gICYubW9kYWwtc20ge1xuICAgIC5tb2RhbC1jb250YWluZXIge1xuICAgICAgbWF4LXdpZHRoOiAkY29udHJvbC13aWR0aC1zbTtcbiAgICAgIHBhZGRpbmc6IDAgJHVuaXQtMjtcbiAgICB9XG4gIH1cblxuICAmLm1vZGFsLWxnIHtcbiAgICAubW9kYWwtb3ZlcmxheSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmctY29sb3ItbGlnaHQ7XG4gICAgfVxuXG4gICAgLm1vZGFsLWNvbnRhaW5lciB7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgbWF4LXdpZHRoOiAkY29udHJvbC13aWR0aC1sZztcbiAgICB9XG4gIH1cbn1cblxuLm1vZGFsLWNvbnRhaW5lciB7XG4gIEBpbmNsdWRlIHNoYWRvdy12YXJpYW50KC4ycmVtKTtcbiAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWxpZ2h0O1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWF4LWhlaWdodDogNzV2aDtcbiAgbWF4LXdpZHRoOiAkY29udHJvbC13aWR0aC1tZDtcbiAgcGFkZGluZzogMCAkdW5pdC00O1xuICB3aWR0aDogMTAwJTtcblxuICAmLm1vZGFsLWZ1bGxoZWlnaHQge1xuICAgIG1heC1oZWlnaHQ6IDEwMHZoO1xuICB9XG5cbiAgLm1vZGFsLWhlYWRlciB7XG4gICAgY29sb3I6ICRkYXJrLWNvbG9yO1xuICAgIHBhZGRpbmc6ICR1bml0LTQ7XG4gIH1cblxuICAubW9kYWwtYm9keSB7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBwYWRkaW5nOiAkdW5pdC00O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5tb2RhbC1mb290ZXIge1xuICAgIHBhZGRpbmc6ICR1bml0LTQ7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIH1cbn1cbiIsIi8vIE5hdnNcbi5uYXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW46ICR1bml0LTEgMDtcblxuICAubmF2LWl0ZW0ge1xuICAgIGEge1xuICAgICAgY29sb3I6ICRncmF5LWNvbG9yLWRhcms7XG4gICAgICBwYWRkaW5nOiAkdW5pdC0xICR1bml0LTI7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAmOmZvY3VzLFxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgJi5hY3RpdmUge1xuICAgICAgJiA+IGEge1xuICAgICAgICBjb2xvcjogZGFya2VuKCRncmF5LWNvbG9yLWRhcmssIDEwJSk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICAmOmZvY3VzLFxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogJHByaW1hcnktY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmIC5uYXYge1xuICAgIG1hcmdpbi1ib3R0b206ICR1bml0LTI7XG4gICAgbWFyZ2luLWxlZnQ6ICR1bml0LTQ7XG4gIH1cbn1cbiIsIi8vIFBhZ2luYXRpb25cbi5wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbWFyZ2luOiAkdW5pdC0xIDA7XG4gIHBhZGRpbmc6ICR1bml0LTEgMDtcblxuICAucGFnZS1pdGVtIHtcbiAgICBtYXJnaW46ICR1bml0LTEgJHVuaXQtbztcblxuICAgIHNwYW4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgcGFkZGluZzogJHVuaXQtMSAkdW5pdC0xO1xuICAgIH1cblxuICAgIGEge1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBwYWRkaW5nOiAkdW5pdC0xICR1bml0LTI7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAmOmZvY3VzLFxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmRpc2FibGVkIHtcbiAgICAgIGEge1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIG9wYWNpdHk6IC41O1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmFjdGl2ZSB7XG4gICAgICBhIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG4gICAgICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5wYWdlLXByZXYsXG4gICAgJi5wYWdlLW5leHQge1xuICAgICAgZmxleDogMSAwIDUwJTtcbiAgICB9XG5cbiAgICAmLnBhZ2UtbmV4dCB7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICB9XG5cbiAgICAucGFnZS1pdGVtLXRpdGxlIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG5cbiAgICAucGFnZS1pdGVtLXN1YnRpdGxlIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIG9wYWNpdHk6IC41O1xuICAgIH1cbiAgfVxufVxuIiwiLy8gUGFuZWxzXG4ucGFuZWwge1xuICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLnBhbmVsLWhlYWRlcixcbiAgLnBhbmVsLWZvb3RlciB7XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgcGFkZGluZzogJGxheW91dC1zcGFjaW5nLWxnO1xuICB9XG5cbiAgLnBhbmVsLW5hdiB7XG4gICAgZmxleDogMCAwIGF1dG87XG4gIH1cblxuICAucGFuZWwtYm9keSB7XG4gICAgZmxleDogMSAxIGF1dG87XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBwYWRkaW5nOiAwICRsYXlvdXQtc3BhY2luZy1sZztcbiAgfVxufVxuIiwiLy8gUG9wb3ZlcnNcbi5wb3BvdmVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLnBvcG92ZXItY29udGFpbmVyIHtcbiAgICBsZWZ0OiA1MCU7XG4gICAgb3BhY2l0eTogMDtcbiAgICBwYWRkaW5nOiAkbGF5b3V0LXNwYWNpbmc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgwKTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzO1xuICAgIHdpZHRoOiAkY29udHJvbC13aWR0aC1zbTtcbiAgICB6LWluZGV4OiAkemluZGV4LTM7XG4gIH1cblxuICAqOmZvY3VzICsgLnBvcG92ZXItY29udGFpbmVyLFxuICAmOmhvdmVyIC5wb3BvdmVyLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTAwJSkgc2NhbGUoMSk7XG4gIH1cblxuICAmLnBvcG92ZXItcmlnaHQge1xuICAgIC5wb3BvdmVyLWNvbnRhaW5lciB7XG4gICAgICBsZWZ0OiAxMDAlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgfVxuXG4gICAgKjpmb2N1cyArIC5wb3BvdmVyLWNvbnRhaW5lcixcbiAgICAmOmhvdmVyIC5wb3BvdmVyLWNvbnRhaW5lciB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtNTAlKSBzY2FsZSgxKTtcbiAgICB9XG4gIH1cblxuICAmLnBvcG92ZXItYm90dG9tIHtcbiAgICAucG9wb3Zlci1jb250YWluZXIge1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdG9wOiAxMDAlO1xuICAgIH1cblxuICAgICo6Zm9jdXMgKyAucG9wb3Zlci1jb250YWluZXIsXG4gICAgJjpob3ZlciAucG9wb3Zlci1jb250YWluZXIge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCkgc2NhbGUoMSk7XG4gICAgfVxuICB9XG5cbiAgJi5wb3BvdmVyLWxlZnQge1xuICAgIC5wb3BvdmVyLWNvbnRhaW5lciB7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdG9wOiA1MCU7XG4gICAgfVxuXG4gICAgKjpmb2N1cyArIC5wb3BvdmVyLWNvbnRhaW5lcixcbiAgICAmOmhvdmVyIC5wb3BvdmVyLWNvbnRhaW5lciB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTAwJSwgLTUwJSkgc2NhbGUoMSk7XG4gICAgfVxuICB9XG5cbiAgLmNhcmQge1xuICAgIEBpbmNsdWRlIHNoYWRvdy12YXJpYW50KC4ycmVtKTtcbiAgICBib3JkZXI6IDA7XG4gIH1cbn1cbiIsIi8vIFN0ZXBzXG4uc3RlcCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogbm93cmFwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW46ICR1bml0LTEgMDtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgLnN0ZXAtaXRlbSB7XG4gICAgZmxleDogMSAxIDA7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtaW4taGVpZ2h0OiAxcmVtO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgaGVpZ2h0OiAycHg7XG4gICAgICBsZWZ0OiAtNTAlO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA5cHg7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICBhIHtcbiAgICAgIGNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHBhZGRpbmc6IDIwcHggMTBweCAwO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoLWxnIHNvbGlkICRsaWdodC1jb2xvcjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAkdW5pdC0zO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAkdW5pdC0xO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICAgIHdpZHRoOiAkdW5pdC0zO1xuICAgICAgICB6LWluZGV4OiAkemluZGV4LTA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5hY3RpdmUge1xuICAgICAgYSB7XG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGxpZ2h0LWNvbG9yO1xuICAgICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aC1sZyBzb2xpZCAkcHJpbWFyeS1jb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmIH4gLnN0ZXAtaXRlbSB7XG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGJvcmRlci1jb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGEge1xuICAgICAgICAgIGNvbG9yOiAkZ3JheS1jb2xvcjtcblxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gVGFic1xuLnRhYiB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJvcmRlci1ib3R0b206ICRib3JkZXItd2lkdGggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW46ICR1bml0LTEgMCAoJHVuaXQtMSAtICRib3JkZXItd2lkdGgpIDA7XG5cbiAgLnRhYi1pdGVtIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuXG4gICAgYSB7XG4gICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXdpZHRoLWxnIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbjogMCAkdW5pdC0yIDAgMDtcbiAgICAgIHBhZGRpbmc6ICR1bml0LTIgJHVuaXQtMSAkdW5pdC0yIC0gJGJvcmRlci13aWR0aC1sZyAkdW5pdC0xO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgJjpmb2N1cyxcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogJGxpbmstY29sb3I7XG4gICAgICB9XG4gICAgfVxuICAgICYuYWN0aXZlIGEsXG4gICAgYS5hY3RpdmUge1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHByaW1hcnktY29sb3I7XG4gICAgICBjb2xvcjogJGxpbmstY29sb3I7XG4gICAgfVxuXG4gICAgJi50YWItYWN0aW9uIHtcbiAgICAgIGZsZXg6IDEgMCBhdXRvO1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuXG4gICAgLmJ0bi1jbGVhciB7XG4gICAgICBtYXJnaW4tdG9wOiAtJHVuaXQtMTtcbiAgICB9XG4gIH1cblxuICAmLnRhYi1ibG9jayB7XG4gICAgLnRhYi1pdGVtIHtcbiAgICAgIGZsZXg6IDEgMCAwO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICBhIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuXG4gICAgICAuYmFkZ2Uge1xuICAgICAgICAmW2RhdGEtYmFkZ2VdOjphZnRlciB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHJpZ2h0OiAkdW5pdC1oO1xuICAgICAgICAgIHRvcDogJHVuaXQtaDtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICY6bm90KC50YWItYmxvY2spIHtcbiAgICAuYmFkZ2Uge1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIFRpbGVzXG4udGlsZSB7XG4gIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC50aWxlLWljb24sXG4gIC50aWxlLWFjdGlvbiB7XG4gICAgZmxleDogMCAwIGF1dG87XG4gIH1cbiAgLnRpbGUtY29udGVudCB7XG4gICAgZmxleDogMSAxIGF1dG87XG4gICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgICBwYWRkaW5nLWxlZnQ6ICR1bml0LTI7XG4gICAgfVxuICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkdW5pdC0yO1xuICAgIH1cbiAgfVxuICAudGlsZS10aXRsZSxcbiAgLnRpbGUtc3VidGl0bGUge1xuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gIH1cblxuICAmLnRpbGUtY2VudGVyZWQge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAudGlsZS1jb250ZW50IHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLnRpbGUtdGl0bGUsXG4gICAgLnRpbGUtc3VidGl0bGUge1xuICAgICAgQGluY2x1ZGUgdGV4dC1lbGxpcHNpcygpO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIFRvYXN0c1xuLnRvYXN0IHtcbiAgQGluY2x1ZGUgdG9hc3QtdmFyaWFudCgkZGFyay1jb2xvcik7XG4gIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkZGFyay1jb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAkbGF5b3V0LXNwYWNpbmc7XG4gIHdpZHRoOiAxMDAlO1xuXG4gICYudG9hc3QtcHJpbWFyeSB7XG4gICAgQGluY2x1ZGUgdG9hc3QtdmFyaWFudCgkcHJpbWFyeS1jb2xvcik7XG4gIH1cblxuICAmLnRvYXN0LXN1Y2Nlc3Mge1xuICAgIEBpbmNsdWRlIHRvYXN0LXZhcmlhbnQoJHN1Y2Nlc3MtY29sb3IpO1xuICB9XG5cbiAgJi50b2FzdC13YXJuaW5nIHtcbiAgICBAaW5jbHVkZSB0b2FzdC12YXJpYW50KCR3YXJuaW5nLWNvbG9yKTtcbiAgfVxuXG4gICYudG9hc3QtZXJyb3Ige1xuICAgIEBpbmNsdWRlIHRvYXN0LXZhcmlhbnQoJGVycm9yLWNvbG9yKTtcbiAgfVxuXG4gIGEge1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyLFxuICAgICY6YWN0aXZlLFxuICAgICYuYWN0aXZlIHtcbiAgICAgIG9wYWNpdHk6IC43NTtcbiAgICB9XG4gIH1cblxuICAuYnRuLWNsZWFyIHtcbiAgICBtYXJnaW46ICR1bml0LWg7XG4gIH1cblxuICBwIHtcbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIFRvb2x0aXBzXG4udG9vbHRpcCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgJjo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoJGRhcmstY29sb3IsIC45NSk7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm90dG9tOiAxMDAlO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgY29udGVudDogYXR0cihkYXRhLXRvb2x0aXApO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgbWF4LXdpZHRoOiAkY29udHJvbC13aWR0aC1zbTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZzogJHVuaXQtMSAkdW5pdC0yO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAkdW5pdC0yKTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4ycywgdHJhbnNmb3JtIC4ycztcbiAgICB3aGl0ZS1zcGFjZTogcHJlO1xuICAgIHotaW5kZXg6ICR6aW5kZXgtMztcbiAgfVxuICAmOmZvY3VzLFxuICAmOmhvdmVyIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLSR1bml0LTEpO1xuICAgIH1cbiAgfVxuICAmW2Rpc2FibGVkXSxcbiAgJi5kaXNhYmxlZCB7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gIH1cblxuICAmLnRvb2x0aXAtcmlnaHQge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIGJvdHRvbTogNTAlO1xuICAgICAgbGVmdDogMTAwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0kdW5pdC0xLCA1MCUpO1xuICAgIH1cbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgkdW5pdC0xLCA1MCUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYudG9vbHRpcC1ib3R0b20ge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIGJvdHRvbTogYXV0bztcbiAgICAgIHRvcDogMTAwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC0kdW5pdC0yKTtcbiAgICB9XG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgJHVuaXQtMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAmLnRvb2x0aXAtbGVmdCB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm90dG9tOiA1MCU7XG4gICAgICBsZWZ0OiBhdXRvO1xuICAgICAgcmlnaHQ6IDEwMCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgkdW5pdC0yLCA1MCUpO1xuICAgIH1cbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtJHVuaXQtMSwgNTAlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEFuaW1hdGlvbnNcbkBrZXlmcmFtZXMgbG9hZGluZyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgc2xpZGUtZG93biB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJHVuaXQtOCk7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cbiIsIkBpbXBvcnQgXCJ1dGlsaXRpZXMvY29sb3JzXCI7XG5AaW1wb3J0IFwidXRpbGl0aWVzL2N1cnNvcnNcIjtcbkBpbXBvcnQgXCJ1dGlsaXRpZXMvZGlzcGxheVwiO1xuQGltcG9ydCBcInV0aWxpdGllcy9kaXZpZGVyXCI7XG5AaW1wb3J0IFwidXRpbGl0aWVzL2xvYWRpbmdcIjtcbkBpbXBvcnQgXCJ1dGlsaXRpZXMvcG9zaXRpb25cIjtcbkBpbXBvcnQgXCJ1dGlsaXRpZXMvc2hhcGVzXCI7XG5AaW1wb3J0IFwidXRpbGl0aWVzL3RleHRcIjtcbiIsIi8vIFRleHQgY29sb3JzXG5AaW5jbHVkZSB0ZXh0LWNvbG9yLXZhcmlhbnQoXCIudGV4dC1wcmltYXJ5XCIsICRwcmltYXJ5LWNvbG9yKTtcblxuQGluY2x1ZGUgdGV4dC1jb2xvci12YXJpYW50KFwiLnRleHQtc2Vjb25kYXJ5XCIsICRzZWNvbmRhcnktY29sb3ItZGFyayk7XG5cbkBpbmNsdWRlIHRleHQtY29sb3ItdmFyaWFudChcIi50ZXh0LWdyYXlcIiwgJGdyYXktY29sb3IpO1xuXG5AaW5jbHVkZSB0ZXh0LWNvbG9yLXZhcmlhbnQoXCIudGV4dC1saWdodFwiLCAkbGlnaHQtY29sb3IpO1xuXG5AaW5jbHVkZSB0ZXh0LWNvbG9yLXZhcmlhbnQoXCIudGV4dC1kYXJrXCIsICRib2R5LWZvbnQtY29sb3IpO1xuXG5AaW5jbHVkZSB0ZXh0LWNvbG9yLXZhcmlhbnQoXCIudGV4dC1zdWNjZXNzXCIsICRzdWNjZXNzLWNvbG9yKTtcblxuQGluY2x1ZGUgdGV4dC1jb2xvci12YXJpYW50KFwiLnRleHQtd2FybmluZ1wiLCAkd2FybmluZy1jb2xvcik7XG5cbkBpbmNsdWRlIHRleHQtY29sb3ItdmFyaWFudChcIi50ZXh0LWVycm9yXCIsICRlcnJvci1jb2xvcik7XG5cbi8vIEJhY2tncm91bmQgY29sb3JzXG5AaW5jbHVkZSBiZy1jb2xvci12YXJpYW50KFwiLmJnLXByaW1hcnlcIiwgJHByaW1hcnktY29sb3IpO1xuXG5AaW5jbHVkZSBiZy1jb2xvci12YXJpYW50KFwiLmJnLXNlY29uZGFyeVwiLCAkc2Vjb25kYXJ5LWNvbG9yKTtcblxuQGluY2x1ZGUgYmctY29sb3ItdmFyaWFudChcIi5iZy1kYXJrXCIsICRkYXJrLWNvbG9yKTtcblxuQGluY2x1ZGUgYmctY29sb3ItdmFyaWFudChcIi5iZy1ncmF5XCIsICRiZy1jb2xvcik7XG5cbkBpbmNsdWRlIGJnLWNvbG9yLXZhcmlhbnQoXCIuYmctc3VjY2Vzc1wiLCAkc3VjY2Vzcy1jb2xvcik7XG5cbkBpbmNsdWRlIGJnLWNvbG9yLXZhcmlhbnQoXCIuYmctd2FybmluZ1wiLCAkd2FybmluZy1jb2xvcik7XG5cbkBpbmNsdWRlIGJnLWNvbG9yLXZhcmlhbnQoXCIuYmctZXJyb3JcIiwgJGVycm9yLWNvbG9yKTtcbiIsIi8vIEN1cnNvcnNcbi5jLWhhbmQge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5jLW1vdmUge1xuICBjdXJzb3I6IG1vdmU7XG59XG5cbi5jLXpvb20taW4ge1xuICBjdXJzb3I6IHpvb20taW47XG59XG5cbi5jLXpvb20tb3V0IHtcbiAgY3Vyc29yOiB6b29tLW91dDtcbn1cblxuLmMtbm90LWFsbG93ZWQge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uYy1hdXRvIHtcbiAgY3Vyc29yOiBhdXRvO1xufSIsIi8vIERpc3BsYXlcbi5kLWJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4uZC1pbmxpbmUge1xuICBkaXNwbGF5OiBpbmxpbmU7XG59XG4uZC1pbmxpbmUtYmxvY2sge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4uZC1mbGV4IHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5kLWlubGluZS1mbGV4IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG59XG4uZC1ub25lLFxuLmQtaGlkZSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbi5kLXZpc2libGUge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xufVxuLmQtaW52aXNpYmxlIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLnRleHQtaGlkZSB7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDA7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgZm9udC1zaXplOiAwO1xuICBsaW5lLWhlaWdodDogMDtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG59XG4udGV4dC1hc3Npc3RpdmUge1xuICBib3JkZXI6IDA7XG4gIGNsaXA6IHJlY3QoMCwwLDAsMCk7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46IC0xcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmc6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDFweDtcbn1cbiIsIi8vIERpdmlkZXJcbi5kaXZpZGVyLFxuLmRpdmlkZXItdmVydCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJltkYXRhLWNvbnRlbnRdOjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogJGJnLWNvbG9yLWxpZ2h0O1xuICAgIGNvbG9yOiAkZ3JheS1jb2xvcjtcbiAgICBjb250ZW50OiBhdHRyKGRhdGEtY29udGVudCk7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgICBwYWRkaW5nOiAwICR1bml0LTI7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kZm9udC1zaXplLXNtICsgJGJvcmRlci13aWR0aCk7XG4gIH1cbn1cblxuLmRpdmlkZXIge1xuICBib3JkZXItdG9wOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3ItbGlnaHQ7XG4gIGhlaWdodDogJGJvcmRlci13aWR0aDtcbiAgbWFyZ2luOiAkdW5pdC0yIDA7XG5cbiAgJltkYXRhLWNvbnRlbnRdIHtcbiAgICBtYXJnaW46ICR1bml0LTQgMDtcbiAgfVxufVxuXG4uZGl2aWRlci12ZXJ0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6ICR1bml0LTQ7XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBib3JkZXItbGVmdDogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICAgIGJvdHRvbTogJHVuaXQtMjtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAkdW5pdC0yO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgfVxuXG4gICZbZGF0YS1jb250ZW50XTo6YWZ0ZXIge1xuICAgIGxlZnQ6IDUwJTtcbiAgICBwYWRkaW5nOiAkdW5pdC0xIDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB9XG59XG4iLCIvLyBMb2FkaW5nXG4ubG9hZGluZyB7XG4gIGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICBtaW4taGVpZ2h0OiAkdW5pdC00O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAmOjphZnRlciB7XG4gICAgYW5pbWF0aW9uOiBsb2FkaW5nIDUwMG1zIGluZmluaXRlIGxpbmVhcjtcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGgtbGcgc29saWQgJHByaW1hcnktY29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBoZWlnaHQ6ICR1bml0LTQ7XG4gICAgbGVmdDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiAtJHVuaXQtMjtcbiAgICBtYXJnaW4tdG9wOiAtJHVuaXQtMjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgd2lkdGg6ICR1bml0LTQ7XG4gICAgei1pbmRleDogJHppbmRleC0wO1xuICB9XG5cbiAgJi5sb2FkaW5nLWxnIHtcbiAgICBtaW4taGVpZ2h0OiAkdW5pdC0xMDtcbiAgICAmOjphZnRlciB7XG4gICAgICBoZWlnaHQ6ICR1bml0LTg7XG4gICAgICBtYXJnaW4tbGVmdDogLSR1bml0LTQ7XG4gICAgICBtYXJnaW4tdG9wOiAtJHVuaXQtNDtcbiAgICAgIHdpZHRoOiAkdW5pdC04O1xuICAgIH1cbiAgfVxufVxuIiwiLy8gUG9zaXRpb25cbi5jbGVhcmZpeCB7XG4gIEBpbmNsdWRlIGNsZWFyZml4KCk7XG59XG5cbi5mbG9hdC1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcbn1cblxuLmZsb2F0LXJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XG59XG5cbi5wLXJlbGF0aXZlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XG59XG5cbi5wLWFic29sdXRlIHtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG59XG5cbi5wLWZpeGVkIHtcbiAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7XG59XG5cbi5wLXN0aWNreSB7XG4gIHBvc2l0aW9uOiBzdGlja3kgIWltcG9ydGFudDtcbn1cblxuLnAtY2VudGVyZWQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZmxvYXQ6IG5vbmU7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG5cbi5mbGV4LWNlbnRlcmVkIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi8vIFNwYWNpbmdcbkBpbmNsdWRlIG1hcmdpbi12YXJpYW50KDAsIDApO1xuXG5AaW5jbHVkZSBtYXJnaW4tdmFyaWFudCgxLCAkdW5pdC0xKTtcblxuQGluY2x1ZGUgbWFyZ2luLXZhcmlhbnQoMiwgJHVuaXQtMik7XG5cbkBpbmNsdWRlIHBhZGRpbmctdmFyaWFudCgwLCAwKTtcblxuQGluY2x1ZGUgcGFkZGluZy12YXJpYW50KDEsICR1bml0LTEpO1xuXG5AaW5jbHVkZSBwYWRkaW5nLXZhcmlhbnQoMiwgJHVuaXQtMik7XG4iLCIvLyBTaGFwZXNcbi5zLXJvdW5kZWQge1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbn1cblxuLnMtY2lyY2xlIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xufSIsIi8vIFRleHRcbi8vIFRleHQgYWxpZ25tZW50IHV0aWxpdGllc1xuLnRleHQtbGVmdCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi50ZXh0LXJpZ2h0IHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbi50ZXh0LWNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnRleHQtanVzdGlmeSB7XG4gIHRleHQtYWxpZ246IGp1c3RpZnk7XG59XG5cbi8vIFRleHQgdHJhbnNmb3JtIHV0aWxpdGllc1xuLnRleHQtbG93ZXJjYXNlIHtcbiAgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTtcbn1cblxuLnRleHQtdXBwZXJjYXNlIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxuLnRleHQtY2FwaXRhbGl6ZSB7XG4gIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xufVxuXG4vLyBUZXh0IHN0eWxlIHV0aWxpdGllc1xuLnRleHQtbm9ybWFsIHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cblxuLnRleHQtYm9sZCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4udGV4dC1pdGFsaWMge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbi50ZXh0LWxhcmdlIHtcbiAgZm9udC1zaXplOiAxLjJlbTtcbn1cblxuLy8gVGV4dCBvdmVyZmxvdyB1dGlsaXRpZXNcbi50ZXh0LWVsbGlwc2lzIHtcbiAgQGluY2x1ZGUgdGV4dC1lbGxpcHNpcygpO1xufVxuXG4udGV4dC1jbGlwIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogY2xpcDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnRleHQtYnJlYWsge1xuICBoeXBoZW5zOiBhdXRvO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG59XG4iLCIuc2VhcmNoLWlucHV0LCBbZGF0YS1ncmF2LWZpZWxkPVwiYXJyYXlcIl0gaW5wdXQsIFtkYXRhLWdyYXYtZmllbGQ9XCJhcnJheVwiXSB0ZXh0YXJlYSB7XG4gIEBleHRlbmQgLmZvcm0taW5wdXQ7XG59XG5cbi5idXR0b24ge1xuICBAZXh0ZW5kIC5idG47XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0Esd0VBQThFO0FhTDlFLHdDQUF3QztBQUN4QywyRUFBMkU7QUFFM0Usb05BS0c7QUFFSCx5RkFD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 */
diff --git a/themes/quark/css-compiled/spectre.min.css b/themes/quark/css-compiled/spectre.min.css
new file mode 100644
index 0000000..3ef16eb
--- /dev/null
+++ b/themes/quark/css-compiled/spectre.min.css
@@ -0,0 +1 @@
+/*! Spectre.css v0.5.8 | MIT License | github.com/picturepan2/spectre */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}hr{overflow:visible;box-sizing:content-box;height:0}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}address{font-style:normal}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:'SF Mono','Segoe UI Mono','Roboto Mono',Menlo,Courier,monospace;font-size:1em}dfn{font-style:italic}small{font-size:80%;font-weight:400}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}fieldset{margin:0;padding:0;border:0}legend{display:table;box-sizing:border-box;max-width:100%;padding:0;white-space:normal;color:inherit}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}details,menu{display:block}summary{display:list-item;outline:0}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:inherit}html{font-size:20px;line-height:1.5;box-sizing:border-box;-webkit-tap-highlight-color:transparent}body{font-family:-apple-system,system-ui,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',sans-serif;font-size:.8rem;overflow-x:hidden;color:#50596c;background:#fff;text-rendering:optimizeLegibility}a{text-decoration:none;color:#3085ee;outline:0}a:focus{box-shadow:0 0 0 .1rem rgba(48,133,238,.2)}a.active,a:active,a:focus,a:hover{text-decoration:underline;color:#126bd9}a:visited{color:#5fa1f2}h1,h2,h3,h4,h5,h6{font-weight:500;line-height:1.2;margin-top:0;margin-bottom:.5em;color:inherit}.h1,.h2,.h3,.h4,.h5,.h6{font-weight:500}.h1,h1{font-size:2rem}.h2,h2{font-size:1.6rem}.h3,h3{font-size:1.4rem}.h4,h4{font-size:1.2rem}.h5,h5{font-size:1rem}.h6,h6{font-size:.8rem}p{margin:0 0 1.2rem}a,ins,u{-webkit-text-decoration-skip:ink edges;text-decoration-skip:ink edges}abbr[title]{cursor:help;text-decoration:none;border-bottom:.05rem dotted}kbd{font-size:.7rem;line-height:1.25;padding:.1rem .2rem;color:#fff;border-radius:.1rem;background:#454d5d}mark{padding:.05rem .1rem 0;color:#50596c;border-bottom:.05rem solid #ffd367;border-radius:.1rem;background:#ffe9b3}blockquote{margin-left:0;padding:.4rem .8rem;border-left:.1rem solid #e7e9ed}blockquote p:last-child{margin-bottom:0}ol,ul{margin:.8rem 0 .8rem .8rem;padding:0}ol ol,ol ul,ul ol,ul ul{margin:.8rem 0 .8rem .8rem}ol li,ul li{margin-top:.4rem}ul{list-style:disc inside}ul ul{list-style-type:circle}ol{list-style:decimal inside}ol ol{list-style-type:lower-alpha}dl dt{font-weight:700}dl dd{margin:.4rem 0 .8rem 0}.lang-zh,.lang-zh-hans,html:lang(zh),html:lang(zh-Hans){font-family:-apple-system,system-ui,BlinkMacSystemFont,'Segoe UI',Roboto,'PingFang SC','Hiragino Sans GB','Microsoft YaHei','Helvetica Neue',sans-serif}.lang-zh-hant,html:lang(zh-Hant){font-family:-apple-system,system-ui,BlinkMacSystemFont,'Segoe UI',Roboto,'PingFang TC','Hiragino Sans CNS','Microsoft JhengHei','Helvetica Neue',sans-serif}.lang-ja,html:lang(ja){font-family:-apple-system,system-ui,BlinkMacSystemFont,'Segoe UI',Roboto,'Hiragino Sans','Hiragino Kaku Gothic Pro','Yu Gothic',YuGothic,Meiryo,'Helvetica Neue',sans-serif}.lang-ko,html:lang(ko){font-family:-apple-system,system-ui,BlinkMacSystemFont,'Segoe UI',Roboto,'Malgun Gothic','Helvetica Neue',sans-serif}.lang-cjk ins,.lang-cjk u,:lang(ja) ins,:lang(ja) u,:lang(zh) ins,:lang(zh) u{text-decoration:none;border-bottom:.05rem solid}.lang-cjk del+del,.lang-cjk del+s,.lang-cjk ins+ins,.lang-cjk ins+u,.lang-cjk s+del,.lang-cjk s+s,.lang-cjk u+ins,.lang-cjk u+u,:lang(ja) del+del,:lang(ja) del+s,:lang(ja) ins+ins,:lang(ja) ins+u,:lang(ja) s+del,:lang(ja) s+s,:lang(ja) u+ins,:lang(ja) u+u,:lang(zh) del+del,:lang(zh) del+s,:lang(zh) ins+ins,:lang(zh) ins+u,:lang(zh) s+del,:lang(zh) s+s,:lang(zh) u+ins,:lang(zh) u+u{margin-left:.125em}.table{width:100%;border-spacing:0;border-collapse:collapse;text-align:left}.table.table-striped tbody tr:nth-of-type(odd){background:#f8f9fa}.table tbody tr.active,.table.table-striped tbody tr.active{background:#f0f1f4}.table.table-hover tbody tr:hover{background:#f0f1f4}.table.table-scroll{display:block;overflow-x:auto;padding-bottom:.75rem;white-space:nowrap}.table td,.table th{padding:.6rem .4rem;border-bottom:.05rem solid #e7e9ed}.table th{border-bottom-width:.1rem}.btn,.button{font-size:.8rem;line-height:1.2rem;display:inline-block;height:1.8rem;padding:.25rem .4rem;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:background .2s,border .2s,box-shadow .2s,color .2s;text-align:center;vertical-align:middle;white-space:nowrap;text-decoration:none;color:#3085ee;border:.05rem solid #3085ee;border-radius:.1rem;outline:0;background:#fff;-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn:focus,.button:focus{box-shadow:0 0 0 .1rem rgba(48,133,238,.2)}.btn:focus,.btn:hover,.button:focus,.button:hover{text-decoration:none;border-color:#227ded;background:#e1edfd}.active.button,.btn.active,.btn:active,.button:active{text-decoration:none;color:#fff;border-color:#1370e3;background:#227ded}.active.loading.button::after,.btn.active.loading::after,.btn:active.loading::after,.button:active.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn.disabled,.btn:disabled,.btn[disabled],.button:disabled,.button[disabled],.disabled.button{cursor:default;pointer-events:none;opacity:.5}.btn-primary.button,.btn.btn-primary{color:#fff;border-color:#227ded;background:#3085ee}.btn-primary.button:focus,.btn-primary.button:hover,.btn.btn-primary:focus,.btn.btn-primary:hover{color:#fff;border-color:#1370e3;background:#1877ec}.btn-primary.active.button,.btn-primary.button:active,.btn.btn-primary.active,.btn.btn-primary:active{color:#fff;border-color:#126bd9;background:#1372e7}.btn-primary.loading.button::after,.btn.btn-primary.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn-success.button,.btn.btn-success{color:#fff;border-color:#2faa3f;background:#32b643}.btn-success.button:focus,.btn.btn-success:focus{box-shadow:0 0 0 .1rem rgba(50,182,67,.2)}.btn-success.button:focus,.btn-success.button:hover,.btn.btn-success:focus,.btn.btn-success:hover{color:#fff;border-color:#2da23c;background:#30ae40}.btn-success.active.button,.btn-success.button:active,.btn.btn-success.active,.btn.btn-success:active{color:#fff;border-color:#278e34;background:#2a9a39}.btn-success.loading.button::after,.btn.btn-success.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn-error.button,.btn.btn-error{color:#fff;border-color:#d95000;background:#e85600}.btn-error.button:focus,.btn.btn-error:focus{box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.btn-error.button:focus,.btn-error.button:hover,.btn.btn-error:focus,.btn.btn-error:hover{color:#fff;border-color:#cf4d00;background:#de5200}.btn-error.active.button,.btn-error.button:active,.btn.btn-error.active,.btn.btn-error:active{color:#fff;border-color:#b54300;background:#c44900}.btn-error.loading.button::after,.btn.btn-error.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn-link.button,.btn.btn-link{color:#3085ee;border-color:transparent;background:0 0}.btn-link.active.button,.btn-link.button:active,.btn-link.button:focus,.btn-link.button:hover,.btn.btn-link.active,.btn.btn-link:active,.btn.btn-link:focus,.btn.btn-link:hover{color:#126bd9}.btn-sm.button,.btn.btn-sm{font-size:.7rem;height:1.4rem;padding:.05rem .3rem}.btn-lg.button,.btn.btn-lg{font-size:.9rem;height:2rem;padding:.35rem .6rem}.btn-block.button,.btn.btn-block{display:block;width:100%}.btn-action.button,.btn.btn-action{width:1.8rem;padding-right:0;padding-left:0}.btn-action.btn-sm.button,.btn.btn-action.btn-sm{width:1.4rem}.btn-action.btn-lg.button,.btn.btn-action.btn-lg{width:2rem}.btn-clear.button,.btn.btn-clear{line-height:.8rem;width:1rem;height:1rem;margin-right:-2px;margin-left:.2rem;padding:.1rem;text-decoration:none;opacity:1;color:currentColor;border:0;background:0 0}.btn-clear.button:focus,.btn-clear.button:hover,.btn.btn-clear:focus,.btn.btn-clear:hover{opacity:.95;background:rgba(248,249,250,.5)}.btn-clear.button::before,.btn.btn-clear::before{content:'\2715'}.btn-group{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.btn-group .btn,.btn-group .button{-ms-flex:1 0 auto;flex:1 0 auto}.btn-group .btn:first-child:not(:last-child),.btn-group .button:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group .btn:not(:first-child):not(:last-child),.btn-group .button:not(:first-child):not(:last-child){margin-left:-.05rem;border-radius:0}.btn-group .btn:last-child:not(:first-child),.btn-group .button:last-child:not(:first-child){margin-left:-.05rem;border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .active.button,.btn-group .btn.active,.btn-group .btn:active,.btn-group .btn:focus,.btn-group .btn:hover,.btn-group .button:active,.btn-group .button:focus,.btn-group .button:hover{z-index:1}.btn-group.btn-group-block{display:-ms-flexbox;display:flex}.btn-group.btn-group-block .btn,.btn-group.btn-group-block .button{-ms-flex:1 0 0;flex:1 0 0}.form-group:not(:last-child){margin-bottom:.4rem}fieldset{margin-bottom:.8rem}legend{font-size:.9rem;font-weight:500;margin-bottom:.8rem}.form-label{line-height:1.2rem;display:block;padding:.3rem 0}.form-label.label-sm{font-size:.7rem;padding:.1rem 0}.form-label.label-lg{font-size:.9rem;padding:.4rem 0}.form-input,.search-input,[data-grav-field=array] input,[data-grav-field=array] textarea{font-size:.8rem;line-height:1.2rem;position:relative;display:block;width:100%;max-width:100%;height:1.8rem;padding:.25rem .4rem;transition:background .2s,border .2s,box-shadow .2s,color .2s;color:#50596c;border:.05rem solid #caced7;border-radius:.1rem;outline:0;background:#fff;background-image:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-input:focus,.search-input:focus,[data-grav-field=array] input:focus,[data-grav-field=array] textarea:focus{border-color:#3085ee;box-shadow:0 0 0 .1rem rgba(48,133,238,.2)}.form-input::-webkit-input-placeholder,.search-input::-webkit-input-placeholder,[data-grav-field=array] input::-webkit-input-placeholder,[data-grav-field=array] textarea::-webkit-input-placeholder{color:#acb3c2}.form-input:-ms-input-placeholder,.search-input:-ms-input-placeholder,[data-grav-field=array] input:-ms-input-placeholder,[data-grav-field=array] textarea:-ms-input-placeholder{color:#acb3c2}.form-input::-ms-input-placeholder,.search-input::-ms-input-placeholder,[data-grav-field=array] input::-ms-input-placeholder,[data-grav-field=array] textarea::-ms-input-placeholder{color:#acb3c2}.form-input::placeholder,.search-input::placeholder,[data-grav-field=array] input::placeholder,[data-grav-field=array] textarea::placeholder{color:#acb3c2}.form-input.input-sm,.input-sm.search-input,[data-grav-field=array] input.input-sm,[data-grav-field=array] textarea.input-sm{font-size:.7rem;height:1.4rem;padding:.05rem .3rem}.form-input.input-lg,.input-lg.search-input,[data-grav-field=array] input.input-lg,[data-grav-field=array] textarea.input-lg{font-size:.9rem;height:2rem;padding:.35rem .6rem}.form-input.input-inline,.input-inline.search-input,[data-grav-field=array] input.input-inline,[data-grav-field=array] textarea.input-inline{display:inline-block;width:auto;vertical-align:middle}.form-input[type=file],.search-input[type=file],[data-grav-field=array] input[type=file],[data-grav-field=array] textarea[type=file]{height:auto}[data-grav-field=array] textarea,[data-grav-field=array] textarea.input-lg,[data-grav-field=array] textarea.input-sm,textarea.form-input,textarea.form-input.input-lg,textarea.form-input.input-sm,textarea.input-lg.search-input,textarea.input-sm.search-input,textarea.search-input{height:auto}.form-input-hint{font-size:.7rem;margin-top:.2rem;color:#acb3c2}.has-success .form-input-hint,.is-success+.form-input-hint{color:#32b643}.has-error .form-input-hint,.is-error+.form-input-hint{color:#e85600}.form-select{font-size:.8rem;line-height:1.2rem;width:100%;height:1.8rem;padding:.25rem .4rem;vertical-align:middle;color:inherit;border:.05rem solid #caced7;border-radius:.1rem;outline:0;background:#fff;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select:focus{border-color:#3085ee;box-shadow:0 0 0 .1rem rgba(48,133,238,.2)}.form-select::-ms-expand{display:none}.form-select.select-sm{font-size:.7rem;height:1.4rem;padding:.05rem 1.1rem .05rem .3rem}.form-select.select-lg{font-size:.9rem;height:2rem;padding:.35rem 1.4rem .35rem .6rem}.form-select[multiple],.form-select[size]{height:auto;padding:.25rem .4rem}.form-select[multiple] option,.form-select[size] option{padding:.1rem .2rem}.form-select:not([multiple]):not([size]){padding-right:1.2rem;background:#fff url('data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=\'http://www.w3.org/2000/svg\'%20viewBox=\'0%200%204%205\'%3E%3Cpath%20fill=\'%23667189\'%20d=\'M2%200L0%202h4zm0%205L0%203h4z\'/%3E%3C/svg%3E') no-repeat right .35rem center/.4rem .5rem}.has-icon-left,.has-icon-right{position:relative}.has-icon-left .form-icon,.has-icon-right .form-icon{position:absolute;z-index:2;top:50%;width:.8rem;height:.8rem;margin:0 .25rem;transform:translateY(-50%)}.has-icon-left .form-icon{left:.05rem}.has-icon-left .form-input,.has-icon-left .search-input,.has-icon-left [data-grav-field=array] input,.has-icon-left [data-grav-field=array] textarea,[data-grav-field=array] .has-icon-left input,[data-grav-field=array] .has-icon-left textarea{padding-left:1.3rem}.has-icon-right .form-icon{right:.05rem}.has-icon-right .form-input,.has-icon-right .search-input,.has-icon-right [data-grav-field=array] input,.has-icon-right [data-grav-field=array] textarea,[data-grav-field=array] .has-icon-right input,[data-grav-field=array] .has-icon-right textarea{padding-right:1.3rem}.form-checkbox,.form-radio,.form-switch{line-height:1.2rem;position:relative;display:block;min-height:1.4rem;margin:.2rem 0;padding:.1rem .4rem .1rem 1.2rem}.form-checkbox input,.form-radio input,.form-switch input{position:absolute;overflow:hidden;clip:rect(0,0,0,0);width:1px;height:1px;margin:-1px}.form-checkbox input:focus+.form-icon,.form-radio input:focus+.form-icon,.form-switch input:focus+.form-icon{border-color:#3085ee;box-shadow:0 0 0 .1rem rgba(48,133,238,.2)}.form-checkbox input:checked+.form-icon,.form-radio input:checked+.form-icon,.form-switch input:checked+.form-icon{border-color:#3085ee;background:#3085ee}.form-checkbox .form-icon,.form-radio .form-icon,.form-switch .form-icon{position:absolute;display:inline-block;cursor:pointer;transition:background .2s,border .2s,box-shadow .2s,color .2s;border:.05rem solid #caced7}.form-checkbox.input-sm,.form-radio.input-sm,.form-switch.input-sm{font-size:.7rem;margin:0}.form-checkbox.input-lg,.form-radio.input-lg,.form-switch.input-lg{font-size:.9rem;margin:.3rem 0}.form-checkbox .form-icon,.form-radio .form-icon{top:.3rem;left:0;width:.8rem;height:.8rem;background:#fff}.form-checkbox input:active+.form-icon,.form-radio input:active+.form-icon{background:#f0f1f4}.form-checkbox .form-icon{border-radius:.1rem}.form-checkbox input:checked+.form-icon::before{position:absolute;top:50%;left:50%;width:6px;height:9px;margin-top:-6px;margin-left:-3px;content:'';transform:rotate(45deg);border:.1rem solid #fff;border-top-width:0;border-left-width:0;background-clip:padding-box}.form-checkbox input:indeterminate+.form-icon{border-color:#3085ee;background:#3085ee}.form-checkbox input:indeterminate+.form-icon::before{position:absolute;top:50%;left:50%;width:10px;height:2px;margin-top:-1px;margin-left:-5px;content:'';background:#fff}.form-radio .form-icon{border-radius:50%}.form-radio input:checked+.form-icon::before{position:absolute;top:50%;left:50%;width:6px;height:6px;content:'';transform:translate(-50%,-50%);border-radius:50%;background:#fff}.form-switch{padding-left:2rem}.form-switch .form-icon{top:.25rem;left:0;width:1.6rem;height:.9rem;border-radius:.45rem;background:#acb3c2;background-clip:padding-box}.form-switch .form-icon::before{position:absolute;top:0;left:0;display:block;width:.8rem;height:.8rem;content:'';transition:background .2s,border .2s,box-shadow .2s,color .2s,left .2s;border-radius:50%;background:#fff}.form-switch input:checked+.form-icon::before{left:14px}.form-switch input:active+.form-icon::before{background:#f8f9fa}.input-group{display:-ms-flexbox;display:flex}.input-group .input-group-addon{line-height:1.2rem;padding:.25rem .4rem;white-space:nowrap;border:.05rem solid #caced7;border-radius:.1rem;background:#f8f9fa}.input-group .input-group-addon.addon-sm{font-size:.7rem;padding:.05rem .3rem}.input-group .input-group-addon.addon-lg{font-size:.9rem;padding:.35rem .6rem}.input-group .form-input,.input-group .form-select,.input-group .search-input,.input-group [data-grav-field=array] input,.input-group [data-grav-field=array] textarea,[data-grav-field=array] .input-group input,[data-grav-field=array] .input-group textarea{width:1%;-ms-flex:1 1 auto;flex:1 1 auto}.input-group .input-group-btn{z-index:1}.input-group .form-input:first-child:not(:last-child),.input-group .form-select:first-child:not(:last-child),.input-group .input-group-addon:first-child:not(:last-child),.input-group .input-group-btn:first-child:not(:last-child),.input-group .search-input:first-child:not(:last-child),.input-group [data-grav-field=array] input:first-child:not(:last-child),.input-group [data-grav-field=array] textarea:first-child:not(:last-child),[data-grav-field=array] .input-group input:first-child:not(:last-child),[data-grav-field=array] .input-group textarea:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-input:not(:first-child):not(:last-child),.input-group .form-select:not(:first-child):not(:last-child),.input-group .input-group-addon:not(:first-child):not(:last-child),.input-group .input-group-btn:not(:first-child):not(:last-child),.input-group .search-input:not(:first-child):not(:last-child),.input-group [data-grav-field=array] input:not(:first-child):not(:last-child),.input-group [data-grav-field=array] textarea:not(:first-child):not(:last-child),[data-grav-field=array] .input-group input:not(:first-child):not(:last-child),[data-grav-field=array] .input-group textarea:not(:first-child):not(:last-child){margin-left:-.05rem;border-radius:0}.input-group .form-input:last-child:not(:first-child),.input-group .form-select:last-child:not(:first-child),.input-group .input-group-addon:last-child:not(:first-child),.input-group .input-group-btn:last-child:not(:first-child),.input-group .search-input:last-child:not(:first-child),.input-group [data-grav-field=array] input:last-child:not(:first-child),.input-group [data-grav-field=array] textarea:last-child:not(:first-child),[data-grav-field=array] .input-group input:last-child:not(:first-child),[data-grav-field=array] .input-group textarea:last-child:not(:first-child){margin-left:-.05rem;border-top-left-radius:0;border-bottom-left-radius:0}.input-group .form-input:focus,.input-group .form-select:focus,.input-group .input-group-addon:focus,.input-group .input-group-btn:focus,.input-group .search-input:focus,.input-group [data-grav-field=array] input:focus,.input-group [data-grav-field=array] textarea:focus,[data-grav-field=array] .input-group input:focus,[data-grav-field=array] .input-group textarea:focus{z-index:2}.input-group .form-select{width:auto}.input-group.input-inline{display:-ms-inline-flexbox;display:inline-flex}.form-input.is-success,.form-select.is-success,.has-success .form-input,.has-success .form-select,.has-success .search-input,.has-success [data-grav-field=array] input,.has-success [data-grav-field=array] textarea,.is-success.search-input,[data-grav-field=array] .has-success input,[data-grav-field=array] .has-success textarea,[data-grav-field=array] input.is-success,[data-grav-field=array] textarea.is-success{border-color:#32b643;background:#f9fdfa}.form-input.is-success:focus,.form-select.is-success:focus,.has-success .form-input:focus,.has-success .form-select:focus,.has-success .search-input:focus,.has-success [data-grav-field=array] input:focus,.has-success [data-grav-field=array] textarea:focus,.is-success.search-input:focus,[data-grav-field=array] .has-success input:focus,[data-grav-field=array] .has-success textarea:focus,[data-grav-field=array] input.is-success:focus,[data-grav-field=array] textarea.is-success:focus{box-shadow:0 0 0 .1rem rgba(50,182,67,.2)}.form-input.is-error,.form-select.is-error,.has-error .form-input,.has-error .form-select,.has-error .search-input,.has-error [data-grav-field=array] input,.has-error [data-grav-field=array] textarea,.is-error.search-input,[data-grav-field=array] .has-error input,[data-grav-field=array] .has-error textarea,[data-grav-field=array] input.is-error,[data-grav-field=array] textarea.is-error{border-color:#e85600;background:#fffaf7}.form-input.is-error:focus,.form-select.is-error:focus,.has-error .form-input:focus,.has-error .form-select:focus,.has-error .search-input:focus,.has-error [data-grav-field=array] input:focus,.has-error [data-grav-field=array] textarea:focus,.is-error.search-input:focus,[data-grav-field=array] .has-error input:focus,[data-grav-field=array] .has-error textarea:focus,[data-grav-field=array] input.is-error:focus,[data-grav-field=array] textarea.is-error:focus{box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.form-checkbox.is-error .form-icon,.form-radio.is-error .form-icon,.form-switch.is-error .form-icon,.has-error .form-checkbox .form-icon,.has-error .form-radio .form-icon,.has-error .form-switch .form-icon{border-color:#e85600}.form-checkbox.is-error input:checked+.form-icon,.form-radio.is-error input:checked+.form-icon,.form-switch.is-error input:checked+.form-icon,.has-error .form-checkbox input:checked+.form-icon,.has-error .form-radio input:checked+.form-icon,.has-error .form-switch input:checked+.form-icon{border-color:#e85600;background:#e85600}.form-checkbox.is-error input:focus+.form-icon,.form-radio.is-error input:focus+.form-icon,.form-switch.is-error input:focus+.form-icon,.has-error .form-checkbox input:focus+.form-icon,.has-error .form-radio input:focus+.form-icon,.has-error .form-switch input:focus+.form-icon{border-color:#e85600;box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.form-checkbox.is-error input:indeterminate+.form-icon,.has-error .form-checkbox input:indeterminate+.form-icon{border-color:#e85600;background:#e85600}.form-input:not(:placeholder-shown):invalid,.search-input:not(:placeholder-shown):invalid,[data-grav-field=array] input:not(:placeholder-shown):invalid,[data-grav-field=array] textarea:not(:placeholder-shown):invalid{border-color:#e85600}.form-input:not(:placeholder-shown):invalid:focus,.search-input:not(:placeholder-shown):invalid:focus,[data-grav-field=array] input:not(:placeholder-shown):invalid:focus,[data-grav-field=array] textarea:not(:placeholder-shown):invalid:focus{background:#fffaf7;box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.form-input:not(:placeholder-shown):invalid+.form-input-hint,.search-input:not(:placeholder-shown):invalid+.form-input-hint,[data-grav-field=array] input:not(:placeholder-shown):invalid+.form-input-hint,[data-grav-field=array] textarea:not(:placeholder-shown):invalid+.form-input-hint{color:#e85600}.disabled.search-input,.form-input.disabled,.form-input:disabled,.form-select.disabled,.form-select:disabled,.search-input:disabled,[data-grav-field=array] input.disabled,[data-grav-field=array] input:disabled,[data-grav-field=array] textarea.disabled,[data-grav-field=array] textarea:disabled{cursor:not-allowed;opacity:.5;background-color:#f0f1f4}.form-input[readonly],.search-input[readonly],[data-grav-field=array] input[readonly],[data-grav-field=array] textarea[readonly]{background-color:#f8f9fa}input.disabled+.form-icon,input:disabled+.form-icon{cursor:not-allowed;opacity:.5;background:#f0f1f4}.form-switch input.disabled+.form-icon::before,.form-switch input:disabled+.form-icon::before{background:#fff}.form-horizontal{padding:.4rem 0}.form-horizontal .form-group{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.form-inline{display:inline-block}.label{line-height:1.25;display:inline-block;padding:.1rem .2rem;color:#5b657a;border-radius:.1rem;background:#f0f1f4}.label.label-rounded{padding-right:.4rem;padding-left:.4rem;border-radius:5rem}.label.label-primary{color:#fff;background:#3085ee}.label.label-secondary{color:#3085ee;background:#e1edfd}.label.label-success{color:#fff;background:#32b643}.label.label-warning{color:#fff;background:#ffb700}.label.label-error{color:#fff;background:#e85600}code{font-size:85%;line-height:1.25;padding:.1rem .2rem;color:#d73e48;border-radius:.1rem;background:#fcf2f2}.code{position:relative;color:#50596c;border-radius:.1rem}.code::before{font-size:.7rem;position:absolute;top:.1rem;right:.4rem;content:attr(data-lang);color:#acb3c2}.code code{line-height:1.5;display:block;overflow-x:auto;width:100%;padding:1rem;color:inherit;background:#f8f9fa}.img-responsive{display:block;max-width:100%;height:auto}.img-fit-cover{object-fit:cover}.img-fit-contain{object-fit:contain}.video-responsive{position:relative;display:block;overflow:hidden;width:100%;padding:0}.video-responsive::before{display:block;padding-bottom:56.25%;content:''}.video-responsive embed,.video-responsive iframe,.video-responsive object{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;border:0}video.video-responsive{max-width:100%;height:auto}video.video-responsive::before{content:none}.video-responsive-4-3::before{padding-bottom:75%}.video-responsive-1-1::before{padding-bottom:100%}.figure{margin:0 0 .4rem 0}.figure .figure-caption{margin-top:.4rem;color:#667189}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:.4rem;padding-left:.4rem}.container.grid-xl{max-width:1296px}.container.grid-lg{max-width:976px}.container.grid-md{max-width:856px}.container.grid-sm{max-width:616px}.container.grid-xs{max-width:496px}.show-lg,.show-md,.show-sm,.show-xl,.show-xs{display:none!important}.columns{display:-ms-flexbox;display:flex;margin-right:-.4rem;margin-left:-.4rem;-ms-flex-wrap:wrap;flex-wrap:wrap}.columns.col-gapless{margin-right:0;margin-left:0}.columns.col-gapless>.column{padding-right:0;padding-left:0}.columns.col-oneline{overflow-x:auto;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.column{max-width:100%;padding-right:.4rem;padding-left:.4rem;-ms-flex:1;flex:1}.column.col-1,.column.col-10,.column.col-11,.column.col-12,.column.col-2,.column.col-3,.column.col-4,.column.col-5,.column.col-6,.column.col-7,.column.col-8,.column.col-9,.column.col-auto{-ms-flex:none;flex:none}.col-12{width:100%}.col-11{width:91.66666667%}.col-10{width:83.33333333%}.col-9{width:75%}.col-8{width:66.66666667%}.col-7{width:58.33333333%}.col-6{width:50%}.col-5{width:41.66666667%}.col-4{width:33.33333333%}.col-3{width:25%}.col-2{width:16.66666667%}.col-1{width:8.33333333%}.col-auto{width:auto;max-width:none;-ms-flex:0 0 auto;flex:0 0 auto}.col-mx-auto{margin-right:auto;margin-left:auto}.col-ml-auto{margin-left:auto}.col-mr-auto{margin-right:auto}@media (max-width:1280px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{-ms-flex:none;flex:none}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-auto{width:auto}.hide-xl{display:none!important}.show-xl{display:block!important}}@media (max-width:960px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto{-ms-flex:none;flex:none}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-auto{width:auto}.hide-lg{display:none!important}.show-lg{display:block!important}}@media (max-width:840px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto{-ms-flex:none;flex:none}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-auto{width:auto}.hide-md{display:none!important}.show-md{display:block!important}}@media (max-width:600px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto{-ms-flex:none;flex:none}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-auto{width:auto}.hide-sm{display:none!important}.show-sm{display:block!important}}@media (max-width:480px){.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-auto{-ms-flex:none;flex:none}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-auto{width:auto}.hide-xs{display:none!important}.show-xs{display:block!important}}.hero{display:-ms-flexbox;display:flex;flex-direction:column;padding-top:4rem;padding-bottom:4rem;-ms-flex-direction:column;-ms-flex-pack:justify;justify-content:space-between}.hero.hero-sm{padding-top:2rem;padding-bottom:2rem}.hero.hero-lg{padding-top:8rem;padding-bottom:8rem}.hero .hero-body{padding:.4rem}.navbar{display:-ms-flexbox;display:flex;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between}.navbar .navbar-section{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex:1 0 0;flex:1 0 0}.navbar .navbar-section:not(:first-child):last-child{-ms-flex-pack:end;justify-content:flex-end}.navbar .navbar-center{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex:0 0 auto;flex:0 0 auto}.navbar .navbar-brand{font-size:.9rem;text-decoration:none}.accordion input:checked~.accordion-header .icon,.accordion[open] .accordion-header .icon{transform:rotate(90deg)}.accordion input:checked~.accordion-body,.accordion[open] .accordion-body{max-height:50rem}.accordion .accordion-header{display:block;padding:.2rem .4rem}.accordion .accordion-header .icon{transition:transform .25s}.accordion .accordion-body{overflow:hidden;max-height:0;margin-bottom:.4rem;transition:max-height .25s}summary.accordion-header::-webkit-details-marker{display:none}.avatar{font-size:.8rem;font-weight:300;line-height:1.25;position:relative;display:inline-block;width:1.6rem;height:1.6rem;margin:0;vertical-align:middle;color:rgba(255,255,255,.85);border-radius:50%;background:#3085ee}.avatar.avatar-xs{font-size:.4rem;width:.8rem;height:.8rem}.avatar.avatar-sm{font-size:.6rem;width:1.2rem;height:1.2rem}.avatar.avatar-lg{font-size:1.2rem;width:2.4rem;height:2.4rem}.avatar.avatar-xl{font-size:1.6rem;width:3.2rem;height:3.2rem}.avatar img{position:relative;z-index:1;width:100%;height:100%;border-radius:50%}.avatar .avatar-icon,.avatar .avatar-presence{position:absolute;z-index:2;right:14.64%;bottom:14.64%;width:50%;height:50%;padding:.1rem;transform:translate(50%,50%);background:#fff}.avatar .avatar-presence{width:.5em;height:.5em;border-radius:50%;background:#acb3c2;box-shadow:0 0 0 .1rem #fff}.avatar .avatar-presence.online{background:#32b643}.avatar .avatar-presence.busy{background:#e85600}.avatar .avatar-presence.away{background:#ffb700}.avatar[data-initial]::before{position:absolute;z-index:1;top:50%;left:50%;content:attr(data-initial);transform:translate(-50%,-50%);color:currentColor}.badge{position:relative;white-space:nowrap}.badge:not([data-badge])::after,.badge[data-badge]::after{display:inline-block;content:attr(data-badge);transform:translate(-.05rem,-.5rem);color:#fff;border-radius:.5rem;background:#3085ee;background-clip:padding-box;box-shadow:0 0 0 .1rem #fff}.badge[data-badge]::after{font-size:.7rem;line-height:1;min-width:.9rem;height:.9rem;padding:.1rem .2rem;text-align:center;white-space:nowrap}.badge:not([data-badge])::after,.badge[data-badge='']::after{width:6px;min-width:6px;height:6px;padding:0}.badge.btn::after,.badge.button::after{position:absolute;top:0;right:0;transform:translate(50%,-50%)}.badge.avatar::after{position:absolute;z-index:100;top:14.64%;right:14.64%;transform:translate(50%,-50%)}.breadcrumb{margin:.2rem 0;padding:.2rem 0;list-style:none}.breadcrumb .breadcrumb-item{display:inline-block;margin:0;padding:.2rem 0;color:#667189}.breadcrumb .breadcrumb-item:not(:last-child){margin-right:.2rem}.breadcrumb .breadcrumb-item:not(:last-child) a{color:#667189}.breadcrumb .breadcrumb-item:not(:first-child)::before{padding-right:.4rem;content:'/';color:#667189}.bar{display:-ms-flexbox;display:flex;width:100%;height:.8rem;border-radius:.1rem;background:#f0f1f4;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.bar.bar-sm{height:.2rem}.bar .bar-item{font-size:.7rem;line-height:.8rem;position:relative;display:block;width:0;height:100%;text-align:center;color:#fff;background:#3085ee;-ms-flex-negative:0;flex-shrink:0}.bar .bar-item:first-child{border-top-left-radius:.1rem;border-bottom-left-radius:.1rem}.bar .bar-item:last-child{border-top-right-radius:.1rem;border-bottom-right-radius:.1rem;-ms-flex-negative:1;flex-shrink:1}.bar-slider{position:relative;height:.1rem;margin:.4rem 0}.bar-slider .bar-item{position:absolute;left:0;padding:0}.bar-slider .bar-item:not(:last-child):first-child{z-index:1;background:#f0f1f4}.bar-slider .bar-slider-btn{position:absolute;top:50%;right:0;width:.6rem;height:.6rem;padding:0;transform:translate(50%,-50%);border:0;border-radius:50%;background:#3085ee}.bar-slider .bar-slider-btn:active{box-shadow:0 0 0 .1rem #3085ee}.card{display:-ms-flexbox;display:flex;flex-direction:column;border:.05rem solid #e7e9ed;border-radius:.1rem;background:#fff;-ms-flex-direction:column}.card .card-body,.card .card-footer,.card .card-header{padding:.8rem;padding-bottom:0}.card .card-body:last-child,.card .card-footer:last-child,.card .card-header:last-child{padding-bottom:.8rem}.card .card-body{-ms-flex:1 1 auto;flex:1 1 auto}.card .card-image{padding-top:.8rem}.card .card-image:first-child{padding-top:0}.card .card-image:first-child img{border-top-left-radius:.1rem;border-top-right-radius:.1rem}.card .card-image:last-child img{border-bottom-right-radius:.1rem;border-bottom-left-radius:.1rem}.chip{font-size:90%;line-height:.8rem;display:-ms-inline-flexbox;display:inline-flex;overflow:hidden;max-width:320px;height:1.2rem;margin:.1rem;padding:.2rem .4rem;vertical-align:middle;white-space:nowrap;text-decoration:none;text-overflow:ellipsis;border-radius:5rem;background:#f0f1f4;-ms-flex-align:center;align-items:center}.chip.active{color:#fff;background:#3085ee}.chip .avatar{margin-right:.2rem;margin-left:-.4rem}.chip .btn-clear{transform:scale(.75);border-radius:50%}.dropdown{position:relative;display:inline-block}.dropdown .menu{position:absolute;top:100%;left:0;display:none;overflow-y:auto;max-height:50vh;animation:slide-down .15s ease 1}.dropdown.dropdown-right .menu{right:0;left:auto}.dropdown .dropdown-toggle:focus+.menu,.dropdown .menu:hover,.dropdown.active .menu{display:block}.dropdown .btn-group .dropdown-toggle:nth-last-child(2){border-top-right-radius:.1rem;border-bottom-right-radius:.1rem}.empty{padding:3.2rem 1.6rem;text-align:center;color:#667189;border-radius:.1rem;background:#f8f9fa}.empty .empty-icon{margin-bottom:.8rem}.empty .empty-subtitle,.empty .empty-title{margin:.4rem auto}.empty .empty-action{margin-top:.8rem}.menu{z-index:300;min-width:180px;margin:0;padding:.4rem;list-style:none;transform:translateY(.2rem);border-radius:.1rem;background:#fff;box-shadow:0 .05rem .2rem rgba(69,77,93,.3)}.menu.menu-nav{background:0 0;box-shadow:none}.menu .menu-item{position:relative;margin-top:0;padding:0 .4rem;text-decoration:none}.menu .menu-item>a{display:block;margin:0 -.4rem;padding:.2rem .4rem;text-decoration:none;color:inherit;border-radius:.1rem}.menu .menu-item>a:focus,.menu .menu-item>a:hover{color:#3085ee;background:#e1edfd}.menu .menu-item>a.active,.menu .menu-item>a:active{color:#3085ee;background:#e1edfd}.menu .menu-item .form-checkbox,.menu .menu-item .form-radio,.menu .menu-item .form-switch{margin:.1rem 0}.menu .menu-item+.menu-item{margin-top:.2rem}.menu .menu-badge{position:absolute;top:0;right:0;display:-ms-flexbox;display:flex;height:100%;-ms-flex-align:center;align-items:center}.menu .menu-badge .label{margin-right:.4rem}.modal{position:fixed;top:0;right:0;bottom:0;left:0;display:none;overflow:hidden;padding:.4rem;opacity:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.modal.active,.modal:target{z-index:400;display:-ms-flexbox;display:flex;opacity:1}.modal.active .modal-overlay,.modal:target .modal-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:block;cursor:default;background:rgba(248,249,250,.75)}.modal.active .modal-container,.modal:target .modal-container{z-index:1;animation:slide-down .2s ease 1}.modal.modal-sm .modal-container{max-width:320px;padding:0 .4rem}.modal.modal-lg .modal-overlay{background:#fff}.modal.modal-lg .modal-container{max-width:960px;box-shadow:none}.modal-container{display:-ms-flexbox;display:flex;flex-direction:column;width:100%;max-width:640px;max-height:75vh;padding:0 .8rem;border-radius:.1rem;background:#fff;box-shadow:0 .2rem .5rem rgba(69,77,93,.3);-ms-flex-direction:column}.modal-container.modal-fullheight{max-height:100vh}.modal-container .modal-header{padding:.8rem;color:#454d5d}.modal-container .modal-body{position:relative;overflow-y:auto;padding:.8rem}.modal-container .modal-footer{padding:.8rem;text-align:right}.nav{display:-ms-flexbox;display:flex;flex-direction:column;margin:.2rem 0;list-style:none;-ms-flex-direction:column}.nav .nav-item a{padding:.2rem .4rem;text-decoration:none;color:#667189}.nav .nav-item a:focus,.nav .nav-item a:hover{color:#3085ee}.nav .nav-item.active>a{font-weight:700;color:#50596c}.nav .nav-item.active>a:focus,.nav .nav-item.active>a:hover{color:#3085ee}.nav .nav{margin-bottom:.4rem;margin-left:.8rem}.pagination{display:-ms-flexbox;display:flex;margin:.2rem 0;padding:.2rem 0;list-style:none}.pagination .page-item{margin:.2rem .05rem}.pagination .page-item span{display:inline-block;padding:.2rem .2rem}.pagination .page-item a{display:inline-block;padding:.2rem .4rem;text-decoration:none;border-radius:.1rem}.pagination .page-item a:focus,.pagination .page-item a:hover{color:#3085ee}.pagination .page-item.disabled a{cursor:default;pointer-events:none;opacity:.5}.pagination .page-item.active a{color:#fff;background:#3085ee}.pagination .page-item.page-next,.pagination .page-item.page-prev{-ms-flex:1 0 50%;flex:1 0 50%}.pagination .page-item.page-next{text-align:right}.pagination .page-item .page-item-title{margin:0}.pagination .page-item .page-item-subtitle{margin:0;opacity:.5}.panel{display:-ms-flexbox;display:flex;flex-direction:column;border:.05rem solid #e7e9ed;border-radius:.1rem;-ms-flex-direction:column}.panel .panel-footer,.panel .panel-header{padding:.8rem;-ms-flex:0 0 auto;flex:0 0 auto}.panel .panel-nav{-ms-flex:0 0 auto;flex:0 0 auto}.panel .panel-body{overflow-y:auto;padding:0 .8rem;-ms-flex:1 1 auto;flex:1 1 auto}.popover{position:relative;display:inline-block}.popover .popover-container{position:absolute;z-index:300;top:0;left:50%;width:320px;padding:.4rem;transition:transform .2s;transform:translate(-50%,-50%) scale(0);opacity:0}.popover :focus+.popover-container,.popover:hover .popover-container{display:block;transform:translate(-50%,-100%) scale(1);opacity:1}.popover.popover-right .popover-container{top:50%;left:100%}.popover.popover-right :focus+.popover-container,.popover.popover-right:hover .popover-container{transform:translate(0,-50%) scale(1)}.popover.popover-bottom .popover-container{top:100%;left:50%}.popover.popover-bottom :focus+.popover-container,.popover.popover-bottom:hover .popover-container{transform:translate(-50%,0) scale(1)}.popover.popover-left .popover-container{top:50%;left:0}.popover.popover-left :focus+.popover-container,.popover.popover-left:hover .popover-container{transform:translate(-100%,-50%) scale(1)}.popover .card{border:0;box-shadow:0 .2rem .5rem rgba(69,77,93,.3)}.step{display:-ms-flexbox;display:flex;width:100%;margin:.2rem 0;list-style:none;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.step .step-item{position:relative;min-height:1rem;margin-top:0;text-align:center;-ms-flex:1 1 0;flex:1 1 0}.step .step-item:not(:first-child)::before{position:absolute;top:9px;left:-50%;width:100%;height:2px;content:'';background:#3085ee}.step .step-item a{display:inline-block;padding:20px 10px 0;text-decoration:none;color:#3085ee}.step .step-item a::before{position:absolute;z-index:1;top:.2rem;left:50%;display:block;width:.6rem;height:.6rem;content:'';transform:translateX(-50%);border:.1rem solid #fff;border-radius:50%;background:#3085ee}.step .step-item.active a::before{border:.1rem solid #3085ee;background:#fff}.step .step-item.active~.step-item::before{background:#e7e9ed}.step .step-item.active~.step-item a{color:#acb3c2}.step .step-item.active~.step-item a::before{background:#e7e9ed}.tab{display:-ms-flexbox;display:flex;margin:.2rem 0 .15rem 0;list-style:none;border-bottom:.05rem solid #e7e9ed;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.tab .tab-item{margin-top:0}.tab .tab-item a{display:block;margin:0 .4rem 0 0;padding:.4rem .2rem .3rem .2rem;text-decoration:none;color:inherit;border-bottom:.1rem solid transparent}.tab .tab-item a:focus,.tab .tab-item a:hover{color:#3085ee}.tab .tab-item a.active,.tab .tab-item.active a{color:#3085ee;border-bottom-color:#3085ee}.tab .tab-item.tab-action{text-align:right;-ms-flex:1 0 auto;flex:1 0 auto}.tab .tab-item .btn-clear{margin-top:-.2rem}.tab.tab-block .tab-item{text-align:center;-ms-flex:1 0 0;flex:1 0 0}.tab.tab-block .tab-item a{margin:0}.tab.tab-block .tab-item .badge[data-badge]::after{position:absolute;top:.1rem;right:.1rem;transform:translate(0,0)}.tab:not(.tab-block) .badge{padding-right:0}.tile{display:-ms-flexbox;display:flex;-ms-flex-line-pack:justify;align-content:space-between;-ms-flex-align:start;align-items:flex-start}.tile .tile-action,.tile .tile-icon{-ms-flex:0 0 auto;flex:0 0 auto}.tile .tile-content{-ms-flex:1 1 auto;flex:1 1 auto}.tile .tile-content:not(:first-child){padding-left:.4rem}.tile .tile-content:not(:last-child){padding-right:.4rem}.tile .tile-subtitle,.tile .tile-title{line-height:1.2rem}.tile.tile-centered{-ms-flex-align:center;align-items:center}.tile.tile-centered .tile-content{overflow:hidden}.tile.tile-centered .tile-subtitle,.tile.tile-centered .tile-title{overflow:hidden;margin-bottom:0;white-space:nowrap;text-overflow:ellipsis}.toast{display:block;width:100%;padding:.4rem;color:#fff;border:.05rem solid #454d5d;border-color:#454d5d;border-radius:.1rem;background:rgba(69,77,93,.95)}.toast.toast-primary{border-color:#3085ee;background:rgba(48,133,238,.95)}.toast.toast-success{border-color:#32b643;background:rgba(50,182,67,.95)}.toast.toast-warning{border-color:#ffb700;background:rgba(255,183,0,.95)}.toast.toast-error{border-color:#e85600;background:rgba(232,86,0,.95)}.toast a{text-decoration:underline;color:#fff}.toast a.active,.toast a:active,.toast a:focus,.toast a:hover{opacity:.75}.toast .btn-clear{margin:.1rem}.toast p:last-child{margin-bottom:0}.tooltip{position:relative}.tooltip::after{font-size:.7rem;position:absolute;z-index:300;bottom:100%;left:50%;display:block;overflow:hidden;max-width:320px;padding:.2rem .4rem;content:attr(data-tooltip);transition:opacity .2s,transform .2s;transform:translate(-50%,.4rem);white-space:pre;text-overflow:ellipsis;pointer-events:none;opacity:0;color:#fff;border-radius:.1rem;background:rgba(69,77,93,.95)}.tooltip:focus::after,.tooltip:hover::after{transform:translate(-50%,-.2rem);opacity:1}.tooltip.disabled,.tooltip[disabled]{pointer-events:auto}.tooltip.tooltip-right::after{bottom:50%;left:100%;transform:translate(-.2rem,50%)}.tooltip.tooltip-right:focus::after,.tooltip.tooltip-right:hover::after{transform:translate(.2rem,50%)}.tooltip.tooltip-bottom::after{top:100%;bottom:auto;transform:translate(-50%,-.4rem)}.tooltip.tooltip-bottom:focus::after,.tooltip.tooltip-bottom:hover::after{transform:translate(-50%,.2rem)}.tooltip.tooltip-left::after{right:100%;bottom:50%;left:auto;transform:translate(.4rem,50%)}.tooltip.tooltip-left:focus::after,.tooltip.tooltip-left:hover::after{transform:translate(-.2rem,50%)}@keyframes loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes slide-down{0%{transform:translateY(-1.6rem);opacity:0}100%{transform:translateY(0);opacity:1}}.text-primary{color:#3085ee!important}a.text-primary:focus,a.text-primary:hover{color:#1877ec}a.text-primary:visited{color:#4893f0}.text-secondary{color:#d3e5fb!important}a.text-secondary:focus,a.text-secondary:hover{color:#bbd7f9}a.text-secondary:visited{color:#eaf3fd}.text-gray{color:#acb3c2!important}a.text-gray:focus,a.text-gray:hover{color:#9ea6b7}a.text-gray:visited{color:#bbc1cd}.text-light{color:#fff!important}a.text-light:focus,a.text-light:hover{color:#f2f2f2}a.text-light:visited{color:#fff}.text-dark{color:#50596c!important}a.text-dark:focus,a.text-dark:hover{color:#454d5d}a.text-dark:visited{color:#5b657a}.text-success{color:#32b643!important}a.text-success:focus,a.text-success:hover{color:#2da23c}a.text-success:visited{color:#39c94b}.text-warning{color:#ffb700!important}a.text-warning:focus,a.text-warning:hover{color:#e6a500}a.text-warning:visited{color:#ffbe1a}.text-error{color:#e85600!important}a.text-error:focus,a.text-error:hover{color:#cf4d00}a.text-error:visited{color:#ff6003}.bg-primary{color:#fff;background:#3085ee!important}.bg-secondary{background:#e1edfd!important}.bg-dark{color:#fff;background:#454d5d!important}.bg-gray{background:#f8f9fa!important}.bg-success{color:#fff;background:#32b643!important}.bg-warning{color:#fff;background:#ffb700!important}.bg-error{color:#fff;background:#e85600!important}.c-hand{cursor:pointer}.c-move{cursor:move}.c-zoom-in{cursor:zoom-in}.c-zoom-out{cursor:zoom-out}.c-not-allowed{cursor:not-allowed}.c-auto{cursor:auto}.d-block{display:block}.d-inline{display:inline}.d-inline-block{display:inline-block}.d-flex{display:-ms-flexbox;display:flex}.d-inline-flex{display:-ms-inline-flexbox;display:inline-flex}.d-hide,.d-none{display:none!important}.d-visible{visibility:visible}.d-invisible{visibility:hidden}.text-hide{font-size:0;line-height:0;color:transparent;border:0;background:0 0;text-shadow:none}.text-assistive{position:absolute;overflow:hidden;clip:rect(0,0,0,0);width:1px;height:1px;margin:-1px;padding:0;border:0}.divider,.divider-vert{position:relative;display:block}.divider-vert[data-content]::after,.divider[data-content]::after{font-size:.7rem;display:inline-block;padding:0 .4rem;content:attr(data-content);transform:translateY(-.65rem);color:#acb3c2;background:#fff}.divider{height:.05rem;margin:.4rem 0;border-top:.05rem solid #fefefe}.divider[data-content]{margin:.8rem 0}.divider-vert{display:block;padding:.8rem}.divider-vert::before{position:absolute;top:.4rem;bottom:.4rem;left:50%;display:block;content:'';transform:translateX(-50%);border-left:.05rem solid #e7e9ed}.divider-vert[data-content]::after{position:absolute;top:50%;left:50%;padding:.2rem 0;transform:translate(-50%,-50%)}.loading{position:relative;min-height:.8rem;pointer-events:none;color:transparent!important}.loading::after{position:absolute;z-index:1;top:50%;left:50%;display:block;width:.8rem;height:.8rem;margin-top:-.4rem;margin-left:-.4rem;content:'';animation:loading .5s infinite linear;border:.1rem solid #3085ee;border-top-color:transparent;border-right-color:transparent;border-radius:50%}.loading.loading-lg{min-height:2rem}.loading.loading-lg::after{width:1.6rem;height:1.6rem;margin-top:-.8rem;margin-left:-.8rem}.clearfix::after{display:table;clear:both;content:''}.float-left{float:left!important}.float-right{float:right!important}.p-relative{position:relative!important}.p-absolute{position:absolute!important}.p-fixed{position:fixed!important}.p-sticky{position:-webkit-sticky!important;position:sticky!important}.p-centered{display:block;float:none;margin-right:auto;margin-left:auto}.flex-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.m-0{margin:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mr-0{margin-right:0!important}.mt-0{margin-top:0!important}.mx-0{margin-right:0!important;margin-left:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.2rem!important}.mb-1{margin-bottom:.2rem!important}.ml-1{margin-left:.2rem!important}.mr-1{margin-right:.2rem!important}.mt-1{margin-top:.2rem!important}.mx-1{margin-right:.2rem!important;margin-left:.2rem!important}.my-1{margin-top:.2rem!important;margin-bottom:.2rem!important}.m-2{margin:.4rem!important}.mb-2{margin-bottom:.4rem!important}.ml-2{margin-left:.4rem!important}.mr-2{margin-right:.4rem!important}.mt-2{margin-top:.4rem!important}.mx-2{margin-right:.4rem!important;margin-left:.4rem!important}.my-2{margin-top:.4rem!important;margin-bottom:.4rem!important}.p-0{padding:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.pr-0{padding-right:0!important}.pt-0{padding-top:0!important}.px-0{padding-right:0!important;padding-left:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.2rem!important}.pb-1{padding-bottom:.2rem!important}.pl-1{padding-left:.2rem!important}.pr-1{padding-right:.2rem!important}.pt-1{padding-top:.2rem!important}.px-1{padding-right:.2rem!important;padding-left:.2rem!important}.py-1{padding-top:.2rem!important;padding-bottom:.2rem!important}.p-2{padding:.4rem!important}.pb-2{padding-bottom:.4rem!important}.pl-2{padding-left:.4rem!important}.pr-2{padding-right:.4rem!important}.pt-2{padding-top:.4rem!important}.px-2{padding-right:.4rem!important;padding-left:.4rem!important}.py-2{padding-top:.4rem!important;padding-bottom:.4rem!important}.s-rounded{border-radius:.1rem}.s-circle{border-radius:50%}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-normal{font-weight:400}.text-bold{font-weight:700}.text-italic{font-style:italic}.text-large{font-size:1.2em}.text-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.text-clip{overflow:hidden;white-space:nowrap;text-overflow:clip}.text-break{word-wrap:break-word;word-break:break-word;-webkit-hyphens:auto;hyphens:auto;-ms-hyphens:auto}
\ No newline at end of file
diff --git a/themes/quark/css-compiled/theme.css b/themes/quark/css-compiled/theme.css
new file mode 100644
index 0000000..28c68a9
--- /dev/null
+++ b/themes/quark/css-compiled/theme.css
@@ -0,0 +1,406 @@
+html { height: 100%; }
+
+#body-wrapper .container { padding: 2rem 0 2rem; }
+
+.header-fixed #body-wrapper { padding-top: 4rem; }
+
+.header-fixed .hero + #start > #body-wrapper { padding-top: 0; }
+
+section.section { padding-left: 1rem; padding-right: 1rem; position: relative; }
+
+.overlay-light, .overlay-dark, .overlay-light-gradient, .overlay-dark-gradient { z-index: 0; }
+
+.hero { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; -ms-flex-pack: center; justify-content: center; padding-top: 6rem; padding-bottom: 7rem; background-size: cover; background-position: center; }
+
+.hero h1 { color: #242931; font-size: 4rem; }
+
+.hero h2 { color: rgba(36, 41, 49, 0.8); font-size: 2.5rem; }
+
+.hero.hero-fullscreen { min-height: 100vh; }
+
+.hero.hero-large { min-height: 500px; }
+
+.hero.hero-medium { min-height: 400px; }
+
+.hero.hero-small { min-height: 110px; }
+
+.hero.hero-tiny { min-height: 8rem; }
+
+.header-fixed .hero { background-position: 50% 0; }
+
+@media (max-width: 840px) { .hero h1 { font-size: 3rem; }
+ .hero h2 { font-size: 1.75rem; } }
+
+@media (max-width: 600px) { .hero h1 { font-size: 2rem; }
+ .hero h2 { font-size: 1.25rem; } }
+
+.hero.text-light h1 { color: #fff; }
+
+.hero.text-light h2 { color: rgba(255, 255, 255, 0.8); }
+
+.hero p { font-size: .9rem; font-weight: 300; }
+
+.hero #to-start { display: inline-block; position: absolute; bottom: 10px; font-size: 2rem; cursor: pointer; }
+
+.image-overlay { position: absolute; top: 0; bottom: 0; left: 0; right: 0; z-index: -1; }
+
+.overlay-light .image-overlay { background: rgba(255, 255, 255, 0.4); }
+
+.overlay-light-gradient .image-overlay { background: linear-gradient(to bottom, rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0.2)); }
+
+.overlay-dark .image-overlay { background: rgba(0, 0, 0, 0.4); }
+
+.overlay-dark-gradient .image-overlay { background: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.2)); }
+
+html { font-size: 16px; }
+
+@media screen and (min-width: 480px) { html { font-size: calc(16px + 4 * ((100vw - 480px) / 800)); } }
+
+@media screen and (min-width: 1280px) { html { font-size: 20px; } }
+
+h1, h2, h3, h4, h5, h6 { margin-top: 2rem; font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif; color: #3a414e; }
+
+h1, .h1 { font-size: 3rem; }
+
+h2, .h2 { font-size: 1.8rem; }
+
+h6, .h6 { font-weight: 400; }
+
+.title-center h1, .title-center h2 { text-align: center; }
+
+.title-h1h2 h1 { font-weight: 100; margin-bottom: 0; line-height: 1.1; }
+
+.title-h1h2 h1 strong, .title-h1h2 h1 bold { font-weight: 400; }
+
+.title-h1h2 h1 + h2 { line-height: 1.1; margin-top: 0; }
+
+.title-h1h2 h1 + h2, .title-center h1 + h2 { margin-bottom: 50px; font-weight: 700; }
+
+a:focus { outline: none !important; box-shadow: none !important; }
+
+img { max-width: 100%; }
+
+.table table { border-spacing: 0; border-collapse: collapse; width: 100%; }
+
+pre code, pre.xdebug-var-dump { background: #fafafa; display: block; padding: 1rem !important; line-height: 1.5; color: inherit; border-radius: 2px; overflow-x: auto; }
+
+pre[class*="language-"] code { border-radius: inherit; padding: 0 !important; overflow-x: initial; }
+
+pre code:not(.hljs):not([class*="language-"]) { background: #f8f8f8; }
+
+i.fa.fa-heart.pulse, i.fa.fa-heart-o.pulse { color: #920; }
+
+b, strong { font-weight: 700; }
+
+.heavy { font-weight: 700; }
+
+.light { font-weight: 200; }
+
+.text-light { color: rgba(255, 255, 255, 0.8); }
+
+.text-light h1, .text-light h2, .text-light h3, .text-light h4, .text-light h5, .text-light h6 { color: rgba(255, 255, 255, 0.9); }
+
+#error { text-align: center; position: relative; margin-top: 5rem; }
+
+#error .icon { font-size: 50px; }
+
+#messages { margin-bottom: 1rem; }
+
+#messages .icon { font-size: 1rem; }
+
+ul, ol { margin-left: 1.6rem; }
+
+ul ul, ul ol, ol ul, ol ol { margin-left: 1.6rem; }
+
+ul { list-style: disc outside; }
+
+ol { list-style: decimal outside; }
+
+.notices { margin: 1.5rem 0; }
+
+.notices p { margin: 1rem 0; }
+
+form { /** Reset some defaults for Quark Theme **/ }
+
+form .button-wrapper { margin-top: 0.75rem; margin-bottom: 1rem; }
+
+form span.required { color: #e85600; font-weight: 700; font-size: 1.2rem; }
+
+form .form-input[type=range] { -webkit-appearance: slider-horizontal; -moz-appearance: slider-horizontal; appearance: slider-horizontal; }
+
+form .form-input[type=range]:focus { box-shadow: none; border: none; }
+
+form .form-group:not(.form-field-toggleable) .checkboxes { display: inherit; }
+
+form .form-group:not(.form-field-toggleable) .checkboxes label { display: inherit; padding: 0.1rem 0.4rem 0.1rem 1.2rem; margin: inherit; }
+
+form .form-group:not(.form-field-toggleable) .checkboxes label:before { display: none; }
+
+#grav-login > form { margin: 2rem auto 0; max-width: 350px; }
+
+#grav-login .form-label { display: none; }
+
+#grav-login .form-data { margin: 1rem 0; }
+
+#grav-login .form-input { text-align: center; }
+
+#grav-login .button-wrapper { text-align: right; }
+
+#grav-login .button-wrapper .form-data.rememberme { margin: 0; float: left; }
+
+#grav-login .login-form button[type="submit"] { background: #3085EE; border-color: #227ded; color: #fff; }
+
+#grav-login .login-form button[type="submit"]:focus, #grav-login .login-form button[type="submit"]:hover { background: #1877ec; border-color: #1370e3; color: #fff; }
+
+#grav-login .login-form button[type="submit"]:active, #grav-login .login-form button[type="submit"].active { background: #1372e7; border-color: #126bd9; color: #fff; }
+
+#grav-login .twofa-form button[type="submit"]:first-child { background: #3085EE; border-color: #227ded; color: #fff; float: right; margin-left: 4px; }
+
+#grav-login .twofa-form button[type="submit"]:first-child:focus, #grav-login .twofa-form button[type="submit"]:first-child:hover { background: #1877ec; border-color: #1370e3; color: #fff; }
+
+#grav-login .twofa-form button[type="submit"]:first-child:active, #grav-login .twofa-form button[type="submit"]:first-child.active { background: #1372e7; border-color: #126bd9; color: #fff; }
+
+.mobile-container { position: absolute; top: 40%; left: 0; margin: 0 auto; z-index: 2; }
+
+.mobile-logo svg, .mobile-logo img { height: 42px; margin-top: .7rem; margin-left: 1.4rem; }
+
+.mobile-logo svg path, .mobile-logo img path { fill: #fff; }
+
+.mobile-menu { display: none; top: 0; right: 0; z-index: 3; }
+
+.header-fixed .mobile-menu { position: fixed; }
+
+@media (max-width: 840px) { .mobile-menu { display: block; } }
+
+.mobile-menu .button_container { position: absolute; top: 1.3rem; right: 1rem; height: 24px; width: 28px; cursor: pointer; z-index: 100; transition: opacity .25s ease, top 0.5s ease; }
+
+.mobile-menu .button_container:hover { opacity: .7; }
+
+.mobile-menu .button_container.active { position: fixed; }
+
+.mobile-menu .button_container.active .top { transform: translateY(8px) translateX(0) rotate(45deg); background: #FFF; }
+
+.mobile-menu .button_container.active .middle { opacity: 0; background: #FFF; }
+
+.mobile-menu .button_container.active .bottom { transform: translateY(-8px) translateX(0) rotate(-45deg); background: #FFF; }
+
+.mobile-menu .button_container span { background: #3085EE; border: none; height: 4px; width: 100%; position: absolute; top: 0; left: 0; transition: all .35s ease; cursor: pointer; }
+
+.mobile-menu .button_container span:nth-of-type(2) { top: 8px; }
+
+.mobile-menu .button_container span:nth-of-type(3) { top: 16px; }
+
+.overlay { position: fixed; background: #000; top: 0; left: 0; width: 100%; height: 0%; opacity: 0; visibility: hidden; transition: opacity .35s, visibility .35s, height .35s; }
+
+.overlay.open { opacity: .95; visibility: visible; height: 100%; }
+
+.overlay nav { position: relative; margin: 0 auto; text-align: center; }
+
+.overlay-menu { height: calc(100% - 90px); overflow-y: scroll; }
+
+.overlay-menu > .tree { text-align: left; }
+
+.treemenu.treemenu-root { margin: 1rem; }
+
+.treemenu li { list-style: none; margin: 0 0 1px; padding: 5px 0; line-height: 1.2rem; background: rgba(102, 113, 137, 0.1); }
+
+.treemenu li a { display: block; margin-left: 1.2rem; font-size: 1rem; }
+
+.treemenu li a:hover, .treemenu li a:focus, .treemenu li a.active { color: #3e8def !important; text-decoration: none; }
+
+.treemenu ul { margin: 0 0 0 1rem; }
+
+.treemenu .toggler { cursor: pointer; vertical-align: top; font-size: 1.1rem; line-height: 1rem; padding-left: 5px; float: left; }
+
+.treemenu .toggler:before { display: inline-block; margin-right: 2pt; }
+
+.treemenu li.tree-empty > .toggler { opacity: 0.3; cursor: default; }
+
+.treemenu li.tree-empty > .toggler:before { content: "\2022"; }
+
+.treemenu li.tree-closed > .toggler:before { content: "+"; }
+
+.treemenu li.tree-opened > .toggler:before { content: "\2212"; }
+
+.mobile-nav-open { overflow-y: hidden; }
+
+.default-animation, #header, #header .navbar-section, #header .logo svg, #header .logo img, .modular-features.small .feature-icon i, .modular-features .feature-icon { transition: all 0.5s ease; }
+
+.pulse { animation-name: pulse_animation; animation-duration: 2000ms; transform-origin: 70% 70%; animation-iteration-count: infinite; animation-timing-function: linear; }
+
+@keyframes pulse_animation { 0% { transform: scale(1); }
+ 30% { transform: scale(1); }
+ 40% { transform: scale(1.08); }
+ 50% { transform: scale(1); }
+ 60% { transform: scale(1); }
+ 70% { transform: scale(1.05); }
+ 80% { transform: scale(1); }
+ 100% { transform: scale(1); } }
+
+#header { width: 100%; height: 4rem; border-bottom: 1px solid rgba(172, 179, 194, 0.2); font-size: 0.7rem; font-weight: 700; background: #fff; color: #454d5d; }
+
+#header a { color: #454d5d; }
+
+#header .logo svg path { fill: #222; }
+
+.header-dark #header:not(.scrolled) { background: #222; color: #fff; }
+
+.header-dark #header:not(.scrolled) a { color: rgba(255, 255, 255, 0.7) !important; }
+
+.header-dark #header:not(.scrolled) a.active { color: #fff !important; }
+
+.header-dark #header:not(.scrolled) .dropmenu ul ul a { color: #454d5d !important; }
+
+.header-dark #header:not(.scrolled) .logo svg path { fill: #fff; }
+
+.header-dark.header-transparent #header:not(.scrolled) { background: rgba(0, 0, 0, 0.05); }
+
+.header-transparent #header:not(.scrolled) { background: rgba(255, 255, 255, 0.05); }
+
+#header .navbar-section { height: 4rem; }
+
+@media (max-width: 840px) { #header .navbar-section { margin-right: 2rem; } }
+
+@media (max-width: 840px) { #header .navbar-section.desktop-menu { display: none; } }
+
+#header .logo svg, #header .logo img { height: 42px; display: inherit; }
+
+.header-fixed #header { position: fixed; top: 0; z-index: 2; }
+
+body.header-fixed.header-animated #header.scrolled { height: 2.3rem; }
+
+body.header-fixed.header-animated #header.scrolled .navbar-section { height: 2.3rem; }
+
+body.header-fixed.header-animated #header.scrolled .logo svg, body.header-fixed.header-animated #header.scrolled .logo img { height: 28px; }
+
+body.header-fixed.header-animated #header.scrolled ~ .mobile-menu .button_container { top: 0.5rem; }
+
+.login-status-wrapper { white-space: nowrap; }
+
+body.sticky-footer { height: 100%; min-height: 100vh; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; }
+
+body.sticky-footer #page-wrapper { -ms-flex: 1 0 auto; flex: 1 0 auto; }
+
+#footer { color: #acb3c2; padding: 1rem 1rem 0; text-align: center; }
+
+@media (max-width: 840px) { .dropmenu { display: none; } }
+
+.dropmenu ul { white-space: nowrap; margin: 0; display: -ms-flexbox; display: flex; }
+
+.dropmenu ul li { position: relative; margin: 0; }
+
+.dropmenu ul li a { text-decoration: none; padding: 7px 30px 7px 20px; display: block; }
+
+.dropmenu ul li a:hover, .dropmenu ul li a:focus, .dropmenu ul li a.active { color: #3085EE !important; }
+
+.dropmenu ul li a:before { content: '\f107'; font-family: 'FontAwesome'; display: inline-block; vertical-align: middle; float: right; margin-right: -20px; }
+
+.dropmenu ul li a:only-child { padding-right: 20px; }
+
+.dropmenu ul li a:only-child:before { content: ''; }
+
+.dropmenu ul li:hover > ul { display: block; visibility: visible; }
+
+.dropmenu ul ul li a:before { content: '\f105'; }
+
+.dropmenu ul ul { position: absolute; top: 100%; list-style: none; background: #fff; box-shadow: 0 3px 5px rgba(0, 0, 0, 0.1); visibility: hidden; }
+
+.dropmenu ul ul ul { position: absolute; left: 100%; top: 0; }
+
+.dropmenu > ul > li { display: inline-block; }
+
+.dropmenu.animated ul li { transition: background .7s, color 0.5s; }
+
+.dropmenu.animated ul li:hover > ul { opacity: 1; transform: translateY(0); }
+
+.dropmenu.animated ul ul { transition: transform .3s, opacity .5s; opacity: 0; transform: translateY(-10px); }
+
+/** Extra columns spacing **/
+.extra-spacing:not(.col-12), :not(.col12) > .e-content { padding-right: 1rem; }
+
+@media (max-width: 840px) { .extra-spacing:not(.col-12), :not(.col12) > .e-content { padding-right: 0; } }
+
+/** Breadcrumbs styling **/
+#breadcrumbs { padding-left: 0; display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; margin-top: -1rem; margin-bottom: 1rem; }
+
+#breadcrumbs i { display: none; }
+
+#breadcrumbs span, #breadcrumbs a { padding: 0 0.5rem; }
+
+#breadcrumbs span:first-child, #breadcrumbs a:first-child { padding-left: 0; }
+
+#breadcrumbs span:not(:first-child)::before, #breadcrumbs a:not(:first-child)::before { color: #e7e9ed; content: "/"; padding-right: 1rem; }
+
+/** Blog Listing **/
+.blog-listing .bricklayer-column { padding-left: 0px; padding-right: 25px; }
+
+.blog-listing .card { margin-bottom: 25px; border: 0; box-shadow: 0 10px 45px -9px rgba(0, 0, 0, 0.1); }
+
+.blog-listing .card-footer { text-align: right; }
+
+.blog-listing .blog-date { font-size: 13px; }
+
+/** Blog Item **/
+.content-title { margin-bottom: 2rem; }
+
+.content-title h2 { margin-bottom: 0.5rem; }
+
+.label { font-size: 12px; text-transform: uppercase; }
+
+/** Pagination **/
+ul.pagination { -ms-flex-pack: center; justify-content: center; }
+
+.prev-next { margin-top: 4rem; }
+
+/** Sidebar specific tweaks **/
+#sidebar ul.related-pages { box-shadow: none; padding: 0; z-index: 1; }
+
+#sidebar ul.related-pages li { border-bottom: 1px solid #e7e9ed; }
+
+#sidebar ul.related-pages li:last-child { border-bottom: 0; }
+
+#sidebar ul.archives { list-style: none; margin-left: 0; }
+
+#sidebar ul.archives .label { vertical-align: text-top; }
+
+.modular-hero #to-start { bottom: 3.5rem; }
+
+.modular-features { text-align: center; }
+
+.modular-features.offset-box .frame-box { margin: -3rem -1.4rem 3rem; padding: 1rem 1rem; background: #fff; box-shadow: 0 0 75px 0 rgba(69, 77, 93, 0.1); }
+
+.modular-features.small .columns { margin-top: -1rem; }
+
+.modular-features.small .column:hover .feature-icon i { color: #3085EE; }
+
+.modular-features.small .feature-icon { display: block; -ms-flex-pack: left; justify-content: left; }
+
+.modular-features.small .feature-icon i { position: relative; display: inherit; font-size: 70px; margin: 0 auto 1rem; transform: none; left: auto; top: auto; color: #acb3c2; }
+
+.modular-features.small .feature-icon h6 { text-transform: none; }
+
+.modular-features .frame-box { padding: 3rem 0; }
+
+.modular-features .frame-box > p { max-width: 600px; margin-left: auto; margin-right: auto; }
+
+.modular-features .column { padding: 1rem; }
+
+.modular-features .column:hover .feature-icon { color: #acb3c2; }
+
+.modular-features .column:hover .feature-icon h6 { color: #3085EE; }
+
+.modular-features .column:hover .feature-content { color: #667189; }
+
+.modular-features .feature-icon { font-size: 130px; height: 100px; color: #e7e9ed; display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; -ms-flex-pack: center; justify-content: center; position: relative; margin: 1rem 0; }
+
+.modular-features .feature-icon i { position: absolute; left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%); }
+
+.modular-features .feature-icon h6 { background: #fff; line-height: 1; z-index: 1; text-transform: uppercase; font-weight: 600; margin: 0; display: block; color: #667189; }
+
+.modular-features .feature-content { color: #acb3c2; }
+
+.modular-text { padding-top: 4rem; padding-bottom: 4rem; }
+
+.modular-text .columns.left { -ms-flex-direction: row-reverse; flex-direction: row-reverse; }
+
+/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuY3NzIiwic291cmNlcyI6WyJ0aGVtZS5zY3NzIiwidGhlbWUvX3ZhcmlhYmxlcy5zY3NzIiwic3BlY3RyZS9fdmFyaWFibGVzLnNjc3MiLCJzcGVjdHJlL19taXhpbnMuc2NzcyIsInNwZWN0cmUvbWl4aW5zL19hdmF0YXIuc2NzcyIsInNwZWN0cmUvbWl4aW5zL19idXR0b24uc2NzcyIsInNwZWN0cmUvbWl4aW5zL19jbGVhcmZpeC5zY3NzIiwic3BlY3RyZS9taXhpbnMvX2NvbG9yLnNjc3MiLCJzcGVjdHJlL21peGlucy9fbGFiZWwuc2NzcyIsInNwZWN0cmUvbWl4aW5zL19wb3NpdGlvbi5zY3NzIiwic3BlY3RyZS9taXhpbnMvX3NoYWRvdy5zY3NzIiwic3BlY3RyZS9taXhpbnMvX3RleHQuc2NzcyIsInNwZWN0cmUvbWl4aW5zL190b2FzdC5zY3NzIiwidGhlbWUvX2ZvbnRzLnNjc3MiLCJ0aGVtZS9fbWl4aW5zLnNjc3MiLCJ0aGVtZS9fZnJhbWV3b3JrLnNjc3MiLCJ0aGVtZS9fdHlwb2dyYXBoeS5zY3NzIiwidGhlbWUvX2Zvcm1zLnNjc3MiLCJ0aGVtZS9fbW9iaWxlLnNjc3MiLCJ0aGVtZS9fYW5pbWF0aW9uLnNjc3MiLCJ0aGVtZS9faGVhZGVyLnNjc3MiLCJ0aGVtZS9fZm9vdGVyLnNjc3MiLCJ0aGVtZS9fbWVudS5zY3NzIiwidGhlbWUvX2Jsb2cuc2NzcyIsInRoZW1lL19vbmVwYWdlLnNjc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29yZSB2YXJpYWJsZXMgYW5kIG1peGluc1xuQGltcG9ydCAndGhlbWUvdmFyaWFibGVzJztcbkBpbXBvcnQgJ3NwZWN0cmUvdmFyaWFibGVzJztcbkBpbXBvcnQgJ3NwZWN0cmUvbWl4aW5zJztcblxuQGltcG9ydCAndGhlbWUvZm9udHMnO1xuQGltcG9ydCAndGhlbWUvbWl4aW5zJztcbkBpbXBvcnQgJ3RoZW1lL2ZyYW1ld29yayc7XG5AaW1wb3J0ICd0aGVtZS90eXBvZ3JhcGh5JztcbkBpbXBvcnQgJ3RoZW1lL2Zvcm1zJztcbkBpbXBvcnQgJ3RoZW1lL21vYmlsZSc7XG5AaW1wb3J0ICd0aGVtZS9hbmltYXRpb24nO1xuXG5AaW1wb3J0ICd0aGVtZS9oZWFkZXInO1xuQGltcG9ydCAndGhlbWUvZm9vdGVyJztcbkBpbXBvcnQgJ3RoZW1lL21lbnUnO1xuXG4vLyBFeHRyYSBTa2VsZXRvbiBTdHlsaW5nXG5AaW1wb3J0ICd0aGVtZS9ibG9nJztcbkBpbXBvcnQgJ3RoZW1lL29uZXBhZ2UnO1xuXG4iLCIvLyBTcGVjdHJlIE92ZXJyaWRlc1xuJHByaW1hcnktY29sb3I6ICMzMDg1RUUgIWRlZmF1bHQ7XG4kZGFyay1jb2xvcjogIzQ1NGQ1ZCAhZGVmYXVsdDtcbiRsaWdodC1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcbiRncmF5LWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA0MCUpICFkZWZhdWx0O1xuJGdyYXktY29sb3ItZGFyazogZGFya2VuKCRncmF5LWNvbG9yLCAyNSUpICFkZWZhdWx0O1xuJGJvcmRlci1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNjAlKSAhZGVmYXVsdDtcbiRiZy1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNjYlKSAhZGVmYXVsdDtcbiRib2R5LWZvbnQtY29sb3I6IGxpZ2h0ZW4oJGRhcmstY29sb3IsIDUlKSAhZGVmYXVsdDtcblxuLy8gTGF5b3V0XG4kaG9yaXotcGFkZGluZzogMXJlbTtcbiR2ZXJ0LXBhZGRpbmc6IDJyZW0gMCAycmVtO1xuXG4vLyBGb250c1xuJG1pbi1yZXNwb25zaXZlLWZvbnQtc2l6ZTogMTZweDtcblxuLy8gSGVhZGVyXG4kaGVhZGVyLWhlaWdodC1sYXJnZTogNHJlbTtcbiRoZWFkZXItaGVpZ2h0LXNtYWxsOiAyLjNyZW07XG4kaGVhZGVyLWNvbG9yLWRhcms6ICMyMjI7XG4kaGVhZGVyLXRleHQtbGlnaHQ6ICRsaWdodC1jb2xvcjtcbiRoZWFkZXItdGV4dC1kYXJrOiBkYXJrZW4oJGRhcmstY29sb3IsIDE1JSk7XG5cbi8vIERyb3Bkb3duIE1lbnVcbiRkcm9wbWVudS1iZzogJGxpZ2h0LWNvbG9yO1xuJGRyb3BtZW51LWhvdmVyLXRleHQ6ICRwcmltYXJ5LWNvbG9yO1xuJGRyb3BtZW51LWhvcml6LXBhZGRpbmc6IDIwcHg7XG4kZHJvcG1lbnUtdmVydC1wYWRkaW5nOiA3cHg7XG4kZHJvcG1lbnUtY2hpbGQtcGFkZGluZzogMTBweDtcbiRkcm9wbWVudS1zaGFkb3c6IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cbi8vIE1vYmlsZSBNZW51XG4kbW9iaWxlLWNvbG9yLW1haW46ICRwcmltYXJ5LWNvbG9yO1xuJG1vYmlsZS1jb2xvci1hY3RpdmU6ICNGRkY7XG4kbW9iaWxlLWNvbG9yLWxpbms6ICNGRkY7XG4kbW9iaWxlLWJ1dHRvbi1oZWlnaHQ6IDI0cHg7XG4kbW9iaWxlLWJ1dHRvbi13aWR0aDogMjhweDsiLCIvLyBDb3JlIHZhcmlhYmxlc1xuJHZlcnNpb246IFwiMC41LjhcIjtcblxuLy8gQ29yZSBmZWF0dXJlc1xuJHJ0bDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIENvcmUgY29sb3JzXG4kcHJpbWFyeS1jb2xvcjogIzU3NTVkOSAhZGVmYXVsdDtcbiRwcmltYXJ5LWNvbG9yLWRhcms6IGRhcmtlbigkcHJpbWFyeS1jb2xvciwgMyUpICFkZWZhdWx0O1xuJHByaW1hcnktY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJHByaW1hcnktY29sb3IsIDMlKSAhZGVmYXVsdDtcbiRzZWNvbmRhcnktY29sb3I6IGxpZ2h0ZW4oJHByaW1hcnktY29sb3IsIDM3LjUlKSAhZGVmYXVsdDtcbiRzZWNvbmRhcnktY29sb3ItZGFyazogZGFya2VuKCRzZWNvbmRhcnktY29sb3IsIDMlKSAhZGVmYXVsdDtcbiRzZWNvbmRhcnktY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJHNlY29uZGFyeS1jb2xvciwgMyUpICFkZWZhdWx0O1xuXG4vLyBHcmF5IGNvbG9yc1xuJGRhcmstY29sb3I6ICMzMDM3NDIgIWRlZmF1bHQ7XG4kbGlnaHQtY29sb3I6ICNmZmYgIWRlZmF1bHQ7XG4kZ3JheS1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNTUlKSAhZGVmYXVsdDtcbiRncmF5LWNvbG9yLWRhcms6IGRhcmtlbigkZ3JheS1jb2xvciwgMzAlKSAhZGVmYXVsdDtcbiRncmF5LWNvbG9yLWxpZ2h0OiBsaWdodGVuKCRncmF5LWNvbG9yLCAyMCUpICFkZWZhdWx0O1xuXG4kYm9yZGVyLWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA2NSUpICFkZWZhdWx0O1xuJGJvcmRlci1jb2xvci1kYXJrOiBkYXJrZW4oJGJvcmRlci1jb2xvciwgMTAlKSAhZGVmYXVsdDtcbiRib3JkZXItY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJGJvcmRlci1jb2xvciwgOCUpICFkZWZhdWx0O1xuJGJnLWNvbG9yOiBsaWdodGVuKCRkYXJrLWNvbG9yLCA3NSUpICFkZWZhdWx0O1xuJGJnLWNvbG9yLWRhcms6IGRhcmtlbigkYmctY29sb3IsIDMlKSAhZGVmYXVsdDtcbiRiZy1jb2xvci1saWdodDogJGxpZ2h0LWNvbG9yICFkZWZhdWx0O1xuXG4vLyBDb250cm9sIGNvbG9yc1xuJHN1Y2Nlc3MtY29sb3I6ICMzMmI2NDMgIWRlZmF1bHQ7XG4kd2FybmluZy1jb2xvcjogI2ZmYjcwMCAhZGVmYXVsdDtcbiRlcnJvci1jb2xvcjogI2U4NTYwMCAhZGVmYXVsdDtcblxuLy8gT3RoZXIgY29sb3JzXG4kY29kZS1jb2xvcjogI2Q3M2U0OCAhZGVmYXVsdDtcbiRoaWdobGlnaHQtY29sb3I6ICNmZmU5YjMgIWRlZmF1bHQ7XG4kYm9keS1iZzogJGJnLWNvbG9yLWxpZ2h0ICFkZWZhdWx0O1xuJGJvZHktZm9udC1jb2xvcjogbGlnaHRlbigkZGFyay1jb2xvciwgNSUpICFkZWZhdWx0O1xuJGxpbmstY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuJGxpbmstY29sb3ItZGFyazogZGFya2VuKCRsaW5rLWNvbG9yLCAxMCUpICFkZWZhdWx0O1xuJGxpbmstY29sb3ItbGlnaHQ6IGxpZ2h0ZW4oJGxpbmstY29sb3IsIDEwJSkgIWRlZmF1bHQ7XG5cbi8vIEZvbnRzXG4vLyBDcmVkaXQ6IGh0dHBzOi8vd3d3LnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMTUvMTEvdXNpbmctc3lzdGVtLXVpLWZvbnRzLXByYWN0aWNhbC1ndWlkZS9cbiRiYXNlLWZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8gIWRlZmF1bHQ7XG4kbW9uby1mb250LWZhbWlseTogXCJTRiBNb25vXCIsIFwiU2Vnb2UgVUkgTW9ub1wiLCBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2UgIWRlZmF1bHQ7XG4kZmFsbGJhY2stZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgc2Fucy1zZXJpZiAhZGVmYXVsdDtcbiRjamstemgtaGFucy1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksIFwiUGluZ0ZhbmcgU0NcIiwgXCJIaXJhZ2lubyBTYW5zIEdCXCIsIFwiTWljcm9zb2Z0IFlhSGVpXCIsICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRjamstemgtaGFudC1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksIFwiUGluZ0ZhbmcgVENcIiwgXCJIaXJhZ2lubyBTYW5zIENOU1wiLCBcIk1pY3Jvc29mdCBKaGVuZ0hlaVwiLCAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG4kY2prLWpwLWZvbnQtZmFtaWx5OiAkYmFzZS1mb250LWZhbWlseSwgXCJIaXJhZ2lubyBTYW5zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwiWXUgR290aGljXCIsIFl1R290aGljLCBNZWlyeW8sICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRjamsta28tZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5LCBcIk1hbGd1biBHb3RoaWNcIiwgJGZhbGxiYWNrLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuJGJvZHktZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5LCAkZmFsbGJhY2stZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG5cbi8vIFVuaXQgc2l6ZXNcbiR1bml0LW86IC4wNXJlbSAhZGVmYXVsdDtcbiR1bml0LWg6IC4xcmVtICFkZWZhdWx0O1xuJHVuaXQtMTogLjJyZW0gIWRlZmF1bHQ7XG4kdW5pdC0yOiAuNHJlbSAhZGVmYXVsdDtcbiR1bml0LTM6IC42cmVtICFkZWZhdWx0O1xuJHVuaXQtNDogLjhyZW0gIWRlZmF1bHQ7XG4kdW5pdC01OiAxcmVtICFkZWZhdWx0O1xuJHVuaXQtNjogMS4ycmVtICFkZWZhdWx0O1xuJHVuaXQtNzogMS40cmVtICFkZWZhdWx0O1xuJHVuaXQtODogMS42cmVtICFkZWZhdWx0O1xuJHVuaXQtOTogMS44cmVtICFkZWZhdWx0O1xuJHVuaXQtMTA6IDJyZW0gIWRlZmF1bHQ7XG4kdW5pdC0xMjogMi40cmVtICFkZWZhdWx0O1xuJHVuaXQtMTY6IDMuMnJlbSAhZGVmYXVsdDtcblxuLy8gRm9udCBzaXplc1xuJGh0bWwtZm9udC1zaXplOiAyMHB4ICFkZWZhdWx0O1xuJGh0bWwtbGluZS1oZWlnaHQ6IDEuNSAhZGVmYXVsdDtcbiRmb250LXNpemU6IC44cmVtICFkZWZhdWx0O1xuJGZvbnQtc2l6ZS1zbTogLjdyZW0gIWRlZmF1bHQ7XG4kZm9udC1zaXplLWxnOiAuOXJlbSAhZGVmYXVsdDtcbiRsaW5lLWhlaWdodDogMS4ycmVtICFkZWZhdWx0O1xuXG4vLyBTaXplc1xuJGxheW91dC1zcGFjaW5nOiAkdW5pdC0yICFkZWZhdWx0O1xuJGxheW91dC1zcGFjaW5nLXNtOiAkdW5pdC0xICFkZWZhdWx0O1xuJGxheW91dC1zcGFjaW5nLWxnOiAkdW5pdC00ICFkZWZhdWx0O1xuJGJvcmRlci1yYWRpdXM6ICR1bml0LWggIWRlZmF1bHQ7XG4kYm9yZGVyLXdpZHRoOiAkdW5pdC1vICFkZWZhdWx0O1xuJGJvcmRlci13aWR0aC1sZzogJHVuaXQtaCAhZGVmYXVsdDtcbiRjb250cm9sLXNpemU6ICR1bml0LTkgIWRlZmF1bHQ7XG4kY29udHJvbC1zaXplLXNtOiAkdW5pdC03ICFkZWZhdWx0O1xuJGNvbnRyb2wtc2l6ZS1sZzogJHVuaXQtMTAgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXg6ICR1bml0LTIgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXgtc206ICR1bml0LTIgKiAuNzUgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXgtbGc6ICR1bml0LTIgKiAxLjUgIWRlZmF1bHQ7XG4kY29udHJvbC1wYWRkaW5nLXk6ICgkY29udHJvbC1zaXplIC0gJGxpbmUtaGVpZ2h0KSAvIDIgLSAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuJGNvbnRyb2wtcGFkZGluZy15LXNtOiAoJGNvbnRyb2wtc2l6ZS1zbSAtICRsaW5lLWhlaWdodCkgLyAyIC0gJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRjb250cm9sLXBhZGRpbmcteS1sZzogKCRjb250cm9sLXNpemUtbGcgLSAkbGluZS1oZWlnaHQpIC8gMiAtICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XG4kY29udHJvbC1pY29uLXNpemU6IC44cmVtICFkZWZhdWx0O1xuXG4kY29udHJvbC13aWR0aC14czogMTgwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC1zbTogMzIwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC1tZDogNjQwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC1sZzogOTYwcHggIWRlZmF1bHQ7XG4kY29udHJvbC13aWR0aC14bDogMTI4MHB4ICFkZWZhdWx0O1xuXG4vLyBSZXNwb25zaXZlIGJyZWFrcG9pbnRzXG4kc2l6ZS14czogNDgwcHggIWRlZmF1bHQ7XG4kc2l6ZS1zbTogNjAwcHggIWRlZmF1bHQ7XG4kc2l6ZS1tZDogODQwcHggIWRlZmF1bHQ7XG4kc2l6ZS1sZzogOTYwcHggIWRlZmF1bHQ7XG4kc2l6ZS14bDogMTI4MHB4ICFkZWZhdWx0O1xuJHNpemUtMng6IDE0NDBweCAhZGVmYXVsdDtcblxuJHJlc3BvbnNpdmUtYnJlYWtwb2ludDogJHNpemUteHMgIWRlZmF1bHQ7XG5cbi8vIFotaW5kZXhcbiR6aW5kZXgtMDogMSAhZGVmYXVsdDtcbiR6aW5kZXgtMTogMTAwICFkZWZhdWx0O1xuJHppbmRleC0yOiAyMDAgIWRlZmF1bHQ7XG4kemluZGV4LTM6IDMwMCAhZGVmYXVsdDtcbiR6aW5kZXgtNDogNDAwICFkZWZhdWx0O1xuIiwiLy8gTWl4aW5zXG5AaW1wb3J0IFwibWl4aW5zL2F2YXRhclwiO1xuQGltcG9ydCBcIm1peGlucy9idXR0b25cIjtcbkBpbXBvcnQgXCJtaXhpbnMvY2xlYXJmaXhcIjtcbkBpbXBvcnQgXCJtaXhpbnMvY29sb3JcIjtcbkBpbXBvcnQgXCJtaXhpbnMvbGFiZWxcIjtcbkBpbXBvcnQgXCJtaXhpbnMvcG9zaXRpb25cIjtcbkBpbXBvcnQgXCJtaXhpbnMvc2hhZG93XCI7XG5AaW1wb3J0IFwibWl4aW5zL3RleHRcIjtcbkBpbXBvcnQgXCJtaXhpbnMvdG9hc3RcIjsiLCIvLyBBdmF0YXIgbWl4aW5cbkBtaXhpbiBhdmF0YXItYmFzZSgkc2l6ZTogJHVuaXQtOCkge1xuICBmb250LXNpemU6ICRzaXplIC8gMjtcbiAgaGVpZ2h0OiAkc2l6ZTtcbiAgd2lkdGg6ICRzaXplO1xufVxuIiwiLy8gQnV0dG9uIHZhcmlhbnQgbWl4aW5cbkBtaXhpbiBidXR0b24tdmFyaWFudCgkY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gIGJhY2tncm91bmQ6ICRjb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAzJSk7XG4gIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICY6Zm9jdXMge1xuICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCRjb2xvcik7XG4gIH1cbiAgJjpmb2N1cyxcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogZGFya2VuKCRjb2xvciwgMiUpO1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRjb2xvciwgNSUpO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gIH1cbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJGNvbG9yLCA3JSk7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAxMCUpO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gIH1cbiAgJi5sb2FkaW5nIHtcbiAgICAmOjphZnRlciB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkbGlnaHQtY29sb3I7XG4gICAgICBib3JkZXItbGVmdC1jb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gYnV0dG9uLW91dGxpbmUtdmFyaWFudCgkY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gIGJhY2tncm91bmQ6ICRsaWdodC1jb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiAkY29sb3I7XG4gIGNvbG9yOiAkY29sb3I7XG4gICY6Zm9jdXMge1xuICAgIEBpbmNsdWRlIGNvbnRyb2wtc2hhZG93KCRjb2xvcik7XG4gIH1cbiAgJjpmb2N1cyxcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogbGlnaHRlbigkY29sb3IsIDUwJSk7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAyJSk7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgfVxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUge1xuICAgIGJhY2tncm91bmQ6ICRjb2xvcjtcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkY29sb3IsIDUlKTtcbiAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICB9XG4gICYubG9hZGluZyB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGNvbG9yO1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICRjb2xvcjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENsZWFyZml4IG1peGluXG5AbWl4aW4gY2xlYXJmaXgoKSB7XG4gICY6OmFmdGVyIHtcbiAgICBjbGVhcjogYm90aDtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICB9XG59XG4iLCIvLyBCYWNrZ3JvdW5kIGNvbG9yIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiBiZy1jb2xvci12YXJpYW50KCRuYW1lOiBcIi5iZy1wcmltYXJ5XCIsICRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgI3skbmFtZX0ge1xuICAgIGJhY2tncm91bmQ6ICRjb2xvciAhaW1wb3J0YW50O1xuXG4gICAgQGlmIChsaWdodG5lc3MoJGNvbG9yKSA8IDYwKSB7XG4gICAgICBjb2xvcjogJGxpZ2h0LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUZXh0IGNvbG9yIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiB0ZXh0LWNvbG9yLXZhcmlhbnQoJG5hbWU6IFwiLnRleHQtcHJpbWFyeVwiLCAkY29sb3I6ICRwcmltYXJ5LWNvbG9yKSB7XG4gICN7JG5hbWV9IHtcbiAgICBjb2xvcjogJGNvbG9yICFpbXBvcnRhbnQ7XG4gIH1cblxuICBhI3skbmFtZX0ge1xuICAgICY6Zm9jdXMsXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogZGFya2VuKCRjb2xvciwgNSUpO1xuICAgIH1cbiAgICAmOnZpc2l0ZWQge1xuICAgICAgY29sb3I6IGxpZ2h0ZW4oJGNvbG9yLCA1JSk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBMYWJlbCBiYXNlIHN0eWxlXG5AbWl4aW4gbGFiZWwtYmFzZSgpIHtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGxpbmUtaGVpZ2h0OiAxLjI1O1xuICBwYWRkaW5nOiAuMXJlbSAuMnJlbTtcbn1cblxuQG1peGluIGxhYmVsLXZhcmlhbnQoJGNvbG9yOiAkbGlnaHQtY29sb3IsICRiZy1jb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgYmFja2dyb3VuZDogJGJnLWNvbG9yO1xuICBjb2xvcjogJGNvbG9yO1xufVxuIiwiLy8gTWFyZ2luIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiBtYXJnaW4tdmFyaWFudCgkaWQ6IDEsICRzaXplOiAkdW5pdC0xKSB7XG4gIC5tLSN7JGlkfSB7XG4gICAgbWFyZ2luOiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1iLSN7JGlkfSB7XG4gICAgbWFyZ2luLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5tbC0jeyRpZH0ge1xuICAgIG1hcmdpbi1sZWZ0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1yLSN7JGlkfSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm10LSN7JGlkfSB7XG4gICAgbWFyZ2luLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5teC0jeyRpZH0ge1xuICAgIG1hcmdpbi1sZWZ0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi1yaWdodDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5teS0jeyRpZH0ge1xuICAgIG1hcmdpbi1ib3R0b206ICRzaXplICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4vLyBQYWRkaW5nIHV0aWxpdHkgbWl4aW5cbkBtaXhpbiBwYWRkaW5nLXZhcmlhbnQoJGlkOiAxLCAkc2l6ZTogJHVuaXQtMSkge1xuICAucC0jeyRpZH0ge1xuICAgIHBhZGRpbmc6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAucGItI3skaWR9IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5wbC0jeyRpZH0ge1xuICAgIHBhZGRpbmctbGVmdDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5wci0jeyRpZH0ge1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzaXplICFpbXBvcnRhbnQ7XG4gIH1cblxuICAucHQtI3skaWR9IHtcbiAgICBwYWRkaW5nLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5weC0jeyRpZH0ge1xuICAgIHBhZGRpbmctbGVmdDogJHNpemUgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc2l6ZSAhaW1wb3J0YW50O1xuICB9XG4gIFxuICAucHktI3skaWR9IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHNpemUgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLXRvcDogJHNpemUgIWltcG9ydGFudDtcbiAgfVxufVxuIiwiLy8gQ29tcG9uZW50IGZvY3VzIHNoYWRvd1xuQG1peGluIGNvbnRyb2wtc2hhZG93KCRjb2xvcjogJHByaW1hcnktY29sb3IpIHtcbiAgYm94LXNoYWRvdzogMCAwIDAgLjFyZW0gcmdiYSgkY29sb3IsIC4yKTtcbn1cblxuLy8gU2hhZG93IG1peGluXG5AbWl4aW4gc2hhZG93LXZhcmlhbnQoJG9mZnNldCkge1xuICBib3gtc2hhZG93OiAwICRvZmZzZXQgKCRvZmZzZXQgKyAuMDVyZW0pICogMiByZ2JhKCRkYXJrLWNvbG9yLCAuMyk7XG59XG4iLCIvLyBUZXh0IEVsbGlwc2lzXG5AbWl4aW4gdGV4dC1lbGxpcHNpcygpIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4iLCIvLyBUb2FzdCB2YXJpYW50IG1peGluXG5AbWl4aW4gdG9hc3QtdmFyaWFudCgkY29sb3I6ICRkYXJrLWNvbG9yKSB7XG4gIGJhY2tncm91bmQ6IHJnYmEoJGNvbG9yLCAuOTUpO1xuICBib3JkZXItY29sb3I6ICRjb2xvcjtcbn1cbiIsIiR0aXRsZS1mb250LWZhbWlseTogJGJhc2UtZm9udC1mYW1pbHksICRmYWxsYmFjay1mb250LWZhbWlseSAhZGVmYXVsdDsiLCJAbWl4aW4gYnJlYWtwb2ludCgkcG9pbnQpIHtcbiAgQGlmICRwb2ludCA9PSAyeCB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6JHNpemUtMngpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkcG9pbnQgPT0geGwge1xuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2l6ZS14bCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuXG4gIH0gQGVsc2UgaWYgJHBvaW50ID09IGxnIHtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNpemUtbGcpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkcG9pbnQgPT0gbWQge1xuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2l6ZS1tZCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRwb2ludCA9PSBzbSB7XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzaXplLXNtKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJHBvaW50ID09IHhzIHtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNpemUteHMpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSAgQGVsc2Uge1xuICAgIEB3YXJuIFwiQnJlYWtwb2ludCBtaXhpbiBzdXBwb3J0czogeHMsIHNtLCBtZCwgbGcsIHhsLCAyeFwiO1xuICB9XG59XG5cbkBtaXhpbiB2ZXJ0aWNhbC1hbGlnbigkcG9zaXRpb246IHJlbGF0aXZlKSB7XG4gIHBvc2l0aW9uOiAkcG9zaXRpb247XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbkBtaXhpbiBidXR0b24tcHJpbWFyeSgpIHtcbiAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG4gIGJvcmRlci1jb2xvcjogJHByaW1hcnktY29sb3ItZGFyaztcbiAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgJjpmb2N1cyxcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogZGFya2VuKCRwcmltYXJ5LWNvbG9yLWRhcmssIDIlKTtcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkcHJpbWFyeS1jb2xvci1kYXJrLCA1JSk7XG4gICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgfVxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUge1xuICAgIGJhY2tncm91bmQ6IGRhcmtlbigkcHJpbWFyeS1jb2xvci1kYXJrLCA0JSk7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJHByaW1hcnktY29sb3ItZGFyaywgNyUpO1xuICAgIGNvbG9yOiAkbGlnaHQtY29sb3I7XG4gIH1cbn1cblxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJHZhbHVlKSB7XG4gIEByZXR1cm4gJHZhbHVlIC8gKCR2YWx1ZSAqIDAgKyAxKTtcbn1cblxuQG1peGluIGZsdWlkLXR5cGUoJG1pbi12dywgJG1heC12dywgJG1pbi1mb250LXNpemUsICRtYXgtZm9udC1zaXplKSB7XG4gICR1MTogdW5pdCgkbWluLXZ3KTtcbiAgJHUyOiB1bml0KCRtYXgtdncpO1xuICAkdTM6IHVuaXQoJG1pbi1mb250LXNpemUpO1xuICAkdTQ6IHVuaXQoJG1heC1mb250LXNpemUpO1xuXG4gIEBpZiAkdTEgPT0gJHUyIGFuZCAkdTEgPT0gJHUzIGFuZCAkdTEgPT0gJHU0IHtcbiAgICAmIHtcbiAgICAgIGZvbnQtc2l6ZTogJG1pbi1mb250LXNpemU7XG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWluLXZ3KSB7XG4gICAgICAgIGZvbnQtc2l6ZTogY2FsYygjeyRtaW4tZm9udC1zaXplfSArICN7c3RyaXAtdW5pdCgkbWF4LWZvbnQtc2l6ZSAtICRtaW4tZm9udC1zaXplKX0gKiAoKDEwMHZ3IC0gI3skbWluLXZ3fSkgLyAje3N0cmlwLXVuaXQoJG1heC12dyAtICRtaW4tdncpfSkpO1xuICAgICAgfVxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1heC12dykge1xuICAgICAgICBmb250LXNpemU6ICRtYXgtZm9udC1zaXplO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaHRtbCB7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuI2JvZHktd3JhcHBlciB7XG4gIC5jb250YWluZXIge1xuICAgIHBhZGRpbmc6ICR2ZXJ0LXBhZGRpbmc7XG4gIH1cblxuICAvLyBGaXhlZCBIZWFkZXIgc29sdXRpb25cbiAgLmhlYWRlci1maXhlZCAmIHtcbiAgICBwYWRkaW5nLXRvcDogJGhlYWRlci1oZWlnaHQtbGFyZ2U7XG4gIH1cbn1cblxuLmhlYWRlci1maXhlZCB7XG4gIC5oZXJvICsgI3N0YXJ0ID4gI2JvZHktd3JhcHBlciB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gIH1cbn1cblxuc2VjdGlvbi5zZWN0aW9uIHtcbiAgcGFkZGluZy1sZWZ0OiAkaG9yaXotcGFkZGluZztcbiAgcGFkZGluZy1yaWdodDogJGhvcml6LXBhZGRpbmc7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm92ZXJsYXktbGlnaHQsIC5vdmVybGF5LWRhcmssIC5vdmVybGF5LWxpZ2h0LWdyYWRpZW50LCAub3ZlcmxheS1kYXJrLWdyYWRpZW50IHtcbiAgei1pbmRleDogMDtcbn1cblxuLy8gSGVyb1xuLmhlcm8ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICBwYWRkaW5nLXRvcDogNnJlbTtcbiAgcGFkZGluZy1ib3R0b206IDdyZW07XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcblxuICBoMSB7XG4gICAgY29sb3I6ICRoZWFkZXItdGV4dC1kYXJrO1xuICAgIGZvbnQtc2l6ZTogNHJlbTtcbiAgfVxuXG4gIGgyIHtcbiAgICBjb2xvcjogcmdiYSgkaGVhZGVyLXRleHQtZGFyaywgMC44KTtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgfVxuXG4gICYuaGVyby1mdWxsc2NyZWVuIHtcbiAgICBtaW4taGVpZ2h0OiAxMDB2aDtcbiAgfVxuXG4gICYuaGVyby1sYXJnZSB7XG4gICAgbWluLWhlaWdodDogNTAwcHg7XG4gIH1cblxuICAmLmhlcm8tbWVkaXVtIHtcbiAgICBtaW4taGVpZ2h0OiA0MDBweDtcbiAgfVxuXG4gICYuaGVyby1zbWFsbCB7XG4gICAgbWluLWhlaWdodDogMTEwcHg7XG4gIH1cblxuICAmLmhlcm8tdGlueSB7XG4gICAgbWluLWhlaWdodDogOHJlbTtcbiAgfVxuICBcbiAgLmhlYWRlci1maXhlZCAmIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgMDtcbiAgfVxuXG4gIC8vJi5wYXJhbGxheCB7XG4gIC8vICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkO1xuICAvL31cblxuICBAaW5jbHVkZSBicmVha3BvaW50KG1kKSB7XG4gICAgaDEge1xuICAgICAgZm9udC1zaXplOiAzcmVtO1xuICAgIH1cbiAgICBoMiB7XG4gICAgICBmb250LXNpemU6IDEuNzVyZW07XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbSkge1xuICAgIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgICB9XG4gICAgaDIge1xuICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgIH1cbiAgfVxuXG5cbiAgJi50ZXh0LWxpZ2h0IHtcbiAgICBoMSB7XG4gICAgICBjb2xvcjogJGhlYWRlci10ZXh0LWxpZ2h0O1xuICAgIH1cbiAgICBoMiB7XG4gICAgICBjb2xvcjogcmdiYSgkaGVhZGVyLXRleHQtbGlnaHQsIDAuOCk7XG4gICAgfVxuICB9XG5cbiAgcCB7XG4gICAgZm9udC1zaXplOiAuOXJlbTtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICB9XG5cbiAgI3RvLXN0YXJ0IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMTBweDtcbiAgICBmb250LXNpemU6IDJyZW07XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG59XG5cbi8vIE92ZXJsYXlcbi5pbWFnZS1vdmVybGF5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIHotaW5kZXg6IC0xO1xuXG4gIC5vdmVybGF5LWxpZ2h0ICYge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoI2ZmZiwgMC40KTtcbiAgfVxuXG4gIC5vdmVybGF5LWxpZ2h0LWdyYWRpZW50ICYge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoI2ZmZiwwLjUpLCByZ2JhKCNmZmYsMC4yKSk7XG4gIH1cblxuICAub3ZlcmxheS1kYXJrICYge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoIzAwMCwgMC40KTtcbiAgfVxuXG4gIC5vdmVybGF5LWRhcmstZ3JhZGllbnQgJiB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgjMDAwLDAuNSksIHJnYmEoIzAwMCwwLjIpKTtcbiAgfVxufVxuXG5cblxuXG5cblxuXG5cblxuIiwiaHRtbCB7XG4gIEBpbmNsdWRlIGZsdWlkLXR5cGUoJHNpemUteHMsICRzaXplLXhsLCAkbWluLXJlc3BvbnNpdmUtZm9udC1zaXplLCAkaHRtbC1mb250LXNpemUpO1xufVxuXG4vLyBIZWFkZXIgT3ZlcnJpZGVzXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcbiAgbWFyZ2luLXRvcDogMnJlbTtcbiAgZm9udC1mYW1pbHk6ICR0aXRsZS1mb250LWZhbWlseTtcbiAgY29sb3I6IGRhcmtlbigkYm9keS1mb250LWNvbG9yLCAxMCUpO1xufVxuXG5oMSwgLmgxIHtcbiAgZm9udC1zaXplOiAzcmVtO1xufVxuXG5oMiwgLmgyIHtcbiAgZm9udC1zaXplOiAxLjhyZW07XG59XG5cbmg2LCAuaDYge1xuICBmb250LXdlaWdodDogNDAwO1xufVxuXG4udGl0bGUtY2VudGVyIHtcbiAgaDEsIGgyIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbn1cblxuLnRpdGxlLWgxaDIge1xuICBoMSAge1xuICAgIGZvbnQtd2VpZ2h0OiAxMDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBsaW5lLWhlaWdodDogMS4xO1xuXG4gICAgc3Ryb25nLCBib2xkIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgfVxuICB9XG4gIGgxICsgaDIge1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuXG59XG5cbi8vIFR5cG9ncmFwaHkgSGludHNcbi50aXRsZS1oMWgyLCAudGl0bGUtY2VudGVyIHtcbiAgaDEgKyBoMiB7XG4gICAgbWFyZ2luLWJvdHRvbTogNTBweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICB9XG59XG5cbmE6Zm9jdXMge1xuICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuaW1nIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4vLyBUYWJsZXNcbi50YWJsZSB0YWJsZSB7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICB3aWR0aDogMTAwJTtcbn1cblxuXG4vLyBDb2RlYmxvY2tzXG5wcmUgY29kZSwgcHJlLnhkZWJ1Zy12YXItZHVtcHtcbiAgYmFja2dyb3VuZDogI2ZhZmFmYTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDFyZW0gIWltcG9ydGFudDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgb3ZlcmZsb3cteDogYXV0bztcbn1cblxucHJlW2NsYXNzKj1cImxhbmd1YWdlLVwiXSB7XG4gIGNvZGUge1xuICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgIG92ZXJmbG93LXg6IGluaXRpYWw7XG4gIH1cbn1cblxucHJlIHtcbiAgY29kZTpub3QoLmhsanMpOm5vdChbY2xhc3MqPVwibGFuZ3VhZ2UtXCJdKSB7XG4gICAgYmFja2dyb3VuZDogI2Y4ZjhmODtcbiAgfVxufVxuXG4vLyBJY29uIFR3ZWFrc1xuaS5mYSB7XG5cblxuICAmLmZhLWhlYXJ0LCAmLmZhLWhlYXJ0LW8ge1xuICAgICYucHVsc2Uge1xuICAgICAgY29sb3I6ICM5MjBcbiAgICB9XG4gIH1cbn1cblxuLy8gRm9udCBXZWlnaHRzXG5iLFxuc3Ryb25nIHtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cblxuLmhlYXZ5IHtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cblxuLmxpZ2h0IHtcbiAgZm9udC13ZWlnaHQ6IDIwMDtcbn1cblxuLy8gQ29sb3JzXG4udGV4dC1saWdodCB7XG4gIGNvbG9yOiByZ2JhKCRsaWdodC1jb2xvciwgMC44KTtcblxuICBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcbiAgICBjb2xvcjogcmdiYSgkbGlnaHQtY29sb3IsIDAuOSk7XG4gIH1cbn1cblxuLy8gRXJyb3IgY29uZmlndXJhdGlvblxuI2Vycm9yIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6IDVyZW07XG5cbiAgLmljb24ge1xuICAgIGZvbnQtc2l6ZTogNTBweDtcbiAgfVxufVxuXG4vLyBNZXNzYWdlc1xuI21lc3NhZ2VzIHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcblxuICAuaWNvbiB7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICB9XG59XG5cbi8vIExpc3RzXG51bCxcbm9sIHtcbiAgbWFyZ2luLWxlZnQ6ICR1bml0LTg7XG5cbiAgdWwsXG4gIG9sIHtcbiAgICBtYXJnaW4tbGVmdDogJHVuaXQtODtcbiAgfVxufVxuXG51bCB7XG4gIGxpc3Qtc3R5bGU6IGRpc2Mgb3V0c2lkZTtcbn1cblxub2wge1xuICBsaXN0LXN0eWxlOiBkZWNpbWFsIG91dHNpZGU7XG59XG5cbi8vIE5vdGljZXNcbi5ub3RpY2VzIHtcbiAgbWFyZ2luOiAxLjVyZW0gMDtcbiAgcCB7XG4gICAgbWFyZ2luOiAxcmVtIDA7XG4gIH1cbn1cblxuXG4iLCJmb3JtIHtcbiAgLmJ1dHRvbi13cmFwcGVyIHtcbiAgICBtYXJnaW4tdG9wOiAwLjc1cmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIH1cblxuICBzcGFuLnJlcXVpcmVkIHtcbiAgICBjb2xvcjogJGVycm9yLWNvbG9yO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gIH1cblxuICAuZm9ybS1pbnB1dFt0eXBlPXJhbmdlXSB7XG4gICAgYXBwZWFyYW5jZTogc2xpZGVyLWhvcml6b250YWw7XG4gICAgJjpmb2N1cyB7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXNldCBzb21lIGRlZmF1bHRzIGZvciBRdWFyayBUaGVtZSAqKi9cbiAgLmZvcm0tZ3JvdXA6bm90KC5mb3JtLWZpZWxkLXRvZ2dsZWFibGUpIHtcbiAgICAuY2hlY2tib3hlcyB7XG4gICAgICBkaXNwbGF5OiBpbmhlcml0O1xuXG4gICAgICBsYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IGluaGVyaXQ7XG4gICAgICAgIHBhZGRpbmc6ICgoJGNvbnRyb2wtc2l6ZS1zbSAtICRsaW5lLWhlaWdodCkgLyAyKSAkY29udHJvbC1wYWRkaW5nLXggKCgkY29udHJvbC1zaXplLXNtIC0gJGxpbmUtaGVpZ2h0KSAvIDIpICgkY29udHJvbC1pY29uLXNpemUgKyAkY29udHJvbC1wYWRkaW5nLXgpO1xuICAgICAgICBtYXJnaW46IGluaGVyaXQ7XG5cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuXG4jZ3Jhdi1sb2dpbiB7XG5cbiAgPiBmb3JtIHtcbiAgICBtYXJnaW46IDJyZW0gYXV0byAwO1xuICAgIG1heC13aWR0aDogMzUwcHg7XG4gIH1cbiAgLmZvcm0tbGFiZWwge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLmZvcm0tZGF0YSB7XG4gICAgbWFyZ2luOiAxcmVtIDA7XG4gIH1cbiAgLmZvcm0taW5wdXQge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuICAuYnV0dG9uLXdyYXBwZXIge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuXG4gICAgLmZvcm0tZGF0YS5yZW1lbWJlcm1lIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgIH1cbiAgfVxuXG4gIC5sb2dpbi1mb3JtIHtcbiAgICBidXR0b25bdHlwZT1cInN1Ym1pdFwiXSB7XG4gICAgICBAaW5jbHVkZSBidXR0b24tcHJpbWFyeTtcbiAgICB9XG4gIH1cblxuICAudHdvZmEtZm9ybSB7XG4gICAgYnV0dG9uW3R5cGU9XCJzdWJtaXRcIl06Zmlyc3QtY2hpbGQge1xuICAgICAgQGluY2x1ZGUgYnV0dG9uLXByaW1hcnk7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgIH1cbiAgfVxufVxuIiwiLm1vYmlsZS1jb250YWluZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIC8vd2lkdGg6IDEwMCU7XG4gIC8vaGVpZ2h0OiAxMDAlO1xuICB0b3A6IDQwJTtcbiAgbGVmdDogMDtcbiAgbWFyZ2luOiAgMCBhdXRvO1xuICB6LWluZGV4OiAyO1xufVxuXG4ubW9iaWxlLWxvZ28ge1xuICBzdmcsIGltZyB7XG4gICAgaGVpZ2h0OiA0MnB4O1xuICAgIG1hcmdpbi10b3A6IC43cmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxLjRyZW07XG5cbiAgICBwYXRoIHtcbiAgICAgIGZpbGw6ICRsaWdodC1jb2xvcjtcbiAgICB9XG5cbiAgfVxufVxuXG4vLyBIYW1idXJnZXIgTWVudVxuLm1vYmlsZS1tZW51IHtcblxuICBkaXNwbGF5OiBub25lO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICB6LWluZGV4OiAzO1xuXG4gIC5oZWFkZXItZml4ZWQgJiB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICB9XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludChtZCkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgLmJ1dHRvbl9jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDEuM3JlbTtcbiAgICByaWdodDogJGhvcml6LXBhZGRpbmc7XG4gICAgaGVpZ2h0OiAkbW9iaWxlLWJ1dHRvbi1oZWlnaHQ7XG4gICAgd2lkdGg6ICRtb2JpbGUtYnV0dG9uLXdpZHRoO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB6LWluZGV4OiAxMDA7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAuMjVzIGVhc2UsIHRvcCAwLjVzIGVhc2U7XG5cbiAgICAkYmFyLW9mZnNldDogJG1vYmlsZS1idXR0b24taGVpZ2h0IC8gMztcblxuICAgICY6aG92ZXIge1xuICAgICAgb3BhY2l0eTogLjc7XG4gICAgfVxuXG4gICAgJi5hY3RpdmUge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuXG4gICAgICAudG9wIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKCRiYXItb2Zmc2V0KSB0cmFuc2xhdGVYKDApIHJvdGF0ZSg0NWRlZyk7XG4gICAgICAgIGJhY2tncm91bmQ6ICRtb2JpbGUtY29sb3ItYWN0aXZlO1xuICAgICAgfVxuICAgICAgLm1pZGRsZSB7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6ICRtb2JpbGUtY29sb3ItYWN0aXZlO1xuICAgICAgfVxuXG4gICAgICAuYm90dG9tIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0oJGJhci1vZmZzZXQpKSB0cmFuc2xhdGVYKDApIHJvdGF0ZSgtNDVkZWcpO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbW9iaWxlLWNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzcGFuIHtcbiAgICAgIGJhY2tncm91bmQ6ICRtb2JpbGUtY29sb3ItbWFpbjtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGhlaWdodDogNHB4O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdHJhbnNpdGlvbjogIGFsbCAuMzVzIGVhc2U7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICY6bnRoLW9mLXR5cGUoMikge1xuICAgICAgICB0b3A6ICRiYXItb2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICAmOm50aC1vZi10eXBlKDMpIHtcbiAgICAgICAgdG9wOiAkYmFyLW9mZnNldCAqIDI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBiYWNrZ3JvdW5kOiAjMDAwO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDAlO1xuICBvcGFjaXR5OiAwO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgLjM1cywgdmlzaWJpbGl0eSAuMzVzLCBoZWlnaHQgLjM1cztcblxuICAmLm9wZW4ge1xuICAgIG9wYWNpdHk6IC45NTtcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgIGhlaWdodDogMTAwJTtcblxuICB9XG4gIG5hdiB7XG5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG59XG5cbi5vdmVybGF5LW1lbnUge1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDkwcHgpO1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG5cbiAgJiA+IC50cmVlIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB9XG59XG5cblxuLnRyZWVtZW51IHtcblxuICAmLnRyZWVtZW51LXJvb3Qge1xuICAgIG1hcmdpbjogMXJlbTtcbiAgfVxuXG4gIGxpIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbjogMCAwIDFweDtcbiAgICBwYWRkaW5nOiA1cHggMDtcbiAgICBsaW5lLWhlaWdodDogMS4ycmVtO1xuXG4gICAgYmFja2dyb3VuZDogcmdiYSgkZ3JheS1jb2xvci1kYXJrLDAuMSk7XG5cbiAgICBhIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbWFyZ2luLWxlZnQ6IDEuMnJlbTtcbiAgICAgIGZvbnQtc2l6ZTogMXJlbTtcblxuICAgICAgJjpob3ZlciwgJjpmb2N1cywgJi5hY3RpdmUge1xuICAgICAgICBjb2xvcjogJHByaW1hcnktY29sb3ItbGlnaHQgIWltcG9ydGFudDtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVsIHtcbiAgICBtYXJnaW46IDAgMCAwIDFyZW07XG4gIH1cblxuICAudG9nZ2xlciB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgZm9udC1zaXplOiAxLjFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDFyZW07XG4gICAgcGFkZGluZy1sZWZ0OiA1cHg7XG4gICAgZmxvYXQ6IGxlZnQ7XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbi1yaWdodDogMnB0O1xuICAgIH1cbiAgfVxuXG4gIGxpLnRyZWUtZW1wdHkgID4gLnRvZ2dsZXIge1xuICAgIG9wYWNpdHk6IDAuMzsgY3Vyc29yOiBkZWZhdWx0O1xuXG4gICAgJjpiZWZvcmUge1xuICAgICAgY29udGVudDogXCJcXDIwMjJcIjtcbiAgICB9XG4gIH1cblxuICBsaS50cmVlLWNsb3NlZCA+IC50b2dnbGVyOmJlZm9yZSB7XG4gICAgY29udGVudDogXCIrXCI7XG4gIH1cblxuICBsaS50cmVlLW9wZW5lZCA+IC50b2dnbGVyOmJlZm9yZSB7XG4gICAgY29udGVudDogXCJcXDIyMTJcIjtcbiAgfVxufVxuXG4ubW9iaWxlLW5hdi1vcGVuIHtcbiAgb3ZlcmZsb3cteTogaGlkZGVuO1xufVxuIiwiLmRlZmF1bHQtYW5pbWF0aW9uIHtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZTtcbn1cblxuLy8gUHVsc2UgQW5pbWF0aW9uXG4ucHVsc2Uge1xuICBhbmltYXRpb24tbmFtZTogcHVsc2VfYW5pbWF0aW9uO1xuICBhbmltYXRpb24tZHVyYXRpb246IDIwMDBtcztcbiAgdHJhbnNmb3JtLW9yaWdpbjo3MCUgNzAlO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xufVxuXG5Aa2V5ZnJhbWVzIHB1bHNlX2FuaW1hdGlvbiB7XG4gIDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxuICAzMCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9XG4gIDQwJSB7IHRyYW5zZm9ybTogc2NhbGUoMS4wOCk7IH1cbiAgNTAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxuICA2MCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9XG4gIDcwJSB7IHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7IH1cbiAgODAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxuICAxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxufVxuIiwiI2hlYWRlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6ICRoZWFkZXItaGVpZ2h0LWxhcmdlO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgkZ3JheS1jb2xvciwgMC4yKTtcbiAgQGV4dGVuZCAuZGVmYXVsdC1hbmltYXRpb247XG5cbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG5cbiAgYmFja2dyb3VuZDogJGxpZ2h0LWNvbG9yO1xuICBjb2xvcjogJGRhcmstY29sb3I7XG5cbiAgYSB7XG4gICAgY29sb3I6ICRkYXJrLWNvbG9yO1xuICB9XG5cbiAgLmxvZ28gc3ZnIHBhdGgge1xuICAgIGZpbGw6ICRoZWFkZXItY29sb3ItZGFyaztcbiAgfVxuXG4gIC5oZWFkZXItZGFyayAmOm5vdCguc2Nyb2xsZWQpIHtcbiAgICBiYWNrZ3JvdW5kOiAkaGVhZGVyLWNvbG9yLWRhcms7XG4gICAgY29sb3I6ICRsaWdodC1jb2xvcjtcbiAgICBhIHtcbiAgICAgIGNvbG9yOiByZ2JhKCRsaWdodC1jb2xvciwgMC43KSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICBhLmFjdGl2ZSB7XG4gICAgICBjb2xvcjogJGxpZ2h0LWNvbG9yICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5kcm9wbWVudSB1bCB1bCBhIHtcbiAgICAgICAgY29sb3I6ICRkYXJrLWNvbG9yICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5sb2dvIHN2ZyBwYXRoIHtcbiAgICAgIGZpbGw6ICRsaWdodC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAuaGVhZGVyLWRhcmsuaGVhZGVyLXRyYW5zcGFyZW50ICY6bm90KC5zY3JvbGxlZCkge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoIzAwMCwgMC4wNSk7XG4gIH1cblxuICAuaGVhZGVyLXRyYW5zcGFyZW50ICY6bm90KC5zY3JvbGxlZCkge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoI2ZmZiwgMC4wNSk7XG4gICAgLy9ib3JkZXItYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubmF2YmFyLXNlY3Rpb24ge1xuICAgIGhlaWdodDogJGhlYWRlci1oZWlnaHQtbGFyZ2U7XG4gICAgQGV4dGVuZCAuZGVmYXVsdC1hbmltYXRpb247XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KG1kKSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDJyZW07XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci1zZWN0aW9uLmRlc2t0b3AtbWVudSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChtZCkge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAubG9nbyB7XG4gICAgc3ZnLCBpbWcge1xuICAgICAgaGVpZ2h0OiA0MnB4O1xuICAgICAgZGlzcGxheTogaW5oZXJpdDtcbiAgICAgIEBleHRlbmQgLmRlZmF1bHQtYW5pbWF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZpeGVkIEhlYWRlciBzb2x1dGlvblxuICAuaGVhZGVyLWZpeGVkICYge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgei1pbmRleDogMjtcbiAgfVxufVxuXG4vLyBBbmltYXRlIEZpeGVkIEhlYWRlclxuYm9keS5oZWFkZXItZml4ZWQuaGVhZGVyLWFuaW1hdGVkIHtcbiAgI2hlYWRlci5zY3JvbGxlZCB7XG4gICAgaGVpZ2h0OiAkaGVhZGVyLWhlaWdodC1zbWFsbDtcblxuICAgIC5uYXZiYXItc2VjdGlvbiB7XG4gICAgICBoZWlnaHQ6ICRoZWFkZXItaGVpZ2h0LXNtYWxsO1xuICAgIH1cblxuICAgIC5sb2dvIHtcbiAgICAgIHN2ZywgaW1nIHtcbiAgICAgICAgaGVpZ2h0OiAyOHB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIH4gLm1vYmlsZS1tZW51IC5idXR0b25fY29udGFpbmVyIHtcbiAgICAgIHRvcDogMC41cmVtO1xuICAgIH1cbiAgfVxufVxuXG4ubG9naW4tc3RhdHVzLXdyYXBwZXIge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuIiwiLy8gU3RpY2t5IEZvb3RlciBzb2x1dGlvblxuYm9keS5zdGlja3ktZm9vdGVyIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtaW4taGVpZ2h0OiAxMDB2aDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAjcGFnZS13cmFwcGVyIHtcbiAgICBmbGV4OiAxIDAgYXV0bztcbiAgfVxufVxuXG4jZm9vdGVyIHtcbiAgY29sb3I6ICNhY2IzYzI7XG4gIHBhZGRpbmc6IDFyZW0gJGhvcml6LXBhZGRpbmcgMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufSIsIi5kcm9wbWVudSB7XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludChtZCkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICB1bCB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBtYXJnaW46IDA7XG4gICAgZGlzcGxheTogZmxleDtcblxuICAgIGxpIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG1hcmdpbjogMDtcblxuICAgICAgYSB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgcGFkZGluZzogJGRyb3BtZW51LXZlcnQtcGFkZGluZyAoJGRyb3BtZW51LWhvcml6LXBhZGRpbmcgKyAkZHJvcG1lbnUtY2hpbGQtcGFkZGluZykgJGRyb3BtZW51LXZlcnQtcGFkZGluZyAkZHJvcG1lbnUtaG9yaXotcGFkZGluZztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgICAgJjpob3ZlciwgJjpmb2N1cywgJi5hY3RpdmUge1xuICAgICAgICAgIGNvbG9yOiAkZHJvcG1lbnUtaG92ZXItdGV4dCAhaW1wb3J0YW50O1xuICAgICAgICB9XG5cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIGNvbnRlbnQ6ICdcXGYxMDcnO1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiAnRm9udEF3ZXNvbWUnO1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC0gKDIgKiRkcm9wbWVudS1jaGlsZC1wYWRkaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6b25seS1jaGlsZCB7XG4gICAgICAgICAgLy9iYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRkcm9wbWVudS1ob3Jpei1wYWRkaW5nO1xuXG4gICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICAmID4gdWwge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bCBsaSBhOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnXFxmMTA1JztcbiAgICB9XG5cbiAgICB1bCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDEwMCU7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgYmFja2dyb3VuZDogJGRyb3BtZW51LWJnO1xuICAgICAgYm94LXNoYWRvdzogJGRyb3BtZW51LXNoYWRvdztcbiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcblxuICAgICAgdWwge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDEwMCU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gICYgPiB1bCA+IGxpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIH1cblxuICAvLyBBbmltYXRpb24gb3B0aW9uc1xuICAmLmFuaW1hdGVkIHtcbiAgICB1bCBsaSB7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC43cywgY29sb3IgMC41cztcbiAgICB9XG5cbiAgICB1bCBsaTpob3ZlciA+IHVsIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gICAgfVxuXG4gICAgdWwgdWwge1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4zcywgb3BhY2l0eSAuNXM7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTtcbiAgICB9XG4gIH1cbn0iLCIvKiogRXh0cmEgY29sdW1ucyBzcGFjaW5nICoqL1xuLmV4dHJhLXNwYWNpbmc6bm90KC5jb2wtMTIpLCA6bm90KC5jb2wxMikgPiAuZS1jb250ZW50IHtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcblxuICBAaW5jbHVkZSBicmVha3BvaW50KG1kKSB7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxufVxuXG4vKiogQnJlYWRjcnVtYnMgc3R5bGluZyAqKi9cbiNicmVhZGNydW1icyB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogLTFyZW07XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG5cblxuICBpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgc3BhbiwgYSB7XG4gICAgcGFkZGluZzogMCAwLjVyZW07XG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgfVxuICB9XG5cbiAgc3BhbiwgYSB7XG4gICAgJjpub3QoOmZpcnN0LWNoaWxkKTo6YmVmb3JlIHtcbiAgICAgIGNvbG9yOiAjZTdlOWVkO1xuICAgICAgY29udGVudDogXCIvXCI7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xuICAgIH1cbiAgfVxufVxuXG4vKiogQmxvZyBMaXN0aW5nICoqL1xuLmJsb2ctbGlzdGluZyB7XG5cbiAgLmJyaWNrbGF5ZXItY29sdW1uIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDBweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyNXB4O1xuXG4gIH1cbiAgLmNhcmQge1xuICAgIG1hcmdpbi1ib3R0b206IDI1cHg7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJveC1zaGFkb3c6IDAgMTBweCA0NXB4IC05cHggcmdiYSgwLDAsMCwwLjEpO1xuICB9XG5cbiAgLmNhcmQtZm9vdGVyIHtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgfVxuXG4gIC5ibG9nLWRhdGUge1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgfVxuXG4gIC5sYWJlbCB7XG5cbiAgfVxufVxuXG4vKiogQmxvZyBJdGVtICoqL1xuLmNvbnRlbnQtdGl0bGUge1xuICBtYXJnaW4tYm90dG9tOiAycmVtO1xuXG4gIGgyIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIH1cbn1cblxuLmxhYmVsIHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4vKiogUGFnaW5hdGlvbiAqKi9cbnVsLnBhZ2luYXRpb24ge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnByZXYtbmV4dCB7XG4gIG1hcmdpbi10b3A6IDRyZW07XG59XG5cbi8qKiBTaWRlYmFyIHNwZWNpZmljIHR3ZWFrcyAqKi9cbiNzaWRlYmFyIHtcblxuICB1bC5yZWxhdGVkLXBhZ2VzIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgei1pbmRleDogMTtcblxuICAgIGxpIHtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIHVsLmFyY2hpdmVzIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuXG4gICAgLmxhYmVsIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcbiAgICB9XG4gIH1cbn1cbiIsIi5tb2R1bGFyLWhlcm8ge1xuICAjdG8tc3RhcnQge1xuICAgIGJvdHRvbTogMy41cmVtO1xuICB9XG59XG5cbi5tb2R1bGFyLWZlYXR1cmVzIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICYub2Zmc2V0LWJveCB7XG4gICAgLmZyYW1lLWJveCB7XG4gICAgICBtYXJnaW46IC0zcmVtICgtMXJlbSAtICRsYXlvdXQtc3BhY2luZykgM3JlbTtcbiAgICAgIHBhZGRpbmc6IDFyZW0gMXJlbTtcbiAgICAgIGJhY2tncm91bmQ6ICRsaWdodC1jb2xvcjtcbiAgICAgIGJveC1zaGFkb3c6IDAgMCA3NXB4IDAgcmdiYSgkZGFyay1jb2xvciwgMC4xKTtcbiAgICB9XG4gIH1cblxuICAmLnNtYWxsIHtcblxuICAgIC5jb2x1bW5zIHtcbiAgICAgIG1hcmdpbi10b3A6IC0xcmVtO1xuICAgIH1cblxuICAgIC5jb2x1bW46aG92ZXIge1xuICAgICAgLmZlYXR1cmUtaWNvbiBpIHtcbiAgICAgICAgY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5mZWF0dXJlLWljb24ge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7XG5cblxuICAgICAgaSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogaW5oZXJpdDtcbiAgICAgICAgZm9udC1zaXplOiA3MHB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0byAxcmVtO1xuICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgIHRvcDogYXV0bztcbiAgICAgICAgY29sb3I6ICRncmF5LWNvbG9yO1xuICAgICAgICBAZXh0ZW5kIC5kZWZhdWx0LWFuaW1hdGlvbjtcblxuICAgICAgfVxuICAgICAgaDYge1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZnJhbWUtYm94IHtcbiAgICBwYWRkaW5nOiAzcmVtIDA7XG5cbiAgICA+IHAge1xuICAgICAgbWF4LXdpZHRoOiA2MDBweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIH1cbiAgfVxuXG4gIC5jb2x1bW4ge1xuICAgIHBhZGRpbmc6IDFyZW07XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIC5mZWF0dXJlLWljb24ge1xuICAgICAgICBjb2xvcjogJGdyYXktY29sb3I7XG4gICAgICAgIGg2IHtcbiAgICAgICAgICBjb2xvcjogJHByaW1hcnktY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC5mZWF0dXJlLWNvbnRlbnQge1xuICAgICAgICBjb2xvcjogJGdyYXktY29sb3ItZGFyaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZmVhdHVyZS1pY29uIHtcbiAgICBmb250LXNpemU6IDEzMHB4O1xuICAgIGhlaWdodDogMTAwcHg7XG4gICAgY29sb3I6ICRncmF5LWNvbG9yLWxpZ2h0O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luOiAxcmVtIDA7XG4gICAgQGV4dGVuZCAuZGVmYXVsdC1hbmltYXRpb247XG5cbiAgICBpIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgfVxuXG4gICAgaDYge1xuICAgICAgYmFja2dyb3VuZDogJGxpZ2h0LWNvbG9yO1xuICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICB6LWluZGV4OiAxO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGNvbG9yOiAkZ3JheS1jb2xvci1kYXJrO1xuICAgIH1cbiAgfVxuXG4gIC5mZWF0dXJlLWNvbnRlbnQge1xuICAgIGNvbG9yOiAkZ3JheS1jb2xvcjtcbiAgfVxufVxuXG4ubW9kdWxhci10ZXh0IHtcbiAgcGFkZGluZy10b3A6IDRyZW07XG4gIHBhZGRpbmctYm90dG9tOiA0cmVtO1xuXG4gIC5jb2x1bW5zLmxlZnQge1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgfVxufSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQWVBQSxBQUFBLElBQUksQ0FBQyxFQUNILE1BQU0sRUFBRSxJQUFJLEdBQ2I7O0FBRUQsQUFDRSxhQURXLENBQ1gsVUFBVSxDQUFDLEVBQ1QsT0FBTyxFZE1JLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHY0x2Qjs7QUFHRCxBQUFBLGFBQWEsQ0FOZixhQUFhLENBTUssRUFDZCxXQUFXLEVkT08sSUFBSSxHY052Qjs7QUFHSCxBQUNFLGFBRFcsQ0FDWCxLQUFLLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQyxFQUM3QixXQUFXLEVBQUUsQ0FBQyxHQUNmOztBQUdILEFBQUEsT0FBTyxBQUFBLFFBQVEsQ0FBQyxFQUNkLFlBQVksRWRYRSxJQUFJLEVjWWxCLGFBQWEsRWRaQyxJQUFJLEVjYWxCLFFBQVEsRUFBRSxRQUFRLEdBQ25COztBQUVELEFBQUEsY0FBYyxFQUFFLGFBQWEsRUFBRSx1QkFBdUIsRUFBRSxzQkFBc0IsQ0FBQyxFQUM3RSxPQUFPLEVBQUUsQ0FBQyxHQUNYOztBQUdELEFBQUEsS0FBSyxDQUFDLEVBQ0osT0FBTyxFQUFFLElBQUksRUFDYixXQUFXLEVBQUUsTUFBTSxFQUNuQixlQUFlLEVBQUUsTUFBTSxFQUV2QixXQUFXLEVBQUUsSUFBSSxFQUNqQixjQUFjLEVBQUUsSUFBSSxFQUNwQixlQUFlLEVBQUUsS0FBSyxFQUN0QixtQkFBbUIsRUFBRSxNQUFNLEdBZ0Y1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 */
diff --git a/themes/quark/css-compiled/theme.min.css b/themes/quark/css-compiled/theme.min.css
new file mode 100644
index 0000000..036caa9
--- /dev/null
+++ b/themes/quark/css-compiled/theme.min.css
@@ -0,0 +1 @@
+html{height:100%}#body-wrapper .container{padding:2rem 0 2rem}.header-fixed #body-wrapper{padding-top:4rem}.header-fixed .hero+#start>#body-wrapper{padding-top:0}section.section{position:relative;padding-right:1rem;padding-left:1rem}.overlay-dark,.overlay-dark-gradient,.overlay-light,.overlay-light-gradient{z-index:0}.hero{display:-ms-flexbox;display:flex;padding-top:6rem;padding-bottom:7rem;background-position:center;background-size:cover;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.hero h1{font-size:4rem;color:#242931}.hero h2{font-size:2.5rem;color:rgba(36,41,49,.8)}.hero.hero-fullscreen{min-height:100vh}.hero.hero-large{min-height:500px}.hero.hero-medium{min-height:400px}.hero.hero-small{min-height:110px}.hero.hero-tiny{min-height:8rem}.header-fixed .hero{background-position:50% 0}@media (max-width:840px){.hero h1{font-size:3rem}.hero h2{font-size:1.75rem}}@media (max-width:600px){.hero h1{font-size:2rem}.hero h2{font-size:1.25rem}}.hero.text-light h1{color:#fff}.hero.text-light h2{color:rgba(255,255,255,.8)}.hero p{font-size:.9rem;font-weight:300}.hero #to-start{font-size:2rem;position:absolute;bottom:10px;display:inline-block;cursor:pointer}.image-overlay{position:absolute;z-index:-1;top:0;right:0;bottom:0;left:0}.overlay-light .image-overlay{background:rgba(255,255,255,.4)}.overlay-light-gradient .image-overlay{background:linear-gradient(to bottom,rgba(255,255,255,.5),rgba(255,255,255,.2))}.overlay-dark .image-overlay{background:rgba(0,0,0,.4)}.overlay-dark-gradient .image-overlay{background:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,.2))}html{font-size:16px}@media screen and (min-width:480px){html{font-size:calc(16px + 4 * ((100vw - 480px)/ 800))}}@media screen and (min-width:1280px){html{font-size:20px}}h1,h2,h3,h4,h5,h6{font-family:-apple-system,system-ui,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',sans-serif;margin-top:2rem;color:#3a414e}.h1,h1{font-size:3rem}.h2,h2{font-size:1.8rem}.h6,h6{font-weight:400}.title-center h1,.title-center h2{text-align:center}.title-h1h2 h1{font-weight:100;line-height:1.1;margin-bottom:0}.title-h1h2 h1 bold,.title-h1h2 h1 strong{font-weight:400}.title-h1h2 h1+h2{line-height:1.1;margin-top:0}.title-center h1+h2,.title-h1h2 h1+h2{font-weight:700;margin-bottom:50px}a:focus{outline:0!important;box-shadow:none!important}img{max-width:100%}.table table{width:100%;border-spacing:0;border-collapse:collapse}pre code,pre.xdebug-var-dump{line-height:1.5;display:block;overflow-x:auto;padding:1rem!important;color:inherit;border-radius:2px;background:#fafafa}pre[class*=language-] code{overflow-x:initial;padding:0!important;border-radius:inherit}pre code:not(.hljs):not([class*=language-]){background:#f8f8f8}i.fa.fa-heart-o.pulse,i.fa.fa-heart.pulse{color:#920}b,strong{font-weight:700}.heavy{font-weight:700}.light{font-weight:200}.text-light{color:rgba(255,255,255,.8)}.text-light h1,.text-light h2,.text-light h3,.text-light h4,.text-light h5,.text-light h6{color:rgba(255,255,255,.9)}#error{position:relative;margin-top:5rem;text-align:center}#error .icon{font-size:50px}#messages{margin-bottom:1rem}#messages .icon{font-size:1rem}ol,ul{margin-left:1.6rem}ol ol,ol ul,ul ol,ul ul{margin-left:1.6rem}ul{list-style:disc outside}ol{list-style:decimal outside}.notices{margin:1.5rem 0}.notices p{margin:1rem 0}form .button-wrapper{margin-top:.75rem;margin-bottom:1rem}form span.required{font-size:1.2rem;font-weight:700;color:#e85600}form .form-input[type=range]{-webkit-appearance:slider-horizontal;-moz-appearance:slider-horizontal;appearance:slider-horizontal}form .form-input[type=range]:focus{border:none;box-shadow:none}form .form-group:not(.form-field-toggleable) .checkboxes{display:inherit}form .form-group:not(.form-field-toggleable) .checkboxes label{display:inherit;margin:inherit;padding:.1rem .4rem .1rem 1.2rem}form .form-group:not(.form-field-toggleable) .checkboxes label:before{display:none}#grav-login>form{max-width:350px;margin:2rem auto 0}#grav-login .form-label{display:none}#grav-login .form-data{margin:1rem 0}#grav-login .form-input{text-align:center}#grav-login .button-wrapper{text-align:right}#grav-login .button-wrapper .form-data.rememberme{float:left;margin:0}#grav-login .login-form button[type=submit]{color:#fff;border-color:#227ded;background:#3085ee}#grav-login .login-form button[type=submit]:focus,#grav-login .login-form button[type=submit]:hover{color:#fff;border-color:#1370e3;background:#1877ec}#grav-login .login-form button[type=submit].active,#grav-login .login-form button[type=submit]:active{color:#fff;border-color:#126bd9;background:#1372e7}#grav-login .twofa-form button[type=submit]:first-child{float:right;margin-left:4px;color:#fff;border-color:#227ded;background:#3085ee}#grav-login .twofa-form button[type=submit]:first-child:focus,#grav-login .twofa-form button[type=submit]:first-child:hover{color:#fff;border-color:#1370e3;background:#1877ec}#grav-login .twofa-form button[type=submit]:first-child.active,#grav-login .twofa-form button[type=submit]:first-child:active{color:#fff;border-color:#126bd9;background:#1372e7}.mobile-container{position:absolute;z-index:2;top:40%;left:0;margin:0 auto}.mobile-logo img,.mobile-logo svg{height:42px;margin-top:.7rem;margin-left:1.4rem}.mobile-logo img path,.mobile-logo svg path{fill:#fff}.mobile-menu{z-index:3;top:0;right:0;display:none}.header-fixed .mobile-menu{position:fixed}@media (max-width:840px){.mobile-menu{display:block}}.mobile-menu .button_container{position:absolute;z-index:100;top:1.3rem;right:1rem;width:28px;height:24px;cursor:pointer;transition:opacity .25s ease,top .5s ease}.mobile-menu .button_container:hover{opacity:.7}.mobile-menu .button_container.active{position:fixed}.mobile-menu .button_container.active .top{transform:translateY(8px) translateX(0) rotate(45deg);background:#fff}.mobile-menu .button_container.active .middle{opacity:0;background:#fff}.mobile-menu .button_container.active .bottom{transform:translateY(-8px) translateX(0) rotate(-45deg);background:#fff}.mobile-menu .button_container span{position:absolute;top:0;left:0;width:100%;height:4px;cursor:pointer;transition:all .35s ease;border:none;background:#3085ee}.mobile-menu .button_container span:nth-of-type(2){top:8px}.mobile-menu .button_container span:nth-of-type(3){top:16px}.overlay{position:fixed;top:0;left:0;visibility:hidden;width:100%;height:0;transition:opacity .35s,visibility .35s,height .35s;opacity:0;background:#000}.overlay.open{visibility:visible;height:100%;opacity:.95}.overlay nav{position:relative;margin:0 auto;text-align:center}.overlay-menu{overflow-y:scroll;height:calc(100% - 90px)}.overlay-menu>.tree{text-align:left}.treemenu.treemenu-root{margin:1rem}.treemenu li{line-height:1.2rem;margin:0 0 1px;padding:5px 0;list-style:none;background:rgba(102,113,137,.1)}.treemenu li a{font-size:1rem;display:block;margin-left:1.2rem}.treemenu li a.active,.treemenu li a:focus,.treemenu li a:hover{text-decoration:none;color:#3e8def!important}.treemenu ul{margin:0 0 0 1rem}.treemenu .toggler{font-size:1.1rem;line-height:1rem;float:left;padding-left:5px;cursor:pointer;vertical-align:top}.treemenu .toggler:before{display:inline-block;margin-right:2pt}.treemenu li.tree-empty>.toggler{cursor:default;opacity:.3}.treemenu li.tree-empty>.toggler:before{content:'\2022'}.treemenu li.tree-closed>.toggler:before{content:'+'}.treemenu li.tree-opened>.toggler:before{content:'\2212'}.mobile-nav-open{overflow-y:hidden}#header,#header .logo img,#header .logo svg,#header .navbar-section,.default-animation,.modular-features .feature-icon,.modular-features.small .feature-icon i{transition:all .5s ease}.pulse{transform-origin:70% 70%;animation-name:pulse_animation;animation-duration:2s;animation-timing-function:linear;animation-iteration-count:infinite}@keyframes pulse_animation{0%{transform:scale(1)}30%{transform:scale(1)}40%{transform:scale(1.08)}50%{transform:scale(1)}60%{transform:scale(1)}70%{transform:scale(1.05)}80%{transform:scale(1)}100%{transform:scale(1)}}#header{font-size:.7rem;font-weight:700;width:100%;height:4rem;color:#454d5d;border-bottom:1px solid rgba(172,179,194,.2);background:#fff}#header a{color:#454d5d}#header .logo svg path{fill:#222}.header-dark #header:not(.scrolled){color:#fff;background:#222}.header-dark #header:not(.scrolled) a{color:rgba(255,255,255,.7)!important}.header-dark #header:not(.scrolled) a.active{color:#fff!important}.header-dark #header:not(.scrolled) .dropmenu ul ul a{color:#454d5d!important}.header-dark #header:not(.scrolled) .logo svg path{fill:#fff}.header-dark.header-transparent #header:not(.scrolled){background:rgba(0,0,0,.05)}.header-transparent #header:not(.scrolled){background:rgba(255,255,255,.05)}#header .navbar-section{height:4rem}@media (max-width:840px){#header .navbar-section{margin-right:2rem}}@media (max-width:840px){#header .navbar-section.desktop-menu{display:none}}#header .logo img,#header .logo svg{display:inherit;height:42px}.header-fixed #header{position:fixed;z-index:2;top:0}body.header-fixed.header-animated #header.scrolled{height:2.3rem}body.header-fixed.header-animated #header.scrolled .navbar-section{height:2.3rem}body.header-fixed.header-animated #header.scrolled .logo img,body.header-fixed.header-animated #header.scrolled .logo svg{height:28px}body.header-fixed.header-animated #header.scrolled~.mobile-menu .button_container{top:.5rem}.login-status-wrapper{white-space:nowrap}body.sticky-footer{display:-ms-flexbox;display:flex;flex-direction:column;height:100%;min-height:100vh;-ms-flex-direction:column}body.sticky-footer #page-wrapper{-ms-flex:1 0 auto;flex:1 0 auto}#footer{padding:1rem 1rem 0;text-align:center;color:#acb3c2}@media (max-width:840px){.dropmenu{display:none}}.dropmenu ul{display:-ms-flexbox;display:flex;margin:0;white-space:nowrap}.dropmenu ul li{position:relative;margin:0}.dropmenu ul li a{display:block;padding:7px 30px 7px 20px;text-decoration:none}.dropmenu ul li a.active,.dropmenu ul li a:focus,.dropmenu ul li a:hover{color:#3085ee!important}.dropmenu ul li a:before{font-family:FontAwesome;display:inline-block;float:right;margin-right:-20px;content:'\f107';vertical-align:middle}.dropmenu ul li a:only-child{padding-right:20px}.dropmenu ul li a:only-child:before{content:''}.dropmenu ul li:hover>ul{display:block;visibility:visible}.dropmenu ul ul li a:before{content:'\f105'}.dropmenu ul ul{position:absolute;top:100%;visibility:hidden;list-style:none;background:#fff;box-shadow:0 3px 5px rgba(0,0,0,.1)}.dropmenu ul ul ul{position:absolute;top:0;left:100%}.dropmenu>ul>li{display:inline-block}.dropmenu.animated ul li{transition:background .7s,color .5s}.dropmenu.animated ul li:hover>ul{transform:translateY(0);opacity:1}.dropmenu.animated ul ul{transition:transform .3s,opacity .5s;transform:translateY(-10px);opacity:0}.extra-spacing:not(.col-12),:not(.col12)>.e-content{padding-right:1rem}@media (max-width:840px){.extra-spacing:not(.col-12),:not(.col12)>.e-content{padding-right:0}}#breadcrumbs{display:-ms-flexbox;display:flex;margin-top:-1rem;margin-bottom:1rem;padding-left:0;-ms-flex-align:center;align-items:center}#breadcrumbs i{display:none}#breadcrumbs a,#breadcrumbs span{padding:0 .5rem}#breadcrumbs a:first-child,#breadcrumbs span:first-child{padding-left:0}#breadcrumbs a:not(:first-child)::before,#breadcrumbs span:not(:first-child)::before{padding-right:1rem;content:'/';color:#e7e9ed}.blog-listing .bricklayer-column{padding-right:25px;padding-left:0}.blog-listing .card{margin-bottom:25px;border:0;box-shadow:0 10px 45px -9px rgba(0,0,0,.1)}.blog-listing .card-footer{text-align:right}.blog-listing .blog-date{font-size:13px}.content-title{margin-bottom:2rem}.content-title h2{margin-bottom:.5rem}.label{font-size:12px;text-transform:uppercase}ul.pagination{-ms-flex-pack:center;justify-content:center}.prev-next{margin-top:4rem}#sidebar ul.related-pages{z-index:1;padding:0;box-shadow:none}#sidebar ul.related-pages li{border-bottom:1px solid #e7e9ed}#sidebar ul.related-pages li:last-child{border-bottom:0}#sidebar ul.archives{margin-left:0;list-style:none}#sidebar ul.archives .label{vertical-align:text-top}.modular-hero #to-start{bottom:3.5rem}.modular-features{text-align:center}.modular-features.offset-box .frame-box{margin:-3rem -1.4rem 3rem;padding:1rem 1rem;background:#fff;box-shadow:0 0 75px 0 rgba(69,77,93,.1)}.modular-features.small .columns{margin-top:-1rem}.modular-features.small .column:hover .feature-icon i{color:#3085ee}.modular-features.small .feature-icon{display:block;-ms-flex-pack:left;justify-content:left}.modular-features.small .feature-icon i{font-size:70px;position:relative;top:auto;left:auto;display:inherit;margin:0 auto 1rem;transform:none;color:#acb3c2}.modular-features.small .feature-icon h6{text-transform:none}.modular-features .frame-box{padding:3rem 0}.modular-features .frame-box>p{max-width:600px;margin-right:auto;margin-left:auto}.modular-features .column{padding:1rem}.modular-features .column:hover .feature-icon{color:#acb3c2}.modular-features .column:hover .feature-icon h6{color:#3085ee}.modular-features .column:hover .feature-content{color:#667189}.modular-features .feature-icon{font-size:130px;position:relative;display:-ms-flexbox;display:flex;height:100px;margin:1rem 0;color:#e7e9ed;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.modular-features .feature-icon i{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%)}.modular-features .feature-icon h6{font-weight:600;line-height:1;z-index:1;display:block;margin:0;text-transform:uppercase;color:#667189;background:#fff}.modular-features .feature-content{color:#acb3c2}.modular-text{padding-top:4rem;padding-bottom:4rem}.modular-text .columns.left{flex-direction:row-reverse;-ms-flex-direction:row-reverse}
\ No newline at end of file
diff --git a/themes/quark/css/bricklayer.css b/themes/quark/css/bricklayer.css
new file mode 100644
index 0000000..4505480
--- /dev/null
+++ b/themes/quark/css/bricklayer.css
@@ -0,0 +1,49 @@
+.bricklayer {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+}
+
+.bricklayer-column-sizer {
+ width: 100%;
+ display: none;
+}
+
+@media screen and (min-width: 640px) {
+ .bricklayer-column-sizer {
+ width: 100%;
+ }
+}
+
+@media screen and (min-width: 980px) {
+ .bricklayer-column-sizer {
+ width: 50%;
+ }
+}
+
+/*@media screen and (min-width: 1200px) {*/
+ /*.bricklayer-column-sizer {*/
+ /*width: 33.33333%;*/
+ /*}*/
+/*}*/
+
+.bricklayer-column {
+ -webkit-box-flex: 1;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ padding-left: 5px;
+ padding-right: 5px;
+}
\ No newline at end of file
diff --git a/themes/quark/css/custom.css b/themes/quark/css/custom.css
new file mode 100644
index 0000000..e69de29
diff --git a/themes/quark/css/line-awesome.min.css b/themes/quark/css/line-awesome.min.css
new file mode 100644
index 0000000..49178de
--- /dev/null
+++ b/themes/quark/css/line-awesome.min.css
@@ -0,0 +1,4 @@
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}.fa,.fa-stack{display:inline-block}.fa-fw,.fa-li{text-align:center}@font-face{font-family:FontAwesome;src:url(../fonts/line-awesome.eot?v=4.7.0);src:url(../fonts/line-awesome.eot?#iefix&v=4.7.0) format('embedded-opentype'),url(../fonts/line-awesome.woff2?v=4.7.0) format('woff2'),url(../fonts/line-awesome.woff?v=4.7.0) format('woff'),url(../fonts/line-awesome.ttf?v=4.7.0) format('truetype'),url(../fonts/line-awesome.svg?v=4.7.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right,.pull-right{float:right}.pull-left{float:left}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-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-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\f2a3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-address-card:before,.fa-vcard:before{content:"\f2bb"}.fa-address-card-o:before,.fa-vcard-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
\ No newline at end of file
diff --git a/themes/quark/fonts/line-awesome.eot b/themes/quark/fonts/line-awesome.eot
new file mode 100644
index 0000000..f13ae4a
Binary files /dev/null and b/themes/quark/fonts/line-awesome.eot differ
diff --git a/themes/quark/fonts/line-awesome.svg b/themes/quark/fonts/line-awesome.svg
new file mode 100644
index 0000000..21c3c41
--- /dev/null
+++ b/themes/quark/fonts/line-awesome.svg
@@ -0,0 +1,2954 @@
+
+
+
+
+Created by FontForge 20120731 at Fri Nov 24 02:04:36 2017
+ By www-data
+SIL Open Font License
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/themes/quark/fonts/line-awesome.ttf b/themes/quark/fonts/line-awesome.ttf
new file mode 100644
index 0000000..afdb687
Binary files /dev/null and b/themes/quark/fonts/line-awesome.ttf differ
diff --git a/themes/quark/fonts/line-awesome.woff b/themes/quark/fonts/line-awesome.woff
new file mode 100644
index 0000000..8897d78
Binary files /dev/null and b/themes/quark/fonts/line-awesome.woff differ
diff --git a/themes/quark/fonts/line-awesome.woff2 b/themes/quark/fonts/line-awesome.woff2
new file mode 100644
index 0000000..f825cfb
Binary files /dev/null and b/themes/quark/fonts/line-awesome.woff2 differ
diff --git a/themes/quark/gulpfile.js b/themes/quark/gulpfile.js
new file mode 100644
index 0000000..74e7bed
--- /dev/null
+++ b/themes/quark/gulpfile.js
@@ -0,0 +1,43 @@
+var gulp = require('gulp');
+var sass = require('gulp-sass');
+var cleancss = require('gulp-clean-css');
+var csscomb = require('gulp-csscomb');
+var rename = require('gulp-rename');
+var autoprefixer = require('gulp-autoprefixer');
+var sourcemaps = require('gulp-sourcemaps');
+
+// configure the paths
+var watch_dir = './scss/**/*.scss';
+var src_dir = './scss/*.scss';
+var dest_dir = './css-compiled';
+
+var paths = {
+ source: src_dir
+};
+
+function watch() {
+ return gulp.watch(watch_dir, build);
+}
+
+function build() {
+ return gulp.src(paths.source)
+ .pipe(sourcemaps.init())
+ .pipe(sass({
+ outputStyle: 'compact',
+ precision: 10
+ }).on('error', sass.logError)
+ )
+ .pipe(sourcemaps.write())
+ .pipe(autoprefixer())
+ .pipe(gulp.dest(dest_dir))
+ .pipe(csscomb())
+ .pipe(cleancss())
+ .pipe(rename({
+ suffix: '.min'
+ }))
+ .pipe(gulp.dest(dest_dir));
+}
+
+exports.watch = watch;
+exports.build = build;
+exports.default = build;
diff --git a/themes/quark/images/favicon.png b/themes/quark/images/favicon.png
new file mode 100644
index 0000000..85526cf
Binary files /dev/null and b/themes/quark/images/favicon.png differ
diff --git a/themes/quark/images/grav-logo.svg b/themes/quark/images/grav-logo.svg
new file mode 100644
index 0000000..845a994
--- /dev/null
+++ b/themes/quark/images/grav-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/themes/quark/images/logo/.gitkeep b/themes/quark/images/logo/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/themes/quark/js/bricklayer.min.js b/themes/quark/js/bricklayer.min.js
new file mode 100644
index 0000000..fc975d3
--- /dev/null
+++ b/themes/quark/js/bricklayer.min.js
@@ -0,0 +1 @@
+!function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var l="function"==typeof require&&require;if(!u&&l)return l(s,!0);if(i)return i(s,!0);var a=new Error("Cannot find module '"+s+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[s]={exports:{}};e[s][0].call(p.exports,function(t){var n=e[s][1][t];return o(n?n:t)},p,p.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=1&&this.reorderElements(this.columnCount)},t.prototype.getColumns=function(){return this.element.querySelectorAll(":scope > ."+this.options.columnClassName)},t.prototype.findMinHeightColumn=function(){var t=e(this.getColumns()),n=t.map(function(t){return t.offsetHeight}),r=Math.min.apply(null,n);return t[n.indexOf(r)]},t.prototype.getElementsInOrder=function(){return this.element.querySelectorAll(":scope > *:not(."+this.options.columnClassName+"):not(."+this.options.rulerClassName+")")},t.prototype.checkColumnCount=function(t){void 0===t&&(t=!0);var e=this.getColumnCount();this.columnCount!==e&&(t&&n(this.element,"bricklayer.breakpoint",{columnCount:e}),this.columnCount=e)},t.prototype.reorderElements=function(t){var n=this;void 0===t&&(t=1),(t==1/0||1>t)&&(t=1);for(var r=e(this.elements).map(function(t){var e=t.parentNode?t.parentNode.removeChild(t):t;return e}),o=this.getColumns(),i=0;ii;i++){var s=new u(this.options.columnClassName).element;this.element.appendChild(s)}r.forEach(function(t){var e=n.findMinHeightColumn();e.appendChild(t)})},t.prototype.getColumnCount=function(){var t=this.element.offsetWidth,e=this.ruler.getWidth();return Math.round(t/e)},t.prototype.applyPosition=function(t,e,r){var o=this,i=function(i){var s=i+t.charAt(0).toUpperCase()+t.substr(1);n(o.element,"bricklayer."+s,{item:r,column:e})};switch(i("before"),t){case"append":e.appendChild(r);break;case"prepend":e.insertBefore(r,e.firstChild)}i("after")},t}();t.Container=l}(r||(r={})),function(t,n){"function"==typeof define&&define.amd?define(function(){return n()}):"undefined"!=typeof window&&t===window?t.Bricklayer=n():"object"==typeof e&&e.exports&&(e.exports=n())}("undefined"!=typeof window?window:this,function(){return r.Container})},{}]},{},[1]);
\ No newline at end of file
diff --git a/themes/quark/js/jquery.treemenu.js b/themes/quark/js/jquery.treemenu.js
new file mode 100644
index 0000000..291efc5
--- /dev/null
+++ b/themes/quark/js/jquery.treemenu.js
@@ -0,0 +1,87 @@
+/*
+ treeMenu - jQuery plugin
+ version: 0.6
+
+ Copyright 2014 Stepan Krapivin
+
+*/
+(function($){
+ $.fn.treemenu = function(options) {
+ options = options || {};
+ options.delay = options.delay || 0;
+ options.openActive = options.openActive || false;
+ options.closeOther = options.closeOther || false;
+ options.activeSelector = options.activeSelector || ".active";
+
+ this.addClass("treemenu");
+
+ if (!options.nonroot) {
+ this.addClass("treemenu-root");
+ }
+
+ options.nonroot = true;
+
+ this.find("> li").each(function() {
+ e = $(this);
+ var subtree = e.find('> ul');
+ var button = e.find('.toggler').eq(0);
+
+ if(button.length == 0) {
+ // create toggler
+ var button = $('');
+ button.addClass('toggler');
+ e.prepend(button);
+ }
+
+ if(subtree.length > 0) {
+ subtree.hide();
+
+ e.addClass('tree-closed');
+
+ e.find(button).click(function() {
+ var li = $(this).parent('li');
+
+ if (options.closeOther && li.hasClass('tree-closed')) {
+ var siblings = li.parent('ul').find("li:not(.tree-empty)");
+ siblings.removeClass("tree-opened");
+ siblings.addClass("tree-closed");
+ siblings.removeClass(options.activeSelector);
+ siblings.find('> ul').slideUp(options.delay);
+ }
+
+ li.find('> ul').slideToggle(options.delay);
+ li.toggleClass('tree-opened');
+ li.toggleClass('tree-closed');
+ li.toggleClass(options.activeSelector);
+ });
+
+ $(this).find('> ul').treemenu(options);
+ } else {
+ $(this).addClass('tree-empty');
+ }
+ });
+
+ if (options.openActive) {
+ var cls = this.attr("class");
+
+ this.find(options.activeSelector).each(function(){
+ var el = $(this).parent();
+
+ while (el.attr("class") !== cls) {
+ el.find('> ul').show();
+ if(el.prop("tagName") === 'UL') {
+ el.show();
+ } else if (el.prop("tagName") === 'LI') {
+ el.removeClass('tree-closed');
+ el.addClass("tree-opened");
+ el.show();
+ }
+
+ el = el.parent();
+ }
+ });
+ }
+
+ return this;
+ }
+})(jQuery);
diff --git a/themes/quark/js/scopedQuerySelectorShim.min.js b/themes/quark/js/scopedQuerySelectorShim.min.js
new file mode 100644
index 0000000..923bb16
--- /dev/null
+++ b/themes/quark/js/scopedQuerySelectorShim.min.js
@@ -0,0 +1,9 @@
+/* scopeQuerySelectorShim.js
+*
+* Copyright (C) 2015 Larry Davis
+* All rights reserved.
+*
+* This software may be modified and distributed under the terms
+* of the BSD license. See the LICENSE file for details.
+*/
+!function(){function a(a,c){var e=a[c];a[c]=function(a){var c,f=!1,g=!1;return a.match(d)?(a=a.replace(d,""),this.parentNode||(b.appendChild(this),g=!0),parentNode=this.parentNode,this.id||(this.id="rootedQuerySelector_id_"+(new Date).getTime(),f=!0),c=e.call(parentNode,"#"+this.id+" "+a),f&&(this.id=""),g&&b.removeChild(this),c):e.call(this,a)}}if(!HTMLElement.prototype.querySelectorAll)throw new Error("rootedQuerySelectorAll: This polyfill can only be used with browsers that support querySelectorAll");var b=document.createElement("div");try{b.querySelectorAll(":scope *")}catch(c){var d=/^\s*:scope/gi;a(HTMLElement.prototype,"querySelector"),a(HTMLElement.prototype,"querySelectorAll")}}();
\ No newline at end of file
diff --git a/themes/quark/js/singlepagenav.min.js b/themes/quark/js/singlepagenav.min.js
new file mode 100644
index 0000000..7fbc896
--- /dev/null
+++ b/themes/quark/js/singlepagenav.min.js
@@ -0,0 +1,8 @@
+/**
+ * Single Page Nav Plugin
+ * Copyright (c) 2014 Chris Wojcik
+ * Dual licensed under MIT and GPL.
+ * @author Chris Wojcik
+ * @version 1.2.0
+ */
+if(typeof Object.create!=="function"){Object.create=function(e){function t(){}t.prototype=e;return new t}}(function(e,t,n,r){"use strict";var i={init:function(n,r){this.options=e.extend({},e.fn.singlePageNav.defaults,n);this.container=r;this.$container=e(r);this.$links=this.$container.find("a");if(this.options.filter!==""){this.$links=this.$links.filter(this.options.filter)}this.$window=e(t);this.$htmlbody=e("html, body");this.$links.on("click.singlePageNav",e.proxy(this.handleClick,this));this.didScroll=false;this.checkPosition();this.setTimer()},handleClick:function(t){var n=this,r=t.currentTarget,i=e(r.hash);t.preventDefault();if(i.length){n.clearTimer();if(typeof n.options.beforeStart==="function"){n.options.beforeStart()}n.setActiveLink(r.hash);n.scrollTo(i,function(){if(n.options.updateHash&&history.pushState){history.pushState(null,null,r.hash)}n.setTimer();if(typeof n.options.onComplete==="function"){n.options.onComplete()}})}},scrollTo:function(e,t){var n=this;var r=n.getCoords(e).top;var i=false;n.$htmlbody.stop().animate({scrollTop:r},{duration:n.options.speed,easing:n.options.easing,complete:function(){if(typeof t==="function"&&!i){t()}i=true}})},setTimer:function(){var e=this;e.$window.on("scroll.singlePageNav",function(){e.didScroll=true});e.timer=setInterval(function(){if(e.didScroll){e.didScroll=false;e.checkPosition()}},250)},clearTimer:function(){clearInterval(this.timer);this.$window.off("scroll.singlePageNav");this.didScroll=false},checkPosition:function(){var e=this.$window.scrollTop();var t=this.getCurrentSection(e);this.setActiveLink(t)},getCoords:function(e){return{top:Math.round(e.offset().top)-this.options.offset}},setActiveLink:function(e){var t=this.$container.find("a[href$='"+e+"']");if(!t.hasClass(this.options.currentClass)){this.$links.removeClass(this.options.currentClass);t.addClass(this.options.currentClass)}},getCurrentSection:function(t){var n,r,i,s;for(n=0;n=i.top-this.options.threshold){s=r}}}return s||this.$links[0].hash}};e.fn.singlePageNav=function(e){return this.each(function(){var t=Object.create(i);t.init(e,this)})};e.fn.singlePageNav.defaults={offset:0,threshold:120,speed:400,currentClass:"current",easing:"swing",updateHash:false,filter:"",onComplete:false,beforeStart:false}})(jQuery,window,document);
\ No newline at end of file
diff --git a/themes/quark/js/site.js b/themes/quark/js/site.js
new file mode 100644
index 0000000..02915ae
--- /dev/null
+++ b/themes/quark/js/site.js
@@ -0,0 +1,59 @@
+var isTouch = window.DocumentTouch && document instanceof DocumentTouch;
+
+function scrollHeader() {
+ // Has scrolled class on header
+ var zvalue = $(document).scrollTop();
+ if ( zvalue > 75 )
+ $("#header").addClass("scrolled");
+ else
+ $("#header").removeClass("scrolled");
+}
+
+function parallaxBackground() {
+ $('.parallax').css('background-positionY', ($(window).scrollTop() * 0.3) + 'px');
+}
+
+jQuery(document).ready(function($){
+
+ scrollHeader();
+
+ // Scroll Events
+ if (!isTouch){
+ $(document).scroll(function() {
+ scrollHeader();
+ parallaxBackground();
+ });
+ };
+
+ // Touch scroll
+ $(document).on({
+ 'touchmove': function(e) {
+ scrollHeader(); // Replace this with your code.
+ }
+ });
+
+ //Smooth scroll to start
+ $('#to-start').click(function(){
+ var start_y = $('#start').position().top;
+ var header_offset = 45;
+ window.scroll({ top: start_y - header_offset, left: 0, behavior: 'smooth' });
+ return false;
+ });
+
+ //Smooth scroll to top
+ $('#to-top').click(function(){
+ window.scroll({ top: 0, left: 0, behavior: 'smooth' });
+ return false;
+ });
+
+ // Responsive Menu
+ $('#toggle').click(function () {
+ $(this).toggleClass('active');
+ $('#overlay').toggleClass('open');
+ $('body').toggleClass('mobile-nav-open');
+ });
+
+ // Tree Menu
+ $(".tree").treemenu({delay:300});
+
+});
diff --git a/themes/quark/js/smooth-scroll.min.js b/themes/quark/js/smooth-scroll.min.js
new file mode 100644
index 0000000..1f71fdd
--- /dev/null
+++ b/themes/quark/js/smooth-scroll.min.js
@@ -0,0 +1,6 @@
+/*
+ * smoothscroll polyfill - v0.3.4
+ * https://iamdustan.github.io/smoothscroll
+ * 2016 (c) Dustan Kasten, Jeremias Menichelli - MIT License
+ */
+!function(o,t,l){"use strict";function e(){function e(o,t){this.scrollLeft=o,this.scrollTop=t}function r(o){return.5*(1-Math.cos(Math.PI*o))}function n(o){if("object"!=typeof o||null===o||o.behavior===l||"auto"===o.behavior||"instant"===o.behavior)return!0;if("object"==typeof o&&"smooth"===o.behavior)return!1;throw new TypeError("behavior not valid")}function c(l){var e,r,n;do l=l.parentNode,e=l===t.body,r=l.clientHeight1?1:s,l=r(s),e=t.startX+(t.x-t.startX)*l,n=t.startY+(t.y-t.startY)*l,t.method.call(t.scrollable,e,n),e===t.x&&n===t.y?void o.cancelAnimationFrame(t.frame):void 0}function s(l,r,n){var c,s,a,f,d,h=u();l===t.body?(c=o,s=o.scrollX||o.pageXOffset,a=o.scrollY||o.pageYOffset,f=p.scroll):(c=l,s=l.scrollLeft,a=l.scrollTop,f=e),d&&o.cancelAnimationFrame(d),i({scrollable:c,method:f,startTime:h,startX:s,startY:a,x:r,y:n,frame:d})}if(!("scrollBehavior"in t.documentElement.style)){var a=o.HTMLElement||o.Element,f=468,p={scroll:o.scroll||o.scrollTo,scrollBy:o.scrollBy,scrollIntoView:a.prototype.scrollIntoView},u=o.performance&&o.performance.now?o.performance.now.bind(o.performance):Date.now;o.scroll=o.scrollTo=function(){return n(arguments[0])?void p.scroll.call(o,arguments[0].left||arguments[0],arguments[0].top||arguments[1]):void s.call(o,t.body,~~arguments[0].left,~~arguments[0].top)},o.scrollBy=function(){return n(arguments[0])?void p.scrollBy.call(o,arguments[0].left||arguments[0],arguments[0].top||arguments[1]):void s.call(o,t.body,~~arguments[0].left+(o.scrollX||o.pageXOffset),~~arguments[0].top+(o.scrollY||o.pageYOffset))},a.prototype.scrollIntoView=function(){if(n(arguments[0]))return void p.scrollIntoView.call(this,arguments[0]||!0);var l=c(this),e=l.getBoundingClientRect(),r=this.getBoundingClientRect();l!==t.body?(s.call(this,l,l.scrollLeft+r.left-e.left,l.scrollTop+r.top-e.top),o.scrollBy({left:e.left,top:e.top,behavior:"smooth"})):o.scrollBy({left:r.left,top:r.top,behavior:"smooth"})}}}"object"==typeof exports?module.exports={polyfill:e}:e()}(window,document);
\ No newline at end of file
diff --git a/themes/quark/languages.yaml b/themes/quark/languages.yaml
new file mode 100644
index 0000000..8de495a
--- /dev/null
+++ b/themes/quark/languages.yaml
@@ -0,0 +1,290 @@
+en:
+ THEME_QUARK:
+ ADMIN:
+ GRID_SIZE: Grid size
+ BLOG:
+ ITEM:
+ CONTINUE_READING: Continue reading...
+ NEXT_POST: Next Post
+ PREV_POST: Previous Post
+ SIDEBAR:
+ SIMPLE_SEARCH:
+ HEADLINE: Search
+ RELATED_POSTS:
+ HEADLINE: Related Posts
+ RANDOM_ARTICLE:
+ HEADLINE: Random Article
+ FEELING_LUCKY: I'm Feeling Lucky!
+ SOME_TEXT_WIDGET:
+ HEADLINE: Some Text Widget
+ POPULAR_TAGS:
+ HEADLINE: Popular Tags
+ ARCHIVES:
+ HEADLINE: Archives
+ SYNDICATE:
+ HEADLINE: Syndicate
+
+de:
+ THEME_QUARK:
+ BLOG:
+ ITEM:
+ CONTINUE_READING: Weiterlesen...
+ NEXT_POST: Nächster Beitrag
+ PREV_POST: Vorheriger Beitrag
+ SIDEBAR:
+ SIMPLE_SEARCH:
+ HEADLINE: SimpleSearch
+ RELATED_POSTS:
+ HEADLINE: Ähnliche Beiträge
+ RANDOM_ARTICLE:
+ HEADLINE: Zufälliger Artikel
+ FEELING_LUCKY: Auf gut Glück!
+ SOME_TEXT_WIDGET:
+ HEADLINE: Text Widget Beispiel
+ POPULAR_TAGS:
+ HEADLINE: Häufigste Tags
+ ARCHIVES:
+ HEADLINE: Archiv
+ SYNDICATE:
+ HEADLINE: Abonnements
+
+es:
+ THEME_QUARK:
+ BLOG:
+ ITEM:
+ CONTINUE_READING: Continuar leyendo...
+ NEXT_POST: Siguiente Entrada
+ PREV_POST: Entrada Anterior
+ SIDEBAR:
+ SIMPLE_SEARCH:
+ HEADLINE: Buscar
+ RELATED_POSTS:
+ HEADLINE: Entradas Relacionadas
+ RANDOM_ARTICLE:
+ HEADLINE: Artículo Aleatorio
+ FEELING_LUCKY: Voy a tener suerte!
+ SOME_TEXT_WIDGET:
+ HEADLINE: Algunos Widget de Texto
+ POPULAR_TAGS:
+ HEADLINE: Etiquetas Populares
+ ARCHIVES:
+ HEADLINE: Archivos
+ SYNDICATE:
+ HEADLINE: Distribuir
+
+fr:
+ THEME_QUARK:
+ TRANSLATION_TEST: Quark !
+ BLOG:
+ ITEM:
+ CONTINUE_READING: Continuer la lecture...
+ NEXT_POST: Article suivant
+ PREV_POST: Article précédent
+ SIDEBAR:
+ SIMPLE_SEARCH:
+ HEADLINE: Recherche simple
+ RELATED_POSTS:
+ HEADLINE: Articles en relation
+ RANDOM_ARTICLE:
+ HEADLINE: Article aléatoire
+ FEELING_LUCKY: J'ai de la chance !
+ SOME_TEXT_WIDGET:
+ HEADLINE: Du texte gadget
+ POPULAR_TAGS:
+ HEADLINE: Tags populaires
+ ARCHIVES:
+ HEADLINE: Archives
+ SYNDICATE:
+ HEADLINE: Syndication
+
+it:
+ THEME_QUARK:
+ BLOG:
+ ITEM:
+ CONTINUE_READING: Continua a leggere...
+ NEXT_POST: Prossimo articolo
+ PREV_POST: Articolo precedente
+ SIDEBAR:
+ SIMPLE_SEARCH:
+ HEADLINE: SimpleSearch
+ RELATED_POSTS:
+ HEADLINE: Articoli correlati
+ RANDOM_ARTICLE:
+ HEADLINE: Articolo a caso
+ FEELING_LUCKY: Mi sento fortunato!
+ SOME_TEXT_WIDGET:
+ HEADLINE: Widget di testo
+ POPULAR_TAGS:
+ HEADLINE: Tag popolari
+ ARCHIVES:
+ HEADLINE: Archivio
+ SYNDICATE:
+ HEADLINE: Feed
+
+ro:
+ THEME_QUARK:
+ BLOG:
+ ITEM:
+ CONTINUE_READING: Mai multe...
+ NEXT_POST: Următorul articol
+ PREV_POST: Articolul anterior
+ SIDEBAR:
+ SIMPLE_SEARCH:
+ HEADLINE: Căutare
+ RELATED_POSTS:
+ HEADLINE: Articole corelate
+ RANDOM_ARTICLE:
+ HEADLINE: Articol aleator
+ FEELING_LUCKY: Mă simt norocos
+ SOME_TEXT_WIDGET:
+ HEADLINE: Text modular
+ POPULAR_TAGS:
+ HEADLINE: Etichete populare
+ ARCHIVES:
+ HEADLINE: Arhive
+ SYNDICATE:
+ HEADLINE: Abonați-vă
+
+ru:
+ THEME_QUARK:
+ BLOG:
+ ITEM:
+ CONTINUE_READING: Читать далее...
+ NEXT_POST: Следующая запись
+ PREV_POST: Предыдущая запись
+ SIDEBAR:
+ SIMPLE_SEARCH:
+ HEADLINE: Поиск
+ RELATED_POSTS:
+ HEADLINE: Также читайте
+ RANDOM_ARTICLE:
+ HEADLINE: Случайная запись
+ FEELING_LUCKY: Мне повезёт!
+ SOME_TEXT_WIDGET:
+ HEADLINE: Текстовой виджет
+ POPULAR_TAGS:
+ HEADLINE: Популярные теги
+ ARCHIVES:
+ HEADLINE: Архив
+ SYNDICATE:
+ HEADLINE: Синдикация
+
+uk:
+ THEME_QUARK:
+ BLOG:
+ ITEM:
+ CONTINUE_READING: Читати далі...
+ NEXT_POST: Наступний запис
+ PREV_POST: Попередній запис
+ SIDEBAR:
+ SIMPLE_SEARCH:
+ HEADLINE: Пошук
+ RELATED_POSTS:
+ HEADLINE: Також читайте
+ RANDOM_ARTICLE:
+ HEADLINE: Випадковий запис
+ FEELING_LUCKY: Мені пощастить!
+ SOME_TEXT_WIDGET:
+ HEADLINE: Текстовий віджет
+ POPULAR_TAGS:
+ HEADLINE: Популярні теги
+ ARCHIVES:
+ HEADLINE: Архів
+ SYNDICATE:
+ HEADLINE: Синдикація
+
+hr:
+ THEME_QUARK:
+ BLOG:
+ ITEM:
+ CONTINUE_READING: Nastavi s čitanjem...
+ NEXT_POST: Slijedeća objava
+ PREV_POST: Prethodna objava
+ SIDEBAR:
+ SIMPLE_SEARCH:
+ HEADLINE: Pretraživanje
+ RELATED_POSTS:
+ HEADLINE: Povezane objave
+ RANDOM_ARTICLE:
+ HEADLINE: Slučajni članak
+ FEELING_LUCKY: Osjećam se sretno!
+ SOME_TEXT_WIDGET:
+ HEADLINE: Neki tekst widget
+ POPULAR_TAGS:
+ HEADLINE: Popularni tagovi
+ ARCHIVES:
+ HEADLINE: Arhiva
+ SYNDICATE:
+ HEADLINE: Kanali
+
+nl:
+ THEME_QUARK:
+ BLOG:
+ ITEM:
+ CONTINUE_READING: Lees Meer...
+ NEXT_POST: Volgende Bericht
+ PREV_POST: Vorige Bericht
+ SIDEBAR:
+ SIMPLE_SEARCH:
+ HEADLINE: Zoek
+ RELATED_POSTS:
+ HEADLINE: Gerelateerde Berichten
+ RANDOM_ARTICLE:
+ HEADLINE: Willekeurig Artikel
+ FEELING_LUCKY: Ik Voel Me Gelukkig!
+ SOME_TEXT_WIDGET:
+ HEADLINE: Een Tekst Widget
+ POPULAR_TAGS:
+ HEADLINE: Populaire Labels
+ ARCHIVES:
+ HEADLINE: Archieven
+ SYNDICATE:
+ HEADLINE: Syndicatie
+
+cs:
+ THEME_QUARK:
+ BLOG:
+ ITEM:
+ CONTINUE_READING: Pokračovat ve čtení...
+ NEXT_POST: Následující příspěvek
+ PREV_POST: Předchozí příspěvek
+ SIDEBAR:
+ SIMPLE_SEARCH:
+ HEADLINE: Vyhledávání
+ RELATED_POSTS:
+ HEADLINE: Související příspěvky
+ RANDOM_ARTICLE:
+ HEADLINE: Náhodný článek
+ FEELING_LUCKY: Zkusím štěstí!
+ SOME_TEXT_WIDGET:
+ HEADLINE: Textový widget
+ POPULAR_TAGS:
+ HEADLINE: Oblíbené štítky
+ ARCHIVES:
+ HEADLINE: Archiv
+ SYNDICATE:
+ HEADLINE: Syndikace
+
+zh:
+ THEME_QUARK:
+ BLOG:
+ ITEM:
+ CONTINUE_READING: 继续阅读...
+ NEXT_POST: 下一篇
+ PREV_POST: 上一篇
+ SIDEBAR:
+ SIMPLE_SEARCH:
+ HEADLINE: 搜索
+ RELATED_POSTS:
+ HEADLINE: 相关内容
+ RANDOM_ARTICLE:
+ HEADLINE: 随机一篇
+ FEELING_LUCKY: 手气不错!
+ SOME_TEXT_WIDGET:
+ HEADLINE: 一个文本小部件
+ POPULAR_TAGS:
+ HEADLINE: 热门标签
+ ARCHIVES:
+ HEADLINE: 归档
+ SYNDICATE:
+ HEADLINE: 订阅流
diff --git a/themes/quark/package.json b/themes/quark/package.json
new file mode 100644
index 0000000..a0d5000
--- /dev/null
+++ b/themes/quark/package.json
@@ -0,0 +1,49 @@
+{
+ "name": "spectre.css",
+ "version": "0.5.1",
+ "homepage": "http://picturepan2.github.io/spectre",
+ "author": "Yan Zhu ",
+ "description": "Spectre.css: a lightweight, responsive and modern CSS framework",
+ "main": "docs/dist/spectre.css",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/picturepan2/spectre.git"
+ },
+ "license": "MIT",
+ "keywords": [
+ "css",
+ "framework",
+ "flexbox",
+ "responsive",
+ "mobile-friendly",
+ "front-end",
+ "sass",
+ "modern"
+ ],
+ "bugs": {
+ "url": "https://github.com/picturepan2/spectre/issues"
+ },
+ "devDependencies": {
+ "gulp": "^4.0.0",
+ "gulp-autoprefixer": "^6.1.0",
+ "gulp-clean-css": "^3.9.4",
+ "gulp-csscomb": "^3.0.8",
+ "gulp-rename": "^1.2.2",
+ "gulp-sass": "^4.0.1"
+ },
+ "browserslist": [
+ "last 4 Chrome versions",
+ "Edge >= 12",
+ "Firefox ESR",
+ "last 4 Safari versions",
+ "last 4 Opera versions",
+ "Explorer >= 10"
+ ],
+ "scripts": {
+ "dev": "gulp watch",
+ "build": "gulp build"
+ },
+ "dependencies": {
+ "gulp-sourcemaps": "^2.6.4"
+ }
+}
diff --git a/themes/quark/quark.php b/themes/quark/quark.php
new file mode 100644
index 0000000..5a7f186
--- /dev/null
+++ b/themes/quark/quark.php
@@ -0,0 +1,56 @@
+ ['onThemeInitialized', 0],
+ 'onTwigLoader' => ['onTwigLoader', 0],
+ 'onTwigInitialized' => ['onTwigInitialized', 0],
+ ];
+ }
+
+ public function onThemeInitialized()
+ {
+
+ }
+
+ // Add images to twig template paths to allow inclusion of SVG files
+ public function onTwigLoader()
+ {
+ $theme_paths = Grav::instance()['locator']->findResources('theme://images');
+ foreach($theme_paths as $images_path) {
+ $this->grav['twig']->addPath($images_path, 'images');
+ }
+ }
+
+ public function onTwigInitialized()
+ {
+ $twig = $this->grav['twig'];
+
+ $form_class_variables = [
+// 'form_outer_classes' => 'form-horizontal',
+ 'form_button_outer_classes' => 'button-wrapper',
+ 'form_button_classes' => 'btn',
+ 'form_errors_classes' => '',
+ 'form_field_outer_classes' => 'form-group',
+ 'form_field_outer_label_classes' => 'form-label-wrapper',
+ 'form_field_label_classes' => 'form-label',
+// 'form_field_outer_data_classes' => 'col-9',
+ 'form_field_input_classes' => 'form-input',
+ 'form_field_textarea_classes' => 'form-input',
+ 'form_field_select_classes' => 'form-select',
+ 'form_field_radio_classes' => 'form-radio',
+ 'form_field_checkbox_classes' => 'form-checkbox',
+ ];
+
+ $twig->twig_vars = array_merge($twig->twig_vars, $form_class_variables);
+
+ }
+
+}
\ No newline at end of file
diff --git a/themes/quark/quark.yaml b/themes/quark/quark.yaml
new file mode 100644
index 0000000..604df26
--- /dev/null
+++ b/themes/quark/quark.yaml
@@ -0,0 +1,12 @@
+enabled: true
+production-mode: true
+grid-size: grid-lg
+header-fixed: true
+header-animated: true
+header-dark: false
+header-transparent: false
+sticky-footer: true
+blog-page: '/blog'
+spectre:
+ exp: false
+ icons: false
diff --git a/themes/quark/screenshot.jpg b/themes/quark/screenshot.jpg
new file mode 100644
index 0000000..2d166b8
Binary files /dev/null and b/themes/quark/screenshot.jpg differ
diff --git a/themes/quark/scss/spectre-exp.scss b/themes/quark/scss/spectre-exp.scss
new file mode 100644
index 0000000..a2813b4
--- /dev/null
+++ b/themes/quark/scss/spectre-exp.scss
@@ -0,0 +1,19 @@
+// Variables and mixins
+@import "theme/variables";
+@import "spectre/variables";
+@import "spectre/mixins";
+
+/*! Spectre.css Experimentals v#{$version} | MIT License | github.com/picturepan2/spectre */
+// Experimentals
+@import "spectre/autocomplete";
+@import "spectre/calendars";
+@import "spectre/carousels";
+@import "spectre/comparison-sliders";
+@import "spectre/filters";
+@import "spectre/meters";
+@import "spectre/off-canvas";
+@import "spectre/parallax";
+@import "spectre/progress";
+@import "spectre/sliders";
+@import "spectre/timelines";
+@import "spectre/viewer-360";
diff --git a/themes/quark/scss/spectre-icons.scss b/themes/quark/scss/spectre-icons.scss
new file mode 100644
index 0000000..a223397
--- /dev/null
+++ b/themes/quark/scss/spectre-icons.scss
@@ -0,0 +1,11 @@
+// Variables and mixins
+@import "theme/variables";
+@import "spectre/variables";
+@import "spectre/mixins";
+
+/*! Spectre.css Icons v#{$version} | MIT License | github.com/picturepan2/spectre */
+// Icons
+@import "spectre/icons/icons-core";
+@import "spectre/icons/icons-navigation";
+@import "spectre/icons/icons-action";
+@import "spectre/icons/icons-object";
diff --git a/themes/quark/scss/spectre.scss b/themes/quark/scss/spectre.scss
new file mode 100644
index 0000000..7bc46cc
--- /dev/null
+++ b/themes/quark/scss/spectre.scss
@@ -0,0 +1,53 @@
+// Variables and mixins
+@import "theme/variables";
+@import "spectre/variables";
+@import "spectre/mixins";
+
+/*! Spectre.css v#{$version} | MIT License | github.com/picturepan2/spectre */
+// Reset and dependencies
+@import "spectre/normalize";
+@import "spectre/base";
+
+// Elements
+@import "spectre/typography";
+@import "spectre/asian";
+@import "spectre/tables";
+@import "spectre/buttons";
+@import "spectre/forms";
+@import "spectre/labels";
+@import "spectre/codes";
+@import "spectre/media";
+
+// Layout
+@import "spectre/layout";
+@import "spectre/hero";
+@import "spectre/navbar";
+
+// Components
+@import "spectre/accordions";
+@import "spectre/avatars";
+@import "spectre/badges";
+@import "spectre/breadcrumbs";
+@import "spectre/bars";
+@import "spectre/cards";
+@import "spectre/chips";
+@import "spectre/dropdowns";
+@import "spectre/empty";
+@import "spectre/menus";
+@import "spectre/modals";
+@import "spectre/navs";
+@import "spectre/pagination";
+@import "spectre/panels";
+@import "spectre/popovers";
+@import "spectre/steps";
+@import "spectre/tabs";
+@import "spectre/tiles";
+@import "spectre/toasts";
+@import "spectre/tooltips";
+
+// Utility classes
+@import "spectre/animations";
+@import "spectre/utilities";
+
+// Extras
+@import "theme/extensions";
diff --git a/themes/quark/scss/spectre/_accordions.scss b/themes/quark/scss/spectre/_accordions.scss
new file mode 100644
index 0000000..fd21585
--- /dev/null
+++ b/themes/quark/scss/spectre/_accordions.scss
@@ -0,0 +1,38 @@
+// Accordions
+.accordion {
+ input:checked ~,
+ &[open] {
+ & .accordion-header {
+ .icon {
+ transform: rotate(90deg);
+ }
+ }
+
+ & .accordion-body {
+ max-height: 50rem;
+ }
+ }
+
+ .accordion-header {
+ display: block;
+ padding: $unit-1 $unit-2;
+
+ .icon {
+ transition: transform .25s;
+ }
+ }
+
+ .accordion-body {
+ margin-bottom: $layout-spacing;
+ max-height: 0;
+ overflow: hidden;
+ transition: max-height .25s;
+ }
+}
+
+// Remove default details marker in Webkit
+summary.accordion-header {
+ &::-webkit-details-marker {
+ display: none;
+ }
+}
diff --git a/themes/quark/scss/spectre/_animations.scss b/themes/quark/scss/spectre/_animations.scss
new file mode 100644
index 0000000..e7fde1a
--- /dev/null
+++ b/themes/quark/scss/spectre/_animations.scss
@@ -0,0 +1,20 @@
+// Animations
+@keyframes loading {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+@keyframes slide-down {
+ 0% {
+ opacity: 0;
+ transform: translateY(-$unit-8);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
diff --git a/themes/quark/scss/spectre/_asian.scss b/themes/quark/scss/spectre/_asian.scss
new file mode 100644
index 0000000..e426f39
--- /dev/null
+++ b/themes/quark/scss/spectre/_asian.scss
@@ -0,0 +1,43 @@
+// Optimized for East Asian CJK
+html:lang(zh),
+html:lang(zh-Hans),
+.lang-zh,
+.lang-zh-hans {
+ font-family: $cjk-zh-hans-font-family;
+}
+
+html:lang(zh-Hant),
+.lang-zh-hant {
+ font-family: $cjk-zh-hant-font-family;
+}
+
+html:lang(ja),
+.lang-ja {
+ font-family: $cjk-jp-font-family;
+}
+
+html:lang(ko),
+.lang-ko {
+ font-family: $cjk-ko-font-family;
+}
+
+:lang(zh),
+:lang(ja),
+.lang-cjk {
+ ins,
+ u {
+ border-bottom: $border-width solid;
+ text-decoration: none;
+ }
+
+ del + del,
+ del + s,
+ ins + ins,
+ ins + u,
+ s + del,
+ s + s,
+ u + ins,
+ u + u {
+ margin-left: .125em;
+ }
+}
diff --git a/themes/quark/scss/spectre/_autocomplete.scss b/themes/quark/scss/spectre/_autocomplete.scss
new file mode 100644
index 0000000..279fa03
--- /dev/null
+++ b/themes/quark/scss/spectre/_autocomplete.scss
@@ -0,0 +1,47 @@
+// Autocomplete
+.form-autocomplete {
+ position: relative;
+
+ .form-autocomplete-input {
+ align-content: flex-start;
+ display: flex;
+ flex-wrap: wrap;
+ height: auto;
+ min-height: $unit-8;
+ padding: $unit-h;
+
+ &.is-focused {
+ @include control-shadow();
+ border-color: $primary-color;
+ }
+
+ .form-input {
+ border-color: transparent;
+ box-shadow: none;
+ display: inline-block;
+ flex: 1 0 auto;
+ height: $unit-6;
+ line-height: $unit-4;
+ margin: $unit-h;
+ width: auto;
+ }
+ }
+
+ .menu {
+ left: 0;
+ position: absolute;
+ top: 100%;
+ width: 100%;
+ }
+
+ &.autocomplete-oneline {
+ .form-autocomplete-input {
+ flex-wrap: nowrap;
+ overflow-x: auto;
+ }
+
+ .chip {
+ flex: 1 0 auto;
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_avatars.scss b/themes/quark/scss/spectre/_avatars.scss
new file mode 100644
index 0000000..b203aa2
--- /dev/null
+++ b/themes/quark/scss/spectre/_avatars.scss
@@ -0,0 +1,77 @@
+// Avatars
+.avatar {
+ @include avatar-base();
+ background: $primary-color;
+ border-radius: 50%;
+ color: rgba($light-color, .85);
+ display: inline-block;
+ font-weight: 300;
+ line-height: 1.25;
+ margin: 0;
+ position: relative;
+ vertical-align: middle;
+
+ &.avatar-xs {
+ @include avatar-base($unit-4);
+ }
+ &.avatar-sm {
+ @include avatar-base($unit-6);
+ }
+ &.avatar-lg {
+ @include avatar-base($unit-12);
+ }
+ &.avatar-xl {
+ @include avatar-base($unit-16);
+ }
+
+ img {
+ border-radius: 50%;
+ height: 100%;
+ position: relative;
+ width: 100%;
+ z-index: $zindex-0;
+ }
+
+ .avatar-icon,
+ .avatar-presence {
+ background: $bg-color-light;
+ bottom: 14.64%;
+ height: 50%;
+ padding: $border-width-lg;
+ position: absolute;
+ right: 14.64%;
+ transform: translate(50%, 50%);
+ width: 50%;
+ z-index: $zindex-0 + 1;
+ }
+
+ .avatar-presence {
+ background: $gray-color;
+ box-shadow: 0 0 0 $border-width-lg $light-color;
+ border-radius: 50%;
+ height: .5em;
+ width: .5em;
+
+ &.online {
+ background: $success-color;
+ }
+
+ &.busy {
+ background: $error-color;
+ }
+
+ &.away {
+ background: $warning-color;
+ }
+ }
+
+ &[data-initial]::before {
+ color: currentColor;
+ content: attr(data-initial);
+ left: 50%;
+ position: absolute;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ z-index: $zindex-0;
+ }
+}
\ No newline at end of file
diff --git a/themes/quark/scss/spectre/_badges.scss b/themes/quark/scss/spectre/_badges.scss
new file mode 100644
index 0000000..d67f6d1
--- /dev/null
+++ b/themes/quark/scss/spectre/_badges.scss
@@ -0,0 +1,60 @@
+// Badges
+.badge {
+ position: relative;
+ white-space: nowrap;
+
+ &[data-badge],
+ &:not([data-badge]) {
+ &::after {
+ background: $primary-color;
+ background-clip: padding-box;
+ border-radius: .5rem;
+ box-shadow: 0 0 0 .1rem $bg-color-light;
+ color: $light-color;
+ content: attr(data-badge);
+ display: inline-block;
+ transform: translate(-.05rem, -.5rem);
+ }
+ }
+ &[data-badge] {
+ &::after {
+ font-size: $font-size-sm;
+ height: .9rem;
+ line-height: 1;
+ min-width: .9rem;
+ padding: .1rem .2rem;
+ text-align: center;
+ white-space: nowrap;
+ }
+ }
+ &:not([data-badge]),
+ &[data-badge=""] {
+ &::after {
+ height: 6px;
+ min-width: 6px;
+ padding: 0;
+ width: 6px;
+ }
+ }
+
+ // Badges for Buttons
+ &.btn {
+ &::after {
+ position: absolute;
+ top: 0;
+ right: 0;
+ transform: translate(50%, -50%);
+ }
+ }
+
+ // Badges for Avatars
+ &.avatar {
+ &::after {
+ position: absolute;
+ top: 14.64%;
+ right: 14.64%;
+ transform: translate(50%, -50%);
+ z-index: $zindex-1;
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_bars.scss b/themes/quark/scss/spectre/_bars.scss
new file mode 100644
index 0000000..47e21c9
--- /dev/null
+++ b/themes/quark/scss/spectre/_bars.scss
@@ -0,0 +1,71 @@
+// Bars
+.bar {
+ background: $bg-color-dark;
+ border-radius: $border-radius;
+ display: flex;
+ flex-wrap: nowrap;
+ height: $unit-4;
+ width: 100%;
+
+ &.bar-sm {
+ height: $unit-1;
+ }
+
+ // TODO: attr() support
+ .bar-item {
+ background: $primary-color;
+ color: $light-color;
+ display: block;
+ font-size: $font-size-sm;
+ flex-shrink: 0;
+ line-height: $unit-4;
+ height: 100%;
+ position: relative;
+ text-align: center;
+ width: 0;
+
+ &:first-child {
+ border-bottom-left-radius: $border-radius;
+ border-top-left-radius: $border-radius;
+ }
+ &:last-child {
+ border-bottom-right-radius: $border-radius;
+ border-top-right-radius: $border-radius;
+ flex-shrink: 1;
+ }
+ }
+}
+
+// Slider bar
+.bar-slider {
+ height: $border-width-lg;
+ margin: $layout-spacing 0;
+ position: relative;
+
+ .bar-item {
+ left: 0;
+ padding: 0;
+ position: absolute;
+ &:not(:last-child):first-child {
+ background: $bg-color-dark;
+ z-index: $zindex-0;
+ }
+ }
+
+ .bar-slider-btn {
+ background: $primary-color;
+ border: 0;
+ border-radius: 50%;
+ height: $unit-3;
+ padding: 0;
+ position: absolute;
+ right: 0;
+ top: 50%;
+ transform: translate(50%, -50%);
+ width: $unit-3;
+
+ &:active {
+ box-shadow: 0 0 0 .1rem $primary-color;
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_base.scss b/themes/quark/scss/spectre/_base.scss
new file mode 100644
index 0000000..4e01b20
--- /dev/null
+++ b/themes/quark/scss/spectre/_base.scss
@@ -0,0 +1,44 @@
+// Base
+*,
+*::before,
+*::after {
+ box-sizing: inherit;
+}
+
+html {
+ box-sizing: border-box;
+ font-size: $html-font-size;
+ line-height: $html-line-height;
+ -webkit-tap-highlight-color: transparent;
+}
+
+body {
+ background: $body-bg;
+ color: $body-font-color;
+ font-family: $body-font-family;
+ font-size: $font-size;
+ overflow-x: hidden;
+ text-rendering: optimizeLegibility;
+}
+
+a {
+ color: $link-color;
+ outline: none;
+ text-decoration: none;
+
+ &:focus {
+ @include control-shadow();
+ }
+
+ &:focus,
+ &:hover,
+ &:active,
+ &.active {
+ color: $link-color-dark;
+ text-decoration: underline;
+ }
+
+ &:visited {
+ color: $link-color-light;
+ }
+}
diff --git a/themes/quark/scss/spectre/_breadcrumbs.scss b/themes/quark/scss/spectre/_breadcrumbs.scss
new file mode 100644
index 0000000..6a5af31
--- /dev/null
+++ b/themes/quark/scss/spectre/_breadcrumbs.scss
@@ -0,0 +1,29 @@
+// Breadcrumbs
+.breadcrumb {
+ list-style: none;
+ margin: $unit-1 0;
+ padding: $unit-1 0;
+
+ .breadcrumb-item {
+ color: $gray-color-dark;
+ display: inline-block;
+ margin: 0;
+ padding: $unit-1 0;
+
+ &:not(:last-child) {
+ margin-right: $unit-1;
+
+ a {
+ color: $gray-color-dark;
+ }
+ }
+
+ &:not(:first-child) {
+ &::before {
+ color: $gray-color-dark;
+ content: "/";
+ padding-right: $unit-2;
+ }
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_buttons.scss b/themes/quark/scss/spectre/_buttons.scss
new file mode 100644
index 0000000..9158f0f
--- /dev/null
+++ b/themes/quark/scss/spectre/_buttons.scss
@@ -0,0 +1,193 @@
+// Buttons
+.btn {
+ appearance: none;
+ background: $bg-color-light;
+ border: $border-width solid $primary-color;
+ border-radius: $border-radius;
+ color: $primary-color;
+ cursor: pointer;
+ display: inline-block;
+ font-size: $font-size;
+ height: $control-size;
+ line-height: $line-height;
+ outline: none;
+ padding: $control-padding-y $control-padding-x;
+ text-align: center;
+ text-decoration: none;
+ transition: background .2s, border .2s, box-shadow .2s, color .2s;
+ user-select: none;
+ vertical-align: middle;
+ white-space: nowrap;
+ &:focus {
+ @include control-shadow();
+ }
+ &:focus,
+ &:hover {
+ background: $secondary-color;
+ border-color: $primary-color-dark;
+ text-decoration: none;
+ }
+ &:active,
+ &.active {
+ background: $primary-color-dark;
+ border-color: darken($primary-color-dark, 5%);
+ color: $light-color;
+ text-decoration: none;
+ &.loading {
+ &::after {
+ border-bottom-color: $light-color;
+ border-left-color: $light-color;
+ }
+ }
+ }
+ &[disabled],
+ &:disabled,
+ &.disabled {
+ cursor: default;
+ opacity: .5;
+ pointer-events: none;
+ }
+
+ // Button Primary
+ &.btn-primary {
+ background: $primary-color;
+ border-color: $primary-color-dark;
+ color: $light-color;
+ &:focus,
+ &:hover {
+ background: darken($primary-color-dark, 2%);
+ border-color: darken($primary-color-dark, 5%);
+ color: $light-color;
+ }
+ &:active,
+ &.active {
+ background: darken($primary-color-dark, 4%);
+ border-color: darken($primary-color-dark, 7%);
+ color: $light-color;
+ }
+ &.loading {
+ &::after {
+ border-bottom-color: $light-color;
+ border-left-color: $light-color;
+ }
+ }
+ }
+
+ // Button Colors
+ &.btn-success {
+ @include button-variant($success-color);
+ }
+
+ &.btn-error {
+ @include button-variant($error-color);
+ }
+
+ // Button Link
+ &.btn-link {
+ background: transparent;
+ border-color: transparent;
+ color: $link-color;
+ &:focus,
+ &:hover,
+ &:active,
+ &.active {
+ color: $link-color-dark;
+ }
+ }
+
+ // Button Sizes
+ &.btn-sm {
+ font-size: $font-size-sm;
+ height: $control-size-sm;
+ padding: $control-padding-y-sm $control-padding-x-sm;
+ }
+
+ &.btn-lg {
+ font-size: $font-size-lg;
+ height: $control-size-lg;
+ padding: $control-padding-y-lg $control-padding-x-lg;
+ }
+
+ // Button Block
+ &.btn-block {
+ display: block;
+ width: 100%;
+ }
+
+ // Button Action
+ &.btn-action {
+ width: $control-size;
+ padding-left: 0;
+ padding-right: 0;
+
+ &.btn-sm {
+ width: $control-size-sm;
+ }
+
+ &.btn-lg {
+ width: $control-size-lg;
+ }
+ }
+
+ // Button Clear
+ &.btn-clear {
+ background: transparent;
+ border: 0;
+ color: currentColor;
+ height: $unit-5;
+ line-height: $unit-4;
+ margin-left: $unit-1;
+ margin-right: -2px;
+ opacity: 1;
+ padding: $unit-h;
+ text-decoration: none;
+ width: $unit-5;
+
+ &:focus,
+ &:hover {
+ background: rgba($bg-color, .5);
+ opacity: .95;
+ }
+
+ &::before {
+ content: "\2715";
+ }
+ }
+}
+
+// Button groups
+.btn-group {
+ display: inline-flex;
+ flex-wrap: wrap;
+
+ .btn {
+ flex: 1 0 auto;
+ &:first-child:not(:last-child) {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+ }
+ &:not(:first-child):not(:last-child) {
+ border-radius: 0;
+ margin-left: -$border-width;
+ }
+ &:last-child:not(:first-child) {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+ margin-left: -$border-width;
+ }
+ &:focus,
+ &:hover,
+ &:active,
+ &.active {
+ z-index: $zindex-0;
+ }
+ }
+
+ &.btn-group-block {
+ display: flex;
+
+ .btn {
+ flex: 1 0 0;
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_calendars.scss b/themes/quark/scss/spectre/_calendars.scss
new file mode 100644
index 0000000..1e9fd15
--- /dev/null
+++ b/themes/quark/scss/spectre/_calendars.scss
@@ -0,0 +1,222 @@
+// Calendars
+.calendar {
+ border: $border-width solid $border-color;
+ border-radius: $border-radius;
+ display: block;
+ min-width: 280px;
+
+ .calendar-nav {
+ align-items: center;
+ background: $bg-color;
+ border-top-left-radius: $border-radius;
+ border-top-right-radius: $border-radius;
+ display: flex;
+ font-size: $font-size-lg;
+ padding: $layout-spacing;
+ }
+
+ .calendar-header,
+ .calendar-body {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ padding: $layout-spacing 0;
+
+ .calendar-date {
+ flex: 0 0 14.28%; // 7 calendar-items each row
+ max-width: 14.28%;
+ }
+ }
+
+ .calendar-header {
+ background: $bg-color;
+ border-bottom: $border-width solid $border-color;
+ color: $gray-color;
+ font-size: $font-size-sm;
+ text-align: center;
+ }
+
+ .calendar-body {
+ color: $gray-color-dark;
+ }
+
+ .calendar-date {
+ border: 0;
+ padding: $unit-1;
+
+ .date-item {
+ appearance: none;
+ background: transparent;
+ border: $border-width solid transparent;
+ border-radius: 50%;
+ color: $gray-color-dark;
+ cursor: pointer;
+ font-size: $font-size-sm;
+ height: $unit-7;
+ line-height: $unit-5;
+ outline: none;
+ padding: $unit-h;
+ position: relative;
+ text-align: center;
+ text-decoration: none;
+ transition: background .2s, border .2s, box-shadow .2s, color .2s;
+ vertical-align: middle;
+ white-space: nowrap;
+ width: $unit-7;
+
+ &.date-today {
+ border-color: $secondary-color-dark;
+ color: $primary-color;
+ }
+
+ &:focus {
+ @include control-shadow();
+ }
+
+ &:focus,
+ &:hover {
+ background: $secondary-color-light;
+ border-color: $secondary-color-dark;
+ color: $primary-color;
+ text-decoration: none;
+ }
+ &:active,
+ &.active {
+ background: $primary-color-dark;
+ border-color: darken($primary-color-dark, 5%);
+ color: $light-color;
+ }
+
+ // Calendar badge support
+ &.badge {
+ &::after {
+ position: absolute;
+ top: 3px;
+ right: 3px;
+ transform: translate(50%, -50%);
+ }
+ }
+ }
+
+ .date-item,
+ .calendar-event {
+ &:disabled,
+ &.disabled {
+ cursor: default;
+ opacity: .25;
+ pointer-events: none;
+ }
+ }
+
+ &.prev-month,
+ &.next-month {
+ .date-item,
+ .calendar-event {
+ opacity: .25;
+ }
+ }
+ }
+
+ .calendar-range {
+ position: relative;
+
+ &::before {
+ background: $secondary-color;
+ content: "";
+ height: $unit-7;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 50%;
+ transform: translateY(-50%);
+ }
+ &.range-start {
+ &::before {
+ left: 50%;
+ }
+ }
+ &.range-end {
+ &::before {
+ right: 50%;
+ }
+ }
+
+ &.range-start,
+ &.range-end {
+ .date-item {
+ background: $primary-color-dark;
+ border-color: darken($primary-color-dark, 5%);
+ color: $light-color;
+ }
+ }
+
+ .date-item {
+ color: $primary-color;
+ }
+ }
+
+ // Calendars size
+ &.calendar-lg {
+ .calendar-body {
+ padding: 0;
+
+ .calendar-date {
+ border-bottom: $border-width solid $border-color;
+ border-right: $border-width solid $border-color;
+ display: flex;
+ flex-direction: column;
+ height: 5.5rem;
+ padding: 0;
+
+ &:nth-child(7n) {
+ border-right: 0;
+ }
+ &:nth-last-child(-n+7) {
+ border-bottom: 0;
+ }
+ }
+ }
+
+ .date-item {
+ align-self: flex-end;
+ height: $unit-7;
+ margin-right: $layout-spacing-sm;
+ margin-top: $layout-spacing-sm;
+ }
+
+ .calendar-range {
+ &::before {
+ top: 19px;
+ }
+ &.range-start {
+ &::before {
+ left: auto;
+ width: 19px;
+ }
+ }
+ &.range-end {
+ &::before {
+ right: 19px;
+ }
+ }
+ }
+
+ .calendar-events {
+ flex-grow: 1;
+ line-height: 1;
+ overflow-y: auto;
+ padding: $layout-spacing-sm;
+ }
+
+ .calendar-event {
+ border-radius: $border-radius;
+ font-size: $font-size-sm;
+ display: block;
+ margin: $unit-h auto;
+ overflow: hidden;
+ padding: 3px 4px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_cards.scss b/themes/quark/scss/spectre/_cards.scss
new file mode 100644
index 0000000..6b712e1
--- /dev/null
+++ b/themes/quark/scss/spectre/_cards.scss
@@ -0,0 +1,43 @@
+// Cards
+.card {
+ background: $bg-color-light;
+ border: $border-width solid $border-color;
+ border-radius: $border-radius;
+ display: flex;
+ flex-direction: column;
+
+ .card-header,
+ .card-body,
+ .card-footer {
+ padding: $layout-spacing-lg;
+ padding-bottom: 0;
+
+ &:last-child {
+ padding-bottom: $layout-spacing-lg;
+ }
+ }
+
+ .card-body {
+ flex: 1 1 auto;
+ }
+
+ .card-image {
+ padding-top: $layout-spacing-lg;
+
+ &:first-child {
+ padding-top: 0;
+
+ img {
+ border-top-left-radius: $border-radius;
+ border-top-right-radius: $border-radius;
+ }
+ }
+
+ &:last-child {
+ img {
+ border-bottom-left-radius: $border-radius;
+ border-bottom-right-radius: $border-radius;
+ }
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_carousels.scss b/themes/quark/scss/spectre/_carousels.scss
new file mode 100644
index 0000000..66dc51b
--- /dev/null
+++ b/themes/quark/scss/spectre/_carousels.scss
@@ -0,0 +1,136 @@
+// Carousels
+// The number of carousel images
+$carousel-number: 8;
+
+%carousel-image-checked {
+ animation: carousel-slidein .75s ease-in-out 1;
+ opacity: 1;
+ z-index: $zindex-1;
+}
+
+%carousel-nav-checked {
+ color: $gray-color-light;
+}
+
+.carousel {
+ background: $bg-color;
+ display: block;
+ overflow: hidden;
+ position: relative;
+ width: 100%;
+ -webkit-overflow-scrolling: touch;
+ z-index: $zindex-0;
+
+ .carousel-container {
+ height: 100%;
+ left: 0;
+ position: relative;
+ &::before {
+ content: "";
+ display: block;
+ padding-bottom: 56.25%;
+ }
+
+ .carousel-item {
+ animation: carousel-slideout 1s ease-in-out 1;
+ height: 100%;
+ left: 0;
+ margin: 0;
+ opacity: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+
+ &:hover {
+ .item-prev,
+ .item-next {
+ opacity: 1;
+ }
+ }
+ }
+
+ .item-prev,
+ .item-next {
+ background: rgba($gray-color-light, .25);
+ border-color: rgba($gray-color-light, .5);
+ color: $gray-color-light;
+ opacity: 0;
+ position: absolute;
+ top: 50%;
+ transition: all .4s;
+ transform: translateY(-50%);
+ z-index: $zindex-1;
+ }
+ .item-prev {
+ left: 1rem;
+ }
+ .item-next {
+ right: 1rem;
+ }
+ }
+
+ .carousel-locator {
+ @for $i from 1 through ($carousel-number) {
+ &:nth-of-type(#{$i}):checked ~ .carousel-container .carousel-item:nth-of-type(#{$i}) {
+ @extend %carousel-image-checked;
+ }
+ }
+
+ @for $i from 1 through ($carousel-number) {
+ &:nth-of-type(#{$i}):checked ~ .carousel-nav .nav-item:nth-of-type(#{$i}) {
+ @extend %carousel-nav-checked;
+ }
+ }
+ }
+
+ .carousel-nav {
+ bottom: $layout-spacing;
+ display: flex;
+ justify-content: center;
+ left: 50%;
+ position: absolute;
+ transform: translateX(-50%);
+ width: 10rem;
+ z-index: $zindex-1;
+
+ .nav-item {
+ color: rgba($gray-color-light, .5);
+ display: block;
+ flex: 1 0 auto;
+ height: $unit-8;
+ margin: $unit-1;
+ max-width: 2.5rem;
+ position: relative;
+
+ &::before {
+ background: currentColor;
+ content: "";
+ display: block;
+ height: $unit-h;
+ position: absolute;
+ top: .5rem;
+ width: 100%;
+ }
+ }
+ }
+}
+
+@keyframes carousel-slidein {
+ 0% {
+ transform: translateX(100%);
+ }
+ 100% {
+ transform: translateX(0);
+ }
+}
+
+@keyframes carousel-slideout {
+ 0% {
+ opacity: 1;
+ transform: translateX(0);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateX(-50%);
+ }
+}
diff --git a/themes/quark/scss/spectre/_chips.scss b/themes/quark/scss/spectre/_chips.scss
new file mode 100644
index 0000000..6729c56
--- /dev/null
+++ b/themes/quark/scss/spectre/_chips.scss
@@ -0,0 +1,33 @@
+// Chips
+.chip {
+ align-items: center;
+ background: $bg-color-dark;
+ border-radius: 5rem;
+ display: inline-flex;
+ font-size: 90%;
+ height: $unit-6;
+ line-height: $unit-4;
+ margin: $unit-h;
+ max-width: $control-width-sm;
+ overflow: hidden;
+ padding: $unit-1 $unit-2;
+ text-decoration: none;
+ text-overflow: ellipsis;
+ vertical-align: middle;
+ white-space: nowrap;
+
+ &.active {
+ background: $primary-color;
+ color: $light-color;
+ }
+
+ .avatar {
+ margin-left: -$unit-2;
+ margin-right: $unit-1;
+ }
+
+ .btn-clear {
+ border-radius: 50%;
+ transform: scale(.75);
+ }
+}
diff --git a/themes/quark/scss/spectre/_codes.scss b/themes/quark/scss/spectre/_codes.scss
new file mode 100644
index 0000000..817452b
--- /dev/null
+++ b/themes/quark/scss/spectre/_codes.scss
@@ -0,0 +1,31 @@
+// Codes
+code {
+ @include label-base();
+ @include label-variant($code-color, lighten($code-color, 42.5%));
+ font-size: 85%;
+}
+
+.code {
+ border-radius: $border-radius;
+ color: $body-font-color;
+ position: relative;
+
+ &::before {
+ color: $gray-color;
+ content: attr(data-lang);
+ font-size: $font-size-sm;
+ position: absolute;
+ right: $layout-spacing;
+ top: $unit-h;
+ }
+
+ code {
+ background: $bg-color;
+ color: inherit;
+ display: block;
+ line-height: 1.5;
+ overflow-x: auto;
+ padding: 1rem;
+ width: 100%;
+ }
+}
diff --git a/themes/quark/scss/spectre/_comparison-sliders.scss b/themes/quark/scss/spectre/_comparison-sliders.scss
new file mode 100644
index 0000000..72bb25f
--- /dev/null
+++ b/themes/quark/scss/spectre/_comparison-sliders.scss
@@ -0,0 +1,115 @@
+// Image comparison slider
+// Credit: http://codepen.io/solipsistacp/pen/Gpmaq
+.comparison-slider {
+ height: 50vh;
+ overflow: hidden;
+ position: relative;
+ width: 100%;
+ -webkit-overflow-scrolling: touch;
+
+ .comparison-before,
+ .comparison-after {
+ height: 100%;
+ left: 0;
+ margin: 0;
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+
+ img {
+ height: 100%;
+ object-fit: cover;
+ object-position: left center;
+ position: absolute;
+ width: 100%;
+ }
+ }
+
+ .comparison-before {
+ width: 100%;
+ z-index: 1;
+
+ .comparison-label {
+ right: $unit-4;
+ }
+ }
+
+ .comparison-after {
+ max-width: 100%;
+ min-width: 0;
+ z-index: 2;
+
+ &::before {
+ background: transparent;
+ content: "";
+ cursor: default;
+ height: 100%;
+ left: 0;
+ position: absolute;
+ right: $unit-4;
+ top: 0;
+ z-index: $zindex-0;
+ }
+
+ &::after {
+ background: currentColor;
+ border-radius: 50%;
+ box-shadow: 0 -5px, 0 5px;
+ color: $light-color;
+ content: "";
+ height: 3px;
+ position: absolute;
+ right: $unit-2;
+ top: 50%;
+ transform: translate(50%, -50%);
+ width: 3px;
+ }
+
+ .comparison-label {
+ left: $unit-4;
+ }
+ }
+
+ .comparison-resizer {
+ animation: first-run 1.5s 1 ease-in-out;
+ cursor: ew-resize;
+ height: $unit-4;
+ left: 0;
+ max-width: 100%;
+ min-width: $unit-4;
+ opacity: 0;
+ outline: none;
+ position: relative;
+ resize: horizontal;
+ top: 50%;
+ transform: translateY(-50%) scaleY(30);
+ width: 0;
+ }
+
+ .comparison-label {
+ background: rgba($dark-color, .5);
+ bottom: $unit-4;
+ color: $light-color;
+ padding: $unit-1 $unit-2;
+ position: absolute;
+ user-select: none;
+ }
+}
+
+@keyframes first-run {
+ 0% {
+ width: 0;
+ }
+ 25% {
+ width: $unit-12;
+ }
+ 50% {
+ width: $unit-4;
+ }
+ 75% {
+ width: $unit-6;
+ }
+ 100% {
+ width: 0;
+ }
+}
diff --git a/themes/quark/scss/spectre/_dropdowns.scss b/themes/quark/scss/spectre/_dropdowns.scss
new file mode 100644
index 0000000..324440b
--- /dev/null
+++ b/themes/quark/scss/spectre/_dropdowns.scss
@@ -0,0 +1,36 @@
+// Dropdown
+.dropdown {
+ display: inline-block;
+ position: relative;
+
+ .menu {
+ animation: slide-down .15s ease 1;
+ display: none;
+ left: 0;
+ max-height: 50vh;
+ overflow-y: auto;
+ position: absolute;
+ top: 100%;
+ }
+
+ &.dropdown-right {
+ .menu {
+ left: auto;
+ right: 0;
+ }
+ }
+
+ &.active .menu,
+ .dropdown-toggle:focus + .menu,
+ .menu:hover {
+ display: block;
+ }
+
+ // Fix dropdown-toggle border radius in button groups
+ .btn-group {
+ .dropdown-toggle:nth-last-child(2) {
+ border-bottom-right-radius: $border-radius;
+ border-top-right-radius: $border-radius;
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_empty.scss b/themes/quark/scss/spectre/_empty.scss
new file mode 100644
index 0000000..accba9c
--- /dev/null
+++ b/themes/quark/scss/spectre/_empty.scss
@@ -0,0 +1,21 @@
+// Empty states (or Blank slates)
+.empty {
+ background: $bg-color;
+ border-radius: $border-radius;
+ color: $gray-color-dark;
+ text-align: center;
+ padding: $unit-16 $unit-8;
+
+ .empty-icon {
+ margin-bottom: $layout-spacing-lg;
+ }
+
+ .empty-title,
+ .empty-subtitle {
+ margin: $layout-spacing auto;
+ }
+
+ .empty-action {
+ margin-top: $layout-spacing-lg;
+ }
+}
diff --git a/themes/quark/scss/spectre/_filters.scss b/themes/quark/scss/spectre/_filters.scss
new file mode 100644
index 0000000..37ccc89
--- /dev/null
+++ b/themes/quark/scss/spectre/_filters.scss
@@ -0,0 +1,37 @@
+// Filters
+// The number of filter options
+$filter-number: 8 !default;
+
+%filter-checked-nav {
+ background: $primary-color;
+ color: $light-color;
+}
+
+%filter-checked-body {
+ display: none;
+}
+
+.filter {
+ .filter-nav {
+ margin: $layout-spacing 0;
+ }
+
+ .filter-body {
+ display: flex;
+ flex-wrap: wrap;
+ }
+
+ .filter-tag {
+ @for $i from 0 through ($filter-number) {
+ tag-#{$i}:checked ~ .filter-nav .chip[for="tag-#{$i}"] {
+ @extend %filter-checked-nav;
+ }
+ }
+
+ @for $i from 1 through ($filter-number) {
+ tag-#{$i}:checked ~ .filter-body .filter-item:not([data-tag~="tag-#{$i}"]) {
+ @extend %filter-checked-body;
+ }
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_forms.scss b/themes/quark/scss/spectre/_forms.scss
new file mode 100644
index 0000000..20a6b4f
--- /dev/null
+++ b/themes/quark/scss/spectre/_forms.scss
@@ -0,0 +1,555 @@
+// Forms
+.form-group {
+ &:not(:last-child) {
+ margin-bottom: $layout-spacing;
+ }
+}
+
+fieldset {
+ margin-bottom: $layout-spacing-lg;
+}
+
+legend {
+ font-size: $font-size-lg;
+ font-weight: 500;
+ margin-bottom: $layout-spacing-lg;
+}
+
+// Form element: Label
+.form-label {
+ display: block;
+ line-height: $line-height;
+ padding: $control-padding-y + $border-width 0;
+
+ &.label-sm {
+ font-size: $font-size-sm;
+ padding: $control-padding-y-sm + $border-width 0;
+ }
+
+ &.label-lg {
+ font-size: $font-size-lg;
+ padding: $control-padding-y-lg + $border-width 0;
+ }
+}
+
+// Form element: Input
+.form-input {
+ appearance: none;
+ background: $bg-color-light;
+ background-image: none;
+ border: $border-width solid $border-color-dark;
+ border-radius: $border-radius;
+ color: $body-font-color;
+ display: block;
+ font-size: $font-size;
+ height: $control-size;
+ line-height: $line-height;
+ max-width: 100%;
+ outline: none;
+ padding: $control-padding-y $control-padding-x;
+ position: relative;
+ transition: background .2s, border .2s, box-shadow .2s, color .2s;
+ width: 100%;
+ &:focus {
+ @include control-shadow();
+ border-color: $primary-color;
+ }
+ &::placeholder {
+ color: $gray-color;
+ }
+
+ // Input sizes
+ &.input-sm {
+ font-size: $font-size-sm;
+ height: $control-size-sm;
+ padding: $control-padding-y-sm $control-padding-x-sm;
+ }
+
+ &.input-lg {
+ font-size: $font-size-lg;
+ height: $control-size-lg;
+ padding: $control-padding-y-lg $control-padding-x-lg;
+ }
+
+ &.input-inline {
+ display: inline-block;
+ vertical-align: middle;
+ width: auto;
+ }
+
+ // Input types
+ &[type="file"] {
+ height: auto;
+ }
+}
+
+// Form element: Textarea
+textarea.form-input {
+ &,
+ &.input-lg,
+ &.input-sm {
+ height: auto;
+ }
+}
+
+// Form element: Input hint
+.form-input-hint {
+ color: $gray-color;
+ font-size: $font-size-sm;
+ margin-top: $unit-1;
+
+ .has-success &,
+ .is-success + & {
+ color: $success-color;
+ }
+
+ .has-error &,
+ .is-error + & {
+ color: $error-color;
+ }
+}
+
+// Form element: Select
+.form-select {
+ appearance: none;
+ border: $border-width solid $border-color-dark;
+ border-radius: $border-radius;
+ color: inherit;
+ font-size: $font-size;
+ height: $control-size;
+ line-height: $line-height;
+ outline: none;
+ padding: $control-padding-y $control-padding-x;
+ vertical-align: middle;
+ width: 100%;
+ background: $bg-color-light;
+ &:focus {
+ @include control-shadow();
+ border-color: $primary-color;
+ }
+ &::-ms-expand {
+ display: none;
+ }
+
+ // Select sizes
+ &.select-sm {
+ font-size: $font-size-sm;
+ height: $control-size-sm;
+ padding: $control-padding-y-sm ($control-icon-size + $control-padding-x-sm) $control-padding-y-sm $control-padding-x-sm;
+ }
+
+ &.select-lg {
+ font-size: $font-size-lg;
+ height: $control-size-lg;
+ padding: $control-padding-y-lg ($control-icon-size + $control-padding-x-lg) $control-padding-y-lg $control-padding-x-lg;
+ }
+
+ // Multiple select
+ &[size],
+ &[multiple] {
+ height: auto;
+ padding: $control-padding-y $control-padding-x;
+
+ option {
+ padding: $unit-h $unit-1;
+ }
+ }
+ &:not([multiple]):not([size]) {
+ background: $bg-color-light url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%204%205'%3E%3Cpath%20fill='%23667189'%20d='M2%200L0%202h4zm0%205L0%203h4z'/%3E%3C/svg%3E") no-repeat right .35rem center / .4rem .5rem;
+ padding-right: $control-icon-size + $control-padding-x;
+ }
+}
+
+// Form Icons
+.has-icon-left,
+.has-icon-right {
+ position: relative;
+
+ .form-icon {
+ height: $control-icon-size;
+ margin: 0 $control-padding-y;
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+ width: $control-icon-size;
+ z-index: $zindex-0 + 1;
+ }
+}
+
+.has-icon-left {
+ .form-icon {
+ left: $border-width;
+ }
+
+ .form-input {
+ padding-left: $control-icon-size + $control-padding-y * 2;
+ }
+}
+
+.has-icon-right {
+ .form-icon {
+ right: $border-width;
+ }
+
+ .form-input {
+ padding-right: $control-icon-size + $control-padding-y * 2;
+ }
+}
+
+// Form element: Checkbox and Radio
+.form-checkbox,
+.form-radio,
+.form-switch {
+ display: block;
+ line-height: $line-height;
+ margin: ($control-size - $control-size-sm) / 2 0;
+ min-height: $control-size-sm;
+ padding: (($control-size-sm - $line-height) / 2) $control-padding-x (($control-size-sm - $line-height) / 2) ($control-icon-size + $control-padding-x);
+ position: relative;
+
+ input {
+ clip: rect(0, 0, 0, 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ position: absolute;
+ width: 1px;
+ &:focus + .form-icon {
+ @include control-shadow();
+ border-color: $primary-color;
+ }
+ &:checked + .form-icon {
+ background: $primary-color;
+ border-color: $primary-color;
+ }
+ }
+
+ .form-icon {
+ border: $border-width solid $border-color-dark;
+ cursor: pointer;
+ display: inline-block;
+ position: absolute;
+ transition: background .2s, border .2s, box-shadow .2s, color .2s;
+ }
+
+ // Input checkbox, radio and switch sizes
+ &.input-sm {
+ font-size: $font-size-sm;
+ margin: 0;
+ }
+
+ &.input-lg {
+ font-size: $font-size-lg;
+ margin: ($control-size-lg - $control-size-sm) / 2 0;
+ }
+}
+
+.form-checkbox,
+.form-radio {
+ .form-icon {
+ background: $bg-color-light;
+ height: $control-icon-size;
+ left: 0;
+ top: ($control-size-sm - $control-icon-size) / 2;
+ width: $control-icon-size;
+ }
+
+ input {
+ &:active + .form-icon {
+ background: $bg-color-dark;
+ }
+ }
+}
+.form-checkbox {
+ .form-icon {
+ border-radius: $border-radius;
+ }
+
+ input {
+ &:checked + .form-icon {
+ &::before {
+ background-clip: padding-box;
+ border: $border-width-lg solid $light-color;
+ border-left-width: 0;
+ border-top-width: 0;
+ content: "";
+ height: 9px;
+ left: 50%;
+ margin-left: -3px;
+ margin-top: -6px;
+ position: absolute;
+ top: 50%;
+ transform: rotate(45deg);
+ width: 6px;
+ }
+ }
+ &:indeterminate + .form-icon {
+ background: $primary-color;
+ border-color: $primary-color;
+ &::before {
+ background: $bg-color-light;
+ content: "";
+ height: 2px;
+ left: 50%;
+ margin-left: -5px;
+ margin-top: -1px;
+ position: absolute;
+ top: 50%;
+ width: 10px;
+ }
+ }
+ }
+}
+.form-radio {
+ .form-icon {
+ border-radius: 50%;
+ }
+
+ input {
+ &:checked + .form-icon {
+ &::before {
+ background: $bg-color-light;
+ border-radius: 50%;
+ content: "";
+ height: 6px;
+ left: 50%;
+ position: absolute;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ width: 6px;
+ }
+ }
+ }
+}
+
+// Form element: Switch
+.form-switch {
+ padding-left: ($unit-8 + $control-padding-x);
+
+ .form-icon {
+ background: $gray-color;
+ background-clip: padding-box;
+ border-radius: $unit-2 + $border-width;
+ height: $unit-4 + $border-width * 2;
+ left: 0;
+ top: ($control-size-sm - $unit-4) / 2 - $border-width;
+ width: $unit-8;
+ &::before {
+ background: $bg-color-light;
+ border-radius: 50%;
+ content: "";
+ display: block;
+ height: $unit-4;
+ left: 0;
+ position: absolute;
+ top: 0;
+ transition: background .2s, border .2s, box-shadow .2s, color .2s, left .2s;
+ width: $unit-4;
+ }
+ }
+
+ input {
+ &:checked + .form-icon {
+ &::before {
+ left: 14px;
+ }
+ }
+ &:active + .form-icon {
+ &::before {
+ background: $bg-color;
+ }
+ }
+ }
+}
+
+// Form element: Input groups
+.input-group {
+ display: flex;
+
+ .input-group-addon {
+ background: $bg-color;
+ border: $border-width solid $border-color-dark;
+ border-radius: $border-radius;
+ line-height: $line-height;
+ padding: $control-padding-y $control-padding-x;
+ white-space: nowrap;
+
+ &.addon-sm {
+ font-size: $font-size-sm;
+ padding: $control-padding-y-sm $control-padding-x-sm;
+ }
+
+ &.addon-lg {
+ font-size: $font-size-lg;
+ padding: $control-padding-y-lg $control-padding-x-lg;
+ }
+ }
+
+ .form-input,
+ .form-select {
+ flex: 1 1 auto;
+ width: 1%;
+ }
+
+ .input-group-btn {
+ z-index: $zindex-0;
+ }
+
+ .form-input,
+ .form-select,
+ .input-group-addon,
+ .input-group-btn {
+ &:first-child:not(:last-child) {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+ }
+ &:not(:first-child):not(:last-child) {
+ border-radius: 0;
+ margin-left: -$border-width;
+ }
+ &:last-child:not(:first-child) {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+ margin-left: -$border-width;
+ }
+ &:focus {
+ z-index: $zindex-0 + 1;
+ }
+ }
+
+ .form-select {
+ width: auto;
+ }
+
+ &.input-inline {
+ display: inline-flex;
+ }
+}
+
+// Form validation states
+.form-input,
+.form-select {
+ .has-success &,
+ &.is-success {
+ background: lighten($success-color, 53%);
+ border-color: $success-color;
+ &:focus {
+ @include control-shadow($success-color);
+ }
+ }
+
+ .has-error &,
+ &.is-error {
+ background: lighten($error-color, 53%);
+ border-color: $error-color;
+ &:focus {
+ @include control-shadow($error-color);
+ }
+ }
+}
+
+.form-checkbox,
+.form-radio,
+.form-switch {
+ .has-error &,
+ &.is-error {
+ .form-icon {
+ border-color: $error-color;
+ }
+
+ input {
+ &:checked + .form-icon {
+ background: $error-color;
+ border-color: $error-color;
+ }
+
+ &:focus + .form-icon {
+ @include control-shadow($error-color);
+ border-color: $error-color;
+ }
+ }
+ }
+}
+
+.form-checkbox {
+ .has-error &,
+ &.is-error {
+ input {
+ &:indeterminate + .form-icon {
+ background: $error-color;
+ border-color: $error-color;
+ }
+ }
+ }
+}
+
+// validation based on :placeholder-shown (Edge doesn't support it yet)
+.form-input {
+ &:not(:placeholder-shown) {
+ &:invalid {
+ border-color: $error-color;
+ &:focus {
+ @include control-shadow($error-color);
+ background: lighten($error-color, 53%);
+ }
+
+ & + .form-input-hint {
+ color: $error-color;
+ }
+ }
+ }
+}
+
+// Form disabled and readonly
+.form-input,
+.form-select {
+ &:disabled,
+ &.disabled {
+ background-color: $bg-color-dark;
+ cursor: not-allowed;
+ opacity: .5;
+ }
+}
+
+.form-input {
+ &[readonly] {
+ background-color: $bg-color;
+ }
+}
+
+input {
+ &:disabled,
+ &.disabled {
+ & + .form-icon {
+ background: $bg-color-dark;
+ cursor: not-allowed;
+ opacity: .5;
+ }
+ }
+}
+
+.form-switch {
+ input {
+ &:disabled,
+ &.disabled {
+ & + .form-icon::before {
+ background: $bg-color-light;
+ }
+ }
+ }
+}
+
+// Form horizontal
+.form-horizontal {
+ padding: $layout-spacing 0;
+
+ .form-group {
+ display: flex;
+ flex-wrap: wrap;
+ }
+}
+
+// Form inline
+.form-inline {
+ display: inline-block;
+}
diff --git a/themes/quark/scss/spectre/_hero.scss b/themes/quark/scss/spectre/_hero.scss
new file mode 100644
index 0000000..0044461
--- /dev/null
+++ b/themes/quark/scss/spectre/_hero.scss
@@ -0,0 +1,22 @@
+// Hero
+.hero {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ padding-bottom: 4rem;
+ padding-top: 4rem;
+
+ &.hero-sm {
+ padding-bottom: 2rem;
+ padding-top: 2rem;
+ }
+
+ &.hero-lg {
+ padding-bottom: 8rem;
+ padding-top: 8rem;
+ }
+
+ .hero-body {
+ padding: $layout-spacing;
+ }
+}
\ No newline at end of file
diff --git a/themes/quark/scss/spectre/_icons.scss b/themes/quark/scss/spectre/_icons.scss
new file mode 100644
index 0000000..4f3c5ce
--- /dev/null
+++ b/themes/quark/scss/spectre/_icons.scss
@@ -0,0 +1,5 @@
+// CSS Icons
+@import "icons/icons-core";
+@import "icons/icons-navigation";
+@import "icons/icons-action";
+@import "icons/icons-object";
\ No newline at end of file
diff --git a/themes/quark/scss/spectre/_labels.scss b/themes/quark/scss/spectre/_labels.scss
new file mode 100644
index 0000000..ca693cd
--- /dev/null
+++ b/themes/quark/scss/spectre/_labels.scss
@@ -0,0 +1,34 @@
+// Labels
+.label {
+ @include label-base();
+ @include label-variant(lighten($body-font-color, 5%), $bg-color-dark);
+ display: inline-block;
+
+ // Label rounded
+ &.label-rounded {
+ border-radius: 5rem;
+ padding-left: .4rem;
+ padding-right: .4rem;
+ }
+
+ // Label colors
+ &.label-primary {
+ @include label-variant($light-color, $primary-color);
+ }
+
+ &.label-secondary {
+ @include label-variant($primary-color, $secondary-color);
+ }
+
+ &.label-success {
+ @include label-variant($light-color, $success-color);
+ }
+
+ &.label-warning {
+ @include label-variant($light-color, $warning-color);
+ }
+
+ &.label-error {
+ @include label-variant($light-color, $error-color);
+ }
+}
diff --git a/themes/quark/scss/spectre/_layout.scss b/themes/quark/scss/spectre/_layout.scss
new file mode 100644
index 0000000..1f6b77c
--- /dev/null
+++ b/themes/quark/scss/spectre/_layout.scss
@@ -0,0 +1,444 @@
+// Layout
+.container {
+ margin-left: auto;
+ margin-right: auto;
+ padding-left: $layout-spacing;
+ padding-right: $layout-spacing;
+ width: 100%;
+
+ $grid-spacing: ($layout-spacing / ($layout-spacing * 0 + 1)) * $html-font-size;
+
+ &.grid-xl {
+ max-width: $grid-spacing * 2 + $size-xl;
+ }
+
+ &.grid-lg {
+ max-width: $grid-spacing * 2 + $size-lg;
+ }
+
+ &.grid-md {
+ max-width: $grid-spacing * 2 + $size-md;
+ }
+
+ &.grid-sm {
+ max-width: $grid-spacing * 2 + $size-sm;
+ }
+
+ &.grid-xs {
+ max-width: $grid-spacing * 2 + $size-xs;
+ }
+}
+
+// Responsive breakpoint system
+.show-xs,
+.show-sm,
+.show-md,
+.show-lg,
+.show-xl {
+ display: none !important;
+}
+
+// Responsive grid system
+.columns {
+ display: flex;
+ flex-wrap: wrap;
+ margin-left: -$layout-spacing;
+ margin-right: -$layout-spacing;
+
+ &.col-gapless {
+ margin-left: 0;
+ margin-right: 0;
+
+ & > .column {
+ padding-left: 0;
+ padding-right: 0;
+ }
+ }
+ &.col-oneline {
+ flex-wrap: nowrap;
+ overflow-x: auto;
+ }
+}
+.column {
+ flex: 1;
+ max-width: 100%;
+ padding-left: $layout-spacing;
+ padding-right: $layout-spacing;
+
+ &.col-12,
+ &.col-11,
+ &.col-10,
+ &.col-9,
+ &.col-8,
+ &.col-7,
+ &.col-6,
+ &.col-5,
+ &.col-4,
+ &.col-3,
+ &.col-2,
+ &.col-1,
+ &.col-auto {
+ flex: none;
+ }
+}
+.col-12 {
+ width: 100%;
+}
+.col-11 {
+ width: 91.66666667%;
+}
+.col-10 {
+ width: 83.33333333%;
+}
+.col-9 {
+ width: 75%;
+}
+.col-8 {
+ width: 66.66666667%;
+}
+.col-7 {
+ width: 58.33333333%;
+}
+.col-6 {
+ width: 50%;
+}
+.col-5 {
+ width: 41.66666667%;
+}
+.col-4 {
+ width: 33.33333333%;
+}
+.col-3 {
+ width: 25%;
+}
+.col-2 {
+ width: 16.66666667%;
+}
+.col-1 {
+ width: 8.33333333%;
+}
+.col-auto {
+ flex: 0 0 auto;
+ max-width: none;
+ width: auto;
+}
+.col-mx-auto {
+ margin-left: auto;
+ margin-right: auto;
+}
+.col-ml-auto {
+ margin-left: auto;
+}
+.col-mr-auto {
+ margin-right: auto;
+}
+@media (max-width: $size-xl) {
+ .col-xl-12,
+ .col-xl-11,
+ .col-xl-10,
+ .col-xl-9,
+ .col-xl-8,
+ .col-xl-7,
+ .col-xl-6,
+ .col-xl-5,
+ .col-xl-4,
+ .col-xl-3,
+ .col-xl-2,
+ .col-xl-1,
+ .col-xl-auto {
+ flex: none;
+ }
+ .col-xl-12 {
+ width: 100%;
+ }
+ .col-xl-11 {
+ width: 91.66666667%;
+ }
+ .col-xl-10 {
+ width: 83.33333333%;
+ }
+ .col-xl-9 {
+ width: 75%;
+ }
+ .col-xl-8 {
+ width: 66.66666667%;
+ }
+ .col-xl-7 {
+ width: 58.33333333%;
+ }
+ .col-xl-6 {
+ width: 50%;
+ }
+ .col-xl-5 {
+ width: 41.66666667%;
+ }
+ .col-xl-4 {
+ width: 33.33333333%;
+ }
+ .col-xl-3 {
+ width: 25%;
+ }
+ .col-xl-2 {
+ width: 16.66666667%;
+ }
+ .col-xl-1 {
+ width: 8.33333333%;
+ }
+ .col-xl-auto {
+ width: auto;
+ }
+ .hide-xl {
+ display: none !important;
+ }
+ .show-xl {
+ display: block !important;
+ }
+}
+@media (max-width: $size-lg) {
+ .col-lg-12,
+ .col-lg-11,
+ .col-lg-10,
+ .col-lg-9,
+ .col-lg-8,
+ .col-lg-7,
+ .col-lg-6,
+ .col-lg-5,
+ .col-lg-4,
+ .col-lg-3,
+ .col-lg-2,
+ .col-lg-1,
+ .col-lg-auto {
+ flex: none;
+ }
+ .col-lg-12 {
+ width: 100%;
+ }
+ .col-lg-11 {
+ width: 91.66666667%;
+ }
+ .col-lg-10 {
+ width: 83.33333333%;
+ }
+ .col-lg-9 {
+ width: 75%;
+ }
+ .col-lg-8 {
+ width: 66.66666667%;
+ }
+ .col-lg-7 {
+ width: 58.33333333%;
+ }
+ .col-lg-6 {
+ width: 50%;
+ }
+ .col-lg-5 {
+ width: 41.66666667%;
+ }
+ .col-lg-4 {
+ width: 33.33333333%;
+ }
+ .col-lg-3 {
+ width: 25%;
+ }
+ .col-lg-2 {
+ width: 16.66666667%;
+ }
+ .col-lg-1 {
+ width: 8.33333333%;
+ }
+ .col-lg-auto {
+ width: auto;
+ }
+ .hide-lg {
+ display: none !important;
+ }
+ .show-lg {
+ display: block !important;
+ }
+}
+@media (max-width: $size-md) {
+ .col-md-12,
+ .col-md-11,
+ .col-md-10,
+ .col-md-9,
+ .col-md-8,
+ .col-md-7,
+ .col-md-6,
+ .col-md-5,
+ .col-md-4,
+ .col-md-3,
+ .col-md-2,
+ .col-md-1,
+ .col-md-auto {
+ flex: none;
+ }
+ .col-md-12 {
+ width: 100%;
+ }
+ .col-md-11 {
+ width: 91.66666667%;
+ }
+ .col-md-10 {
+ width: 83.33333333%;
+ }
+ .col-md-9 {
+ width: 75%;
+ }
+ .col-md-8 {
+ width: 66.66666667%;
+ }
+ .col-md-7 {
+ width: 58.33333333%;
+ }
+ .col-md-6 {
+ width: 50%;
+ }
+ .col-md-5 {
+ width: 41.66666667%;
+ }
+ .col-md-4 {
+ width: 33.33333333%;
+ }
+ .col-md-3 {
+ width: 25%;
+ }
+ .col-md-2 {
+ width: 16.66666667%;
+ }
+ .col-md-1 {
+ width: 8.33333333%;
+ }
+ .col-md-auto {
+ width: auto;
+ }
+ .hide-md {
+ display: none !important;
+ }
+ .show-md {
+ display: block !important;
+ }
+}
+@media (max-width: $size-sm) {
+ .col-sm-12,
+ .col-sm-11,
+ .col-sm-10,
+ .col-sm-9,
+ .col-sm-8,
+ .col-sm-7,
+ .col-sm-6,
+ .col-sm-5,
+ .col-sm-4,
+ .col-sm-3,
+ .col-sm-2,
+ .col-sm-1,
+ .col-sm-auto {
+ flex: none;
+ }
+ .col-sm-12 {
+ width: 100%;
+ }
+ .col-sm-11 {
+ width: 91.66666667%;
+ }
+ .col-sm-10 {
+ width: 83.33333333%;
+ }
+ .col-sm-9 {
+ width: 75%;
+ }
+ .col-sm-8 {
+ width: 66.66666667%;
+ }
+ .col-sm-7 {
+ width: 58.33333333%;
+ }
+ .col-sm-6 {
+ width: 50%;
+ }
+ .col-sm-5 {
+ width: 41.66666667%;
+ }
+ .col-sm-4 {
+ width: 33.33333333%;
+ }
+ .col-sm-3 {
+ width: 25%;
+ }
+ .col-sm-2 {
+ width: 16.66666667%;
+ }
+ .col-sm-1 {
+ width: 8.33333333%;
+ }
+ .col-sm-auto {
+ width: auto;
+ }
+ .hide-sm {
+ display: none !important;
+ }
+ .show-sm {
+ display: block !important;
+ }
+}
+@media (max-width: $size-xs) {
+ .col-xs-12,
+ .col-xs-11,
+ .col-xs-10,
+ .col-xs-9,
+ .col-xs-8,
+ .col-xs-7,
+ .col-xs-6,
+ .col-xs-5,
+ .col-xs-4,
+ .col-xs-3,
+ .col-xs-2,
+ .col-xs-1,
+ .col-xs-auto {
+ flex: none;
+ }
+ .col-xs-12 {
+ width: 100%;
+ }
+ .col-xs-11 {
+ width: 91.66666667%;
+ }
+ .col-xs-10 {
+ width: 83.33333333%;
+ }
+ .col-xs-9 {
+ width: 75%;
+ }
+ .col-xs-8 {
+ width: 66.66666667%;
+ }
+ .col-xs-7 {
+ width: 58.33333333%;
+ }
+ .col-xs-6 {
+ width: 50%;
+ }
+ .col-xs-5 {
+ width: 41.66666667%;
+ }
+ .col-xs-4 {
+ width: 33.33333333%;
+ }
+ .col-xs-3 {
+ width: 25%;
+ }
+ .col-xs-2 {
+ width: 16.66666667%;
+ }
+ .col-xs-1 {
+ width: 8.33333333%;
+ }
+ .col-xs-auto {
+ width: auto;
+ }
+ .hide-xs {
+ display: none !important;
+ }
+ .show-xs {
+ display: block !important;
+ }
+}
diff --git a/themes/quark/scss/spectre/_media.scss b/themes/quark/scss/spectre/_media.scss
new file mode 100644
index 0000000..4029e4c
--- /dev/null
+++ b/themes/quark/scss/spectre/_media.scss
@@ -0,0 +1,75 @@
+// Media
+// Image responsive
+.img-responsive {
+ display: block;
+ height: auto;
+ max-width: 100%;
+}
+
+// object-fit support is coming to Microsoft Edge
+// https://developer.microsoft.com/en-us/microsoft-edge/platform/status/objectfitandobjectposition/
+.img-fit-cover {
+ object-fit: cover;
+}
+
+.img-fit-contain {
+ object-fit: contain;
+}
+
+// Video responsive
+.video-responsive {
+ display: block;
+ overflow: hidden;
+ padding: 0;
+ position: relative;
+ width: 100%;
+ &::before {
+ content: "";
+ display: block;
+ padding-bottom: 56.25%; // Default ratio 16:9, you can calculate this value by dividing 9 by 16
+ }
+
+ iframe,
+ object,
+ embed {
+ border: 0;
+ bottom: 0;
+ height: 100%;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 100%;
+ }
+}
+
+video.video-responsive {
+ height: auto;
+ max-width: 100%;
+
+ &::before {
+ content: none;
+ }
+}
+
+.video-responsive-4-3 {
+ &::before {
+ padding-bottom: 75%; // Ratio 4:3
+ }
+}
+
+.video-responsive-1-1 {
+ &::before {
+ padding-bottom: 100%; // Ratio 1:1
+ }
+}
+
+// Figure
+.figure {
+ margin: 0 0 $layout-spacing 0;
+
+ .figure-caption {
+ color: $gray-color-dark;
+ margin-top: $layout-spacing;
+ }
+}
diff --git a/themes/quark/scss/spectre/_menus.scss b/themes/quark/scss/spectre/_menus.scss
new file mode 100644
index 0000000..411cada
--- /dev/null
+++ b/themes/quark/scss/spectre/_menus.scss
@@ -0,0 +1,66 @@
+// Menus
+.menu {
+ @include shadow-variant(.05rem);
+ background: $bg-color-light;
+ border-radius: $border-radius;
+ list-style: none;
+ margin: 0;
+ min-width: $control-width-xs;
+ padding: $unit-2;
+ transform: translateY($layout-spacing-sm);
+ z-index: $zindex-3;
+
+ &.menu-nav {
+ background: transparent;
+ box-shadow: none;
+ }
+
+ .menu-item {
+ margin-top: 0;
+ padding: 0 $unit-2;
+ position: relative;
+ text-decoration: none;
+
+ & > a {
+ border-radius: $border-radius;
+ color: inherit;
+ display: block;
+ margin: 0 (-$unit-2);
+ padding: $unit-1 $unit-2;
+ text-decoration: none;
+ &:focus,
+ &:hover {
+ background: $secondary-color;
+ color: $primary-color;
+ }
+ &:active,
+ &.active {
+ background: $secondary-color;
+ color: $primary-color;
+ }
+ }
+
+ .form-checkbox,
+ .form-radio,
+ .form-switch {
+ margin: $unit-h 0;
+ }
+
+ & + .menu-item {
+ margin-top: $unit-1;
+ }
+ }
+
+ .menu-badge {
+ align-items: center;
+ display: flex;
+ height: 100%;
+ position: absolute;
+ right: 0;
+ top: 0;
+
+ .label {
+ margin-right: $unit-2;
+ }
+ }
+}
\ No newline at end of file
diff --git a/themes/quark/scss/spectre/_meters.scss b/themes/quark/scss/spectre/_meters.scss
new file mode 100644
index 0000000..9fd98b0
--- /dev/null
+++ b/themes/quark/scss/spectre/_meters.scss
@@ -0,0 +1,57 @@
+// Meters
+// Credit: https://css-tricks.com/html5-meter-element/
+.meter {
+ appearance: none;
+ background: $bg-color;
+ border: 0;
+ border-radius: $border-radius;
+ display: block;
+ width: 100%;
+ height: $unit-4;
+
+ &::-webkit-meter-inner-element {
+ display: block;
+ }
+
+ &::-webkit-meter-bar,
+ &::-webkit-meter-optimum-value,
+ &::-webkit-meter-suboptimum-value,
+ &::-webkit-meter-even-less-good-value {
+ border-radius: $border-radius;
+ }
+
+ &::-webkit-meter-bar {
+ background: $bg-color;
+ }
+
+ &::-webkit-meter-optimum-value {
+ background: $success-color;
+ }
+
+ &::-webkit-meter-suboptimum-value {
+ background: $warning-color;
+ }
+
+ &::-webkit-meter-even-less-good-value {
+ background: $error-color;
+ }
+
+ &::-moz-meter-bar,
+ &:-moz-meter-optimum,
+ &:-moz-meter-sub-optimum,
+ &:-moz-meter-sub-sub-optimum {
+ border-radius: $border-radius;
+ }
+
+ &:-moz-meter-optimum::-moz-meter-bar {
+ background: $success-color;
+ }
+
+ &:-moz-meter-sub-optimum::-moz-meter-bar {
+ background: $warning-color;
+ }
+
+ &:-moz-meter-sub-sub-optimum::-moz-meter-bar {
+ background: $error-color;
+ }
+}
diff --git a/themes/quark/scss/spectre/_mixins.scss b/themes/quark/scss/spectre/_mixins.scss
new file mode 100644
index 0000000..d3a28d5
--- /dev/null
+++ b/themes/quark/scss/spectre/_mixins.scss
@@ -0,0 +1,10 @@
+// Mixins
+@import "mixins/avatar";
+@import "mixins/button";
+@import "mixins/clearfix";
+@import "mixins/color";
+@import "mixins/label";
+@import "mixins/position";
+@import "mixins/shadow";
+@import "mixins/text";
+@import "mixins/toast";
\ No newline at end of file
diff --git a/themes/quark/scss/spectre/_modals.scss b/themes/quark/scss/spectre/_modals.scss
new file mode 100644
index 0000000..a7b3f10
--- /dev/null
+++ b/themes/quark/scss/spectre/_modals.scss
@@ -0,0 +1,87 @@
+// Modals
+.modal {
+ align-items: center;
+ bottom: 0;
+ display: none;
+ justify-content: center;
+ left: 0;
+ opacity: 0;
+ overflow: hidden;
+ padding: $layout-spacing;
+ position: fixed;
+ right: 0;
+ top: 0;
+
+ &:target,
+ &.active {
+ display: flex;
+ opacity: 1;
+ z-index: $zindex-4;
+
+ .modal-overlay {
+ background: rgba($bg-color, .75);
+ bottom: 0;
+ cursor: default;
+ display: block;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ }
+
+ .modal-container {
+ animation: slide-down .2s ease 1;
+ z-index: $zindex-0;
+ }
+ }
+
+ &.modal-sm {
+ .modal-container {
+ max-width: $control-width-sm;
+ padding: 0 $unit-2;
+ }
+ }
+
+ &.modal-lg {
+ .modal-overlay {
+ background: $bg-color-light;
+ }
+
+ .modal-container {
+ box-shadow: none;
+ max-width: $control-width-lg;
+ }
+ }
+}
+
+.modal-container {
+ @include shadow-variant(.2rem);
+ background: $bg-color-light;
+ border-radius: $border-radius;
+ display: flex;
+ flex-direction: column;
+ max-height: 75vh;
+ max-width: $control-width-md;
+ padding: 0 $unit-4;
+ width: 100%;
+
+ &.modal-fullheight {
+ max-height: 100vh;
+ }
+
+ .modal-header {
+ color: $dark-color;
+ padding: $unit-4;
+ }
+
+ .modal-body {
+ overflow-y: auto;
+ padding: $unit-4;
+ position: relative;
+ }
+
+ .modal-footer {
+ padding: $unit-4;
+ text-align: right;
+ }
+}
diff --git a/themes/quark/scss/spectre/_navbar.scss b/themes/quark/scss/spectre/_navbar.scss
new file mode 100644
index 0000000..1164296
--- /dev/null
+++ b/themes/quark/scss/spectre/_navbar.scss
@@ -0,0 +1,28 @@
+// Navbar
+.navbar {
+ align-items: stretch;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+
+ .navbar-section {
+ align-items: center;
+ display: flex;
+ flex: 1 0 0;
+
+ &:not(:first-child):last-child {
+ justify-content: flex-end;
+ }
+ }
+
+ .navbar-center {
+ align-items: center;
+ display: flex;
+ flex: 0 0 auto;
+ }
+
+ .navbar-brand {
+ font-size: $font-size-lg;
+ text-decoration: none;
+ }
+}
diff --git a/themes/quark/scss/spectre/_navs.scss b/themes/quark/scss/spectre/_navs.scss
new file mode 100644
index 0000000..4bedc27
--- /dev/null
+++ b/themes/quark/scss/spectre/_navs.scss
@@ -0,0 +1,34 @@
+// Navs
+.nav {
+ display: flex;
+ flex-direction: column;
+ list-style: none;
+ margin: $unit-1 0;
+
+ .nav-item {
+ a {
+ color: $gray-color-dark;
+ padding: $unit-1 $unit-2;
+ text-decoration: none;
+ &:focus,
+ &:hover {
+ color: $primary-color;
+ }
+ }
+ &.active {
+ & > a {
+ color: darken($gray-color-dark, 10%);
+ font-weight: bold;
+ &:focus,
+ &:hover {
+ color: $primary-color;
+ }
+ }
+ }
+ }
+
+ & .nav {
+ margin-bottom: $unit-2;
+ margin-left: $unit-4;
+ }
+}
diff --git a/themes/quark/scss/spectre/_normalize.scss b/themes/quark/scss/spectre/_normalize.scss
new file mode 100644
index 0000000..a098a84
--- /dev/null
+++ b/themes/quark/scss/spectre/_normalize.scss
@@ -0,0 +1,446 @@
+/* Manually forked from Normalize.css */
+/* normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */
+
+/**
+ * 1. Change the default font family in all browsers (opinionated).
+ * 2. Correct the line height in all browsers.
+ * 3. Prevent adjustments of font size after orientation changes in
+ * IE on Windows Phone and in iOS.
+ */
+
+/* Document
+ ========================================================================== */
+
+html {
+ font-family: sans-serif; /* 1 */
+ -ms-text-size-adjust: 100%; /* 3 */
+ -webkit-text-size-adjust: 100%; /* 3 */
+}
+
+/* Sections
+ ========================================================================== */
+
+/**
+ * Remove the margin in all browsers (opinionated).
+ */
+
+body {
+ margin: 0;
+}
+
+/**
+ * Add the correct display in IE 9-.
+ */
+
+article,
+aside,
+footer,
+header,
+nav,
+section {
+ display: block;
+}
+
+/**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 9-.
+ * 1. Add the correct display in IE.
+ */
+
+figcaption,
+figure,
+main { /* 1 */
+ display: block;
+}
+
+/**
+ * Add the correct margin in IE 8 (removed).
+ */
+
+/**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
+ */
+
+hr {
+ box-sizing: content-box; /* 1 */
+ height: 0; /* 1 */
+ overflow: visible; /* 2 */
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers. (removed)
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * 1. Remove the gray background on active links in IE 10.
+ * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
+ */
+
+a {
+ background-color: transparent; /* 1 */
+ -webkit-text-decoration-skip: objects; /* 2 */
+}
+
+/**
+ * Remove the outline on focused links when they are also active or hovered
+ * in all browsers (opinionated).
+ */
+
+a:active,
+a:hover {
+ outline-width: 0;
+}
+
+/**
+ * Modify default styling of address.
+ */
+
+address {
+ font-style: normal;
+}
+
+/**
+ * 1. Remove the bottom border in Firefox 39-.
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. (removed)
+ */
+
+/**
+ * Prevent the duplicate application of `bolder` by the next rule in Safari 6.
+ */
+
+b,
+strong {
+ font-weight: inherit;
+}
+
+/**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+ font-family: $mono-font-family; /* 1 (changed) */
+ font-size: 1em; /* 2 */
+}
+
+/**
+ * Add the correct font style in Android 4.3-.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Add the correct background and color in IE 9-. (Removed)
+ */
+
+/**
+ * Add the correct font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+ font-weight: 400; /* (added) */
+}
+
+/**
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 9-.
+ */
+
+audio,
+video {
+ display: inline-block;
+}
+
+/**
+ * Add the correct display in iOS 4-7.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Remove the border on images inside links in IE 10-.
+ */
+
+img {
+ border-style: none;
+}
+
+/**
+ * Hide the overflow in IE.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * 1. Change the font styles in all browsers (opinionated).
+ * 2. Remove the margin in Firefox and Safari.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit; /* 1 (changed) */
+ font-size: inherit; /* 1 (changed) */
+ line-height: inherit; /* 1 (changed) */
+ margin: 0; /* 2 */
+}
+
+/**
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
+ */
+
+button,
+input { /* 1 */
+ overflow: visible;
+}
+
+/**
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritance of text transform in Firefox.
+ */
+
+button,
+select { /* 1 */
+ text-transform: none;
+}
+
+/**
+ * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
+ * controls in Android 4.
+ * 2. Correct the inability to style clickable types in iOS and Safari.
+ */
+
+button,
+html [type="button"], /* 1 */
+[type="reset"],
+[type="submit"] {
+ -webkit-appearance: button; /* 2 */
+}
+
+/**
+ * Remove the inner border and padding in Firefox.
+ */
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+
+/**
+ * Restore the focus styles unset by the previous rule (removed).
+ */
+
+
+/**
+ * Change the border, margin, and padding in all browsers (opinionated) (changed).
+ */
+
+fieldset {
+ border: 0;
+ margin: 0;
+ padding: 0;
+}
+
+/**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ * `fieldset` elements in all browsers.
+ */
+
+legend {
+ box-sizing: border-box; /* 1 */
+ color: inherit; /* 2 */
+ display: table; /* 1 */
+ max-width: 100%; /* 1 */
+ padding: 0; /* 3 */
+ white-space: normal; /* 1 */
+}
+
+/**
+ * 1. Add the correct display in IE 9-.
+ * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+
+progress {
+ display: inline-block; /* 1 */
+ vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Remove the default vertical scrollbar in IE.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * 1. Add the correct box sizing in IE 10-.
+ * 2. Remove the padding in IE 10-.
+ */
+
+[type="checkbox"],
+[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+
+[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ outline-offset: -2px; /* 2 */
+}
+
+/**
+ * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
+ */
+
+[type="search"]::-webkit-search-cancel-button,
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button; /* 1 */
+ font: inherit; /* 2 */
+}
+
+/* Interactive
+ ========================================================================== */
+
+/*
+ * Add the correct display in IE 9-.
+ * 1. Add the correct display in Edge, IE, and Firefox.
+ */
+
+details, /* 1 */
+menu {
+ display: block;
+}
+
+/*
+ * Add the correct display in all browsers.
+ */
+
+summary {
+ display: list-item;
+ outline: none;
+}
+
+/* Scripting
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 9-.
+ */
+
+canvas {
+ display: inline-block;
+}
+
+/**
+ * Add the correct display in IE.
+ */
+
+template {
+ display: none;
+}
+
+/* Hidden
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 10-.
+ */
+
+[hidden] {
+ display: none;
+}
diff --git a/themes/quark/scss/spectre/_off-canvas.scss b/themes/quark/scss/spectre/_off-canvas.scss
new file mode 100644
index 0000000..f3b8b9f
--- /dev/null
+++ b/themes/quark/scss/spectre/_off-canvas.scss
@@ -0,0 +1,95 @@
+// Off canvas menus
+$off-canvas-breakpoint: $size-lg !default;
+
+.off-canvas {
+ display: flex;
+ flex-flow: nowrap;
+ height: 100%;
+ position: relative;
+ width: 100%;
+
+ .off-canvas-toggle {
+ display: block;
+ position: absolute;
+ top: $layout-spacing;
+ transition: none;
+ z-index: $zindex-0;
+ @if $rtl == true {
+ right: $layout-spacing;
+ } @else {
+ left: $layout-spacing;
+ }
+ }
+
+ .off-canvas-sidebar {
+ background: $bg-color;
+ bottom: 0;
+ min-width: 10rem;
+ overflow-y: auto;
+ position: fixed;
+ top: 0;
+ transition: transform .25s;
+ z-index: $zindex-2;
+ @if $rtl == true {
+ right: 0;
+ transform: translateX(100%);
+ } @else {
+ left: 0;
+ transform: translateX(-100%);
+ }
+ }
+
+ .off-canvas-content {
+ flex: 1 1 auto;
+ height: 100%;
+ padding: $layout-spacing $layout-spacing $layout-spacing 4rem;
+ }
+
+ .off-canvas-overlay {
+ background: rgba($dark-color, .1);
+ border-color: transparent;
+ border-radius: 0;
+ bottom: 0;
+ display: none;
+ height: 100%;
+ left: 0;
+ position: fixed;
+ right: 0;
+ top: 0;
+ width: 100%;
+ }
+
+ .off-canvas-sidebar {
+ &:target,
+ &.active {
+ transform: translateX(0);
+ }
+
+ &:target ~ .off-canvas-overlay,
+ &.active ~ .off-canvas-overlay {
+ display: block;
+ z-index: $zindex-1;
+ }
+ }
+}
+
+// Responsive layout
+@media (min-width: $off-canvas-breakpoint) {
+ .off-canvas {
+ &.off-canvas-sidebar-show {
+ .off-canvas-toggle {
+ display: none;
+ }
+
+ .off-canvas-sidebar {
+ flex: 0 0 auto;
+ position: relative;
+ transform: none;
+ }
+
+ .off-canvas-overlay {
+ display: none !important;
+ }
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_pagination.scss b/themes/quark/scss/spectre/_pagination.scss
new file mode 100644
index 0000000..4c0e011
--- /dev/null
+++ b/themes/quark/scss/spectre/_pagination.scss
@@ -0,0 +1,60 @@
+// Pagination
+.pagination {
+ display: flex;
+ list-style: none;
+ margin: $unit-1 0;
+ padding: $unit-1 0;
+
+ .page-item {
+ margin: $unit-1 $unit-o;
+
+ span {
+ display: inline-block;
+ padding: $unit-1 $unit-1;
+ }
+
+ a {
+ border-radius: $border-radius;
+ display: inline-block;
+ padding: $unit-1 $unit-2;
+ text-decoration: none;
+ &:focus,
+ &:hover {
+ color: $primary-color;
+ }
+ }
+
+ &.disabled {
+ a {
+ cursor: default;
+ opacity: .5;
+ pointer-events: none;
+ }
+ }
+
+ &.active {
+ a {
+ background: $primary-color;
+ color: $light-color;
+ }
+ }
+
+ &.page-prev,
+ &.page-next {
+ flex: 1 0 50%;
+ }
+
+ &.page-next {
+ text-align: right;
+ }
+
+ .page-item-title {
+ margin: 0;
+ }
+
+ .page-item-subtitle {
+ margin: 0;
+ opacity: .5;
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_panels.scss b/themes/quark/scss/spectre/_panels.scss
new file mode 100644
index 0000000..386f96e
--- /dev/null
+++ b/themes/quark/scss/spectre/_panels.scss
@@ -0,0 +1,23 @@
+// Panels
+.panel {
+ border: $border-width solid $border-color;
+ border-radius: $border-radius;
+ display: flex;
+ flex-direction: column;
+
+ .panel-header,
+ .panel-footer {
+ flex: 0 0 auto;
+ padding: $layout-spacing-lg;
+ }
+
+ .panel-nav {
+ flex: 0 0 auto;
+ }
+
+ .panel-body {
+ flex: 1 1 auto;
+ overflow-y: auto;
+ padding: 0 $layout-spacing-lg;
+ }
+}
diff --git a/themes/quark/scss/spectre/_parallax.scss b/themes/quark/scss/spectre/_parallax.scss
new file mode 100644
index 0000000..ea244e5
--- /dev/null
+++ b/themes/quark/scss/spectre/_parallax.scss
@@ -0,0 +1,135 @@
+// Parallax
+$parallax-deg: 3deg !default;
+$parallax-offset: 4.5px !default;
+$parallax-offset-z: 50px !default;
+$parallax-perspective: 1000px !default;
+$parallax-scale: .95 !default;
+$parallax-fade-color: rgba(255, 255, 255, .35) !default;
+
+// Mixin: Parallax direction
+@mixin parallax-dir() {
+ height: 50%;
+ outline: none;
+ position: absolute;
+ width: 50%;
+ z-index: $zindex-1;
+}
+
+.parallax {
+ display: block;
+ height: auto;
+ position: relative;
+ width: auto;
+
+ .parallax-content {
+ @include shadow-variant(1rem);
+ height: auto;
+ transform: perspective($parallax-perspective);
+ transform-style: preserve-3d;
+ transition: all .4s ease;
+ width: 100%;
+
+ &::before {
+ content: "";
+ display: block;
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+ }
+
+ .parallax-front {
+ align-items: center;
+ color: $light-color;
+ display: flex;
+ height: 100%;
+ justify-content: center;
+ left: 0;
+ position: absolute;
+ text-align: center;
+ text-shadow: 0 0 20px rgba($dark-color, .75);
+ top: 0;
+ transform: translateZ($parallax-offset-z) scale($parallax-scale);
+ transition: transform .4s;
+ width: 100%;
+ z-index: $zindex-0;
+ }
+
+ .parallax-top-left {
+ @include parallax-dir();
+ left: 0;
+ top: 0;
+
+ &:focus ~ .parallax-content,
+ &:hover ~ .parallax-content {
+ transform: perspective($parallax-perspective) rotateX($parallax-deg) rotateY(-$parallax-deg);
+
+ &::before {
+ background: linear-gradient(135deg, $parallax-fade-color 0%, transparent 50%);
+ }
+
+ .parallax-front {
+ transform: translate3d($parallax-offset, $parallax-offset, $parallax-offset-z) scale($parallax-scale);
+ }
+ }
+ }
+
+ .parallax-top-right {
+ @include parallax-dir();
+ right: 0;
+ top: 0;
+
+ &:focus ~ .parallax-content,
+ &:hover ~ .parallax-content {
+ transform: perspective($parallax-perspective) rotateX($parallax-deg) rotateY($parallax-deg);
+
+ &::before {
+ background: linear-gradient(-135deg, $parallax-fade-color 0%, transparent 50%);
+ }
+
+ .parallax-front {
+ transform: translate3d(-$parallax-offset, $parallax-offset, $parallax-offset-z) scale($parallax-scale);
+ }
+ }
+ }
+
+ .parallax-bottom-left {
+ @include parallax-dir();
+ bottom: 0;
+ left: 0;
+
+ &:focus ~ .parallax-content,
+ &:hover ~ .parallax-content {
+ transform: perspective($parallax-perspective) rotateX(-$parallax-deg) rotateY(-$parallax-deg);
+
+ &::before {
+ background: linear-gradient(45deg, $parallax-fade-color 0%, transparent 50%);
+ }
+
+ .parallax-front {
+ transform: translate3d($parallax-offset, -$parallax-offset, $parallax-offset-z) scale($parallax-scale);
+ }
+ }
+ }
+
+ .parallax-bottom-right {
+ @include parallax-dir();
+ bottom: 0;
+ right: 0;
+
+ &:focus ~ .parallax-content,
+ &:hover ~ .parallax-content {
+ transform: perspective($parallax-perspective) rotateX(-$parallax-deg) rotateY($parallax-deg);
+
+ &::before {
+ background: linear-gradient(-45deg, $parallax-fade-color 0%, transparent 50%);
+ }
+
+ .parallax-front {
+ transform: translate3d(-$parallax-offset, -$parallax-offset, $parallax-offset-z) scale($parallax-scale);
+ }
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_popovers.scss b/themes/quark/scss/spectre/_popovers.scss
new file mode 100644
index 0000000..35b6bcd
--- /dev/null
+++ b/themes/quark/scss/spectre/_popovers.scss
@@ -0,0 +1,65 @@
+// Popovers
+.popover {
+ display: inline-block;
+ position: relative;
+
+ .popover-container {
+ left: 50%;
+ opacity: 0;
+ padding: $layout-spacing;
+ position: absolute;
+ top: 0;
+ transform: translate(-50%, -50%) scale(0);
+ transition: transform .2s;
+ width: $control-width-sm;
+ z-index: $zindex-3;
+ }
+
+ *:focus + .popover-container,
+ &:hover .popover-container {
+ display: block;
+ opacity: 1;
+ transform: translate(-50%, -100%) scale(1);
+ }
+
+ &.popover-right {
+ .popover-container {
+ left: 100%;
+ top: 50%;
+ }
+
+ *:focus + .popover-container,
+ &:hover .popover-container {
+ transform: translate(0, -50%) scale(1);
+ }
+ }
+
+ &.popover-bottom {
+ .popover-container {
+ left: 50%;
+ top: 100%;
+ }
+
+ *:focus + .popover-container,
+ &:hover .popover-container {
+ transform: translate(-50%, 0) scale(1);
+ }
+ }
+
+ &.popover-left {
+ .popover-container {
+ left: 0;
+ top: 50%;
+ }
+
+ *:focus + .popover-container,
+ &:hover .popover-container {
+ transform: translate(-100%, -50%) scale(1);
+ }
+ }
+
+ .card {
+ @include shadow-variant(.2rem);
+ border: 0;
+ }
+}
diff --git a/themes/quark/scss/spectre/_progress.scss b/themes/quark/scss/spectre/_progress.scss
new file mode 100644
index 0000000..f173772
--- /dev/null
+++ b/themes/quark/scss/spectre/_progress.scss
@@ -0,0 +1,45 @@
+// Progress
+// Credit: https://css-tricks.com/html5-progress-element/
+.progress {
+ appearance: none;
+ background: $bg-color-dark;
+ border: 0;
+ border-radius: $border-radius;
+ color: $primary-color;
+ height: $unit-1;
+ position: relative;
+ width: 100%;
+
+ &::-webkit-progress-bar {
+ background: transparent;
+ border-radius: $border-radius;
+ }
+
+ &::-webkit-progress-value {
+ background: $primary-color;
+ border-radius: $border-radius;
+ }
+
+ &::-moz-progress-bar {
+ background: $primary-color;
+ border-radius: $border-radius;
+ }
+
+ &:indeterminate {
+ animation: progress-indeterminate 1.5s linear infinite;
+ background: $bg-color-dark linear-gradient(to right, $primary-color 30%, $bg-color-dark 30%) top left / 150% 150% no-repeat;
+
+ &::-moz-progress-bar {
+ background: transparent;
+ }
+ }
+}
+
+@keyframes progress-indeterminate {
+ 0% {
+ background-position: 200% 0;
+ }
+ 100% {
+ background-position: -200% 0;
+ }
+}
diff --git a/themes/quark/scss/spectre/_sliders.scss b/themes/quark/scss/spectre/_sliders.scss
new file mode 100644
index 0000000..3ff38e8
--- /dev/null
+++ b/themes/quark/scss/spectre/_sliders.scss
@@ -0,0 +1,99 @@
+// Sliders
+// Credit: https://css-tricks.com/styling-cross-browser-compatible-range-inputs-css/
+.slider {
+ appearance: none;
+ background: transparent;
+ display: block;
+ width: 100%;
+ height: $unit-6;
+
+ &:focus {
+ @include control-shadow();
+ outline: none;
+ }
+
+ &.tooltip:not([data-tooltip]) {
+ &::after {
+ content: attr(value);
+ }
+ }
+
+ // Slider Thumb
+ &::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ background: $primary-color;
+ border: 0;
+ border-radius: 50%;
+ height: $unit-3;
+ margin-top: -($unit-3 - $unit-h) / 2;
+ transition: transform .2s;
+ width: $unit-3;
+ }
+ &::-moz-range-thumb {
+ background: $primary-color;
+ border: 0;
+ border-radius: 50%;
+ height: $unit-3;
+ transition: transform .2s;
+ width: $unit-3;
+ }
+ &::-ms-thumb {
+ background: $primary-color;
+ border: 0;
+ border-radius: 50%;
+ height: $unit-3;
+ transition: transform .2s;
+ width: $unit-3;
+ }
+
+ &:active {
+ &::-webkit-slider-thumb {
+ transform: scale(1.25);
+ }
+ &::-moz-range-thumb {
+ transform: scale(1.25);
+ }
+ &::-ms-thumb {
+ transform: scale(1.25);
+ }
+ }
+
+ &:disabled,
+ &.disabled {
+ &::-webkit-slider-thumb {
+ background: $gray-color-light;
+ transform: scale(1);
+ }
+ &::-moz-range-thumb {
+ background: $gray-color-light;
+ transform: scale(1);
+ }
+ &::-ms-thumb {
+ background: $gray-color-light;
+ transform: scale(1);
+ }
+ }
+
+ // Slider Track
+ &::-webkit-slider-runnable-track {
+ background: $bg-color-dark;
+ border-radius: $border-radius;
+ height: $unit-h;
+ width: 100%;
+ }
+ &::-moz-range-track {
+ background: $bg-color-dark;
+ border-radius: $border-radius;
+ height: $unit-h;
+ width: 100%;
+ }
+ &::-ms-track {
+ background: $bg-color-dark;
+ border-radius: $border-radius;
+ height: $unit-h;
+ width: 100%;
+ }
+ &::-ms-fill-lower {
+ background: $primary-color;
+ }
+}
diff --git a/themes/quark/scss/spectre/_steps.scss b/themes/quark/scss/spectre/_steps.scss
new file mode 100644
index 0000000..f642ff8
--- /dev/null
+++ b/themes/quark/scss/spectre/_steps.scss
@@ -0,0 +1,71 @@
+// Steps
+.step {
+ display: flex;
+ flex-wrap: nowrap;
+ list-style: none;
+ margin: $unit-1 0;
+ width: 100%;
+
+ .step-item {
+ flex: 1 1 0;
+ margin-top: 0;
+ min-height: 1rem;
+ text-align: center;
+ position: relative;
+
+ &:not(:first-child)::before {
+ background: $primary-color;
+ content: "";
+ height: 2px;
+ left: -50%;
+ position: absolute;
+ top: 9px;
+ width: 100%;
+ }
+
+ a {
+ color: $primary-color;
+ display: inline-block;
+ padding: 20px 10px 0;
+ text-decoration: none;
+
+ &::before {
+ background: $primary-color;
+ border: $border-width-lg solid $light-color;
+ border-radius: 50%;
+ content: "";
+ display: block;
+ height: $unit-3;
+ left: 50%;
+ position: absolute;
+ top: $unit-1;
+ transform: translateX(-50%);
+ width: $unit-3;
+ z-index: $zindex-0;
+ }
+ }
+
+ &.active {
+ a {
+ &::before {
+ background: $light-color;
+ border: $border-width-lg solid $primary-color;
+ }
+ }
+
+ & ~ .step-item {
+ &::before {
+ background: $border-color;
+ }
+
+ a {
+ color: $gray-color;
+
+ &::before {
+ background: $border-color;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_tables.scss b/themes/quark/scss/spectre/_tables.scss
new file mode 100644
index 0000000..656c03e
--- /dev/null
+++ b/themes/quark/scss/spectre/_tables.scss
@@ -0,0 +1,57 @@
+// Tables
+.table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ width: 100%;
+ @if $rtl == true {
+ text-align: right;
+ } @else {
+ text-align: left;
+ }
+
+ &.table-striped {
+ tbody {
+ tr:nth-of-type(odd) {
+ background: $bg-color;
+ }
+ }
+ }
+
+ &,
+ &.table-striped {
+ tbody {
+ tr {
+ &.active {
+ background: $bg-color-dark;
+ }
+ }
+ }
+ }
+
+ &.table-hover {
+ tbody {
+ tr {
+ &:hover {
+ background: $bg-color-dark;
+ }
+ }
+ }
+ }
+
+ // Scollable tables
+ &.table-scroll {
+ display: block;
+ overflow-x: auto;
+ padding-bottom: .75rem;
+ white-space: nowrap;
+ }
+
+ td,
+ th {
+ border-bottom: $border-width solid $border-color;
+ padding: $unit-3 $unit-2;
+ }
+ th {
+ border-bottom-width: $border-width-lg;
+ }
+}
diff --git a/themes/quark/scss/spectre/_tabs.scss b/themes/quark/scss/spectre/_tabs.scss
new file mode 100644
index 0000000..0dcbaf3
--- /dev/null
+++ b/themes/quark/scss/spectre/_tabs.scss
@@ -0,0 +1,66 @@
+// Tabs
+.tab {
+ align-items: center;
+ border-bottom: $border-width solid $border-color;
+ display: flex;
+ flex-wrap: wrap;
+ list-style: none;
+ margin: $unit-1 0 ($unit-1 - $border-width) 0;
+
+ .tab-item {
+ margin-top: 0;
+
+ a {
+ border-bottom: $border-width-lg solid transparent;
+ color: inherit;
+ display: block;
+ margin: 0 $unit-2 0 0;
+ padding: $unit-2 $unit-1 $unit-2 - $border-width-lg $unit-1;
+ text-decoration: none;
+ &:focus,
+ &:hover {
+ color: $link-color;
+ }
+ }
+ &.active a,
+ a.active {
+ border-bottom-color: $primary-color;
+ color: $link-color;
+ }
+
+ &.tab-action {
+ flex: 1 0 auto;
+ text-align: right;
+ }
+
+ .btn-clear {
+ margin-top: -$unit-1;
+ }
+ }
+
+ &.tab-block {
+ .tab-item {
+ flex: 1 0 0;
+ text-align: center;
+
+ a {
+ margin: 0;
+ }
+
+ .badge {
+ &[data-badge]::after {
+ position: absolute;
+ right: $unit-h;
+ top: $unit-h;
+ transform: translate(0, 0);
+ }
+ }
+ }
+ }
+
+ &:not(.tab-block) {
+ .badge {
+ padding-right: 0;
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_tiles.scss b/themes/quark/scss/spectre/_tiles.scss
new file mode 100644
index 0000000..742bbae
--- /dev/null
+++ b/themes/quark/scss/spectre/_tiles.scss
@@ -0,0 +1,38 @@
+// Tiles
+.tile {
+ align-content: space-between;
+ align-items: flex-start;
+ display: flex;
+
+ .tile-icon,
+ .tile-action {
+ flex: 0 0 auto;
+ }
+ .tile-content {
+ flex: 1 1 auto;
+ &:not(:first-child) {
+ padding-left: $unit-2;
+ }
+ &:not(:last-child) {
+ padding-right: $unit-2;
+ }
+ }
+ .tile-title,
+ .tile-subtitle {
+ line-height: $line-height;
+ }
+
+ &.tile-centered {
+ align-items: center;
+
+ .tile-content {
+ overflow: hidden;
+ }
+
+ .tile-title,
+ .tile-subtitle {
+ @include text-ellipsis();
+ margin-bottom: 0;
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_timelines.scss b/themes/quark/scss/spectre/_timelines.scss
new file mode 100644
index 0000000..c56746d
--- /dev/null
+++ b/themes/quark/scss/spectre/_timelines.scss
@@ -0,0 +1,56 @@
+// Timelines
+.timeline {
+ .timeline-item {
+ display: flex;
+ margin-bottom: $unit-6;
+ position: relative;
+ &::before {
+ background: $border-color;
+ content: "";
+ height: 100%;
+ left: 11px;
+ position: absolute;
+ top: $unit-6;
+ width: 2px;
+ }
+
+ .timeline-left {
+ flex: 0 0 auto;
+ }
+
+ .timeline-content {
+ flex: 1 1 auto;
+ padding: 2px 0 2px $layout-spacing-lg;
+ }
+
+ .timeline-icon {
+ align-items: center;
+ border-radius: 50%;
+ color: $light-color;
+ display: flex;
+ height: $unit-6;
+ justify-content: center;
+ text-align: center;
+ width: $unit-6;
+ &::before {
+ border: $border-width-lg solid $primary-color;
+ border-radius: 50%;
+ content: "";
+ display: block;
+ height: $unit-2;
+ left: $unit-2;
+ position: absolute;
+ top: $unit-2;
+ width: $unit-2;
+ }
+
+ &.icon-lg {
+ background: $primary-color;
+ line-height: $line-height;
+ &::before {
+ content: none;
+ }
+ }
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_toasts.scss b/themes/quark/scss/spectre/_toasts.scss
new file mode 100644
index 0000000..fef15f8
--- /dev/null
+++ b/themes/quark/scss/spectre/_toasts.scss
@@ -0,0 +1,48 @@
+// Toasts
+.toast {
+ @include toast-variant($dark-color);
+ border: $border-width solid $dark-color;
+ border-radius: $border-radius;
+ color: $light-color;
+ display: block;
+ padding: $layout-spacing;
+ width: 100%;
+
+ &.toast-primary {
+ @include toast-variant($primary-color);
+ }
+
+ &.toast-success {
+ @include toast-variant($success-color);
+ }
+
+ &.toast-warning {
+ @include toast-variant($warning-color);
+ }
+
+ &.toast-error {
+ @include toast-variant($error-color);
+ }
+
+ a {
+ color: $light-color;
+ text-decoration: underline;
+
+ &:focus,
+ &:hover,
+ &:active,
+ &.active {
+ opacity: .75;
+ }
+ }
+
+ .btn-clear {
+ margin: $unit-h;
+ }
+
+ p {
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_tooltips.scss b/themes/quark/scss/spectre/_tooltips.scss
new file mode 100644
index 0000000..8693b67
--- /dev/null
+++ b/themes/quark/scss/spectre/_tooltips.scss
@@ -0,0 +1,79 @@
+// Tooltips
+.tooltip {
+ position: relative;
+ &::after {
+ background: rgba($dark-color, .95);
+ border-radius: $border-radius;
+ bottom: 100%;
+ color: $light-color;
+ content: attr(data-tooltip);
+ display: block;
+ font-size: $font-size-sm;
+ left: 50%;
+ max-width: $control-width-sm;
+ opacity: 0;
+ overflow: hidden;
+ padding: $unit-1 $unit-2;
+ pointer-events: none;
+ position: absolute;
+ text-overflow: ellipsis;
+ transform: translate(-50%, $unit-2);
+ transition: opacity .2s, transform .2s;
+ white-space: pre;
+ z-index: $zindex-3;
+ }
+ &:focus,
+ &:hover {
+ &::after {
+ opacity: 1;
+ transform: translate(-50%, -$unit-1);
+ }
+ }
+ &[disabled],
+ &.disabled {
+ pointer-events: auto;
+ }
+
+ &.tooltip-right {
+ &::after {
+ bottom: 50%;
+ left: 100%;
+ transform: translate(-$unit-1, 50%);
+ }
+ &:focus,
+ &:hover {
+ &::after {
+ transform: translate($unit-1, 50%);
+ }
+ }
+ }
+
+ &.tooltip-bottom {
+ &::after {
+ bottom: auto;
+ top: 100%;
+ transform: translate(-50%, -$unit-2);
+ }
+ &:focus,
+ &:hover {
+ &::after {
+ transform: translate(-50%, $unit-1);
+ }
+ }
+ }
+
+ &.tooltip-left {
+ &::after {
+ bottom: 50%;
+ left: auto;
+ right: 100%;
+ transform: translate($unit-2, 50%);
+ }
+ &:focus,
+ &:hover {
+ &::after {
+ transform: translate(-$unit-1, 50%);
+ }
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/_typography.scss b/themes/quark/scss/spectre/_typography.scss
new file mode 100644
index 0000000..bbeb876
--- /dev/null
+++ b/themes/quark/scss/spectre/_typography.scss
@@ -0,0 +1,129 @@
+// Typography
+// Headings
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ color: inherit;
+ font-weight: 500;
+ line-height: 1.2;
+ margin-bottom: .5em;
+ margin-top: 0;
+}
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+ font-weight: 500;
+}
+h1,
+.h1 {
+ font-size: 2rem;
+}
+h2,
+.h2 {
+ font-size: 1.6rem;
+}
+h3,
+.h3 {
+ font-size: 1.4rem;
+}
+h4,
+.h4 {
+ font-size: 1.2rem;
+}
+h5,
+.h5 {
+ font-size: 1rem;
+}
+h6,
+.h6 {
+ font-size: .8rem;
+}
+
+// Paragraphs
+p {
+ margin: 0 0 $line-height;
+}
+
+// Semantic text elements
+a,
+ins,
+u {
+ text-decoration-skip: ink edges;
+}
+
+abbr[title] {
+ border-bottom: $border-width dotted;
+ cursor: help;
+ text-decoration: none;
+}
+
+kbd {
+ @include label-base();
+ @include label-variant($light-color, $dark-color);
+ font-size: $font-size-sm;
+}
+
+mark {
+ @include label-variant($body-font-color, $highlight-color);
+ border-bottom: $unit-o solid darken($highlight-color, 15%);
+ border-radius: $border-radius;
+ padding: $unit-o $unit-h 0;
+}
+
+// Blockquote
+blockquote {
+ border-left: $border-width-lg solid $border-color;
+ margin-left: 0;
+ padding: $unit-2 $unit-4;
+
+ p:last-child {
+ margin-bottom: 0;
+ }
+}
+
+// Lists
+ul,
+ol {
+ margin: $unit-4 0 $unit-4 $unit-4;
+ padding: 0;
+
+ ul,
+ ol {
+ margin: $unit-4 0 $unit-4 $unit-4;
+ }
+
+ li {
+ margin-top: $unit-2;
+ }
+}
+
+ul {
+ list-style: disc inside;
+
+ ul {
+ list-style-type: circle;
+ }
+}
+
+ol {
+ list-style: decimal inside;
+
+ ol {
+ list-style-type: lower-alpha;
+ }
+}
+
+dl {
+ dt {
+ font-weight: bold;
+ }
+ dd {
+ margin: $unit-2 0 $unit-4 0;
+ }
+}
diff --git a/themes/quark/scss/spectre/_utilities.scss b/themes/quark/scss/spectre/_utilities.scss
new file mode 100644
index 0000000..80f1e0b
--- /dev/null
+++ b/themes/quark/scss/spectre/_utilities.scss
@@ -0,0 +1,8 @@
+@import "utilities/colors";
+@import "utilities/cursors";
+@import "utilities/display";
+@import "utilities/divider";
+@import "utilities/loading";
+@import "utilities/position";
+@import "utilities/shapes";
+@import "utilities/text";
diff --git a/themes/quark/scss/spectre/_variables.scss b/themes/quark/scss/spectre/_variables.scss
new file mode 100644
index 0000000..7bf1a13
--- /dev/null
+++ b/themes/quark/scss/spectre/_variables.scss
@@ -0,0 +1,117 @@
+// Core variables
+$version: "0.5.8";
+
+// Core features
+$rtl: false !default;
+
+// Core colors
+$primary-color: #5755d9 !default;
+$primary-color-dark: darken($primary-color, 3%) !default;
+$primary-color-light: lighten($primary-color, 3%) !default;
+$secondary-color: lighten($primary-color, 37.5%) !default;
+$secondary-color-dark: darken($secondary-color, 3%) !default;
+$secondary-color-light: lighten($secondary-color, 3%) !default;
+
+// Gray colors
+$dark-color: #303742 !default;
+$light-color: #fff !default;
+$gray-color: lighten($dark-color, 55%) !default;
+$gray-color-dark: darken($gray-color, 30%) !default;
+$gray-color-light: lighten($gray-color, 20%) !default;
+
+$border-color: lighten($dark-color, 65%) !default;
+$border-color-dark: darken($border-color, 10%) !default;
+$border-color-light: lighten($border-color, 8%) !default;
+$bg-color: lighten($dark-color, 75%) !default;
+$bg-color-dark: darken($bg-color, 3%) !default;
+$bg-color-light: $light-color !default;
+
+// Control colors
+$success-color: #32b643 !default;
+$warning-color: #ffb700 !default;
+$error-color: #e85600 !default;
+
+// Other colors
+$code-color: #d73e48 !default;
+$highlight-color: #ffe9b3 !default;
+$body-bg: $bg-color-light !default;
+$body-font-color: lighten($dark-color, 5%) !default;
+$link-color: $primary-color !default;
+$link-color-dark: darken($link-color, 10%) !default;
+$link-color-light: lighten($link-color, 10%) !default;
+
+// Fonts
+// Credit: https://www.smashingmagazine.com/2015/11/using-system-ui-fonts-practical-guide/
+$base-font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto !default;
+$mono-font-family: "SF Mono", "Segoe UI Mono", "Roboto Mono", Menlo, Courier, monospace !default;
+$fallback-font-family: "Helvetica Neue", sans-serif !default;
+$cjk-zh-hans-font-family: $base-font-family, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", $fallback-font-family !default;
+$cjk-zh-hant-font-family: $base-font-family, "PingFang TC", "Hiragino Sans CNS", "Microsoft JhengHei", $fallback-font-family !default;
+$cjk-jp-font-family: $base-font-family, "Hiragino Sans", "Hiragino Kaku Gothic Pro", "Yu Gothic", YuGothic, Meiryo, $fallback-font-family !default;
+$cjk-ko-font-family: $base-font-family, "Malgun Gothic", $fallback-font-family !default;
+$body-font-family: $base-font-family, $fallback-font-family !default;
+
+// Unit sizes
+$unit-o: .05rem !default;
+$unit-h: .1rem !default;
+$unit-1: .2rem !default;
+$unit-2: .4rem !default;
+$unit-3: .6rem !default;
+$unit-4: .8rem !default;
+$unit-5: 1rem !default;
+$unit-6: 1.2rem !default;
+$unit-7: 1.4rem !default;
+$unit-8: 1.6rem !default;
+$unit-9: 1.8rem !default;
+$unit-10: 2rem !default;
+$unit-12: 2.4rem !default;
+$unit-16: 3.2rem !default;
+
+// Font sizes
+$html-font-size: 20px !default;
+$html-line-height: 1.5 !default;
+$font-size: .8rem !default;
+$font-size-sm: .7rem !default;
+$font-size-lg: .9rem !default;
+$line-height: 1.2rem !default;
+
+// Sizes
+$layout-spacing: $unit-2 !default;
+$layout-spacing-sm: $unit-1 !default;
+$layout-spacing-lg: $unit-4 !default;
+$border-radius: $unit-h !default;
+$border-width: $unit-o !default;
+$border-width-lg: $unit-h !default;
+$control-size: $unit-9 !default;
+$control-size-sm: $unit-7 !default;
+$control-size-lg: $unit-10 !default;
+$control-padding-x: $unit-2 !default;
+$control-padding-x-sm: $unit-2 * .75 !default;
+$control-padding-x-lg: $unit-2 * 1.5 !default;
+$control-padding-y: ($control-size - $line-height) / 2 - $border-width !default;
+$control-padding-y-sm: ($control-size-sm - $line-height) / 2 - $border-width !default;
+$control-padding-y-lg: ($control-size-lg - $line-height) / 2 - $border-width !default;
+$control-icon-size: .8rem !default;
+
+$control-width-xs: 180px !default;
+$control-width-sm: 320px !default;
+$control-width-md: 640px !default;
+$control-width-lg: 960px !default;
+$control-width-xl: 1280px !default;
+
+// Responsive breakpoints
+$size-xs: 480px !default;
+$size-sm: 600px !default;
+$size-md: 840px !default;
+$size-lg: 960px !default;
+$size-xl: 1280px !default;
+$size-2x: 1440px !default;
+
+$responsive-breakpoint: $size-xs !default;
+
+// Z-index
+$zindex-0: 1 !default;
+$zindex-1: 100 !default;
+$zindex-2: 200 !default;
+$zindex-3: 300 !default;
+$zindex-4: 400 !default;
diff --git a/themes/quark/scss/spectre/_viewer-360.scss b/themes/quark/scss/spectre/_viewer-360.scss
new file mode 100644
index 0000000..c1b8928
--- /dev/null
+++ b/themes/quark/scss/spectre/_viewer-360.scss
@@ -0,0 +1,34 @@
+// 360 Degree Viewer
+
+// Mixin: Viewer slider sizes
+@mixin viewer-slider-size($image-number: 36) {
+ @for $s from 1 through ($image-number) {
+ .viewer-slider[max='#{$image-number}'][value='#{$s}'] + .viewer-image {
+ background-position-y: percentage((($s)-1) * 1/(($image-number)-1));
+ }
+ }
+}
+
+.viewer-360 {
+ align-items: center;
+ display: flex;
+ flex-direction: column;
+
+ // Copy and add more numbers if you need
+ @include viewer-slider-size(36);
+
+ .viewer-slider {
+ cursor: ew-resize;
+ margin: 1rem;
+ order: 2;
+ width: 60%;
+ }
+
+ .viewer-image {
+ background-position-y: 0;
+ background-repeat: no-repeat;
+ background-size: 100%;
+ max-width: 100%;
+ order: 1;
+ }
+}
\ No newline at end of file
diff --git a/themes/quark/scss/spectre/icons/_icons-action.scss b/themes/quark/scss/spectre/icons/_icons-action.scss
new file mode 100644
index 0000000..1b952ea
--- /dev/null
+++ b/themes/quark/scss/spectre/icons/_icons-action.scss
@@ -0,0 +1,315 @@
+// Icon resize
+.icon-resize-horiz,
+.icon-resize-vert {
+ &::before,
+ &::after {
+ border: $icon-border-width solid currentColor;
+ border-bottom: 0;
+ border-right: 0;
+ height: .45em;
+ width: .45em;
+ }
+ &::before {
+ transform: translate(-50%, -90%) rotate(45deg);
+ }
+ &::after {
+ transform: translate(-50%, -10%) rotate(225deg);
+ }
+}
+
+.icon-resize-horiz {
+ &::before {
+ transform: translate(-90%, -50%) rotate(-45deg);
+ }
+ &::after {
+ transform: translate(-10%, -50%) rotate(135deg);
+ }
+}
+
+// Icon more
+.icon-more-horiz,
+.icon-more-vert {
+ &::before {
+ background: currentColor;
+ box-shadow: -.4em 0, .4em 0;
+ border-radius: 50%;
+ height: 3px;
+ width: 3px;
+ }
+}
+
+.icon-more-vert {
+ &::before {
+ box-shadow: 0 -.4em, 0 .4em;
+ }
+}
+
+// Icon plus, minus, cross
+.icon-plus,
+.icon-minus,
+.icon-cross {
+ &::before {
+ background: currentColor;
+ height: $icon-border-width;
+ width: 100%;
+ }
+}
+
+.icon-plus,
+.icon-cross {
+ &::after {
+ background: currentColor;
+ height: 100%;
+ width: $icon-border-width;
+ }
+}
+
+.icon-cross {
+ &::before {
+ width: 100%;
+ }
+ &::after {
+ height: 100%;
+ }
+ &::before,
+ &::after {
+ transform: translate(-50%, -50%) rotate(45deg);
+ }
+}
+
+// Icon check
+.icon-check {
+ &::before {
+ border: $icon-border-width solid currentColor;
+ border-right: 0;
+ border-top: 0;
+ height: .5em;
+ width: .9em;
+ transform: translate(-50%, -75%) rotate(-45deg);
+ }
+}
+
+// Icon stop
+.icon-stop {
+ border: $icon-border-width solid currentColor;
+ border-radius: 50%;
+ &::before {
+ background: currentColor;
+ height: $icon-border-width;
+ transform: translate(-50%, -50%) rotate(45deg);
+ width: 1em;
+ }
+}
+
+// Icon shutdown
+.icon-shutdown {
+ border: $icon-border-width solid currentColor;
+ border-radius: 50%;
+ border-top-color: transparent;
+ &::before {
+ background: currentColor;
+ content: "";
+ height: .5em;
+ top: .1em;
+ width: $icon-border-width;
+ }
+}
+
+// Icon refresh
+.icon-refresh {
+ &::before {
+ border: $icon-border-width solid currentColor;
+ border-radius: 50%;
+ border-right-color: transparent;
+ height: 1em;
+ width: 1em;
+ }
+ &::after {
+ border: .2em solid currentColor;
+ border-top-color: transparent;
+ border-left-color: transparent;
+ height: 0;
+ left: 80%;
+ top: 20%;
+ width: 0;
+ }
+}
+
+// Icon search
+.icon-search {
+ &::before {
+ border: $icon-border-width solid currentColor;
+ border-radius: 50%;
+ height: .75em;
+ left: 5%;
+ top: 5%;
+ transform: translate(0, 0) rotate(45deg);
+ width: .75em;
+ }
+ &::after {
+ background: currentColor;
+ height: $icon-border-width;
+ left: 80%;
+ top: 80%;
+ transform: translate(-50%, -50%) rotate(45deg);
+ width: .4em;
+ }
+}
+
+// Icon edit
+.icon-edit {
+ &::before {
+ border: $icon-border-width solid currentColor;
+ height: .4em;
+ transform: translate(-40%, -60%) rotate(-45deg);
+ width: .85em;
+ }
+ &::after {
+ border: .15em solid currentColor;
+ border-top-color: transparent;
+ border-right-color: transparent;
+ height: 0;
+ left: 5%;
+ top: 95%;
+ transform: translate(0, -100%);
+ width: 0;
+ }
+}
+
+// Icon delete
+.icon-delete {
+ &::before {
+ border: $icon-border-width solid currentColor;
+ border-bottom-left-radius: $border-radius;
+ border-bottom-right-radius: $border-radius;
+ border-top: 0;
+ height: .75em;
+ top: 60%;
+ width: .75em;
+ }
+ &::after {
+ background: currentColor;
+ box-shadow: -.25em .2em, .25em .2em;
+ height: $icon-border-width;
+ top: $icon-border-width/2;
+ width: .5em;
+ }
+}
+
+// Icon share
+.icon-share {
+ border: $icon-border-width solid currentColor;
+ border-radius: $border-radius;
+ border-right: 0;
+ border-top: 0;
+ &::before {
+ border: $icon-border-width solid currentColor;
+ border-left: 0;
+ border-top: 0;
+ height: .4em;
+ left: 100%;
+ top: .25em;
+ transform: translate(-125%, -50%) rotate(-45deg);
+ width: .4em;
+ }
+ &::after {
+ border: $icon-border-width solid currentColor;
+ border-bottom: 0;
+ border-right: 0;
+ border-radius: 75% 0;
+ height: .5em;
+ width: .6em;
+ }
+}
+
+// Icon flag
+.icon-flag {
+ &::before {
+ background: currentColor;
+ height: 1em;
+ left: 15%;
+ width: $icon-border-width;
+ }
+ &::after {
+ border: $icon-border-width solid currentColor;
+ border-bottom-right-radius: $border-radius;
+ border-left: 0;
+ border-top-right-radius: $border-radius;
+ height: .65em;
+ top: 35%;
+ left: 60%;
+ width: .8em;
+ }
+}
+
+// Icon bookmark
+.icon-bookmark {
+ &::before {
+ border: $icon-border-width solid currentColor;
+ border-bottom: 0;
+ border-top-left-radius: $border-radius;
+ border-top-right-radius: $border-radius;
+ height: .9em;
+ width: .8em;
+ }
+ &::after {
+ border: $icon-border-width solid currentColor;
+ border-bottom: 0;
+ border-left: 0;
+ border-radius: $border-radius;
+ height: .5em;
+ transform: translate(-50%, 35%) rotate(-45deg) skew(15deg, 15deg);
+ width: .5em;
+ }
+}
+
+// Icon download & upload
+.icon-download,
+.icon-upload {
+ border-bottom: $icon-border-width solid currentColor;
+ &::before {
+ border: $icon-border-width solid currentColor;
+ border-bottom: 0;
+ border-right: 0;
+ height: .5em;
+ width: .5em;
+ transform: translate(-50%, -60%) rotate(-135deg);
+ }
+ &::after {
+ background: currentColor;
+ height: .6em;
+ top: 40%;
+ width: $icon-border-width;
+ }
+}
+
+.icon-upload {
+ &::before {
+ transform: translate(-50%, -60%) rotate(45deg);
+ }
+ &::after {
+ top: 50%;
+ }
+}
+
+// Icon copy
+.icon-copy {
+ &::before {
+ border: $icon-border-width solid currentColor;
+ border-radius: $border-radius;
+ border-right: 0;
+ border-bottom: 0;
+ height: .8em;
+ left: 40%;
+ top: 35%;
+ width: .8em;
+ }
+ &::after {
+ border: $icon-border-width solid currentColor;
+ border-radius: $border-radius;
+ height: .8em;
+ left: 60%;
+ top: 60%;
+ width: .8em;
+ }
+}
\ No newline at end of file
diff --git a/themes/quark/scss/spectre/icons/_icons-core.scss b/themes/quark/scss/spectre/icons/_icons-core.scss
new file mode 100644
index 0000000..9a67ae4
--- /dev/null
+++ b/themes/quark/scss/spectre/icons/_icons-core.scss
@@ -0,0 +1,54 @@
+// Icon variables
+$icon-border-width: $border-width-lg;
+$icon-prefix: "icon";
+
+// Icon base style
+.#{$icon-prefix} {
+ box-sizing: border-box;
+ display: inline-block;
+ font-size: inherit;
+ font-style: normal;
+ height: 1em;
+ position: relative;
+ text-indent: -9999px;
+ vertical-align: middle;
+ width: 1em;
+ &::before,
+ &::after {
+ content: "";
+ display: block;
+ left: 50%;
+ position: absolute;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ }
+
+ // Icon sizes
+ &.icon-2x {
+ font-size: 1.6rem;
+ }
+
+ &.icon-3x {
+ font-size: 2.4rem;
+ }
+
+ &.icon-4x {
+ font-size: 3.2rem;
+ }
+}
+
+// Component icon support
+.accordion,
+.btn,
+.toast,
+.menu {
+ .#{$icon-prefix} {
+ vertical-align: -10%;
+ }
+}
+
+.btn-lg {
+ .#{$icon-prefix} {
+ vertical-align: -15%;
+ }
+}
diff --git a/themes/quark/scss/spectre/icons/_icons-navigation.scss b/themes/quark/scss/spectre/icons/_icons-navigation.scss
new file mode 100644
index 0000000..92ab231
--- /dev/null
+++ b/themes/quark/scss/spectre/icons/_icons-navigation.scss
@@ -0,0 +1,127 @@
+// Icon arrows
+.icon-arrow-down,
+.icon-arrow-left,
+.icon-arrow-right,
+.icon-arrow-up,
+.icon-downward,
+.icon-back,
+.icon-forward,
+.icon-upward {
+ &::before {
+ border: $icon-border-width solid currentColor;
+ border-bottom: 0;
+ border-right: 0;
+ height: .65em;
+ width: .65em;
+ }
+}
+
+.icon-arrow-down {
+ &::before {
+ transform: translate(-50%, -75%) rotate(225deg);
+ }
+}
+
+.icon-arrow-left {
+ &::before {
+ transform: translate(-25%, -50%) rotate(-45deg);
+ }
+}
+
+.icon-arrow-right {
+ &::before {
+ transform: translate(-75%, -50%) rotate(135deg);
+ }
+}
+
+.icon-arrow-up {
+ &::before {
+ transform: translate(-50%, -25%) rotate(45deg);
+ }
+}
+
+.icon-back,
+.icon-forward {
+ &::after {
+ background: currentColor;
+ height: $icon-border-width;
+ width: .8em;
+ }
+}
+
+.icon-downward,
+.icon-upward {
+ &::after {
+ background: currentColor;
+ height: .8em;
+ width: $icon-border-width;
+ }
+}
+
+.icon-back {
+ &::after {
+ left: 55%;
+ }
+ &::before {
+ transform: translate(-50%, -50%) rotate(-45deg);
+ }
+}
+
+.icon-downward {
+ &::after {
+ top: 45%;
+ }
+ &::before {
+ transform: translate(-50%, -50%) rotate(-135deg);
+ }
+}
+
+.icon-forward {
+ &::after {
+ left: 45%;
+ }
+ &::before {
+ transform: translate(-50%, -50%) rotate(135deg);
+ }
+}
+
+.icon-upward {
+ &::after {
+ top: 55%;
+ }
+ &::before {
+ transform: translate(-50%, -50%) rotate(45deg);
+ }
+}
+
+// Icon caret
+.icon-caret {
+ &::before {
+ border-top: .3em solid currentColor;
+ border-right: .3em solid transparent;
+ border-left: .3em solid transparent;
+ height: 0;
+ transform: translate(-50%, -25%);
+ width: 0;
+ }
+}
+
+// Icon menu
+.icon-menu {
+ &::before {
+ background: currentColor;
+ box-shadow: 0 -.35em, 0 .35em;
+ height: $icon-border-width;
+ width: 100%;
+ }
+}
+
+// Icon apps
+.icon-apps {
+ &::before {
+ background: currentColor;
+ box-shadow: -.35em -.35em, -.35em 0, -.35em .35em, 0 -.35em, 0 .35em, .35em -.35em, .35em 0, .35em .35em;
+ height: 3px;
+ width: 3px;
+ }
+}
diff --git a/themes/quark/scss/spectre/icons/_icons-object.scss b/themes/quark/scss/spectre/icons/_icons-object.scss
new file mode 100644
index 0000000..00597d8
--- /dev/null
+++ b/themes/quark/scss/spectre/icons/_icons-object.scss
@@ -0,0 +1,161 @@
+// Icon time
+.icon-time {
+ border: $icon-border-width solid currentColor;
+ border-radius: 50%;
+ &::before {
+ background: currentColor;
+ height: .4em;
+ transform: translate(-50%, -75%);
+ width: $icon-border-width;
+ }
+ &::after {
+ background: currentColor;
+ height: .3em;
+ transform: translate(-50%, -75%) rotate(90deg);
+ transform-origin: 50% 90%;
+ width: $icon-border-width;
+ }
+}
+
+// Icon mail
+.icon-mail {
+ &::before {
+ border: $icon-border-width solid currentColor;
+ border-radius: $border-radius;
+ height: .8em;
+ width: 1em;
+ }
+ &::after {
+ border: $icon-border-width solid currentColor;
+ border-right: 0;
+ border-top: 0;
+ height: .5em;
+ transform: translate(-50%, -90%) rotate(-45deg) skew(10deg, 10deg);
+ width: .5em;
+ }
+}
+
+// Icon people
+.icon-people {
+ &::before {
+ border: $icon-border-width solid currentColor;
+ border-radius: 50%;
+ height: .45em;
+ top: 25%;
+ width: .45em;
+ }
+ &::after {
+ border: $icon-border-width solid currentColor;
+ border-radius: 50% 50% 0 0;
+ height: .4em;
+ top: 75%;
+ width: .9em;
+ }
+}
+
+// Icon message
+.icon-message {
+ border: $icon-border-width solid currentColor;
+ border-bottom: 0;
+ border-radius: $border-radius;
+ border-right: 0;
+ &::before {
+ border: $icon-border-width solid currentColor;
+ border-bottom-right-radius: $border-radius;
+ border-left: 0;
+ border-top: 0;
+ height: .8em;
+ left: 65%;
+ top: 40%;
+ width: .7em;
+ }
+ &::after {
+ background: currentColor;
+ border-radius: $border-radius;
+ height: .3em;
+ left: 10%;
+ top: 100%;
+ transform: translate(0, -90%) rotate(45deg);
+ width: $icon-border-width;
+ }
+}
+
+// Icon photo
+.icon-photo {
+ border: $icon-border-width solid currentColor;
+ border-radius: $border-radius;
+ &::before {
+ border: $icon-border-width solid currentColor;
+ border-radius: 50%;
+ height: .25em;
+ left: 35%;
+ top: 35%;
+ width: .25em;
+ }
+ &::after {
+ border: $icon-border-width solid currentColor;
+ border-bottom: 0;
+ border-left: 0;
+ height: .5em;
+ left: 60%;
+ transform: translate(-50%, 25%) rotate(-45deg);
+ width: .5em;
+ }
+}
+
+// Icon link
+.icon-link {
+ &::before,
+ &::after {
+ border: $icon-border-width solid currentColor;
+ border-radius: 5em 0 0 5em;
+ border-right: 0;
+ height: .5em;
+ width: .75em;
+ }
+ &::before {
+ transform: translate(-70%, -45%) rotate(-45deg);
+ }
+ &::after {
+ transform: translate(-30%, -55%) rotate(135deg);
+ }
+}
+
+// Icon location
+.icon-location {
+ &::before {
+ border: $icon-border-width solid currentColor;
+ border-radius: 50% 50% 50% 0;
+ height: .8em;
+ transform: translate(-50%, -60%) rotate(-45deg);
+ width: .8em;
+ }
+ &::after {
+ border: $icon-border-width solid currentColor;
+ border-radius: 50%;
+ height: .2em;
+ transform: translate(-50%, -80%);
+ width: .2em;
+ }
+}
+
+// Icon emoji
+.icon-emoji {
+ border: $icon-border-width solid currentColor;
+ border-radius: 50%;
+ &::before {
+ border-radius: 50%;
+ box-shadow: -.17em -.1em, .17em -.1em;
+ height: .15em;
+ width: .15em;
+ }
+ &::after {
+ border: $icon-border-width solid currentColor;
+ border-bottom-color: transparent;
+ border-radius: 50%;
+ border-right-color: transparent;
+ height: .5em;
+ transform: translate(-50%, -40%) rotate(-135deg);
+ width: .5em;
+ }
+}
diff --git a/themes/quark/scss/spectre/mixins/_avatar.scss b/themes/quark/scss/spectre/mixins/_avatar.scss
new file mode 100644
index 0000000..14617ad
--- /dev/null
+++ b/themes/quark/scss/spectre/mixins/_avatar.scss
@@ -0,0 +1,6 @@
+// Avatar mixin
+@mixin avatar-base($size: $unit-8) {
+ font-size: $size / 2;
+ height: $size;
+ width: $size;
+}
diff --git a/themes/quark/scss/spectre/mixins/_button.scss b/themes/quark/scss/spectre/mixins/_button.scss
new file mode 100644
index 0000000..c90a94b
--- /dev/null
+++ b/themes/quark/scss/spectre/mixins/_button.scss
@@ -0,0 +1,54 @@
+// Button variant mixin
+@mixin button-variant($color: $primary-color) {
+ background: $color;
+ border-color: darken($color, 3%);
+ color: $light-color;
+ &:focus {
+ @include control-shadow($color);
+ }
+ &:focus,
+ &:hover {
+ background: darken($color, 2%);
+ border-color: darken($color, 5%);
+ color: $light-color;
+ }
+ &:active,
+ &.active {
+ background: darken($color, 7%);
+ border-color: darken($color, 10%);
+ color: $light-color;
+ }
+ &.loading {
+ &::after {
+ border-bottom-color: $light-color;
+ border-left-color: $light-color;
+ }
+ }
+}
+
+@mixin button-outline-variant($color: $primary-color) {
+ background: $light-color;
+ border-color: $color;
+ color: $color;
+ &:focus {
+ @include control-shadow($color);
+ }
+ &:focus,
+ &:hover {
+ background: lighten($color, 50%);
+ border-color: darken($color, 2%);
+ color: $color;
+ }
+ &:active,
+ &.active {
+ background: $color;
+ border-color: darken($color, 5%);
+ color: $light-color;
+ }
+ &.loading {
+ &::after {
+ border-bottom-color: $color;
+ border-left-color: $color;
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/mixins/_clearfix.scss b/themes/quark/scss/spectre/mixins/_clearfix.scss
new file mode 100644
index 0000000..db6895f
--- /dev/null
+++ b/themes/quark/scss/spectre/mixins/_clearfix.scss
@@ -0,0 +1,8 @@
+// Clearfix mixin
+@mixin clearfix() {
+ &::after {
+ clear: both;
+ content: "";
+ display: table;
+ }
+}
diff --git a/themes/quark/scss/spectre/mixins/_color.scss b/themes/quark/scss/spectre/mixins/_color.scss
new file mode 100644
index 0000000..697d0c3
--- /dev/null
+++ b/themes/quark/scss/spectre/mixins/_color.scss
@@ -0,0 +1,27 @@
+// Background color utility mixin
+@mixin bg-color-variant($name: ".bg-primary", $color: $primary-color) {
+ #{$name} {
+ background: $color !important;
+
+ @if (lightness($color) < 60) {
+ color: $light-color;
+ }
+ }
+}
+
+// Text color utility mixin
+@mixin text-color-variant($name: ".text-primary", $color: $primary-color) {
+ #{$name} {
+ color: $color !important;
+ }
+
+ a#{$name} {
+ &:focus,
+ &:hover {
+ color: darken($color, 5%);
+ }
+ &:visited {
+ color: lighten($color, 5%);
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/mixins/_label.scss b/themes/quark/scss/spectre/mixins/_label.scss
new file mode 100644
index 0000000..1574f02
--- /dev/null
+++ b/themes/quark/scss/spectre/mixins/_label.scss
@@ -0,0 +1,11 @@
+// Label base style
+@mixin label-base() {
+ border-radius: $border-radius;
+ line-height: 1.25;
+ padding: .1rem .2rem;
+}
+
+@mixin label-variant($color: $light-color, $bg-color: $primary-color) {
+ background: $bg-color;
+ color: $color;
+}
diff --git a/themes/quark/scss/spectre/mixins/_position.scss b/themes/quark/scss/spectre/mixins/_position.scss
new file mode 100644
index 0000000..98b5cfc
--- /dev/null
+++ b/themes/quark/scss/spectre/mixins/_position.scss
@@ -0,0 +1,65 @@
+// Margin utility mixin
+@mixin margin-variant($id: 1, $size: $unit-1) {
+ .m-#{$id} {
+ margin: $size !important;
+ }
+
+ .mb-#{$id} {
+ margin-bottom: $size !important;
+ }
+
+ .ml-#{$id} {
+ margin-left: $size !important;
+ }
+
+ .mr-#{$id} {
+ margin-right: $size !important;
+ }
+
+ .mt-#{$id} {
+ margin-top: $size !important;
+ }
+
+ .mx-#{$id} {
+ margin-left: $size !important;
+ margin-right: $size !important;
+ }
+
+ .my-#{$id} {
+ margin-bottom: $size !important;
+ margin-top: $size !important;
+ }
+}
+
+// Padding utility mixin
+@mixin padding-variant($id: 1, $size: $unit-1) {
+ .p-#{$id} {
+ padding: $size !important;
+ }
+
+ .pb-#{$id} {
+ padding-bottom: $size !important;
+ }
+
+ .pl-#{$id} {
+ padding-left: $size !important;
+ }
+
+ .pr-#{$id} {
+ padding-right: $size !important;
+ }
+
+ .pt-#{$id} {
+ padding-top: $size !important;
+ }
+
+ .px-#{$id} {
+ padding-left: $size !important;
+ padding-right: $size !important;
+ }
+
+ .py-#{$id} {
+ padding-bottom: $size !important;
+ padding-top: $size !important;
+ }
+}
diff --git a/themes/quark/scss/spectre/mixins/_shadow.scss b/themes/quark/scss/spectre/mixins/_shadow.scss
new file mode 100644
index 0000000..7984449
--- /dev/null
+++ b/themes/quark/scss/spectre/mixins/_shadow.scss
@@ -0,0 +1,9 @@
+// Component focus shadow
+@mixin control-shadow($color: $primary-color) {
+ box-shadow: 0 0 0 .1rem rgba($color, .2);
+}
+
+// Shadow mixin
+@mixin shadow-variant($offset) {
+ box-shadow: 0 $offset ($offset + .05rem) * 2 rgba($dark-color, .3);
+}
diff --git a/themes/quark/scss/spectre/mixins/_text.scss b/themes/quark/scss/spectre/mixins/_text.scss
new file mode 100644
index 0000000..97dc99d
--- /dev/null
+++ b/themes/quark/scss/spectre/mixins/_text.scss
@@ -0,0 +1,6 @@
+// Text Ellipsis
+@mixin text-ellipsis() {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
diff --git a/themes/quark/scss/spectre/mixins/_toast.scss b/themes/quark/scss/spectre/mixins/_toast.scss
new file mode 100644
index 0000000..fa2bb13
--- /dev/null
+++ b/themes/quark/scss/spectre/mixins/_toast.scss
@@ -0,0 +1,5 @@
+// Toast variant mixin
+@mixin toast-variant($color: $dark-color) {
+ background: rgba($color, .95);
+ border-color: $color;
+}
diff --git a/themes/quark/scss/spectre/spectre-exp.scss b/themes/quark/scss/spectre/spectre-exp.scss
new file mode 100644
index 0000000..33ed3fe
--- /dev/null
+++ b/themes/quark/scss/spectre/spectre-exp.scss
@@ -0,0 +1,18 @@
+// Variables and mixins
+@import "variables";
+@import "mixins";
+
+/*! Spectre.css Experimentals v#{$version} | MIT License | github.com/picturepan2/spectre */
+// Experimentals
+@import "autocomplete";
+@import "calendars";
+@import "carousels";
+@import "comparison-sliders";
+@import "filters";
+@import "meters";
+@import "off-canvas";
+@import "parallax";
+@import "progress";
+@import "sliders";
+@import "timelines";
+@import "viewer-360";
diff --git a/themes/quark/scss/spectre/spectre-icons.scss b/themes/quark/scss/spectre/spectre-icons.scss
new file mode 100644
index 0000000..383624e
--- /dev/null
+++ b/themes/quark/scss/spectre/spectre-icons.scss
@@ -0,0 +1,10 @@
+// Variables and mixins
+@import "variables";
+@import "mixins";
+
+/*! Spectre.css Icons v#{$version} | MIT License | github.com/picturepan2/spectre */
+// Icons
+@import "icons/icons-core";
+@import "icons/icons-navigation";
+@import "icons/icons-action";
+@import "icons/icons-object";
diff --git a/themes/quark/scss/spectre/spectre.scss b/themes/quark/scss/spectre/spectre.scss
new file mode 100644
index 0000000..cff1fde
--- /dev/null
+++ b/themes/quark/scss/spectre/spectre.scss
@@ -0,0 +1,49 @@
+// Variables and mixins
+@import "variables";
+@import "mixins";
+
+/*! Spectre.css v#{$version} | MIT License | github.com/picturepan2/spectre */
+// Reset and dependencies
+@import "normalize";
+@import "base";
+
+// Elements
+@import "typography";
+@import "asian";
+@import "tables";
+@import "buttons";
+@import "forms";
+@import "labels";
+@import "codes";
+@import "media";
+
+// Layout
+@import "layout";
+@import "hero";
+@import "navbar";
+
+// Components
+@import "accordions";
+@import "avatars";
+@import "badges";
+@import "breadcrumbs";
+@import "bars";
+@import "cards";
+@import "chips";
+@import "dropdowns";
+@import "empty";
+@import "menus";
+@import "modals";
+@import "navs";
+@import "pagination";
+@import "panels";
+@import "popovers";
+@import "steps";
+@import "tabs";
+@import "tiles";
+@import "toasts";
+@import "tooltips";
+
+// Utility classes
+@import "animations";
+@import "utilities";
diff --git a/themes/quark/scss/spectre/utilities/_colors.scss b/themes/quark/scss/spectre/utilities/_colors.scss
new file mode 100644
index 0000000..28dd221
--- /dev/null
+++ b/themes/quark/scss/spectre/utilities/_colors.scss
@@ -0,0 +1,31 @@
+// Text colors
+@include text-color-variant(".text-primary", $primary-color);
+
+@include text-color-variant(".text-secondary", $secondary-color-dark);
+
+@include text-color-variant(".text-gray", $gray-color);
+
+@include text-color-variant(".text-light", $light-color);
+
+@include text-color-variant(".text-dark", $body-font-color);
+
+@include text-color-variant(".text-success", $success-color);
+
+@include text-color-variant(".text-warning", $warning-color);
+
+@include text-color-variant(".text-error", $error-color);
+
+// Background colors
+@include bg-color-variant(".bg-primary", $primary-color);
+
+@include bg-color-variant(".bg-secondary", $secondary-color);
+
+@include bg-color-variant(".bg-dark", $dark-color);
+
+@include bg-color-variant(".bg-gray", $bg-color);
+
+@include bg-color-variant(".bg-success", $success-color);
+
+@include bg-color-variant(".bg-warning", $warning-color);
+
+@include bg-color-variant(".bg-error", $error-color);
diff --git a/themes/quark/scss/spectre/utilities/_cursors.scss b/themes/quark/scss/spectre/utilities/_cursors.scss
new file mode 100644
index 0000000..bd755c8
--- /dev/null
+++ b/themes/quark/scss/spectre/utilities/_cursors.scss
@@ -0,0 +1,24 @@
+// Cursors
+.c-hand {
+ cursor: pointer;
+}
+
+.c-move {
+ cursor: move;
+}
+
+.c-zoom-in {
+ cursor: zoom-in;
+}
+
+.c-zoom-out {
+ cursor: zoom-out;
+}
+
+.c-not-allowed {
+ cursor: not-allowed;
+}
+
+.c-auto {
+ cursor: auto;
+}
\ No newline at end of file
diff --git a/themes/quark/scss/spectre/utilities/_display.scss b/themes/quark/scss/spectre/utilities/_display.scss
new file mode 100644
index 0000000..c6248e0
--- /dev/null
+++ b/themes/quark/scss/spectre/utilities/_display.scss
@@ -0,0 +1,44 @@
+// Display
+.d-block {
+ display: block;
+}
+.d-inline {
+ display: inline;
+}
+.d-inline-block {
+ display: inline-block;
+}
+.d-flex {
+ display: flex;
+}
+.d-inline-flex {
+ display: inline-flex;
+}
+.d-none,
+.d-hide {
+ display: none !important;
+}
+.d-visible {
+ visibility: visible;
+}
+.d-invisible {
+ visibility: hidden;
+}
+.text-hide {
+ background: transparent;
+ border: 0;
+ color: transparent;
+ font-size: 0;
+ line-height: 0;
+ text-shadow: none;
+}
+.text-assistive {
+ border: 0;
+ clip: rect(0,0,0,0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
diff --git a/themes/quark/scss/spectre/utilities/_divider.scss b/themes/quark/scss/spectre/utilities/_divider.scss
new file mode 100644
index 0000000..e6c09d2
--- /dev/null
+++ b/themes/quark/scss/spectre/utilities/_divider.scss
@@ -0,0 +1,50 @@
+// Divider
+.divider,
+.divider-vert {
+ display: block;
+ position: relative;
+
+ &[data-content]::after {
+ background: $bg-color-light;
+ color: $gray-color;
+ content: attr(data-content);
+ display: inline-block;
+ font-size: $font-size-sm;
+ padding: 0 $unit-2;
+ transform: translateY(-$font-size-sm + $border-width);
+ }
+}
+
+.divider {
+ border-top: $border-width solid $border-color-light;
+ height: $border-width;
+ margin: $unit-2 0;
+
+ &[data-content] {
+ margin: $unit-4 0;
+ }
+}
+
+.divider-vert {
+ display: block;
+ padding: $unit-4;
+
+ &::before {
+ border-left: $border-width solid $border-color;
+ bottom: $unit-2;
+ content: "";
+ display: block;
+ left: 50%;
+ position: absolute;
+ top: $unit-2;
+ transform: translateX(-50%);
+ }
+
+ &[data-content]::after {
+ left: 50%;
+ padding: $unit-1 0;
+ position: absolute;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ }
+}
diff --git a/themes/quark/scss/spectre/utilities/_loading.scss b/themes/quark/scss/spectre/utilities/_loading.scss
new file mode 100644
index 0000000..1b4ea60
--- /dev/null
+++ b/themes/quark/scss/spectre/utilities/_loading.scss
@@ -0,0 +1,34 @@
+// Loading
+.loading {
+ color: transparent !important;
+ min-height: $unit-4;
+ pointer-events: none;
+ position: relative;
+ &::after {
+ animation: loading 500ms infinite linear;
+ border: $border-width-lg solid $primary-color;
+ border-radius: 50%;
+ border-right-color: transparent;
+ border-top-color: transparent;
+ content: "";
+ display: block;
+ height: $unit-4;
+ left: 50%;
+ margin-left: -$unit-2;
+ margin-top: -$unit-2;
+ position: absolute;
+ top: 50%;
+ width: $unit-4;
+ z-index: $zindex-0;
+ }
+
+ &.loading-lg {
+ min-height: $unit-10;
+ &::after {
+ height: $unit-8;
+ margin-left: -$unit-4;
+ margin-top: -$unit-4;
+ width: $unit-8;
+ }
+ }
+}
diff --git a/themes/quark/scss/spectre/utilities/_position.scss b/themes/quark/scss/spectre/utilities/_position.scss
new file mode 100644
index 0000000..c1a7f75
--- /dev/null
+++ b/themes/quark/scss/spectre/utilities/_position.scss
@@ -0,0 +1,54 @@
+// Position
+.clearfix {
+ @include clearfix();
+}
+
+.float-left {
+ float: left !important;
+}
+
+.float-right {
+ float: right !important;
+}
+
+.p-relative {
+ position: relative !important;
+}
+
+.p-absolute {
+ position: absolute !important;
+}
+
+.p-fixed {
+ position: fixed !important;
+}
+
+.p-sticky {
+ position: sticky !important;
+}
+
+.p-centered {
+ display: block;
+ float: none;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.flex-centered {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+}
+
+// Spacing
+@include margin-variant(0, 0);
+
+@include margin-variant(1, $unit-1);
+
+@include margin-variant(2, $unit-2);
+
+@include padding-variant(0, 0);
+
+@include padding-variant(1, $unit-1);
+
+@include padding-variant(2, $unit-2);
diff --git a/themes/quark/scss/spectre/utilities/_shapes.scss b/themes/quark/scss/spectre/utilities/_shapes.scss
new file mode 100644
index 0000000..23e131e
--- /dev/null
+++ b/themes/quark/scss/spectre/utilities/_shapes.scss
@@ -0,0 +1,8 @@
+// Shapes
+.s-rounded {
+ border-radius: $border-radius;
+}
+
+.s-circle {
+ border-radius: 50%;
+}
\ No newline at end of file
diff --git a/themes/quark/scss/spectre/utilities/_text.scss b/themes/quark/scss/spectre/utilities/_text.scss
new file mode 100644
index 0000000..67793ac
--- /dev/null
+++ b/themes/quark/scss/spectre/utilities/_text.scss
@@ -0,0 +1,64 @@
+// Text
+// Text alignment utilities
+.text-left {
+ text-align: left;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-justify {
+ text-align: justify;
+}
+
+// Text transform utilities
+.text-lowercase {
+ text-transform: lowercase;
+}
+
+.text-uppercase {
+ text-transform: uppercase;
+}
+
+.text-capitalize {
+ text-transform: capitalize;
+}
+
+// Text style utilities
+.text-normal {
+ font-weight: normal;
+}
+
+.text-bold {
+ font-weight: bold;
+}
+
+.text-italic {
+ font-style: italic;
+}
+
+.text-large {
+ font-size: 1.2em;
+}
+
+// Text overflow utilities
+.text-ellipsis {
+ @include text-ellipsis();
+}
+
+.text-clip {
+ overflow: hidden;
+ text-overflow: clip;
+ white-space: nowrap;
+}
+
+.text-break {
+ hyphens: auto;
+ word-break: break-word;
+ word-wrap: break-word;
+}
diff --git a/themes/quark/scss/theme.scss b/themes/quark/scss/theme.scss
new file mode 100644
index 0000000..9f17a70
--- /dev/null
+++ b/themes/quark/scss/theme.scss
@@ -0,0 +1,21 @@
+// Core variables and mixins
+@import 'theme/variables';
+@import 'spectre/variables';
+@import 'spectre/mixins';
+
+@import 'theme/fonts';
+@import 'theme/mixins';
+@import 'theme/framework';
+@import 'theme/typography';
+@import 'theme/forms';
+@import 'theme/mobile';
+@import 'theme/animation';
+
+@import 'theme/header';
+@import 'theme/footer';
+@import 'theme/menu';
+
+// Extra Skeleton Styling
+@import 'theme/blog';
+@import 'theme/onepage';
+
diff --git a/themes/quark/scss/theme/_animation.scss b/themes/quark/scss/theme/_animation.scss
new file mode 100644
index 0000000..3809282
--- /dev/null
+++ b/themes/quark/scss/theme/_animation.scss
@@ -0,0 +1,23 @@
+.default-animation {
+ transition: all 0.5s ease;
+}
+
+// Pulse Animation
+.pulse {
+ animation-name: pulse_animation;
+ animation-duration: 2000ms;
+ transform-origin:70% 70%;
+ animation-iteration-count: infinite;
+ animation-timing-function: linear;
+}
+
+@keyframes pulse_animation {
+ 0% { transform: scale(1); }
+ 30% { transform: scale(1); }
+ 40% { transform: scale(1.08); }
+ 50% { transform: scale(1); }
+ 60% { transform: scale(1); }
+ 70% { transform: scale(1.05); }
+ 80% { transform: scale(1); }
+ 100% { transform: scale(1); }
+}
diff --git a/themes/quark/scss/theme/_blog.scss b/themes/quark/scss/theme/_blog.scss
new file mode 100644
index 0000000..3c7cd91
--- /dev/null
+++ b/themes/quark/scss/theme/_blog.scss
@@ -0,0 +1,114 @@
+/** Extra columns spacing **/
+.extra-spacing:not(.col-12), :not(.col12) > .e-content {
+ padding-right: 1rem;
+
+ @include breakpoint(md) {
+ padding-right: 0;
+ }
+}
+
+/** Breadcrumbs styling **/
+#breadcrumbs {
+ padding-left: 0;
+ display: flex;
+ align-items: center;
+ margin-top: -1rem;
+ margin-bottom: 1rem;
+
+
+ i {
+ display: none;
+ }
+
+ span, a {
+ padding: 0 0.5rem;
+ &:first-child {
+ padding-left: 0;
+ }
+ }
+
+ span, a {
+ &:not(:first-child)::before {
+ color: #e7e9ed;
+ content: "/";
+ padding-right: 1rem;
+ }
+ }
+}
+
+/** Blog Listing **/
+.blog-listing {
+
+ .bricklayer-column {
+ padding-left: 0px;
+ padding-right: 25px;
+
+ }
+ .card {
+ margin-bottom: 25px;
+ border: 0;
+ box-shadow: 0 10px 45px -9px rgba(0,0,0,0.1);
+ }
+
+ .card-footer {
+ text-align: right;
+ }
+
+ .blog-date {
+ font-size: 13px;
+ }
+
+ .label {
+
+ }
+}
+
+/** Blog Item **/
+.content-title {
+ margin-bottom: 2rem;
+
+ h2 {
+ margin-bottom: 0.5rem;
+ }
+}
+
+.label {
+ font-size: 12px;
+ text-transform: uppercase;
+}
+
+/** Pagination **/
+ul.pagination {
+ justify-content: center;
+}
+
+.prev-next {
+ margin-top: 4rem;
+}
+
+/** Sidebar specific tweaks **/
+#sidebar {
+
+ ul.related-pages {
+ box-shadow: none;
+ padding: 0;
+ z-index: 1;
+
+ li {
+ border-bottom: 1px solid $border-color;
+ &:last-child {
+ border-bottom: 0;
+ }
+ }
+
+ }
+
+ ul.archives {
+ list-style: none;
+ margin-left: 0;
+
+ .label {
+ vertical-align: text-top;
+ }
+ }
+}
diff --git a/themes/quark/scss/theme/_extensions.scss b/themes/quark/scss/theme/_extensions.scss
new file mode 100644
index 0000000..975daa2
--- /dev/null
+++ b/themes/quark/scss/theme/_extensions.scss
@@ -0,0 +1,7 @@
+.search-input, [data-grav-field="array"] input, [data-grav-field="array"] textarea {
+ @extend .form-input;
+}
+
+.button {
+ @extend .btn;
+}
diff --git a/themes/quark/scss/theme/_fonts.scss b/themes/quark/scss/theme/_fonts.scss
new file mode 100644
index 0000000..8809dc7
--- /dev/null
+++ b/themes/quark/scss/theme/_fonts.scss
@@ -0,0 +1 @@
+$title-font-family: $base-font-family, $fallback-font-family !default;
\ No newline at end of file
diff --git a/themes/quark/scss/theme/_footer.scss b/themes/quark/scss/theme/_footer.scss
new file mode 100644
index 0000000..e88afc5
--- /dev/null
+++ b/themes/quark/scss/theme/_footer.scss
@@ -0,0 +1,17 @@
+// Sticky Footer solution
+body.sticky-footer {
+ height: 100%;
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+
+ #page-wrapper {
+ flex: 1 0 auto;
+ }
+}
+
+#footer {
+ color: #acb3c2;
+ padding: 1rem $horiz-padding 0;
+ text-align: center;
+}
\ No newline at end of file
diff --git a/themes/quark/scss/theme/_forms.scss b/themes/quark/scss/theme/_forms.scss
new file mode 100644
index 0000000..f9a357f
--- /dev/null
+++ b/themes/quark/scss/theme/_forms.scss
@@ -0,0 +1,77 @@
+form {
+ .button-wrapper {
+ margin-top: 0.75rem;
+ margin-bottom: 1rem;
+ }
+
+ span.required {
+ color: $error-color;
+ font-weight: 700;
+ font-size: 1.2rem;
+ }
+
+ .form-input[type=range] {
+ appearance: slider-horizontal;
+ &:focus {
+ box-shadow: none;
+ border: none;
+ }
+ }
+
+ /** Reset some defaults for Quark Theme **/
+ .form-group:not(.form-field-toggleable) {
+ .checkboxes {
+ display: inherit;
+
+ label {
+ display: inherit;
+ padding: (($control-size-sm - $line-height) / 2) $control-padding-x (($control-size-sm - $line-height) / 2) ($control-icon-size + $control-padding-x);
+ margin: inherit;
+
+ &:before {
+ display: none;
+ }
+ }
+ }
+ }
+
+}
+
+#grav-login {
+
+ > form {
+ margin: 2rem auto 0;
+ max-width: 350px;
+ }
+ .form-label {
+ display: none;
+ }
+ .form-data {
+ margin: 1rem 0;
+ }
+ .form-input {
+ text-align: center;
+ }
+ .button-wrapper {
+ text-align: right;
+
+ .form-data.rememberme {
+ margin: 0;
+ float: left;
+ }
+ }
+
+ .login-form {
+ button[type="submit"] {
+ @include button-primary;
+ }
+ }
+
+ .twofa-form {
+ button[type="submit"]:first-child {
+ @include button-primary;
+ float: right;
+ margin-left: 4px;
+ }
+ }
+}
diff --git a/themes/quark/scss/theme/_framework.scss b/themes/quark/scss/theme/_framework.scss
new file mode 100644
index 0000000..7f39cba
--- /dev/null
+++ b/themes/quark/scss/theme/_framework.scss
@@ -0,0 +1,156 @@
+html {
+ height: 100%;
+}
+
+#body-wrapper {
+ .container {
+ padding: $vert-padding;
+ }
+
+ // Fixed Header solution
+ .header-fixed & {
+ padding-top: $header-height-large;
+ }
+}
+
+.header-fixed {
+ .hero + #start > #body-wrapper {
+ padding-top: 0;
+ }
+}
+
+section.section {
+ padding-left: $horiz-padding;
+ padding-right: $horiz-padding;
+ position: relative;
+}
+
+.overlay-light, .overlay-dark, .overlay-light-gradient, .overlay-dark-gradient {
+ z-index: 0;
+}
+
+// Hero
+.hero {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ padding-top: 6rem;
+ padding-bottom: 7rem;
+ background-size: cover;
+ background-position: center;
+
+ h1 {
+ color: $header-text-dark;
+ font-size: 4rem;
+ }
+
+ h2 {
+ color: rgba($header-text-dark, 0.8);
+ font-size: 2.5rem;
+ }
+
+ &.hero-fullscreen {
+ min-height: 100vh;
+ }
+
+ &.hero-large {
+ min-height: 500px;
+ }
+
+ &.hero-medium {
+ min-height: 400px;
+ }
+
+ &.hero-small {
+ min-height: 110px;
+ }
+
+ &.hero-tiny {
+ min-height: 8rem;
+ }
+
+ .header-fixed & {
+ background-position: 50% 0;
+ }
+
+ //&.parallax {
+ // background-attachment: fixed;
+ //}
+
+ @include breakpoint(md) {
+ h1 {
+ font-size: 3rem;
+ }
+ h2 {
+ font-size: 1.75rem;
+ }
+ }
+
+ @include breakpoint(sm) {
+ h1 {
+ font-size: 2rem;
+ }
+ h2 {
+ font-size: 1.25rem;
+ }
+ }
+
+
+ &.text-light {
+ h1 {
+ color: $header-text-light;
+ }
+ h2 {
+ color: rgba($header-text-light, 0.8);
+ }
+ }
+
+ p {
+ font-size: .9rem;
+ font-weight: 300;
+ }
+
+ #to-start {
+ display: inline-block;
+ position: absolute;
+ bottom: 10px;
+ font-size: 2rem;
+ cursor: pointer;
+ }
+}
+
+// Overlay
+.image-overlay {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: -1;
+
+ .overlay-light & {
+ background: rgba(#fff, 0.4);
+ }
+
+ .overlay-light-gradient & {
+ background: linear-gradient(to bottom, rgba(#fff,0.5), rgba(#fff,0.2));
+ }
+
+ .overlay-dark & {
+ background: rgba(#000, 0.4);
+ }
+
+ .overlay-dark-gradient & {
+ background: linear-gradient(to bottom, rgba(#000,0.5), rgba(#000,0.2));
+ }
+}
+
+
+
+
+
+
+
+
+
diff --git a/themes/quark/scss/theme/_header.scss b/themes/quark/scss/theme/_header.scss
new file mode 100644
index 0000000..6bdddba
--- /dev/null
+++ b/themes/quark/scss/theme/_header.scss
@@ -0,0 +1,101 @@
+#header {
+ width: 100%;
+ height: $header-height-large;
+ border-bottom: 1px solid rgba($gray-color, 0.2);
+ @extend .default-animation;
+
+ font-size: 0.7rem;
+ font-weight: 700;
+
+ background: $light-color;
+ color: $dark-color;
+
+ a {
+ color: $dark-color;
+ }
+
+ .logo svg path {
+ fill: $header-color-dark;
+ }
+
+ .header-dark &:not(.scrolled) {
+ background: $header-color-dark;
+ color: $light-color;
+ a {
+ color: rgba($light-color, 0.7) !important;
+ }
+ a.active {
+ color: $light-color !important;
+ }
+ .dropmenu ul ul a {
+ color: $dark-color !important;
+ }
+ .logo svg path {
+ fill: $light-color;
+ }
+ }
+
+ .header-dark.header-transparent &:not(.scrolled) {
+ background: rgba(#000, 0.05);
+ }
+
+ .header-transparent &:not(.scrolled) {
+ background: rgba(#fff, 0.05);
+ //border-bottom: 0 !important;
+ }
+
+ .navbar-section {
+ height: $header-height-large;
+ @extend .default-animation;
+
+ @include breakpoint(md) {
+ margin-right: 2rem;
+ }
+ }
+
+ .navbar-section.desktop-menu {
+ @include breakpoint(md) {
+ display: none;
+ }
+ }
+
+ .logo {
+ svg, img {
+ height: 42px;
+ display: inherit;
+ @extend .default-animation;
+ }
+ }
+
+ // Fixed Header solution
+ .header-fixed & {
+ position: fixed;
+ top: 0;
+ z-index: 2;
+ }
+}
+
+// Animate Fixed Header
+body.header-fixed.header-animated {
+ #header.scrolled {
+ height: $header-height-small;
+
+ .navbar-section {
+ height: $header-height-small;
+ }
+
+ .logo {
+ svg, img {
+ height: 28px;
+ }
+ }
+
+ ~ .mobile-menu .button_container {
+ top: 0.5rem;
+ }
+ }
+}
+
+.login-status-wrapper {
+ white-space: nowrap;
+}
diff --git a/themes/quark/scss/theme/_menu.scss b/themes/quark/scss/theme/_menu.scss
new file mode 100644
index 0000000..fee9483
--- /dev/null
+++ b/themes/quark/scss/theme/_menu.scss
@@ -0,0 +1,94 @@
+.dropmenu {
+
+ @include breakpoint(md) {
+ display: none;
+ }
+
+ ul {
+ white-space: nowrap;
+ margin: 0;
+ display: flex;
+
+ li {
+ position: relative;
+ margin: 0;
+
+ a {
+ text-decoration: none;
+ padding: $dropmenu-vert-padding ($dropmenu-horiz-padding + $dropmenu-child-padding) $dropmenu-vert-padding $dropmenu-horiz-padding;
+ display: block;
+
+ &:hover, &:focus, &.active {
+ color: $dropmenu-hover-text !important;
+ }
+
+ &:before {
+ content: '\f107';
+ font-family: 'FontAwesome';
+ display: inline-block;
+ vertical-align: middle;
+ float: right;
+ margin-right: - (2 *$dropmenu-child-padding);
+ }
+
+ &:only-child {
+ //background: none;
+ padding-right: $dropmenu-horiz-padding;
+
+ &:before {
+ content: '';
+ }
+ }
+ }
+
+ &:hover {
+ & > ul {
+ display: block;
+ visibility: visible;
+ }
+ }
+ }
+
+ ul li a:before {
+ content: '\f105';
+ }
+
+ ul {
+ position: absolute;
+ top: 100%;
+ list-style: none;
+ background: $dropmenu-bg;
+ box-shadow: $dropmenu-shadow;
+ visibility: hidden;
+
+ ul {
+ position: absolute;
+ left: 100%;
+ top: 0;
+ }
+ }
+
+ }
+
+ & > ul > li {
+ display: inline-block;
+ }
+
+ // Animation options
+ &.animated {
+ ul li {
+ transition: background .7s, color 0.5s;
+ }
+
+ ul li:hover > ul {
+ opacity: 1;
+ transform: translateY(0);
+ }
+
+ ul ul {
+ transition: transform .3s, opacity .5s;
+ opacity: 0;
+ transform: translateY(-10px);
+ }
+ }
+}
\ No newline at end of file
diff --git a/themes/quark/scss/theme/_mixins.scss b/themes/quark/scss/theme/_mixins.scss
new file mode 100644
index 0000000..273a0a4
--- /dev/null
+++ b/themes/quark/scss/theme/_mixins.scss
@@ -0,0 +1,77 @@
+@mixin breakpoint($point) {
+ @if $point == 2x {
+ @media (min-width:$size-2x) {
+ @content;
+ }
+ } @else if $point == xl {
+ @media (max-width: $size-xl) {
+ @content;
+ }
+
+ } @else if $point == lg {
+ @media (max-width: $size-lg) {
+ @content;
+ }
+ } @else if $point == md {
+ @media (max-width: $size-md) {
+ @content;
+ }
+ } @else if $point == sm {
+ @media (max-width: $size-sm) {
+ @content;
+ }
+ } @else if $point == xs {
+ @media (max-width: $size-xs) {
+ @content;
+ }
+ } @else {
+ @warn "Breakpoint mixin supports: xs, sm, md, lg, xl, 2x";
+ }
+}
+
+@mixin vertical-align($position: relative) {
+ position: $position;
+ top: 50%;
+ transform: translateY(-50%);
+}
+
+@mixin button-primary() {
+ background: $primary-color;
+ border-color: $primary-color-dark;
+ color: $light-color;
+ &:focus,
+ &:hover {
+ background: darken($primary-color-dark, 2%);
+ border-color: darken($primary-color-dark, 5%);
+ color: $light-color;
+ }
+ &:active,
+ &.active {
+ background: darken($primary-color-dark, 4%);
+ border-color: darken($primary-color-dark, 7%);
+ color: $light-color;
+ }
+}
+
+@function strip-unit($value) {
+ @return $value / ($value * 0 + 1);
+}
+
+@mixin fluid-type($min-vw, $max-vw, $min-font-size, $max-font-size) {
+ $u1: unit($min-vw);
+ $u2: unit($max-vw);
+ $u3: unit($min-font-size);
+ $u4: unit($max-font-size);
+
+ @if $u1 == $u2 and $u1 == $u3 and $u1 == $u4 {
+ & {
+ font-size: $min-font-size;
+ @media screen and (min-width: $min-vw) {
+ font-size: calc(#{$min-font-size} + #{strip-unit($max-font-size - $min-font-size)} * ((100vw - #{$min-vw}) / #{strip-unit($max-vw - $min-vw)}));
+ }
+ @media screen and (min-width: $max-vw) {
+ font-size: $max-font-size;
+ }
+ }
+ }
+}
diff --git a/themes/quark/scss/theme/_mobile.scss b/themes/quark/scss/theme/_mobile.scss
new file mode 100644
index 0000000..c27b28f
--- /dev/null
+++ b/themes/quark/scss/theme/_mobile.scss
@@ -0,0 +1,193 @@
+.mobile-container {
+ position: absolute;
+ //width: 100%;
+ //height: 100%;
+ top: 40%;
+ left: 0;
+ margin: 0 auto;
+ z-index: 2;
+}
+
+.mobile-logo {
+ svg, img {
+ height: 42px;
+ margin-top: .7rem;
+ margin-left: 1.4rem;
+
+ path {
+ fill: $light-color;
+ }
+
+ }
+}
+
+// Hamburger Menu
+.mobile-menu {
+
+ display: none;
+ top: 0;
+ right: 0;
+ z-index: 3;
+
+ .header-fixed & {
+ position: fixed;
+ }
+
+ @include breakpoint(md) {
+ display: block;
+ }
+
+ .button_container {
+ position: absolute;
+ top: 1.3rem;
+ right: $horiz-padding;
+ height: $mobile-button-height;
+ width: $mobile-button-width;
+ cursor: pointer;
+ z-index: 100;
+ transition: opacity .25s ease, top 0.5s ease;
+
+ $bar-offset: $mobile-button-height / 3;
+
+ &:hover {
+ opacity: .7;
+ }
+
+ &.active {
+ position: fixed;
+
+ .top {
+ transform: translateY($bar-offset) translateX(0) rotate(45deg);
+ background: $mobile-color-active;
+ }
+ .middle {
+ opacity: 0;
+ background: $mobile-color-active;
+ }
+
+ .bottom {
+ transform: translateY(-($bar-offset)) translateX(0) rotate(-45deg);
+ background: $mobile-color-active;
+ }
+ }
+
+ span {
+ background: $mobile-color-main;
+ border: none;
+ height: 4px;
+ width: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ transition: all .35s ease;
+ cursor: pointer;
+
+ &:nth-of-type(2) {
+ top: $bar-offset;
+ }
+
+ &:nth-of-type(3) {
+ top: $bar-offset * 2;
+ }
+ }
+ }
+}
+
+.overlay {
+ position: fixed;
+ background: #000;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 0%;
+ opacity: 0;
+ visibility: hidden;
+ transition: opacity .35s, visibility .35s, height .35s;
+
+ &.open {
+ opacity: .95;
+ visibility: visible;
+ height: 100%;
+
+ }
+ nav {
+
+ position: relative;
+ margin: 0 auto;
+ text-align: center;
+ }
+}
+
+.overlay-menu {
+ height: calc(100% - 90px);
+ overflow-y: scroll;
+
+ & > .tree {
+ text-align: left;
+ }
+}
+
+
+.treemenu {
+
+ &.treemenu-root {
+ margin: 1rem;
+ }
+
+ li {
+ list-style: none;
+ margin: 0 0 1px;
+ padding: 5px 0;
+ line-height: 1.2rem;
+
+ background: rgba($gray-color-dark,0.1);
+
+ a {
+ display: block;
+ margin-left: 1.2rem;
+ font-size: 1rem;
+
+ &:hover, &:focus, &.active {
+ color: $primary-color-light !important;
+ text-decoration: none;
+ }
+ }
+ }
+
+ ul {
+ margin: 0 0 0 1rem;
+ }
+
+ .toggler {
+ cursor: pointer;
+ vertical-align: top;
+ font-size: 1.1rem;
+ line-height: 1rem;
+ padding-left: 5px;
+ float: left;
+
+ &:before {
+ display: inline-block; margin-right: 2pt;
+ }
+ }
+
+ li.tree-empty > .toggler {
+ opacity: 0.3; cursor: default;
+
+ &:before {
+ content: "\2022";
+ }
+ }
+
+ li.tree-closed > .toggler:before {
+ content: "+";
+ }
+
+ li.tree-opened > .toggler:before {
+ content: "\2212";
+ }
+}
+
+.mobile-nav-open {
+ overflow-y: hidden;
+}
diff --git a/themes/quark/scss/theme/_onepage.scss b/themes/quark/scss/theme/_onepage.scss
new file mode 100644
index 0000000..00d8700
--- /dev/null
+++ b/themes/quark/scss/theme/_onepage.scss
@@ -0,0 +1,122 @@
+.modular-hero {
+ #to-start {
+ bottom: 3.5rem;
+ }
+}
+
+.modular-features {
+ text-align: center;
+
+ &.offset-box {
+ .frame-box {
+ margin: -3rem (-1rem - $layout-spacing) 3rem;
+ padding: 1rem 1rem;
+ background: $light-color;
+ box-shadow: 0 0 75px 0 rgba($dark-color, 0.1);
+ }
+ }
+
+ &.small {
+
+ .columns {
+ margin-top: -1rem;
+ }
+
+ .column:hover {
+ .feature-icon i {
+ color: $primary-color;
+ }
+ }
+
+ .feature-icon {
+ display: block;
+ justify-content: left;
+
+
+ i {
+ position: relative;
+ display: inherit;
+ font-size: 70px;
+ margin: 0 auto 1rem;
+ transform: none;
+ left: auto;
+ top: auto;
+ color: $gray-color;
+ @extend .default-animation;
+
+ }
+ h6 {
+ text-transform: none;
+ }
+ }
+ }
+
+ .frame-box {
+ padding: 3rem 0;
+
+ > p {
+ max-width: 600px;
+ margin-left: auto;
+ margin-right: auto;
+ }
+ }
+
+ .column {
+ padding: 1rem;
+
+ &:hover {
+ .feature-icon {
+ color: $gray-color;
+ h6 {
+ color: $primary-color;
+ }
+ }
+ .feature-content {
+ color: $gray-color-dark;
+ }
+ }
+ }
+
+ .feature-icon {
+ font-size: 130px;
+ height: 100px;
+ color: $gray-color-light;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ margin: 1rem 0;
+ @extend .default-animation;
+
+ i {
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translateX(-50%) translateY(-50%);
+ }
+
+ h6 {
+ background: $light-color;
+ line-height: 1;
+ z-index: 1;
+ text-transform: uppercase;
+ font-weight: 600;
+ margin: 0;
+ display: block;
+ color: $gray-color-dark;
+ }
+ }
+
+ .feature-content {
+ color: $gray-color;
+ }
+}
+
+.modular-text {
+ padding-top: 4rem;
+ padding-bottom: 4rem;
+
+ .columns.left {
+ flex-direction: row-reverse;
+ }
+}
\ No newline at end of file
diff --git a/themes/quark/scss/theme/_typography.scss b/themes/quark/scss/theme/_typography.scss
new file mode 100644
index 0000000..e9e641f
--- /dev/null
+++ b/themes/quark/scss/theme/_typography.scss
@@ -0,0 +1,178 @@
+html {
+ @include fluid-type($size-xs, $size-xl, $min-responsive-font-size, $html-font-size);
+}
+
+// Header Overrides
+h1, h2, h3, h4, h5, h6 {
+ margin-top: 2rem;
+ font-family: $title-font-family;
+ color: darken($body-font-color, 10%);
+}
+
+h1, .h1 {
+ font-size: 3rem;
+}
+
+h2, .h2 {
+ font-size: 1.8rem;
+}
+
+h6, .h6 {
+ font-weight: 400;
+}
+
+.title-center {
+ h1, h2 {
+ text-align: center;
+ }
+}
+
+.title-h1h2 {
+ h1 {
+ font-weight: 100;
+ margin-bottom: 0;
+ line-height: 1.1;
+
+ strong, bold {
+ font-weight: 400;
+ }
+ }
+ h1 + h2 {
+ line-height: 1.1;
+ margin-top: 0;
+ }
+
+}
+
+// Typography Hints
+.title-h1h2, .title-center {
+ h1 + h2 {
+ margin-bottom: 50px;
+ font-weight: 700;
+ }
+}
+
+a:focus {
+ outline: none !important;
+ box-shadow: none !important;
+}
+
+img {
+ max-width: 100%;
+}
+
+// Tables
+.table > table {
+ border-spacing: 0;
+ border-collapse: collapse;
+ width: 100%;
+}
+
+
+// Codeblocks
+pre code, pre.xdebug-var-dump{
+ background: #fafafa;
+ display: block;
+ padding: 1rem !important;
+ line-height: 1.5;
+ color: inherit;
+ border-radius: 2px;
+ overflow-x: auto;
+}
+
+pre[class*="language-"] {
+ code {
+ border-radius: inherit;
+ padding: 0 !important;
+ overflow-x: initial;
+ }
+}
+
+pre {
+ code:not(.hljs):not([class*="language-"]) {
+ background: #f8f8f8;
+ }
+}
+
+// Icon Tweaks
+i.fa {
+
+
+ &.fa-heart, &.fa-heart-o {
+ &.pulse {
+ color: #920
+ }
+ }
+}
+
+// Font Weights
+b,
+strong {
+ font-weight: 700;
+}
+
+.heavy {
+ font-weight: 700;
+}
+
+.light {
+ font-weight: 200;
+}
+
+// Colors
+.text-light {
+ color: rgba($light-color, 0.8);
+
+ h1, h2, h3, h4, h5, h6 {
+ color: rgba($light-color, 0.9);
+ }
+}
+
+// Error configuration
+#error {
+ text-align: center;
+ position: relative;
+ margin-top: 5rem;
+
+ .icon {
+ font-size: 50px;
+ }
+}
+
+// Messages
+#messages {
+ margin-bottom: 1rem;
+
+ .icon {
+ font-size: 1rem;
+ }
+}
+
+// Lists
+ul,
+ol {
+ margin-left: $unit-8;
+
+ ul,
+ ol {
+ margin-left: $unit-8;
+ }
+}
+
+ul {
+ list-style: disc outside;
+}
+
+ol {
+ list-style: decimal outside;
+}
+
+// Notices
+.notices {
+ margin: 1.5rem 0;
+ p {
+ margin: 1rem 0;
+ }
+}
+
+
diff --git a/themes/quark/scss/theme/_variables.scss b/themes/quark/scss/theme/_variables.scss
new file mode 100644
index 0000000..7ad9273
--- /dev/null
+++ b/themes/quark/scss/theme/_variables.scss
@@ -0,0 +1,38 @@
+// Spectre Overrides
+$primary-color: #3085EE !default;
+$dark-color: #454d5d !default;
+$light-color: #fff !default;
+$gray-color: lighten($dark-color, 40%) !default;
+$gray-color-dark: darken($gray-color, 25%) !default;
+$border-color: lighten($dark-color, 60%) !default;
+$bg-color: lighten($dark-color, 66%) !default;
+$body-font-color: lighten($dark-color, 5%) !default;
+
+// Layout
+$horiz-padding: 1rem;
+$vert-padding: 2rem 0 2rem;
+
+// Fonts
+$min-responsive-font-size: 16px;
+
+// Header
+$header-height-large: 4rem;
+$header-height-small: 2.3rem;
+$header-color-dark: #222;
+$header-text-light: $light-color;
+$header-text-dark: darken($dark-color, 15%);
+
+// Dropdown Menu
+$dropmenu-bg: $light-color;
+$dropmenu-hover-text: $primary-color;
+$dropmenu-horiz-padding: 20px;
+$dropmenu-vert-padding: 7px;
+$dropmenu-child-padding: 10px;
+$dropmenu-shadow: 0 3px 5px rgba(0, 0, 0, 0.1);
+
+// Mobile Menu
+$mobile-color-main: $primary-color;
+$mobile-color-active: #FFF;
+$mobile-color-link: #FFF;
+$mobile-button-height: 24px;
+$mobile-button-width: 28px;
\ No newline at end of file
diff --git a/themes/quark/templates/blocks/base.html.twig b/themes/quark/templates/blocks/base.html.twig
new file mode 100644
index 0000000..a27a375
--- /dev/null
+++ b/themes/quark/templates/blocks/base.html.twig
@@ -0,0 +1,3 @@
+{% block content_surround %}
+{% block content %}{% endblock %}
+{% endblock %}
\ No newline at end of file
diff --git a/themes/quark/templates/blog.html.twig b/themes/quark/templates/blog.html.twig
new file mode 100644
index 0000000..cd4f1b0
--- /dev/null
+++ b/themes/quark/templates/blog.html.twig
@@ -0,0 +1,63 @@
+{% extends 'partials/base.html.twig' %}
+{% set blog_image = page.media.images[page.header.hero_image] ?: page.media.images|first %}
+{% set collection = page.collection() %}
+{% set blog = page.find(header_var('blog_url')|defined(theme_var('blog-page'))) %}
+{% set show_breadcrumbs = header_var('show_breadcrumbs', [page, blog])|defined(true) %}
+{% set show_sidebar = header_var('show_sidebar', [page, blog])|defined(true) %}
+{% set show_pagination = header_var('show_pagination', [page, blog])|defined(true) %}
+
+{% block stylesheets %}
+ {% do assets.addCss('theme://css/bricklayer.css') %}
+ {{ parent() }}
+{% endblock %}
+
+{% block javascripts %}
+ {{ parent() }}
+ {% do assets.add('theme://js/bricklayer.min.js') %}
+ {% do assets.add('theme://js/scopedQuerySelectorShim.min.js') %}
+{% endblock %}
+
+
+{% block hero %}
+ {% include 'partials/hero.html.twig' with {id: 'blog-hero', content: page.content, hero_image: blog_image} %}
+{% endblock %}
+
+{% block body %}
+
+
+
+ {% if show_breadcrumbs and config.plugins.breadcrumbs.enabled %}
+ {% include 'partials/breadcrumbs.html.twig' %}
+ {% endif %}
+
+ {% embed 'partials/layout.html.twig' with {blog: page} %}
+ {% block item %}
+
+
+ {% for child in collection %}
+ {% include 'partials/blog-list-item.html.twig' with {blog: page, page: child} %}
+ {% endfor %}
+
+
+ {% if show_pagination and config.plugins.pagination.enabled and collection.params.pagination %}
+
+ {% endif %}
+
+ {% endblock %}
+
+ {% block sidebar %}
+ {% include 'partials/sidebar.html.twig' %}
+ {% endblock %}
+ {% endembed %}
+
+
+
+{% endblock %}
+
+
+
diff --git a/themes/quark/templates/default.html.twig b/themes/quark/templates/default.html.twig
new file mode 100644
index 0000000..1e97738
--- /dev/null
+++ b/themes/quark/templates/default.html.twig
@@ -0,0 +1,5 @@
+{% extends 'partials/base.html.twig' %}
+
+{% block content %}
+ {{ page.content|raw }}
+{% endblock %}
diff --git a/themes/quark/templates/error.html.twig b/themes/quark/templates/error.html.twig
new file mode 100644
index 0000000..5ecf0ae
--- /dev/null
+++ b/themes/quark/templates/error.html.twig
@@ -0,0 +1,12 @@
+{% extends 'partials/base.html.twig' %}
+
+{% block content %}
+
+
+
{{ 'PLUGIN_ERROR.ERROR'|t }} {{ page.header.http_response_code }}
+
+ {{ page.content|raw }}
+
+
+
+{% endblock %}
diff --git a/themes/quark/templates/forms/fields/checkbox/checkbox.html.twig b/themes/quark/templates/forms/fields/checkbox/checkbox.html.twig
new file mode 100644
index 0000000..ee60e71
--- /dev/null
+++ b/themes/quark/templates/forms/fields/checkbox/checkbox.html.twig
@@ -0,0 +1,32 @@
+{% extends "forms/field.html.twig" %}
+
+{% block label %}
+{% endblock %}
+
+{% block input %}
+ {% set id = field.id|default(field.name) ~ '-' ~ key %}
+
+
+
+
+ {{ field.label|t|e }} {{ field.validate.required in ['on', 'true', 1] ? '* ' }}
+
+
+{% endblock %}
diff --git a/themes/quark/templates/forms/fields/checkboxes/checkboxes.html.twig b/themes/quark/templates/forms/fields/checkboxes/checkboxes.html.twig
new file mode 100644
index 0000000..8674ab8
--- /dev/null
+++ b/themes/quark/templates/forms/fields/checkboxes/checkboxes.html.twig
@@ -0,0 +1,44 @@
+{% extends "forms/field.html.twig" %}
+
+{% set originalValue = value %}
+{% set value = (value is null ? field.default : value) %}
+{% if field.use == 'keys' and field.default %}
+ {% set value = field.default|merge(value) %}
+{% endif %}
+
+{% block global_attributes %}
+ {{ parent() }}
+ data-grav-keys="{{ field.use == 'keys' ? 'true' : 'false' }}"
+ data-grav-field-name="{{ (scope ~ field.name)|fieldName }}"
+{% endblock %}
+
+{% block input %}
+ {% for key, text in field.options %}
+
+ {% set id = field.id|default(field.name) ~ '-' ~ key %}
+ {% set name = field.use == 'keys' ? key : id %}
+ {% set val = field.use == 'keys' ? '1' : key %}
+ {% set checked = (field.use == 'keys' ? value[key] : key in value) %}
+ {% set help = (key in field.help_options|keys ? field.help_options[key] : false) %}
+
+
+
+
+
+ {% if help %}
+ {{ text|t|e }}
+ {% else %}
+ {{ text|t|e }}
+ {% endif %}
+
+
+ {% endfor %}
+{% endblock %}
diff --git a/themes/quark/templates/forms/fields/radio/radio.html.twig b/themes/quark/templates/forms/fields/radio/radio.html.twig
new file mode 100644
index 0000000..ecda8f4
--- /dev/null
+++ b/themes/quark/templates/forms/fields/radio/radio.html.twig
@@ -0,0 +1,26 @@
+{% extends "forms/field.html.twig" %}
+
+{% set originalValue = value %}
+{% set value = (value is null ? field.default : value) %}
+
+{% block input %}
+ {% for key, text in field.options %}
+ {% set id = field.id|default(field.name) ~ '-' ~ key %}
+
+
+
+
+
+ {{ text|t|raw }}
+
+
+ {% endfor %}
+{% endblock %}
diff --git a/themes/quark/templates/forms/fields/switch/switch.html.twig b/themes/quark/templates/forms/fields/switch/switch.html.twig
new file mode 100644
index 0000000..24d5609
--- /dev/null
+++ b/themes/quark/templates/forms/fields/switch/switch.html.twig
@@ -0,0 +1,3 @@
+{% set form_field_checkbox_classes = 'form-switch' %}
+{% extends "forms/fields/checkbox/checkbox.html.twig" %}
+
diff --git a/themes/quark/templates/item.html.twig b/themes/quark/templates/item.html.twig
new file mode 100644
index 0000000..f73fc52
--- /dev/null
+++ b/themes/quark/templates/item.html.twig
@@ -0,0 +1,41 @@
+{% extends 'partials/base.html.twig' %}
+{% set blog = page.find(header_var('blog_url')|defined(theme_var('blog-page'))) %}
+{% set show_breadcrumbs = header_var('show_breadcrumbs', [page, blog])|defined(true) %}
+{% set show_sidebar = header_var('show_sidebar', [page, blog])|defined(true) %}
+{% set show_pagination = header_var('show_pagination', [page, blog])|defined(true) %}
+{% set hero_image_name = page.header.hero_image %}
+
+{% block hero %}
+ {% if hero_image_name %}
+ {% set hero_image = page.media[hero_image_name] %}
+ {% set content %}
+ {{ page.title }}
+ {{ page.header.subtitle }}
+ {% include 'partials/blog/date.html.twig' %}
+ {% include 'partials/blog/taxonomy.html.twig' %}
+ {% endset %}
+ {% include 'partials/hero.html.twig' with {id: 'blog-hero'} %}
+
+ {% endif %}
+{% endblock %}
+
+{% block body %}
+
+
+
+ {% if show_breadcrumbs and config.plugins.breadcrumbs.enabled %}
+ {% include 'partials/breadcrumbs.html.twig' %}
+ {% endif %}
+
+ {% embed 'partials/layout.html.twig' %}
+ {% block item %}
+ {% include 'partials/blog-item.html.twig' %}
+ {% endblock %}
+ {% block sidebar %}
+ {% include 'partials/sidebar.html.twig' %}
+ {% endblock %}
+ {% endembed %}
+
+
+
+{% endblock %}
diff --git a/themes/quark/templates/macros/macros.html.twig b/themes/quark/templates/macros/macros.html.twig
new file mode 100644
index 0000000..d11a20a
--- /dev/null
+++ b/themes/quark/templates/macros/macros.html.twig
@@ -0,0 +1,16 @@
+{% macro nav_loop(page) %}
+ {% import _self as macros %}
+ {% for p in page.children.visible %}
+ {% set active_page = (p.active or p.activeChild) ? 'active' : '' %}
+
+
+ {{ p.menu }}
+
+ {% if p.children.visible.count > 0 %}
+
+ {{ macros.nav_loop(p) }}
+
+ {% endif %}
+
+ {% endfor %}
+{% endmacro %}
\ No newline at end of file
diff --git a/themes/quark/templates/modular.html.twig b/themes/quark/templates/modular.html.twig
new file mode 100644
index 0000000..dc6b175
--- /dev/null
+++ b/themes/quark/templates/modular.html.twig
@@ -0,0 +1,60 @@
+{% extends 'partials/base.html.twig' %}
+
+{% set show_onpage_menu = header.onpage_menu == true or header.onpage_menu is null %}
+
+{% block javascripts %}
+ {% if show_onpage_menu %}
+ {% do assets.add('theme://js/singlepagenav.min.js') %}
+ {% endif %}
+ {{ parent() }}
+{% endblock %}
+
+{% block bottom %}
+ {{ parent() }}
+ {% if show_onpage_menu %}
+
+ {% endif %}
+{% endblock %}
+
+{% block header_navigation %}
+ {% if show_onpage_menu %}
+
+ {% else %}
+ {{ parent() }}
+ {% endif %}
+{% endblock %}
+
+{% block hero %}
+ {% for module in page.collection() if module.template == 'modular/hero' %}
+
+ {{ module.content|raw }}
+ {% endfor %}
+{% endblock %}
+
+{% block body %}
+ {% for module in page.collection() if module.template != 'modular/hero' %}
+
+ {{ module.content|raw }}
+ {% endfor %}
+{% endblock %}
diff --git a/themes/quark/templates/modular/features.html.twig b/themes/quark/templates/modular/features.html.twig
new file mode 100644
index 0000000..46fe7f3
--- /dev/null
+++ b/themes/quark/templates/modular/features.html.twig
@@ -0,0 +1,30 @@
+{% set grid_size = theme_var('grid-size') %}
+{% set columns = page.header.class == 'small' ? 'col-3 col-md-4 col-sm-6' : 'col-4 col-md-6 col-sm-12' %}
+
diff --git a/themes/quark/templates/modular/gallery.html.twig b/themes/quark/templates/modular/gallery.html.twig
new file mode 100644
index 0000000..66fdc96
--- /dev/null
+++ b/themes/quark/templates/modular/gallery.html.twig
@@ -0,0 +1,83 @@
+{% set styling %}
+.lightbox-gallery {
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 0 20px;
+}
+
+.lightbox-gallery .lightbox-gallery__columns {
+ display: flex;
+ flex-wrap: wrap;
+ margin: 0 -10px;
+}
+
+.lightbox-gallery .lightbox-gallery__column {
+ width: 50%;
+ padding: 0 10px;
+ margin-bottom: 20px;
+}
+
+.lightbox-gallery img {
+ display: block;
+ border-radius: 5px;
+ transition: all .2s ease-in-out;
+}
+
+.lightbox-gallery img:hover {
+ filter: brightness(60%);
+ transform: scale(1.05);
+}
+
+@media only screen and (min-width: 600px) {
+ .lightbox-gallery .lightbox-gallery__column {
+ width: calc(100% / 3);
+ }
+}
+
+@media only screen and (min-width: 1000px) {
+ .lightbox-gallery .lightbox-gallery__column {
+ width: 25%;
+ }
+}
+
+.lightbox-gallery .hidden {
+ display: none;
+}
+{% endset %}
+
+{% do assets.addInlineCss(styling) %}
+
+{% block module_content %}
+ {% set data = page.header.gallery %}
+ {% set thumb_width = data.thumb.width|default(600) %}
+ {% set thumb_height = data.thumb.height|default(450) %}
+
+
+
+ {% set gallery = md5(page.url) %}
+ {% for item in data.items %}
+
+ {% set item_image = page.media[item.image] %}
+ {% if item.title %}
+ {% set title = item.title %}
+ {% endif %}
+ {% if item.desc %}
+ {% set desc = ".desc-" ~ md5(item.desc) %}
+ {% endif %}
+ {% set content = item_image.cropZoom(thumb_width,thumb_height).html(title, title) %}
+ {% set image = item_image.url %}
+ {% include "partials/lightbox.html.twig" %}
+
+ {% endfor %}
+
+
+ {% for item in data.items %}
+ {% if item.desc %}
+
+
{{ item.desc|markdown(false) }}
+
+ {% endif %}
+ {% endfor %}
+
+
+{% endblock %}
diff --git a/themes/quark/templates/modular/hero.html.twig b/themes/quark/templates/modular/hero.html.twig
new file mode 100644
index 0000000..7dbba44
--- /dev/null
+++ b/themes/quark/templates/modular/hero.html.twig
@@ -0,0 +1,4 @@
+{% set grid_size = theme_var('grid-size') %}
+{% set hero_image = page.header.hero_image ? page.media[page.header.hero_image] : page.media.images|first %}
+
+{% include 'partials/hero.html.twig' %}
diff --git a/themes/quark/templates/modular/text.html.twig b/themes/quark/templates/modular/text.html.twig
new file mode 100644
index 0000000..4567a6f
--- /dev/null
+++ b/themes/quark/templates/modular/text.html.twig
@@ -0,0 +1,21 @@
+{% set grid_size = theme_var('grid-size') %}
+{% set image = page.media.images|first %}
+
+
diff --git a/themes/quark/templates/partials/archives.html.twig b/themes/quark/templates/partials/archives.html.twig
new file mode 100644
index 0000000..5bce622
--- /dev/null
+++ b/themes/quark/templates/partials/archives.html.twig
@@ -0,0 +1,13 @@
+
diff --git a/themes/quark/templates/partials/base.html.twig b/themes/quark/templates/partials/base.html.twig
new file mode 100644
index 0000000..06ce352
--- /dev/null
+++ b/themes/quark/templates/partials/base.html.twig
@@ -0,0 +1,113 @@
+{% set body_classes = body_class(['header-fixed', 'header-animated', 'header-dark', 'header-transparent', 'sticky-footer']) %}
+{% set grid_size = theme_var('grid-size') %}
+{% set compress = theme_var('production-mode') ? '.min.css' : '.css' %}
+{% use 'blocks/base.html.twig' %}
+
+
+
+{% block head deferred %}
+
+ {% if page.title %}{{ page.title|e('html') }} | {% endif %}{{ site.title|e('html') }}
+
+
+
+ {% include 'partials/metadata.html.twig' %}
+
+
+
+{% endblock head %}
+
+{% block stylesheets %}
+ {% do assets.addCss('theme://css-compiled/spectre'~compress) %}
+ {% if theme_var('spectre.exp') %}{% do assets.addCss('theme://css-compiled/spectre-exp'~compress) %}{% endif %}
+ {% if theme_var('spectre.icons') %}{% do assets.addCss('theme://css-compiled/spectre-icons'~compress) %}{% endif %}
+ {% do assets.addCss('theme://css-compiled/theme'~compress) %}
+ {% do assets.addCss('theme://css/custom.css') %}
+ {% do assets.addCss('theme://css/line-awesome.min.css') %}
+{% endblock %}
+
+{% block javascripts %}
+ {% do assets.addJs('jquery', 101) %}
+ {% do assets.addJs('theme://js/jquery.treemenu.js', {group:'bottom'}) %}
+ {% do assets.addJs('theme://js/site.js', {group:'bottom'}) %}
+{% endblock %}
+
+{% block assets deferred %}
+ {{ assets.css()|raw }}
+ {{ assets.js()|raw }}
+{% endblock %}
+
+
+
+ {% block header %}
+
+
+ {% endblock %}
+
+ {% block hero %}{% endblock %}
+
+
+ {% block body %}
+
+
+ {% block messages %}
+ {% include 'partials/messages.html.twig' ignore missing %}
+ {% endblock %}
+ {{ block('content_surround') }}
+
+
+ {% endblock %}
+
+
+
+
+ {% block footer %}
+ {% include 'partials/footer.html.twig' %}
+ {% endblock %}
+
+ {% block mobile %}
+
+
+
+ {% include 'partials/logo.html.twig' with {mobile: true} %}
+
+
+
+
+ {% endblock %}
+
+{% block bottom %}
+ {{ assets.js('bottom')|raw }}
+{% endblock %}
+
+
+
diff --git a/themes/quark/templates/partials/blog-item.html.twig b/themes/quark/templates/partials/blog-item.html.twig
new file mode 100644
index 0000000..cdc74b8
--- /dev/null
+++ b/themes/quark/templates/partials/blog-item.html.twig
@@ -0,0 +1,30 @@
+
+
+{% if not hero_image_name %}
+
+ {% include 'partials/blog/title.html.twig' with {title_level: 'h2'} %}
+ {% if page.header.subtitle %}
+
{{ page.header.subtitle }}
+ {% endif %}
+ {% include 'partials/blog/date.html.twig' %}
+ {% include 'partials/blog/taxonomy.html.twig' %}
+
+{% endif %}
+
+ {{ page.content|raw }}
+
+
+ {% if page.header.continue_link is same as(true) and config.plugins.comments.enabled %}
+ {% include 'partials/comments.html.twig' %}
+ {% endif %}
+
+
+
+ {% if not page.isLast %}
+ {{ 'THEME_QUARK.BLOG.ITEM.PREV_POST'|t }}
+ {% endif %}
+
+ {% if not page.isFirst %}
+ {{ 'THEME_QUARK.BLOG.ITEM.NEXT_POST'|t }}
+ {% endif %}
+
diff --git a/themes/quark/templates/partials/blog-list-item.html.twig b/themes/quark/templates/partials/blog-list-item.html.twig
new file mode 100644
index 0000000..74d0ddf
--- /dev/null
+++ b/themes/quark/templates/partials/blog-list-item.html.twig
@@ -0,0 +1,27 @@
+
+ {% set image = page.media.images|first %}
+ {% if image %}
+
+ {% endif %}
+
+
+ {% if page.summary != page.content %}
+ {{ page.summary|raw }}
+ {% else %}
+ {{ page.content|raw }}
+ {% endif %}
+
+
+
+
diff --git a/themes/quark/templates/partials/blog/date.html.twig b/themes/quark/templates/partials/blog/date.html.twig
new file mode 100644
index 0000000..a134d24
--- /dev/null
+++ b/themes/quark/templates/partials/blog/date.html.twig
@@ -0,0 +1,5 @@
+
+
+ {{ page.date|date(system.pages.dateformat.short) }}
+
+
diff --git a/themes/quark/templates/partials/blog/page-summary.html.twig b/themes/quark/templates/partials/blog/page-summary.html.twig
new file mode 100644
index 0000000..3c8fb7f
--- /dev/null
+++ b/themes/quark/templates/partials/blog/page-summary.html.twig
@@ -0,0 +1,8 @@
+
+ {% if page.summary != page.content %}
+ {{ page.summary|raw }}
+ {% else %}
+ {{ page.content|raw }}
+ {% endif %}
+
+
diff --git a/themes/quark/templates/partials/blog/taxonomy.html.twig b/themes/quark/templates/partials/blog/taxonomy.html.twig
new file mode 100644
index 0000000..8cab9fc
--- /dev/null
+++ b/themes/quark/templates/partials/blog/taxonomy.html.twig
@@ -0,0 +1,7 @@
+{% if page.taxonomy.tag %}
+
+ {% for tag in page.taxonomy.tag %}
+ {{ tag }}
+ {% endfor %}
+
+{% endif %}
diff --git a/themes/quark/templates/partials/blog/title.html.twig b/themes/quark/templates/partials/blog/title.html.twig
new file mode 100644
index 0000000..0a235a1
--- /dev/null
+++ b/themes/quark/templates/partials/blog/title.html.twig
@@ -0,0 +1,11 @@
+{% set title_level = title_level ?: 'h2' %}
+{% if page.header.link %}
+ <{{ title_level }} class="p-name mt-1">
+ {% if page.header.continue_link is not same as(false) %}
+
+ {% endif %}
+ {{ page.title }}
+ {{ title_level }}>
+{% else %}
+ <{{ title_level }} class="p-name mt-1">{{ page.title }} {{ title_level }}>
+{% endif %}
diff --git a/themes/quark/templates/partials/footer.html.twig b/themes/quark/templates/partials/footer.html.twig
new file mode 100644
index 0000000..15ea155
--- /dev/null
+++ b/themes/quark/templates/partials/footer.html.twig
@@ -0,0 +1,5 @@
+
diff --git a/themes/quark/templates/partials/form-messages.html.twig b/themes/quark/templates/partials/form-messages.html.twig
new file mode 100644
index 0000000..2dd7b91
--- /dev/null
+++ b/themes/quark/templates/partials/form-messages.html.twig
@@ -0,0 +1,6 @@
+{% if form.message %}
+ {% set inline_errors = form.inline_errors is not null ? form.inline_errors : config.plugins.form.inline_errors(false) %}
+ {% set status_mapping = {'success':'green', 'error': 'red', 'warning': 'yellow'} %}
+ {% set message = inline_errors and form.messages ? "GRAV.FORM.VALIDATION_FAIL"|t : form.message %}
+ {{ message|raw }}
+{% endif %}
\ No newline at end of file
diff --git a/themes/quark/templates/partials/hero.html.twig b/themes/quark/templates/partials/hero.html.twig
new file mode 100644
index 0000000..527581f
--- /dev/null
+++ b/themes/quark/templates/partials/hero.html.twig
@@ -0,0 +1,7 @@
+
diff --git a/themes/quark/templates/partials/layout.html.twig b/themes/quark/templates/partials/layout.html.twig
new file mode 100644
index 0000000..fdc7bed
--- /dev/null
+++ b/themes/quark/templates/partials/layout.html.twig
@@ -0,0 +1,14 @@
+{% set item_col = show_sidebar ? 'col-9 col-md-12' : 'col-12' %}
+{% set sidebar_col = show_sidebar ? 'col-3 col-md-12' : 'col-12' %}
+
+
+
+ {% block item %}{% endblock %}
+
+ {% if show_sidebar %}
+
+ {% block sidebar %}{% endblock %}
+
+ {% endif %}
+
+
diff --git a/themes/quark/templates/partials/logo.html.twig b/themes/quark/templates/partials/logo.html.twig
new file mode 100644
index 0000000..658a6be
--- /dev/null
+++ b/themes/quark/templates/partials/logo.html.twig
@@ -0,0 +1,9 @@
+{% set logo = theme_var(mobile ? 'custom_logo_mobile' : 'custom_logo') %}
+
+{% if logo %}
+ {% set logo_file = (logo|first).name %}
+
+{% else %}
+ {% include('@images/grav-logo.svg') %}
+{% endif %}
+
\ No newline at end of file
diff --git a/themes/quark/templates/partials/messages.html.twig b/themes/quark/templates/partials/messages.html.twig
new file mode 100644
index 0000000..662333d
--- /dev/null
+++ b/themes/quark/templates/partials/messages.html.twig
@@ -0,0 +1,17 @@
+{% set type_mapping = {'info':'success', 'error': 'error', 'warning': 'warning'} %}
+{% set icon_mapping = {'info':'checkmark', 'error':'wrong', 'warning':'information'} %}
+
+{% if grav.messages.all %}
+
+ {% for message in grav.messages.fetch %}
+
+ {% set scope = message.scope|e %}
+ {% set type = type_mapping[scope] %}
+ {% set icon = icon_mapping[scope] %}
+
+
+ {{ message.message|raw }}
+
+ {% endfor %}
+
+{% endif %}
\ No newline at end of file
diff --git a/themes/quark/templates/partials/navigation.html.twig b/themes/quark/templates/partials/navigation.html.twig
new file mode 100644
index 0000000..9474b77
--- /dev/null
+++ b/themes/quark/templates/partials/navigation.html.twig
@@ -0,0 +1,6 @@
+{% import 'macros/macros.html.twig' as macros %}
+
+
+ {{ macros.nav_loop(pages) }}
+
+
diff --git a/themes/quark/templates/partials/relatedpages.html.twig b/themes/quark/templates/partials/relatedpages.html.twig
new file mode 100644
index 0000000..c2e4daf
--- /dev/null
+++ b/themes/quark/templates/partials/relatedpages.html.twig
@@ -0,0 +1,15 @@
+
\ No newline at end of file
diff --git a/themes/quark/templates/partials/sidebar.html.twig b/themes/quark/templates/partials/sidebar.html.twig
new file mode 100644
index 0000000..ea6a34c
--- /dev/null
+++ b/themes/quark/templates/partials/sidebar.html.twig
@@ -0,0 +1,43 @@
+{% set feed_url = blog.url == '/' or blog.url == base_url_relative ? (base_url_relative~'/'~blog.slug) : blog.url %}
+{% set new_base_url = blog.url == '/' ? '' : blog.url %}
+
+{% if config.plugins.simplesearch.enabled %}
+
+{% endif %}
+{% if config.plugins.relatedpages.enabled and related_pages|length > 0 %}
+
+{% endif %}
+{% if config.plugins.random.enabled %}
+
+{% endif %}
+
+{{ page.find('/modules/sidebar').content|raw }}
+
+{% if config.plugins.taxonomylist.enabled %}
+
+{% endif %}
+{% if config.plugins.archives.enabled %}
+
+{% endif %}
+{% if config.plugins.feed.enabled %}
+
+{% endif %}
diff --git a/themes/quark/templates/partials/taxonomylist.html.twig b/themes/quark/templates/partials/taxonomylist.html.twig
new file mode 100644
index 0000000..b2bcc92
--- /dev/null
+++ b/themes/quark/templates/partials/taxonomylist.html.twig
@@ -0,0 +1,10 @@
+{% set taxlist = children_only is defined ? taxonomylist.getChildPagesTags() : taxonomylist.get() %}
+
+{% if taxlist %}
+
+ {% for tax,value in taxlist[taxonomy] %}
+ {% set label_class = uri.param(taxonomy) == tax ? 'label-primary' : 'label-secondary' %}
+ {{ tax }}
+ {% endfor %}
+
+{% endif %}
diff --git a/themes/quark/thumbnail.jpg b/themes/quark/thumbnail.jpg
new file mode 100644
index 0000000..ce4e0ed
Binary files /dev/null and b/themes/quark/thumbnail.jpg differ