Repository: Guezone/SECMON Branch: master Commit: 04915cc21f0e Files: 282 Total size: 9.1 MB Directory structure: gitextract_dmivgmii/ ├── .gitattributes ├── .gitignore ├── .gitlab-ci.yml ├── DOCS.md ├── Dockerfile ├── LICENSE ├── README.md ├── SECURITY.md ├── cve_poller.py ├── cve_template.html ├── cve_updater.py ├── docker/ │ ├── install.py │ ├── secmon-ci.conf │ └── secmon.conf ├── requirements.txt ├── rss_poller.py ├── rss_template.html ├── secmon.py ├── secmon.wsgi ├── secmon_lib.py ├── secmon_monitor.py ├── secmon_web.py ├── setup.py ├── static/ │ ├── css/ │ │ ├── dataTables.bootstrap.css │ │ ├── main.css │ │ ├── main2.css │ │ ├── morris.css │ │ ├── mycss.css │ │ ├── sb-admin-2.css │ │ ├── site.css │ │ ├── timeline.css │ │ ├── util.css │ │ └── util2.css │ ├── fonts/ │ │ ├── font-awesome-4.7.0/ │ │ │ ├── HELP-US-OUT.txt │ │ │ ├── css/ │ │ │ │ └── font-awesome.css │ │ │ ├── fonts/ │ │ │ │ └── FontAwesome.otf │ │ │ ├── less/ │ │ │ │ ├── animated.less │ │ │ │ ├── bordered-pulled.less │ │ │ │ ├── core.less │ │ │ │ ├── fixed-width.less │ │ │ │ ├── font-awesome.less │ │ │ │ ├── icons.less │ │ │ │ ├── larger.less │ │ │ │ ├── list.less │ │ │ │ ├── mixins.less │ │ │ │ ├── path.less │ │ │ │ ├── rotated-flipped.less │ │ │ │ ├── screen-reader.less │ │ │ │ ├── stacked.less │ │ │ │ └── variables.less │ │ │ └── scss/ │ │ │ ├── _animated.scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _core.scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _icons.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _mixins.scss │ │ │ ├── _path.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _screen-reader.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ └── font-awesome.scss │ │ ├── montserrat/ │ │ │ └── OFL.txt │ │ └── raleway/ │ │ └── OFL.txt │ ├── js/ │ │ ├── demo/ │ │ │ ├── chart-area-demo.js │ │ │ ├── chart-bar-demo.js │ │ │ ├── chart-pie-demo.js │ │ │ └── datatables-demo.js │ │ ├── main.js │ │ └── sb-admin-2.js │ ├── scss/ │ │ ├── _buttons.scss │ │ ├── _cards.scss │ │ ├── _charts.scss │ │ ├── _dropdowns.scss │ │ ├── _error.scss │ │ ├── _footer.scss │ │ ├── _global.scss │ │ ├── _login.scss │ │ ├── _mixins.scss │ │ ├── _navs.scss │ │ ├── _utilities.scss │ │ ├── _variables.scss │ │ ├── navs/ │ │ │ ├── _global.scss │ │ │ ├── _sidebar.scss │ │ │ └── _topbar.scss │ │ ├── sb-admin-2.scss │ │ └── utilities/ │ │ ├── _animation.scss │ │ ├── _background.scss │ │ ├── _border.scss │ │ ├── _display.scss │ │ ├── _progress.scss │ │ ├── _rotate.scss │ │ └── _text.scss │ └── vendor/ │ ├── animate/ │ │ └── animate.css │ ├── bootstrap/ │ │ ├── css/ │ │ │ ├── bootstrap-grid.css │ │ │ ├── bootstrap-reboot.css │ │ │ └── bootstrap.css │ │ ├── js/ │ │ │ ├── bootstrap.bundle.js │ │ │ ├── bootstrap.js │ │ │ ├── popper.js │ │ │ └── tooltip.js │ │ └── scss/ │ │ ├── _alert.scss │ │ ├── _badge.scss │ │ ├── _breadcrumb.scss │ │ ├── _button-group.scss │ │ ├── _buttons.scss │ │ ├── _card.scss │ │ ├── _carousel.scss │ │ ├── _close.scss │ │ ├── _code.scss │ │ ├── _custom-forms.scss │ │ ├── _dropdown.scss │ │ ├── _forms.scss │ │ ├── _functions.scss │ │ ├── _grid.scss │ │ ├── _images.scss │ │ ├── _input-group.scss │ │ ├── _jumbotron.scss │ │ ├── _list-group.scss │ │ ├── _media.scss │ │ ├── _mixins.scss │ │ ├── _modal.scss │ │ ├── _nav.scss │ │ ├── _navbar.scss │ │ ├── _pagination.scss │ │ ├── _popover.scss │ │ ├── _print.scss │ │ ├── _progress.scss │ │ ├── _reboot.scss │ │ ├── _root.scss │ │ ├── _spinners.scss │ │ ├── _tables.scss │ │ ├── _toasts.scss │ │ ├── _tooltip.scss │ │ ├── _transitions.scss │ │ ├── _type.scss │ │ ├── _utilities.scss │ │ ├── _variables.scss │ │ ├── bootstrap-grid.scss │ │ ├── bootstrap-reboot.scss │ │ ├── bootstrap.scss │ │ ├── mixins/ │ │ │ ├── _alert.scss │ │ │ ├── _background-variant.scss │ │ │ ├── _badge.scss │ │ │ ├── _border-radius.scss │ │ │ ├── _box-shadow.scss │ │ │ ├── _breakpoints.scss │ │ │ ├── _buttons.scss │ │ │ ├── _caret.scss │ │ │ ├── _clearfix.scss │ │ │ ├── _deprecate.scss │ │ │ ├── _float.scss │ │ │ ├── _forms.scss │ │ │ ├── _gradients.scss │ │ │ ├── _grid-framework.scss │ │ │ ├── _grid.scss │ │ │ ├── _hover.scss │ │ │ ├── _image.scss │ │ │ ├── _list-group.scss │ │ │ ├── _lists.scss │ │ │ ├── _nav-divider.scss │ │ │ ├── _pagination.scss │ │ │ ├── _reset-text.scss │ │ │ ├── _resize.scss │ │ │ ├── _screen-reader.scss │ │ │ ├── _size.scss │ │ │ ├── _table-row.scss │ │ │ ├── _text-emphasis.scss │ │ │ ├── _text-hide.scss │ │ │ ├── _text-truncate.scss │ │ │ ├── _transition.scss │ │ │ └── _visibility.scss │ │ ├── utilities/ │ │ │ ├── _align.scss │ │ │ ├── _background.scss │ │ │ ├── _borders.scss │ │ │ ├── _clearfix.scss │ │ │ ├── _display.scss │ │ │ ├── _embed.scss │ │ │ ├── _flex.scss │ │ │ ├── _float.scss │ │ │ ├── _interactions.scss │ │ │ ├── _overflow.scss │ │ │ ├── _position.scss │ │ │ ├── _screenreaders.scss │ │ │ ├── _shadows.scss │ │ │ ├── _sizing.scss │ │ │ ├── _spacing.scss │ │ │ ├── _stretched-link.scss │ │ │ ├── _text.scss │ │ │ └── _visibility.scss │ │ └── vendor/ │ │ └── _rfs.scss │ ├── chart.js/ │ │ ├── Chart.bundle.js │ │ └── Chart.js │ ├── css-hamburgers/ │ │ └── hamburgers.css │ ├── datatables/ │ │ ├── dataTables.bootstrap4.css │ │ ├── dataTables.bootstrap4.js │ │ └── jquery.dataTables.js │ ├── fontawesome-free/ │ │ ├── LICENSE.txt │ │ ├── css/ │ │ │ ├── all.css │ │ │ ├── brands.css │ │ │ ├── fontawesome.css │ │ │ ├── regular.css │ │ │ ├── solid.css │ │ │ ├── svg-with-js.css │ │ │ └── v4-shims.css │ │ ├── js/ │ │ │ ├── all.js │ │ │ ├── brands.js │ │ │ ├── conflict-detection.js │ │ │ ├── fontawesome.js │ │ │ ├── regular.js │ │ │ ├── solid.js │ │ │ └── v4-shims.js │ │ ├── less/ │ │ │ ├── _animated.less │ │ │ ├── _bordered-pulled.less │ │ │ ├── _core.less │ │ │ ├── _fixed-width.less │ │ │ ├── _icons.less │ │ │ ├── _larger.less │ │ │ ├── _list.less │ │ │ ├── _mixins.less │ │ │ ├── _rotated-flipped.less │ │ │ ├── _screen-reader.less │ │ │ ├── _shims.less │ │ │ ├── _stacked.less │ │ │ ├── _variables.less │ │ │ ├── brands.less │ │ │ ├── fontawesome.less │ │ │ ├── regular.less │ │ │ ├── solid.less │ │ │ └── v4-shims.less │ │ ├── metadata/ │ │ │ ├── categories.yml │ │ │ ├── icons.yml │ │ │ ├── shims.yml │ │ │ └── sponsors.yml │ │ ├── package.json │ │ └── scss/ │ │ ├── _animated.scss │ │ ├── _bordered-pulled.scss │ │ ├── _core.scss │ │ ├── _fixed-width.scss │ │ ├── _icons.scss │ │ ├── _larger.scss │ │ ├── _list.scss │ │ ├── _mixins.scss │ │ ├── _rotated-flipped.scss │ │ ├── _screen-reader.scss │ │ ├── _shims.scss │ │ ├── _stacked.scss │ │ ├── _variables.scss │ │ ├── brands.scss │ │ ├── fontawesome.scss │ │ ├── regular.scss │ │ ├── solid.scss │ │ └── v4-shims.scss │ ├── jquery/ │ │ ├── jquery.js │ │ └── jquery.slim.js │ ├── jquery-easing/ │ │ ├── jquery.easing.compatibility.js │ │ └── jquery.easing.js │ └── select2/ │ ├── select2.css │ └── select2.js └── templates/ ├── about.html ├── base.html ├── by-product-vulns.html ├── config.html ├── cve-alerts.html ├── cve-updates.html ├── cyber-threats.html ├── errors.html ├── exploits.html ├── home.html ├── login.html ├── logs.html ├── product-card.html ├── product-mgmt.html ├── reports.html ├── result.html ├── rss-news.html ├── search.html ├── settings.html ├── tasks.html └── vuln-mgmt.html ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ # Auto detect text files and perform LF normalization * text=auto ================================================ FILE: .gitignore ================================================ SECMON-CVE-Report.xlsx secmon.db logs.txt __pycache__/ stats.py test.py certs/ ================================================ FILE: .gitlab-ci.yml ================================================ variables: PRIVATE_REGISTRY_PASSWD: $PRIVATE_REGISTRY_PASSWD PRIVATE_REGISTRY_USERNAME: $PRIVATE_REGISTRY_USERNAME PRIVATE_REGISTRY_URL: $PRIVATE_REGISTRY_URL DOCKER_HUB_PASSWD: $DOCKER_HUB_PASSWD DOCKER_HUB_USERNAME: $DOCKER_HUB_USERNAME FQDN: $SECMON_FQDN SENDER: $SECMON_SENDER SMTP_PASSWD: $SECMON_SMTP_PASSWD SMTP_SRV: $SECMON_SMTP_SRV GITHUB_USERNAME: $SECMON_GITHUB_USERNAME GITHUB_API_KEY: $SECMON_GITHUB_API_KEY WEB_USERNAME: $SECMON_WEB_USERNAME WEB_PASSWD: $SECMON_WEB_PASSWD stages: - build - vuln_scan - malware_scan - test - release_image Build-Image: stage: build script: - docker login $PRIVATE_REGISTRY_URL -u $PRIVATE_REGISTRY_USERNAME -p $PRIVATE_REGISTRY_PASSWD - docker pull $SECMON_REGISTRY_IMAGE_WITHOUT_TAG:latest || true - docker build . -t $SECMON_REGISTRY_IMAGE_WITHOUT_TAG:$CI_COMMIT_REF_SLUG - docker push $SECMON_REGISTRY_IMAGE_WITHOUT_TAG:$CI_COMMIT_REF_SLUG allow_failure: false Vuln-Scan: stage: vuln_scan variables: ANCHORE_CLI_URL: "http://anchore-engine:8228/v1" GIT_STRATEGY: none image: docker.io/anchore/inline-scan:latest services: - name: docker.io/anchore/inline-scan:latest alias: anchore-engine command: ["start"] script: - anchore-cli system wait - anchore-cli registry add $PRIVATE_REGISTRY_URL gitlab-ci-token "$CI_JOB_TOKEN" --skip-validate --insecure - anchore-cli image add $SECMON_REGISTRY_IMAGE_WITHOUT_TAG:$CI_COMMIT_REF_SLUG - anchore-cli image wait $SECMON_REGISTRY_IMAGE_WITHOUT_TAG:$CI_COMMIT_REF_SLUG - anchore-cli image vuln $SECMON_REGISTRY_IMAGE_WITHOUT_TAG:$CI_COMMIT_REF_SLUG all allow_failure: true Malware-Scan: stage: malware_scan script: - docker stop secmontest && docker rm secmontest || true - docker login $PRIVATE_REGISTRY_URL -u $PRIVATE_REGISTRY_USERNAME -p $PRIVATE_REGISTRY_PASSWD - docker run -i -t --name secmontest -d $SECMON_REGISTRY_IMAGE_WITHOUT_TAG:$CI_COMMIT_REF_SLUG - docker cp . secmontest:/var/www/secmon - docker exec secmontest bash -c 'apt update && apt install -y clamav && freshclam' - docker exec secmontest bash -c 'cd /var/www/secmon ; python3 -c "import secmon_lib" ; python3 -c "from secmon_web import *" 2>/dev/null' || true - docker exec secmontest clamscan --remove --infected -r /var/www /home /usr /etc /mnt /media /srv | tee scan-results.txt - docker stop secmontest && docker rm secmontest allow_failure: false Test: stage: test script: - docker stop secmontest && docker rm secmontest || true - docker login $PRIVATE_REGISTRY_URL -u $PRIVATE_REGISTRY_USERNAME -p $PRIVATE_REGISTRY_PASSWD - docker run -i -t --name secmontest -p 4443 -e SENDER=$SENDER -e GITHUB_USERNAME=$GITHUB_USERNAME -e GITHUB_API_KEY=$GITHUB_API_KEY -e WEB_USERNAME=$WEB_USERNAME -e WEB_PASSWD=$WEB_PASSWD -e FQDN=$FQDN -e SMTP_PASSWD=$SMTP_PASSWD -d $SECMON_REGISTRY_IMAGE_WITHOUT_TAG:$CI_COMMIT_REF_SLUG - docker cp . secmontest:/var/www/secmon - docker exec secmontest openssl req -newkey rsa:4096 -x509 -subj "/C=FR/ST=France/L=Paris/O=Test/CN=$FQDN" -sha512 -days 3650 -nodes -out /etc/ssl/secmon/secmon.crt -keyout /etc/ssl/secmon/secmon.key - docker exec secmontest python3 /var/www/secmon/setup.py -login $SENDER -p $SMTP_PASSWD -server $SMTP_SRV -port '587' -tls yes -lang fr -sender $SENDER -r $SENDER -accept true -github_username $GITHUB_USERNAME -github_api_key $GITHUB_API_KEY -username $WEB_USERNAME -password $WEB_PASSWD - docker exec secmontest nohup python3 /var/www/secmon/secmon.py >/dev/null 2>&1 & - docker exec secmontest nohup python3 /var/www/secmon/cve_updater.py >/dev/null 2>&1 & - docker exec secmontest cp /var/www/secmon/docker/secmon-ci.conf /etc/apache2/sites-enabled/secmon.conf - docker exec secmontest chown -R www-data:www-data /var/www/secmon/ - docker exec secmontest chmod -R 744 /var/www/secmon/ - docker exec secmontest sed -i "s/{FQDN}/$FQDN/" /etc/apache2/sites-enabled/secmon.conf - docker exec secmontest sed -i "s/Listen 443/Listen 4443/" /etc/apache2/ports.conf - docker exec secmontest a2enmod ssl && docker exec secmontest service apache2 restart - docker exec secmontest apt install -y wget - docker exec secmontest wget -q -S -O - https://127.0.0.1:4443 --no-check-certificate | grep "SECMON - Login" - docker stop secmontest && docker rm secmontest || true allow_failure: false Release-Image: stage: release_image script: - docker login $PRIVATE_REGISTRY_URL -u $PRIVATE_REGISTRY_USERNAME -p $PRIVATE_REGISTRY_PASSWD - docker tag $SECMON_REGISTRY_IMAGE_WITHOUT_TAG:$CI_COMMIT_REF_SLUG $SECMON_REGISTRY_IMAGE_WITHOUT_TAG:latest - docker push $SECMON_REGISTRY_IMAGE_WITHOUT_TAG:latest - docker login -u $DOCKER_HUB_USERNAME -p $DOCKER_HUB_PASSWD - docker tag $SECMON_REGISTRY_IMAGE_WITHOUT_TAG:latest guezone/secmon:latest - docker push guezone/secmon:latest allow_failure: false ================================================ FILE: DOCS.md ================================================ # Table of contents - [Table of contents](#table-of-contents) - [Installation](#installation) - [With docker](#with-docker) - [Autosetup](#autosetup) - [Automation](#automation) - [Without docker](#without-docker) - [Setup](#setup) - [Automation](#automation-1) - [Startup](#startup) - [Configuration of the web service](#configuration-of-the-web-service) - [Login](#login) - [Configuration](#configuration) - [Search products](#search-products) - [Add your products](#add-your-products) - [User interface](#user-interface) - [CVE Module](#cve-module) - [RSS Module](#rss-module) - [Settings](#settings) - [Upgrade](#upgrade) - [Logging](#logging) - [Useful logs](#useful-logs) - [Error logs](#error-logs) # Installation Before installation, you must have drawn up : - The list of products present in your infrastructure by their common name without version (ex: ```Apache;Microsoft Windows;CentOS```) - The list of CPE product identifiers present on your infrastructure (ex: ```cpe:2.3:o:microsoft:windows_server_2008:r2:sp1:*:*:*:x64:*;cpe:2.3:o:apple:mac_os:-:*:*:*:*:*```) **Note 1** : You can also upload a CSV file with one line per product via the web interface but I advise you to put the list at the installation. **Note 2** : Product names (keywords) should not be too succinct (e.g. prefer to use 'Microsoft Office' instead of 'Office'). This could avoid false positives during alerts. You will be able to search and add new products after installation via the web UI. ## With docker (recommanded) With the docker installation, everything is automated. The script creates a self-signed certificate if you wish and configures apache. Obviously, you can change the configuration according to your needs. The installation with Docker allows via a volume (-v option) to easily update SECMON with Git. To update it, you will have to : - Go to the folder where SECMON was cloned at installation - Do a git pull to get the changes The files will then be modified directly in your SECMON container. ### Autosetup ```bash sudo git clone https://github.com/Guezone/SECMON && cd SECMON && mkdir certs && PWD=$(pwd) sudo docker build . -t secmon:latest sudo docker network create --driver=bridge --subnet=10.10.10.0/24 --gateway=10.10.10.254 SECMON_NET sudo docker run -i -t --hostname secmonsrv --ip 10.10.10.100 --name secmon-srv -v $PWD/:/var/www/secmon -v $PWD/certs:/etc/ssl/secmon --network SECMON_NET --expose 80 --expose 443 -d secmon:latest sudo docker exec -it secmon-srv python3 /var/www/secmon/docker/install.py ``` ``` | SECMON - DockerAutoInstall | 1. Certificate : Note 1 : You can delete this self signed cert and put your CA signed cert after install. Enter the FQDN of the web server :secmon.demo.net Note 2 : Don't forget to enter a good value for CN (FQDN of your server) Generating a RSA private key ........................................................................++++ ...................................................................................................................++++ writing new private key to '/etc/ssl/secmon/secmon.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:IDF Locality Name (eg, city) []:Paris Organization Name (eg, company) [Internet Widgits Pty Ltd]:SecmonDemo Organizational Unit Name (eg, section) []:X Common Name (e.g. server FQDN or YOUR name) []:secmon.demo.net Email Address []:XXXXXXXXXXX@XXXX.XX Your certificate is available on /etc/ssl/secmon ! ---------------------------------------------------------------------------------------------------------------------- 2. SECMON Install : Sender email address : sender@mail.com Sender email account password :XXXXXXXXXXXXXXXXXXXX SMTP Server FQDN or IP :XXXX.XXXX.XXXX SMTP used port :587 Using TLS SMTP auth ? (yes/no) :yes Language (en/fr) :fr SECMON email receivers (single or many seperated by ;):receiver1@mail.com;receiver2@mail.com ------------------------------------ SECMON setup script - Version 1.0.0 ------------------------------------ SECMON is licensed by CC BY-NC-SA 4.0 license. Do you accept the terms of the license? (y/Y;n/N) : y Do you want to use a Github API for exploit retrieval (y/Y;n/N) : y Please enter your Github username : XXXXXXXXXXX Please enter your Github API Token : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Enter the username that can be used on the Web UI : demo_user Enter the password (please choose a strong password !) : XXXXXXXX Confirm the password : XXXXXXXX RSS news database recording in progress... Successful build database. Please wait. A test message to receiver1@mail.com will be sent to test your configuration. Please wait. A test message to receiver2@mail.com will be sent to test your configuration. SECMON is now ready. Execute secmon.py now and automate it. Executing secmon in background... Executing cve_updater in background... SECMON is successfully installed and configured ! ---------------------------------------------------------------------------------------------------------------------- 3. Apache configuration : Considering dependency setenvif for ssl: Module setenvif already enabled Considering dependency mime for ssl: Module mime already enabled Considering dependency socache_shmcb for ssl: Enabling module socache_shmcb. Enabling module ssl. See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates. To activate the new configuration, you need to run: service apache2 restart [ ok ] Restarting Apache httpd web server: apache2. Apache is successfully configured ! You can now access the web interface at the following address: https://secmon.demo.net ---------------------------------------------------------------------------------------------------------------------- ``` ### Automation Edit the **host crontab** with **vi /etc/crontab** command, for example like this : ```bash 0 * * * * root docker exec secmon-srv python3 /var/www/secmon/secmon.py >> /var/log/secmon 2>&1 0 6 * * * root docker exec secmon-srv python3 /var/www/secmon/cve_updater.py >> /var/log/secmon-updates 2>&1 @reboot root docker start secmon-srv @reboot root docker exec secmon-srv service apache2 start @reboot root docker exec secmon-srv service ssh start ``` This configuration automates the retrieval of new CVE (and news) every 20 minutes and an update of the scores and associated products every day at 6am. Now, you can login to SECMON with a giving URL. ## Without docker ### Setup ```bash sudo apt update sudo apt install -y python3 python3-pip apache2 libapache2-mod-wsgi-py3 git sudo git clone https://github.com/Guezone/SECMON cd SECMON sudo pip3 install -r requirements.txt sudo rm -Rf /var/www/html sudo mkdir /var/www/secmon && sudo cp -r * /var/www/secmon/ && cd /var/www/secmon/ sudo python3 setup.py -sender sender@mail.com -p 'XXXXXXXXXXXXXXXX' -login [your SMTP login, often email address] -server srv.mail.com -port 587 -tls yes -lang fr -r 'receiver1@mail.com;receiver2@mail.com' ``` **Note :** Since a few time, the product list entry is only on web UI after install. **Output :** ```bash ------------------------------------ SECMON setup script - Version 1.0.0 ------------------------------------ SECMON is licensed by CC BY-NC-SA 4.0 license. Do you accept the terms of the license? (y/Y;n/N) : y Let's go to add your products list for which you want to check the new CVEs. Of course, you can add more with the web interface after installation ! Do you want to use a Github API for exploit retrieval (y/Y;n/N) : y Please enter your Github username : XXXXXXXXXXX Please enter your Github API Token : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Enter the username that can be used on the Web UI : demo_user Enter the password (please choose a strong password !) : XXXXXXXX Confirm the password : XXXXXXXX RSS news database recording in progress... Successful build database. Please wait. A test message to receiver1@mail.com will be sent to test your configuration. Please wait. A test message to receiver2@mail.com will be sent to test your configuration. SECMON is now ready. Execute secmon.py now and automate it. ``` ### Automation Edit your crontab with **sudo vi /etc/crontab** command, for example like this : ```bash 0 * * * * root python3 /var/www/secmon/secmon.py >> /var/log/secmon 2>&1 0 6 * * * root python3 /var/www/secmon/cve_updater.py >> /var/log/secmon-updates 2>&1 ``` This configuration automates the retrieval of new CVE (and news) every 60 minutes and an update of the scores and associated products every day at 6am. ### Startup Launch the main script of the application : ```bash sudo python3 secmon.py Cloning exploit-database repository <-- At the first launch only, there is a download of the exploit-db.com exploit database. Clonage dans 'exploit-database'... remote: Enumerating objects: 194, done. remote: Counting objects: 100% (194/194), done. remote: Compressing objects: 100% (163/163), done. remote: Total 135299 (delta 72), reused 139 (delta 31), pack-reused 135105 Réception d'objets: 100% (135299/135299), 151.14 MiB | 3.94 MiB/s, fait. Résolution des deltas: 100% (85326/85326), fait. Extraction des fichiers: 100% (44380/44380), fait. ------------ CVE Module ------------ Starting at : 30/11/2020 23:09:30 ------------------------------------ Configuration is good. ------------------------------------ Polling NVD RSS feed (keyword based search). No new CVE matched with your keyword list. ------------------------------------ Polling NVD related to your product list (CPE based search). No new CVE related to your (CPE) product list ------------------------------------ Finished at : 30/11/2020 23:09:38 ------------------------------------ ------------ RSS Module ------------ Starting at : 30/11/2020 23:09:38 ------------------------------------ Configuration is good. ------------------------------------ No news. Goodbye. ------------------------------------ Finished at : 30/11/2020 23:09:44 ------------------------------------ ``` At this step, SECMON is properly configured and you can receive alerts about new CVE that affect your products as well as new "cyber" news. You now need to update the list of available exploits for each CVE (exploit-db and Github) as well as your high security risk products. **Note :** "high security risk" products are those that have : - Critical and high vulnerabilities (based on the CVSS 3.0 score) - Vulnerabilities where there are known exploits (Github or Exploit-DB) To make this update : ```bash sudo python3 cve_updater.py ------------ CVE Module - Update ------------ Starting at : 30/11/2020 23:34:06 --------------------------------------------- Refreshing exploit-database repo with latest exploits From https://github.com/offensive-security/exploit-database * branch master -> FETCH_HEAD Already up to date. Refreshing EDBID-CVE mapping 100% (43828 of 43828) |###############################################################################################| Elapsed Time: 0:00:00 Time: 0:00:00 Exploit found for CVE-2021-3156 from Exploit-DB Exploit found for CVE-2014-8380 from Exploit-DB Search Github Exploit for registered CVE... Exploit found for CVE-2020-1590 from Github Updating high risk product list.... New critical product : Microsoft Windows Server 2008 R2 Updating affected products and CVSS score related to your CVE list... No CVE have been updated. --------------------------------------------- Finished at : 30/11/2020 23:52:24 --------------------------------------------- ``` **Note :** This operation can take a few minutes to a few hours. ### Configuration of the web service You must then delete the Apache sites configured by default : ```bash sudo rm /etc/apache2/sites-enabled/* sudo rm /etc/apache2/sites-available/* sudo a2enmod wsgi sudo a2enmod ssl ``` Then, you have to create a new configuration file dedicated to SECMON (in ```/etc/apache2/sites-available/secmon.conf```) : Here is an example of configuration for a "secure" basic configuration : ```bash ServerName secmon.corp.net ServerAdmin admin@mail.com ServerName secmon.corp.net ServerAlias www.secmon.corp.net DocumentRoot /var/www/secmon Redirect permanent / https://secmon.corp.net WSGIProcessGroup secmon_web WSGIPassAuthorization On WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all ServerSignature off ErrorLog ${APACHE_LOG_DIR}/error_secmon.log CustomLog ${APACHE_LOG_DIR}/access_secmon.log combined WSGIScriptAlias / /var/www/secmon/secmon.wsgi WSGIDaemonProcess secmon_web DocumentRoot /var/www/secmon ServerName secmon.corp.net ServerAlias www.secmon.corp.net WSGIProcessGroup secmon_web WSGIPassAuthorization On WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all ServerSignature Off LogLevel info ErrorLog ${APACHE_LOG_DIR}/error_secmon.log CustomLog ${APACHE_LOG_DIR}/access_secmon.log combined SSLProtocol -all +TLSv1.2 +TLSv1.3 SSLEngine on SSLCertificateFile PATH/YOUR_CERT.crt SSLCertificateKeyFile PATH/YOUR_PRIVATE_KEY.key ``` **Note :** You can use a self-signed certificate or a certificate signed by a known CA. This configuration must be changed according to your settings and is an example. ```bash sudo a2ensite secmon Enabling site secmon. To activate the new configuration, you need to run: systemctl reload apache2 sudo systemctl reload apache2 cd /var/www/secmon && sudo chown -R www-data:www-data . sudo chmod -R 744 . ``` # Login Now you will be able to connect to the Web UI with the credentials entered during installation : ![](https://github.com/Guezone/SECMON/blob/master/img/login.png) SECMON is now fully ready to use ! It's time for a ☕. # Configuration ## Search products SECMON accepts the "products" to be supervised in keywords or in CPE (Common Platform Enumeration). The keywords are used when the CVE do not have a CPE filled in and this is particularly the case when it has just been published. In SECMON's WEB UI, go to the **Settings -> Product management** tab. You have at your disposal a search section in order to find the CPE references by their common name (example for Windows Server 2019) : ![](https://github.com/Guezone/SECMON/blob/master/img/product-search.png) CPEs allow greater accuracy down to the product version level. CPEs can only be found when they have been provided by the publisher, which is not always the case. You can still use previous versions to determine this. Example : ``` The CPE search for Apache 2.4.46 does not find the correct CPE code but the CPE code for version 2.4.44 is "cpe: 2.3: a: apache: http_server: 2.4.44: *: *: *: *: *: *: * " All you have to do is replace the correct fields with the correct version: "cpe: 2.3: a: apache: http_server: 2.4.46: *: *: *: *: *: *: *" ``` ## Add your products To add new products to your list, go to the **Settings -> Product management** tab then to the ** Manage product ** section. You then have the choice to add / delete a CPE or a keyword : ![](https://github.com/Guezone/SECMON/blob/master/img/product-add.png) You can also import a list of products (CPE and keywords) into a CSV in the same tab. It must consist of a single command. Example file : ```csv cpe:2.3:a:keepass:password_safe:*:*:*:*:*:*:*:* cpe:2.3:o:microsoft:windows_10:2004:*:*:*:*:*:*:* cpe:2.3:a:docker:docker:0.2.1:*:*:*:*:*:*:* cpe:2.3:a:anydesk:anydesk:*:*:*:*:*:*:*:* cpe:2.3:o:vmware:esxi:7.0:*:*:*:*:*:*:* Microsoft Exchange Microsoft Office HPE F5 BigIP Extreme ``` **Note**: when you add a CPE reference, it may take several minutes or even several hours for all the CVEs to be recorded in the database. To follow the progress, go to the tab **Settings -> Tasks**. A good practice might be to set the keywords to match your CPE references ("Docker" as a keyword and "cpe:2.3:a:docker:docker:0.2.1:*:*:*:*:*:*"as a CPE). ## User interface **Home**: dashboard allowing you to see the state of health of your fleet regarding vulnerabilities. Products with high security risks appear as well as the rate of corrected / read / unread vulnerabilities. ### CVE Module **Search**: this page allows you to search for details about a CVE **Vulnerability management**: this page allows you to put a stamp in order to know the status of the correction of your vulnerability. For better management, I encourage you to indicate when you became aware of a vulnerability and also when it is fixed. Once the alert has been sent by email, I also encourage you to check that the CVE concerns your product with the exact version. There may be false positives in particular on the search for CVE by keyword, you can also note the false on this page. **Last CVE alerts**: this page allows you to view vulnerabilities by product and also to see the list of high risk products, ie those with exploitable vulnerabilities. **Exploits**: allows you to search for exploits linked to a CVE and also to see the list of exploitable CVEs. The source of the information is based on Github and Exploit-DB. **Last CVE updates**: Allows you to see if recent changes have been made to CVSS scores or affected products regarding your vulnerabilities. ### RSS Module **Cybersecurity news**: this page allows you to view the latest information and articles identified by the tool. ### Settings **Logs**: allows you to view the logs produced by the tool. **Product management**: this page allows you to search for CPE references, add / remove products (keywords or CPE) to your list and display the list. **SMTP Configuration**: allows you to change the SMTP configuration linked to sending CVE alerts or news. **Tasks**: allows you to view the status of recent tasks which are heavy for SECMON. Today, only the addition of products appears here as it is a process that can be very long. You can update your web UI password and also add users. To do this, click on the menu at the top right and then go to **Account settings**. **Note** : It is currently impossible to reset passwords via a token and email as is usually the case. # Upgrade The installation of SECMON with Docker allows the use of a volume in order to have a "synchronisation" between the host and the container. If you want to have the latest version of SECMON with the latest changes, go to the folder where SECMON was cloned (on the host) and run the following commands: ``` git pull origin sudo chown -R www-data:www-data . sudo chmod -R 744 . sudo docker exec -it secmon-srv service apache2 restart ``` The files will be updated on the host side and in the container and SECMON will be updated. If you are not using docker, you can do the same in the folder where the repository was cloned. However, you will need to copy the modified files to **/var/www/secmon** and also assign the correct rights. You will also have to restart the Apache service. # Logging ## Useful logs All useful SECMON logs are written to your **/var/www/secmon/logs.txt**. The format is not really standard but they are parsed automatically by Splunk for example. Obviously, I encourage you to create alerts if you have a SIEM to manage critical vulnerabilities and high-risk products in your regular processes. Here is an example of field extractions (Graylog compatible file): **Note**: you can obviously reuse the **Grok patterns** contained in the file to extract fields on your log collection and analysis tools. ```json { "extractors": [ { "title": "SECMON-Authentication-Extract", "extractor_type": "grok", "converters": [], "order": 0, "cursor_strategy": "cut", "source_field": "message", "target_field": "", "extractor_config": { "grok_pattern": "%{TIMESTAMP_ISO8601:timestamp} source_script=%{GREEDYDATA:script} server=\"%{IP:dst_ip}\" src_ip=\"%{IPV4:src_ip}\" username=\"%{USERNAME:username}\" auth_status=\"%{WORD:status}\" message=\"%{GREEDYDATA:msg}\"" }, "condition_type": "regex", "condition_value": "auth_status" }, { "title": "SECMON-CVE-Extract", "extractor_type": "grok", "converters": [], "order": 0, "cursor_strategy": "cut", "source_field": "message", "target_field": "", "extractor_config": { "grok_pattern": "%{TIMESTAMP_ISO8601:timestamp} source_script=\"%{GREEDYDATA:script}\" server=\"%{IP:dst_ip}\" cve_id=\"%{GREEDYDATA:cve_id}\" type=\"%{WORD:type}\" matched_product=\"%{GREEDYDATA:matched_product}\" cvss_score=\"%{GREEDYDATA:cvss_score}\" severity=\"%{GREEDYDATA:severity}\" cve_date=\"%{GREEDYDATA:cve_date}\" cpes=\"%{GREEDYDATA:cpes}\" report=\"%{WORD:report}\" alert=\"%{WORD:alert}\" message=\"%{GREEDYDATA:msg}\"" }, "condition_type": "string", "condition_value": "cve_id" }, { "title": "SECMON-Exploits-Extract", "extractor_type": "grok", "converters": [], "order": 0, "cursor_strategy": "cut", "source_field": "message", "target_field": "", "extractor_config": { "grok_pattern": "%{TIMESTAMP_ISO8601:timestamp} source_script=%{GREEDYDATA:script} server=\"%{IP:dst_ip}\" cve=\"%{GREEDYDATA:cve_id}\" exploit_source=\"%{GREEDYDATA:exploit_source}\" message=\"%{GREEDYDATA:msg}\"" }, "condition_type": "string", "condition_value": "exploit" }, { "title": "SECMON-Tasks-Extract", "extractor_type": "grok", "converters": [], "order": 0, "cursor_strategy": "copy", "source_field": "message", "target_field": "", "extractor_config": { "grok_pattern": "%{TIMESTAMP_ISO8601:timestamp} source_script=%{GREEDYDATA:script} server=\"%{IP:dst_ip}\" task_id=\"%{INT:task_id}\" task_status=\"%{WORD:task_status}\" message=\"%{GREEDYDATA:msg}\"" }, "condition_type": "string", "condition_value": "task_id" }, { "title": "SECMON-News-Extract", "extractor_type": "grok", "converters": [], "order": 0, "cursor_strategy": "cut", "source_field": "message", "target_field": "", "extractor_config": { "grok_pattern": "%{TIMESTAMP_ISO8601:timestamp} source_script=%{GREEDYDATA:script} server=\"%{IP:dst_ip}\" feed=\"%{GREEDYDATA:feed}\" feed_url=\"%{URI:feed_url}\" news_title=\"%{GREEDYDATA:news_title}\" news_url=\"%{URI:news_url}\" mail=\"%{WORD:mail}\"" }, "condition_type": "string", "condition_value": "rss_poller" }, { "title": "SECMON-HighRiskProducts-Extract", "extractor_type": "grok", "converters": [], "order": 0, "cursor_strategy": "cut", "source_field": "message", "target_field": "", "extractor_config": { "grok_pattern": "%{TIMESTAMP_ISO8601:timestamp} source_script=%{GREEDYDATA:script} server=\"%{IP:dst_ip}\" cpe=\"%{GREEDYDATA:cpe}\" hname=\"%{GREEDYDATA:hname}\" message=\"%{GREEDYDATA:msg}\"" }, "condition_type": "string", "condition_value": "A new critical product" } ], "version": "4.0.5" } ``` ## Error logs The error logs generated by the pollers will be located where you redirect the standard output in your cron configuration. Error logs related to your web interface will be available in the Apache error file (or other depending on your usage). The errors are normally formatted. Feel free to file an issue on Github if you see an error. ================================================ FILE: Dockerfile ================================================ FROM debian:latest MAINTAINER Aubin Custodio (Guezone) RUN apt update && apt upgrade -y && apt install -y vim apache2 nano python3 git python3-pip libapache2-mod-wsgi-py3 net-tools dnsutils openssh-server openssl python3-dev libffi-dev RUN service apache2 stop RUN rm /etc/apache2/sites-enabled/* && rm /etc/apache2/sites-available/* RUN mkdir /etc/ssl/secmon/ && mkdir /var/www/secmon/ COPY ./requirements.txt /tmp RUN cd /tmp && pip3 install -r requirements.txt && rm -Rf /var/www/html EXPOSE 80 EXPOSE 443 EXPOSE 22 ================================================ FILE: LICENSE ================================================ Attribution-NonCommercial-ShareAlike 4.0 International ======================================================================= Creative Commons Corporation ("Creative Commons") is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC- licensed material, or material used under an exception or limitation to copyright. More considerations for licensors: wiki.creativecommons.org/Considerations_for_licensors Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor's permission is not necessary for any reason--for example, because of any applicable exception or limitation to copyright--then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 -- Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. BY-NC-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License. d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution, NonCommercial, and ShareAlike. h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. j. Licensor means the individual(s) or entity(ies) granting rights under this Public License. k. NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange. l. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. m. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. n. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 -- Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: a. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and b. produce, reproduce, and Share Adapted Material for NonCommercial purposes only. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a) (4) never produces Adapted Material. 5. Downstream recipients. a. Offer from the Licensor -- Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. b. Additional offer from the Licensor -- Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter's License You apply. c. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes. Section 3 -- License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: a. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; b. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and c. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. b. ShareAlike. In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. 1. The Adapter's License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-NC-SA Compatible License. 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. Section 4 -- Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 -- Disclaimer of Warranties and Limitation of Liability. a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 -- Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 -- Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 -- Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. ======================================================================= Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” The text of the Creative Commons public licenses is dedicated to the public domain under the CC0 Public Domain Dedication. Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. ================================================ FILE: README.md ================================================ # SECMON - Infosec Watching Tool
[![made-with-python, 🖤 and ☕](https://img.shields.io/badge/Made%20with-Python%2C%20%F0%9F%96%A4%20and%20%E2%98%95-blue)](https://www.python.org/) ![Version](https://img.shields.io/badge/Version-2.0-blue) ![GitHub contributors](https://img.shields.io/github/contributors/Guezone/SECMON?label=Contributors) ![Tested on](https://img.shields.io/badge/Tested%20on-Debian%2010%20&%20Docker-brightgreen) ![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0%20(Non--commercial)-red) ![Discord](https://img.shields.io/discord/826868157838262282?color=6A7EC2&label=Discord&logo=https%3A%2F%2Fimg.shields.io%2Fdiscord%2F783381738558455897.svg&logoColor=7389D8&style=plastic) ![](https://github.com/Guezone/SECMON/blob/master/img/dashboard.png) # Description SECMON is a **web-based tool** for the automation of **infosec watching** and **vulnerability management** with a web interface. A demo is available [here](https://secmon.guezone.info/). A Discord channel is available [here](https://discord.gg/cXzvb4fKzE) ## Features - **Mail alerting** when a **new CVE** is published and which concerns your product list - **Mail alerting** when a "cyber-security" news are published: new threats, recent attacks, events, etc. - Visualize the **high security risk products** present on your IT infrastructure - Download CVE **Excel report** by date range - Display **top cybersecurity subject** (**Light cyber landscape**) - Logs **easy to integrate in a SIEM** (verified on **Splunk** and **Graylog**) - View the **latest CVE** and **latest news related to cyber security are published** - Assign a buffer of **management status of a CVE** - Search all the **details of a CVE** - Check if there is an **exploit** on **Github or Exploit-DB** concerning a CVE - Search for **vulnerabilities for a specified product** - **Manage your product list**: search/add/delete a product, display your referenced product list - **Monitor the sources** used by pollers Email alerts can be sent in English or French. SECMON web UI now support multi user account. CVE are polled using two methods of collection/correspondence: - **Keyword-based** : allows you to be proactive on the retrieval of CVE by leaving a little bit of precision (no version check, just word matching) on the affected products (ex: "VMWare", "Apache"). - **CPE based** (Common Platform Enumeration) : allows the retrieval of CVE that only concern the product version entered (e.g. "Windows 10 1909", "Apache 2.4.38") ## Requirements SECMON requires registration on Github API for exploits retrieval. It also requires : - OS : Linux-based system (tested on Debian 10) - Environnement : Python 3 (tested on Python 3.9 and Python 3.8) - A valid Github API key **WARNING** : Web UI credentials are hashed (SHA512 with salt), on the other hand, the Github API connection credentials and the application session key are neither encrypted nor hashed. All data is stored in an unencrypted sqlite database. A few advices : - Allow access to this machine only to persons who are authorized to do so. - Isolate the host machine from the rest. - Use a dedicated server/VM or Docker container. ## Some screenshots ![](https://github.com/Guezone/SECMON/blob/master/img/mail_alert_sample.png)

Example of email alerts (CVE and RSS)

![](https://github.com/Guezone/SECMON/blob/master/img/vulnmgmt.png)

Vulnerability management page

![](https://github.com/Guezone/SECMON/blob/master/img/cve_search.png)

CVE details

![](https://github.com/Guezone/SECMON/blob/master/img/exploits.png)

Exploit search

![](https://github.com/Guezone/SECMON/blob/master/img/cyber-threats.png)

Cyber threats top subject

![](https://github.com/Guezone/SECMON/blob/master/img/product-search.png)

Product search

![](https://github.com/Guezone/SECMON/blob/master/img/product-list.png)

Product list

# Installation [Read the docs](DOCS.md) # Thanks Thanks to @andreafioraldi for cve_searchsploit Python module. Thanks to @konsav for HTML/CSS email template. Thanks to @rodolfo-mendes for the sbadmin2 (Bootstrap) template adapted to Flask. Thanks to Florent Chatain for the first web security auditing. # License **SECMON** (by Aubin Custodio - Guezone) is licensed under **CC BY-NC-SA 4.0**. This license allows you to **use** SECMON, to **improve it** and to make it live **by mentioning the author** but **without using it for commercial purposes**. As the infosec watching process is quite difficult and time consuming, it should only be used to help companies and/or users **to secure their IT infrastructure** and to know the current cyber security world. # Changelog **2.0 :** - Modification of the log format - Reporting method (generation via dates) - Web UI - new boostrap template - Work on the Docker automation part **2.1 :** - Add a multi-user support on Web UI - Improved auto docker configuration (to improve updates with git and volume) - Added a **Cyber Threats** section that highlights the top cyber topics reported in the RSS module - Update of README and DOCS (docker, update & screenshots part) - Prioritisation of the CPE polling method over the keyword method # Roadmap ## Features - [x] Automate the deployment with docker - [x] First security auditing (front-end only) - [x] Write the logs in a standard format and plan to send them to a third party of SIEM type. - [X] Write user documentation for the Web UI - [ ] Create script to allow CPE scanning on Windows and Linux based system - [ ] Add new sources of cyber-news - [ ] Create a REST API for calling in other applications - [ ] Send CVE daily update report (new high risk product, CVSS changes, affected product changes, new exploitable CVE) - [ ] SECMON-Open-API (free and open API to get 0-day, viral vulns & data breach news) - [ ] Others Vuln Database polling ## Reliability improvement - [X] NIST API rate complete management (partial correction) - [ ] Product unification (product = CPE + Keyword) - [X] Keyword management to be case unsensitive ================================================ FILE: SECURITY.md ================================================ ## Reporting a Vulnerability Please report (suspected) security vulnerabilities via the dedicated "bugs-vulnérabilités" Discord channel ([Discord server link](https://discord.gg/cXzvb4fKzE)). You will receive a response from us within few days. If the issue is confirmed, we will release a patch as soon as possible depending on complexity but historically within a few days. ================================================ FILE: cve_poller.py ================================================ # -*- coding: utf-8 -*- """ SECMON - Source code of the SECMON CVE poller script. """ __author__ = "Aubin Custodio" __copyright__ = "Copyright 2021, SECMON" __credits__ = ["Aubin Custodio","Guezone"] __license__ = "CC BY-NC-SA 4.0" __version__ = "2.1" __maintainer__ = "Aubin Custodio" __email__ = "custodio.aubin@outlook.com" import base64, os, smtplib, re, requests, time, sqlite3, feedparser, colorama, warnings from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders from datetime import datetime, timedelta from bs4 import BeautifulSoup from secmon_lib import getParsedCpe, translateText, getUserLanguage, getCpeList, pollCveIdFromCpe, writeCveTypeLog, writeMgmtTasksLog,handleException warnings.filterwarnings("ignore", category=DeprecationWarning) sender, receiver, smtp_login, smtp_password, smtpsrv, port, tls, keywords = '','','','','','','','' script_path = os.path.abspath(__file__) dir_path = script_path.replace("cve_poller.py","") log_file = dir_path+"logs.txt" class bcolors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' BOLD = '\033[1m' UNDERLINE = '\033[4m' def checkConfig(sender, receiver, smtp_login, smtp_password, smtpsrv, port, tls,keywords): script_path = os.path.abspath(__file__) dir_path = script_path.replace("cve_poller.py","") con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() cur.execute("SELECT sender FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: sender = value cur.execute("SELECT smtp_login FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: smtp_login = value cur.execute("SELECT smtp_password FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: b = value.encode("UTF-8") bytes_password = base64.b64decode(b) smtp_password = bytes_password.decode("UTF-8") cur.execute("SELECT smtpsrv FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: smtpsrv = value cur.execute("SELECT port FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: port = value cur.execute("SELECT receiver FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: receivers = value.split(";") cur.execute("SELECT tls FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: tls = value cur.execute("SELECT language FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: language = value cur.execute("SELECT receiver FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: receivers = value.split(";") cur.execute("SELECT keyword FROM keyword_list") db_result_list = cur.fetchall() keywords = [] for db_result_tuple in db_result_list: for result in db_result_tuple: keywords.append(result) if all(value != '' for value in [sender, receivers, smtp_login, smtp_password, smtpsrv, str(port), tls, language]): print(bcolors.OKGREEN+"Configuration is good."+bcolors.ENDC) cvePoller(sender, receivers, smtp_login, smtp_password, smtpsrv, port, tls, keywords, language) else: print(bcolors.FAIL+"Error in the config."+bcolors.ENDC) exit() def cvePoller(sender, receivers, smtp_login, smtp_password, smtpsrv, port, tls, keywords, language): print("------------------------------------") summary, url = "","" cve_rss = [] current_feed = feedparser.parse("https://nvd.nist.gov/feeds/xml/cve/misc/nvd-rss.xml") for entries in current_feed.entries: title = entries.title summary = entries.summary cve_id = re.findall('CVE-\d{4}-\d{4,7}',title) cve_id = cve_id[0] cve_rss.append(cve_id+"(=)"+summary) summary, url = "","" con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() dest_language = getUserLanguage() now_date = str(datetime.now()).split(" ")[0].split("-") idx_date = now_date[2]+"/"+now_date[1]+"/"+now_date[0] time.sleep(10) # CPE new_cve_list = [] cur.execute("SELECT cpe FROM cpe_list") db_result_list = cur.fetchall() cpes = getCpeList() if cpes != []: print(bcolors.HEADER+"Polling NVD related to your product list (CPE based search)."+bcolors.ENDC+"\n") for cpe in cpes: time.sleep(30) cve_ids = pollCveIdFromCpe(cpe) cpe = cpe.replace("\n","").replace(" ","") for cve_id in cve_ids: cur.execute("SELECT CVE_ID FROM CVE_DATA WHERE CVE_ID = (?);", (cve_id,)) db_result_list = cur.fetchall() db_result_str = "" for db_result_tuple in db_result_list: for result in db_result_tuple: db_result_str+=result if cve_id not in db_result_str: time.sleep(10) nvd_base_url = "https://services.nvd.nist.gov/rest/json/cve/1.0/" nvd_query = nvd_base_url+cve_id nvd_response = requests.get(url=nvd_query) nvd_data = nvd_response.json() if 'result' in nvd_data.keys(): if 'reference_data' in nvd_data['result']['CVE_Items'][0]['cve']['references']: nvd_links = nvd_data['result']['CVE_Items'][0]['cve']['references']['reference_data'] cve_sources = "" for link in nvd_links: cve_sources += (link['url']+"\n") else: cve_sources = "N/A" key_match = cpe cve_score = "" fr_society = " (constructeur/éditeur)" en_society = " (builder/publisher)" if not "impact" in nvd_data['result']['CVE_Items'][0].keys(): cve_score = "N/A" try: webpage = requests.get("https://nvd.nist.gov/vuln/detail/{}".format(cve_id)) soup = BeautifulSoup(webpage.content, 'html.parser') cve_cna_score = soup.find(id='Cvss3CnaCalculatorAnchor') cve_cna_score = cve_cna_score.get_text() if cve_cna_score != "": if language == "fr" or language=="FR": cve_score = cve_cna_score + fr_society else: cve_score = cve_cna_score + en_society else: cve_score = "N/A" except: cve_score = "N/A" else: try: cve_score = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['baseScore'] except: cve_score = "N/A" published_date = nvd_data['result']['CVE_Items'][0]['publishedDate'] formatted_date = published_date.split("T")[0] formatted_date = datetime.strptime(formatted_date,"%Y-%m-%d") date_2_days_ago = datetime.now() - timedelta(days=7) if (date_2_days_ago<=formatted_date) and (formatted_date<=datetime.now()): cve_date_status = "Potentially new CVE" else: cve_date_status = "Potentially an update" cve_date = published_date.split("T")[0] if language == "fr" or language == "FR": fr_date = cve_date.split("-") cve_date = fr_date[2]+"/"+fr_date[1]+"/"+fr_date[0] if (cve_score=="N/A"): cve_status = cve_date_status+" - "+"Not yet rated (No score, no CPE)" else: cve_status = cve_date_status+" - "+"Valid evaluation" cve_cpe = "" if "configurations" in nvd_data['result']['CVE_Items'][0].keys(): if nvd_data['result']['CVE_Items'][0]['configurations']['nodes']: for node in nvd_data['result']['CVE_Items'][0]['configurations']['nodes']: if 'cpe_match' in node.keys(): for cpe_node in node['cpe_match']: cve_cpe += (cpe_node['cpe23Uri']+'\n') if cve_cpe == "": cve_cpe = "N/A" cve_description = nvd_data['result']['CVE_Items'][0]['cve']['description']['description_data'][0]['value'] if language == "fr" or language=="FR": try: cve_description = translateText(dest_language,cve_description) except: pass if not "/" in cve_date: cve_date = cve_date.split("-")[2]+"/"+cve_date.split("-")[1]+"/"+cve_date.split("-")[0] try: cve_status = translateText(dest_language,cve_status).replace("nouveau", "une nouvelle").replace("évalué","évaluée") except: pass nvd_link = 'https://nvd.nist.gov/vuln/detail/'+cve_id else: cve_description = "N/A" date = str(datetime.now()).split(" ")[0].split("-") cve_date = date[2]+"/"+date[1]+"/"+date[0] cve_score = "N/A" cve_sources = "N/A" cve_status = "N/A" cve_cpe = "N/A" nvd_link = 'https://nvd.nist.gov/vuln/detail/'+cve_id status = "Unread" if cve_id not in new_cve_list: cur.execute("INSERT INTO CVE_DATA (CVE_ID,KEYWORD,STATUS,CVE_SCORE,CVE_DATE,CVE_DESCRIPTION,CVE_EVAL,CVE_CPE,CVE_SOURCES,EXPLOIT_FIND,INDEXING_DATE) VALUES (?,?,?,?,?,?,?,?,?,?,?);", (cve_id,key_match,status,str(cve_score).split(" ")[0],cve_date,cve_description,cve_status,cve_cpe,cve_sources,"False",idx_date)) con.commit() report="updated" print("New CVE detected -> "+cve_id) try: sendAlert(smtp_login, smtp_password, smtpsrv, port, tls, sender, receivers, cve_id, cve_sources, str(cve_score).split(" ")[0], cve_status, cve_cpe, cve_date, cve_description, language,key_match) alert = "sent" except Exception as e: handleException(e) alert = "unsent" new_cve_list.append(cve_id) writeCveTypeLog("cve_poller",cve_id,"new",key_match,str(cve_score).split(" ")[0],cve_date,cve_cpe,report,alert) if not new_cve_list: print(bcolors.HEADER+"No new CVE related to your (CPE) product list."+bcolors.ENDC) print("------------------------------------") else: timestamp = datetime.now().strftime("%d/%m/%Y %H:%M:%S") print(bcolors.OKGREEN+"Database was updated with new CVE."+bcolors.ENDC) print("------------------------------------") # RSS new_cve_list = [] print(bcolors.HEADER+"Polling NVD RSS feed (keyword based search)."+bcolors.ENDC+"\n") for cve in cve_rss: cve_id = cve.split("(=)")[0] summary = cve.split("(=)")[1] for key in keywords: if bool(re.fullmatch(r'[A-Z0-9-._]{4,}',key)) == True or bool(re.fullmatch(r'\w{1,3}',key)) == True: if key in summary: key_match = key cur.execute("SELECT CVE_ID FROM CVE_DATA WHERE CVE_ID = (?);", (cve_id,)) db_result_list = cur.fetchall() db_result_str = "" for db_result_tuple in db_result_list: for result in db_result_tuple: db_result_str+=result if cve_id not in db_result_str: time.sleep(15) nvd_base_url = "https://services.nvd.nist.gov/rest/json/cve/1.0/" nvd_query = nvd_base_url+cve_id nvd_response = requests.get(url=nvd_query) nvd_data = nvd_response.json() if 'result' in nvd_data.keys(): if 'reference_data' in nvd_data['result']['CVE_Items'][0]['cve']['references']: nvd_links = nvd_data['result']['CVE_Items'][0]['cve']['references']['reference_data'] cve_sources = "" for link in nvd_links: cve_sources += (link['url']+"\n") else: cve_sources = "N/A" cve_score = "" fr_society = " (constructeur/éditeur)" en_society = " (builder/publisher)" if not "impact" in nvd_data['result']['CVE_Items'][0].keys(): cve_score = "N/A" try: webpage = requests.get("https://nvd.nist.gov/vuln/detail/{}".format(cve_id)) soup = BeautifulSoup(webpage.content, 'html.parser') cve_cna_score = soup.find(id='Cvss3CnaCalculatorAnchor') cve_cna_score = cve_cna_score.get_text() if cve_cna_score != "": if language == "fr" or language=="FR": cve_score = cve_cna_score + fr_society else: cve_score = cve_cna_score + en_society else: cve_score = "N/A" except: cve_score = "N/A" else: try: cve_score = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['baseScore'] except: cve_score = "N/A" published_date = nvd_data['result']['CVE_Items'][0]['publishedDate'] formatted_date = published_date.split("T")[0] formatted_date = datetime.strptime(formatted_date,"%Y-%m-%d") date_2_days_ago = datetime.now() - timedelta(days=7) if (date_2_days_ago<=formatted_date) and (formatted_date<=datetime.now()): cve_date_status = "Potentially new CVE" else: cve_date_status = "Potentially an update" cve_date = published_date.split("T")[0] if language == "fr" or language == "FR": fr_date = cve_date.split("-") cve_date = fr_date[2]+"/"+fr_date[1]+"/"+fr_date[0] if (cve_score=="N/A"): cve_status = cve_date_status+" - "+"Not yet rated (No score, no CPE)" else: cve_status = cve_date_status+" - "+"Valid evaluation" cve_cpe = "" if "configurations" in nvd_data['result']['CVE_Items'][0].keys(): if nvd_data['result']['CVE_Items'][0]['configurations']['nodes']: for node in nvd_data['result']['CVE_Items'][0]['configurations']['nodes']: if 'cpe_match' in node.keys(): for cpe_node in node['cpe_match']: cve_cpe += (cpe_node['cpe23Uri']+'\n') if cve_cpe == "": cve_cpe = "N/A" cve_description = nvd_data['result']['CVE_Items'][0]['cve']['description']['description_data'][0]['value'] nvd_link = 'https://nvd.nist.gov/vuln/detail/'+cve_id if language == "fr" or language=="FR": try: cve_description = translateText(dest_language,cve_description) except: pass if not "/" in cve_date: cve_date = cve_date.split("-")[2]+"/"+cve_date.split("-")[1]+"/"+cve_date.split("-")[0] try: cve_status = translateText(dest_language,cve_status).replace("nouveau", "une nouvelle").replace("évalué","évaluée") except: pass else: cve_description = summary date = str(datetime.now()).split(" ")[0].split("-") cve_date = date[2]+"/"+date[1]+"/"+date[0] cve_score = "N/A" cve_sources = "N/A" cve_status = "N/A" cve_cpe = "N/A" nvd_link = 'https://nvd.nist.gov/vuln/detail/'+cve_id status = "Unread" if cve_id not in new_cve_list: cur.execute("INSERT INTO CVE_DATA (CVE_ID,KEYWORD,STATUS,CVE_SCORE,CVE_DATE,CVE_DESCRIPTION,CVE_EVAL,CVE_CPE,CVE_SOURCES,EXPLOIT_FIND,INDEXING_DATE) VALUES (?,?,?,?,?,?,?,?,?,?,?);", (cve_id,key_match,status,str(cve_score).split(" ")[0],cve_date,cve_description,cve_status,cve_cpe,cve_sources,"False",idx_date)) con.commit() print("New CVE detected -> "+cve_id) report="updated" try: sendAlert(smtp_login, smtp_password, smtpsrv, port, tls, sender, receivers, cve_id, cve_sources, str(cve_score).split(" ")[0], cve_status, cve_cpe, cve_date, cve_description, language,key_match) alert = "sent" except Exception as e: handleException(e) alert = "unsent" new_cve_list.append(cve_id) writeCveTypeLog("cve_poller",cve_id,"new",key_match,str(cve_score).split(" ")[0],cve_date,cve_cpe,report,alert) else: if bool(re.search(key,summary,re.IGNORECASE)) == True: key_match = key cur.execute("SELECT CVE_ID FROM CVE_DATA WHERE CVE_ID = (?);", (cve_id,)) db_result_list = cur.fetchall() db_result_str = "" for db_result_tuple in db_result_list: for result in db_result_tuple: db_result_str+=result if cve_id not in db_result_str: time.sleep(15) nvd_base_url = "https://services.nvd.nist.gov/rest/json/cve/1.0/" nvd_query = nvd_base_url+cve_id nvd_response = requests.get(url=nvd_query) nvd_data = nvd_response.json() if 'result' in nvd_data.keys(): if 'reference_data' in nvd_data['result']['CVE_Items'][0]['cve']['references']: nvd_links = nvd_data['result']['CVE_Items'][0]['cve']['references']['reference_data'] cve_sources = "" for link in nvd_links: cve_sources += (link['url']+"\n") else: cve_sources = "N/A" cve_score = "" fr_society = " (constructeur/éditeur)" en_society = " (builder/publisher)" if not "impact" in nvd_data['result']['CVE_Items'][0].keys(): cve_score = "N/A" try: webpage = requests.get("https://nvd.nist.gov/vuln/detail/{}".format(cve_id)) soup = BeautifulSoup(webpage.content, 'html.parser') cve_cna_score = soup.find(id='Cvss3CnaCalculatorAnchor') cve_cna_score = cve_cna_score.get_text() if cve_cna_score != "": if language == "fr" or language=="FR": cve_score = cve_cna_score + fr_society else: cve_score = cve_cna_score + en_society else: cve_score = "N/A" except: cve_score = "N/A" else: try: cve_score = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['baseScore'] except: cve_score = "N/A" published_date = nvd_data['result']['CVE_Items'][0]['publishedDate'] formatted_date = published_date.split("T")[0] formatted_date = datetime.strptime(formatted_date,"%Y-%m-%d") date_2_days_ago = datetime.now() - timedelta(days=7) if (date_2_days_ago<=formatted_date) and (formatted_date<=datetime.now()): cve_date_status = "Potentially new CVE" else: cve_date_status = "Potentially an update" cve_date = published_date.split("T")[0] if language == "fr" or language == "FR": fr_date = cve_date.split("-") cve_date = fr_date[2]+"/"+fr_date[1]+"/"+fr_date[0] if (cve_score=="N/A"): cve_status = cve_date_status+" - "+"Not yet rated (No score, no CPE)" else: cve_status = cve_date_status+" - "+"Valid evaluation" cve_cpe = "" if "configurations" in nvd_data['result']['CVE_Items'][0].keys(): if nvd_data['result']['CVE_Items'][0]['configurations']['nodes']: for node in nvd_data['result']['CVE_Items'][0]['configurations']['nodes']: if 'cpe_match' in node.keys(): for cpe_node in node['cpe_match']: cve_cpe += (cpe_node['cpe23Uri']+'\n') if cve_cpe == "": cve_cpe = "N/A" cve_description = nvd_data['result']['CVE_Items'][0]['cve']['description']['description_data'][0]['value'] nvd_link = 'https://nvd.nist.gov/vuln/detail/'+cve_id if language == "fr" or language=="FR": try: cve_description = translateText(dest_language,cve_description) except: pass if not "/" in cve_date: cve_date = cve_date.split("-")[2]+"/"+cve_date.split("-")[1]+"/"+cve_date.split("-")[0] try: cve_status = translateText(dest_language,cve_status).replace("nouveau", "une nouvelle").replace("évalué","évaluée") except: pass else: cve_description = summary date = str(datetime.now()).split(" ")[0].split("-") cve_date = date[2]+"/"+date[1]+"/"+date[0] cve_score = "N/A" cve_sources = "N/A" cve_status = "N/A" cve_cpe = "N/A" nvd_link = 'https://nvd.nist.gov/vuln/detail/'+cve_id status = "Unread" if cve_id not in new_cve_list: cur.execute("INSERT INTO CVE_DATA (CVE_ID,KEYWORD,STATUS,CVE_SCORE,CVE_DATE,CVE_DESCRIPTION,CVE_EVAL,CVE_CPE,CVE_SOURCES,EXPLOIT_FIND,INDEXING_DATE) VALUES (?,?,?,?,?,?,?,?,?,?,?);", (cve_id,key_match,status,str(cve_score).split(" ")[0],cve_date,cve_description,cve_status,cve_cpe,cve_sources,"False",idx_date)) con.commit() print("New CVE detected -> "+cve_id) report="updated" try: sendAlert(smtp_login, smtp_password, smtpsrv, port, tls, sender, receivers, cve_id, cve_sources, str(cve_score).split(" ")[0], cve_status, cve_cpe, cve_date, cve_description, language,key_match) alert = "sent" except Exception as e: handleException(e) alert = "unsent" new_cve_list.append(cve_id) writeCveTypeLog("cve_poller",cve_id,"new",key_match,str(cve_score).split(" ")[0],cve_date,cve_cpe,report,alert) if not new_cve_list: print(bcolors.HEADER+"No new CVE matched with your keyword list."+bcolors.ENDC) print("------------------------------------") timestamp = datetime.now().strftime("%d/%m/%Y %H:%M:%S") print(bcolors.OKBLUE+"Finished at : "+timestamp+bcolors.ENDC) print("------------------------------------") else: print(bcolors.OKGREEN+"Database was updated with new CVE."+bcolors.ENDC) timestamp = datetime.now().strftime("%d/%m/%Y %H:%M:%S") print("------------------------------------") print(bcolors.OKBLUE+"Finished at : "+timestamp+bcolors.ENDC) print("------------------------------------") def sendAlert(smtp_login, smtp_password, smtpsrv, port, tls, sender, receivers, cve_id, cve_sources, cve_score, cve_status, cve_cpe, cve_date, cve_description, language,key_match): body = "" nvd_url = "https://nvd.nist.gov/vuln/detail/"+cve_id for receiver in receivers: with open(dir_path+'cve_template.html', 'r') as template: html_code = template.read() if "cpe" in key_match: key_match = getParsedCpe(key_match) if language == "fr" or language=="FR": html_code = html_code.replace("Responsive HTML email templates","Alerte") html_code = html_code.replace("$CVE",cve_id+" (Produit : {})".format(key_match)) try: cve_description = translateText(dest_language,cve_description) except: pass html_code = html_code.replace("$DESCRIPTION", cve_description.replace("u'","").replace("u ``","")) if not "/" in cve_date: cve_date = cve_date.split("-")[2]+"/"+cve_date.split("-")[1]+"/"+cve_date.split("-")[0] html_code = html_code.replace("$DATE", cve_date) html_code = html_code.replace("$SCORE", str(cve_score)) try: cve_status = translateText(dest_language,cve_status).replace("nouveau", "une nouvelle").replace("évalué","évaluée") except: pass html_code = html_code.replace("$STATUS", cve_status) html_code = html_code.replace("$CPE", cve_cpe) html_code = html_code.replace("$SOURCES", cve_sources) html_code = html_code.replace("See more details", "Voir plus de détails") html_code = html_code.replace("Publication date", "Date de publication") html_code = html_code.replace("Status", "Statut") html_code = html_code.replace("CPE/Product", "CPE/Produit") html_code = html_code.replace("CVSS Score (V3)", "Score CVSS (V3)") html_code = html_code.replace("This email was sent by", "Cet email a été envoyé par") html_code = html_code.replace("CVE module", "Module CVE") body = html_code.replace("URL OF THE NEWS",nvd_url) else: html_code = html_code.replace("Responsive HTML email templates","Alert") html_code = html_code.replace("$CVE",cve_id+" (Product : {})".format(key_match)) html_code = html_code.replace("$DESCRIPTION", cve_description.replace("u'","").replace("u ``","")) html_code = html_code.replace("$DATE", cve_date) html_code = html_code.replace("$SCORE", str(cve_score)) html_code = html_code.replace("$STATUS", cve_status) html_code = html_code.replace("$CPE", cve_cpe) html_code = html_code.replace("$SOURCES", cve_sources) body = html_code.replace("URL OF THE NEWS",nvd_url) print(bcolors.HEADER+"Sending alert at {}...".format(receiver)+bcolors.ENDC) try: smtpserver = smtplib.SMTP(smtpsrv,port) msg = MIMEMultipart() msg['Subject'] = 'SECMON - CVE' msg['From'] = sender msg['To'] = receiver msg.attach(MIMEText(body, 'html')) except Exception as e: handleException(e) print(bcolors.FAIL+"Failed to send alert at {}.".format(receiver)+bcolors.ENDC) exit() try: if tls == "yes": smtpserver.ehlo() smtpserver.starttls() smtpserver.login(smtp_login, smtp_password) smtpserver.sendmail(sender, receiver, msg.as_string()) print(bcolors.HEADER+"Alert was sent at {}\n".format(receiver)+bcolors.ENDC) elif tls == "no": smtpserver.login(smtp_login, smtp_password) smtpserver.sendmail(sender, receiver, msg.as_string()) print(bcolors.HEADER+"Alert was sent at {}\n".format(receiver)+bcolors.ENDC) except Exception as e: handleException(e) print(bcolors.FAIL+"An error occurred during authentication with the SMTP server. Check the configuration and try again."+bcolors.ENDC) exit() def main(): colorama.init() print("------------ CVE Module ------------") timestamp = datetime.now().strftime("%d/%m/%Y %H:%M:%S") print(bcolors.OKBLUE+"Starting at : "+timestamp+bcolors.ENDC) print("------------------------------------") checkConfig(sender, receiver, smtp_login, smtp_password, smtpsrv, port, tls,keywords) main() ================================================ FILE: cve_template.html ================================================ SECMON - CVE $CVE : $DESCRIPTION
Logo
CVE module
Responsive HTML email templates
CVE : $CVE

Description : $DESCRIPTION

Publication date : $DATE

CVSS Score (V3) : $SCORE

Status : $STATUS

CPE/Product : $CPE

Sources : $SOURCES

See more details

================================================ FILE: cve_updater.py ================================================ # -*- coding: utf-8 -*- """ SECMON - Source code of the SECMON updater script. """ __author__ = "Aubin Custodio" __copyright__ = "Copyright 2021, SECMON" __credits__ = ["Aubin Custodio","Guezone"] __license__ = "CC BY-NC-SA 4.0" __version__ = "2.1" __maintainer__ = "Aubin Custodio" __email__ = "custodio.aubin@outlook.com" from secmon_lib import writeNewExploitFoundLog, getUnexploitableCveIdList,getGithubAPISettings,getRegisteredCveInfos, get_db_connection, getUnregisteredCveInfos, getFormatedProductList, getCveByProduct, writeNewHighRiskProductLog, writeCveTypeLog from datetime import datetime import os,requests,time import cve_searchsploit as CS script_path = os.path.abspath(__file__) dir_path = script_path.replace("cve_updater.py","") log_file = dir_path+"logs.txt" print("------------ CVE Module - Update ------------") timestamp = datetime.now().strftime("%d/%m/%Y %H:%M:%S") print("Starting at : "+timestamp) print("---------------------------------------------") CS.update_db() con = get_db_connection() cur = con.cursor() cve_list = getUnexploitableCveIdList() for cve in cve_list: exploitdb_exploits = CS.edbid_from_cve(cve) if len(exploitdb_exploits) > 0: cur.execute("UPDATE CVE_DATA SET EXPLOIT_FIND = (?) WHERE CVE_ID = (?)", ("True",cve)) con.commit() print("Exploit found for "+cve+" from Exploit-DB") writeNewExploitFoundLog("cve_updater","exploit-db",cve,f"New(s) exploit found for {cve} from Exploit-DB !") print("\nSearch Github Exploit for registered CVE...") cve_list = getUnexploitableCveIdList() user,key = getGithubAPISettings() con = get_db_connection() cur = con.cursor() if user == "None" or key == "None": print("No Github API configuration found.") else: for cve in cve_list: time.sleep(30) github_query = "https://api.github.com/search/repositories?q=exploit+"+cve github_response = requests.get(url=github_query,auth=(user,key)) github_data = github_response.json() if "items" in github_data.keys(): if len(github_data['items']) > 0: cur.execute("UPDATE CVE_DATA SET EXPLOIT_FIND = (?) WHERE CVE_ID = (?)", ("True",cve)) con.commit() print("Exploit found for "+cve+" from Github") writeNewExploitFoundLog("cve_updater","github",cve,f"New exploit found for {cve} from Github !") print("\nUpdating high risk product list....") plist = getFormatedProductList() con = get_db_connection() cur = con.cursor() critical_product = [] old_critical_product = [] cur.execute("SELECT hname FROM high_risk_products;") db_result_list = cur.fetchall() for db_result_tuple in db_result_list: for result in db_result_tuple: if result not in old_critical_product: old_critical_product.append(result) for product in plist: if "cpe" in product[1]: target_product = product[1] else: target_product = product[0] critical_cve, high_cve, medium_cve, low_cve, na_cve, exploitable_cve = getCveByProduct(target_product, True) if exploitable_cve != []: if product[0] not in old_critical_product: critical_product.append(product) print("New critical product : "+product[0]) cur.execute("INSERT INTO high_risk_products (cpe,hname) VALUES (?,?);", (product[1],product[0])) writeNewHighRiskProductLog("cve_updater",product[1],f"A new critical product was discovered. ({product[1]})") con.commit() print("\nUpdating affected products and CVSS score related to your CVE list...") con = get_db_connection() cur = con.cursor() req = cur.execute("SELECT CVE_ID FROM CVE_DATA") indb_cve_list = [] changelog = [] for tup in req: for cve in tup: indb_cve_list.append(cve) for cve in indb_cve_list: try: try: before_update = getRegisteredCveInfos(cve, full=True) time.sleep(5) after_update = getUnregisteredCveInfos(cve) except: continue for cpe in before_update['cve_cpe']: if cpe == '': before_update['cve_cpe'].remove(cpe) for item in before_update.keys(): if item == "cve_score": if str(after_update[item]) != str(before_update[item]): writeCveTypeLog("cve_updater",cve,"update","N/A",str(after_update[item]),"N/A","N/A","N/A","N/A","The CVSS Score was changed from {} to {}.".format(str(before_update[item]), str(after_update[item]))) changelog.append(cve+" - There has been a change in the CVSS score : {} TO {}\n".format(str(before_update[item]), str(after_update[item]))) print(cve+" - There has been a change in the CVSS score : {} TO {}\n".format(str(before_update[item]), str(after_update[item]))) cur.execute("UPDATE CVE_DATA SET CVE_SCORE = (?) WHERE CVE_ID = (?)", (str(after_update[item]),cve)) con.commit() elif item == "cve_cpe": if after_update[item] != before_update[item]: change = "" diff = list(set(after_update[item])-set(before_update[item])) if diff == []: change = "removed" diff = list(set(before_update[item])-set(after_update[item])) cpe_diff = "" for elem in diff: if len(diff) == 1 or elem == diff[-1]: cpe_diff += elem else: cpe_diff = cpe_diff+elem+" AND " else: change = "added" cpe_diff = "" for elem in diff: if len(diff) == 1 or elem == diff[-1]: cpe_diff += elem else: cpe_diff = cpe_diff+elem+" AND " writeCveTypeLog("cve_updater",cve,"update","N/A",str(after_update[item]),"N/A","N/A","N/A","N/A","The following products have been {} : {} \n".format(change,cpe_diff)) changelog.append(cve+" - The following products have been {} : {} \n".format(change,cpe_diff)) print(cve+" - The following products have been {} : {} \n".format(change,cpe_diff)) new_cpe = "" for cpe in after_update[item]: new_cpe+=(cpe+"\n") cur.execute("UPDATE CVE_DATA SET CVE_CPE = (?) WHERE CVE_ID = (?)", (new_cpe,cve)) con.commit() except: continue if changelog == []: print("No CVE have been updated. \n") timestamp = datetime.now().strftime("%d/%m/%Y %H:%M:%S") print("---------------------------------------------") print("Finished at : "+timestamp) print("---------------------------------------------") ================================================ FILE: docker/install.py ================================================ from time import sleep import os from getpass import getpass print("| SECMON - DockerAutoInstall |") print("1. Certificate : ") print("Note 1 : You can delete this self signed cert and put your CA signed cert after install. ") sleep(2) fqdn = input("Enter the FQDN of the web server :") print("Note 2 : Don't forget to enter a good value for CN (FQDN of your server)") sleep(2) os.system("openssl req -newkey rsa:4096 -x509 -sha512 -days 3650 -nodes -out /etc/ssl/secmon/secmon.crt -keyout /etc/ssl/secmon/secmon.key") print("Your certificate is available on /etc/ssl/secmon ! ") print("----------------------------------------------------------------------------------------------------------------------") print("2. SECMON Install : ") sender = input("Sender email address :") smtp_login = input("SMTP account login :") smtp_password = getpass("SMTP email account password :") smtpsrv = input("SMTP Server FQDN or IP :") smtpport = input("SMTP used port :") tls = input("Using TLS SMTP auth ? (yes/no) :") lang = input("Language (en/fr) :") receivers = input("SECMON email receivers (single or many seperated by ;):") os.system(f"chown -R www-data:www-data /var/www/secmon && chmod -R 744 /var/www/secmon") os.system(f"python3 /var/www/secmon/setup.py -login '{smtp_login}' -p '{smtp_password}' -server '{smtpsrv}' -port '{smtpport}' -tls '{tls}' -lang '{lang}' -sender '{sender}' -r '{receivers}'") print("Executing secmon in background...") os.system("nohup python3 /var/www/secmon/secmon.py >/dev/null 2>&1 &") print("Executing cve_updater in background...") os.system("nohup python3 /var/www/secmon/cve_updater.py >/dev/null 2>&1 &") print("SECMON is successfully installed and configured !") print("----------------------------------------------------------------------------------------------------------------------") print("3. Apache configuration : ") f = open("/var/www/secmon/docker/secmon.conf").read() os.system("chown -R www-data:www-data /var/www/secmon/ && chmod -R 744 /var/www/secmon/") content = f.replace("{FQDN}",fqdn) f = open("/etc/apache2/sites-enabled/secmon.conf","w") f.write(content) f.close() os.system("a2enmod ssl && service apache2 restart") print("Apache is successfully configured !") print(f"You can now access the web interface at the following address: https://{fqdn}") print("----------------------------------------------------------------------------------------------------------------------") ================================================ FILE: docker/secmon-ci.conf ================================================ ServerName {FQDN} WSGIScriptAlias / /var/www/secmon/secmon.wsgi WSGIDaemonProcess secmon_web DocumentRoot /var/www/secmon ServerName {FQDN} ServerAlias www.{FQDN} WSGIProcessGroup secmon_web WSGIPassAuthorization On WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all ServerSignature Off LogLevel info ErrorLog ${APACHE_LOG_DIR}/error_secmon.log CustomLog ${APACHE_LOG_DIR}/access_secmon.log combined SSLProtocol -all +TLSv1.2 +TLSv1.3 SSLEngine on SSLCertificateFile /etc/ssl/secmon/secmon.crt SSLCertificateKeyFile /etc/ssl/secmon/secmon.key ================================================ FILE: docker/secmon.conf ================================================ ServerName {FQDN} ServerAdmin admin@mail.com ServerName {FQDN} ServerAlias www.{FQDN} DocumentRoot /var/www/secmon Redirect permanent / https://{FQDN} WSGIProcessGroup secmon_web WSGIPassAuthorization On WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all ServerSignature off ErrorLog ${APACHE_LOG_DIR}/error_secmon.log CustomLog ${APACHE_LOG_DIR}/access_secmon.log combined WSGIScriptAlias / /var/www/secmon/secmon.wsgi WSGIDaemonProcess secmon_web DocumentRoot /var/www/secmon ServerName {FQDN} ServerAlias www.{FQDN} WSGIProcessGroup secmon_web WSGIPassAuthorization On WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all ServerSignature Off LogLevel info ErrorLog ${APACHE_LOG_DIR}/error_secmon.log CustomLog ${APACHE_LOG_DIR}/access_secmon.log combined SSLProtocol -all +TLSv1.2 +TLSv1.3 SSLEngine on SSLCertificateFile /etc/ssl/secmon/secmon.crt SSLCertificateKeyFile /etc/ssl/secmon/secmon.key ================================================ FILE: requirements.txt ================================================ Jinja2==3.0.1 Werkzeug==2.0 Flask_SQLAlchemy==2.4.4 requests==2.22.0 colorama==0.4.3 tweepy==3.8.0 openpyxl==3.0.5 git+https://github.com/Guezone/cve_searchsploit Flask==2.0.3 deep_translator==1.3.2 feedparser==6.0.8 beautifulsoup4==4.9.3 flask_simplelogin==0.0.7 python-dateutil PyGithub traceback-with-variables==2.0.4 ================================================ FILE: rss_poller.py ================================================ # -*- coding: utf-8 -*- """ SECMON - Source code of the SECMON rss poller script. """ __author__ = "Aubin Custodio" __copyright__ = "Copyright 2021, SECMON" __credits__ = ["Aubin Custodio","Guezone"] __license__ = "CC BY-NC-SA 4.0" __version__ = "2.1" __maintainer__ = "Aubin Custodio" __email__ = "custodio.aubin@outlook.com" import base64, os, smtplib, re, requests, sqlite3, feedparser, colorama from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from datetime import datetime, timedelta from secmon_lib import translateText, getUserLanguage, writeMgmtTasksLog, writeNewRssNewLog,handleException rss_feeds = [ 'https://cyware.com/allnews/feed', 'https://www.cshub.com/rss/categories/attacks', 'https://www.schneier.com/feed/atom/', 'https://www.cshub.com/rss/categories/threat-defense', 'https://www.cshub.com/rss/categories/malware', 'https://www.fortiguard.com/rss/ir.xml', 'https://nakedsecurity.sophos.com/feed/', 'https://www.techrepublic.com/rssfeeds/topic/security/?feedType=rssfeeds', 'https://www.cert.ssi.gouv.fr/feed/', 'https://us-cert.cisa.gov/ncas/all.xml', 'https://www.zataz.com/feed/', ] sender, receiver, smtp_login, smtp_password, smtpsrv, port, tls, keywords = '','','','','','','','' script_path = os.path.abspath(__file__) dir_path = script_path.replace("rss_poller.py","") log_file = dir_path+"logs.txt" class bcolors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' BOLD = '\033[1m' UNDERLINE = '\033[4m' def parseRSSSource(source): if "us-cert.cisa" in source or "cyware.com" in source: new_source = source.replace("https://","").split(".")[0] else: new_source = source.replace("https://","").replace("www.","").split(".")[0] return new_source def checkConfig(sender, receivers, smtp_login, smtp_password, smtpsrv, port, tls,rss_feeds): script_path = os.path.abspath(__file__) dir_path = script_path.replace("rss_poller.py","") con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() cur.execute("SELECT sender FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: sender = value cur.execute("SELECT smtp_login FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: smtp_login = value cur.execute("SELECT smtp_password FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: b = value.encode("UTF-8") bytes_password = base64.b64decode(b) smtp_password = bytes_password.decode("UTF-8") cur.execute("SELECT smtpsrv FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: smtpsrv = value cur.execute("SELECT port FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: port = value cur.execute("SELECT receiver FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: receivers = value.split(";") cur.execute("SELECT tls FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: tls = value cur.execute("SELECT language FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: language = value cur.execute("SELECT receiver FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: receivers = value.split(";") cur.execute("SELECT keyword FROM keyword_list") db_result_list = cur.fetchall() keywords = [] for db_result_tuple in db_result_list: for result in db_result_tuple: keywords.append(result) if all(value != '' for value in [sender, receivers, smtp_login, smtp_password, smtpsrv, str(port), tls, language]): print(bcolors.OKGREEN+"Configuration is good."+bcolors.ENDC) rssPoller(sender, receivers, smtp_login, smtp_password, smtpsrv, port, tls, language, rss_feeds) else: print(bcolors.FAIL+"Error in the config."+bcolors.ENDC) def rssPoller(sender, receivers, smtp_login, smtp_password, smtpsrv, port, tls, language, rss_feeds): print("------------------------------------") summary, url = "","" new = False con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() for rss_feed in rss_feeds: current_feed = feedparser.parse(rss_feed) for entries in current_feed.entries: url = entries.link cur.execute("SELECT RSS_URL FROM RSS_DATA WHERE RSS_URL = (?);", (url,)) db_result_list = cur.fetchall() db_result_str = "" for db_result_tuple in db_result_list: for result in db_result_tuple: db_result_str+=result if url not in db_result_str: new = True title = entries.title summary = entries.summary if summary == "": summary+="Empty summary." dest_language = getUserLanguage() try: title = translateText(dest_language,title) summary = translateText(dest_language,summary) except: pass cur.execute("INSERT INTO RSS_DATA (RSS_URL, title, rss_f, summary) VALUES (?,?,?,?);", (url,title,rss_feed,summary)) con.commit() try: sendAlert(smtp_login, smtp_password, smtpsrv, port, tls, sender, receivers, title, summary, url, language, rss_feed) mail = "sent" except Exception as e: handleException(e) mail = "unsent" writeNewRssNewLog("rss_poller",parseRSSSource(rss_feed),rss_feed,title,url,mail) if new == True: print(bcolors.OKGREEN+"Database was updated. Goodbye."+bcolors.ENDC) else: print(bcolors.OKGREEN+"No news. Goodbye."+bcolors.ENDC) print("------------------------------------") timestamp = datetime.now().strftime("%d/%m/%Y %H:%M:%S") print(bcolors.OKBLUE+"Finished at : "+timestamp+bcolors.ENDC) print("------------------------------------") def sendAlert(smtp_login, smtp_password, smtpsrv, port, tls, sender, receivers, title, summary, url, language, rss_feed): body = "" for receiver in receivers: with open(dir_path+'rss_template.html', 'r') as template: html_code = template.read() html_code = html_code.replace("$SOURCE", parseRSSSource(rss_feed)) if language == "fr" or language=="FR": html_code = html_code.replace("See more details", "Voir plus de détails") html_code = html_code.replace("This email was sent by", "Cet email a été envoyé par") html_code = html_code.replace("Notification", "Information") html_code = html_code.replace("RSS module", "Module RSS") html_code = html_code.replace("$TITLE", title) html_code = html_code.replace("$SUMMARY", summary) html_code = html_code.replace("Title", "Titre") html_code = html_code.replace("Summary", "Résumé") body = html_code.replace("URL OF THE NEWS",url) else: html_code = html_code.replace("$TITLE", title) html_code = html_code.replace("Notification", "News") html_code = html_code.replace("$SUMMARY", summary) body = html_code.replace("URL OF THE NEWS",url) print(bcolors.HEADER+"Sending news at {}...".format(receiver)+bcolors.ENDC) try: smtpserver = smtplib.SMTP(smtpsrv,port) msg = MIMEMultipart() msg['Subject'] = 'SECMON - RSS' msg['From'] = sender msg['To'] = receiver msg.attach(MIMEText(body, 'html')) except Exception as e: handleException(e) print(bcolors.FAIL+"Failed to send news at {}.".format(receiver)+bcolors.ENDC) exit() try: if tls == "yes": smtpserver.ehlo() smtpserver.starttls() smtpserver.login(smtp_login, smtp_password) smtpserver.sendmail(sender, receiver, msg.as_string()) print(bcolors.HEADER+"News was sent at {}\n".format(receiver)+bcolors.ENDC) elif tls == "no": smtpserver.login(smtp_login, smtp_password) smtpserver.sendmail(sender, receiver, msg.as_string()) print(bcolors.HEADER+"News was sent at {}\n".format(receiver)+bcolors.ENDC) except Exception as e: handleException(e) print(bcolors.FAIL+"An error occurred during authentication with the SMTP server. Check the configuration and try again."+bcolors.ENDC) exit() def main(): print() colorama.init() print("------------ RSS Module ------------") timestamp = datetime.now().strftime("%d/%m/%Y %H:%M:%S") print(bcolors.OKBLUE+"Starting at : "+timestamp+bcolors.ENDC) print("------------------------------------") checkConfig(sender, receiver, smtp_login, smtp_password, smtpsrv, port, tls,rss_feeds) main() ================================================ FILE: rss_template.html ================================================ SECMON - RSS $SUMMARY
Logo
RSS module
Notification
Title : $TITLE

Source : $SOURCE

Summary : $SUMMARY
See more details

================================================ FILE: secmon.py ================================================ # -*- coding: utf-8 -*- """ SECMON - Launcher of poller script. """ __author__ = "Aubin Custodio" __copyright__ = "Copyright 2021, SECMON" __credits__ = ["Aubin Custodio","Guezone"] __license__ = "CC BY-NC-SA 4.0" __version__ = "2.1" __maintainer__ = "Aubin Custodio" __email__ = "custodio.aubin@outlook.com" import cve_poller import rss_poller ================================================ FILE: secmon.wsgi ================================================ import sys sys.path.insert(0, "/var/www/secmon") from secmon_web import app as application ================================================ FILE: secmon_lib.py ================================================ # -*- coding: utf-8 -*- """ SECMON - Library for SECMON python web backend. """ __author__ = "Aubin Custodio" __copyright__ = "Copyright 2021, SECMON" __credits__ = ["Aubin Custodio","Guezone"] __license__ = "CC BY-NC-SA 4.0" __version__ = "2.1" __maintainer__ = "Aubin Custodio" __email__ = "custodio.aubin@outlook.com" from flask import Flask, url_for, render_template, send_from_directory, request, flash, redirect, safe_join, session, url_for, session, abort from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from time import sleep from dateutil.relativedelta import relativedelta from openpyxl import Workbook from openpyxl.styles import Font, Color, Alignment, Border, Side, colors, PatternFill from openpyxl.utils import get_column_letter from openpyxl.worksheet.dimensions import ColumnDimension from deep_translator import GoogleTranslator, MyMemoryTranslator import jinja2.exceptions, sqlite3,requests, feedparser, re, smtplib, os, tweepy, base64, time, socket, random from datetime import datetime, timedelta from werkzeug.security import generate_password_hash, check_password_hash from flask_sqlalchemy import sqlalchemy, SQLAlchemy from flask_simplelogin import is_logged_in from bs4 import BeautifulSoup import cve_searchsploit as CS import secmon_monitor,traceback from multiprocessing import Process, Queue from datetime import * from github import Github from traceback_with_variables import print_exc rss_feeds = [ 'https://cyware.com/allnews/feed', 'https://www.cshub.com/rss/categories/attacks', 'https://www.schneier.com/feed/atom/', 'https://www.cshub.com/rss/categories/threat-defense', 'https://www.cshub.com/rss/categories/malware', 'https://www.fortiguard.com/rss/ir.xml', 'https://nakedsecurity.sophos.com/feed/', 'https://www.techrepublic.com/rssfeeds/topic/security/?feedType=rssfeeds', 'https://www.cert.ssi.gouv.fr/feed/', 'https://us-cert.cisa.gov/ncas/all.xml', 'https://www.zataz.com/feed/', ] messages = { 'login_success': 'Login success.', 'login_failure': 'Bad Username, bad password or bad request.', 'logout': 'You have been successfully logged out.', 'login_required': 'Please sign-in.', 'access_denied': 'Access denied.', 'auth_error': 'Error: {0}' } def sortWordsByOccurrences(word_stats): word_stats.sort(key = lambda x: x[1]) return word_stats[::-1] def getTopThreats(): git_key,git_username = getGithubAPISettings() git_access = Github(git_key) mcafee_repo = git_access.get_repo("advanced-threat-research/Yara-Rules") contents = mcafee_repo.get_contents("") yara_list = [] while contents: file_content = contents.pop(0) if file_content.type == "dir": contents.extend(mcafee_repo.get_contents(file_content.path)) else: if ".yar" in str(file_content) and not "Eicar" in str(file_content): threat = str(file_content).replace('ContentFile(path="',"").replace('.yar")',"").split("/")[0],str(file_content).replace('ContentFile(path="',"").replace('.yar")',"").split("/")[1].split("_",1)[1] yara_list.append([threat[0].title().replace("_","").replace("Apt","APT"),threat[1].title().replace("_","")]) return yara_list def getNewsTopSubject(): top_words = [] fr_common_words = ["de","la","le","et","les","des","en","un","du","une","que","est","pour","qui","dans","a","par","plus","pas","au","sur","ne","se","Le","ce","il","sont","La","Les","ou","avec","son","Il","aux","d'un","En","cette","d'une","ont","ses","mais","comme","on","tout","nous","sa","Mais","fait","été","aussi","leur","bien","peut","ces","y","deux","A","ans","l","encore","n'est","marché","d","Pour","donc","cours","qu'il","moins","sans","C'est","Et","si","entre","Un","Ce","faire","elle","c'est","peu","vous","Une","prix","On","dont","lui","également","Dans","effet","pays","cas","De","millions","Belgique","BEF","mois","leurs","taux","années","temps","groupe","ainsi","toujours","société","depuis","tous","soit","faut","Bruxelles","fois","quelques","sera","entreprises","F","contre","francs","je","n'a","Nous","Cette","dernier","était","Si","s'est","chez","L","monde","alors","sous","actions","autres","Au","ils","reste","trois","non","notre","doit","nouveau","milliards","avant","exemple","compte","belge","premier","s","nouvelle","Elle","l'on","terme","avait","produits","cela","d'autres","fin","niveau","bénéfice","toute","travail","partie","trop","hausse","secteur","part","beaucoup","Je","valeur","croissance","rapport","USD","aujourd'hui","année","base","Bourse","lors","vers","souvent","vie","l'entreprise","autre","peuvent","bon","surtout","toutes","nombre","fonds","point","grande","jour","va","avoir","nos","quelque","place","grand","personnes","plusieurs","certains","d'affaires","permet","politique","cet","chaque","chiffre","pourrait","devrait","produit","l'année","Par","rien","mieux","celui","qualité","France","Ils","Ces","s'agit","vente","jamais","production","action","baisse","Avec","résultats","Des","votre","risque","début","banque","an","voir","avons","qu'un","qu'","elles","moment","qu'on","question","pouvoir","titre","doute","long","petit","d'ailleurs","notamment","FB","droit","qu'elle","heures","cependant","service","Etats-Unis","qu'ils","l'action","jours","celle","demande","belges","ceux","services","bonne","seront","économique","raison","car","situation","Depuis","entreprise","me","nouvelles","n'y","possible","toutefois","tant","nouveaux","selon","parce","dit","seul","qu'une","sociétés","vient","jusqu'","quatre","marchés","mise","seulement","Van","semble","clients","Tout","Cela","serait","fort","frais","lieu","gestion","font","quand","capital","gouvernement","projet","grands","réseau","l'autre","données","prendre","plan","points","outre","pourtant","Ainsi","ni","type","Europe","pendant","Comme","mesure","actuellement","public","dire","important","mis","partir","parfois","nom","n'ont","veut","présent","passé","forme","autant","développement","mettre","grandes","vue","investisseurs","D","trouve","maison","mal","l'an","moyen","choix","doivent","NLG","direction","Sur","simple","période","enfants","dollars","personnel","assez","programme","général","banques","eux","semaine","président","personne","européenne","moyenne","tard","loi","petite","certaines","savoir","loin","explique","plupart","jeunes","cinq","contrat","Banque","valeurs","seule","rendement","nombreux","fonction","offre","client","activités","eu","environ","ministre","cadre","sens","étaient","sécurité","recherche","Paris","sorte","décembre","Son","suite","davantage","ensuite","janvier","donne","vrai","cause","d'abord","conditions","suis","juin","peine","certain","septembre","sommes","famille","l'indice","pris","laquelle","directeur","qu'en","propose","gens","derniers","étant","fut","chose","portefeuille","obligations","afin","différents","technique","Aujourd'hui","ailleurs","P","l'ensemble","américain","ventes","Selon","rue","livre","octobre","vraiment","sein","Or","dollar","Enfin","haut","Plus","petits","porte","tel","durée","domaine","aurait","jeune","présente","passe","PC","lorsque","choses","puis","Vous","aucun","l'un","n'en","tandis","coup","existe","propre","carte","crise","importante","atteint","revenus","montant","forte","ici","s'il","Quant","vu","rapidement","j'ai","ville","etc","mars","s'en","mon","premiers","bas","marque","véritable","ligne","longtemps","propres","devant","passer","départ","pu","total","série","quoi","particulier","concurrence","élevé","position","connu","principe","tendance","court","n","pages","évidemment","résultat","aura","parmi","Sans","américaine","face","trouver","durant","femmes","construction","désormais","distribution","telle","difficile","autour","européen","pratique","centre","vendre","juillet","mai","région","sociale","filiale","film","h","besoin","mode","Pas","représente","réalité","femme","vaut","Tél","aucune","hommes","donner","titres","l'Europe","nombreuses","différentes","moyens","formation","chiffres","Générale","dix","prochain","l'Etat","genre","bureau","communication","participation","gros","pourquoi","estime","devient","réalisé","création","novembre","l'évolution","pourra","semaines","consommation","faible","terrain","site","droits","moitié","puisque","Du","reprise","compris","projets","avril","vont","call","donné","simplement","six","firme","perte","Bien","Philippe","sait","prend","vite","via","stratégie","vos","jeu","J'","petites","marketing","presque","Michel","manque","réaliser","financiers","Car","Comment","voiture","chef","constitue","Internet","J'ai","enfin","net","charge","nature","second","payer","actuel","Elles","investissements","dispose","financier","d'achat","membres","date","avaient","gamme","revanche","comment","décision","l'avenir","tour","actionnaires","s'y","solution","créer","l'économie","concerne","l'époque","belle","lequel","tél","seconde","version","Pays-Bas","cher","chacun","lire","techniques","décidé","mouvement","conseil","nécessaire","meilleur","double","sujet","généralement","restent","celles","politiques","malgré","confiance","homme","d'actions","Certains","ayant","papier","commerce","Région","Wallonie","Windows","termes","met","contraire","informations","l'industrie","trimestre","E","différence","certaine","formule","jusqu'au","voit","programmes","actuelle","permis","dossier","Quand","l'heure","guerre","acheter","rendre","février","ma","l'emploi","main","voire","bons","technologie","européens","Sa","éléments","unique","l'eau","venir","générale","courant","suffit","l'ordre","conserver","maximum","force","fax","Que","largement","milliard","soient","Pierre","devenir","l'Union","franc","minimum","mort","responsable","possibilité","presse","affaires","longue","travers","M","BBL","relativement","moi","Deux","présence","européennes","devraient","groupes","ensemble","santé","New","pense","bénéfices","but","compagnie","publique","coeur","revenu","mesures","table","nettement","questions","d'avoir","permettre","l'homme","Chez","retour","qu'elles","C","majorité","potentiel","moindre","récemment","secteurs","réduction","large","traitement","perdu","étrangers","parents","l'une","fond","capacité","vitesse","activité","l'exercice","l'objet","quel","tient","taille","éviter","risques","Jean","Pourtant","Allemagne","parler","propos","quant","signifie","voie","jouer","prévoit","blanc","noir","parti","logiciel","continue","Notre","bois","meilleure","l'argent","perspectives","développer","celui-ci","oeuvre","structure","suivre","tiers","prise","professionnels","raisons","néanmoins","preuve","social","bénéficiaire","couleurs","mondial","Cet","maintenant","essentiellement","prévu","Japon","prévisions","centrale","Alors","international","yeux","PME","l'a","ait","bonnes","opérations","pied","l'art","pourraient","Londres","juge","devra","uniquement","corps","divers","Parmi","numéro","réduire","Tous","texte","tenu","budget","l'étranger","pression","mes","n'était","style","économiques","Jacques","montre","population","analystes","S","processus","placement","classique","dividende","rester","publics","fortement","plein","wallonne","DEM","Express","faudra","travailler","Crédit","directement","prime","Flandre","crédit","monnaie","précise","appel","Autre","travaux","l'occasion","juste","Chaque","put","tableau","terre","permettent","devenu","rouge","mémoire","partenaires","rapide","travailleurs","joue","objectif","salle","parle","musique","milieu","d'entreprise","autorités","chute","régime","d'autant","liste","opération","bout","performances","électronique","haute","responsables","lancé","voitures","patron","Malgré","affiche","situe","B","l'image","études","Microsoft","condition","retrouve","Aux","revient","Belgacom","route","Ensuite","Luxembourg","campagne","comptes","hors","culture","Commission","d'entre","possibilités","semestre","actifs","finalement","internationale","l'achat","monétaire","passage","of","justice","page","tels","poids","celle-ci","commercial","entendu","l'investisseur","mondiale","accord","diverses","totalement","fil","clair","vin","biens","euro","York","parfaitement","viennent","division","réseaux","principal","lancer","supérieur","atteindre","référence","téléphone","management","vins","proche","collection","fiscale","Ceci","informatique","investissement","volume","matériel","publicité","train","coupon","progression","tenir","protection","l'aide","couleur","nouvel","Lorsque","change","changement","garantie","somme","Belge","plaisir","fils","laisse","importants","privé","ses","besoins","oeuvres","américains","relations","peau","moteur","augmentation","suivi","volonté","beau","bancaire","laisser","bureaux","principalement","intéressant","logiciels","sommet","l'activité","d'en","vivre","élevés","Robert","contrats","oublier","performance","réponse","d'exploitation","concept","obtenir","poste","attendre","lignes","consiste","augmenté","vert","Ou","figure","mot","développé","l'histoire","magasins","collaboration","répondre","TVA","holding","G","livres","convient","fonctions","fera","pouvait","million","Paul","britannique","d'entreprises","voix","Grande-Bretagne","disque","affaire","minutes","quelle","contexte","limite","mains","commun","réduit","Pourquoi","particuliers","verre","wallon","d'Etat","allemand","effets","Chine","meilleurs","rend","applications","d'ici","procédure","l'opération","devait","profit","méthode","pose","commence","idée","l'Internet","d'eau","créé","nuit","Nord","capitaux","options","consommateur","cartes","soi","métier","probablement","aller","d'investissement","facile","International","importantes","Marc","capitale","devise","prochaine","transport","Street","demander","utilisateurs","l'affaire","image","l'idée","propriétaire","facilement","publiques","croire","disponible","Louis","d'or","veulent","Charleroi","Ne","consommateurs","devises","difficultés","sort","national","machines","annoncé","choisi","découvrir","soutien","avez","perdre","cuisine","telles","D'autres","travaille","R","ouvert","phase","certainement","télévision","pratiquement","annuel","bord","paiement","Bank","institutions","seuls","arrive","constate","marques","nationale","regard","représentent","Belges","état","Qui","libre","rachat","Toutefois","portes","sortir","commandes","permettant","manager","fiscal","cinéma","histoire","zone","sauf","avantages","l'information","voici","dur","effectivement","puisse","réel","The","puissance","fixe","Belgium","contact","époque","rythme","principaux","vendu","utilisé","étude","Leur","sensible","Bref","rencontre","L'entreprise","spécialistes","brut","mauvais","néerlandais","supplémentaire","mots","reprises","nécessaires","Non","soir","Prix","machine","penser","CD","parts","comprend","fusion","acquis","totale","voyage","logique","l'échéance","concurrents","idées","trouvé","dette","Sud","réellement","financement","disponibles","vieux","lance","marge","dirigeants","avis","changer","conséquence","sociales","supérieure","Certes","faisant","ordinateur","partenaire","warrant","fabrication","redressement","suffisamment","délégué","pourront","poursuit","chemin","emplois","l'environnement","réalise","FRF","évolution","Cour","automobile","Premier","ancien","note","parties","pension","professionnel","assure","garder","Rien","Actuellement","DE","S'il","l'administration","Guy","est-il","IBM","climat","d'acheter","SICAV","département","sept","partout","immobilier","lancement","rating","réussi","patrimoine","feu","expérience","Anvers","anciens","graphique","Fortis","faveur","retrouver","droite","responsabilité","commande","Kredietbank","d'argent","direct","l'inflation","n'avait","utiliser","tonnes","l'origine","connaissance","acheté","Ici","américaines","clairement","semblent","biais","futur","neuf","chance","faillite","km","équipe","musée","compagnies","documents","pertes","sortie","m'a","seraient","d'autre","choisir","l'instant","tellement","industriel","précompte","d'Europe","immédiatement","avantage","qu'au","constituent","déchets","sport","van","demeure","garde","maisons","Solvay","conséquences","KB","l'offre","active","dépenses","donnent","employés","sites","élections","détient","n'importe","obligation","fruits","véhicule","l'égard","Conseil","investi","mission","profiter","visite","comprendre","professionnelle","affirme","l'intérieur","Wall","charges","privée","rares","succession","liberté","rentabilité","suivant","efficace","assurer","images","agences","impossible","m","John","enfant","fournisseurs","photo","salaires","Avant","compter","l'Est","disposition","formes","bénéficiaires","lesquels","maintenir","précisément","couple","enregistré","recul","offrir","peur","hauteur","centres","voulu","industrielle","positif","Luc","administrateur","intéressante","commerciale","interne","pleine","passant","vision","GSM","faits","retard","certes","l'air","lundi","Outre","porter","écrit","cesse","locaux","délai","trouvent","classiques","commencé","réalisée","Alain","vigueur","gagner","Celui-ci","Philips","ceux-ci","favorable","pouvoirs","participations","annonce","génération","élément","devenue","touche","conseils","devoir","mer","souligne","respectivement","rapports","vacances","lieux","naturellement","d'y","lorsqu'il","statut","USA","ceci","destiné","défaut","objectifs","récente","saison","d'art","industriels","Suisse","catégorie","complexe","huit","l'obligation","fisc","obtenu","repris","occupe","sérieux","émis","Quelques","comportement","limité","vingt","conjoncture","gauche","marche","d'origine","l'utilisateur","ordre","mobilier","parcours","perspective","normes","recours","l'esprit","Communauté","annuelle","T","lecteur","objets","fabricant","niveaux","Entre","réalisation","amateurs","conséquent","présenter","Celle-ci","vise","types","détail","mauvaise","professeur","progressé","signe","passée","approche","p","Reste","return","jardin","l'espace","flamand","Namur","bilan","Vif","sensiblement","Trois","utilise","commune","dimanche","option","partis","analyse","films","surface","warrants","GBP","prises","secret","historique","journée","l'ancien","Pendant","allemande","d'assurance","André","fille","l'importance","proposer","avions","x","augmenter","parc","Delhaize","the","Lors","limitée","appareils","villes","au-dessus","diminution","prochaines","servir","Bernard","commission","faiblesse","plus-value","souhaite","internationales","producteur","producteurs","code","belles","cabinet","fonctionnement","FF","gérer","cm","mouvements","pratiques","régions","dossiers","meilleures","Parce","entrée","vendredi","actif","sociaux","supplémentaires","café","message","physique","Société","communes","dizaine","faute","sélection","source","facteurs","milliers","soleil","tirer","concernant","Bourses","fallait","sentiment","bénéficier","débat","l'Allemagne","élevée","ouvrage","police","pouvez","attention","a-t-il","bel","constructeurs","contribuable","moderne","passion","primes","in","suit","auquel","dépasse","spécialisée","bruxellois","déclaration","multiples","quartier","vidéo","dépend","l'école","liquidités","correction","CA","comité","Web","cherche","filiales","Sous","signé","leader","calcul","gaz","D'abord","Rens","artistes","déficit","cadres","fédéral","probable","remboursement","and","efforts","restaurant","Toutes","couverture","domicile","soins","devront","luxe","complet","danger","indispensable","syndicats","comporte","faite","juridique","langue","rendez-vous","d'informations","demandé","respect","continuer","l'organisation","lesquelles","local","l'impression","n'existe","rare","restructuration","automatiquement","plat","boursier","sol","c'était","cotées","décide","L'action","Cependant","Certaines","matériaux","ordinateurs","tradition","V","progressivement","capable","classe","familiale","réserve","fonctionne","solutions","LA","fabricants","paie","Finances","l'été","réelle","changé","masse","unités","considéré","fer","auront","noms","riche","Patrick","proposé","salon","territoire","fixé","magasin","candidats","marges","asiatique","inférieur","réaction","fleurs","l'effet","record","tribunal","recettes","poursuivre","dessous","portant","Aussi","Sabena","acteurs","dehors","constructeur","l'auteur","relation","offrent","spectaculaire","LUF","produire","confort","familles","investir","reprend","sert","montrer","mérite","places","Soit","judiciaire","textes","quasi","SNCB","jeux","permettra","étudiants","membre","photos","positions","sud","Cockerill","lendemain","cent","gagné","japonais","l'absence","mark","pointe","solide","Voici","anglais","n'ai","présentent","décisions","législation","médias","victimes","écran","nécessairement","découverte","l'assuré","club","environnement","noter","crée","exportations","négociations","Jan","répond","BEL","entier","business","peinture","s'était","voisins","faibles","location","nord","promotion","technologies","auraient","caisse","entend","simples","maladie","menu","chances","commerciaux","printemps","Benelux","poser","Asie","l'utilisation","usage","PIB","actionnaire","prennent","résistance","Dow","II","surprise","Etats","mariage","nécessité","Puis","cote","Plusieurs","beauté","exclusivement","lettre","payé","rendu","s'ils","software","utile","gestionnaires","bénéficie","procédé","vaste","crois","normal","Centre","construire","démarche","emprunts","naissance","D'autant","Co","d'information","distance","tourner","Club","attendant","quantité","roi","l'assureur","tourne","ajoute","bancaires","ajouter","géant","automatique","faux","attend","litres","présenté","argent","confirme","indépendants","l'ordinateur","énorme","destinés","l'avantage","véhicules","ressources","standard","auparavant","construit","Quelle","principales","quelqu'un","disposer","global","écoles","Quel","réputation","fameux","rappelle","conseille","heure","veille","difficulté","l'état","limites","commerciales","samedi","palais","vend","vit","Tractebel","connaissent","reprendre","village","emploi","amis","budgétaire","croit","mises","souci","contient","habitants","Weekend","bras","beaux","bruxelloise","faisait","introduit","intérieur","outils","précis","chercheurs","taxe","salaire","transactions","Christian","chambre","portée","réflexion","AG","C'était","d'emploi","hasard","matin","assureurs","réforme","Beaucoup","fournir","recherches","liés","tenue","proposent","aide","ferme","l'enfant","l'or","secondes","CGER","contenu","quotidien","flamande","centaines","course","billet","critique","l'arrivée","naturel","principale","support","week-end","Dehaene","Gand","chargé","économies","Nos","augmente","guide","proposition","laissé","spécialiste","francophones","importance","vent","conception","préférence","spectacle","avenir","d'entrée","grave","commencer","d'années","diminuer","chercher","bonheur","dizaines","LE","d'environ","exactement","outil","scénario","Jones","coups","émissions","éventuellement","Royale","l'agence","soumis","d'exercice","lecture","monter","Grand","central","exigences","assuré","contacts","consacré","l'attention","d'administration","due","faut-il","réussite","échéance","recevoir","tableaux","arriver","évident","PS","art","Italie","amélioration","auteurs","estimé","quinze","Russie","demain","précédent","vendeur","événements","autrement","experts","fortes","furent","possibles","circonstances","placer","publication","l'écran","réserves","sauce","venu","Charles","collaborateurs","implique","l'assurance","obligataire","établi","CD-Rom","H","forcément","l'essentiel","l'enseignement","remarquable","vol","Claude","tourisme","internationaux","directe","compétences","conseiller","facteur","l'est","plastique","rarement","Royal","affiché","lutte","relative","actuels","envie","l'équipe","ministres","secrétaire","capitalisation","langage","positive","circulation","convaincre","notion","visage","vouloir","ajoutée","caractéristiques","Eric","Union","paix","puisqu'il","courrier","disposent","développe","présentation","barre","comparaison","déterminer","firmes","fournisseur","informatiques","luxembourgeois","achats","solde","Serge","globale","propriété","stratégique","Renault","partage","porté","sources","Kong","cour","destinée","N","absolument","branche","l'objectif","ouvre","plans","productivité","Résultat","améliorer","d'obtenir","joué","Parlement","dépit","fichiers","personnalité","constitué","gestionnaire","né","profession","qualités","conscience","médecin","celles-ci","design","décor","faudrait","participer","appelle","forces","suisse","appareil","conduite","D'une","longueur","tarifs","vérité","lien","locales","francophone","clubs","correspond","coupons","d'émission","estiment","défi","protéger","réalisés","d'emplois","d'éviter","l'ouverture","méthodes","revenir","superbe","volontiers","document","nommé","tente","financer","scientifique","Georges","travaillent","l'investissement","lié","zones","aime","lettres","ouverte","Hong","L'année","murs","philosophie","rappeler","utilisés","suivante","d'année","représentant","traduit","remettre","situé","différente","longs","économie","discours","distributeur","domaines","l'introduction","régional","faites","italien","restera","usine","Group","l'informatique","personnage","portent","attendu","l'option","Jean-Pierre","articles","changements","fallu","léger","mener","propriétaires","spécifique","récupérer","voyages","procéder","locale","médecins","privés","transmission","concurrent","courte","quart","baisser","pieds","publié","Ford","menace","réunion","transfert","composé","dimension","personnages","ralentissement","conclusion","l'usage","agents","parfum","rémunération","difficiles","l'entrée","mettent","pierre","proches","réglementation","salles","grimpé","prochains","prévue","électrique","dynamique","exposition","installé","plancher","distributeurs","déclare","connue","n'avons","préparation","réalisées","beurre","opérateurs","achat","province","spécifiques","Albert","l'usine","l'existence","renforcer","téléphonique","comptable","effectuer","trafic","degré","l'ont","définitivement","humain","optique","remarque","talent","appelé","modifier","définition","peintre","respecter","stade","statistiques","certificats","s'attend","limiter","livraison","placements","raconte","volumes","immobiliers","Fax","anciennes","chevaux","médicaments","Peter","feuilles","football","identique","pouvons","remise","structures","tenter","accords","cotisations","indice","neutre","Mon","constituer","d'accord","montrent","placé","loyer","proximité","voient","épouse","Canada","entrer","postes","précision","cité","concours","patrons","populaire","pétrole","négatif","allemands","d'activité","roman","victime","italienne","ménages","repas","PetroFina","langues","tendances","D'autre","pire","prudence","savent","Néanmoins","conduit","mille","rénovation","égard","Américains","exercice","l'étude","s'impose","avance","effectué","fortune","fournit","lecteurs","Morgan","découvert","l'inverse","différent","emploie","bleu","royal","technologique","télécommunications","Amsterdam","fiscales","indique","information","lourd","signal","Ed","Mieux","aider","ancienne","apporte","nette","prestations","publicitaires","sensibles","communauté","l'émission","lit","volatilité","étape","assurance","jusqu'en","lancée","résoudre","garanti","modification","revue","spéciale","www","chacune","l'analyse","différences","messages","priorité","recommandation","récent","charme","dividendes","Olivier","passent","finale","immeubles","logement","pourcentage","rire","stabilité","difficilement","défense","l'ancienne","magazine","D'un","Y","eaux","jeunesse","l'intention","continuent","révolution","étonnant","organisation","constater","dos","emprunt","oui","éditions","Daniel","sel","utilisée","compartiment","publicitaire","EN","article","bande","capacités","centrales","considérée","milieux","occasion","quasiment","pouvant","Vermeulen-Raemdonck","visiteurs","chambres","considérablement","demi","découvre","essentiel","broker","dettes","mardi","reconnaissance","salariés","formules","grosse","heureux","perd","radio","allait","multimédia","partiellement","seules","Gérard","Oui","Securities","toucher","jugement","l'oeuvre","considérer","remplacer","couvrir","précieux","segment","dessins","espace","indices","refuse","chefs","exemples","rejoint","spécialisé","l'amour","l'exportation","objet","précédente","rose","versions","d'études","destination","Encore","deviennent","ET","l'Italie","personnelle","plats","vingtaine","l'expérience","virus","Faut-il","chasse","longues","Toute","bases","cotée","final","monnaies","travaillé","apporter","aspects","disparu","David","Management","port","racheter","relever","Celui","ING","catalogue","centaine","chaleur","profil","représentants","SA","conclu","réside","scientifiques","Chambre","secondaire","Fin","serveur","XIXe","exige","grimper","immeuble","l'Université","montants","paysage","vendus","ton","assurances","catégories","dure","décote","soutenir","édition","dangereux","agréable","voulait","combien","d'application","disparition","optimiste","plus-values","tomber","erreur","l'augmentation","situations","spécialisés","subi","suivent","Jusqu'au","classement","l'exemple","norme","rentable","sang","socialiste","tombe","Justice","attitude","mines","qu'aux","liée","plantes","vague","General","l'immobilier","légumes","Ceux-ci","conflit","excellent","licence","travailleur","appris","est-elle","gagne","mari","préparer","purement","située","vérifier","Jean-Luc","gain","métal","surfaces","L'objectif","d'épargne","douze","expliquer","lorsqu'on","meubles","yen","chaussures","créée","institution","l'accent","solidarité","Maastricht","basée","journal","soin","sourire","Guerre","bouteilles","flexibilité","maintient","appartient","moments","rouges","L'an","basé","devons","installations","Bacob","association","d'obligations","format","City","Page","disques","modem","mélange","ordinaire","vide","chimique","disent","pharmaceutique","d'assurances","numérique","porteur","répartition","blanche","composants","future","parvient","évoque","Durant","calme","cru","Electrabel","culturel","grosses","baissé","lois","moteurs","principes","trente","éventuelle","Peu","prévoir","tours","Pentium","acheteur","dimensions","fonctionnaires","organisé","rencontré","russe","savoir-faire","établissements","Fédération","Toujours","créativité","top","application","dépasser","importe","jaune","l'application","marqué","mécanique","socialistes","tranche","Quelles","envisage","traiter","Surtout","acheteurs","chinois","claire","l'Institut","vécu","Objectif","bail","demandes","diversification","montré","renseignements","souscription","Tokyo","entendre","tests","Siemens","filles","unité","Bekaert","Dr","UCB","composition","resté","sinon","agence","fini","modifications","Cash","industrielles","obtient","permanence","restaurants","réels","échange","florins","l'accord","terrains","émergents","atouts","offrant","LES","bouche","champ","chaud","l'annonce","monte","preneur","présents","quitte","tarif","facture","fiscaux","modeste","processeur","Fund","avenue","compétition","relevé","tenté","Est-ce","Musée","W","bijoux","différentiel","déclaré","institutionnels","l'employeur","traité","Intel","traditionnels","victoire","connus","correctement","pub","Dominique","Tant","accessible","rencontrer","stocks","Art","espérer","jouent","menée","nécessite","provenant","utilisent","affichent","délais","inférieure","sent","spécial","Amérique","acquérir","album","idéal","l'écart","véritables","associé","candidat","connaissances","l'énergie","signes","cheveux","conserve","stress","d'Anvers","d'action","directeurs","donnée","endroit","l'emprunt","l'impact","der","traditionnelle","Martin","ciel","convention","obligataires","prouver","Espagne","O","Petit","Source","dessin","humaine","l'huile","lait","Seule","Thierry","boursiers","continent","destinées","flamands","néerlandaise","pensions","commencent","considérable","nationales","nul","s'adresse","conjoint","crédits","militaire","morceaux","privatisation","repose","sommeil","traditionnel","PSC","Seul","capables","combat","finances","puissant","s'agissait","Bill","Renseignements","physiques","Richard","allant","créations","toile","évidence","convaincu","excellente","or","retraite","théorie","transformer","Tour","transaction","visant","Deutsche","Mons","attentes","cycle","détails","Votre","héros","l'artiste","l'université","sérieusement","uns","Ceux","considération","impose","propositions","Autrement","cap","forts","l'Afrique","usines","Afin","Quels","aisément","ressemble","risquent","totalité","imaginer","originale","intégré","intéressantes","l'extérieur","loyers","auxquels","circuit","indépendant","intérieure","jus","maintien","cotisation","l'Asie","moyennes","quitter","stable","CVP","Compaq","galerie","liens","souffle","GIB","apprendre","concert","l'exception","l'échelle","liquide","nez","noire","température","transparence","école","champion","diminué","désir","ressort","voulons","équipé","alimentaire","den","organisations","présidence","raisonnable","ratio","recommande","utilisant","accepter","accepté","cache","chocolat","chuté","comparer","courts","figurent","passagers","prison","viande","associés","esprit","froid","jeudi","liées","revu","satisfaction","satisfaire","test","tiennent","vraie","contrairement","dépassé","extérieur","qu'avec","ami","American","Etat","complémentaire","déclarations","réactions","Fonds","artiste","conclure","déduction","remis","L'indice","déterminée","fiscalité","grand-chose","humaines","réponses","équipes","ITL","Michael","Systems","aspect","commercialisation","manger","RTBF","engagé","obligé","proportion","signature","étranger","imposé","s'applique","silence","vote","Afrique","Mobistar","cible","contemporain","fondateur","Jean-Claude","communiquer","d'investir","existent","majeure","ouvrir","électroniques","JPY","TGV","compétitivité","erreurs","notation","rang","Apple","GB","accident","certificat","exceptionnel","http","proprement","riches","Barco","Quoi","violence","adapté","bénéficient","récession","sentir","armes","arrivé","crainte","garanties","l'automne","ménage","officiellement","ouvriers","Autant","discussion","rejoindre","époux","citoyens","concernés","d'inflation","définir","L'idée","Paribas","Telecom","d'aller","fabrique","feront","née","oblige","patients","pensent","responsabilités","SP","doublé","fraude","l'article","organise","Henri","conclut","désire","l'appareil","l'association","l'installation","législateur","écrans","choc","gratuit","mobile","naturelle","dialogue","révision","familial","lourde","poche","décider","négociation","tort","Maison","Trésor","constante","cotation","déterminé","l'instar","managers","opté","transformation","Life","anniversaire","compétence","géographique","I","mandat","réservé","établir","Business","fins","richesse","CAD","commente","intermédiaire","l'univers","retrouvé","sciences","Sun","banquier","former","monté","parfait","veux","René","investit","l'oeil","n'aurait","parvenir","vieille","Di","collections","dirige","fonctionner","mauvaises","tapis","venus","Contrairement","Suez","piste","pistes","tensions","campagnes","investis","proposés","sac","tabac","bataille","britanniques","fine","liégeois","partenariat","privées","remplir","supérieurs","Beaux-Arts","Christie's","laser","restauration","Dutroux","chimie","rendent","textile","Brabant","Colruyt","James","National","Quatre","préalable","souvenir","venue","Communal","avocat","comparable","consolidé","critiques","interdit","l'initiative","mine","quotidienne","rigueur","réduite","tissu","Invest","pain","participants","procédures","profondeur","retrouvent","rues","taxation","Mexique","asiatiques","conducteur","demandent","environs","fermeture","gris","rumeurs","accueille","amoureux","d'augmenter","défendre","l'immeuble","pure","souffre","créneau","d'énergie","journaux","s'explique","seuil","Jeux","Office","auteur","cash-flow","fichier","foi","instruments","quelles","séance","véritablement","Yves","attirer","civil","civile","d'aujourd'hui","eau","l'épargne","station","courbe","hectares","influence","ingénieurs","tables","vivent","Exemple","L'un","blancs","couche","cuir","devenus","extraordinaire","patient","peux","aient","animaux","associations","d'utiliser","foie","initiative","l'Amérique","poursuite","survie","Face","K","apparemment","consultant","expansion","l'exposition","séjour","champagne","commentaires","complexes","cylindres","décennie","rendements","retenu","sais","sujets","cuivre","offert","réagir","sec","varie","Fondation","artistique","communications","monétaires","métaux","permanente","positifs","électriques","Ph","basse","concentration","investisseur","provoqué","doux","stations","coin","modifié","avocats","estimations","original","souplesse","Attention","Frank","Hainaut","Suite","annuels","cellule","clause","exemplaires","malheureusement","minute","normale","Frédéric","NT","Sud-Est","atout","latine","logements","pilotes","susceptibles","Roger","XVIIIe","ordres","remarquer","actuelles","bouteille","constat","opportunités","prépare","vendeurs","accrue","fruit","g","jugé","l'amélioration","loisirs","pur","trentaine","bus","gendarmerie","air","alimentaires","coté","modernes","préciser","réussir","laissent","parfaite","spécialement","évoluer","Dewaay","Désormais","Groupe","maladies","négligeable","tension","Lion","chansons","dite","festival","négative","préféré","restant","Cera","adopté","coopération","distingue","douceur","retirer","technologiques","Editions","Parfois","bruit","comptant","démocratie","exception","mercredi","offres","sucre","vedette","évolue","British","Leurs","compromis","hauts","élevées","émission","Faire","attendue","d'appel","jusqu'ici","lourds","quels","soirée","événement","alternative","chimiques","conférence","quitté","serveurs","Brésil","CD-ROM","correspondant","l'avis","locataire","matériau","périodes","utilisées","ai","d'emblée","l'aspect","morale","équilibre","Sony","fixer","gratuitement","trait","Trop","adultes","consacrer","d'importance","normalement","parole","prochainement","suscite","verra","clé","mesurer","notes","potentiels","relatives","Flamands","Francfort","L'homme","Palais","Plan","République","l'armée","transports","Portugal","couvert","joueurs","Malheureusement","coupe","dispositions","effort","endroits","aides","contribution","insiste","s'inscrit","souhaitent","communal","impact","progresser","Sambre","US","administrateurs","d'ordre","deviendra","dégager","formations","l'ouvrage","souscrire","cellules","facilité","gras","militaires","passés","quinzaine","souvient","Se","automobiles","bref","confortable","essentielle","officiel","vive","vols","Marcel","Top","combinaison","distinction","définitive","japonaise","liaison","tissus","cadeau","canadien","distribué","existants","ordinaires","servi","surveillance","l'architecture","l'aéroport","médecine","n'aura","n'étaient","revoir","récentes","voies","L'obligation","Rappelons","comptabilité","fabriquer","fasse","intéressants","peintures","quartiers","valable","étapes","bénéficié","couvre","diminue","envers","introduire","missions","s'attendre","Petrofina","apparition","coffre","digne","fibres","initiatives","littérature","rembourser","retrait","Bundesbank","D'ailleurs","Ma","Pascal","Pologne","consacre","employeur","favorables","l'approche","manquent","assurée","battre","chantier","conclusions","consulter","craindre","d'utilisation","vivant","Chacun","internes","apprend","liégeoise","observe","provenance","sortes","Marie","cessé","céder","estimée","marchandises","Poste","balance","copie","cuisson","négocier","spéciaux","traite","Bruges","hollandais","peut-on","porteurs","régler","soutenue","suivie","Stanley","accueillir","médical","notoriété","provoquer","sensibilité","su","vocation","L'investisseur","for","impression","l'ampleur","séduit","conflits","imposable","journalistes","manifeste","provoque","wallons","éditeurs","EUR","canal","fondamentale","futurs","graves","mené","mur","pommes","racheté","remonte","solides","suffisante","chargée","chers","discussions","garantit","indicateurs","provient","soutenu","sportif","systématiquement","zéro","comptent","recette","récit","subir","évolué","Johan","accorde","faciliter","hausses","Macintosh","Services","d'imposition","débuts","garantir","portefeuilles","susceptible","universités","Glaverbel","Sotheby's","actes","brasserie","caractéristique","cherchent","cp","favoriser","justement","prudent","stock","échelle","énormément","Standard","compose","couronne","exceptionnelle","flux","j'étais","justifier","réfugiés","t","téléphoniques","Monsieur","Ville","accepte","inspiré","l'ombre","pollution","situent","allemandes","boissons","douce","gouvernements","intervention","motifs","primaire","World","entrepreneurs","l'efficacité","représentation","Thomas","apparaissent","complémentaires","cycliques","franchement","instrument","rayon","Food","Roi","conversion","partager","retenue","simplicité","Comité","confirmé","devaient","expériences","front","jeter","logistique","reconnu","Affaires","Heureusement","comédie","historiques","imposer","l'actionnaire","obligatoire","recourir","références","traces","témoigne","GBL","Java","Vu","acte","appliquer","catastrophe","conduire","contribué","fais","intervenir","mettant","pilote","plafond","remplacement","tire","Berlin","Vincent","portable","profonde","refusé","repos","béton","fermé","juges","parlementaires","prévention","Donc","d'électricité","dispositif","forment","neige","suffisant","Louvain","TV","diffusion","fédération","lentement","prenant","souris","tu","contenter","douleur","intervient","j'avais","look","manoeuvre","parquet","poussé","arguments","billets","consacrée","dirigeant","décoration","holdings","justifie","levier","majeur","midi","recyclage","robe","Entre-temps","appels","directive","initial","intéressés","pousser","pouvaient","secrets","surpris","univers","d'avis","poisson","spécialisées","séduire","verser","d'investissements","générations","nettoyage","ouverts","réductions","vélo","Anne","Compagnie","Souvent","d'Amsterdam","explique-t-il","l'abri","l'intégration","officielle","résolution","Service","courses","l'exploitation","pari","pousse","revendre","trace","abonnés","craint","croissant","juger","régionale","symbole","touristes","Rome","actives","communautaire","contraintes","journaliste","traditionnelles","variable","amour","atelier","budgets","budgétaires","clef","d'ores","détriment","nationaux","paquet","relatif","Francis","Rupo","d'enfants","diesel","gare","l'acquisition","parlent","rapporte","regarder","éventuel","Clabecq","carrés","psychologique","rupture","téléphonie","Air","Danemark","Sauf","citoyen","four","permettrait","puissent","rapides","Marketing","Tendances","dit-il","développements","enregistre","envoyé","intermédiaires","l'issue","liquidité","réagi","Allemands","L'autre","Louise","connues","consolidation","créateur","idéale","l'espoir","profité","prévus","résulte","similaire","Boeing","Didier","Dieu","MB","Willy","agir","coins","constaté","d'eux","danse","occidentale","optimistes","pensée","professionnelles","Computer","San","Tournai","appliquée","chanson","déroule","franchir","liquidation","morts","nouveauté","prestigieux","suppression","Laurent","Mercedes","existantes","pleinement","simultanément","établissement","cercle","corruption","discipline","familiales","l'avant","laboratoire","livrer","montée","participe","Personne","adresse","finance","génie","leasing","versement","bits","concernées","dents","inclus","maximale","précédemment","routes","variations","équipements","Declerck","chemins","constituée","d'effectuer","globalement","libres","proposant","souligner","Bon","ambitions","croissante","décennies","fou","l'influence","littéralement","motivation","rubrique","souvenirs","surprises","vendue","Celles-ci","bébé","plainte","stockage","écrire","énergie","Spector","annonceurs","d'olive","débats","ferait","grain","sont-ils","séparation","tournant","vendues","Compte","Cools","Volvo","accessoires","constitution","consultants","dommages","occupé","s'appelle","échanges","Seconde","adresses","efficacité","fixée","frappe","l'apparition","monopole","panneaux","restée","sentiments","terminé","utiles","Bruno","Seuls","appliqué","donnant","fondamentaux","fréquemment","l'aventure","métiers","planche","royale","suppose","Inc","Moins","fourni","japonaises","mm","payés","profond","programmation","résolument","L'Europe","d'amour","d'ouvrir","golf","poudre","","","proposées","étoiles","PRL","attaché","concevoir","dommage","l'opinion","main-d'oeuvre","récents","stratégiques","vitesses","Peugeot","Philip","apprécié","connexion","hommage","jardins","remonter","supplément","Canal","Tessenderlo","cheval","entretien","inutile","l'Espagne","laissant","mécanisme","nouveautés","placés","repli","régionales","régionaux","souple","symbolique","troubles","évaluer","Aucun","Mac","Régions","cession","confie","moyennant","numéros","portrait","établie","cinquantaine","d'assurer","peuple","promis","retenir","réception","sexe","utilisation","visiblement","X","acteur","créateurs","dites","déposer","expositions","handicap","lourdes","plastiques","procure","proviennent","sous-jacente","Ni","Quick","Virgin","auxquelles","banquiers","baptisé","finit","venait","volant","Fiat","Joseph","Lyonnais","enseignants","geste","l'UCL","sérieuse","Mignon","Royaume-Uni","Vers","classes","doigts","encadré","froide","niche","prévision","servent","Baudouin","Nicolas","Smeets","arrivée","domestique","envisager","espaces","filet","inflation","posé","promouvoir","roues","Assurances","Capital","immense","incontestablement","lot","pharmacie","restructurations","sportive","L'ensemble","ci-dessus","d'activités","engagements","humains","introduction","organisée","Delvaux","assiste","couverts","franchise","L'histoire","annuellement","arrivent","causes","pierres","valent","volet","Hanart","Karel","Lotus","intention","l'acheteur","manifestement","prendra","profondément","relance","suivantes","suspension","commissions","divisions","développée","employé","fourchette","qu'est","s'occupe","vendent","Clinton","Jean-Marie","Maurice","Nationale","compenser","d'octobre","essayer","fondé","formidable","graphiques","professeurs","tester","George","Histoire","boutique","caméra","d'avance","fondée","heureusement","label","montagne","pensons","plate-forme","temporaire","tombé","tribunaux","évite","BMW","Monde","PB","condamné","culturelle","d'air","entre-temps","entrées","installer","perception","sauver","thé","Fermé","Peut-on","Unilever","accompagné","externe","franchi","jadis","manifestation","miracle","moral","refus","réunit","révéler","s'installe","Etienne","Evidemment","bateau","conseillé","d'écart","décrit","fréquence","l'occurrence","s'adresser","taxes","Company","concentrer","consultation","dorénavant","dynamisme","installée","profite","réunions","amateur","avoirs","calculé","d'atteindre","estimation","exerce","bloc","circuits","couper","courante","d'améliorer","d'instruction","effectués","fameuse","intéressé","montage","prévues","subsides","séduction","traités","trouvera","équipés","Aucune","ingénieur","réclame","rémunérations","tentent","tournent","égale","émetteurs","Prenons","agent","attentif","d'aide","d'oeil","existant","fluctuations","gré","l'administrateur","médicament","partiel","permanent","s'installer","situés","sportifs","vertu","Intranet","L'évolution","Quelque","allons","appartements","duquel","kilos","sicav","toit","versées","chaussée","d'huile","futures","individuelle","manifestations","raisonnement","sports","Christophe","DES","absolue","appelée","contente","d'idées","d'investisseurs","intense","money","répondent","tranches","Waterloo","assurent","calculer","choisit","citer","doté","fixes","inférieurs","mensuel","promoteurs","relais","sorti","télé","voisin","Corée","Lynch","dit-on","hiver","l'Association","l'ULB","naturelles","preuves","présentés","souffert","Qu'est-ce","attendent","camions","camp","contenant","curieux","détente","effectue","géants","l'endroit","l'intermédiaire","légale","n'étant","prestation","publiés","rente","réalisent","ski","soigneusement","vif","Cie","conviction","doubler","morceau","racines","tenant","universitaires","visiter","Center","Global","démarrage","entamé","fondamental","l'intervention","magique","procurer","records","universitaire","vrais","L'une","ateliers","avion","confronté","contribuables","doigt","drame","féminin","habitudes","l'immédiat","lutter","pétrolier","supérieures","vois","AEX","Bell","afficher","confirmer","conservé","d'offrir","détour","fusions","l'avons","l'équilibre","lever","malades","ouvrages","paradis","prouve","prévoient","remplacé","spéculation","Rwanda","concernent","départements","dérivés","identiques","marquée","n'avaient","prince","produisent","résidence","voulez","L'opération","Turquie","allocations","démontrer","enregistrée","individuelles","oublié","parking","proposée","Commerce","Guide","Tom","comprenant","débuté","engagement","fit","légal","participé","passées","présentant","présentes","quantités","échapper","Maystadt","Software","acquisitions","affirment","alentours","assureur","autonomie","canaux","inverse","l'adresse","l'automobile","modes","signaler","signée","Goldman","Notons","cancer","carnet","convergence","foule","indispensables","intégrée","nucléaire","opérateur","paiements","palette","pence","priori","promesses","tentative","Belgian","Corporation","Dutch","Tel","aérienne","boutiques","craignent","débiteur","entités","ouverture","procureur","puisqu'elle","sommets","supporter","traitements","voyageurs","Bureau","anglaise","argument","d'établir","imaginé","l'appui","mécanismes","personnelles","privilégié","satisfait","science","terrasse","tiré","trésorerie","télécoms","D'ici","chaude","coupé","esthétique","inscrit","poissons","refuser","s'effectue","tennis","Moi","Unix","appartement","clavier","démontre","organismes","pressions","regroupe","secours","sous-traitance","théorique","accessibles","courants","d'été","judiciaires","l'innovation","l'opérateur","précédentes","réaliste","aventure","d'Internet","effectifs","gains","l'opposition","l'unité","musées","rock","Coupe","Netscape","bain","déposé","espoirs","majoritaire","semblait","Digital","accorder","attire","d'échange","feuille","initiale","installation","krach","malade","opérationnel","pauvres","pont","préserver","publier","rechercher","recrutement","représenter","révélé","sanctions","traditionnellement","vapeur","Cobepa","Salon","confier","considérés","cultures","hypothécaire","illustre","introduite","l'échec","menus","multinationales","paient","pareil","problématique","quarantaine","rentrée","soutient","terminée","voudrait","carré","exemplaire","lorsqu'ils","nulle","posent","pratiquer","sida","versements","visites","étions","étrange","CBR","berline","cash","distinguer","durs","défend","efficaces","essence","exclu","jolie","photographe","propriétés","veau","DU","Journal","Nobel","Vieux","atteinte","chapitre","concertation","dégage","extérieurs","médicale","pareille","patience","recueillis","substance","transforme","voile","échec","Léopold","enthousiasme","fédérale","gloire","préparations","transmettre","visiteur","éd","Ajouter","Brederode","Européens","Jean-Louis","Tony","apporté","d'importantes","l'acier","libéralisation","observateurs","panique","présentée","réserver","signer","tendre","to","touristique","Récemment","brillant","conventions","décret","généreux","industries","joie","stars","égal","Sachs","continué","dessert","espagnol","est-ce","légende","passera","rapprochement","salariale","scolaire","Monétaire","assurément","contraint","coton","curiosité","entité","entré","l'architecte","libéraux","logo","parlementaire","parviennent","portables","provisoirement","routier","réservée","tourné","veiller","FN","Hoogovens","XVIIe","arbres","communs","employeurs","exercices","faisons","l'alimentation","magazines","maintenu","roses","répondu","spécialité","Citibank","Moscou","Times","accidents","adapter","amené","avoue","collectif","d'évaluation","dessus","indépendante","l'institution","l'établissement","peintres","rappel","réalisations","s'avérer","architectes","comprise","essentielles","examen","fidélité","héritiers","l'actualité","préférable","relancer","s'adapter","s'engage","sable","semestriels","significative","suisses","Grande","Nouveau","cadeaux","comportements","constamment","contribuer","d'images","offerts","périphérie","varient","Michelin","caisses","conscient","cédé","effectuées","faisaient","personnalités","s'engager","syndicat","Arbed","OPA","abandonné","cents","destin","drogue","fines","identité","invités","l'événement","modalités","négatifs","paru","répertoire","s'intéresse","Disney","Isabelle","Japonais","Roland","William","annoncée","champignons","défis","générer","russes","situer","supprimer","élu","Jean-Paul","Spa","accordé","acquise","courtier","d'attente","foulée","noirs","résister","section","signaux","sombre","susciter","compartiments","correspondance","créances","discret","dépassent","florin","formé","frappé","papiers","représentait","saurait","versé","absence","d'Or","d'acquérir","d'avenir","degrés","envoyer","joli","occupent","on-line","percée","priorités","processeurs","restés","résume","soie","travaillant","économistes","Etant","affirmer","ambitieux","cerveau","consensus","coordination","d'options","l'appel","magistrats","qualifié","rangs","tournée","Alcatel","Toyota","anonyme","c","cassation","cf (usually cf.)","confusion","discrétion","fondamentalement","initialement","installés","l'assemblée","l'entretien","l'émetteur","maman","nuances","paraissent","parfums","saine","vedettes","DM","Nikkei","dirigée","duo","enseigne","indiqué","kg","lourdement","module","prononcer","réalisateur","réformes","star","équivalent","Danone","Site","adopter","commis","couches","explication","joint-venture","malaise","pantalon","pomme","reine","sacs","saumon","soeur","toiles","échéant","Agusta","bond","courir","expert","glace","l'enseigne","multiplier","pluie","salons","teint","European","Finalement","Maintenant","adaptée","diriger","gérant","répartis","saveurs","souscrit","substances","vieilles","vraisemblablement","élaboré","émettre","certitude","champions","cotés","cyclique","détenteurs","explications","fonctionnent","générales","invite","l'expression","pauvre","successeur","zinc","Big","Claes","Six","brochure","cave","codes","configuration","d'enregistrement","fragile","féminine","issus","magnifique","maintenance","manuel","qu'a","recommandé","spectaculaires","subit","traduction","évidente","Conséquence","Fabrimétal","KBC","adaptés","chronique","d'IBM","enregistrés","fibre","jazz","jusque","louer","médiatique","peser","rentables","réussit","s'élevait","saisir","semble-t-il","visible","Financial","Singapour","absolu","blanches","boulevard","commissaire","comprennent","créent","faculté","histoires","individus","issue","multiplient","prétexte","quotidiens","réfléchir","satellites","souffrent","standards","Washington","commercialise","directs","diversité","gratuite","l'Office","logiquement","ouvertes","renoncer","calculs","compléter","couples","d'entrer","d'esprit","d'importants","l'acte","organiser","payant","paysages","récupération","slogan","Electric","PVC","administratives","arts","avancé","carrément","changes","crédibilité","déplacement","l'avance","parvenu","relatifs","revues","veste","Celle","FGTB","Moody's","assurés","créés","d'éléments","immédiat","jambes","litre","mousse","prestige","sentent","souhait","touché","élus","Belle","Telinfo","abrite","considérables","d'urgence","disait","faillites","oeil","religieux","rédaction","séries","terres","vice-président","MHz","System","XXe","cure","dirigé","don","enregistrer","juridiques","pouce","précises","prétend","réunis","salade","trouvait","évaluation","Cinq","Fort","confié","cuire","indicateur","l'avait","origines","parlé","remet","spéciales","terrible","témoignent","étonnante","Buffett","Catherine","Research","SAP","Véronique","achetée","généraux","imposée","l'organisme","l'édition","mention","merveille","opposition","réorganisation","satellite","scanner","Milan","Notamment","a-t-elle","acier","ch","conteste","créanciers","d'acier","intégrés","l'habitude","multiplication","panier","pharmaceutiques","quelconque","rayons","spectateurs","transformé","troupes","Madame","Tandis","effectuée","fromage","géré","interlocuteur","législatives","motif","métalliques","placée","réclamation","schéma","surplus","transition","trio","Coca-Cola","Motors","Proximus","Wallons","atteignent","bleus","chair","conforme","costume","d'accueil","intentions","l'horizon","l'électricité","manqué","sortent","subsiste","supermarchés","D'Ieteren","Européenne","Lorsqu'on","amélioré","avantageux","d'applications","engagée","espoir","exceptions","fausse","l'expansion","l'équivalent","plage","plaide","poivre","CHF","Livres","cadastral","chips","comptait","craintes","d'ordinateurs","durable","démocratique","exceptionnels","factures","fonctionnaire","fondation","indépendance","inventé","issu","maturité","mobilité","musiciens","organisme","recommandations","spéculatif","suscité","titulaire","traverse","évolutions","BD","Fed","calendrier","collective","disposant","dévaluation","l'honneur","pauvreté","poursuivi","qualifier","savait","suédois","termine","traduire","valait","CSC","Forges","Hugo","Max","VVPR","appartiennent","confrontés","demeurent","divorce","dramatique","déductibles","efficacement","existence","fermeté","imagine","intégrer","larges","locataires","orienté","pensé","variété","administrations","aériennes","complexité","entrent","exercer","photographie","sauvage","terminer","venant","Corp","amortissements","champs","déplacer","désigné","déterminant","opportunité","piano","remontée","s'agisse","étroite","AT","Difficile","Dix","Recticel","bar","concerné","constructions","l'identité","merveilleux","min","moindres","réunir","survivre","ultime","étudié","Lambert","RC","caractérise","choisie","distribuer","décidément","limités","livré","luxembourgeoise","modules","progresse","promet","redresser","tombée","bains","d'hommes","dessine","enfance","finition","jury","mythe","optimale","pair","plateau","poussée","resteront","Zaventem","assurance-vie","composée","d'entretien","décident","hélas","instant","jet","laine","mobiles","parcs","préoccupations","ramener","représenté","soudain","éditeur","José","L'auteur","Morris","Nasdaq","administrative","autorise","banking","humour","jouit","l'actuel","market","n'ait","organisateurs","peint","s'annonce","s'assurer","sculptures","superbes","équipée","ASBL","CMB","Gates","bronze","catholique","citron","contributions","couture","disquette","démarrer","excellence","fatigue","imprimantes","industrie","l'aménagement","l'effort","l'encontre","laboratoires","menées","meuble","mondiaux","réduits","sont-elles","sous-traitants","talents","Christine","Henry","administratif","administration","ailes","aérien","carrosserie","d'économie","découvertes","exclure","hautes","hiérarchie","impressionnant","massivement","métro","possession","remporté","strictement","suédoise","utilisateur","vais","émises","étage","d'arbitrage","devez","expliquent","file","hebdomadaire","intéresse","l'hiver","l'élaboration","marbre","performant","personnels","prévenir","suivants","verte","viendra","Angleterre","Association","Hongrie","L'affaire","Louvain-la-Neuve","OS","apportent","automne","bourgmestre","branches","carton","contraste","courage","d'analyse","datant","dépendra","feux","importations","plantations","sidérurgie","signale","FMI","Jean-Michel","Léon","Super","UN","Venise","adaptation","allure","attachés","exploite","folie","instance","naturels","olympique","populaires","reprenant","valorisation","villa","villages","Est-il","Renaissance","Shell","Vienne","architecture","authentique","autonome","complicité","d'au","d'ouverture","dépendance","dépense","fiable","invention","lancés","partagent","rencontres","renouvellement","évoluent","Akzo","Combien","Marché","Xavier","ampleur","analyses","bandes","canard","collectionneurs","compliqué","culturelles","d'avril","donnera","déplacements","fermer","jugée","l'aise","médaille","notaire","peut-il","privilégier","prototype","regain","regarde","wallonnes","Emile","Volkswagen","accru","caoutchouc","cinquante","communautaires","conjoncturel","créant","durer","délicat","exigent","précédents","renforce","s'ouvre","évalué","Lille","débute","définitif","engagés","exploiter","fur","positives","réparation","soupe","transferts","Ostende","Propos","Victor","limitées","nourriture","offertes","ramené","reculé","remédier","similaires","triste","écarts","Data","Industries","abaissé","boire","break","chien","consacrés","cours-bénéfice","fuite","gigantesque","imprimante","l'Ouest","l'emballage","l'église","remplace","salariaux","spectacles","vache","velours","étudie","ABN","Auparavant","Cité","Continent","Guido","Meuse","Mo","Question","d'exemple","dotée","défini","définit","délicate","démission","extérieure","interventions","jouant","l'engagement","n'ayant","noires","obligés","Bruxellois","Mark","Motorola","accéder","affichait","chemise","espagnole","fleur","gardé","habitation","huile","l'accueil","légales","multiplié","revers","architecte","assister","axes","concerts","contemporains","discuter","dose","détiennent","folle","l'éditeur","magie","pompe","provisions","rapidité","témoignages","Cap","Festival","Finlande","NDLR","contribue","demandeurs","démonstration","exact","numériques","participent","poignée","puissants","spécialités","G-Banque","III","Livre","Peeters","SICAFI","Technology","applique","copies","flacon","lunettes","mixte","nullement","plante","provisoire","publie","puissante","regrette","s'ajoute","stratégies","typique","vocale","Anhyp","Brothers","brokers","concentre","diagnostic","faciles","gestes","guise","hardware","opérer","orientée","passionné","refusent","scénarios","suffisent","vagues","écart","Chrysler","Sénat","Via","ambiance","appartenant","assisté","attrayant","bagages","blocs","d'essai","d'histoire","d'étude","déduire","forfait","manquer","restait","surprenant","sérénité","vertus","écouter","DKK","Dirk","Gevaert","HP","Santé","Wim","accueilli","affichés","affronter","appeler","coloris","composent","contiennent","contrepartie","fondamentales","impressionnante","largeur","peaux","proportions","reconversion","revente","significatif","écrite","énormes","J'aime","Network","aiment","cherché","chinoise","décharge","député","essais","indiquent","infrastructures","jouets","musicale","mutation","obstacle","partant","perdent","étudiant","J'avais","Sinon","accordée","adjoint","débarrasser","débit","dégustation","déjeuner","glisse","individu","l'éducation","l'électronique","organisées","produite","prétendre","quotidiennement","s'étend","secondaires","soucieux","sous-évaluation","verts","écologique","émet","Hollywood","Legrand","Lorsqu'il","Pro","améliorée","bat","e-mail","excessive","favorise","joueur","l'OCDE","marks","office","phrase","promenade","prometteur","stimuler","séances","tiendra","valoir","Martine","Québec","acquisition","augmentent","baisses","distribue","dus","massif","médiocre","obtenus","rentrer","sales","semblable","transmis","Julie","Place","ZAR","bouquet","ceinture","coalition","comptables","corporate","d'actifs","d'attendre","différemment","dits","italiens","journées","l'assurance-vie","linguistique","marchands","n'avoir","opinion","originales","registre","requis","synergies","tunnel","vogue","Malaisie","charbon","emballages","esprits","examiner","fléchi","l'outil","librement","mentalité","miroir","occidentaux","parité","progressive","sensation","sonore","supports","synonyme","vinaigre","Début","Euro","Hollandais","alliance","barres","chargés","d'habitants","dois","fier","gouverneur","l'atelier","l'humour","n'avez","origine","payée","pétroliers","signalé","variation","Né","Point","XVIe","aliments","caméras","comportant","consultance","contemporaine","déclin","effectif","invité","j'en","l'actif","licenciement","match","millénaire","salarié","studio","tenus","triple","équipement","étoile","Bob","Californie","Devant","Smet","abonnement","baptisée","commerces","creux","facilite","flamandes","jurisprudence","l'ai","l'attitude","noyau","portraits","prononcé","publications","puce","qu'aujourd'hui","sinistre","terminal","Dexia","Mes","augmentations","batterie","cinéaste","compare","guides","inconvénients","instances","l'avion","retourner","sympathique","évaluée","L'Etat","achetant","bailleur","bonus","colonne","compensation","conseillers","continu","courbes","déclarer","enregistrées","généré","innovations","ira","jusqu'aux","lente","occuper","pesé","pot","quarts","épreuve","Bois","Congo","Courtrai","Powerfin","admet","attribuer","championnat","cités","comble","conquérir","d'encre","d'oeuvres","d'office","devenues","excessif","incertitudes","intitulé","l'évaluation","périphériques","réclamer","réelles","s'étaient","Ecolo","Nivelles","Qu'il","Travail","allures","camps","dues","exclus","grandeur","homard","illustré","inévitable","inévitablement","l'équipement","mariés","modération","ont-ils","positivement","profits","quarante","sculpture","spots","stage","universelle","vainqueur","édité","étendue","Arts","Communications","Media","Novell","Poor's","Stéphane","Word","changent","communiqué","conversation","d'artistes","effective","interlocuteurs","l'Administration","l'ambiance","n'aime","patronales","permettront","pneus","qualifiés","religion","souffrir","évoqué","Chirac","Chris","Forest","Herman","Hubert","Opel","Parti","SEK","Terre","Vie","alternatives","anversoise","bateaux","battu","brillante","d'introduire","désert","entrepreneur","essayé","interface","intégralement","j'aime","lu","modifie","personnellement","systématique","Arthur","Park","admis","blocage","calls","développent","individuel","l'ONU","l'appréciation","modestes","multinationale","out","parlant","porcelaine","pénétrer","respecte","soupapes","spéculateurs","étudier","Nestlé","abus","combler","conservation","donation","fiabilité","l'exclusion","m'ont","parcourir","parisien","remarquables","retournement","returns","EASDAQ","Kodak","PDG","collecte","d'alcool","déception","détérioration","l'avoir","l'échange","lorsqu'elle","palme","phases","privatisations","répéter","s'imposer","valu","","","","","voulais","Almanij","Infos","Procter","Smith","Tubize","actuariel","australien","croient","d'intervention","d'objets","encourager","fiscalement","hautement","l'assiette","marchand","néerlandaises","plaintes","reproche","retient","sillage","soldats","témoins","urbain","FEB","L'économie","adopte","boutons","chuter","conjoints","convaincus","coopérative","correspondent","director","n'hésite","niches","savez","stables","tend","vain","CV","Gamble","L'art","Quinze","Servais","Seules","apport","chauffage","commercialiser","d'attirer","d'existence","d'organisation","dangers","foyer","ingrédients","négocie","révolutionnaire","score","sidérurgique","techniciens","voyageur","Brown","Corluy","Herstal","Horta","L'avenir","attiré","com","conférences","constatation","d'Amérique","douzaine","duration","détenir","indemnités","lion","nuits","plomb","soumise","sportives","verres","attribué","corriger","d'hiver","domestiques","faille","foot","home","indemnité","romantique","simulation","Brussels","L'avantage","Swissair","autrefois","choisis","communales","d'Angleterre","dessinée","disponibilité","détenu","engager","exceptionnelles","figurer","habitant","hollandaise","immédiate","intégration","média","électeurs","Amro","DOS","Moniteur","Parc","acceptable","apprécier","centre-ville","d'elle","envisagé","fantaisie","habituellement","posséder","pourrez","tentatives","touches","visibilité","Creyf's","Heineken","Régie","Sterk","Tchéquie","analyser","autorisé","complets","contrainte","costumes","d'agir","doucement","démarré","eut","posée","raffinement","rond","sidérurgiste","ABB","Ensemble","L'offre","Me","accroissement","ajouté","assiette","autoroutes","batteries","d'Asie","dame","disciplines","décrocher","essai","essaie","fréquent","génétique","inconnu","l'avocat","majeurs","multimédias","plume","probabilité","préavis","publiée","scandale","spot","sérieuses","tomates","égales","Coup","Die","L'investissement","animé","bleue","d'utilisateurs","danoise","essentiels","fondateurs","fonde","l'Atlantique","l'épreuve","maquillage","mexicaine","oeufs","opérationnelle","prestigieuse","renforcé","rumeur","soigner","témoin","Blok","Golf","Nouvelle","Prudential","Tonneau","Wavre","affichée","attendus","ballon","bouton","chanteur","chiens","d'écrire","entrepris","exprimé","nomination","perfection","photographies","renommée","sous-évaluée","universel","vives","BT","Eaux","Jacobs","Raymond","axée","cacher","défauts","l'aube","l'octroi","méritent","occidentales","planning","rage","testé","Barbara","Britanniques","Interbrew","Technologies","Visa","acquiert","adulte","affichant","agricole","annonces","anversois","atteignait","cabinets","centenaire","confection","culturels","d'aucuns","destinations","doutes","développant","ha","l'ASBL","l'autorisation","l'émotion","masque","méfiance","officiels","outre-Atlantique","panne","perdue","pouces","protégé","rires","sacré","silhouette","soeurs","virtuelle","vues","écrits","épreuves","Impossible","Madrid","appelés","candidature","chargement","documentation","dominante","députés","indications","l'indépendance","leaders","listes","mince","opte","énergétique","étendu","Ci-dessus","L'exercice","University","aisé","concepts","d'achats","d'agences","d'alarme","disquettes","domine","développés","envoie","exercé","existante","fauteuil","habitations","italiennes","modifiée","nets","puces","réclament","tomate","tons","CERA","Campo","Val","aluminium","assumer","confortables","d'ajouter","dates","démarre","exotiques","expose","hall","l'aluminium","l'enregistrement","licences","navigation","opter","rapprocher","émotions","Bertrand","CPAS","CompuServe","Jamais","Jo","Klein","Swiss","acquéreur","courtiers","doublement","défaire","l'Ecole","libération","lin","percevoir","perdus","plonger","poésie","process","s'accompagne","saisi","signification","songe","séparément","tentation","trou","variables","Collignon","Los","accusé","affecté","apparu","complément","créatif","exposé","financé","incite","investissent","limitation","montagnes","onze","originaux","ouvrier","partagé","professions","préalablement","tonne","trajet","visent","L'industrie","Magritte","Power","St","balle","chercheur","communale","compression","crises","d'articles","démontré","détention","détermination","endettement","gel","inchangé","incontournable","l'enfance","l'once","l'écriture","lent","modernisation","organes","promotions","présentées","relief","remboursé","rencontrent","sage","Monnaie","accuse","axe","distances","dépréciation","détenteur","fournissent","gendarmes","horaires","imposables","intercommunales","lancent","multitude","particularité","partisans","provinces","quelques-uns","reviennent","s'améliorer","vernis","volontaire","ambition","baux","d'apprendre","directives","dis","délégation","détecter","détermine","exprimer","individuels","l'unanimité","localisation","miel","optiques","passif","performants","piles","politiciens","poussent","privilégie","restreint","souligné","supporte","vallée","ventre","éthique","Anglais","Assubel","Frans","L'utilisateur","Saint","Supposons","VLD","activement","analogue","bassin","boulot","chapeau","claires","connaissait","consortium","culte","d'administrateur","dégradation","hypothécaires","l'exécution","l'incertitude","lumineux","maux","perles","porte-parole","privilégiée","privilégiés","qualifiée","réagit","résumé","Australie","Axa","Etre","Fernand","Jules","L'activité","Lui","apparence","ci-contre","comédiens","connecter","continuera","convertibles","correcte","dessiné","durées","enjeux","incapable","libellées","millier","populations","épargne","évoquent","CLT","Mobile","capot","charger","communiste","comparables","congé","correct","d'inventaire","gagnant","intérimaire","l'UEM","l'autorité","l'envie","libéral","liquides","orientale","passait","policiers","redoutable","solidité","traitées","Bond","Mme","SME","affiches","attente","basés","comparé","consommer","d'armes","inconvénient","jette","maigre","masculin","négocié","profitent","vaches","vitrine","Avis","Finance","Hotel","Index","administratifs","allaient","avancée","compétitions","confiée","contenir","d'Art","d'opérations","description","dormir","exclusif","gouvernementale","joliment","l'Intérieur","mailing","modérée","pénal","raisins","rempli","royaume","sanction","spéculative","terminaux","Chanel","Grand-Duché","Leo","accélération","analyste","bourse","coupable","d'expérience","d'honneur","fabriqués","mettra","morte","paye","prudents","récolte","réduites","s'intéresser","saisons","sexuelle","sondage","strict","tenues","tranquille","agit","briques","concernée","d'envoyer","d'occupation","débiteurs","illustrations","paroles","passager","payées","piscine","plages","rapporter","Gillette","S'ils","banlieue","commander","commentaire","composer","d'appareils","distribués","détenus","fabuleux","génocide","hésité","indication","indiquer","industrialisés","l'imagination","l'individu","l'évidence","minimale","musical","nerveux","plaisirs","pop","positionner","rassurer","réalités","réservés","sons","séminaires","trésors","uniforme","vis","Blue","Boston","Ch","Gold","Lisbonne","Nul","SNCI","VW","affiliés","appréciation","avancées","cafés","casser","chat","compatible","d'Afrique","d'actualité","franchisés","l'apport","lots","moules","mécaniques","papa","préparé","qu'auparavant","souhaité","traits","éventuels","Cannes","Chicago","Chinois","Lee","cou","d'espace","d'expansion","d'offres","d'évaluer","discrimination","dépassant","expliqué","externes","fédérations","metteur","mobiliers","paire","peseta","polices","productions","préoccupation","rappellent","rentrées","réparties","spécialisation","statuts","traditions","truffe","éliminer","étroit","Hélas","Napoléon","Onkelinx","audio","av","baroque","brique","carburant","conducteurs","docteur","délocalisation","désirent","e","estimons","flotte","harmonie","l'écrivain","livrent","marquer","obstacles","rapporté","s'ajoutent","sobre","tandem","timing","travaillons","électorale","établis","Avermaete","Baudoux","Caisse","Elisabeth","Picasso","Proton","abandonner","assiettes","axé","civilisation","compréhension","confirmation","crime","d'énormes","diversifier","dresse","extension","fantastique","ignore","incendie","levé","minoritaires","négliger","pacte","panneau","pratiquent","raisonnables","retenus","retombées","revenue","sponsoring","étages","Bayer","Contre","Inutile","McDonald's","Nike","Pr","aborde","adoptée","bouger","cassettes","certification","exigeant","frein","fréquente","imposées","l'infrastructure","manipulation","optimisme","pourvu","profondes","rassemble","retiré","shopping","stabilisation","vertes","volontairement","établit","Dior","accompagnée","admettre","aurez","automatiques","concret","constant","d'organiser","drogues","fourneaux","influencer","interprétation","intime","magistrat","occupée","prouvé","recommander","sélectionner","séparer","tube","voyager","écrivain","équivaut","étroitement","évoquer","AUD","Age","Design","Oracle","Petite","accueil","approuvé","boom","construite","continuité","cotait","dresser","décors","gravité","l'Eglise","légers","menaces","mondialisation","passionnés","s'exprimer","stricte","styles","superficie","tas","terroir","versée","Dernier","Total","applicable","avancer","boisson","camion","commercialisé","composantes","concrétiser","conservateur","dames","diable","diffuser","fixés","formulaire","freiner","l'enthousiasme","l'élément","mourir","oublie","placées","péril","raffinage","rapproche","remarqué","rendue","résiste","réunies","sponsors","transférer","verse","Budget","Denis","Hoechst","Hotels","Pfizer","RNIS","Walter","averti","conseillons","disposé","défunt","failli","grammes","libérer","nickel","popularité","pratiqués","rassembler","regards","requiert","spécifiquement","successives","théoriquement","timide","volontaires","Barcelone","Dell","Ligue","Mettre","Simon","TEXTE","Zurich","associée","ci-dessous","connaissons","d'apporter","douter","fabriqué","figures","finesse","innovation","jeté","justesse","l'endettement","mémoires","neuve","pile","plaque","promesse","pénétration","rouler","répondant","s'agira","sachant","situait","Chili","Florence","Information","Qu'en","acceptent","accélérer","adaptées","adeptes","adolescents","attendait","d'émettre","foire","habitués","incontestable","interview","l'attente","l'indique","ndlr","noix","oiseaux","permettait","qu'aucun","qualification","rachats","rendant","réputé","syndicale","tombent","touristiques","valoriser","voler","écu","Alexandre","Dupont","Environ","atteints","clarté","compact","concurrentiel","décroché","enseignement","herbes","intelligent","licenciements","négatives","rédigé","répercussions","salariales","tempérament","tutelle","varier","verdure","Cologne","PNB","SOMMAIRE","aisée","bijou","bénéficiant","combattre","d'humour","donnait","exacte","exposés","expression","fonctionnant","gérés","impérativement","indépendantes","l'opportunité","levée","lorsqu'un","non-ferreux","nostalgie","nourrir","pratiqué","richesses","robot","saisie","Andersen","King","aborder","assortie","brutalement","brute","disparaissent","engendre","heureuse","injection","jaunes","l'intelligence","montent","nuance","officielles","physiquement","prudente","refaire","segments","supposer","synthétique","vieillissement","échéances","Autres","Bonne","Dupuis","Elio","J'étais","TENDANCES","cassette","colonnes","d'impression","dépression","fouet","judicieux","l'actuelle","l'entrepreneur","lac","portait","riz","sauvages","secrétariat","situées","solaire","soucis","souscripteur","séparés","transparent","truc","typiquement","Blanc","Café","Généralement","KLM","United","améliore","annoncer","assemblée","cahier","chanter","compétitif","concession","connais","crédible","d'accéder","d'équipement","dangereuse","destruction","envisagée","glisser","grimpe","infrastructure","insuffisant","isolé","minorité","passionnant","possédait","recommandée","régimes","s'interroger","s'offrir","syndical","trouble","Angeles","Barings","Défense","Equity","L'agence","Merrill","Mouscron","Spitaels","Xerox","abouti","adéquate","archives","attribue","boeuf","directes","directions","filets","fleuve","indéniable","interrogées","l'alcool","observer","prescription","revendications","rude","successifs","tri","trimestriels","télécommunication","Communication","Eddy","Hasselt","L'expérience","aboutir","anticipé","arrivés","cohérence","collaborateur","compositeur","cravate","d'excellents","d'outils","dons","indirectement","interviennent","l'Histoire","l'estimation","multiplie","qualifie","retenues","réalisme","suffisait","variétés","échappe","Antoine","Communautés","Hauspie","Larry","Petercam","Seulement","Sofina","accessoire","aimé","bébés","canadienne","cuisinier","d'imposer","détenue","existait","explosion","flexible","licencié","livraisons","malheur","militants","minime","notions","opposé","organisés","particules","ratios","reprennent","semblables","tournage","trous","Holding","IP","L'accord","Las","Pékin","artistiques","avancés","cosmétiques","fournis","héritage","implantation","l'adoption","originaire","partielle","passions","proposera","recherché","renforcement","sexualité","suites","téléphones","témoignage","vignes","vitamines","Code","Général","Inde","Johnson","Mobutu","Multimédia","Méditerranée","Notes","Vendredi","amoureuse","brevet","consomme","cristal","créées","d'image","descendre","décline","entame","faim","freins","inspire","l'explosion","maritime","menacé","pervers","poursuivent","savons","sols","sorties","soumettre","strictes","venues","Chantal","Exchange","Galerie","Hans","Maroc","Nathalie","Nombre","PJ","arme","bombe","bouge","chantiers","chic","extraits","gants","informer","insuffisante","l'unique","liaisons","limitent","nourrit","précautions","rencontrés","renforcée","résolu","s'ajouter","s'occuper","surveiller","trimestres","échappé","éclairage","élargir","Bosnie","Lyon","Nicole","Primo","Tintin","accompli","comportent","considérées","croyait","di","définie","enseignes","estimer","exiger","fiches","forcé","forfaitaire","gourmand","identifier","joint","l'extension","massive","millésime","minoritaire","plaques","restants","s'imposent","stabiliser","virage","vraies","éventail","Belcofi","Vlaams","audacieux","aventures","banal","communautés","douche","détection","exprime","honoraires","jugés","l'avenue","littéraire","marginal","montres","peloton","procédés","protocole","rendus","renoncé","subissent","suggestions","sépare","turbo","voulaient","Faute","Stock","achetées","agricoles","circulent","confirment","coucher","d'aluminium","détenues","extérieures","finement","fondre","fous","horaire","imposés","inciter","l'adaptation","l'employé","mondiales","médicaux","occidental","occupait","offerte","orientés","prévaut","pureté","reposer","tendresse","élégance","ISO","NC","Sport","XEU","alliances","amont","annoncent","appliquées","appréciable","appréciée","artisans","assis","brasseur","clairs","cubes","d'afficher","d'auteur","d'avion","divisé","débourser","décevants","emprunte","fermement","générosité","horizon","l'Emploi","l'accroissement","l'envoi","l'examen","originalité","parent","plongée","scission","sondages","soumises","surprenante","triomphe","vides","virtuel","émise","Botanique","Busquin","Consulting","Jean-Marc","L'exemple","RAM","Vietnam","Young","achetés","africains","apprécie","attaque","bruits","cabine","clichés","criminalité","densité","exclusive","extrait","facilités","fixation","gastronomie","inconnue","investie","l'agent","l'humanité","maintenue","mythique","piliers","psychologie","raconter","récompense","résidentiel","saint","signés","situant","songer","thérapie","touchent","tromper","échappent","équivalente","America","Avenue","Dont","Explorer","Jeune","Lux","Malines","Vos","artificielle","assistée","branché","brutale","clos","complice","compétent","emprunté","enthousiaste","entourage","fierté","formats","genres","loue","marié","mentalités","ministre-président","peines","poupe","prolonger","pénale","queue","ressemblent","rotation","savoureux","sensations","tuer","Faites","Federal","Hewlett-Packard","Investment","Jack","Johnny","Lernout","Retour","Réserve","boule","chaise","disposons","délit","démarches","entouré","informé","l'élégance","loué","majoré","n'hésitent","pessimisme","planification","pompes","puts","syndicales","triangle","vitres","épargnants","First","Mozart","Real","Rotterdam","albums","amener","appellent","baron","brevets","carbone","carnets","combine","consolider","cycles","d'accepter","d'épuration","diamant","douloureux","dépendent","développées","frigo","l'Hexagone","masculine","modernité","nucléaires","ouvrant","pavillon","recevra","restrictions","revirement","rétrospective","solitaire","spontanément","stages","tubes","Ackermans","Ben","Entreprises","Institute","L'argent","Warner","calculée","chasseurs","circonstance","cite","commandé","concurrencer","conditionnement","d'escompte","d'ordinateur","disposait","exceptionnellement","favorablement","fiables","frapper","fédéraux","grossesse","généralisée","inquiétant","l'UE","l'anglais","m'en","n'avais","précieuse","précieuses","prévoyons","rejet","résiduelle","réuni","seconds","solitude","trésor","épais","BASF","Européen","Roumanie","Sept","Telenet","ad","approfondie","catalogues","center","circulaire","colle","composés","concentré","concepteurs","contribuent","d'architecture","décidée","délicieux","excellentes","inspirée","intervenants","joindre","médicales","plaindre","plongé","prévisible","qu'aucune","romans","répétition","stagnation","stand","suivies","ticket","vanille","économiste","élégant","Airlines","Culture","Exposition","Indonésie","L'occasion","Lunch","Net","Néerlandais","South","Sécurité","Trends-Tendances","accumuler","ajoutant","armée","assorti","bénéfique","cigarettes","conte","d'économies","désireux","fiction","finir","fixées","handicapés","investies","l'écoute","manoeuvres","nationalité","onéreux","paquets","ponts","prenne","rattraper","recouvre","reflet","reporter","rwandais","serait-il","texture","traverser","visibles","élargi","établies","Front","Irlande","Moyen","Style","Verviers","bords","composant","conjoncturelle","couteau","credo","d'installer","d'édition","descente","désirs","gagnent","galeries","imprimés","intellectuel","job","l'appellation","l'intéressé","ludique","parisienne","prédilection","publiées","rebond","reconstruction","éventuelles","Bonn","Cofinimmo","Force","Line","Midi","améliorations","angle","brochures","chaleureux","conviennent","d'André","détruire","examine","exonération","familiaux","l'Américain","laver","linge","légendaire","matériels","mensuelle","n'est-il","noblesse","prévenu","refroidissement","retrouvera","réguliers","saut","saveur","surprendre","tir","versés","DSM","Erik","L'administration","Loin","Lyonnaise","Pire","Vlaamse","chante","chemises","confirmée","connexions","d'identité","déroulera","fausses","grille","habite","implantée","imposant","influencé","intéresser","l'autonomie","mondes","moniteur","métallique","n'arrive","neufs","pondération","prédécesseur","repreneur","s'efforce","sera-t-il","sous-évalué","trompe","va-t-il","vendant","vidéos","voudrais","étiquettes","évalue","Franki","Geert","Liégeois","Mitterrand","PLC","adéquat","autorité","concessions","convivialité","cordes","courtes","d'avantages","d'étudiants","désigner","essor","exigence","exploitation","exportateurs","habituel","lancées","livrés","mets","mineurs","parlait","parlement","pause","primordial","publicités","recherchent","émotion","Casterman","Deceuninck","Découvertes","ESP","GM","School","Shanghai","West","accompagner","assemblées","championnats","classé","col","couvrent","d'antan","d'envergure","dictionnaire","exigé","formés","gérée","jeans","juifs","justifié","l'abandon","l'attribution","lenteur","manifesté","oreilles","prononcée","reconnaissent","reconnue","reproduction","seize","serait-ce","soixantaine","sortira","spectateur","vice-Premier","vingt-quatre","voyez","élégante","AU","Dyck","Hollande","Laurette","Manager","Partners","Rover","Tu","Warren","affirmé","allé","capteurs","chant","clinique","corde","d'annoncer","douces","dés","excellents","exercée","faiblesses","incapables","moeurs","nation","occupés","pesant","prolonge","proposons","prospérité","présentait","reprocher","réglé","s'adressent","sauvegarde","sauvetage","vitamine","Douglas","EOE","L'étude","Nouvelles","Porsche","Produit","Transports","Winterthur","bruxelloises","calcule","causé","chauffeur","concrets","conscients","conservée","conversations","crevettes","d'Albert","découpe","déterminées","envisagent","fermes","fermés","imposition","infrarouge","interactif","l'ambition","l'interdiction","l'obtention","langoustines","oreille","pencher","pessimiste","pessimistes","pilotage","policier","porc","prétendent","quotité","remous","représentaient","référendum","répartir","répression","semblerait","souffrance","substantielle","voisine","Italiens","Logique","Mhz","Traité","Walibi","animal","appellation","couler","coulisses","d'usage","disant","diversifié","déboucher","débouchés","dégagé","déguster","dérive","fumée","garage","inculpé","intellectuelle","l'actionnariat","l'essence","lisse","morales","peut-elle","pro","prospectus","raisonnablement","rapportent","retombé","régulier","s'attaque","sauter","scolaires","servira","soirées","suffira","ultérieurement","usagers","Autriche","Delta","Economique","Home","ITT","Iris","Reweghs","UNE","assurant","cardiaque","catastrophique","chaussure","cocktail","compatibles","d'adresses","d'immeubles","durement","détecteurs","implanté","intervenu","intervenue","jargon","l'Inde","l'instruction","mixtes","peso","promoteur","précisé","ralentir","rayonnement","remplit","remporte","successivement","séminaire","travaillait","urgence","équipées","Francisco","Gabriel","London","Mélissa","Nederland","Pacific","Portrait","Reine","Sipef","Sophie","académique","africain","allie","bougent","chaises","condamnation","crus","d'intégrer","digitale","doubles","décédé","exclue","fromages","habitude","imaginaire","jugent","l'utiliser","l'étiquette","mortes","notations","","","","obtenue","partent","retrouvée","roue","récits","sortant","tolérance","trouveront","vice","visuel","visé","vivement","vivons","émetteur","Apparemment","BP","Dassault","Elf","Genk","Ltd","Museum","accusations","bactéries","bouillon","brillants","clauses","collaborer","consentis","cri","d'amélioration","d'arriver","desserts","dynamiques","débouché","déposée","désigne","emballage","fumé","gibier","inscrits","intelligence","l'Angleterre","l'assistance","l'instauration","l'optimisme","l'égalité","longuement","légion","ménagers","noble","normales","polémique","repérer","secs","sombres","teneur","traversé","trucs","évitant","BNB","Banques","Belfox","Don","Hervé","KUL","Moyen-Orient","N'oubliez","Pays","Photo","aidant","anonymes","attrait","avez-vous","capitalisme","censé","clefs","considérations","d'Atlanta","d'échelle","demeurant","high-tech","linguistiques","manteau","monstre","n'auront","posées","proposait","préférer","remarquablement","s'appuie","sagesse","simplifier","surprend","tablent","te","trains","écoulée","écoute","étiquette","Constitution","Rouge","Valérie","aboutit","conformes","conjointement","conquis","d'aucune","d'espoir","d'intégration","l'époque","devienne","donnés","faveurs","gratuits","impliqué","inclut","intelligente","l'Irlande","légalement","nécessitent","occasions","perdant","portera","prenait","propice","rebelles","religieuse","réduisant","sale","sobriété","sophistiqué","sophistiqués","spécificité","transporteurs","urgent","usages","Haaren","Jusqu'ici","L'Union","Man","Moteur","Notre-Dame","Products","Robeco","Verts","Villa","abondamment","admirablement","assistance","casserole","chaos","citées","confiant","convenu","d'échéance","danois","durables","dépenser","extraordinaires","figurant","installe","l'agriculture","manifestent","marcher","nappes","paradoxe","partagés","protégés","pédagogique","raté","renvoie","résultant","s'exprime","soulignent","temporairement","trancher","unes","émanant","épaules","Brande","Honda","L'appareil","Nissan","Star","Tourisme","capitaine","communistes","compositions","convertible","d'imagination","doter","détenait","fassent","fermentation","fréquents","incité","indexé","intéressées","majoration","marine","maxi","meurt","musicien","musiques","navire","oppose","parkings","performante","produites","remontent","rigide","récolter","s'intéressent","salarial","salée","spectre","spread","studios","tirent","trading","yens","électricité","étendre","Black","DAX","Electrafina","Ernst","Gestion","Gilbert","Jim","L'utilisation","Lorsqu'un","Pol","Royaume","Wide","accompagne","annoncées","anticipée","clés","condamnés","contentent","d'apprentissage","d'il","d'éducation","del","diamants","doré","douleurs","défavorable","dénomination","entretient","farine","favori","fiche","fluide","huiles","incroyable","l'erreur","l'implantation","mentionner","modéré","multiple","musulmans","n'exclut","participant","prioritairement","préjudice","préventive","réalisant","suivis","tué","épices","équilibrée","Banksys","Cornet","Fontaine","Golfe","L'analyse","L'effet","L'image","LVMH","Laisser","Nm","Secundo","Soir","Texas","alimentation","annoncés","assistant","attrayante","caché","chinoises","communaux","comédien","continents","crayon","d'adapter","d'attention","d'égalité","dessiner","dignes","dira","dotés","enveloppe","exporte","facettes","gosses","indépendamment","interrogations","intégrale","issues","jupe","l'apprentissage","livret","n'est-ce","opportun","planches","présidents","pénurie","ratings","regroupement","respectifs","restons","retourne","soixante","séjours","sénateur","tailleur","volaille","voter","week-ends","Autour","BSR","J'en","Jean-Jacques","L'émission","Mondiale","SERGE","VAN","Vilvorde","adversaires","agressive","complété","conservent","coutume","croix","d'attribution","d'expression","d'exécution","d'habitation","d'imaginer","demandant","disposés","estimant","gardent","hoc","hormis","juristes","mystérieux","plonge","réflexe","s'agir","s'interroge","s'offre","servant","souples","souscrite","sus","teintes","Bus","Cartier","Dixon","Geschäftsidee","Lundi","POUR","Telle","affectés","amie","apportées","assume","autorisation","biologique","cachent","compatriotes","conservant","copains","couvrant","engouement","grandir","intégrées","l'affichage","l'américain","l'attrait","l'importation","maigres","merci","mélanger","plumes","politiquement","portugais","pratiquée","progressif","proie","qu'avant","qu'ont","reculer","relier","représentations","respecté","s'améliore","soif","statistique","sympathie","tenait","trouvant","vocabulaire","Armani","Caterpillar","Champagne","GIMV","Koramic","Ouvert","Raison","SRIW","Steve","Ter","VTM","Velde","Wathelet","arbre","d'appliquer","desquels","déboires","entamer","escompté","exister","illustration","indirecte","justifiée","l'angle","l'autoroute","l'emporte","leadership","légitime","nettoyer","nier","observé","opéré","orientation","placent","projette","rachetée","raffiné","rails","remises","retiendra","roulant","réussie","satisfaits","signatures","tienne","vastes","voyait","états","Airways","Ardennes","Danvers","Degroof","Greenspan","L'usine","News","Olivetti","Rabobank","Radio","Systemat","Vanden","Xeikon","aéroports","barreau","casse","consenti","convertir","créance","d'hier","d'inspiration","descend","dominé","dérapage","filtre","finissent","fériés","inutiles","l'épouse","librairie","malheureux","manifester","n'auraient","nippon","parier","patronat","pis","profile","renseignement","ressent","robes","réglementations","réputés","satin","sculpteur","sien","transporter","Albin","Focus","Gaston","Greenpeace","L'essentiel","Prague","Prince","Rue","Steel","Temps","amendes","audit","avéré","confrontée","contradiction","d'enfant","d'intérim","dédié","explosé","exécutif","foires","imprimer","l'accident","l'union","mandats","ongles","pensez-vous","pensionnés","persuadé","poil","provision","provoquent","radicalement","remboursements","renouveler","représentés","régie","s'établir","sexy","supprimé","suscitent","téléphoner","vignoble","échoué","écologiques","éducation","Airbus","Bangkok","Carlo","Edouard","Grand-Place","Janssens","Kinshasa","Nouvel","Time","Trust","anticiper","asbl","attendons","basées","biographie","cliquet","combiné","conformément","conservateurs","d'Espagne","d'actionnaires","d'adaptation","d'elles","d'occasion","designer","douteuses","enlever","ferroviaire","fossé","giron","généreuse","haine","hier","implantations","inférieures","l'ONSS","lorsqu'une","obligatoirement","paisible","plaire","pressé","reliés","révolte","s'établit","sexuel","souhaitait","stocker","survivant","tactique","terriblement","union","viandes","visés","écrin","évoquant","Baan","Desimpel","Engineering","L'inflation","argumente","attractif","clan","colorés","comporter","d'anciens","demi-heure","devenant","définis","départs","envoyés","express","forcer","frappant","hormones","islamistes","l'Autriche","poursuites","pénible","qu'est-ce","rangement","regroupant","représentée","requise","riverains","sourit","transformée","truffes","turbulences","économiquement","écrivains","Bordeaux","CNP","Caroline","Clerck","Fina","Gilles","Gol","Prenez","Puilaetco","Puissance","Yvan","allez","bilans","blues","bordure","brin","chef-d'oeuvre","choisissent","contestation","d'Electrabel","d'Italie","d'exemplaires","d'habitude","d'équilibre","d'éventuelles","découle","déflation","emplacements","entretenir","entretiens","freinage","géographiques","jolies","l'Otan","l'affiche","linéaire","lune","manquait","nations","payante","précise-t-il","quelques-unes","radicale","rattrapage","renouveau","restaurer","semi-conducteurs","statue","sélectionnés","touchant","échanger","Atlanta","Auto","Avantage","Bel","Chemical","EMI","Indiens","L'arrivée","Packard","alcool","appétit","attirent","aurions","banquette","cessent","comte","céramique","d'analystes","d'introduction","d'événements","desquelles","directrice","décalage","déclarés","exposées","grandi","honte","incarne","interdiction","l'Indonésie","l'utilité","meurtre","monuments","must","nés","percer","performantes","préparent","prévoyait","purée","rappelé","rejeté","relié","rédiger","rétablir","révélateur","révélation","s'appliquer","s'ouvrir","temple","textiles","tirage","traversée","visuelle","échecs","étonné","Alan","Boris","Brigitte","Guillaume","Homme","Innogenetics","Jardin","Jeanne","N'est-ce","Picqué","RTL-TVi","Restaurant","Sioen","Suisses","accordés","attentivement","autorisée","banale","basilic","cacao","cauchemar","coupes","d'agneau","d'efforts","d'emballage","d'exploiter","d'installation","d'équipe","décideurs","défendu","déficits","délégués","déroulent","exercent","exécuté","finira","garantis","gardant","humanitaire","impératif","introduites","l'acteur","l'indexation","mineur","modems","passages","perquisitions","plaignent","princesse","présidente","raffinée","recueillir","refuge","soft","sterling","suffi","tragique","verront","viendront","élaborer","AGF","Charges","Grands","Gustave","Janssen","Kennedy","Kohl","L'assureur","Pascale","apprentissage","apprécient","assise","by","catholiques","chocs","chrétien","cl","collectionneur","compagnon","d'UCB","dangereuses","demandés","diffuse","diffusé","explicitement","flou","féminins","gage","honneur","imprimé","intelligents","l'immense","l'oreille","l'émergence","lacunes","libellés","majeures","mexicain","nu","olympiques","pairs","penche","pourparlers","poursuivra","prenez","privilégiées","prépension","remarques","récupéré","régulation","s'inscrire","s'inspire","s'étendre","saura","schémas","sensualité","sociaux-chrétiens","titulaires","ultérieure","urbaine","vaccin","valables","voor","voyons","écriture","épingle","épisode","Anderlecht","Bird","Citons","Droit","Goossens","J'y","Marianne","Président","Roche","agréablement","aéronautique","courtage","d'aider","debout","devoirs","distinctes","dévoile","interactive","l'assassinat","litige","microprocesseur","nomme","osé","parvenus","patienter","payement","permanents","protagonistes","ralenti","réplique","subsistent","symboles","toxiques","Astra","Benetton","Ci-dessous","Dorénavant","Eurotunnel","Floride","Hilton","Imperial","Japan","L'ancien","Navigator","Révolution","Simplement","amende","animés","caution","coquilles","corrections","d'emprunts","d'influence","déménagement","déplace","déroulement","ensembles","fermée","folles","ignorer","individuellement","installées","interdite","jambon","l'empire","libéré","magnétique","pionnier","regret","réflexions","réunissant","sud-africain","séparé","voté","éloigné","émettant","Deprez","Equipment","Fondée","L'exposition","NZD","PRATIQUE","agenda","bourses","briser","cerner","chaudes","combiner","compatibilité","concurrentielle","confrontation","consécutive","d'efficacité","déclarent","dénicher","employées","exotique","fourniture","guerres","hutu","idéalement","interdire","l'Art","l'asbl","l'impulsion","litiges","législature","marie","masques","mousseline","nipponne","octroyé","précédé","prénom","préparés","redonner","respectant","risqué","réjouir","réservation","saturation","senior","trouverez","Ahold","Ancia","Bancaire","Central","D'aucuns","LCD","Online","Pouvez-vous","Shakespeare","Sont","Vision","bougies","calmer","confondre","couloirs","cuit","d'effets","d'excellentes","duré","démontrent","euros","fautes","financée","fortunes","fournie","grains","inspiration","intéressée","intérieurs","l'automatisation","l'imprimerie","modo","motivations","moulin","mélodies","ose","persil","reproduire","régression","sain","scrutin","succédé","sursis","survient","séquences","tracé","éclat","élan","éprouve","Audi","Development","Globalement","Limbourg","Loi","Noir","Philippines","SPRL","aimerait","augmentant","bricolage","bruts","cesser","charmes","comprends","comptoir","curieusement","d'assainissement","d'avions","demandait","décoratifs","décrire","empire","emporté","emprunter","envergure","flot","fraction","féminité","islamique","jouera","l'animal","l'euphorie","luxueux","manipuler","muscles","nocturne","persiste","poches","prématuré","présentera","présidentielle","prévient","rassurant","routiers","salut","sceptiques","serons","somptueux","sursaut","séparée","télévisée","Avez-vous","Biest","Créée","Feiner","Forum","Munich","Option","Vlaanderen","abondante","adressé","arabe","bulles","cartons","casque","civiles","commercialisés","contacter","courent","d'environnement","d'intervenir","d'étonnant","diffusée","décroche","dénonce","dénoncer","désastre","entamée","espérons","except","fortiori","fournies","homologues","incertain","instituts","l'embauche","l'héritage","l'étudiant","libérale","lie","mafia","nie","nuages","oscille","pianiste","polyester","rachetant","ronde","satisfaisante","solaires","spatiale","syndicaux","séduisant","Associates","Beke","Conclusion","Eh","Expo","Fidelity","L'Allemagne","Nothomb","PET","accomplir","bulletin","cascade","chutes","cirque","colloque","compétitifs","coordonnées","coquille","couverte","créancier","d'experts","douteux","détruit","fondu","grec","grecque","houlette","inattendu","intellectuels","l'encadré","luxembourgeoises","majoritairement","marier","mariée","monsieur","nominale","notera","obligée","ouvertement","paysans","poétique","prolongée","prometteurs","provincial","reconnus","regretter","rentre","ris","rosé","réparer","réservoir","résistant","s'attendent","segmentation","sentiers","substitution","suffirait","tournoi","treize","triplé","téléspectateurs","vaudra","écologistes","Américain","Bourgogne","Burundi","Celles","Conservatoire","Cuba","Entreprendre","IV","Nations","Normalement","Saint-Jacques","Schaerbeek","Signalons","accélérée","adaptations","africaine","agressif","aidé","autonomes","chauds","civils","combustible","comités","concurrentes","consentir","d'expliquer","d'exportation","dense","découvrent","défensive","dévolu","engendré","envol","forgé","fréquentation","graisse","impliqués","imposent","inédit","l'Australie","l'anonymat","l'imaginaire","l'éclairage","laps","loisir","molécules","négoce","pape","pensait","pensez","phrases","promenades","ranger","relevant","s'inscrivent","serre","sollicité","tentés","thermique","transparente","Acheter","CBF","Canon","Donaldson","El","Espace","JP","Libre","alliés","brosse","coefficient","comparaisons","continueront","coupables","cultive","cycliste","d'Allemagne","datent","débouche","déco","entreprendre","gourmandise","gouvernementales","griffe","guichet","indéterminée","instructions","interrogé","l'adhésion","l'assemblage","l'audience","l'océan","l'énorme","mobiliser","pavé","plantation","ports","puisqu'ils","quatorze","rationalisation","renouer","ridicule","réglage","réparti","surmonter","tarification","tuyaux","uniques","Cisco","EDI","Fiscalité","Gallimard","Gandois","Jos","Mosane","Nokia","Usinor","Vande","Varsovie","abandonne","achevé","ajoutent","allusion","annexes","autoroute","brusquement","console","cran","d'Ostende","d'adopter","d'assemblage","d'exception","d'innovation","déceler","dérégulation","favorites","gourou","l'Argentine","l'allure","l'enjeu","made","moelleux","obtiennent","panoplie","photographique","qu'ailleurs","qu'entre","redevable","remonté","remplie","rentabiliser","scandinaves","serions","sud-africaines","suicide","trim","télétexte","vierge","vigoureuse","visages","voyant","électoral","Antonio","BATC","Gare","Institut","KNP","Menus","Renard","Road","Rops","Sauvage","abordable","accueillent","adresser","approprié","brillantes","cachet","casino","catastrophes","chargées","ciment","content","courantes","d'acquisition","d'avant","d'heures","delta","dysfonctionnements","filtres","gravures","innombrables","juriste","jusqu'alors","lampes","mannequin","parcouru","polonais","préférons","prévenus","pérennité","quai","quittent","radiation","refait","regrouper","revenant","réduisent","résisté","réticences","s'inquiéter","solo","temporaires","Ah","CAC","Carl","GIA","Gassée","House","Idées","Jersey","Lufthansa","Pacifique","Partenaires","Second","Travel","accompagnés","alimenter","augmentée","aval","battus","bordeaux","cohésion","compensée","complices","compliquée","conclus","construits","cuvée","défaite","flacons","fuir","habitué","historiquement","hit-parade","improbable","incluant","informés","j'y","l'argument","l'indemnité","l'originalité","l'ouest","lires","lumineuse","managing","mariages","morosité","mythes","n'offre","neuves","offrait","opérationnels","peuples","portés","prolongé","précaution","puisqu'on","pédophilie","quasi-totalité","retire","rigoureux","ristourne","réalisable","réalistes","s'entendre","tardive","vies","vital","von","Argentine","DVD","Distrigaz","Forem","Formule","In","Leys","Maria","Master","Monaco","PHOTOS","Reserve","Verbaet","Witkowska","Z","accéléré","acquises","antérieurement","avancent","avoué","chapitres","circuler","consacrent","corrélation","d'affirmer","d'élargir","d'équipements","diminuent","espérant","fonder","fusionner","für","general","heurte","hésiter","jouissent","l'aile","l'institut","laissez","parution","pleins","profils","prototypes","quiconque","rail","rareté","respire","rythmes","réservées","sauvé","scandales","superbement","trimestriel","AAA","Beethoven","Ci-contre","Commerzbank","DGX","Hormis","Inusop","PowerPC","Prins","Public","Salomon","accents","accordées","actrice","annuelles","antérieures","brille","cachés","combinaisons","contraints","crucial","d'enseignement","demandée","entoure","fascinant","fragiles","globe","haussier","hérité","inquiétudes","juif","manquera","massifs","mépris","nippons","odeurs","ombre","paille","paraissait","perceptible","pertinence","proportionnelle","proportionnellement","prévoyant","psychologue","recevront","revendu","reviendra","risquer","saga","serez","sous-jacent","techniquement","températures","tiens","échantillon","CE","CFE","Coca","Directeur","Heysel","Ier","Jacob","Paix","Samedi","Simple","Tobback","Trends","UEM","Vinck","adoptent","centimes","centraux","collants","communisme","consistait","d'ail","d'ensemble","d'exposition","devenait","défenseurs","dépendant","dévoiler","enregistrent","fameuses","gagnants","indicatif","indifférent","intégrante","intéressent","inversement","kW","l'allemand","l'apéritif","l'important","n'échappe","objective","occupants","pains","perle","phares","planétaire","pointes","poulet","prioritaire","précoce","quo","recommencer","représentées","roule","réputée","rétablissement","sonne","spirale","tendent","tiroirs","traitent","trouvaient","validité","variantes","verticale","vole","église","équilibré","Armand","Carlier","Distribution","Fred","L'ouvrage","Monceau-Zolder","Officiellement","Passer","Patriotique","Réflexions","SGB","Shop","Toshiba","absorbe","acceptée","agissent","aimer","apparences","appliqués","ascension","attaques","attitudes","autorisés","blessures","cathédrale","contrer","d'essence","d'examiner","divergences","dix-huit","détachement","formuler","implications","l'effondrement","l'habitacle","libérales","loup","magnifiques","mainframes","miroirs","offensive","ondes","organe","porte-monnaie","professionnalisme","préside","recueilli","rentes","report","retards","revendeurs","rez-de-chaussée","roulement","ruines","rénové","sienne","stimule","toilette","utilitaires","voudraient","Audiofina","BRUXELLES","Bilan","Colin","Continental","Dommage","Ferrari","Laurence","MBA","UPS","appelées","artisanale","automobilistes","berceau","bloquer","brancher","classés","communique","continentale","convivial","d'analyser","d'intérieur","détaillé","détaillée","estimait","examiné","facto","glissement","grise","incident","kit","know-how","l'Occident","légitimité","nommer","organisent","photographes","pionniers","profitera","prometteuse","prudemment","radical","rater","siens","simplification","small","spécificités","suspects","tarder","urbains","veine","vinaigrette","vingt-cinq","écoulé","Chiffre","Dimanche","Havas","Metropolitan","Presque","Viennent","Village","agréables","agréé","animations","caviar","chauffeurs","concepteur","conteneurs","coureurs","d'Union","d'envisager","d'opinion","deuil","débarque","déclenche","examens","executive","formalités","fragilité","gourmande","gratuites","inflationnistes","introductions","isolés","justifient","l'abbaye","l'épargnant","lacune","limitant","marin","new-yorkais","occupant","parvenue","relie","remplacés","reportage","représentatif","réparations","s'attaquer","sonores","soutiennent","tirés","trouvons","turbodiesel","violent","Adresse","Casino","Delaunois","Fafer","Industrie","Inversement","Longtemps","Manche","Med","Montréal","One","Partout","Pérou","Robe","Rose","Sachez","Spadel","Stefaan","Véritable","auto","bars","bizarre","blonde","cercles","chapelle","compté","conformité","créatifs","créatrice","culpabilité","d'Apple","d'exercer","d'échapper","d'étendre","désordre","exécuter","gammes","gastronomique","guider","générique","homologue","imagination","immanquablement","impressions","impératifs","initiés","irlandais","jouet","kilo","l'abonnement","l'habitation","l'inventeur","l'élection","loger","marasme","mutuelle","médiocres","n'est-elle","nobles","odeur","oignons","opinions","plates-formes","pratiquant","provocation","prédit","retomber","routine","répandu","répandue","sous-sol","soviétique","subtil","sélectionné","tabou","tache","taxer","touchés","usées","élaborée","émane","ABN-Amro","BEI","Beecham","COIB","Cirque","Claire","Direct","Interim","Louvre","Mazda","Qu'on","Recherche","Sablon","SmithKline","a-t-on","actualité","ambiant","antenne","associe","blessés","boules","bourgeois","brun","caves","chirurgie","classer","colis","consommé","d'accompagnement","d'affichage","d'aménagement","d'enregistrer","d'école","demandeur","déploie","désespoir","emplacement","ennemi","envisageable","essayons","foyers","frites","gouttes","illusion","j","jugées","l'amateur","l'axe","l'opposé","larmes","lingerie","longévité","lorsqu'elles","manches","manne","mette","muni","navires","pharmacien","potentielle","procurent","protégée","préoccupe","rigoureuse","soyez","strangle","tentant","transmet","trouvée","variant","viser","volés","Ariane","BREF","Bart","Bruxelles-Capitale","Cola"] en_common_words = ["the","of","and","to","a","in","for","is","on","that","by","this","with","i","you","This","it","not","or","be","are","from","at","as","your","all","have","new","more","an","was","we","will","home","can","us","about","if","page","my","has","search","free","but","our","one","other","do","no","information","time","they","site","he","up","may","what","which","their","news","out","use","any","there","see","only","so","his","when","contact","here","business","who","web","also","now","help","get","pm","view","online","c","e","first","am","been","would","how","were","me","s","services","some","these","click","its","like","service","x","than","find","price","date","back","top","people","had","list","name","just","over","state","year","day","into","email","two","health","n","world","re","next","used","go","b","work","last","most","products","music","buy","data","make","them","should","product","system","post","her","city","t","add","policy","number","such","please","available","copyright","support","message","after","best","software","then","jan","good","video","well","d","where","info","rights","public","books","high","school","through","m","each","links","she","review","years","order","very","privacy","book","items","company","r","read","group","sex","need","many","user","said","de","does","set","under","general","research","university","january","mail","full","map","reviews","program","life","know","games","way","days","management","p","part","could","great","united","hotel","real","f","item","international","center","ebay","must","store","travel","comments","made","development","report","off","member","details","line","terms","before","hotels","did","send","right","type","because","local","those","using","results","office","education","national","car","design","take","posted","internet","address","community","within","states","area","want","phone","dvd","shipping","reserved","subject","between","forum","family","l","long","based","w","code","show","o","even","black","check","special","prices","website","index","being","women","much","sign","file","link","open","today","technology","south","case","project","same","pages","uk","version","section","own","found","sports","house","related","security","both","g","county","american","photo","game","members","power","while","care","network","down","computer","systems","three","total","place","end","following","download","h","him","without","per","access","think","north","resources","current","posts","big","media","law","control","water","history","pictures","size","art","personal","since","including","guide","shop","directory","board","location","change","white","text","small","rating","rate","government","children","during","usa","return","students","v","shopping","account","times","sites","level","digital","profile","previous","form","events","love","old","john","main","call","hours","image","department","title","description","non","k","y","insurance","another","why","shall","property","class","cd","still","money","quality","every","listing","content","country","private","little","visit","save","tools","low","reply","customer","december","compare","movies","include","college","value","article","york","man","card","jobs","provide","j","food","source","author","different","press","u","learn","sale","around","print","course","job","canada","process","teen","room","stock","training","too","credit","point","join","science","men","categories","advanced","west","sales","look","english","left","team","estate","box","conditions","select","windows","photos","gay","thread","week","category","note","live","large","gallery","table","register","however","june","october","november","market","library","really","action","start","series","model","features","air","industry","plan","human","provided","tv","yes","required","second","hot","accessories","cost","movie","forums","march","la","september","better","say","questions","july","yahoo","going","medical","test","friend","come","dec","server","pc","study","application","cart","staff","articles","san","feedback","again","play","looking","issues","april","never","users","complete","street","topic","comment","financial","things","working","against","standard","tax","person","below","mobile","less","got","blog","party","payment","equipment","login","student","let","programs","offers","legal","above","recent","park","stores","side","act","problem","red","give","memory","performance","social","q","august","quote","language","story","sell","options","experience","rates","create","key","body","young","america","important","field","few","east","paper","single","ii","age","activities","club","example","girls","additional","password","z","latest","something","road","gift","question","changes","night","ca","hard","texas","oct","pay","four","poker","status","browse","issue","range","building","seller","court","february","always","result","audio","light","write","war","nov","offer","blue","groups","al","easy","given","files","event","release","analysis","request","fax","china","making","picture","needs","possible","might","professional","yet","month","major","star","areas","future","space","committee","hand","sun","cards","problems","london","washington","meeting","rss","become","interest","id","child","keep","enter","california","porn","share","similar","garden","schools","million","added","reference","companies","listed","baby","learning","energy","run","delivery","net","popular","term","film","stories","put","computers","journal","reports","co","try","welcome","central","images","president","notice","god","original","head","radio","until","cell","color","self","council","away","includes","track","australia","discussion","archive","once","others","entertainment","agreement","format","least","society","months","log","safety","friends","sure","faq","trade","edition","cars","messages","marketing","tell","further","updated","association","able","having","provides","david","fun","already","green","studies","close","common","drive","specific","several","gold","feb","living","sep","collection","called","short","arts","lot","ask","display","limited","powered","solutions","means","director","daily","beach","past","natural","whether","due","et","electronics","five","upon","period","planning","database","says","official","weather","mar","land","average","done","technical","window","france","pro","region","island","record","direct","microsoft","conference","environment","records","st","district","calendar","costs","style","url","front","statement","update","parts","aug","ever","downloads","early","miles","sound","resource","present","applications","either","ago","document","word","works","material","bill","apr","written","talk","federal","hosting","rules","final","adult","tickets","thing","centre","requirements","via","cheap","nude","kids","finance","true","minutes","else","mark","third","rock","gifts","europe","reading","topics","bad","individual","tips","plus","auto","cover","usually","edit","together","videos","percent","fast","function","fact","unit","getting","global","tech","meet","far","economic","en","player","projects","lyrics","often","subscribe","submit","germany","amount","watch","included","feel","though","bank","risk","thanks","everything","deals","various","words","linux","jul","production","commercial","james","weight","town","heart","advertising","received","choose","treatment","newsletter","archives","points","knowledge","magazine","error","camera","jun","girl","currently","construction","toys","registered","clear","golf","receive","domain","methods","chapter","makes","protection","policies","loan","wide","beauty","manager","india","position","taken","sort","listings","models","michael","known","half","cases","step","engineering","florida","simple","quick","none","wireless","license","paul","friday","lake","whole","annual","published","later","basic","sony","shows","corporate","google","church","method","purchase","customers","active","response","practice","hardware","figure","materials","fire","holiday","chat","enough","designed","along","among","death","writing","speed","html","countries","loss","face","brand","discount","higher","effects","created","remember","standards","oil","bit","yellow","political","increase","advertise","kingdom","base","near","environmental","thought","stuff","french","storage","oh","japan","doing","loans","shoes","entry","stay","nature","orders","availability","africa","summary","turn","mean","growth","notes","agency","king","monday","european","activity","copy","although","drug","pics","western","income","force","cash","employment","overall","bay","river","commission","ad","package","contents","seen","players","engine","port","album","regional","stop","supplies","started","administration","bar","institute","views","plans","double","dog","build","screen","exchange","types","soon","sponsored","lines","electronic","continue","across","benefits","needed","season","apply","someone","held","ny","anything","printer","condition","effective","believe","organization","effect","asked","eur","mind","sunday","selection","casino","pdf","lost","tour","menu","volume","cross","anyone","mortgage","hope","silver","corporation","wish","inside","solution","mature","role","rather","weeks","addition","came","supply","nothing","certain","usr","executive","running","lower","necessary","union","jewelry","according","dc","clothing","mon","com","particular","fine","names","robert","homepage","hour","gas","skills","six","bush","islands","advice","career","military","rental","decision","leave","british","teens","pre","huge","sat","woman","facilities","zip","bid","kind","sellers","middle","move","cable","opportunities","taking","values","division","coming","tuesday","object","lesbian","appropriate","machine","logo","length","actually","nice","score","statistics","client","ok","returns","capital","follow","sample","investment","sent","shown","saturday","christmas","england","culture","band","flash","ms","lead","george","choice","went","starting","registration","fri","thursday","courses","consumer","hi","airport","foreign","artist","outside","furniture","levels","channel","letter","mode","phones","ideas","wednesday","structure","fund","summer","allow","degree","contract","button","releases","wed","homes","super","male","matter","custom","virginia","almost","took","located","multiple","asian","distribution","editor","inn","industrial","cause","potential","song","cnet","ltd","los","hp","focus","late","fall","featured","idea","rooms","female","responsible","inc","communications","win","associated","thomas","primary","cancer","numbers","reason","tool","browser","spring","foundation","answer","voice","eg","friendly","schedule","documents","communication","purpose","feature","bed","comes","police","everyone","independent","ip","approach","cameras","brown","physical","operating","hill","maps","medicine","deal","hold","ratings","chicago","forms","glass","happy","tue","smith","wanted","developed","thank","safe","unique","survey","prior","telephone","sport","ready","feed","animal","sources","mexico","population","pa","regular","secure","navigation","operations","therefore","ass","simply","evidence","station","christian","round","paypal","favorite","understand","option","master","valley","recently","probably","thu","rentals","sea","built","publications","blood","cut","worldwide","improve","connection","publisher","hall","larger","anti","networks","earth","parents","nokia","impact","transfer","introduction","kitchen","strong","tel","carolina","wedding","properties","hospital","ground","overview","ship","accommodation","owners","disease","tx","excellent","paid","italy","perfect","hair","opportunity","kit","classic","basis","command","cities","william","express","anal","award","distance","tree","peter","assessment","ensure","thus","wall","ie","involved","el","extra","especially","interface","pussy","partners","budget","rated","guides","success","maximum","ma","operation","existing","quite","selected","boy","amazon","patients","restaurants","beautiful","warning","wine","locations","horse","vote","forward","flowers","stars","significant","lists","technologies","owner","retail","animals","useful","directly","manufacturer","ways","est","son","providing","rule","mac","housing","takes","iii","gmt","bring","catalog","searches","max","trying","mother","authority","considered","told","xml","traffic","programme","joined","input","strategy","feet","agent","valid","bin","modern","senior","ireland","sexy","teaching","door","grand","testing","trial","charge","units","instead","canadian","cool","normal","wrote","enterprise","ships","entire","educational","md","leading","metal","positive","fl","fitness","chinese","opinion","mb","asia","football","abstract","uses","output","funds","mr","greater","likely","develop","employees","artists","alternative","processing","responsibility","resolution","java","guest","seems","publication","pass","relations","trust","van","contains","session","multi","photography","republic","fees","components","vacation","century","academic","assistance","completed","skin","graphics","indian","prev","ads","mary","il","expected","ring","grade","dating","pacific","mountain","organizations","pop","filter","mailing","vehicle","longer","consider","int","northern","behind","panel","floor","german","buying","match","proposed","default","require","iraq","boys","outdoor","deep","morning","otherwise","allows","rest","protein","plant","reported","hit","transportation","mm","pool","mini","politics","partner","disclaimer","authors","boards","faculty","parties","fish","membership","mission","eye","string","sense","modified","pack","released","stage","internal","goods","recommended","born","unless","richard","detailed","japanese","race","approved","background","target","except","character","usb","maintenance","ability","maybe","functions","ed","moving","brands","places","php","pretty","trademarks","phentermine","spain","southern","yourself","etc","winter","rape","battery","youth","pressure","submitted","boston","incest","debt","keywords","medium","television","interested","core","break","purposes","throughout","sets","dance","wood","msn","itself","defined","papers","playing","awards","fee","studio","reader","virtual","device","established","answers","rent","las","remote","dark","programming","external","apple","le","regarding","instructions","min","offered","theory","enjoy","remove","aid","surface","minimum","visual","host","variety","teachers","isbn","martin","manual","block","subjects","agents","increased","repair","fair","civil","steel","understanding","songs","fixed","wrong","beginning","hands","associates","finally","az","updates","desktop","classes","paris","ohio","gets","sector","capacity","requires","jersey","un","fat","fully","father","electric","saw","instruments","quotes","officer","driver","businesses","dead","respect","unknown","specified","restaurant","mike","trip","pst","worth","mi","procedures","poor","teacher","xxx","eyes","relationship","workers","farm","fucking","georgia","peace","traditional","campus","tom","showing","creative","coast","benefit","progress","funding","devices","lord","grant","sub","agree","fiction","hear","sometimes","watches","careers","beyond","goes","families","led","museum","themselves","fan","transport","interesting","blogs","wife","evaluation","accepted","former","implementation","ten","hits","zone","complex","th","cat","galleries","references","die","presented","jack","flat","flow","agencies","literature","respective","parent","spanish","michigan","columbia","setting","dr","scale","stand","economy","highest","helpful","monthly","critical","frame","musical","definition","secretary","angeles","networking","path","australian","employee","chief","gives","kb","bottom","magazines","packages","detail","francisco","laws","changed","pet","heard","begin","individuals","colorado","royal","clean","switch","russian","largest","african","guy","titles","relevant","guidelines","justice","connect","bible","dev","cup","basket","applied","weekly","vol","installation","described","demand","pp","suite","vegas","na","square","chris","attention","advance","skip","diet","army","auction","gear","lee","os","difference","allowed","correct","charles","nation","selling","lots","piece","sheet","firm","seven","older","illinois","regulations","elements","species","jump","cells","module","resort","facility","random","pricing","dvds","certificate","minister","motion","looks","fashion","directions","visitors","documentation","monitor","trading","forest","calls","whose","coverage","couple","giving","chance","vision","ball","ending","clients","actions","listen","discuss","accept","automotive","naked","goal","successful","sold","wind","communities","clinical","situation","sciences","markets","lowest","highly","publishing","appear","emergency","developing","lives","currency","leather","determine","milf","temperature","palm","announcements","patient","actual","historical","stone","bob","commerce","ringtones","perhaps","persons","difficult","scientific","satellite","fit","tests","village","accounts","amateur","ex","met","pain","xbox","particularly","factors","coffee","www","settings","cum","buyer","cultural","steve","easily","oral","ford","poster","edge","functional","root","au","fi","closed","holidays","ice","pink","zealand","balance","monitoring","graduate","replies","shot","nc","architecture","initial","label","thinking","scott","llc","sec","recommend","canon","hardcore","league","waste","minute","bus","provider","optional","dictionary","cold","accounting","manufacturing","sections","chair","fishing","effort","phase","fields","bag","fantasy","po","letters","motor","va","professor","context","install","shirt","apparel","generally","continued","foot","mass","crime","count","breast","techniques","ibm","rd","johnson","sc","quickly","dollars","websites","religion","claim","driving","permission","surgery","patch","heat","wild","measures","generation","kansas","miss","chemical","doctor","task","reduce","brought","himself","nor","component","enable","exercise","bug","santa","mid","guarantee","leader","diamond","israel","se","processes","soft","servers","alone","meetings","seconds","jones","arizona","keyword","interests","flight","congress","fuel","username","walk","fuck","produced","italian","paperback","classifieds","wait","supported","pocket","saint","rose","freedom","argument","competition","creating","jim","drugs","joint","premium","providers","fresh","characters","attorney","upgrade","di","factor","growing","thousands","km","stream","apartments","pick","hearing","eastern","auctions","therapy","entries","dates","generated","signed","upper","administrative","serious","prime","samsung","limit","began","louis","steps","errors","shops","bondage","del","efforts","informed","ga","ac","thoughts","creek","ft","worked","quantity","urban","practices","sorted","reporting","essential","myself","tours","platform","load","affiliate","labor","immediately","admin","nursing","defense","machines","designated","tags","heavy","covered","recovery","joe","guys","integrated","configuration","cock","merchant","comprehensive","expert","universal","protect","drop","solid","cds","presentation","languages","became","orange","compliance","vehicles","prevent","theme","rich","im","campaign","marine","improvement","vs","guitar","finding","pennsylvania","examples","ipod","saying","spirit","ar","claims","porno","challenge","motorola","acceptance","strategies","mo","seem","affairs","touch","intended","towards","sa","goals","hire","election","suggest","branch","charges","serve","affiliates","reasons","magic","mount","smart","talking","gave","ones","latin","multimedia","xp","tits","avoid","certified","manage","corner","rank","computing","oregon","element","birth","virus","abuse","interactive","requests","separate","quarter","procedure","leadership","tables","define","racing","religious","facts","breakfast","kong","column","plants","faith","chain","developer","identify","avenue","missing","died","approximately","domestic","sitemap","recommendations","moved","houston","reach","comparison","mental","viewed","moment","extended","sequence","inch","attack","sorry","centers","opening","damage","lab","reserve","recipes","cvs","gamma","plastic","produce","snow","placed","truth","counter","failure","follows","eu","weekend","dollar","camp","ontario","automatically","des","minnesota","films","bridge","native","fill","williams","movement","printing","baseball","owned","approval","draft","chart","played","contacts","cc","jesus","readers","clubs","lcd","wa","jackson","equal","adventure","matching","offering","shirts","profit","leaders","posters","institutions","assistant","variable","ave","dj","advertisement","expect","parking","headlines","yesterday","compared","determined","wholesale","workshop","russia","gone","codes","kinds","extension","seattle","statements","golden","completely","teams","fort","cm","wi","lighting","senate","forces","funny","brother","gene","turned","portable","tried","electrical","applicable","disc","returned","pattern","ct","hentai","boat","named","theatre","laser","earlier","manufacturers","sponsor","classical","icon","warranty","dedicated","indiana","direction","harry","basketball","objects","ends","delete","evening","assembly","nuclear","taxes","mouse","signal","criminal","issued","brain","sexual","wisconsin","powerful","dream","obtained","false","da","cast","flower","felt","personnel","passed","supplied","identified","falls","pic","soul","aids","opinions","promote","stated","stats","hawaii","professionals","appears","carry","flag","decided","nj","covers","hr","em","advantage","hello","designs","maintain","tourism","priority","newsletters","adults","clips","savings","iv","graphic","atom","payments","rw","estimated","binding","brief","ended","winning","eight","anonymous","iron","straight","script","served","wants","miscellaneous","prepared","void","dining","alert","integration","atlanta","dakota","tag","interview","mix","framework","disk","installed","queen","vhs","credits","clearly","fix","handle","sweet","desk","criteria","pubmed","dave","massachusetts","diego","hong","vice","associate","ne","truck","behavior","enlarge","ray","frequently","revenue","measure","changing","votes","du","duty","looked","discussions","bear","gain","festival","laboratory","ocean","flights","experts","signs","lack","depth","iowa","whatever","logged","laptop","vintage","train","exactly","dry","explore","maryland","spa","concept","nearly","eligible","checkout","reality","forgot","handling","origin","knew","gaming","feeds","billion","destination","scotland","faster","intelligence","dallas","bought","con","ups","nations","route","followed","specifications","broken","tripadvisor","frank","alaska","zoom","blow","battle","residential","anime","speak","decisions","industries","protocol","query","clip","partnership","editorial","nt","expression","es","equity","provisions","speech","wire","principles","suggestions","rural","shared","sounds","replacement","tape","strategic","judge","spam","economics","acid","bytes","cent","forced","compatible","fight","apartment","height","null","zero","speaker","filed","gb","netherlands","obtain","bc","consulting","recreation","offices","designer","remain","managed","pr","failed","marriage","roll","korea","banks","fr","participants","secret","bath","aa","kelly","leads","negative","austin","favorites","toronto","theater","springs","missouri","andrew","var","perform","healthy","translation","estimates","font","assets","injury","mt","joseph","ministry","drivers","lawyer","figures","married","protected","proposal","sharing","philadelphia","portal","waiting","birthday","beta","fail","gratis","banking","officials","brian","toward","won","slightly","assist","conduct","contained","lingerie","shemale","legislation","calling","parameters","jazz","serving","bags","profiles","miami","comics","matters","houses","doc","postal","relationships","tennessee","wear","controls","breaking","combined","ultimate","wales","representative","frequency","introduced","minor","finish","departments","residents","noted","displayed","mom","reduced","physics","rare","spent","performed","extreme","samples","davis","daniel","bars","reviewed","row","oz","forecast","removed","helps","singles","administrator","cycle","amounts","contain","accuracy","dual","rise","usd","sleep","mg","bird","pharmacy","brazil","creation","static","scene","hunter","addresses","lady","crystal","famous","writer","chairman","violence","fans","oklahoma","speakers","drink","academy","dynamic","gender","eat","permanent","agriculture","dell","cleaning","constitutes","portfolio","practical","delivered","collectibles","infrastructure","exclusive","seat","concerns","colour","vendor","originally","intel","utilities","philosophy","regulation","officers","reduction","aim","bids","referred","supports","nutrition","recording","regions","junior","toll","les","cape","ann","rings","meaning","tip","secondary","wonderful","mine","ladies","henry","ticket","announced","guess","agreed","prevention","whom","ski","soccer","math","import","posting","presence","instant","mentioned","automatic","healthcare","viewing","maintained","ch","increasing","majority","connected","christ","dan","dogs","sd","directors","aspects","austria","ahead","moon","participation","scheme","utility","preview","fly","manner","matrix","containing","combination","devel","amendment","despite","strength","guaranteed","turkey","libraries","proper","distributed","degrees","singapore","enterprises","delta","fear","seeking","inches","phoenix","rs","convention","shares","principal","daughter","standing","voyeur","comfort","colors","wars","cisco","ordering","kept","alpha","appeal","cruise","bonus","certification","previously","hey","bookmark","buildings","specials","beat","disney","household","batteries","adobe","smoking","bbc","becomes","drives","arms","alabama","tea","improved","trees","avg","achieve","positions","dress","subscription","dealer","contemporary","sky","utah","nearby","rom","carried","happen","exposure","panasonic","hide","permalink","signature","gambling","refer","miller","provision","outdoors","clothes","caused","luxury","babes","frames","viagra","certainly","indeed","newspaper","toy","circuit","layer","printed","slow","removal","easier","src","liability","trademark","hip","printers","faqs","nine","adding","kentucky","mostly","eric","spot","taylor","trackback","prints","spend","factory","interior","revised","grow","americans","optical","promotion","relative","amazing","clock","dot","hiv","identity","suites","conversion","feeling","hidden","reasonable","victoria","serial","relief","revision","broadband","influence","ratio","pda","importance","rain","onto","dsl","planet","webmaster","copies","recipe","zum","permit","seeing","proof","dna","diff","tennis","bass","prescription","bedroom","empty","instance","hole","pets","ride","licensed","orlando","specifically","tim","bureau","maine","sql","represent","conservation","pair","ideal","specs","recorded","don","pieces","finished","parks","dinner","lawyers","sydney","stress","cream","ss","runs","trends","yeah","discover","sexo","ap","patterns","boxes","louisiana","hills","javascript","fourth","nm","advisor","mn","marketplace","nd","evil","aware","wilson","shape","evolution","irish","certificates","objectives","stations","suggested","gps","op","remains","acc","greatest","firms","concerned","euro","operator","structures","generic","encyclopedia","usage","cap","ink","charts","continuing","mixed","census","interracial","peak","tn","competitive","exist","wheel","transit","dick","suppliers","salt","compact","poetry","lights","tracking","angel","bell","keeping","preparation","attempt","receiving","matches","accordance","width","noise","engines","forget","array","discussed","accurate","stephen","elizabeth","climate","reservations","pin","playstation","alcohol","greek","instruction","managing","annotation","sister","raw","differences","walking","explain","smaller","newest","establish","gnu","happened","expressed","jeff","extent","sharp","lesbians","ben","lane","paragraph","kill","mathematics","aol","compensation","ce","export","managers","aircraft","modules","sweden","conflict","conducted","versions","employer","occur","percentage","knows","mississippi","describe","concern","backup","requested","citizens","connecticut","heritage","personals","immediate","holding","trouble","spread","coach","kevin","agricultural","expand","supporting","audience","assigned","jordan","collections","ages","participate","plug","specialist","cook","affect","virgin","experienced","investigation","raised","hat","institution","directed","dealers","searching","sporting","helping","perl","affected","lib","bike","totally","plate","expenses","indicate","blonde","ab","proceedings","favourite","transmission","anderson","utc","characteristics","der","lose","organic","seek","experiences","albums","cheats","extremely","verzeichnis","contracts","guests","hosted","diseases","concerning","developers","equivalent","chemistry","tony","neighborhood","nevada","kits","thailand","variables","agenda","anyway","continues","tracks","advisory","cam","curriculum","logic","template","prince","circle","soil","grants","anywhere","psychology","responses","atlantic","wet","circumstances","edward","investor","identification","ram","leaving","wildlife","appliances","matt","elementary","cooking","speaking","sponsors","fox","unlimited","respond","sizes","plain","exit","entered","iran","arm","keys","launch","wave","checking","costa","belgium","printable","holy","acts","guidance","mesh","trail","enforcement","symbol","crafts","highway","buddy","hardcover","observed","dean","setup","poll","booking","glossary","fiscal","celebrity","styles","denver","unix","filled","bond","channels","ericsson","appendix","notify","blues","chocolate","pub","portion","scope","hampshire","supplier","cables","cotton","bluetooth","controlled","requirement","authorities","biology","dental","killed","border","ancient","debate","representatives","starts","pregnancy","causes","arkansas","biography","leisure","attractions","learned","transactions","notebook","explorer","historic","attached","opened","tm","husband","disabled","authorized","crazy","upcoming","britain","concert","retirement","scores","financing","efficiency","sp","comedy","adopted","efficient","weblog","linear","commitment","specialty","bears","jean","hop","carrier","edited","constant","visa","mouth","jewish","meter","linked","portland","interviews","concepts","nh","gun","reflect","pure","deliver","wonder","hell","lessons","fruit","begins","qualified","reform","lens","alerts","treated","discovery","draw","mysql","classified","relating","assume","confidence","alliance","fm","confirm","warm","neither","lewis","howard","offline","leaves","engineer","lifestyle","consistent","replace","clearance","connections","inventory","converter","suck","organisation","babe","checks","reached","becoming","blowjob","safari","objective","indicated","sugar","crew","legs","sam","stick","securities","allen","pdt","relation","enabled","genre","slide","montana","volunteer","tested","rear","democratic","enhance","switzerland","exact","bound","parameter","adapter","processor","node","formal","dimensions","contribute","lock","hockey","storm","micro","colleges","laptops","mile","showed","challenges","editors","mens","threads","bowl","supreme","brothers","recognition","presents","ref","tank","submission","dolls","estimate","encourage","navy","kid","regulatory","inspection","consumers","cancel","limits","territory","transaction","manchester","weapons","paint","delay","pilot","outlet","contributions","continuous","db","czech","resulting","cambridge","initiative","novel","pan","execution","disability","increases","ultra","winner","idaho","contractor","ph","episode","examination","potter","dish","plays","bulletin","ia","pt","indicates","modify","oxford","adam","truly","epinions","painting","committed","extensive","affordable","universe","candidate","databases","patent","slot","psp","outstanding","ha","eating","perspective","planned","watching","lodge","messenger","mirror","tournament","consideration","ds","discounts","sterling","sessions","kernel","boobs","stocks","buyers","journals","gray","catalogue","ea","jennifer","antonio","charged","broad","taiwan","und","chosen","demo","greece","lg","swiss","sarah","clark","labour","hate","terminal","publishers","nights","behalf","caribbean","liquid","rice","nebraska","loop","salary","reservation","foods","gourmet","guard","properly","orleans","saving","nfl","remaining","empire","resume","twenty","newly","raise","prepare","avatar","gary","depending","illegal","expansion","vary","hundreds","rome","arab","lincoln","helped","premier","tomorrow","purchased","milk","decide","consent","drama","visiting","performing","downtown","keyboard","contest","collected","nw","bands","boot","suitable","ff","absolutely","millions","lunch","dildo","audit","push","chamber","guinea","findings","muscle","featuring","iso","implement","clicking","scheduled","polls","typical","tower","yours","sum","misc","calculator","significantly","chicken","temporary","attend","shower","alan","sending","jason","tonight","dear","sufficient","holdem","shell","province","catholic","oak","vat","awareness","vancouver","governor","beer","seemed","contribution","measurement","swimming","spyware","formula","constitution","packaging","solar","jose","catch","jane","pakistan","ps","reliable","consultation","northwest","sir","doubt","earn","finder","unable","periods","classroom","tasks","democracy","attacks","kim","wallpaper","merchandise","const","resistance","doors","symptoms","resorts","biggest","memorial","visitor","twin","forth","insert","baltimore","gateway","ky","dont","alumni","drawing","candidates","charlotte","ordered","biological","fighting","transition","happens","preferences","spy","romance","instrument","bruce","split","themes","powers","heaven","br","bits","pregnant","twice","classification","focused","egypt","physician","hollywood","bargain","wikipedia","cellular","norway","vermont","asking","blocks","normally","lo","spiritual","hunting","diabetes","suit","ml","shift","chip","res","sit","bodies","photographs","cutting","wow","simon","writers","marks","flexible","loved","favourites","mapping","numerous","relatively","birds","satisfaction","represents","char","indexed","pittsburgh","superior","preferred","saved","paying","cartoon","shots","intellectual","moore","granted","choices","carbon","spending","comfortable","magnetic","interaction","listening","effectively","registry","crisis","outlook","massive","denmark","employed","bright","treat","header","cs","poverty","formed","piano","echo","que","grid","sheets","patrick","experimental","puerto","revolution","consolidation","displays","plasma","allowing","earnings","voip","mystery","landscape","dependent","mechanical","journey","delaware","bidding","consultants","risks","banner","applicant","charter","fig","barbara","cooperation","counties","acquisition","ports","implemented","sf","directories","recognized","dreams","blogger","notification","kg","licensing","stands","teach","occurred","textbooks","rapid","pull","hairy","diversity","cleveland","ut","reverse","deposit","seminar","investments","latina","nasa","wheels","sexcam","specify","accessibility","dutch","sensitive","templates","formats","tab","depends","boots","holds","router","concrete","si","editing","poland","folder","womens","css","completion","upload","pulse","universities","technique","contractors","milfhunter","voting","courts","notices","subscriptions","calculate","mc","detroit","alexander","broadcast","converted","metro","toshiba","anniversary","improvements","strip","specification","pearl","accident","nick","accessible","accessory","resident","plot","qty","possibly","airline","typically","representation","regard","pump","exists","arrangements","smooth","conferences","uniprotkb","beastiality","strike","consumption","birmingham","flashing","lp","narrow","afternoon","threat","surveys","sitting","putting","consultant","controller","ownership","committees","penis","legislative","researchers","vietnam","trailer","anne","castle","gardens","missed","malaysia","unsubscribe","antique","labels","willing","bio","molecular","upskirt","acting","heads","stored","exam","logos","residence","attorneys","milfs","antiques","density","hundred","ryan","operators","strange","sustainable","philippines","statistical","beds","breasts","mention","innovation","pcs","employers","grey","parallel","honda","amended","operate","bills","bold","bathroom","stable","opera","definitions","von","doctors","lesson","cinema","asset","ag","scan","elections","drinking","blowjobs","reaction","blank","enhanced","entitled","severe","generate","stainless","newspapers","hospitals","vi","deluxe","humor","aged","monitors","exception","lived","duration","bulk","successfully","indonesia","pursuant","sci","fabric","edt","visits","primarily","tight","domains","capabilities","pmid","contrast","recommendation","flying","recruitment","sin","berlin","cute","organized","ba","para","siemens","adoption","improving","cr","expensive","meant","capture","pounds","buffalo","organisations","plane","pg","explained","seed","programmes","desire","expertise","mechanism","camping","ee","jewellery","meets","welfare","peer","caught","eventually","marked","driven","measured","medline","bottle","agreements","considering","innovative","marshall","massage","rubber","conclusion","closing","tampa","thousand","meat","legend","grace","susan","ing","ks","adams","python","monster","alex","bang","villa","bone","columns","disorders","bugs","collaboration","hamilton","detection","ftp","cookies","inner","formation","tutorial","med","engineers","entity","cruises","gate","holder","proposals","moderator","sw","tutorials","settlement","portugal","lawrence","roman","duties","valuable","erotic","tone","collectables","ethics","forever","dragon","busy","captain","fantastic","imagine","brings","heating","leg","neck","hd","wing","governments","purchasing","scripts","abc","stereo","appointed","taste","dealing","commit","tiny","operational","rail","airlines","liberal","livecam","jay","trips","gap","sides","tube","turns","corresponding","descriptions","cache","belt","jacket","determination","animation","oracle","er","matthew","lease","productions","aviation","hobbies","proud","excess","disaster","console","commands","jr","telecommunications","instructor","giant","achieved","injuries","shipped","bestiality","seats","approaches","biz","alarm","voltage","anthony","nintendo","usual","loading","stamps","appeared","franklin","angle","rob","vinyl","highlights","mining","designers","melbourne","ongoing","worst","imaging","betting","scientists","liberty","wyoming","blackjack","argentina","era","convert","possibility","analyst","commissioner","dangerous","garage","exciting","reliability","thongs","gcc","unfortunately","respectively","volunteers","attachment","ringtone","finland","morgan","derived","pleasure","honor","asp","oriented","eagle","desktops","pants","columbus","nurse","prayer","appointment","workshops","hurricane","quiet","luck","postage","producer","represented","mortgages","dial","responsibilities","cheese","comic","carefully","jet","productivity","investors","crown","par","underground","diagnosis","maker","crack","principle","picks","vacations","gang","semester","calculated","cumshot","fetish","applies","casinos","appearance","smoke","apache","filters","incorporated","nv","craft","cake","notebooks","apart","fellow","blind","lounge","mad","algorithm","semi","coins","andy","gross","strongly","cafe","valentine","hilton","ken","proteins","horror","su","exp","familiar","capable","douglas","debian","till","involving","pen","investing","christopher","admission","epson","shoe","elected","carrying","victory","sand","madison","terrorism","joy","editions","cpu","mainly","ethnic","ran","parliament","actor","finds","seal","situations","fifth","allocated","citizen","vertical","corrections","structural","municipal","describes","prize","sr","occurs","jon","absolute","disabilities","consists","anytime","substance","prohibited","addressed","lies","pipe","soldiers","nr","guardian","lecture","simulation","layout","initiatives","ill","concentration","classics","lbs","lay","interpretation","horses","lol","dirty","deck","wayne","donate","taught","bankruptcy","mp","worker","optimization","alive","temple","substances","prove","discovered","wings","breaks","genetic","restrictions","participating","waters","promise","thin","exhibition","prefer","ridge","cabinet","modem","harris","mph","bringing","sick","dose","evaluate","tiffany","tropical","collect","bet","composition","toyota","streets","nationwide","vector","definitely","shaved","turning","buffer","purple","existence","commentary","larry","limousines","developments","def","immigration","destinations","lets","mutual","pipeline","necessarily","syntax","li","attribute","prison","skill","chairs","nl","everyday","apparently","surrounding","mountains","moves","popularity","inquiry","ethernet","checked","exhibit","throw","trend","sierra","visible","cats","desert","postposted","ya","oldest","rhode","nba","busty","coordinator","obviously","mercury","steven","handbook","greg","navigate","worse","summit","victims","epa","spaces","fundamental","burning","escape","coupons","somewhat","receiver","substantial","tr","progressive","cialis","bb","boats","glance","scottish","championship","arcade","richmond","sacramento","impossible","ron","russell","tells","obvious","fiber","depression","graph","covering","platinum","judgment","bedrooms","talks","filing","foster","modeling","passing","awarded","testimonials","trials","tissue","nz","memorabilia","clinton","masters","bonds","cartridge","alberta","explanation","folk","org","commons","cincinnati","subsection","fraud","electricity","permitted","spectrum","arrival","okay","pottery","emphasis","roger","aspect","workplace","awesome","mexican","confirmed","counts","priced","wallpapers","hist","crash","lift","desired","inter","closer","assumes","heights","shadow","riding","infection","firefox","lisa","expense","grove","eligibility","venture","clinic","korean","healing","princess","mall","entering","packet","spray","studios","involvement","dad","buttons","placement","observations","vbulletin","funded","thompson","winners","extend","roads","subsequent","pat","dublin","rolling","fell","motorcycle","yard","disclosure","establishment","memories","nelson","te","arrived","creates","faces","tourist","cocks","av","mayor","murder","sean","adequate","senator","yield","presentations","grades","cartoons","pour","digest","reg","lodging","tion","dust","hence","wiki","entirely","replaced","radar","rescue","undergraduate","losses","combat","reducing","stopped","occupation","lakes","butt","donations","associations","citysearch","closely","radiation","diary","seriously","kings","shooting","kent","adds","nsw","ear","flags","pci","baker","launched","elsewhere","pollution","conservative","guestbook","shock","effectiveness","walls","abroad","ebony","tie","ward","drawn","arthur","ian","visited","roof","walker","demonstrate","atmosphere","suggests","kiss","beast","ra","operated","experiment","targets","overseas","purchases","dodge","counsel","federation","pizza","invited","yards","assignment","chemicals","gordon","mod","farmers","rc","queries","bmw","rush","ukraine","absence","nearest","cluster","vendors","mpeg","whereas","yoga","serves","woods","surprise","lamp","rico","partial","shoppers","phil","everybody","couples","nashville","ranking","jokes","cst","http","ceo","simpson","twiki","sublime","counseling","palace","acceptable","satisfied","glad","wins","measurements","verify","globe","trusted","copper","milwaukee","rack","medication","warehouse","shareware","ec","rep","dicke","kerry","receipt","supposed","ordinary","nobody","ghost","violation","configure","stability","mit","applying","southwest","boss","pride","institutional","expectations","independence","knowing","reporter","metabolism","keith","champion","cloudy","linda","ross","personally","chile","anna","plenty","solo","sentence","throat","ignore","maria","uniform","excellence","wealth","tall","rm","somewhere","vacuum","dancing","attributes","recognize","brass","writes","plaza","pdas","outcomes","survival","quest","publish","sri","screening","toe","thumbnail","trans","jonathan","whenever","nova","lifetime","api","pioneer","booty","forgotten","acrobat","plates","acres","venue","athletic","thermal","essays","behaviour","vital","telling","fairly","coastal","config","cf","charity","intelligent","edinburgh","vt","excel","modes","obligation","campbell","wake","stupid","harbor","hungary","traveler","urw","segment","realize","regardless","lan","enemy","puzzle","rising","aluminum","wells","wishlist","opens","insight","sms","shit","restricted","republican","secrets","lucky","latter","merchants","thick","trailers","repeat","syndrome","philips","attendance","penalty","drum","glasses","enables","nec","iraqi","builder","vista","jessica","chips","terry","flood","foto","ease","arguments","amsterdam","orgy","arena","adventures","pupils","stewart","announcement","tabs","outcome","xx","appreciate","expanded","casual","grown","polish","lovely","extras","gm","centres","jerry","clause","smile","lands","ri","troops","indoor","bulgaria","armed","broker","charger","regularly","believed","pine","cooling","tend","gulf","rt","rick","trucks","cp","mechanisms","divorce","laura","shopper","tokyo","partly","nikon","customize","tradition","candy","pills","tiger","donald","folks","sensor","exposed","telecom","hunt","angels","deputy","indicators","sealed","thai","emissions","physicians","loaded","fred","complaint","scenes","experiments","balls","afghanistan","dd","boost","spanking","scholarship","governance","mill","founded","supplements","chronic","icons","tranny","moral","den","catering","aud","finger","keeps","pound","locate","camcorder","pl","trained","burn","implementing","roses","labs","ourselves","bread","tobacco","wooden","motors","tough","roberts","incident","gonna","dynamics","lie","crm","rf","conversation","decrease","cumshots","chest","pension","billy","revenues","emerging","worship","bukkake","capability","ak","fe","craig","herself","producing","churches","precision","damages","reserves","contributed","solve","shorts","reproduction","minority","td","diverse","amp","ingredients","sb","ah","johnny","sole","franchise","recorder","complaints","facing","sm","nancy","promotions","tones","passion","rehabilitation","maintaining","sight","laid","clay","defence","patches","weak","refund","usc","towns","environments","trembl","divided","blvd","reception","amd","wise","emails","cyprus","wv","odds","correctly","insider","seminars","consequences","makers","hearts","geography","appearing","integrity","worry","ns","discrimination","eve","carter","legacy","marc","pleased","danger","vitamin","widely","processed","phrase","genuine","raising","implications","functionality","paradise","hybrid","reads","roles","intermediate","emotional","sons","leaf","pad","glory","platforms","ja","bigger","billing","diesel","versus","combine","overnight","geographic","exceed","bs","rod","saudi","fault","cuba","hrs","preliminary","districts","introduce","silk","promotional","kate","chevrolet","babies","bi","karen","compiled","romantic","revealed","specialists","generator","albert","examine","jimmy","graham","suspension","bristol","margaret","compaq","sad","correction","wolf","slowly","authentication","communicate","rugby","supplement","showtimes","cal","portions","infant","promoting","sectors","samuel","fluid","grounds","fits","kick","regards","meal","ta","hurt","machinery","bandwidth","unlike","equation","baskets","probability","pot","dimension","wright","img","barry","proven","schedules","admissions","cached","warren","slip","studied","reviewer","involves","quarterly","rpm","profits","devil","grass","comply","marie","florist","illustrated","cherry","continental","alternate","deutsch","achievement","limitations","kenya","webcam","cuts","funeral","nutten","earrings","enjoyed","automated","chapters","pee","charlie","quebec","nipples","passenger","convenient","dennis","mars","francis","tvs","sized","manga","noticed","socket","silent","literary","egg","mhz","signals","caps","orientation","pill","theft","childhood","swing","symbols","lat","meta","humans","analog","facial","choosing","talent","dated","flexibility","seeker","wisdom","shoot","boundary","mint","packard","offset","payday","philip","elite","gi","spin","holders","believes","swedish","poems","deadline","jurisdiction","robot","displaying","witness","collins","equipped","stages","encouraged","sur","winds","powder","broadway","acquired","assess","wash","cartridges","stones","entrance","gnome","roots","declaration","losing","attempts","gadgets","noble","glasgow","automation","impacts","rev","gospel","advantages","shore","loves","induced","ll","knight","preparing","loose","aims","recipient","linking","extensions","appeals","cl","earned","illness","islamic","athletics","southeast","ieee","ho","alternatives","pending","parker","determining","lebanon","corp","personalized","kennedy","gt","sh","conditioning","teenage","soap","ae","triple","cooper","nyc","vincent","jam","secured","unusual","answered","partnerships","destruction","slots","increasingly","migration","disorder","routine","toolbar","basically","rocks","conventional","titans","applicants","wearing","axis","sought","genes","mounted","habitat","firewall","median","guns","scanner","herein","occupational","animated","horny","judicial","rio","hs","adjustment","hero","integer","treatments","bachelor","attitude","camcorders","engaged","falling","basics","montreal","carpet","rv","struct","lenses","binary","genetics","attended","difficulty","punk","collective","coalition","pi","dropped","enrollment","duke","walter","ai","pace","besides","wage","producers","ot","collector","arc","hosts","interfaces","advertisers","moments","atlas","strings","dawn","representing","observation","feels","torture","carl","deleted","coat","mitchell","mrs","rica","restoration","convenience","returning","ralph","opposition","container","yr","defendant","warner","confirmation","app","embedded","inkjet","supervisor","wizard","corps","actors","liver","peripherals","liable","brochure","morris","bestsellers","petition","eminem","recall","antenna","picked","assumed","departure","minneapolis","belief","killing","bikini","memphis","shoulder","decor","lookup","texts","harvard","brokers","roy","ion","diameter","ottawa","doll","ic","podcast","tit","seasons","peru","interactions","refine","bidder","singer","evans","herald","literacy","fails","aging","nike","intervention","pissing","fed","plugin","attraction","diving","invite","modification","alice","latinas","suppose","customized","reed","involve","moderate","terror","younger","thirty","mice","opposite","understood","rapidly","dealtime","ban","temp","intro","mercedes","zus","assurance","fisting","clerk","happening","vast","mills","outline","amendments","tramadol","holland","receives","jeans","metropolitan","compilation","verification","fonts","ent","odd","wrap","refers","mood","favor","veterans","quiz","mx","sigma","gr","attractive","xhtml","occasion","recordings","jefferson","victim","demands","sleeping","careful","ext","beam","gardening","obligations","arrive","orchestra","sunset","tracked","moreover","minimal","polyphonic","lottery","tops","framed","aside","outsourcing","licence","adjustable","allocation","michelle","essay","discipline","amy","ts","demonstrated","dialogue","identifying","alphabetical","camps","declared","dispatched","aaron","handheld","trace","disposal","shut","florists","packs","ge","installing","switches","romania","voluntary","ncaa","thou","consult","phd","greatly","blogging","mask","cycling","midnight","ng","commonly","pe","photographer","inform","turkish","coal","cry","messaging","pentium","quantum","murray","intent","tt","zoo","largely","pleasant","announce","constructed","additions","requiring","spoke","aka","arrow","engagement","sampling","rough","weird","tee","refinance","lion","inspired","holes","weddings","blade","suddenly","oxygen","cookie","meals","canyon","goto","meters","merely","calendars","arrangement","conclusions","passes","bibliography","pointer","compatibility","stretch","durham","furthermore","permits","cooperative","muslim","xl","neil","sleeve","netscape","cleaner","cricket","beef","feeding","stroke","township","rankings","measuring","cad","hats","robin","robinson","jacksonville","strap","headquarters","sharon","crowd","tcp","transfers","surf","olympic","transformation","remained","attachments","dv","dir","entities","customs","administrators","personality","rainbow","hook","roulette","decline","gloves","israeli","medicare","cord","skiing","cloud","facilitate","subscriber","valve","val","hewlett","explains","proceed","flickr","feelings","knife","jamaica","priorities","shelf","bookstore","timing","liked","parenting","adopt","denied","fotos","incredible","britney","freeware","fucked","donation","outer","crop","deaths","rivers","commonwealth","pharmaceutical","manhattan","tales","katrina","workforce","islam","nodes","tu","fy","thumbs","seeds","cited","lite","ghz","hub","targeted","organizational","skype","realized","twelve","founder","decade","gamecube","rr","dispute","portuguese","tired","titten","adverse","everywhere","excerpt","eng","steam","discharge","ef","drinks","ace","voices","acute","halloween","climbing","stood","sing","tons","perfume","carol","honest","albany","hazardous","restore","stack","methodology","somebody","sue","ep","housewares","reputation","resistant","democrats","recycling","hang","gbp","curve","creator","amber","qualifications","museums","coding","slideshow","tracker","variation","passage","transferred","trunk","hiking","lb","damn","pierre","jelsoft","headset","photograph","oakland","colombia","waves","camel","distributor","lamps","underlying","hood","wrestling","suicide","archived","photoshop","jp","chi","bt","arabia","gathering","projection","juice","chase","mathematical","logical","sauce","fame","extract","specialized","diagnostic","panama","indianapolis","af","payable","corporations","courtesy","criticism","automobile","confidential","rfc","statutory","accommodations","athens","northeast","downloaded","judges","sl","seo","retired","isp","remarks","detected","decades","paintings","walked","arising","nissan","bracelet","ins","eggs","juvenile","injection","yorkshire","populations","protective","afraid","acoustic","railway","cassette","initially","indicator","pointed","hb","jpg","causing","mistake","norton","locked","eliminate","tc","fusion","mineral","sunglasses","ruby","steering","beads","fortune","preference","canvas","threshold","parish","claimed","screens","cemetery","planner","croatia","flows","stadium","venezuela","exploration","mins","fewer","sequences","coupon","nurses","ssl","stem","proxy","gangbang","astronomy","lanka","opt","edwards","drew","contests","flu","translate","announces","mlb","costume","tagged","berkeley","voted","killer","bikes","gates","adjusted","rap","tune","bishop","pulled","corn","gp","shaped","compression","seasonal","establishing","farmer","counters","puts","constitutional","grew","perfectly","tin","slave","instantly","cultures","norfolk","coaching","examined","trek","encoding","litigation","submissions","oem","heroes","painted","lycos","ir","zdnet","broadcasting","horizontal","artwork","cosmetic","resulted","portrait","terrorist","informational","ethical","carriers","ecommerce","mobility","floral","builders","ties","struggle","schemes","suffering","neutral","fisher","rat","spears","prospective","dildos","bedding","ultimately","joining","heading","equally","artificial","bearing","spectacular","coordination","connector","brad","combo","seniors","worlds","guilty","affiliated","activation","naturally","haven","tablet","jury","dos","tail","subscribers","charm","lawn","violent","mitsubishi","underwear","basin","soup","potentially","ranch","constraints","crossing","inclusive","dimensional","cottage","drunk","considerable","crimes","resolved","mozilla","byte","toner","nose","latex","branches","anymore","oclc","delhi","holdings","alien","locator","selecting","processors","pantyhose","plc","broke","nepal","zimbabwe","difficulties","juan","complexity","msg","constantly","browsing","resolve","barcelona","presidential","documentary","cod","territories","melissa","moscow","thesis","thru","jews","nylon","palestinian","discs","rocky","bargains","frequent","trim","nigeria","ceiling","pixels","ensuring","hispanic","cv","cb","legislature","hospitality","gen","anybody","procurement","diamonds","espn","fleet","untitled","bunch","totals","marriott","singing","theoretical","afford","exercises","starring","referral","nhl","surveillance","optimal","quit","distinct","protocols","lung","highlight","substitute","inclusion","hopefully","brilliant","turner","sucking","cents","reuters","ti","fc","gel","todd","spoken","omega","evaluated","stayed","civic","assignments","fw","manuals","doug","sees","termination","watched","saver","thereof","grill","households","gs","redeem","rogers","grain","aaa","authentic","regime","wanna","wishes","bull","montgomery","architectural","louisville","depend","differ","macintosh","movements","ranging","monica","repairs","breath","amenities","virtually","cole","mart","candle","hanging","colored","authorization","tale","verified","lynn","formerly","projector","bp","situated","comparative","std","seeks","herbal","loving","strictly","routing","docs","stanley","psychological","surprised","retailer","vitamins","elegant","gains","renewal","vid","genealogy","opposed","deemed","scoring","expenditure","panties","brooklyn","liverpool","sisters","critics","connectivity","spots","oo","algorithms","hacker","madrid","similarly","margin","coin","bbw","solely","fake","salon","collaborative","norman","fda","excluding","turbo","headed","voters","cure","madonna","commander","arch","ni","murphy","thinks","thats","suggestion","hdtv","soldier","phillips","asin","aimed","justin","bomb","harm","interval","mirrors","spotlight","tricks","reset","brush","investigate","thy","expansys","panels","repeated","assault","connecting","spare","logistics","deer","kodak","tongue","bowling","tri","danish","pal","monkey","proportion","filename","skirt","florence","invest","honey","um","analyses","drawings","significance","scenario","ye","fs","lovers","atomic","approx","symposium","arabic","gauge","essentials","junction","protecting","nn","faced","mat","rachel","solving","transmitted","weekends","screenshots","produces","oven","ted","intensive","chains","kingston","sixth","engage","deviant","noon","switching","quoted","adapters","correspondence","farms","imports","supervision","cheat","bronze","expenditures","sandy","separation","testimony","suspect","celebrities","macro","sender","mandatory","boundaries","crucial","syndication","gym","celebration","kde","adjacent","filtering","tuition","spouse","exotic","viewer","signup","threats","luxembourg","puzzles","reaching","vb","damaged","cams","receptor","piss","laugh","joel","surgical","destroy","citation","pitch","autos","yo","premises","perry","proved","offensive","imperial","dozen","benjamin","deployment","teeth","cloth","studying","colleagues","stamp","lotus","salmon","olympus","separated","proc","cargo","tan","directive","fx","salem","mate","dl","starter","upgrades","likes","butter","pepper","weapon","luggage","burden","chef","tapes","zones","races","isle","stylish","slim","maple","luke","grocery","offshore","governing","retailers","depot","kenneth","comp","alt","pie","blend","harrison","ls","julie","occasionally","cbs","attending","emission","pete","spec","finest","realty","janet","bow","penn","recruiting","apparent","instructional","phpbb","autumn","traveling","probe","midi","permissions","biotechnology","toilet","ranked","jackets","routes","packed","excited","outreach","helen","mounting","recover","tied","lopez","balanced","prescribed","catherine","timely","talked","upskirts","debug","delayed","chuck","reproduced","hon","dale","explicit","calculation","villas","ebook","consolidated","boob","exclude","peeing","occasions","brooks","equations","newton","oils","sept","exceptional","anxiety","bingo","whilst","spatial","respondents","unto","lt","ceramic","prompt","precious","minds","annually","considerations","scanners","atm","xanax","eq","pays","cox","fingers","sunny","ebooks","delivers","je","queensland","necklace","musicians","leeds","composite","unavailable","cedar","arranged","lang","theaters","advocacy","raleigh","stud","fold","essentially","designing","threaded","uv","qualify","fingering","blair","hopes","assessments","cms","mason","diagram","burns","pumps","slut","ejaculation","footwear","sg","vic","beijing","peoples","victor","mario","pos","attach","licenses","utils","removing","advised","brunswick","spider","phys","ranges","pairs","sensitivity","trails","preservation","hudson","isolated","calgary","interim","assisted","divine","streaming","approve","chose","compound","intensity","technological","syndicate","abortion","dialog","venues","blast","wellness","calcium","newport","antivirus","addressing","pole","discounted","indians","shield","harvest","membrane","prague","previews","bangladesh","constitute","locally","concluded","pickup","desperate","mothers","nascar","iceland","demonstration","governmental","manufactured","candles","graduation","mega","bend","sailing","variations","moms","sacred","addiction","morocco","chrome","tommy","springfield","refused","brake","exterior","greeting","ecology","oliver","congo","glen","botswana","nav","delays","synthesis","olive","undefined","unemployment","cyber","verizon","scored","enhancement","newcastle","clone","dicks","velocity","lambda","relay","composed","tears","performances","oasis","baseline","cab","angry","fa","societies","silicon","brazilian","identical","petroleum","compete","ist","norwegian","lover","belong","honolulu","beatles","lips","escort","retention","exchanges","pond","rolls","thomson","barnes","soundtrack","wondering","malta","daddy","lc","ferry","rabbit","profession","seating","dam","cnn","separately","physiology","lil","collecting","das","exports","omaha","tire","participant","scholarships","recreational","dominican","chad","electron","loads","friendship","heather","passport","motel","unions","treasury","warrant","sys","solaris","frozen","occupied","josh","royalty","scales","rally","observer","sunshine","strain","drag","ceremony","somehow","arrested","expanding","provincial","investigations","icq","ripe","yamaha","rely","medications","hebrew","gained","rochester","dying","laundry","stuck","solomon","placing","stops","homework","adjust","assessed","advertiser","enabling","encryption","filling","downloadable","sophisticated","imposed","silence","scsi","focuses","soviet","possession","cu","laboratories","treaty","vocal","trainer","organ","stronger","volumes","advances","vegetables","lemon","toxic","dns","thumbnails","darkness","pty","ws","nuts","nail","bizrate","vienna","implied","span","stanford","sox","stockings","joke","respondent","packing","statute","rejected","satisfy","destroyed","shelter","chapel","gamespot","manufacture","layers","wordpress","guided","vulnerability","accountability","celebrate","accredited","appliance","compressed","bahamas","powell","mixture","zoophilia","bench","univ","tub","rider","scheduling","radius","perspectives","mortality","logging","hampton","christians","borders","therapeutic","pads","butts","inns","bobby","impressive","sheep","accordingly","architect","railroad","lectures","challenging","wines","nursery","harder","cups","ash","microwave","cheapest","accidents","travesti","relocation","stuart","contributors","salvador","ali","salad","np","monroe","tender","violations","foam","temperatures","paste","clouds","competitions","discretion","tft","tanzania","preserve","jvc","poem","vibrator","unsigned","staying","cosmetics","easter","theories","repository","praise","jeremy","venice","jo","concentrations","vibrators","estonia","christianity","veteran","streams","landing","signing","executed","katie","negotiations","realistic","dt","cgi","showcase","integral","asks","relax","namibia","generating","christina","congressional","synopsis","hardly","prairie","reunion","composer","bean","sword","absent","photographic","sells","ecuador","hoping","accessed","spirits","modifications","coral","pixel","float","colin","bias","imported","paths","bubble","por","acquire","contrary","millennium","tribune","vessel","acids","focusing","viruses","cheaper","admitted","dairy","admit","mem","fancy","equality","samoa","gc","achieving","tap","stickers","fisheries","exceptions","reactions","leasing","lauren","beliefs","ci","macromedia","companion","squad","analyze","ashley","scroll","relate","divisions","swim","wages","additionally","suffer","forests","fellowship","nano","invalid","concerts","martial","males","victorian","retain","colours","execute","tunnel","genres","cambodia","patents","copyrights","yn","chaos","lithuania","mastercard","wheat","chronicles","obtaining","beaver","updating","distribute","readings","decorative","kijiji","confused","compiler","enlargement","eagles","bases","vii","accused","bee","campaigns","unity","loud","conjunction","bride","rats","defines","airports","instances","indigenous","begun","cfr","brunette","packets","anchor","socks","validation","parade","corruption","stat","trigger","incentives","cholesterol","gathered","essex","slovenia","notified","differential","beaches","folders","dramatic","surfaces","terrible","routers","cruz","pendant","dresses","baptist","scientist","starsmerchant","hiring","clocks","arthritis","bios","females","wallace","nevertheless","reflects","taxation","fever","pmc","cuisine","surely","practitioners","transcript","myspace","theorem","inflation","thee","nb","ruth","pray","stylus","compounds","pope","drums","contracting","topless","arnold","structured","reasonably","jeep","chicks","bare","hung","cattle","mba","radical","graduates","rover","recommends","controlling","treasure","reload","distributors","flame","levitra","tanks","assuming","monetary","elderly","pit","arlington","mono","particles","floating","extraordinary","tile","indicating","bolivia","spell","hottest","stevens","coordinate","kuwait","exclusively","emily","alleged","limitation","widescreen","compile","squirting","webster","struck","rx","illustration","plymouth","warnings","construct","apps","inquiries","bridal","annex","mag","gsm","inspiration","tribal","curious","affecting","freight","rebate","meetup","eclipse","sudan","ddr","downloading","rec","shuttle","aggregate","stunning","cycles","affects","forecasts","detect","sluts","actively","ciao","ampland","knee","prep","pb","complicated","chem","fastest","butler","shopzilla","injured","decorating","payroll","cookbook","expressions","ton","courier","uploaded","shakespeare","hints","collapse","americas","connectors","twinks","unlikely","oe","gif","pros","conflicts","techno","beverage","tribute","wired","elvis","immune","latvia","travelers","forestry","barriers","cant","jd","rarely","gpl","infected","offerings","martha","genesis","barrier","argue","incorrect","trains","metals","bicycle","furnishings","letting","arise","guatemala","celtic","thereby","irc","jamie","particle","perception","minerals","advise","humidity","bottles","boxing","wy","dm","bangkok","renaissance","pathology","sara","bra","ordinance","hughes","photographers","bitch","infections","jeffrey","chess","operates","brisbane","configured","survive","oscar","festivals","menus","joan","possibilities","duck","reveal","canal","amino","phi","contributing","herbs","clinics","mls","cow","manitoba","analytical","missions","watson","lying","costumes","strict","dive","saddam","circulation","drill","offense","threesome","bryan","cet","protest","handjob","assumption","jerusalem","hobby","tries","transexuales","invention","nickname","fiji","technician","inline","executives","enquiries","washing","audi","staffing","cognitive","exploring","trick","enquiry","closure","raid","ppc","timber","volt","intense","div","playlist","registrar","showers","supporters","ruling","steady","dirt","statutes","withdrawal","myers","drops","predicted","wider","saskatchewan","jc","cancellation","plugins","enrolled","sensors","screw","ministers","publicly","hourly","blame","geneva","freebsd","veterinary","acer","prostores","reseller","dist","handed","suffered","intake","informal","relevance","incentive","butterfly","tucson","mechanics","heavily","swingers","fifty","headers","mistakes","numerical","ons","geek","uncle","defining","xnxx","counting","reflection","sink","accompanied","assure","invitation","devoted","princeton","jacob","sodium","randy","spirituality","hormone","meanwhile","proprietary","timothy","childrens","brick","grip","naval","thumbzilla","medieval","porcelain","avi","bridges","pichunter","captured","watt","thehun","decent","casting","dayton","translated","shortly","cameron","columnists","pins","carlos","reno","donna","andreas","warrior","diploma","cabin","innocent","bdsm","scanning","ide","consensus","polo","valium","copying","rpg","delivering","cordless","patricia","horn","eddie","uganda","fired","journalism","pd","prot","trivia","adidas","perth","frog","grammar","intention","syria","disagree","klein","harvey","tires","logs","undertaken","tgp","hazard","retro","leo","livesex","statewide","semiconductor","gregory","episodes","boolean","circular","anger","diy","mainland","illustrations","suits","chances","interact","snap","happiness","arg","substantially","bizarre","glenn","ur","auckland","olympics","fruits","identifier","geo","worldsex","ribbon","calculations","doe","jpeg","conducting","startup","suzuki","trinidad","ati","kissing","wal","handy","swap","exempt","crops","reduces","accomplished","calculators","geometry","impression","abs","slovakia","flip","guild","correlation","gorgeous","capitol","sim","dishes","rna","barbados","chrysler","nervous","refuse","extends","fragrance","mcdonald","replica","plumbing","brussels","tribe","neighbors","trades","superb","buzz","transparent","nuke","rid","trinity","charleston","handled","legends","boom","calm","champions","floors","selections","projectors","inappropriate","exhaust","comparing","shanghai","speaks","burton","vocational","davidson","copied","scotia","farming","gibson","pharmacies","fork","troy","ln","roller","introducing","batch","organize","appreciated","alter","nicole","latino","ghana","edges","uc","mixing","handles","skilled","fitted","albuquerque","harmony","distinguished","asthma","projected","assumptions","shareholders","twins","developmental","rip","zope","regulated","triangle","amend","anticipated","oriental","reward","windsor","zambia","completing","gmbh","buf","ld","hydrogen","webshots","sprint","comparable","chick","advocate","sims","confusion","copyrighted","tray","inputs","warranties","genome","escorts","documented","thong","medal","paperbacks","coaches","vessels","harbour","walks","sucks","sol","keyboards","sage","knives","eco","vulnerable","arrange","artistic","bat","honors","booth","indie","reflected","unified","bones","breed","detector","ignored","polar","fallen","precise","sussex","respiratory","notifications","msgid","transexual","mainstream","invoice","evaluating","lip","subcommittee","sap","gather","suse","maternity","backed","alfred","colonial","mf","carey","motels","forming","embassy","cave","journalists","danny","rebecca","slight","proceeds","indirect","amongst","wool","foundations","msgstr","arrest","volleyball","mw","adipex","horizon","nu","deeply","toolbox","ict","marina","liabilities","prizes","bosnia","browsers","decreased","patio","dp","tolerance","surfing","creativity","lloyd","describing","optics","pursue","lightning","overcome","eyed","ou","quotations","grab","inspector","attract","brighton","beans","bookmarks","ellis","disable","snake","succeed","leonard","lending","oops","reminder","nipple","xi","searched","behavioral","riverside","bathrooms","plains","sku","ht","raymond","insights","abilities","initiated","sullivan","za","midwest","karaoke","trap","lonely","fool","ve","nonprofit","lancaster","suspended","hereby","observe","julia","containers","attitudes","karl","berry","collar","simultaneously","racial","integrate","bermuda","amanda","sociology","mobiles","screenshot","exhibitions","kelkoo","confident","retrieved","exhibits","officially","consortium","dies","terrace","bacteria","pts","replied","seafood","novels","rh","rrp","recipients","playboy","ought","delicious","traditions","fg","jail","safely","finite","kidney","periodically","fixes","sends","durable","mazda","allied","throws","moisture","hungarian","roster","referring","symantec","spencer","wichita","nasdaq","uruguay","ooo","hz","transform","timer","tablets","tuning","gotten","educators","tyler","futures","vegetable","verse","highs","humanities","independently","wanting","custody","scratch","launches","ipaq","alignment","masturbating","henderson","bk","britannica","comm","ellen","competitors","nhs","rocket","aye","bullet","towers","racks","lace","nasty","visibility","latitude","consciousness","ste","tumor","ugly","deposits","beverly","mistress","encounter","trustees","watts","duncan","reprints","hart","bernard","resolutions","ment","accessing","forty","tubes","attempted","col","midlands","priest","floyd","ronald","analysts","queue","dx","sk","trance","locale","nicholas","biol","yu","bundle","hammer","invasion","witnesses","runner","rows","administered","notion","sq","skins","mailed","oc","fujitsu","spelling","arctic","exams","rewards","beneath","strengthen","defend","aj","frederick","medicaid","treo","infrared","seventh","gods","une","welsh","belly","aggressive","tex","advertisements","quarters","stolen","cia","sublimedirectory","soonest","haiti","disturbed","determines","sculpture","poly","ears","dod","wp","fist","naturals","neo","motivation","lenders","pharmacology","fitting","fixtures","bloggers","mere","agrees","passengers","quantities","petersburg","consistently","powerpoint","cons","surplus","elder","sonic","obituaries","cheers","dig","taxi","punishment","appreciation","subsequently","om","belarus","nat","zoning","gravity","providence","thumb","restriction","incorporate","backgrounds","treasurer","guitars","essence","flooring","lightweight","ethiopia","tp","mighty","athletes","humanity","transcription","jm","holmes","complications","scholars","dpi","scripting","gis","remembered","galaxy","chester","snapshot","caring","loc","worn","synthetic","shaw","vp","segments","testament","expo","dominant","twist","specifics","itunes","stomach","partially","buried","cn","newbie","minimize","darwin","ranks","wilderness","debut","generations","tournaments","bradley","deny","anatomy","bali","judy","sponsorship","headphones","fraction","trio","proceeding","cube","defects","volkswagen","uncertainty","breakdown","milton","marker","reconstruction","subsidiary","strengths","clarity","rugs","sandra","adelaide","encouraging","furnished","monaco","settled","folding","emirates","terrorists","airfare","comparisons","beneficial","distributions","vaccine","belize","crap","fate","viewpicture","promised","volvo","penny","robust","bookings","threatened","minolta","republicans","discusses","gui","porter","gras","jungle","ver","rn","responded","rim","abstracts","zen","ivory","alpine","dis","prediction","pharmaceuticals","andale","fabulous","remix","alias","thesaurus","individually","battlefield","literally","newer","kay","ecological","spice","oval","implies","cg","soma","ser","cooler","appraisal","consisting","maritime","periodic","submitting","overhead","ascii","prospect","shipment","breeding","citations","geographical","donor","mozambique","tension","href","benz","trash","shapes","wifi","tier","fwd","earl","manor","envelope","diane","homeland","disclaimers","championships","excluded","andrea","breeds","rapids","disco","sheffield","bailey","aus","endif","finishing","emotions","wellington","incoming","prospects","lexmark","cleaners","bulgarian","hwy","eternal","cashiers","guam","cite","aboriginal","remarkable","rotation","nam","preventing","productive","boulevard","eugene","ix","gdp","pig","metric","compliant","minus","penalties","bennett","imagination","hotmail","refurbished","joshua","armenia","varied","grande","closest","activated","actress","mess","conferencing","assign","armstrong","politicians","trackbacks","lit","accommodate","tigers","aurora","una","slides","milan","premiere","lender","villages","shade","chorus","christine","rhythm","digit","argued","dietary","symphony","clarke","sudden","accepting","precipitation","marilyn","lions","findlaw","ada","pools","tb","lyric","claire","isolation","speeds","sustained","matched","approximate","rope","carroll","rational","programmer","fighters","chambers","dump","greetings","inherited","warming","incomplete","vocals","chronicle","fountain","chubby","grave","legitimate","biographies","burner","yrs","foo","investigator","gba","plaintiff","finnish","gentle","bm","prisoners","deeper","muslims","hose","mediterranean","nightlife","footage","howto","worthy","reveals","architects","saints","entrepreneur","carries","sig","freelance","duo","excessive","devon","screensaver","helena","saves","regarded","valuation","unexpected","cigarette","fog","characteristic","marion","lobby","egyptian","tunisia","metallica","outlined","consequently","headline","treating","punch","appointments","str","gotta","cowboy","narrative","bahrain","enormous","karma","consist","betty","queens","academics","pubs","quantitative","shemales","lucas","screensavers","subdivision","tribes","vip","defeat","clicks","distinction","honduras","naughty","hazards","insured","harper","livestock","mardi","exemption","tenant","sustainability","cabinets","tattoo","shake","algebra","shadows","holly","formatting","silly","nutritional","yea","mercy","hartford","freely","marcus","sunrise","wrapping","mild","fur","nicaragua","weblogs","timeline","tar","belongs","rj","readily","affiliation","soc","fence","nudist","infinite","diana","ensures","relatives","lindsay","clan","legally","shame","satisfactory","revolutionary","bracelets","sync","civilian","telephony","mesa","fatal","remedy","realtors","breathing","briefly","thickness","adjustments","graphical","genius","discussing","aerospace","fighter","meaningful","flesh","retreat","adapted","barely","wherever","estates","rug","democrat","borough","maintains","failing","shortcuts","ka","retained","voyeurweb","pamela","andrews","marble","extending","jesse","specifies","hull","logitech","surrey","briefing","belkin","dem","accreditation","wav","blackberry","highland","meditation","modular","microphone","macedonia","combining","brandon","instrumental","giants","organizing","shed","balloon","moderators","winston","memo","ham","solved","tide","kazakhstan","hawaiian","standings","partition","invisible","gratuit","consoles","funk","fbi","qatar","magnet","translations","porsche","cayman","jaguar","reel","sheer","commodity","posing","wang","kilometers","rp","bind","thanksgiving","rand","hopkins","urgent","guarantees","infants","gothic","cylinder","witch","buck","indication","eh","congratulations","tba","cohen","sie","usgs","puppy","kathy","acre","graphs","surround","cigarettes","revenge","expires","enemies","lows","controllers","aqua","chen","emma","consultancy","finances","accepts","enjoying","conventions","eva","patrol","smell","pest","hc","italiano","coordinates","rca","fp","carnival","roughly","sticker","promises","responding","reef","physically","divide","stakeholders","hydrocodone","gst","consecutive","cornell","satin","bon","deserve","attempting","mailto","promo","jj","representations","chan","worried","tunes","garbage","competing","combines","mas","beth","bradford","len","phrases","kai","peninsula","chelsea","boring","reynolds","dom","jill","accurately","speeches","reaches","schema","considers","sofa","catalogs","ministries","vacancies","quizzes","parliamentary","obj","prefix","lucia","savannah","barrel","typing","nerve","dans","planets","deficit","boulder","pointing","renew","coupled","viii","myanmar","metadata","harold","circuits","floppy","texture","handbags","jar","ev","somerset","incurred","acknowledge","thoroughly","antigua","nottingham","thunder","tent","caution","identifies","questionnaire","qualification","locks","modelling","namely","miniature","dept","hack","dare","euros","interstate","pirates","aerial","hawk","consequence","rebel","systematic","perceived","origins","hired","makeup","textile","lamb","madagascar","nathan","tobago","presenting","cos","troubleshooting","uzbekistan","indexes","pac","rl","erp","centuries","gl","magnitude","ui","richardson","hindu","dh","fragrances","vocabulary","licking","earthquake","vpn","fundraising","fcc","markers","weights","albania","geological","assessing","lasting","wicked","eds","introduces","kills","roommate","webcams","pushed","webmasters","ro","df","computational","acdbentity","participated","junk","handhelds","wax","lucy","answering","hans","impressed","slope","reggae","failures","poet","conspiracy","surname","theology","nails","evident","whats","rides","rehab","epic","saturn","organizer","nut","allergy","sake","twisted","combinations","preceding","merit","enzyme","cumulative","zshops","planes","edmonton","tackle","disks","condo","pokemon","amplifier","ambien","arbitrary","prominent","retrieve","lexington","vernon","sans","worldcat","titanium","irs","fairy","builds","contacted","shaft","lean","bye","cdt","recorders","occasional","leslie","casio","deutsche","ana","postings","innovations","kitty","postcards","dude","drain","monte","fires","algeria","blessed","luis","reviewing","cardiff","cornwall","favors","potato","panic","explicitly","sticks","leone","transsexual","ez","citizenship","excuse","reforms","basement","onion","strand","pf","sandwich","uw","lawsuit","alto","informative","girlfriend","bloomberg","cheque","hierarchy","influenced","banners","reject","eau","abandoned","bd","circles","italic","beats","merry","mil","scuba","gore","complement","cult","dash","passive","mauritius","valued","cage","checklist","bangbus","requesting","courage","verde","lauderdale","scenarios","gazette","hitachi","divx","extraction","batman","elevation","hearings","coleman","hugh","lap","utilization","beverages","calibration","jake","eval","efficiently","anaheim","ping","textbook","dried","entertaining","prerequisite","luther","frontier","settle","stopping","refugees","knights","hypothesis","palmer","medicines","flux","derby","sao","peaceful","altered","pontiac","regression","doctrine","scenic","trainers","muze","enhancements","renewable","intersection","passwords","sewing","consistency","collectors","conclude","recognised","munich","oman","celebs","gmc","propose","hh","azerbaijan","lighter","rage","adsl","uh","prix","astrology","advisors","pavilion","tactics","trusts","occurring","supplemental","travelling","talented","annie","pillow","induction","derek","precisely","shorter","harley","spreading","provinces","relying","finals","paraguay","steal","parcel","refined","fd","bo","fifteen","widespread","incidence","fears","predict","boutique","acrylic","rolled","tuner","avon","incidents","peterson","rays","asn","shannon","toddler","enhancing","flavor","alike","walt","homeless","horrible","hungry","metallic","acne","blocked","interference","warriors","palestine","listprice","libs","undo","cadillac","atmospheric","malawi","wm","pk","sagem","knowledgestorm","dana","halo","ppm","curtis","parental","referenced","strikes","lesser","publicity","marathon","ant","proposition","gays","pressing","gasoline","apt","dressed","scout","belfast","exec","dealt","niagara","inf","eos","warcraft","charms","catalyst","trader","bucks","allowance","vcr","denial","uri","designation","thrown","prepaid","raises","gem","duplicate","electro","criterion","badge","wrist","civilization","analyzed","vietnamese","heath","tremendous","ballot","lexus","varying","remedies","validity","trustee","maui","handjobs","weighted","angola","squirt","performs","plastics","realm","corrected","jenny","helmet","salaries","postcard","elephant","yemen","encountered","tsunami","scholar","nickel","internationally","surrounded","psi","buses","expedia","geology","pct","wb","creatures","coating","commented","wallet","cleared","smilies","vids","accomplish","boating","drainage","shakira","corners","broader","vegetarian","rouge","yeast","yale","newfoundland","sn","qld","pas","clearing","investigated","dk","ambassador","coated","intend","stephanie","contacting","vegetation","doom","findarticles","louise","kenny","specially","owen","routines","hitting","yukon","beings","bite","issn","aquatic","reliance","habits","striking","myth","infectious","podcasts","singh","gig","gilbert","sas","ferrari","continuity","brook","fu","outputs","phenomenon","ensemble","insulin","assured","biblical","weed","conscious","accent","mysimon","eleven","wives","ambient","utilize","mileage","oecd","prostate","adaptor","auburn","unlock","hyundai","pledge","vampire","angela","relates","nitrogen","xerox","dice","merger","softball","referrals","quad","dock","differently","firewire","mods","nextel","framing","organised","musician","blocking","rwanda","sorts","integrating","vsnet","limiting","dispatch","revisions","papua","restored","hint","armor","riders","chargers","remark","dozens","varies","msie","reasoning","wn","liz","rendered","picking","charitable","guards","annotated","ccd","sv","convinced","openings","buys","burlington","replacing","researcher","watershed","councils","occupations","acknowledged","nudity","kruger","pockets","granny","pork","zu","equilibrium","viral","inquire","pipes","characterized","laden","aruba","cottages","realtor","merge","privilege","edgar","develops","qualifying","chassis","dubai","estimation","barn","pushing","llp","fleece","pediatric","boc","fare","dg","asus","pierce","allan","dressing","techrepublic","sperm","vg","bald","filme","craps","fuji","frost","leon","institutes","mold","dame","fo","sally","yacht","tracy","prefers","drilling","brochures","herb","tmp","alot","ate","breach","whale","traveller","appropriations","suspected","tomatoes","benchmark","beginners","instructors","highlighted","bedford","stationery","idle","mustang","unauthorized","clusters","antibody","competent","momentum","fin","wiring","io","pastor","mud","calvin","uni","shark","contributor","demonstrates","phases","grateful","emerald","gradually","laughing","grows","cliff","desirable","tract","ul","ballet","ol","journalist","abraham","js","bumper","afterwards","webpage","religions","garlic","hostels","shine","senegal","explosion","pn","banned","wendy","briefs","signatures","diffs","cove","mumbai","ozone","disciplines","casa","mu","daughters","conversations","radios","tariff","nvidia","opponent","pasta","simplified","muscles","serum","wrapped","swift","motherboard","runtime","inbox","focal","bibliographic","vagina","eden","distant","incl","champagne","ala","decimal","hq","deviation","superintendent","propecia","dip","nbc","samba","hostel","housewives","employ","mongolia","penguin","magical","influences","inspections","irrigation","miracle","manually","reprint","reid","wt","hydraulic","centered","robertson","flex","yearly","penetration","wound","belle","rosa","conviction","hash","omissions","writings","hamburg","lazy","mv","mpg","retrieval","qualities","cindy","lolita","fathers","carb","charging","cas","marvel","lined","cio","dow","prototype","importantly","rb","petite","apparatus","upc","terrain","dui","pens","explaining","yen","strips","gossip","rangers","nomination","empirical","mh","rotary","worm","dependence","discrete","beginner","boxed","lid","sexuality","polyester","cubic","deaf","commitments","suggesting","sapphire","kinase","skirts","mats","remainder","crawford","labeled","privileges","televisions","specializing","marking","commodities","pvc","serbia","sheriff","griffin","declined","guyana","spies","blah","mime","neighbor","motorcycles","elect","highways","thinkpad","concentrate","intimate","reproductive","preston","deadly","cunt","feof","bunny","chevy","molecules","rounds","longest","refrigerator","tions","intervals","sentences","dentists","usda","exclusion","workstation","holocaust","keen","flyer","peas","dosage","receivers","urls","customise","disposition","variance","navigator","investigators","cameroon","baking","marijuana","adaptive","computed","needle","baths","enb","gg","cathedral","brakes","og","nirvana","ko","fairfield","owns","til","invision","sticky","destiny","generous","madness","emacs","climb","blowing","fascinating","landscapes","heated","lafayette","jackie","wto","computation","hay","cardiovascular","ww","sparc","cardiac","salvation","dover","adrian","predictions","accompanying","vatican","brutal","learners","gd","selective","arbitration","configuring","token","editorials","zinc","sacrifice","seekers","guru","isa","removable","convergence","yields","gibraltar","levy","suited","numeric","anthropology","skating","kinda","aberdeen","emperor","grad","malpractice","dylan","bras","belts","blacks","educated","rebates","reporters","burke","proudly","pix","necessity","rendering","mic","inserted","pulling","basename","kyle","obesity","curves","suburban","touring","clara","vertex","bw","hepatitis","nationally","tomato","andorra","waterproof","expired","mj","travels","flush","waiver","pale","specialties","hayes","humanitarian","invitations","functioning","delight","survivor","garcia","cingular","economies","alexandria","bacterial","moses","counted","undertake","declare","continuously","johns","valves","gaps","impaired","achievements","donors","tear","jewel","teddy","lf","convertible","ata","teaches","ventures","nil","bufing","stranger","tragedy","julian","nest","pam","dryer","painful","velvet","tribunal","ruled","nato","pensions","prayers","funky","secretariat","nowhere","cop","paragraphs","gale","joins","adolescent","nominations","wesley","dim","lately","cancelled","scary","mattress","mpegs","brunei","likewise","banana","introductory","slovak","cakes","stan","reservoir","occurrence","idol","bloody","mixer","remind","wc","worcester","sbjct","demographic","charming","mai","tooth","disciplinary","annoying","respected","stays","disclose","affair","drove","washer","upset","restrict","springer","beside","mines","portraits","rebound","logan","mentor","interpreted","evaluations","fought","baghdad","elimination","metres","hypothetical","immigrants","complimentary","helicopter","pencil","freeze","hk","performer","abu","titled","commissions","sphere","powerseller","moss","ratios","concord","graduated","endorsed","ty","surprising","walnut","lance","ladder","italia","unnecessary","dramatically","liberia","sherman","cork","maximize","cj","hansen","senators","workout","mali","yugoslavia","bleeding","characterization","colon","likelihood","lanes","purse","fundamentals","contamination","mtv","endangered","compromise","masturbation","optimize","stating","dome","caroline","leu","expiration","namespace","align","peripheral","bless","engaging","negotiation","crest","opponents","triumph","nominated","confidentiality","electoral","changelog","welding","orgasm","deferred","alternatively","heel","alloy","condos","plots","polished","yang","gently","greensboro","tulsa","locking","casey","controversial","draws","fridge","blanket","bloom","qc","simpsons","lou","elliott","recovered","fraser","justify","upgrading","blades","pgp","loops","surge","frontpage","trauma","aw","tahoe","advert","possess","demanding","defensive","sip","flashers","subaru","forbidden","tf","vanilla","programmers","pj","monitored","installations","deutschland","picnic","souls","arrivals","spank","cw","practitioner","motivated","wr","dumb","smithsonian","hollow","vault","securely","examining","fioricet","groove","revelation","rg","pursuit","delegation","wires","bl","dictionaries","mails","backing","greenhouse","sleeps","vc","blake","transparency","dee","travis","wx","endless","figured","orbit","currencies","niger","bacon","survivors","positioning","heater","colony","cannon","circus","promoted","forbes","mae","moldova","mel","descending","paxil","spine","trout","enclosed","feat","temporarily","ntsc","cooked","thriller","transmit","apnic","fatty","gerald","pressed","frequencies","scanned","reflections","hunger","mariah","sic","municipality","usps","joyce","detective","surgeon","cement","experiencing","fireplace","endorsement","bg","planners","disputes","textiles","missile","intranet","closes","seq","psychiatry","persistent","deborah","conf","marco","assists","summaries","glow","gabriel","auditor","wma","aquarium","violin","prophet","cir","bracket","looksmart","isaac","oxide","oaks","magnificent","erik","colleague","naples","promptly","modems","adaptation","hu","harmful","paintball","prozac","sexually","enclosure","acm","dividend","newark","kw","paso","glucose","phantom","norm","playback","supervisors","westminster","turtle","ips","distances","absorption","treasures","dsc","warned","neural","ware","fossil","mia","hometown","badly","transcripts","apollo","wan","disappointed","persian","continually","communist","collectible","handmade","greene","entrepreneurs","robots","grenada","creations","jade","scoop","acquisitions","foul","keno","gtk","earning","mailman","sanyo","nested","biodiversity","excitement","somalia","movers","verbal","blink","presently","seas","carlo","workflow","mysterious","novelty","bryant","tiles","voyuer","librarian","subsidiaries","switched","stockholm","tamil","garmin","ru","pose","fuzzy","indonesian","grams","therapist","richards","mrna","budgets","toolkit","promising","relaxation","goat","render","carmen","ira","sen","thereafter","hardwood","erotica","temporal","sail","forge","commissioners","dense","dts","brave","forwarding","qt","awful","nightmare","airplane","reductions","southampton","istanbul","impose","organisms","sega","telescope","viewers","asbestos","portsmouth","cdna","meyer","enters","pod","savage","advancement","wu","harassment","willow","resumes","bolt","gage","throwing","existed","whore","generators","lu","wagon","barbie","dat","favour","soa","knock","urge","smtp","generates","potatoes","thorough","replication","inexpensive","kurt","receptors","peers","roland","optimum","neon","interventions","quilt","huntington","creature","ours","mounts","syracuse","internship","lone","refresh","aluminium","snowboard","beastality","webcast","michel","evanescence","subtle","coordinated","notre","shipments","maldives","stripes","firmware","antarctica","cope","shepherd","lm","canberra","cradle","chancellor","mambo","lime","kirk","flour","controversy","legendary","bool","sympathy","choir","avoiding","beautifully","blond","expects","cho","jumping","fabrics","antibodies","polymer","hygiene","wit","poultry","virtue","burst","examinations","surgeons","bouquet","immunology","promotes","mandate","wiley","departmental","bbs","spas","ind","corpus","johnston","terminology","gentleman","fibre","reproduce","convicted","shades","jets","indices","roommates","adware","qui","intl","threatening","spokesman","zoloft","activists","frankfurt","prisoner","daisy","halifax","encourages","ultram","cursor","assembled","earliest","donated","stuffed","restructuring","insects","terminals","crude","morrison","maiden","simulations","cz","sufficiently","examines","viking","myrtle","bored","cleanup","yarn","knit","conditional","mug","crossword","bother","budapest","conceptual","knitting","attacked","hl","bhutan","liechtenstein","mating","compute","redhead","arrives","translator","automobiles","tractor","allah","continent","ob","unwrap","fares","longitude","resist","challenged","telecharger","hoped","pike","safer","insertion","instrumentation","ids","hugo","wagner","constraint","groundwater","touched","strengthening","cologne","gzip","wishing","ranger","smallest","insulation","newman","marsh","ricky","ctrl","scared","theta","infringement","bent","laos","subjective","monsters","asylum","lightbox","robbie","stake","cocktail","outlets","swaziland","varieties","arbor","mediawiki","configurations","poison"] secmon_common_words = ['HHS','HSE','IC','Insight Partners','Interpol',"L'acteur",'Ledger','Microsoft Windows','NASA','NET','NordVPN','OTAN','Patch','Password',"Play Store","Pakistan","Outlook","PDC","NoxPlayer","Python","Rapid","Red Hat","RiskIQ","Samsung","SEO","San Francisco","SolarWinds","SSL-VPN","SSN","Suivez","Taîwan","Trustwave","TTP","Ubuntu","UC","VirusTotal","VSA","Washington Post","Windows Server","Xbox","ZIP","Zyxel",'Apprenez','Agent Tesla','AlmaLinux','Avast','Big Data','Cofense','Command','Comprendre','Congrès','CSP','Cyberpunk','CyberNews','DVR','ESXi','FIN','Google Play','Google Play Store','GreatHorn','Anne Neuberger','Bitcoin Fog','Excel','Word','Powerpoint','Nbsp','LDAP','FortiWLC','SSL Forti','CISO','CIO',"L'expert",'SIM','Taiwan','Maryland','SSL Forti','New York Times','CWE-','NFT','National Cyber','Xcode','Acronis','Ten Eleven Ventures','Advent International','Conférence','Rust','Minnesota','Le National Cyber','SITA','UEFI','X-Force','Ministère','LastPass','Lituanie','NIST','Devermont','Supermicro','HackerOne','TeamViewer','Ukraine','UDP','Internet Explorer','SEC','Chainalysis','Netflix','NCC','Surnommée','Commentaire','FAI','Le Do','Phones','Pwn','SASE','TAG','Patch Tuesday','SAML','Géorgie','Google Cloud','Joker','Informa','DoH','Stanford','FortiGuard Labs','Illustrator','Photoshop','Colorado','Instagram','Naked Security Live',"L'acquisition",'LLC','Virginie','Veritas','Pysa','Citrix','AHK',"Google's",'Golang','Cybersecurity','PIN','According','KrebsOnSecurity','Things','MIME','Amazon Web Services','China','India','How','Cyber Security Hub','FormBook','APKPure','Armorblox','SMB',"L'organisation",'Kansas','OF','Verkada','Security',"Jusqu'à",'Mercredi','UE','Suivi','Talos','Français','PayPal','WiFi',"L'outil",'Windows Defender','Jeudi',"L'exploitation",'IBM Security','La Cybersecurity','CI','ZDNet','AD','DC','Malwarebytes','CMS',"L'enquête",'IcedID','Adobe','Microsoft Defender','Omdia','PII','Cloud','Bluetooth','Recorded Future','Message','Dragos','Orion',"Joker's",'Investigation','Project Zero','Naked Security','FA','AI','ForgePoint Capital','Elasticsearch','But','Iran','Edge','December','Magento','DBIR','TLD','FiveHands','Have','Been Pwned','Bash Uploader','Jen Easterly','Pierre Fabre','RV','Group-IB','Zero Trust',"Accellion","L'Université",'Clubhouse','Unité','Mimecast',"L'Agence",'Azure','Mozilla','Git','MSP','Stash','FortiClient','Fortune',"Here's",'We','SSH','Dark Web','Cellebrite','Chromium','PowerShell','Microsoft Corp','Positive Technologies','YouTube','ICS','SMA','SentinelOne','Proofpoint','Infrastructure Security Agency','DevOps','DoJ','Akamai','TikTok','Claroty','Nouvelle-Zélande','Tesla','Mandiant','Zscaler','Emsisoft','VoIP','GPS','Soumettez','TA','CLI','ID','IRS','To','Russia','If','Cisco Talos',"L'incident","DLL","Verizon","The Edge","Journée","Day","FTC","Département","CVE-","COVID-","DDoS","APT","L'attaque",'''"L'Université"''',"Kubernetes","Docker","Gitlab","GitLab","L'application","RDP","Maison Blanche","Security Center","Près","L'équipe","New York","Bitdefender","UNC","FTA",'''"L'incident"''',"FortiGate","Check Point Research","Pulse Secure","Exchange Server","RAT","Palo Alto Networks","Joe Biden","Microsoft Office","Wi-Fi","Tor","IoT","OT","IA","GitHub","ESET","XDR","RCE","DHS","EDR","AV","Codecov","JavaScript","Tom Merritt","Après","WhatsApp","Découvrez","Bitcoin","And","SPONSORISÉ","Discord","URL","CONTENU","CVSS","Phone","HTML","CSS","Résumé","Google Chrome","Apr","Go","This","DNS","HTTP","HTTPS","SSL","TLS","TCP","FTP","Zoom","Teams","Malgr","NAS","QNAP","PoC","Amazon","Kaspersky","McAfee","CrowdStrike","Active Directory","Signal","DoS","SVR","Telegram","TheHackersNews","Fi","Europol","As","FortiOS","Orient","Russie","Russian","Israël","MITRE","ATT","IaaS","SaaS","Dark Reading","Wordpress","WordPress","Wi","Microsoft Exchange","Microsoft Exchange Server","BEC","Détails","CK","BleepingComputer","Fortinet","Trend Micro","Fortigate","NCSC","Même","SOC","AWS","RSA","FireEye","Cor","LinkedIn","Linkedin","VMware","Agence","PHP","SQL","Lisez","Github","SonicWall","NSA","SMS","Firefox","Javascript","An","VPN","XSS","API","Jack Wallen","Cyber","Here","Est","Check Point","Checkpoint","Sophos","FortiProxy","FortiWeb","Unis","Université","Chrome","Troie","Facebook","Twitter","Uni","Linux","Google","Android","CVE","IT","COVID","Biden","ZATAZ","PDF","RSSI","CISA","IoT","FBI"] conn = get_db_connection() dbresult = conn.execute("SELECT title,summary,rss_f FROM RSS_DATA").fetchall() global_news = [] for dbresult1 in dbresult: if not "us-cert" in dbresult1[2] and not "cert.ssi" in dbresult1[2]: global_news.append(dbresult1[1]) proper_names = [] for news in global_news: multiple_capitalized = re.findall('([A-Z][a-zA-ZÀ-ÿ]+(?=\s[A-Z])(?:\s[A-Z][a-z]+)+)', news) for e in multiple_capitalized: proper_names.append(e) single_capitalized = re.findall("""([A-Z][a-zA-ZÀ-ÿ-']+)""",news) for e in single_capitalized: if e not in ' '.join(multiple_capitalized): proper_names.append(e) unique_word_list = list(dict.fromkeys(proper_names)) word_stats = [] for word in unique_word_list: if word not in fr_common_words and word not in en_common_words and word not in secmon_common_words: occurrences = proper_names.count(word) word_stats.append([word,occurrences]) top_word = sortWordsByOccurrences(word_stats) for word in top_word: if word[1] >= 4: top_words.append(word[0]) return top_words def handleException(error): now = datetime.now() now = now.strftime("%d/%m/%Y, %H:%M:%S") print(f"################## NEW SCRIPT ERROR AT {now} ##################") print(print_exc()) print("################## PLEASE REPORT THIS ON GITHUB ##################") def generateCveReport(start_date,end_date,isFull): bold_font = Font(bold=True,color='00FAAA3C', size=14) grey = Color(rgb='00202020') center_aligned_text = Alignment(horizontal="center") wrapped_text = Alignment(horizontal="center",wrapText=True,shrinkToFit=True,vertical="center") thin_border = Side(border_style="thin") square_border = Border(top=thin_border,right=thin_border,bottom=thin_border,left=thin_border) title_bg = PatternFill(fill_type = "solid",fgColor=grey) fr = [ 'ID CVE', 'Produit matché', 'Description', 'Date de publication', 'Score CVSS', 'Sources', 'Statut', 'Produits affectés'] en = [ 'CVE ID', 'Matching product', 'Summary', 'Published date', 'CVSS Score', 'Sources', 'Status', 'Affected products'] cols = ["A","B","C","D","E","F","G","H"] script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_lib.py","") xlsx_report = Workbook() sheet = xlsx_report.active sheet.title = "Global" lang = getUserLanguage() sheet.column_dimensions['A'].width = 21 sheet.column_dimensions['B'].width = 58 sheet.column_dimensions['C'].width = 73 sheet.column_dimensions['D'].width = 15 sheet.column_dimensions['E'].width = 10 sheet.column_dimensions['F'].width = 110 sheet.column_dimensions['G'].width = 20 sheet.column_dimensions['H'].width = 68 sheet.auto_filter.ref = sheet.dimensions i = 0 while i != 8: if lang == "fr": letter = cols[i] sheet["{}1".format(letter)].font = bold_font sheet["{}1".format(letter)].alignment = center_aligned_text sheet["{}1".format(letter)].border = square_border sheet["{}1".format(letter)].fill = title_bg sheet["{}1".format(letter)].value = fr[i] i+=1 else: letter = cols[i] sheet["{}1".format(letter)].font = bold_font sheet["{}1".format(letter)].alignment = center_aligned_text sheet["{}1".format(letter)].border = square_border sheet["{}1".format(letter)].fill = title_bg sheet["{}1".format(letter)].value = en[i] i+=1 cves = [] script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_lib.py","") con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() cur.execute("SELECT CVE_ID,KEYWORD,CVE_DESCRIPTION,CVE_DATE,CVE_SCORE,CVE_SOURCES,STATUS,CVE_CPE,INDEXING_DATE FROM CVE_DATA") db_result_list = cur.fetchall() cves = [] for db_result_tuple in db_result_list: current_cve = [] for result in db_result_tuple: current_cve.append(result) cves.append(current_cve) for cve in cves: cve_date = datetime.strptime(cve[8], "%d/%m/%Y") if start_date <= cve_date <= end_date or isFull: match = cve[1] if "cpe" in match: match = getParsedCpe(match) cve[1] = match cpes = cve[7] new_product_list = "" if "cpe" in cpes: cpe_list = cpes.split("\n") for cpe in cpe_list: if "cpe" in cpe: hname = getParsedCpe(cpe) new_product_list+=(hname+"\n") if new_product_list == "" or new_product_list == " ": new_product_list = "N/A" cve[7] = new_product_list sheet.append(cve[:-1]) for row in sheet.iter_rows(): for cell in row: cell.alignment = wrapped_text xlsx_report.save(filename=dir_path+"SECMON-CVE-Report.xlsx") def writeCveTypeLog(source_script,cve_id,temporal_type,matched_product,cvss_score,cve_date,cpes,report,alert,*args): server = socket.gethostbyname(socket.gethostname()) if cvss_score != "N/A" and cvss_score != "": if 0 <= float(cvss_score) <= 3.9: severity = "Low" elif 4.0 <= float(cvss_score) <= 6.9: severity = "Medium" elif 7.0 <= float(cvss_score) <= 8.9: severity = "High" elif 9.0 <= float(cvss_score) <= 10: severity = "Critical" elif cvss_score == "N/A": severity = "N/A" else: severity = "N/A" timestamp = datetime.now().isoformat() if temporal_type == "new": message = f"The {cve_id} has been added." else: message = f"The {cve_id} has been updated." for arg in args: message+=arg cpes = cpes.replace("\n","+") log = f"""{timestamp} source_script="{source_script}" server="{server}" cve_id="{cve_id}" type="{temporal_type}" matched_product="{matched_product}" cvss_score="{cvss_score}" severity="{severity}" cve_date="{cve_date}" cpes="{cpes}" report="{report}" alert="{alert}" message="{message}" \n""" script_path = os.path.abspath(__file__) dir_path = script_path.replace(os.path.basename(__file__),"") log_file = dir_path+"logs.txt" with open(log_file, "a") as f: f.write(log.replace('+" report=','" report=')) def writeNewExploitFoundLog(source_script,exploit_source,cve,message): timestamp = datetime.now().isoformat() server = socket.gethostbyname(socket.gethostname()) log = f"""{timestamp} source_script="{source_script}" server="{server}" cve="{cve}" exploit_source="{exploit_source}" message="{message}" \n""" script_path = os.path.abspath(__file__) dir_path = script_path.replace(os.path.basename(__file__),"") log_file = dir_path+"logs.txt" with open(log_file, "a") as f: f.write(log) def writeNewHighRiskProductLog(source_script,cpe,message): timestamp = datetime.now().isoformat() server = socket.gethostbyname(socket.gethostname()) if "cpe" in cpe: hname = getParsedCpe(cpe) else: hname = cpe log = f"""{timestamp} source_script="{source_script}" server="{server}" cpe="{cpe}" hname="{hname}" message="{message}" \n""" script_path = os.path.abspath(__file__) dir_path = script_path.replace(os.path.basename(__file__),"") log_file = dir_path+"logs.txt" with open(log_file, "a") as f: f.write(log) def writeAuthLog(source_script,username,auth_status,msg,src_ip): timestamp = datetime.now().isoformat() server = socket.gethostbyname(socket.gethostname()) log = f"""{timestamp} source_script="{source_script}" server="{server}" src_ip="{src_ip}" username="{username}" auth_status="{auth_status}" message="{msg}" \n""" script_path = os.path.abspath(__file__) dir_path = script_path.replace(os.path.basename(__file__),"") log_file = dir_path+"logs.txt" with open(log_file, "a") as f: f.write(log) def getTasks(): tasks = [] con = get_db_connection() cur = con.cursor() cur.execute("SELECT * FROM tasks") db_result_list = cur.fetchall() for db_result_tuple in db_result_list: tasks.append([db_result_tuple[1],db_result_tuple[3],db_result_tuple[2]]) return tasks def writeMgmtTasksLog(source_script,message): timestamp = datetime.now().isoformat() server = socket.gethostbyname(socket.gethostname()) log = f"""{timestamp} source_script="{source_script}" server="{server}" message="{message}" \n""" script_path = os.path.abspath(__file__) dir_path = script_path.replace(os.path.basename(__file__),"") log_file = dir_path+"logs.txt" with open(log_file, "a") as f: f.write(log) def writeNewRssNewLog(source_script,feed,feed_url,news_title,news_url,mail): timestamp = datetime.now().isoformat() server = socket.gethostbyname(socket.gethostname()) log = f"""{timestamp} source_script="{source_script}" server="{server}" feed="{feed}" feed_url="{feed_url}" news_title="{news_title}" news_url="{news_url}" mail="{mail}" \n""" script_path = os.path.abspath(__file__) dir_path = script_path.replace(os.path.basename(__file__),"") log_file = dir_path+"logs.txt" with open(log_file, "a") as f: f.write(log) def translateText(lang,text): try: translation = GoogleTranslator(source='auto', target=lang).translate(text=text) return translation except Exception as e: handleException(e) try: translation = MyMemoryTranslator(source='auto', target=lang).translate(text) return translation except Exception as e: handleException(e) return text +" (TRANSLATION FAILED)" def getGithubAPISettings(): key,username = "","" script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_lib.py","") con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() cur.execute("SELECT github_api_key FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: key = value cur.execute("SELECT github_username FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: username = value return key,username def getUserLanguage(): script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_lib.py","") con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() cur.execute("SELECT language FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: language = value return language def searchExploit(cve, sleeping): exploits = CS.edbid_from_cve(cve) result = [] for exploit in exploits: current_exploit = [] exploitdb_url = "https://www.exploit-db.com/exploits/"+str(exploit) r = requests.get(exploitdb_url,headers={"User-Agent":"Mozilla/5.0"}) soup = BeautifulSoup(r.text,"html.parser") exploit_infos = soup.find_all(class_="stats-title") eID = exploit_infos[0].get_text().replace(" ","").replace("\n","") eAuthor = exploit_infos[2].get_text().replace(" ","").replace("\n","") eType = exploit_infos[3].get_text().replace(" ","").replace("\n","") ePlatform = exploit_infos[4].get_text().replace(" ","").replace("\n","") eDate = exploit_infos[5].get_text().replace(" ","").replace("\n","") current_exploit.append(eID) current_exploit.append(exploitdb_url) current_exploit.append(eAuthor) current_exploit.append(eType) current_exploit.append(ePlatform) created_date = eDate.split("-") current_exploit.append(created_date[2]+"/"+created_date[1]+"/"+created_date[0]) current_exploit.append("Exploit-DB") result.append(current_exploit) github_query = "https://api.github.com/search/repositories?q=exploit+"+cve github_response = requests.get(url=github_query) github_data = github_response.json() if sleep == True: if "message" in github_data.keys(): sleep(60) if "items" in github_data.keys(): for exploit in github_data['items']: current_exploit = [] current_exploit.append(exploit["id"]) current_exploit.append(exploit["html_url"]) current_exploit.append(exploit["owner"]["login"]) current_exploit.append("N/A") current_exploit.append("N/A") created_date = exploit["created_at"].split("T")[0].split("-") current_exploit.append(created_date[2]+"/"+created_date[1]+"/"+created_date[0]) current_exploit.append("Github") result.append(current_exploit) return result def pollCveIdFromCpe(cpe): cve_ids = [] if "cpe" in cpe: try: nvd_query = "https://services.nvd.nist.gov/rest/json/cves/1.0?cpeMatchString="+cpe+"&resultsPerPage=1000" nvd_response = requests.get(url=nvd_query) nvd_data = nvd_response.json() for cve in nvd_data["result"]["CVE_Items"]: cve_id = cve["cve"]["CVE_data_meta"]["ID"] if cve_id not in cve_ids: cve_ids.append(cve_id) result_nb = int(nvd_response.json()['totalResults']) current_result = 1000 page = 1 while current_result < result_nb: page+=1 nvd_query = "https://services.nvd.nist.gov/rest/json/cves/1.0?cpeMatchString="+cpe+"&resultsPerPage=1000"+f"&startIndex={current_result}" nvd_response = requests.get(url=nvd_query) nvd_data = nvd_response.json() for cve in nvd_data["result"]["CVE_Items"]: cve_id = cve["cve"]["CVE_data_meta"]["ID"] if cve_id not in cve_ids: cve_ids.append(cve_id) current_result+=1000 except Exception as e: print("Unable to poll CVE related to :",cpe) handleException(e) pass else: cve_rss = [] current_feed = feedparser.parse("https://nvd.nist.gov/feeds/xml/cve/misc/nvd-rss.xml") for entries in current_feed.entries: title = entries.title summary = entries.summary cve_id = re.findall('CVE-\d{4}-\d{4,7}',title) cve_id = cve_id[0] cve_rss.append(cve_id+"(=)"+summary) for cve in cve_rss: cve_summary = cve.split("(=)")[1] cve_id = cve.split("(=)")[0] if cpe in cve_summary: cve_ids.append(cve_id) return cve_ids def getSecretKey(): script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_lib.py","") con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() db_result = cur.execute("SELECT app_secret_key FROM secret_key") for data in db_result: secret_key = data[0] return secret_key def getHighRiskProducts(dentype): if dentype == "hname": critical_products = [] conn = get_db_connection() db_result = conn.execute('SELECT hname FROM high_risk_products',).fetchall() for result in db_result: current_products = [] for tuples in result: critical_products.append(tuples) elif dentype == "cpe": critical_products = [] conn = get_db_connection() db_result = conn.execute('SELECT cpe FROM high_risk_products',).fetchall() for result in db_result: current_products = [] for tuples in result: critical_products.append(tuples) elif dentype == "all": critical_products = [] conn = get_db_connection() db_result = conn.execute('SELECT cpe,hname FROM high_risk_products',).fetchall() for result in db_result: current_product = [] for tuples in result: current_product.append(tuples) if len(current_product) == 2: critical_products.append(current_product) continue return critical_products def returnUsername(): script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_lib.py","") con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() db_result = cur.execute("SELECT username FROM users") for data in db_result: for users in data: if is_logged_in(users): return users else: continue return "Not logged !!!" def deleteProduct(ptype, key_or_cpe): if ptype == "CPE": high_risk_products = getHighRiskProducts("cpe") if key_or_cpe in high_risk_products: con = get_db_connection() cur = con.cursor() cur.execute("DELETE FROM high_risk_products WHERE cpe = (?);", (key_or_cpe,)) con.commit() con = get_db_connection() cur = con.cursor() try: cpelist = [] cur.execute("SELECT cpe FROM cpe_list") db_result_list = cur.fetchall() for db_result_tuple in db_result_list: for result in db_result_tuple: cpelist.append(result) if key_or_cpe not in cpelist: raise if not "cpe" in key_or_cpe: raise cur.execute("DELETE FROM cpe_list WHERE cpe = (?);", (key_or_cpe,)) cur.execute("DELETE FROM CVE_DATA WHERE KEYWORD = (?);", (key_or_cpe,)) con.commit() return "OK" except: return "NOK" else: con = get_db_connection() cur = con.cursor() try: keylist = [] cur.execute("SELECT keyword FROM keyword_list") db_result_list = cur.fetchall() for db_result_tuple in db_result_list: for result in db_result_tuple: keylist.append(result) if key_or_cpe not in keylist: raise cur.execute("DELETE FROM keyword_list WHERE keyword = (?);", (key_or_cpe,)) cur.execute("DELETE FROM CVE_DATA WHERE KEYWORD = (?);", (key_or_cpe,)) con.commit() return "OK" except: return "NOK" def registerNewCve(cve_id,reason,product): sleep(5) try: now_date = str(datetime.now()).split(" ")[0].split("-") idx_date = now_date[2]+"/"+now_date[1]+"/"+now_date[0] con = get_db_connection() cur = con.cursor() cur.execute("SELECT language FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: language = value cur.execute("SELECT CVE_ID FROM CVE_DATA WHERE CVE_ID = (?);", (cve_id,)) db_result_list = cur.fetchall() db_result_str = "" for db_result_tuple in db_result_list: for result in db_result_tuple: db_result_str+=result if cve_id not in db_result_str: nvd_base_url = "https://services.nvd.nist.gov/rest/json/cve/1.0/" nvd_query = nvd_base_url+cve_id nvd_response = requests.get(url=nvd_query) try: nvd_data = nvd_response.json() except: pass if 'result' in nvd_data.keys(): if 'reference_data' in nvd_data['result']['CVE_Items'][0]['cve']['references']: nvd_links = nvd_data['result']['CVE_Items'][0]['cve']['references']['reference_data'] cve_sources = "" for link in nvd_links: cve_sources += (link['url']+"\n") else: cve_sources = "N/A" cve_score = "" if not "impact" in nvd_data['result']['CVE_Items'][0].keys(): cve_score = "N/A" try: webpage = requests.get("https://nvd.nist.gov/vuln/detail/{}".format(cve_id)) soup = BeautifulSoup(webpage.content, 'html.parser') cve_cna_score = soup.find(id='Cvss3CnaCalculatorAnchor') cve_cna_score = cve_cna_score.get_text() if cve_cna_score != "": cve_score = cve_cna_score else: cve_score = "N/A" except: cve_score = "N/A" else: try: cve_score = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['baseScore'] except: cve_score = "N/A" published_date = nvd_data['result']['CVE_Items'][0]['publishedDate'] formatted_date = published_date.split("T")[0] formatted_date = datetime.strptime(formatted_date,"%Y-%m-%d") date_2_days_ago = datetime.now() - timedelta(days=7) if (date_2_days_ago<=formatted_date) and (formatted_date<=datetime.now()): cve_date_status = "Potentially new CVE" else: cve_date_status = "Potentially an update" cve_date = published_date.split("T")[0] if language == "fr" or language == "FR": fr_date = cve_date.split("-") cve_date = fr_date[2]+"/"+fr_date[1]+"/"+fr_date[0] if (cve_score=="N/A"): cve_status = cve_date_status+" - "+"Not yet rated (No score, no CPE)" else: cve_status = cve_date_status+" - "+"Valid evaluation" cve_description = nvd_data['result']['CVE_Items'][0]['cve']['description']['description_data'][0]['value'] cve_cpe = "" if "configurations" in nvd_data['result']['CVE_Items'][0].keys(): if nvd_data['result']['CVE_Items'][0]['configurations']['nodes']: for node in nvd_data['result']['CVE_Items'][0]['configurations']['nodes']: if 'cpe_match' in node.keys(): for cpe_node in node['cpe_match']: cve_cpe += (cpe_node['cpe23Uri']+'\n') else: cve_score = "N/A" cve_date = "N/A" cve_cpe = "N/A" cve_description = "N/A" cve_status = "N/A" if cve_cpe == "": cve_cpe = "N/A" key_match = product if reason == "NewProduct": status = "Found when the product was added." elif reason == "NewPolling": status = "Unread" # Ajouter la mention du score CNA avec sa traduction EN/FR si c'est le cas # Traduction description + status # NVD link # Print New CVE detected # Send alert elif reason == "Setup": status = "Native" else: status = "N/A" cur.execute("INSERT INTO CVE_DATA (CVE_ID,KEYWORD,STATUS,CVE_SCORE,CVE_DATE,CVE_DESCRIPTION,CVE_EVAL,CVE_CPE,CVE_SOURCES,EXPLOIT_FIND,INDEXING_DATE) VALUES (?,?,?,?,?,?,?,?,?,?,?);", (cve_id,key_match,status,str(cve_score),cve_date,cve_description,cve_status,cve_cpe,cve_sources,"False",idx_date)) con.commit() # Write CVE type log return "ok" else: return "already" except Exception as e: print("ERROR when SECMON would to register this CVE : ",cve_id) handleException(e) def addProduct(ptype, key_or_cpe): sleep(10) task_id = random.randint(10000,99999) task_status = "In Progress" task_comment = f"Adding the following product : {key_or_cpe}...." con = get_db_connection() cur = con.cursor() cur.execute("INSERT INTO tasks (task_id, status, comment) VALUES (?,?,?);", (task_id,task_status,task_comment)) con.commit() if ptype == "CPE": con = get_db_connection() cur = con.cursor() try: cpe = key_or_cpe cve_ids = pollCveIdFromCpe(cpe) for cve_id in cve_ids: try: registerNewCve(cve_id,"NewProduct",cpe) except Exception as e: handleException(e) pass cpelist = [] cur.execute("SELECT cpe FROM cpe_list") db_result_list = cur.fetchall() for db_result_tuple in db_result_list: for result in db_result_tuple: cpelist.append(result) if key_or_cpe in cpelist: raise Exception('Product already in the product list.') if not "cpe" in key_or_cpe: raise Exception('The CPE is in a bad format.') cur.execute("INSERT INTO cpe_list (cpe) VALUES (?);", (key_or_cpe,)) con.commit() task_status = "Success" task_comment = f"Following product successfully added : {key_or_cpe} !" cur.execute("UPDATE tasks SET status = (?),comment = (?) WHERE task_id = (?)", (task_status,task_comment,task_id)) con.commit() except Exception as e: handleException(e) task_status = "Failed" task_comment = f"Unable to add this product : {key_or_cpe}. {str(e)}." cur.execute("UPDATE tasks SET status = (?),comment = (?) WHERE task_id = (?)", (task_status,task_comment,task_id)) con.commit() else: con = get_db_connection() cur = con.cursor() try: key = key_or_cpe cve_ids = pollCveIdFromCpe(key) for cve_id in cve_ids: try: registerNewCve(cve_id,"NewProduct",key) except Exception as e: handleException(e) pass keylist = [] cur.execute("SELECT keyword FROM keyword_list") db_result_list = cur.fetchall() for db_result_tuple in db_result_list: for result in db_result_tuple: keylist.append(result) if key_or_cpe in keylist: raise Exception('Product already exist ! ') cur.execute("INSERT INTO keyword_list (keyword) VALUES (?);", (key_or_cpe,)) con.commit() task_status = "Success" task_comment = f"Following product successfully added : {key_or_cpe} !" cur.execute("UPDATE tasks SET status = (?),comment = (?) WHERE task_id = (?)", (task_status,task_comment,task_id)) con.commit() return "OK" except Exception as e: handleException(e) task_status = "Failed" task_comment = f"Unable to add this product : {key_or_cpe}. {str(e)}." cur.execute("UPDATE tasks SET status = (?),comment = (?) WHERE task_id = (?)", (task_status,task_comment,task_id)) con.commit() return "NOK" def getProductsStats(): product_number = 0 con = get_db_connection() cur = con.cursor() cur.execute("SELECT keyword FROM keyword_list") db_result_list = cur.fetchall() for db_result_tuple in db_result_list: for result in db_result_tuple: product_number+=1 cur.execute("SELECT cpe FROM cpe_list") db_result_list = cur.fetchall() for db_result_tuple in db_result_list: for result in db_result_tuple: product_number+=1 return product_number def getCveByProduct(product,sleeping): con = get_db_connection() cur = con.cursor() if "cpe" in product: pversion = product.split(":")[5] all_version_cpe = product.replace(pversion,"*") req = cur.execute("SELECT CVE_ID FROM CVE_DATA WHERE KEYWORD = (?) UNION SELECT CVE_ID FROM CVE_DATA WHERE CVE_CPE LIKE (?) UNION SELECT CVE_ID FROM CVE_DATA WHERE KEYWORD = (?) UNION SELECT CVE_ID FROM CVE_DATA WHERE CVE_CPE LIKE (?);", (product,"*"+product+"*",all_version_cpe,"*"+all_version_cpe+"*",)) else: req = cur.execute("SELECT CVE_ID FROM CVE_DATA WHERE KEYWORD = (?);", (product,)) db_result_list = req.fetchall() cve_list = [] for db_result_tuple in db_result_list: for result in db_result_tuple: if result not in cve_list: cve_list.append(result) critical_cve, high_cve, medium_cve, low_cve, na_cve, exploitable_cve, expl_cve= [], [], [], [], [], [], [] if "cpe" in product: req2 = cur.execute('SELECT CVE_ID FROM CVE_DATA WHERE EXPLOIT_FIND = "True" AND KEYWORD = (?) UNION SELECT CVE_ID FROM CVE_DATA WHERE EXPLOIT_FIND = "True" AND CVE_CPE LIKE (?) UNION SELECT CVE_ID FROM CVE_DATA WHERE EXPLOIT_FIND = "True" AND KEYWORD = (?) UNION SELECT CVE_ID FROM CVE_DATA WHERE EXPLOIT_FIND = "True" AND CVE_CPE LIKE (?);',(product,"*"+product+"*",all_version_cpe,"*"+all_version_cpe+"*",)) db_result_list2 = req2.fetchall() for db_result_tuple2 in db_result_list2: for result2 in db_result_tuple2: if result2 not in expl_cve: expl_cve.append(result2) else: req2 = cur.execute('SELECT CVE_ID FROM CVE_DATA WHERE EXPLOIT_FIND = "True" AND KEYWORD = (?);',(product,)) db_result_list2 = req2.fetchall() for db_result_tuple2 in db_result_list2: for result2 in db_result_tuple2: if result2 not in expl_cve: expl_cve.append(result2) for cve in cve_list: db_result_list = cur.execute("SELECT CVE_ID,CVE_SCORE,STATUS FROM CVE_DATA WHERE CVE_ID = (?);", (cve,)).fetchall() for db_result_tuple in db_result_list: current_cve = [] for result in db_result_tuple: current_cve.append(result) if current_cve[1] != None and current_cve[1] != "N/A" : current_cve[1] = current_cve[1].split(" ")[0] if 0 <= float(current_cve[1]) <= 3.9: low_cve.append(current_cve) elif 4.0 <= float(current_cve[1]) <= 6.9: medium_cve.append(current_cve) elif 7.0 <= float(current_cve[1]) <= 8.9: high_cve.append(current_cve) elif 9.0 <= float(current_cve[1]) <= 10: critical_cve.append(current_cve) elif current_cve[1] == "N/A": na_cve.append(current_cve) if cve in expl_cve: exploitable_cve.append(current_cve) return critical_cve, high_cve, medium_cve, low_cve, na_cve, exploitable_cve def getParsedCpe(cpe): try: cpe = cpe.replace("*","- All versions") current_product = [] disassmbled_cpe = cpe.split(":") pvendor = disassmbled_cpe[3].replace("_"," ").title() pproduct = disassmbled_cpe[4].replace("_"," ").title() subversion_infos = "("+disassmbled_cpe[6] +" "+ disassmbled_cpe[7] +" "+ disassmbled_cpe[8]+")" subversion_infos = subversion_infos.replace("- All versions","").replace(" - All versions","").replace(" )",")").replace(" )",")").replace(" )",")").replace("( ","(").replace("( ","(").replace("( ","(") if subversion_infos == "()" or subversion_infos == " " or subversion_infos == "( )": subversion_infos = "" try: pversion = disassmbled_cpe[5].title() except Exception as e: handleException(e) pversion = "" if pversion == "-": product = pvendor+" "+pproduct else: product = pvendor+" "+pproduct+" "+pversion + subversion_infos return product except: print("Unable to parse this CPE :",cpe) return "Unparsed product : "+cpe def getProductInfos(product): current_product = [] if "cpe" in product: secmon_ptype = "CPE" fcpe = product cpe = product.replace("*","All") disassmbled_cpe = product.split(":") cpeptype = disassmbled_cpe[2] if cpeptype == "a": ptype = "Application" elif cpeptype == "o": ptype = "Operating System" elif cpeptype == "h": ptype = "Hardware" else: ptype = "N/A" pvendor = disassmbled_cpe[3].replace("_"," ").title() pproduct = disassmbled_cpe[4].replace("_"," ").title() try: pversion = disassmbled_cpe[5] except: pversion = "" if pversion == "-" or pversion == "": pversion = "All versions" else: secmon_ptype = "Keyword" fcpe = "N/A" pvendor = "N/A" pproduct = product ptype = "N/A" pversion = "All versions" current_product.append(secmon_ptype) current_product.append(fcpe) current_product.append(ptype) current_product.append(pvendor) current_product.append(pproduct) current_product.append(pversion) return current_product def getFormatedProductList(): con = get_db_connection() cur = con.cursor() cur.execute("SELECT keyword FROM keyword_list") db_result_list = cur.fetchall() keywords = [] for db_result_tuple in db_result_list: for result in db_result_tuple: keywords.append(result) cur.execute("SELECT cpe FROM cpe_list") db_result_list = cur.fetchall() cpes = [] for db_result_tuple in db_result_list: for result in db_result_tuple: cpes.append(result) cpe_result = [] for cpe in cpes: cpe = cpe.replace("*","All") current_product = [] disassmbled_cpe = cpe.split(":") pvendor = disassmbled_cpe[3].replace("_"," ").title() pproduct = disassmbled_cpe[4].replace("_"," ").title() try: pversion = disassmbled_cpe[5].title() if pversion == "All": pversion = "- All versions" elif pversion == "-": pversion = "- All versions" except Exception as e: handleException(e) pversion = "" product = pvendor+" "+pproduct+" "+pversion current_product.append(product) current_product.append(cpe.replace("All","*")) cpe_result.append(current_product) keyword_result = [] for key in keywords: current_product = [] current_product.append(key) current_product.append("N/A") keyword_result.append(current_product) return cpe_result+keyword_result def showProducts(ptype_search): try: con = get_db_connection() cur = con.cursor() cur.execute("SELECT keyword FROM keyword_list") db_result_list = cur.fetchall() keywords = [] for db_result_tuple in db_result_list: for result in db_result_tuple: keywords.append(result) cur.execute("SELECT cpe FROM cpe_list") db_result_list = cur.fetchall() cpes = [] for db_result_tuple in db_result_list: for result in db_result_tuple: cpes.append(result) cpe_result = [] for cpe in cpes: cpe = cpe.replace("*","All") current_product = [] disassmbled_cpe = cpe.split(":") ptype = "" if disassmbled_cpe[2] == "o": ptype = "Operating System" elif disassmbled_cpe[2] == "a": ptype = "Application" else: ptype = "Hardware" try: pvendor = disassmbled_cpe[3].replace("_"," ") pproduct = disassmbled_cpe[4].replace("_"," ") pversion = disassmbled_cpe[5] except Exception as e: handleException(e) pversion = "All" pvendor = "N/A" pproduct = "N/A" current_product.append(ptype) current_product.append(pvendor) current_product.append(pproduct) current_product.append(pversion) current_product.append(cpe.replace("All","*")) cpe_result.append(current_product) keyword_result = [] for key in keywords: current_product = [] current_product.append("N/A") current_product.append("N/A") current_product.append(key) current_product.append("N/A") current_product.append("N/A") keyword_result.append(current_product) if ptype_search == "All": result = ["OK",keyword_result+cpe_result] return result elif "CPE" in ptype_search: result = ["OK",cpe_result] return result elif "keyword" in ptype_search: result = ["OK",keyword_result] return result else: result = ["NOK",""] return result except Exception as e: handleException(e) result = ["NOK",""] return result def mailTester(smtp_login, smtp_password, smtpsrv, port, tls, sender, receivers): try: if tls == "True": tls = "yes" else: tls = "no" script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_lib.py","") language = "" con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() cur.execute("SELECT language FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: language = value body = "" with open(dir_path+'rss_template.html', 'r') as template: html_code = template.read() html_code = html_code.replace("Source : $SOURCE

","") html_code = html_code.replace("Notification","SECMON") html_code = html_code.replace("Title : $TITLE

","") if language =="en" or language == "EN": html_code = html_code.replace("RSS module","Test email") html_code = html_code.replace("Summary : $SUMMARY
","SECMON is an active security watch program that alerts you to the latest vulnerabilities and threats.") html_code = html_code.replace("Responsive HTML email templates","SECMON - Test email.") html_code = html_code.replace("See more details","Follow me on Github") body = html_code.replace("URL OF THE NEWS","https://github.com/Guezone") elif language =="fr" or language == "FR": html_code = html_code.replace("RSS module","Mail de test") html_code = html_code.replace("Summary : $SUMMARY
","SECMON est un programme de veille sécurité active\net vous averti des dernières vulnérabilités et menaces.") html_code = html_code.replace("Responsive HTML email templates","SECMON - Mail de test.") html_code = html_code.replace("See more details","Suivez-moi sur Github") html_code = html_code.replace("This email was sent by", "Cet email a été envoyé par") body = html_code.replace("URL OF THE NEWS","https://github.com/Guezone") for receiver in receivers: smtpserver = smtplib.SMTP(smtpsrv,port) msg = MIMEMultipart() if language =="en" or language == "EN": msg['Subject'] = 'SECMON - Test email.' elif language =="fr" or language == "FR": msg['Subject'] = 'SECMON - Mail de test.' msg['From'] = sender msg['To'] = receiver msg.attach(MIMEText(body, 'html')) if tls == "yes": smtpserver.ehlo() smtpserver.starttls() smtpserver.login(smtp_login, smtp_password) smtpserver.sendmail(sender, receiver, msg.as_string()) elif tls == "no": smtpserver.login(smtp_login, smtp_password) smtpserver.sendmail(sender, receiver, msg.as_string()) receiver_conf = ';'.join(receivers) con = get_db_connection() cur = con.cursor() cur.execute("UPDATE config SET sender = (?)", (sender,)) cur.execute("UPDATE config SET smtp_password = (?)", ((str(base64.b64encode(smtp_password.encode("UTF-8"))).replace("b'","")).replace("'",""),)) cur.execute("UPDATE config SET smtp_login = (?)", (smtp_login,)) cur.execute("UPDATE config SET smtpsrv = (?)", (smtpsrv,)) cur.execute("UPDATE config SET port = (?)", (port,)) cur.execute("UPDATE config SET receiver = (?)", (receiver_conf,)) cur.execute("UPDATE config SET tls = (?)", (tls,)) con.commit() return True except Exception as e: handleException(e) return False def get_db_connection(): script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_lib.py","") conn = sqlite3.connect(dir_path+'secmon.db') conn.row_factory = sqlite3.Row return conn def removeHTMLtags(text): clean = re.compile('<.*?>') return re.sub(clean, '', text) def changeCVEState(action, cve): db_change = "" if action == "ack": db_change = "Read" elif action == "trt": db_change = "Corrected" elif action == "false": db_change = "False positive" elif action == "utrt": db_change = "Unread" script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_lib.py","") conn = sqlite3.connect(dir_path+'secmon.db') cur = conn.cursor() # Check if CVE exist cur.execute("SELECT CVE_ID FROM CVE_DATA WHERE CVE_ID = (?);", (cve.replace(" ",""),)) db_result_list = cur.fetchall() db_result_str = "" for db_result_tuple in db_result_list: for result in db_result_tuple: db_result_str+=result if cve not in db_result_str: raise else: cur.execute("UPDATE CVE_DATA SET STATUS = (?) WHERE CVE_ID = (?)", (db_change,cve.replace(" ",""))) conn.commit() return db_change def getRegisteredCveInfos(cve,full): cve_infos = {} script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_lib.py","") conn = get_db_connection() cur = conn.cursor() cve_av = "N/A" cve_ac = "N/A" cve_pr = "N/A" cve_ui = "N/A" cve_scope = "N/A" cve_confid = "N/A" cve_integrity = "N/A" cve_avail = "N/A" if full == True: nvd_base_url = "https://services.nvd.nist.gov/rest/json/cve/1.0/" nvd_query = nvd_base_url+cve nvd_response = requests.get(url=nvd_query) try: nvd_data = nvd_response.json() except Exception as e: handleException(e) pass try: cve_av = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['attackVector'] cve_ac = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['attackComplexity'] cve_pr = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['privilegesRequired'] cve_ui = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['userInteraction'] cve_scope = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['scope'] cve_confid = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['confidentialityImpact'] cve_integrity = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['integrityImpact'] cve_avail = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['availabilityImpact'] except Exception as e: pass req = cur.execute("SELECT CVE_ID, KEYWORD, STATUS,CVE_SCORE,CVE_DATE, CVE_DESCRIPTION, CVE_EVAL, CVE_CPE,CVE_SOURCES FROM CVE_DATA WHERE CVE_ID = (?);", (cve.replace(" ",""),)) db_result = [] for tup in req: for item in tup: db_result.append(item) try: cve_infos['cve_id'] = db_result[0] cve_infos['cve_description'] = db_result[5] cve_infos['cve_date'] = db_result[4] cve_infos['cve_score'] = db_result[3] cve_infos['cve_status'] = db_result[6] cve_infos['cve_cpe'] = db_result[7].split("\n") cve_infos['cve_sources'] = db_result[8].split("\n") cve_infos['cve_mgmt_status'] = db_result[2] cve_infos['cve_keymatch'] = db_result[1] cve_infos['cve_av'] = cve_av cve_infos['cve_ac'] = cve_ac cve_infos['cve_pr'] = cve_pr cve_infos['cve_ui'] = cve_ui cve_infos['cve_scope'] = cve_scope cve_infos['cve_confid'] = cve_confid cve_infos['cve_integrity'] = cve_integrity cve_infos['cve_avail'] = cve_avail except Exception as e: handleException(e) return None return cve_infos def getUnregisteredCveInfos(cve): cve_infos = {} script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_lib.py","") conn = sqlite3.connect(dir_path+'secmon.db') cur = conn.cursor() cur.execute("SELECT CVE_ID FROM CVE_DATA WHERE CVE_ID = (?);", (cve.replace(" ",""),)) cve_infos['cve_id'] = cve cve_id = cve db_result_list = cur.fetchall() db_result_str = "" for db_result_tuple in db_result_list: for result in db_result_tuple: db_result_str+=result if cve not in db_result_str: cve_infos["cve_dbs"]="False" else: cve_infos["cve_dbs"]="True" nvd_base_url = "https://services.nvd.nist.gov/rest/json/cve/1.0/" nvd_query = nvd_base_url+cve_id nvd_response = requests.get(url=nvd_query) nvd_data = nvd_response.json() cve_av = "N/A" cve_ac = "N/A" cve_pr = "N/A" cve_ui = "N/A" cve_scope = "N/A" cve_confid = "N/A" cve_integrity = "N/A" cve_avail = "N/A" if 'result' in nvd_data.keys(): cve_score = "" if not "impact" in nvd_data['result']['CVE_Items'][0].keys(): cve_score = "N/A" try: webpage = requests.get("https://nvd.nist.gov/vuln/detail/{}".format(cve_id)) soup = BeautifulSoup(webpage.content, 'html.parser') cve_cna_score = soup.find(id='Cvss3CnaCalculatorAnchor') cve_cna_score = cve_cna_score.get_text() if cve_cna_score != "": cve_score = cve_cna_score else: cve_score = "N/A" except: cve_score = "N/A" else: try: cve_score = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['baseScore'] cve_av = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['attackVector'] cve_ac = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['attackComplexity'] cve_pr = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['privilegesRequired'] cve_ui = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['userInteraction'] cve_scope = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['scope'] cve_confid = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['confidentialityImpact'] cve_integrity = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['integrityImpact'] cve_avail = nvd_data['result']['CVE_Items'][0]['impact']['baseMetricV3']['cvssV3']['availabilityImpact'] except: cve_score = "N/A" weakness = "" try: weakness = nvd_data['result']['CVE_Items'][0]['cve']["problemtype"]["problemtype_data"][0]["description"][0]["value"] except: weakness = "N/A" published_date = nvd_data['result']['CVE_Items'][0]['publishedDate'] cve_date = published_date.split("T")[0] fr_date = cve_date.split("-") cve_infos['cve_date'] = fr_date[2]+"/"+fr_date[1]+"/"+fr_date[0] cve_cpe = [] if "configurations" in nvd_data['result']['CVE_Items'][0].keys(): if nvd_data['result']['CVE_Items'][0]['configurations']['nodes']: for node in nvd_data['result']['CVE_Items'][0]['configurations']['nodes']: if 'cpe_match' in node.keys(): for cpe_node in node['cpe_match']: cve_cpe.append(cpe_node['cpe23Uri']) products = [] if cve_cpe == []: products = ["N/A"] else: con = get_db_connection() cur = con.cursor() cur.execute("SELECT cpe FROM cpe_list") db_result_list = cur.fetchall() cpes = [] for db_result_tuple in db_result_list: for result in db_result_tuple: cpes.append(result) for cpe in cve_cpe: cpe = cpe.replace("*","All") current_product = [] disassmbled_cpe = cpe.split(":") ptype = "" if disassmbled_cpe[2] == "o": ptype = "Operating System" elif disassmbled_cpe[2] == "a": ptype = "Application" else: ptype = "Hardware" pvendor = disassmbled_cpe[3].replace("_"," ") pproduct = disassmbled_cpe[4].replace("_"," ") try: pversion = disassmbled_cpe[5] except: pversion = "All" current_product.append(ptype) current_product.append(pvendor) current_product.append(pproduct) current_product.append(pversion) current_product.append(cpe.replace("All","*")) match = "" if cpe.replace("All","*") in cpes: match = "True - exact match" else: for p in cpes: partial_cpe = disassmbled_cpe[2]+":"+disassmbled_cpe[3]+":"+disassmbled_cpe[4] if partial_cpe in p: match = "True - partial match (require a manual check)" break else: match = "False" current_product.append(match) products.append(current_product) cve_infos["cve_cpe"] = products published_date = nvd_data['result']['CVE_Items'][0]['publishedDate'] formatted_date = published_date.split("T")[0] formatted_date = datetime.strptime(formatted_date,"%Y-%m-%d") date_2_days_ago = datetime.now() - timedelta(days=30) if (date_2_days_ago<=formatted_date) and (formatted_date<=datetime.now()): cve_date_status = "Recent" else: cve_date_status = "Old" if (cve_score=="N/A"): cve_status = cve_date_status+" - "+"Not yet rated (No score, no CPE)" else: cve_status = cve_date_status+" - "+"Valid evaluation" cve_infos['cve_score'] = cve_score cve_infos['cve_av'] = cve_av cve_infos['cve_ac'] = cve_ac cve_infos['cve_pr'] = cve_pr cve_infos['cve_ui'] = cve_ui cve_infos['cve_scope'] = cve_scope cve_infos['cve_confid'] = cve_confid cve_infos['cve_integrity'] = cve_integrity cve_infos['cve_avail'] = cve_avail cve_infos['cve_status'] = cve_status cve_infos['cve_weakness'] = weakness exploits = [] try: for e in CS.edbid_from_cve(cve): exploits.append(e) except: pass user,key = getGithubAPISettings() con = get_db_connection() cur = con.cursor() if user != "None" or key != "None": github_query = "https://api.github.com/search/repositories?q=exploit+"+cve github_response = requests.get(url=github_query,auth=(user,key)) github_data = github_response.json() if "items" in github_data.keys(): for i in github_data['items']: exploits.append(i) if exploits == []: cve_infos['cve_expa'] = False else: cve_infos['cve_expa'] = True if 'reference_data' in nvd_data['result']['CVE_Items'][0]['cve']['references']: nvd_links = nvd_data['result']['CVE_Items'][0]['cve']['references']['reference_data'] cve_sources = [] for link in nvd_links: cve_sources.append(link['url']) else: cve_sources = [] cve_infos['cve_sources'] = cve_sources cve_infos['cve_description'] = nvd_data['result']['CVE_Items'][0]['cve']['description']['description_data'][0]['value'] req = cur.execute("SELECT STATUS FROM CVE_DATA WHERE CVE_ID = (?);", (cve,)).fetchone() if req == None: cve_infos['cve_mgmt_status'] = "Unavailable" else: cve_infos['cve_mgmt_status'] = "" for res in req: cve_infos['cve_mgmt_status'] += res else: raise ValueError('Failed to find CVE details on NVD API.') return cve_infos def getCpeList(): cur = get_db_connection().cursor() cur.execute("SELECT cpe FROM cpe_list") db_result_list = cur.fetchall() cpes = [] for db_result_tuple in db_result_list: for result in db_result_tuple: cpes.append(result) return cpes def getKeywordsList(): cur = get_db_connection().cursor() cur.execute("SELECT keyword FROM keyword_list") db_result_list = cur.fetchall() keywords = [] for db_result_tuple in db_result_list: for result in db_result_tuple: keywords.append(result) return keywords def getRegisteredCveStats(): conn = get_db_connection() db_result = conn.execute('SELECT * FROM CVE_DATA',).fetchall() low_counter = 0 medium_counter = 0 high_counter = 0 critical_counter = 0 for cve in db_result: current_cve = [] for data in cve: current_cve.append(data) current_cve.pop(0) if current_cve[3] != "N/A" and current_cve[3] != None: current_cve[3] = current_cve[3].split(" ")[0] if 0 <= float(current_cve[3]) <= 3.9: low_counter +=1 elif 4.0 <= float(current_cve[3]) <= 6.9: medium_counter +=1 elif 7.0 <= float(current_cve[3]) <= 8.9: high_counter +=1 elif 9.0 <= float(current_cve[3]) <= 10: critical_counter +=1 stats = [low_counter,medium_counter,high_counter,critical_counter] return stats def getRegisteredCveStatus(): conn = get_db_connection() db_result = conn.execute('SELECT * FROM CVE_DATA',).fetchall() read_counter = 0 unread_counter = 0 corrected_counter = 0 falsep_counter = 0 total = 0 for cve in db_result: current_cve = [] total += 1 for data in cve: current_cve.append(data) current_cve.pop(0) if current_cve[2] != "N/A" and current_cve[2] != None: if current_cve[2] == "Read": read_counter +=1 elif current_cve[2] == "Unread" or current_cve[2] == "Native" or current_cve[2] == "Found when the product was added.": unread_counter +=1 elif current_cve[2] == "Corrected": corrected_counter +=1 elif current_cve[2] == "False positive": falsep_counter +=1 date = datetime.now() y = date.strftime("%Y") months = [] months.append(date.strftime("%B")) months.append((date + relativedelta(months=-1)).strftime("%B")) months.append((date + relativedelta(months=-2)).strftime("%B")) months.append((date + relativedelta(months=-3)).strftime("%B")) months.append((date + relativedelta(months=-4)).strftime("%B")) months.append((date + relativedelta(months=-5)).strftime("%B")) digit_months = [] digit_months.append(date.strftime("%m/%Y")) digit_months.append((date + relativedelta(months=-1)).strftime("%m/%Y")) digit_months.append((date + relativedelta(months=-2)).strftime("%m/%Y")) digit_months.append((date + relativedelta(months=-3)).strftime("%m/%Y")) digit_months.append((date + relativedelta(months=-4)).strftime("%m/%Y")) digit_months.append((date + relativedelta(months=-5)).strftime("%m/%Y")) months_data = [0,0,0,0,0,0] for cve in db_result: current_cve = [] for data in cve: current_cve.append(data) current_cve.pop(0) if current_cve[4] != "N/A" and current_cve[4] != None: if digit_months[0] in current_cve[4]: months_data[0] +=1 elif digit_months[1] in current_cve[4]: months_data[1] +=1 elif digit_months[2] in current_cve[4]: months_data[2] +=1 elif digit_months[3] in current_cve[4]: months_data[3] +=1 elif digit_months[4] in current_cve[4]: months_data[4] +=1 elif digit_months[5] in current_cve[4]: months_data[5] +=1 stats = [read_counter,unread_counter,corrected_counter,falsep_counter,total,[ele for ele in reversed(months)],[ele for ele in reversed(months_data)]] return stats def getRegisteredCve(): conn = get_db_connection() db_result = conn.execute('SELECT * FROM CVE_DATA',).fetchall() cvelist = [] for cve in db_result: current_cve = [] for data in cve: current_cve.append(data) current_cve.pop(0) if "cpe" in current_cve[1]: current_cve[1] = getParsedCpe(current_cve[1]) if current_cve[2] == "Unread" or "Native" in current_cve[2] or "Found" in current_cve[2]: current_cve.append("#e74a3b") current_cve.append("white") elif current_cve[2] == "Read": current_cve.append("#faaa3c") current_cve.append("black") elif current_cve[2] == "False positive": current_cve.append("#6c757d") current_cve.append("white") else: current_cve.append("#1cc88a") current_cve.append("white") try: float(current_cve[3]) except: if current_cve[3] != "N/A": current_cve[3] = current_cve[3].split(" ")[0] if current_cve[3] != "N/A": current_cve[3] = current_cve[3].split(" ")[0] if 0 <= float(current_cve[3]) <= 3.9: current_cve.append("#36b9cc") current_cve.append("white") elif 3.9 <= float(current_cve[3]) <= 6.9: current_cve.append("#faaa3c") current_cve.append("black") elif 6.9 <= float(current_cve[3]) <= 8.9: current_cve.append("#e74a3b") current_cve.append("white") elif 8.9 <= float(current_cve[3]) <= 10: current_cve.append("#202020") current_cve.append("white") else: current_cve.append("#6c757d") current_cve.append("white") cvelist.append(current_cve) conn.close() return cvelist def getUnexploitableCveIdList(): conn = get_db_connection() db_result = conn.execute('SELECT CVE_ID FROM CVE_DATA WHERE EXPLOIT_FIND = "False"',).fetchall() cvelist = [] for cve in db_result: for t in cve: cvelist.append(t) conn.close() return cvelist def getExploitableCveIdList(): conn = get_db_connection() db_result = conn.execute('SELECT CVE_ID FROM CVE_DATA WHERE EXPLOIT_FIND = "True"',).fetchall() cvelist = [] for cve in db_result: for t in cve: cvelist.append(t) conn.close() return cvelist ================================================ FILE: secmon_monitor.py ================================================ # -*- coding: utf-8 -*- """ SECMON - Source code of the SECMON monitoring script. """ __author__ = "Aubin Custodio" __copyright__ = "Copyright 2021, SECMON" __credits__ = ["Aubin Custodio","Guezone"] __license__ = "CC BY-NC-SA 4.0" __version__ = "2.1" __maintainer__ = "Aubin Custodio" __email__ = "custodio.aubin@outlook.com" import base64, os, requests, feedparser, colorama, tweepy, sqlite3 from datetime import datetime rss_feeds = [ 'https://cyware.com/allnews/feed', 'https://www.cshub.com/rss/categories/attacks', 'https://www.darkreading.com/rss_simple.asp', 'https://www.schneier.com/feed/atom/', 'https://www.cshub.com/rss/categories/threat-defense', 'https://www.cshub.com/rss/categories/malware', 'https://www.fortiguard.com/rss/ir.xml', 'https://nakedsecurity.sophos.com/feed/', 'https://www.techrepublic.com/rssfeeds/topic/security/?feedType=rssfeeds', 'http://feeds.feedburner.com/TheHackersNews?format=xml', 'https://www.cert.ssi.gouv.fr/feed/', 'https://us-cert.cisa.gov/ncas/all.xml', 'https://www.zataz.com/feed/', ] class bcolors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' BOLD = '\033[1m' UNDERLINE = '\033[4m' sender, receiver, smtp_login, password, smtpsrv, port, tls, keywords = '','','','','','','','' def checkConfig(sender, receiver, smtp_login, smtp_password, smtpsrv, port, tls, keywords, dir_path, chk_result): con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() cur.execute("SELECT sender FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: sender = value cur.execute("SELECT smtp_login FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: smtp_login = value cur.execute("SELECT smtp_password FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: b = value.encode("UTF-8") bytes_password = base64.b64decode(b) smtp_password = bytes_password.decode("UTF-8") cur.execute("SELECT smtpsrv FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: smtpsrv = value cur.execute("SELECT port FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: port = value cur.execute("SELECT receiver FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: receivers = value.split(";") cur.execute("SELECT tls FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: tls = value cur.execute("SELECT language FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: language = value cur.execute("SELECT receiver FROM config") db_result_tuple = cur.fetchone() for value in db_result_tuple: receivers = value.split(";") cur.execute("SELECT keyword FROM keyword_list") db_result_list = cur.fetchall() keywords = [] for db_result_tuple in db_result_list: for result in db_result_tuple: keywords.append(result) if all(value != '' for value in [sender, receivers, smtp_login, smtp_password, smtpsrv, str(port), tls, language]): print(bcolors.OKGREEN+"1. Configuration is good."+bcolors.ENDC) chk_result["1"] = "1. Configuration is good." else: print(bcolors.FAIL+"1. Error in the config."+bcolors.ENDC) chk_result['1'] = "1. Error in the config." def checkRssFeeds(rss_feeds,dir_path, chk_result): try: for feed in rss_feeds: r = requests.get(feed) if int(r.status_code) != 200: raise print(bcolors.OKGREEN+"2. All RSS feeds are available."+bcolors.ENDC) chk_result['2'] = "2. All RSS feeds are available." except: print(bcolors.FAIL+"2. One or more RSS feeds are unavailable."+bcolors.ENDC) chk_result['2'] = "2. One or more RSS feeds are unavailable." try: feed = "https://nvd.nist.gov/feeds/xml/cve/misc/nvd-rss.xml" r = requests.get(feed) if int(r.status_code) != 200: raise print(bcolors.OKGREEN+"3. NVD RSS feed is available."+bcolors.ENDC) chk_result['3'] = "3. NVD RSS feed is available." except: print(bcolors.FAIL+"4. NVD RSS feed is unavailable."+bcolors.ENDC) chk_result['3'] = "3. NVD RSS feed is unavailable." def checkFileSize(dir_path, chk_result): db_path = dir_path+"secmon.db" log_file_path = dir_path+"logs.txt" try: stat = os.stat(db_path) size = stat.st_size mb_size = round(size / (1024 * 1024), 3) if mb_size >= 100.0: print(bcolors.WARNING+"4. The database is available but this size is too high."+bcolors.ENDC) chk_result['4'] = "4. The database is available but this size is too high." else: print(bcolors.OKGREEN+"4. The database is available and this size is good."+bcolors.ENDC) chk_result['4'] = "4. The database is available and this size is good." except: print(bcolors.FAIL+"4. The database is unavailable."+bcolors.ENDC) chk_result['4'] = "4. The database is unavailable." try: stat = os.stat(log_file_path) size = stat.st_size mb_size = round(size / (1024 * 1024), 3) if mb_size >= 0.5: print(bcolors.WARNING+"5. The size of a log file is too high. Removing log file."+bcolors.ENDC) chk_result['5'] = "5. The size of a log file is too high. Removing log file." os.remove(log_file_path) os.system(f"touch {dir_path}logs.txt && chown www-data:www-data {dir_path}logs.txt") else: chk_result['5'] = "5. The size of a log file is good." print(bcolors.OKGREEN+"5. The size of a log file is good."+bcolors.ENDC) except: print(bcolors.FAIL+"5. Log file not found."+bcolors.ENDC) chk_result['5'] = "5. Log file not found." def main(dir_path): colorama.init() print("--------- Monitoring Module --------") timestamp = datetime.now().strftime("%d/%m/%Y %H:%M:%S") print(bcolors.OKBLUE+" Starting at : "+timestamp+bcolors.ENDC) print("------------------------------------") chk_result = {'1':'','2':'','3':'','4':'','5':'','6':''} checkConfig(sender, receiver, smtp_login, smtp_password, smtpsrv, port, tls, keywords, dir_path, chk_result) checkRssFeeds(rss_feeds, dir_path, chk_result) checkFileSize(dir_path, chk_result) print("------------------------------------") timestamp = datetime.now().strftime("%d/%m/%Y %H:%M:%S") print(bcolors.OKBLUE+" Finished at : "+timestamp+bcolors.ENDC) print("------------------------------------") return chk_result if __name__ == "__main__": script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_monitor.py","") main(dir_path) ================================================ FILE: secmon_web.py ================================================ # -*- coding: utf-8 -*- """ SECMON - Source code of the SECMON python web backend. """ __author__ = "Aubin Custodio" __copyright__ = "Copyright 2021, SECMON" __credits__ = ["Aubin Custodio","Guezone"] __license__ = "CC BY-NC-SA 4.0" __version__ = "2.1" __maintainer__ = "Aubin Custodio" __email__ = "custodio.aubin@outlook.com" from flask import Flask, url_for, render_template, send_from_directory, request, flash, redirect, safe_join, session, url_for, session, abort import jinja2.exceptions, sqlite3,requests, feedparser, re, os, random from datetime import datetime, timedelta from secmon_lib import getTopThreats,getExploitableCveIdList,writeAuthLog,generateCveReport,getProductInfos,getParsedCpe,getRegisteredCveStatus, getTasks, getHighRiskProducts, getProductsStats, getCveByProduct,getRegisteredCve, getRegisteredCveStats,getFormatedProductList, getUnregisteredCveInfos, getRegisteredCveInfos, rss_feeds, get_db_connection, removeHTMLtags, changeCVEState,searchExploit, returnUsername, getSecretKey, messages, addProduct, deleteProduct,showProducts, mailTester import secmon_monitor from werkzeug.security import generate_password_hash, check_password_hash from werkzeug.exceptions import HTTPException from flask_simplelogin import SimpleLogin from flask_simplelogin import login_required from flask_simplelogin import is_logged_in from multiprocessing import Process import traceback, os.path import urllib.parse from traceback_with_variables import print_exc def secmon_auth(user): script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_web.py","") con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() db_hash = "" db_result = cur.execute("SELECT pass_hash FROM users WHERE username = (?);", (user['username'],)) for data in db_result: for pwd in data: db_hash = pwd if check_password_hash(db_hash,user['password']): routes = [] for e in app.url_map.iter_rules(): routes.append(str(e)) if urllib.parse.unquote(request.url.split("=")[1]) not in routes: writeAuthLog(f"secmon_web",user['username'],"failed",f"User {user['username']} has attempted to log in. Authentication failed: maflormed request.",request.remote_addr) return False else: writeAuthLog(f"secmon_web",user['username'],"success",f"User {user['username']} has attempted to log in. Authentication success.",request.remote_addr) return True else: writeAuthLog(f"secmon_web",user['username'],"failed",f"User {user['username']} has attempted to log in. Authentication failed: bad username or password.",request.remote_addr) return False app = Flask(__name__) app.secret_key = getSecretKey() app.jinja_env.globals.update(returnUsername=returnUsername) SimpleLogin(app,login_checker=secmon_auth, messages=messages) @app.before_request def make_session_permanent(): session.permanent = True app.permanent_session_lifetime = timedelta(minutes=15) @app.route('/login/') @login_required def redirectUnloggedUser(unauthorizedressource): return render_template('login.html') @app.route('/home') @app.route('/') @login_required def home(): mgmt_counters = getRegisteredCveStatus() total = mgmt_counters[4] counters = getRegisteredCveStats() plist = getFormatedProductList() product_number = getProductsStats() critical_products = getHighRiskProducts("hname") high_risk_product_number = 0 for p in critical_products: high_risk_product_number+=1 if total == 0: return render_template('home.html',low=counters[0],medium=counters[1],high=counters[2],critical=counters[3],products=critical_products, product_number=product_number,high_risk_product_number=high_risk_product_number,read=25,unread=25,corrected=25,falsep=25,months=mgmt_counters[5],months_data=mgmt_counters[6]) else: return render_template('home.html',low=counters[0],medium=counters[1],high=counters[2],critical=counters[3],products=critical_products, product_number=product_number,high_risk_product_number=high_risk_product_number,read=int((mgmt_counters[0]/total)*100),unread=int((mgmt_counters[1]/total)*100),corrected=int((mgmt_counters[2]/total)*100),falsep=int((mgmt_counters[3]/total)*100),months=mgmt_counters[5],months_data=mgmt_counters[6]) @app.route('/settings',methods=['GET', 'POST']) @login_required def settings(): if request.method == 'POST': if request.form['btn'] == "Send": cur_password = request.form['cur_password'] new_password = request.form['new_password'] new_password2 = request.form['new_password2'] if new_password == new_password2: script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_web.py","") con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() db_hash = "" current_user = returnUsername() db_result = cur.execute("SELECT pass_hash FROM users WHERE username = (?)", (current_user,)) for data in db_result: for pwd in data: db_hash += pwd if check_password_hash(db_hash,cur_password): cur.execute("UPDATE users SET pass_hash = (?) WHERE username = (?)", (generate_password_hash(new_password,"sha512"),current_user)) con.commit() flash("The password has been changed successfully.","success") return render_template('settings.html') else: flash("Bad current password.","danger") return render_template('settings.html') else: flash("The passwords do not match.","danger") return render_template('settings.html') elif request.form['btn'] == "NewUser": username = request.form['username'] password = request.form['password'] password2 = request.form['password2'] if password == password2: script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_web.py","") con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() result = [] current_user = returnUsername() db_result = cur.execute("SELECT username FROM users") for data in db_result: for usr in data: result.append(usr) if username not in result: hashed_pwd = generate_password_hash(password, 'sha512') cur = con.cursor() cur.execute("INSERT INTO users (username, pass_hash) VALUES (?,?);", (username, hashed_pwd)) con.commit() flash(f"User {username} successfully created.","success") return render_template('settings.html') else: flash(f"Failed to create {username} user because it already exist.","danger") return render_template('settings.html') else: flash("The passwords do not match.","danger") return render_template('settings.html') else: script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_web.py","") con = sqlite3.connect(dir_path+'secmon.db') cur = con.cursor() current_user = returnUsername() db_result = cur.execute("DELETE FROM users WHERE username = (?)", (current_user,)) con.commit() return redirect('logout') else: return render_template('settings.html') @app.route('/vuln-mgmt',methods=['GET', 'POST']) @login_required def vuln_mgmt(): if request.method == 'POST': try: cve = request.form['cve'] action = request.form['btn'] new_status = changeCVEState(action, cve) cvelist = getRegisteredCve() flash('{} management status was successfully updated to "{}.".'.format(cve,new_status), "success") return render_template('vuln-mgmt.html', cvelist=cvelist) except: cvelist = getRegisteredCve() flash('Error. Please enter a valid CVE value.', "danger") return render_template('vuln-mgmt.html', cvelist=cvelist) else: cvelist = getRegisteredCve() return render_template('vuln-mgmt.html', cvelist=cvelist) @app.route('/rss-news') @login_required def rssNews(): conn = get_db_connection() script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_web.py","") logfile = dir_path+"logs.txt" count = 0 if os.path.isfile(logfile) == True: news = [] for line in reversed(list(open(logfile, encoding='utf8'))): if "rss_poller" in line: log_rss_url = line.split('"')[11].replace('news_url="',"").replace('"',"") data = conn.execute("SELECT RSS_URL, title, rss_f, summary FROM RSS_DATA WHERE RSS_URL = (?);", (log_rss_url,)).fetchone() rss_data = [] if data != None: for r_data in data: rss_data.append(r_data) rss_data[3] = str(removeHTMLtags(rss_data[3])) current_entry = [str(rss_data[0]),str(rss_data[1]),line.split('"')[5].replace('news_url="',"").replace('"',""),str(rss_data[3])] news.append(current_entry) count+=1 if count >= 10: break if news == []: return render_template('rss-news.html',news=news,no_news="No news for the moment.") else: return render_template('rss-news.html',news=news) @app.route('/cve-alerts') @login_required def cveAlerts(): conn = get_db_connection() script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_web.py","") logfile = dir_path+"logs.txt" count = 0 cves = [] if os.path.isfile(logfile) == True: for line in reversed(list(open(logfile, encoding='utf8'))): if """source_script="cve_poller" """ in line and """type="new" """ in line: it = [] cve_id = re.findall('CVE-\d{4}-\d{4,7}',line)[0] infos = getRegisteredCveInfos(cve_id, full=False) if infos != None: it.append(infos['cve_id']) it.append(infos['cve_description']) it.append(infos['cve_date']) it.append(infos['cve_score']) it.append(infos['cve_status']) if "N/A" in infos['cve_cpe']: it.append([infos['cve_keymatch']]) else: it.append(infos['cve_cpe']) it.append(infos['cve_sources']) it.append(infos['cve_mgmt_status']) else: it.append(cve_id) it.append("This CVE is no longer in the database. This may be due to a deletion of the product that concerns it.") cves.append(it) count+=1 if count >= 10: break if cves == []: return render_template('cve-alerts.html',cves=cves, no_alerts="No alert for the moment.") else: return render_template('cve-alerts.html',cves=cves) @app.route('/cyber-threats') @login_required def topCyberSubject(): words = getTopThreats() return render_template('cyber-threats.html',words=words) @app.route('/cve-updates') @login_required def cveUpdates(): conn = get_db_connection() script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_web.py","") logfile = dir_path+"logs.txt" count = 0 cves = [] if os.path.isfile(logfile) == True: for line in reversed(list(open(logfile, encoding='utf8'))): if "cve_updater" in line and 'type="update"' in line: it = [] cve_id = re.findall('CVE-\d{4}-\d{4,7}',line)[0] it.append(cve_id) it.append(line.split('"')[23].replace('message="',"").replace('"'," ").replace(f"The {cve_id} has been updated.","")) cves.append(it) count+=1 if count >= 20: break if cves == []: return render_template('cve-updates.html',cves=cves, no_updates="No CVE updates found recently.") else: return render_template('cve-updates.html',cves=cves) @app.route('/search',methods=['GET', 'POST']) @login_required def search(): cve = "" if request.method == 'POST': if request.form['cve'] != "" and request.form['cve'] != " ": try: weakness_nb = "" cve = request.form['cve'].upper() infos = getUnregisteredCveInfos(cve) if infos['cve_weakness'] != "N/A": weakness_nb = infos['cve_weakness'].split("-")[1] return render_template('result.html',back_path="search",cve_id=infos['cve_id'] ,cve_summary=infos['cve_description'],cve_dbs=infos['cve_dbs'],cve_date=infos['cve_date'],cve_score=infos['cve_score'],cve_status=infos['cve_status'],cve_cpe=infos['cve_cpe'],cve_sources=infos['cve_sources'],cve_av=infos['cve_av'],cve_ac=infos['cve_ac'],cve_pr=infos['cve_pr'],cve_ui=infos['cve_ui'],cve_scope=infos['cve_scope'],cve_confid=infos['cve_confid'],cve_integrity=infos['cve_integrity'],cve_avail=infos['cve_avail'],cve_expa=infos['cve_expa'],cve_weakness=infos['cve_weakness'],weakness_nb=weakness_nb,back="../") except Exception as e: cve = request.form['cve'].upper() flash("""This CVE does not exist or the data is not available on the API. Please check manually on """, "danger") nvd_link = "https://nvd.nist.gov/vuln/detail/"+cve return render_template('search.html', nvd_link=nvd_link) else: flash("""Please enter a value.""", "warning") return render_template('search.html') else: return render_template('search.html') @app.route('/exploits',methods=['GET', 'POST']) @login_required def exploits(): cve = "" exploitables_cve = getExploitableCveIdList() if request.method == 'POST': if 'psearchbtn' in request.form: if request.form['cve'] != "" and request.form['cve'] != " ": cve = request.form['cve'].upper() if "CVE" not in cve: flash("""Please enter a valid CVE ID.""", "warning") return render_template('exploits.html',cvelist=exploitables_cve) infos = searchExploit(cve, False) if infos == []: flash("""Unable to find exploits for this CVE value.""", "warning") return render_template('exploits.html',cvelist=exploitables_cve) else: return render_template('exploits.html',result=infos,cvelist=exploitables_cve) else: flash("""Please enter a value.""", "warning") return render_template('exploits.html',cvelist=exploitables_cve) else: return render_template('exploits.html',cvelist=exploitables_cve) else: return render_template('exploits.html',cvelist=exploitables_cve) @app.route('/cve-exploits/') @login_required def cveExploits(cve_id): exploitables_cve = getExploitableCveIdList() infos = searchExploit(cve_id, False) return render_template('exploits.html',result=infos,cvelist=exploitables_cve,back="../../") @app.route('/details-cve-low') @login_required def getLowCVE(): conn = get_db_connection() db_result = conn.execute('SELECT * FROM CVE_DATA',).fetchall() low_cve_id = [] cve_list_LOW = [] count = 0 for result in db_result: current_cve = [] for data in result: current_cve.append(data) current_cve.pop(0) if current_cve[3] != "N/A": current_cve[3] = current_cve[3].split(" ")[0] if 0 <= float(current_cve[3]) <= 3.9: low_cve_id.append(current_cve[0]) count +=1 for cve in low_cve_id: infos = getRegisteredCveInfos(cve,full=False) it = [] it.append(infos['cve_id']) it.append(infos['cve_description']) it.append(infos['cve_date']) it.append(infos['cve_score']) it.append(infos['cve_status']) it.append(infos['cve_cpe']) it.append(infos['cve_sources']) it.append(infos['cve_mgmt_status']) cve_list_LOW.append(it) if count == 0: result = False return render_template('details-cve-low.html',result=result) else: return render_template('details-cve-low.html',cve_list_LOW=cve_list_LOW) @app.route('/details-cve-medium') @login_required def getMediumCVE(): conn = get_db_connection() db_result = conn.execute('SELECT * FROM CVE_DATA',).fetchall() medium_cve_id = [] cve_list_MEDIUM = [] count = 0 for result in db_result: current_cve = [] for data in result: current_cve.append(data) current_cve.pop(0) if current_cve[3] != "N/A": current_cve[3] = current_cve[3].split(" ")[0] if 4.0 <= float(current_cve[3]) <= 6.9: medium_cve_id.append(current_cve[0]) count +=1 for cve in medium_cve_id: infos = getRegisteredCveInfos(cve,full=False) it = [] it.append(infos['cve_id']) it.append(infos['cve_description']) it.append(infos['cve_date']) it.append(infos['cve_score']) it.append(infos['cve_status']) it.append(infos['cve_cpe']) it.append(infos['cve_sources']) it.append(infos['cve_mgmt_status']) cve_list_MEDIUM.append(it) if count == 0: result = False return render_template('details-cve-medium.html',result=result) else: return render_template('details-cve-medium.html',cve_list_MEDIUM=cve_list_MEDIUM) @app.route('/details-cve-high') @login_required def getHighCVE(): conn = get_db_connection() db_result = conn.execute('SELECT * FROM CVE_DATA',).fetchall() high_cve_id = [] cve_list_HIGH = [] count = 0 for result in db_result: current_cve = [] for data in result: current_cve.append(data) current_cve.pop(0) if current_cve[3] != "N/A": current_cve[3] = current_cve[3].split(" ")[0] if 7.0 <= float(current_cve[3]) <= 8.9: high_cve_id.append(current_cve[0]) count +=1 for cve in high_cve_id: infos = getRegisteredCveInfos(cve,full=False) it = [] it.append(infos['cve_id']) it.append(infos['cve_description']) it.append(infos['cve_date']) it.append(infos['cve_score']) it.append(infos['cve_status']) it.append(infos['cve_cpe']) it.append(infos['cve_sources']) it.append(infos['cve_mgmt_status']) cve_list_HIGH.append(it) if count == 0: result = False return render_template('details-cve-high.html',result=result) else: return render_template('details-cve-high.html',cve_list_HIGH=cve_list_HIGH) @app.route('/details-cve-critical') @login_required def getCriticalCVE(): conn = get_db_connection() db_result = conn.execute('SELECT * FROM CVE_DATA',).fetchall() critical_cve_id = [] cve_list_CRITICAL = [] count = 0 for result in db_result: current_cve = [] for data in result: current_cve.append(data) current_cve.pop(0) if current_cve[3] != "N/A": current_cve[3] = current_cve[3].split(" ")[0] if 9.0 <= float(current_cve[3]) <= 10: critical_cve_id.append(current_cve[0]) count +=1 for cve in critical_cve_id: infos = getRegisteredCveInfos(cve,full=False) it = [] it.append(infos['cve_id']) it.append(infos['cve_description']) it.append(infos['cve_date']) it.append(infos['cve_score']) it.append(infos['cve_status']) it.append(infos['cve_cpe']) it.append(infos['cve_sources']) it.append(infos['cve_mgmt_status']) cve_list_CRITICAL.append(it) if count == 0: result = False return render_template('details-cve-critical.html',result=result) else: return render_template('details-cve-critical.html',cve_list_CRITICAL=cve_list_CRITICAL) @app.route('/config',methods=['GET', 'POST']) @login_required def config(): if request.method == 'POST': if "submit_smtp_config" in request.form: regex = '^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$' sender = request.form['email'] if not (re.search(regex,sender)): flash("Wrong email format for the sender.","danger") return render_template('config.html') smtp_login = request.form['login'] smtp_password = request.form['pass1'] password2 = request.form['pass2'] smtpsrv = request.form['server'] port = request.form['port'] receivers = request.form['recipients'] if smtp_password != password2: flash("The two passwords do not match. ","danger") return render_template('config.html') try: int(port) except: flash("Invalid port format. ","danger") return render_template('config.html') if ";" in receivers: receivers = receivers.split(";") else: mono_rec = receivers receivers = [] receivers.append(mono_rec) for r in receivers: if not (re.search(regex,r)): flash("Wrong email format for the recipients. ","danger") return render_template('config.html') tls = request.form['tls'] if mailTester(smtp_login, smtp_password, smtpsrv, port, tls, sender, receivers): flash("The test email was sent successfully. ","success") return render_template('config.html') else: flash("Failed to send test email. ","danger") return render_template('config.html') else: return render_template('config.html') @app.route('/reports',methods=['GET', 'POST']) @login_required def reports(): script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_web.py","") filename = "SECMON-CVE-Report.xlsx" if request.method == 'POST': if not 'btn-full' in request.form: start_date = request.form["start_date"].split('-') end_date = request.form["end_date"].split('-') start_date = start_date[2]+"/"+start_date[1]+"/"+start_date[0] end_date = end_date[2]+"/"+end_date[1]+"/"+end_date[0] start_date_obj = datetime.strptime(start_date, "%d/%m/%Y") end_date_obj = datetime.strptime(end_date, "%d/%m/%Y") now = datetime.now() if start_date_obj >= end_date_obj: flash("Invalid date range. ","danger") return render_template('reports.html') elif end_date_obj > now: flash("Invalid end date. ","danger") return render_template('reports.html') else: generateCveReport(start_date_obj,end_date_obj,isFull=False) return send_from_directory(directory=dir_path, filename=filename,as_attachment=True) else: generateCveReport(datetime.strptime("01/01/2020", "%d/%m/%Y"),datetime.strptime("01/01/2020", "%d/%m/%Y"),isFull=True) return send_from_directory(directory=dir_path, filename=filename,as_attachment=True) else: if os.path.isfile(dir_path+filename): os.remove(dir_path+filename) return render_template('reports.html') @app.route('/logs') @login_required def logs(): script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_web.py","") logfile = dir_path+"logs.txt" logs_lines = [] count = 0 if os.path.isfile(logfile) == True: try: for line in reversed(list(open(logfile, encoding='utf8'))): logs_lines.append(line.rstrip()) count+=1 if count >= 100: break except: flash("""Error. You haven't permissions for read the log file.""", "danger") return render_template('logs.html') else: flash("""Error. The log file is not present.""", "danger") return render_template('logs.html') return render_template('logs.html', logs=logs_lines) @app.route('/cve/') @login_required def cveInfos(cve_id): infos = getUnregisteredCveInfos(cve_id) if infos['cve_weakness'] != "N/A": weakness_nb = infos['cve_weakness'].split("-")[1] else: weakness_nb = "N/A" return render_template('result.html',back_path="../../vuln-mgmt",cve_id=infos['cve_id'] ,cve_summary=infos['cve_description'],cve_dbs=infos['cve_dbs'],cve_date=infos['cve_date'],cve_score=infos['cve_score'],cve_status=infos['cve_status'],cve_cpe=infos['cve_cpe'],cve_sources=infos['cve_sources'],cve_av=infos['cve_av'],cve_ac=infos['cve_ac'],cve_pr=infos['cve_pr'],cve_ui=infos['cve_ui'],cve_scope=infos['cve_scope'],cve_confid=infos['cve_confid'],cve_integrity=infos['cve_integrity'],cve_avail=infos['cve_avail'],cve_expa=infos['cve_expa'],cve_weakness=infos['cve_weakness'],weakness_nb=weakness_nb,back="../../") @app.route('/by-product-vulns',methods=['GET', 'POST']) @login_required def byProductVulns(): if request.method == 'POST': product = request.form['product_selection'] critical_cve, high_cve, medium_cve, low_cve, na_cve, exploitable_cve = getCveByProduct(product,True) total_count = len(critical_cve)+len(high_cve)+len(medium_cve)+len(low_cve)+len(na_cve) counters = [total_count,len(critical_cve),len(high_cve),len(medium_cve),len(low_cve),len(na_cve),len(exploitable_cve)] pinfos = getProductInfos(product) if "cpe" in product: product = getParsedCpe(product) else: product = pinfos[4] return render_template('product-card.html', critical_cve=critical_cve, high_cve=high_cve, medium_cve=medium_cve, low_cve=low_cve, na_cve=na_cve, exploitable_cve=exploitable_cve,product=product,pinfos=pinfos,counters=counters) else: plist = getFormatedProductList() critical_p = getHighRiskProducts("all") critical_cpe = [] critical_keyword = [] for p in critical_p: if p[0] == "N/A": critical_keyword.append(p) else: critical_cpe.append(p) return render_template('by-product-vulns.html', plist=plist,crit_cpe=critical_cpe,crit_key=critical_keyword) @app.route('/about') @login_required def about(): return render_template('about.html',version=__version__) @app.route('/tasks') @login_required def tasks(): tasks = getTasks() return render_template('tasks.html',tasks=tasks) @app.route('/product-mgmt',methods=['GET', 'POST']) @login_required def psearch(): if request.method == 'POST': if 'psearchbtn' in request.form: if request.form['product'] != "" and request.form['product'] != " ": product_user_search = request.form['product'] nvd_query = "https://services.nvd.nist.gov/rest/json/cpes/1.0?keyword="+product_user_search+"&resultsPerPage=1000" nvd_response = requests.get(url=nvd_query) try: nvd_data = nvd_response.json() except: flash("""No results.""", "warning") return render_template('product-mgmt.html') if 'result' in nvd_data.keys(): cpelist = nvd_data['result']['cpes'] result = [] if cpelist != []: for product in cpelist: current_product = [] product = product['cpe23Uri'].replace("*","All") disassmbled_cpe = product.split(":") ptype = "" if disassmbled_cpe[2] == "o": ptype = "Operating System" elif disassmbled_cpe[2] == "a": ptype = "Application" else: ptype = "Hardware" pvendor = disassmbled_cpe[3].replace("_"," ") pproduct = disassmbled_cpe[4].replace("_"," ") pversion = disassmbled_cpe[5] pcpe = product.replace("All","*") current_product.append(ptype) current_product.append(pvendor) current_product.append(pproduct) current_product.append(pversion) current_product.append(pcpe) result.append(current_product) return render_template('product-mgmt.html', result=result) else: flash("""No results.""", "warning") return render_template('product-mgmt.html') else: flash("""No results.""", "warning") return render_template('product-mgmt.html') elif 'submit_product_action' in request.form: action = request.form['product_action'] ptype = request.form['product_type'] key_or_cpe = request.form['keyword'] if action == "Add": p = Process(target=addProduct, args=(ptype,key_or_cpe,)) p.start() flash('New product registration in progress... You can track new tasks Tasks tab. ',"success") return render_template('product-mgmt.html') else: if deleteProduct(ptype, key_or_cpe) == "OK": flash("The product has been deleted successfully. ","success") return render_template('product-mgmt.html') else: flash("Unable to delete this product. ","danger") return render_template('product-mgmt.html') elif "submit_import_csv_file" in request.form: script_path = os.path.abspath(__file__) dir_path = script_path.replace("secmon_web.py","") file = request.files.get("file") filename = file.filename if filename.split(".")[1] == "csv" and len(filename.split(".")) == 2: try: file.save(os.path.join(dir_path,filename)) f = open(dir_path+filename,"r").readlines() for line in f: line = line.replace("\\\n","").replace("\n","") if line != "" and line != "\n": if "cpe" in line: p = Process(target=addProduct, args=("CPE",line,)) p.start() else: p = Process(target=addProduct, args=("keyword",line,)) p.start() flash('File successfully uploaded. You can track new tasks in the "Administration > Task." tab. ', "success") os.remove(dir_path+filename) return render_template('product-mgmt.html') except: flash('Bad format. Unable to read your csv file. ', "success") os.remove(dir_path+filename) return render_template('product-mgmt.html') else: flash('Bad format. Unable to read the file. ', "danger") return render_template('product-mgmt.html') elif "submit_product_display" in request.form: ptype = request.form["product_type"] if showProducts(ptype)[0] == "OK": plist = showProducts(ptype)[1] return render_template('product-mgmt.html', plist=plist) else: flash("Unable to display your product list. ","danger") return render_template('product-mgmt.html') else: flash("""Please enter a value.""", "warning") return render_template('product-mgmt.html') else: return render_template('product-mgmt.html') @app.route('/') def serveStaticResource(resource): return send_from_directory('static/', resource) @app.errorhandler(Exception) def handle_exception(error): now = datetime.now() now = now.strftime("%d/%m/%Y, %H:%M:%S") print(f"################## NEW GUI ERROR AT {now} ##################") print(f"######## URL : {request.base_url} ##########") print(print_exc()) print("################## PLEASE REPORT THIS ON GITHUB ##################") return render_template("errors.html"), 200 if __name__ == '__main__': app.run(debug=False,threaded=True) ================================================ FILE: setup.py ================================================ # -*- coding: utf-8 -*- """ SECMON - Source code of the SECMON setup script. """ __author__ = "Aubin Custodio" __copyright__ = "Copyright 2021, SECMON" __credits__ = ["Aubin Custodio","Guezone"] __license__ = "CC BY-NC-SA 4.0" __version__ = "2.1" __maintainer__ = "Aubin Custodio" __email__ = "custodio.aubin@outlook.com" import sys, base64, time, os, smtplib,argparse, re, sqlite3, feedparser, requests from werkzeug.security import generate_password_hash, check_password_hash from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from secmon_lib import pollCveIdFromCpe, registerNewCve, getCpeList, getKeywordsList from datetime import datetime, timedelta from getpass import getpass from traceback_with_variables import print_exc rss_feeds = [ 'https://cyware.com/allnews/feed', 'https://www.cshub.com/rss/categories/attacks', 'https://www.schneier.com/feed/atom/', 'https://www.cshub.com/rss/categories/cloud' , 'https://www.cshub.com/rss/categories/iot', 'https://www.cshub.com/rss/categories/data', 'https://www.cshub.com/rss/categories/executive-decisions', 'https://www.cshub.com/rss/categories/network', 'https://krebsonsecurity.com/feed/', 'https://www.cshub.com/rss/categories/threat-defense', 'https://www.fortiguard.com/rss/ir.xml', 'https://nakedsecurity.sophos.com/feed/', 'https://www.techrepublic.com/rssfeeds/topic/security/?feedType=rssfeeds', 'http://feeds.feedburner.com/TheHackersNews?format=xml', 'https://www.cert.ssi.gouv.fr/feed/', 'https://us-cert.cisa.gov/ncas/all.xml', 'https://www.zataz.com/feed/' ] def handleException(error): now = datetime.now() now = now.strftime("%d/%m/%Y, %H:%M:%S") print(f"################## NEW SETUP ERROR AT {now} ##################") print(print_exc()) print("################## PLEASE REPORT THIS ON GITHUB ##################") def mailTester(smtp_login, smtp_passwd, server, port, tls, sender, receivers, language,github_username,github_api_key,username,password): print() configBuilder(smtp_login, smtp_passwd, server, port, tls, sender, receivers, language,github_username,github_api_key,username,password) buildRSSList(rss_feeds) script_path = os.path.abspath(__file__) dir_path = script_path.replace("setup.py","") body = "" receivers_email = receivers.split(";") with open(dir_path+'rss_template.html', 'r') as template: html_code = template.read() html_code = html_code.replace("Notification","SECMON") html_code = html_code.replace("Title : $TITLE

","") html_code = html_code.replace("Source : $SOURCE

","") if language =="en" or language == "EN": html_code = html_code.replace("RSS module","Test email") html_code = html_code.replace("Summary : $SUMMARY
","SECMON is an active security watch program that alerts you to the latest vulnerabilities and threats.") html_code = html_code.replace("Responsive HTML email templates","SECMON - Test email.") html_code = html_code.replace("See more details","Follow me on Github") body = html_code.replace("URL OF THE NEWS","https://github.com/Guezone/SECMON") elif language =="fr" or language == "FR": html_code = html_code.replace("RSS module","Mail de test") html_code = html_code.replace("Summary : $SUMMARY
","SECMON est un programme de veille sécurité active\net vous averti des dernières vulnérabilités et menaces.") html_code = html_code.replace("Responsive HTML email templates","SECMON - Mail de test.") html_code = html_code.replace("See more details","Suivez-moi sur Github") html_code = html_code.replace("This email was sent by", "Cet email a été envoyé par") body = html_code.replace("URL OF THE NEWS","https://github.com/Guezone/SECMON") else: print("Incorrect language set. Please retry. Exiting...") for receiver in receivers_email: try: print("\nPlease wait. A test message to {} will be sent to test your configuration.\n".format(receiver)) smtpserver = smtplib.SMTP(server,port) msg = MIMEMultipart() if language =="en" or language == "EN": msg['Subject'] = 'SECMON - Test email.' elif language =="fr" or language == "FR": msg['Subject'] = 'SECMON - Mail de test.' else: print("Incorrect language set. Please retry. Exiting...") msg['From'] = sender msg['To'] = receiver msg.attach(MIMEText(body, 'html')) except Exception as e: handleException(e) print("Incorrect configuration. Exit") exit() try: if tls == "yes": smtpserver.ehlo() smtpserver.starttls() smtpserver.login(smtp_login, smtp_passwd) smtpserver.sendmail(sender, receiver, msg.as_string()) elif tls == "no": smtpserver.login(smtp_login, smtp_passwd) smtpserver.sendmail(sender, receiver, msg.as_string()) else: print("You must specify if you want to use TLS(-tls yes|no). Exit.") exit() except Exception as e: handleException(e) print("An error occurred during authentication with the SMTP server. Check the configuration and try again.") exit() print("SECMON is now ready. Execute secmon.py now and automate it.") def buildRSSList(rss_feeds): script_path = os.path.abspath(__file__) dir_path = script_path.replace("setup.py","") print("\nRSS news database recording in progress...\n") con = sqlite3.connect(dir_path+'secmon.db') con.execute('''CREATE TABLE RSS_DATA ([key] INTEGER PRIMARY KEY,[RSS_URL] text,[title] text,[rss_f] text,[summary] text)''') cur = con.cursor() con.commit() con.execute('''CREATE TABLE CVE_DATA ([key] INTEGER PRIMARY KEY,[CVE_ID] text,[KEYWORD] text,[STATUS] text,[CVE_SCORE] text,[CVE_DATE] text,[CVE_DESCRIPTION] text,[CVE_EVAL] text,[CVE_CPE] text,[CVE_SOURCES] text,[EXPLOIT_FIND] text,[INDEXING_DATE] text)''') con.execute('''CREATE TABLE high_risk_products ([key] INTEGER PRIMARY KEY,[cpe] text,[hname] text)''') con.execute('''CREATE TABLE tasks ([key] INTEGER PRIMARY KEY,[task_id] text,[status] text,[comment] text)''') con.commit() for rss_feed in rss_feeds: current_feed = feedparser.parse(rss_feed) for entries in current_feed.entries: url = str(entries.link) title = entries.title summary = entries.summary cur.execute("INSERT INTO RSS_DATA (RSS_URL, title, rss_f, summary) VALUES (?,?,?,?);", (url,title,rss_feed,summary)) con.commit() print("Successful build database.\n") def configBuilder(smtp_login, smtp_passwd, smtpsrv, port, tls, sender, receiver, language,github_username,github_api_key,username,password): script_path = os.path.abspath(__file__) dir_path = script_path.replace("setup.py","") try: os.system(f"touch {dir_path}logs.txt") os.system(f"chmod 777 {dir_path}logs.txt") except: pass enc_pass = (str(base64.b64encode(smtp_passwd.encode("UTF-8"))).replace("b'","")).replace("'","") if os.path.isfile(dir_path+"secmon.db"): os.remove(dir_path+"secmon.db") con = sqlite3.connect(dir_path+'secmon.db') con.execute('''CREATE TABLE config ([key] INTEGER PRIMARY KEY,[sender] text,[smtp_login] text,[smtp_password] text,[smtpsrv] text,[port] text,[receiver] text,[tls] text,[language] text,[github_api_key] text,[github_username] text,[cvss_alert_limit] text,[no_score_cve_alert] text)''') con.execute('''CREATE TABLE keyword_list ([key] INTEGER PRIMARY KEY,[keyword] text)''') con.execute('''CREATE TABLE cpe_list ([key] INTEGER PRIMARY KEY,[cpe] text)''') con.commit() con.execute("INSERT INTO config (smtp_login,smtp_password,smtpsrv,port,sender, receiver,tls,language) VALUES (?,?,?,?,?,?,?,?);", (smtp_login,enc_pass,smtpsrv,str(port),sender, receiver,tls,language)) con.commit() if not github_username or not github_api_key or github_api_key=="" or github_username=="": github_username = input("Please enter your Github username : ") github_api_key = getpass("Please enter your Github API Token : ") try: login_attempt = requests.get('https://api.github.com/search/repositories?q=github+api', auth=(github_username,github_api_key)) if login_attempt.status_code != 200: raise else: con.execute("INSERT INTO config (github_api_key,github_username,cvss_alert_limit,no_score_cve_alert) VALUES (?,?,?,?);", (github_username,github_api_key,"no_limit","True")) con.commit() except Exception as e: handleException(e) print("Github API authentication failed. You can add this config on the web UI after installation...") else: con.execute("INSERT INTO config (github_api_key,github_username,cvss_alert_limit,no_score_cve_alert) VALUES (?,?,?,?);", ("None","None","no_limit","True")) con.commit() if not username or not password or username=="" or password=="": while username == "" or password == "" or password != password2: username = input("Enter the username that can be used on the Web UI : ") password = getpass("Enter the password (please choose a strong password !) : ") password2 = getpass("Confirm the password : ") if password != password2: print("Both passwords must be the same.") if username == "": print("A username must be filled in.") if password == "": print("A password must be entered.") con.execute('''CREATE TABLE users ([uid] INTEGER PRIMARY KEY,[username] text,[pass_hash] text)''') con.execute('''CREATE TABLE secret_key ([uid] INTEGER PRIMARY KEY,[app_secret_key] text)''') con.commit() hashed_pwd = generate_password_hash(password, 'sha512') cur = con.cursor() cur.execute("INSERT INTO users (username, pass_hash) VALUES (?,?);", (username, hashed_pwd)) con.commit() secret_key = os.urandom(2048).hex() cur.execute("INSERT INTO secret_key (app_secret_key) VALUES (?);", (secret_key,)) con.commit() def main(): parser = argparse.ArgumentParser() parser.add_argument("-sender",nargs=1,required=True,metavar="email-addr",help="set sender email address") parser.add_argument("-login",nargs=1,required=True,metavar="smtp_login",help="set SMTP login") parser.add_argument("-p",nargs=1,required=True,metavar="smtp_password",help="set sender SMTP password") parser.add_argument("-server",nargs=1,required=True,metavar="smtp_server",help="set SMTP server name") parser.add_argument("-port",nargs=1,required=True,metavar="port",help="set SMTP port used by the server", type=int) parser.add_argument("-tls",nargs=1,required=True,metavar="yes|no",help="use TLS for SMTP authentication") parser.add_argument("-r",nargs=1,required=True,metavar="email-addr1;email-addr2",help="set receivers email address") parser.add_argument("-lang",nargs=1,required=True,metavar="en|fr",help="set the language of the emails") parser.add_argument("-accept",nargs=1,required=False,metavar="true|false",help="accept CC BY-NC-SA 4.0 SECMON license") parser.add_argument("-github_username",nargs=1,required=False,metavar="github username",help="set github api username") parser.add_argument("-github_api_key",nargs=1,required=False,metavar="github api key",help="set github api token") parser.add_argument("-username",nargs=1,required=False,metavar="username",help="set web ui username") parser.add_argument("-password",nargs=1,required=False,metavar="password",help="set web ui password") args = parser.parse_args() sender = ''.join(args.sender) smtp_login = ''.join(args.login) smtp_passwd = ''.join(args.p) server = ''.join(args.server) port = args.port[0] tls = ''.join(args.tls) receivers = ''.join(args.r) language = ''.join(args.lang) try: accept = ''.join(args.accept) except: accept = "" pass try: github_username = ''.join(args.github_username) except: github_username = "" pass try: github_api_key = ''.join(args.github_api_key) except: github_api_key = "" pass try: username = ''.join(args.username) except: username = "" pass try: password = ''.join(args.password) except: password = "" pass print("------------------------------------") print(f"SECMON setup script - Version {__version__}") print("------------------------------------") if not accept or accept!="true": license_validation = input("SECMON is licensed by CC BY-NC-SA 4.0 license. Do you accept the terms of the license? (y/Y;n/N) : ") if license_validation == "y" or license_validation == "Y": mailTester(smtp_login, smtp_passwd, server, port, tls, sender, receivers, language,github_username,github_api_key,username,password) else: print("\nYou must accept the terms of the license to install and use SECMON.") exit() else: mailTester(smtp_login, smtp_passwd, server, port, tls, sender, receivers, language,github_username,github_api_key,username,password) main() ================================================ FILE: static/css/dataTables.bootstrap.css ================================================ div.dataTables_length label { font-weight: normal; text-align: left; white-space: nowrap; padding-left: 5px; } div.dataTables_length select { width: 75px; display: inline-block; padding-left: 5px; } div.dataTables_filter { text-align: right; } div.dataTables_filter label { font-weight: normal; white-space: nowrap; text-align: left; } div.dataTables_filter input { margin-left: 0.5em; display: inline-block; } div.dataTables_info { padding-top: 8px; white-space: nowrap; } div.dataTables_paginate { margin: 0; white-space: nowrap; text-align: right; } div.dataTables_paginate ul.pagination { margin: 2px 0; white-space: nowrap; } @media screen and (max-width: 767px) { div.dataTables_length, div.dataTables_filter, div.dataTables_info, div.dataTables_paginate { text-align: center; } } table.dataTable td, table.dataTable th { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; } table.dataTable { clear: both; margin-top: 6px !important; margin-bottom: 6px !important; max-width: none !important; } table.dataTable thead .sorting, table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc, table.dataTable thead .sorting_asc_disabled, table.dataTable thead .sorting_desc_disabled { cursor: pointer; } table.dataTable thead .sorting { background: url('../images/sort_both.png') no-repeat center right; } table.dataTable thead .sorting_asc { background: url('../images/sort_asc.png') no-repeat center right; } table.dataTable thead .sorting_desc { background: url('../images/sort_desc.png') no-repeat center right; } table.dataTable thead .sorting_asc_disabled { background: url('../images/sort_asc_disabled.png') no-repeat center right; } table.dataTable thead .sorting_desc_disabled { background: url('../images/sort_desc_disabled.png') no-repeat center right; } table.dataTable thead > tr > th { padding-left: 18px; padding-right: 18px; } table.dataTable th:active { outline: none; } /* Scrolling */ div.dataTables_scrollHead table { margin-bottom: 0 !important; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } div.dataTables_scrollHead table thead tr:last-child th:first-child, div.dataTables_scrollHead table thead tr:last-child td:first-child { border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; } div.dataTables_scrollBody table { border-top: none; margin-top: 0 !important; margin-bottom: 0 !important; } div.dataTables_scrollBody tbody tr:first-child th, div.dataTables_scrollBody tbody tr:first-child td { border-top: none; } div.dataTables_scrollFoot table { margin-top: 0 !important; border-top: none; } /* Frustratingly the border-collapse:collapse used by Bootstrap makes the column width calculations when using scrolling impossible to align columns. We have to use separate */ table.table-bordered.dataTable { border-collapse: separate !important; } table.table-bordered thead th, table.table-bordered thead td { border-left-width: 0; border-top-width: 0; } table.table-bordered tbody th, table.table-bordered tbody td { border-left-width: 0; border-bottom-width: 0; } table.table-bordered th:last-child, table.table-bordered td:last-child { border-right-width: 0; } div.dataTables_scrollHead table.table-bordered { border-bottom-width: 0; } /* * TableTools styles */ .table.dataTable tbody tr.active td, .table.dataTable tbody tr.active th { background-color: #08C; color: white; } .table.dataTable tbody tr.active:hover td, .table.dataTable tbody tr.active:hover th { background-color: #0075b0 !important; } .table.dataTable tbody tr.active th > a, .table.dataTable tbody tr.active td > a { color: white; } .table-striped.dataTable tbody tr.active:nth-child(odd) td, .table-striped.dataTable tbody tr.active:nth-child(odd) th { background-color: #017ebc; } table.DTTT_selectable tbody tr { cursor: pointer; } div.DTTT .btn:hover { text-decoration: none !important; } ul.DTTT_dropdown.dropdown-menu { z-index: 2003; } ul.DTTT_dropdown.dropdown-menu a { color: #333 !important; /* needed only when demo_page.css is included */ } ul.DTTT_dropdown.dropdown-menu li { position: relative; } ul.DTTT_dropdown.dropdown-menu li:hover a { background-color: #0088cc; color: white !important; } div.DTTT_collection_background { z-index: 2002; } /* TableTools information display */ div.DTTT_print_info { position: fixed; top: 50%; left: 50%; width: 400px; height: 150px; margin-left: -200px; margin-top: -75px; text-align: center; color: #333; padding: 10px 30px; opacity: 0.95; background-color: white; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 6px; -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5); box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5); } div.DTTT_print_info h6 { font-weight: normal; font-size: 28px; line-height: 28px; margin: 1em; } div.DTTT_print_info p { font-size: 14px; line-height: 20px; } div.dataTables_processing { position: absolute; top: 50%; left: 50%; width: 100%; height: 60px; margin-left: -50%; margin-top: -25px; padding-top: 20px; padding-bottom: 20px; text-align: center; font-size: 1.2em; background-color: white; background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0))); background: -webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); background: -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); background: -ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); background: -o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); } /* * FixedColumns styles */ div.DTFC_LeftHeadWrapper table, div.DTFC_LeftFootWrapper table, div.DTFC_RightHeadWrapper table, div.DTFC_RightFootWrapper table, table.DTFC_Cloned tr.even { background-color: white; margin-bottom: 0; } div.DTFC_RightHeadWrapper table , div.DTFC_LeftHeadWrapper table { border-bottom: none !important; margin-bottom: 0 !important; border-top-right-radius: 0 !important; border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; } div.DTFC_RightHeadWrapper table thead tr:last-child th:first-child, div.DTFC_RightHeadWrapper table thead tr:last-child td:first-child, div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child, div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child { border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; } div.DTFC_RightBodyWrapper table, div.DTFC_LeftBodyWrapper table { border-top: none; margin: 0 !important; } div.DTFC_RightBodyWrapper tbody tr:first-child th, div.DTFC_RightBodyWrapper tbody tr:first-child td, div.DTFC_LeftBodyWrapper tbody tr:first-child th, div.DTFC_LeftBodyWrapper tbody tr:first-child td { border-top: none; } div.DTFC_RightFootWrapper table, div.DTFC_LeftFootWrapper table { border-top: none; margin-top: 0 !important; } /* * FixedHeader styles */ div.FixedHeader_Cloned table { margin: 0 !important } ================================================ FILE: static/css/main.css ================================================ Created by FontForge 20190801 at Tue Feb 4 18:05:39 2020 By Robert Madole Copyright (c) Font Awesome Created by FontForge 20190801 at Tue Feb 4 18:05:39 2020 By Robert Madole Copyright (c) Font Awesome code { color: inherit; } kbd { padding: 0.2rem 0.4rem; font-size: 87.5%; color: #fff; background-color: #3a3b45; border-radius: 0.2rem; } kbd kbd { padding: 0; font-size: 100%; font-weight: 700; } pre { display: block; font-size: 87.5%; color: #3a3b45; } pre code { font-size: inherit; color: inherit; word-break: normal; } .pre-scrollable { max-height: 340px; overflow-y: scroll; } .container { width: 100%; padding-right: 0.75rem; padding-left: 0.75rem; margin-right: auto; margin-left: auto; } @media (min-width: 576px) { .container { max-width: 540px; } } @media (min-width: 768px) { .container { max-width: 720px; } } @media (min-width: 992px) { .container { max-width: 960px; } } @media (min-width: 1200px) { .container { max-width: 1140px; } } .container-fluid, .container-sm, .container-md, .container-lg, .container-xl { width: 100%; padding-right: 0.75rem; padding-left: 0.75rem; margin-right: auto; margin-left: auto; } @media (min-width: 576px) { .container, .container-sm { max-width: 540px; } } @media (min-width: 768px) { .container, .container-sm, .container-md { max-width: 720px; } } @media (min-width: 992px) { .container, .container-sm, .container-md, .container-lg { max-width: 960px; } } @media (min-width: 1200px) { .container, .container-sm, .container-md, .container-lg, .container-xl { max-width: 1140px; } } .row { display: flex; flex-wrap: wrap; margin-right: -0.75rem; margin-left: -0.75rem; } .no-gutters { margin-right: 0; margin-left: 0; } .no-gutters > .col, .no-gutters > [class*="col-"] { padding-right: 0; padding-left: 0; } .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-auto, .col-sm-1, .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-10, .col-sm-11, .col-sm-12, .col-sm, .col-sm-auto, .col-md-1, .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-10, .col-md-11, .col-md-12, .col-md, .col-md-auto, .col-lg-1, .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-10, .col-lg-11, .col-lg-12, .col-lg, .col-lg-auto, .col-xl-1, .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-10, .col-xl-11, .col-xl-12, .col-xl, .col-xl-auto { position: relative; width: 100%; padding-right: 0.75rem; padding-left: 0.75rem; } .col { flex-basis: 0; flex-grow: 1; min-width: 0; max-width: 100%; } .row-cols-1 > * { flex: 0 0 100%; max-width: 100%; } .row-cols-2 > * { flex: 0 0 50%; max-width: 50%; } .row-cols-3 > * { flex: 0 0 33.33333%; max-width: 33.33333%; } .row-cols-4 > * { flex: 0 0 25%; max-width: 25%; } .row-cols-5 > * { flex: 0 0 20%; max-width: 20%; } .row-cols-6 > * { flex: 0 0 16.66667%; max-width: 16.66667%; } .col-auto { flex: 0 0 auto; width: auto; max-width: 100%; } .col-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } .col-2 { flex: 0 0 16.66667%; max-width: 16.66667%; } .col-3 { flex: 0 0 25%; max-width: 25%; } .col-4 { flex: 0 0 33.33333%; max-width: 33.33333%; } .col-5 { flex: 0 0 41.66667%; max-width: 41.66667%; } .col-6 { flex: 0 0 50%; max-width: 50%; } .col-7 { flex: 0 0 58.33333%; max-width: 58.33333%; } .col-8 { flex: 0 0 66.66667%; max-width: 66.66667%; } .col-9 { flex: 0 0 75%; max-width: 75%; } .col-10 { flex: 0 0 83.33333%; max-width: 83.33333%; } .col-11 { flex: 0 0 91.66667%; max-width: 91.66667%; } .col-12 { flex: 0 0 100%; max-width: 100%; } .order-first { order: -1; } .order-last { order: 13; } .order-0 { order: 0; } .order-1 { order: 1; } .order-2 { order: 2; } .order-3 { order: 3; } .order-4 { order: 4; } .order-5 { order: 5; } .order-6 { order: 6; } .order-7 { order: 7; } .order-8 { order: 8; } .order-9 { order: 9; } .order-10 { order: 10; } .order-11 { order: 11; } .order-12 { order: 12; } .offset-1 { margin-left: 8.33333%; } .offset-2 { margin-left: 16.66667%; } .offset-3 { margin-left: 25%; } .offset-4 { margin-left: 33.33333%; } .offset-5 { margin-left: 41.66667%; } .offset-6 { margin-left: 50%; } .offset-7 { margin-left: 58.33333%; } .offset-8 { margin-left: 66.66667%; } .offset-9 { margin-left: 75%; } .offset-10 { margin-left: 83.33333%; } .offset-11 { margin-left: 91.66667%; } @media (min-width: 576px) { .col-sm { flex-basis: 0; flex-grow: 1; min-width: 0; max-width: 100%; } .row-cols-sm-1 > * { flex: 0 0 100%; max-width: 100%; } .row-cols-sm-2 > * { flex: 0 0 50%; max-width: 50%; } .row-cols-sm-3 > * { flex: 0 0 33.33333%; max-width: 33.33333%; } .row-cols-sm-4 > * { flex: 0 0 25%; max-width: 25%; } .row-cols-sm-5 > * { flex: 0 0 20%; max-width: 20%; } .row-cols-sm-6 > * { flex: 0 0 16.66667%; max-width: 16.66667%; } .col-sm-auto { flex: 0 0 auto; width: auto; max-width: 100%; } .col-sm-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } .col-sm-2 { flex: 0 0 16.66667%; max-width: 16.66667%; } .col-sm-3 { flex: 0 0 25%; max-width: 25%; } .col-sm-4 { flex: 0 0 33.33333%; max-width: 33.33333%; } .col-sm-5 { flex: 0 0 41.66667%; max-width: 41.66667%; } .col-sm-6 { flex: 0 0 50%; max-width: 50%; } .col-sm-7 { flex: 0 0 58.33333%; max-width: 58.33333%; } .col-sm-8 { flex: 0 0 66.66667%; max-width: 66.66667%; } .col-sm-9 { flex: 0 0 75%; max-width: 75%; } .col-sm-10 { flex: 0 0 83.33333%; max-width: 83.33333%; } .col-sm-11 { flex: 0 0 91.66667%; max-width: 91.66667%; } .col-sm-12 { flex: 0 0 100%; max-width: 100%; } .order-sm-first { order: -1; } .order-sm-last { order: 13; } .order-sm-0 { order: 0; } .order-sm-1 { order: 1; } .order-sm-2 { order: 2; } .order-sm-3 { order: 3; } .order-sm-4 { order: 4; } .order-sm-5 { order: 5; } .order-sm-6 { order: 6; } .order-sm-7 { order: 7; } .order-sm-8 { order: 8; } .order-sm-9 { order: 9; } .order-sm-10 { order: 10; } .order-sm-11 { order: 11; } .order-sm-12 { order: 12; } .offset-sm-0 { margin-left: 0; } .offset-sm-1 { margin-left: 8.33333%; } .offset-sm-2 { margin-left: 16.66667%; } .offset-sm-3 { margin-left: 25%; } .offset-sm-4 { margin-left: 33.33333%; } .offset-sm-5 { margin-left: 41.66667%; } .offset-sm-6 { margin-left: 50%; } .offset-sm-7 { margin-left: 58.33333%; } .offset-sm-8 { margin-left: 66.66667%; } .offset-sm-9 { margin-left: 75%; } .offset-sm-10 { margin-left: 83.33333%; } .offset-sm-11 { margin-left: 91.66667%; } } @media (min-width: 768px) { .col-md { flex-basis: 0; flex-grow: 1; min-width: 0; max-width: 100%; } .row-cols-md-1 > * { flex: 0 0 100%; max-width: 100%; } .row-cols-md-2 > * { flex: 0 0 50%; max-width: 50%; } .row-cols-md-3 > * { flex: 0 0 33.33333%; max-width: 33.33333%; } .row-cols-md-4 > * { flex: 0 0 25%; max-width: 25%; } .row-cols-md-5 > * { flex: 0 0 20%; max-width: 20%; } .row-cols-md-6 > * { flex: 0 0 16.66667%; max-width: 16.66667%; } .col-md-auto { flex: 0 0 auto; width: auto; max-width: 100%; } .col-md-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } .col-md-2 { flex: 0 0 16.66667%; max-width: 16.66667%; } .col-md-3 { flex: 0 0 25%; max-width: 25%; } .col-md-4 { flex: 0 0 33.33333%; max-width: 33.33333%; } .col-md-5 { flex: 0 0 41.66667%; max-width: 41.66667%; } .col-md-6 { flex: 0 0 50%; max-width: 50%; } .col-md-7 { flex: 0 0 58.33333%; max-width: 58.33333%; } .col-md-8 { flex: 0 0 66.66667%; max-width: 66.66667%; } .col-md-9 { flex: 0 0 75%; max-width: 75%; } .col-md-10 { flex: 0 0 83.33333%; max-width: 83.33333%; } .col-md-11 { flex: 0 0 91.66667%; max-width: 91.66667%; } .col-md-12 { flex: 0 0 100%; max-width: 100%; } .order-md-first { order: -1; } .order-md-last { order: 13; } .order-md-0 { order: 0; } .order-md-1 { order: 1; } .order-md-2 { order: 2; } .order-md-3 { order: 3; } .order-md-4 { order: 4; } .order-md-5 { order: 5; } .order-md-6 { order: 6; } .order-md-7 { order: 7; } .order-md-8 { order: 8; } .order-md-9 { order: 9; } .order-md-10 { order: 10; } .order-md-11 { order: 11; } .order-md-12 { order: 12; } .offset-md-0 { margin-left: 0; } .offset-md-1 { margin-left: 8.33333%; } .offset-md-2 { margin-left: 16.66667%; } .offset-md-3 { margin-left: 25%; } .offset-md-4 { margin-left: 33.33333%; } .offset-md-5 { margin-left: 41.66667%; } .offset-md-6 { margin-left: 50%; } .offset-md-7 { margin-left: 58.33333%; } .offset-md-8 { margin-left: 66.66667%; } .offset-md-9 { margin-left: 75%; } .offset-md-10 { margin-left: 83.33333%; } .offset-md-11 { margin-left: 91.66667%; } } @media (min-width: 992px) { .col-lg { flex-basis: 0; flex-grow: 1; min-width: 0; max-width: 100%; } .row-cols-lg-1 > * { flex: 0 0 100%; max-width: 100%; } .row-cols-lg-2 > * { flex: 0 0 50%; max-width: 50%; } .row-cols-lg-3 > * { flex: 0 0 33.33333%; max-width: 33.33333%; } .row-cols-lg-4 > * { flex: 0 0 25%; max-width: 25%; } .row-cols-lg-5 > * { flex: 0 0 20%; max-width: 20%; } .row-cols-lg-6 > * { flex: 0 0 16.66667%; max-width: 16.66667%; } .col-lg-auto { flex: 0 0 auto; width: auto; max-width: 100%; } .col-lg-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } .col-lg-2 { flex: 0 0 16.66667%; max-width: 16.66667%; } .col-lg-3 { flex: 0 0 25%; max-width: 25%; } .col-lg-4 { flex: 0 0 33.33333%; max-width: 33.33333%; } .col-lg-5 { flex: 0 0 41.66667%; max-width: 41.66667%; } .col-lg-6 { flex: 0 0 50%; max-width: 50%; } .col-lg-7 { flex: 0 0 58.33333%; max-width: 58.33333%; } .col-lg-8 { flex: 0 0 66.66667%; max-width: 66.66667%; } .col-lg-9 { flex: 0 0 75%; max-width: 75%; } .col-lg-10 { flex: 0 0 83.33333%; max-width: 83.33333%; } .col-lg-11 { flex: 0 0 91.66667%; max-width: 91.66667%; } .col-lg-12 { flex: 0 0 100%; max-width: 100%; } .order-lg-first { order: -1; } .order-lg-last { order: 13; } .order-lg-0 { order: 0; } .order-lg-1 { order: 1; } .order-lg-2 { order: 2; } .order-lg-3 { order: 3; } .order-lg-4 { order: 4; } .order-lg-5 { order: 5; } .order-lg-6 { order: 6; } .order-lg-7 { order: 7; } .order-lg-8 { order: 8; } .order-lg-9 { order: 9; } .order-lg-10 { order: 10; } .order-lg-11 { order: 11; } .order-lg-12 { order: 12; } .offset-lg-0 { margin-left: 0; } .offset-lg-1 { margin-left: 8.33333%; } .offset-lg-2 { margin-left: 16.66667%; } .offset-lg-3 { margin-left: 25%; } .offset-lg-4 { margin-left: 33.33333%; } .offset-lg-5 { margin-left: 41.66667%; } .offset-lg-6 { margin-left: 50%; } .offset-lg-7 { margin-left: 58.33333%; } .offset-lg-8 { margin-left: 66.66667%; } .offset-lg-9 { margin-left: 75%; } .offset-lg-10 { margin-left: 83.33333%; } .offset-lg-11 { margin-left: 91.66667%; } } @media (min-width: 1200px) { .col-xl { flex-basis: 0; flex-grow: 1; min-width: 0; max-width: 100%; } .row-cols-xl-1 > * { flex: 0 0 100%; max-width: 100%; } .row-cols-xl-2 > * { flex: 0 0 50%; max-width: 50%; } .row-cols-xl-3 > * { flex: 0 0 33.33333%; max-width: 33.33333%; } .row-cols-xl-4 > * { flex: 0 0 25%; max-width: 25%; } .row-cols-xl-5 > * { flex: 0 0 20%; max-width: 20%; } .row-cols-xl-6 > * { flex: 0 0 16.66667%; max-width: 16.66667%; } .col-xl-auto { flex: 0 0 auto; width: auto; max-width: 100%; } .col-xl-1 { flex: 0 0 8.33333%; max-width: 8.33333%; } .col-xl-2 { flex: 0 0 16.66667%; max-width: 16.66667%; } .col-xl-3 { flex: 0 0 25%; max-width: 25%; } .col-xl-4 { flex: 0 0 33.33333%; max-width: 33.33333%; } .col-xl-5 { flex: 0 0 41.66667%; max-width: 41.66667%; } .col-xl-6 { flex: 0 0 50%; max-width: 50%; } .col-xl-7 { flex: 0 0 58.33333%; max-width: 58.33333%; } .col-xl-8 { flex: 0 0 66.66667%; max-width: 66.66667%; } .col-xl-9 { flex: 0 0 75%; max-width: 75%; } .col-xl-10 { flex: 0 0 83.33333%; max-width: 83.33333%; } .col-xl-11 { flex: 0 0 91.66667%; max-width: 91.66667%; } .col-xl-12 { flex: 0 0 100%; max-width: 100%; } .order-xl-first { order: -1; } .order-xl-last { order: 13; } .order-xl-0 { order: 0; } .order-xl-1 { order: 1; } .order-xl-2 { order: 2; } .order-xl-3 { order: 3; } .order-xl-4 { order: 4; } .order-xl-5 { order: 5; } .order-xl-6 { order: 6; } .order-xl-7 { order: 7; } .order-xl-8 { order: 8; } .order-xl-9 { order: 9; } .order-xl-10 { order: 10; } .order-xl-11 { order: 11; } .order-xl-12 { order: 12; } .offset-xl-0 { margin-left: 0; } .offset-xl-1 { margin-left: 8.33333%; } .offset-xl-2 { margin-left: 16.66667%; } .offset-xl-3 { margin-left: 25%; } .offset-xl-4 { margin-left: 33.33333%; } .offset-xl-5 { margin-left: 41.66667%; } .offset-xl-6 { margin-left: 50%; } .offset-xl-7 { margin-left: 58.33333%; } .offset-xl-8 { margin-left: 66.66667%; } .offset-xl-9 { margin-left: 75%; } .offset-xl-10 { margin-left: 83.33333%; } .offset-xl-11 { margin-left: 91.66667%; } } .table { width: 100%; margin-bottom: 1rem; color: #858796; } .table th, .table td { padding: 0.75rem; vertical-align: top; border-top: 1px solid #e3e6f0; } .table thead th { vertical-align: bottom; border-bottom: 2px solid #e3e6f0; } .table tbody + tbody { border-top: 2px solid #e3e6f0; } .table-sm th, .table-sm td { padding: 0.3rem; } .table-bordered { border: 1px solid #e3e6f0; } .table-bordered th, .table-bordered td { border: 1px solid #e3e6f0; } .table-bordered thead th, .table-bordered thead td { border-bottom-width: 2px; } .table-borderless th, .table-borderless td, .table-borderless thead th, .table-borderless tbody + tbody { border: 0; } .table-striped tbody tr:nth-of-type(odd) { background-color: rgba(0, 0, 0, 0.05); } .table-hover tbody tr:hover { color: #858796; background-color: rgba(0, 0, 0, 0.075); } .table-primary, .table-primary > th, .table-primary > td { background-color: #cdd8f6; } .table-primary th, .table-primary td, .table-primary thead th, .table-primary tbody + tbody { border-color: #a3b6ee; } .table-hover .table-primary:hover { background-color: #b7c7f2; } .table-hover .table-primary:hover > td, .table-hover .table-primary:hover > th { background-color: #b7c7f2; } .table-secondary, .table-secondary > th, .table-secondary > td { background-color: #dddde2; } .table-secondary th, .table-secondary td, .table-secondary thead th, .table-secondary tbody + tbody { border-color: #c0c1c8; } .table-hover .table-secondary:hover { background-color: #cfcfd6; } .table-hover .table-secondary:hover > td, .table-hover .table-secondary:hover > th { background-color: #cfcfd6; } .table-success, .table-success > th, .table-success > td { background-color: #bff0de; } .table-success th, .table-success td, .table-success thead th, .table-success tbody + tbody { border-color: #89e2c2; } .table-hover .table-success:hover { background-color: #aaebd3; } .table-hover .table-success:hover > td, .table-hover .table-success:hover > th { background-color: #aaebd3; } .table-info, .table-info > th, .table-info > td { background-color: #c7ebf1; } .table-info th, .table-info td, .table-info thead th, .table-info tbody + tbody { border-color: #96dbe4; } .table-hover .table-info:hover { background-color: #b3e4ec; } .table-hover .table-info:hover > td, .table-hover .table-info:hover > th { background-color: #b3e4ec; } .table-warning, .table-warning > th, .table-warning > td { background-color: #fceec9; } .table-warning th, .table-warning td, .table-warning thead th, .table-warning tbody + tbody { border-color: #fadf9b; } .table-hover .table-warning:hover { background-color: #fbe6b1; } .table-hover .table-warning:hover > td, .table-hover .table-warning:hover > th { background-color: #fbe6b1; } .table-danger, .table-danger > th, .table-danger > td { background-color: #f8ccc8; } .table-danger th, .table-danger td, .table-danger thead th, .table-danger tbody + tbody { border-color: #f3a199; } .table-hover .table-danger:hover { background-color: #f5b7b1; } .table-hover .table-danger:hover > td, .table-hover .table-danger:hover > th { background-color: #f5b7b1; } .table-light, .table-light > th, .table-light > td { background-color: #fdfdfe; } .table-light th, .table-light td, .table-light thead th, .table-light tbody + tbody { border-color: #fbfcfd; } .table-hover .table-light:hover { background-color: #ececf6; } .table-hover .table-light:hover > td, .table-hover .table-light:hover > th { background-color: #ececf6; } .table-dark, .table-dark > th, .table-dark > td { background-color: #d1d1d5; } .table-dark th, .table-dark td, .table-dark thead th, .table-dark tbody + tbody { border-color: #a9aab1; } .table-hover .table-dark:hover { background-color: #c4c4c9; } .table-hover .table-dark:hover > td, .table-hover .table-dark:hover > th { background-color: #c4c4c9; } .table-active, .table-active > th, .table-active > td { background-color: rgba(0, 0, 0, 0.075); } .table-hover .table-active:hover { background-color: rgba(0, 0, 0, 0.075); } .table-hover .table-active:hover > td, .table-hover .table-active:hover > th { background-color: rgba(0, 0, 0, 0.075); } .table .thead-dark th { color: #fff; background-color: #5a5c69; border-color: #6c6e7e; } .table .thead-light th { color: #6e707e; background-color: #eaecf4; border-color: #e3e6f0; } .table-dark { color: #fff; background-color: #5a5c69; } .table-dark th, .table-dark td, .table-dark thead th { border-color: #6c6e7e; } .table-dark.table-bordered { border: 0; } .table-dark.table-striped tbody tr:nth-of-type(odd) { background-color: rgba(255, 255, 255, 0.05); } .table-dark.table-hover tbody tr:hover { color: #fff; background-color: rgba(255, 255, 255, 0.075); } @media (max-width: 575.98px) { .table-responsive-sm { display: block; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; } .table-responsive-sm > .table-bordered { border: 0; } } @media (max-width: 767.98px) { .table-responsive-md { display: block; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; } .table-responsive-md > .table-bordered { border: 0; } } @media (max-width: 991.98px) { .table-responsive-lg { display: block; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; } .table-responsive-lg > .table-bordered { border: 0; } } @media (max-width: 1199.98px) { .table-responsive-xl { display: block; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; } .table-responsive-xl > .table-bordered { border: 0; } } .table-responsive { display: block; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; } .table-responsive > .table-bordered { border: 0; } .form-control { display: block; width: 100%; height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #6e707e; background-color: #fff; background-clip: padding-box; border: 1px solid #d1d3e2; border-radius: 0.35rem; transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .form-control { transition: none; } } .form-control::-ms-expand { background-color: transparent; border: 0; } .form-control:-moz-focusring { color: transparent; text-shadow: 0 0 0 #6e707e; } .form-control:focus { color: #6e707e; background-color: #fff; border-color: #bac8f3; outline: 0; box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.25); } .form-control::-webkit-input-placeholder { color: #858796; opacity: 1; } .form-control::-moz-placeholder { color: #858796; opacity: 1; } .form-control:-ms-input-placeholder { color: #858796; opacity: 1; } .form-control::-ms-input-placeholder { color: #858796; opacity: 1; } .form-control::placeholder { color: #858796; opacity: 1; } .form-control:disabled, .form-control[readonly] { background-color: #eaecf4; opacity: 1; } input[type="date"].form-control, input[type="time"].form-control, input[type="datetime-local"].form-control, input[type="month"].form-control { -webkit-appearance: none; -moz-appearance: none; appearance: none; } select.form-control:focus::-ms-value { color: #6e707e; background-color: #fff; } .form-control-file, .form-control-range { display: block; width: 100%; } .col-form-label { padding-top: calc(0.375rem + 1px); padding-bottom: calc(0.375rem + 1px); margin-bottom: 0; font-size: inherit; line-height: 1.5; } .col-form-label-lg { padding-top: calc(0.5rem + 1px); padding-bottom: calc(0.5rem + 1px); font-size: 1.25rem; line-height: 1.5; } .col-form-label-sm { padding-top: calc(0.25rem + 1px); padding-bottom: calc(0.25rem + 1px); font-size: 0.875rem; line-height: 1.5; } .form-control-plaintext { display: block; width: 100%; padding: 0.375rem 0; margin-bottom: 0; font-size: 1rem; line-height: 1.5; color: #858796; background-color: transparent; border: solid transparent; border-width: 1px 0; } .form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { padding-right: 0; padding-left: 0; } .form-control-sm { height: calc(1.5em + 0.5rem + 2px); padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; border-radius: 0.2rem; } .form-control-lg { height: calc(1.5em + 1rem + 2px); padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; border-radius: 0.3rem; } select.form-control[size], select.form-control[multiple] { height: auto; } textarea.form-control { height: auto; } .form-group { margin-bottom: 1rem; } .form-text { display: block; margin-top: 0.25rem; } .form-row { display: flex; flex-wrap: wrap; margin-right: -5px; margin-left: -5px; } .form-row > .col, .form-row > [class*="col-"] { padding-right: 5px; padding-left: 5px; } .form-check { position: relative; display: block; padding-left: 1.25rem; } .form-check-input { position: absolute; margin-top: 0.3rem; margin-left: -1.25rem; } .form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { color: #858796; } .form-check-label { margin-bottom: 0; } .form-check-inline { display: inline-flex; align-items: center; padding-left: 0; margin-right: 0.75rem; } .form-check-inline .form-check-input { position: static; margin-top: 0; margin-right: 0.3125rem; margin-left: 0; } .valid-feedback { display: none; width: 100%; margin-top: 0.25rem; font-size: 80%; color: #1cc88a; } .valid-tooltip { position: absolute; top: 100%; z-index: 5; display: none; max-width: 100%; padding: 0.25rem 0.5rem; margin-top: .1rem; font-size: 0.875rem; line-height: 1.5; color: #fff; background-color: rgba(28, 200, 138, 0.9); border-radius: 0.35rem; } .was-validated :valid ~ .valid-feedback, .was-validated :valid ~ .valid-tooltip, .is-valid ~ .valid-feedback, .is-valid ~ .valid-tooltip { display: block; } .was-validated .form-control:valid, .form-control.is-valid { border-color: #1cc88a; padding-right: calc(1.5em + 0.75rem); background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%231cc88a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right calc(0.375em + 0.1875rem) center; background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .form-control:valid:focus, .form-control.is-valid:focus { border-color: #1cc88a; box-shadow: 0 0 0 0.2rem rgba(28, 200, 138, 0.25); } .was-validated textarea.form-control:valid, textarea.form-control.is-valid { padding-right: calc(1.5em + 0.75rem); background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } .was-validated .custom-select:valid, .custom-select.is-valid { border-color: #1cc88a; padding-right: calc(0.75em + 2.3125rem); background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%231cc88a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { border-color: #1cc88a; box-shadow: 0 0 0 0.2rem rgba(28, 200, 138, 0.25); } .was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { color: #1cc88a; } .was-validated .form-check-input:valid ~ .valid-feedback, .was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, .form-check-input.is-valid ~ .valid-tooltip { display: block; } .was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { color: #1cc88a; } .was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { border-color: #1cc88a; } .was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { border-color: #34e3a4; background-color: #34e3a4; } .was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { box-shadow: 0 0 0 0.2rem rgba(28, 200, 138, 0.25); } .was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { border-color: #1cc88a; } .was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { border-color: #1cc88a; } .was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { border-color: #1cc88a; box-shadow: 0 0 0 0.2rem rgba(28, 200, 138, 0.25); } .invalid-feedback { display: none; width: 100%; margin-top: 0.25rem; font-size: 80%; color: #e74a3b; } .invalid-tooltip { position: absolute; top: 100%; z-index: 5; display: none; max-width: 100%; padding: 0.25rem 0.5rem; margin-top: .1rem; font-size: 0.875rem; line-height: 1.5; color: #fff; background-color: rgba(231, 74, 59, 0.9); border-radius: 0.35rem; } .was-validated :invalid ~ .invalid-feedback, .was-validated :invalid ~ .invalid-tooltip, .is-invalid ~ .invalid-feedback, .is-invalid ~ .invalid-tooltip { display: block; } .was-validated .form-control:invalid, .form-control.is-invalid { border-color: #e74a3b; padding-right: calc(1.5em + 0.75rem); background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e74a3b' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74a3b' stroke='none'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right calc(0.375em + 0.1875rem) center; background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { border-color: #e74a3b; box-shadow: 0 0 0 0.2rem rgba(231, 74, 59, 0.25); } .was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { padding-right: calc(1.5em + 0.75rem); background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } .was-validated .custom-select:invalid, .custom-select.is-invalid { border-color: #e74a3b; padding-right: calc(0.75em + 2.3125rem); background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e74a3b' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74a3b' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { border-color: #e74a3b; box-shadow: 0 0 0 0.2rem rgba(231, 74, 59, 0.25); } .was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { color: #e74a3b; } .was-validated .form-check-input:invalid ~ .invalid-feedback, .was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, .form-check-input.is-invalid ~ .invalid-tooltip { display: block; } .was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { color: #e74a3b; } .was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { border-color: #e74a3b; } .was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { border-color: #ed7468; background-color: #ed7468; } .was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { box-shadow: 0 0 0 0.2rem rgba(231, 74, 59, 0.25); } .was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { border-color: #e74a3b; } .was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { border-color: #e74a3b; } .was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { border-color: #e74a3b; box-shadow: 0 0 0 0.2rem rgba(231, 74, 59, 0.25); } .form-inline { display: flex; flex-flow: row wrap; align-items: center; } .form-inline .form-check { width: 100%; } @media (min-width: 576px) { .form-inline label { display: flex; align-items: center; justify-content: center; margin-bottom: 0; } .form-inline .form-group { display: flex; flex: 0 0 auto; flex-flow: row wrap; align-items: center; margin-bottom: 0; } .form-inline .form-control { display: inline-block; width: auto; vertical-align: middle; } .form-inline .form-control-plaintext { display: inline-block; } .form-inline .input-group, .form-inline .custom-select { width: auto; } .form-inline .form-check { display: flex; align-items: center; justify-content: center; width: auto; padding-left: 0; } .form-inline .form-check-input { position: relative; flex-shrink: 0; margin-top: 0; margin-right: 0.25rem; margin-left: 0; } .form-inline .custom-control { align-items: center; justify-content: center; } .form-inline .custom-control-label { margin-bottom: 0; } } .btn { display: inline-block; font-weight: 400; color: #858796; text-align: center; vertical-align: middle; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; background-color: transparent; border: 1px solid transparent; padding: 0.375rem 0.75rem; font-size: 1rem; line-height: 1.5; border-radius: 0.35rem; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .btn { transition: none; } } .btn:hover { color: #858796; text-decoration: none; } .btn:focus, .btn.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.25); } .btn.disabled, .btn:disabled { opacity: 0.65; } .btn:not(:disabled):not(.disabled) { cursor: pointer; } a.btn.disabled, fieldset:disabled a.btn { pointer-events: none; } .btn-primary { color: #fff; background-color: #4e73df; border-color: #4e73df; } .btn-primary:hover { color: #fff; background-color: #2e59d9; border-color: #2653d4; } .btn-primary:focus, .btn-primary.focus { color: #fff; background-color: #2e59d9; border-color: #2653d4; box-shadow: 0 0 0 0.2rem rgba(105, 136, 228, 0.5); } .btn-primary.disabled, .btn-primary:disabled { color: #fff; background-color: #4e73df; border-color: #4e73df; } .btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, .show > .btn-primary.dropdown-toggle { color: #fff; background-color: #2653d4; border-color: #244ec9; } .btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-primary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(105, 136, 228, 0.5); } .btn-secondary { color: #fff; background-color: #858796; border-color: #858796; } .btn-secondary:hover { color: #fff; background-color: #717384; border-color: #6b6d7d; } .btn-secondary:focus, .btn-secondary.focus { color: #fff; background-color: #717384; border-color: #6b6d7d; box-shadow: 0 0 0 0.2rem rgba(151, 153, 166, 0.5); } .btn-secondary.disabled, .btn-secondary:disabled { color: #fff; background-color: #858796; border-color: #858796; } .btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, .show > .btn-secondary.dropdown-toggle { color: #fff; background-color: #6b6d7d; border-color: #656776; } .btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, .show > .btn-secondary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(151, 153, 166, 0.5); } .btn-success { color: #fff; background-color: #1cc88a; border-color: #1cc88a; } .btn-success:hover { color: #fff; background-color: #17a673; border-color: #169b6b; } .btn-success:focus, .btn-success.focus { color: #fff; background-color: #17a673; border-color: #169b6b; box-shadow: 0 0 0 0.2rem rgba(62, 208, 156, 0.5); } .btn-success.disabled, .btn-success:disabled { color: #fff; background-color: #1cc88a; border-color: #1cc88a; } .btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, .show > .btn-success.dropdown-toggle { color: #fff; background-color: #169b6b; border-color: #149063; } .btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, .show > .btn-success.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(62, 208, 156, 0.5); } .btn-info { color: #fff; background-color: #36b9cc; border-color: #36b9cc; } .btn-info:hover { color: #fff; background-color: #2c9faf; border-color: #2a96a5; } .btn-info:focus, .btn-info.focus { color: #fff; background-color: #2c9faf; border-color: #2a96a5; box-shadow: 0 0 0 0.2rem rgba(84, 196, 212, 0.5); } .btn-info.disabled, .btn-info:disabled { color: #fff; background-color: #36b9cc; border-color: #36b9cc; } .btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, .show > .btn-info.dropdown-toggle { color: #fff; background-color: #2a96a5; border-color: #278c9b; } .btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, .show > .btn-info.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(84, 196, 212, 0.5); } .btn-warning { color: #fff; background-color: #f6c23e; border-color: #f6c23e; } .btn-warning:hover { color: #fff; background-color: #f4b619; border-color: #f4b30d; } .btn-warning:focus, .btn-warning.focus { color: #fff; background-color: #f4b619; border-color: #f4b30d; box-shadow: 0 0 0 0.2rem rgba(247, 203, 91, 0.5); } .btn-warning.disabled, .btn-warning:disabled { color: #fff; background-color: #f6c23e; border-color: #f6c23e; } .btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, .show > .btn-warning.dropdown-toggle { color: #fff; background-color: #f4b30d; border-color: #e9aa0b; } .btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-warning.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(247, 203, 91, 0.5); } .btn-danger { color: #fff; background-color: #e74a3b; border-color: #e74a3b; } .btn-danger:hover { color: #fff; background-color: #e02d1b; border-color: #d52a1a; } .btn-danger:focus, .btn-danger.focus { color: #fff; background-color: #e02d1b; border-color: #d52a1a; box-shadow: 0 0 0 0.2rem rgba(235, 101, 88, 0.5); } .btn-danger.disabled, .btn-danger:disabled { color: #fff; background-color: #e74a3b; border-color: #e74a3b; } .btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, .show > .btn-danger.dropdown-toggle { color: #fff; background-color: #d52a1a; border-color: #ca2819; } .btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-danger.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(235, 101, 88, 0.5); } .btn-light { color: #3a3b45; background-color: #f8f9fc; border-color: #f8f9fc; } .btn-light:hover { color: #3a3b45; background-color: #dde2f1; border-color: #d4daed; } .btn-light:focus, .btn-light.focus { color: #3a3b45; background-color: #dde2f1; border-color: #d4daed; box-shadow: 0 0 0 0.2rem rgba(220, 221, 225, 0.5); } .btn-light.disabled, .btn-light:disabled { color: #3a3b45; background-color: #f8f9fc; border-color: #f8f9fc; } .btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, .show > .btn-light.dropdown-toggle { color: #3a3b45; background-color: #d4daed; border-color: #cbd3e9; } .btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, .show > .btn-light.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(220, 221, 225, 0.5); } .btn-dark { color: #fff; background-color: #5a5c69; border-color: #5a5c69; } .btn-dark:hover { color: #fff; background-color: #484a54; border-color: #42444e; } .btn-dark:focus, .btn-dark.focus { color: #fff; background-color: #484a54; border-color: #42444e; box-shadow: 0 0 0 0.2rem rgba(115, 116, 128, 0.5); } .btn-dark.disabled, .btn-dark:disabled { color: #fff; background-color: #5a5c69; border-color: #5a5c69; } .btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, .show > .btn-dark.dropdown-toggle { color: #fff; background-color: #42444e; border-color: #3d3e47; } .btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, .show > .btn-dark.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(115, 116, 128, 0.5); } .btn-outline-primary { color: #4e73df; border-color: #4e73df; } .btn-outline-primary:hover { color: #fff; background-color: #4e73df; border-color: #4e73df; } .btn-outline-primary:focus, .btn-outline-primary.focus { box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.5); } .btn-outline-primary.disabled, .btn-outline-primary:disabled { color: #4e73df; background-color: transparent; } .btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, .show > .btn-outline-primary.dropdown-toggle { color: #fff; background-color: #4e73df; border-color: #4e73df; } .btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-primary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.5); } .btn-outline-secondary { color: #858796; border-color: #858796; } .btn-outline-secondary:hover { color: #fff; background-color: #858796; border-color: #858796; } .btn-outline-secondary:focus, .btn-outline-secondary.focus { box-shadow: 0 0 0 0.2rem rgba(133, 135, 150, 0.5); } .btn-outline-secondary.disabled, .btn-outline-secondary:disabled { color: #858796; background-color: transparent; } .btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, .show > .btn-outline-secondary.dropdown-toggle { color: #fff; background-color: #858796; border-color: #858796; } .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-secondary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(133, 135, 150, 0.5); } .btn-outline-success { color: #1cc88a; border-color: #1cc88a; } .btn-outline-success:hover { color: #fff; background-color: #1cc88a; border-color: #1cc88a; } .btn-outline-success:focus, .btn-outline-success.focus { box-shadow: 0 0 0 0.2rem rgba(28, 200, 138, 0.5); } .btn-outline-success.disabled, .btn-outline-success:disabled { color: #1cc88a; background-color: transparent; } .btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, .show > .btn-outline-success.dropdown-toggle { color: #fff; background-color: #1cc88a; border-color: #1cc88a; } .btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-success.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(28, 200, 138, 0.5); } .btn-outline-info { color: #36b9cc; border-color: #36b9cc; } .btn-outline-info:hover { color: #fff; background-color: #36b9cc; border-color: #36b9cc; } .btn-outline-info:focus, .btn-outline-info.focus { box-shadow: 0 0 0 0.2rem rgba(54, 185, 204, 0.5); } .btn-outline-info.disabled, .btn-outline-info:disabled { color: #36b9cc; background-color: transparent; } .btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, .show > .btn-outline-info.dropdown-toggle { color: #fff; background-color: #36b9cc; border-color: #36b9cc; } .btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-info.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(54, 185, 204, 0.5); } .btn-outline-warning { color: #f6c23e; border-color: #f6c23e; } .btn-outline-warning:hover { color: #fff; background-color: #f6c23e; border-color: #f6c23e; } .btn-outline-warning:focus, .btn-outline-warning.focus { box-shadow: 0 0 0 0.2rem rgba(246, 194, 62, 0.5); } .btn-outline-warning.disabled, .btn-outline-warning:disabled { color: #f6c23e; background-color: transparent; } .btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, .show > .btn-outline-warning.dropdown-toggle { color: #fff; background-color: #f6c23e; border-color: #f6c23e; } .btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-warning.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(246, 194, 62, 0.5); } .btn-outline-danger { color: #e74a3b; border-color: #e74a3b; } .btn-outline-danger:hover { color: #fff; background-color: #e74a3b; border-color: #e74a3b; } .btn-outline-danger:focus, .btn-outline-danger.focus { box-shadow: 0 0 0 0.2rem rgba(231, 74, 59, 0.5); } .btn-outline-danger.disabled, .btn-outline-danger:disabled { color: #e74a3b; background-color: transparent; } .btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, .show > .btn-outline-danger.dropdown-toggle { color: #fff; background-color: #e74a3b; border-color: #e74a3b; } .btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-danger.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(231, 74, 59, 0.5); } .btn-outline-light { color: #f8f9fc; border-color: #f8f9fc; } .btn-outline-light:hover { color: #3a3b45; background-color: #f8f9fc; border-color: #f8f9fc; } .btn-outline-light:focus, .btn-outline-light.focus { box-shadow: 0 0 0 0.2rem rgba(248, 249, 252, 0.5); } .btn-outline-light.disabled, .btn-outline-light:disabled { color: #f8f9fc; background-color: transparent; } .btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, .show > .btn-outline-light.dropdown-toggle { color: #3a3b45; background-color: #f8f9fc; border-color: #f8f9fc; } .btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-light.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(248, 249, 252, 0.5); } .btn-outline-dark { color: #5a5c69; border-color: #5a5c69; } .btn-outline-dark:hover { color: #fff; background-color: #5a5c69; border-color: #5a5c69; } .btn-outline-dark:focus, .btn-outline-dark.focus { box-shadow: 0 0 0 0.2rem rgba(90, 92, 105, 0.5); } .btn-outline-dark.disabled, .btn-outline-dark:disabled { color: #5a5c69; background-color: transparent; } .btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, .show > .btn-outline-dark.dropdown-toggle { color: #fff; background-color: #5a5c69; border-color: #5a5c69; } .btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-dark.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(90, 92, 105, 0.5); } .btn-link { font-weight: 400; color: #4e73df; text-decoration: none; } .btn-link:hover { color: #224abe; text-decoration: underline; } .btn-link:focus, .btn-link.focus { text-decoration: underline; } .btn-link:disabled, .btn-link.disabled { color: #858796; pointer-events: none; } .btn-lg, .btn-group-lg > .btn { padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; border-radius: 0.3rem; } .btn-sm, .btn-group-sm > .btn { padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; border-radius: 0.2rem; } .btn-block { display: block; width: 100%; } .btn-block + .btn-block { margin-top: 0.5rem; } input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { width: 100%; } .fade { transition: opacity 0.15s linear; } @media (prefers-reduced-motion: reduce) { .fade { transition: none; } } .fade:not(.show) { opacity: 0; } .collapse:not(.show) { display: none; } .collapsing { position: relative; height: 0; overflow: hidden; transition: height 0.15s ease; } @media (prefers-reduced-motion: reduce) { .collapsing { transition: none; } } .dropup, .dropright, .dropdown, .dropleft { position: relative; } .dropdown-toggle { white-space: nowrap; } .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid; border-right: 0.3em solid transparent; border-bottom: 0; border-left: 0.3em solid transparent; } .dropdown-toggle:empty::after { margin-left: 0; } .dropdown-menu { position: absolute; top: 100%; left: 0; z-index: 1000; display: none; float: left; min-width: 10rem; padding: 0.5rem 0; margin: 0.125rem 0 0; font-size: 0.85rem; color: #858796; text-align: left; list-style: none; background-color: #fff; background-clip: padding-box; border: 1px solid #e3e6f0; border-radius: 0.35rem; } .dropdown-menu-left { right: auto; left: 0; } .dropdown-menu-right { right: 0; left: auto; } @media (min-width: 576px) { .dropdown-menu-sm-left { right: auto; left: 0; } .dropdown-menu-sm-right { right: 0; left: auto; } } @media (min-width: 768px) { .dropdown-menu-md-left { right: auto; left: 0; } .dropdown-menu-md-right { right: 0; left: auto; } } @media (min-width: 992px) { .dropdown-menu-lg-left { right: auto; left: 0; } .dropdown-menu-lg-right { right: 0; left: auto; } } @media (min-width: 1200px) { .dropdown-menu-xl-left { right: auto; left: 0; } .dropdown-menu-xl-right { right: 0; left: auto; } } .dropup .dropdown-menu { top: auto; bottom: 100%; margin-top: 0; margin-bottom: 0.125rem; } .dropup .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0; border-right: 0.3em solid transparent; border-bottom: 0.3em solid; border-left: 0.3em solid transparent; } .dropup .dropdown-toggle:empty::after { margin-left: 0; } .dropright .dropdown-menu { top: 0; right: auto; left: 100%; margin-top: 0; margin-left: 0.125rem; } .dropright .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid transparent; border-right: 0; border-bottom: 0.3em solid transparent; border-left: 0.3em solid; } .dropright .dropdown-toggle:empty::after { margin-left: 0; } .dropright .dropdown-toggle::after { vertical-align: 0; } .dropleft .dropdown-menu { top: 0; right: 100%; left: auto; margin-top: 0; margin-right: 0.125rem; } .dropleft .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; } .dropleft .dropdown-toggle::after { display: none; } .dropleft .dropdown-toggle::before { display: inline-block; margin-right: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid transparent; border-right: 0.3em solid; border-bottom: 0.3em solid transparent; } .dropleft .dropdown-toggle:empty::after { margin-left: 0; } .dropleft .dropdown-toggle::before { vertical-align: 0; } .dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { right: auto; bottom: auto; } .dropdown-divider { height: 0; margin: 0.5rem 0; overflow: hidden; border-top: 1px solid #eaecf4; } .dropdown-item { display: block; width: 100%; padding: 0.25rem 1.5rem; clear: both; font-weight: 400; color: #3a3b45; text-align: inherit; white-space: nowrap; background-color: transparent; border: 0; } .dropdown-item:hover, .dropdown-item:focus { color: #2e2f37; text-decoration: none; background-color: #f8f9fc; } .dropdown-item.active, .dropdown-item:active { color: #fff; text-decoration: none; background-color: #4e73df; } .dropdown-item.disabled, .dropdown-item:disabled { color: #858796; pointer-events: none; background-color: transparent; } .dropdown-menu.show { display: block; } .dropdown-header { display: block; padding: 0.5rem 1.5rem; margin-bottom: 0; font-size: 0.875rem; color: #858796; white-space: nowrap; } .dropdown-item-text { display: block; padding: 0.25rem 1.5rem; color: #3a3b45; } .btn-group, .btn-group-vertical { position: relative; display: inline-flex; vertical-align: middle; } .btn-group > .btn, .btn-group-vertical > .btn { position: relative; flex: 1 1 auto; } .btn-group > .btn:hover, .btn-group-vertical > .btn:hover { z-index: 1; } .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:active, .btn-group-vertical > .btn.active { z-index: 1; } .btn-toolbar { display: flex; flex-wrap: wrap; justify-content: flex-start; } .btn-toolbar .input-group { width: auto; } .btn-group > .btn:not(:first-child), .btn-group > .btn-group:not(:first-child) { margin-left: -1px; } .btn-group > .btn:not(:last-child):not(.dropdown-toggle), .btn-group > .btn-group:not(:last-child) > .btn { border-top-right-radius: 0; border-bottom-right-radius: 0; } .btn-group > .btn:not(:first-child), .btn-group > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; border-bottom-left-radius: 0; } .dropdown-toggle-split { padding-right: 0.5625rem; padding-left: 0.5625rem; } .dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropright .dropdown-toggle-split::after { margin-left: 0; } .dropleft .dropdown-toggle-split::before { margin-right: 0; } .btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { padding-right: 0.375rem; padding-left: 0.375rem; } .btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { padding-right: 0.75rem; padding-left: 0.75rem; } .btn-group-vertical { flex-direction: column; align-items: flex-start; justify-content: center; } .btn-group-vertical > .btn, .btn-group-vertical > .btn-group { width: 100%; } .btn-group-vertical > .btn:not(:first-child), .btn-group-vertical > .btn-group:not(:first-child) { margin-top: -1px; } .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), .btn-group-vertical > .btn-group:not(:last-child) > .btn { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn:not(:first-child), .btn-group-vertical > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; border-top-right-radius: 0; } .btn-group-toggle > .btn, .btn-group-toggle > .btn-group > .btn { margin-bottom: 0; } .btn-group-toggle > .btn input[type="radio"], .btn-group-toggle > .btn input[type="checkbox"], .btn-group-toggle > .btn-group > .btn input[type="radio"], .btn-group-toggle > .btn-group > .btn input[type="checkbox"] { position: absolute; clip: rect(0, 0, 0, 0); pointer-events: none; } .input-group { position: relative; display: flex; flex-wrap: wrap; align-items: stretch; width: 100%; } .input-group > .form-control, .input-group > .form-control-plaintext, .input-group > .custom-select, .input-group > .custom-file { position: relative; flex: 1 1 auto; width: 1%; min-width: 0; margin-bottom: 0; } .input-group > .form-control + .form-control, .input-group > .form-control + .custom-select, .input-group > .form-control + .custom-file, .input-group > .form-control-plaintext + .form-control, .input-group > .form-control-plaintext + .custom-select, .input-group > .form-control-plaintext + .custom-file, .input-group > .custom-select + .form-control, .input-group > .custom-select + .custom-select, .input-group > .custom-select + .custom-file, .input-group > .custom-file + .form-control, .input-group > .custom-file + .custom-select, .input-group > .custom-file + .custom-file { margin-left: -1px; } .input-group > .form-control:focus, .input-group > .custom-select:focus, .input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { z-index: 3; } .input-group > .custom-file .custom-file-input:focus { z-index: 4; } .input-group > .form-control:not(:last-child), .input-group > .custom-select:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group > .form-control:not(:first-child), .input-group > .custom-select:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } .input-group > .custom-file { display: flex; align-items: center; } .input-group > .custom-file:not(:last-child) .custom-file-label, .input-group > .custom-file:not(:last-child) .custom-file-label::after { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group > .custom-file:not(:first-child) .custom-file-label { border-top-left-radius: 0; border-bottom-left-radius: 0; } .input-group-prepend, .input-group-append { display: flex; } .input-group-prepend .btn, .input-group-append .btn { position: relative; z-index: 2; } .input-group-prepend .btn:focus, .input-group-append .btn:focus { z-index: 3; } .input-group-prepend .btn + .btn, .input-group-prepend .btn + .input-group-text, .input-group-prepend .input-group-text + .input-group-text, .input-group-prepend .input-group-text + .btn, .input-group-append .btn + .btn, .input-group-append .btn + .input-group-text, .input-group-append .input-group-text + .input-group-text, .input-group-append .input-group-text + .btn { margin-left: -1px; } .input-group-prepend { margin-right: -1px; } .input-group-append { margin-left: -1px; } .input-group-text { display: flex; align-items: center; padding: 0.375rem 0.75rem; margin-bottom: 0; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #6e707e; text-align: center; white-space: nowrap; background-color: #eaecf4; border: 1px solid #d1d3e2; border-radius: 0.35rem; } .input-group-text input[type="radio"], .input-group-text input[type="checkbox"] { margin-top: 0; } .input-group-lg > .form-control:not(textarea), .input-group-lg > .custom-select { height: calc(1.5em + 1rem + 2px); } .input-group-lg > .form-control, .input-group-lg > .custom-select, .input-group-lg > .input-group-prepend > .input-group-text, .input-group-lg > .input-group-append > .input-group-text, .input-group-lg > .input-group-prepend > .btn, .input-group-lg > .input-group-append > .btn { padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; border-radius: 0.3rem; } .input-group-sm > .form-control:not(textarea), .input-group-sm > .custom-select { height: calc(1.5em + 0.5rem + 2px); } .input-group-sm > .form-control, .input-group-sm > .custom-select, .input-group-sm > .input-group-prepend > .input-group-text, .input-group-sm > .input-group-append > .input-group-text, .input-group-sm > .input-group-prepend > .btn, .input-group-sm > .input-group-append > .btn { padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; border-radius: 0.2rem; } .input-group-lg > .custom-select, .input-group-sm > .custom-select { padding-right: 1.75rem; } .input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .input-group-text, .input-group > .input-group-append:not(:last-child) > .btn, .input-group > .input-group-append:not(:last-child) > .input-group-text, .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group > .input-group-append > .btn, .input-group > .input-group-append > .input-group-text, .input-group > .input-group-prepend:not(:first-child) > .btn, .input-group > .input-group-prepend:not(:first-child) > .input-group-text, .input-group > .input-group-prepend:first-child > .btn:not(:first-child), .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } .custom-control { position: relative; display: block; min-height: 1.5rem; padding-left: 1.5rem; } .custom-control-inline { display: inline-flex; margin-right: 1rem; } .custom-control-input { position: absolute; left: 0; z-index: -1; width: 1rem; height: 1.25rem; opacity: 0; } .custom-control-input:checked ~ .custom-control-label::before { color: #fff; border-color: #4e73df; background-color: #4e73df; } .custom-control-input:focus ~ .custom-control-label::before { box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.25); } .custom-control-input:focus:not(:checked) ~ .custom-control-label::before { border-color: #bac8f3; } .custom-control-input:not(:disabled):active ~ .custom-control-label::before { color: #fff; background-color: #e5ebfa; border-color: #e5ebfa; } .custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label { color: #858796; } .custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before { background-color: #eaecf4; } .custom-control-label { position: relative; margin-bottom: 0; vertical-align: top; } .custom-control-label::before { position: absolute; top: 0.25rem; left: -1.5rem; display: block; width: 1rem; height: 1rem; pointer-events: none; content: ""; background-color: #fff; border: #b7b9cc solid 1px; } .custom-control-label::after { position: absolute; top: 0.25rem; left: -1.5rem; display: block; width: 1rem; height: 1rem; content: ""; background: no-repeat 50% / 50% 50%; } .custom-checkbox .custom-control-label::before { border-radius: 0.35rem; } .custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e"); } .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { border-color: #4e73df; background-color: #4e73df; } .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); } .custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(78, 115, 223, 0.5); } .custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { background-color: rgba(78, 115, 223, 0.5); } .custom-radio .custom-control-label::before { border-radius: 50%; } .custom-radio .custom-control-input:checked ~ .custom-control-label::after { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); } .custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(78, 115, 223, 0.5); } .custom-switch { padding-left: 2.25rem; } .custom-switch .custom-control-label::before { left: -2.25rem; width: 1.75rem; pointer-events: all; border-radius: 0.5rem; } .custom-switch .custom-control-label::after { top: calc(0.25rem + 2px); left: calc(-2.25rem + 2px); width: calc(1rem - 4px); height: calc(1rem - 4px); background-color: #b7b9cc; border-radius: 0.5rem; transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .custom-switch .custom-control-label::after { transition: none; } } .custom-switch .custom-control-input:checked ~ .custom-control-label::after { background-color: #fff; transform: translateX(0.75rem); } .custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(78, 115, 223, 0.5); } .custom-select { display: inline-block; width: 100%; height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 1.75rem 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #6e707e; vertical-align: middle; background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; border: 1px solid #d1d3e2; border-radius: 0.35rem; -webkit-appearance: none; -moz-appearance: none; appearance: none; } .custom-select:focus { border-color: #bac8f3; outline: 0; box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.25); } .custom-select:focus::-ms-value { color: #6e707e; background-color: #fff; } .custom-select[multiple], .custom-select[size]:not([size="1"]) { height: auto; padding-right: 0.75rem; background-image: none; } .custom-select:disabled { color: #858796; background-color: #eaecf4; } .custom-select::-ms-expand { display: none; } .custom-select:-moz-focusring { color: transparent; text-shadow: 0 0 0 #6e707e; } .custom-select-sm { height: calc(1.5em + 0.5rem + 2px); padding-top: 0.25rem; padding-bottom: 0.25rem; padding-left: 0.5rem; font-size: 0.875rem; } .custom-select-lg { height: calc(1.5em + 1rem + 2px); padding-top: 0.5rem; padding-bottom: 0.5rem; padding-left: 1rem; font-size: 1.25rem; } .custom-file { position: relative; display: inline-block; width: 100%; height: calc(1.5em + 0.75rem + 2px); margin-bottom: 0; } .custom-file-input { position: relative; z-index: 2; width: 100%; height: calc(1.5em + 0.75rem + 2px); margin: 0; opacity: 0; } .custom-file-input:focus ~ .custom-file-label { border-color: #bac8f3; box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.25); } .custom-file-input[disabled] ~ .custom-file-label, .custom-file-input:disabled ~ .custom-file-label { background-color: #eaecf4; } .custom-file-input:lang(en) ~ .custom-file-label::after { content: "Browse"; } .custom-file-input ~ .custom-file-label[data-browse]::after { content: attr(data-browse); } .custom-file-label { position: absolute; top: 0; right: 0; left: 0; z-index: 1; height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 0.75rem; font-weight: 400; line-height: 1.5; color: #6e707e; background-color: #fff; border: 1px solid #d1d3e2; border-radius: 0.35rem; } .custom-file-label::after { position: absolute; top: 0; right: 0; bottom: 0; z-index: 3; display: block; height: calc(1.5em + 0.75rem); padding: 0.375rem 0.75rem; line-height: 1.5; color: #6e707e; content: "Browse"; background-color: #eaecf4; border-left: inherit; border-radius: 0 0.35rem 0.35rem 0; } .custom-range { width: 100%; height: 1.4rem; padding: 0; background-color: transparent; -webkit-appearance: none; -moz-appearance: none; appearance: none; } .custom-range:focus { outline: none; } .custom-range:focus::-webkit-slider-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(78, 115, 223, 0.25); } .custom-range:focus::-moz-range-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(78, 115, 223, 0.25); } .custom-range:focus::-ms-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(78, 115, 223, 0.25); } .custom-range::-moz-focus-outer { border: 0; } .custom-range::-webkit-slider-thumb { width: 1rem; height: 1rem; margin-top: -0.25rem; background-color: #4e73df; border: 0; border-radius: 1rem; -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -webkit-appearance: none; appearance: none; } @media (prefers-reduced-motion: reduce) { .custom-range::-webkit-slider-thumb { -webkit-transition: none; transition: none; } } .custom-range::-webkit-slider-thumb:active { background-color: #e5ebfa; } .custom-range::-webkit-slider-runnable-track { width: 100%; height: 0.5rem; color: transparent; cursor: pointer; background-color: #dddfeb; border-color: transparent; border-radius: 1rem; } .custom-range::-moz-range-thumb { width: 1rem; height: 1rem; background-color: #4e73df; border: 0; border-radius: 1rem; -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -moz-appearance: none; appearance: none; } @media (prefers-reduced-motion: reduce) { .custom-range::-moz-range-thumb { -moz-transition: none; transition: none; } } .custom-range::-moz-range-thumb:active { background-color: #e5ebfa; } .custom-range::-moz-range-track { width: 100%; height: 0.5rem; color: transparent; cursor: pointer; background-color: #dddfeb; border-color: transparent; border-radius: 1rem; } .custom-range::-ms-thumb { width: 1rem; height: 1rem; margin-top: 0; margin-right: 0.2rem; margin-left: 0.2rem; background-color: #4e73df; border: 0; border-radius: 1rem; -ms-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; appearance: none; } @media (prefers-reduced-motion: reduce) { .custom-range::-ms-thumb { -ms-transition: none; transition: none; } } .custom-range::-ms-thumb:active { background-color: #e5ebfa; } .custom-range::-ms-track { width: 100%; height: 0.5rem; color: transparent; cursor: pointer; background-color: transparent; border-color: transparent; border-width: 0.5rem; } .custom-range::-ms-fill-lower { background-color: #dddfeb; border-radius: 1rem; } .custom-range::-ms-fill-upper { margin-right: 15px; background-color: #dddfeb; border-radius: 1rem; } .custom-range:disabled::-webkit-slider-thumb { background-color: #b7b9cc; } .custom-range:disabled::-webkit-slider-runnable-track { cursor: default; } .custom-range:disabled::-moz-range-thumb { background-color: #b7b9cc; } .custom-range:disabled::-moz-range-track { cursor: default; } .custom-range:disabled::-ms-thumb { background-color: #b7b9cc; } .custom-control-label::before, .custom-file-label, .custom-select { transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .custom-control-label::before, .custom-file-label, .custom-select { transition: none; } } .nav { display: flex; flex-wrap: wrap; padding-left: 0; margin-bottom: 0; list-style: none; } .nav-link { display: block; padding: 0.5rem 1rem; } .nav-link:hover, .nav-link:focus { text-decoration: none; } .nav-link.disabled { color: #858796; pointer-events: none; cursor: default; } .nav-tabs { border-bottom: 1px solid #dddfeb; } .nav-tabs .nav-item { margin-bottom: -1px; } .nav-tabs .nav-link { border: 1px solid transparent; border-top-left-radius: 0.35rem; border-top-right-radius: 0.35rem; } .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { border-color: #eaecf4 #eaecf4 #dddfeb; } .nav-tabs .nav-link.disabled { color: #858796; background-color: transparent; border-color: transparent; } .nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link { color: #6e707e; background-color: #fff; border-color: #dddfeb #dddfeb #fff; } .nav-tabs .dropdown-menu { margin-top: -1px; border-top-left-radius: 0; border-top-right-radius: 0; } .nav-pills .nav-link { border-radius: 0.35rem; } .nav-pills .nav-link.active, .nav-pills .show > .nav-link { color: #fff; background-color: #4e73df; } .nav-fill .nav-item { flex: 1 1 auto; text-align: center; } .nav-justified .nav-item { flex-basis: 0; flex-grow: 1; text-align: center; } .tab-content > .tab-pane { display: none; } .tab-content > .active { display: block; } .navbar { position: relative; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; padding: 0.5rem 1rem; } .navbar .container, .navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; } .navbar-brand { display: inline-block; padding-top: 0.3125rem; padding-bottom: 0.3125rem; margin-right: 1rem; font-size: 1.25rem; line-height: inherit; white-space: nowrap; } .navbar-brand:hover, .navbar-brand:focus { text-decoration: none; } .navbar-nav { display: flex; flex-direction: column; padding-left: 0; margin-bottom: 0; list-style: none; } .navbar-nav .nav-link { padding-right: 0; padding-left: 0; } .navbar-nav .dropdown-menu { position: static; float: none; } .navbar-text { display: inline-block; padding-top: 0.5rem; padding-bottom: 0.5rem; } .navbar-collapse { flex-basis: 100%; flex-grow: 1; align-items: center; } .navbar-toggler { padding: 0.25rem 0.75rem; font-size: 1.25rem; line-height: 1; background-color: transparent; border: 1px solid transparent; border-radius: 0.35rem; } .navbar-toggler:hover, .navbar-toggler:focus { text-decoration: none; } .navbar-toggler-icon { display: inline-block; width: 1.5em; height: 1.5em; vertical-align: middle; content: ""; background: no-repeat center center; background-size: 100% 100%; } @media (max-width: 575.98px) { .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl { padding-right: 0; padding-left: 0; } } @media (min-width: 576px) { .navbar-expand-sm { flex-flow: row nowrap; justify-content: flex-start; } .navbar-expand-sm .navbar-nav { flex-direction: row; } .navbar-expand-sm .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-sm .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl { flex-wrap: nowrap; } .navbar-expand-sm .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-sm .navbar-toggler { display: none; } } @media (max-width: 767.98px) { .navbar-expand-md > .container, .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl { padding-right: 0; padding-left: 0; } } @media (min-width: 768px) { .navbar-expand-md { flex-flow: row nowrap; justify-content: flex-start; } .navbar-expand-md .navbar-nav { flex-direction: row; } .navbar-expand-md .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-md .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-md > .container, .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl { flex-wrap: nowrap; } .navbar-expand-md .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-md .navbar-toggler { display: none; } } @media (max-width: 991.98px) { .navbar-expand-lg > .container, .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl { padding-right: 0; padding-left: 0; } } @media (min-width: 992px) { .navbar-expand-lg { flex-flow: row nowrap; justify-content: flex-start; } .navbar-expand-lg .navbar-nav { flex-direction: row; } .navbar-expand-lg .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-lg .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-lg > .container, .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl { flex-wrap: nowrap; } .navbar-expand-lg .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-lg .navbar-toggler { display: none; } } @media (max-width: 1199.98px) { .navbar-expand-xl > .container, .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl { padding-right: 0; padding-left: 0; } } @media (min-width: 1200px) { .navbar-expand-xl { flex-flow: row nowrap; justify-content: flex-start; } .navbar-expand-xl .navbar-nav { flex-direction: row; } .navbar-expand-xl .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-xl .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-xl > .container, .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl { flex-wrap: nowrap; } .navbar-expand-xl .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-xl .navbar-toggler { display: none; } } .navbar-expand { flex-flow: row nowrap; justify-content: flex-start; } .navbar-expand > .container, .navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl { padding-right: 0; padding-left: 0; } .navbar-expand .navbar-nav { flex-direction: row; } .navbar-expand .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand > .container, .navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl { flex-wrap: nowrap; } .navbar-expand .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand .navbar-toggler { display: none; } .navbar-light .navbar-brand { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-nav .nav-link { color: rgba(0, 0, 0, 0.5); } .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { color: rgba(0, 0, 0, 0.7); } .navbar-light .navbar-nav .nav-link.disabled { color: rgba(0, 0, 0, 0.3); } .navbar-light .navbar-nav .show > .nav-link, .navbar-light .navbar-nav .active > .nav-link, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .nav-link.active { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-toggler { color: rgba(0, 0, 0, 0.5); border-color: rgba(0, 0, 0, 0.1); } .navbar-light .navbar-toggler-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-light .navbar-text { color: rgba(0, 0, 0, 0.5); } .navbar-light .navbar-text a { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { color: rgba(0, 0, 0, 0.9); } .navbar-dark .navbar-brand { color: #fff; } .navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { color: #fff; } .navbar-dark .navbar-nav .nav-link { color: rgba(255, 255, 255, 0.5); } .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { color: rgba(255, 255, 255, 0.75); } .navbar-dark .navbar-nav .nav-link.disabled { color: rgba(255, 255, 255, 0.25); } .navbar-dark .navbar-nav .show > .nav-link, .navbar-dark .navbar-nav .active > .nav-link, .navbar-dark .navbar-nav .nav-link.show, .navbar-dark .navbar-nav .nav-link.active { color: #fff; } .navbar-dark .navbar-toggler { color: rgba(255, 255, 255, 0.5); border-color: rgba(255, 255, 255, 0.1); } .navbar-dark .navbar-toggler-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-dark .navbar-text { color: rgba(255, 255, 255, 0.5); } .navbar-dark .navbar-text a { color: #fff; } .navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { color: #fff; } .card { position: relative; display: flex; flex-direction: column; min-width: 0; word-wrap: break-word; background-color: #fff; background-clip: border-box; border: 1px solid #e3e6f0; border-radius: 0.35rem; } .card > hr { margin-right: 0; margin-left: 0; } .card > .list-group { border-top: inherit; border-bottom: inherit; } .card > .list-group:first-child { border-top-width: 0; border-top-left-radius: calc(0.35rem - 1px); border-top-right-radius: calc(0.35rem - 1px); } .card > .list-group:last-child { border-bottom-width: 0; border-bottom-right-radius: calc(0.35rem - 1px); border-bottom-left-radius: calc(0.35rem - 1px); } .card-body { flex: 1 1 auto; min-height: 1px; padding: 1.25rem; } .card-title { margin-bottom: 0.75rem; } .card-subtitle { margin-top: -0.375rem; margin-bottom: 0; } .card-text:last-child { margin-bottom: 0; } .card-link:hover { text-decoration: none; } .card-link + .card-link { margin-left: 1.25rem; } .card-header { padding: 0.75rem 1.25rem; margin-bottom: 0; background-color: #f8f9fc; border-bottom: 1px solid #e3e6f0; } .card-header:first-child { border-radius: calc(0.35rem - 1px) calc(0.35rem - 1px) 0 0; } .card-header + .list-group .list-group-item:first-child { border-top: 0; } .card-footer { padding: 0.75rem 1.25rem; background-color: #f8f9fc; border-top: 1px solid #e3e6f0; } .card-footer:last-child { border-radius: 0 0 calc(0.35rem - 1px) calc(0.35rem - 1px); } .card-header-tabs { margin-right: -0.625rem; margin-bottom: -0.75rem; margin-left: -0.625rem; border-bottom: 0; } .card-header-pills { margin-right: -0.625rem; margin-left: -0.625rem; } .card-img-overlay { position: absolute; top: 0; right: 0; bottom: 0; left: 0; padding: 1.25rem; } .card-img, .card-img-top, .card-img-bottom { flex-shrink: 0; width: 100%; } .card-img, .card-img-top { border-top-left-radius: calc(0.35rem - 1px); border-top-right-radius: calc(0.35rem - 1px); } .card-img, .card-img-bottom { border-bottom-right-radius: calc(0.35rem - 1px); border-bottom-left-radius: calc(0.35rem - 1px); } .card-deck .card { margin-bottom: 0.75rem; } @media (min-width: 576px) { .card-deck { display: flex; flex-flow: row wrap; margin-right: -0.75rem; margin-left: -0.75rem; } .card-deck .card { flex: 1 0 0%; margin-right: 0.75rem; margin-bottom: 0; margin-left: 0.75rem; } } .card-group > .card { margin-bottom: 0.75rem; } @media (min-width: 576px) { .card-group { display: flex; flex-flow: row wrap; } .card-group > .card { flex: 1 0 0%; margin-bottom: 0; } .card-group > .card + .card { margin-left: 0; border-left: 0; } .card-group > .card:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .card-group > .card:not(:last-child) .card-img-top, .card-group > .card:not(:last-child) .card-header { border-top-right-radius: 0; } .card-group > .card:not(:last-child) .card-img-bottom, .card-group > .card:not(:last-child) .card-footer { border-bottom-right-radius: 0; } .card-group > .card:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } .card-group > .card:not(:first-child) .card-img-top, .card-group > .card:not(:first-child) .card-header { border-top-left-radius: 0; } .card-group > .card:not(:first-child) .card-img-bottom, .card-group > .card:not(:first-child) .card-footer { border-bottom-left-radius: 0; } } .card-columns .card { margin-bottom: 0.75rem; } @media (min-width: 576px) { .card-columns { -moz-column-count: 3; column-count: 3; -moz-column-gap: 1.25rem; column-gap: 1.25rem; orphans: 1; widows: 1; } .card-columns .card { display: inline-block; width: 100%; } } .accordion > .card { overflow: hidden; } .accordion > .card:not(:last-of-type) { border-bottom: 0; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .accordion > .card:not(:first-of-type) { border-top-left-radius: 0; border-top-right-radius: 0; } .accordion > .card > .card-header { border-radius: 0; margin-bottom: -1px; } .breadcrumb { display: flex; flex-wrap: wrap; padding: 0.75rem 1rem; margin-bottom: 1rem; list-style: none; background-color: #eaecf4; border-radius: 0.35rem; } .breadcrumb-item { display: flex; } .breadcrumb-item + .breadcrumb-item { padding-left: 0.5rem; } .breadcrumb-item + .breadcrumb-item::before { display: inline-block; padding-right: 0.5rem; color: #858796; content: "/"; } .breadcrumb-item + .breadcrumb-item:hover::before { text-decoration: underline; } .breadcrumb-item + .breadcrumb-item:hover::before { text-decoration: none; } .breadcrumb-item.active { color: #858796; } .pagination { display: flex; padding-left: 0; list-style: none; border-radius: 0.35rem; } .page-link { position: relative; display: block; padding: 0.5rem 0.75rem; margin-left: -1px; line-height: 1.25; color: #4e73df; background-color: #fff; border: 1px solid #dddfeb; } .page-link:hover { z-index: 2; color: #224abe; text-decoration: none; background-color: #eaecf4; border-color: #dddfeb; } .page-link:focus { z-index: 3; outline: 0; box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.25); } .page-item:first-child .page-link { margin-left: 0; border-top-left-radius: 0.35rem; border-bottom-left-radius: 0.35rem; } .page-item:last-child .page-link { border-top-right-radius: 0.35rem; border-bottom-right-radius: 0.35rem; } .page-item.active .page-link { z-index: 3; color: #fff; background-color: #4e73df; border-color: #4e73df; } .page-item.disabled .page-link { color: #858796; pointer-events: none; cursor: auto; background-color: #fff; border-color: #dddfeb; } .pagination-lg .page-link { padding: 0.75rem 1.5rem; font-size: 1.25rem; line-height: 1.5; } .pagination-lg .page-item:first-child .page-link { border-top-left-radius: 0.3rem; border-bottom-left-radius: 0.3rem; } .pagination-lg .page-item:last-child .page-link { border-top-right-radius: 0.3rem; border-bottom-right-radius: 0.3rem; } .pagination-sm .page-link { padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; } .pagination-sm .page-item:first-child .page-link { border-top-left-radius: 0.2rem; border-bottom-left-radius: 0.2rem; } .pagination-sm .page-item:last-child .page-link { border-top-right-radius: 0.2rem; border-bottom-right-radius: 0.2rem; } .badge { display: inline-block; padding: 0.25em 0.4em; font-size: 75%; font-weight: 700; line-height: 1; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: 0.35rem; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .badge { transition: none; } } a.badge:hover, a.badge:focus { text-decoration: none; } .badge:empty { display: none; } .btn .badge { position: relative; top: -1px; } .badge-pill { padding-right: 0.6em; padding-left: 0.6em; border-radius: 10rem; } .badge-primary { color: #fff; background-color: #4e73df; } a.badge-primary:hover, a.badge-primary:focus { color: #fff; background-color: #2653d4; } a.badge-primary:focus, a.badge-primary.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.5); } .badge-secondary { color: #fff; background-color: #858796; } a.badge-secondary:hover, a.badge-secondary:focus { color: #fff; background-color: #6b6d7d; } a.badge-secondary:focus, a.badge-secondary.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(133, 135, 150, 0.5); } .badge-success { color: #fff; background-color: #1cc88a; } a.badge-success:hover, a.badge-success:focus { color: #fff; background-color: #169b6b; } a.badge-success:focus, a.badge-success.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(28, 200, 138, 0.5); } .badge-info { color: #fff; background-color: #36b9cc; } a.badge-info:hover, a.badge-info:focus { color: #fff; background-color: #2a96a5; } a.badge-info:focus, a.badge-info.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(54, 185, 204, 0.5); } .badge-warning { color: #fff; background-color: #f6c23e; } a.badge-warning:hover, a.badge-warning:focus { color: #fff; background-color: #f4b30d; } a.badge-warning:focus, a.badge-warning.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(246, 194, 62, 0.5); } .badge-danger { color: #fff; background-color: #e74a3b; } a.badge-danger:hover, a.badge-danger:focus { color: #fff; background-color: #d52a1a; } a.badge-danger:focus, a.badge-danger.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(231, 74, 59, 0.5); } .badge-light { color: #3a3b45; background-color: #f8f9fc; } a.badge-light:hover, a.badge-light:focus { color: #3a3b45; background-color: #d4daed; } a.badge-light:focus, a.badge-light.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(248, 249, 252, 0.5); } .badge-dark { color: #fff; background-color: #5a5c69; } a.badge-dark:hover, a.badge-dark:focus { color: #fff; background-color: #42444e; } a.badge-dark:focus, a.badge-dark.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(90, 92, 105, 0.5); } .jumbotron { padding: 2rem 1rem; margin-bottom: 2rem; background-color: #eaecf4; border-radius: 0.3rem; } @media (min-width: 576px) { .jumbotron { padding: 4rem 2rem; } } .jumbotron-fluid { padding-right: 0; padding-left: 0; border-radius: 0; } .alert { position: relative; padding: 0.75rem 1.25rem; margin-bottom: 1rem; border: 1px solid transparent; border-radius: 0.35rem; } .alert-heading { color: inherit; } .alert-link { font-weight: 700; } .alert-dismissible { padding-right: 4rem; } .alert-dismissible .close { position: absolute; top: 0; right: 0; padding: 0.75rem 1.25rem; color: inherit; } .alert-primary { color: #293c74; background-color: #dce3f9; border-color: #cdd8f6; } .alert-primary hr { border-top-color: #b7c7f2; } .alert-primary .alert-link { color: #1c294e; } .alert-secondary { color: #45464e; background-color: #e7e7ea; border-color: #dddde2; } .alert-secondary hr { border-top-color: #cfcfd6; } .alert-secondary .alert-link { color: #2d2e33; } .alert-success { color: #0f6848; background-color: #d2f4e8; border-color: #bff0de; } .alert-success hr { border-top-color: #aaebd3; } .alert-success .alert-link { color: #093b29; } .alert-info { color: #1c606a; background-color: #d7f1f5; border-color: #c7ebf1; } .alert-info hr { border-top-color: #b3e4ec; } .alert-info .alert-link { color: #113b42; } .alert-warning { color: #806520; background-color: #fdf3d8; border-color: #fceec9; } .alert-warning hr { border-top-color: #fbe6b1; } .alert-warning .alert-link { color: #574516; } .alert-danger { color: #78261f; background-color: #fadbd8; border-color: #f8ccc8; } .alert-danger hr { border-top-color: #f5b7b1; } .alert-danger .alert-link { color: #4f1915; } .alert-light { color: #818183; background-color: #fefefe; border-color: #fdfdfe; } .alert-light hr { border-top-color: #ececf6; } .alert-light .alert-link { color: #686869; } .alert-dark { color: #2f3037; background-color: #dedee1; border-color: #d1d1d5; } .alert-dark hr { border-top-color: #c4c4c9; } .alert-dark .alert-link { color: #18181c; } @-webkit-keyframes progress-bar-stripes { from { background-position: 1rem 0; } to { background-position: 0 0; } } @keyframes progress-bar-stripes { from { background-position: 1rem 0; } to { background-position: 0 0; } } .progress { display: flex; height: 1rem; overflow: hidden; line-height: 0; font-size: 0.75rem; background-color: #eaecf4; border-radius: 0.35rem; } .progress-bar { display: flex; flex-direction: column; justify-content: center; overflow: hidden; color: #fff; text-align: center; white-space: nowrap; background-color: #4e73df; transition: width 0.6s ease; } @media (prefers-reduced-motion: reduce) { .progress-bar { transition: none; } } .progress-bar-striped { background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 1rem 1rem; } .progress-bar-animated { -webkit-animation: progress-bar-stripes 1s linear infinite; animation: progress-bar-stripes 1s linear infinite; } @media (prefers-reduced-motion: reduce) { .progress-bar-animated { -webkit-animation: none; animation: none; } } .media { display: flex; align-items: flex-start; } .media-body { flex: 1; } .list-group { display: flex; flex-direction: column; padding-left: 0; margin-bottom: 0; border-radius: 0.35rem; } .list-group-item-action { width: 100%; color: #6e707e; text-align: inherit; } .list-group-item-action:hover, .list-group-item-action:focus { z-index: 1; color: #6e707e; text-decoration: none; background-color: #f8f9fc; } .list-group-item-action:active { color: #858796; background-color: #eaecf4; } .list-group-item { position: relative; display: block; padding: 0.75rem 1.25rem; background-color: #fff; border: 1px solid rgba(0, 0, 0, 0.125); } .list-group-item:first-child { border-top-left-radius: inherit; border-top-right-radius: inherit; } .list-group-item:last-child { border-bottom-right-radius: inherit; border-bottom-left-radius: inherit; } .list-group-item.disabled, .list-group-item:disabled { color: #858796; pointer-events: none; background-color: #fff; } .list-group-item.active { z-index: 2; color: #fff; background-color: #4e73df; border-color: #4e73df; } .list-group-item + .list-group-item { border-top-width: 0; } .list-group-item + .list-group-item.active { margin-top: -1px; border-top-width: 1px; } .list-group-horizontal { flex-direction: row; } .list-group-horizontal > .list-group-item:first-child { border-bottom-left-radius: 0.35rem; border-top-right-radius: 0; } .list-group-horizontal > .list-group-item:last-child { border-top-right-radius: 0.35rem; border-bottom-left-radius: 0; } .list-group-horizontal > .list-group-item.active { margin-top: 0; } .list-group-horizontal > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } @media (min-width: 576px) { .list-group-horizontal-sm { flex-direction: row; } .list-group-horizontal-sm > .list-group-item:first-child { border-bottom-left-radius: 0.35rem; border-top-right-radius: 0; } .list-group-horizontal-sm > .list-group-item:last-child { border-top-right-radius: 0.35rem; border-bottom-left-radius: 0; } .list-group-horizontal-sm > .list-group-item.active { margin-top: 0; } .list-group-horizontal-sm > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal-sm > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } } @media (min-width: 768px) { .list-group-horizontal-md { flex-direction: row; } .list-group-horizontal-md > .list-group-item:first-child { border-bottom-left-radius: 0.35rem; border-top-right-radius: 0; } .list-group-horizontal-md > .list-group-item:last-child { border-top-right-radius: 0.35rem; border-bottom-left-radius: 0; } .list-group-horizontal-md > .list-group-item.active { margin-top: 0; } .list-group-horizontal-md > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal-md > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } } @media (min-width: 992px) { .list-group-horizontal-lg { flex-direction: row; } .list-group-horizontal-lg > .list-group-item:first-child { border-bottom-left-radius: 0.35rem; border-top-right-radius: 0; } .list-group-horizontal-lg > .list-group-item:last-child { border-top-right-radius: 0.35rem; border-bottom-left-radius: 0; } .list-group-horizontal-lg > .list-group-item.active { margin-top: 0; } .list-group-horizontal-lg > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal-lg > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } } @media (min-width: 1200px) { .list-group-horizontal-xl { flex-direction: row; } .list-group-horizontal-xl > .list-group-item:first-child { border-bottom-left-radius: 0.35rem; border-top-right-radius: 0; } .list-group-horizontal-xl > .list-group-item:last-child { border-top-right-radius: 0.35rem; border-bottom-left-radius: 0; } .list-group-horizontal-xl > .list-group-item.active { margin-top: 0; } .list-group-horizontal-xl > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal-xl > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } } .list-group-flush { border-radius: 0; } .list-group-flush > .list-group-item { border-width: 0 0 1px; } .list-group-flush > .list-group-item:last-child { border-bottom-width: 0; } .list-group-item-primary { color: #293c74; background-color: #cdd8f6; } .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { color: #293c74; background-color: #b7c7f2; } .list-group-item-primary.list-group-item-action.active { color: #fff; background-color: #293c74; border-color: #293c74; } .list-group-item-secondary { color: #45464e; background-color: #dddde2; } .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { color: #45464e; background-color: #cfcfd6; } .list-group-item-secondary.list-group-item-action.active { color: #fff; background-color: #45464e; border-color: #45464e; } .list-group-item-success { color: #0f6848; background-color: #bff0de; } .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { color: #0f6848; background-color: #aaebd3; } .list-group-item-success.list-group-item-action.active { color: #fff; background-color: #0f6848; border-color: #0f6848; } .list-group-item-info { color: #1c606a; background-color: #c7ebf1; } .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { color: #1c606a; background-color: #b3e4ec; } .list-group-item-info.list-group-item-action.active { color: #fff; background-color: #1c606a; border-color: #1c606a; } .list-group-item-warning { color: #806520; background-color: #fceec9; } .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { color: #806520; background-color: #fbe6b1; } .list-group-item-warning.list-group-item-action.active { color: #fff; background-color: #806520; border-color: #806520; } .list-group-item-danger { color: #78261f; background-color: #f8ccc8; } .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { color: #78261f; background-color: #f5b7b1; } .list-group-item-danger.list-group-item-action.active { color: #fff; background-color: #78261f; border-color: #78261f; } .list-group-item-light { color: #818183; background-color: #fdfdfe; } .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { color: #818183; background-color: #ececf6; } .list-group-item-light.list-group-item-action.active { color: #fff; background-color: #818183; border-color: #818183; } .list-group-item-dark { color: #2f3037; background-color: #d1d1d5; } .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { color: #2f3037; background-color: #c4c4c9; } .list-group-item-dark.list-group-item-action.active { color: #fff; background-color: #2f3037; border-color: #2f3037; } .close { float: right; font-size: 1.5rem; font-weight: 700; line-height: 1; color: #000; text-shadow: 0 1px 0 #fff; opacity: .5; } .close:hover { color: #000; text-decoration: none; } .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { opacity: .75; } button.close { padding: 0; background-color: transparent; border: 0; } a.close.disabled { pointer-events: none; } .toast { max-width: 350px; overflow: hidden; font-size: 0.875rem; background-color: rgba(255, 255, 255, 0.85); background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.1); box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); opacity: 0; border-radius: 0.25rem; } .toast:not(:last-child) { margin-bottom: 0.75rem; } .toast.showing { opacity: 1; } .toast.show { display: block; opacity: 1; } .toast.hide { display: none; } .toast-header { display: flex; align-items: center; padding: 0.25rem 0.75rem; color: #858796; background-color: rgba(255, 255, 255, 0.85); background-clip: padding-box; border-bottom: 1px solid rgba(0, 0, 0, 0.05); } .toast-body { padding: 0.75rem; } .modal-open { overflow: hidden; } .modal-open .modal { overflow-x: hidden; overflow-y: auto; } .modal { position: fixed; top: 0; left: 0; z-index: 1050; display: none; width: 100%; height: 100%; overflow: hidden; outline: 0; } .modal-dialog { position: relative; width: auto; margin: 0.5rem; pointer-events: none; } .modal.fade .modal-dialog { transition: transform 0.3s ease-out; transform: translate(0, -50px); } @media (prefers-reduced-motion: reduce) { .modal.fade .modal-dialog { transition: none; } } .modal.show .modal-dialog { transform: none; } .modal.modal-static .modal-dialog { transform: scale(1.02); } .modal-dialog-scrollable { display: flex; max-height: calc(100% - 1rem); } .modal-dialog-scrollable .modal-content { max-height: calc(100vh - 1rem); overflow: hidden; } .modal-dialog-scrollable .modal-header, .modal-dialog-scrollable .modal-footer { flex-shrink: 0; } .modal-dialog-scrollable .modal-body { overflow-y: auto; } .modal-dialog-centered { display: flex; align-items: center; min-height: calc(100% - 1rem); } .modal-dialog-centered::before { display: block; height: calc(100vh - 1rem); height: -webkit-min-content; height: -moz-min-content; height: min-content; content: ""; } .modal-dialog-centered.modal-dialog-scrollable { flex-direction: column; justify-content: center; height: 100%; } .modal-dialog-centered.modal-dialog-scrollable .modal-content { max-height: none; } .modal-dialog-centered.modal-dialog-scrollable::before { content: none; } .modal-content { position: relative; display: flex; flex-direction: column; width: 100%; pointer-events: auto; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; outline: 0; } .modal-backdrop { position: fixed; top: 0; left: 0; z-index: 1040; width: 100vw; height: 100vh; background-color: #000; } .modal-backdrop.fade { opacity: 0; } .modal-backdrop.show { opacity: 0.5; } .modal-header { display: flex; align-items: flex-start; justify-content: space-between; padding: 1rem 1rem; border-bottom: 1px solid #e3e6f0; border-top-left-radius: calc(0.3rem - 1px); border-top-right-radius: calc(0.3rem - 1px); } .modal-header .close { padding: 1rem 1rem; margin: -1rem -1rem -1rem auto; } .modal-title { margin-bottom: 0; line-height: 1.5; } .modal-body { position: relative; flex: 1 1 auto; padding: 1rem; } .modal-footer { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; padding: 0.75rem; border-top: 1px solid #e3e6f0; border-bottom-right-radius: calc(0.3rem - 1px); border-bottom-left-radius: calc(0.3rem - 1px); } .modal-footer > * { margin: 0.25rem; } .modal-scrollbar-measure { position: absolute; top: -9999px; width: 50px; height: 50px; overflow: scroll; } @media (min-width: 576px) { .modal-dialog { max-width: 500px; margin: 1.75rem auto; } .modal-dialog-scrollable { max-height: calc(100% - 3.5rem); } .modal-dialog-scrollable .modal-content { max-height: calc(100vh - 3.5rem); } .modal-dialog-centered { min-height: calc(100% - 3.5rem); } .modal-dialog-centered::before { height: calc(100vh - 3.5rem); height: -webkit-min-content; height: -moz-min-content; height: min-content; } .modal-sm { max-width: 300px; } } @media (min-width: 992px) { .modal-lg, .modal-xl { max-width: 800px; } } @media (min-width: 1200px) { .modal-xl { max-width: 1140px; } } .tooltip { position: absolute; z-index: 1070; display: block; margin: 0; font-family: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-style: normal; font-weight: 400; line-height: 1.5; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; white-space: normal; line-break: auto; font-size: 0.875rem; word-wrap: break-word; opacity: 0; } .tooltip.show { opacity: 0.9; } .tooltip .arrow { position: absolute; display: block; width: 0.8rem; height: 0.4rem; } .tooltip .arrow::before { position: absolute; content: ""; border-color: transparent; border-style: solid; } .bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { padding: 0.4rem 0; } .bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { bottom: 0; } .bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { top: 0; border-width: 0.4rem 0.4rem 0; border-top-color: #000; } .bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { padding: 0 0.4rem; } .bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { left: 0; width: 0.4rem; height: 0.8rem; } .bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { right: 0; border-width: 0.4rem 0.4rem 0.4rem 0; border-right-color: #000; } .bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { padding: 0.4rem 0; } .bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { top: 0; } .bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { bottom: 0; border-width: 0 0.4rem 0.4rem; border-bottom-color: #000; } .bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { padding: 0 0.4rem; } .bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { right: 0; width: 0.4rem; height: 0.8rem; } .bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { left: 0; border-width: 0.4rem 0 0.4rem 0.4rem; border-left-color: #000; } .tooltip-inner { max-width: 200px; padding: 0.25rem 0.5rem; color: #fff; text-align: center; background-color: #000; border-radius: 0.35rem; } .popover { position: absolute; top: 0; left: 0; z-index: 1060; display: block; max-width: 276px; font-family: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-style: normal; font-weight: 400; line-height: 1.5; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; white-space: normal; line-break: auto; font-size: 0.875rem; word-wrap: break-word; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; } .popover .arrow { position: absolute; display: block; width: 1rem; height: 0.5rem; margin: 0 0.3rem; } .popover .arrow::before, .popover .arrow::after { position: absolute; display: block; content: ""; border-color: transparent; border-style: solid; } .bs-popover-top, .bs-popover-auto[x-placement^="top"] { margin-bottom: 0.5rem; } .bs-popover-top > .arrow, .bs-popover-auto[x-placement^="top"] > .arrow { bottom: calc(-0.5rem - 1px); } .bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^="top"] > .arrow::before { bottom: 0; border-width: 0.5rem 0.5rem 0; border-top-color: rgba(0, 0, 0, 0.25); } .bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^="top"] > .arrow::after { bottom: 1px; border-width: 0.5rem 0.5rem 0; border-top-color: #fff; } .bs-popover-right, .bs-popover-auto[x-placement^="right"] { margin-left: 0.5rem; } .bs-popover-right > .arrow, .bs-popover-auto[x-placement^="right"] > .arrow { left: calc(-0.5rem - 1px); width: 0.5rem; height: 1rem; margin: 0.3rem 0; } .bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^="right"] > .arrow::before { left: 0; border-width: 0.5rem 0.5rem 0.5rem 0; border-right-color: rgba(0, 0, 0, 0.25); } .bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^="right"] > .arrow::after { left: 1px; border-width: 0.5rem 0.5rem 0.5rem 0; border-right-color: #fff; } .bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { margin-top: 0.5rem; } .bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^="bottom"] > .arrow { top: calc(-0.5rem - 1px); } .bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^="bottom"] > .arrow::before { top: 0; border-width: 0 0.5rem 0.5rem 0.5rem; border-bottom-color: rgba(0, 0, 0, 0.25); } .bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^="bottom"] > .arrow::after { top: 1px; border-width: 0 0.5rem 0.5rem 0.5rem; border-bottom-color: #fff; } .bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { position: absolute; top: 0; left: 50%; display: block; width: 1rem; margin-left: -0.5rem; content: ""; border-bottom: 1px solid #f7f7f7; } .bs-popover-left, .bs-popover-auto[x-placement^="left"] { margin-right: 0.5rem; } .bs-popover-left > .arrow, .bs-popover-auto[x-placement^="left"] > .arrow { right: calc(-0.5rem - 1px); width: 0.5rem; height: 1rem; margin: 0.3rem 0; } .bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^="left"] > .arrow::before { right: 0; border-width: 0.5rem 0 0.5rem 0.5rem; border-left-color: rgba(0, 0, 0, 0.25); } .bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^="left"] > .arrow::after { right: 1px; border-width: 0.5rem 0 0.5rem 0.5rem; border-left-color: #fff; } .popover-header { padding: 0.5rem 0.75rem; margin-bottom: 0; font-size: 1rem; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-top-left-radius: calc(0.3rem - 1px); border-top-right-radius: calc(0.3rem - 1px); } .popover-header:empty { display: none; } .popover-body { padding: 0.5rem 0.75rem; color: #858796; } .carousel { position: relative; } .carousel.pointer-event { touch-action: pan-y; } .carousel-inner { position: relative; width: 100%; overflow: hidden; } .carousel-inner::after { display: block; clear: both; content: ""; } .carousel-item { position: relative; display: none; float: left; width: 100%; margin-right: -100%; -webkit-backface-visibility: hidden; backface-visibility: hidden; transition: transform 0.6s ease-in-out; } @media (prefers-reduced-motion: reduce) { .carousel-item { transition: none; } } .carousel-item.active, .carousel-item-next, .carousel-item-prev { display: block; } .carousel-item-next:not(.carousel-item-left), .active.carousel-item-right { transform: translateX(100%); } .carousel-item-prev:not(.carousel-item-right), .active.carousel-item-left { transform: translateX(-100%); } .carousel-fade .carousel-item { opacity: 0; transition-property: opacity; transform: none; } .carousel-fade .carousel-item.active, .carousel-fade .carousel-item-next.carousel-item-left, .carousel-fade .carousel-item-prev.carousel-item-right { z-index: 1; opacity: 1; } .carousel-fade .active.carousel-item-left, .carousel-fade .active.carousel-item-right { z-index: 0; opacity: 0; transition: opacity 0s 0.6s; } @media (prefers-reduced-motion: reduce) { .carousel-fade .active.carousel-item-left, .carousel-fade .active.carousel-item-right { transition: none; } } .carousel-control-prev, .carousel-control-next { position: absolute; top: 0; bottom: 0; z-index: 1; display: flex; align-items: center; justify-content: center; width: 15%; color: #fff; text-align: center; opacity: 0.5; transition: opacity 0.15s ease; } @media (prefers-reduced-motion: reduce) { .carousel-control-prev, .carousel-control-next { transition: none; } } .carousel-control-prev:hover, .carousel-control-prev:focus, .carousel-control-next:hover, .carousel-control-next:focus { color: #fff; text-decoration: none; outline: 0; opacity: 0.9; } .carousel-control-prev { left: 0; } .carousel-control-next { right: 0; } .carousel-control-prev-icon, .carousel-control-next-icon { display: inline-block; width: 20px; height: 20px; background: no-repeat 50% / 100% 100%; } .carousel-control-prev-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e"); } .carousel-control-next-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e"); } .carousel-indicators { position: absolute; right: 0; bottom: 0; left: 0; z-index: 15; display: flex; justify-content: center; padding-left: 0; margin-right: 15%; margin-left: 15%; list-style: none; } .carousel-indicators li { box-sizing: content-box; flex: 0 1 auto; width: 30px; height: 3px; margin-right: 3px; margin-left: 3px; text-indent: -999px; cursor: pointer; background-color: #fff; background-clip: padding-box; border-top: 10px solid transparent; border-bottom: 10px solid transparent; opacity: .5; transition: opacity 0.6s ease; } @media (prefers-reduced-motion: reduce) { .carousel-indicators li { transition: none; } } .carousel-indicators .active { opacity: 1; } .carousel-caption { position: absolute; right: 15%; bottom: 20px; left: 15%; z-index: 10; padding-top: 20px; padding-bottom: 20px; color: #fff; text-align: center; } @-webkit-keyframes spinner-border { to { transform: rotate(360deg); } } @keyframes spinner-border { to { transform: rotate(360deg); } } .spinner-border { display: inline-block; width: 2rem; height: 2rem; vertical-align: text-bottom; border: 0.25em solid currentColor; border-right-color: transparent; border-radius: 50%; -webkit-animation: spinner-border .75s linear infinite; animation: spinner-border .75s linear infinite; } .spinner-border-sm { width: 1rem; height: 1rem; border-width: 0.2em; } @-webkit-keyframes spinner-grow { 0% { transform: scale(0); } 50% { opacity: 1; transform: none; } } @keyframes spinner-grow { 0% { transform: scale(0); } 50% { opacity: 1; transform: none; } } .spinner-grow { display: inline-block; width: 2rem; height: 2rem; vertical-align: text-bottom; background-color: currentColor; border-radius: 50%; opacity: 0; -webkit-animation: spinner-grow .75s linear infinite; animation: spinner-grow .75s linear infinite; } .spinner-grow-sm { width: 1rem; height: 1rem; } .align-baseline { vertical-align: baseline !important; } .align-top { vertical-align: top !important; } .align-middle { vertical-align: middle !important; } .align-bottom { vertical-align: bottom !important; } .align-text-bottom { vertical-align: text-bottom !important; } .align-text-top { vertical-align: text-top !important; } .bg-primary { background-color: #4e73df !important; } a.bg-primary:hover, a.bg-primary:focus, button.bg-primary:hover, button.bg-primary:focus { background-color: #2653d4 !important; } .bg-secondary { background-color: #858796 !important; } a.bg-secondary:hover, a.bg-secondary:focus, button.bg-secondary:hover, button.bg-secondary:focus { background-color: #6b6d7d !important; } .bg-success { background-color: #1cc88a !important; } a.bg-success:hover, a.bg-success:focus, button.bg-success:hover, button.bg-success:focus { background-color: #169b6b !important; } .bg-info { background-color: #36b9cc !important; } a.bg-info:hover, a.bg-info:focus, button.bg-info:hover, button.bg-info:focus { background-color: #2a96a5 !important; } .bg-warning { background-color: #f6c23e !important; } a.bg-warning:hover, a.bg-warning:focus, button.bg-warning:hover, button.bg-warning:focus { background-color: #f4b30d !important; } .bg-danger { background-color: #e74a3b !important; } a.bg-danger:hover, a.bg-danger:focus, button.bg-danger:hover, button.bg-danger:focus { background-color: #d52a1a !important; } .bg-light { background-color: #f8f9fc !important; } a.bg-light:hover, a.bg-light:focus, button.bg-light:hover, button.bg-light:focus { background-color: #d4daed !important; } .bg-dark { background-color: #5a5c69 !important; } a.bg-dark:hover, a.bg-dark:focus, button.bg-dark:hover, button.bg-dark:focus { background-color: #42444e !important; } .bg-white { background-color: #fff !important; } .bg-transparent { background-color: transparent !important; } .border { border: 1px solid #e3e6f0 !important; } .border-top { border-top: 1px solid #e3e6f0 !important; } .border-right { border-right: 1px solid #e3e6f0 !important; } .border-bottom { border-bottom: 1px solid #e3e6f0 !important; } .border-left { border-left: 1px solid #e3e6f0 !important; } .border-0 { border: 0 !important; } .border-top-0 { border-top: 0 !important; } .border-right-0 { border-right: 0 !important; } .border-bottom-0 { border-bottom: 0 !important; } .border-left-0 { border-left: 0 !important; } .border-primary { border-color: #4e73df !important; } .border-secondary { border-color: #858796 !important; } .border-success { border-color: #1cc88a !important; } .border-info { border-color: #36b9cc !important; } .border-warning { border-color: #f6c23e !important; } .border-danger { border-color: #e74a3b !important; } .border-light { border-color: #f8f9fc !important; } .border-dark { border-color: #5a5c69 !important; } .border-white { border-color: #fff !important; } .rounded-sm { border-radius: 0.2rem !important; } .rounded { border-radius: 0.35rem !important; } .rounded-top { border-top-left-radius: 0.35rem !important; border-top-right-radius: 0.35rem !important; } .rounded-right { border-top-right-radius: 0.35rem !important; border-bottom-right-radius: 0.35rem !important; } .rounded-bottom { border-bottom-right-radius: 0.35rem !important; border-bottom-left-radius: 0.35rem !important; } .rounded-left { border-top-left-radius: 0.35rem !important; border-bottom-left-radius: 0.35rem !important; } .rounded-lg { border-radius: 0.3rem !important; } .rounded-circle { border-radius: 50% !important; } .rounded-pill { border-radius: 50rem !important; } .rounded-0 { border-radius: 0 !important; } .clearfix::after { display: block; clear: both; content: ""; } .d-none { display: none !important; } .d-inline { display: inline !important; } .d-inline-block { display: inline-block !important; } .d-block { display: block !important; } .d-table { display: table !important; } .d-table-row { display: table-row !important; } .d-table-cell { display: table-cell !important; } .d-flex { display: flex !important; } .d-inline-flex { display: inline-flex !important; } @media (min-width: 576px) { .d-sm-none { display: none !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-block { display: block !important; } .d-sm-table { display: table !important; } .d-sm-table-row { display: table-row !important; } .d-sm-table-cell { display: table-cell !important; } .d-sm-flex { display: flex !important; } .d-sm-inline-flex { display: inline-flex !important; } } @media (min-width: 768px) { .d-md-none { display: none !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-block { display: block !important; } .d-md-table { display: table !important; } .d-md-table-row { display: table-row !important; } .d-md-table-cell { display: table-cell !important; } .d-md-flex { display: flex !important; } .d-md-inline-flex { display: inline-flex !important; } } @media (min-width: 992px) { .d-lg-none { display: none !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-block { display: block !important; } .d-lg-table { display: table !important; } .d-lg-table-row { display: table-row !important; } .d-lg-table-cell { display: table-cell !important; } .d-lg-flex { display: flex !important; } .d-lg-inline-flex { display: inline-flex !important; } } @media (min-width: 1200px) { .d-xl-none { display: none !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-block { display: block !important; } .d-xl-table { display: table !important; } .d-xl-table-row { display: table-row !important; } .d-xl-table-cell { display: table-cell !important; } .d-xl-flex { display: flex !important; } .d-xl-inline-flex { display: inline-flex !important; } } @media print { .d-print-none { display: none !important; } .d-print-inline { display: inline !important; } .d-print-inline-block { display: inline-block !important; } .d-print-block { display: block !important; } .d-print-table { display: table !important; } .d-print-table-row { display: table-row !important; } .d-print-table-cell { display: table-cell !important; } .d-print-flex { display: flex !important; } .d-print-inline-flex { display: inline-flex !important; } } .embed-responsive { position: relative; display: block; width: 100%; padding: 0; overflow: hidden; } .embed-responsive::before { display: block; content: ""; } .embed-responsive .embed-responsive-item, .embed-responsive iframe, .embed-responsive embed, .embed-responsive object, .embed-responsive video { position: absolute; top: 0; bottom: 0; left: 0; width: 100%; height: 100%; border: 0; } .embed-responsive-21by9::before { padding-top: 42.85714%; } .embed-responsive-16by9::before { padding-top: 56.25%; } .embed-responsive-4by3::before { padding-top: 75%; } .embed-responsive-1by1::before { padding-top: 100%; } .flex-row { flex-direction: row !important; } .flex-column { flex-direction: column !important; } .flex-row-reverse { flex-direction: row-reverse !important; } .flex-column-reverse { flex-direction: column-reverse !important; } .flex-wrap { flex-wrap: wrap !important; } .flex-nowrap { flex-wrap: nowrap !important; } .flex-wrap-reverse { flex-wrap: wrap-reverse !important; } .flex-fill { flex: 1 1 auto !important; } .flex-grow-0 { flex-grow: 0 !important; } .flex-grow-1 { flex-grow: 1 !important; } .flex-shrink-0 { flex-shrink: 0 !important; } .flex-shrink-1 { flex-shrink: 1 !important; } .justify-content-start { justify-content: flex-start !important; } .justify-content-end { justify-content: flex-end !important; } .justify-content-center { justify-content: center !important; } .justify-content-between { justify-content: space-between !important; } .justify-content-around { justify-content: space-around !important; } .align-items-start { align-items: flex-start !important; } .align-items-end { align-items: flex-end !important; } .align-items-center { align-items: center !important; } .align-items-baseline { align-items: baseline !important; } .align-items-stretch { align-items: stretch !important; } .align-content-start { align-content: flex-start !important; } .align-content-end { align-content: flex-end !important; } .align-content-center { align-content: center !important; } .align-content-between { align-content: space-between !important; } .align-content-around { align-content: space-around !important; } .align-content-stretch { align-content: stretch !important; } .align-self-auto { align-self: auto !important; } .align-self-start { align-self: flex-start !important; } .align-self-end { align-self: flex-end !important; } .align-self-center { align-self: center !important; } .align-self-baseline { align-self: baseline !important; } .align-self-stretch { align-self: stretch !important; } @media (min-width: 576px) { .flex-sm-row { flex-direction: row !important; } .flex-sm-column { flex-direction: column !important; } .flex-sm-row-reverse { flex-direction: row-reverse !important; } .flex-sm-column-reverse { flex-direction: column-reverse !important; } .flex-sm-wrap { flex-wrap: wrap !important; } .flex-sm-nowrap { flex-wrap: nowrap !important; } .flex-sm-wrap-reverse { flex-wrap: wrap-reverse !important; } .flex-sm-fill { flex: 1 1 auto !important; } .flex-sm-grow-0 { flex-grow: 0 !important; } .flex-sm-grow-1 { flex-grow: 1 !important; } .flex-sm-shrink-0 { flex-shrink: 0 !important; } .flex-sm-shrink-1 { flex-shrink: 1 !important; } .justify-content-sm-start { justify-content: flex-start !important; } .justify-content-sm-end { justify-content: flex-end !important; } .justify-content-sm-center { justify-content: center !important; } .justify-content-sm-between { justify-content: space-between !important; } .justify-content-sm-around { justify-content: space-around !important; } .align-items-sm-start { align-items: flex-start !important; } .align-items-sm-end { align-items: flex-end !important; } .align-items-sm-center { align-items: center !important; } .align-items-sm-baseline { align-items: baseline !important; } .align-items-sm-stretch { align-items: stretch !important; } .align-content-sm-start { align-content: flex-start !important; } .align-content-sm-end { align-content: flex-end !important; } .align-content-sm-center { align-content: center !important; } .align-content-sm-between { align-content: space-between !important; } .align-content-sm-around { align-content: space-around !important; } .align-content-sm-stretch { align-content: stretch !important; } .align-self-sm-auto { align-self: auto !important; } .align-self-sm-start { align-self: flex-start !important; } .align-self-sm-end { align-self: flex-end !important; } .align-self-sm-center { align-self: center !important; } .align-self-sm-baseline { align-self: baseline !important; } .align-self-sm-stretch { align-self: stretch !important; } } @media (min-width: 768px) { .flex-md-row { flex-direction: row !important; } .flex-md-column { flex-direction: column !important; } .flex-md-row-reverse { flex-direction: row-reverse !important; } .flex-md-column-reverse { flex-direction: column-reverse !important; } .flex-md-wrap { flex-wrap: wrap !important; } .flex-md-nowrap { flex-wrap: nowrap !important; } .flex-md-wrap-reverse { flex-wrap: wrap-reverse !important; } .flex-md-fill { flex: 1 1 auto !important; } .flex-md-grow-0 { flex-grow: 0 !important; } .flex-md-grow-1 { flex-grow: 1 !important; } .flex-md-shrink-0 { flex-shrink: 0 !important; } .flex-md-shrink-1 { flex-shrink: 1 !important; } .justify-content-md-start { justify-content: flex-start !important; } .justify-content-md-end { justify-content: flex-end !important; } .justify-content-md-center { justify-content: center !important; } .justify-content-md-between { justify-content: space-between !important; } .justify-content-md-around { justify-content: space-around !important; } .align-items-md-start { align-items: flex-start !important; } .align-items-md-end { align-items: flex-end !important; } .align-items-md-center { align-items: center !important; } .align-items-md-baseline { align-items: baseline !important; } .align-items-md-stretch { align-items: stretch !important; } .align-content-md-start { align-content: flex-start !important; } .align-content-md-end { align-content: flex-end !important; } .align-content-md-center { align-content: center !important; } .align-content-md-between { align-content: space-between !important; } .align-content-md-around { align-content: space-around !important; } .align-content-md-stretch { align-content: stretch !important; } .align-self-md-auto { align-self: auto !important; } .align-self-md-start { align-self: flex-start !important; } .align-self-md-end { align-self: flex-end !important; } .align-self-md-center { align-self: center !important; } .align-self-md-baseline { align-self: baseline !important; } .align-self-md-stretch { align-self: stretch !important; } } @media (min-width: 992px) { .flex-lg-row { flex-direction: row !important; } .flex-lg-column { flex-direction: column !important; } .flex-lg-row-reverse { flex-direction: row-reverse !important; } .flex-lg-column-reverse { flex-direction: column-reverse !important; } .flex-lg-wrap { flex-wrap: wrap !important; } .flex-lg-nowrap { flex-wrap: nowrap !important; } .flex-lg-wrap-reverse { flex-wrap: wrap-reverse !important; } .flex-lg-fill { flex: 1 1 auto !important; } .flex-lg-grow-0 { flex-grow: 0 !important; } .flex-lg-grow-1 { flex-grow: 1 !important; } .flex-lg-shrink-0 { flex-shrink: 0 !important; } .flex-lg-shrink-1 { flex-shrink: 1 !important; } .justify-content-lg-start { justify-content: flex-start !important; } .justify-content-lg-end { justify-content: flex-end !important; } .justify-content-lg-center { justify-content: center !important; } .justify-content-lg-between { justify-content: space-between !important; } .justify-content-lg-around { justify-content: space-around !important; } .align-items-lg-start { align-items: flex-start !important; } .align-items-lg-end { align-items: flex-end !important; } .align-items-lg-center { align-items: center !important; } .align-items-lg-baseline { align-items: baseline !important; } .align-items-lg-stretch { align-items: stretch !important; } .align-content-lg-start { align-content: flex-start !important; } .align-content-lg-end { align-content: flex-end !important; } .align-content-lg-center { align-content: center !important; } .align-content-lg-between { align-content: space-between !important; } .align-content-lg-around { align-content: space-around !important; } .align-content-lg-stretch { align-content: stretch !important; } .align-self-lg-auto { align-self: auto !important; } .align-self-lg-start { align-self: flex-start !important; } .align-self-lg-end { align-self: flex-end !important; } .align-self-lg-center { align-self: center !important; } .align-self-lg-baseline { align-self: baseline !important; } .align-self-lg-stretch { align-self: stretch !important; } } @media (min-width: 1200px) { .flex-xl-row { flex-direction: row !important; } .flex-xl-column { flex-direction: column !important; } .flex-xl-row-reverse { flex-direction: row-reverse !important; } .flex-xl-column-reverse { flex-direction: column-reverse !important; } .flex-xl-wrap { flex-wrap: wrap !important; } .flex-xl-nowrap { flex-wrap: nowrap !important; } .flex-xl-wrap-reverse { flex-wrap: wrap-reverse !important; } .flex-xl-fill { flex: 1 1 auto !important; } .flex-xl-grow-0 { flex-grow: 0 !important; } .flex-xl-grow-1 { flex-grow: 1 !important; } .flex-xl-shrink-0 { flex-shrink: 0 !important; } .flex-xl-shrink-1 { flex-shrink: 1 !important; } .justify-content-xl-start { justify-content: flex-start !important; } .justify-content-xl-end { justify-content: flex-end !important; } .justify-content-xl-center { justify-content: center !important; } .justify-content-xl-between { justify-content: space-between !important; } .justify-content-xl-around { justify-content: space-around !important; } .align-items-xl-start { align-items: flex-start !important; } .align-items-xl-end { align-items: flex-end !important; } .align-items-xl-center { align-items: center !important; } .align-items-xl-baseline { align-items: baseline !important; } .align-items-xl-stretch { align-items: stretch !important; } .align-content-xl-start { align-content: flex-start !important; } .align-content-xl-end { align-content: flex-end !important; } .align-content-xl-center { align-content: center !important; } .align-content-xl-between { align-content: space-between !important; } .align-content-xl-around { align-content: space-around !important; } .align-content-xl-stretch { align-content: stretch !important; } .align-self-xl-auto { align-self: auto !important; } .align-self-xl-start { align-self: flex-start !important; } .align-self-xl-end { align-self: flex-end !important; } .align-self-xl-center { align-self: center !important; } .align-self-xl-baseline { align-self: baseline !important; } .align-self-xl-stretch { align-self: stretch !important; } } .float-left { float: left !important; } .float-right { float: right !important; } .float-none { float: none !important; } @media (min-width: 576px) { .float-sm-left { float: left !important; } .float-sm-right { float: right !important; } .float-sm-none { float: none !important; } } @media (min-width: 768px) { .float-md-left { float: left !important; } .float-md-right { float: right !important; } .float-md-none { float: none !important; } } @media (min-width: 992px) { .float-lg-left { float: left !important; } .float-lg-right { float: right !important; } .float-lg-none { float: none !important; } } @media (min-width: 1200px) { .float-xl-left { float: left !important; } .float-xl-right { float: right !important; } .float-xl-none { float: none !important; } } .user-select-all { -webkit-user-select: all !important; -moz-user-select: all !important; -ms-user-select: all !important; user-select: all !important; } .user-select-auto { -webkit-user-select: auto !important; -moz-user-select: auto !important; -ms-user-select: auto !important; user-select: auto !important; } .user-select-none { -webkit-user-select: none !important; -moz-user-select: none !important; -ms-user-select: none !important; user-select: none !important; } .overflow-auto { overflow: auto !important; } .overflow-hidden { overflow: hidden !important; } .position-static { position: static !important; } .position-relative { position: relative !important; } .position-absolute { position: absolute !important; } .position-fixed { position: fixed !important; } .position-sticky { position: -webkit-sticky !important; position: sticky !important; } .fixed-top { position: fixed; top: 0; right: 0; left: 0; z-index: 1030; } .fixed-bottom { position: fixed; right: 0; bottom: 0; left: 0; z-index: 1030; } @supports ((position: -webkit-sticky) or (position: sticky)) { .sticky-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } .sr-only-focusable:active, .sr-only-focusable:focus { position: static; width: auto; height: auto; overflow: visible; clip: auto; white-space: normal; } .shadow-sm { box-shadow: 0 0.125rem 0.25rem 0 rgba(58, 59, 69, 0.2) !important; } .shadow { box-shadow: 0 0.15rem 1.75rem 0 rgba(58, 59, 69, 0.15) !important; } .shadow-lg { box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; } .shadow-none { box-shadow: none !important; } .w-25 { width: 25% !important; } .w-50 { width: 50% !important; } .w-75 { width: 75% !important; } .w-100 { width: 100% !important; } .w-auto { width: auto !important; } .h-25 { height: 25% !important; } .h-50 { height: 50% !important; } .h-75 { height: 75% !important; } .h-100 { height: 100% !important; } .h-auto { height: auto !important; } .mw-100 { max-width: 100% !important; } .mh-100 { max-height: 100% !important; } .min-vw-100 { min-width: 100vw !important; } .min-vh-100 { min-height: 100vh !important; } .vw-100 { width: 100vw !important; } .vh-100 { height: 100vh !important; } .m-0 { margin: 0 !important; } .mt-0, .my-0 { margin-top: 0 !important; } .mr-0, .mx-0 { margin-right: 0 !important; } .mb-0, .my-0 { margin-bottom: 0 !important; } .ml-0, .mx-0 { margin-left: 0 !important; } .m-1 { margin: 0.25rem !important; } .mt-1, .my-1 { margin-top: 0.25rem !important; } .mr-1, .mx-1 { margin-right: 0.25rem !important; } .mb-1, .my-1 { margin-bottom: 0.25rem !important; } .ml-1, .mx-1 { margin-left: 0.25rem !important; } .m-2 { margin: 0.5rem !important; } .mt-2, .my-2 { margin-top: 0.5rem !important; } .mr-2, .mx-2 { margin-right: 0.5rem !important; } .mb-2, .my-2 { margin-bottom: 0.5rem !important; } .ml-2, .mx-2 { margin-left: 0.5rem !important; } .m-3 { margin: 1rem !important; } .mt-3, .my-3 { margin-top: 1rem !important; } .mr-3, .mx-3 { margin-right: 1rem !important; } .mb-3, .my-3 { margin-bottom: 1rem !important; } .ml-3, .mx-3 { margin-left: 1rem !important; } .m-4 { margin: 1.5rem !important; } .mt-4, .my-4 { margin-top: 1.5rem !important; } .mr-4, .mx-4 { margin-right: 1.5rem !important; } .mb-4, .my-4 { margin-bottom: 1.5rem !important; } .ml-4, .mx-4 { margin-left: 1.5rem !important; } .m-5 { margin: 3rem !important; } .mt-5, .my-5 { margin-top: 3rem !important; } .mr-5, .mx-5 { margin-right: 3rem !important; } .mb-5, .my-5 { margin-bottom: 3rem !important; } .ml-5, .mx-5 { margin-left: 3rem !important; } .p-0 { padding: 0 !important; } .pt-0, .py-0 { padding-top: 0 !important; } .pr-0, .px-0 { padding-right: 0 !important; } .pb-0, .py-0 { padding-bottom: 0 !important; } .pl-0, .px-0 { padding-left: 0 !important; } .p-1 { padding: 0.25rem !important; } .pt-1, .py-1 { padding-top: 0.25rem !important; } .pr-1, .px-1 { padding-right: 0.25rem !important; } .pb-1, .py-1 { padding-bottom: 0.25rem !important; } .pl-1, .px-1 { padding-left: 0.25rem !important; } .p-2 { padding: 0.5rem !important; } .pt-2, .py-2 { padding-top: 0.5rem !important; } .pr-2, .px-2 { padding-right: 0.5rem !important; } .pb-2, .py-2 { padding-bottom: 0.5rem !important; } .pl-2, .px-2 { padding-left: 0.5rem !important; } .p-3 { padding: 1rem !important; } .pt-3, .py-3 { padding-top: 1rem !important; } .pr-3, .px-3 { padding-right: 1rem !important; } .pb-3, .py-3 { padding-bottom: 1rem !important; } .pl-3, .px-3 { padding-left: 1rem !important; } .p-4 { padding: 1.5rem !important; } .pt-4, .py-4 { padding-top: 1.5rem !important; } .pr-4, .px-4 { padding-right: 1.5rem !important; } .pb-4, .py-4 { padding-bottom: 1.5rem !important; } .pl-4, .px-4 { padding-left: 1.5rem !important; } .p-5 { padding: 3rem !important; } .pt-5, .py-5 { padding-top: 3rem !important; } .pr-5, .px-5 { padding-right: 3rem !important; } .pb-5, .py-5 { padding-bottom: 3rem !important; } .pl-5, .px-5 { padding-left: 3rem !important; } .m-n1 { margin: -0.25rem !important; } .mt-n1, .my-n1 { margin-top: -0.25rem !important; } .mr-n1, .mx-n1 { margin-right: -0.25rem !important; } .mb-n1, .my-n1 { margin-bottom: -0.25rem !important; } .ml-n1, .mx-n1 { margin-left: -0.25rem !important; } .m-n2 { margin: -0.5rem !important; } .mt-n2, .my-n2 { margin-top: -0.5rem !important; } .mr-n2, .mx-n2 { margin-right: -0.5rem !important; } .mb-n2, .my-n2 { margin-bottom: -0.5rem !important; } .ml-n2, .mx-n2 { margin-left: -0.5rem !important; } .m-n3 { margin: -1rem !important; } .mt-n3, .my-n3 { margin-top: -1rem !important; } .mr-n3, .mx-n3 { margin-right: -1rem !important; } .mb-n3, .my-n3 { margin-bottom: -1rem !important; } .ml-n3, .mx-n3 { margin-left: -1rem !important; } .m-n4 { margin: -1.5rem !important; } .mt-n4, .my-n4 { margin-top: -1.5rem !important; } .mr-n4, .mx-n4 { margin-right: -1.5rem !important; } .mb-n4, .my-n4 { margin-bottom: -1.5rem !important; } .ml-n4, .mx-n4 { margin-left: -1.5rem !important; } .m-n5 { margin: -3rem !important; } .mt-n5, .my-n5 { margin-top: -3rem !important; } .mr-n5, .mx-n5 { margin-right: -3rem !important; } .mb-n5, .my-n5 { margin-bottom: -3rem !important; } .ml-n5, .mx-n5 { margin-left: -3rem !important; } .m-auto { margin: auto !important; } .mt-auto, .my-auto { margin-top: auto !important; } .mr-auto, .mx-auto { margin-right: auto !important; } .mb-auto, .my-auto { margin-bottom: auto !important; } .ml-auto, .mx-auto { margin-left: auto !important; } @media (min-width: 576px) { .m-sm-0 { margin: 0 !important; } .mt-sm-0, .my-sm-0 { margin-top: 0 !important; } .mr-sm-0, .mx-sm-0 { margin-right: 0 !important; } .mb-sm-0, .my-sm-0 { margin-bottom: 0 !important; } .ml-sm-0, .mx-sm-0 { margin-left: 0 !important; } .m-sm-1 { margin: 0.25rem !important; } .mt-sm-1, .my-sm-1 { margin-top: 0.25rem !important; } .mr-sm-1, .mx-sm-1 { margin-right: 0.25rem !important; } .mb-sm-1, .my-sm-1 { margin-bottom: 0.25rem !important; } .ml-sm-1, .mx-sm-1 { margin-left: 0.25rem !important; } .m-sm-2 { margin: 0.5rem !important; } .mt-sm-2, .my-sm-2 { margin-top: 0.5rem !important; } .mr-sm-2, .mx-sm-2 { margin-right: 0.5rem !important; } .mb-sm-2, .my-sm-2 { margin-bottom: 0.5rem !important; } .ml-sm-2, .mx-sm-2 { margin-left: 0.5rem !important; } .m-sm-3 { margin: 1rem !important; } .mt-sm-3, .my-sm-3 { margin-top: 1rem !important; } .mr-sm-3, .mx-sm-3 { margin-right: 1rem !important; } .mb-sm-3, .my-sm-3 { margin-bottom: 1rem !important; } .ml-sm-3, .mx-sm-3 { margin-left: 1rem !important; } .m-sm-4 { margin: 1.5rem !important; } .mt-sm-4, .my-sm-4 { margin-top: 1.5rem !important; } .mr-sm-4, .mx-sm-4 { margin-right: 1.5rem !important; } .mb-sm-4, .my-sm-4 { margin-bottom: 1.5rem !important; } .ml-sm-4, .mx-sm-4 { margin-left: 1.5rem !important; } .m-sm-5 { margin: 3rem !important; } .mt-sm-5, .my-sm-5 { margin-top: 3rem !important; } .mr-sm-5, .mx-sm-5 { margin-right: 3rem !important; } .mb-sm-5, .my-sm-5 { margin-bottom: 3rem !important; } .ml-sm-5, .mx-sm-5 { margin-left: 3rem !important; } .p-sm-0 { padding: 0 !important; } .pt-sm-0, .py-sm-0 { padding-top: 0 !important; } .pr-sm-0, .px-sm-0 { padding-right: 0 !important; } .pb-sm-0, .py-sm-0 { padding-bottom: 0 !important; } .pl-sm-0, .px-sm-0 { padding-left: 0 !important; } .p-sm-1 { padding: 0.25rem !important; } .pt-sm-1, .py-sm-1 { padding-top: 0.25rem !important; } .pr-sm-1, .px-sm-1 { padding-right: 0.25rem !important; } .pb-sm-1, .py-sm-1 { padding-bottom: 0.25rem !important; } .pl-sm-1, .px-sm-1 { padding-left: 0.25rem !important; } .p-sm-2 { padding: 0.5rem !important; } .pt-sm-2, .py-sm-2 { padding-top: 0.5rem !important; } .pr-sm-2, .px-sm-2 { padding-right: 0.5rem !important; } .pb-sm-2, .py-sm-2 { padding-bottom: 0.5rem !important; } .pl-sm-2, .px-sm-2 { padding-left: 0.5rem !important; } .p-sm-3 { padding: 1rem !important; } .pt-sm-3, .py-sm-3 { padding-top: 1rem !important; } .pr-sm-3, .px-sm-3 { padding-right: 1rem !important; } .pb-sm-3, .py-sm-3 { padding-bottom: 1rem !important; } .pl-sm-3, .px-sm-3 { padding-left: 1rem !important; } .p-sm-4 { padding: 1.5rem !important; } .pt-sm-4, .py-sm-4 { padding-top: 1.5rem !important; } .pr-sm-4, .px-sm-4 { padding-right: 1.5rem !important; } .pb-sm-4, .py-sm-4 { padding-bottom: 1.5rem !important; } .pl-sm-4, .px-sm-4 { padding-left: 1.5rem !important; } .p-sm-5 { padding: 3rem !important; } .pt-sm-5, .py-sm-5 { padding-top: 3rem !important; } .pr-sm-5, .px-sm-5 { padding-right: 3rem !important; } .pb-sm-5, .py-sm-5 { padding-bottom: 3rem !important; } .pl-sm-5, .px-sm-5 { padding-left: 3rem !important; } .m-sm-n1 { margin: -0.25rem !important; } .mt-sm-n1, .my-sm-n1 { margin-top: -0.25rem !important; } .mr-sm-n1, .mx-sm-n1 { margin-right: -0.25rem !important; } .mb-sm-n1, .my-sm-n1 { margin-bottom: -0.25rem !important; } .ml-sm-n1, .mx-sm-n1 { margin-left: -0.25rem !important; } .m-sm-n2 { margin: -0.5rem !important; } .mt-sm-n2, .my-sm-n2 { margin-top: -0.5rem !important; } .mr-sm-n2, .mx-sm-n2 { margin-right: -0.5rem !important; } .mb-sm-n2, .my-sm-n2 { margin-bottom: -0.5rem !important; } .ml-sm-n2, .mx-sm-n2 { margin-left: -0.5rem !important; } .m-sm-n3 { margin: -1rem !important; } .mt-sm-n3, .my-sm-n3 { margin-top: -1rem !important; } .mr-sm-n3, .mx-sm-n3 { margin-right: -1rem !important; } .mb-sm-n3, .my-sm-n3 { margin-bottom: -1rem !important; } .ml-sm-n3, .mx-sm-n3 { margin-left: -1rem !important; } .m-sm-n4 { margin: -1.5rem !important; } .mt-sm-n4, .my-sm-n4 { margin-top: -1.5rem !important; } .mr-sm-n4, .mx-sm-n4 { margin-right: -1.5rem !important; } .mb-sm-n4, .my-sm-n4 { margin-bottom: -1.5rem !important; } .ml-sm-n4, .mx-sm-n4 { margin-left: -1.5rem !important; } .m-sm-n5 { margin: -3rem !important; } .mt-sm-n5, .my-sm-n5 { margin-top: -3rem !important; } .mr-sm-n5, .mx-sm-n5 { margin-right: -3rem !important; } .mb-sm-n5, .my-sm-n5 { margin-bottom: -3rem !important; } .ml-sm-n5, .mx-sm-n5 { margin-left: -3rem !important; } .m-sm-auto { margin: auto !important; } .mt-sm-auto, .my-sm-auto { margin-top: auto !important; } .mr-sm-auto, .mx-sm-auto { margin-right: auto !important; } .mb-sm-auto, .my-sm-auto { margin-bottom: auto !important; } .ml-sm-auto, .mx-sm-auto { margin-left: auto !important; } } @media (min-width: 768px) { .m-md-0 { margin: 0 !important; } .mt-md-0, .my-md-0 { margin-top: 0 !important; } .mr-md-0, .mx-md-0 { margin-right: 0 !important; } .mb-md-0, .my-md-0 { margin-bottom: 0 !important; } .ml-md-0, .mx-md-0 { margin-left: 0 !important; } .m-md-1 { margin: 0.25rem !important; } .mt-md-1, .my-md-1 { margin-top: 0.25rem !important; } .mr-md-1, .mx-md-1 { margin-right: 0.25rem !important; } .mb-md-1, .my-md-1 { margin-bottom: 0.25rem !important; } .ml-md-1, .mx-md-1 { margin-left: 0.25rem !important; } .m-md-2 { margin: 0.5rem !important; } .mt-md-2, .my-md-2 { margin-top: 0.5rem !important; } .mr-md-2, .mx-md-2 { margin-right: 0.5rem !important; } .mb-md-2, .my-md-2 { margin-bottom: 0.5rem !important; } .ml-md-2, .mx-md-2 { margin-left: 0.5rem !important; } .m-md-3 { margin: 1rem !important; } .mt-md-3, .my-md-3 { margin-top: 1rem !important; } .mr-md-3, .mx-md-3 { margin-right: 1rem !important; } .mb-md-3, .my-md-3 { margin-bottom: 1rem !important; } .ml-md-3, .mx-md-3 { margin-left: 1rem !important; } .m-md-4 { margin: 1.5rem !important; } .mt-md-4, .my-md-4 { margin-top: 1.5rem !important; } .mr-md-4, .mx-md-4 { margin-right: 1.5rem !important; } .mb-md-4, .my-md-4 { margin-bottom: 1.5rem !important; } .ml-md-4, .mx-md-4 { margin-left: 1.5rem !important; } .m-md-5 { margin: 3rem !important; } .mt-md-5, .my-md-5 { margin-top: 3rem !important; } .mr-md-5, .mx-md-5 { margin-right: 3rem !important; } .mb-md-5, .my-md-5 { margin-bottom: 3rem !important; } .ml-md-5, .mx-md-5 { margin-left: 3rem !important; } .p-md-0 { padding: 0 !important; } .pt-md-0, .py-md-0 { padding-top: 0 !important; } .pr-md-0, .px-md-0 { padding-right: 0 !important; } .pb-md-0, .py-md-0 { padding-bottom: 0 !important; } .pl-md-0, .px-md-0 { padding-left: 0 !important; } .p-md-1 { padding: 0.25rem !important; } .pt-md-1, .py-md-1 { padding-top: 0.25rem !important; } .pr-md-1, .px-md-1 { padding-right: 0.25rem !important; } .pb-md-1, .py-md-1 { padding-bottom: 0.25rem !important; } .pl-md-1, .px-md-1 { padding-left: 0.25rem !important; } .p-md-2 { padding: 0.5rem !important; } .pt-md-2, .py-md-2 { padding-top: 0.5rem !important; } .pr-md-2, .px-md-2 { padding-right: 0.5rem !important; } .pb-md-2, .py-md-2 { padding-bottom: 0.5rem !important; } .pl-md-2, .px-md-2 { padding-left: 0.5rem !important; } .p-md-3 { padding: 1rem !important; } .pt-md-3, .py-md-3 { padding-top: 1rem !important; } .pr-md-3, .px-md-3 { padding-right: 1rem !important; } .pb-md-3, .py-md-3 { padding-bottom: 1rem !important; } .pl-md-3, .px-md-3 { padding-left: 1rem !important; } .p-md-4 { padding: 1.5rem !important; } .pt-md-4, .py-md-4 { padding-top: 1.5rem !important; } .pr-md-4, .px-md-4 { padding-right: 1.5rem !important; } .pb-md-4, .py-md-4 { padding-bottom: 1.5rem !important; } .pl-md-4, .px-md-4 { padding-left: 1.5rem !important; } .p-md-5 { padding: 3rem !important; } .pt-md-5, .py-md-5 { padding-top: 3rem !important; } .pr-md-5, .px-md-5 { padding-right: 3rem !important; } .pb-md-5, .py-md-5 { padding-bottom: 3rem !important; } .pl-md-5, .px-md-5 { padding-left: 3rem !important; } .m-md-n1 { margin: -0.25rem !important; } .mt-md-n1, .my-md-n1 { margin-top: -0.25rem !important; } .mr-md-n1, .mx-md-n1 { margin-right: -0.25rem !important; } .mb-md-n1, .my-md-n1 { margin-bottom: -0.25rem !important; } .ml-md-n1, .mx-md-n1 { margin-left: -0.25rem !important; } .m-md-n2 { margin: -0.5rem !important; } .mt-md-n2, .my-md-n2 { margin-top: -0.5rem !important; } .mr-md-n2, .mx-md-n2 { margin-right: -0.5rem !important; } .mb-md-n2, .my-md-n2 { margin-bottom: -0.5rem !important; } .ml-md-n2, .mx-md-n2 { margin-left: -0.5rem !important; } .m-md-n3 { margin: -1rem !important; } .mt-md-n3, .my-md-n3 { margin-top: -1rem !important; } .mr-md-n3, .mx-md-n3 { margin-right: -1rem !important; } .mb-md-n3, .my-md-n3 { margin-bottom: -1rem !important; } .ml-md-n3, .mx-md-n3 { margin-left: -1rem !important; } .m-md-n4 { margin: -1.5rem !important; } .mt-md-n4, .my-md-n4 { margin-top: -1.5rem !important; } .mr-md-n4, .mx-md-n4 { margin-right: -1.5rem !important; } .mb-md-n4, .my-md-n4 { margin-bottom: -1.5rem !important; } .ml-md-n4, .mx-md-n4 { margin-left: -1.5rem !important; } .m-md-n5 { margin: -3rem !important; } .mt-md-n5, .my-md-n5 { margin-top: -3rem !important; } .mr-md-n5, .mx-md-n5 { margin-right: -3rem !important; } .mb-md-n5, .my-md-n5 { margin-bottom: -3rem !important; } .ml-md-n5, .mx-md-n5 { margin-left: -3rem !important; } .m-md-auto { margin: auto !important; } .mt-md-auto, .my-md-auto { margin-top: auto !important; } .mr-md-auto, .mx-md-auto { margin-right: auto !important; } .mb-md-auto, .my-md-auto { margin-bottom: auto !important; } .ml-md-auto, .mx-md-auto { margin-left: auto !important; } } @media (min-width: 992px) { .m-lg-0 { margin: 0 !important; } .mt-lg-0, .my-lg-0 { margin-top: 0 !important; } .mr-lg-0, .mx-lg-0 { margin-right: 0 !important; } .mb-lg-0, .my-lg-0 { margin-bottom: 0 !important; } .ml-lg-0, .mx-lg-0 { margin-left: 0 !important; } .m-lg-1 { margin: 0.25rem !important; } .mt-lg-1, .my-lg-1 { margin-top: 0.25rem !important; } .mr-lg-1, .mx-lg-1 { margin-right: 0.25rem !important; } .mb-lg-1, .my-lg-1 { margin-bottom: 0.25rem !important; } .ml-lg-1, .mx-lg-1 { margin-left: 0.25rem !important; } .m-lg-2 { margin: 0.5rem !important; } .mt-lg-2, .my-lg-2 { margin-top: 0.5rem !important; } .mr-lg-2, .mx-lg-2 { margin-right: 0.5rem !important; } .mb-lg-2, .my-lg-2 { margin-bottom: 0.5rem !important; } .ml-lg-2, .mx-lg-2 { margin-left: 0.5rem !important; } .m-lg-3 { margin: 1rem !important; } .mt-lg-3, .my-lg-3 { margin-top: 1rem !important; } .mr-lg-3, .mx-lg-3 { margin-right: 1rem !important; } .mb-lg-3, .my-lg-3 { margin-bottom: 1rem !important; } .ml-lg-3, .mx-lg-3 { margin-left: 1rem !important; } .m-lg-4 { margin: 1.5rem !important; } .mt-lg-4, .my-lg-4 { margin-top: 1.5rem !important; } .mr-lg-4, .mx-lg-4 { margin-right: 1.5rem !important; } .mb-lg-4, .my-lg-4 { margin-bottom: 1.5rem !important; } .ml-lg-4, .mx-lg-4 { margin-left: 1.5rem !important; } .m-lg-5 { margin: 3rem !important; } .mt-lg-5, .my-lg-5 { margin-top: 3rem !important; } .mr-lg-5, .mx-lg-5 { margin-right: 3rem !important; } .mb-lg-5, .my-lg-5 { margin-bottom: 3rem !important; } .ml-lg-5, .mx-lg-5 { margin-left: 3rem !important; } .p-lg-0 { padding: 0 !important; } .pt-lg-0, .py-lg-0 { padding-top: 0 !important; } .pr-lg-0, .px-lg-0 { padding-right: 0 !important; } .pb-lg-0, .py-lg-0 { padding-bottom: 0 !important; } .pl-lg-0, .px-lg-0 { padding-left: 0 !important; } .p-lg-1 { padding: 0.25rem !important; } .pt-lg-1, .py-lg-1 { padding-top: 0.25rem !important; } .pr-lg-1, .px-lg-1 { padding-right: 0.25rem !important; } .pb-lg-1, .py-lg-1 { padding-bottom: 0.25rem !important; } .pl-lg-1, .px-lg-1 { padding-left: 0.25rem !important; } .p-lg-2 { padding: 0.5rem !important; } .pt-lg-2, .py-lg-2 { padding-top: 0.5rem !important; } .pr-lg-2, .px-lg-2 { padding-right: 0.5rem !important; } .pb-lg-2, .py-lg-2 { padding-bottom: 0.5rem !important; } .pl-lg-2, .px-lg-2 { padding-left: 0.5rem !important; } .p-lg-3 { padding: 1rem !important; } .pt-lg-3, .py-lg-3 { padding-top: 1rem !important; } .pr-lg-3, .px-lg-3 { padding-right: 1rem !important; } .pb-lg-3, .py-lg-3 { padding-bottom: 1rem !important; } .pl-lg-3, .px-lg-3 { padding-left: 1rem !important; } .p-lg-4 { padding: 1.5rem !important; } .pt-lg-4, .py-lg-4 { padding-top: 1.5rem !important; } .pr-lg-4, .px-lg-4 { padding-right: 1.5rem !important; } .pb-lg-4, .py-lg-4 { padding-bottom: 1.5rem !important; } .pl-lg-4, .px-lg-4 { padding-left: 1.5rem !important; } .p-lg-5 { padding: 3rem !important; } .pt-lg-5, .py-lg-5 { padding-top: 3rem !important; } .pr-lg-5, .px-lg-5 { padding-right: 3rem !important; } .pb-lg-5, .py-lg-5 { padding-bottom: 3rem !important; } .pl-lg-5, .px-lg-5 { padding-left: 3rem !important; } .m-lg-n1 { margin: -0.25rem !important; } .mt-lg-n1, .my-lg-n1 { margin-top: -0.25rem !important; } .mr-lg-n1, .mx-lg-n1 { margin-right: -0.25rem !important; } .mb-lg-n1, .my-lg-n1 { margin-bottom: -0.25rem !important; } .ml-lg-n1, .mx-lg-n1 { margin-left: -0.25rem !important; } .m-lg-n2 { margin: -0.5rem !important; } .mt-lg-n2, .my-lg-n2 { margin-top: -0.5rem !important; } .mr-lg-n2, .mx-lg-n2 { margin-right: -0.5rem !important; } .mb-lg-n2, .my-lg-n2 { margin-bottom: -0.5rem !important; } .ml-lg-n2, .mx-lg-n2 { margin-left: -0.5rem !important; } .m-lg-n3 { margin: -1rem !important; } .mt-lg-n3, .my-lg-n3 { margin-top: -1rem !important; } .mr-lg-n3, .mx-lg-n3 { margin-right: -1rem !important; } .mb-lg-n3, .my-lg-n3 { margin-bottom: -1rem !important; } .ml-lg-n3, .mx-lg-n3 { margin-left: -1rem !important; } .m-lg-n4 { margin: -1.5rem !important; } .mt-lg-n4, .my-lg-n4 { margin-top: -1.5rem !important; } .mr-lg-n4, .mx-lg-n4 { margin-right: -1.5rem !important; } .mb-lg-n4, .my-lg-n4 { margin-bottom: -1.5rem !important; } .ml-lg-n4, .mx-lg-n4 { margin-left: -1.5rem !important; } .m-lg-n5 { margin: -3rem !important; } .mt-lg-n5, .my-lg-n5 { margin-top: -3rem !important; } .mr-lg-n5, .mx-lg-n5 { margin-right: -3rem !important; } .mb-lg-n5, .my-lg-n5 { margin-bottom: -3rem !important; } .ml-lg-n5, .mx-lg-n5 { margin-left: -3rem !important; } .m-lg-auto { margin: auto !important; } .mt-lg-auto, .my-lg-auto { margin-top: auto !important; } .mr-lg-auto, .mx-lg-auto { margin-right: auto !important; } .mb-lg-auto, .my-lg-auto { margin-bottom: auto !important; } .ml-lg-auto, .mx-lg-auto { margin-left: auto !important; } } @media (min-width: 1200px) { .m-xl-0 { margin: 0 !important; } .mt-xl-0, .my-xl-0 { margin-top: 0 !important; } .mr-xl-0, .mx-xl-0 { margin-right: 0 !important; } .mb-xl-0, .my-xl-0 { margin-bottom: 0 !important; } .ml-xl-0, .mx-xl-0 { margin-left: 0 !important; } .m-xl-1 { margin: 0.25rem !important; } .mt-xl-1, .my-xl-1 { margin-top: 0.25rem !important; } .mr-xl-1, .mx-xl-1 { margin-right: 0.25rem !important; } .mb-xl-1, .my-xl-1 { margin-bottom: 0.25rem !important; } .ml-xl-1, .mx-xl-1 { margin-left: 0.25rem !important; } .m-xl-2 { margin: 0.5rem !important; } .mt-xl-2, .my-xl-2 { margin-top: 0.5rem !important; } .mr-xl-2, .mx-xl-2 { margin-right: 0.5rem !important; } .mb-xl-2, .my-xl-2 { margin-bottom: 0.5rem !important; } .ml-xl-2, .mx-xl-2 { margin-left: 0.5rem !important; } .m-xl-3 { margin: 1rem !important; } .mt-xl-3, .my-xl-3 { margin-top: 1rem !important; } .mr-xl-3, .mx-xl-3 { margin-right: 1rem !important; } .mb-xl-3, .my-xl-3 { margin-bottom: 1rem !important; } .ml-xl-3, .mx-xl-3 { margin-left: 1rem !important; } .m-xl-4 { margin: 1.5rem !important; } .mt-xl-4, .my-xl-4 { margin-top: 1.5rem !important; } .mr-xl-4, .mx-xl-4 { margin-right: 1.5rem !important; } .mb-xl-4, .my-xl-4 { margin-bottom: 1.5rem !important; } .ml-xl-4, .mx-xl-4 { margin-left: 1.5rem !important; } .m-xl-5 { margin: 3rem !important; } .mt-xl-5, .my-xl-5 { margin-top: 3rem !important; } .mr-xl-5, .mx-xl-5 { margin-right: 3rem !important; } .mb-xl-5, .my-xl-5 { margin-bottom: 3rem !important; } .ml-xl-5, .mx-xl-5 { margin-left: 3rem !important; } .p-xl-0 { padding: 0 !important; } .pt-xl-0, .py-xl-0 { padding-top: 0 !important; } .pr-xl-0, .px-xl-0 { padding-right: 0 !important; } .pb-xl-0, .py-xl-0 { padding-bottom: 0 !important; } .pl-xl-0, .px-xl-0 { padding-left: 0 !important; } .p-xl-1 { padding: 0.25rem !important; } .pt-xl-1, .py-xl-1 { padding-top: 0.25rem !important; } .pr-xl-1, .px-xl-1 { padding-right: 0.25rem !important; } .pb-xl-1, .py-xl-1 { padding-bottom: 0.25rem !important; } .pl-xl-1, .px-xl-1 { padding-left: 0.25rem !important; } .p-xl-2 { padding: 0.5rem !important; } .pt-xl-2, .py-xl-2 { padding-top: 0.5rem !important; } .pr-xl-2, .px-xl-2 { padding-right: 0.5rem !important; } .pb-xl-2, .py-xl-2 { padding-bottom: 0.5rem !important; } .pl-xl-2, .px-xl-2 { padding-left: 0.5rem !important; } .p-xl-3 { padding: 1rem !important; } .pt-xl-3, .py-xl-3 { padding-top: 1rem !important; } .pr-xl-3, .px-xl-3 { padding-right: 1rem !important; } .pb-xl-3, .py-xl-3 { padding-bottom: 1rem !important; } .pl-xl-3, .px-xl-3 { padding-left: 1rem !important; } .p-xl-4 { padding: 1.5rem !important; } .pt-xl-4, .py-xl-4 { padding-top: 1.5rem !important; } .pr-xl-4, .px-xl-4 { padding-right: 1.5rem !important; } .pb-xl-4, .py-xl-4 { padding-bottom: 1.5rem !important; } .pl-xl-4, .px-xl-4 { padding-left: 1.5rem !important; } .p-xl-5 { padding: 3rem !important; } .pt-xl-5, .py-xl-5 { padding-top: 3rem !important; } .pr-xl-5, .px-xl-5 { padding-right: 3rem !important; } .pb-xl-5, .py-xl-5 { padding-bottom: 3rem !important; } .pl-xl-5, .px-xl-5 { padding-left: 3rem !important; } .m-xl-n1 { margin: -0.25rem !important; } .mt-xl-n1, .my-xl-n1 { margin-top: -0.25rem !important; } .mr-xl-n1, .mx-xl-n1 { margin-right: -0.25rem !important; } .mb-xl-n1, .my-xl-n1 { margin-bottom: -0.25rem !important; } .ml-xl-n1, .mx-xl-n1 { margin-left: -0.25rem !important; } .m-xl-n2 { margin: -0.5rem !important; } .mt-xl-n2, .my-xl-n2 { margin-top: -0.5rem !important; } .mr-xl-n2, .mx-xl-n2 { margin-right: -0.5rem !important; } .mb-xl-n2, .my-xl-n2 { margin-bottom: -0.5rem !important; } .ml-xl-n2, .mx-xl-n2 { margin-left: -0.5rem !important; } .m-xl-n3 { margin: -1rem !important; } .mt-xl-n3, .my-xl-n3 { margin-top: -1rem !important; } .mr-xl-n3, .mx-xl-n3 { margin-right: -1rem !important; } .mb-xl-n3, .my-xl-n3 { margin-bottom: -1rem !important; } .ml-xl-n3, .mx-xl-n3 { margin-left: -1rem !important; } .m-xl-n4 { margin: -1.5rem !important; } .mt-xl-n4, .my-xl-n4 { margin-top: -1.5rem !important; } .mr-xl-n4, .mx-xl-n4 { margin-right: -1.5rem !important; } .mb-xl-n4, .my-xl-n4 { margin-bottom: -1.5rem !important; } .ml-xl-n4, .mx-xl-n4 { margin-left: -1.5rem !important; } .m-xl-n5 { margin: -3rem !important; } .mt-xl-n5, .my-xl-n5 { margin-top: -3rem !important; } .mr-xl-n5, .mx-xl-n5 { margin-right: -3rem !important; } .mb-xl-n5, .my-xl-n5 { margin-bottom: -3rem !important; } .ml-xl-n5, .mx-xl-n5 { margin-left: -3rem !important; } .m-xl-auto { margin: auto !important; } .mt-xl-auto, .my-xl-auto { margin-top: auto !important; } .mr-xl-auto, .mx-xl-auto { margin-right: auto !important; } .mb-xl-auto, .my-xl-auto { margin-bottom: auto !important; } .ml-xl-auto, .mx-xl-auto { margin-left: auto !important; } } .stretched-link::after { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 1; pointer-events: auto; content: ""; background-color: rgba(0, 0, 0, 0); } .text-monospace { font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; } .text-justify { text-align: justify !important; } .text-wrap { white-space: normal !important; } .text-nowrap { white-space: nowrap !important; } .text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .text-left { text-align: left !important; } .text-right { text-align: right !important; } .text-center { text-align: center !important; } @media (min-width: 576px) { .text-sm-left { text-align: left !important; } .text-sm-right { text-align: right !important; } .text-sm-center { text-align: center !important; } } @media (min-width: 768px) { .text-md-left { text-align: left !important; } .text-md-right { text-align: right !important; } .text-md-center { text-align: center !important; } } @media (min-width: 992px) { .text-lg-left { text-align: left !important; } .text-lg-right { text-align: right !important; } .text-lg-center { text-align: center !important; } } @media (min-width: 1200px) { .text-xl-left { text-align: left !important; } .text-xl-right { text-align: right !important; } .text-xl-center { text-align: center !important; } } .text-lowercase { text-transform: lowercase !important; } .text-uppercase, .dropdown .dropdown-menu .dropdown-header, .sidebar .sidebar-heading { text-transform: uppercase !important; } .text-capitalize { text-transform: capitalize !important; } .font-weight-light { font-weight: 300 !important; } .font-weight-lighter { font-weight: lighter !important; } .font-weight-normal { font-weight: 400 !important; } .font-weight-bold { font-weight: 700 !important; } .font-weight-bolder { font-weight: bolder !important; } .font-italic { font-style: italic !important; } .text-white { color: #fff !important; } .text-primary { color: #4e73df !important; } a.text-primary:hover, a.text-primary:focus { color: #224abe !important; } .text-secondary { color: #858796 !important; } a.text-secondary:hover, a.text-secondary:focus { color: #60616f !important; } .text-success { color: #1cc88a !important; } a.text-success:hover, a.text-success:focus { color: #13855c !important; } .text-info { color: #36b9cc !important; } a.text-info:hover, a.text-info:focus { color: #258391 !important; } .text-warning { color: #f6c23e !important; } a.text-warning:hover, a.text-warning:focus { color: #dda20a !important; } .text-danger { color: #e74a3b !important; } a.text-danger:hover, a.text-danger:focus { color: #be2617 !important; } .text-light { color: #f8f9fc !important; } a.text-light:hover, a.text-light:focus { color: #c2cbe5 !important; } .text-dark { color: #5a5c69 !important; } a.text-dark:hover, a.text-dark:focus { color: #373840 !important; } .text-body { color: #858796 !important; } .text-muted { color: #858796 !important; } .text-black-50 { color: rgba(0, 0, 0, 0.5) !important; } .text-white-50 { color: rgba(255, 255, 255, 0.5) !important; } .text-hide { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .text-decoration-none { text-decoration: none !important; } .text-break { word-wrap: break-word !important; } .text-reset { color: inherit !important; } .visible { visibility: visible !important; } .invisible { visibility: hidden !important; } @media print { *, *::before, *::after { text-shadow: none !important; box-shadow: none !important; } a:not(.btn) { text-decoration: underline; } abbr[title]::after { content: " (" attr(title) ")"; } pre { white-space: pre-wrap !important; } pre, blockquote { border: 1px solid #b7b9cc; page-break-inside: avoid; } thead { display: table-header-group; } tr, img { page-break-inside: avoid; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } @page { size: a3; } body { min-width: 992px !important; } .container { min-width: 992px !important; } .navbar { display: none; } .badge { border: 1px solid #000; } .table { border-collapse: collapse !important; } .table td, .table th { background-color: #fff !important; } .table-bordered th, .table-bordered td { border: 1px solid #dddfeb !important; } .table-dark { color: inherit; } .table-dark th, .table-dark td, .table-dark thead th, .table-dark tbody + tbody { border-color: #e3e6f0; } .table .thead-dark th { color: inherit; border-color: #e3e6f0; } } html { position: relative; min-height: 100%; } body { height: 100%; } a:focus { outline: none; } #wrapper { display: flex; } #wrapper #content-wrapper { background-color: #f8f9fc; width: 100%; overflow-x: hidden; } #wrapper #content-wrapper #content { flex: 1 0 auto; } .container, .container-fluid, .container-sm, .container-md, .container-lg, .container-xl { padding-left: 1.5rem; padding-right: 1.5rem; } .scroll-to-top { position: fixed; right: 1rem; bottom: 1rem; display: none; width: 2.75rem; height: 2.75rem; text-align: center; color: #fff; background: rgba(90, 92, 105, 0.5); line-height: 46px; } .scroll-to-top:focus, .scroll-to-top:hover { color: white; } .scroll-to-top:hover { background: #5a5c69; } .scroll-to-top i { font-weight: 800; } @-webkit-keyframes growIn { 0% { transform: scale(0.9); opacity: 0; } 100% { transform: scale(1); opacity: 1; } } @keyframes growIn { 0% { transform: scale(0.9); opacity: 0; } 100% { transform: scale(1); opacity: 1; } } .animated--grow-in, .sidebar .nav-item .collapse { -webkit-animation-name: growIn; animation-name: growIn; -webkit-animation-duration: 200ms; animation-duration: 200ms; -webkit-animation-timing-function: transform cubic-bezier(0.18, 1.25, 0.4, 1), opacity cubic-bezier(0, 1, 0.4, 1); animation-timing-function: transform cubic-bezier(0.18, 1.25, 0.4, 1), opacity cubic-bezier(0, 1, 0.4, 1); } @-webkit-keyframes fadeIn { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes fadeIn { 0% { opacity: 0; } 100% { opacity: 1; } } .animated--fade-in { -webkit-animation-name: fadeIn; animation-name: fadeIn; -webkit-animation-duration: 200ms; animation-duration: 200ms; -webkit-animation-timing-function: opacity cubic-bezier(0, 1, 0.4, 1); animation-timing-function: opacity cubic-bezier(0, 1, 0.4, 1); } .bg-gradient-primary { background-color: #4e73df; background-image: linear-gradient(180deg, #4e73df 10%, #224abe 100%); background-size: cover; } .bg-gradient-secondary { background-color: #858796; background-image: linear-gradient(180deg, #858796 10%, #60616f 100%); background-size: cover; } .bg-gradient-success { background-color: #1cc88a; background-image: linear-gradient(180deg, #1cc88a 10%, #13855c 100%); background-size: cover; } .bg-gradient-info { background-color: #36b9cc; background-image: linear-gradient(180deg, #36b9cc 10%, #258391 100%); background-size: cover; } .bg-gradient-warning { background-color: #f6c23e; background-image: linear-gradient(180deg, #f6c23e 10%, #dda20a 100%); background-size: cover; } .bg-gradient-danger { background-color: #e74a3b; background-image: linear-gradient(180deg, #e74a3b 10%, #be2617 100%); background-size: cover; } .bg-gradient-light { background-color: #f8f9fc; background-image: linear-gradient(180deg, #f8f9fc 10%, #c2cbe5 100%); background-size: cover; } .bg-gradient-dark { background-color: #5a5c69; background-image: linear-gradient(180deg, #5a5c69 10%, #373840 100%); background-size: cover; } .bg-gray-100 { background-color: #f8f9fc !important; } .bg-gray-200 { background-color: #eaecf4 !important; } .bg-gray-300 { background-color: #dddfeb !important; } .bg-gray-400 { background-color: #d1d3e2 !important; } .bg-gray-500 { background-color: #b7b9cc !important; } .bg-gray-600 { background-color: #858796 !important; } .bg-gray-700 { background-color: #6e707e !important; } .bg-gray-800 { background-color: #5a5c69 !important; } .bg-gray-900 { background-color: #3a3b45 !important; } .o-hidden { overflow: hidden !important; } .text-xs { font-size: .7rem; } .text-lg { font-size: 1.2rem; } .text-gray-100 { color: #f8f9fc !important; } .text-gray-200 { color: #eaecf4 !important; } .text-gray-300 { color: #dddfeb !important; } .text-gray-400 { color: #d1d3e2 !important; } .text-gray-500 { color: #b7b9cc !important; } .text-gray-600 { color: #858796 !important; } .text-gray-700 { color: #6e707e !important; } .text-gray-800 { color: #5a5c69 !important; } .text-gray-900 { color: #3a3b45 !important; } .icon-circle { height: 2.5rem; width: 2.5rem; border-radius: 100%; display: flex; align-items: center; justify-content: center; } .border-left-primary { border-left: 0.25rem solid #4e73df !important; } .border-bottom-primary { border-bottom: 0.25rem solid #4e73df !important; } .border-left-secondary { border-left: 0.25rem solid #858796 !important; } .border-bottom-secondary { border-bottom: 0.25rem solid #858796 !important; } .border-left-success { border-left: 0.25rem solid #1cc88a !important; } .border-bottom-success { border-bottom: 0.25rem solid #1cc88a !important; } .border-left-info { border-left: 0.25rem solid #36b9cc !important; } .border-bottom-info { border-bottom: 0.25rem solid #36b9cc !important; } .border-left-warning { border-left: 0.25rem solid #f6c23e !important; } .border-bottom-warning { border-bottom: 0.25rem solid #f6c23e !important; } .border-left-danger { border-left: 0.25rem solid #e74a3b !important; } .border-bottom-danger { border-bottom: 0.25rem solid #e74a3b !important; } .border-left-light { border-left: 0.25rem solid #f8f9fc !important; } .border-bottom-light { border-bottom: 0.25rem solid #f8f9fc !important; } .border-left-dark { border-left: 0.25rem solid #5a5c69 !important; } .border-bottom-dark { border-bottom: 0.25rem solid #5a5c69 !important; } .progress-sm { height: .5rem; } .rotate-15 { transform: rotate(15deg); } .rotate-n-15 { transform: rotate(-15deg); } .dropdown .dropdown-menu { font-size: 0.85rem; } .dropdown .dropdown-menu .dropdown-header { font-weight: 800; font-size: 0.65rem; color: #b7b9cc; } .dropdown.no-arrow .dropdown-toggle::after { display: none; } .sidebar .nav-item.dropdown .dropdown-toggle::after, .topbar .nav-item.dropdown .dropdown-toggle::after { width: 1rem; text-align: center; float: right; vertical-align: 0; border: 0; font-weight: 900; content: '\f105'; font-family: 'Font Awesome 5 Free'; } .sidebar .nav-item.dropdown.show .dropdown-toggle::after, .topbar .nav-item.dropdown.show .dropdown-toggle::after { content: '\f107'; } .sidebar .nav-item .nav-link, .topbar .nav-item .nav-link { position: relative; } .sidebar .nav-item .nav-link .badge-counter, .topbar .nav-item .nav-link .badge-counter { position: absolute; transform: scale(0.7); transform-origin: top right; right: .25rem; margin-top: -.25rem; } .sidebar .nav-item .nav-link .img-profile, .topbar .nav-item .nav-link .img-profile { height: 2rem; width: 2rem; } .topbar { height: 4.375rem; } .topbar #sidebarToggleTop { height: 2.5rem; width: 2.5rem; } .topbar #sidebarToggleTop:hover { background-color: #eaecf4; } .topbar #sidebarToggleTop:active { background-color: #dddfeb; } .topbar .navbar-search { width: 25rem; } .topbar .navbar-search input { font-size: 0.85rem; height: auto; } .topbar .topbar-divider { width: 0; border-right: 1px solid #e3e6f0; height: calc(4.375rem - 2rem); margin: auto 1rem; } .topbar .nav-item .nav-link { height: 4.375rem; display: flex; align-items: center; padding: 0 0.75rem; } .topbar .nav-item .nav-link:focus { outline: none; } .topbar .nav-item:focus { outline: none; } .topbar .dropdown { position: static; } .topbar .dropdown .dropdown-menu { width: calc(100% - 1.5rem); right: 0.75rem; } .topbar .dropdown-list { padding: 0; border: none; overflow: hidden; } .topbar .dropdown-list .dropdown-header { background-color: #4e73df; border: 1px solid #4e73df; padding-top: 0.75rem; padding-bottom: 0.75rem; color: #fff; } .topbar .dropdown-list .dropdown-item { white-space: normal; padding-top: 0.5rem; padding-bottom: 0.5rem; border-left: 1px solid #e3e6f0; border-right: 1px solid #e3e6f0; border-bottom: 1px solid #e3e6f0; line-height: 1.3rem; } .topbar .dropdown-list .dropdown-item .dropdown-list-image { position: relative; height: 2.5rem; width: 2.5rem; } .topbar .dropdown-list .dropdown-item .dropdown-list-image img { height: 2.5rem; width: 2.5rem; } .topbar .dropdown-list .dropdown-item .dropdown-list-image .status-indicator { background-color: #eaecf4; height: 0.75rem; width: 0.75rem; border-radius: 100%; position: absolute; bottom: 0; right: 0; border: 0.125rem solid #fff; } .topbar .dropdown-list .dropdown-item .text-truncate { max-width: 10rem; } .topbar .dropdown-list .dropdown-item:active { background-color: #eaecf4; color: #3a3b45; } @media (min-width: 576px) { .topbar .dropdown { position: relative; } .topbar .dropdown .dropdown-menu { width: auto; right: 0; } .topbar .dropdown-list { width: 20rem !important; } .topbar .dropdown-list .dropdown-item .text-truncate { max-width: 13.375rem; } } .topbar.navbar-dark .navbar-nav .nav-item .nav-link { color: rgba(255, 255, 255, 0.8); } .topbar.navbar-dark .navbar-nav .nav-item .nav-link:hover { color: #fff; } .topbar.navbar-dark .navbar-nav .nav-item .nav-link:active { color: #fff; } .topbar.navbar-light .navbar-nav .nav-item .nav-link { color: #d1d3e2; } .topbar.navbar-light .navbar-nav .nav-item .nav-link:hover { color: #b7b9cc; } .topbar.navbar-light .navbar-nav .nav-item .nav-link:active { color: #858796; } .sidebar { width: 6.5rem; min-height: 100vh; } .sidebar .nav-item { position: relative; } .sidebar .nav-item:last-child { margin-bottom: 1rem; } .sidebar .nav-item .nav-link { text-align: center; padding: 0.75rem 1rem; width: 6.5rem; } .sidebar .nav-item .nav-link span { font-size: 0.65rem; display: block; } .sidebar .nav-item.active .nav-link { font-weight: 700; } .sidebar .nav-item .collapse { position: absolute; left: calc(6.5rem + 1.5rem / 2); z-index: 1; top: 2px; } .sidebar .nav-item .collapse .collapse-inner { border-radius: 0.35rem; box-shadow: 0 0.15rem 1.75rem 0 rgba(58, 59, 69, 0.15); } .sidebar .nav-item .collapsing { display: none; transition: none; } .sidebar .nav-item .collapse .collapse-inner, .sidebar .nav-item .collapsing .collapse-inner { padding: .5rem 0; min-width: 10rem; font-size: 0.85rem; margin: 0 0 1rem 0; } .sidebar .nav-item .collapse .collapse-inner .collapse-header, .sidebar .nav-item .collapsing .collapse-inner .collapse-header { margin: 0; white-space: nowrap; padding: .5rem 1.5rem; text-transform: uppercase; font-weight: 800; font-size: 0.65rem; color: #b7b9cc; } .sidebar .nav-item .collapse .collapse-inner .collapse-item, .sidebar .nav-item .collapsing .collapse-inner .collapse-item { padding: 0.5rem 1rem; margin: 0 0.5rem; display: block; color: #3a3b45; text-decoration: none; border-radius: 0.35rem; white-space: nowrap; } .sidebar .nav-item .collapse .collapse-inner .collapse-item:hover, .sidebar .nav-item .collapsing .collapse-inner .collapse-item:hover { background-color: #eaecf4; } .sidebar .nav-item .collapse .collapse-inner .collapse-item:active, .sidebar .nav-item .collapsing .collapse-inner .collapse-item:active { background-color: #dddfeb; } .sidebar .nav-item .collapse .collapse-inner .collapse-item.active, .sidebar .nav-item .collapsing .collapse-inner .collapse-item.active { color: #4e73df; font-weight: 700; } .sidebar #sidebarToggle { width: 2.5rem; height: 2.5rem; text-align: center; margin-bottom: 1rem; cursor: pointer; } .sidebar #sidebarToggle::after { font-weight: 900; content: '\f104'; font-family: 'Font Awesome 5 Free'; margin-right: 0.1rem; } .sidebar #sidebarToggle:hover { text-decoration: none; } .sidebar #sidebarToggle:focus { outline: none; } .sidebar.toggled { width: 0 !important; overflow: hidden; } .sidebar.toggled #sidebarToggle::after { content: '\f105'; font-family: 'Font Awesome 5 Free'; margin-left: 0.25rem; } .sidebar .sidebar-brand { height: 4.375rem; text-decoration: none; font-size: 1rem; font-weight: 800; padding: 1.5rem 1rem; text-align: center; text-transform: uppercase; letter-spacing: 0.05rem; z-index: 1; } .sidebar .sidebar-brand .sidebar-brand-icon i { font-size: 2rem; } .sidebar .sidebar-brand .sidebar-brand-text { display: none; } .sidebar hr.sidebar-divider { margin: 0 1rem 1rem; } .sidebar .sidebar-heading { text-align: center; padding: 0 1rem; font-weight: 800; font-size: 0.65rem; } @media (min-width: 768px) { .sidebar { width: 14rem !important; } .sidebar .nav-item .collapse { position: relative; left: 0; z-index: 1; top: 0; -webkit-animation: none; animation: none; } .sidebar .nav-item .collapse .collapse-inner { border-radius: 0; box-shadow: none; } .sidebar .nav-item .collapsing { display: block; transition: height 0.15s ease; } .sidebar .nav-item .collapse, .sidebar .nav-item .collapsing { margin: 0 1rem; } .sidebar .nav-item .nav-link { display: block; width: 100%; text-align: left; padding: 1rem; width: 14rem; } .sidebar .nav-item .nav-link i { font-size: 0.85rem; margin-right: 0.25rem; } .sidebar .nav-item .nav-link span { font-size: 0.85rem; display: inline; } .sidebar .nav-item .nav-link[data-toggle="collapse"]::after { width: 1rem; text-align: center; float: right; vertical-align: 0; border: 0; font-weight: 900; content: '\f107'; font-family: 'Font Awesome 5 Free'; } .sidebar .nav-item .nav-link[data-toggle="collapse"].collapsed::after { content: '\f105'; } .sidebar .sidebar-brand .sidebar-brand-icon i { font-size: 2rem; } .sidebar .sidebar-brand .sidebar-brand-text { display: inline; } .sidebar .sidebar-heading { text-align: left; } .sidebar.toggled { overflow: visible; width: 6.5rem !important; } .sidebar.toggled .nav-item .collapse { position: absolute; left: calc(6.5rem + 1.5rem / 2); z-index: 1; top: 2px; -webkit-animation-name: growIn; animation-name: growIn; -webkit-animation-duration: 200ms; animation-duration: 200ms; -webkit-animation-timing-function: transform cubic-bezier(0.18, 1.25, 0.4, 1), opacity cubic-bezier(0, 1, 0.4, 1); animation-timing-function: transform cubic-bezier(0.18, 1.25, 0.4, 1), opacity cubic-bezier(0, 1, 0.4, 1); } .sidebar.toggled .nav-item .collapse .collapse-inner { box-shadow: 0 0.15rem 1.75rem 0 rgba(58, 59, 69, 0.15); border-radius: 0.35rem; } .sidebar.toggled .nav-item .collapsing { display: none; transition: none; } .sidebar.toggled .nav-item .collapse, .sidebar.toggled .nav-item .collapsing { margin: 0; } .sidebar.toggled .nav-item:last-child { margin-bottom: 1rem; } .sidebar.toggled .nav-item .nav-link { text-align: center; padding: 0.75rem 1rem; width: 6.5rem; } .sidebar.toggled .nav-item .nav-link span { font-size: 0.65rem; display: block; } .sidebar.toggled .nav-item .nav-link i { margin-right: 0; } .sidebar.toggled .nav-item .nav-link[data-toggle="collapse"]::after { display: none; } .sidebar.toggled .sidebar-brand .sidebar-brand-icon i { font-size: 2rem; } .sidebar.toggled .sidebar-brand .sidebar-brand-text { display: none; } .sidebar.toggled .sidebar-heading { text-align: center; } } .sidebar-light .sidebar-brand { color: #6e707e; } .sidebar-light hr.sidebar-divider { border-top: 1px solid #eaecf4; } .sidebar-light .sidebar-heading { color: #b7b9cc; } .sidebar-light .nav-item .nav-link { color: #858796; } .sidebar-light .nav-item .nav-link i { color: #d1d3e2; } .sidebar-light .nav-item .nav-link:active, .sidebar-light .nav-item .nav-link:focus, .sidebar-light .nav-item .nav-link:hover { color: #6e707e; } .sidebar-light .nav-item .nav-link:active i, .sidebar-light .nav-item .nav-link:focus i, .sidebar-light .nav-item .nav-link:hover i { color: #6e707e; } .sidebar-light .nav-item .nav-link[data-toggle="collapse"]::after { color: #b7b9cc; } .sidebar-light .nav-item.active .nav-link { color: #6e707e; } .sidebar-light .nav-item.active .nav-link i { color: #6e707e; } .sidebar-light #sidebarToggle { background-color: #eaecf4; } .sidebar-light #sidebarToggle::after { color: #b7b9cc; } .sidebar-light #sidebarToggle:hover { background-color: #dddfeb; } .sidebar-dark .sidebar-brand { color: #fff; } .sidebar-dark hr.sidebar-divider { border-top: 1px solid rgba(255, 255, 255, 0.15); } .sidebar-dark .sidebar-heading { color: rgba(255, 255, 255, 0.4); } .sidebar-dark .nav-item .nav-link { color: rgba(255, 255, 255, 0.8); } .sidebar-dark .nav-item .nav-link i { color: rgba(255, 255, 255, 0.3); } .sidebar-dark .nav-item .nav-link:active, .sidebar-dark .nav-item .nav-link:focus, .sidebar-dark .nav-item .nav-link:hover { color: #fff; } .sidebar-dark .nav-item .nav-link:active i, .sidebar-dark .nav-item .nav-link:focus i, .sidebar-dark .nav-item .nav-link:hover i { color: #fff; } .sidebar-dark .nav-item .nav-link[data-toggle="collapse"]::after { color: rgba(255, 255, 255, 0.5); } .sidebar-dark .nav-item.active .nav-link { color: #fff; } .sidebar-dark .nav-item.active .nav-link i { color: #fff; } .sidebar-dark #sidebarToggle { background-color: rgba(255, 255, 255, 0.2); } .sidebar-dark #sidebarToggle::after { color: rgba(255, 255, 255, 0.5); } .sidebar-dark #sidebarToggle:hover { background-color: rgba(255, 255, 255, 0.25); } .sidebar-dark.toggled #sidebarToggle::after { color: rgba(255, 255, 255, 0.5); } .btn-circle { border-radius: 100%; height: 2.5rem; width: 2.5rem; font-size: 1rem; display: inline-flex; align-items: center; justify-content: center; } .btn-circle.btn-sm, .btn-group-sm > .btn-circle.btn { height: 1.8rem; width: 1.8rem; font-size: 0.75rem; } .btn-circle.btn-lg, .btn-group-lg > .btn-circle.btn { height: 3.5rem; width: 3.5rem; font-size: 1.35rem; } .btn-icon-split { padding: 0; overflow: hidden; display: inline-flex; align-items: stretch; justify-content: center; } .btn-icon-split .icon { background: rgba(0, 0, 0, 0.15); display: inline-block; padding: 0.375rem 0.75rem; } .btn-icon-split .text { display: inline-block; padding: 0.375rem 0.75rem; } .btn-icon-split.btn-sm .icon, .btn-group-sm > .btn-icon-split.btn .icon { padding: 0.25rem 0.5rem; } .btn-icon-split.btn-sm .text, .btn-group-sm > .btn-icon-split.btn .text { padding: 0.25rem 0.5rem; } .btn-icon-split.btn-lg .icon, .btn-group-lg > .btn-icon-split.btn .icon { padding: 0.5rem 1rem; } .btn-icon-split.btn-lg .text, .btn-group-lg > .btn-icon-split.btn .text { padding: 0.5rem 1rem; } .card .card-header .dropdown { line-height: 1; } .card .card-header .dropdown .dropdown-menu { line-height: 1.5; } .card .card-header[data-toggle="collapse"] { text-decoration: none; position: relative; padding: 0.75rem 3.25rem 0.75rem 1.25rem; } .card .card-header[data-toggle="collapse"]::after { position: absolute; right: 0; top: 0; padding-right: 1.725rem; line-height: 51px; font-weight: 900; content: '\f107'; font-family: 'Font Awesome 5 Free'; color: #d1d3e2; } .card .card-header[data-toggle="collapse"].collapsed { border-radius: 0.35rem; } .card .card-header[data-toggle="collapse"].collapsed::after { content: '\f105'; } .chart-area { position: relative; height: 10rem; width: 100%; } @media (min-width: 768px) { .chart-area { height: 20rem; } } .chart-bar { position: relative; height: 10rem; width: 100%; } @media (min-width: 768px) { .chart-bar { height: 20rem; } } .chart-pie { position: relative; height: 15rem; width: 100%; } @media (min-width: 768px) { .chart-pie { height: calc(20rem - 43px) !important; } } .bg-login-image { background: url("https://source.unsplash.com/K4mSJ7kc0As/600x800"); background-position: center; background-size: cover; } .bg-register-image { background: url("https://source.unsplash.com/Mv9hjnEUHR4/600x800"); background-position: center; background-size: cover; } .bg-password-image { background: url("https://source.unsplash.com/oWTW-jNGl9I/600x800"); background-position: center; background-size: cover; } form.user .custom-checkbox.small label { line-height: 1.5rem; } form.user .form-control-user { font-size: 0.8rem; border-radius: 10rem; padding: 1.5rem 1rem; } form.user .btn-user { font-size: 0.8rem; border-radius: 10rem; padding: 0.75rem 1rem; } .btn-google { color: #fff; background-color: #ea4335; border-color: #fff; } .btn-google:hover { color: #fff; background-color: #e12717; border-color: #e6e6e6; } .btn-google:focus, .btn-google.focus { color: #fff; background-color: #e12717; border-color: #e6e6e6; box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); } .btn-google.disabled, .btn-google:disabled { color: #fff; background-color: #ea4335; border-color: #fff; } .btn-google:not(:disabled):not(.disabled):active, .btn-google:not(:disabled):not(.disabled).active, .show > .btn-google.dropdown-toggle { color: #fff; background-color: #d62516; border-color: #dfdfdf; } .btn-google:not(:disabled):not(.disabled):active:focus, .btn-google:not(:disabled):not(.disabled).active:focus, .show > .btn-google.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); } .btn-facebook { color: #fff; background-color: #3b5998; border-color: #fff; } .btn-facebook:hover { color: #fff; background-color: #30497c; border-color: #e6e6e6; } .btn-facebook:focus, .btn-facebook.focus { color: #fff; background-color: #30497c; border-color: #e6e6e6; box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); } .btn-facebook.disabled, .btn-facebook:disabled { color: #fff; background-color: #3b5998; border-color: #fff; } .btn-facebook:not(:disabled):not(.disabled):active, .btn-facebook:not(:disabled):not(.disabled).active, .show > .btn-facebook.dropdown-toggle { color: #fff; background-color: #2d4373; border-color: #dfdfdf; } .btn-facebook:not(:disabled):not(.disabled):active:focus, .btn-facebook:not(:disabled):not(.disabled).active:focus, .show > .btn-facebook.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); } .error { color: #5a5c69; font-size: 7rem; position: relative; line-height: 1; width: 12.5rem; } @-webkit-keyframes noise-anim { 0% { clip: rect(78px, 9999px, 4px, 0); } 5% { clip: rect(87px, 9999px, 70px, 0); } 10% { clip: rect(21px, 9999px, 60px, 0); } 15% { clip: rect(79px, 9999px, 83px, 0); } 20% { clip: rect(20px, 9999px, 28px, 0); } 25% { clip: rect(42px, 9999px, 78px, 0); } 30% { clip: rect(71px, 9999px, 37px, 0); } 35% { clip: rect(89px, 9999px, 49px, 0); } 40% { clip: rect(36px, 9999px, 48px, 0); } 45% { clip: rect(77px, 9999px, 67px, 0); } 50% { clip: rect(7px, 9999px, 94px, 0); } 55% { clip: rect(90px, 9999px, 79px, 0); } 60% { clip: rect(48px, 9999px, 57px, 0); } 65% { clip: rect(64px, 9999px, 35px, 0); } 70% { clip: rect(23px, 9999px, 88px, 0); } 75% { clip: rect(68px, 9999px, 27px, 0); } 80% { clip: rect(39px, 9999px, 98px, 0); } 85% { clip: rect(97px, 9999px, 57px, 0); } 90% { clip: rect(61px, 9999px, 53px, 0); } 95% { clip: rect(79px, 9999px, 44px, 0); } 100% { clip: rect(12px, 9999px, 19px, 0); } } @keyframes noise-anim { 0% { clip: rect(78px, 9999px, 4px, 0); } 5% { clip: rect(87px, 9999px, 70px, 0); } 10% { clip: rect(21px, 9999px, 60px, 0); } 15% { clip: rect(79px, 9999px, 83px, 0); } 20% { clip: rect(20px, 9999px, 28px, 0); } 25% { clip: rect(42px, 9999px, 78px, 0); } 30% { clip: rect(71px, 9999px, 37px, 0); } 35% { clip: rect(89px, 9999px, 49px, 0); } 40% { clip: rect(36px, 9999px, 48px, 0); } 45% { clip: rect(77px, 9999px, 67px, 0); } 50% { clip: rect(7px, 9999px, 94px, 0); } 55% { clip: rect(90px, 9999px, 79px, 0); } 60% { clip: rect(48px, 9999px, 57px, 0); } 65% { clip: rect(64px, 9999px, 35px, 0); } 70% { clip: rect(23px, 9999px, 88px, 0); } 75% { clip: rect(68px, 9999px, 27px, 0); } 80% { clip: rect(39px, 9999px, 98px, 0); } 85% { clip: rect(97px, 9999px, 57px, 0); } 90% { clip: rect(61px, 9999px, 53px, 0); } 95% { clip: rect(79px, 9999px, 44px, 0); } 100% { clip: rect(12px, 9999px, 19px, 0); } } .error:after { content: attr(data-text); position: absolute; left: 2px; text-shadow: -1px 0 #e74a3b; top: 0; color: #5a5c69; background: #f8f9fc; overflow: hidden; clip: rect(0, 900px, 0, 0); animation: noise-anim 2s infinite linear alternate-reverse; } @-webkit-keyframes noise-anim-2 { 0% { clip: rect(20px, 9999px, 91px, 0); } 5% { clip: rect(20px, 9999px, 44px, 0); } 10% { clip: rect(84px, 9999px, 55px, 0); } 15% { clip: rect(40px, 9999px, 93px, 0); } 20% { clip: rect(37px, 9999px, 73px, 0); } 25% { clip: rect(75px, 9999px, 57px, 0); } 30% { clip: rect(89px, 9999px, 38px, 0); } 35% { clip: rect(6px, 9999px, 68px, 0); } 40% { clip: rect(63px, 9999px, 17px, 0); } 45% { clip: rect(55px, 9999px, 49px, 0); } 50% { clip: rect(98px, 9999px, 28px, 0); } 55% { clip: rect(18px, 9999px, 57px, 0); } 60% { clip: rect(18px, 9999px, 64px, 0); } 65% { clip: rect(35px, 9999px, 77px, 0); } 70% { clip: rect(31px, 9999px, 59px, 0); } 75% { clip: rect(30px, 9999px, 38px, 0); } 80% { clip: rect(13px, 9999px, 52px, 0); } 85% { clip: rect(63px, 9999px, 91px, 0); } 90% { clip: rect(96px, 9999px, 67px, 0); } 95% { clip: rect(24px, 9999px, 13px, 0); } 100% { clip: rect(5px, 9999px, 29px, 0); } } @keyframes noise-anim-2 { 0% { clip: rect(20px, 9999px, 91px, 0); } 5% { clip: rect(20px, 9999px, 44px, 0); } 10% { clip: rect(84px, 9999px, 55px, 0); } 15% { clip: rect(40px, 9999px, 93px, 0); } 20% { clip: rect(37px, 9999px, 73px, 0); } 25% { clip: rect(75px, 9999px, 57px, 0); } 30% { clip: rect(89px, 9999px, 38px, 0); } 35% { clip: rect(6px, 9999px, 68px, 0); } 40% { clip: rect(63px, 9999px, 17px, 0); } 45% { clip: rect(55px, 9999px, 49px, 0); } 50% { clip: rect(98px, 9999px, 28px, 0); } 55% { clip: rect(18px, 9999px, 57px, 0); } 60% { clip: rect(18px, 9999px, 64px, 0); } 65% { clip: rect(35px, 9999px, 77px, 0); } 70% { clip: rect(31px, 9999px, 59px, 0); } 75% { clip: rect(30px, 9999px, 38px, 0); } 80% { clip: rect(13px, 9999px, 52px, 0); } 85% { clip: rect(63px, 9999px, 91px, 0); } 90% { clip: rect(96px, 9999px, 67px, 0); } 95% { clip: rect(24px, 9999px, 13px, 0); } 100% { clip: rect(5px, 9999px, 29px, 0); } } .error:before { content: attr(data-text); position: absolute; left: -2px; text-shadow: 1px 0 #4e73df; top: 0; color: #5a5c69; background: #f8f9fc; overflow: hidden; clip: rect(0, 900px, 0, 0); animation: noise-anim-2 3s infinite linear alternate-reverse; } footer.sticky-footer { padding: 2rem 0; flex-shrink: 0; } footer.sticky-footer .copyright { line-height: 1; font-size: 0.8rem; } body.sidebar-toggled footer.sticky-footer { width: 100%; } ================================================ FILE: static/css/site.css ================================================ /*! * Bootstrap v3.0.0 * * Copyright 2013 Twitter, Inc * Licensed under the Apache License v2.0 * http://www.apache.org/licenses/LICENSE-2.0 * * Designed and built with all the love in the world @twitter by @mdo and @fat. */ .logo { background-size: cover; height: 58px; width: 180px; margin-top: 6px; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNC4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDQzMzYzKSAgLS0+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTgwcHgiDQoJIGhlaWdodD0iNThweCIgdmlld0JveD0iLTEyNy4zOTEgNDMyLjAxOSAxODAgNTgiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgLTEyNy4zOTEgNDMyLjAxOSAxODAgNTgiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGcgaWQ9IkxheWVyXzEiIGRpc3BsYXk9Im5vbmUiPg0KCTxnIGRpc3BsYXk9ImlubGluZSI+DQoJCTxwYXRoIGQ9Ik0tMTIxLjM4NSw0MzguNzQ5Yy0wLjQxNiwwLjM2MS0xLjAwNiwwLjU0MS0xLjc3MSwwLjU0MWgtMi43NzR2LTdoMi44NzRjMC42MTIsMCwxLjA5OSwwLjE1NSwxLjQ2MiwwLjQ2NA0KCQkJYzAuMzYyLDAuMzEsMC41NDQsMC43NiwwLjU0NCwxLjM1M2MwLDAuMzU5LTAuMDg0LDAuNjUxLTAuMjUzLDAuODc0Yy0wLjE2OCwwLjIyMy0wLjM3OCwwLjM5OC0wLjYyOSwwLjUyNA0KCQkJYzAuMTM5LDAuMDQsMC4yNzgsMC4xMDIsMC40MTcsMC4xODVzMC4yNjUsMC4xOTIsMC4zNzcsMC4zMjZjMC4xMTIsMC4xMzMsMC4yMDQsMC4yOTMsMC4yNzMsMC40OHMwLjEwNCwwLjQwMSwwLjEwNCwwLjY0MQ0KCQkJQy0xMjAuNzYxLDQzNy44NTItMTIwLjk2OSw0MzguMzg5LTEyMS4zODUsNDM4Ljc0OXogTS0xMjIuMzEyLDQzMy41MTRjLTAuMTQ2LTAuMTc2LTAuMzk2LTAuMjY0LTAuNzUtMC4yNjRoLTEuODh2MS44aDEuODgNCgkJCWMwLjE3MywwLDAuMzIyLTAuMDI0LDAuNDQ1LTAuMDc0YzAuMTIzLTAuMDUsMC4yMjMtMC4xMTYsMC4zLTAuMTk5YzAuMDc3LTAuMDgzLDAuMTMzLTAuMTc3LDAuMTctMC4yODNzMC4wNTUtMC4yMTUsMC4wNTUtMC4zMjgNCgkJCUMtMTIyLjA5MSw0MzMuOTA2LTEyMi4xNjUsNDMzLjY4OS0xMjIuMzEyLDQzMy41MTR6IE0tMTIyLjEyMSw0MzYuMzJjLTAuMjE0LTAuMjA3LTAuNTItMC4zMS0wLjkyLTAuMzFoLTEuOXYyLjMyaDEuODcNCgkJCWMwLjQ2NiwwLDAuNzk1LTAuMTA2LDAuOTg1LTAuMzJzMC4yODUtMC40OTQsMC4yODUtMC44NEMtMTIxLjgwMSw0MzYuODEtMTIxLjkwOCw0MzYuNTI3LTEyMi4xMjEsNDM2LjMyeiIvPg0KCQk8cGF0aCBkPSJNLTExNi4yODEsNDM5LjI5di0wLjUwNmMtMC4xMzQsMC4xOTUtMC4zMTgsMC4zNDctMC41NTUsMC40NTVzLTAuNDkyLDAuMTYyLTAuNzY1LDAuMTYyYy0wLjYxMywwLTEuMDc4LTAuMTk2LTEuMzk1LTAuNTkNCgkJCWMtMC4zMTYtMC4zOTMtMC40NzUtMC45OC0wLjQ3NS0xLjc2di0zLjAxaDEuMDR2Mi45NjNjMCwwLjUzMiwwLjA5NSwwLjkwNSwwLjI4NCwxLjExN2MwLjE4OSwwLjIxMywwLjQ1MywwLjMxOSwwLjc5MiwwLjMxOQ0KCQkJYzAuMzQ1LDAsMC42MS0wLjExNiwwLjc5Ni0wLjM0OWMwLjE4Ni0wLjIzMywwLjI3OS0wLjU2MiwwLjI3OS0wLjk4OHYtMy4wNjNoMS4wNHY1LjI1SC0xMTYuMjgxeiIvPg0KCQk8cGF0aCBkPSJNLTExMi42OTcsNDMzLjE2NWMtMC4xMywwLjEzLTAuMjg1LDAuMTk1LTAuNDY1LDAuMTk1Yy0wLjE4NywwLTAuMzQ1LTAuMDY1LTAuNDc1LTAuMTk1cy0wLjE5NS0wLjI4NS0wLjE5NS0wLjQ2NQ0KCQkJYzAtMC4xODcsMC4wNjUtMC4zNDUsMC4xOTUtMC40NzVzMC4yODgtMC4xOTUsMC40NzUtMC4xOTVjMC4xOCwwLDAuMzM1LDAuMDY1LDAuNDY1LDAuMTk1czAuMTk1LDAuMjg5LDAuMTk1LDAuNDc1DQoJCQlDLTExMi41MDEsNDMyLjg4LTExMi41NjcsNDMzLjAzNS0xMTIuNjk3LDQzMy4xNjV6IE0tMTEzLjY4Miw0MzkuMjl2LTUuMjVoMS4wNHY1LjI1SC0xMTMuNjgyeiIvPg0KCQk8cGF0aCBkPSJNLTExMS4wMzEsNDM5LjI5di02Ljc1bDEuMDQtMC41NHY3LjI5SC0xMTEuMDMxeiIvPg0KCQk8cGF0aCBkPSJNLTEwNS45MjEsNDM5LjE2Yy0wLjEyNywwLjA3My0wLjI3NSwwLjEzMS0wLjQ0NSwwLjE3NWMtMC4xNywwLjA0My0wLjM1OCwwLjA2NS0wLjU2NSwwLjA2NQ0KCQkJYy0wLjM2NywwLTAuNjU1LTAuMTEzLTAuODY1LTAuMzRzLTAuMzE1LTAuNTc3LTAuMzE1LTEuMDV2LTMuMDNoLTAuNzV2LTAuOTRoMC43NXYtMS41bDEuMDEtMC41NHYyLjA0aDEuM3YwLjk0aC0xLjN2Mi44NQ0KCQkJYzAsMC4yNDcsMC4wNDIsMC40MTQsMC4xMjUsMC41YzAuMDgzLDAuMDg3LDAuMjIyLDAuMTMsMC40MTUsMC4xM2MwLjEzMywwLDAuMjctMC4wMjEsMC40MS0wLjA2NXMwLjI1Ni0wLjA5MSwwLjM1LTAuMTQ1DQoJCQlMLTEwNS45MjEsNDM5LjE2eiIvPg0KCQk8cGF0aCBkPSJNLTk3LjQ1Miw0MzcuODA1Yy0wLjEyLDAuMzQzLTAuMjg3LDAuNjMzLTAuNSwwLjg3Yy0wLjIxMywwLjIzNy0wLjQ2MywwLjQxNy0wLjc1LDAuNTQNCgkJCWMtMC4yODcsMC4xMjQtMC42LDAuMTg1LTAuOTQsMC4xODVjLTAuMzMzLDAtMC42NC0wLjA2NS0wLjkyLTAuMTk1Yy0wLjI4LTAuMTMtMC41MjMtMC4zMTUtMC43My0wLjU1NQ0KCQkJYy0wLjIwNy0wLjI0LTAuMzY4LTAuNTI2LTAuNDg1LTAuODZzLTAuMTc1LTAuNzA3LTAuMTc1LTEuMTJjMC0wLjQyNiwwLjA2LTAuODEsMC4xOC0xLjE1czAuMjg1LTAuNjI4LDAuNDk1LTAuODY1DQoJCQljMC4yMS0wLjIzNywwLjQ1Ny0wLjQxNywwLjc0LTAuNTRjMC4yODQtMC4xMjQsMC41OTItMC4xODUsMC45MjUtMC4xODVjMC4zMzMsMCwwLjY0MywwLjA2NSwwLjkzLDAuMTk1czAuNTM1LDAuMzEyLDAuNzQ1LDAuNTQ1DQoJCQlzMC4zNzQsMC41MTksMC40OSwwLjg1NWMwLjExNiwwLjMzNywwLjE3NSwwLjcwOCwwLjE3NSwxLjExNUMtOTcuMjcxLDQzNy4wNzMtOTcuMzMyLDQzNy40NjItOTcuNDUyLDQzNy44MDV6IE0tOTguNjY3LDQzNS4zODUNCgkJCWMtMC4yMzctMC4zMTctMC41NjUtMC40NzUtMC45ODUtMC40NzVjLTAuMzk0LDAtMC43MDIsMC4xNTgtMC45MjUsMC40NzVjLTAuMjIzLDAuMzE2LTAuMzM1LDAuNzM1LTAuMzM1LDEuMjU1DQoJCQljMCwwLjU4LDAuMTIsMS4wMjEsMC4zNiwxLjMyNWMwLjI0LDAuMzA0LDAuNTU3LDAuNDU1LDAuOTUsMC40NTVjMC4xOTMsMCwwLjM3LTAuMDQ2LDAuNTMtMC4xNA0KCQkJYzAuMTYtMC4wOTQsMC4yOTYtMC4yMTksMC40MS0wLjM3NWMwLjExMy0wLjE1NywwLjItMC4zNDIsMC4yNi0wLjU1NXMwLjA5LTAuNDQsMC4wOS0wLjY4DQoJCQlDLTk4LjMxMiw0MzYuMTMtOTguNDMsNDM1LjcwMi05OC42NjcsNDM1LjM4NXoiLz4NCgkJPHBhdGggZD0iTS05Mi44MTIsNDM5LjI5di0yLjk2M2MwLTAuNTMyLTAuMDk1LTAuOTA0LTAuMjg0LTEuMTE3Yy0wLjE4OS0wLjIxMy0wLjQ1My0wLjMxOS0wLjc5MS0wLjMxOQ0KCQkJYy0wLjM0NSwwLTAuNjExLDAuMTE2LTAuNzk2LDAuMzQ5Yy0wLjE4NiwwLjIzMy0wLjI3OSwwLjU2Mi0wLjI3OSwwLjk4OHYzLjA2M2gtMS4wNHYtNS4yNWgxLjA0djAuNTA2DQoJCQljMC4xMzMtMC4xOTUsMC4zMTgtMC4zNDcsMC41NTUtMC40NTVzMC40OTItMC4xNjIsMC43NjUtMC4xNjJjMC42MTMsMCwxLjA3OCwwLjE5NywxLjM5NSwwLjU5YzAuMzE2LDAuMzk0LDAuNDc1LDAuOTgsMC40NzUsMS43Ng0KCQkJdjMuMDFILTkyLjgxMnoiLz4NCgk8L2c+DQo8L2c+DQo8ZyBpZD0iTGF5ZXJfNiI+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0tMTIyLjI2Niw0MzguOTg0Yy0wLjM5LDAuMzQ0LTAuOTU1LDAuNTE2LTEuNjk1LDAuNTE2aC0yLjUxdi03aDIuNTZjMC4yOCwwLDAuNTM1LDAuMDM1LDAuNzY1LDAuMTA1DQoJCQlzMC40MywwLjE3NiwwLjYsMC4zMTljMC4xNywwLjE0MywwLjMwMSwwLjMyNCwwLjM5NSwwLjU0NGMwLjA5MywwLjIyLDAuMTQsMC40NzksMC4xNCwwLjc3OWMwLDAuMzg2LTAuMDkzLDAuNjkzLTAuMjgsMC45MjMNCgkJCWMtMC4xODcsMC4yMy0wLjQzLDAuMzk4LTAuNzMsMC41MDRjMC4xNiwwLjA0LDAuMzIsMC4xMDIsMC40OCwwLjE4NWMwLjE2LDAuMDgzLDAuMzAzLDAuMTk0LDAuNDMsMC4zMzENCgkJCWMwLjEyNywwLjEzNywwLjIzLDAuMzA3LDAuMzEsMC41MTFzMC4xMiwwLjQ0NiwwLjEyLDAuNzI2Qy0xMjEuNjgxLDQzOC4xMjEtMTIxLjg3NSw0MzguNjQxLTEyMi4yNjYsNDM4Ljk4NHogTS0xMjMuMDcxLDQzMy41MDQNCgkJCWMtMC4xODctMC4xOTYtMC40NzctMC4yOTQtMC44Ny0wLjI5NGgtMS43NXYyLjE3aDEuNjljMC40MzMsMCwwLjc0My0wLjEwOCwwLjkzLTAuMzIzYzAuMTg3LTAuMjE2LDAuMjgtMC40NzYsMC4yOC0wLjc4MQ0KCQkJQy0xMjIuNzkxLDQzMy45NTctMTIyLjg4NCw0MzMuNy0xMjMuMDcxLDQzMy41MDR6IE0tMTIyLjg2MSw0MzYuNDVjLTAuMjY3LTAuMjQtMC42My0wLjM2LTEuMDktMC4zNmgtMS43NHYyLjdoMS43OA0KCQkJYzAuNTI2LDAsMC45LTAuMTIsMS4xMi0wLjM2YzAuMjItMC4yNCwwLjMzLTAuNTYsMC4zMy0wLjk2Qy0xMjIuNDYsNDM3LjAzLTEyMi41OTQsNDM2LjY5LTEyMi44NjEsNDM2LjQ1eiIvPg0KCQk8cGF0aCBkPSJNLTExNy4xMjEsNDM5LjV2LTAuNjRjLTAuMTUzLDAuMjItMC4zNSwwLjQtMC41OSwwLjU0cy0wLjUyNywwLjIxLTAuODYsMC4yMWMtMC4yOCwwLTAuNTM0LTAuMDQyLTAuNzYtMC4xMjUNCgkJCWMtMC4yMjctMC4wODMtMC40Mi0wLjIxMy0wLjU4LTAuMzljLTAuMTYtMC4xNzctMC4yODMtMC40LTAuMzctMC42N2MtMC4wODctMC4yNy0wLjEzLTAuNTk1LTAuMTMtMC45NzV2LTMuMmgwLjc2djMuMDc3DQoJCQljMCwwLjU2OCwwLjEwMSwwLjk4NCwwLjMwNCwxLjI0OHMwLjUxMywwLjM5NiwwLjkzMSwwLjM5NmMwLjM2NSwwLDAuNjcyLTAuMTMsMC45MjEtMC4zOTFzMC4zNzQtMC42NzgsMC4zNzQtMS4yNTJ2LTMuMDc3aDAuNzYNCgkJCXY1LjI1SC0xMTcuMTIxeiIvPg0KCQk8cGF0aCBkPSJNLTExMy45MDYsNDMzLjE1NWMtMC4xMDMsMC4xMDQtMC4yMjUsMC4xNTUtMC4zNjUsMC4xNTVjLTAuMTUzLDAtMC4yODQtMC4wNTItMC4zOS0wLjE1NQ0KCQkJYy0wLjEwNi0wLjEwMy0wLjE2LTAuMjI4LTAuMTYtMC4zNzVjMC0wLjE1MywwLjA1My0wLjI4MSwwLjE2LTAuMzg1czAuMjM3LTAuMTU1LDAuMzktMC4xNTVjMC4xNCwwLDAuMjYyLDAuMDUxLDAuMzY1LDAuMTU1DQoJCQljMC4xMDQsMC4xMDQsMC4xNTUsMC4yMzIsMC4xNTUsMC4zODVDLTExMy43NTEsNDMyLjkyNy0xMTMuODAzLDQzMy4wNTItMTEzLjkwNiw0MzMuMTU1eiBNLTExNC42NjEsNDM5LjV2LTUuMjVoMC43NnY1LjI1DQoJCQlILTExNC42NjF6Ii8+DQoJCTxwYXRoIGQ9Ik0tMTEyLjE1MSw0MzkuNXYtNi44N2wwLjc2LTAuNDJ2Ny4yOUgtMTEyLjE1MXoiLz4NCgkJPHBhdGggZD0iTS0xMDguNzIxLDQzNC44OXYzLjQxMmMwLDAuMjMyLDAuMDM5LDAuMzk2LDAuMTE1LDAuNDg5YzAuMDc3LDAuMDkzLDAuMjE1LDAuMTQsMC40MTUsMC4xNA0KCQkJYzAuMTUzLDAsMC4yODUtMC4wMTIsMC4zOTUtMC4wMzVzMC4yMjUtMC4wNjIsMC4zNDUtMC4xMTVsLTAuMDUsMC42NWMtMC4xNDcsMC4wNi0wLjI5NSwwLjEwNS0wLjQ0NSwwLjEzNQ0KCQkJYy0wLjE1LDAuMDMtMC4zMjUsMC4wNDUtMC41MjUsMC4wNDVjLTAuMzI5LDAtMC41NzktMC4wODgtMC43NTEtMC4yNjRjLTAuMTcyLTAuMTc2LTAuMjU4LTAuNDg0LTAuMjU4LTAuOTIzdi0zLjUzMmgtMC42NXYtMC42NA0KCQkJaDAuNjV2LTEuNjJsMC43Ni0wLjQydjIuMDRoMS4zdjAuNjRILTEwOC43MjF6Ii8+DQoJCTxwYXRoIGQ9Ik0tOTkuMjcxLDQzOC4wMjVjLTAuMTIsMC4zNDQtMC4yODQsMC42MzMtMC40OSwwLjg3cy0wLjQ1LDAuNDE1LTAuNzMsMC41MzVjLTAuMjgsMC4xMi0wLjU4LDAuMTgtMC45LDAuMTgNCgkJCXMtMC42MTktMC4wNTgtMC44OTUtMC4xNzVjLTAuMjc3LTAuMTE3LTAuNTE1LTAuMjktMC43MTUtMC41MmMtMC4yLTAuMjMtMC4zNTgtMC41MTUtMC40NzUtMC44NTVzLTAuMTc1LTAuNzMzLTAuMTc1LTEuMTgNCgkJCWMwLTAuNDQ2LDAuMDYtMC44NCwwLjE4LTEuMThjMC4xMi0wLjM0LDAuMjgzLTAuNjI1LDAuNDktMC44NTVjMC4yMDctMC4yMywwLjQ1LTAuNDA1LDAuNzMtMC41MjVjMC4yOC0wLjEyLDAuNTgtMC4xOCwwLjktMC4xOA0KCQkJYzAuMzIsMCwwLjYxOCwwLjA1NywwLjg5NSwwLjE3YzAuMjc2LDAuMTEzLDAuNTE1LDAuMjgzLDAuNzE1LDAuNTFjMC4yLDAuMjI3LDAuMzU4LDAuNTA5LDAuNDc1LDAuODQ1DQoJCQljMC4xMTcsMC4zMzcsMC4xNzUsMC43MjksMC4xNzUsMS4xNzVDLTk5LjA5MSw0MzcuMjg3LTk5LjE1MSw0MzcuNjgyLTk5LjI3MSw0MzguMDI1eiBNLTEwMC4yNyw0MzUuMjk3DQoJCQljLTAuMjc5LTAuMzQ1LTAuNjQ4LTAuNTE4LTEuMTA2LTAuNTE4Yy0wLjQ1OCwwLTAuODI2LDAuMTczLTEuMTAyLDAuNTE4Yy0wLjI3NiwwLjM0NS0wLjQxNCwwLjg2Ni0wLjQxNCwxLjU2Mg0KCQkJYzAsMC42OTcsMC4xMzgsMS4yMjMsMC40MTQsMS41NzhzMC42NDMsMC41MzMsMS4xMDIsMC41MzNjMC40NTgsMCwwLjgyNy0wLjE3OCwxLjEwNi0wLjUzM2MwLjI3OS0wLjM1NSwwLjQxOC0wLjg4MSwwLjQxOC0xLjU3OA0KCQkJQy05OS44NTEsNDM2LjE2NC05OS45OTEsNDM1LjY0My0xMDAuMjcsNDM1LjI5N3oiLz4NCgkJPHBhdGggZD0iTS05NC40MjEsNDM5LjV2LTMuMDc3YzAtMC41NjgtMC4xMDItMC45ODMtMC4zMDQtMS4yNDhjLTAuMjAyLTAuMjY0LTAuNTEzLTAuMzk2LTAuOTMxLTAuMzk2DQoJCQljLTAuMzY1LDAtMC42NzIsMC4xMy0wLjkyMSwwLjM5MXMtMC4zNzQsMC42NzgtMC4zNzQsMS4yNTJ2My4wNzdoLTAuNzZ2LTUuMjVoMC43NnYwLjY0YzAuMTUzLTAuMjIsMC4zNS0wLjQsMC41OS0wLjU0DQoJCQljMC4yNC0wLjE0LDAuNTI2LTAuMjEsMC44Ni0wLjIxYzAuMjgsMCwwLjUzMywwLjA0MiwwLjc2LDAuMTI1czAuNDIsMC4yMTMsMC41OCwwLjM5YzAuMTYsMC4xNzcsMC4yODMsMC40LDAuMzcsMC42Nw0KCQkJYzAuMDg2LDAuMjcsMC4xMywwLjU5NSwwLjEzLDAuOTc1djMuMkgtOTQuNDIxeiIvPg0KCTwvZz4NCjwvZz4NCjxnIGlkPSJMYXllcl81Ij4NCgk8Zz4NCgkJPHBhdGggZmlsbD0iI0RCMjEyRiIgZD0iTS0xMTkuMDYzLDQ2NS42OThsLTQuNjA0LDEuNjc4YzAuMDU5LDAuNzM4LDAuMTg1LDEuNDY2LDAuMzY0LDIuMTgxbDQuMzc2LTEuNTkyDQoJCQlDLTExOS4wNjgsNDY3LjIyNC0xMTkuMTIsNDY2LjQ2Mi0xMTkuMDYzLDQ2NS42OTgiLz4NCgkJPGc+DQoJCQk8Zz4NCgkJCQk8cGF0aCBmaWxsPSIjREIyMTJGIiBkPSJNLTk4LjcxLDQ2MC42MDZjLTAuMzIxLTAuNjYzLTAuNjkzLTEuMzAzLTEuMTIyLTEuOTA1bC00LjYwNiwxLjY3NQ0KCQkJCQljMC41MzgsMC41NDcsMC45ODYsMS4xNjQsMS4zNTQsMS44MjNMLTk4LjcxLDQ2MC42MDZ6Ii8+DQoJCQk8L2c+DQoJCQk8Zz4NCgkJCQk8cGF0aCBmaWxsPSIjREIyMTJGIiBkPSJNLTEwOC44NDEsNDU5LjMwMWMwLjk1OSwwLjQ0OSwxLjc4NywxLjA1NywyLjQ4OCwxLjc3M2w0LjYwNC0xLjY3Nw0KCQkJCQljLTEuMjc2LTEuNzktMy4wMTItMy4yODYtNS4xNDEtNC4yNzdjLTYuNTgzLTMuMDcxLTE0LjQzNC0wLjIxMy0xNy41MDUsNi4zNjljLTAuOTkyLDIuMTI5LTEuMzYyLDQuMzkyLTEuMTg4LDYuNTgyDQoJCQkJCWw0LjYwNi0xLjY3NWMwLjA3NS0wLjk5OCwwLjMxOC0xLjk5OCwwLjc2Ni0yLjk1N0MtMTE4LjIxOCw0NTkuMTY0LTExMy4xMTYsNDU3LjMwOS0xMDguODQxLDQ1OS4zMDEiLz4NCgkJCTwvZz4NCgkJPC9nPg0KCQk8cGF0aCBmaWxsPSIjRUEyMjI3IiBkPSJNLTEyMy4wMTUsNDY5LjQ1MmwtNC4zNzYsMS41OTRjMC40MDEsMS41OTQsMS4xMDEsMy4xMSwyLjA1Nyw0LjQ1OGw0LjU5Ni0xLjY3DQoJCQlDLTEyMS45MTksNDcyLjYyMS0xMjIuNzAyLDQ3MS4wOS0xMjMuMDE1LDQ2OS40NTIiLz4NCgkJPHBhdGggZmlsbD0iI0RCMjEyRiIgZD0iTS0xMDMuOTMsNDY3LjcxNWMtMC4wNzMsMC45OTktMC4zMjUsMS45OTgtMC43NzQsMi45NTdjLTEuOTk0LDQuMjc3LTcuMDk0LDYuMTM0LTExLjM3MSw0LjE0DQoJCQljLTAuOTU4LTAuNDQ5LTEuNzk1LTEuMDUzLTIuNDkyLTEuNzdsLTQuNTk0LDEuNjczYzEuMjcxLDEuNzg5LDMuMDA3LDMuMjg1LDUuMTM3LDQuMjc5YzYuNTgyLDMuMDY5LDE0LjQzNCwwLjIxMSwxNy41MDItNi4zNzINCgkJCWMwLjk5NC0yLjEyOSwxLjM2Mi00LjM5MSwxLjE4NS02LjU3OEwtMTAzLjkzLDQ2Ny43MTV6Ii8+DQoJCTxwYXRoIGZpbGw9IiNFQTIyMjciIGQ9Ik0tMTAyLjc5OCw0NjIuMDk0bC00LjM3NCwxLjU5MmMwLjgxMSwxLjQ1NywxLjE5NSwzLjEzNCwxLjA3MSw0LjgxOWw0LjU5NC0xLjY3Mg0KCQkJQy0xMDEuNjM5LDQ2NS4xODUtMTAyLjA3OCw0NjMuNTc1LTEwMi43OTgsNDYyLjA5NCIvPg0KCQk8cGF0aCBmaWxsPSIjMjMxRjIwIiBkPSJNLTcyLjI3MSw0NjcuMDMxYzAtMS4zMzEtMC4xOC0yLjUxMi0wLjU0LTMuNTQzYy0wLjM0NC0xLjA0OS0wLjgzNy0xLjkzMS0xLjQ3OC0yLjY1MQ0KCQkJYy0wLjYyNC0wLjczNC0xLjM4NC0xLjI5LTIuMjc1LTEuNjY2Yy0wLjg3Ni0wLjM5Mi0xLjg0NS0wLjU4Ni0yLjkwOS0wLjU4NmMtMS4wNzksMC0yLjA2MywwLjE5NS0yLjk1NSwwLjU4Ng0KCQkJYy0wLjg5MiwwLjM5LTEuNjU5LDAuOTU1LTIuMjk5LDEuNjg5Yy0wLjY0MiwwLjcxOC0xLjE0MiwxLjYwMi0xLjUwMiwyLjY1MWMtMC4zNDUsMS4wNDctMC41MTYsMi4yMzYtMC41MTYsMy41NjUNCgkJCWMwLDEuMzMsMC4xNzEsMi41MiwwLjUxNiwzLjU2NmMwLjM2LDEuMDMxLDAuODUzLDEuOTE1LDEuNDc5LDIuNjUxYzAuNjQsMC43MTgsMS4zOTksMS4yNzMsMi4yNzUsMS42NjUNCgkJCWMwLjg5MiwwLjM3NiwxLjg3NSwwLjU2MywyLjk1NiwwLjU2M2MxLjA2MiwwLDIuMDM5LTAuMTk1LDIuOTMxLTAuNTg2YzAuODkyLTAuMzkxLDEuNjU5LTAuOTQ3LDIuMy0xLjY2NQ0KCQkJYzAuNjQyLTAuNzM2LDEuMTM0LTEuNjI2LDEuNDc4LTIuNjc1Qy03Mi40NTEsNDY5LjU0OC03Mi4yNzEsNDY4LjM1OS03Mi4yNzEsNDY3LjAzMUwtNzIuMjcxLDQ2Ny4wMzF6IE0tNzUuNjQ5LDQ2Ny4wNzYNCgkJCWMwLDEuNjc1LTAuMzUzLDIuOTU2LTEuMDU1LDMuODQ4Yy0wLjY4OSwwLjg5Mi0xLjYxMiwxLjMzNy0yLjc3LDEuMzM3Yy0xLjE1OCwwLTIuMDk1LTAuNDUzLTIuODE1LTEuMzYNCgkJCWMtMC43MTgtMC45MDctMS4wNzgtMi4xOTctMS4wNzgtMy44N2MwLTEuNjc1LDAuMzQ1LTIuOTU3LDEuMDMxLTMuODQ4YzAuNzA0LTAuODkyLDEuNjM2LTEuMzM2LDIuNzkzLTEuMzM2DQoJCQlzMi4wOTQsMC40NTMsMi44MTQsMS4zNkMtNzYuMDA5LDQ2NC4xMTQtNzUuNjQ5LDQ2NS40MDMtNzUuNjQ5LDQ2Ny4wNzZMLTc1LjY0OSw0NjcuMDc2eiIvPg0KCQk8cGF0aCBmaWxsPSIjMjMxRjIwIiBkPSJNLTU1LjA3NSw0NjQuMDUxYzAtMC44NzYtMC4xNDktMS42MzQtMC40NDYtMi4yNzVjLTAuMjk4LTAuNjU4LTAuNzAzLTEuMjA1LTEuMjE5LTEuNjQ0DQoJCQljLTAuNTE4LTAuNDM3LTEuMTItMC43NTgtMS44MDctMC45NmMtMC42ODktMC4yMTgtMS40MTUtMC4zMjktMi4xODMtMC4zMjloLTcuMTc5djE2LjQyMmgzLjI4NXYtNS44MThoMy42MTENCgkJCWMwLjg0NSwwLDEuNjI4LTAuMSwyLjM0Ny0wLjMwNWMwLjczNi0wLjIwMywxLjM2OC0wLjUyMywxLjkwMS0wLjk2YzAuNTMxLTAuNDM5LDAuOTQ0LTAuOTk0LDEuMjQyLTEuNjY3DQoJCQlDLTU1LjIyNCw0NjUuODI2LTU1LjA3NSw0NjUuMDA1LTU1LjA3NSw0NjQuMDUxTC01NS4wNzUsNDY0LjA1MXogTS01OC40NTQsNDY0LjEyMWMwLDEuNDI0LTAuNzgyLDIuMTM0LTIuMzQ1LDIuMTM0aC0zLjgyNA0KCQkJdi00LjIyMmgzLjc3N2MwLjczMywwLDEuMzEyLDAuMTcxLDEuNzM1LDAuNTE2Qy01OC42NzIsNDYyLjg3Ny01OC40NTQsNDYzLjQwMS01OC40NTQsNDY0LjEyMUwtNTguNDU0LDQ2NC4xMjF6Ii8+DQoJCTxwb2x5Z29uIGZpbGw9IiMyMzFGMjAiIHBvaW50cz0iLTM5LjE0Nyw0NzUuMjY0IC0zOS4xNDcsNDcyLjA1IC00Ny42MTUsNDcyLjA1IC00Ny42MTUsNDY4LjA4NiAtNDIuOSw0NjguMDg2IC00Mi45LDQ2NC44OTYgDQoJCQktNDcuNjE1LDQ2NC44OTYgLTQ3LjYxNSw0NjIuMDU3IC0zOS40OTcsNDYyLjA1NyAtMzkuNDk3LDQ1OC44NDIgLTUwLjksNDU4Ljg0MiAtNTAuOSw0NzUuMjY0IAkJIi8+DQoJCTxwYXRoIGZpbGw9IiMyMzFGMjAiIGQ9Ik0tMjEuMjkyLDQ3NS4yNjR2LTE2LjQyMmgtMy4yMzh2Ny44MTJjMC4wMTYsMC4zNDQsMC4wMjMsMC42OTUsMC4wMjMsMS4wNTV2MC45ODYNCgkJCWMwLjAxNiwwLjI5NywwLjAyMywwLjUyNCwwLjAyMywwLjY3OWMtMC4xMDktMC4yMTgtMC4yODEtMC41LTAuNTE3LTAuODQ1Yy0wLjIxOS0wLjM1OC0wLjQzLTAuNjk1LTAuNjMzLTEuMDA4bC01LjgxOC04LjY4DQoJCQloLTMuMTQ0djE2LjQyMmgzLjIzNnYtNy4yMjZjMC0wLjIzNC0wLjAwOC0wLjUyMy0wLjAyMS0wLjg2OHYtMS4wMzJjMC0wLjM2LTAuMDA4LTAuNjg4LTAuMDIzLTAuOTg2di0wLjcwMw0KCQkJYzAuMTA3LDAuMjE4LDAuMjczLDAuNTA4LDAuNDkyLDAuODY2YzAuMjMzLDAuMzQ1LDAuNDUyLDAuNjczLDAuNjU3LDAuOTg2bDYuMDI4LDguOTYySC0yMS4yOTJ6Ii8+DQoJCTxwYXRoIGZpbGw9IiMyMzFGMjAiIGQ9Ik0tNS44NzksNDcwLjk0N2MwLTAuNjEtMC4wNzktMS4xNDktMC4yMzQtMS42MThjLTAuMTU3LTAuNDctMC40MjQtMC44OTktMC43OTgtMS4yOTENCgkJCWMtMC4zNTktMC4zOTItMC44NDQtMC43NS0xLjQ1NC0xLjA3OWMtMC42MS0wLjMyOC0xLjM3LTAuNjU3LTIuMjc1LTAuOTg2Yy0wLjgzMS0wLjI5Ny0xLjUwMi0wLjU3MS0yLjAxOC0wLjgyMQ0KCQkJYy0wLjUwMi0wLjI1LTAuODkyLTAuNS0xLjE3My0wLjc1Yy0wLjI4Mi0wLjI2Ni0wLjQ3MS0wLjUzMi0wLjU2My0wLjc5OWMtMC4wOTUtMC4yODItMC4xNDItMC41OTMtMC4xNDItMC45MzcNCgkJCWMwLTAuMzI5LDAuMDU2LTAuNjM0LDAuMTYzLTAuOTE2YzAuMTI2LTAuMjk3LDAuMzEzLTAuNTU1LDAuNTY1LTAuNzczYzAuMjY2LTAuMjIsMC42MDEtMC4zOTIsMS4wMDgtMC41MTgNCgkJCWMwLjQwNy0wLjE0LDAuODkyLTAuMjEsMS40NTQtMC4yMWMwLjgyOSwwLDEuNTQxLDAuMTMzLDIuMTM2LDAuMzk5YzAuNjA4LDAuMjUsMS4yMTEsMC42MjYsMS44MDUsMS4xMjZsMS4xNzQtMS40MzENCgkJCWMtMC42ODgtMC41NDctMS40MjMtMC45NzgtMi4yMDUtMS4yOTFjLTAuNzY2LTAuMzEzLTEuNjk2LTAuNDY5LTIuNzkxLTAuNDY5Yy0wLjc2OCwwLTEuNDcsMC4wOTUtMi4xMTEsMC4yODINCgkJCWMtMC42MjYsMC4xODctMS4xNjYsMC40NjgtMS42MTgsMC44NDRjLTAuNDM5LDAuMzYtMC43ODMsMC43OTctMS4wMzMsMS4zMTNjLTAuMjUsMC41MTgtMC4zNzYsMS4xMDQtMC4zNzYsMS43Ng0KCQkJYzAsMC41OTQsMC4wNzgsMS4xMTgsMC4yMzUsMS41NzJjMC4xNzIsMC40NTMsMC40MzgsMC44NjgsMC43OTgsMS4yNDRjMC4zNzYsMC4zNTgsMC44NiwwLjcwMywxLjQ1NCwxLjAzMg0KCQkJYzAuNjEsMC4zMTMsMS4zNiwwLjYyNiwyLjI1MiwwLjkzOGMwLjc1LDAuMjY2LDEuMzc2LDAuNTMyLDEuODc3LDAuNzk3YzAuNTAyLDAuMjUsMC44OTksMC41MDgsMS4xOTYsMC43NzMNCgkJCWMwLjMxMywwLjI2NiwwLjUzMiwwLjU1NSwwLjY1OCwwLjg2OHMwLjE4NywwLjY1NywwLjE4NywxLjAzM2MwLDAuODc2LTAuMzIsMS41NjMtMC45NjEsMi4wNjMNCgkJCWMtMC42MjUsMC41MDItMS40ODUsMC43NTItMi41OCwwLjc1MmMtMC44NDUsMC0xLjYyOC0wLjE4MS0yLjM0Ni0wLjU0Yy0wLjcyMS0wLjM2LTEuMzkzLTAuODM2LTIuMDE4LTEuNDNsLTEuMjIxLDEuMzYNCgkJCWMwLjY1NywwLjY1NywxLjQ1NCwxLjIwNSwyLjM5NCwxLjY0MmMwLjk1MiwwLjQyMiwxLjk5NCwwLjYzNCwzLjEyLDAuNjM0YzAuODU5LDAsMS42MjUtMC4xMTgsMi4yOTktMC4zNTINCgkJCWMwLjY3Mi0wLjIzNCwxLjI0NC0wLjU1NSwxLjcxMS0wLjk2YzAuNDY5LTAuNDA4LDAuODIxLTAuODkyLDEuMDU2LTEuNDU1Qy02LjAwNSw0NzIuMTkyLTUuODc5LDQ3MS41ODktNS44NzksNDcwLjk0Nw0KCQkJTC01Ljg3OSw0NzAuOTQ3eiIvPg0KCQk8cG9seWdvbiBmaWxsPSIjMjMxRjIwIiBwb2ludHM9IjEwLjgwMSw0NzUuMjY0IDEwLjgwMSw0NTguODQyIDguOTcxLDQ1OC44NDIgOC45NzEsNDY1Ljg1NyAwLjgwNiw0NjUuODU3IDAuODA2LDQ1OC44NDIgDQoJCQktMS4wMjQsNDU4Ljg0MiAtMS4wMjQsNDc1LjI2NCAwLjgwNiw0NzUuMjY0IDAuODA2LDQ2Ny41MjIgOC45NzEsNDY3LjUyMiA4Ljk3MSw0NzUuMjY0IAkJIi8+DQoJCTxyZWN0IHg9IjE2LjI4OSIgeT0iNDU4Ljg0MiIgZmlsbD0iIzIzMUYyMCIgd2lkdGg9IjEuODMyIiBoZWlnaHQ9IjE2LjQyMiIvPg0KCQk8cG9seWdvbiBmaWxsPSIjMjMxRjIwIiBwb2ludHM9IjMzLjI1LDQ2MC41MDcgMzMuMjUsNDU4Ljg0MiAyMy42MDksNDU4Ljg0MiAyMy42MDksNDc1LjI2NCAyNS40MzgsNDc1LjI2NCAyNS40MzgsNDY3LjYxNyANCgkJCTI5Ljk0Myw0NjcuNjE3IDI5Ljk0Myw0NjUuOTUgMjUuNDM4LDQ2NS45NSAyNS40MzgsNDYwLjUwNyAJCSIvPg0KCQk8cG9seWdvbiBmaWxsPSIjMjMxRjIwIiBwb2ludHM9IjQ4LjAwOCw0NjAuNTA3IDQ4LjAwOCw0NTguODQyIDM2LjUxMiw0NTguODQyIDM2LjUxMiw0NjAuNTA3IDQxLjM0NCw0NjAuNTA3IDQxLjM0NCw0NzUuMjY0IA0KCQkJNDMuMTc2LDQ3NS4yNjQgNDMuMTc2LDQ2MC41MDcgCQkiLz4NCgkJPHBhdGggZmlsbD0iIzIzMUYyMCIgZD0iTS00MS41MjYsNDg4LjI2MWMtMC4yMjMsMC4xMjQtMC41MzQsMC4yMTItMC44OTYsMC4yMTJjLTAuNjQ5LDAtMS4wNDktMC4zOTktMS4wNDktMS4yMzR2LTIuNjkxaC0wLjY2NQ0KCQkJdi0wLjgzNmgwLjY2NXYtMS4zMzFsMC44OTYtMC40Nzl2MS44MDloMS4xNTV2MC44MzZoLTEuMTU1djIuNTMxYzAsMC40MzUsMC4xNDQsMC41NTksMC40OCwwLjU1OQ0KCQkJYzAuMjM4LDAsMC41MDYtMC4wODksMC42NzUtMC4xODdMLTQxLjUyNiw0ODguMjYxeiBNLTQ1Ljg0Myw0ODYuMzg3Yy0wLjI0OC0wLjEyNC0wLjU2Ni0wLjIwNS0xLjA2NC0wLjIwNQ0KCQkJYy0wLjU4NywwLTAuOTU5LDAuMjY4LTAuOTU5LDAuNjkzYzAsMC40NjIsMC4yOTQsMC43NzMsMC44OTYsMC43NzNjMC40OSwwLDAuOTE2LTAuMzAzLDEuMTI4LTAuNTk2VjQ4Ni4zODd6IE0tNDUuODQzLDQ4OC4zNzUNCgkJCXYtMC40NjFjLTAuMzE4LDAuMzE5LTAuNzczLDAuNTU4LTEuMjc5LDAuNTU4Yy0wLjc1NCwwLTEuNjE0LTAuNDI3LTEuNjE0LTEuNTczYzAtMS4wMzcsMC44LTEuNTA3LDEuODU2LTEuNTA3DQoJCQljMC40MzYsMCwwLjc3OSwwLjA2MSwxLjAzNywwLjE3N3YtMC4zNDZjMC0wLjUwNi0wLjMxMS0wLjc5Mi0wLjg3OC0wLjc5MmMtMC40NzksMC0wLjg1MiwwLjA5MS0xLjIxNiwwLjI5NWwtMC4zNTQtMC42OTMNCgkJCWMwLjQ0My0wLjI3NSwwLjk0LTAuNDE5LDEuNTk3LTAuNDE5YzEuMDM5LDAsMS43NDksMC41MDgsMS43NDksMS41NjV2My4xOTVILTQ1Ljg0M3ogTS01MC44MDcsNDg4LjM3NXYtMi43ODdoLTIuODU3djIuNzg3DQoJCQloLTAuOTMydi02LjIxNmgwLjkzMnYyLjUxNWgyLjg1N3YtMi41MTVoMC45MzR2Ni4yMTZILTUwLjgwN3ogTS01OS4xMjcsNDg1LjA3MmMtMC4yMDQtMC4yNzUtMC42My0wLjYxLTEuMDkyLTAuNjENCgkJCWMtMC42NTgsMC0xLjAxMiwwLjQ5Ni0xLjAxMiwxLjQ4YzAsMS4xNzMsMC4zNzIsMS42ODcsMS4wNDcsMS42ODdjMC40MzUsMCwwLjgxOC0wLjI5MSwxLjA1Ny0wLjU5NVY0ODUuMDcyTC01OS4xMjcsNDg1LjA3MnoNCgkJCSBNLTU5LjEzNyw0ODguMzc1di0wLjQ0M2MtMC4zMzYsMC4zMDktMC43MjcsMC41NC0xLjIxNCwwLjU0Yy0xLjAwNiwwLTEuNzk2LTAuNzI3LTEuNzk2LTIuNTAzYzAtMS41OTksMC44NzItMi4zNTQsMS44NDEtMi4zNTQNCgkJCWMwLjQ3MSwwLDAuOTEzLDAuMjUsMS4xNjksMC41MzN2LTEuNzc0bDAuOTA3LTAuNDcydjYuNDczSC01OS4xMzd6IE0tNjQuOTc5LDQ4NC40NDJjLTAuNjExLDAtMC45ODQsMC40MjgtMS4wNjQsMS4xNzFoMi4xNjUNCgkJCUMtNjMuOTIxLDQ4NC45NzYtNjQuMjIzLDQ4NC40NDItNjQuOTc5LDQ4NC40NDIgTS02Mi45ODEsNDg2LjM3aC0zLjA4YzAuMDk4LDAuODk2LDAuNjAyLDEuMjc5LDEuMTcxLDEuMjc5DQoJCQljMC4zOTIsMCwwLjcwMy0wLjE0MiwxLjAxMi0wLjM3NGwwLjU0MywwLjU4N2MtMC40MDksMC4zOS0wLjg5NywwLjYxMi0xLjYwNywwLjYxMmMtMS4wOTMsMC0yLjAxNi0wLjg4LTIuMDE2LTIuNDI1DQoJCQljMC0xLjU4MSwwLjgzNi0yLjQzMywyLjA0Mi0yLjQzM2MxLjMyMywwLDEuOTYxLDEuMDc1LDEuOTYxLDIuMzM2Qy02Mi45NTYsNDg2LjEyMi02Mi45NzEsNDg2LjI3MS02Mi45ODEsNDg2LjM3DQoJCQkgTS02OS42OTUsNDgzLjAzOWgtMS44MTJ2MS45OThoMS44MTJjMC42MjIsMCwxLjA1OC0wLjMxOSwxLjA1OC0wLjk5NEMtNjguNjM3LDQ4My4zOTYtNjkuMDYzLDQ4My4wMzktNjkuNjk1LDQ4My4wMzkNCgkJCSBNLTY5LjA2Myw0ODUuODM2bDEuMjcsMi41NDFoLTEuMDcybC0xLjIzNy0yLjQ2aC0xLjQwM3YyLjQ2aC0wLjkxM3YtNi4yMThoMi43MjVjMS4wODQsMCwxLjk5OCwwLjU3OCwxLjk5OCwxLjg1OA0KCQkJQy02Ny42OTcsNDg1LjAxMS02OC4yMiw0ODUuNjI0LTY5LjA2Myw0ODUuODM2IE0tNzguMDEzLDQ5MC4wMTloLTAuOTY5bDAuNjc2LTEuNzMybC0xLjcxNS00LjU3MmgxLjAwNGwwLjc2MiwyLjI4MQ0KCQkJYzAuMTQ2LDAuNDA5LDAuMzU2LDEuMTAyLDAuNDExLDEuMzZjMC4wNzktMC4yNzgsMC4yNzQtMC45NCwwLjQxOC0xLjM0M2wwLjc4OS0yLjI5OGgwLjk2OUwtNzguMDEzLDQ5MC4wMTl6IE0tODIuNDQ2LDQ4NC40Ng0KCQkJYy0wLjQzNSwwLTAuODE0LDAuMjkzLTEuMDU3LDAuNTk0djEuOTYzYzAuMjA0LDAuMjc2LDAuNjMyLDAuNjE0LDEuMDk1LDAuNjE0YzAuNjU0LDAsMS4wMTEtMC40OTgsMS4wMTEtMS40ODINCgkJCUMtODEuMzk3LDQ4NC45NzQtODEuNzcxLDQ4NC40Ni04Mi40NDYsNDg0LjQ2IE0tODIuMzIsNDg4LjQ3NGMtMC40NzMsMC0wLjkxNS0wLjI0OC0xLjE3My0wLjUzM3YwLjQzNWgtMC45MDZ2LTYuMDAxbDAuOTA2LTAuNDcyDQoJCQl2Mi4yNTVjMC4zMzgtMC4zMDksMC43MjgtMC41NCwxLjIxNi0wLjU0YzEuMDA0LDAsMS43OTYsMC43MjksMS43OTYsMi41MDRDLTgwLjQ4MSw0ODcuNzItODEuMzUxLDQ4OC40NzQtODIuMzIsNDg4LjQ3NCIvPg0KCQk8cGF0aCBmaWxsPSIjMjMxRjIwIiBkPSJNLTM5LjM0Nyw0ODIuNzM2Yy0wLjAyOS0wLjAyMy0wLjA2OS0wLjAzNS0wLjEyNC0wLjAzNWgtMC4yMjd2MC4yODdoMC4yMTMNCgkJCWMwLjEyLDAsMC4xNzktMC4wNDcsMC4xNzktMC4xNDRDLTM5LjMwNiw0ODIuNzk3LTM5LjMyLDQ4Mi43NjItMzkuMzQ3LDQ4Mi43MzYgTS0zOS4yNDcsNDgzLjAwNA0KCQkJYy0wLjAzNCwwLjA0MS0wLjA4MywwLjA2OS0wLjE0MywwLjA4M2wwLjE5MSwwLjM2NGgtMC4xMzRsLTAuMTg0LTAuMzU0aC0wLjE4M3YwLjM1NGgtMC4xMTJWNDgyLjZoMC4zNDUNCgkJCWMwLjA3NiwwLDAuMTQyLDAuMDIsMC4xOTQsMC4wNjFjMC4wNTQsMC4wMzgsMC4wNzksMC4xMDEsMC4wNzksMC4xODNDLTM5LjE5Miw0ODIuOTA5LTM5LjIwOSw0ODIuOTYyLTM5LjI0Nyw0ODMuMDA0DQoJCQkgTS0zOC45Miw0ODIuNzY4Yy0wLjAzMy0wLjA4My0wLjA4LTAuMTU0LTAuMTQtMC4yMTNjLTAuMDU5LTAuMDU4LTAuMTMtMC4xMDQtMC4yMTEtMC4xMzZjLTAuMDgtMC4wMzUtMC4xNjktMC4wNTEtMC4yNjQtMC4wNTENCgkJCWMtMC4wOTIsMC0wLjE3OSwwLjAxNi0wLjI2MiwwLjA1MWMtMC4wOCwwLjAzMS0wLjE0OSwwLjA3Ny0wLjIxLDAuMTM2Yy0wLjA2LDAuMDYtMC4xMDYsMC4xMzEtMC4xNDMsMC4yMTMNCgkJCWMtMC4wMzMsMC4wOC0wLjA0OSwwLjE3My0wLjA0OSwwLjI3M2MwLDAuMDk5LDAuMDE2LDAuMTg5LDAuMDQ5LDAuMjcyYzAuMDM2LDAuMDgzLDAuMDgzLDAuMTUzLDAuMTQzLDAuMjENCgkJCWMwLjA2MSwwLjA1OCwwLjEzLDAuMTA2LDAuMjEsMC4xMzljMC4wODMsMC4wMzIsMC4xNywwLjA0OCwwLjI2MiwwLjA0OGMwLjA5NSwwLDAuMTg0LTAuMDE2LDAuMjY0LTAuMDQ4DQoJCQljMC4wODEtMC4wMzMsMC4xNTItMC4wODEsMC4yMTEtMC4xMzljMC4wNi0wLjA1NywwLjEwNi0wLjEyOCwwLjE0LTAuMjFjMC4wMzUtMC4wODMsMC4wNTItMC4xNzMsMC4wNTItMC4yNzINCgkJCUMtMzguODY5LDQ4Mi45NDEtMzguODg1LDQ4Mi44NDgtMzguOTIsNDgyLjc2OCBNLTM4LjgyMiw0ODMuMzU0Yy0wLjA0MSwwLjA5My0wLjA5NSwwLjE3NS0wLjE2MywwLjI0NA0KCQkJYy0wLjA2OSwwLjA2NS0wLjE1LDAuMTE4LTAuMjQ0LDAuMTU2Yy0wLjA5NSwwLjAzNS0wLjE5NSwwLjA1NC0wLjMwNiwwLjA1NGMtMC4xMDgsMC0wLjIwOC0wLjAyLTAuMzAzLTAuMDU0DQoJCQljLTAuMDk1LTAuMDM4LTAuMTc3LTAuMDkxLTAuMjQ0LTAuMTU2Yy0wLjA2OS0wLjA2OS0wLjEyNC0wLjE1MS0wLjE2My0wLjI0NGMtMC4wMzgtMC4wOTUtMC4wNTgtMC4yMDEtMC4wNTgtMC4zMTMNCgkJCWMwLTAuMTE4LDAuMDItMC4yMjEsMC4wNTgtMC4zMTVjMC4wMzktMC4wOTYsMC4wOTQtMC4xNzgsMC4xNjMtMC4yNDRjMC4wNjctMC4wNjksMC4xNDktMC4xMiwwLjI0NC0wLjE1Nw0KCQkJYzAuMDk1LTAuMDM3LDAuMTk0LTAuMDU1LDAuMzAzLTAuMDU1YzAuMTEsMCwwLjIxMSwwLjAxOCwwLjMwNiwwLjA1NWMwLjA5NCwwLjAzOCwwLjE3NSwwLjA4OSwwLjI0NCwwLjE1Nw0KCQkJYzAuMDY4LDAuMDY3LDAuMTIyLDAuMTQ4LDAuMTYzLDAuMjQ0YzAuMDM3LDAuMDk1LDAuMDU3LDAuMTk3LDAuMDU3LDAuMzE1Qy0zOC43NjUsNDgzLjE1My0zOC43ODUsNDgzLjI2LTM4LjgyMiw0ODMuMzU0Ii8+DQoJCTxwYXRoIGZpbGw9IiMyMjFEMUQiIGQ9Ik01MS43MTcsNDU5LjI2MmMtMC4wNDMtMC4wMzgtMC4xMDQtMC4wNTctMC4xODYtMC4wNTdoLTAuMzQ2djAuNDQxaDAuMzI2DQoJCQljMC4xODIsMCwwLjI3MS0wLjA3NSwwLjI3MS0wLjIyMUM1MS43ODMsNDU5LjM1Myw1MS43NjQsNDU5LjI5Nyw1MS43MTcsNDU5LjI2MiBNNTEuODc1LDQ1OS42NjcNCgkJCWMtMC4wNTUsMC4wNjEtMC4xMjksMC4xMDQtMC4yMTksMC4xMjdsMC4yODksMC41NTNoLTAuMjAxbC0wLjI3OS0wLjU0MWgtMC4yNzl2MC41NDFoLTAuMTd2LTEuMjk1aDAuNTIzDQoJCQljMC4xMTcsMCwwLjIxNywwLjAyOSwwLjI5NSwwLjA5YzAuMDgyLDAuMDYyLDAuMTIxLDAuMTU2LDAuMTIxLDAuMjgyQzUxLjk1NSw0NTkuNTIzLDUxLjkyNiw0NTkuNjA0LDUxLjg3NSw0NTkuNjY3DQoJCQkgTTUyLjM3MSw0NTkuMzA3Yy0wLjA1MS0wLjEyNi0wLjEyMy0wLjIzNC0wLjIxNS0wLjMyM2MtMC4wODgtMC4wOTEtMC4xOTctMC4xNjItMC4zMjItMC4yMTFjLTAuMTIzLTAuMDUxLTAuMjU2LTAuMDc1LTAuNC0wLjA3NQ0KCQkJYy0wLjE0MSwwLTAuMjczLDAuMDI0LTAuMzk2LDAuMDc1Yy0wLjEyNSwwLjA0OS0wLjIzLDAuMTItMC4zMjIsMC4yMTFjLTAuMDkyLDAuMDg4LTAuMTYyLDAuMTk3LTAuMjEzLDAuMzIzDQoJCQljLTAuMDU1LDAuMTI0LTAuMDgsMC4yNjQtMC4wOCwwLjQxNWMwLDAuMTUyLDAuMDI1LDAuMjksMC4wOCwwLjQxNmMwLjA1MSwwLjEyNiwwLjEyMSwwLjIzNCwwLjIxMywwLjMyMw0KCQkJYzAuMDkyLDAuMDksMC4xOTcsMC4xNTksMC4zMjIsMC4yMDhjMC4xMjMsMC4wNTEsMC4yNTYsMC4wNzUsMC4zOTYsMC4wNzVjMC4xNDUsMCwwLjI3Ny0wLjAyMywwLjQtMC4wNzUNCgkJCWMwLjEyNS0wLjA0OSwwLjIzNC0wLjExOCwwLjMyMi0wLjIwOGMwLjA5Mi0wLjA4OCwwLjE2NC0wLjE5NywwLjIxNS0wLjMyM3MwLjA3OC0wLjI2NCwwLjA3OC0wLjQxNg0KCQkJQzUyLjQ0OSw0NTkuNTcxLDUyLjQyMiw0NTkuNDMxLDUyLjM3MSw0NTkuMzA3IE01Mi41Miw0NjAuMjAzYy0wLjA2MSwwLjE0Mi0wLjE0MywwLjI2Ni0wLjI0NiwwLjM2OA0KCQkJYy0wLjEwNywwLjEwNS0wLjIyOSwwLjE4NC0wLjM3MywwLjIzOGMtMC4xNDEsMC4wNTctMC4yOTcsMC4wODUtMC40NjcsMC4wODVjLTAuMTY2LDAtMC4zMi0wLjAyOC0wLjQ2NS0wLjA4NQ0KCQkJYy0wLjE0MS0wLjA1NS0wLjI2Mi0wLjEzMy0wLjM3MS0wLjIzOGMtMC4xMDItMC4xMDItMC4xODYtMC4yMjYtMC4yNDQtMC4zNjhjLTAuMDYxLTAuMTQ2LTAuMDkyLTAuMzA1LTAuMDkyLTAuNDgNCgkJCWMwLTAuMTc1LDAuMDMxLTAuMzM0LDAuMDkyLTAuNDhjMC4wNTktMC4xNDQsMC4xNDMtMC4yNjYsMC4yNDQtMC4zNjljMC4xMDktMC4xMDQsMC4yMy0wLjE4MywwLjM3MS0wLjI0DQoJCQljMC4xNDUtMC4wNTUsMC4yOTktMC4wODQsMC40NjUtMC4wODRjMC4xNywwLDAuMzI2LDAuMDI5LDAuNDY3LDAuMDg0YzAuMTQ1LDAuMDU3LDAuMjY2LDAuMTM2LDAuMzczLDAuMjQNCgkJCWMwLjEwNCwwLjEwMywwLjE4NiwwLjIyNSwwLjI0NiwwLjM2OWMwLjA1OSwwLjE0NiwwLjA5LDAuMzA1LDAuMDksMC40OEM1Mi42MDksNDU5Ljg5OCw1Mi41NzgsNDYwLjA1Nyw1Mi41Miw0NjAuMjAzIi8+DQoJPC9nPg0KPC9nPg0KPGcgaWQ9IkxheWVyXzIiPg0KPC9nPg0KPGcgaWQ9IkxheWVyXzQiIGRpc3BsYXk9Im5vbmUiPg0KCTxnIGRpc3BsYXk9ImlubGluZSI+DQoJCTxwYXRoIGQ9Ik0tODUuMTkzLDUxMy4zNTNjLTMuMjk1LDAtNS40ODMsMi42NTUtNS40ODMsNy40MjVjMCw0Ljc3MSwyLjI4OCw3LjQ5Miw1LjU4OCw3LjQ5MmMzLjI5NSwwLDUuNDc4LTIuNjU0LDUuNDc4LTcuNDI2DQoJCQlDLTc5LjYxLDUxNi4wNzUtODEuODk5LDUxMy4zNTMtODUuMTkzLDUxMy4zNTMgTS04NS4xNiw1MzIuOTM4Yy02LjE1NCwwLTEwLjM1OS00LjUtMTAuMzU5LTEyLjA5NA0KCQkJYzAtNy41ODcsNC4yNzItMTIuMTYsMTAuNDMyLTEyLjE2YzYuMTE2LDAsMTAuMzI0LDQuNTAxLDEwLjMyNCwxMi4wOTNTLTc5LjAzOSw1MzIuOTM4LTg1LjE2LDUzMi45MzgiLz4NCgkJPHBhdGggZD0iTS02MC4xNCw1MTMuNjIxaC01LjQxNXY2LjA0OWg1LjQ4NWMyLjE4NCwwLDMuMzYyLTEuMDA5LDMuMzYyLTMuMDYxQy01Ni43MDksNTE0LjU2MS01OC4wNTYsNTEzLjYyMS02MC4xNCw1MTMuNjIxDQoJCQkgTS02MC4zNzQsNTI0LjI0MWgtNS4xODJ2OC4zMjhoLTQuNzA4di0yMy41MTZoMTAuMjkxYzQuNDM5LDAsOC4xMDcsMi40NTQsOC4xMDcsNy40NTkNCgkJCUMtNTEuODY3LDUyMS45NTgtNTUuNDk4LDUyNC4yNDEtNjAuMzc0LDUyNC4yNDEiLz4NCgkJPHBvbHlnb24gcG9pbnRzPSItNDYuOTk0LDUzMi41NjcgLTQ2Ljk5NCw1MDkuMDUzIC0zMC42NSw1MDkuMDUzIC0zMC42NSw1MTMuNjU3IC00Mi4yODksNTEzLjY1NyAtNDIuMjg5LDUxNy43MjEgDQoJCQktMzUuNTI5LDUxNy43MjEgLTM1LjUyOSw1MjIuMjg4IC00Mi4yODksNTIyLjI4OCAtNDIuMjg5LDUyNy45NjMgLTMwLjE0NSw1MjcuOTYzIC0zMC4xNDUsNTMyLjU2NyAJCSIvPg0KCQk8cGF0aCBkPSJNLTkuODcxLDUzMi41NjdsLTguNjQ3LTEyLjgzYy0wLjU3My0wLjg3MS0xLjM0My0yLjA0OS0xLjY0Ni0yLjY1M2MwLDAuODczLDAuMDY0LDMuODI5LDAuMDY0LDUuMTQydjEwLjM0MWgtNC42MzcNCgkJCXYtMjMuNTE0aDQuNTAybDguMzQzLDEyLjQzMmMwLjU3MywwLjg3MSwxLjM0NSwyLjA1MSwxLjY0NywyLjY1M2MwLTAuODc5LTAuMDY1LTMuODI5LTAuMDY1LTUuMTR2LTkuOTQ3aDQuNjM4djIzLjUxNGgtNC4xOTkNCgkJCVY1MzIuNTY3eiIvPg0KCQk8cGF0aCBkPSJNOC4wMjEsNTMyLjkzOGMtMy4xOTMsMC02LjA1My0xLjM4MS03LjktMy4yNThsMS43NDYtMS45NDljMS43ODMsMS43MTMsMy44MzYsMi44MjMsNi4yNTgsMi44MjMNCgkJCWMzLjEyOSwwLDUuMDgtMS41NDQsNS4wOC00LjAzMWMwLTIuMTg3LTEuMzEyLTMuNDI2LTUuNjE3LTQuOTcxYy01LjA3Ny0xLjgxNS02Ljc5OC0zLjQ2MS02Ljc5OC02Ljg1NA0KCQkJYzAtMy43NjcsMi45Ni02LjAxNCw3LjM2Ny02LjAxNGMzLjE2NiwwLDUuMTg0LDAuOTM4LDcuMTY4LDIuNTIybC0xLjY4MiwyLjA0OWMtMS43MTUtMS40MTMtMy4yOTktMi4xODctNS42NTQtMi4xODcNCgkJCWMtMy4yMjYsMC00LjU3NCwxLjYxMi00LjU3NCwzLjQ2YzAsMS45NTMsMC44NzgsMy4wNTcsNS41ODUsNC43MzhjNS4yMTUsMS44ODEsNi44MjksMy42MjksNi44MjksNy4xMjENCgkJCUMxNS44MjgsNTMwLjA4NSwxMi45MzQsNTMyLjkzOCw4LjAyMSw1MzIuOTM4Ii8+DQoJCTxwb2x5Z29uIHBvaW50cz0iMzUuOTk5LDUzMi41NjcgMzUuOTk5LDUyMS40ODUgMjQuMjk1LDUyMS40ODUgMjQuMjk1LDUzMi41NjcgMjEuNjcyLDUzMi41NjcgMjEuNjcyLDUwOS4wNTMgMjQuMjk1LDUwOS4wNTMgDQoJCQkyNC4yOTUsNTE5LjA5OCAzNS45OTksNTE5LjA5OCAzNS45OTksNTA5LjA1MyAzOC42MjMsNTA5LjA1MyAzOC42MjMsNTMyLjU2NyAJCSIvPg0KCQk8cmVjdCB4PSI0NS4zNzEiIHk9IjUwOS4wNTUiIHdpZHRoPSIyLjYyMyIgaGVpZ2h0PSIyMy41MTQiLz4NCgkJPHBvbHlnb24gcG9pbnRzPSI1Ny4zNzUsNTExLjQzOCA1Ny4zNzUsNTE5LjIzMyA2My44Myw1MTkuMjMzIDYzLjgzLDUyMS42MiA1Ny4zNzUsNTIxLjYyIDU3LjM3NSw1MzIuNTY3IDU0Ljc1LDUzMi41NjcgDQoJCQk1NC43NSw1MDkuMDUzIDY4LjU3Niw1MDkuMDUzIDY4LjU3Niw1MTEuNDM4IAkJIi8+DQoJCTxwb2x5Z29uIHBvaW50cz0iODIuODM0LDUxMS40MzggODIuODM0LDUzMi41NjcgODAuMjExLDUzMi41NjcgODAuMjExLDUxMS40MzggNzMuMjg1LDUxMS40MzggNzMuMjg1LDUwOS4wNTMgODkuNzY0LDUwOS4wNTMgDQoJCQk4OS43NjQsNTExLjQzOCAJCSIvPg0KCQk8cGF0aCBmaWxsPSIjQkMxQzI5IiBkPSJNLTE0Mi4zNDEsNTE4LjQ5OGwtNy44NzIsMi44NjFjMC4xMDMsMS4yNiwwLjMxOCwyLjUwNCwwLjYyMywzLjcyNWw3LjQ3My0yLjcyMw0KCQkJQy0xNDIuMzU3LDUyMS4xMDMtMTQyLjQ0Miw1MTkuODAzLTE0Mi4zNDEsNTE4LjQ5OCIvPg0KCQk8cGF0aCBmaWxsPSIjQkMxQzI5IiBkPSJNLTEwNy41NzEsNTA5LjgxYy0wLjU0OC0xLjEyOS0xLjE4MS0yLjIyNC0xLjkxOS0zLjI1NmwtNy44NjgsMi44NjFjMC45MTYsMC45MzgsMS42ODUsMS45ODcsMi4zMTIsMy4xMTMNCgkJCUwtMTA3LjU3MSw1MDkuODF6Ii8+DQoJCTxwYXRoIGZpbGw9IiNFMjI0MzQiIGQ9Ik0tMTI0Ljg4Miw1MDcuNTg2YzEuNjM2LDAuNzYzLDMuMDU3LDEuODAxLDQuMjUsMy4wMjNsNy44NjktMi44NjRjLTIuMTgyLTMuMDUyLTUuMTQ4LTUuNjA0LTguNzgyLTcuMjk3DQoJCQljLTExLjI0Ni01LjI0LTI0LjY2Ny0wLjM2NC0yOS45MDUsMTAuODdjLTEuNzAxLDMuNjMxLTIuMzMyLDcuNDk0LTIuMDM4LDExLjIzMWw3Ljg3MS0yLjg2YzAuMTI4LTEuNywwLjU0Ny0zLjQwNywxLjMxMS01LjA0NA0KCQkJQy0xNDAuOTAzLDUwNy4zNS0xMzIuMTg0LDUwNC4xODEtMTI0Ljg4Miw1MDcuNTg2Ii8+DQoJCTxwYXRoIGZpbGw9IiNFMjI0MzQiIGQ9Ik0tMTQ5LjA5OSw1MjQuOTA5bC03LjQ3NSwyLjcxN2MwLjY4OCwyLjcxOSwxLjg4LDUuMzA5LDMuNTE2LDcuNjA3bDcuODUzLTIuODUxDQoJCQlDLTE0Ny4yMjEsNTMwLjMxMS0xNDguNTY0LDUyNy43LTE0OS4wOTksNTI0LjkwOSIvPg0KCQk8cGF0aCBmaWxsPSIjRTIyNDM0IiBkPSJNLTExNi40OTEsNTIxLjk0NGMtMC4xMjYsMS42OTgtMC41NTEsMy40MDgtMS4zMTksNS4wNDVjLTMuNDA2LDcuMjk5LTEyLjEyMywxMC40NjctMTkuNDMxLDcuMDYyDQoJCQljLTEuNjM2LTAuNzY2LTMuMDY3LTEuNzk5LTQuMjU4LTMuMDJsLTcuODQ5LDIuODU0YzIuMTc1LDMuMDUzLDUuMTQxLDUuNjA0LDguNzc2LDcuMzAyYzExLjI0Niw1LjIzNywyNC42NjQsMC4zNiwyOS45MS0xMC44NzMNCgkJCWMxLjY5Ni0zLjYzMiwyLjMyMi03LjQ5MiwyLjAyNC0xMS4yMjhMLTExNi40OTEsNTIxLjk0NHoiLz4NCgkJPHBhdGggZmlsbD0iI0UyMjQzNCIgZD0iTS0xMTQuNTU1LDUxMi4zNDZsLTcuNDc1LDIuNzI0YzEuMzksMi40ODEsMi4wNDMsNS4zNDQsMS44MzMsOC4yMjFsNy44NS0yLjg1NA0KCQkJQy0xMTIuNTc0LDUxNy42MjItMTEzLjMyNSw1MTQuODc2LTExNC41NTUsNTEyLjM0NiIvPg0KCQk8cGF0aCBmaWxsPSIjOTcxMDFCIiBkPSJNLTE0Mi4zNzMsNTIwLjA3OGMtMC4wMTktMC41MjQtMC4wMTItMS4wNTEsMC4wMzItMS41OGwtNy44NzIsMi44NjFjMC4wMzgsMC41MDQsMC4xMDMsMS4wMDIsMC4xNzgsMS41DQoJCQlMLTE0Mi4zNzMsNTIwLjA3OHoiLz4NCgkJPHBhdGggZmlsbD0iIzk3MTAxQiIgZD0iTS0xMDguNzA3LDUwNy43NDFjLTAuMjUtMC40LTAuNTA3LTAuOC0wLjc4MS0xLjE4N2wtNy44NjYsMi44NjFjMC4zNDUsMC4zNTQsMC42NjYsMC43MzIsMC45NjksMS4xMTQNCgkJCUwtMTA4LjcwNyw1MDcuNzQxeiIvPg0KCQk8cGF0aCBmaWxsPSIjQkMxQzI5IiBkPSJNLTE0OS4zNDcsNTMzLjg4NmMwLjYwNCwwLjg0OSwxLjI3NCwxLjY2MywyLDIuNDI2bDguNTQ1LTMuMTEyYy0xLTAuNjI3LTEuOTAyLTEuMzUzLTIuNjk5LTIuMTY2DQoJCQlMLTE0OS4zNDcsNTMzLjg4NnogTS0xMDguNjM3LDUxOS4wODlsLTcuODU0LDIuODU2Yy0wLjA4MywxLjEyOS0wLjMwMywyLjI2LTAuNjY0LDMuMzcxbDguNTQyLTMuMTEzDQoJCQlDLTEwOC41NDcsNTIxLjE1OS0xMDguNTU5LDUyMC4xMTktMTA4LjYzNyw1MTkuMDg5Ii8+DQoJCTxwYXRoIGQ9Ik05Ni4xMjQsNTExLjAxYy0wLjA4MiwwLjE5OC0wLjE5NCwwLjM2OC0wLjMzOSwwLjUxMWMtMC4xNDcsMC4xMzktMC4zMTYsMC4yNS0wLjUxMiwwLjMyOA0KCQkJYy0wLjE5NywwLjA3OC0wLjQxLDAuMTE1LTAuNjQ2LDAuMTE1Yy0wLjIyNywwLTAuNDM5LTAuMDM4LTAuNjM3LTAuMTE1Yy0wLjE5Ni0wLjA3OS0wLjM2Ni0wLjE4OC0wLjUxNi0wLjMyOA0KCQkJYy0wLjE0MS0wLjE0My0wLjI1Ni0wLjMxMy0wLjMzNC0wLjUxMWMtMC4wODctMC4xOTctMC4xMjgtMC40MTctMC4xMjgtMC42NTljMC0wLjI0MSwwLjA0MS0wLjQ2MSwwLjEyOC0wLjY1Nw0KCQkJYzAuMDc4LTAuMiwwLjE5My0wLjM3LDAuMzM0LTAuNTExYzAuMTQ4LTAuMTQ0LDAuMzE4LTAuMjUsMC41MTYtMC4zMjljMC4xOTctMC4wNzcsMC40MTItMC4xMTYsMC42MzctMC4xMTYNCgkJCWMwLjIzNiwwLDAuNDQ5LDAuMDM5LDAuNjQ2LDAuMTE2YzAuMTk0LDAuMDc5LDAuMzYzLDAuMTg2LDAuNTEyLDAuMzI5YzAuMTQ1LDAuMTQxLDAuMjU3LDAuMzExLDAuMzM5LDAuNTExDQoJCQljMC4wODEsMC4xOTYsMC4xMjIsMC40MTcsMC4xMjIsMC42NTdDOTYuMjQ2LDUxMC41OTMsOTYuMjA1LDUxMC44MTMsOTYuMTI0LDUxMS4wMSBNOTUuOTIsNTA5Ljc4DQoJCQljLTAuMDczLTAuMTc1LTAuMTctMC4zMjMtMC4yOTYtMC40NDRjLTAuMTIyLTAuMTI2LTAuMjcxLTAuMjIyLTAuNDQyLTAuMjkyYy0wLjE2OS0wLjA2Ny0wLjM1NC0wLjEwNC0wLjU1NC0wLjEwNA0KCQkJYy0wLjE5MiwwLTAuMzc1LDAuMDM3LTAuNTQ4LDAuMTA0Yy0wLjE2OCwwLjA3LTAuMzE1LDAuMTY2LTAuNDM4LDAuMjkyYy0wLjEyNywwLjEyMS0wLjIyOCwwLjI2OS0wLjI5OCwwLjQ0NA0KCQkJYy0wLjA3MiwwLjE3My0wLjEwOSwwLjM2MS0wLjEwOSwwLjU3MWMwLDAuMjA3LDAuMDM3LDAuNCwwLjEwOSwwLjU3M2MwLjA3LDAuMTczLDAuMTcxLDAuMzIxLDAuMjk4LDAuNDQ1DQoJCQljMC4xMjQsMC4xMjMsMC4yNzIsMC4yMTcsMC40MzgsMC4yODZjMC4xNzQsMC4wNzIsMC4zNTQsMC4xMDQsMC41NDgsMC4xMDRjMC4xOTgsMCwwLjM4NS0wLjAzMywwLjU1NC0wLjEwNA0KCQkJYzAuMTcyLTAuMDY5LDAuMzIxLTAuMTY0LDAuNDQyLTAuMjg2YzAuMTI2LTAuMTI0LDAuMjI0LTAuMjcyLDAuMjk2LTAuNDQ1YzAuMDc0LTAuMTczLDAuMTA3LTAuMzY0LDAuMTA3LTAuNTczDQoJCQlDOTYuMDI5LDUxMC4xNDEsOTUuOTk0LDUwOS45NSw5NS45Miw1MDkuNzggTTk1LjIzNCw1MTAuMjc1Yy0wLjA3MiwwLjA4Ni0wLjE3MiwwLjE0My0wLjI5NywwLjE3NGwwLjM5OSwwLjc2M2gtMC4yNzgNCgkJCWwtMC4zODQtMC43NDZoLTAuMzg2djAuNzQ2aC0wLjIzNXYtMS43ODNoMC43MjRjMC4xNjQsMCwwLjI5NywwLjA0MywwLjQwNiwwLjEyNWMwLjExMiwwLjA4NSwwLjE2OCwwLjIxNCwwLjE2OCwwLjM4OA0KCQkJQzk1LjM0OCw1MTAuMDc2LDk1LjMwOSw1MTAuMTg4LDk1LjIzNCw1MTAuMjc1IE05NS4wMiw1MDkuNzE3Yy0wLjA1OC0wLjA1MS0wLjE0NS0wLjA3Ny0wLjI1OC0wLjA3N2gtMC40Nzd2MC42MDRoMC40NDcNCgkJCWMwLjI1MiwwLDAuMzc3LTAuMTAxLDAuMzc3LTAuMzAxQzk1LjExMSw1MDkuODQyLDk1LjA3OCw1MDkuNzY0LDk1LjAyLDUwOS43MTciLz4NCgk8L2c+DQo8L2c+DQo8ZyBpZD0iTGF5ZXJfMyIgZGlzcGxheT0ibm9uZSI+DQoJDQoJCTxpbWFnZSBkaXNwbGF5PSJpbmxpbmUiIG92ZXJmbG93PSJ2aXNpYmxlIiB3aWR0aD0iMjE3IiBoZWlnaHQ9Ijk2IiB4bGluazpocmVmPSIuLi9EZXNrdG9wL1NjcmVlbiBTaG90IDIwMTMtMTEtMTkgYXQgNC41MS4zNyBQTS5wbmciICB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIC0xNDUuMjI3NSA0MDUuMjkpIj4NCgk8L2ltYWdlPg0KPC9nPg0KPC9zdmc+DQo=); } .logo a { display: block; width: 100%; height: 100%; } *, *:before, *:after { -moz-box-sizing: border-box; box-sizing: border-box; } aside, footer, header, hgroup, section{ display: block; } body { color: #404040; font-family: "Helvetica Neue",Helvetica,"Liberation Sans",Arial,sans-serif; font-size: 14px; line-height: 1.4; } html { font-family: sans-serif; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; } ul { margin-top: 0; } .container { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px; } .container:before, .container:after { content: " "; /* 1 */ display: table; /* 2 */ } .container:after { clear: both; } .row { margin-left: -15px; margin-right: -15px; } .row:before, .row:after { content: " "; /* 1 */ display: table; /* 2 */ } .row:after { clear: both; } .col-sm-6, .col-md-6, .col-xs-12 { position: relative; min-height: 1px; padding-left: 15px; padding-right: 15px; } .col-xs-12 { width: 100%; } @media (min-width: 768px) { .container { width: 750px; } .col-sm-6 { float: left; } .col-sm-6 { width: 50%; } } @media (min-width: 992px) { .container { width: 970px; } .col-md-6 { float: left; } .col-md-6 { width: 50%; } } @media (min-width: 1200px) { .container { width: 1170px; } } a { color: #069; text-decoration: none; } a:hover { color: #EA0011; text-decoration: underline; } hgroup { margin-top: 50px; } footer { margin: 50px 0 25px; } h1, h2, h3 { color: #000; line-height: 1.38em; margin: 1.5em 0 .3em; } h1 { font-size: 25px; font-weight: 300; border-bottom: 1px solid #fff; margin-bottom: .5em; } h1:after { content: ""; display: block; width: 100%; height: 1px; background-color: #ddd; } h2 { font-size: 19px; font-weight: 400; } h3 { font-size: 15px; font-weight: 400; margin: 0 0 .3em; } p { margin: 0 0 2em; } p + h2 { margin-top: 2em; } html { background: #262626; height: 100%; } code { background-color: #262626; border: 1px solid #ccc; padding: 1px 5px; color: #888; } pre { display: block; padding: 13.333px 20px; margin: 0 0 20px; font-size: 13px; line-height: 1.4; background-color: #fff; border-left: 2px solid rgba(120,120,120,0.35); white-space: pre; white-space: pre-wrap; word-break: normal; word-wrap: break-word; overflow: auto; font-family: Menlo,Monaco,"Liberation Mono",Consolas,monospace !important; } ================================================ FILE: static/css/timeline.css ================================================ .timeline { position: relative; padding: 20px 0 20px; list-style: none; } .timeline:before { content: " "; position: absolute; top: 0; bottom: 0; left: 50%; width: 3px; margin-left: -1.5px; background-color: #eeeeee; } .timeline > li { position: relative; margin-bottom: 20px; } .timeline > li:before, .timeline > li:after { content: " "; display: table; } .timeline > li:after { clear: both; } .timeline > li:before, .timeline > li:after { content: " "; display: table; } .timeline > li:after { clear: both; } .timeline > li > .timeline-panel { float: left; position: relative; width: 46%; padding: 20px; border: 1px solid #d4d4d4; border-radius: 2px; -webkit-box-shadow: 0 1px 6px rgba(0,0,0,0.175); box-shadow: 0 1px 6px rgba(0,0,0,0.175); } .timeline > li > .timeline-panel:before { content: " "; display: inline-block; position: absolute; top: 26px; right: -15px; border-top: 15px solid transparent; border-right: 0 solid #ccc; border-bottom: 15px solid transparent; border-left: 15px solid #ccc; } .timeline > li > .timeline-panel:after { content: " "; display: inline-block; position: absolute; top: 27px; right: -14px; border-top: 14px solid transparent; border-right: 0 solid #fff; border-bottom: 14px solid transparent; border-left: 14px solid #fff; } .timeline > li > .timeline-badge { z-index: 100; position: absolute; top: 16px; left: 50%; width: 50px; height: 50px; margin-left: -25px; border-radius: 50% 50% 50% 50%; text-align: center; font-size: 1.4em; line-height: 50px; color: #fff; background-color: #999999; } .timeline > li.timeline-inverted > .timeline-panel { float: right; } .timeline > li.timeline-inverted > .timeline-panel:before { right: auto; left: -15px; border-right-width: 15px; border-left-width: 0; } .timeline > li.timeline-inverted > .timeline-panel:after { right: auto; left: -14px; border-right-width: 14px; border-left-width: 0; } .timeline-badge.primary { background-color: #2e6da4 !important; } .timeline-badge.success { background-color: #3f903f !important; } .timeline-badge.warning { background-color: #f0ad4e !important; } .timeline-badge.danger { background-color: #d9534f !important; } .timeline-badge.info { background-color: #5bc0de !important; } .timeline-title { margin-top: 0; color: inherit; } .timeline-body > p, .timeline-body > ul { margin-bottom: 0; } .timeline-body > p + p { margin-top: 5px; } @media(max-width:767px) { ul.timeline:before { left: 40px; } ul.timeline > li > .timeline-panel { width: calc(100% - 90px); width: -moz-calc(100% - 90px); width: -webkit-calc(100% - 90px); } ul.timeline > li > .timeline-badge { top: 16px; left: 15px; margin-left: 0; } ul.timeline > li > .timeline-panel { float: right; } ul.timeline > li > .timeline-panel:before { right: auto; left: -15px; border-right-width: 15px; border-left-width: 0; } ul.timeline > li > .timeline-panel:after { right: auto; left: -14px; border-right-width: 14px; border-left-width: 0; } } ================================================ FILE: static/css/util.css ================================================ /*[ FONT SIZE ] /////////////////////////////////////////////////////////// */ .fs-1 {font-size: 1px;} .fs-2 {font-size: 2px;} .fs-3 {font-size: 3px;} .fs-4 {font-size: 4px;} .fs-5 {font-size: 5px;} .fs-6 {font-size: 6px;} .fs-7 {font-size: 7px;} .fs-8 {font-size: 8px;} .fs-9 {font-size: 9px;} .fs-10 {font-size: 10px;} .fs-11 {font-size: 11px;} .fs-12 {font-size: 12px;} .fs-13 {font-size: 13px;} .fs-14 {font-size: 14px;} .fs-15 {font-size: 15px;} .fs-16 {font-size: 16px;} .fs-17 {font-size: 17px;} .fs-18 {font-size: 18px;} .fs-19 {font-size: 19px;} .fs-20 {font-size: 20px;} .fs-21 {font-size: 21px;} .fs-22 {font-size: 22px;} .fs-23 {font-size: 23px;} .fs-24 {font-size: 24px;} .fs-25 {font-size: 25px;} .fs-26 {font-size: 26px;} .fs-27 {font-size: 27px;} .fs-28 {font-size: 28px;} .fs-29 {font-size: 29px;} .fs-30 {font-size: 30px;} .fs-31 {font-size: 31px;} .fs-32 {font-size: 32px;} .fs-33 {font-size: 33px;} .fs-34 {font-size: 34px;} .fs-35 {font-size: 35px;} .fs-36 {font-size: 36px;} .fs-37 {font-size: 37px;} .fs-38 {font-size: 38px;} .fs-39 {font-size: 39px;} .fs-40 {font-size: 40px;} .fs-41 {font-size: 41px;} .fs-42 {font-size: 42px;} .fs-43 {font-size: 43px;} .fs-44 {font-size: 44px;} .fs-45 {font-size: 45px;} .fs-46 {font-size: 46px;} .fs-47 {font-size: 47px;} .fs-48 {font-size: 48px;} .fs-49 {font-size: 49px;} .fs-50 {font-size: 50px;} .fs-51 {font-size: 51px;} .fs-52 {font-size: 52px;} .fs-53 {font-size: 53px;} .fs-54 {font-size: 54px;} .fs-55 {font-size: 55px;} .fs-56 {font-size: 56px;} .fs-57 {font-size: 57px;} .fs-58 {font-size: 58px;} .fs-59 {font-size: 59px;} .fs-60 {font-size: 60px;} .fs-61 {font-size: 61px;} .fs-62 {font-size: 62px;} .fs-63 {font-size: 63px;} .fs-64 {font-size: 64px;} .fs-65 {font-size: 65px;} .fs-66 {font-size: 66px;} .fs-67 {font-size: 67px;} .fs-68 {font-size: 68px;} .fs-69 {font-size: 69px;} .fs-70 {font-size: 70px;} .fs-71 {font-size: 71px;} .fs-72 {font-size: 72px;} .fs-73 {font-size: 73px;} .fs-74 {font-size: 74px;} .fs-75 {font-size: 75px;} .fs-76 {font-size: 76px;} .fs-77 {font-size: 77px;} .fs-78 {font-size: 78px;} .fs-79 {font-size: 79px;} .fs-80 {font-size: 80px;} .fs-81 {font-size: 81px;} .fs-82 {font-size: 82px;} .fs-83 {font-size: 83px;} .fs-84 {font-size: 84px;} .fs-85 {font-size: 85px;} .fs-86 {font-size: 86px;} .fs-87 {font-size: 87px;} .fs-88 {font-size: 88px;} .fs-89 {font-size: 89px;} .fs-90 {font-size: 90px;} .fs-91 {font-size: 91px;} .fs-92 {font-size: 92px;} .fs-93 {font-size: 93px;} .fs-94 {font-size: 94px;} .fs-95 {font-size: 95px;} .fs-96 {font-size: 96px;} .fs-97 {font-size: 97px;} .fs-98 {font-size: 98px;} .fs-99 {font-size: 99px;} .fs-100 {font-size: 100px;} .fs-101 {font-size: 101px;} .fs-102 {font-size: 102px;} .fs-103 {font-size: 103px;} .fs-104 {font-size: 104px;} .fs-105 {font-size: 105px;} .fs-106 {font-size: 106px;} .fs-107 {font-size: 107px;} .fs-108 {font-size: 108px;} .fs-109 {font-size: 109px;} .fs-110 {font-size: 110px;} .fs-111 {font-size: 111px;} .fs-112 {font-size: 112px;} .fs-113 {font-size: 113px;} .fs-114 {font-size: 114px;} .fs-115 {font-size: 115px;} .fs-116 {font-size: 116px;} .fs-117 {font-size: 117px;} .fs-118 {font-size: 118px;} .fs-119 {font-size: 119px;} .fs-120 {font-size: 120px;} .fs-121 {font-size: 121px;} .fs-122 {font-size: 122px;} .fs-123 {font-size: 123px;} .fs-124 {font-size: 124px;} .fs-125 {font-size: 125px;} .fs-126 {font-size: 126px;} .fs-127 {font-size: 127px;} .fs-128 {font-size: 128px;} .fs-129 {font-size: 129px;} .fs-130 {font-size: 130px;} .fs-131 {font-size: 131px;} .fs-132 {font-size: 132px;} .fs-133 {font-size: 133px;} .fs-134 {font-size: 134px;} .fs-135 {font-size: 135px;} .fs-136 {font-size: 136px;} .fs-137 {font-size: 137px;} .fs-138 {font-size: 138px;} .fs-139 {font-size: 139px;} .fs-140 {font-size: 140px;} .fs-141 {font-size: 141px;} .fs-142 {font-size: 142px;} .fs-143 {font-size: 143px;} .fs-144 {font-size: 144px;} .fs-145 {font-size: 145px;} .fs-146 {font-size: 146px;} .fs-147 {font-size: 147px;} .fs-148 {font-size: 148px;} .fs-149 {font-size: 149px;} .fs-150 {font-size: 150px;} .fs-151 {font-size: 151px;} .fs-152 {font-size: 152px;} .fs-153 {font-size: 153px;} .fs-154 {font-size: 154px;} .fs-155 {font-size: 155px;} .fs-156 {font-size: 156px;} .fs-157 {font-size: 157px;} .fs-158 {font-size: 158px;} .fs-159 {font-size: 159px;} .fs-160 {font-size: 160px;} .fs-161 {font-size: 161px;} .fs-162 {font-size: 162px;} .fs-163 {font-size: 163px;} .fs-164 {font-size: 164px;} .fs-165 {font-size: 165px;} .fs-166 {font-size: 166px;} .fs-167 {font-size: 167px;} .fs-168 {font-size: 168px;} .fs-169 {font-size: 169px;} .fs-170 {font-size: 170px;} .fs-171 {font-size: 171px;} .fs-172 {font-size: 172px;} .fs-173 {font-size: 173px;} .fs-174 {font-size: 174px;} .fs-175 {font-size: 175px;} .fs-176 {font-size: 176px;} .fs-177 {font-size: 177px;} .fs-178 {font-size: 178px;} .fs-179 {font-size: 179px;} .fs-180 {font-size: 180px;} .fs-181 {font-size: 181px;} .fs-182 {font-size: 182px;} .fs-183 {font-size: 183px;} .fs-184 {font-size: 184px;} .fs-185 {font-size: 185px;} .fs-186 {font-size: 186px;} .fs-187 {font-size: 187px;} .fs-188 {font-size: 188px;} .fs-189 {font-size: 189px;} .fs-190 {font-size: 190px;} .fs-191 {font-size: 191px;} .fs-192 {font-size: 192px;} .fs-193 {font-size: 193px;} .fs-194 {font-size: 194px;} .fs-195 {font-size: 195px;} .fs-196 {font-size: 196px;} .fs-197 {font-size: 197px;} .fs-198 {font-size: 198px;} .fs-199 {font-size: 199px;} .fs-200 {font-size: 200px;} /*[ PADDING ] /////////////////////////////////////////////////////////// */ .p-t-0 {padding-top: 0px;} .p-t-1 {padding-top: 1px;} .p-t-2 {padding-top: 2px;} .p-t-3 {padding-top: 3px;} .p-t-4 {padding-top: 4px;} .p-t-5 {padding-top: 5px;} .p-t-6 {padding-top: 6px;} .p-t-7 {padding-top: 7px;} .p-t-8 {padding-top: 8px;} .p-t-9 {padding-top: 9px;} .p-t-10 {padding-top: 10px;} .p-t-11 {padding-top: 11px;} .p-t-12 {padding-top: 12px;} .p-t-13 {padding-top: 13px;} .p-t-14 {padding-top: 14px;} .p-t-15 {padding-top: 15px;} .p-t-16 {padding-top: 16px;} .p-t-17 {padding-top: 17px;} .p-t-18 {padding-top: 18px;} .p-t-19 {padding-top: 19px;} .p-t-20 {padding-top: 20px;} .p-t-21 {padding-top: 21px;} .p-t-22 {padding-top: 22px;} .p-t-23 {padding-top: 23px;} .p-t-24 {padding-top: 24px;} .p-t-25 {padding-top: 25px;} .p-t-26 {padding-top: 26px;} .p-t-27 {padding-top: 27px;} .p-t-28 {padding-top: 28px;} .p-t-29 {padding-top: 29px;} .p-t-30 {padding-top: 30px;} .p-t-31 {padding-top: 31px;} .p-t-32 {padding-top: 32px;} .p-t-33 {padding-top: 33px;} .p-t-34 {padding-top: 34px;} .p-t-35 {padding-top: 35px;} .p-t-36 {padding-top: 36px;} .p-t-37 {padding-top: 37px;} .p-t-38 {padding-top: 38px;} .p-t-39 {padding-top: 39px;} .p-t-40 {padding-top: 40px;} .p-t-41 {padding-top: 41px;} .p-t-42 {padding-top: 42px;} .p-t-43 {padding-top: 43px;} .p-t-44 {padding-top: 44px;} .p-t-45 {padding-top: 45px;} .p-t-46 {padding-top: 46px;} .p-t-47 {padding-top: 47px;} .p-t-48 {padding-top: 48px;} .p-t-49 {padding-top: 49px;} .p-t-50 {padding-top: 50px;} .p-t-51 {padding-top: 51px;} .p-t-52 {padding-top: 52px;} .p-t-53 {padding-top: 53px;} .p-t-54 {padding-top: 54px;} .p-t-55 {padding-top: 55px;} .p-t-56 {padding-top: 56px;} .p-t-57 {padding-top: 57px;} .p-t-58 {padding-top: 58px;} .p-t-59 {padding-top: 59px;} .p-t-60 {padding-top: 60px;} .p-t-61 {padding-top: 61px;} .p-t-62 {padding-top: 62px;} .p-t-63 {padding-top: 63px;} .p-t-64 {padding-top: 64px;} .p-t-65 {padding-top: 65px;} .p-t-66 {padding-top: 66px;} .p-t-67 {padding-top: 67px;} .p-t-68 {padding-top: 68px;} .p-t-69 {padding-top: 69px;} .p-t-70 {padding-top: 70px;} .p-t-71 {padding-top: 71px;} .p-t-72 {padding-top: 72px;} .p-t-73 {padding-top: 73px;} .p-t-74 {padding-top: 74px;} .p-t-75 {padding-top: 75px;} .p-t-76 {padding-top: 76px;} .p-t-77 {padding-top: 77px;} .p-t-78 {padding-top: 78px;} .p-t-79 {padding-top: 79px;} .p-t-80 {padding-top: 80px;} .p-t-81 {padding-top: 81px;} .p-t-82 {padding-top: 82px;} .p-t-83 {padding-top: 83px;} .p-t-84 {padding-top: 84px;} .p-t-85 {padding-top: 85px;} .p-t-86 {padding-top: 86px;} .p-t-87 {padding-top: 87px;} .p-t-88 {padding-top: 88px;} .p-t-89 {padding-top: 89px;} .p-t-90 {padding-top: 90px;} .p-t-91 {padding-top: 91px;} .p-t-92 {padding-top: 92px;} .p-t-93 {padding-top: 93px;} .p-t-94 {padding-top: 94px;} .p-t-95 {padding-top: 95px;} .p-t-96 {padding-top: 96px;} .p-t-97 {padding-top: 97px;} .p-t-98 {padding-top: 98px;} .p-t-99 {padding-top: 99px;} .p-t-100 {padding-top: 100px;} .p-t-101 {padding-top: 101px;} .p-t-102 {padding-top: 102px;} .p-t-103 {padding-top: 103px;} .p-t-104 {padding-top: 104px;} .p-t-105 {padding-top: 105px;} .p-t-106 {padding-top: 106px;} .p-t-107 {padding-top: 107px;} .p-t-108 {padding-top: 108px;} .p-t-109 {padding-top: 109px;} .p-t-110 {padding-top: 110px;} .p-t-111 {padding-top: 111px;} .p-t-112 {padding-top: 112px;} .p-t-113 {padding-top: 113px;} .p-t-114 {padding-top: 114px;} .p-t-115 {padding-top: 115px;} .p-t-116 {padding-top: 116px;} .p-t-117 {padding-top: 117px;} .p-t-118 {padding-top: 118px;} .p-t-119 {padding-top: 119px;} .p-t-120 {padding-top: 120px;} .p-t-121 {padding-top: 121px;} .p-t-122 {padding-top: 122px;} .p-t-123 {padding-top: 123px;} .p-t-124 {padding-top: 124px;} .p-t-125 {padding-top: 125px;} .p-t-126 {padding-top: 126px;} .p-t-127 {padding-top: 127px;} .p-t-128 {padding-top: 128px;} .p-t-129 {padding-top: 129px;} .p-t-130 {padding-top: 130px;} .p-t-131 {padding-top: 131px;} .p-t-132 {padding-top: 132px;} .p-t-133 {padding-top: 133px;} .p-t-134 {padding-top: 134px;} .p-t-135 {padding-top: 135px;} .p-t-136 {padding-top: 136px;} .p-t-137 {padding-top: 137px;} .p-t-138 {padding-top: 138px;} .p-t-139 {padding-top: 139px;} .p-t-140 {padding-top: 140px;} .p-t-141 {padding-top: 141px;} .p-t-142 {padding-top: 142px;} .p-t-143 {padding-top: 143px;} .p-t-144 {padding-top: 144px;} .p-t-145 {padding-top: 145px;} .p-t-146 {padding-top: 146px;} .p-t-147 {padding-top: 147px;} .p-t-148 {padding-top: 148px;} .p-t-149 {padding-top: 149px;} .p-t-150 {padding-top: 150px;} .p-t-151 {padding-top: 151px;} .p-t-152 {padding-top: 152px;} .p-t-153 {padding-top: 153px;} .p-t-154 {padding-top: 154px;} .p-t-155 {padding-top: 155px;} .p-t-156 {padding-top: 156px;} .p-t-157 {padding-top: 157px;} .p-t-158 {padding-top: 158px;} .p-t-159 {padding-top: 159px;} .p-t-160 {padding-top: 160px;} .p-t-161 {padding-top: 161px;} .p-t-162 {padding-top: 162px;} .p-t-163 {padding-top: 163px;} .p-t-164 {padding-top: 164px;} .p-t-165 {padding-top: 165px;} .p-t-166 {padding-top: 166px;} .p-t-167 {padding-top: 167px;} .p-t-168 {padding-top: 168px;} .p-t-169 {padding-top: 169px;} .p-t-170 {padding-top: 170px;} .p-t-171 {padding-top: 171px;} .p-t-172 {padding-top: 172px;} .p-t-173 {padding-top: 173px;} .p-t-174 {padding-top: 174px;} .p-t-175 {padding-top: 175px;} .p-t-176 {padding-top: 176px;} .p-t-177 {padding-top: 177px;} .p-t-178 {padding-top: 178px;} .p-t-179 {padding-top: 179px;} .p-t-180 {padding-top: 180px;} .p-t-181 {padding-top: 181px;} .p-t-182 {padding-top: 182px;} .p-t-183 {padding-top: 183px;} .p-t-184 {padding-top: 184px;} .p-t-185 {padding-top: 185px;} .p-t-186 {padding-top: 186px;} .p-t-187 {padding-top: 187px;} .p-t-188 {padding-top: 188px;} .p-t-189 {padding-top: 189px;} .p-t-190 {padding-top: 190px;} .p-t-191 {padding-top: 191px;} .p-t-192 {padding-top: 192px;} .p-t-193 {padding-top: 193px;} .p-t-194 {padding-top: 194px;} .p-t-195 {padding-top: 195px;} .p-t-196 {padding-top: 196px;} .p-t-197 {padding-top: 197px;} .p-t-198 {padding-top: 198px;} .p-t-199 {padding-top: 199px;} .p-t-200 {padding-top: 200px;} .p-t-201 {padding-top: 201px;} .p-t-202 {padding-top: 202px;} .p-t-203 {padding-top: 203px;} .p-t-204 {padding-top: 204px;} .p-t-205 {padding-top: 205px;} .p-t-206 {padding-top: 206px;} .p-t-207 {padding-top: 207px;} .p-t-208 {padding-top: 208px;} .p-t-209 {padding-top: 209px;} .p-t-210 {padding-top: 210px;} .p-t-211 {padding-top: 211px;} .p-t-212 {padding-top: 212px;} .p-t-213 {padding-top: 213px;} .p-t-214 {padding-top: 214px;} .p-t-215 {padding-top: 215px;} .p-t-216 {padding-top: 216px;} .p-t-217 {padding-top: 217px;} .p-t-218 {padding-top: 218px;} .p-t-219 {padding-top: 219px;} .p-t-220 {padding-top: 220px;} .p-t-221 {padding-top: 221px;} .p-t-222 {padding-top: 222px;} .p-t-223 {padding-top: 223px;} .p-t-224 {padding-top: 224px;} .p-t-225 {padding-top: 225px;} .p-t-226 {padding-top: 226px;} .p-t-227 {padding-top: 227px;} .p-t-228 {padding-top: 228px;} .p-t-229 {padding-top: 229px;} .p-t-230 {padding-top: 230px;} .p-t-231 {padding-top: 231px;} .p-t-232 {padding-top: 232px;} .p-t-233 {padding-top: 233px;} .p-t-234 {padding-top: 234px;} .p-t-235 {padding-top: 235px;} .p-t-236 {padding-top: 236px;} .p-t-237 {padding-top: 237px;} .p-t-238 {padding-top: 238px;} .p-t-239 {padding-top: 239px;} .p-t-240 {padding-top: 240px;} .p-t-241 {padding-top: 241px;} .p-t-242 {padding-top: 242px;} .p-t-243 {padding-top: 243px;} .p-t-244 {padding-top: 244px;} .p-t-245 {padding-top: 245px;} .p-t-246 {padding-top: 246px;} .p-t-247 {padding-top: 247px;} .p-t-248 {padding-top: 248px;} .p-t-249 {padding-top: 249px;} .p-t-250 {padding-top: 250px;} .p-b-0 {padding-bottom: 0px;} .p-b-1 {padding-bottom: 1px;} .p-b-2 {padding-bottom: 2px;} .p-b-3 {padding-bottom: 3px;} .p-b-4 {padding-bottom: 4px;} .p-b-5 {padding-bottom: 5px;} .p-b-6 {padding-bottom: 6px;} .p-b-7 {padding-bottom: 7px;} .p-b-8 {padding-bottom: 8px;} .p-b-9 {padding-bottom: 9px;} .p-b-10 {padding-bottom: 10px;} .p-b-11 {padding-bottom: 11px;} .p-b-12 {padding-bottom: 12px;} .p-b-13 {padding-bottom: 13px;} .p-b-14 {padding-bottom: 14px;} .p-b-15 {padding-bottom: 15px;} .p-b-16 {padding-bottom: 16px;} .p-b-17 {padding-bottom: 17px;} .p-b-18 {padding-bottom: 18px;} .p-b-19 {padding-bottom: 19px;} .p-b-20 {padding-bottom: 20px;} .p-b-21 {padding-bottom: 21px;} .p-b-22 {padding-bottom: 22px;} .p-b-23 {padding-bottom: 23px;} .p-b-24 {padding-bottom: 24px;} .p-b-25 {padding-bottom: 25px;} .p-b-26 {padding-bottom: 26px;} .p-b-27 {padding-bottom: 27px;} .p-b-28 {padding-bottom: 28px;} .p-b-29 {padding-bottom: 29px;} .p-b-30 {padding-bottom: 30px;} .p-b-31 {padding-bottom: 31px;} .p-b-32 {padding-bottom: 32px;} .p-b-33 {padding-bottom: 33px;} .p-b-34 {padding-bottom: 34px;} .p-b-35 {padding-bottom: 35px;} .p-b-36 {padding-bottom: 36px;} .p-b-37 {padding-bottom: 37px;} .p-b-38 {padding-bottom: 38px;} .p-b-39 {padding-bottom: 39px;} .p-b-40 {padding-bottom: 40px;} .p-b-41 {padding-bottom: 41px;} .p-b-42 {padding-bottom: 42px;} .p-b-43 {padding-bottom: 43px;} .p-b-44 {padding-bottom: 44px;} .p-b-45 {padding-bottom: 45px;} .p-b-46 {padding-bottom: 46px;} .p-b-47 {padding-bottom: 47px;} .p-b-48 {padding-bottom: 48px;} .p-b-49 {padding-bottom: 49px;} .p-b-50 {padding-bottom: 50px;} .p-b-51 {padding-bottom: 51px;} .p-b-52 {padding-bottom: 52px;} .p-b-53 {padding-bottom: 53px;} .p-b-54 {padding-bottom: 54px;} .p-b-55 {padding-bottom: 55px;} .p-b-56 {padding-bottom: 56px;} .p-b-57 {padding-bottom: 57px;} .p-b-58 {padding-bottom: 58px;} .p-b-59 {padding-bottom: 59px;} .p-b-60 {padding-bottom: 60px;} .p-b-61 {padding-bottom: 61px;} .p-b-62 {padding-bottom: 62px;} .p-b-63 {padding-bottom: 63px;} .p-b-64 {padding-bottom: 64px;} .p-b-65 {padding-bottom: 65px;} .p-b-66 {padding-bottom: 66px;} .p-b-67 {padding-bottom: 67px;} .p-b-68 {padding-bottom: 68px;} .p-b-69 {padding-bottom: 69px;} .p-b-70 {padding-bottom: 70px;} .p-b-71 {padding-bottom: 71px;} .p-b-72 {padding-bottom: 72px;} .p-b-73 {padding-bottom: 73px;} .p-b-74 {padding-bottom: 74px;} .p-b-75 {padding-bottom: 75px;} .p-b-76 {padding-bottom: 76px;} .p-b-77 {padding-bottom: 77px;} .p-b-78 {padding-bottom: 78px;} .p-b-79 {padding-bottom: 79px;} .p-b-80 {padding-bottom: 80px;} .p-b-81 {padding-bottom: 81px;} .p-b-82 {padding-bottom: 82px;} .p-b-83 {padding-bottom: 83px;} .p-b-84 {padding-bottom: 84px;} .p-b-85 {padding-bottom: 85px;} .p-b-86 {padding-bottom: 86px;} .p-b-87 {padding-bottom: 87px;} .p-b-88 {padding-bottom: 88px;} .p-b-89 {padding-bottom: 89px;} .p-b-90 {padding-bottom: 90px;} .p-b-91 {padding-bottom: 91px;} .p-b-92 {padding-bottom: 92px;} .p-b-93 {padding-bottom: 93px;} .p-b-94 {padding-bottom: 94px;} .p-b-95 {padding-bottom: 95px;} .p-b-96 {padding-bottom: 96px;} .p-b-97 {padding-bottom: 97px;} .p-b-98 {padding-bottom: 98px;} .p-b-99 {padding-bottom: 99px;} .p-b-100 {padding-bottom: 100px;} .p-b-101 {padding-bottom: 101px;} .p-b-102 {padding-bottom: 102px;} .p-b-103 {padding-bottom: 103px;} .p-b-104 {padding-bottom: 104px;} .p-b-105 {padding-bottom: 105px;} .p-b-106 {padding-bottom: 106px;} .p-b-107 {padding-bottom: 107px;} .p-b-108 {padding-bottom: 108px;} .p-b-109 {padding-bottom: 109px;} .p-b-110 {padding-bottom: 110px;} .p-b-111 {padding-bottom: 111px;} .p-b-112 {padding-bottom: 112px;} .p-b-113 {padding-bottom: 113px;} .p-b-114 {padding-bottom: 114px;} .p-b-115 {padding-bottom: 115px;} .p-b-116 {padding-bottom: 116px;} .p-b-117 {padding-bottom: 117px;} .p-b-118 {padding-bottom: 118px;} .p-b-119 {padding-bottom: 119px;} .p-b-120 {padding-bottom: 120px;} .p-b-121 {padding-bottom: 121px;} .p-b-122 {padding-bottom: 122px;} .p-b-123 {padding-bottom: 123px;} .p-b-124 {padding-bottom: 124px;} .p-b-125 {padding-bottom: 125px;} .p-b-126 {padding-bottom: 126px;} .p-b-127 {padding-bottom: 127px;} .p-b-128 {padding-bottom: 128px;} .p-b-129 {padding-bottom: 129px;} .p-b-130 {padding-bottom: 130px;} .p-b-131 {padding-bottom: 131px;} .p-b-132 {padding-bottom: 132px;} .p-b-133 {padding-bottom: 133px;} .p-b-134 {padding-bottom: 134px;} .p-b-135 {padding-bottom: 135px;} .p-b-136 {padding-bottom: 136px;} .p-b-137 {padding-bottom: 137px;} .p-b-138 {padding-bottom: 138px;} .p-b-139 {padding-bottom: 139px;} .p-b-140 {padding-bottom: 140px;} .p-b-141 {padding-bottom: 141px;} .p-b-142 {padding-bottom: 142px;} .p-b-143 {padding-bottom: 143px;} .p-b-144 {padding-bottom: 144px;} .p-b-145 {padding-bottom: 145px;} .p-b-146 {padding-bottom: 146px;} .p-b-147 {padding-bottom: 147px;} .p-b-148 {padding-bottom: 148px;} .p-b-149 {padding-bottom: 149px;} .p-b-150 {padding-bottom: 150px;} .p-b-151 {padding-bottom: 151px;} .p-b-152 {padding-bottom: 152px;} .p-b-153 {padding-bottom: 153px;} .p-b-154 {padding-bottom: 154px;} .p-b-155 {padding-bottom: 155px;} .p-b-156 {padding-bottom: 156px;} .p-b-157 {padding-bottom: 157px;} .p-b-158 {padding-bottom: 158px;} .p-b-159 {padding-bottom: 159px;} .p-b-160 {padding-bottom: 160px;} .p-b-161 {padding-bottom: 161px;} .p-b-162 {padding-bottom: 162px;} .p-b-163 {padding-bottom: 163px;} .p-b-164 {padding-bottom: 164px;} .p-b-165 {padding-bottom: 165px;} .p-b-166 {padding-bottom: 166px;} .p-b-167 {padding-bottom: 167px;} .p-b-168 {padding-bottom: 168px;} .p-b-169 {padding-bottom: 169px;} .p-b-170 {padding-bottom: 170px;} .p-b-171 {padding-bottom: 171px;} .p-b-172 {padding-bottom: 172px;} .p-b-173 {padding-bottom: 173px;} .p-b-174 {padding-bottom: 174px;} .p-b-175 {padding-bottom: 175px;} .p-b-176 {padding-bottom: 176px;} .p-b-177 {padding-bottom: 177px;} .p-b-178 {padding-bottom: 178px;} .p-b-179 {padding-bottom: 179px;} .p-b-180 {padding-bottom: 180px;} .p-b-181 {padding-bottom: 181px;} .p-b-182 {padding-bottom: 182px;} .p-b-183 {padding-bottom: 183px;} .p-b-184 {padding-bottom: 184px;} .p-b-185 {padding-bottom: 185px;} .p-b-186 {padding-bottom: 186px;} .p-b-187 {padding-bottom: 187px;} .p-b-188 {padding-bottom: 188px;} .p-b-189 {padding-bottom: 189px;} .p-b-190 {padding-bottom: 190px;} .p-b-191 {padding-bottom: 191px;} .p-b-192 {padding-bottom: 192px;} .p-b-193 {padding-bottom: 193px;} .p-b-194 {padding-bottom: 194px;} .p-b-195 {padding-bottom: 195px;} .p-b-196 {padding-bottom: 196px;} .p-b-197 {padding-bottom: 197px;} .p-b-198 {padding-bottom: 198px;} .p-b-199 {padding-bottom: 199px;} .p-b-200 {padding-bottom: 200px;} .p-b-201 {padding-bottom: 201px;} .p-b-202 {padding-bottom: 202px;} .p-b-203 {padding-bottom: 203px;} .p-b-204 {padding-bottom: 204px;} .p-b-205 {padding-bottom: 205px;} .p-b-206 {padding-bottom: 206px;} .p-b-207 {padding-bottom: 207px;} .p-b-208 {padding-bottom: 208px;} .p-b-209 {padding-bottom: 209px;} .p-b-210 {padding-bottom: 210px;} .p-b-211 {padding-bottom: 211px;} .p-b-212 {padding-bottom: 212px;} .p-b-213 {padding-bottom: 213px;} .p-b-214 {padding-bottom: 214px;} .p-b-215 {padding-bottom: 215px;} .p-b-216 {padding-bottom: 216px;} .p-b-217 {padding-bottom: 217px;} .p-b-218 {padding-bottom: 218px;} .p-b-219 {padding-bottom: 219px;} .p-b-220 {padding-bottom: 220px;} .p-b-221 {padding-bottom: 221px;} .p-b-222 {padding-bottom: 222px;} .p-b-223 {padding-bottom: 223px;} .p-b-224 {padding-bottom: 224px;} .p-b-225 {padding-bottom: 225px;} .p-b-226 {padding-bottom: 226px;} .p-b-227 {padding-bottom: 227px;} .p-b-228 {padding-bottom: 228px;} .p-b-229 {padding-bottom: 229px;} .p-b-230 {padding-bottom: 230px;} .p-b-231 {padding-bottom: 231px;} .p-b-232 {padding-bottom: 232px;} .p-b-233 {padding-bottom: 233px;} .p-b-234 {padding-bottom: 234px;} .p-b-235 {padding-bottom: 235px;} .p-b-236 {padding-bottom: 236px;} .p-b-237 {padding-bottom: 237px;} .p-b-238 {padding-bottom: 238px;} .p-b-239 {padding-bottom: 239px;} .p-b-240 {padding-bottom: 240px;} .p-b-241 {padding-bottom: 241px;} .p-b-242 {padding-bottom: 242px;} .p-b-243 {padding-bottom: 243px;} .p-b-244 {padding-bottom: 244px;} .p-b-245 {padding-bottom: 245px;} .p-b-246 {padding-bottom: 246px;} .p-b-247 {padding-bottom: 247px;} .p-b-248 {padding-bottom: 248px;} .p-b-249 {padding-bottom: 249px;} .p-b-250 {padding-bottom: 250px;} .p-l-0 {padding-left: 0px;} .p-l-1 {padding-left: 1px;} .p-l-2 {padding-left: 2px;} .p-l-3 {padding-left: 3px;} .p-l-4 {padding-left: 4px;} .p-l-5 {padding-left: 5px;} .p-l-6 {padding-left: 6px;} .p-l-7 {padding-left: 7px;} .p-l-8 {padding-left: 8px;} .p-l-9 {padding-left: 9px;} .p-l-10 {padding-left: 10px;} .p-l-11 {padding-left: 11px;} .p-l-12 {padding-left: 12px;} .p-l-13 {padding-left: 13px;} .p-l-14 {padding-left: 14px;} .p-l-15 {padding-left: 15px;} .p-l-16 {padding-left: 16px;} .p-l-17 {padding-left: 17px;} .p-l-18 {padding-left: 18px;} .p-l-19 {padding-left: 19px;} .p-l-20 {padding-left: 20px;} .p-l-21 {padding-left: 21px;} .p-l-22 {padding-left: 22px;} .p-l-23 {padding-left: 23px;} .p-l-24 {padding-left: 24px;} .p-l-25 {padding-left: 25px;} .p-l-26 {padding-left: 26px;} .p-l-27 {padding-left: 27px;} .p-l-28 {padding-left: 28px;} .p-l-29 {padding-left: 29px;} .p-l-30 {padding-left: 30px;} .p-l-31 {padding-left: 31px;} .p-l-32 {padding-left: 32px;} .p-l-33 {padding-left: 33px;} .p-l-34 {padding-left: 34px;} .p-l-35 {padding-left: 35px;} .p-l-36 {padding-left: 36px;} .p-l-37 {padding-left: 37px;} .p-l-38 {padding-left: 38px;} .p-l-39 {padding-left: 39px;} .p-l-40 {padding-left: 40px;} .p-l-41 {padding-left: 41px;} .p-l-42 {padding-left: 42px;} .p-l-43 {padding-left: 43px;} .p-l-44 {padding-left: 44px;} .p-l-45 {padding-left: 45px;} .p-l-46 {padding-left: 46px;} .p-l-47 {padding-left: 47px;} .p-l-48 {padding-left: 48px;} .p-l-49 {padding-left: 49px;} .p-l-50 {padding-left: 50px;} .p-l-51 {padding-left: 51px;} .p-l-52 {padding-left: 52px;} .p-l-53 {padding-left: 53px;} .p-l-54 {padding-left: 54px;} .p-l-55 {padding-left: 55px;} .p-l-56 {padding-left: 56px;} .p-l-57 {padding-left: 57px;} .p-l-58 {padding-left: 58px;} .p-l-59 {padding-left: 59px;} .p-l-60 {padding-left: 60px;} .p-l-61 {padding-left: 61px;} .p-l-62 {padding-left: 62px;} .p-l-63 {padding-left: 63px;} .p-l-64 {padding-left: 64px;} .p-l-65 {padding-left: 65px;} .p-l-66 {padding-left: 66px;} .p-l-67 {padding-left: 67px;} .p-l-68 {padding-left: 68px;} .p-l-69 {padding-left: 69px;} .p-l-70 {padding-left: 70px;} .p-l-71 {padding-left: 71px;} .p-l-72 {padding-left: 72px;} .p-l-73 {padding-left: 73px;} .p-l-74 {padding-left: 74px;} .p-l-75 {padding-left: 75px;} .p-l-76 {padding-left: 76px;} .p-l-77 {padding-left: 77px;} .p-l-78 {padding-left: 78px;} .p-l-79 {padding-left: 79px;} .p-l-80 {padding-left: 80px;} .p-l-81 {padding-left: 81px;} .p-l-82 {padding-left: 82px;} .p-l-83 {padding-left: 83px;} .p-l-84 {padding-left: 84px;} .p-l-85 {padding-left: 85px;} .p-l-86 {padding-left: 86px;} .p-l-87 {padding-left: 87px;} .p-l-88 {padding-left: 88px;} .p-l-89 {padding-left: 89px;} .p-l-90 {padding-left: 90px;} .p-l-91 {padding-left: 91px;} .p-l-92 {padding-left: 92px;} .p-l-93 {padding-left: 93px;} .p-l-94 {padding-left: 94px;} .p-l-95 {padding-left: 95px;} .p-l-96 {padding-left: 96px;} .p-l-97 {padding-left: 97px;} .p-l-98 {padding-left: 98px;} .p-l-99 {padding-left: 99px;} .p-l-100 {padding-left: 100px;} .p-l-101 {padding-left: 101px;} .p-l-102 {padding-left: 102px;} .p-l-103 {padding-left: 103px;} .p-l-104 {padding-left: 104px;} .p-l-105 {padding-left: 105px;} .p-l-106 {padding-left: 106px;} .p-l-107 {padding-left: 107px;} .p-l-108 {padding-left: 108px;} .p-l-109 {padding-left: 109px;} .p-l-110 {padding-left: 110px;} .p-l-111 {padding-left: 111px;} .p-l-112 {padding-left: 112px;} .p-l-113 {padding-left: 113px;} .p-l-114 {padding-left: 114px;} .p-l-115 {padding-left: 115px;} .p-l-116 {padding-left: 116px;} .p-l-117 {padding-left: 117px;} .p-l-118 {padding-left: 118px;} .p-l-119 {padding-left: 119px;} .p-l-120 {padding-left: 120px;} .p-l-121 {padding-left: 121px;} .p-l-122 {padding-left: 122px;} .p-l-123 {padding-left: 123px;} .p-l-124 {padding-left: 124px;} .p-l-125 {padding-left: 125px;} .p-l-126 {padding-left: 126px;} .p-l-127 {padding-left: 127px;} .p-l-128 {padding-left: 128px;} .p-l-129 {padding-left: 129px;} .p-l-130 {padding-left: 130px;} .p-l-131 {padding-left: 131px;} .p-l-132 {padding-left: 132px;} .p-l-133 {padding-left: 133px;} .p-l-134 {padding-left: 134px;} .p-l-135 {padding-left: 135px;} .p-l-136 {padding-left: 136px;} .p-l-137 {padding-left: 137px;} .p-l-138 {padding-left: 138px;} .p-l-139 {padding-left: 139px;} .p-l-140 {padding-left: 140px;} .p-l-141 {padding-left: 141px;} .p-l-142 {padding-left: 142px;} .p-l-143 {padding-left: 143px;} .p-l-144 {padding-left: 144px;} .p-l-145 {padding-left: 145px;} .p-l-146 {padding-left: 146px;} .p-l-147 {padding-left: 147px;} .p-l-148 {padding-left: 148px;} .p-l-149 {padding-left: 149px;} .p-l-150 {padding-left: 150px;} .p-l-151 {padding-left: 151px;} .p-l-152 {padding-left: 152px;} .p-l-153 {padding-left: 153px;} .p-l-154 {padding-left: 154px;} .p-l-155 {padding-left: 155px;} .p-l-156 {padding-left: 156px;} .p-l-157 {padding-left: 157px;} .p-l-158 {padding-left: 158px;} .p-l-159 {padding-left: 159px;} .p-l-160 {padding-left: 160px;} .p-l-161 {padding-left: 161px;} .p-l-162 {padding-left: 162px;} .p-l-163 {padding-left: 163px;} .p-l-164 {padding-left: 164px;} .p-l-165 {padding-left: 165px;} .p-l-166 {padding-left: 166px;} .p-l-167 {padding-left: 167px;} .p-l-168 {padding-left: 168px;} .p-l-169 {padding-left: 169px;} .p-l-170 {padding-left: 170px;} .p-l-171 {padding-left: 171px;} .p-l-172 {padding-left: 172px;} .p-l-173 {padding-left: 173px;} .p-l-174 {padding-left: 174px;} .p-l-175 {padding-left: 175px;} .p-l-176 {padding-left: 176px;} .p-l-177 {padding-left: 177px;} .p-l-178 {padding-left: 178px;} .p-l-179 {padding-left: 179px;} .p-l-180 {padding-left: 180px;} .p-l-181 {padding-left: 181px;} .p-l-182 {padding-left: 182px;} .p-l-183 {padding-left: 183px;} .p-l-184 {padding-left: 184px;} .p-l-185 {padding-left: 185px;} .p-l-186 {padding-left: 186px;} .p-l-187 {padding-left: 187px;} .p-l-188 {padding-left: 188px;} .p-l-189 {padding-left: 189px;} .p-l-190 {padding-left: 190px;} .p-l-191 {padding-left: 191px;} .p-l-192 {padding-left: 192px;} .p-l-193 {padding-left: 193px;} .p-l-194 {padding-left: 194px;} .p-l-195 {padding-left: 195px;} .p-l-196 {padding-left: 196px;} .p-l-197 {padding-left: 197px;} .p-l-198 {padding-left: 198px;} .p-l-199 {padding-left: 199px;} .p-l-200 {padding-left: 200px;} .p-l-201 {padding-left: 201px;} .p-l-202 {padding-left: 202px;} .p-l-203 {padding-left: 203px;} .p-l-204 {padding-left: 204px;} .p-l-205 {padding-left: 205px;} .p-l-206 {padding-left: 206px;} .p-l-207 {padding-left: 207px;} .p-l-208 {padding-left: 208px;} .p-l-209 {padding-left: 209px;} .p-l-210 {padding-left: 210px;} .p-l-211 {padding-left: 211px;} .p-l-212 {padding-left: 212px;} .p-l-213 {padding-left: 213px;} .p-l-214 {padding-left: 214px;} .p-l-215 {padding-left: 215px;} .p-l-216 {padding-left: 216px;} .p-l-217 {padding-left: 217px;} .p-l-218 {padding-left: 218px;} .p-l-219 {padding-left: 219px;} .p-l-220 {padding-left: 220px;} .p-l-221 {padding-left: 221px;} .p-l-222 {padding-left: 222px;} .p-l-223 {padding-left: 223px;} .p-l-224 {padding-left: 224px;} .p-l-225 {padding-left: 225px;} .p-l-226 {padding-left: 226px;} .p-l-227 {padding-left: 227px;} .p-l-228 {padding-left: 228px;} .p-l-229 {padding-left: 229px;} .p-l-230 {padding-left: 230px;} .p-l-231 {padding-left: 231px;} .p-l-232 {padding-left: 232px;} .p-l-233 {padding-left: 233px;} .p-l-234 {padding-left: 234px;} .p-l-235 {padding-left: 235px;} .p-l-236 {padding-left: 236px;} .p-l-237 {padding-left: 237px;} .p-l-238 {padding-left: 238px;} .p-l-239 {padding-left: 239px;} .p-l-240 {padding-left: 240px;} .p-l-241 {padding-left: 241px;} .p-l-242 {padding-left: 242px;} .p-l-243 {padding-left: 243px;} .p-l-244 {padding-left: 244px;} .p-l-245 {padding-left: 245px;} .p-l-246 {padding-left: 246px;} .p-l-247 {padding-left: 247px;} .p-l-248 {padding-left: 248px;} .p-l-249 {padding-left: 249px;} .p-l-250 {padding-left: 250px;} .p-r-0 {padding-right: 0px;} .p-r-1 {padding-right: 1px;} .p-r-2 {padding-right: 2px;} .p-r-3 {padding-right: 3px;} .p-r-4 {padding-right: 4px;} .p-r-5 {padding-right: 5px;} .p-r-6 {padding-right: 6px;} .p-r-7 {padding-right: 7px;} .p-r-8 {padding-right: 8px;} .p-r-9 {padding-right: 9px;} .p-r-10 {padding-right: 10px;} .p-r-11 {padding-right: 11px;} .p-r-12 {padding-right: 12px;} .p-r-13 {padding-right: 13px;} .p-r-14 {padding-right: 14px;} .p-r-15 {padding-right: 15px;} .p-r-16 {padding-right: 16px;} .p-r-17 {padding-right: 17px;} .p-r-18 {padding-right: 18px;} .p-r-19 {padding-right: 19px;} .p-r-20 {padding-right: 20px;} .p-r-21 {padding-right: 21px;} .p-r-22 {padding-right: 22px;} .p-r-23 {padding-right: 23px;} .p-r-24 {padding-right: 24px;} .p-r-25 {padding-right: 25px;} .p-r-26 {padding-right: 26px;} .p-r-27 {padding-right: 27px;} .p-r-28 {padding-right: 28px;} .p-r-29 {padding-right: 29px;} .p-r-30 {padding-right: 30px;} .p-r-31 {padding-right: 31px;} .p-r-32 {padding-right: 32px;} .p-r-33 {padding-right: 33px;} .p-r-34 {padding-right: 34px;} .p-r-35 {padding-right: 35px;} .p-r-36 {padding-right: 36px;} .p-r-37 {padding-right: 37px;} .p-r-38 {padding-right: 38px;} .p-r-39 {padding-right: 39px;} .p-r-40 {padding-right: 40px;} .p-r-41 {padding-right: 41px;} .p-r-42 {padding-right: 42px;} .p-r-43 {padding-right: 43px;} .p-r-44 {padding-right: 44px;} .p-r-45 {padding-right: 45px;} .p-r-46 {padding-right: 46px;} .p-r-47 {padding-right: 47px;} .p-r-48 {padding-right: 48px;} .p-r-49 {padding-right: 49px;} .p-r-50 {padding-right: 50px;} .p-r-51 {padding-right: 51px;} .p-r-52 {padding-right: 52px;} .p-r-53 {padding-right: 53px;} .p-r-54 {padding-right: 54px;} .p-r-55 {padding-right: 55px;} .p-r-56 {padding-right: 56px;} .p-r-57 {padding-right: 57px;} .p-r-58 {padding-right: 58px;} .p-r-59 {padding-right: 59px;} .p-r-60 {padding-right: 60px;} .p-r-61 {padding-right: 61px;} .p-r-62 {padding-right: 62px;} .p-r-63 {padding-right: 63px;} .p-r-64 {padding-right: 64px;} .p-r-65 {padding-right: 65px;} .p-r-66 {padding-right: 66px;} .p-r-67 {padding-right: 67px;} .p-r-68 {padding-right: 68px;} .p-r-69 {padding-right: 69px;} .p-r-70 {padding-right: 70px;} .p-r-71 {padding-right: 71px;} .p-r-72 {padding-right: 72px;} .p-r-73 {padding-right: 73px;} .p-r-74 {padding-right: 74px;} .p-r-75 {padding-right: 75px;} .p-r-76 {padding-right: 76px;} .p-r-77 {padding-right: 77px;} .p-r-78 {padding-right: 78px;} .p-r-79 {padding-right: 79px;} .p-r-80 {padding-right: 80px;} .p-r-81 {padding-right: 81px;} .p-r-82 {padding-right: 82px;} .p-r-83 {padding-right: 83px;} .p-r-84 {padding-right: 84px;} .p-r-85 {padding-right: 85px;} .p-r-86 {padding-right: 86px;} .p-r-87 {padding-right: 87px;} .p-r-88 {padding-right: 88px;} .p-r-89 {padding-right: 89px;} .p-r-90 {padding-right: 90px;} .p-r-91 {padding-right: 91px;} .p-r-92 {padding-right: 92px;} .p-r-93 {padding-right: 93px;} .p-r-94 {padding-right: 94px;} .p-r-95 {padding-right: 95px;} .p-r-96 {padding-right: 96px;} .p-r-97 {padding-right: 97px;} .p-r-98 {padding-right: 98px;} .p-r-99 {padding-right: 99px;} .p-r-100 {padding-right: 100px;} .p-r-101 {padding-right: 101px;} .p-r-102 {padding-right: 102px;} .p-r-103 {padding-right: 103px;} .p-r-104 {padding-right: 104px;} .p-r-105 {padding-right: 105px;} .p-r-106 {padding-right: 106px;} .p-r-107 {padding-right: 107px;} .p-r-108 {padding-right: 108px;} .p-r-109 {padding-right: 109px;} .p-r-110 {padding-right: 110px;} .p-r-111 {padding-right: 111px;} .p-r-112 {padding-right: 112px;} .p-r-113 {padding-right: 113px;} .p-r-114 {padding-right: 114px;} .p-r-115 {padding-right: 115px;} .p-r-116 {padding-right: 116px;} .p-r-117 {padding-right: 117px;} .p-r-118 {padding-right: 118px;} .p-r-119 {padding-right: 119px;} .p-r-120 {padding-right: 120px;} .p-r-121 {padding-right: 121px;} .p-r-122 {padding-right: 122px;} .p-r-123 {padding-right: 123px;} .p-r-124 {padding-right: 124px;} .p-r-125 {padding-right: 125px;} .p-r-126 {padding-right: 126px;} .p-r-127 {padding-right: 127px;} .p-r-128 {padding-right: 128px;} .p-r-129 {padding-right: 129px;} .p-r-130 {padding-right: 130px;} .p-r-131 {padding-right: 131px;} .p-r-132 {padding-right: 132px;} .p-r-133 {padding-right: 133px;} .p-r-134 {padding-right: 134px;} .p-r-135 {padding-right: 135px;} .p-r-136 {padding-right: 136px;} .p-r-137 {padding-right: 137px;} .p-r-138 {padding-right: 138px;} .p-r-139 {padding-right: 139px;} .p-r-140 {padding-right: 140px;} .p-r-141 {padding-right: 141px;} .p-r-142 {padding-right: 142px;} .p-r-143 {padding-right: 143px;} .p-r-144 {padding-right: 144px;} .p-r-145 {padding-right: 145px;} .p-r-146 {padding-right: 146px;} .p-r-147 {padding-right: 147px;} .p-r-148 {padding-right: 148px;} .p-r-149 {padding-right: 149px;} .p-r-150 {padding-right: 150px;} .p-r-151 {padding-right: 151px;} .p-r-152 {padding-right: 152px;} .p-r-153 {padding-right: 153px;} .p-r-154 {padding-right: 154px;} .p-r-155 {padding-right: 155px;} .p-r-156 {padding-right: 156px;} .p-r-157 {padding-right: 157px;} .p-r-158 {padding-right: 158px;} .p-r-159 {padding-right: 159px;} .p-r-160 {padding-right: 160px;} .p-r-161 {padding-right: 161px;} .p-r-162 {padding-right: 162px;} .p-r-163 {padding-right: 163px;} .p-r-164 {padding-right: 164px;} .p-r-165 {padding-right: 165px;} .p-r-166 {padding-right: 166px;} .p-r-167 {padding-right: 167px;} .p-r-168 {padding-right: 168px;} .p-r-169 {padding-right: 169px;} .p-r-170 {padding-right: 170px;} .p-r-171 {padding-right: 171px;} .p-r-172 {padding-right: 172px;} .p-r-173 {padding-right: 173px;} .p-r-174 {padding-right: 174px;} .p-r-175 {padding-right: 175px;} .p-r-176 {padding-right: 176px;} .p-r-177 {padding-right: 177px;} .p-r-178 {padding-right: 178px;} .p-r-179 {padding-right: 179px;} .p-r-180 {padding-right: 180px;} .p-r-181 {padding-right: 181px;} .p-r-182 {padding-right: 182px;} .p-r-183 {padding-right: 183px;} .p-r-184 {padding-right: 184px;} .p-r-185 {padding-right: 185px;} .p-r-186 {padding-right: 186px;} .p-r-187 {padding-right: 187px;} .p-r-188 {padding-right: 188px;} .p-r-189 {padding-right: 189px;} .p-r-190 {padding-right: 190px;} .p-r-191 {padding-right: 191px;} .p-r-192 {padding-right: 192px;} .p-r-193 {padding-right: 193px;} .p-r-194 {padding-right: 194px;} .p-r-195 {padding-right: 195px;} .p-r-196 {padding-right: 196px;} .p-r-197 {padding-right: 197px;} .p-r-198 {padding-right: 198px;} .p-r-199 {padding-right: 199px;} .p-r-200 {padding-right: 200px;} .p-r-201 {padding-right: 201px;} .p-r-202 {padding-right: 202px;} .p-r-203 {padding-right: 203px;} .p-r-204 {padding-right: 204px;} .p-r-205 {padding-right: 205px;} .p-r-206 {padding-right: 206px;} .p-r-207 {padding-right: 207px;} .p-r-208 {padding-right: 208px;} .p-r-209 {padding-right: 209px;} .p-r-210 {padding-right: 210px;} .p-r-211 {padding-right: 211px;} .p-r-212 {padding-right: 212px;} .p-r-213 {padding-right: 213px;} .p-r-214 {padding-right: 214px;} .p-r-215 {padding-right: 215px;} .p-r-216 {padding-right: 216px;} .p-r-217 {padding-right: 217px;} .p-r-218 {padding-right: 218px;} .p-r-219 {padding-right: 219px;} .p-r-220 {padding-right: 220px;} .p-r-221 {padding-right: 221px;} .p-r-222 {padding-right: 222px;} .p-r-223 {padding-right: 223px;} .p-r-224 {padding-right: 224px;} .p-r-225 {padding-right: 225px;} .p-r-226 {padding-right: 226px;} .p-r-227 {padding-right: 227px;} .p-r-228 {padding-right: 228px;} .p-r-229 {padding-right: 229px;} .p-r-230 {padding-right: 230px;} .p-r-231 {padding-right: 231px;} .p-r-232 {padding-right: 232px;} .p-r-233 {padding-right: 233px;} .p-r-234 {padding-right: 234px;} .p-r-235 {padding-right: 235px;} .p-r-236 {padding-right: 236px;} .p-r-237 {padding-right: 237px;} .p-r-238 {padding-right: 238px;} .p-r-239 {padding-right: 239px;} .p-r-240 {padding-right: 240px;} .p-r-241 {padding-right: 241px;} .p-r-242 {padding-right: 242px;} .p-r-243 {padding-right: 243px;} .p-r-244 {padding-right: 244px;} .p-r-245 {padding-right: 245px;} .p-r-246 {padding-right: 246px;} .p-r-247 {padding-right: 247px;} .p-r-248 {padding-right: 248px;} .p-r-249 {padding-right: 249px;} .p-r-250 {padding-right: 250px;} /*[ MARGIN ] /////////////////////////////////////////////////////////// */ .m-t-0 {margin-top: 0px;} .m-t-1 {margin-top: 1px;} .m-t-2 {margin-top: 2px;} .m-t-3 {margin-top: 3px;} .m-t-4 {margin-top: 4px;} .m-t-5 {margin-top: 5px;} .m-t-6 {margin-top: 6px;} .m-t-7 {margin-top: 7px;} .m-t-8 {margin-top: 8px;} .m-t-9 {margin-top: 9px;} .m-t-10 {margin-top: 10px;} .m-t-11 {margin-top: 11px;} .m-t-12 {margin-top: 12px;} .m-t-13 {margin-top: 13px;} .m-t-14 {margin-top: 14px;} .m-t-15 {margin-top: 15px;} .m-t-16 {margin-top: 16px;} .m-t-17 {margin-top: 17px;} .m-t-18 {margin-top: 18px;} .m-t-19 {margin-top: 19px;} .m-t-20 {margin-top: 20px;} .m-t-21 {margin-top: 21px;} .m-t-22 {margin-top: 22px;} .m-t-23 {margin-top: 23px;} .m-t-24 {margin-top: 24px;} .m-t-25 {margin-top: 25px;} .m-t-26 {margin-top: 26px;} .m-t-27 {margin-top: 27px;} .m-t-28 {margin-top: 28px;} .m-t-29 {margin-top: 29px;} .m-t-30 {margin-top: 30px;} .m-t-31 {margin-top: 31px;} .m-t-32 {margin-top: 32px;} .m-t-33 {margin-top: 33px;} .m-t-34 {margin-top: 34px;} .m-t-35 {margin-top: 35px;} .m-t-36 {margin-top: 36px;} .m-t-37 {margin-top: 37px;} .m-t-38 {margin-top: 38px;} .m-t-39 {margin-top: 39px;} .m-t-40 {margin-top: 40px;} .m-t-41 {margin-top: 41px;} .m-t-42 {margin-top: 42px;} .m-t-43 {margin-top: 43px;} .m-t-44 {margin-top: 44px;} .m-t-45 {margin-top: 45px;} .m-t-46 {margin-top: 46px;} .m-t-47 {margin-top: 47px;} .m-t-48 {margin-top: 48px;} .m-t-49 {margin-top: 49px;} .m-t-50 {margin-top: 50px;} .m-t-51 {margin-top: 51px;} .m-t-52 {margin-top: 52px;} .m-t-53 {margin-top: 53px;} .m-t-54 {margin-top: 54px;} .m-t-55 {margin-top: 55px;} .m-t-56 {margin-top: 56px;} .m-t-57 {margin-top: 57px;} .m-t-58 {margin-top: 58px;} .m-t-59 {margin-top: 59px;} .m-t-60 {margin-top: 60px;} .m-t-61 {margin-top: 61px;} .m-t-62 {margin-top: 62px;} .m-t-63 {margin-top: 63px;} .m-t-64 {margin-top: 64px;} .m-t-65 {margin-top: 65px;} .m-t-66 {margin-top: 66px;} .m-t-67 {margin-top: 67px;} .m-t-68 {margin-top: 68px;} .m-t-69 {margin-top: 69px;} .m-t-70 {margin-top: 70px;} .m-t-71 {margin-top: 71px;} .m-t-72 {margin-top: 72px;} .m-t-73 {margin-top: 73px;} .m-t-74 {margin-top: 74px;} .m-t-75 {margin-top: 75px;} .m-t-76 {margin-top: 76px;} .m-t-77 {margin-top: 77px;} .m-t-78 {margin-top: 78px;} .m-t-79 {margin-top: 79px;} .m-t-80 {margin-top: 80px;} .m-t-81 {margin-top: 81px;} .m-t-82 {margin-top: 82px;} .m-t-83 {margin-top: 83px;} .m-t-84 {margin-top: 84px;} .m-t-85 {margin-top: 85px;} .m-t-86 {margin-top: 86px;} .m-t-87 {margin-top: 87px;} .m-t-88 {margin-top: 88px;} .m-t-89 {margin-top: 89px;} .m-t-90 {margin-top: 90px;} .m-t-91 {margin-top: 91px;} .m-t-92 {margin-top: 92px;} .m-t-93 {margin-top: 93px;} .m-t-94 {margin-top: 94px;} .m-t-95 {margin-top: 95px;} .m-t-96 {margin-top: 96px;} .m-t-97 {margin-top: 97px;} .m-t-98 {margin-top: 98px;} .m-t-99 {margin-top: 99px;} .m-t-100 {margin-top: 100px;} .m-t-101 {margin-top: 101px;} .m-t-102 {margin-top: 102px;} .m-t-103 {margin-top: 103px;} .m-t-104 {margin-top: 104px;} .m-t-105 {margin-top: 105px;} .m-t-106 {margin-top: 106px;} .m-t-107 {margin-top: 107px;} .m-t-108 {margin-top: 108px;} .m-t-109 {margin-top: 109px;} .m-t-110 {margin-top: 110px;} .m-t-111 {margin-top: 111px;} .m-t-112 {margin-top: 112px;} .m-t-113 {margin-top: 113px;} .m-t-114 {margin-top: 114px;} .m-t-115 {margin-top: 115px;} .m-t-116 {margin-top: 116px;} .m-t-117 {margin-top: 117px;} .m-t-118 {margin-top: 118px;} .m-t-119 {margin-top: 119px;} .m-t-120 {margin-top: 120px;} .m-t-121 {margin-top: 121px;} .m-t-122 {margin-top: 122px;} .m-t-123 {margin-top: 123px;} .m-t-124 {margin-top: 124px;} .m-t-125 {margin-top: 125px;} .m-t-126 {margin-top: 126px;} .m-t-127 {margin-top: 127px;} .m-t-128 {margin-top: 128px;} .m-t-129 {margin-top: 129px;} .m-t-130 {margin-top: 130px;} .m-t-131 {margin-top: 131px;} .m-t-132 {margin-top: 132px;} .m-t-133 {margin-top: 133px;} .m-t-134 {margin-top: 134px;} .m-t-135 {margin-top: 135px;} .m-t-136 {margin-top: 136px;} .m-t-137 {margin-top: 137px;} .m-t-138 {margin-top: 138px;} .m-t-139 {margin-top: 139px;} .m-t-140 {margin-top: 140px;} .m-t-141 {margin-top: 141px;} .m-t-142 {margin-top: 142px;} .m-t-143 {margin-top: 143px;} .m-t-144 {margin-top: 144px;} .m-t-145 {margin-top: 145px;} .m-t-146 {margin-top: 146px;} .m-t-147 {margin-top: 147px;} .m-t-148 {margin-top: 148px;} .m-t-149 {margin-top: 149px;} .m-t-150 {margin-top: 150px;} .m-t-151 {margin-top: 151px;} .m-t-152 {margin-top: 152px;} .m-t-153 {margin-top: 153px;} .m-t-154 {margin-top: 154px;} .m-t-155 {margin-top: 155px;} .m-t-156 {margin-top: 156px;} .m-t-157 {margin-top: 157px;} .m-t-158 {margin-top: 158px;} .m-t-159 {margin-top: 159px;} .m-t-160 {margin-top: 160px;} .m-t-161 {margin-top: 161px;} .m-t-162 {margin-top: 162px;} .m-t-163 {margin-top: 163px;} .m-t-164 {margin-top: 164px;} .m-t-165 {margin-top: 165px;} .m-t-166 {margin-top: 166px;} .m-t-167 {margin-top: 167px;} .m-t-168 {margin-top: 168px;} .m-t-169 {margin-top: 169px;} .m-t-170 {margin-top: 170px;} .m-t-171 {margin-top: 171px;} .m-t-172 {margin-top: 172px;} .m-t-173 {margin-top: 173px;} .m-t-174 {margin-top: 174px;} .m-t-175 {margin-top: 175px;} .m-t-176 {margin-top: 176px;} .m-t-177 {margin-top: 177px;} .m-t-178 {margin-top: 178px;} .m-t-179 {margin-top: 179px;} .m-t-180 {margin-top: 180px;} .m-t-181 {margin-top: 181px;} .m-t-182 {margin-top: 182px;} .m-t-183 {margin-top: 183px;} .m-t-184 {margin-top: 184px;} .m-t-185 {margin-top: 185px;} .m-t-186 {margin-top: 186px;} .m-t-187 {margin-top: 187px;} .m-t-188 {margin-top: 188px;} .m-t-189 {margin-top: 189px;} .m-t-190 {margin-top: 190px;} .m-t-191 {margin-top: 191px;} .m-t-192 {margin-top: 192px;} .m-t-193 {margin-top: 193px;} .m-t-194 {margin-top: 194px;} .m-t-195 {margin-top: 195px;} .m-t-196 {margin-top: 196px;} .m-t-197 {margin-top: 197px;} .m-t-198 {margin-top: 198px;} .m-t-199 {margin-top: 199px;} .m-t-200 {margin-top: 200px;} .m-t-201 {margin-top: 201px;} .m-t-202 {margin-top: 202px;} .m-t-203 {margin-top: 203px;} .m-t-204 {margin-top: 204px;} .m-t-205 {margin-top: 205px;} .m-t-206 {margin-top: 206px;} .m-t-207 {margin-top: 207px;} .m-t-208 {margin-top: 208px;} .m-t-209 {margin-top: 209px;} .m-t-210 {margin-top: 210px;} .m-t-211 {margin-top: 211px;} .m-t-212 {margin-top: 212px;} .m-t-213 {margin-top: 213px;} .m-t-214 {margin-top: 214px;} .m-t-215 {margin-top: 215px;} .m-t-216 {margin-top: 216px;} .m-t-217 {margin-top: 217px;} .m-t-218 {margin-top: 218px;} .m-t-219 {margin-top: 219px;} .m-t-220 {margin-top: 220px;} .m-t-221 {margin-top: 221px;} .m-t-222 {margin-top: 222px;} .m-t-223 {margin-top: 223px;} .m-t-224 {margin-top: 224px;} .m-t-225 {margin-top: 225px;} .m-t-226 {margin-top: 226px;} .m-t-227 {margin-top: 227px;} .m-t-228 {margin-top: 228px;} .m-t-229 {margin-top: 229px;} .m-t-230 {margin-top: 230px;} .m-t-231 {margin-top: 231px;} .m-t-232 {margin-top: 232px;} .m-t-233 {margin-top: 233px;} .m-t-234 {margin-top: 234px;} .m-t-235 {margin-top: 235px;} .m-t-236 {margin-top: 236px;} .m-t-237 {margin-top: 237px;} .m-t-238 {margin-top: 238px;} .m-t-239 {margin-top: 239px;} .m-t-240 {margin-top: 240px;} .m-t-241 {margin-top: 241px;} .m-t-242 {margin-top: 242px;} .m-t-243 {margin-top: 243px;} .m-t-244 {margin-top: 244px;} .m-t-245 {margin-top: 245px;} .m-t-246 {margin-top: 246px;} .m-t-247 {margin-top: 247px;} .m-t-248 {margin-top: 248px;} .m-t-249 {margin-top: 249px;} .m-t-250 {margin-top: 250px;} .m-b-0 {margin-bottom: 0px;} .m-b-1 {margin-bottom: 1px;} .m-b-2 {margin-bottom: 2px;} .m-b-3 {margin-bottom: 3px;} .m-b-4 {margin-bottom: 4px;} .m-b-5 {margin-bottom: 5px;} .m-b-6 {margin-bottom: 6px;} .m-b-7 {margin-bottom: 7px;} .m-b-8 {margin-bottom: 8px;} .m-b-9 {margin-bottom: 9px;} .m-b-10 {margin-bottom: 10px;} .m-b-11 {margin-bottom: 11px;} .m-b-12 {margin-bottom: 12px;} .m-b-13 {margin-bottom: 13px;} .m-b-14 {margin-bottom: 14px;} .m-b-15 {margin-bottom: 15px;} .m-b-16 {margin-bottom: 16px;} .m-b-17 {margin-bottom: 17px;} .m-b-18 {margin-bottom: 18px;} .m-b-19 {margin-bottom: 19px;} .m-b-20 {margin-bottom: 20px;} .m-b-21 {margin-bottom: 21px;} .m-b-22 {margin-bottom: 22px;} .m-b-23 {margin-bottom: 23px;} .m-b-24 {margin-bottom: 24px;} .m-b-25 {margin-bottom: 25px;} .m-b-26 {margin-bottom: 26px;} .m-b-27 {margin-bottom: 27px;} .m-b-28 {margin-bottom: 28px;} .m-b-29 {margin-bottom: 29px;} .m-b-30 {margin-bottom: 30px;} .m-b-31 {margin-bottom: 31px;} .m-b-32 {margin-bottom: 32px;} .m-b-33 {margin-bottom: 33px;} .m-b-34 {margin-bottom: 34px;} .m-b-35 {margin-bottom: 35px;} .m-b-36 {margin-bottom: 36px;} .m-b-37 {margin-bottom: 37px;} .m-b-38 {margin-bottom: 38px;} .m-b-39 {margin-bottom: 39px;} .m-b-40 {margin-bottom: 40px;} .m-b-41 {margin-bottom: 41px;} .m-b-42 {margin-bottom: 42px;} .m-b-43 {margin-bottom: 43px;} .m-b-44 {margin-bottom: 44px;} .m-b-45 {margin-bottom: 45px;} .m-b-46 {margin-bottom: 46px;} .m-b-47 {margin-bottom: 47px;} .m-b-48 {margin-bottom: 48px;} .m-b-49 {margin-bottom: 49px;} .m-b-50 {margin-bottom: 50px;} .m-b-51 {margin-bottom: 51px;} .m-b-52 {margin-bottom: 52px;} .m-b-53 {margin-bottom: 53px;} .m-b-54 {margin-bottom: 54px;} .m-b-55 {margin-bottom: 55px;} .m-b-56 {margin-bottom: 56px;} .m-b-57 {margin-bottom: 57px;} .m-b-58 {margin-bottom: 58px;} .m-b-59 {margin-bottom: 59px;} .m-b-60 {margin-bottom: 60px;} .m-b-61 {margin-bottom: 61px;} .m-b-62 {margin-bottom: 62px;} .m-b-63 {margin-bottom: 63px;} .m-b-64 {margin-bottom: 64px;} .m-b-65 {margin-bottom: 65px;} .m-b-66 {margin-bottom: 66px;} .m-b-67 {margin-bottom: 67px;} .m-b-68 {margin-bottom: 68px;} .m-b-69 {margin-bottom: 69px;} .m-b-70 {margin-bottom: 70px;} .m-b-71 {margin-bottom: 71px;} .m-b-72 {margin-bottom: 72px;} .m-b-73 {margin-bottom: 73px;} .m-b-74 {margin-bottom: 74px;} .m-b-75 {margin-bottom: 75px;} .m-b-76 {margin-bottom: 76px;} .m-b-77 {margin-bottom: 77px;} .m-b-78 {margin-bottom: 78px;} .m-b-79 {margin-bottom: 79px;} .m-b-80 {margin-bottom: 80px;} .m-b-81 {margin-bottom: 81px;} .m-b-82 {margin-bottom: 82px;} .m-b-83 {margin-bottom: 83px;} .m-b-84 {margin-bottom: 84px;} .m-b-85 {margin-bottom: 85px;} .m-b-86 {margin-bottom: 86px;} .m-b-87 {margin-bottom: 87px;} .m-b-88 {margin-bottom: 88px;} .m-b-89 {margin-bottom: 89px;} .m-b-90 {margin-bottom: 90px;} .m-b-91 {margin-bottom: 91px;} .m-b-92 {margin-bottom: 92px;} .m-b-93 {margin-bottom: 93px;} .m-b-94 {margin-bottom: 94px;} .m-b-95 {margin-bottom: 95px;} .m-b-96 {margin-bottom: 96px;} .m-b-97 {margin-bottom: 97px;} .m-b-98 {margin-bottom: 98px;} .m-b-99 {margin-bottom: 99px;} .m-b-100 {margin-bottom: 100px;} .m-b-101 {margin-bottom: 101px;} .m-b-102 {margin-bottom: 102px;} .m-b-103 {margin-bottom: 103px;} .m-b-104 {margin-bottom: 104px;} .m-b-105 {margin-bottom: 105px;} .m-b-106 {margin-bottom: 106px;} .m-b-107 {margin-bottom: 107px;} .m-b-108 {margin-bottom: 108px;} .m-b-109 {margin-bottom: 109px;} .m-b-110 {margin-bottom: 110px;} .m-b-111 {margin-bottom: 111px;} .m-b-112 {margin-bottom: 112px;} .m-b-113 {margin-bottom: 113px;} .m-b-114 {margin-bottom: 114px;} .m-b-115 {margin-bottom: 115px;} .m-b-116 {margin-bottom: 116px;} .m-b-117 {margin-bottom: 117px;} .m-b-118 {margin-bottom: 118px;} .m-b-119 {margin-bottom: 119px;} .m-b-120 {margin-bottom: 120px;} .m-b-121 {margin-bottom: 121px;} .m-b-122 {margin-bottom: 122px;} .m-b-123 {margin-bottom: 123px;} .m-b-124 {margin-bottom: 124px;} .m-b-125 {margin-bottom: 125px;} .m-b-126 {margin-bottom: 126px;} .m-b-127 {margin-bottom: 127px;} .m-b-128 {margin-bottom: 128px;} .m-b-129 {margin-bottom: 129px;} .m-b-130 {margin-bottom: 130px;} .m-b-131 {margin-bottom: 131px;} .m-b-132 {margin-bottom: 132px;} .m-b-133 {margin-bottom: 133px;} .m-b-134 {margin-bottom: 134px;} .m-b-135 {margin-bottom: 135px;} .m-b-136 {margin-bottom: 136px;} .m-b-137 {margin-bottom: 137px;} .m-b-138 {margin-bottom: 138px;} .m-b-139 {margin-bottom: 139px;} .m-b-140 {margin-bottom: 140px;} .m-b-141 {margin-bottom: 141px;} .m-b-142 {margin-bottom: 142px;} .m-b-143 {margin-bottom: 143px;} .m-b-144 {margin-bottom: 144px;} .m-b-145 {margin-bottom: 145px;} .m-b-146 {margin-bottom: 146px;} .m-b-147 {margin-bottom: 147px;} .m-b-148 {margin-bottom: 148px;} .m-b-149 {margin-bottom: 149px;} .m-b-150 {margin-bottom: 150px;} .m-b-151 {margin-bottom: 151px;} .m-b-152 {margin-bottom: 152px;} .m-b-153 {margin-bottom: 153px;} .m-b-154 {margin-bottom: 154px;} .m-b-155 {margin-bottom: 155px;} .m-b-156 {margin-bottom: 156px;} .m-b-157 {margin-bottom: 157px;} .m-b-158 {margin-bottom: 158px;} .m-b-159 {margin-bottom: 159px;} .m-b-160 {margin-bottom: 160px;} .m-b-161 {margin-bottom: 161px;} .m-b-162 {margin-bottom: 162px;} .m-b-163 {margin-bottom: 163px;} .m-b-164 {margin-bottom: 164px;} .m-b-165 {margin-bottom: 165px;} .m-b-166 {margin-bottom: 166px;} .m-b-167 {margin-bottom: 167px;} .m-b-168 {margin-bottom: 168px;} .m-b-169 {margin-bottom: 169px;} .m-b-170 {margin-bottom: 170px;} .m-b-171 {margin-bottom: 171px;} .m-b-172 {margin-bottom: 172px;} .m-b-173 {margin-bottom: 173px;} .m-b-174 {margin-bottom: 174px;} .m-b-175 {margin-bottom: 175px;} .m-b-176 {margin-bottom: 176px;} .m-b-177 {margin-bottom: 177px;} .m-b-178 {margin-bottom: 178px;} .m-b-179 {margin-bottom: 179px;} .m-b-180 {margin-bottom: 180px;} .m-b-181 {margin-bottom: 181px;} .m-b-182 {margin-bottom: 182px;} .m-b-183 {margin-bottom: 183px;} .m-b-184 {margin-bottom: 184px;} .m-b-185 {margin-bottom: 185px;} .m-b-186 {margin-bottom: 186px;} .m-b-187 {margin-bottom: 187px;} .m-b-188 {margin-bottom: 188px;} .m-b-189 {margin-bottom: 189px;} .m-b-190 {margin-bottom: 190px;} .m-b-191 {margin-bottom: 191px;} .m-b-192 {margin-bottom: 192px;} .m-b-193 {margin-bottom: 193px;} .m-b-194 {margin-bottom: 194px;} .m-b-195 {margin-bottom: 195px;} .m-b-196 {margin-bottom: 196px;} .m-b-197 {margin-bottom: 197px;} .m-b-198 {margin-bottom: 198px;} .m-b-199 {margin-bottom: 199px;} .m-b-200 {margin-bottom: 200px;} .m-b-201 {margin-bottom: 201px;} .m-b-202 {margin-bottom: 202px;} .m-b-203 {margin-bottom: 203px;} .m-b-204 {margin-bottom: 204px;} .m-b-205 {margin-bottom: 205px;} .m-b-206 {margin-bottom: 206px;} .m-b-207 {margin-bottom: 207px;} .m-b-208 {margin-bottom: 208px;} .m-b-209 {margin-bottom: 209px;} .m-b-210 {margin-bottom: 210px;} .m-b-211 {margin-bottom: 211px;} .m-b-212 {margin-bottom: 212px;} .m-b-213 {margin-bottom: 213px;} .m-b-214 {margin-bottom: 214px;} .m-b-215 {margin-bottom: 215px;} .m-b-216 {margin-bottom: 216px;} .m-b-217 {margin-bottom: 217px;} .m-b-218 {margin-bottom: 218px;} .m-b-219 {margin-bottom: 219px;} .m-b-220 {margin-bottom: 220px;} .m-b-221 {margin-bottom: 221px;} .m-b-222 {margin-bottom: 222px;} .m-b-223 {margin-bottom: 223px;} .m-b-224 {margin-bottom: 224px;} .m-b-225 {margin-bottom: 225px;} .m-b-226 {margin-bottom: 226px;} .m-b-227 {margin-bottom: 227px;} .m-b-228 {margin-bottom: 228px;} .m-b-229 {margin-bottom: 229px;} .m-b-230 {margin-bottom: 230px;} .m-b-231 {margin-bottom: 231px;} .m-b-232 {margin-bottom: 232px;} .m-b-233 {margin-bottom: 233px;} .m-b-234 {margin-bottom: 234px;} .m-b-235 {margin-bottom: 235px;} .m-b-236 {margin-bottom: 236px;} .m-b-237 {margin-bottom: 237px;} .m-b-238 {margin-bottom: 238px;} .m-b-239 {margin-bottom: 239px;} .m-b-240 {margin-bottom: 240px;} .m-b-241 {margin-bottom: 241px;} .m-b-242 {margin-bottom: 242px;} .m-b-243 {margin-bottom: 243px;} .m-b-244 {margin-bottom: 244px;} .m-b-245 {margin-bottom: 245px;} .m-b-246 {margin-bottom: 246px;} .m-b-247 {margin-bottom: 247px;} .m-b-248 {margin-bottom: 248px;} .m-b-249 {margin-bottom: 249px;} .m-b-250 {margin-bottom: 250px;} .m-l-0 {margin-left: 0px;} .m-l-1 {margin-left: 1px;} .m-l-2 {margin-left: 2px;} .m-l-3 {margin-left: 3px;} .m-l-4 {margin-left: 4px;} .m-l-5 {margin-left: 5px;} .m-l-6 {margin-left: 6px;} .m-l-7 {margin-left: 7px;} .m-l-8 {margin-left: 8px;} .m-l-9 {margin-left: 9px;} .m-l-10 {margin-left: 10px;} .m-l-11 {margin-left: 11px;} .m-l-12 {margin-left: 12px;} .m-l-13 {margin-left: 13px;} .m-l-14 {margin-left: 14px;} .m-l-15 {margin-left: 15px;} .m-l-16 {margin-left: 16px;} .m-l-17 {margin-left: 17px;} .m-l-18 {margin-left: 18px;} .m-l-19 {margin-left: 19px;} .m-l-20 {margin-left: 20px;} .m-l-21 {margin-left: 21px;} .m-l-22 {margin-left: 22px;} .m-l-23 {margin-left: 23px;} .m-l-24 {margin-left: 24px;} .m-l-25 {margin-left: 25px;} .m-l-26 {margin-left: 26px;} .m-l-27 {margin-left: 27px;} .m-l-28 {margin-left: 28px;} .m-l-29 {margin-left: 29px;} .m-l-30 {margin-left: 30px;} .m-l-31 {margin-left: 31px;} .m-l-32 {margin-left: 32px;} .m-l-33 {margin-left: 33px;} .m-l-34 {margin-left: 34px;} .m-l-35 {margin-left: 35px;} .m-l-36 {margin-left: 36px;} .m-l-37 {margin-left: 37px;} .m-l-38 {margin-left: 38px;} .m-l-39 {margin-left: 39px;} .m-l-40 {margin-left: 40px;} .m-l-41 {margin-left: 41px;} .m-l-42 {margin-left: 42px;} .m-l-43 {margin-left: 43px;} .m-l-44 {margin-left: 44px;} .m-l-45 {margin-left: 45px;} .m-l-46 {margin-left: 46px;} .m-l-47 {margin-left: 47px;} .m-l-48 {margin-left: 48px;} .m-l-49 {margin-left: 49px;} .m-l-50 {margin-left: 50px;} .m-l-51 {margin-left: 51px;} .m-l-52 {margin-left: 52px;} .m-l-53 {margin-left: 53px;} .m-l-54 {margin-left: 54px;} .m-l-55 {margin-left: 55px;} .m-l-56 {margin-left: 56px;} .m-l-57 {margin-left: 57px;} .m-l-58 {margin-left: 58px;} .m-l-59 {margin-left: 59px;} .m-l-60 {margin-left: 60px;} .m-l-61 {margin-left: 61px;} .m-l-62 {margin-left: 62px;} .m-l-63 {margin-left: 63px;} .m-l-64 {margin-left: 64px;} .m-l-65 {margin-left: 65px;} .m-l-66 {margin-left: 66px;} .m-l-67 {margin-left: 67px;} .m-l-68 {margin-left: 68px;} .m-l-69 {margin-left: 69px;} .m-l-70 {margin-left: 70px;} .m-l-71 {margin-left: 71px;} .m-l-72 {margin-left: 72px;} .m-l-73 {margin-left: 73px;} .m-l-74 {margin-left: 74px;} .m-l-75 {margin-left: 75px;} .m-l-76 {margin-left: 76px;} .m-l-77 {margin-left: 77px;} .m-l-78 {margin-left: 78px;} .m-l-79 {margin-left: 79px;} .m-l-80 {margin-left: 80px;} .m-l-81 {margin-left: 81px;} .m-l-82 {margin-left: 82px;} .m-l-83 {margin-left: 83px;} .m-l-84 {margin-left: 84px;} .m-l-85 {margin-left: 85px;} .m-l-86 {margin-left: 86px;} .m-l-87 {margin-left: 87px;} .m-l-88 {margin-left: 88px;} .m-l-89 {margin-left: 89px;} .m-l-90 {margin-left: 90px;} .m-l-91 {margin-left: 91px;} .m-l-92 {margin-left: 92px;} .m-l-93 {margin-left: 93px;} .m-l-94 {margin-left: 94px;} .m-l-95 {margin-left: 95px;} .m-l-96 {margin-left: 96px;} .m-l-97 {margin-left: 97px;} .m-l-98 {margin-left: 98px;} .m-l-99 {margin-left: 99px;} .m-l-100 {margin-left: 100px;} .m-l-101 {margin-left: 101px;} .m-l-102 {margin-left: 102px;} .m-l-103 {margin-left: 103px;} .m-l-104 {margin-left: 104px;} .m-l-105 {margin-left: 105px;} .m-l-106 {margin-left: 106px;} .m-l-107 {margin-left: 107px;} .m-l-108 {margin-left: 108px;} .m-l-109 {margin-left: 109px;} .m-l-110 {margin-left: 110px;} .m-l-111 {margin-left: 111px;} .m-l-112 {margin-left: 112px;} .m-l-113 {margin-left: 113px;} .m-l-114 {margin-left: 114px;} .m-l-115 {margin-left: 115px;} .m-l-116 {margin-left: 116px;} .m-l-117 {margin-left: 117px;} .m-l-118 {margin-left: 118px;} .m-l-119 {margin-left: 119px;} .m-l-120 {margin-left: 120px;} .m-l-121 {margin-left: 121px;} .m-l-122 {margin-left: 122px;} .m-l-123 {margin-left: 123px;} .m-l-124 {margin-left: 124px;} .m-l-125 {margin-left: 125px;} .m-l-126 {margin-left: 126px;} .m-l-127 {margin-left: 127px;} .m-l-128 {margin-left: 128px;} .m-l-129 {margin-left: 129px;} .m-l-130 {margin-left: 130px;} .m-l-131 {margin-left: 131px;} .m-l-132 {margin-left: 132px;} .m-l-133 {margin-left: 133px;} .m-l-134 {margin-left: 134px;} .m-l-135 {margin-left: 135px;} .m-l-136 {margin-left: 136px;} .m-l-137 {margin-left: 137px;} .m-l-138 {margin-left: 138px;} .m-l-139 {margin-left: 139px;} .m-l-140 {margin-left: 140px;} .m-l-141 {margin-left: 141px;} .m-l-142 {margin-left: 142px;} .m-l-143 {margin-left: 143px;} .m-l-144 {margin-left: 144px;} .m-l-145 {margin-left: 145px;} .m-l-146 {margin-left: 146px;} .m-l-147 {margin-left: 147px;} .m-l-148 {margin-left: 148px;} .m-l-149 {margin-left: 149px;} .m-l-150 {margin-left: 150px;} .m-l-151 {margin-left: 151px;} .m-l-152 {margin-left: 152px;} .m-l-153 {margin-left: 153px;} .m-l-154 {margin-left: 154px;} .m-l-155 {margin-left: 155px;} .m-l-156 {margin-left: 156px;} .m-l-157 {margin-left: 157px;} .m-l-158 {margin-left: 158px;} .m-l-159 {margin-left: 159px;} .m-l-160 {margin-left: 160px;} .m-l-161 {margin-left: 161px;} .m-l-162 {margin-left: 162px;} .m-l-163 {margin-left: 163px;} .m-l-164 {margin-left: 164px;} .m-l-165 {margin-left: 165px;} .m-l-166 {margin-left: 166px;} .m-l-167 {margin-left: 167px;} .m-l-168 {margin-left: 168px;} .m-l-169 {margin-left: 169px;} .m-l-170 {margin-left: 170px;} .m-l-171 {margin-left: 171px;} .m-l-172 {margin-left: 172px;} .m-l-173 {margin-left: 173px;} .m-l-174 {margin-left: 174px;} .m-l-175 {margin-left: 175px;} .m-l-176 {margin-left: 176px;} .m-l-177 {margin-left: 177px;} .m-l-178 {margin-left: 178px;} .m-l-179 {margin-left: 179px;} .m-l-180 {margin-left: 180px;} .m-l-181 {margin-left: 181px;} .m-l-182 {margin-left: 182px;} .m-l-183 {margin-left: 183px;} .m-l-184 {margin-left: 184px;} .m-l-185 {margin-left: 185px;} .m-l-186 {margin-left: 186px;} .m-l-187 {margin-left: 187px;} .m-l-188 {margin-left: 188px;} .m-l-189 {margin-left: 189px;} .m-l-190 {margin-left: 190px;} .m-l-191 {margin-left: 191px;} .m-l-192 {margin-left: 192px;} .m-l-193 {margin-left: 193px;} .m-l-194 {margin-left: 194px;} .m-l-195 {margin-left: 195px;} .m-l-196 {margin-left: 196px;} .m-l-197 {margin-left: 197px;} .m-l-198 {margin-left: 198px;} .m-l-199 {margin-left: 199px;} .m-l-200 {margin-left: 200px;} .m-l-201 {margin-left: 201px;} .m-l-202 {margin-left: 202px;} .m-l-203 {margin-left: 203px;} .m-l-204 {margin-left: 204px;} .m-l-205 {margin-left: 205px;} .m-l-206 {margin-left: 206px;} .m-l-207 {margin-left: 207px;} .m-l-208 {margin-left: 208px;} .m-l-209 {margin-left: 209px;} .m-l-210 {margin-left: 210px;} .m-l-211 {margin-left: 211px;} .m-l-212 {margin-left: 212px;} .m-l-213 {margin-left: 213px;} .m-l-214 {margin-left: 214px;} .m-l-215 {margin-left: 215px;} .m-l-216 {margin-left: 216px;} .m-l-217 {margin-left: 217px;} .m-l-218 {margin-left: 218px;} .m-l-219 {margin-left: 219px;} .m-l-220 {margin-left: 220px;} .m-l-221 {margin-left: 221px;} .m-l-222 {margin-left: 222px;} .m-l-223 {margin-left: 223px;} .m-l-224 {margin-left: 224px;} .m-l-225 {margin-left: 225px;} .m-l-226 {margin-left: 226px;} .m-l-227 {margin-left: 227px;} .m-l-228 {margin-left: 228px;} .m-l-229 {margin-left: 229px;} .m-l-230 {margin-left: 230px;} .m-l-231 {margin-left: 231px;} .m-l-232 {margin-left: 232px;} .m-l-233 {margin-left: 233px;} .m-l-234 {margin-left: 234px;} .m-l-235 {margin-left: 235px;} .m-l-236 {margin-left: 236px;} .m-l-237 {margin-left: 237px;} .m-l-238 {margin-left: 238px;} .m-l-239 {margin-left: 239px;} .m-l-240 {margin-left: 240px;} .m-l-241 {margin-left: 241px;} .m-l-242 {margin-left: 242px;} .m-l-243 {margin-left: 243px;} .m-l-244 {margin-left: 244px;} .m-l-245 {margin-left: 245px;} .m-l-246 {margin-left: 246px;} .m-l-247 {margin-left: 247px;} .m-l-248 {margin-left: 248px;} .m-l-249 {margin-left: 249px;} .m-l-250 {margin-left: 250px;} .m-r-0 {margin-right: 0px;} .m-r-1 {margin-right: 1px;} .m-r-2 {margin-right: 2px;} .m-r-3 {margin-right: 3px;} .m-r-4 {margin-right: 4px;} .m-r-5 {margin-right: 5px;} .m-r-6 {margin-right: 6px;} .m-r-7 {margin-right: 7px;} .m-r-8 {margin-right: 8px;} .m-r-9 {margin-right: 9px;} .m-r-10 {margin-right: 10px;} .m-r-11 {margin-right: 11px;} .m-r-12 {margin-right: 12px;} .m-r-13 {margin-right: 13px;} .m-r-14 {margin-right: 14px;} .m-r-15 {margin-right: 15px;} .m-r-16 {margin-right: 16px;} .m-r-17 {margin-right: 17px;} .m-r-18 {margin-right: 18px;} .m-r-19 {margin-right: 19px;} .m-r-20 {margin-right: 20px;} .m-r-21 {margin-right: 21px;} .m-r-22 {margin-right: 22px;} .m-r-23 {margin-right: 23px;} .m-r-24 {margin-right: 24px;} .m-r-25 {margin-right: 25px;} .m-r-26 {margin-right: 26px;} .m-r-27 {margin-right: 27px;} .m-r-28 {margin-right: 28px;} .m-r-29 {margin-right: 29px;} .m-r-30 {margin-right: 30px;} .m-r-31 {margin-right: 31px;} .m-r-32 {margin-right: 32px;} .m-r-33 {margin-right: 33px;} .m-r-34 {margin-right: 34px;} .m-r-35 {margin-right: 35px;} .m-r-36 {margin-right: 36px;} .m-r-37 {margin-right: 37px;} .m-r-38 {margin-right: 38px;} .m-r-39 {margin-right: 39px;} .m-r-40 {margin-right: 40px;} .m-r-41 {margin-right: 41px;} .m-r-42 {margin-right: 42px;} .m-r-43 {margin-right: 43px;} .m-r-44 {margin-right: 44px;} .m-r-45 {margin-right: 45px;} .m-r-46 {margin-right: 46px;} .m-r-47 {margin-right: 47px;} .m-r-48 {margin-right: 48px;} .m-r-49 {margin-right: 49px;} .m-r-50 {margin-right: 50px;} .m-r-51 {margin-right: 51px;} .m-r-52 {margin-right: 52px;} .m-r-53 {margin-right: 53px;} .m-r-54 {margin-right: 54px;} .m-r-55 {margin-right: 55px;} .m-r-56 {margin-right: 56px;} .m-r-57 {margin-right: 57px;} .m-r-58 {margin-right: 58px;} .m-r-59 {margin-right: 59px;} .m-r-60 {margin-right: 60px;} .m-r-61 {margin-right: 61px;} .m-r-62 {margin-right: 62px;} .m-r-63 {margin-right: 63px;} .m-r-64 {margin-right: 64px;} .m-r-65 {margin-right: 65px;} .m-r-66 {margin-right: 66px;} .m-r-67 {margin-right: 67px;} .m-r-68 {margin-right: 68px;} .m-r-69 {margin-right: 69px;} .m-r-70 {margin-right: 70px;} .m-r-71 {margin-right: 71px;} .m-r-72 {margin-right: 72px;} .m-r-73 {margin-right: 73px;} .m-r-74 {margin-right: 74px;} .m-r-75 {margin-right: 75px;} .m-r-76 {margin-right: 76px;} .m-r-77 {margin-right: 77px;} .m-r-78 {margin-right: 78px;} .m-r-79 {margin-right: 79px;} .m-r-80 {margin-right: 80px;} .m-r-81 {margin-right: 81px;} .m-r-82 {margin-right: 82px;} .m-r-83 {margin-right: 83px;} .m-r-84 {margin-right: 84px;} .m-r-85 {margin-right: 85px;} .m-r-86 {margin-right: 86px;} .m-r-87 {margin-right: 87px;} .m-r-88 {margin-right: 88px;} .m-r-89 {margin-right: 89px;} .m-r-90 {margin-right: 90px;} .m-r-91 {margin-right: 91px;} .m-r-92 {margin-right: 92px;} .m-r-93 {margin-right: 93px;} .m-r-94 {margin-right: 94px;} .m-r-95 {margin-right: 95px;} .m-r-96 {margin-right: 96px;} .m-r-97 {margin-right: 97px;} .m-r-98 {margin-right: 98px;} .m-r-99 {margin-right: 99px;} .m-r-100 {margin-right: 100px;} .m-r-101 {margin-right: 101px;} .m-r-102 {margin-right: 102px;} .m-r-103 {margin-right: 103px;} .m-r-104 {margin-right: 104px;} .m-r-105 {margin-right: 105px;} .m-r-106 {margin-right: 106px;} .m-r-107 {margin-right: 107px;} .m-r-108 {margin-right: 108px;} .m-r-109 {margin-right: 109px;} .m-r-110 {margin-right: 110px;} .m-r-111 {margin-right: 111px;} .m-r-112 {margin-right: 112px;} .m-r-113 {margin-right: 113px;} .m-r-114 {margin-right: 114px;} .m-r-115 {margin-right: 115px;} .m-r-116 {margin-right: 116px;} .m-r-117 {margin-right: 117px;} .m-r-118 {margin-right: 118px;} .m-r-119 {margin-right: 119px;} .m-r-120 {margin-right: 120px;} .m-r-121 {margin-right: 121px;} .m-r-122 {margin-right: 122px;} .m-r-123 {margin-right: 123px;} .m-r-124 {margin-right: 124px;} .m-r-125 {margin-right: 125px;} .m-r-126 {margin-right: 126px;} .m-r-127 {margin-right: 127px;} .m-r-128 {margin-right: 128px;} .m-r-129 {margin-right: 129px;} .m-r-130 {margin-right: 130px;} .m-r-131 {margin-right: 131px;} .m-r-132 {margin-right: 132px;} .m-r-133 {margin-right: 133px;} .m-r-134 {margin-right: 134px;} .m-r-135 {margin-right: 135px;} .m-r-136 {margin-right: 136px;} .m-r-137 {margin-right: 137px;} .m-r-138 {margin-right: 138px;} .m-r-139 {margin-right: 139px;} .m-r-140 {margin-right: 140px;} .m-r-141 {margin-right: 141px;} .m-r-142 {margin-right: 142px;} .m-r-143 {margin-right: 143px;} .m-r-144 {margin-right: 144px;} .m-r-145 {margin-right: 145px;} .m-r-146 {margin-right: 146px;} .m-r-147 {margin-right: 147px;} .m-r-148 {margin-right: 148px;} .m-r-149 {margin-right: 149px;} .m-r-150 {margin-right: 150px;} .m-r-151 {margin-right: 151px;} .m-r-152 {margin-right: 152px;} .m-r-153 {margin-right: 153px;} .m-r-154 {margin-right: 154px;} .m-r-155 {margin-right: 155px;} .m-r-156 {margin-right: 156px;} .m-r-157 {margin-right: 157px;} .m-r-158 {margin-right: 158px;} .m-r-159 {margin-right: 159px;} .m-r-160 {margin-right: 160px;} .m-r-161 {margin-right: 161px;} .m-r-162 {margin-right: 162px;} .m-r-163 {margin-right: 163px;} .m-r-164 {margin-right: 164px;} .m-r-165 {margin-right: 165px;} .m-r-166 {margin-right: 166px;} .m-r-167 {margin-right: 167px;} .m-r-168 {margin-right: 168px;} .m-r-169 {margin-right: 169px;} .m-r-170 {margin-right: 170px;} .m-r-171 {margin-right: 171px;} .m-r-172 {margin-right: 172px;} .m-r-173 {margin-right: 173px;} .m-r-174 {margin-right: 174px;} .m-r-175 {margin-right: 175px;} .m-r-176 {margin-right: 176px;} .m-r-177 {margin-right: 177px;} .m-r-178 {margin-right: 178px;} .m-r-179 {margin-right: 179px;} .m-r-180 {margin-right: 180px;} .m-r-181 {margin-right: 181px;} .m-r-182 {margin-right: 182px;} .m-r-183 {margin-right: 183px;} .m-r-184 {margin-right: 184px;} .m-r-185 {margin-right: 185px;} .m-r-186 {margin-right: 186px;} .m-r-187 {margin-right: 187px;} .m-r-188 {margin-right: 188px;} .m-r-189 {margin-right: 189px;} .m-r-190 {margin-right: 190px;} .m-r-191 {margin-right: 191px;} .m-r-192 {margin-right: 192px;} .m-r-193 {margin-right: 193px;} .m-r-194 {margin-right: 194px;} .m-r-195 {margin-right: 195px;} .m-r-196 {margin-right: 196px;} .m-r-197 {margin-right: 197px;} .m-r-198 {margin-right: 198px;} .m-r-199 {margin-right: 199px;} .m-r-200 {margin-right: 200px;} .m-r-201 {margin-right: 201px;} .m-r-202 {margin-right: 202px;} .m-r-203 {margin-right: 203px;} .m-r-204 {margin-right: 204px;} .m-r-205 {margin-right: 205px;} .m-r-206 {margin-right: 206px;} .m-r-207 {margin-right: 207px;} .m-r-208 {margin-right: 208px;} .m-r-209 {margin-right: 209px;} .m-r-210 {margin-right: 210px;} .m-r-211 {margin-right: 211px;} .m-r-212 {margin-right: 212px;} .m-r-213 {margin-right: 213px;} .m-r-214 {margin-right: 214px;} .m-r-215 {margin-right: 215px;} .m-r-216 {margin-right: 216px;} .m-r-217 {margin-right: 217px;} .m-r-218 {margin-right: 218px;} .m-r-219 {margin-right: 219px;} .m-r-220 {margin-right: 220px;} .m-r-221 {margin-right: 221px;} .m-r-222 {margin-right: 222px;} .m-r-223 {margin-right: 223px;} .m-r-224 {margin-right: 224px;} .m-r-225 {margin-right: 225px;} .m-r-226 {margin-right: 226px;} .m-r-227 {margin-right: 227px;} .m-r-228 {margin-right: 228px;} .m-r-229 {margin-right: 229px;} .m-r-230 {margin-right: 230px;} .m-r-231 {margin-right: 231px;} .m-r-232 {margin-right: 232px;} .m-r-233 {margin-right: 233px;} .m-r-234 {margin-right: 234px;} .m-r-235 {margin-right: 235px;} .m-r-236 {margin-right: 236px;} .m-r-237 {margin-right: 237px;} .m-r-238 {margin-right: 238px;} .m-r-239 {margin-right: 239px;} .m-r-240 {margin-right: 240px;} .m-r-241 {margin-right: 241px;} .m-r-242 {margin-right: 242px;} .m-r-243 {margin-right: 243px;} .m-r-244 {margin-right: 244px;} .m-r-245 {margin-right: 245px;} .m-r-246 {margin-right: 246px;} .m-r-247 {margin-right: 247px;} .m-r-248 {margin-right: 248px;} .m-r-249 {margin-right: 249px;} .m-r-250 {margin-right: 250px;} .m-l-r-auto {margin-left: auto; margin-right: auto;} .m-l-auto {margin-left: auto;} .m-r-auto {margin-right: auto;} /*[ TEXT ] /////////////////////////////////////////////////////////// */ /* ------------------------------------ */ .text-white {color: white;} .text-black {color: black;} .text-hov-white:hover {color: white;} /* ------------------------------------ */ .text-up {text-transform: uppercase;} /* ------------------------------------ */ .text-center {text-align: center;} .text-left {text-align: left;} .text-right {text-align: right;} .text-middle {vertical-align: middle;} /* ------------------------------------ */ .lh-1-0 {line-height: 1.0;} .lh-1-1 {line-height: 1.1;} .lh-1-2 {line-height: 1.2;} .lh-1-3 {line-height: 1.3;} .lh-1-4 {line-height: 1.4;} .lh-1-5 {line-height: 1.5;} .lh-1-6 {line-height: 1.6;} .lh-1-7 {line-height: 1.7;} .lh-1-8 {line-height: 1.8;} .lh-1-9 {line-height: 1.9;} .lh-2-0 {line-height: 2.0;} .lh-2-1 {line-height: 2.1;} .lh-2-2 {line-height: 2.2;} .lh-2-3 {line-height: 2.3;} .lh-2-4 {line-height: 2.4;} .lh-2-5 {line-height: 2.5;} .lh-2-6 {line-height: 2.6;} .lh-2-7 {line-height: 2.7;} .lh-2-8 {line-height: 2.8;} .lh-2-9 {line-height: 2.9;} /*[ SHAPE ] /////////////////////////////////////////////////////////// */ /*[ Display ] ----------------------------------------------------------- */ .dis-none {display: none;} .dis-block {display: block;} .dis-inline {display: inline;} .dis-inline-block {display: inline-block;} .dis-flex { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; } /*[ Position ] ----------------------------------------------------------- */ .pos-relative {position: relative;} .pos-absolute {position: absolute;} .pos-fixed {position: fixed;} /*[ float ] ----------------------------------------------------------- */ .float-l {float: left;} .float-r {float: right;} /*[ Width & Height ] ----------------------------------------------------------- */ .sizefull { width: 100%; height: 100%; } .w-full {width: 100%;} .h-full {height: 100%;} .max-w-full {max-width: 100%;} .max-h-full {max-height: 100%;} .min-w-full {min-width: 100%;} .min-h-full {min-height: 100%;} /*[ Top Bottom Left Right ] ----------------------------------------------------------- */ .top-0 {top: 0;} .bottom-0 {bottom: 0;} .left-0 {left: 0;} .right-0 {right: 0;} .top-auto {top: auto;} .bottom-auto {bottom: auto;} .left-auto {left: auto;} .right-auto {right: auto;} /*[ Opacity ] ----------------------------------------------------------- */ .op-0-0 {opacity: 0;} .op-0-1 {opacity: 0.1;} .op-0-2 {opacity: 0.2;} .op-0-3 {opacity: 0.3;} .op-0-4 {opacity: 0.4;} .op-0-5 {opacity: 0.5;} .op-0-6 {opacity: 0.6;} .op-0-7 {opacity: 0.7;} .op-0-8 {opacity: 0.8;} .op-0-9 {opacity: 0.9;} .op-1-0 {opacity: 1;} /*[ Background ] ----------------------------------------------------------- */ .bgwhite {background-color: white;} .bgblack {background-color: black;} /*[ Wrap Picture ] ----------------------------------------------------------- */ .wrap-pic-w img {width: 100%;} .wrap-pic-max-w img {max-width: 100%;} /* ------------------------------------ */ .wrap-pic-h img {height: 100%;} .wrap-pic-max-h img {max-height: 100%;} /* ------------------------------------ */ .wrap-pic-cir { border-radius: 50%; overflow: hidden; } .wrap-pic-cir img { width: 100%; } /*[ Hover ] ----------------------------------------------------------- */ .hov-pointer:hover {cursor: pointer;} /* ------------------------------------ */ .hov-img-zoom { display: block; overflow: hidden; } .hov-img-zoom img{ width: 100%; -webkit-transition: all 0.6s; -o-transition: all 0.6s; -moz-transition: all 0.6s; transition: all 0.6s; } .hov-img-zoom:hover img { -webkit-transform: scale(1.1); -moz-transform: scale(1.1); -ms-transform: scale(1.1); -o-transform: scale(1.1); transform: scale(1.1); } /*[ ] ----------------------------------------------------------- */ .bo-cir {border-radius: 50%;} .of-hidden {overflow: hidden;} .visible-false {visibility: hidden;} .visible-true {visibility: visible;} /*[ Transition ] ----------------------------------------------------------- */ .trans-0-1 { -webkit-transition: all 0.1s; -o-transition: all 0.1s; -moz-transition: all 0.1s; transition: all 0.1s; } .trans-0-2 { -webkit-transition: all 0.2s; -o-transition: all 0.2s; -moz-transition: all 0.2s; transition: all 0.2s; } .trans-0-3 { -webkit-transition: all 0.3s; -o-transition: all 0.3s; -moz-transition: all 0.3s; transition: all 0.3s; } .trans-0-4 { -webkit-transition: all 0.4s; -o-transition: all 0.4s; -moz-transition: all 0.4s; transition: all 0.4s; } .trans-0-5 { -webkit-transition: all 0.5s; -o-transition: all 0.5s; -moz-transition: all 0.5s; transition: all 0.5s; } .trans-0-6 { -webkit-transition: all 0.6s; -o-transition: all 0.6s; -moz-transition: all 0.6s; transition: all 0.6s; } .trans-0-9 { -webkit-transition: all 0.9s; -o-transition: all 0.9s; -moz-transition: all 0.9s; transition: all 0.9s; } .trans-1-0 { -webkit-transition: all 1s; -o-transition: all 1s; -moz-transition: all 1s; transition: all 1s; } /*[ Layout ] /////////////////////////////////////////////////////////// */ /*[ Flex ] ----------------------------------------------------------- */ /* ------------------------------------ */ .flex-w { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-wrap: wrap; -moz-flex-wrap: wrap; -ms-flex-wrap: wrap; -o-flex-wrap: wrap; flex-wrap: wrap; } /* ------------------------------------ */ .flex-l { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: flex-start; } .flex-r { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: flex-end; } .flex-c { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: center; } .flex-sa { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: space-around; } .flex-sb { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: space-between; } /* ------------------------------------ */ .flex-t { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -ms-align-items: flex-start; align-items: flex-start; } .flex-b { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -ms-align-items: flex-end; align-items: flex-end; } .flex-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -ms-align-items: center; align-items: center; } .flex-str { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -ms-align-items: stretch; align-items: stretch; } /* ------------------------------------ */ .flex-row { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: row; -moz-flex-direction: row; -ms-flex-direction: row; -o-flex-direction: row; flex-direction: row; } .flex-row-rev { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: row-reverse; -moz-flex-direction: row-reverse; -ms-flex-direction: row-reverse; -o-flex-direction: row-reverse; flex-direction: row-reverse; } .flex-col { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; } .flex-col-rev { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column-reverse; -moz-flex-direction: column-reverse; -ms-flex-direction: column-reverse; -o-flex-direction: column-reverse; flex-direction: column-reverse; } /* ------------------------------------ */ .flex-c-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: center; -ms-align-items: center; align-items: center; } .flex-c-t { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: center; -ms-align-items: flex-start; align-items: flex-start; } .flex-c-b { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: center; -ms-align-items: flex-end; align-items: flex-end; } .flex-c-str { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: center; -ms-align-items: stretch; align-items: stretch; } .flex-l-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: flex-start; -ms-align-items: center; align-items: center; } .flex-r-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: flex-end; -ms-align-items: center; align-items: center; } .flex-sa-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: space-around; -ms-align-items: center; align-items: center; } .flex-sb-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: space-between; -ms-align-items: center; align-items: center; } /* ------------------------------------ */ .flex-col-l { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; -ms-align-items: flex-start; align-items: flex-start; } .flex-col-r { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; -ms-align-items: flex-end; align-items: flex-end; } .flex-col-c { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; -ms-align-items: center; align-items: center; } .flex-col-l-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; -ms-align-items: flex-start; align-items: flex-start; justify-content: center; } .flex-col-r-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; -ms-align-items: flex-end; align-items: flex-end; justify-content: center; } .flex-col-c-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; -ms-align-items: center; align-items: center; justify-content: center; } .flex-col-str { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; -ms-align-items: stretch; align-items: stretch; } .flex-col-sb { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; justify-content: space-between; } /* ------------------------------------ */ .flex-col-rev-l { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column-reverse; -moz-flex-direction: column-reverse; -ms-flex-direction: column-reverse; -o-flex-direction: column-reverse; flex-direction: column-reverse; -ms-align-items: flex-start; align-items: flex-start; } .flex-col-rev-r { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column-reverse; -moz-flex-direction: column-reverse; -ms-flex-direction: column-reverse; -o-flex-direction: column-reverse; flex-direction: column-reverse; -ms-align-items: flex-end; align-items: flex-end; } .flex-col-rev-c { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column-reverse; -moz-flex-direction: column-reverse; -ms-flex-direction: column-reverse; -o-flex-direction: column-reverse; flex-direction: column-reverse; -ms-align-items: center; align-items: center; } .flex-col-rev-str { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column-reverse; -moz-flex-direction: column-reverse; -ms-flex-direction: column-reverse; -o-flex-direction: column-reverse; flex-direction: column-reverse; -ms-align-items: stretch; align-items: stretch; } /*[ Absolute ] ----------------------------------------------------------- */ .ab-c-m { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); -o-transform: translate(-50%, -50%); transform: translate(-50%, -50%); } .ab-c-t { position: absolute; top: 0px; left: 50%; -webkit-transform: translateX(-50%); -moz-transform: translateX(-50%); -ms-transform: translateX(-50%); -o-transform: translateX(-50%); transform: translateX(-50%); } .ab-c-b { position: absolute; bottom: 0px; left: 50%; -webkit-transform: translateX(-50%); -moz-transform: translateX(-50%); -ms-transform: translateX(-50%); -o-transform: translateX(-50%); transform: translateX(-50%); } .ab-l-m { position: absolute; left: 0px; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); -o-transform: translateY(-50%); transform: translateY(-50%); } .ab-r-m { position: absolute; right: 0px; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); -o-transform: translateY(-50%); transform: translateY(-50%); } .ab-t-l { position: absolute; left: 0px; top: 0px; } .ab-t-r { position: absolute; right: 0px; top: 0px; } .ab-b-l { position: absolute; left: 0px; bottom: 0px; } .ab-b-r { position: absolute; right: 0px; bottom: 0px; } ================================================ FILE: static/css/util2.css ================================================ /*[ FONT SIZE ] /////////////////////////////////////////////////////////// */ .fs-1 {font-size: 1px;} .fs-2 {font-size: 2px;} .fs-3 {font-size: 3px;} .fs-4 {font-size: 4px;} .fs-5 {font-size: 5px;} .fs-6 {font-size: 6px;} .fs-7 {font-size: 7px;} .fs-8 {font-size: 8px;} .fs-9 {font-size: 9px;} .fs-10 {font-size: 10px;} .fs-11 {font-size: 11px;} .fs-12 {font-size: 12px;} .fs-13 {font-size: 13px;} .fs-14 {font-size: 14px;} .fs-15 {font-size: 15px;} .fs-16 {font-size: 16px;} .fs-17 {font-size: 17px;} .fs-18 {font-size: 18px;} .fs-19 {font-size: 19px;} .fs-20 {font-size: 20px;} .fs-21 {font-size: 21px;} .fs-22 {font-size: 22px;} .fs-23 {font-size: 23px;} .fs-24 {font-size: 24px;} .fs-25 {font-size: 25px;} .fs-26 {font-size: 26px;} .fs-27 {font-size: 27px;} .fs-28 {font-size: 28px;} .fs-29 {font-size: 29px;} .fs-30 {font-size: 30px;} .fs-31 {font-size: 31px;} .fs-32 {font-size: 32px;} .fs-33 {font-size: 33px;} .fs-34 {font-size: 34px;} .fs-35 {font-size: 35px;} .fs-36 {font-size: 36px;} .fs-37 {font-size: 37px;} .fs-38 {font-size: 38px;} .fs-39 {font-size: 39px;} .fs-40 {font-size: 40px;} .fs-41 {font-size: 41px;} .fs-42 {font-size: 42px;} .fs-43 {font-size: 43px;} .fs-44 {font-size: 44px;} .fs-45 {font-size: 45px;} .fs-46 {font-size: 46px;} .fs-47 {font-size: 47px;} .fs-48 {font-size: 48px;} .fs-49 {font-size: 49px;} .fs-50 {font-size: 50px;} .fs-51 {font-size: 51px;} .fs-52 {font-size: 52px;} .fs-53 {font-size: 53px;} .fs-54 {font-size: 54px;} .fs-55 {font-size: 55px;} .fs-56 {font-size: 56px;} .fs-57 {font-size: 57px;} .fs-58 {font-size: 58px;} .fs-59 {font-size: 59px;} .fs-60 {font-size: 60px;} .fs-61 {font-size: 61px;} .fs-62 {font-size: 62px;} .fs-63 {font-size: 63px;} .fs-64 {font-size: 64px;} .fs-65 {font-size: 65px;} .fs-66 {font-size: 66px;} .fs-67 {font-size: 67px;} .fs-68 {font-size: 68px;} .fs-69 {font-size: 69px;} .fs-70 {font-size: 70px;} .fs-71 {font-size: 71px;} .fs-72 {font-size: 72px;} .fs-73 {font-size: 73px;} .fs-74 {font-size: 74px;} .fs-75 {font-size: 75px;} .fs-76 {font-size: 76px;} .fs-77 {font-size: 77px;} .fs-78 {font-size: 78px;} .fs-79 {font-size: 79px;} .fs-80 {font-size: 80px;} .fs-81 {font-size: 81px;} .fs-82 {font-size: 82px;} .fs-83 {font-size: 83px;} .fs-84 {font-size: 84px;} .fs-85 {font-size: 85px;} .fs-86 {font-size: 86px;} .fs-87 {font-size: 87px;} .fs-88 {font-size: 88px;} .fs-89 {font-size: 89px;} .fs-90 {font-size: 90px;} .fs-91 {font-size: 91px;} .fs-92 {font-size: 92px;} .fs-93 {font-size: 93px;} .fs-94 {font-size: 94px;} .fs-95 {font-size: 95px;} .fs-96 {font-size: 96px;} .fs-97 {font-size: 97px;} .fs-98 {font-size: 98px;} .fs-99 {font-size: 99px;} .fs-100 {font-size: 100px;} .fs-101 {font-size: 101px;} .fs-102 {font-size: 102px;} .fs-103 {font-size: 103px;} .fs-104 {font-size: 104px;} .fs-105 {font-size: 105px;} .fs-106 {font-size: 106px;} .fs-107 {font-size: 107px;} .fs-108 {font-size: 108px;} .fs-109 {font-size: 109px;} .fs-110 {font-size: 110px;} .fs-111 {font-size: 111px;} .fs-112 {font-size: 112px;} .fs-113 {font-size: 113px;} .fs-114 {font-size: 114px;} .fs-115 {font-size: 115px;} .fs-116 {font-size: 116px;} .fs-117 {font-size: 117px;} .fs-118 {font-size: 118px;} .fs-119 {font-size: 119px;} .fs-120 {font-size: 120px;} .fs-121 {font-size: 121px;} .fs-122 {font-size: 122px;} .fs-123 {font-size: 123px;} .fs-124 {font-size: 124px;} .fs-125 {font-size: 125px;} .fs-126 {font-size: 126px;} .fs-127 {font-size: 127px;} .fs-128 {font-size: 128px;} .fs-129 {font-size: 129px;} .fs-130 {font-size: 130px;} .fs-131 {font-size: 131px;} .fs-132 {font-size: 132px;} .fs-133 {font-size: 133px;} .fs-134 {font-size: 134px;} .fs-135 {font-size: 135px;} .fs-136 {font-size: 136px;} .fs-137 {font-size: 137px;} .fs-138 {font-size: 138px;} .fs-139 {font-size: 139px;} .fs-140 {font-size: 140px;} .fs-141 {font-size: 141px;} .fs-142 {font-size: 142px;} .fs-143 {font-size: 143px;} .fs-144 {font-size: 144px;} .fs-145 {font-size: 145px;} .fs-146 {font-size: 146px;} .fs-147 {font-size: 147px;} .fs-148 {font-size: 148px;} .fs-149 {font-size: 149px;} .fs-150 {font-size: 150px;} .fs-151 {font-size: 151px;} .fs-152 {font-size: 152px;} .fs-153 {font-size: 153px;} .fs-154 {font-size: 154px;} .fs-155 {font-size: 155px;} .fs-156 {font-size: 156px;} .fs-157 {font-size: 157px;} .fs-158 {font-size: 158px;} .fs-159 {font-size: 159px;} .fs-160 {font-size: 160px;} .fs-161 {font-size: 161px;} .fs-162 {font-size: 162px;} .fs-163 {font-size: 163px;} .fs-164 {font-size: 164px;} .fs-165 {font-size: 165px;} .fs-166 {font-size: 166px;} .fs-167 {font-size: 167px;} .fs-168 {font-size: 168px;} .fs-169 {font-size: 169px;} .fs-170 {font-size: 170px;} .fs-171 {font-size: 171px;} .fs-172 {font-size: 172px;} .fs-173 {font-size: 173px;} .fs-174 {font-size: 174px;} .fs-175 {font-size: 175px;} .fs-176 {font-size: 176px;} .fs-177 {font-size: 177px;} .fs-178 {font-size: 178px;} .fs-179 {font-size: 179px;} .fs-180 {font-size: 180px;} .fs-181 {font-size: 181px;} .fs-182 {font-size: 182px;} .fs-183 {font-size: 183px;} .fs-184 {font-size: 184px;} .fs-185 {font-size: 185px;} .fs-186 {font-size: 186px;} .fs-187 {font-size: 187px;} .fs-188 {font-size: 188px;} .fs-189 {font-size: 189px;} .fs-190 {font-size: 190px;} .fs-191 {font-size: 191px;} .fs-192 {font-size: 192px;} .fs-193 {font-size: 193px;} .fs-194 {font-size: 194px;} .fs-195 {font-size: 195px;} .fs-196 {font-size: 196px;} .fs-197 {font-size: 197px;} .fs-198 {font-size: 198px;} .fs-199 {font-size: 199px;} .fs-200 {font-size: 200px;} /*[ PADDING ] /////////////////////////////////////////////////////////// */ .p-t-0 {padding-top: 0px;} .p-t-1 {padding-top: 1px;} .p-t-2 {padding-top: 2px;} .p-t-3 {padding-top: 3px;} .p-t-4 {padding-top: 4px;} .p-t-5 {padding-top: 5px;} .p-t-6 {padding-top: 6px;} .p-t-7 {padding-top: 7px;} .p-t-8 {padding-top: 8px;} .p-t-9 {padding-top: 9px;} .p-t-10 {padding-top: 10px;} .p-t-11 {padding-top: 11px;} .p-t-12 {padding-top: 12px;} .p-t-13 {padding-top: 13px;} .p-t-14 {padding-top: 14px;} .p-t-15 {padding-top: 15px;} .p-t-16 {padding-top: 16px;} .p-t-17 {padding-top: 17px;} .p-t-18 {padding-top: 18px;} .p-t-19 {padding-top: 19px;} .p-t-20 {padding-top: 20px;} .p-t-21 {padding-top: 21px;} .p-t-22 {padding-top: 22px;} .p-t-23 {padding-top: 23px;} .p-t-24 {padding-top: 24px;} .p-t-25 {padding-top: 25px;} .p-t-26 {padding-top: 26px;} .p-t-27 {padding-top: 27px;} .p-t-28 {padding-top: 28px;} .p-t-29 {padding-top: 29px;} .p-t-30 {padding-top: 30px;} .p-t-31 {padding-top: 31px;} .p-t-32 {padding-top: 32px;} .p-t-33 {padding-top: 33px;} .p-t-34 {padding-top: 34px;} .p-t-35 {padding-top: 35px;} .p-t-36 {padding-top: 36px;} .p-t-37 {padding-top: 37px;} .p-t-38 {padding-top: 38px;} .p-t-39 {padding-top: 39px;} .p-t-40 {padding-top: 40px;} .p-t-41 {padding-top: 41px;} .p-t-42 {padding-top: 42px;} .p-t-43 {padding-top: 43px;} .p-t-44 {padding-top: 44px;} .p-t-45 {padding-top: 45px;} .p-t-46 {padding-top: 46px;} .p-t-47 {padding-top: 47px;} .p-t-48 {padding-top: 48px;} .p-t-49 {padding-top: 49px;} .p-t-50 {padding-top: 50px;} .p-t-51 {padding-top: 51px;} .p-t-52 {padding-top: 52px;} .p-t-53 {padding-top: 53px;} .p-t-54 {padding-top: 54px;} .p-t-55 {padding-top: 55px;} .p-t-56 {padding-top: 56px;} .p-t-57 {padding-top: 57px;} .p-t-58 {padding-top: 58px;} .p-t-59 {padding-top: 59px;} .p-t-60 {padding-top: 60px;} .p-t-61 {padding-top: 61px;} .p-t-62 {padding-top: 62px;} .p-t-63 {padding-top: 63px;} .p-t-64 {padding-top: 64px;} .p-t-65 {padding-top: 65px;} .p-t-66 {padding-top: 66px;} .p-t-67 {padding-top: 67px;} .p-t-68 {padding-top: 68px;} .p-t-69 {padding-top: 69px;} .p-t-70 {padding-top: 70px;} .p-t-71 {padding-top: 71px;} .p-t-72 {padding-top: 72px;} .p-t-73 {padding-top: 73px;} .p-t-74 {padding-top: 74px;} .p-t-75 {padding-top: 75px;} .p-t-76 {padding-top: 76px;} .p-t-77 {padding-top: 77px;} .p-t-78 {padding-top: 78px;} .p-t-79 {padding-top: 79px;} .p-t-80 {padding-top: 80px;} .p-t-81 {padding-top: 81px;} .p-t-82 {padding-top: 82px;} .p-t-83 {padding-top: 83px;} .p-t-84 {padding-top: 84px;} .p-t-85 {padding-top: 85px;} .p-t-86 {padding-top: 86px;} .p-t-87 {padding-top: 87px;} .p-t-88 {padding-top: 88px;} .p-t-89 {padding-top: 89px;} .p-t-90 {padding-top: 90px;} .p-t-91 {padding-top: 91px;} .p-t-92 {padding-top: 92px;} .p-t-93 {padding-top: 93px;} .p-t-94 {padding-top: 94px;} .p-t-95 {padding-top: 95px;} .p-t-96 {padding-top: 96px;} .p-t-97 {padding-top: 97px;} .p-t-98 {padding-top: 98px;} .p-t-99 {padding-top: 99px;} .p-t-100 {padding-top: 100px;} .p-t-101 {padding-top: 101px;} .p-t-102 {padding-top: 102px;} .p-t-103 {padding-top: 103px;} .p-t-104 {padding-top: 104px;} .p-t-105 {padding-top: 105px;} .p-t-106 {padding-top: 106px;} .p-t-107 {padding-top: 107px;} .p-t-108 {padding-top: 108px;} .p-t-109 {padding-top: 109px;} .p-t-110 {padding-top: 110px;} .p-t-111 {padding-top: 111px;} .p-t-112 {padding-top: 112px;} .p-t-113 {padding-top: 113px;} .p-t-114 {padding-top: 114px;} .p-t-115 {padding-top: 115px;} .p-t-116 {padding-top: 116px;} .p-t-117 {padding-top: 117px;} .p-t-118 {padding-top: 118px;} .p-t-119 {padding-top: 119px;} .p-t-120 {padding-top: 120px;} .p-t-121 {padding-top: 121px;} .p-t-122 {padding-top: 122px;} .p-t-123 {padding-top: 123px;} .p-t-124 {padding-top: 124px;} .p-t-125 {padding-top: 125px;} .p-t-126 {padding-top: 126px;} .p-t-127 {padding-top: 127px;} .p-t-128 {padding-top: 128px;} .p-t-129 {padding-top: 129px;} .p-t-130 {padding-top: 130px;} .p-t-131 {padding-top: 131px;} .p-t-132 {padding-top: 132px;} .p-t-133 {padding-top: 133px;} .p-t-134 {padding-top: 134px;} .p-t-135 {padding-top: 135px;} .p-t-136 {padding-top: 136px;} .p-t-137 {padding-top: 137px;} .p-t-138 {padding-top: 138px;} .p-t-139 {padding-top: 139px;} .p-t-140 {padding-top: 140px;} .p-t-141 {padding-top: 141px;} .p-t-142 {padding-top: 142px;} .p-t-143 {padding-top: 143px;} .p-t-144 {padding-top: 144px;} .p-t-145 {padding-top: 145px;} .p-t-146 {padding-top: 146px;} .p-t-147 {padding-top: 147px;} .p-t-148 {padding-top: 148px;} .p-t-149 {padding-top: 149px;} .p-t-150 {padding-top: 150px;} .p-t-151 {padding-top: 151px;} .p-t-152 {padding-top: 152px;} .p-t-153 {padding-top: 153px;} .p-t-154 {padding-top: 154px;} .p-t-155 {padding-top: 155px;} .p-t-156 {padding-top: 156px;} .p-t-157 {padding-top: 157px;} .p-t-158 {padding-top: 158px;} .p-t-159 {padding-top: 159px;} .p-t-160 {padding-top: 160px;} .p-t-161 {padding-top: 161px;} .p-t-162 {padding-top: 162px;} .p-t-163 {padding-top: 163px;} .p-t-164 {padding-top: 164px;} .p-t-165 {padding-top: 165px;} .p-t-166 {padding-top: 166px;} .p-t-167 {padding-top: 167px;} .p-t-168 {padding-top: 168px;} .p-t-169 {padding-top: 169px;} .p-t-170 {padding-top: 170px;} .p-t-171 {padding-top: 171px;} .p-t-172 {padding-top: 172px;} .p-t-173 {padding-top: 173px;} .p-t-174 {padding-top: 174px;} .p-t-175 {padding-top: 175px;} .p-t-176 {padding-top: 176px;} .p-t-177 {padding-top: 177px;} .p-t-178 {padding-top: 178px;} .p-t-179 {padding-top: 179px;} .p-t-180 {padding-top: 180px;} .p-t-181 {padding-top: 181px;} .p-t-182 {padding-top: 182px;} .p-t-183 {padding-top: 183px;} .p-t-184 {padding-top: 184px;} .p-t-185 {padding-top: 185px;} .p-t-186 {padding-top: 186px;} .p-t-187 {padding-top: 187px;} .p-t-188 {padding-top: 188px;} .p-t-189 {padding-top: 189px;} .p-t-190 {padding-top: 190px;} .p-t-191 {padding-top: 191px;} .p-t-192 {padding-top: 192px;} .p-t-193 {padding-top: 193px;} .p-t-194 {padding-top: 194px;} .p-t-195 {padding-top: 195px;} .p-t-196 {padding-top: 196px;} .p-t-197 {padding-top: 197px;} .p-t-198 {padding-top: 198px;} .p-t-199 {padding-top: 199px;} .p-t-200 {padding-top: 200px;} .p-t-201 {padding-top: 201px;} .p-t-202 {padding-top: 202px;} .p-t-203 {padding-top: 203px;} .p-t-204 {padding-top: 204px;} .p-t-205 {padding-top: 205px;} .p-t-206 {padding-top: 206px;} .p-t-207 {padding-top: 207px;} .p-t-208 {padding-top: 208px;} .p-t-209 {padding-top: 209px;} .p-t-210 {padding-top: 210px;} .p-t-211 {padding-top: 211px;} .p-t-212 {padding-top: 212px;} .p-t-213 {padding-top: 213px;} .p-t-214 {padding-top: 214px;} .p-t-215 {padding-top: 215px;} .p-t-216 {padding-top: 216px;} .p-t-217 {padding-top: 217px;} .p-t-218 {padding-top: 218px;} .p-t-219 {padding-top: 219px;} .p-t-220 {padding-top: 220px;} .p-t-221 {padding-top: 221px;} .p-t-222 {padding-top: 222px;} .p-t-223 {padding-top: 223px;} .p-t-224 {padding-top: 224px;} .p-t-225 {padding-top: 225px;} .p-t-226 {padding-top: 226px;} .p-t-227 {padding-top: 227px;} .p-t-228 {padding-top: 228px;} .p-t-229 {padding-top: 229px;} .p-t-230 {padding-top: 230px;} .p-t-231 {padding-top: 231px;} .p-t-232 {padding-top: 232px;} .p-t-233 {padding-top: 233px;} .p-t-234 {padding-top: 234px;} .p-t-235 {padding-top: 235px;} .p-t-236 {padding-top: 236px;} .p-t-237 {padding-top: 237px;} .p-t-238 {padding-top: 238px;} .p-t-239 {padding-top: 239px;} .p-t-240 {padding-top: 240px;} .p-t-241 {padding-top: 241px;} .p-t-242 {padding-top: 242px;} .p-t-243 {padding-top: 243px;} .p-t-244 {padding-top: 244px;} .p-t-245 {padding-top: 245px;} .p-t-246 {padding-top: 246px;} .p-t-247 {padding-top: 247px;} .p-t-248 {padding-top: 248px;} .p-t-249 {padding-top: 249px;} .p-t-250 {padding-top: 250px;} .p-b-0 {padding-bottom: 0px;} .p-b-1 {padding-bottom: 1px;} .p-b-2 {padding-bottom: 2px;} .p-b-3 {padding-bottom: 3px;} .p-b-4 {padding-bottom: 4px;} .p-b-5 {padding-bottom: 5px;} .p-b-6 {padding-bottom: 6px;} .p-b-7 {padding-bottom: 7px;} .p-b-8 {padding-bottom: 8px;} .p-b-9 {padding-bottom: 9px;} .p-b-10 {padding-bottom: 10px;} .p-b-11 {padding-bottom: 11px;} .p-b-12 {padding-bottom: 12px;} .p-b-13 {padding-bottom: 13px;} .p-b-14 {padding-bottom: 14px;} .p-b-15 {padding-bottom: 15px;} .p-b-16 {padding-bottom: 16px;} .p-b-17 {padding-bottom: 17px;} .p-b-18 {padding-bottom: 18px;} .p-b-19 {padding-bottom: 19px;} .p-b-20 {padding-bottom: 20px;} .p-b-21 {padding-bottom: 21px;} .p-b-22 {padding-bottom: 22px;} .p-b-23 {padding-bottom: 23px;} .p-b-24 {padding-bottom: 24px;} .p-b-25 {padding-bottom: 25px;} .p-b-26 {padding-bottom: 26px;} .p-b-27 {padding-bottom: 27px;} .p-b-28 {padding-bottom: 28px;} .p-b-29 {padding-bottom: 29px;} .p-b-30 {padding-bottom: 30px;} .p-b-31 {padding-bottom: 31px;} .p-b-32 {padding-bottom: 32px;} .p-b-33 {padding-bottom: 33px;} .p-b-34 {padding-bottom: 34px;} .p-b-35 {padding-bottom: 35px;} .p-b-36 {padding-bottom: 36px;} .p-b-37 {padding-bottom: 37px;} .p-b-38 {padding-bottom: 38px;} .p-b-39 {padding-bottom: 39px;} .p-b-40 {padding-bottom: 40px;} .p-b-41 {padding-bottom: 41px;} .p-b-42 {padding-bottom: 42px;} .p-b-43 {padding-bottom: 43px;} .p-b-44 {padding-bottom: 44px;} .p-b-45 {padding-bottom: 45px;} .p-b-46 {padding-bottom: 46px;} .p-b-47 {padding-bottom: 47px;} .p-b-48 {padding-bottom: 48px;} .p-b-49 {padding-bottom: 49px;} .p-b-50 {padding-bottom: 50px;} .p-b-51 {padding-bottom: 51px;} .p-b-52 {padding-bottom: 52px;} .p-b-53 {padding-bottom: 53px;} .p-b-54 {padding-bottom: 54px;} .p-b-55 {padding-bottom: 55px;} .p-b-56 {padding-bottom: 56px;} .p-b-57 {padding-bottom: 57px;} .p-b-58 {padding-bottom: 58px;} .p-b-59 {padding-bottom: 59px;} .p-b-60 {padding-bottom: 60px;} .p-b-61 {padding-bottom: 61px;} .p-b-62 {padding-bottom: 62px;} .p-b-63 {padding-bottom: 63px;} .p-b-64 {padding-bottom: 64px;} .p-b-65 {padding-bottom: 65px;} .p-b-66 {padding-bottom: 66px;} .p-b-67 {padding-bottom: 67px;} .p-b-68 {padding-bottom: 68px;} .p-b-69 {padding-bottom: 69px;} .p-b-70 {padding-bottom: 70px;} .p-b-71 {padding-bottom: 71px;} .p-b-72 {padding-bottom: 72px;} .p-b-73 {padding-bottom: 73px;} .p-b-74 {padding-bottom: 74px;} .p-b-75 {padding-bottom: 75px;} .p-b-76 {padding-bottom: 76px;} .p-b-77 {padding-bottom: 77px;} .p-b-78 {padding-bottom: 78px;} .p-b-79 {padding-bottom: 79px;} .p-b-80 {padding-bottom: 80px;} .p-b-81 {padding-bottom: 81px;} .p-b-82 {padding-bottom: 82px;} .p-b-83 {padding-bottom: 83px;} .p-b-84 {padding-bottom: 84px;} .p-b-85 {padding-bottom: 85px;} .p-b-86 {padding-bottom: 86px;} .p-b-87 {padding-bottom: 87px;} .p-b-88 {padding-bottom: 88px;} .p-b-89 {padding-bottom: 89px;} .p-b-90 {padding-bottom: 90px;} .p-b-91 {padding-bottom: 91px;} .p-b-92 {padding-bottom: 92px;} .p-b-93 {padding-bottom: 93px;} .p-b-94 {padding-bottom: 94px;} .p-b-95 {padding-bottom: 95px;} .p-b-96 {padding-bottom: 96px;} .p-b-97 {padding-bottom: 97px;} .p-b-98 {padding-bottom: 98px;} .p-b-99 {padding-bottom: 99px;} .p-b-100 {padding-bottom: 100px;} .p-b-101 {padding-bottom: 101px;} .p-b-102 {padding-bottom: 102px;} .p-b-103 {padding-bottom: 103px;} .p-b-104 {padding-bottom: 104px;} .p-b-105 {padding-bottom: 105px;} .p-b-106 {padding-bottom: 106px;} .p-b-107 {padding-bottom: 107px;} .p-b-108 {padding-bottom: 108px;} .p-b-109 {padding-bottom: 109px;} .p-b-110 {padding-bottom: 110px;} .p-b-111 {padding-bottom: 111px;} .p-b-112 {padding-bottom: 112px;} .p-b-113 {padding-bottom: 113px;} .p-b-114 {padding-bottom: 114px;} .p-b-115 {padding-bottom: 115px;} .p-b-116 {padding-bottom: 116px;} .p-b-117 {padding-bottom: 117px;} .p-b-118 {padding-bottom: 118px;} .p-b-119 {padding-bottom: 119px;} .p-b-120 {padding-bottom: 120px;} .p-b-121 {padding-bottom: 121px;} .p-b-122 {padding-bottom: 122px;} .p-b-123 {padding-bottom: 123px;} .p-b-124 {padding-bottom: 124px;} .p-b-125 {padding-bottom: 125px;} .p-b-126 {padding-bottom: 126px;} .p-b-127 {padding-bottom: 127px;} .p-b-128 {padding-bottom: 128px;} .p-b-129 {padding-bottom: 129px;} .p-b-130 {padding-bottom: 130px;} .p-b-131 {padding-bottom: 131px;} .p-b-132 {padding-bottom: 132px;} .p-b-133 {padding-bottom: 133px;} .p-b-134 {padding-bottom: 134px;} .p-b-135 {padding-bottom: 135px;} .p-b-136 {padding-bottom: 136px;} .p-b-137 {padding-bottom: 137px;} .p-b-138 {padding-bottom: 138px;} .p-b-139 {padding-bottom: 139px;} .p-b-140 {padding-bottom: 140px;} .p-b-141 {padding-bottom: 141px;} .p-b-142 {padding-bottom: 142px;} .p-b-143 {padding-bottom: 143px;} .p-b-144 {padding-bottom: 144px;} .p-b-145 {padding-bottom: 145px;} .p-b-146 {padding-bottom: 146px;} .p-b-147 {padding-bottom: 147px;} .p-b-148 {padding-bottom: 148px;} .p-b-149 {padding-bottom: 149px;} .p-b-150 {padding-bottom: 150px;} .p-b-151 {padding-bottom: 151px;} .p-b-152 {padding-bottom: 152px;} .p-b-153 {padding-bottom: 153px;} .p-b-154 {padding-bottom: 154px;} .p-b-155 {padding-bottom: 155px;} .p-b-156 {padding-bottom: 156px;} .p-b-157 {padding-bottom: 157px;} .p-b-158 {padding-bottom: 158px;} .p-b-159 {padding-bottom: 159px;} .p-b-160 {padding-bottom: 160px;} .p-b-161 {padding-bottom: 161px;} .p-b-162 {padding-bottom: 162px;} .p-b-163 {padding-bottom: 163px;} .p-b-164 {padding-bottom: 164px;} .p-b-165 {padding-bottom: 165px;} .p-b-166 {padding-bottom: 166px;} .p-b-167 {padding-bottom: 167px;} .p-b-168 {padding-bottom: 168px;} .p-b-169 {padding-bottom: 169px;} .p-b-170 {padding-bottom: 170px;} .p-b-171 {padding-bottom: 171px;} .p-b-172 {padding-bottom: 172px;} .p-b-173 {padding-bottom: 173px;} .p-b-174 {padding-bottom: 174px;} .p-b-175 {padding-bottom: 175px;} .p-b-176 {padding-bottom: 176px;} .p-b-177 {padding-bottom: 177px;} .p-b-178 {padding-bottom: 178px;} .p-b-179 {padding-bottom: 179px;} .p-b-180 {padding-bottom: 180px;} .p-b-181 {padding-bottom: 181px;} .p-b-182 {padding-bottom: 182px;} .p-b-183 {padding-bottom: 183px;} .p-b-184 {padding-bottom: 184px;} .p-b-185 {padding-bottom: 185px;} .p-b-186 {padding-bottom: 186px;} .p-b-187 {padding-bottom: 187px;} .p-b-188 {padding-bottom: 188px;} .p-b-189 {padding-bottom: 189px;} .p-b-190 {padding-bottom: 190px;} .p-b-191 {padding-bottom: 191px;} .p-b-192 {padding-bottom: 192px;} .p-b-193 {padding-bottom: 193px;} .p-b-194 {padding-bottom: 194px;} .p-b-195 {padding-bottom: 195px;} .p-b-196 {padding-bottom: 196px;} .p-b-197 {padding-bottom: 197px;} .p-b-198 {padding-bottom: 198px;} .p-b-199 {padding-bottom: 199px;} .p-b-200 {padding-bottom: 200px;} .p-b-201 {padding-bottom: 201px;} .p-b-202 {padding-bottom: 202px;} .p-b-203 {padding-bottom: 203px;} .p-b-204 {padding-bottom: 204px;} .p-b-205 {padding-bottom: 205px;} .p-b-206 {padding-bottom: 206px;} .p-b-207 {padding-bottom: 207px;} .p-b-208 {padding-bottom: 208px;} .p-b-209 {padding-bottom: 209px;} .p-b-210 {padding-bottom: 210px;} .p-b-211 {padding-bottom: 211px;} .p-b-212 {padding-bottom: 212px;} .p-b-213 {padding-bottom: 213px;} .p-b-214 {padding-bottom: 214px;} .p-b-215 {padding-bottom: 215px;} .p-b-216 {padding-bottom: 216px;} .p-b-217 {padding-bottom: 217px;} .p-b-218 {padding-bottom: 218px;} .p-b-219 {padding-bottom: 219px;} .p-b-220 {padding-bottom: 220px;} .p-b-221 {padding-bottom: 221px;} .p-b-222 {padding-bottom: 222px;} .p-b-223 {padding-bottom: 223px;} .p-b-224 {padding-bottom: 224px;} .p-b-225 {padding-bottom: 225px;} .p-b-226 {padding-bottom: 226px;} .p-b-227 {padding-bottom: 227px;} .p-b-228 {padding-bottom: 228px;} .p-b-229 {padding-bottom: 229px;} .p-b-230 {padding-bottom: 230px;} .p-b-231 {padding-bottom: 231px;} .p-b-232 {padding-bottom: 232px;} .p-b-233 {padding-bottom: 233px;} .p-b-234 {padding-bottom: 234px;} .p-b-235 {padding-bottom: 235px;} .p-b-236 {padding-bottom: 236px;} .p-b-237 {padding-bottom: 237px;} .p-b-238 {padding-bottom: 238px;} .p-b-239 {padding-bottom: 239px;} .p-b-240 {padding-bottom: 240px;} .p-b-241 {padding-bottom: 241px;} .p-b-242 {padding-bottom: 242px;} .p-b-243 {padding-bottom: 243px;} .p-b-244 {padding-bottom: 244px;} .p-b-245 {padding-bottom: 245px;} .p-b-246 {padding-bottom: 246px;} .p-b-247 {padding-bottom: 247px;} .p-b-248 {padding-bottom: 248px;} .p-b-249 {padding-bottom: 249px;} .p-b-250 {padding-bottom: 250px;} .p-l-0 {padding-left: 0px;} .p-l-1 {padding-left: 1px;} .p-l-2 {padding-left: 2px;} .p-l-3 {padding-left: 3px;} .p-l-4 {padding-left: 4px;} .p-l-5 {padding-left: 5px;} .p-l-6 {padding-left: 6px;} .p-l-7 {padding-left: 7px;} .p-l-8 {padding-left: 8px;} .p-l-9 {padding-left: 9px;} .p-l-10 {padding-left: 10px;} .p-l-11 {padding-left: 11px;} .p-l-12 {padding-left: 12px;} .p-l-13 {padding-left: 13px;} .p-l-14 {padding-left: 14px;} .p-l-15 {padding-left: 15px;} .p-l-16 {padding-left: 16px;} .p-l-17 {padding-left: 17px;} .p-l-18 {padding-left: 18px;} .p-l-19 {padding-left: 19px;} .p-l-20 {padding-left: 20px;} .p-l-21 {padding-left: 21px;} .p-l-22 {padding-left: 22px;} .p-l-23 {padding-left: 23px;} .p-l-24 {padding-left: 24px;} .p-l-25 {padding-left: 25px;} .p-l-26 {padding-left: 26px;} .p-l-27 {padding-left: 27px;} .p-l-28 {padding-left: 28px;} .p-l-29 {padding-left: 29px;} .p-l-30 {padding-left: 30px;} .p-l-31 {padding-left: 31px;} .p-l-32 {padding-left: 32px;} .p-l-33 {padding-left: 33px;} .p-l-34 {padding-left: 34px;} .p-l-35 {padding-left: 35px;} .p-l-36 {padding-left: 36px;} .p-l-37 {padding-left: 37px;} .p-l-38 {padding-left: 38px;} .p-l-39 {padding-left: 39px;} .p-l-40 {padding-left: 40px;} .p-l-41 {padding-left: 41px;} .p-l-42 {padding-left: 42px;} .p-l-43 {padding-left: 43px;} .p-l-44 {padding-left: 44px;} .p-l-45 {padding-left: 45px;} .p-l-46 {padding-left: 46px;} .p-l-47 {padding-left: 47px;} .p-l-48 {padding-left: 48px;} .p-l-49 {padding-left: 49px;} .p-l-50 {padding-left: 50px;} .p-l-51 {padding-left: 51px;} .p-l-52 {padding-left: 52px;} .p-l-53 {padding-left: 53px;} .p-l-54 {padding-left: 54px;} .p-l-55 {padding-left: 55px;} .p-l-56 {padding-left: 56px;} .p-l-57 {padding-left: 57px;} .p-l-58 {padding-left: 58px;} .p-l-59 {padding-left: 59px;} .p-l-60 {padding-left: 60px;} .p-l-61 {padding-left: 61px;} .p-l-62 {padding-left: 62px;} .p-l-63 {padding-left: 63px;} .p-l-64 {padding-left: 64px;} .p-l-65 {padding-left: 65px;} .p-l-66 {padding-left: 66px;} .p-l-67 {padding-left: 67px;} .p-l-68 {padding-left: 68px;} .p-l-69 {padding-left: 69px;} .p-l-70 {padding-left: 70px;} .p-l-71 {padding-left: 71px;} .p-l-72 {padding-left: 72px;} .p-l-73 {padding-left: 73px;} .p-l-74 {padding-left: 74px;} .p-l-75 {padding-left: 75px;} .p-l-76 {padding-left: 76px;} .p-l-77 {padding-left: 77px;} .p-l-78 {padding-left: 78px;} .p-l-79 {padding-left: 79px;} .p-l-80 {padding-left: 80px;} .p-l-81 {padding-left: 81px;} .p-l-82 {padding-left: 82px;} .p-l-83 {padding-left: 83px;} .p-l-84 {padding-left: 84px;} .p-l-85 {padding-left: 85px;} .p-l-86 {padding-left: 86px;} .p-l-87 {padding-left: 87px;} .p-l-88 {padding-left: 88px;} .p-l-89 {padding-left: 89px;} .p-l-90 {padding-left: 90px;} .p-l-91 {padding-left: 91px;} .p-l-92 {padding-left: 92px;} .p-l-93 {padding-left: 93px;} .p-l-94 {padding-left: 94px;} .p-l-95 {padding-left: 95px;} .p-l-96 {padding-left: 96px;} .p-l-97 {padding-left: 97px;} .p-l-98 {padding-left: 98px;} .p-l-99 {padding-left: 99px;} .p-l-100 {padding-left: 100px;} .p-l-101 {padding-left: 101px;} .p-l-102 {padding-left: 102px;} .p-l-103 {padding-left: 103px;} .p-l-104 {padding-left: 104px;} .p-l-105 {padding-left: 105px;} .p-l-106 {padding-left: 106px;} .p-l-107 {padding-left: 107px;} .p-l-108 {padding-left: 108px;} .p-l-109 {padding-left: 109px;} .p-l-110 {padding-left: 110px;} .p-l-111 {padding-left: 111px;} .p-l-112 {padding-left: 112px;} .p-l-113 {padding-left: 113px;} .p-l-114 {padding-left: 114px;} .p-l-115 {padding-left: 115px;} .p-l-116 {padding-left: 116px;} .p-l-117 {padding-left: 117px;} .p-l-118 {padding-left: 118px;} .p-l-119 {padding-left: 119px;} .p-l-120 {padding-left: 120px;} .p-l-121 {padding-left: 121px;} .p-l-122 {padding-left: 122px;} .p-l-123 {padding-left: 123px;} .p-l-124 {padding-left: 124px;} .p-l-125 {padding-left: 125px;} .p-l-126 {padding-left: 126px;} .p-l-127 {padding-left: 127px;} .p-l-128 {padding-left: 128px;} .p-l-129 {padding-left: 129px;} .p-l-130 {padding-left: 130px;} .p-l-131 {padding-left: 131px;} .p-l-132 {padding-left: 132px;} .p-l-133 {padding-left: 133px;} .p-l-134 {padding-left: 134px;} .p-l-135 {padding-left: 135px;} .p-l-136 {padding-left: 136px;} .p-l-137 {padding-left: 137px;} .p-l-138 {padding-left: 138px;} .p-l-139 {padding-left: 139px;} .p-l-140 {padding-left: 140px;} .p-l-141 {padding-left: 141px;} .p-l-142 {padding-left: 142px;} .p-l-143 {padding-left: 143px;} .p-l-144 {padding-left: 144px;} .p-l-145 {padding-left: 145px;} .p-l-146 {padding-left: 146px;} .p-l-147 {padding-left: 147px;} .p-l-148 {padding-left: 148px;} .p-l-149 {padding-left: 149px;} .p-l-150 {padding-left: 150px;} .p-l-151 {padding-left: 151px;} .p-l-152 {padding-left: 152px;} .p-l-153 {padding-left: 153px;} .p-l-154 {padding-left: 154px;} .p-l-155 {padding-left: 155px;} .p-l-156 {padding-left: 156px;} .p-l-157 {padding-left: 157px;} .p-l-158 {padding-left: 158px;} .p-l-159 {padding-left: 159px;} .p-l-160 {padding-left: 160px;} .p-l-161 {padding-left: 161px;} .p-l-162 {padding-left: 162px;} .p-l-163 {padding-left: 163px;} .p-l-164 {padding-left: 164px;} .p-l-165 {padding-left: 165px;} .p-l-166 {padding-left: 166px;} .p-l-167 {padding-left: 167px;} .p-l-168 {padding-left: 168px;} .p-l-169 {padding-left: 169px;} .p-l-170 {padding-left: 170px;} .p-l-171 {padding-left: 171px;} .p-l-172 {padding-left: 172px;} .p-l-173 {padding-left: 173px;} .p-l-174 {padding-left: 174px;} .p-l-175 {padding-left: 175px;} .p-l-176 {padding-left: 176px;} .p-l-177 {padding-left: 177px;} .p-l-178 {padding-left: 178px;} .p-l-179 {padding-left: 179px;} .p-l-180 {padding-left: 180px;} .p-l-181 {padding-left: 181px;} .p-l-182 {padding-left: 182px;} .p-l-183 {padding-left: 183px;} .p-l-184 {padding-left: 184px;} .p-l-185 {padding-left: 185px;} .p-l-186 {padding-left: 186px;} .p-l-187 {padding-left: 187px;} .p-l-188 {padding-left: 188px;} .p-l-189 {padding-left: 189px;} .p-l-190 {padding-left: 190px;} .p-l-191 {padding-left: 191px;} .p-l-192 {padding-left: 192px;} .p-l-193 {padding-left: 193px;} .p-l-194 {padding-left: 194px;} .p-l-195 {padding-left: 195px;} .p-l-196 {padding-left: 196px;} .p-l-197 {padding-left: 197px;} .p-l-198 {padding-left: 198px;} .p-l-199 {padding-left: 199px;} .p-l-200 {padding-left: 200px;} .p-l-201 {padding-left: 201px;} .p-l-202 {padding-left: 202px;} .p-l-203 {padding-left: 203px;} .p-l-204 {padding-left: 204px;} .p-l-205 {padding-left: 205px;} .p-l-206 {padding-left: 206px;} .p-l-207 {padding-left: 207px;} .p-l-208 {padding-left: 208px;} .p-l-209 {padding-left: 209px;} .p-l-210 {padding-left: 210px;} .p-l-211 {padding-left: 211px;} .p-l-212 {padding-left: 212px;} .p-l-213 {padding-left: 213px;} .p-l-214 {padding-left: 214px;} .p-l-215 {padding-left: 215px;} .p-l-216 {padding-left: 216px;} .p-l-217 {padding-left: 217px;} .p-l-218 {padding-left: 218px;} .p-l-219 {padding-left: 219px;} .p-l-220 {padding-left: 220px;} .p-l-221 {padding-left: 221px;} .p-l-222 {padding-left: 222px;} .p-l-223 {padding-left: 223px;} .p-l-224 {padding-left: 224px;} .p-l-225 {padding-left: 225px;} .p-l-226 {padding-left: 226px;} .p-l-227 {padding-left: 227px;} .p-l-228 {padding-left: 228px;} .p-l-229 {padding-left: 229px;} .p-l-230 {padding-left: 230px;} .p-l-231 {padding-left: 231px;} .p-l-232 {padding-left: 232px;} .p-l-233 {padding-left: 233px;} .p-l-234 {padding-left: 234px;} .p-l-235 {padding-left: 235px;} .p-l-236 {padding-left: 236px;} .p-l-237 {padding-left: 237px;} .p-l-238 {padding-left: 238px;} .p-l-239 {padding-left: 239px;} .p-l-240 {padding-left: 240px;} .p-l-241 {padding-left: 241px;} .p-l-242 {padding-left: 242px;} .p-l-243 {padding-left: 243px;} .p-l-244 {padding-left: 244px;} .p-l-245 {padding-left: 245px;} .p-l-246 {padding-left: 246px;} .p-l-247 {padding-left: 247px;} .p-l-248 {padding-left: 248px;} .p-l-249 {padding-left: 249px;} .p-l-250 {padding-left: 250px;} .p-r-0 {padding-right: 0px;} .p-r-1 {padding-right: 1px;} .p-r-2 {padding-right: 2px;} .p-r-3 {padding-right: 3px;} .p-r-4 {padding-right: 4px;} .p-r-5 {padding-right: 5px;} .p-r-6 {padding-right: 6px;} .p-r-7 {padding-right: 7px;} .p-r-8 {padding-right: 8px;} .p-r-9 {padding-right: 9px;} .p-r-10 {padding-right: 10px;} .p-r-11 {padding-right: 11px;} .p-r-12 {padding-right: 12px;} .p-r-13 {padding-right: 13px;} .p-r-14 {padding-right: 14px;} .p-r-15 {padding-right: 15px;} .p-r-16 {padding-right: 16px;} .p-r-17 {padding-right: 17px;} .p-r-18 {padding-right: 18px;} .p-r-19 {padding-right: 19px;} .p-r-20 {padding-right: 20px;} .p-r-21 {padding-right: 21px;} .p-r-22 {padding-right: 22px;} .p-r-23 {padding-right: 23px;} .p-r-24 {padding-right: 24px;} .p-r-25 {padding-right: 25px;} .p-r-26 {padding-right: 26px;} .p-r-27 {padding-right: 27px;} .p-r-28 {padding-right: 28px;} .p-r-29 {padding-right: 29px;} .p-r-30 {padding-right: 30px;} .p-r-31 {padding-right: 31px;} .p-r-32 {padding-right: 32px;} .p-r-33 {padding-right: 33px;} .p-r-34 {padding-right: 34px;} .p-r-35 {padding-right: 35px;} .p-r-36 {padding-right: 36px;} .p-r-37 {padding-right: 37px;} .p-r-38 {padding-right: 38px;} .p-r-39 {padding-right: 39px;} .p-r-40 {padding-right: 40px;} .p-r-41 {padding-right: 41px;} .p-r-42 {padding-right: 42px;} .p-r-43 {padding-right: 43px;} .p-r-44 {padding-right: 44px;} .p-r-45 {padding-right: 45px;} .p-r-46 {padding-right: 46px;} .p-r-47 {padding-right: 47px;} .p-r-48 {padding-right: 48px;} .p-r-49 {padding-right: 49px;} .p-r-50 {padding-right: 50px;} .p-r-51 {padding-right: 51px;} .p-r-52 {padding-right: 52px;} .p-r-53 {padding-right: 53px;} .p-r-54 {padding-right: 54px;} .p-r-55 {padding-right: 55px;} .p-r-56 {padding-right: 56px;} .p-r-57 {padding-right: 57px;} .p-r-58 {padding-right: 58px;} .p-r-59 {padding-right: 59px;} .p-r-60 {padding-right: 60px;} .p-r-61 {padding-right: 61px;} .p-r-62 {padding-right: 62px;} .p-r-63 {padding-right: 63px;} .p-r-64 {padding-right: 64px;} .p-r-65 {padding-right: 65px;} .p-r-66 {padding-right: 66px;} .p-r-67 {padding-right: 67px;} .p-r-68 {padding-right: 68px;} .p-r-69 {padding-right: 69px;} .p-r-70 {padding-right: 70px;} .p-r-71 {padding-right: 71px;} .p-r-72 {padding-right: 72px;} .p-r-73 {padding-right: 73px;} .p-r-74 {padding-right: 74px;} .p-r-75 {padding-right: 75px;} .p-r-76 {padding-right: 76px;} .p-r-77 {padding-right: 77px;} .p-r-78 {padding-right: 78px;} .p-r-79 {padding-right: 79px;} .p-r-80 {padding-right: 80px;} .p-r-81 {padding-right: 81px;} .p-r-82 {padding-right: 82px;} .p-r-83 {padding-right: 83px;} .p-r-84 {padding-right: 84px;} .p-r-85 {padding-right: 85px;} .p-r-86 {padding-right: 86px;} .p-r-87 {padding-right: 87px;} .p-r-88 {padding-right: 88px;} .p-r-89 {padding-right: 89px;} .p-r-90 {padding-right: 90px;} .p-r-91 {padding-right: 91px;} .p-r-92 {padding-right: 92px;} .p-r-93 {padding-right: 93px;} .p-r-94 {padding-right: 94px;} .p-r-95 {padding-right: 95px;} .p-r-96 {padding-right: 96px;} .p-r-97 {padding-right: 97px;} .p-r-98 {padding-right: 98px;} .p-r-99 {padding-right: 99px;} .p-r-100 {padding-right: 100px;} .p-r-101 {padding-right: 101px;} .p-r-102 {padding-right: 102px;} .p-r-103 {padding-right: 103px;} .p-r-104 {padding-right: 104px;} .p-r-105 {padding-right: 105px;} .p-r-106 {padding-right: 106px;} .p-r-107 {padding-right: 107px;} .p-r-108 {padding-right: 108px;} .p-r-109 {padding-right: 109px;} .p-r-110 {padding-right: 110px;} .p-r-111 {padding-right: 111px;} .p-r-112 {padding-right: 112px;} .p-r-113 {padding-right: 113px;} .p-r-114 {padding-right: 114px;} .p-r-115 {padding-right: 115px;} .p-r-116 {padding-right: 116px;} .p-r-117 {padding-right: 117px;} .p-r-118 {padding-right: 118px;} .p-r-119 {padding-right: 119px;} .p-r-120 {padding-right: 120px;} .p-r-121 {padding-right: 121px;} .p-r-122 {padding-right: 122px;} .p-r-123 {padding-right: 123px;} .p-r-124 {padding-right: 124px;} .p-r-125 {padding-right: 125px;} .p-r-126 {padding-right: 126px;} .p-r-127 {padding-right: 127px;} .p-r-128 {padding-right: 128px;} .p-r-129 {padding-right: 129px;} .p-r-130 {padding-right: 130px;} .p-r-131 {padding-right: 131px;} .p-r-132 {padding-right: 132px;} .p-r-133 {padding-right: 133px;} .p-r-134 {padding-right: 134px;} .p-r-135 {padding-right: 135px;} .p-r-136 {padding-right: 136px;} .p-r-137 {padding-right: 137px;} .p-r-138 {padding-right: 138px;} .p-r-139 {padding-right: 139px;} .p-r-140 {padding-right: 140px;} .p-r-141 {padding-right: 141px;} .p-r-142 {padding-right: 142px;} .p-r-143 {padding-right: 143px;} .p-r-144 {padding-right: 144px;} .p-r-145 {padding-right: 145px;} .p-r-146 {padding-right: 146px;} .p-r-147 {padding-right: 147px;} .p-r-148 {padding-right: 148px;} .p-r-149 {padding-right: 149px;} .p-r-150 {padding-right: 150px;} .p-r-151 {padding-right: 151px;} .p-r-152 {padding-right: 152px;} .p-r-153 {padding-right: 153px;} .p-r-154 {padding-right: 154px;} .p-r-155 {padding-right: 155px;} .p-r-156 {padding-right: 156px;} .p-r-157 {padding-right: 157px;} .p-r-158 {padding-right: 158px;} .p-r-159 {padding-right: 159px;} .p-r-160 {padding-right: 160px;} .p-r-161 {padding-right: 161px;} .p-r-162 {padding-right: 162px;} .p-r-163 {padding-right: 163px;} .p-r-164 {padding-right: 164px;} .p-r-165 {padding-right: 165px;} .p-r-166 {padding-right: 166px;} .p-r-167 {padding-right: 167px;} .p-r-168 {padding-right: 168px;} .p-r-169 {padding-right: 169px;} .p-r-170 {padding-right: 170px;} .p-r-171 {padding-right: 171px;} .p-r-172 {padding-right: 172px;} .p-r-173 {padding-right: 173px;} .p-r-174 {padding-right: 174px;} .p-r-175 {padding-right: 175px;} .p-r-176 {padding-right: 176px;} .p-r-177 {padding-right: 177px;} .p-r-178 {padding-right: 178px;} .p-r-179 {padding-right: 179px;} .p-r-180 {padding-right: 180px;} .p-r-181 {padding-right: 181px;} .p-r-182 {padding-right: 182px;} .p-r-183 {padding-right: 183px;} .p-r-184 {padding-right: 184px;} .p-r-185 {padding-right: 185px;} .p-r-186 {padding-right: 186px;} .p-r-187 {padding-right: 187px;} .p-r-188 {padding-right: 188px;} .p-r-189 {padding-right: 189px;} .p-r-190 {padding-right: 190px;} .p-r-191 {padding-right: 191px;} .p-r-192 {padding-right: 192px;} .p-r-193 {padding-right: 193px;} .p-r-194 {padding-right: 194px;} .p-r-195 {padding-right: 195px;} .p-r-196 {padding-right: 196px;} .p-r-197 {padding-right: 197px;} .p-r-198 {padding-right: 198px;} .p-r-199 {padding-right: 199px;} .p-r-200 {padding-right: 200px;} .p-r-201 {padding-right: 201px;} .p-r-202 {padding-right: 202px;} .p-r-203 {padding-right: 203px;} .p-r-204 {padding-right: 204px;} .p-r-205 {padding-right: 205px;} .p-r-206 {padding-right: 206px;} .p-r-207 {padding-right: 207px;} .p-r-208 {padding-right: 208px;} .p-r-209 {padding-right: 209px;} .p-r-210 {padding-right: 210px;} .p-r-211 {padding-right: 211px;} .p-r-212 {padding-right: 212px;} .p-r-213 {padding-right: 213px;} .p-r-214 {padding-right: 214px;} .p-r-215 {padding-right: 215px;} .p-r-216 {padding-right: 216px;} .p-r-217 {padding-right: 217px;} .p-r-218 {padding-right: 218px;} .p-r-219 {padding-right: 219px;} .p-r-220 {padding-right: 220px;} .p-r-221 {padding-right: 221px;} .p-r-222 {padding-right: 222px;} .p-r-223 {padding-right: 223px;} .p-r-224 {padding-right: 224px;} .p-r-225 {padding-right: 225px;} .p-r-226 {padding-right: 226px;} .p-r-227 {padding-right: 227px;} .p-r-228 {padding-right: 228px;} .p-r-229 {padding-right: 229px;} .p-r-230 {padding-right: 230px;} .p-r-231 {padding-right: 231px;} .p-r-232 {padding-right: 232px;} .p-r-233 {padding-right: 233px;} .p-r-234 {padding-right: 234px;} .p-r-235 {padding-right: 235px;} .p-r-236 {padding-right: 236px;} .p-r-237 {padding-right: 237px;} .p-r-238 {padding-right: 238px;} .p-r-239 {padding-right: 239px;} .p-r-240 {padding-right: 240px;} .p-r-241 {padding-right: 241px;} .p-r-242 {padding-right: 242px;} .p-r-243 {padding-right: 243px;} .p-r-244 {padding-right: 244px;} .p-r-245 {padding-right: 245px;} .p-r-246 {padding-right: 246px;} .p-r-247 {padding-right: 247px;} .p-r-248 {padding-right: 248px;} .p-r-249 {padding-right: 249px;} .p-r-250 {padding-right: 250px;} /*[ MARGIN ] /////////////////////////////////////////////////////////// */ .m-t-0 {margin-top: 0px;} .m-t-1 {margin-top: 1px;} .m-t-2 {margin-top: 2px;} .m-t-3 {margin-top: 3px;} .m-t-4 {margin-top: 4px;} .m-t-5 {margin-top: 5px;} .m-t-6 {margin-top: 6px;} .m-t-7 {margin-top: 7px;} .m-t-8 {margin-top: 8px;} .m-t-9 {margin-top: 9px;} .m-t-10 {margin-top: 10px;} .m-t-11 {margin-top: 11px;} .m-t-12 {margin-top: 12px;} .m-t-13 {margin-top: 13px;} .m-t-14 {margin-top: 14px;} .m-t-15 {margin-top: 15px;} .m-t-16 {margin-top: 16px;} .m-t-17 {margin-top: 17px;} .m-t-18 {margin-top: 18px;} .m-t-19 {margin-top: 19px;} .m-t-20 {margin-top: 20px;} .m-t-21 {margin-top: 21px;} .m-t-22 {margin-top: 22px;} .m-t-23 {margin-top: 23px;} .m-t-24 {margin-top: 24px;} .m-t-25 {margin-top: 25px;} .m-t-26 {margin-top: 26px;} .m-t-27 {margin-top: 27px;} .m-t-28 {margin-top: 28px;} .m-t-29 {margin-top: 29px;} .m-t-30 {margin-top: 30px;} .m-t-31 {margin-top: 31px;} .m-t-32 {margin-top: 32px;} .m-t-33 {margin-top: 33px;} .m-t-34 {margin-top: 34px;} .m-t-35 {margin-top: 35px;} .m-t-36 {margin-top: 36px;} .m-t-37 {margin-top: 37px;} .m-t-38 {margin-top: 38px;} .m-t-39 {margin-top: 39px;} .m-t-40 {margin-top: 40px;} .m-t-41 {margin-top: 41px;} .m-t-42 {margin-top: 42px;} .m-t-43 {margin-top: 43px;} .m-t-44 {margin-top: 44px;} .m-t-45 {margin-top: 45px;} .m-t-46 {margin-top: 46px;} .m-t-47 {margin-top: 47px;} .m-t-48 {margin-top: 48px;} .m-t-49 {margin-top: 49px;} .m-t-50 {margin-top: 50px;} .m-t-51 {margin-top: 51px;} .m-t-52 {margin-top: 52px;} .m-t-53 {margin-top: 53px;} .m-t-54 {margin-top: 54px;} .m-t-55 {margin-top: 55px;} .m-t-56 {margin-top: 56px;} .m-t-57 {margin-top: 57px;} .m-t-58 {margin-top: 58px;} .m-t-59 {margin-top: 59px;} .m-t-60 {margin-top: 60px;} .m-t-61 {margin-top: 61px;} .m-t-62 {margin-top: 62px;} .m-t-63 {margin-top: 63px;} .m-t-64 {margin-top: 64px;} .m-t-65 {margin-top: 65px;} .m-t-66 {margin-top: 66px;} .m-t-67 {margin-top: 67px;} .m-t-68 {margin-top: 68px;} .m-t-69 {margin-top: 69px;} .m-t-70 {margin-top: 70px;} .m-t-71 {margin-top: 71px;} .m-t-72 {margin-top: 72px;} .m-t-73 {margin-top: 73px;} .m-t-74 {margin-top: 74px;} .m-t-75 {margin-top: 75px;} .m-t-76 {margin-top: 76px;} .m-t-77 {margin-top: 77px;} .m-t-78 {margin-top: 78px;} .m-t-79 {margin-top: 79px;} .m-t-80 {margin-top: 80px;} .m-t-81 {margin-top: 81px;} .m-t-82 {margin-top: 82px;} .m-t-83 {margin-top: 83px;} .m-t-84 {margin-top: 84px;} .m-t-85 {margin-top: 85px;} .m-t-86 {margin-top: 86px;} .m-t-87 {margin-top: 87px;} .m-t-88 {margin-top: 88px;} .m-t-89 {margin-top: 89px;} .m-t-90 {margin-top: 90px;} .m-t-91 {margin-top: 91px;} .m-t-92 {margin-top: 92px;} .m-t-93 {margin-top: 93px;} .m-t-94 {margin-top: 94px;} .m-t-95 {margin-top: 95px;} .m-t-96 {margin-top: 96px;} .m-t-97 {margin-top: 97px;} .m-t-98 {margin-top: 98px;} .m-t-99 {margin-top: 99px;} .m-t-100 {margin-top: 100px;} .m-t-101 {margin-top: 101px;} .m-t-102 {margin-top: 102px;} .m-t-103 {margin-top: 103px;} .m-t-104 {margin-top: 104px;} .m-t-105 {margin-top: 105px;} .m-t-106 {margin-top: 106px;} .m-t-107 {margin-top: 107px;} .m-t-108 {margin-top: 108px;} .m-t-109 {margin-top: 109px;} .m-t-110 {margin-top: 110px;} .m-t-111 {margin-top: 111px;} .m-t-112 {margin-top: 112px;} .m-t-113 {margin-top: 113px;} .m-t-114 {margin-top: 114px;} .m-t-115 {margin-top: 115px;} .m-t-116 {margin-top: 116px;} .m-t-117 {margin-top: 117px;} .m-t-118 {margin-top: 118px;} .m-t-119 {margin-top: 119px;} .m-t-120 {margin-top: 120px;} .m-t-121 {margin-top: 121px;} .m-t-122 {margin-top: 122px;} .m-t-123 {margin-top: 123px;} .m-t-124 {margin-top: 124px;} .m-t-125 {margin-top: 125px;} .m-t-126 {margin-top: 126px;} .m-t-127 {margin-top: 127px;} .m-t-128 {margin-top: 128px;} .m-t-129 {margin-top: 129px;} .m-t-130 {margin-top: 130px;} .m-t-131 {margin-top: 131px;} .m-t-132 {margin-top: 132px;} .m-t-133 {margin-top: 133px;} .m-t-134 {margin-top: 134px;} .m-t-135 {margin-top: 135px;} .m-t-136 {margin-top: 136px;} .m-t-137 {margin-top: 137px;} .m-t-138 {margin-top: 138px;} .m-t-139 {margin-top: 139px;} .m-t-140 {margin-top: 140px;} .m-t-141 {margin-top: 141px;} .m-t-142 {margin-top: 142px;} .m-t-143 {margin-top: 143px;} .m-t-144 {margin-top: 144px;} .m-t-145 {margin-top: 145px;} .m-t-146 {margin-top: 146px;} .m-t-147 {margin-top: 147px;} .m-t-148 {margin-top: 148px;} .m-t-149 {margin-top: 149px;} .m-t-150 {margin-top: 150px;} .m-t-151 {margin-top: 151px;} .m-t-152 {margin-top: 152px;} .m-t-153 {margin-top: 153px;} .m-t-154 {margin-top: 154px;} .m-t-155 {margin-top: 155px;} .m-t-156 {margin-top: 156px;} .m-t-157 {margin-top: 157px;} .m-t-158 {margin-top: 158px;} .m-t-159 {margin-top: 159px;} .m-t-160 {margin-top: 160px;} .m-t-161 {margin-top: 161px;} .m-t-162 {margin-top: 162px;} .m-t-163 {margin-top: 163px;} .m-t-164 {margin-top: 164px;} .m-t-165 {margin-top: 165px;} .m-t-166 {margin-top: 166px;} .m-t-167 {margin-top: 167px;} .m-t-168 {margin-top: 168px;} .m-t-169 {margin-top: 169px;} .m-t-170 {margin-top: 170px;} .m-t-171 {margin-top: 171px;} .m-t-172 {margin-top: 172px;} .m-t-173 {margin-top: 173px;} .m-t-174 {margin-top: 174px;} .m-t-175 {margin-top: 175px;} .m-t-176 {margin-top: 176px;} .m-t-177 {margin-top: 177px;} .m-t-178 {margin-top: 178px;} .m-t-179 {margin-top: 179px;} .m-t-180 {margin-top: 180px;} .m-t-181 {margin-top: 181px;} .m-t-182 {margin-top: 182px;} .m-t-183 {margin-top: 183px;} .m-t-184 {margin-top: 184px;} .m-t-185 {margin-top: 185px;} .m-t-186 {margin-top: 186px;} .m-t-187 {margin-top: 187px;} .m-t-188 {margin-top: 188px;} .m-t-189 {margin-top: 189px;} .m-t-190 {margin-top: 190px;} .m-t-191 {margin-top: 191px;} .m-t-192 {margin-top: 192px;} .m-t-193 {margin-top: 193px;} .m-t-194 {margin-top: 194px;} .m-t-195 {margin-top: 195px;} .m-t-196 {margin-top: 196px;} .m-t-197 {margin-top: 197px;} .m-t-198 {margin-top: 198px;} .m-t-199 {margin-top: 199px;} .m-t-200 {margin-top: 200px;} .m-t-201 {margin-top: 201px;} .m-t-202 {margin-top: 202px;} .m-t-203 {margin-top: 203px;} .m-t-204 {margin-top: 204px;} .m-t-205 {margin-top: 205px;} .m-t-206 {margin-top: 206px;} .m-t-207 {margin-top: 207px;} .m-t-208 {margin-top: 208px;} .m-t-209 {margin-top: 209px;} .m-t-210 {margin-top: 210px;} .m-t-211 {margin-top: 211px;} .m-t-212 {margin-top: 212px;} .m-t-213 {margin-top: 213px;} .m-t-214 {margin-top: 214px;} .m-t-215 {margin-top: 215px;} .m-t-216 {margin-top: 216px;} .m-t-217 {margin-top: 217px;} .m-t-218 {margin-top: 218px;} .m-t-219 {margin-top: 219px;} .m-t-220 {margin-top: 220px;} .m-t-221 {margin-top: 221px;} .m-t-222 {margin-top: 222px;} .m-t-223 {margin-top: 223px;} .m-t-224 {margin-top: 224px;} .m-t-225 {margin-top: 225px;} .m-t-226 {margin-top: 226px;} .m-t-227 {margin-top: 227px;} .m-t-228 {margin-top: 228px;} .m-t-229 {margin-top: 229px;} .m-t-230 {margin-top: 230px;} .m-t-231 {margin-top: 231px;} .m-t-232 {margin-top: 232px;} .m-t-233 {margin-top: 233px;} .m-t-234 {margin-top: 234px;} .m-t-235 {margin-top: 235px;} .m-t-236 {margin-top: 236px;} .m-t-237 {margin-top: 237px;} .m-t-238 {margin-top: 238px;} .m-t-239 {margin-top: 239px;} .m-t-240 {margin-top: 240px;} .m-t-241 {margin-top: 241px;} .m-t-242 {margin-top: 242px;} .m-t-243 {margin-top: 243px;} .m-t-244 {margin-top: 244px;} .m-t-245 {margin-top: 245px;} .m-t-246 {margin-top: 246px;} .m-t-247 {margin-top: 247px;} .m-t-248 {margin-top: 248px;} .m-t-249 {margin-top: 249px;} .m-t-250 {margin-top: 250px;} .m-b-0 {margin-bottom: 0px;} .m-b-1 {margin-bottom: 1px;} .m-b-2 {margin-bottom: 2px;} .m-b-3 {margin-bottom: 3px;} .m-b-4 {margin-bottom: 4px;} .m-b-5 {margin-bottom: 5px;} .m-b-6 {margin-bottom: 6px;} .m-b-7 {margin-bottom: 7px;} .m-b-8 {margin-bottom: 8px;} .m-b-9 {margin-bottom: 9px;} .m-b-10 {margin-bottom: 10px;} .m-b-11 {margin-bottom: 11px;} .m-b-12 {margin-bottom: 12px;} .m-b-13 {margin-bottom: 13px;} .m-b-14 {margin-bottom: 14px;} .m-b-15 {margin-bottom: 15px;} .m-b-16 {margin-bottom: 16px;} .m-b-17 {margin-bottom: 17px;} .m-b-18 {margin-bottom: 18px;} .m-b-19 {margin-bottom: 19px;} .m-b-20 {margin-bottom: 20px;} .m-b-21 {margin-bottom: 21px;} .m-b-22 {margin-bottom: 22px;} .m-b-23 {margin-bottom: 23px;} .m-b-24 {margin-bottom: 24px;} .m-b-25 {margin-bottom: 25px;} .m-b-26 {margin-bottom: 26px;} .m-b-27 {margin-bottom: 27px;} .m-b-28 {margin-bottom: 28px;} .m-b-29 {margin-bottom: 29px;} .m-b-30 {margin-bottom: 30px;} .m-b-31 {margin-bottom: 31px;} .m-b-32 {margin-bottom: 32px;} .m-b-33 {margin-bottom: 33px;} .m-b-34 {margin-bottom: 34px;} .m-b-35 {margin-bottom: 35px;} .m-b-36 {margin-bottom: 36px;} .m-b-37 {margin-bottom: 37px;} .m-b-38 {margin-bottom: 38px;} .m-b-39 {margin-bottom: 39px;} .m-b-40 {margin-bottom: 40px;} .m-b-41 {margin-bottom: 41px;} .m-b-42 {margin-bottom: 42px;} .m-b-43 {margin-bottom: 43px;} .m-b-44 {margin-bottom: 44px;} .m-b-45 {margin-bottom: 45px;} .m-b-46 {margin-bottom: 46px;} .m-b-47 {margin-bottom: 47px;} .m-b-48 {margin-bottom: 48px;} .m-b-49 {margin-bottom: 49px;} .m-b-50 {margin-bottom: 50px;} .m-b-51 {margin-bottom: 51px;} .m-b-52 {margin-bottom: 52px;} .m-b-53 {margin-bottom: 53px;} .m-b-54 {margin-bottom: 54px;} .m-b-55 {margin-bottom: 55px;} .m-b-56 {margin-bottom: 56px;} .m-b-57 {margin-bottom: 57px;} .m-b-58 {margin-bottom: 58px;} .m-b-59 {margin-bottom: 59px;} .m-b-60 {margin-bottom: 60px;} .m-b-61 {margin-bottom: 61px;} .m-b-62 {margin-bottom: 62px;} .m-b-63 {margin-bottom: 63px;} .m-b-64 {margin-bottom: 64px;} .m-b-65 {margin-bottom: 65px;} .m-b-66 {margin-bottom: 66px;} .m-b-67 {margin-bottom: 67px;} .m-b-68 {margin-bottom: 68px;} .m-b-69 {margin-bottom: 69px;} .m-b-70 {margin-bottom: 70px;} .m-b-71 {margin-bottom: 71px;} .m-b-72 {margin-bottom: 72px;} .m-b-73 {margin-bottom: 73px;} .m-b-74 {margin-bottom: 74px;} .m-b-75 {margin-bottom: 75px;} .m-b-76 {margin-bottom: 76px;} .m-b-77 {margin-bottom: 77px;} .m-b-78 {margin-bottom: 78px;} .m-b-79 {margin-bottom: 79px;} .m-b-80 {margin-bottom: 80px;} .m-b-81 {margin-bottom: 81px;} .m-b-82 {margin-bottom: 82px;} .m-b-83 {margin-bottom: 83px;} .m-b-84 {margin-bottom: 84px;} .m-b-85 {margin-bottom: 85px;} .m-b-86 {margin-bottom: 86px;} .m-b-87 {margin-bottom: 87px;} .m-b-88 {margin-bottom: 88px;} .m-b-89 {margin-bottom: 89px;} .m-b-90 {margin-bottom: 90px;} .m-b-91 {margin-bottom: 91px;} .m-b-92 {margin-bottom: 92px;} .m-b-93 {margin-bottom: 93px;} .m-b-94 {margin-bottom: 94px;} .m-b-95 {margin-bottom: 95px;} .m-b-96 {margin-bottom: 96px;} .m-b-97 {margin-bottom: 97px;} .m-b-98 {margin-bottom: 98px;} .m-b-99 {margin-bottom: 99px;} .m-b-100 {margin-bottom: 100px;} .m-b-101 {margin-bottom: 101px;} .m-b-102 {margin-bottom: 102px;} .m-b-103 {margin-bottom: 103px;} .m-b-104 {margin-bottom: 104px;} .m-b-105 {margin-bottom: 105px;} .m-b-106 {margin-bottom: 106px;} .m-b-107 {margin-bottom: 107px;} .m-b-108 {margin-bottom: 108px;} .m-b-109 {margin-bottom: 109px;} .m-b-110 {margin-bottom: 110px;} .m-b-111 {margin-bottom: 111px;} .m-b-112 {margin-bottom: 112px;} .m-b-113 {margin-bottom: 113px;} .m-b-114 {margin-bottom: 114px;} .m-b-115 {margin-bottom: 115px;} .m-b-116 {margin-bottom: 116px;} .m-b-117 {margin-bottom: 117px;} .m-b-118 {margin-bottom: 118px;} .m-b-119 {margin-bottom: 119px;} .m-b-120 {margin-bottom: 120px;} .m-b-121 {margin-bottom: 121px;} .m-b-122 {margin-bottom: 122px;} .m-b-123 {margin-bottom: 123px;} .m-b-124 {margin-bottom: 124px;} .m-b-125 {margin-bottom: 125px;} .m-b-126 {margin-bottom: 126px;} .m-b-127 {margin-bottom: 127px;} .m-b-128 {margin-bottom: 128px;} .m-b-129 {margin-bottom: 129px;} .m-b-130 {margin-bottom: 130px;} .m-b-131 {margin-bottom: 131px;} .m-b-132 {margin-bottom: 132px;} .m-b-133 {margin-bottom: 133px;} .m-b-134 {margin-bottom: 134px;} .m-b-135 {margin-bottom: 135px;} .m-b-136 {margin-bottom: 136px;} .m-b-137 {margin-bottom: 137px;} .m-b-138 {margin-bottom: 138px;} .m-b-139 {margin-bottom: 139px;} .m-b-140 {margin-bottom: 140px;} .m-b-141 {margin-bottom: 141px;} .m-b-142 {margin-bottom: 142px;} .m-b-143 {margin-bottom: 143px;} .m-b-144 {margin-bottom: 144px;} .m-b-145 {margin-bottom: 145px;} .m-b-146 {margin-bottom: 146px;} .m-b-147 {margin-bottom: 147px;} .m-b-148 {margin-bottom: 148px;} .m-b-149 {margin-bottom: 149px;} .m-b-150 {margin-bottom: 150px;} .m-b-151 {margin-bottom: 151px;} .m-b-152 {margin-bottom: 152px;} .m-b-153 {margin-bottom: 153px;} .m-b-154 {margin-bottom: 154px;} .m-b-155 {margin-bottom: 155px;} .m-b-156 {margin-bottom: 156px;} .m-b-157 {margin-bottom: 157px;} .m-b-158 {margin-bottom: 158px;} .m-b-159 {margin-bottom: 159px;} .m-b-160 {margin-bottom: 160px;} .m-b-161 {margin-bottom: 161px;} .m-b-162 {margin-bottom: 162px;} .m-b-163 {margin-bottom: 163px;} .m-b-164 {margin-bottom: 164px;} .m-b-165 {margin-bottom: 165px;} .m-b-166 {margin-bottom: 166px;} .m-b-167 {margin-bottom: 167px;} .m-b-168 {margin-bottom: 168px;} .m-b-169 {margin-bottom: 169px;} .m-b-170 {margin-bottom: 170px;} .m-b-171 {margin-bottom: 171px;} .m-b-172 {margin-bottom: 172px;} .m-b-173 {margin-bottom: 173px;} .m-b-174 {margin-bottom: 174px;} .m-b-175 {margin-bottom: 175px;} .m-b-176 {margin-bottom: 176px;} .m-b-177 {margin-bottom: 177px;} .m-b-178 {margin-bottom: 178px;} .m-b-179 {margin-bottom: 179px;} .m-b-180 {margin-bottom: 180px;} .m-b-181 {margin-bottom: 181px;} .m-b-182 {margin-bottom: 182px;} .m-b-183 {margin-bottom: 183px;} .m-b-184 {margin-bottom: 184px;} .m-b-185 {margin-bottom: 185px;} .m-b-186 {margin-bottom: 186px;} .m-b-187 {margin-bottom: 187px;} .m-b-188 {margin-bottom: 188px;} .m-b-189 {margin-bottom: 189px;} .m-b-190 {margin-bottom: 190px;} .m-b-191 {margin-bottom: 191px;} .m-b-192 {margin-bottom: 192px;} .m-b-193 {margin-bottom: 193px;} .m-b-194 {margin-bottom: 194px;} .m-b-195 {margin-bottom: 195px;} .m-b-196 {margin-bottom: 196px;} .m-b-197 {margin-bottom: 197px;} .m-b-198 {margin-bottom: 198px;} .m-b-199 {margin-bottom: 199px;} .m-b-200 {margin-bottom: 200px;} .m-b-201 {margin-bottom: 201px;} .m-b-202 {margin-bottom: 202px;} .m-b-203 {margin-bottom: 203px;} .m-b-204 {margin-bottom: 204px;} .m-b-205 {margin-bottom: 205px;} .m-b-206 {margin-bottom: 206px;} .m-b-207 {margin-bottom: 207px;} .m-b-208 {margin-bottom: 208px;} .m-b-209 {margin-bottom: 209px;} .m-b-210 {margin-bottom: 210px;} .m-b-211 {margin-bottom: 211px;} .m-b-212 {margin-bottom: 212px;} .m-b-213 {margin-bottom: 213px;} .m-b-214 {margin-bottom: 214px;} .m-b-215 {margin-bottom: 215px;} .m-b-216 {margin-bottom: 216px;} .m-b-217 {margin-bottom: 217px;} .m-b-218 {margin-bottom: 218px;} .m-b-219 {margin-bottom: 219px;} .m-b-220 {margin-bottom: 220px;} .m-b-221 {margin-bottom: 221px;} .m-b-222 {margin-bottom: 222px;} .m-b-223 {margin-bottom: 223px;} .m-b-224 {margin-bottom: 224px;} .m-b-225 {margin-bottom: 225px;} .m-b-226 {margin-bottom: 226px;} .m-b-227 {margin-bottom: 227px;} .m-b-228 {margin-bottom: 228px;} .m-b-229 {margin-bottom: 229px;} .m-b-230 {margin-bottom: 230px;} .m-b-231 {margin-bottom: 231px;} .m-b-232 {margin-bottom: 232px;} .m-b-233 {margin-bottom: 233px;} .m-b-234 {margin-bottom: 234px;} .m-b-235 {margin-bottom: 235px;} .m-b-236 {margin-bottom: 236px;} .m-b-237 {margin-bottom: 237px;} .m-b-238 {margin-bottom: 238px;} .m-b-239 {margin-bottom: 239px;} .m-b-240 {margin-bottom: 240px;} .m-b-241 {margin-bottom: 241px;} .m-b-242 {margin-bottom: 242px;} .m-b-243 {margin-bottom: 243px;} .m-b-244 {margin-bottom: 244px;} .m-b-245 {margin-bottom: 245px;} .m-b-246 {margin-bottom: 246px;} .m-b-247 {margin-bottom: 247px;} .m-b-248 {margin-bottom: 248px;} .m-b-249 {margin-bottom: 249px;} .m-b-250 {margin-bottom: 250px;} .m-l-0 {margin-left: 0px;} .m-l-1 {margin-left: 1px;} .m-l-2 {margin-left: 2px;} .m-l-3 {margin-left: 3px;} .m-l-4 {margin-left: 4px;} .m-l-5 {margin-left: 5px;} .m-l-6 {margin-left: 6px;} .m-l-7 {margin-left: 7px;} .m-l-8 {margin-left: 8px;} .m-l-9 {margin-left: 9px;} .m-l-10 {margin-left: 10px;} .m-l-11 {margin-left: 11px;} .m-l-12 {margin-left: 12px;} .m-l-13 {margin-left: 13px;} .m-l-14 {margin-left: 14px;} .m-l-15 {margin-left: 15px;} .m-l-16 {margin-left: 16px;} .m-l-17 {margin-left: 17px;} .m-l-18 {margin-left: 18px;} .m-l-19 {margin-left: 19px;} .m-l-20 {margin-left: 20px;} .m-l-21 {margin-left: 21px;} .m-l-22 {margin-left: 22px;} .m-l-23 {margin-left: 23px;} .m-l-24 {margin-left: 24px;} .m-l-25 {margin-left: 25px;} .m-l-26 {margin-left: 26px;} .m-l-27 {margin-left: 27px;} .m-l-28 {margin-left: 28px;} .m-l-29 {margin-left: 29px;} .m-l-30 {margin-left: 30px;} .m-l-31 {margin-left: 31px;} .m-l-32 {margin-left: 32px;} .m-l-33 {margin-left: 33px;} .m-l-34 {margin-left: 34px;} .m-l-35 {margin-left: 35px;} .m-l-36 {margin-left: 36px;} .m-l-37 {margin-left: 37px;} .m-l-38 {margin-left: 38px;} .m-l-39 {margin-left: 39px;} .m-l-40 {margin-left: 40px;} .m-l-41 {margin-left: 41px;} .m-l-42 {margin-left: 42px;} .m-l-43 {margin-left: 43px;} .m-l-44 {margin-left: 44px;} .m-l-45 {margin-left: 45px;} .m-l-46 {margin-left: 46px;} .m-l-47 {margin-left: 47px;} .m-l-48 {margin-left: 48px;} .m-l-49 {margin-left: 49px;} .m-l-50 {margin-left: 50px;} .m-l-51 {margin-left: 51px;} .m-l-52 {margin-left: 52px;} .m-l-53 {margin-left: 53px;} .m-l-54 {margin-left: 54px;} .m-l-55 {margin-left: 55px;} .m-l-56 {margin-left: 56px;} .m-l-57 {margin-left: 57px;} .m-l-58 {margin-left: 58px;} .m-l-59 {margin-left: 59px;} .m-l-60 {margin-left: 60px;} .m-l-61 {margin-left: 61px;} .m-l-62 {margin-left: 62px;} .m-l-63 {margin-left: 63px;} .m-l-64 {margin-left: 64px;} .m-l-65 {margin-left: 65px;} .m-l-66 {margin-left: 66px;} .m-l-67 {margin-left: 67px;} .m-l-68 {margin-left: 68px;} .m-l-69 {margin-left: 69px;} .m-l-70 {margin-left: 70px;} .m-l-71 {margin-left: 71px;} .m-l-72 {margin-left: 72px;} .m-l-73 {margin-left: 73px;} .m-l-74 {margin-left: 74px;} .m-l-75 {margin-left: 75px;} .m-l-76 {margin-left: 76px;} .m-l-77 {margin-left: 77px;} .m-l-78 {margin-left: 78px;} .m-l-79 {margin-left: 79px;} .m-l-80 {margin-left: 80px;} .m-l-81 {margin-left: 81px;} .m-l-82 {margin-left: 82px;} .m-l-83 {margin-left: 83px;} .m-l-84 {margin-left: 84px;} .m-l-85 {margin-left: 85px;} .m-l-86 {margin-left: 86px;} .m-l-87 {margin-left: 87px;} .m-l-88 {margin-left: 88px;} .m-l-89 {margin-left: 89px;} .m-l-90 {margin-left: 90px;} .m-l-91 {margin-left: 91px;} .m-l-92 {margin-left: 92px;} .m-l-93 {margin-left: 93px;} .m-l-94 {margin-left: 94px;} .m-l-95 {margin-left: 95px;} .m-l-96 {margin-left: 96px;} .m-l-97 {margin-left: 97px;} .m-l-98 {margin-left: 98px;} .m-l-99 {margin-left: 99px;} .m-l-100 {margin-left: 100px;} .m-l-101 {margin-left: 101px;} .m-l-102 {margin-left: 102px;} .m-l-103 {margin-left: 103px;} .m-l-104 {margin-left: 104px;} .m-l-105 {margin-left: 105px;} .m-l-106 {margin-left: 106px;} .m-l-107 {margin-left: 107px;} .m-l-108 {margin-left: 108px;} .m-l-109 {margin-left: 109px;} .m-l-110 {margin-left: 110px;} .m-l-111 {margin-left: 111px;} .m-l-112 {margin-left: 112px;} .m-l-113 {margin-left: 113px;} .m-l-114 {margin-left: 114px;} .m-l-115 {margin-left: 115px;} .m-l-116 {margin-left: 116px;} .m-l-117 {margin-left: 117px;} .m-l-118 {margin-left: 118px;} .m-l-119 {margin-left: 119px;} .m-l-120 {margin-left: 120px;} .m-l-121 {margin-left: 121px;} .m-l-122 {margin-left: 122px;} .m-l-123 {margin-left: 123px;} .m-l-124 {margin-left: 124px;} .m-l-125 {margin-left: 125px;} .m-l-126 {margin-left: 126px;} .m-l-127 {margin-left: 127px;} .m-l-128 {margin-left: 128px;} .m-l-129 {margin-left: 129px;} .m-l-130 {margin-left: 130px;} .m-l-131 {margin-left: 131px;} .m-l-132 {margin-left: 132px;} .m-l-133 {margin-left: 133px;} .m-l-134 {margin-left: 134px;} .m-l-135 {margin-left: 135px;} .m-l-136 {margin-left: 136px;} .m-l-137 {margin-left: 137px;} .m-l-138 {margin-left: 138px;} .m-l-139 {margin-left: 139px;} .m-l-140 {margin-left: 140px;} .m-l-141 {margin-left: 141px;} .m-l-142 {margin-left: 142px;} .m-l-143 {margin-left: 143px;} .m-l-144 {margin-left: 144px;} .m-l-145 {margin-left: 145px;} .m-l-146 {margin-left: 146px;} .m-l-147 {margin-left: 147px;} .m-l-148 {margin-left: 148px;} .m-l-149 {margin-left: 149px;} .m-l-150 {margin-left: 150px;} .m-l-151 {margin-left: 151px;} .m-l-152 {margin-left: 152px;} .m-l-153 {margin-left: 153px;} .m-l-154 {margin-left: 154px;} .m-l-155 {margin-left: 155px;} .m-l-156 {margin-left: 156px;} .m-l-157 {margin-left: 157px;} .m-l-158 {margin-left: 158px;} .m-l-159 {margin-left: 159px;} .m-l-160 {margin-left: 160px;} .m-l-161 {margin-left: 161px;} .m-l-162 {margin-left: 162px;} .m-l-163 {margin-left: 163px;} .m-l-164 {margin-left: 164px;} .m-l-165 {margin-left: 165px;} .m-l-166 {margin-left: 166px;} .m-l-167 {margin-left: 167px;} .m-l-168 {margin-left: 168px;} .m-l-169 {margin-left: 169px;} .m-l-170 {margin-left: 170px;} .m-l-171 {margin-left: 171px;} .m-l-172 {margin-left: 172px;} .m-l-173 {margin-left: 173px;} .m-l-174 {margin-left: 174px;} .m-l-175 {margin-left: 175px;} .m-l-176 {margin-left: 176px;} .m-l-177 {margin-left: 177px;} .m-l-178 {margin-left: 178px;} .m-l-179 {margin-left: 179px;} .m-l-180 {margin-left: 180px;} .m-l-181 {margin-left: 181px;} .m-l-182 {margin-left: 182px;} .m-l-183 {margin-left: 183px;} .m-l-184 {margin-left: 184px;} .m-l-185 {margin-left: 185px;} .m-l-186 {margin-left: 186px;} .m-l-187 {margin-left: 187px;} .m-l-188 {margin-left: 188px;} .m-l-189 {margin-left: 189px;} .m-l-190 {margin-left: 190px;} .m-l-191 {margin-left: 191px;} .m-l-192 {margin-left: 192px;} .m-l-193 {margin-left: 193px;} .m-l-194 {margin-left: 194px;} .m-l-195 {margin-left: 195px;} .m-l-196 {margin-left: 196px;} .m-l-197 {margin-left: 197px;} .m-l-198 {margin-left: 198px;} .m-l-199 {margin-left: 199px;} .m-l-200 {margin-left: 200px;} .m-l-201 {margin-left: 201px;} .m-l-202 {margin-left: 202px;} .m-l-203 {margin-left: 203px;} .m-l-204 {margin-left: 204px;} .m-l-205 {margin-left: 205px;} .m-l-206 {margin-left: 206px;} .m-l-207 {margin-left: 207px;} .m-l-208 {margin-left: 208px;} .m-l-209 {margin-left: 209px;} .m-l-210 {margin-left: 210px;} .m-l-211 {margin-left: 211px;} .m-l-212 {margin-left: 212px;} .m-l-213 {margin-left: 213px;} .m-l-214 {margin-left: 214px;} .m-l-215 {margin-left: 215px;} .m-l-216 {margin-left: 216px;} .m-l-217 {margin-left: 217px;} .m-l-218 {margin-left: 218px;} .m-l-219 {margin-left: 219px;} .m-l-220 {margin-left: 220px;} .m-l-221 {margin-left: 221px;} .m-l-222 {margin-left: 222px;} .m-l-223 {margin-left: 223px;} .m-l-224 {margin-left: 224px;} .m-l-225 {margin-left: 225px;} .m-l-226 {margin-left: 226px;} .m-l-227 {margin-left: 227px;} .m-l-228 {margin-left: 228px;} .m-l-229 {margin-left: 229px;} .m-l-230 {margin-left: 230px;} .m-l-231 {margin-left: 231px;} .m-l-232 {margin-left: 232px;} .m-l-233 {margin-left: 233px;} .m-l-234 {margin-left: 234px;} .m-l-235 {margin-left: 235px;} .m-l-236 {margin-left: 236px;} .m-l-237 {margin-left: 237px;} .m-l-238 {margin-left: 238px;} .m-l-239 {margin-left: 239px;} .m-l-240 {margin-left: 240px;} .m-l-241 {margin-left: 241px;} .m-l-242 {margin-left: 242px;} .m-l-243 {margin-left: 243px;} .m-l-244 {margin-left: 244px;} .m-l-245 {margin-left: 245px;} .m-l-246 {margin-left: 246px;} .m-l-247 {margin-left: 247px;} .m-l-248 {margin-left: 248px;} .m-l-249 {margin-left: 249px;} .m-l-250 {margin-left: 250px;} .m-r-0 {margin-right: 0px;} .m-r-1 {margin-right: 1px;} .m-r-2 {margin-right: 2px;} .m-r-3 {margin-right: 3px;} .m-r-4 {margin-right: 4px;} .m-r-5 {margin-right: 5px;} .m-r-6 {margin-right: 6px;} .m-r-7 {margin-right: 7px;} .m-r-8 {margin-right: 8px;} .m-r-9 {margin-right: 9px;} .m-r-10 {margin-right: 10px;} .m-r-11 {margin-right: 11px;} .m-r-12 {margin-right: 12px;} .m-r-13 {margin-right: 13px;} .m-r-14 {margin-right: 14px;} .m-r-15 {margin-right: 15px;} .m-r-16 {margin-right: 16px;} .m-r-17 {margin-right: 17px;} .m-r-18 {margin-right: 18px;} .m-r-19 {margin-right: 19px;} .m-r-20 {margin-right: 20px;} .m-r-21 {margin-right: 21px;} .m-r-22 {margin-right: 22px;} .m-r-23 {margin-right: 23px;} .m-r-24 {margin-right: 24px;} .m-r-25 {margin-right: 25px;} .m-r-26 {margin-right: 26px;} .m-r-27 {margin-right: 27px;} .m-r-28 {margin-right: 28px;} .m-r-29 {margin-right: 29px;} .m-r-30 {margin-right: 30px;} .m-r-31 {margin-right: 31px;} .m-r-32 {margin-right: 32px;} .m-r-33 {margin-right: 33px;} .m-r-34 {margin-right: 34px;} .m-r-35 {margin-right: 35px;} .m-r-36 {margin-right: 36px;} .m-r-37 {margin-right: 37px;} .m-r-38 {margin-right: 38px;} .m-r-39 {margin-right: 39px;} .m-r-40 {margin-right: 40px;} .m-r-41 {margin-right: 41px;} .m-r-42 {margin-right: 42px;} .m-r-43 {margin-right: 43px;} .m-r-44 {margin-right: 44px;} .m-r-45 {margin-right: 45px;} .m-r-46 {margin-right: 46px;} .m-r-47 {margin-right: 47px;} .m-r-48 {margin-right: 48px;} .m-r-49 {margin-right: 49px;} .m-r-50 {margin-right: 50px;} .m-r-51 {margin-right: 51px;} .m-r-52 {margin-right: 52px;} .m-r-53 {margin-right: 53px;} .m-r-54 {margin-right: 54px;} .m-r-55 {margin-right: 55px;} .m-r-56 {margin-right: 56px;} .m-r-57 {margin-right: 57px;} .m-r-58 {margin-right: 58px;} .m-r-59 {margin-right: 59px;} .m-r-60 {margin-right: 60px;} .m-r-61 {margin-right: 61px;} .m-r-62 {margin-right: 62px;} .m-r-63 {margin-right: 63px;} .m-r-64 {margin-right: 64px;} .m-r-65 {margin-right: 65px;} .m-r-66 {margin-right: 66px;} .m-r-67 {margin-right: 67px;} .m-r-68 {margin-right: 68px;} .m-r-69 {margin-right: 69px;} .m-r-70 {margin-right: 70px;} .m-r-71 {margin-right: 71px;} .m-r-72 {margin-right: 72px;} .m-r-73 {margin-right: 73px;} .m-r-74 {margin-right: 74px;} .m-r-75 {margin-right: 75px;} .m-r-76 {margin-right: 76px;} .m-r-77 {margin-right: 77px;} .m-r-78 {margin-right: 78px;} .m-r-79 {margin-right: 79px;} .m-r-80 {margin-right: 80px;} .m-r-81 {margin-right: 81px;} .m-r-82 {margin-right: 82px;} .m-r-83 {margin-right: 83px;} .m-r-84 {margin-right: 84px;} .m-r-85 {margin-right: 85px;} .m-r-86 {margin-right: 86px;} .m-r-87 {margin-right: 87px;} .m-r-88 {margin-right: 88px;} .m-r-89 {margin-right: 89px;} .m-r-90 {margin-right: 90px;} .m-r-91 {margin-right: 91px;} .m-r-92 {margin-right: 92px;} .m-r-93 {margin-right: 93px;} .m-r-94 {margin-right: 94px;} .m-r-95 {margin-right: 95px;} .m-r-96 {margin-right: 96px;} .m-r-97 {margin-right: 97px;} .m-r-98 {margin-right: 98px;} .m-r-99 {margin-right: 99px;} .m-r-100 {margin-right: 100px;} .m-r-101 {margin-right: 101px;} .m-r-102 {margin-right: 102px;} .m-r-103 {margin-right: 103px;} .m-r-104 {margin-right: 104px;} .m-r-105 {margin-right: 105px;} .m-r-106 {margin-right: 106px;} .m-r-107 {margin-right: 107px;} .m-r-108 {margin-right: 108px;} .m-r-109 {margin-right: 109px;} .m-r-110 {margin-right: 110px;} .m-r-111 {margin-right: 111px;} .m-r-112 {margin-right: 112px;} .m-r-113 {margin-right: 113px;} .m-r-114 {margin-right: 114px;} .m-r-115 {margin-right: 115px;} .m-r-116 {margin-right: 116px;} .m-r-117 {margin-right: 117px;} .m-r-118 {margin-right: 118px;} .m-r-119 {margin-right: 119px;} .m-r-120 {margin-right: 120px;} .m-r-121 {margin-right: 121px;} .m-r-122 {margin-right: 122px;} .m-r-123 {margin-right: 123px;} .m-r-124 {margin-right: 124px;} .m-r-125 {margin-right: 125px;} .m-r-126 {margin-right: 126px;} .m-r-127 {margin-right: 127px;} .m-r-128 {margin-right: 128px;} .m-r-129 {margin-right: 129px;} .m-r-130 {margin-right: 130px;} .m-r-131 {margin-right: 131px;} .m-r-132 {margin-right: 132px;} .m-r-133 {margin-right: 133px;} .m-r-134 {margin-right: 134px;} .m-r-135 {margin-right: 135px;} .m-r-136 {margin-right: 136px;} .m-r-137 {margin-right: 137px;} .m-r-138 {margin-right: 138px;} .m-r-139 {margin-right: 139px;} .m-r-140 {margin-right: 140px;} .m-r-141 {margin-right: 141px;} .m-r-142 {margin-right: 142px;} .m-r-143 {margin-right: 143px;} .m-r-144 {margin-right: 144px;} .m-r-145 {margin-right: 145px;} .m-r-146 {margin-right: 146px;} .m-r-147 {margin-right: 147px;} .m-r-148 {margin-right: 148px;} .m-r-149 {margin-right: 149px;} .m-r-150 {margin-right: 150px;} .m-r-151 {margin-right: 151px;} .m-r-152 {margin-right: 152px;} .m-r-153 {margin-right: 153px;} .m-r-154 {margin-right: 154px;} .m-r-155 {margin-right: 155px;} .m-r-156 {margin-right: 156px;} .m-r-157 {margin-right: 157px;} .m-r-158 {margin-right: 158px;} .m-r-159 {margin-right: 159px;} .m-r-160 {margin-right: 160px;} .m-r-161 {margin-right: 161px;} .m-r-162 {margin-right: 162px;} .m-r-163 {margin-right: 163px;} .m-r-164 {margin-right: 164px;} .m-r-165 {margin-right: 165px;} .m-r-166 {margin-right: 166px;} .m-r-167 {margin-right: 167px;} .m-r-168 {margin-right: 168px;} .m-r-169 {margin-right: 169px;} .m-r-170 {margin-right: 170px;} .m-r-171 {margin-right: 171px;} .m-r-172 {margin-right: 172px;} .m-r-173 {margin-right: 173px;} .m-r-174 {margin-right: 174px;} .m-r-175 {margin-right: 175px;} .m-r-176 {margin-right: 176px;} .m-r-177 {margin-right: 177px;} .m-r-178 {margin-right: 178px;} .m-r-179 {margin-right: 179px;} .m-r-180 {margin-right: 180px;} .m-r-181 {margin-right: 181px;} .m-r-182 {margin-right: 182px;} .m-r-183 {margin-right: 183px;} .m-r-184 {margin-right: 184px;} .m-r-185 {margin-right: 185px;} .m-r-186 {margin-right: 186px;} .m-r-187 {margin-right: 187px;} .m-r-188 {margin-right: 188px;} .m-r-189 {margin-right: 189px;} .m-r-190 {margin-right: 190px;} .m-r-191 {margin-right: 191px;} .m-r-192 {margin-right: 192px;} .m-r-193 {margin-right: 193px;} .m-r-194 {margin-right: 194px;} .m-r-195 {margin-right: 195px;} .m-r-196 {margin-right: 196px;} .m-r-197 {margin-right: 197px;} .m-r-198 {margin-right: 198px;} .m-r-199 {margin-right: 199px;} .m-r-200 {margin-right: 200px;} .m-r-201 {margin-right: 201px;} .m-r-202 {margin-right: 202px;} .m-r-203 {margin-right: 203px;} .m-r-204 {margin-right: 204px;} .m-r-205 {margin-right: 205px;} .m-r-206 {margin-right: 206px;} .m-r-207 {margin-right: 207px;} .m-r-208 {margin-right: 208px;} .m-r-209 {margin-right: 209px;} .m-r-210 {margin-right: 210px;} .m-r-211 {margin-right: 211px;} .m-r-212 {margin-right: 212px;} .m-r-213 {margin-right: 213px;} .m-r-214 {margin-right: 214px;} .m-r-215 {margin-right: 215px;} .m-r-216 {margin-right: 216px;} .m-r-217 {margin-right: 217px;} .m-r-218 {margin-right: 218px;} .m-r-219 {margin-right: 219px;} .m-r-220 {margin-right: 220px;} .m-r-221 {margin-right: 221px;} .m-r-222 {margin-right: 222px;} .m-r-223 {margin-right: 223px;} .m-r-224 {margin-right: 224px;} .m-r-225 {margin-right: 225px;} .m-r-226 {margin-right: 226px;} .m-r-227 {margin-right: 227px;} .m-r-228 {margin-right: 228px;} .m-r-229 {margin-right: 229px;} .m-r-230 {margin-right: 230px;} .m-r-231 {margin-right: 231px;} .m-r-232 {margin-right: 232px;} .m-r-233 {margin-right: 233px;} .m-r-234 {margin-right: 234px;} .m-r-235 {margin-right: 235px;} .m-r-236 {margin-right: 236px;} .m-r-237 {margin-right: 237px;} .m-r-238 {margin-right: 238px;} .m-r-239 {margin-right: 239px;} .m-r-240 {margin-right: 240px;} .m-r-241 {margin-right: 241px;} .m-r-242 {margin-right: 242px;} .m-r-243 {margin-right: 243px;} .m-r-244 {margin-right: 244px;} .m-r-245 {margin-right: 245px;} .m-r-246 {margin-right: 246px;} .m-r-247 {margin-right: 247px;} .m-r-248 {margin-right: 248px;} .m-r-249 {margin-right: 249px;} .m-r-250 {margin-right: 250px;} .m-l-r-auto {margin-left: auto; margin-right: auto;} .m-l-auto {margin-left: auto;} .m-r-auto {margin-right: auto;} /*[ TEXT ] /////////////////////////////////////////////////////////// */ /* ------------------------------------ */ .text-white {color: white;} .text-black {color: black;} .text-hov-white:hover {color: white;} /* ------------------------------------ */ .text-up {text-transform: uppercase;} /* ------------------------------------ */ .text-center {text-align: center;} .text-left {text-align: left;} .text-right {text-align: right;} .text-middle {vertical-align: middle;} /* ------------------------------------ */ .lh-1-0 {line-height: 1.0;} .lh-1-1 {line-height: 1.1;} .lh-1-2 {line-height: 1.2;} .lh-1-3 {line-height: 1.3;} .lh-1-4 {line-height: 1.4;} .lh-1-5 {line-height: 1.5;} .lh-1-6 {line-height: 1.6;} .lh-1-7 {line-height: 1.7;} .lh-1-8 {line-height: 1.8;} .lh-1-9 {line-height: 1.9;} .lh-2-0 {line-height: 2.0;} .lh-2-1 {line-height: 2.1;} .lh-2-2 {line-height: 2.2;} .lh-2-3 {line-height: 2.3;} .lh-2-4 {line-height: 2.4;} .lh-2-5 {line-height: 2.5;} .lh-2-6 {line-height: 2.6;} .lh-2-7 {line-height: 2.7;} .lh-2-8 {line-height: 2.8;} .lh-2-9 {line-height: 2.9;} /*[ SHAPE ] /////////////////////////////////////////////////////////// */ /*[ Display ] ----------------------------------------------------------- */ .dis-none {display: none;} .dis-block {display: block;} .dis-inline {display: inline;} .dis-inline-block {display: inline-block;} .dis-flex { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; } /*[ Position ] ----------------------------------------------------------- */ .pos-relative {position: relative;} .pos-absolute {position: absolute;} .pos-fixed {position: fixed;} /*[ float ] ----------------------------------------------------------- */ .float-l {float: left;} .float-r {float: right;} /*[ Width & Height ] ----------------------------------------------------------- */ .sizefull { width: 100%; height: 100%; } .w-full {width: 100%;} .h-full {height: 100%;} .max-w-full {max-width: 100%;} .max-h-full {max-height: 100%;} .min-w-full {min-width: 100%;} .min-h-full {min-height: 100%;} /*[ Top Bottom Left Right ] ----------------------------------------------------------- */ .top-0 {top: 0;} .bottom-0 {bottom: 0;} .left-0 {left: 0;} .right-0 {right: 0;} .top-auto {top: auto;} .bottom-auto {bottom: auto;} .left-auto {left: auto;} .right-auto {right: auto;} /*[ Opacity ] ----------------------------------------------------------- */ .op-0-0 {opacity: 0;} .op-0-1 {opacity: 0.1;} .op-0-2 {opacity: 0.2;} .op-0-3 {opacity: 0.3;} .op-0-4 {opacity: 0.4;} .op-0-5 {opacity: 0.5;} .op-0-6 {opacity: 0.6;} .op-0-7 {opacity: 0.7;} .op-0-8 {opacity: 0.8;} .op-0-9 {opacity: 0.9;} .op-1-0 {opacity: 1;} /*[ Background ] ----------------------------------------------------------- */ .bgwhite {background-color: white;} .bgblack {background-color: black;} /*[ Wrap Picture ] ----------------------------------------------------------- */ .wrap-pic-w img {width: 100%;} .wrap-pic-max-w img {max-width: 100%;} /* ------------------------------------ */ .wrap-pic-h img {height: 100%;} .wrap-pic-max-h img {max-height: 100%;} /* ------------------------------------ */ .wrap-pic-cir { border-radius: 50%; overflow: hidden; } .wrap-pic-cir img { width: 100%; } /*[ Hover ] ----------------------------------------------------------- */ .hov-pointer:hover {cursor: pointer;} /* ------------------------------------ */ .hov-img-zoom { display: block; overflow: hidden; } .hov-img-zoom img{ width: 100%; -webkit-transition: all 0.6s; -o-transition: all 0.6s; -moz-transition: all 0.6s; transition: all 0.6s; } .hov-img-zoom:hover img { -webkit-transform: scale(1.1); -moz-transform: scale(1.1); -ms-transform: scale(1.1); -o-transform: scale(1.1); transform: scale(1.1); } /*[ ] ----------------------------------------------------------- */ .bo-cir {border-radius: 50%;} .of-hidden {overflow: hidden;} .visible-false {visibility: hidden;} .visible-true {visibility: visible;} /*[ Transition ] ----------------------------------------------------------- */ .trans-0-1 { -webkit-transition: all 0.1s; -o-transition: all 0.1s; -moz-transition: all 0.1s; transition: all 0.1s; } .trans-0-2 { -webkit-transition: all 0.2s; -o-transition: all 0.2s; -moz-transition: all 0.2s; transition: all 0.2s; } .trans-0-3 { -webkit-transition: all 0.3s; -o-transition: all 0.3s; -moz-transition: all 0.3s; transition: all 0.3s; } .trans-0-4 { -webkit-transition: all 0.4s; -o-transition: all 0.4s; -moz-transition: all 0.4s; transition: all 0.4s; } .trans-0-5 { -webkit-transition: all 0.5s; -o-transition: all 0.5s; -moz-transition: all 0.5s; transition: all 0.5s; } .trans-0-6 { -webkit-transition: all 0.6s; -o-transition: all 0.6s; -moz-transition: all 0.6s; transition: all 0.6s; } .trans-0-9 { -webkit-transition: all 0.9s; -o-transition: all 0.9s; -moz-transition: all 0.9s; transition: all 0.9s; } .trans-1-0 { -webkit-transition: all 1s; -o-transition: all 1s; -moz-transition: all 1s; transition: all 1s; } /*[ Layout ] /////////////////////////////////////////////////////////// */ /*[ Flex ] ----------------------------------------------------------- */ /* ------------------------------------ */ .flex-w { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-wrap: wrap; -moz-flex-wrap: wrap; -ms-flex-wrap: wrap; -o-flex-wrap: wrap; flex-wrap: wrap; } /* ------------------------------------ */ .flex-l { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: flex-start; } .flex-r { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: flex-end; } .flex-c { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: center; } .flex-sa { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: space-around; } .flex-sb { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: space-between; } /* ------------------------------------ */ .flex-t { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -ms-align-items: flex-start; align-items: flex-start; } .flex-b { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -ms-align-items: flex-end; align-items: flex-end; } .flex-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -ms-align-items: center; align-items: center; } .flex-str { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -ms-align-items: stretch; align-items: stretch; } /* ------------------------------------ */ .flex-row { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: row; -moz-flex-direction: row; -ms-flex-direction: row; -o-flex-direction: row; flex-direction: row; } .flex-row-rev { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: row-reverse; -moz-flex-direction: row-reverse; -ms-flex-direction: row-reverse; -o-flex-direction: row-reverse; flex-direction: row-reverse; } .flex-col { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; } .flex-col-rev { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column-reverse; -moz-flex-direction: column-reverse; -ms-flex-direction: column-reverse; -o-flex-direction: column-reverse; flex-direction: column-reverse; } /* ------------------------------------ */ .flex-c-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: center; -ms-align-items: center; align-items: center; } .flex-c-t { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: center; -ms-align-items: flex-start; align-items: flex-start; } .flex-c-b { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: center; -ms-align-items: flex-end; align-items: flex-end; } .flex-c-str { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: center; -ms-align-items: stretch; align-items: stretch; } .flex-l-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: flex-start; -ms-align-items: center; align-items: center; } .flex-r-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: flex-end; -ms-align-items: center; align-items: center; } .flex-sa-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: space-around; -ms-align-items: center; align-items: center; } .flex-sb-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; justify-content: space-between; -ms-align-items: center; align-items: center; } /* ------------------------------------ */ .flex-col-l { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; -ms-align-items: flex-start; align-items: flex-start; } .flex-col-r { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; -ms-align-items: flex-end; align-items: flex-end; } .flex-col-c { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; -ms-align-items: center; align-items: center; } .flex-col-l-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; -ms-align-items: flex-start; align-items: flex-start; justify-content: center; } .flex-col-r-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; -ms-align-items: flex-end; align-items: flex-end; justify-content: center; } .flex-col-c-m { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; -ms-align-items: center; align-items: center; justify-content: center; } .flex-col-str { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; -ms-align-items: stretch; align-items: stretch; } .flex-col-sb { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; justify-content: space-between; } /* ------------------------------------ */ .flex-col-rev-l { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column-reverse; -moz-flex-direction: column-reverse; -ms-flex-direction: column-reverse; -o-flex-direction: column-reverse; flex-direction: column-reverse; -ms-align-items: flex-start; align-items: flex-start; } .flex-col-rev-r { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column-reverse; -moz-flex-direction: column-reverse; -ms-flex-direction: column-reverse; -o-flex-direction: column-reverse; flex-direction: column-reverse; -ms-align-items: flex-end; align-items: flex-end; } .flex-col-rev-c { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column-reverse; -moz-flex-direction: column-reverse; -ms-flex-direction: column-reverse; -o-flex-direction: column-reverse; flex-direction: column-reverse; -ms-align-items: center; align-items: center; } .flex-col-rev-str { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-flex-direction: column-reverse; -moz-flex-direction: column-reverse; -ms-flex-direction: column-reverse; -o-flex-direction: column-reverse; flex-direction: column-reverse; -ms-align-items: stretch; align-items: stretch; } /*[ Absolute ] ----------------------------------------------------------- */ .ab-c-m { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); -o-transform: translate(-50%, -50%); transform: translate(-50%, -50%); } .ab-c-t { position: absolute; top: 0px; left: 50%; -webkit-transform: translateX(-50%); -moz-transform: translateX(-50%); -ms-transform: translateX(-50%); -o-transform: translateX(-50%); transform: translateX(-50%); } .ab-c-b { position: absolute; bottom: 0px; left: 50%; -webkit-transform: translateX(-50%); -moz-transform: translateX(-50%); -ms-transform: translateX(-50%); -o-transform: translateX(-50%); transform: translateX(-50%); } .ab-l-m { position: absolute; left: 0px; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); -o-transform: translateY(-50%); transform: translateY(-50%); } .ab-r-m { position: absolute; right: 0px; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); -o-transform: translateY(-50%); transform: translateY(-50%); } .ab-t-l { position: absolute; left: 0px; top: 0px; } .ab-t-r { position: absolute; right: 0px; top: 0px; } .ab-b-l { position: absolute; left: 0px; bottom: 0px; } .ab-b-r { position: absolute; right: 0px; bottom: 0px; } ================================================ FILE: static/fonts/font-awesome-4.7.0/HELP-US-OUT.txt ================================================ I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, comprehensive icon sets or copy and paste your own. Please. Check it out. -Dave Gandy ================================================ FILE: static/fonts/font-awesome-4.7.0/css/font-awesome.css ================================================ /*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */ /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; src: url('../fonts/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; } /* makes the font 33% larger relative to the icon container */ .fa-lg { font-size: 1.33333333em; line-height: 0.75em; vertical-align: -15%; } .fa-2x { font-size: 2em; } .fa-3x { font-size: 3em; } .fa-4x { font-size: 4em; } .fa-5x { font-size: 5em; } .fa-fw { width: 1.28571429em; text-align: center; } .fa-ul { 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: 0.14285714em; text-align: center; } .fa-li.fa-lg { left: -1.85714286em; } .fa-border { padding: .2em .25em .15em; border: solid 0.08em #eeeeee; 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; } /* Deprecated as of 4.4.0 */ .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: #ffffff; } /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .fa-glass:before { content: "\f000"; } .fa-music:before { content: "\f001"; } .fa-search:before { content: "\f002"; } .fa-envelope-o:before { content: "\f003"; } .fa-heart:before { content: "\f004"; } .fa-star:before { content: "\f005"; } .fa-star-o:before { content: "\f006"; } .fa-user:before { content: "\f007"; } .fa-film:before { content: "\f008"; } .fa-th-large:before { content: "\f009"; } .fa-th:before { content: "\f00a"; } .fa-th-list:before { content: "\f00b"; } .fa-check:before { content: "\f00c"; } .fa-remove:before, .fa-close:before, .fa-times:before { content: "\f00d"; } .fa-search-plus:before { content: "\f00e"; } .fa-search-minus:before { content: "\f010"; } .fa-power-off:before { content: "\f011"; } .fa-signal:before { content: "\f012"; } .fa-gear:before, .fa-cog:before { content: "\f013"; } .fa-trash-o:before { content: "\f014"; } .fa-home:before { content: "\f015"; } .fa-file-o:before { content: "\f016"; } .fa-clock-o:before { content: "\f017"; } .fa-road:before { content: "\f018"; } .fa-download:before { content: "\f019"; } .fa-arrow-circle-o-down:before { content: "\f01a"; } .fa-arrow-circle-o-up:before { content: "\f01b"; } .fa-inbox:before { content: "\f01c"; } .fa-play-circle-o:before { content: "\f01d"; } .fa-rotate-right:before, .fa-repeat:before { content: "\f01e"; } .fa-refresh:before { content: "\f021"; } .fa-list-alt:before { content: "\f022"; } .fa-lock:before { content: "\f023"; } .fa-flag:before { content: "\f024"; } .fa-headphones:before { content: "\f025"; } .fa-volume-off:before { content: "\f026"; } .fa-volume-down:before { content: "\f027"; } .fa-volume-up:before { content: "\f028"; } .fa-qrcode:before { content: "\f029"; } .fa-barcode:before { content: "\f02a"; } .fa-tag:before { content: "\f02b"; } .fa-tags:before { content: "\f02c"; } .fa-book:before { content: "\f02d"; } .fa-bookmark:before { content: "\f02e"; } .fa-print:before { content: "\f02f"; } .fa-camera:before { content: "\f030"; } .fa-font:before { content: "\f031"; } .fa-bold:before { content: "\f032"; } .fa-italic:before { content: "\f033"; } .fa-text-height:before { content: "\f034"; } .fa-text-width:before { content: "\f035"; } .fa-align-left:before { content: "\f036"; } .fa-align-center:before { content: "\f037"; } .fa-align-right:before { content: "\f038"; } .fa-align-justify:before { content: "\f039"; } .fa-list:before { content: "\f03a"; } .fa-dedent:before, .fa-outdent:before { content: "\f03b"; } .fa-indent:before { content: "\f03c"; } .fa-video-camera:before { content: "\f03d"; } .fa-photo:before, .fa-image:before, .fa-picture-o:before { content: "\f03e"; } .fa-pencil:before { content: "\f040"; } .fa-map-marker:before { content: "\f041"; } .fa-adjust:before { content: "\f042"; } .fa-tint:before { content: "\f043"; } .fa-edit:before, .fa-pencil-square-o:before { content: "\f044"; } .fa-share-square-o:before { content: "\f045"; } .fa-check-square-o:before { content: "\f046"; } .fa-arrows:before { content: "\f047"; } .fa-step-backward:before { content: "\f048"; } .fa-fast-backward:before { content: "\f049"; } .fa-backward:before { content: "\f04a"; } .fa-play:before { content: "\f04b"; } .fa-pause:before { content: "\f04c"; } .fa-stop:before { content: "\f04d"; } .fa-forward:before { content: "\f04e"; } .fa-fast-forward:before { content: "\f050"; } .fa-step-forward:before { content: "\f051"; } .fa-eject:before { content: "\f052"; } .fa-chevron-left:before { content: "\f053"; } .fa-chevron-right:before { content: "\f054"; } .fa-plus-circle:before { content: "\f055"; } .fa-minus-circle:before { content: "\f056"; } .fa-times-circle:before { content: "\f057"; } .fa-check-circle:before { content: "\f058"; } .fa-question-circle:before { content: "\f059"; } .fa-info-circle:before { content: "\f05a"; } .fa-crosshairs:before { content: "\f05b"; } .fa-times-circle-o:before { content: "\f05c"; } .fa-check-circle-o:before { content: "\f05d"; } .fa-ban:before { content: "\f05e"; } .fa-arrow-left:before { content: "\f060"; } .fa-arrow-right:before { content: "\f061"; } .fa-arrow-up:before { content: "\f062"; } .fa-arrow-down:before { content: "\f063"; } .fa-mail-forward:before, .fa-share:before { content: "\f064"; } .fa-expand:before { content: "\f065"; } .fa-compress:before { content: "\f066"; } .fa-plus:before { content: "\f067"; } .fa-minus:before { content: "\f068"; } .fa-asterisk:before { content: "\f069"; } .fa-exclamation-circle:before { content: "\f06a"; } .fa-gift:before { content: "\f06b"; } .fa-leaf:before { content: "\f06c"; } .fa-fire:before { content: "\f06d"; } .fa-eye:before { content: "\f06e"; } .fa-eye-slash:before { content: "\f070"; } .fa-warning:before, .fa-exclamation-triangle:before { content: "\f071"; } .fa-plane:before { content: "\f072"; } .fa-calendar:before { content: "\f073"; } .fa-random:before { content: "\f074"; } .fa-comment:before { content: "\f075"; } .fa-magnet:before { content: "\f076"; } .fa-chevron-up:before { content: "\f077"; } .fa-chevron-down:before { content: "\f078"; } .fa-retweet:before { content: "\f079"; } .fa-shopping-cart:before { content: "\f07a"; } .fa-folder:before { content: "\f07b"; } .fa-folder-open:before { content: "\f07c"; } .fa-arrows-v:before { content: "\f07d"; } .fa-arrows-h:before { content: "\f07e"; } .fa-bar-chart-o:before, .fa-bar-chart:before { content: "\f080"; } .fa-twitter-square:before { content: "\f081"; } .fa-facebook-square:before { content: "\f082"; } .fa-camera-retro:before { content: "\f083"; } .fa-key:before { content: "\f084"; } .fa-gears:before, .fa-cogs:before { content: "\f085"; } .fa-comments:before { content: "\f086"; } .fa-thumbs-o-up:before { content: "\f087"; } .fa-thumbs-o-down:before { content: "\f088"; } .fa-star-half:before { content: "\f089"; } .fa-heart-o:before { content: "\f08a"; } .fa-sign-out:before { content: "\f08b"; } .fa-linkedin-square:before { content: "\f08c"; } .fa-thumb-tack:before { content: "\f08d"; } .fa-external-link:before { content: "\f08e"; } .fa-sign-in:before { content: "\f090"; } .fa-trophy:before { content: "\f091"; } .fa-github-square:before { content: "\f092"; } .fa-upload:before { content: "\f093"; } .fa-lemon-o:before { content: "\f094"; } .fa-phone:before { content: "\f095"; } .fa-square-o:before { content: "\f096"; } .fa-bookmark-o:before { content: "\f097"; } .fa-phone-square:before { content: "\f098"; } .fa-twitter:before { content: "\f099"; } .fa-facebook-f:before, .fa-facebook:before { content: "\f09a"; } .fa-github:before { content: "\f09b"; } .fa-unlock:before { content: "\f09c"; } .fa-credit-card:before { content: "\f09d"; } .fa-feed:before, .fa-rss:before { content: "\f09e"; } .fa-hdd-o:before { content: "\f0a0"; } .fa-bullhorn:before { content: "\f0a1"; } .fa-bell:before { content: "\f0f3"; } .fa-certificate:before { content: "\f0a3"; } .fa-hand-o-right:before { content: "\f0a4"; } .fa-hand-o-left:before { content: "\f0a5"; } .fa-hand-o-up:before { content: "\f0a6"; } .fa-hand-o-down:before { content: "\f0a7"; } .fa-arrow-circle-left:before { content: "\f0a8"; } .fa-arrow-circle-right:before { content: "\f0a9"; } .fa-arrow-circle-up:before { content: "\f0aa"; } .fa-arrow-circle-down:before { content: "\f0ab"; } .fa-globe:before { content: "\f0ac"; } .fa-wrench:before { content: "\f0ad"; } .fa-tasks:before { content: "\f0ae"; } .fa-filter:before { content: "\f0b0"; } .fa-briefcase:before { content: "\f0b1"; } .fa-arrows-alt:before { content: "\f0b2"; } .fa-group:before, .fa-users:before { content: "\f0c0"; } .fa-chain:before, .fa-link:before { content: "\f0c1"; } .fa-cloud:before { content: "\f0c2"; } .fa-flask:before { content: "\f0c3"; } .fa-cut:before, .fa-scissors:before { content: "\f0c4"; } .fa-copy:before, .fa-files-o:before { content: "\f0c5"; } .fa-paperclip:before { content: "\f0c6"; } .fa-save:before, .fa-floppy-o:before { content: "\f0c7"; } .fa-square:before { content: "\f0c8"; } .fa-navicon:before, .fa-reorder:before, .fa-bars:before { content: "\f0c9"; } .fa-list-ul:before { content: "\f0ca"; } .fa-list-ol:before { content: "\f0cb"; } .fa-strikethrough:before { content: "\f0cc"; } .fa-underline:before { content: "\f0cd"; } .fa-table:before { content: "\f0ce"; } .fa-magic:before { content: "\f0d0"; } .fa-truck:before { content: "\f0d1"; } .fa-pinterest:before { content: "\f0d2"; } .fa-pinterest-square:before { content: "\f0d3"; } .fa-google-plus-square:before { content: "\f0d4"; } .fa-google-plus:before { content: "\f0d5"; } .fa-money:before { content: "\f0d6"; } .fa-caret-down:before { content: "\f0d7"; } .fa-caret-up:before { content: "\f0d8"; } .fa-caret-left:before { content: "\f0d9"; } .fa-caret-right:before { content: "\f0da"; } .fa-columns:before { content: "\f0db"; } .fa-unsorted:before, .fa-sort:before { content: "\f0dc"; } .fa-sort-down:before, .fa-sort-desc:before { content: "\f0dd"; } .fa-sort-up:before, .fa-sort-asc:before { content: "\f0de"; } .fa-envelope:before { content: "\f0e0"; } .fa-linkedin:before { content: "\f0e1"; } .fa-rotate-left:before, .fa-undo:before { content: "\f0e2"; } .fa-legal:before, .fa-gavel:before { content: "\f0e3"; } .fa-dashboard:before, .fa-tachometer:before { content: "\f0e4"; } .fa-comment-o:before { content: "\f0e5"; } .fa-comments-o:before { content: "\f0e6"; } .fa-flash:before, .fa-bolt:before { content: "\f0e7"; } .fa-sitemap:before { content: "\f0e8"; } .fa-umbrella:before { content: "\f0e9"; } .fa-paste:before, .fa-clipboard:before { content: "\f0ea"; } .fa-lightbulb-o:before { content: "\f0eb"; } .fa-exchange:before { content: "\f0ec"; } .fa-cloud-download:before { content: "\f0ed"; } .fa-cloud-upload:before { content: "\f0ee"; } .fa-user-md:before { content: "\f0f0"; } .fa-stethoscope:before { content: "\f0f1"; } .fa-suitcase:before { content: "\f0f2"; } .fa-bell-o:before { content: "\f0a2"; } .fa-coffee:before { content: "\f0f4"; } .fa-cutlery:before { content: "\f0f5"; } .fa-file-text-o:before { content: "\f0f6"; } .fa-building-o:before { content: "\f0f7"; } .fa-hospital-o:before { content: "\f0f8"; } .fa-ambulance:before { content: "\f0f9"; } .fa-medkit:before { content: "\f0fa"; } .fa-fighter-jet:before { content: "\f0fb"; } .fa-beer:before { content: "\f0fc"; } .fa-h-square:before { content: "\f0fd"; } .fa-plus-square:before { content: "\f0fe"; } .fa-angle-double-left:before { content: "\f100"; } .fa-angle-double-right:before { content: "\f101"; } .fa-angle-double-up:before { content: "\f102"; } .fa-angle-double-down:before { content: "\f103"; } .fa-angle-left:before { content: "\f104"; } .fa-angle-right:before { content: "\f105"; } .fa-angle-up:before { content: "\f106"; } .fa-angle-down:before { content: "\f107"; } .fa-desktop:before { content: "\f108"; } .fa-laptop:before { content: "\f109"; } .fa-tablet:before { content: "\f10a"; } .fa-mobile-phone:before, .fa-mobile:before { content: "\f10b"; } .fa-circle-o:before { content: "\f10c"; } .fa-quote-left:before { content: "\f10d"; } .fa-quote-right:before { content: "\f10e"; } .fa-spinner:before { content: "\f110"; } .fa-circle:before { content: "\f111"; } .fa-mail-reply:before, .fa-reply:before { content: "\f112"; } .fa-github-alt:before { content: "\f113"; } .fa-folder-o:before { content: "\f114"; } .fa-folder-open-o:before { content: "\f115"; } .fa-smile-o:before { content: "\f118"; } .fa-frown-o:before { content: "\f119"; } .fa-meh-o:before { content: "\f11a"; } .fa-gamepad:before { content: "\f11b"; } .fa-keyboard-o:before { content: "\f11c"; } .fa-flag-o:before { content: "\f11d"; } .fa-flag-checkered:before { content: "\f11e"; } .fa-terminal:before { content: "\f120"; } .fa-code:before { content: "\f121"; } .fa-mail-reply-all:before, .fa-reply-all:before { content: "\f122"; } .fa-star-half-empty:before, .fa-star-half-full:before, .fa-star-half-o:before { content: "\f123"; } .fa-location-arrow:before { content: "\f124"; } .fa-crop:before { content: "\f125"; } .fa-code-fork:before { content: "\f126"; } .fa-unlink:before, .fa-chain-broken:before { content: "\f127"; } .fa-question:before { content: "\f128"; } .fa-info:before { content: "\f129"; } .fa-exclamation:before { content: "\f12a"; } .fa-superscript:before { content: "\f12b"; } .fa-subscript:before { content: "\f12c"; } .fa-eraser:before { content: "\f12d"; } .fa-puzzle-piece:before { content: "\f12e"; } .fa-microphone:before { content: "\f130"; } .fa-microphone-slash:before { content: "\f131"; } .fa-shield:before { content: "\f132"; } .fa-calendar-o:before { content: "\f133"; } .fa-fire-extinguisher:before { content: "\f134"; } .fa-rocket:before { content: "\f135"; } .fa-maxcdn:before { content: "\f136"; } .fa-chevron-circle-left:before { content: "\f137"; } .fa-chevron-circle-right:before { content: "\f138"; } .fa-chevron-circle-up:before { content: "\f139"; } .fa-chevron-circle-down:before { content: "\f13a"; } .fa-html5:before { content: "\f13b"; } .fa-css3:before { content: "\f13c"; } .fa-anchor:before { content: "\f13d"; } .fa-unlock-alt:before { content: "\f13e"; } .fa-bullseye:before { content: "\f140"; } .fa-ellipsis-h:before { content: "\f141"; } .fa-ellipsis-v:before { content: "\f142"; } .fa-rss-square:before { content: "\f143"; } .fa-play-circle:before { content: "\f144"; } .fa-ticket:before { content: "\f145"; } .fa-minus-square:before { content: "\f146"; } .fa-minus-square-o:before { content: "\f147"; } .fa-level-up:before { content: "\f148"; } .fa-level-down:before { content: "\f149"; } .fa-check-square:before { content: "\f14a"; } .fa-pencil-square:before { content: "\f14b"; } .fa-external-link-square:before { content: "\f14c"; } .fa-share-square:before { content: "\f14d"; } .fa-compass:before { content: "\f14e"; } .fa-toggle-down:before, .fa-caret-square-o-down:before { content: "\f150"; } .fa-toggle-up:before, .fa-caret-square-o-up:before { content: "\f151"; } .fa-toggle-right:before, .fa-caret-square-o-right:before { content: "\f152"; } .fa-euro:before, .fa-eur:before { content: "\f153"; } .fa-gbp:before { content: "\f154"; } .fa-dollar:before, .fa-usd:before { content: "\f155"; } .fa-rupee:before, .fa-inr:before { content: "\f156"; } .fa-cny:before, .fa-rmb:before, .fa-yen:before, .fa-jpy:before { content: "\f157"; } .fa-ruble:before, .fa-rouble:before, .fa-rub:before { content: "\f158"; } .fa-won:before, .fa-krw:before { content: "\f159"; } .fa-bitcoin:before, .fa-btc:before { content: "\f15a"; } .fa-file:before { content: "\f15b"; } .fa-file-text:before { content: "\f15c"; } .fa-sort-alpha-asc:before { content: "\f15d"; } .fa-sort-alpha-desc:before { content: "\f15e"; } .fa-sort-amount-asc:before { content: "\f160"; } .fa-sort-amount-desc:before { content: "\f161"; } .fa-sort-numeric-asc:before { content: "\f162"; } .fa-sort-numeric-desc:before { content: "\f163"; } .fa-thumbs-up:before { content: "\f164"; } .fa-thumbs-down:before { content: "\f165"; } .fa-youtube-square:before { content: "\f166"; } .fa-youtube:before { content: "\f167"; } .fa-xing:before { content: "\f168"; } .fa-xing-square:before { content: "\f169"; } .fa-youtube-play:before { content: "\f16a"; } .fa-dropbox:before { content: "\f16b"; } .fa-stack-overflow:before { content: "\f16c"; } .fa-instagram:before { content: "\f16d"; } .fa-flickr:before { content: "\f16e"; } .fa-adn:before { content: "\f170"; } .fa-bitbucket:before { content: "\f171"; } .fa-bitbucket-square:before { content: "\f172"; } .fa-tumblr:before { content: "\f173"; } .fa-tumblr-square:before { content: "\f174"; } .fa-long-arrow-down:before { content: "\f175"; } .fa-long-arrow-up:before { content: "\f176"; } .fa-long-arrow-left:before { content: "\f177"; } .fa-long-arrow-right:before { content: "\f178"; } .fa-apple:before { content: "\f179"; } .fa-windows:before { content: "\f17a"; } .fa-android:before { content: "\f17b"; } .fa-linux:before { content: "\f17c"; } .fa-dribbble:before { content: "\f17d"; } .fa-skype:before { content: "\f17e"; } .fa-foursquare:before { content: "\f180"; } .fa-trello:before { content: "\f181"; } .fa-female:before { content: "\f182"; } .fa-male:before { content: "\f183"; } .fa-gittip:before, .fa-gratipay:before { content: "\f184"; } .fa-sun-o:before { content: "\f185"; } .fa-moon-o:before { content: "\f186"; } .fa-archive:before { content: "\f187"; } .fa-bug:before { content: "\f188"; } .fa-vk:before { content: "\f189"; } .fa-weibo:before { content: "\f18a"; } .fa-renren:before { content: "\f18b"; } .fa-pagelines:before { content: "\f18c"; } .fa-stack-exchange:before { content: "\f18d"; } .fa-arrow-circle-o-right:before { content: "\f18e"; } .fa-arrow-circle-o-left:before { content: "\f190"; } .fa-toggle-left:before, .fa-caret-square-o-left:before { content: "\f191"; } .fa-dot-circle-o:before { content: "\f192"; } .fa-wheelchair:before { content: "\f193"; } .fa-vimeo-square:before { content: "\f194"; } .fa-turkish-lira:before, .fa-try:before { content: "\f195"; } .fa-plus-square-o:before { content: "\f196"; } .fa-space-shuttle:before { content: "\f197"; } .fa-slack:before { content: "\f198"; } .fa-envelope-square:before { content: "\f199"; } .fa-wordpress:before { content: "\f19a"; } .fa-openid:before { content: "\f19b"; } .fa-institution:before, .fa-bank:before, .fa-university:before { content: "\f19c"; } .fa-mortar-board:before, .fa-graduation-cap:before { content: "\f19d"; } .fa-yahoo:before { content: "\f19e"; } .fa-google:before { content: "\f1a0"; } .fa-reddit:before { content: "\f1a1"; } .fa-reddit-square:before { content: "\f1a2"; } .fa-stumbleupon-circle:before { content: "\f1a3"; } .fa-stumbleupon:before { content: "\f1a4"; } .fa-delicious:before { content: "\f1a5"; } .fa-digg:before { content: "\f1a6"; } .fa-pied-piper-pp:before { content: "\f1a7"; } .fa-pied-piper-alt:before { content: "\f1a8"; } .fa-drupal:before { content: "\f1a9"; } .fa-joomla:before { content: "\f1aa"; } .fa-language:before { content: "\f1ab"; } .fa-fax:before { content: "\f1ac"; } .fa-building:before { content: "\f1ad"; } .fa-child:before { content: "\f1ae"; } .fa-paw:before { content: "\f1b0"; } .fa-spoon:before { content: "\f1b1"; } .fa-cube:before { content: "\f1b2"; } .fa-cubes:before { content: "\f1b3"; } .fa-behance:before { content: "\f1b4"; } .fa-behance-square:before { content: "\f1b5"; } .fa-steam:before { content: "\f1b6"; } .fa-steam-square:before { content: "\f1b7"; } .fa-recycle:before { content: "\f1b8"; } .fa-automobile:before, .fa-car:before { content: "\f1b9"; } .fa-cab:before, .fa-taxi:before { content: "\f1ba"; } .fa-tree:before { content: "\f1bb"; } .fa-spotify:before { content: "\f1bc"; } .fa-deviantart:before { content: "\f1bd"; } .fa-soundcloud:before { content: "\f1be"; } .fa-database:before { content: "\f1c0"; } .fa-file-pdf-o:before { content: "\f1c1"; } .fa-file-word-o:before { content: "\f1c2"; } .fa-file-excel-o:before { content: "\f1c3"; } .fa-file-powerpoint-o:before { content: "\f1c4"; } .fa-file-photo-o:before, .fa-file-picture-o:before, .fa-file-image-o:before { content: "\f1c5"; } .fa-file-zip-o:before, .fa-file-archive-o:before { content: "\f1c6"; } .fa-file-sound-o:before, .fa-file-audio-o:before { content: "\f1c7"; } .fa-file-movie-o:before, .fa-file-video-o:before { content: "\f1c8"; } .fa-file-code-o:before { content: "\f1c9"; } .fa-vine:before { content: "\f1ca"; } .fa-codepen:before { content: "\f1cb"; } .fa-jsfiddle:before { content: "\f1cc"; } .fa-life-bouy:before, .fa-life-buoy:before, .fa-life-saver:before, .fa-support:before, .fa-life-ring:before { content: "\f1cd"; } .fa-circle-o-notch:before { content: "\f1ce"; } .fa-ra:before, .fa-resistance:before, .fa-rebel:before { content: "\f1d0"; } .fa-ge:before, .fa-empire:before { content: "\f1d1"; } .fa-git-square:before { content: "\f1d2"; } .fa-git:before { content: "\f1d3"; } .fa-y-combinator-square:before, .fa-yc-square:before, .fa-hacker-news:before { content: "\f1d4"; } .fa-tencent-weibo:before { content: "\f1d5"; } .fa-qq:before { content: "\f1d6"; } .fa-wechat:before, .fa-weixin:before { content: "\f1d7"; } .fa-send:before, .fa-paper-plane:before { content: "\f1d8"; } .fa-send-o:before, .fa-paper-plane-o:before { content: "\f1d9"; } .fa-history:before { content: "\f1da"; } .fa-circle-thin:before { content: "\f1db"; } .fa-header:before { content: "\f1dc"; } .fa-paragraph:before { content: "\f1dd"; } .fa-sliders:before { content: "\f1de"; } .fa-share-alt:before { content: "\f1e0"; } .fa-share-alt-square:before { content: "\f1e1"; } .fa-bomb:before { content: "\f1e2"; } .fa-soccer-ball-o:before, .fa-futbol-o:before { content: "\f1e3"; } .fa-tty:before { content: "\f1e4"; } .fa-binoculars:before { content: "\f1e5"; } .fa-plug:before { content: "\f1e6"; } .fa-slideshare:before { content: "\f1e7"; } .fa-twitch:before { content: "\f1e8"; } .fa-yelp:before { content: "\f1e9"; } .fa-newspaper-o:before { content: "\f1ea"; } .fa-wifi:before { content: "\f1eb"; } .fa-calculator:before { content: "\f1ec"; } .fa-paypal:before { content: "\f1ed"; } .fa-google-wallet:before { content: "\f1ee"; } .fa-cc-visa:before { content: "\f1f0"; } .fa-cc-mastercard:before { content: "\f1f1"; } .fa-cc-discover:before { content: "\f1f2"; } .fa-cc-amex:before { content: "\f1f3"; } .fa-cc-paypal:before { content: "\f1f4"; } .fa-cc-stripe:before { content: "\f1f5"; } .fa-bell-slash:before { content: "\f1f6"; } .fa-bell-slash-o:before { content: "\f1f7"; } .fa-trash:before { content: "\f1f8"; } .fa-copyright:before { content: "\f1f9"; } .fa-at:before { content: "\f1fa"; } .fa-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; } ================================================ FILE: static/fonts/font-awesome-4.7.0/less/animated.less ================================================ // Animated Icons // -------------------------- .@{fa-css-prefix}-spin { -webkit-animation: fa-spin 2s infinite linear; animation: fa-spin 2s infinite linear; } .@{fa-css-prefix}-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); } } ================================================ FILE: static/fonts/font-awesome-4.7.0/less/bordered-pulled.less ================================================ // Bordered & Pulled // ------------------------- .@{fa-css-prefix}-border { padding: .2em .25em .15em; border: solid .08em @fa-border-color; border-radius: .1em; } .@{fa-css-prefix}-pull-left { float: left; } .@{fa-css-prefix}-pull-right { float: right; } .@{fa-css-prefix} { &.@{fa-css-prefix}-pull-left { margin-right: .3em; } &.@{fa-css-prefix}-pull-right { margin-left: .3em; } } /* Deprecated as of 4.4.0 */ .pull-right { float: right; } .pull-left { float: left; } .@{fa-css-prefix} { &.pull-left { margin-right: .3em; } &.pull-right { margin-left: .3em; } } ================================================ FILE: static/fonts/font-awesome-4.7.0/less/core.less ================================================ // Base Class Definition // ------------------------- .@{fa-css-prefix} { display: inline-block; font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } ================================================ FILE: static/fonts/font-awesome-4.7.0/less/fixed-width.less ================================================ // Fixed Width Icons // ------------------------- .@{fa-css-prefix}-fw { width: (18em / 14); text-align: center; } ================================================ FILE: static/fonts/font-awesome-4.7.0/less/font-awesome.less ================================================ /*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */ @import "variables.less"; @import "mixins.less"; @import "path.less"; @import "core.less"; @import "larger.less"; @import "fixed-width.less"; @import "list.less"; @import "bordered-pulled.less"; @import "animated.less"; @import "rotated-flipped.less"; @import "stacked.less"; @import "icons.less"; @import "screen-reader.less"; ================================================ FILE: static/fonts/font-awesome-4.7.0/less/icons.less ================================================ /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .@{fa-css-prefix}-glass:before { content: @fa-var-glass; } .@{fa-css-prefix}-music:before { content: @fa-var-music; } .@{fa-css-prefix}-search:before { content: @fa-var-search; } .@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; } .@{fa-css-prefix}-heart:before { content: @fa-var-heart; } .@{fa-css-prefix}-star:before { content: @fa-var-star; } .@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; } .@{fa-css-prefix}-user:before { content: @fa-var-user; } .@{fa-css-prefix}-film:before { content: @fa-var-film; } .@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; } .@{fa-css-prefix}-th:before { content: @fa-var-th; } .@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; } .@{fa-css-prefix}-check:before { content: @fa-var-check; } .@{fa-css-prefix}-remove:before, .@{fa-css-prefix}-close:before, .@{fa-css-prefix}-times:before { content: @fa-var-times; } .@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; } .@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; } .@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; } .@{fa-css-prefix}-signal:before { content: @fa-var-signal; } .@{fa-css-prefix}-gear:before, .@{fa-css-prefix}-cog:before { content: @fa-var-cog; } .@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; } .@{fa-css-prefix}-home:before { content: @fa-var-home; } .@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; } .@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; } .@{fa-css-prefix}-road:before { content: @fa-var-road; } .@{fa-css-prefix}-download:before { content: @fa-var-download; } .@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; } .@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; } .@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; } .@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; } .@{fa-css-prefix}-rotate-right:before, .@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; } .@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; } .@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; } .@{fa-css-prefix}-lock:before { content: @fa-var-lock; } .@{fa-css-prefix}-flag:before { content: @fa-var-flag; } .@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; } .@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; } .@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; } .@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; } .@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; } .@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; } .@{fa-css-prefix}-tag:before { content: @fa-var-tag; } .@{fa-css-prefix}-tags:before { content: @fa-var-tags; } .@{fa-css-prefix}-book:before { content: @fa-var-book; } .@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; } .@{fa-css-prefix}-print:before { content: @fa-var-print; } .@{fa-css-prefix}-camera:before { content: @fa-var-camera; } .@{fa-css-prefix}-font:before { content: @fa-var-font; } .@{fa-css-prefix}-bold:before { content: @fa-var-bold; } .@{fa-css-prefix}-italic:before { content: @fa-var-italic; } .@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; } .@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; } .@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; } .@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; } .@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; } .@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; } .@{fa-css-prefix}-list:before { content: @fa-var-list; } .@{fa-css-prefix}-dedent:before, .@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; } .@{fa-css-prefix}-indent:before { content: @fa-var-indent; } .@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; } .@{fa-css-prefix}-photo:before, .@{fa-css-prefix}-image:before, .@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; } .@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; } .@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; } .@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; } .@{fa-css-prefix}-tint:before { content: @fa-var-tint; } .@{fa-css-prefix}-edit:before, .@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; } .@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; } .@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; } .@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; } .@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; } .@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; } .@{fa-css-prefix}-backward:before { content: @fa-var-backward; } .@{fa-css-prefix}-play:before { content: @fa-var-play; } .@{fa-css-prefix}-pause:before { content: @fa-var-pause; } .@{fa-css-prefix}-stop:before { content: @fa-var-stop; } .@{fa-css-prefix}-forward:before { content: @fa-var-forward; } .@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; } .@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; } .@{fa-css-prefix}-eject:before { content: @fa-var-eject; } .@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; } .@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; } .@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; } .@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; } .@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; } .@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; } .@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; } .@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; } .@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; } .@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; } .@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; } .@{fa-css-prefix}-ban:before { content: @fa-var-ban; } .@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; } .@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; } .@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; } .@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; } .@{fa-css-prefix}-mail-forward:before, .@{fa-css-prefix}-share:before { content: @fa-var-share; } .@{fa-css-prefix}-expand:before { content: @fa-var-expand; } .@{fa-css-prefix}-compress:before { content: @fa-var-compress; } .@{fa-css-prefix}-plus:before { content: @fa-var-plus; } .@{fa-css-prefix}-minus:before { content: @fa-var-minus; } .@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; } .@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; } .@{fa-css-prefix}-gift:before { content: @fa-var-gift; } .@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; } .@{fa-css-prefix}-fire:before { content: @fa-var-fire; } .@{fa-css-prefix}-eye:before { content: @fa-var-eye; } .@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; } .@{fa-css-prefix}-warning:before, .@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; } .@{fa-css-prefix}-plane:before { content: @fa-var-plane; } .@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; } .@{fa-css-prefix}-random:before { content: @fa-var-random; } .@{fa-css-prefix}-comment:before { content: @fa-var-comment; } .@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; } .@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; } .@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; } .@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; } .@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; } .@{fa-css-prefix}-folder:before { content: @fa-var-folder; } .@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; } .@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; } .@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; } .@{fa-css-prefix}-bar-chart-o:before, .@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; } .@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; } .@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; } .@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; } .@{fa-css-prefix}-key:before { content: @fa-var-key; } .@{fa-css-prefix}-gears:before, .@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; } .@{fa-css-prefix}-comments:before { content: @fa-var-comments; } .@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; } .@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; } .@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; } .@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; } .@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; } .@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; } .@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; } .@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; } .@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; } .@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; } .@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; } .@{fa-css-prefix}-upload:before { content: @fa-var-upload; } .@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; } .@{fa-css-prefix}-phone:before { content: @fa-var-phone; } .@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; } .@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; } .@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; } .@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; } .@{fa-css-prefix}-facebook-f:before, .@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; } .@{fa-css-prefix}-github:before { content: @fa-var-github; } .@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; } .@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; } .@{fa-css-prefix}-feed:before, .@{fa-css-prefix}-rss:before { content: @fa-var-rss; } .@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; } .@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; } .@{fa-css-prefix}-bell:before { content: @fa-var-bell; } .@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; } .@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; } .@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; } .@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; } .@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; } .@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; } .@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; } .@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; } .@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; } .@{fa-css-prefix}-globe:before { content: @fa-var-globe; } .@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; } .@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; } .@{fa-css-prefix}-filter:before { content: @fa-var-filter; } .@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; } .@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; } .@{fa-css-prefix}-group:before, .@{fa-css-prefix}-users:before { content: @fa-var-users; } .@{fa-css-prefix}-chain:before, .@{fa-css-prefix}-link:before { content: @fa-var-link; } .@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; } .@{fa-css-prefix}-flask:before { content: @fa-var-flask; } .@{fa-css-prefix}-cut:before, .@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; } .@{fa-css-prefix}-copy:before, .@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; } .@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; } .@{fa-css-prefix}-save:before, .@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; } .@{fa-css-prefix}-square:before { content: @fa-var-square; } .@{fa-css-prefix}-navicon:before, .@{fa-css-prefix}-reorder:before, .@{fa-css-prefix}-bars:before { content: @fa-var-bars; } .@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; } .@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; } .@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; } .@{fa-css-prefix}-underline:before { content: @fa-var-underline; } .@{fa-css-prefix}-table:before { content: @fa-var-table; } .@{fa-css-prefix}-magic:before { content: @fa-var-magic; } .@{fa-css-prefix}-truck:before { content: @fa-var-truck; } .@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; } .@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; } .@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; } .@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; } .@{fa-css-prefix}-money:before { content: @fa-var-money; } .@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; } .@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; } .@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; } .@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; } .@{fa-css-prefix}-columns:before { content: @fa-var-columns; } .@{fa-css-prefix}-unsorted:before, .@{fa-css-prefix}-sort:before { content: @fa-var-sort; } .@{fa-css-prefix}-sort-down:before, .@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; } .@{fa-css-prefix}-sort-up:before, .@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; } .@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; } .@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; } .@{fa-css-prefix}-rotate-left:before, .@{fa-css-prefix}-undo:before { content: @fa-var-undo; } .@{fa-css-prefix}-legal:before, .@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; } .@{fa-css-prefix}-dashboard:before, .@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; } .@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; } .@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; } .@{fa-css-prefix}-flash:before, .@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; } .@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; } .@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; } .@{fa-css-prefix}-paste:before, .@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; } .@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; } .@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; } .@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; } .@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; } .@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; } .@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; } .@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; } .@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; } .@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; } .@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; } .@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; } .@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; } .@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; } .@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; } .@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; } .@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; } .@{fa-css-prefix}-beer:before { content: @fa-var-beer; } .@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; } .@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; } .@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; } .@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; } .@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; } .@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; } .@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; } .@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; } .@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; } .@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; } .@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; } .@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; } .@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; } .@{fa-css-prefix}-mobile-phone:before, .@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; } .@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; } .@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; } .@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; } .@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; } .@{fa-css-prefix}-circle:before { content: @fa-var-circle; } .@{fa-css-prefix}-mail-reply:before, .@{fa-css-prefix}-reply:before { content: @fa-var-reply; } .@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; } .@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; } .@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; } .@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; } .@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; } .@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; } .@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; } .@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; } .@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; } .@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; } .@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; } .@{fa-css-prefix}-code:before { content: @fa-var-code; } .@{fa-css-prefix}-mail-reply-all:before, .@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; } .@{fa-css-prefix}-star-half-empty:before, .@{fa-css-prefix}-star-half-full:before, .@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; } .@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; } .@{fa-css-prefix}-crop:before { content: @fa-var-crop; } .@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; } .@{fa-css-prefix}-unlink:before, .@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; } .@{fa-css-prefix}-question:before { content: @fa-var-question; } .@{fa-css-prefix}-info:before { content: @fa-var-info; } .@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; } .@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; } .@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; } .@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; } .@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; } .@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; } .@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; } .@{fa-css-prefix}-shield:before { content: @fa-var-shield; } .@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; } .@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; } .@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; } .@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; } .@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; } .@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; } .@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; } .@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; } .@{fa-css-prefix}-html5:before { content: @fa-var-html5; } .@{fa-css-prefix}-css3:before { content: @fa-var-css3; } .@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; } .@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; } .@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; } .@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; } .@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; } .@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; } .@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; } .@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; } .@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; } .@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; } .@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; } .@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; } .@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; } .@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; } .@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; } .@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; } .@{fa-css-prefix}-compass:before { content: @fa-var-compass; } .@{fa-css-prefix}-toggle-down:before, .@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; } .@{fa-css-prefix}-toggle-up:before, .@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; } .@{fa-css-prefix}-toggle-right:before, .@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; } .@{fa-css-prefix}-euro:before, .@{fa-css-prefix}-eur:before { content: @fa-var-eur; } .@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; } .@{fa-css-prefix}-dollar:before, .@{fa-css-prefix}-usd:before { content: @fa-var-usd; } .@{fa-css-prefix}-rupee:before, .@{fa-css-prefix}-inr:before { content: @fa-var-inr; } .@{fa-css-prefix}-cny:before, .@{fa-css-prefix}-rmb:before, .@{fa-css-prefix}-yen:before, .@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; } .@{fa-css-prefix}-ruble:before, .@{fa-css-prefix}-rouble:before, .@{fa-css-prefix}-rub:before { content: @fa-var-rub; } .@{fa-css-prefix}-won:before, .@{fa-css-prefix}-krw:before { content: @fa-var-krw; } .@{fa-css-prefix}-bitcoin:before, .@{fa-css-prefix}-btc:before { content: @fa-var-btc; } .@{fa-css-prefix}-file:before { content: @fa-var-file; } .@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; } .@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; } .@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; } .@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; } .@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; } .@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; } .@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; } .@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; } .@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; } .@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; } .@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; } .@{fa-css-prefix}-xing:before { content: @fa-var-xing; } .@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; } .@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; } .@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; } .@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; } .@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; } .@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; } .@{fa-css-prefix}-adn:before { content: @fa-var-adn; } .@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; } .@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; } .@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; } .@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; } .@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; } .@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; } .@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; } .@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; } .@{fa-css-prefix}-apple:before { content: @fa-var-apple; } .@{fa-css-prefix}-windows:before { content: @fa-var-windows; } .@{fa-css-prefix}-android:before { content: @fa-var-android; } .@{fa-css-prefix}-linux:before { content: @fa-var-linux; } .@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; } .@{fa-css-prefix}-skype:before { content: @fa-var-skype; } .@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; } .@{fa-css-prefix}-trello:before { content: @fa-var-trello; } .@{fa-css-prefix}-female:before { content: @fa-var-female; } .@{fa-css-prefix}-male:before { content: @fa-var-male; } .@{fa-css-prefix}-gittip:before, .@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; } .@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; } .@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; } .@{fa-css-prefix}-archive:before { content: @fa-var-archive; } .@{fa-css-prefix}-bug:before { content: @fa-var-bug; } .@{fa-css-prefix}-vk:before { content: @fa-var-vk; } .@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; } .@{fa-css-prefix}-renren:before { content: @fa-var-renren; } .@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; } .@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; } .@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; } .@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; } .@{fa-css-prefix}-toggle-left:before, .@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; } .@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; } .@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; } .@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; } .@{fa-css-prefix}-turkish-lira:before, .@{fa-css-prefix}-try:before { content: @fa-var-try; } .@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; } .@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; } .@{fa-css-prefix}-slack:before { content: @fa-var-slack; } .@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; } .@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; } .@{fa-css-prefix}-openid:before { content: @fa-var-openid; } .@{fa-css-prefix}-institution:before, .@{fa-css-prefix}-bank:before, .@{fa-css-prefix}-university:before { content: @fa-var-university; } .@{fa-css-prefix}-mortar-board:before, .@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; } .@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; } .@{fa-css-prefix}-google:before { content: @fa-var-google; } .@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; } .@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; } .@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; } .@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; } .@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; } .@{fa-css-prefix}-digg:before { content: @fa-var-digg; } .@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; } .@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; } .@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; } .@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; } .@{fa-css-prefix}-language:before { content: @fa-var-language; } .@{fa-css-prefix}-fax:before { content: @fa-var-fax; } .@{fa-css-prefix}-building:before { content: @fa-var-building; } .@{fa-css-prefix}-child:before { content: @fa-var-child; } .@{fa-css-prefix}-paw:before { content: @fa-var-paw; } .@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; } .@{fa-css-prefix}-cube:before { content: @fa-var-cube; } .@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; } .@{fa-css-prefix}-behance:before { content: @fa-var-behance; } .@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; } .@{fa-css-prefix}-steam:before { content: @fa-var-steam; } .@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; } .@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; } .@{fa-css-prefix}-automobile:before, .@{fa-css-prefix}-car:before { content: @fa-var-car; } .@{fa-css-prefix}-cab:before, .@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; } .@{fa-css-prefix}-tree:before { content: @fa-var-tree; } .@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; } .@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; } .@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; } .@{fa-css-prefix}-database:before { content: @fa-var-database; } .@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; } .@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; } .@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; } .@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; } .@{fa-css-prefix}-file-photo-o:before, .@{fa-css-prefix}-file-picture-o:before, .@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; } .@{fa-css-prefix}-file-zip-o:before, .@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; } .@{fa-css-prefix}-file-sound-o:before, .@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; } .@{fa-css-prefix}-file-movie-o:before, .@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; } .@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; } .@{fa-css-prefix}-vine:before { content: @fa-var-vine; } .@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; } .@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; } .@{fa-css-prefix}-life-bouy:before, .@{fa-css-prefix}-life-buoy:before, .@{fa-css-prefix}-life-saver:before, .@{fa-css-prefix}-support:before, .@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; } .@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; } .@{fa-css-prefix}-ra:before, .@{fa-css-prefix}-resistance:before, .@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; } .@{fa-css-prefix}-ge:before, .@{fa-css-prefix}-empire:before { content: @fa-var-empire; } .@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; } .@{fa-css-prefix}-git:before { content: @fa-var-git; } .@{fa-css-prefix}-y-combinator-square:before, .@{fa-css-prefix}-yc-square:before, .@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; } .@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; } .@{fa-css-prefix}-qq:before { content: @fa-var-qq; } .@{fa-css-prefix}-wechat:before, .@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; } .@{fa-css-prefix}-send:before, .@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; } .@{fa-css-prefix}-send-o:before, .@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; } .@{fa-css-prefix}-history:before { content: @fa-var-history; } .@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; } .@{fa-css-prefix}-header:before { content: @fa-var-header; } .@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; } .@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; } .@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; } .@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; } .@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; } .@{fa-css-prefix}-soccer-ball-o:before, .@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; } .@{fa-css-prefix}-tty:before { content: @fa-var-tty; } .@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; } .@{fa-css-prefix}-plug:before { content: @fa-var-plug; } .@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; } .@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; } .@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; } .@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; } .@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; } .@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; } .@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; } .@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; } .@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; } .@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; } .@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; } .@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; } .@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; } .@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; } .@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; } .@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; } .@{fa-css-prefix}-trash:before { content: @fa-var-trash; } .@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; } .@{fa-css-prefix}-at:before { content: @fa-var-at; } .@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; } .@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; } .@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; } .@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; } .@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; } .@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; } .@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; } .@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; } .@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; } .@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; } .@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; } .@{fa-css-prefix}-bus:before { content: @fa-var-bus; } .@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; } .@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; } .@{fa-css-prefix}-cc:before { content: @fa-var-cc; } .@{fa-css-prefix}-shekel:before, .@{fa-css-prefix}-sheqel:before, .@{fa-css-prefix}-ils:before { content: @fa-var-ils; } .@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; } .@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; } .@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; } .@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; } .@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; } .@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; } .@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; } .@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; } .@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; } .@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; } .@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; } .@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; } .@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; } .@{fa-css-prefix}-ship:before { content: @fa-var-ship; } .@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; } .@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; } .@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; } .@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; } .@{fa-css-prefix}-venus:before { content: @fa-var-venus; } .@{fa-css-prefix}-mars:before { content: @fa-var-mars; } .@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; } .@{fa-css-prefix}-intersex:before, .@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; } .@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; } .@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; } .@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; } .@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; } .@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; } .@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; } .@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; } .@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; } .@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; } .@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; } .@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; } .@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; } .@{fa-css-prefix}-server:before { content: @fa-var-server; } .@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; } .@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; } .@{fa-css-prefix}-hotel:before, .@{fa-css-prefix}-bed:before { content: @fa-var-bed; } .@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; } .@{fa-css-prefix}-train:before { content: @fa-var-train; } .@{fa-css-prefix}-subway:before { content: @fa-var-subway; } .@{fa-css-prefix}-medium:before { content: @fa-var-medium; } .@{fa-css-prefix}-yc:before, .@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; } .@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; } .@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; } .@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; } .@{fa-css-prefix}-battery-4:before, .@{fa-css-prefix}-battery:before, .@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; } .@{fa-css-prefix}-battery-3:before, .@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; } .@{fa-css-prefix}-battery-2:before, .@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; } .@{fa-css-prefix}-battery-1:before, .@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; } .@{fa-css-prefix}-battery-0:before, .@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; } .@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; } .@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; } .@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; } .@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; } .@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; } .@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; } .@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; } .@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; } .@{fa-css-prefix}-clone:before { content: @fa-var-clone; } .@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; } .@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; } .@{fa-css-prefix}-hourglass-1:before, .@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; } .@{fa-css-prefix}-hourglass-2:before, .@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; } .@{fa-css-prefix}-hourglass-3:before, .@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; } .@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; } .@{fa-css-prefix}-hand-grab-o:before, .@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; } .@{fa-css-prefix}-hand-stop-o:before, .@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; } .@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; } .@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; } .@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; } .@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; } .@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; } .@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; } .@{fa-css-prefix}-registered:before { content: @fa-var-registered; } .@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; } .@{fa-css-prefix}-gg:before { content: @fa-var-gg; } .@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; } .@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; } .@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; } .@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; } .@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; } .@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; } .@{fa-css-prefix}-safari:before { content: @fa-var-safari; } .@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; } .@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; } .@{fa-css-prefix}-opera:before { content: @fa-var-opera; } .@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; } .@{fa-css-prefix}-tv:before, .@{fa-css-prefix}-television:before { content: @fa-var-television; } .@{fa-css-prefix}-contao:before { content: @fa-var-contao; } .@{fa-css-prefix}-500px:before { content: @fa-var-500px; } .@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; } .@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; } .@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; } .@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; } .@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; } .@{fa-css-prefix}-industry:before { content: @fa-var-industry; } .@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; } .@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; } .@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; } .@{fa-css-prefix}-map:before { content: @fa-var-map; } .@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; } .@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; } .@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; } .@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; } .@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; } .@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; } .@{fa-css-prefix}-reddit-alien:before { content: @fa-var-reddit-alien; } .@{fa-css-prefix}-edge:before { content: @fa-var-edge; } .@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card-alt; } .@{fa-css-prefix}-codiepie:before { content: @fa-var-codiepie; } .@{fa-css-prefix}-modx:before { content: @fa-var-modx; } .@{fa-css-prefix}-fort-awesome:before { content: @fa-var-fort-awesome; } .@{fa-css-prefix}-usb:before { content: @fa-var-usb; } .@{fa-css-prefix}-product-hunt:before { content: @fa-var-product-hunt; } .@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; } .@{fa-css-prefix}-scribd:before { content: @fa-var-scribd; } .@{fa-css-prefix}-pause-circle:before { content: @fa-var-pause-circle; } .@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-pause-circle-o; } .@{fa-css-prefix}-stop-circle:before { content: @fa-var-stop-circle; } .@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-stop-circle-o; } .@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; } .@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; } .@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; } .@{fa-css-prefix}-bluetooth:before { content: @fa-var-bluetooth; } .@{fa-css-prefix}-bluetooth-b:before { content: @fa-var-bluetooth-b; } .@{fa-css-prefix}-percent:before { content: @fa-var-percent; } .@{fa-css-prefix}-gitlab:before { content: @fa-var-gitlab; } .@{fa-css-prefix}-wpbeginner:before { content: @fa-var-wpbeginner; } .@{fa-css-prefix}-wpforms:before { content: @fa-var-wpforms; } .@{fa-css-prefix}-envira:before { content: @fa-var-envira; } .@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; } .@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-wheelchair-alt; } .@{fa-css-prefix}-question-circle-o:before { content: @fa-var-question-circle-o; } .@{fa-css-prefix}-blind:before { content: @fa-var-blind; } .@{fa-css-prefix}-audio-description:before { content: @fa-var-audio-description; } .@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-volume-control-phone; } .@{fa-css-prefix}-braille:before { content: @fa-var-braille; } .@{fa-css-prefix}-assistive-listening-systems:before { content: @fa-var-assistive-listening-systems; } .@{fa-css-prefix}-asl-interpreting:before, .@{fa-css-prefix}-american-sign-language-interpreting:before { content: @fa-var-american-sign-language-interpreting; } .@{fa-css-prefix}-deafness:before, .@{fa-css-prefix}-hard-of-hearing:before, .@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; } .@{fa-css-prefix}-glide:before { content: @fa-var-glide; } .@{fa-css-prefix}-glide-g:before { content: @fa-var-glide-g; } .@{fa-css-prefix}-signing:before, .@{fa-css-prefix}-sign-language:before { content: @fa-var-sign-language; } .@{fa-css-prefix}-low-vision:before { content: @fa-var-low-vision; } .@{fa-css-prefix}-viadeo:before { content: @fa-var-viadeo; } .@{fa-css-prefix}-viadeo-square:before { content: @fa-var-viadeo-square; } .@{fa-css-prefix}-snapchat:before { content: @fa-var-snapchat; } .@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat-ghost; } .@{fa-css-prefix}-snapchat-square:before { content: @fa-var-snapchat-square; } .@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; } .@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; } .@{fa-css-prefix}-yoast:before { content: @fa-var-yoast; } .@{fa-css-prefix}-themeisle:before { content: @fa-var-themeisle; } .@{fa-css-prefix}-google-plus-circle:before, .@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus-official; } .@{fa-css-prefix}-fa:before, .@{fa-css-prefix}-font-awesome:before { content: @fa-var-font-awesome; } .@{fa-css-prefix}-handshake-o:before { content: @fa-var-handshake-o; } .@{fa-css-prefix}-envelope-open:before { content: @fa-var-envelope-open; } .@{fa-css-prefix}-envelope-open-o:before { content: @fa-var-envelope-open-o; } .@{fa-css-prefix}-linode:before { content: @fa-var-linode; } .@{fa-css-prefix}-address-book:before { content: @fa-var-address-book; } .@{fa-css-prefix}-address-book-o:before { content: @fa-var-address-book-o; } .@{fa-css-prefix}-vcard:before, .@{fa-css-prefix}-address-card:before { content: @fa-var-address-card; } .@{fa-css-prefix}-vcard-o:before, .@{fa-css-prefix}-address-card-o:before { content: @fa-var-address-card-o; } .@{fa-css-prefix}-user-circle:before { content: @fa-var-user-circle; } .@{fa-css-prefix}-user-circle-o:before { content: @fa-var-user-circle-o; } .@{fa-css-prefix}-user-o:before { content: @fa-var-user-o; } .@{fa-css-prefix}-id-badge:before { content: @fa-var-id-badge; } .@{fa-css-prefix}-drivers-license:before, .@{fa-css-prefix}-id-card:before { content: @fa-var-id-card; } .@{fa-css-prefix}-drivers-license-o:before, .@{fa-css-prefix}-id-card-o:before { content: @fa-var-id-card-o; } .@{fa-css-prefix}-quora:before { content: @fa-var-quora; } .@{fa-css-prefix}-free-code-camp:before { content: @fa-var-free-code-camp; } .@{fa-css-prefix}-telegram:before { content: @fa-var-telegram; } .@{fa-css-prefix}-thermometer-4:before, .@{fa-css-prefix}-thermometer:before, .@{fa-css-prefix}-thermometer-full:before { content: @fa-var-thermometer-full; } .@{fa-css-prefix}-thermometer-3:before, .@{fa-css-prefix}-thermometer-three-quarters:before { content: @fa-var-thermometer-three-quarters; } .@{fa-css-prefix}-thermometer-2:before, .@{fa-css-prefix}-thermometer-half:before { content: @fa-var-thermometer-half; } .@{fa-css-prefix}-thermometer-1:before, .@{fa-css-prefix}-thermometer-quarter:before { content: @fa-var-thermometer-quarter; } .@{fa-css-prefix}-thermometer-0:before, .@{fa-css-prefix}-thermometer-empty:before { content: @fa-var-thermometer-empty; } .@{fa-css-prefix}-shower:before { content: @fa-var-shower; } .@{fa-css-prefix}-bathtub:before, .@{fa-css-prefix}-s15:before, .@{fa-css-prefix}-bath:before { content: @fa-var-bath; } .@{fa-css-prefix}-podcast:before { content: @fa-var-podcast; } .@{fa-css-prefix}-window-maximize:before { content: @fa-var-window-maximize; } .@{fa-css-prefix}-window-minimize:before { content: @fa-var-window-minimize; } .@{fa-css-prefix}-window-restore:before { content: @fa-var-window-restore; } .@{fa-css-prefix}-times-rectangle:before, .@{fa-css-prefix}-window-close:before { content: @fa-var-window-close; } .@{fa-css-prefix}-times-rectangle-o:before, .@{fa-css-prefix}-window-close-o:before { content: @fa-var-window-close-o; } .@{fa-css-prefix}-bandcamp:before { content: @fa-var-bandcamp; } .@{fa-css-prefix}-grav:before { content: @fa-var-grav; } .@{fa-css-prefix}-etsy:before { content: @fa-var-etsy; } .@{fa-css-prefix}-imdb:before { content: @fa-var-imdb; } .@{fa-css-prefix}-ravelry:before { content: @fa-var-ravelry; } .@{fa-css-prefix}-eercast:before { content: @fa-var-eercast; } .@{fa-css-prefix}-microchip:before { content: @fa-var-microchip; } .@{fa-css-prefix}-snowflake-o:before { content: @fa-var-snowflake-o; } .@{fa-css-prefix}-superpowers:before { content: @fa-var-superpowers; } .@{fa-css-prefix}-wpexplorer:before { content: @fa-var-wpexplorer; } .@{fa-css-prefix}-meetup:before { content: @fa-var-meetup; } ================================================ FILE: static/fonts/font-awesome-4.7.0/less/larger.less ================================================ // Icon Sizes // ------------------------- /* makes the font 33% larger relative to the icon container */ .@{fa-css-prefix}-lg { font-size: (4em / 3); line-height: (3em / 4); vertical-align: -15%; } .@{fa-css-prefix}-2x { font-size: 2em; } .@{fa-css-prefix}-3x { font-size: 3em; } .@{fa-css-prefix}-4x { font-size: 4em; } .@{fa-css-prefix}-5x { font-size: 5em; } ================================================ FILE: static/fonts/font-awesome-4.7.0/less/list.less ================================================ // List Icons // ------------------------- .@{fa-css-prefix}-ul { padding-left: 0; margin-left: @fa-li-width; list-style-type: none; > li { position: relative; } } .@{fa-css-prefix}-li { position: absolute; left: -@fa-li-width; width: @fa-li-width; top: (2em / 14); text-align: center; &.@{fa-css-prefix}-lg { left: (-@fa-li-width + (4em / 14)); } } ================================================ FILE: static/fonts/font-awesome-4.7.0/less/mixins.less ================================================ // Mixins // -------------------------- .fa-icon() { display: inline-block; font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .fa-icon-rotate(@degrees, @rotation) { -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; -webkit-transform: rotate(@degrees); -ms-transform: rotate(@degrees); transform: rotate(@degrees); } .fa-icon-flip(@horiz, @vert, @rotation) { -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; -webkit-transform: scale(@horiz, @vert); -ms-transform: scale(@horiz, @vert); transform: scale(@horiz, @vert); } // Only display content to screen readers. A la Bootstrap 4. // // See: http://a11yproject.com/posts/how-to-hide-content/ .sr-only() { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); border: 0; } // Use in conjunction with .sr-only to only display content when it's focused. // // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 // // Credit: HTML5 Boilerplate .sr-only-focusable() { &:active, &:focus { position: static; width: auto; height: auto; margin: 0; overflow: visible; clip: auto; } } ================================================ FILE: static/fonts/font-awesome-4.7.0/less/path.less ================================================ /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts font-weight: normal; font-style: normal; } ================================================ FILE: static/fonts/font-awesome-4.7.0/less/rotated-flipped.less ================================================ // Rotated & Flipped Icons // ------------------------- .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } // Hook for IE8-9 // ------------------------- :root .@{fa-css-prefix}-rotate-90, :root .@{fa-css-prefix}-rotate-180, :root .@{fa-css-prefix}-rotate-270, :root .@{fa-css-prefix}-flip-horizontal, :root .@{fa-css-prefix}-flip-vertical { filter: none; } ================================================ FILE: static/fonts/font-awesome-4.7.0/less/screen-reader.less ================================================ // Screen Readers // ------------------------- .sr-only { .sr-only(); } .sr-only-focusable { .sr-only-focusable(); } ================================================ FILE: static/fonts/font-awesome-4.7.0/less/stacked.less ================================================ // Stacked Icons // ------------------------- .@{fa-css-prefix}-stack { position: relative; display: inline-block; width: 2em; height: 2em; line-height: 2em; vertical-align: middle; } .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { position: absolute; left: 0; width: 100%; text-align: center; } .@{fa-css-prefix}-stack-1x { line-height: inherit; } .@{fa-css-prefix}-stack-2x { font-size: 2em; } .@{fa-css-prefix}-inverse { color: @fa-inverse; } ================================================ FILE: static/fonts/font-awesome-4.7.0/less/variables.less ================================================ // Variables // -------------------------- @fa-font-path: "../fonts"; @fa-font-size-base: 14px; @fa-line-height-base: 1; //@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts"; // for referencing Bootstrap CDN font files directly @fa-css-prefix: fa; @fa-version: "4.7.0"; @fa-border-color: #eee; @fa-inverse: #fff; @fa-li-width: (30em / 14); @fa-var-500px: "\f26e"; @fa-var-address-book: "\f2b9"; @fa-var-address-book-o: "\f2ba"; @fa-var-address-card: "\f2bb"; @fa-var-address-card-o: "\f2bc"; @fa-var-adjust: "\f042"; @fa-var-adn: "\f170"; @fa-var-align-center: "\f037"; @fa-var-align-justify: "\f039"; @fa-var-align-left: "\f036"; @fa-var-align-right: "\f038"; @fa-var-amazon: "\f270"; @fa-var-ambulance: "\f0f9"; @fa-var-american-sign-language-interpreting: "\f2a3"; @fa-var-anchor: "\f13d"; @fa-var-android: "\f17b"; @fa-var-angellist: "\f209"; @fa-var-angle-double-down: "\f103"; @fa-var-angle-double-left: "\f100"; @fa-var-angle-double-right: "\f101"; @fa-var-angle-double-up: "\f102"; @fa-var-angle-down: "\f107"; @fa-var-angle-left: "\f104"; @fa-var-angle-right: "\f105"; @fa-var-angle-up: "\f106"; @fa-var-apple: "\f179"; @fa-var-archive: "\f187"; @fa-var-area-chart: "\f1fe"; @fa-var-arrow-circle-down: "\f0ab"; @fa-var-arrow-circle-left: "\f0a8"; @fa-var-arrow-circle-o-down: "\f01a"; @fa-var-arrow-circle-o-left: "\f190"; @fa-var-arrow-circle-o-right: "\f18e"; @fa-var-arrow-circle-o-up: "\f01b"; @fa-var-arrow-circle-right: "\f0a9"; @fa-var-arrow-circle-up: "\f0aa"; @fa-var-arrow-down: "\f063"; @fa-var-arrow-left: "\f060"; @fa-var-arrow-right: "\f061"; @fa-var-arrow-up: "\f062"; @fa-var-arrows: "\f047"; @fa-var-arrows-alt: "\f0b2"; @fa-var-arrows-h: "\f07e"; @fa-var-arrows-v: "\f07d"; @fa-var-asl-interpreting: "\f2a3"; @fa-var-assistive-listening-systems: "\f2a2"; @fa-var-asterisk: "\f069"; @fa-var-at: "\f1fa"; @fa-var-audio-description: "\f29e"; @fa-var-automobile: "\f1b9"; @fa-var-backward: "\f04a"; @fa-var-balance-scale: "\f24e"; @fa-var-ban: "\f05e"; @fa-var-bandcamp: "\f2d5"; @fa-var-bank: "\f19c"; @fa-var-bar-chart: "\f080"; @fa-var-bar-chart-o: "\f080"; @fa-var-barcode: "\f02a"; @fa-var-bars: "\f0c9"; @fa-var-bath: "\f2cd"; @fa-var-bathtub: "\f2cd"; @fa-var-battery: "\f240"; @fa-var-battery-0: "\f244"; @fa-var-battery-1: "\f243"; @fa-var-battery-2: "\f242"; @fa-var-battery-3: "\f241"; @fa-var-battery-4: "\f240"; @fa-var-battery-empty: "\f244"; @fa-var-battery-full: "\f240"; @fa-var-battery-half: "\f242"; @fa-var-battery-quarter: "\f243"; @fa-var-battery-three-quarters: "\f241"; @fa-var-bed: "\f236"; @fa-var-beer: "\f0fc"; @fa-var-behance: "\f1b4"; @fa-var-behance-square: "\f1b5"; @fa-var-bell: "\f0f3"; @fa-var-bell-o: "\f0a2"; @fa-var-bell-slash: "\f1f6"; @fa-var-bell-slash-o: "\f1f7"; @fa-var-bicycle: "\f206"; @fa-var-binoculars: "\f1e5"; @fa-var-birthday-cake: "\f1fd"; @fa-var-bitbucket: "\f171"; @fa-var-bitbucket-square: "\f172"; @fa-var-bitcoin: "\f15a"; @fa-var-black-tie: "\f27e"; @fa-var-blind: "\f29d"; @fa-var-bluetooth: "\f293"; @fa-var-bluetooth-b: "\f294"; @fa-var-bold: "\f032"; @fa-var-bolt: "\f0e7"; @fa-var-bomb: "\f1e2"; @fa-var-book: "\f02d"; @fa-var-bookmark: "\f02e"; @fa-var-bookmark-o: "\f097"; @fa-var-braille: "\f2a1"; @fa-var-briefcase: "\f0b1"; @fa-var-btc: "\f15a"; @fa-var-bug: "\f188"; @fa-var-building: "\f1ad"; @fa-var-building-o: "\f0f7"; @fa-var-bullhorn: "\f0a1"; @fa-var-bullseye: "\f140"; @fa-var-bus: "\f207"; @fa-var-buysellads: "\f20d"; @fa-var-cab: "\f1ba"; @fa-var-calculator: "\f1ec"; @fa-var-calendar: "\f073"; @fa-var-calendar-check-o: "\f274"; @fa-var-calendar-minus-o: "\f272"; @fa-var-calendar-o: "\f133"; @fa-var-calendar-plus-o: "\f271"; @fa-var-calendar-times-o: "\f273"; @fa-var-camera: "\f030"; @fa-var-camera-retro: "\f083"; @fa-var-car: "\f1b9"; @fa-var-caret-down: "\f0d7"; @fa-var-caret-left: "\f0d9"; @fa-var-caret-right: "\f0da"; @fa-var-caret-square-o-down: "\f150"; @fa-var-caret-square-o-left: "\f191"; @fa-var-caret-square-o-right: "\f152"; @fa-var-caret-square-o-up: "\f151"; @fa-var-caret-up: "\f0d8"; @fa-var-cart-arrow-down: "\f218"; @fa-var-cart-plus: "\f217"; @fa-var-cc: "\f20a"; @fa-var-cc-amex: "\f1f3"; @fa-var-cc-diners-club: "\f24c"; @fa-var-cc-discover: "\f1f2"; @fa-var-cc-jcb: "\f24b"; @fa-var-cc-mastercard: "\f1f1"; @fa-var-cc-paypal: "\f1f4"; @fa-var-cc-stripe: "\f1f5"; @fa-var-cc-visa: "\f1f0"; @fa-var-certificate: "\f0a3"; @fa-var-chain: "\f0c1"; @fa-var-chain-broken: "\f127"; @fa-var-check: "\f00c"; @fa-var-check-circle: "\f058"; @fa-var-check-circle-o: "\f05d"; @fa-var-check-square: "\f14a"; @fa-var-check-square-o: "\f046"; @fa-var-chevron-circle-down: "\f13a"; @fa-var-chevron-circle-left: "\f137"; @fa-var-chevron-circle-right: "\f138"; @fa-var-chevron-circle-up: "\f139"; @fa-var-chevron-down: "\f078"; @fa-var-chevron-left: "\f053"; @fa-var-chevron-right: "\f054"; @fa-var-chevron-up: "\f077"; @fa-var-child: "\f1ae"; @fa-var-chrome: "\f268"; @fa-var-circle: "\f111"; @fa-var-circle-o: "\f10c"; @fa-var-circle-o-notch: "\f1ce"; @fa-var-circle-thin: "\f1db"; @fa-var-clipboard: "\f0ea"; @fa-var-clock-o: "\f017"; @fa-var-clone: "\f24d"; @fa-var-close: "\f00d"; @fa-var-cloud: "\f0c2"; @fa-var-cloud-download: "\f0ed"; @fa-var-cloud-upload: "\f0ee"; @fa-var-cny: "\f157"; @fa-var-code: "\f121"; @fa-var-code-fork: "\f126"; @fa-var-codepen: "\f1cb"; @fa-var-codiepie: "\f284"; @fa-var-coffee: "\f0f4"; @fa-var-cog: "\f013"; @fa-var-cogs: "\f085"; @fa-var-columns: "\f0db"; @fa-var-comment: "\f075"; @fa-var-comment-o: "\f0e5"; @fa-var-commenting: "\f27a"; @fa-var-commenting-o: "\f27b"; @fa-var-comments: "\f086"; @fa-var-comments-o: "\f0e6"; @fa-var-compass: "\f14e"; @fa-var-compress: "\f066"; @fa-var-connectdevelop: "\f20e"; @fa-var-contao: "\f26d"; @fa-var-copy: "\f0c5"; @fa-var-copyright: "\f1f9"; @fa-var-creative-commons: "\f25e"; @fa-var-credit-card: "\f09d"; @fa-var-credit-card-alt: "\f283"; @fa-var-crop: "\f125"; @fa-var-crosshairs: "\f05b"; @fa-var-css3: "\f13c"; @fa-var-cube: "\f1b2"; @fa-var-cubes: "\f1b3"; @fa-var-cut: "\f0c4"; @fa-var-cutlery: "\f0f5"; @fa-var-dashboard: "\f0e4"; @fa-var-dashcube: "\f210"; @fa-var-database: "\f1c0"; @fa-var-deaf: "\f2a4"; @fa-var-deafness: "\f2a4"; @fa-var-dedent: "\f03b"; @fa-var-delicious: "\f1a5"; @fa-var-desktop: "\f108"; @fa-var-deviantart: "\f1bd"; @fa-var-diamond: "\f219"; @fa-var-digg: "\f1a6"; @fa-var-dollar: "\f155"; @fa-var-dot-circle-o: "\f192"; @fa-var-download: "\f019"; @fa-var-dribbble: "\f17d"; @fa-var-drivers-license: "\f2c2"; @fa-var-drivers-license-o: "\f2c3"; @fa-var-dropbox: "\f16b"; @fa-var-drupal: "\f1a9"; @fa-var-edge: "\f282"; @fa-var-edit: "\f044"; @fa-var-eercast: "\f2da"; @fa-var-eject: "\f052"; @fa-var-ellipsis-h: "\f141"; @fa-var-ellipsis-v: "\f142"; @fa-var-empire: "\f1d1"; @fa-var-envelope: "\f0e0"; @fa-var-envelope-o: "\f003"; @fa-var-envelope-open: "\f2b6"; @fa-var-envelope-open-o: "\f2b7"; @fa-var-envelope-square: "\f199"; @fa-var-envira: "\f299"; @fa-var-eraser: "\f12d"; @fa-var-etsy: "\f2d7"; @fa-var-eur: "\f153"; @fa-var-euro: "\f153"; @fa-var-exchange: "\f0ec"; @fa-var-exclamation: "\f12a"; @fa-var-exclamation-circle: "\f06a"; @fa-var-exclamation-triangle: "\f071"; @fa-var-expand: "\f065"; @fa-var-expeditedssl: "\f23e"; @fa-var-external-link: "\f08e"; @fa-var-external-link-square: "\f14c"; @fa-var-eye: "\f06e"; @fa-var-eye-slash: "\f070"; @fa-var-eyedropper: "\f1fb"; @fa-var-fa: "\f2b4"; @fa-var-facebook: "\f09a"; @fa-var-facebook-f: "\f09a"; @fa-var-facebook-official: "\f230"; @fa-var-facebook-square: "\f082"; @fa-var-fast-backward: "\f049"; @fa-var-fast-forward: "\f050"; @fa-var-fax: "\f1ac"; @fa-var-feed: "\f09e"; @fa-var-female: "\f182"; @fa-var-fighter-jet: "\f0fb"; @fa-var-file: "\f15b"; @fa-var-file-archive-o: "\f1c6"; @fa-var-file-audio-o: "\f1c7"; @fa-var-file-code-o: "\f1c9"; @fa-var-file-excel-o: "\f1c3"; @fa-var-file-image-o: "\f1c5"; @fa-var-file-movie-o: "\f1c8"; @fa-var-file-o: "\f016"; @fa-var-file-pdf-o: "\f1c1"; @fa-var-file-photo-o: "\f1c5"; @fa-var-file-picture-o: "\f1c5"; @fa-var-file-powerpoint-o: "\f1c4"; @fa-var-file-sound-o: "\f1c7"; @fa-var-file-text: "\f15c"; @fa-var-file-text-o: "\f0f6"; @fa-var-file-video-o: "\f1c8"; @fa-var-file-word-o: "\f1c2"; @fa-var-file-zip-o: "\f1c6"; @fa-var-files-o: "\f0c5"; @fa-var-film: "\f008"; @fa-var-filter: "\f0b0"; @fa-var-fire: "\f06d"; @fa-var-fire-extinguisher: "\f134"; @fa-var-firefox: "\f269"; @fa-var-first-order: "\f2b0"; @fa-var-flag: "\f024"; @fa-var-flag-checkered: "\f11e"; @fa-var-flag-o: "\f11d"; @fa-var-flash: "\f0e7"; @fa-var-flask: "\f0c3"; @fa-var-flickr: "\f16e"; @fa-var-floppy-o: "\f0c7"; @fa-var-folder: "\f07b"; @fa-var-folder-o: "\f114"; @fa-var-folder-open: "\f07c"; @fa-var-folder-open-o: "\f115"; @fa-var-font: "\f031"; @fa-var-font-awesome: "\f2b4"; @fa-var-fonticons: "\f280"; @fa-var-fort-awesome: "\f286"; @fa-var-forumbee: "\f211"; @fa-var-forward: "\f04e"; @fa-var-foursquare: "\f180"; @fa-var-free-code-camp: "\f2c5"; @fa-var-frown-o: "\f119"; @fa-var-futbol-o: "\f1e3"; @fa-var-gamepad: "\f11b"; @fa-var-gavel: "\f0e3"; @fa-var-gbp: "\f154"; @fa-var-ge: "\f1d1"; @fa-var-gear: "\f013"; @fa-var-gears: "\f085"; @fa-var-genderless: "\f22d"; @fa-var-get-pocket: "\f265"; @fa-var-gg: "\f260"; @fa-var-gg-circle: "\f261"; @fa-var-gift: "\f06b"; @fa-var-git: "\f1d3"; @fa-var-git-square: "\f1d2"; @fa-var-github: "\f09b"; @fa-var-github-alt: "\f113"; @fa-var-github-square: "\f092"; @fa-var-gitlab: "\f296"; @fa-var-gittip: "\f184"; @fa-var-glass: "\f000"; @fa-var-glide: "\f2a5"; @fa-var-glide-g: "\f2a6"; @fa-var-globe: "\f0ac"; @fa-var-google: "\f1a0"; @fa-var-google-plus: "\f0d5"; @fa-var-google-plus-circle: "\f2b3"; @fa-var-google-plus-official: "\f2b3"; @fa-var-google-plus-square: "\f0d4"; @fa-var-google-wallet: "\f1ee"; @fa-var-graduation-cap: "\f19d"; @fa-var-gratipay: "\f184"; @fa-var-grav: "\f2d6"; @fa-var-group: "\f0c0"; @fa-var-h-square: "\f0fd"; @fa-var-hacker-news: "\f1d4"; @fa-var-hand-grab-o: "\f255"; @fa-var-hand-lizard-o: "\f258"; @fa-var-hand-o-down: "\f0a7"; @fa-var-hand-o-left: "\f0a5"; @fa-var-hand-o-right: "\f0a4"; @fa-var-hand-o-up: "\f0a6"; @fa-var-hand-paper-o: "\f256"; @fa-var-hand-peace-o: "\f25b"; @fa-var-hand-pointer-o: "\f25a"; @fa-var-hand-rock-o: "\f255"; @fa-var-hand-scissors-o: "\f257"; @fa-var-hand-spock-o: "\f259"; @fa-var-hand-stop-o: "\f256"; @fa-var-handshake-o: "\f2b5"; @fa-var-hard-of-hearing: "\f2a4"; @fa-var-hashtag: "\f292"; @fa-var-hdd-o: "\f0a0"; @fa-var-header: "\f1dc"; @fa-var-headphones: "\f025"; @fa-var-heart: "\f004"; @fa-var-heart-o: "\f08a"; @fa-var-heartbeat: "\f21e"; @fa-var-history: "\f1da"; @fa-var-home: "\f015"; @fa-var-hospital-o: "\f0f8"; @fa-var-hotel: "\f236"; @fa-var-hourglass: "\f254"; @fa-var-hourglass-1: "\f251"; @fa-var-hourglass-2: "\f252"; @fa-var-hourglass-3: "\f253"; @fa-var-hourglass-end: "\f253"; @fa-var-hourglass-half: "\f252"; @fa-var-hourglass-o: "\f250"; @fa-var-hourglass-start: "\f251"; @fa-var-houzz: "\f27c"; @fa-var-html5: "\f13b"; @fa-var-i-cursor: "\f246"; @fa-var-id-badge: "\f2c1"; @fa-var-id-card: "\f2c2"; @fa-var-id-card-o: "\f2c3"; @fa-var-ils: "\f20b"; @fa-var-image: "\f03e"; @fa-var-imdb: "\f2d8"; @fa-var-inbox: "\f01c"; @fa-var-indent: "\f03c"; @fa-var-industry: "\f275"; @fa-var-info: "\f129"; @fa-var-info-circle: "\f05a"; @fa-var-inr: "\f156"; @fa-var-instagram: "\f16d"; @fa-var-institution: "\f19c"; @fa-var-internet-explorer: "\f26b"; @fa-var-intersex: "\f224"; @fa-var-ioxhost: "\f208"; @fa-var-italic: "\f033"; @fa-var-joomla: "\f1aa"; @fa-var-jpy: "\f157"; @fa-var-jsfiddle: "\f1cc"; @fa-var-key: "\f084"; @fa-var-keyboard-o: "\f11c"; @fa-var-krw: "\f159"; @fa-var-language: "\f1ab"; @fa-var-laptop: "\f109"; @fa-var-lastfm: "\f202"; @fa-var-lastfm-square: "\f203"; @fa-var-leaf: "\f06c"; @fa-var-leanpub: "\f212"; @fa-var-legal: "\f0e3"; @fa-var-lemon-o: "\f094"; @fa-var-level-down: "\f149"; @fa-var-level-up: "\f148"; @fa-var-life-bouy: "\f1cd"; @fa-var-life-buoy: "\f1cd"; @fa-var-life-ring: "\f1cd"; @fa-var-life-saver: "\f1cd"; @fa-var-lightbulb-o: "\f0eb"; @fa-var-line-chart: "\f201"; @fa-var-link: "\f0c1"; @fa-var-linkedin: "\f0e1"; @fa-var-linkedin-square: "\f08c"; @fa-var-linode: "\f2b8"; @fa-var-linux: "\f17c"; @fa-var-list: "\f03a"; @fa-var-list-alt: "\f022"; @fa-var-list-ol: "\f0cb"; @fa-var-list-ul: "\f0ca"; @fa-var-location-arrow: "\f124"; @fa-var-lock: "\f023"; @fa-var-long-arrow-down: "\f175"; @fa-var-long-arrow-left: "\f177"; @fa-var-long-arrow-right: "\f178"; @fa-var-long-arrow-up: "\f176"; @fa-var-low-vision: "\f2a8"; @fa-var-magic: "\f0d0"; @fa-var-magnet: "\f076"; @fa-var-mail-forward: "\f064"; @fa-var-mail-reply: "\f112"; @fa-var-mail-reply-all: "\f122"; @fa-var-male: "\f183"; @fa-var-map: "\f279"; @fa-var-map-marker: "\f041"; @fa-var-map-o: "\f278"; @fa-var-map-pin: "\f276"; @fa-var-map-signs: "\f277"; @fa-var-mars: "\f222"; @fa-var-mars-double: "\f227"; @fa-var-mars-stroke: "\f229"; @fa-var-mars-stroke-h: "\f22b"; @fa-var-mars-stroke-v: "\f22a"; @fa-var-maxcdn: "\f136"; @fa-var-meanpath: "\f20c"; @fa-var-medium: "\f23a"; @fa-var-medkit: "\f0fa"; @fa-var-meetup: "\f2e0"; @fa-var-meh-o: "\f11a"; @fa-var-mercury: "\f223"; @fa-var-microchip: "\f2db"; @fa-var-microphone: "\f130"; @fa-var-microphone-slash: "\f131"; @fa-var-minus: "\f068"; @fa-var-minus-circle: "\f056"; @fa-var-minus-square: "\f146"; @fa-var-minus-square-o: "\f147"; @fa-var-mixcloud: "\f289"; @fa-var-mobile: "\f10b"; @fa-var-mobile-phone: "\f10b"; @fa-var-modx: "\f285"; @fa-var-money: "\f0d6"; @fa-var-moon-o: "\f186"; @fa-var-mortar-board: "\f19d"; @fa-var-motorcycle: "\f21c"; @fa-var-mouse-pointer: "\f245"; @fa-var-music: "\f001"; @fa-var-navicon: "\f0c9"; @fa-var-neuter: "\f22c"; @fa-var-newspaper-o: "\f1ea"; @fa-var-object-group: "\f247"; @fa-var-object-ungroup: "\f248"; @fa-var-odnoklassniki: "\f263"; @fa-var-odnoklassniki-square: "\f264"; @fa-var-opencart: "\f23d"; @fa-var-openid: "\f19b"; @fa-var-opera: "\f26a"; @fa-var-optin-monster: "\f23c"; @fa-var-outdent: "\f03b"; @fa-var-pagelines: "\f18c"; @fa-var-paint-brush: "\f1fc"; @fa-var-paper-plane: "\f1d8"; @fa-var-paper-plane-o: "\f1d9"; @fa-var-paperclip: "\f0c6"; @fa-var-paragraph: "\f1dd"; @fa-var-paste: "\f0ea"; @fa-var-pause: "\f04c"; @fa-var-pause-circle: "\f28b"; @fa-var-pause-circle-o: "\f28c"; @fa-var-paw: "\f1b0"; @fa-var-paypal: "\f1ed"; @fa-var-pencil: "\f040"; @fa-var-pencil-square: "\f14b"; @fa-var-pencil-square-o: "\f044"; @fa-var-percent: "\f295"; @fa-var-phone: "\f095"; @fa-var-phone-square: "\f098"; @fa-var-photo: "\f03e"; @fa-var-picture-o: "\f03e"; @fa-var-pie-chart: "\f200"; @fa-var-pied-piper: "\f2ae"; @fa-var-pied-piper-alt: "\f1a8"; @fa-var-pied-piper-pp: "\f1a7"; @fa-var-pinterest: "\f0d2"; @fa-var-pinterest-p: "\f231"; @fa-var-pinterest-square: "\f0d3"; @fa-var-plane: "\f072"; @fa-var-play: "\f04b"; @fa-var-play-circle: "\f144"; @fa-var-play-circle-o: "\f01d"; @fa-var-plug: "\f1e6"; @fa-var-plus: "\f067"; @fa-var-plus-circle: "\f055"; @fa-var-plus-square: "\f0fe"; @fa-var-plus-square-o: "\f196"; @fa-var-podcast: "\f2ce"; @fa-var-power-off: "\f011"; @fa-var-print: "\f02f"; @fa-var-product-hunt: "\f288"; @fa-var-puzzle-piece: "\f12e"; @fa-var-qq: "\f1d6"; @fa-var-qrcode: "\f029"; @fa-var-question: "\f128"; @fa-var-question-circle: "\f059"; @fa-var-question-circle-o: "\f29c"; @fa-var-quora: "\f2c4"; @fa-var-quote-left: "\f10d"; @fa-var-quote-right: "\f10e"; @fa-var-ra: "\f1d0"; @fa-var-random: "\f074"; @fa-var-ravelry: "\f2d9"; @fa-var-rebel: "\f1d0"; @fa-var-recycle: "\f1b8"; @fa-var-reddit: "\f1a1"; @fa-var-reddit-alien: "\f281"; @fa-var-reddit-square: "\f1a2"; @fa-var-refresh: "\f021"; @fa-var-registered: "\f25d"; @fa-var-remove: "\f00d"; @fa-var-renren: "\f18b"; @fa-var-reorder: "\f0c9"; @fa-var-repeat: "\f01e"; @fa-var-reply: "\f112"; @fa-var-reply-all: "\f122"; @fa-var-resistance: "\f1d0"; @fa-var-retweet: "\f079"; @fa-var-rmb: "\f157"; @fa-var-road: "\f018"; @fa-var-rocket: "\f135"; @fa-var-rotate-left: "\f0e2"; @fa-var-rotate-right: "\f01e"; @fa-var-rouble: "\f158"; @fa-var-rss: "\f09e"; @fa-var-rss-square: "\f143"; @fa-var-rub: "\f158"; @fa-var-ruble: "\f158"; @fa-var-rupee: "\f156"; @fa-var-s15: "\f2cd"; @fa-var-safari: "\f267"; @fa-var-save: "\f0c7"; @fa-var-scissors: "\f0c4"; @fa-var-scribd: "\f28a"; @fa-var-search: "\f002"; @fa-var-search-minus: "\f010"; @fa-var-search-plus: "\f00e"; @fa-var-sellsy: "\f213"; @fa-var-send: "\f1d8"; @fa-var-send-o: "\f1d9"; @fa-var-server: "\f233"; @fa-var-share: "\f064"; @fa-var-share-alt: "\f1e0"; @fa-var-share-alt-square: "\f1e1"; @fa-var-share-square: "\f14d"; @fa-var-share-square-o: "\f045"; @fa-var-shekel: "\f20b"; @fa-var-sheqel: "\f20b"; @fa-var-shield: "\f132"; @fa-var-ship: "\f21a"; @fa-var-shirtsinbulk: "\f214"; @fa-var-shopping-bag: "\f290"; @fa-var-shopping-basket: "\f291"; @fa-var-shopping-cart: "\f07a"; @fa-var-shower: "\f2cc"; @fa-var-sign-in: "\f090"; @fa-var-sign-language: "\f2a7"; @fa-var-sign-out: "\f08b"; @fa-var-signal: "\f012"; @fa-var-signing: "\f2a7"; @fa-var-simplybuilt: "\f215"; @fa-var-sitemap: "\f0e8"; @fa-var-skyatlas: "\f216"; @fa-var-skype: "\f17e"; @fa-var-slack: "\f198"; @fa-var-sliders: "\f1de"; @fa-var-slideshare: "\f1e7"; @fa-var-smile-o: "\f118"; @fa-var-snapchat: "\f2ab"; @fa-var-snapchat-ghost: "\f2ac"; @fa-var-snapchat-square: "\f2ad"; @fa-var-snowflake-o: "\f2dc"; @fa-var-soccer-ball-o: "\f1e3"; @fa-var-sort: "\f0dc"; @fa-var-sort-alpha-asc: "\f15d"; @fa-var-sort-alpha-desc: "\f15e"; @fa-var-sort-amount-asc: "\f160"; @fa-var-sort-amount-desc: "\f161"; @fa-var-sort-asc: "\f0de"; @fa-var-sort-desc: "\f0dd"; @fa-var-sort-down: "\f0dd"; @fa-var-sort-numeric-asc: "\f162"; @fa-var-sort-numeric-desc: "\f163"; @fa-var-sort-up: "\f0de"; @fa-var-soundcloud: "\f1be"; @fa-var-space-shuttle: "\f197"; @fa-var-spinner: "\f110"; @fa-var-spoon: "\f1b1"; @fa-var-spotify: "\f1bc"; @fa-var-square: "\f0c8"; @fa-var-square-o: "\f096"; @fa-var-stack-exchange: "\f18d"; @fa-var-stack-overflow: "\f16c"; @fa-var-star: "\f005"; @fa-var-star-half: "\f089"; @fa-var-star-half-empty: "\f123"; @fa-var-star-half-full: "\f123"; @fa-var-star-half-o: "\f123"; @fa-var-star-o: "\f006"; @fa-var-steam: "\f1b6"; @fa-var-steam-square: "\f1b7"; @fa-var-step-backward: "\f048"; @fa-var-step-forward: "\f051"; @fa-var-stethoscope: "\f0f1"; @fa-var-sticky-note: "\f249"; @fa-var-sticky-note-o: "\f24a"; @fa-var-stop: "\f04d"; @fa-var-stop-circle: "\f28d"; @fa-var-stop-circle-o: "\f28e"; @fa-var-street-view: "\f21d"; @fa-var-strikethrough: "\f0cc"; @fa-var-stumbleupon: "\f1a4"; @fa-var-stumbleupon-circle: "\f1a3"; @fa-var-subscript: "\f12c"; @fa-var-subway: "\f239"; @fa-var-suitcase: "\f0f2"; @fa-var-sun-o: "\f185"; @fa-var-superpowers: "\f2dd"; @fa-var-superscript: "\f12b"; @fa-var-support: "\f1cd"; @fa-var-table: "\f0ce"; @fa-var-tablet: "\f10a"; @fa-var-tachometer: "\f0e4"; @fa-var-tag: "\f02b"; @fa-var-tags: "\f02c"; @fa-var-tasks: "\f0ae"; @fa-var-taxi: "\f1ba"; @fa-var-telegram: "\f2c6"; @fa-var-television: "\f26c"; @fa-var-tencent-weibo: "\f1d5"; @fa-var-terminal: "\f120"; @fa-var-text-height: "\f034"; @fa-var-text-width: "\f035"; @fa-var-th: "\f00a"; @fa-var-th-large: "\f009"; @fa-var-th-list: "\f00b"; @fa-var-themeisle: "\f2b2"; @fa-var-thermometer: "\f2c7"; @fa-var-thermometer-0: "\f2cb"; @fa-var-thermometer-1: "\f2ca"; @fa-var-thermometer-2: "\f2c9"; @fa-var-thermometer-3: "\f2c8"; @fa-var-thermometer-4: "\f2c7"; @fa-var-thermometer-empty: "\f2cb"; @fa-var-thermometer-full: "\f2c7"; @fa-var-thermometer-half: "\f2c9"; @fa-var-thermometer-quarter: "\f2ca"; @fa-var-thermometer-three-quarters: "\f2c8"; @fa-var-thumb-tack: "\f08d"; @fa-var-thumbs-down: "\f165"; @fa-var-thumbs-o-down: "\f088"; @fa-var-thumbs-o-up: "\f087"; @fa-var-thumbs-up: "\f164"; @fa-var-ticket: "\f145"; @fa-var-times: "\f00d"; @fa-var-times-circle: "\f057"; @fa-var-times-circle-o: "\f05c"; @fa-var-times-rectangle: "\f2d3"; @fa-var-times-rectangle-o: "\f2d4"; @fa-var-tint: "\f043"; @fa-var-toggle-down: "\f150"; @fa-var-toggle-left: "\f191"; @fa-var-toggle-off: "\f204"; @fa-var-toggle-on: "\f205"; @fa-var-toggle-right: "\f152"; @fa-var-toggle-up: "\f151"; @fa-var-trademark: "\f25c"; @fa-var-train: "\f238"; @fa-var-transgender: "\f224"; @fa-var-transgender-alt: "\f225"; @fa-var-trash: "\f1f8"; @fa-var-trash-o: "\f014"; @fa-var-tree: "\f1bb"; @fa-var-trello: "\f181"; @fa-var-tripadvisor: "\f262"; @fa-var-trophy: "\f091"; @fa-var-truck: "\f0d1"; @fa-var-try: "\f195"; @fa-var-tty: "\f1e4"; @fa-var-tumblr: "\f173"; @fa-var-tumblr-square: "\f174"; @fa-var-turkish-lira: "\f195"; @fa-var-tv: "\f26c"; @fa-var-twitch: "\f1e8"; @fa-var-twitter: "\f099"; @fa-var-twitter-square: "\f081"; @fa-var-umbrella: "\f0e9"; @fa-var-underline: "\f0cd"; @fa-var-undo: "\f0e2"; @fa-var-universal-access: "\f29a"; @fa-var-university: "\f19c"; @fa-var-unlink: "\f127"; @fa-var-unlock: "\f09c"; @fa-var-unlock-alt: "\f13e"; @fa-var-unsorted: "\f0dc"; @fa-var-upload: "\f093"; @fa-var-usb: "\f287"; @fa-var-usd: "\f155"; @fa-var-user: "\f007"; @fa-var-user-circle: "\f2bd"; @fa-var-user-circle-o: "\f2be"; @fa-var-user-md: "\f0f0"; @fa-var-user-o: "\f2c0"; @fa-var-user-plus: "\f234"; @fa-var-user-secret: "\f21b"; @fa-var-user-times: "\f235"; @fa-var-users: "\f0c0"; @fa-var-vcard: "\f2bb"; @fa-var-vcard-o: "\f2bc"; @fa-var-venus: "\f221"; @fa-var-venus-double: "\f226"; @fa-var-venus-mars: "\f228"; @fa-var-viacoin: "\f237"; @fa-var-viadeo: "\f2a9"; @fa-var-viadeo-square: "\f2aa"; @fa-var-video-camera: "\f03d"; @fa-var-vimeo: "\f27d"; @fa-var-vimeo-square: "\f194"; @fa-var-vine: "\f1ca"; @fa-var-vk: "\f189"; @fa-var-volume-control-phone: "\f2a0"; @fa-var-volume-down: "\f027"; @fa-var-volume-off: "\f026"; @fa-var-volume-up: "\f028"; @fa-var-warning: "\f071"; @fa-var-wechat: "\f1d7"; @fa-var-weibo: "\f18a"; @fa-var-weixin: "\f1d7"; @fa-var-whatsapp: "\f232"; @fa-var-wheelchair: "\f193"; @fa-var-wheelchair-alt: "\f29b"; @fa-var-wifi: "\f1eb"; @fa-var-wikipedia-w: "\f266"; @fa-var-window-close: "\f2d3"; @fa-var-window-close-o: "\f2d4"; @fa-var-window-maximize: "\f2d0"; @fa-var-window-minimize: "\f2d1"; @fa-var-window-restore: "\f2d2"; @fa-var-windows: "\f17a"; @fa-var-won: "\f159"; @fa-var-wordpress: "\f19a"; @fa-var-wpbeginner: "\f297"; @fa-var-wpexplorer: "\f2de"; @fa-var-wpforms: "\f298"; @fa-var-wrench: "\f0ad"; @fa-var-xing: "\f168"; @fa-var-xing-square: "\f169"; @fa-var-y-combinator: "\f23b"; @fa-var-y-combinator-square: "\f1d4"; @fa-var-yahoo: "\f19e"; @fa-var-yc: "\f23b"; @fa-var-yc-square: "\f1d4"; @fa-var-yelp: "\f1e9"; @fa-var-yen: "\f157"; @fa-var-yoast: "\f2b1"; @fa-var-youtube: "\f167"; @fa-var-youtube-play: "\f16a"; @fa-var-youtube-square: "\f166"; ================================================ FILE: static/fonts/font-awesome-4.7.0/scss/_animated.scss ================================================ // Spinning Icons // -------------------------- .#{$fa-css-prefix}-spin { -webkit-animation: fa-spin 2s infinite linear; animation: fa-spin 2s infinite linear; } .#{$fa-css-prefix}-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); } } ================================================ FILE: static/fonts/font-awesome-4.7.0/scss/_bordered-pulled.scss ================================================ // Bordered & Pulled // ------------------------- .#{$fa-css-prefix}-border { padding: .2em .25em .15em; border: solid .08em $fa-border-color; border-radius: .1em; } .#{$fa-css-prefix}-pull-left { float: left; } .#{$fa-css-prefix}-pull-right { float: right; } .#{$fa-css-prefix} { &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } } /* Deprecated as of 4.4.0 */ .pull-right { float: right; } .pull-left { float: left; } .#{$fa-css-prefix} { &.pull-left { margin-right: .3em; } &.pull-right { margin-left: .3em; } } ================================================ FILE: static/fonts/font-awesome-4.7.0/scss/_core.scss ================================================ // Base Class Definition // ------------------------- .#{$fa-css-prefix} { display: inline-block; font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } ================================================ FILE: static/fonts/font-awesome-4.7.0/scss/_fixed-width.scss ================================================ // Fixed Width Icons // ------------------------- .#{$fa-css-prefix}-fw { width: (18em / 14); text-align: center; } ================================================ FILE: static/fonts/font-awesome-4.7.0/scss/_icons.scss ================================================ /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-glass:before { content: $fa-var-glass; } .#{$fa-css-prefix}-music:before { content: $fa-var-music; } .#{$fa-css-prefix}-search:before { content: $fa-var-search; } .#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; } .#{$fa-css-prefix}-heart:before { content: $fa-var-heart; } .#{$fa-css-prefix}-star:before { content: $fa-var-star; } .#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; } .#{$fa-css-prefix}-user:before { content: $fa-var-user; } .#{$fa-css-prefix}-film:before { content: $fa-var-film; } .#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; } .#{$fa-css-prefix}-th:before { content: $fa-var-th; } .#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; } .#{$fa-css-prefix}-check:before { content: $fa-var-check; } .#{$fa-css-prefix}-remove:before, .#{$fa-css-prefix}-close:before, .#{$fa-css-prefix}-times:before { content: $fa-var-times; } .#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; } .#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; } .#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; } .#{$fa-css-prefix}-signal:before { content: $fa-var-signal; } .#{$fa-css-prefix}-gear:before, .#{$fa-css-prefix}-cog:before { content: $fa-var-cog; } .#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; } .#{$fa-css-prefix}-home:before { content: $fa-var-home; } .#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; } .#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; } .#{$fa-css-prefix}-road:before { content: $fa-var-road; } .#{$fa-css-prefix}-download:before { content: $fa-var-download; } .#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; } .#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; } .#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; } .#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; } .#{$fa-css-prefix}-rotate-right:before, .#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; } .#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; } .#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; } .#{$fa-css-prefix}-lock:before { content: $fa-var-lock; } .#{$fa-css-prefix}-flag:before { content: $fa-var-flag; } .#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; } .#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; } .#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; } .#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; } .#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; } .#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; } .#{$fa-css-prefix}-tag:before { content: $fa-var-tag; } .#{$fa-css-prefix}-tags:before { content: $fa-var-tags; } .#{$fa-css-prefix}-book:before { content: $fa-var-book; } .#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; } .#{$fa-css-prefix}-print:before { content: $fa-var-print; } .#{$fa-css-prefix}-camera:before { content: $fa-var-camera; } .#{$fa-css-prefix}-font:before { content: $fa-var-font; } .#{$fa-css-prefix}-bold:before { content: $fa-var-bold; } .#{$fa-css-prefix}-italic:before { content: $fa-var-italic; } .#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; } .#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; } .#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; } .#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; } .#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; } .#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; } .#{$fa-css-prefix}-list:before { content: $fa-var-list; } .#{$fa-css-prefix}-dedent:before, .#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; } .#{$fa-css-prefix}-indent:before { content: $fa-var-indent; } .#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; } .#{$fa-css-prefix}-photo:before, .#{$fa-css-prefix}-image:before, .#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; } .#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; } .#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; } .#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; } .#{$fa-css-prefix}-tint:before { content: $fa-var-tint; } .#{$fa-css-prefix}-edit:before, .#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; } .#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; } .#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; } .#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; } .#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; } .#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; } .#{$fa-css-prefix}-backward:before { content: $fa-var-backward; } .#{$fa-css-prefix}-play:before { content: $fa-var-play; } .#{$fa-css-prefix}-pause:before { content: $fa-var-pause; } .#{$fa-css-prefix}-stop:before { content: $fa-var-stop; } .#{$fa-css-prefix}-forward:before { content: $fa-var-forward; } .#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; } .#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; } .#{$fa-css-prefix}-eject:before { content: $fa-var-eject; } .#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; } .#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; } .#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; } .#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; } .#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; } .#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; } .#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; } .#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; } .#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; } .#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; } .#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; } .#{$fa-css-prefix}-ban:before { content: $fa-var-ban; } .#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; } .#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; } .#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; } .#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; } .#{$fa-css-prefix}-mail-forward:before, .#{$fa-css-prefix}-share:before { content: $fa-var-share; } .#{$fa-css-prefix}-expand:before { content: $fa-var-expand; } .#{$fa-css-prefix}-compress:before { content: $fa-var-compress; } .#{$fa-css-prefix}-plus:before { content: $fa-var-plus; } .#{$fa-css-prefix}-minus:before { content: $fa-var-minus; } .#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; } .#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; } .#{$fa-css-prefix}-gift:before { content: $fa-var-gift; } .#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; } .#{$fa-css-prefix}-fire:before { content: $fa-var-fire; } .#{$fa-css-prefix}-eye:before { content: $fa-var-eye; } .#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; } .#{$fa-css-prefix}-warning:before, .#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; } .#{$fa-css-prefix}-plane:before { content: $fa-var-plane; } .#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; } .#{$fa-css-prefix}-random:before { content: $fa-var-random; } .#{$fa-css-prefix}-comment:before { content: $fa-var-comment; } .#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; } .#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; } .#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; } .#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; } .#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; } .#{$fa-css-prefix}-folder:before { content: $fa-var-folder; } .#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; } .#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; } .#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; } .#{$fa-css-prefix}-bar-chart-o:before, .#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; } .#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; } .#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; } .#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; } .#{$fa-css-prefix}-key:before { content: $fa-var-key; } .#{$fa-css-prefix}-gears:before, .#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; } .#{$fa-css-prefix}-comments:before { content: $fa-var-comments; } .#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; } .#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; } .#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; } .#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; } .#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; } .#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; } .#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; } .#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; } .#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; } .#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; } .#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; } .#{$fa-css-prefix}-upload:before { content: $fa-var-upload; } .#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; } .#{$fa-css-prefix}-phone:before { content: $fa-var-phone; } .#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; } .#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; } .#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; } .#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; } .#{$fa-css-prefix}-facebook-f:before, .#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; } .#{$fa-css-prefix}-github:before { content: $fa-var-github; } .#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; } .#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; } .#{$fa-css-prefix}-feed:before, .#{$fa-css-prefix}-rss:before { content: $fa-var-rss; } .#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; } .#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; } .#{$fa-css-prefix}-bell:before { content: $fa-var-bell; } .#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; } .#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; } .#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; } .#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; } .#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; } .#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; } .#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; } .#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; } .#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; } .#{$fa-css-prefix}-globe:before { content: $fa-var-globe; } .#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; } .#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; } .#{$fa-css-prefix}-filter:before { content: $fa-var-filter; } .#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; } .#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; } .#{$fa-css-prefix}-group:before, .#{$fa-css-prefix}-users:before { content: $fa-var-users; } .#{$fa-css-prefix}-chain:before, .#{$fa-css-prefix}-link:before { content: $fa-var-link; } .#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; } .#{$fa-css-prefix}-flask:before { content: $fa-var-flask; } .#{$fa-css-prefix}-cut:before, .#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; } .#{$fa-css-prefix}-copy:before, .#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; } .#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; } .#{$fa-css-prefix}-save:before, .#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; } .#{$fa-css-prefix}-square:before { content: $fa-var-square; } .#{$fa-css-prefix}-navicon:before, .#{$fa-css-prefix}-reorder:before, .#{$fa-css-prefix}-bars:before { content: $fa-var-bars; } .#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; } .#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; } .#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; } .#{$fa-css-prefix}-underline:before { content: $fa-var-underline; } .#{$fa-css-prefix}-table:before { content: $fa-var-table; } .#{$fa-css-prefix}-magic:before { content: $fa-var-magic; } .#{$fa-css-prefix}-truck:before { content: $fa-var-truck; } .#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; } .#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; } .#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; } .#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; } .#{$fa-css-prefix}-money:before { content: $fa-var-money; } .#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; } .#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; } .#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; } .#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; } .#{$fa-css-prefix}-columns:before { content: $fa-var-columns; } .#{$fa-css-prefix}-unsorted:before, .#{$fa-css-prefix}-sort:before { content: $fa-var-sort; } .#{$fa-css-prefix}-sort-down:before, .#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; } .#{$fa-css-prefix}-sort-up:before, .#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; } .#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; } .#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; } .#{$fa-css-prefix}-rotate-left:before, .#{$fa-css-prefix}-undo:before { content: $fa-var-undo; } .#{$fa-css-prefix}-legal:before, .#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; } .#{$fa-css-prefix}-dashboard:before, .#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; } .#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; } .#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; } .#{$fa-css-prefix}-flash:before, .#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; } .#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; } .#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; } .#{$fa-css-prefix}-paste:before, .#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; } .#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; } .#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; } .#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; } .#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; } .#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; } .#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; } .#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; } .#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; } .#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; } .#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; } .#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; } .#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; } .#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; } .#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; } .#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; } .#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; } .#{$fa-css-prefix}-beer:before { content: $fa-var-beer; } .#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; } .#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; } .#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; } .#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; } .#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; } .#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; } .#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; } .#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; } .#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; } .#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; } .#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; } .#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; } .#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; } .#{$fa-css-prefix}-mobile-phone:before, .#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; } .#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; } .#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; } .#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; } .#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; } .#{$fa-css-prefix}-circle:before { content: $fa-var-circle; } .#{$fa-css-prefix}-mail-reply:before, .#{$fa-css-prefix}-reply:before { content: $fa-var-reply; } .#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; } .#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; } .#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; } .#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; } .#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; } .#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; } .#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; } .#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; } .#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; } .#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; } .#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; } .#{$fa-css-prefix}-code:before { content: $fa-var-code; } .#{$fa-css-prefix}-mail-reply-all:before, .#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; } .#{$fa-css-prefix}-star-half-empty:before, .#{$fa-css-prefix}-star-half-full:before, .#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; } .#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; } .#{$fa-css-prefix}-crop:before { content: $fa-var-crop; } .#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; } .#{$fa-css-prefix}-unlink:before, .#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; } .#{$fa-css-prefix}-question:before { content: $fa-var-question; } .#{$fa-css-prefix}-info:before { content: $fa-var-info; } .#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; } .#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; } .#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; } .#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; } .#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; } .#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; } .#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; } .#{$fa-css-prefix}-shield:before { content: $fa-var-shield; } .#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; } .#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; } .#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; } .#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; } .#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; } .#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; } .#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; } .#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; } .#{$fa-css-prefix}-html5:before { content: $fa-var-html5; } .#{$fa-css-prefix}-css3:before { content: $fa-var-css3; } .#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; } .#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; } .#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; } .#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; } .#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; } .#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; } .#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; } .#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; } .#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; } .#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; } .#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; } .#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; } .#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; } .#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; } .#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; } .#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; } .#{$fa-css-prefix}-compass:before { content: $fa-var-compass; } .#{$fa-css-prefix}-toggle-down:before, .#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; } .#{$fa-css-prefix}-toggle-up:before, .#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; } .#{$fa-css-prefix}-toggle-right:before, .#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; } .#{$fa-css-prefix}-euro:before, .#{$fa-css-prefix}-eur:before { content: $fa-var-eur; } .#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; } .#{$fa-css-prefix}-dollar:before, .#{$fa-css-prefix}-usd:before { content: $fa-var-usd; } .#{$fa-css-prefix}-rupee:before, .#{$fa-css-prefix}-inr:before { content: $fa-var-inr; } .#{$fa-css-prefix}-cny:before, .#{$fa-css-prefix}-rmb:before, .#{$fa-css-prefix}-yen:before, .#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; } .#{$fa-css-prefix}-ruble:before, .#{$fa-css-prefix}-rouble:before, .#{$fa-css-prefix}-rub:before { content: $fa-var-rub; } .#{$fa-css-prefix}-won:before, .#{$fa-css-prefix}-krw:before { content: $fa-var-krw; } .#{$fa-css-prefix}-bitcoin:before, .#{$fa-css-prefix}-btc:before { content: $fa-var-btc; } .#{$fa-css-prefix}-file:before { content: $fa-var-file; } .#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; } .#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; } .#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; } .#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; } .#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; } .#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; } .#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; } .#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; } .#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; } .#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; } .#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; } .#{$fa-css-prefix}-xing:before { content: $fa-var-xing; } .#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; } .#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; } .#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; } .#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; } .#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; } .#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; } .#{$fa-css-prefix}-adn:before { content: $fa-var-adn; } .#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; } .#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; } .#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; } .#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; } .#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; } .#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; } .#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; } .#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; } .#{$fa-css-prefix}-apple:before { content: $fa-var-apple; } .#{$fa-css-prefix}-windows:before { content: $fa-var-windows; } .#{$fa-css-prefix}-android:before { content: $fa-var-android; } .#{$fa-css-prefix}-linux:before { content: $fa-var-linux; } .#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; } .#{$fa-css-prefix}-skype:before { content: $fa-var-skype; } .#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; } .#{$fa-css-prefix}-trello:before { content: $fa-var-trello; } .#{$fa-css-prefix}-female:before { content: $fa-var-female; } .#{$fa-css-prefix}-male:before { content: $fa-var-male; } .#{$fa-css-prefix}-gittip:before, .#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; } .#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; } .#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; } .#{$fa-css-prefix}-archive:before { content: $fa-var-archive; } .#{$fa-css-prefix}-bug:before { content: $fa-var-bug; } .#{$fa-css-prefix}-vk:before { content: $fa-var-vk; } .#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; } .#{$fa-css-prefix}-renren:before { content: $fa-var-renren; } .#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; } .#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; } .#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; } .#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; } .#{$fa-css-prefix}-toggle-left:before, .#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; } .#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; } .#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; } .#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; } .#{$fa-css-prefix}-turkish-lira:before, .#{$fa-css-prefix}-try:before { content: $fa-var-try; } .#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; } .#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; } .#{$fa-css-prefix}-slack:before { content: $fa-var-slack; } .#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; } .#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; } .#{$fa-css-prefix}-openid:before { content: $fa-var-openid; } .#{$fa-css-prefix}-institution:before, .#{$fa-css-prefix}-bank:before, .#{$fa-css-prefix}-university:before { content: $fa-var-university; } .#{$fa-css-prefix}-mortar-board:before, .#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; } .#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; } .#{$fa-css-prefix}-google:before { content: $fa-var-google; } .#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; } .#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; } .#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; } .#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; } .#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; } .#{$fa-css-prefix}-digg:before { content: $fa-var-digg; } .#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; } .#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; } .#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; } .#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; } .#{$fa-css-prefix}-language:before { content: $fa-var-language; } .#{$fa-css-prefix}-fax:before { content: $fa-var-fax; } .#{$fa-css-prefix}-building:before { content: $fa-var-building; } .#{$fa-css-prefix}-child:before { content: $fa-var-child; } .#{$fa-css-prefix}-paw:before { content: $fa-var-paw; } .#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; } .#{$fa-css-prefix}-cube:before { content: $fa-var-cube; } .#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; } .#{$fa-css-prefix}-behance:before { content: $fa-var-behance; } .#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; } .#{$fa-css-prefix}-steam:before { content: $fa-var-steam; } .#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; } .#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; } .#{$fa-css-prefix}-automobile:before, .#{$fa-css-prefix}-car:before { content: $fa-var-car; } .#{$fa-css-prefix}-cab:before, .#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; } .#{$fa-css-prefix}-tree:before { content: $fa-var-tree; } .#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; } .#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; } .#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; } .#{$fa-css-prefix}-database:before { content: $fa-var-database; } .#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; } .#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; } .#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; } .#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; } .#{$fa-css-prefix}-file-photo-o:before, .#{$fa-css-prefix}-file-picture-o:before, .#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; } .#{$fa-css-prefix}-file-zip-o:before, .#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; } .#{$fa-css-prefix}-file-sound-o:before, .#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; } .#{$fa-css-prefix}-file-movie-o:before, .#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; } .#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; } .#{$fa-css-prefix}-vine:before { content: $fa-var-vine; } .#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; } .#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; } .#{$fa-css-prefix}-life-bouy:before, .#{$fa-css-prefix}-life-buoy:before, .#{$fa-css-prefix}-life-saver:before, .#{$fa-css-prefix}-support:before, .#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; } .#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; } .#{$fa-css-prefix}-ra:before, .#{$fa-css-prefix}-resistance:before, .#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; } .#{$fa-css-prefix}-ge:before, .#{$fa-css-prefix}-empire:before { content: $fa-var-empire; } .#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; } .#{$fa-css-prefix}-git:before { content: $fa-var-git; } .#{$fa-css-prefix}-y-combinator-square:before, .#{$fa-css-prefix}-yc-square:before, .#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; } .#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; } .#{$fa-css-prefix}-qq:before { content: $fa-var-qq; } .#{$fa-css-prefix}-wechat:before, .#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; } .#{$fa-css-prefix}-send:before, .#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; } .#{$fa-css-prefix}-send-o:before, .#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; } .#{$fa-css-prefix}-history:before { content: $fa-var-history; } .#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; } .#{$fa-css-prefix}-header:before { content: $fa-var-header; } .#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; } .#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; } .#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; } .#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; } .#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; } .#{$fa-css-prefix}-soccer-ball-o:before, .#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; } .#{$fa-css-prefix}-tty:before { content: $fa-var-tty; } .#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; } .#{$fa-css-prefix}-plug:before { content: $fa-var-plug; } .#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; } .#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; } .#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; } .#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; } .#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; } .#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; } .#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; } .#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; } .#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; } .#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; } .#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; } .#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; } .#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; } .#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; } .#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; } .#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; } .#{$fa-css-prefix}-trash:before { content: $fa-var-trash; } .#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; } .#{$fa-css-prefix}-at:before { content: $fa-var-at; } .#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; } .#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; } .#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; } .#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; } .#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; } .#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; } .#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; } .#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; } .#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; } .#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; } .#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; } .#{$fa-css-prefix}-bus:before { content: $fa-var-bus; } .#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; } .#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; } .#{$fa-css-prefix}-cc:before { content: $fa-var-cc; } .#{$fa-css-prefix}-shekel:before, .#{$fa-css-prefix}-sheqel:before, .#{$fa-css-prefix}-ils:before { content: $fa-var-ils; } .#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; } .#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; } .#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; } .#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; } .#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; } .#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; } .#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; } .#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; } .#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; } .#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; } .#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; } .#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; } .#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; } .#{$fa-css-prefix}-ship:before { content: $fa-var-ship; } .#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; } .#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; } .#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; } .#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; } .#{$fa-css-prefix}-venus:before { content: $fa-var-venus; } .#{$fa-css-prefix}-mars:before { content: $fa-var-mars; } .#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; } .#{$fa-css-prefix}-intersex:before, .#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; } .#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; } .#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; } .#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; } .#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; } .#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; } .#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; } .#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; } .#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; } .#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; } .#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; } .#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; } .#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; } .#{$fa-css-prefix}-server:before { content: $fa-var-server; } .#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; } .#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; } .#{$fa-css-prefix}-hotel:before, .#{$fa-css-prefix}-bed:before { content: $fa-var-bed; } .#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; } .#{$fa-css-prefix}-train:before { content: $fa-var-train; } .#{$fa-css-prefix}-subway:before { content: $fa-var-subway; } .#{$fa-css-prefix}-medium:before { content: $fa-var-medium; } .#{$fa-css-prefix}-yc:before, .#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; } .#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; } .#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; } .#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; } .#{$fa-css-prefix}-battery-4:before, .#{$fa-css-prefix}-battery:before, .#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; } .#{$fa-css-prefix}-battery-3:before, .#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; } .#{$fa-css-prefix}-battery-2:before, .#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; } .#{$fa-css-prefix}-battery-1:before, .#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; } .#{$fa-css-prefix}-battery-0:before, .#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; } .#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; } .#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; } .#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; } .#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; } .#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; } .#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; } .#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; } .#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; } .#{$fa-css-prefix}-clone:before { content: $fa-var-clone; } .#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; } .#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; } .#{$fa-css-prefix}-hourglass-1:before, .#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; } .#{$fa-css-prefix}-hourglass-2:before, .#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; } .#{$fa-css-prefix}-hourglass-3:before, .#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; } .#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; } .#{$fa-css-prefix}-hand-grab-o:before, .#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; } .#{$fa-css-prefix}-hand-stop-o:before, .#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; } .#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; } .#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; } .#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; } .#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; } .#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; } .#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; } .#{$fa-css-prefix}-registered:before { content: $fa-var-registered; } .#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; } .#{$fa-css-prefix}-gg:before { content: $fa-var-gg; } .#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; } .#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; } .#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; } .#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; } .#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; } .#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; } .#{$fa-css-prefix}-safari:before { content: $fa-var-safari; } .#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; } .#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; } .#{$fa-css-prefix}-opera:before { content: $fa-var-opera; } .#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; } .#{$fa-css-prefix}-tv:before, .#{$fa-css-prefix}-television:before { content: $fa-var-television; } .#{$fa-css-prefix}-contao:before { content: $fa-var-contao; } .#{$fa-css-prefix}-500px:before { content: $fa-var-500px; } .#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; } .#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; } .#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; } .#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; } .#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; } .#{$fa-css-prefix}-industry:before { content: $fa-var-industry; } .#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; } .#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; } .#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; } .#{$fa-css-prefix}-map:before { content: $fa-var-map; } .#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; } .#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; } .#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; } .#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; } .#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; } .#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; } .#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; } .#{$fa-css-prefix}-edge:before { content: $fa-var-edge; } .#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; } .#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; } .#{$fa-css-prefix}-modx:before { content: $fa-var-modx; } .#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; } .#{$fa-css-prefix}-usb:before { content: $fa-var-usb; } .#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; } .#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; } .#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; } .#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; } .#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; } .#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; } .#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; } .#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; } .#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; } .#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; } .#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; } .#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; } .#{$fa-css-prefix}-percent:before { content: $fa-var-percent; } .#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; } .#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; } .#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; } .#{$fa-css-prefix}-envira:before { content: $fa-var-envira; } .#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; } .#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; } .#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; } .#{$fa-css-prefix}-blind:before { content: $fa-var-blind; } .#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; } .#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; } .#{$fa-css-prefix}-braille:before { content: $fa-var-braille; } .#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; } .#{$fa-css-prefix}-asl-interpreting:before, .#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; } .#{$fa-css-prefix}-deafness:before, .#{$fa-css-prefix}-hard-of-hearing:before, .#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; } .#{$fa-css-prefix}-glide:before { content: $fa-var-glide; } .#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; } .#{$fa-css-prefix}-signing:before, .#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; } .#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; } .#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; } .#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; } .#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; } .#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; } .#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; } .#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; } .#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; } .#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; } .#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; } .#{$fa-css-prefix}-google-plus-circle:before, .#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; } .#{$fa-css-prefix}-fa:before, .#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; } .#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; } .#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; } .#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; } .#{$fa-css-prefix}-linode:before { content: $fa-var-linode; } .#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; } .#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; } .#{$fa-css-prefix}-vcard:before, .#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; } .#{$fa-css-prefix}-vcard-o:before, .#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; } .#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; } .#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; } .#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; } .#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; } .#{$fa-css-prefix}-drivers-license:before, .#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; } .#{$fa-css-prefix}-drivers-license-o:before, .#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; } .#{$fa-css-prefix}-quora:before { content: $fa-var-quora; } .#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; } .#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; } .#{$fa-css-prefix}-thermometer-4:before, .#{$fa-css-prefix}-thermometer:before, .#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; } .#{$fa-css-prefix}-thermometer-3:before, .#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; } .#{$fa-css-prefix}-thermometer-2:before, .#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; } .#{$fa-css-prefix}-thermometer-1:before, .#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; } .#{$fa-css-prefix}-thermometer-0:before, .#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; } .#{$fa-css-prefix}-shower:before { content: $fa-var-shower; } .#{$fa-css-prefix}-bathtub:before, .#{$fa-css-prefix}-s15:before, .#{$fa-css-prefix}-bath:before { content: $fa-var-bath; } .#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; } .#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; } .#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; } .#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; } .#{$fa-css-prefix}-times-rectangle:before, .#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; } .#{$fa-css-prefix}-times-rectangle-o:before, .#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; } .#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; } .#{$fa-css-prefix}-grav:before { content: $fa-var-grav; } .#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; } .#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; } .#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; } .#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; } .#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; } .#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; } .#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; } .#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; } .#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; } ================================================ FILE: static/fonts/font-awesome-4.7.0/scss/_larger.scss ================================================ // Icon Sizes // ------------------------- /* makes the font 33% larger relative to the icon container */ .#{$fa-css-prefix}-lg { font-size: (4em / 3); line-height: (3em / 4); vertical-align: -15%; } .#{$fa-css-prefix}-2x { font-size: 2em; } .#{$fa-css-prefix}-3x { font-size: 3em; } .#{$fa-css-prefix}-4x { font-size: 4em; } .#{$fa-css-prefix}-5x { font-size: 5em; } ================================================ FILE: static/fonts/font-awesome-4.7.0/scss/_list.scss ================================================ // List Icons // ------------------------- .#{$fa-css-prefix}-ul { padding-left: 0; margin-left: $fa-li-width; list-style-type: none; > li { position: relative; } } .#{$fa-css-prefix}-li { position: absolute; left: -$fa-li-width; width: $fa-li-width; top: (2em / 14); text-align: center; &.#{$fa-css-prefix}-lg { left: -$fa-li-width + (4em / 14); } } ================================================ FILE: static/fonts/font-awesome-4.7.0/scss/_mixins.scss ================================================ // Mixins // -------------------------- @mixin fa-icon() { display: inline-block; font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } @mixin fa-icon-rotate($degrees, $rotation) { -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; -webkit-transform: rotate($degrees); -ms-transform: rotate($degrees); transform: rotate($degrees); } @mixin fa-icon-flip($horiz, $vert, $rotation) { -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; -webkit-transform: scale($horiz, $vert); -ms-transform: scale($horiz, $vert); transform: scale($horiz, $vert); } // Only display content to screen readers. A la Bootstrap 4. // // See: http://a11yproject.com/posts/how-to-hide-content/ @mixin sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); border: 0; } // Use in conjunction with .sr-only to only display content when it's focused. // // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 // // Credit: HTML5 Boilerplate @mixin sr-only-focusable { &:active, &:focus { position: static; width: auto; height: auto; margin: 0; overflow: visible; clip: auto; } } ================================================ FILE: static/fonts/font-awesome-4.7.0/scss/_path.scss ================================================ /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts font-weight: normal; font-style: normal; } ================================================ FILE: static/fonts/font-awesome-4.7.0/scss/_rotated-flipped.scss ================================================ // Rotated & Flipped Icons // ------------------------- .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } // Hook for IE8-9 // ------------------------- :root .#{$fa-css-prefix}-rotate-90, :root .#{$fa-css-prefix}-rotate-180, :root .#{$fa-css-prefix}-rotate-270, :root .#{$fa-css-prefix}-flip-horizontal, :root .#{$fa-css-prefix}-flip-vertical { filter: none; } ================================================ FILE: static/fonts/font-awesome-4.7.0/scss/_screen-reader.scss ================================================ // Screen Readers // ------------------------- .sr-only { @include sr-only(); } .sr-only-focusable { @include sr-only-focusable(); } ================================================ FILE: static/fonts/font-awesome-4.7.0/scss/_stacked.scss ================================================ // Stacked Icons // ------------------------- .#{$fa-css-prefix}-stack { position: relative; display: inline-block; width: 2em; height: 2em; line-height: 2em; vertical-align: middle; } .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { position: absolute; left: 0; width: 100%; text-align: center; } .#{$fa-css-prefix}-stack-1x { line-height: inherit; } .#{$fa-css-prefix}-stack-2x { font-size: 2em; } .#{$fa-css-prefix}-inverse { color: $fa-inverse; } ================================================ FILE: static/fonts/font-awesome-4.7.0/scss/_variables.scss ================================================ // Variables // -------------------------- $fa-font-path: "../fonts" !default; $fa-font-size-base: 14px !default; $fa-line-height-base: 1 !default; //$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly $fa-css-prefix: fa !default; $fa-version: "4.7.0" !default; $fa-border-color: #eee !default; $fa-inverse: #fff !default; $fa-li-width: (30em / 14) !default; $fa-var-500px: "\f26e"; $fa-var-address-book: "\f2b9"; $fa-var-address-book-o: "\f2ba"; $fa-var-address-card: "\f2bb"; $fa-var-address-card-o: "\f2bc"; $fa-var-adjust: "\f042"; $fa-var-adn: "\f170"; $fa-var-align-center: "\f037"; $fa-var-align-justify: "\f039"; $fa-var-align-left: "\f036"; $fa-var-align-right: "\f038"; $fa-var-amazon: "\f270"; $fa-var-ambulance: "\f0f9"; $fa-var-american-sign-language-interpreting: "\f2a3"; $fa-var-anchor: "\f13d"; $fa-var-android: "\f17b"; $fa-var-angellist: "\f209"; $fa-var-angle-double-down: "\f103"; $fa-var-angle-double-left: "\f100"; $fa-var-angle-double-right: "\f101"; $fa-var-angle-double-up: "\f102"; $fa-var-angle-down: "\f107"; $fa-var-angle-left: "\f104"; $fa-var-angle-right: "\f105"; $fa-var-angle-up: "\f106"; $fa-var-apple: "\f179"; $fa-var-archive: "\f187"; $fa-var-area-chart: "\f1fe"; $fa-var-arrow-circle-down: "\f0ab"; $fa-var-arrow-circle-left: "\f0a8"; $fa-var-arrow-circle-o-down: "\f01a"; $fa-var-arrow-circle-o-left: "\f190"; $fa-var-arrow-circle-o-right: "\f18e"; $fa-var-arrow-circle-o-up: "\f01b"; $fa-var-arrow-circle-right: "\f0a9"; $fa-var-arrow-circle-up: "\f0aa"; $fa-var-arrow-down: "\f063"; $fa-var-arrow-left: "\f060"; $fa-var-arrow-right: "\f061"; $fa-var-arrow-up: "\f062"; $fa-var-arrows: "\f047"; $fa-var-arrows-alt: "\f0b2"; $fa-var-arrows-h: "\f07e"; $fa-var-arrows-v: "\f07d"; $fa-var-asl-interpreting: "\f2a3"; $fa-var-assistive-listening-systems: "\f2a2"; $fa-var-asterisk: "\f069"; $fa-var-at: "\f1fa"; $fa-var-audio-description: "\f29e"; $fa-var-automobile: "\f1b9"; $fa-var-backward: "\f04a"; $fa-var-balance-scale: "\f24e"; $fa-var-ban: "\f05e"; $fa-var-bandcamp: "\f2d5"; $fa-var-bank: "\f19c"; $fa-var-bar-chart: "\f080"; $fa-var-bar-chart-o: "\f080"; $fa-var-barcode: "\f02a"; $fa-var-bars: "\f0c9"; $fa-var-bath: "\f2cd"; $fa-var-bathtub: "\f2cd"; $fa-var-battery: "\f240"; $fa-var-battery-0: "\f244"; $fa-var-battery-1: "\f243"; $fa-var-battery-2: "\f242"; $fa-var-battery-3: "\f241"; $fa-var-battery-4: "\f240"; $fa-var-battery-empty: "\f244"; $fa-var-battery-full: "\f240"; $fa-var-battery-half: "\f242"; $fa-var-battery-quarter: "\f243"; $fa-var-battery-three-quarters: "\f241"; $fa-var-bed: "\f236"; $fa-var-beer: "\f0fc"; $fa-var-behance: "\f1b4"; $fa-var-behance-square: "\f1b5"; $fa-var-bell: "\f0f3"; $fa-var-bell-o: "\f0a2"; $fa-var-bell-slash: "\f1f6"; $fa-var-bell-slash-o: "\f1f7"; $fa-var-bicycle: "\f206"; $fa-var-binoculars: "\f1e5"; $fa-var-birthday-cake: "\f1fd"; $fa-var-bitbucket: "\f171"; $fa-var-bitbucket-square: "\f172"; $fa-var-bitcoin: "\f15a"; $fa-var-black-tie: "\f27e"; $fa-var-blind: "\f29d"; $fa-var-bluetooth: "\f293"; $fa-var-bluetooth-b: "\f294"; $fa-var-bold: "\f032"; $fa-var-bolt: "\f0e7"; $fa-var-bomb: "\f1e2"; $fa-var-book: "\f02d"; $fa-var-bookmark: "\f02e"; $fa-var-bookmark-o: "\f097"; $fa-var-braille: "\f2a1"; $fa-var-briefcase: "\f0b1"; $fa-var-btc: "\f15a"; $fa-var-bug: "\f188"; $fa-var-building: "\f1ad"; $fa-var-building-o: "\f0f7"; $fa-var-bullhorn: "\f0a1"; $fa-var-bullseye: "\f140"; $fa-var-bus: "\f207"; $fa-var-buysellads: "\f20d"; $fa-var-cab: "\f1ba"; $fa-var-calculator: "\f1ec"; $fa-var-calendar: "\f073"; $fa-var-calendar-check-o: "\f274"; $fa-var-calendar-minus-o: "\f272"; $fa-var-calendar-o: "\f133"; $fa-var-calendar-plus-o: "\f271"; $fa-var-calendar-times-o: "\f273"; $fa-var-camera: "\f030"; $fa-var-camera-retro: "\f083"; $fa-var-car: "\f1b9"; $fa-var-caret-down: "\f0d7"; $fa-var-caret-left: "\f0d9"; $fa-var-caret-right: "\f0da"; $fa-var-caret-square-o-down: "\f150"; $fa-var-caret-square-o-left: "\f191"; $fa-var-caret-square-o-right: "\f152"; $fa-var-caret-square-o-up: "\f151"; $fa-var-caret-up: "\f0d8"; $fa-var-cart-arrow-down: "\f218"; $fa-var-cart-plus: "\f217"; $fa-var-cc: "\f20a"; $fa-var-cc-amex: "\f1f3"; $fa-var-cc-diners-club: "\f24c"; $fa-var-cc-discover: "\f1f2"; $fa-var-cc-jcb: "\f24b"; $fa-var-cc-mastercard: "\f1f1"; $fa-var-cc-paypal: "\f1f4"; $fa-var-cc-stripe: "\f1f5"; $fa-var-cc-visa: "\f1f0"; $fa-var-certificate: "\f0a3"; $fa-var-chain: "\f0c1"; $fa-var-chain-broken: "\f127"; $fa-var-check: "\f00c"; $fa-var-check-circle: "\f058"; $fa-var-check-circle-o: "\f05d"; $fa-var-check-square: "\f14a"; $fa-var-check-square-o: "\f046"; $fa-var-chevron-circle-down: "\f13a"; $fa-var-chevron-circle-left: "\f137"; $fa-var-chevron-circle-right: "\f138"; $fa-var-chevron-circle-up: "\f139"; $fa-var-chevron-down: "\f078"; $fa-var-chevron-left: "\f053"; $fa-var-chevron-right: "\f054"; $fa-var-chevron-up: "\f077"; $fa-var-child: "\f1ae"; $fa-var-chrome: "\f268"; $fa-var-circle: "\f111"; $fa-var-circle-o: "\f10c"; $fa-var-circle-o-notch: "\f1ce"; $fa-var-circle-thin: "\f1db"; $fa-var-clipboard: "\f0ea"; $fa-var-clock-o: "\f017"; $fa-var-clone: "\f24d"; $fa-var-close: "\f00d"; $fa-var-cloud: "\f0c2"; $fa-var-cloud-download: "\f0ed"; $fa-var-cloud-upload: "\f0ee"; $fa-var-cny: "\f157"; $fa-var-code: "\f121"; $fa-var-code-fork: "\f126"; $fa-var-codepen: "\f1cb"; $fa-var-codiepie: "\f284"; $fa-var-coffee: "\f0f4"; $fa-var-cog: "\f013"; $fa-var-cogs: "\f085"; $fa-var-columns: "\f0db"; $fa-var-comment: "\f075"; $fa-var-comment-o: "\f0e5"; $fa-var-commenting: "\f27a"; $fa-var-commenting-o: "\f27b"; $fa-var-comments: "\f086"; $fa-var-comments-o: "\f0e6"; $fa-var-compass: "\f14e"; $fa-var-compress: "\f066"; $fa-var-connectdevelop: "\f20e"; $fa-var-contao: "\f26d"; $fa-var-copy: "\f0c5"; $fa-var-copyright: "\f1f9"; $fa-var-creative-commons: "\f25e"; $fa-var-credit-card: "\f09d"; $fa-var-credit-card-alt: "\f283"; $fa-var-crop: "\f125"; $fa-var-crosshairs: "\f05b"; $fa-var-css3: "\f13c"; $fa-var-cube: "\f1b2"; $fa-var-cubes: "\f1b3"; $fa-var-cut: "\f0c4"; $fa-var-cutlery: "\f0f5"; $fa-var-dashboard: "\f0e4"; $fa-var-dashcube: "\f210"; $fa-var-database: "\f1c0"; $fa-var-deaf: "\f2a4"; $fa-var-deafness: "\f2a4"; $fa-var-dedent: "\f03b"; $fa-var-delicious: "\f1a5"; $fa-var-desktop: "\f108"; $fa-var-deviantart: "\f1bd"; $fa-var-diamond: "\f219"; $fa-var-digg: "\f1a6"; $fa-var-dollar: "\f155"; $fa-var-dot-circle-o: "\f192"; $fa-var-download: "\f019"; $fa-var-dribbble: "\f17d"; $fa-var-drivers-license: "\f2c2"; $fa-var-drivers-license-o: "\f2c3"; $fa-var-dropbox: "\f16b"; $fa-var-drupal: "\f1a9"; $fa-var-edge: "\f282"; $fa-var-edit: "\f044"; $fa-var-eercast: "\f2da"; $fa-var-eject: "\f052"; $fa-var-ellipsis-h: "\f141"; $fa-var-ellipsis-v: "\f142"; $fa-var-empire: "\f1d1"; $fa-var-envelope: "\f0e0"; $fa-var-envelope-o: "\f003"; $fa-var-envelope-open: "\f2b6"; $fa-var-envelope-open-o: "\f2b7"; $fa-var-envelope-square: "\f199"; $fa-var-envira: "\f299"; $fa-var-eraser: "\f12d"; $fa-var-etsy: "\f2d7"; $fa-var-eur: "\f153"; $fa-var-euro: "\f153"; $fa-var-exchange: "\f0ec"; $fa-var-exclamation: "\f12a"; $fa-var-exclamation-circle: "\f06a"; $fa-var-exclamation-triangle: "\f071"; $fa-var-expand: "\f065"; $fa-var-expeditedssl: "\f23e"; $fa-var-external-link: "\f08e"; $fa-var-external-link-square: "\f14c"; $fa-var-eye: "\f06e"; $fa-var-eye-slash: "\f070"; $fa-var-eyedropper: "\f1fb"; $fa-var-fa: "\f2b4"; $fa-var-facebook: "\f09a"; $fa-var-facebook-f: "\f09a"; $fa-var-facebook-official: "\f230"; $fa-var-facebook-square: "\f082"; $fa-var-fast-backward: "\f049"; $fa-var-fast-forward: "\f050"; $fa-var-fax: "\f1ac"; $fa-var-feed: "\f09e"; $fa-var-female: "\f182"; $fa-var-fighter-jet: "\f0fb"; $fa-var-file: "\f15b"; $fa-var-file-archive-o: "\f1c6"; $fa-var-file-audio-o: "\f1c7"; $fa-var-file-code-o: "\f1c9"; $fa-var-file-excel-o: "\f1c3"; $fa-var-file-image-o: "\f1c5"; $fa-var-file-movie-o: "\f1c8"; $fa-var-file-o: "\f016"; $fa-var-file-pdf-o: "\f1c1"; $fa-var-file-photo-o: "\f1c5"; $fa-var-file-picture-o: "\f1c5"; $fa-var-file-powerpoint-o: "\f1c4"; $fa-var-file-sound-o: "\f1c7"; $fa-var-file-text: "\f15c"; $fa-var-file-text-o: "\f0f6"; $fa-var-file-video-o: "\f1c8"; $fa-var-file-word-o: "\f1c2"; $fa-var-file-zip-o: "\f1c6"; $fa-var-files-o: "\f0c5"; $fa-var-film: "\f008"; $fa-var-filter: "\f0b0"; $fa-var-fire: "\f06d"; $fa-var-fire-extinguisher: "\f134"; $fa-var-firefox: "\f269"; $fa-var-first-order: "\f2b0"; $fa-var-flag: "\f024"; $fa-var-flag-checkered: "\f11e"; $fa-var-flag-o: "\f11d"; $fa-var-flash: "\f0e7"; $fa-var-flask: "\f0c3"; $fa-var-flickr: "\f16e"; $fa-var-floppy-o: "\f0c7"; $fa-var-folder: "\f07b"; $fa-var-folder-o: "\f114"; $fa-var-folder-open: "\f07c"; $fa-var-folder-open-o: "\f115"; $fa-var-font: "\f031"; $fa-var-font-awesome: "\f2b4"; $fa-var-fonticons: "\f280"; $fa-var-fort-awesome: "\f286"; $fa-var-forumbee: "\f211"; $fa-var-forward: "\f04e"; $fa-var-foursquare: "\f180"; $fa-var-free-code-camp: "\f2c5"; $fa-var-frown-o: "\f119"; $fa-var-futbol-o: "\f1e3"; $fa-var-gamepad: "\f11b"; $fa-var-gavel: "\f0e3"; $fa-var-gbp: "\f154"; $fa-var-ge: "\f1d1"; $fa-var-gear: "\f013"; $fa-var-gears: "\f085"; $fa-var-genderless: "\f22d"; $fa-var-get-pocket: "\f265"; $fa-var-gg: "\f260"; $fa-var-gg-circle: "\f261"; $fa-var-gift: "\f06b"; $fa-var-git: "\f1d3"; $fa-var-git-square: "\f1d2"; $fa-var-github: "\f09b"; $fa-var-github-alt: "\f113"; $fa-var-github-square: "\f092"; $fa-var-gitlab: "\f296"; $fa-var-gittip: "\f184"; $fa-var-glass: "\f000"; $fa-var-glide: "\f2a5"; $fa-var-glide-g: "\f2a6"; $fa-var-globe: "\f0ac"; $fa-var-google: "\f1a0"; $fa-var-google-plus: "\f0d5"; $fa-var-google-plus-circle: "\f2b3"; $fa-var-google-plus-official: "\f2b3"; $fa-var-google-plus-square: "\f0d4"; $fa-var-google-wallet: "\f1ee"; $fa-var-graduation-cap: "\f19d"; $fa-var-gratipay: "\f184"; $fa-var-grav: "\f2d6"; $fa-var-group: "\f0c0"; $fa-var-h-square: "\f0fd"; $fa-var-hacker-news: "\f1d4"; $fa-var-hand-grab-o: "\f255"; $fa-var-hand-lizard-o: "\f258"; $fa-var-hand-o-down: "\f0a7"; $fa-var-hand-o-left: "\f0a5"; $fa-var-hand-o-right: "\f0a4"; $fa-var-hand-o-up: "\f0a6"; $fa-var-hand-paper-o: "\f256"; $fa-var-hand-peace-o: "\f25b"; $fa-var-hand-pointer-o: "\f25a"; $fa-var-hand-rock-o: "\f255"; $fa-var-hand-scissors-o: "\f257"; $fa-var-hand-spock-o: "\f259"; $fa-var-hand-stop-o: "\f256"; $fa-var-handshake-o: "\f2b5"; $fa-var-hard-of-hearing: "\f2a4"; $fa-var-hashtag: "\f292"; $fa-var-hdd-o: "\f0a0"; $fa-var-header: "\f1dc"; $fa-var-headphones: "\f025"; $fa-var-heart: "\f004"; $fa-var-heart-o: "\f08a"; $fa-var-heartbeat: "\f21e"; $fa-var-history: "\f1da"; $fa-var-home: "\f015"; $fa-var-hospital-o: "\f0f8"; $fa-var-hotel: "\f236"; $fa-var-hourglass: "\f254"; $fa-var-hourglass-1: "\f251"; $fa-var-hourglass-2: "\f252"; $fa-var-hourglass-3: "\f253"; $fa-var-hourglass-end: "\f253"; $fa-var-hourglass-half: "\f252"; $fa-var-hourglass-o: "\f250"; $fa-var-hourglass-start: "\f251"; $fa-var-houzz: "\f27c"; $fa-var-html5: "\f13b"; $fa-var-i-cursor: "\f246"; $fa-var-id-badge: "\f2c1"; $fa-var-id-card: "\f2c2"; $fa-var-id-card-o: "\f2c3"; $fa-var-ils: "\f20b"; $fa-var-image: "\f03e"; $fa-var-imdb: "\f2d8"; $fa-var-inbox: "\f01c"; $fa-var-indent: "\f03c"; $fa-var-industry: "\f275"; $fa-var-info: "\f129"; $fa-var-info-circle: "\f05a"; $fa-var-inr: "\f156"; $fa-var-instagram: "\f16d"; $fa-var-institution: "\f19c"; $fa-var-internet-explorer: "\f26b"; $fa-var-intersex: "\f224"; $fa-var-ioxhost: "\f208"; $fa-var-italic: "\f033"; $fa-var-joomla: "\f1aa"; $fa-var-jpy: "\f157"; $fa-var-jsfiddle: "\f1cc"; $fa-var-key: "\f084"; $fa-var-keyboard-o: "\f11c"; $fa-var-krw: "\f159"; $fa-var-language: "\f1ab"; $fa-var-laptop: "\f109"; $fa-var-lastfm: "\f202"; $fa-var-lastfm-square: "\f203"; $fa-var-leaf: "\f06c"; $fa-var-leanpub: "\f212"; $fa-var-legal: "\f0e3"; $fa-var-lemon-o: "\f094"; $fa-var-level-down: "\f149"; $fa-var-level-up: "\f148"; $fa-var-life-bouy: "\f1cd"; $fa-var-life-buoy: "\f1cd"; $fa-var-life-ring: "\f1cd"; $fa-var-life-saver: "\f1cd"; $fa-var-lightbulb-o: "\f0eb"; $fa-var-line-chart: "\f201"; $fa-var-link: "\f0c1"; $fa-var-linkedin: "\f0e1"; $fa-var-linkedin-square: "\f08c"; $fa-var-linode: "\f2b8"; $fa-var-linux: "\f17c"; $fa-var-list: "\f03a"; $fa-var-list-alt: "\f022"; $fa-var-list-ol: "\f0cb"; $fa-var-list-ul: "\f0ca"; $fa-var-location-arrow: "\f124"; $fa-var-lock: "\f023"; $fa-var-long-arrow-down: "\f175"; $fa-var-long-arrow-left: "\f177"; $fa-var-long-arrow-right: "\f178"; $fa-var-long-arrow-up: "\f176"; $fa-var-low-vision: "\f2a8"; $fa-var-magic: "\f0d0"; $fa-var-magnet: "\f076"; $fa-var-mail-forward: "\f064"; $fa-var-mail-reply: "\f112"; $fa-var-mail-reply-all: "\f122"; $fa-var-male: "\f183"; $fa-var-map: "\f279"; $fa-var-map-marker: "\f041"; $fa-var-map-o: "\f278"; $fa-var-map-pin: "\f276"; $fa-var-map-signs: "\f277"; $fa-var-mars: "\f222"; $fa-var-mars-double: "\f227"; $fa-var-mars-stroke: "\f229"; $fa-var-mars-stroke-h: "\f22b"; $fa-var-mars-stroke-v: "\f22a"; $fa-var-maxcdn: "\f136"; $fa-var-meanpath: "\f20c"; $fa-var-medium: "\f23a"; $fa-var-medkit: "\f0fa"; $fa-var-meetup: "\f2e0"; $fa-var-meh-o: "\f11a"; $fa-var-mercury: "\f223"; $fa-var-microchip: "\f2db"; $fa-var-microphone: "\f130"; $fa-var-microphone-slash: "\f131"; $fa-var-minus: "\f068"; $fa-var-minus-circle: "\f056"; $fa-var-minus-square: "\f146"; $fa-var-minus-square-o: "\f147"; $fa-var-mixcloud: "\f289"; $fa-var-mobile: "\f10b"; $fa-var-mobile-phone: "\f10b"; $fa-var-modx: "\f285"; $fa-var-money: "\f0d6"; $fa-var-moon-o: "\f186"; $fa-var-mortar-board: "\f19d"; $fa-var-motorcycle: "\f21c"; $fa-var-mouse-pointer: "\f245"; $fa-var-music: "\f001"; $fa-var-navicon: "\f0c9"; $fa-var-neuter: "\f22c"; $fa-var-newspaper-o: "\f1ea"; $fa-var-object-group: "\f247"; $fa-var-object-ungroup: "\f248"; $fa-var-odnoklassniki: "\f263"; $fa-var-odnoklassniki-square: "\f264"; $fa-var-opencart: "\f23d"; $fa-var-openid: "\f19b"; $fa-var-opera: "\f26a"; $fa-var-optin-monster: "\f23c"; $fa-var-outdent: "\f03b"; $fa-var-pagelines: "\f18c"; $fa-var-paint-brush: "\f1fc"; $fa-var-paper-plane: "\f1d8"; $fa-var-paper-plane-o: "\f1d9"; $fa-var-paperclip: "\f0c6"; $fa-var-paragraph: "\f1dd"; $fa-var-paste: "\f0ea"; $fa-var-pause: "\f04c"; $fa-var-pause-circle: "\f28b"; $fa-var-pause-circle-o: "\f28c"; $fa-var-paw: "\f1b0"; $fa-var-paypal: "\f1ed"; $fa-var-pencil: "\f040"; $fa-var-pencil-square: "\f14b"; $fa-var-pencil-square-o: "\f044"; $fa-var-percent: "\f295"; $fa-var-phone: "\f095"; $fa-var-phone-square: "\f098"; $fa-var-photo: "\f03e"; $fa-var-picture-o: "\f03e"; $fa-var-pie-chart: "\f200"; $fa-var-pied-piper: "\f2ae"; $fa-var-pied-piper-alt: "\f1a8"; $fa-var-pied-piper-pp: "\f1a7"; $fa-var-pinterest: "\f0d2"; $fa-var-pinterest-p: "\f231"; $fa-var-pinterest-square: "\f0d3"; $fa-var-plane: "\f072"; $fa-var-play: "\f04b"; $fa-var-play-circle: "\f144"; $fa-var-play-circle-o: "\f01d"; $fa-var-plug: "\f1e6"; $fa-var-plus: "\f067"; $fa-var-plus-circle: "\f055"; $fa-var-plus-square: "\f0fe"; $fa-var-plus-square-o: "\f196"; $fa-var-podcast: "\f2ce"; $fa-var-power-off: "\f011"; $fa-var-print: "\f02f"; $fa-var-product-hunt: "\f288"; $fa-var-puzzle-piece: "\f12e"; $fa-var-qq: "\f1d6"; $fa-var-qrcode: "\f029"; $fa-var-question: "\f128"; $fa-var-question-circle: "\f059"; $fa-var-question-circle-o: "\f29c"; $fa-var-quora: "\f2c4"; $fa-var-quote-left: "\f10d"; $fa-var-quote-right: "\f10e"; $fa-var-ra: "\f1d0"; $fa-var-random: "\f074"; $fa-var-ravelry: "\f2d9"; $fa-var-rebel: "\f1d0"; $fa-var-recycle: "\f1b8"; $fa-var-reddit: "\f1a1"; $fa-var-reddit-alien: "\f281"; $fa-var-reddit-square: "\f1a2"; $fa-var-refresh: "\f021"; $fa-var-registered: "\f25d"; $fa-var-remove: "\f00d"; $fa-var-renren: "\f18b"; $fa-var-reorder: "\f0c9"; $fa-var-repeat: "\f01e"; $fa-var-reply: "\f112"; $fa-var-reply-all: "\f122"; $fa-var-resistance: "\f1d0"; $fa-var-retweet: "\f079"; $fa-var-rmb: "\f157"; $fa-var-road: "\f018"; $fa-var-rocket: "\f135"; $fa-var-rotate-left: "\f0e2"; $fa-var-rotate-right: "\f01e"; $fa-var-rouble: "\f158"; $fa-var-rss: "\f09e"; $fa-var-rss-square: "\f143"; $fa-var-rub: "\f158"; $fa-var-ruble: "\f158"; $fa-var-rupee: "\f156"; $fa-var-s15: "\f2cd"; $fa-var-safari: "\f267"; $fa-var-save: "\f0c7"; $fa-var-scissors: "\f0c4"; $fa-var-scribd: "\f28a"; $fa-var-search: "\f002"; $fa-var-search-minus: "\f010"; $fa-var-search-plus: "\f00e"; $fa-var-sellsy: "\f213"; $fa-var-send: "\f1d8"; $fa-var-send-o: "\f1d9"; $fa-var-server: "\f233"; $fa-var-share: "\f064"; $fa-var-share-alt: "\f1e0"; $fa-var-share-alt-square: "\f1e1"; $fa-var-share-square: "\f14d"; $fa-var-share-square-o: "\f045"; $fa-var-shekel: "\f20b"; $fa-var-sheqel: "\f20b"; $fa-var-shield: "\f132"; $fa-var-ship: "\f21a"; $fa-var-shirtsinbulk: "\f214"; $fa-var-shopping-bag: "\f290"; $fa-var-shopping-basket: "\f291"; $fa-var-shopping-cart: "\f07a"; $fa-var-shower: "\f2cc"; $fa-var-sign-in: "\f090"; $fa-var-sign-language: "\f2a7"; $fa-var-sign-out: "\f08b"; $fa-var-signal: "\f012"; $fa-var-signing: "\f2a7"; $fa-var-simplybuilt: "\f215"; $fa-var-sitemap: "\f0e8"; $fa-var-skyatlas: "\f216"; $fa-var-skype: "\f17e"; $fa-var-slack: "\f198"; $fa-var-sliders: "\f1de"; $fa-var-slideshare: "\f1e7"; $fa-var-smile-o: "\f118"; $fa-var-snapchat: "\f2ab"; $fa-var-snapchat-ghost: "\f2ac"; $fa-var-snapchat-square: "\f2ad"; $fa-var-snowflake-o: "\f2dc"; $fa-var-soccer-ball-o: "\f1e3"; $fa-var-sort: "\f0dc"; $fa-var-sort-alpha-asc: "\f15d"; $fa-var-sort-alpha-desc: "\f15e"; $fa-var-sort-amount-asc: "\f160"; $fa-var-sort-amount-desc: "\f161"; $fa-var-sort-asc: "\f0de"; $fa-var-sort-desc: "\f0dd"; $fa-var-sort-down: "\f0dd"; $fa-var-sort-numeric-asc: "\f162"; $fa-var-sort-numeric-desc: "\f163"; $fa-var-sort-up: "\f0de"; $fa-var-soundcloud: "\f1be"; $fa-var-space-shuttle: "\f197"; $fa-var-spinner: "\f110"; $fa-var-spoon: "\f1b1"; $fa-var-spotify: "\f1bc"; $fa-var-square: "\f0c8"; $fa-var-square-o: "\f096"; $fa-var-stack-exchange: "\f18d"; $fa-var-stack-overflow: "\f16c"; $fa-var-star: "\f005"; $fa-var-star-half: "\f089"; $fa-var-star-half-empty: "\f123"; $fa-var-star-half-full: "\f123"; $fa-var-star-half-o: "\f123"; $fa-var-star-o: "\f006"; $fa-var-steam: "\f1b6"; $fa-var-steam-square: "\f1b7"; $fa-var-step-backward: "\f048"; $fa-var-step-forward: "\f051"; $fa-var-stethoscope: "\f0f1"; $fa-var-sticky-note: "\f249"; $fa-var-sticky-note-o: "\f24a"; $fa-var-stop: "\f04d"; $fa-var-stop-circle: "\f28d"; $fa-var-stop-circle-o: "\f28e"; $fa-var-street-view: "\f21d"; $fa-var-strikethrough: "\f0cc"; $fa-var-stumbleupon: "\f1a4"; $fa-var-stumbleupon-circle: "\f1a3"; $fa-var-subscript: "\f12c"; $fa-var-subway: "\f239"; $fa-var-suitcase: "\f0f2"; $fa-var-sun-o: "\f185"; $fa-var-superpowers: "\f2dd"; $fa-var-superscript: "\f12b"; $fa-var-support: "\f1cd"; $fa-var-table: "\f0ce"; $fa-var-tablet: "\f10a"; $fa-var-tachometer: "\f0e4"; $fa-var-tag: "\f02b"; $fa-var-tags: "\f02c"; $fa-var-tasks: "\f0ae"; $fa-var-taxi: "\f1ba"; $fa-var-telegram: "\f2c6"; $fa-var-television: "\f26c"; $fa-var-tencent-weibo: "\f1d5"; $fa-var-terminal: "\f120"; $fa-var-text-height: "\f034"; $fa-var-text-width: "\f035"; $fa-var-th: "\f00a"; $fa-var-th-large: "\f009"; $fa-var-th-list: "\f00b"; $fa-var-themeisle: "\f2b2"; $fa-var-thermometer: "\f2c7"; $fa-var-thermometer-0: "\f2cb"; $fa-var-thermometer-1: "\f2ca"; $fa-var-thermometer-2: "\f2c9"; $fa-var-thermometer-3: "\f2c8"; $fa-var-thermometer-4: "\f2c7"; $fa-var-thermometer-empty: "\f2cb"; $fa-var-thermometer-full: "\f2c7"; $fa-var-thermometer-half: "\f2c9"; $fa-var-thermometer-quarter: "\f2ca"; $fa-var-thermometer-three-quarters: "\f2c8"; $fa-var-thumb-tack: "\f08d"; $fa-var-thumbs-down: "\f165"; $fa-var-thumbs-o-down: "\f088"; $fa-var-thumbs-o-up: "\f087"; $fa-var-thumbs-up: "\f164"; $fa-var-ticket: "\f145"; $fa-var-times: "\f00d"; $fa-var-times-circle: "\f057"; $fa-var-times-circle-o: "\f05c"; $fa-var-times-rectangle: "\f2d3"; $fa-var-times-rectangle-o: "\f2d4"; $fa-var-tint: "\f043"; $fa-var-toggle-down: "\f150"; $fa-var-toggle-left: "\f191"; $fa-var-toggle-off: "\f204"; $fa-var-toggle-on: "\f205"; $fa-var-toggle-right: "\f152"; $fa-var-toggle-up: "\f151"; $fa-var-trademark: "\f25c"; $fa-var-train: "\f238"; $fa-var-transgender: "\f224"; $fa-var-transgender-alt: "\f225"; $fa-var-trash: "\f1f8"; $fa-var-trash-o: "\f014"; $fa-var-tree: "\f1bb"; $fa-var-trello: "\f181"; $fa-var-tripadvisor: "\f262"; $fa-var-trophy: "\f091"; $fa-var-truck: "\f0d1"; $fa-var-try: "\f195"; $fa-var-tty: "\f1e4"; $fa-var-tumblr: "\f173"; $fa-var-tumblr-square: "\f174"; $fa-var-turkish-lira: "\f195"; $fa-var-tv: "\f26c"; $fa-var-twitch: "\f1e8"; $fa-var-twitter: "\f099"; $fa-var-twitter-square: "\f081"; $fa-var-umbrella: "\f0e9"; $fa-var-underline: "\f0cd"; $fa-var-undo: "\f0e2"; $fa-var-universal-access: "\f29a"; $fa-var-university: "\f19c"; $fa-var-unlink: "\f127"; $fa-var-unlock: "\f09c"; $fa-var-unlock-alt: "\f13e"; $fa-var-unsorted: "\f0dc"; $fa-var-upload: "\f093"; $fa-var-usb: "\f287"; $fa-var-usd: "\f155"; $fa-var-user: "\f007"; $fa-var-user-circle: "\f2bd"; $fa-var-user-circle-o: "\f2be"; $fa-var-user-md: "\f0f0"; $fa-var-user-o: "\f2c0"; $fa-var-user-plus: "\f234"; $fa-var-user-secret: "\f21b"; $fa-var-user-times: "\f235"; $fa-var-users: "\f0c0"; $fa-var-vcard: "\f2bb"; $fa-var-vcard-o: "\f2bc"; $fa-var-venus: "\f221"; $fa-var-venus-double: "\f226"; $fa-var-venus-mars: "\f228"; $fa-var-viacoin: "\f237"; $fa-var-viadeo: "\f2a9"; $fa-var-viadeo-square: "\f2aa"; $fa-var-video-camera: "\f03d"; $fa-var-vimeo: "\f27d"; $fa-var-vimeo-square: "\f194"; $fa-var-vine: "\f1ca"; $fa-var-vk: "\f189"; $fa-var-volume-control-phone: "\f2a0"; $fa-var-volume-down: "\f027"; $fa-var-volume-off: "\f026"; $fa-var-volume-up: "\f028"; $fa-var-warning: "\f071"; $fa-var-wechat: "\f1d7"; $fa-var-weibo: "\f18a"; $fa-var-weixin: "\f1d7"; $fa-var-whatsapp: "\f232"; $fa-var-wheelchair: "\f193"; $fa-var-wheelchair-alt: "\f29b"; $fa-var-wifi: "\f1eb"; $fa-var-wikipedia-w: "\f266"; $fa-var-window-close: "\f2d3"; $fa-var-window-close-o: "\f2d4"; $fa-var-window-maximize: "\f2d0"; $fa-var-window-minimize: "\f2d1"; $fa-var-window-restore: "\f2d2"; $fa-var-windows: "\f17a"; $fa-var-won: "\f159"; $fa-var-wordpress: "\f19a"; $fa-var-wpbeginner: "\f297"; $fa-var-wpexplorer: "\f2de"; $fa-var-wpforms: "\f298"; $fa-var-wrench: "\f0ad"; $fa-var-xing: "\f168"; $fa-var-xing-square: "\f169"; $fa-var-y-combinator: "\f23b"; $fa-var-y-combinator-square: "\f1d4"; $fa-var-yahoo: "\f19e"; $fa-var-yc: "\f23b"; $fa-var-yc-square: "\f1d4"; $fa-var-yelp: "\f1e9"; $fa-var-yen: "\f157"; $fa-var-yoast: "\f2b1"; $fa-var-youtube: "\f167"; $fa-var-youtube-play: "\f16a"; $fa-var-youtube-square: "\f166"; ================================================ FILE: static/fonts/font-awesome-4.7.0/scss/font-awesome.scss ================================================ /*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */ @import "variables"; @import "mixins"; @import "path"; @import "core"; @import "larger"; @import "fixed-width"; @import "list"; @import "bordered-pulled"; @import "animated"; @import "rotated-flipped"; @import "stacked"; @import "icons"; @import "screen-reader"; ================================================ FILE: static/fonts/montserrat/OFL.txt ================================================ Copyright 2011 The Montserrat Project Authors (https://github.com/JulietaUla/Montserrat) This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. ================================================ FILE: static/fonts/raleway/OFL.txt ================================================ Copyright (c) 2010, Matt McInerney (matt@pixelspread.com), Copyright (c) 2011, Pablo Impallari (www.impallari.com|impallari@gmail.com), Copyright (c) 2011, Rodrigo Fuenzalida (www.rfuenzalida.com|hello@rfuenzalida.com), with Reserved Font Name Raleway This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. ================================================ FILE: static/js/demo/chart-area-demo.js ================================================ // Set new default font family and font color to mimic Bootstrap's default styling Chart.defaults.global.defaultFontFamily = 'Nunito', '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif'; Chart.defaults.global.defaultFontColor = '#858796'; function number_format(number, decimals, dec_point, thousands_sep) { // * example: number_format(1234.56, 2, ',', ' '); // * return: '1 234,56' number = (number + '').replace(',', '').replace(' ', ''); var n = !isFinite(+number) ? 0 : +number, prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, dec = (typeof dec_point === 'undefined') ? '.' : dec_point, s = '', toFixedFix = function(n, prec) { var k = Math.pow(10, prec); return '' + Math.round(n * k) / k; }; // Fix for IE parseFloat(0.55).toFixed(0) = 0; s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.'); if (s[0].length > 3) { s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep); } if ((s[1] || '').length < prec) { s[1] = s[1] || ''; s[1] += new Array(prec - s[1].length + 1).join('0'); } return s.join(dec); } // Area Chart Example var ctx = document.getElementById("myAreaChart"); var myLineChart = new Chart(ctx, { type: 'line', data: { labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], datasets: [{ label: "Earnings", lineTension: 0.3, backgroundColor: "rgba(78, 115, 223, 0.05)", borderColor: "rgba(78, 115, 223, 1)", pointRadius: 3, pointBackgroundColor: "rgba(78, 115, 223, 1)", pointBorderColor: "rgba(78, 115, 223, 1)", pointHoverRadius: 3, pointHoverBackgroundColor: "rgba(78, 115, 223, 1)", pointHoverBorderColor: "rgba(78, 115, 223, 1)", pointHitRadius: 10, pointBorderWidth: 2, data: [0, 10000, 5000, 15000, 10000, 20000, 15000, 25000, 20000, 30000, 25000, 40000], }], }, options: { maintainAspectRatio: false, layout: { padding: { left: 10, right: 25, top: 25, bottom: 0 } }, scales: { xAxes: [{ time: { unit: 'date' }, gridLines: { display: false, drawBorder: false }, ticks: { maxTicksLimit: 7 } }], yAxes: [{ ticks: { maxTicksLimit: 5, padding: 10, // Include a dollar sign in the ticks callback: function(value, index, values) { return '$' + number_format(value); } }, gridLines: { color: "rgb(234, 236, 244)", zeroLineColor: "rgb(234, 236, 244)", drawBorder: false, borderDash: [2], zeroLineBorderDash: [2] } }], }, legend: { display: false }, tooltips: { backgroundColor: "rgb(255,255,255)", bodyFontColor: "#858796", titleMarginBottom: 10, titleFontColor: '#6e707e', titleFontSize: 14, borderColor: '#dddfeb', borderWidth: 1, xPadding: 15, yPadding: 15, displayColors: false, intersect: false, mode: 'index', caretPadding: 10, callbacks: { label: function(tooltipItem, chart) { var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; return datasetLabel + ': $' + number_format(tooltipItem.yLabel); } } } } }); ================================================ FILE: static/js/demo/chart-bar-demo.js ================================================ // Set new default font family and font color to mimic Bootstrap's default styling Chart.defaults.global.defaultFontFamily = 'Nunito', '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif'; Chart.defaults.global.defaultFontColor = '#858796'; function number_format(number, decimals, dec_point, thousands_sep) { // * example: number_format(1234.56, 2, ',', ' '); // * return: '1 234,56' number = (number + '').replace(',', '').replace(' ', ''); var n = !isFinite(+number) ? 0 : +number, prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, dec = (typeof dec_point === 'undefined') ? '.' : dec_point, s = '', toFixedFix = function(n, prec) { var k = Math.pow(10, prec); return '' + Math.round(n * k) / k; }; // Fix for IE parseFloat(0.55).toFixed(0) = 0; s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.'); if (s[0].length > 3) { s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep); } if ((s[1] || '').length < prec) { s[1] = s[1] || ''; s[1] += new Array(prec - s[1].length + 1).join('0'); } return s.join(dec); } // Bar Chart Example var ctx = document.getElementById("myBarChart"); var myBarChart = new Chart(ctx, { type: 'bar', data: { labels: ["January", "February", "March", "April", "May", "June"], datasets: [{ label: "Revenue", backgroundColor: "#4e73df", hoverBackgroundColor: "#2e59d9", borderColor: "#4e73df", data: [4215, 5312, 6251, 7841, 9821, 14984], }], }, options: { maintainAspectRatio: false, layout: { padding: { left: 10, right: 25, top: 25, bottom: 0 } }, scales: { xAxes: [{ time: { unit: 'month' }, gridLines: { display: false, drawBorder: false }, ticks: { maxTicksLimit: 6 }, maxBarThickness: 25, }], yAxes: [{ ticks: { min: 0, max: 15000, maxTicksLimit: 5, padding: 10, // Include a dollar sign in the ticks callback: function(value, index, values) { return '$' + number_format(value); } }, gridLines: { color: "rgb(234, 236, 244)", zeroLineColor: "rgb(234, 236, 244)", drawBorder: false, borderDash: [2], zeroLineBorderDash: [2] } }], }, legend: { display: false }, tooltips: { titleMarginBottom: 10, titleFontColor: '#6e707e', titleFontSize: 14, backgroundColor: "rgb(255,255,255)", bodyFontColor: "#858796", borderColor: '#dddfeb', borderWidth: 1, xPadding: 15, yPadding: 15, displayColors: false, caretPadding: 10, callbacks: { label: function(tooltipItem, chart) { var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; return datasetLabel + ': $' + number_format(tooltipItem.yLabel); } } }, } }); ================================================ FILE: static/js/demo/chart-pie-demo.js ================================================ // Set new default font family and font color to mimic Bootstrap's default styling Chart.defaults.global.defaultFontFamily = 'Nunito', '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif'; Chart.defaults.global.defaultFontColor = '#858796'; // Pie Chart Example var ctx = document.getElementById("myPieChart"); var myPieChart = new Chart(ctx, { type: 'doughnut', data: { labels: ["Direct", "Referral", "Social"], datasets: [{ data: [55, 30, 15], backgroundColor: ['#4e73df', '#1cc88a', '#36b9cc'], hoverBackgroundColor: ['#2e59d9', '#17a673', '#2c9faf'], hoverBorderColor: "rgba(234, 236, 244, 1)", }], }, options: { maintainAspectRatio: false, tooltips: { backgroundColor: "rgb(255,255,255)", bodyFontColor: "#858796", borderColor: '#dddfeb', borderWidth: 1, xPadding: 15, yPadding: 15, displayColors: false, caretPadding: 10, }, legend: { display: false }, cutoutPercentage: 80, }, }); ================================================ FILE: static/js/demo/datatables-demo.js ================================================ // Call the dataTables jQuery plugin $(document).ready(function() { $('#dataTable').DataTable(); }); ================================================ FILE: static/js/main.js ================================================ (function ($) { "use strict"; /*================================================================== [ Validate ]*/ var input = $('.validate-input .input100'); $('.validate-form').on('submit',function(){ var check = true; for(var i=0; i 768) { var e0 = e.originalEvent, delta = e0.wheelDelta || -e0.detail; this.scrollTop += (delta < 0 ? 1 : -1) * 30; e.preventDefault(); } }); // Scroll to top button appear $(document).on('scroll', function() { var scrollDistance = $(this).scrollTop(); if (scrollDistance > 100) { $('.scroll-to-top').fadeIn(); } else { $('.scroll-to-top').fadeOut(); } }); // Smooth scrolling using jQuery easing $(document).on('click', 'a.scroll-to-top', function(e) { var $anchor = $(this); $('html, body').stop().animate({ scrollTop: ($($anchor.attr('href')).offset().top) }, 1000, 'easeInOutExpo'); e.preventDefault(); }); })(jQuery); // End of use strict var url = window.location; var element = $('li.nav-item a').filter(function() { return this.href == url || url.href.indexOf(this.href) == 0; }).addClass('active').parent().addClass('active').parent().addClass('show').parent(); if (element.is('li')) { element.addClass('active'); } ================================================ FILE: static/scss/_buttons.scss ================================================ .btn-circle { border-radius: 100%; height: 2.5rem; width: 2.5rem; font-size: 1rem; display: inline-flex; align-items: center; justify-content: center; &.btn-sm { height: 1.8rem; width: 1.8rem; font-size: 0.75rem; } &.btn-lg { height: 3.5rem; width: 3.5rem; font-size: 1.35rem; } } .btn-icon-split { padding: 0; overflow: hidden; display: inline-flex; align-items: stretch; justify-content: center; .icon { background: fade-out($black, .85); display: inline-block; padding: $btn-padding-y $btn-padding-x; } .text { display: inline-block; padding: $btn-padding-y $btn-padding-x; } &.btn-sm { .icon { padding: $btn-padding-y-sm $btn-padding-x-sm; } .text { padding: $btn-padding-y-sm $btn-padding-x-sm; } } &.btn-lg { .icon { padding: $btn-padding-y-lg $btn-padding-x-lg; } .text { padding: $btn-padding-y-lg $btn-padding-x-lg; } } } ================================================ FILE: static/scss/_cards.scss ================================================ // Custom Card Styling .card { .card-header { // Format Dropdowns in Card Headings .dropdown { line-height: 1; .dropdown-menu { line-height: 1.5; } } } // Collapsable Card Styling .card-header[data-toggle="collapse"] { text-decoration: none; position: relative; padding: 0.75rem 3.25rem 0.75rem 1.25rem; &::after { position: absolute; right: 0; top: 0; padding-right: 1.725rem; line-height: 51px; font-weight: 900; content: '\f107'; font-family: 'Font Awesome 5 Free'; color: $gray-400; } &.collapsed { border-radius: $card-border-radius; &::after { content: '\f105'; } } } } ================================================ FILE: static/scss/_charts.scss ================================================ // Area Chart .chart-area { position: relative; height: 10rem; width: 100%; @include media-breakpoint-up(md) { height: 20rem; } } // Bar Chart .chart-bar { position: relative; height: 10rem; width: 100%; @include media-breakpoint-up(md) { height: 20rem; } } // Pie Chart .chart-pie { position: relative; height: 15rem; width: 100%; @include media-breakpoint-up(md) { height: calc(20rem - 43px) !important; } } ================================================ FILE: static/scss/_dropdowns.scss ================================================ // Custom Dropdown Styling .dropdown { .dropdown-menu { font-size: $dropdown-font-size; .dropdown-header { @extend .text-uppercase; font-weight: 800; font-size: 0.65rem; color: $gray-500; } } } // Utility class to hide arrow from dropdown .dropdown.no-arrow { .dropdown-toggle::after { display: none; } } ================================================ FILE: static/scss/_error.scss ================================================ // Lucas Bebber's Glitch Effect // Tutorial and CSS from CSS Tricks // https://css-tricks.com/glitch-effect-text-images-svg/ .error { color: $gray-800; font-size: 7rem; position: relative; line-height: 1; width: 12.5rem; } @keyframes noise-anim { $steps: 20; @for $i from 0 through $steps { #{percentage($i*(1/$steps))} { clip: rect(random(100)+px,9999px,random(100)+px,0); } } } .error:after { content: attr(data-text); position: absolute; left: 2px; text-shadow: -1px 0 $red; top: 0; color: $gray-800; background: $gray-100; overflow: hidden; clip: rect(0,900px,0,0); animation: noise-anim 2s infinite linear alternate-reverse; } @keyframes noise-anim-2 { $steps: 20; @for $i from 0 through $steps { #{percentage($i*(1/$steps))} { clip: rect(random(100)+px,9999px,random(100)+px,0); } } } .error:before { content: attr(data-text); position: absolute; left: -2px; text-shadow: 1px 0 $blue; top: 0; color: $gray-800; background: $gray-100; overflow: hidden; clip: rect(0,900px,0,0); animation: noise-anim-2 3s infinite linear alternate-reverse; } ================================================ FILE: static/scss/_footer.scss ================================================ footer.sticky-footer { padding: 2rem 0; flex-shrink: 0; .copyright { line-height: 1; font-size: 0.8rem; } } body.sidebar-toggled { footer.sticky-footer { width: 100%; } } ================================================ FILE: static/scss/_global.scss ================================================ // Global component styles html { position: relative; min-height: 100%; } body { height: 100%; } a { &:focus { outline: none; } } // Main page wrapper #wrapper { display: flex; #content-wrapper { background-color: $gray-100; width: 100%; overflow-x: hidden; #content { flex: 1 0 auto; } } } // Set container padding to match gutter width instead of default 15px .container, .container-fluid { padding-left: $grid-gutter-width; padding-right: $grid-gutter-width; } // Scroll to top button .scroll-to-top { position: fixed; right: 1rem; bottom: 1rem; display: none; width: 2.75rem; height: 2.75rem; text-align: center; color: $white; background: fade-out($gray-800, .5); line-height: 46px; &:focus, &:hover { color: white; } &:hover { background: $gray-800; } i { font-weight: 800; } } ================================================ FILE: static/scss/_login.scss ================================================ // Pulling these images from Unsplash // Toshi the dog from https://unsplash.com/@charlesdeluvio - what a funny dog... .bg-login-image { background: url($login-image); background-position: center; background-size: cover; } .bg-register-image { background: url($register-image); background-position: center; background-size: cover; } .bg-password-image { background: url($password-image); background-position: center; background-size: cover; } form.user { .custom-checkbox.small { label { line-height: 1.5rem; } } .form-control-user { font-size: 0.8rem; border-radius: 10rem; padding: 1.5rem 1rem; } .btn-user { font-size: 0.8rem; border-radius: 10rem; padding: 0.75rem 1rem; } } .btn-google { @include button-variant($brand-google, $white); } .btn-facebook { @include button-variant($brand-facebook, $white); } ================================================ FILE: static/scss/_mixins.scss ================================================ ================================================ FILE: static/scss/_navs.scss ================================================ @import "navs/global.scss"; @import "navs/topbar.scss"; @import "navs/sidebar.scss"; ================================================ FILE: static/scss/_utilities.scss ================================================ @import "utilities/animation.scss"; @import "utilities/background.scss"; @import "utilities/display.scss"; @import "utilities/text.scss"; @import "utilities/border.scss"; @import "utilities/progress.scss"; @import "utilities/rotate.scss"; ================================================ FILE: static/scss/_variables.scss ================================================ // Override Bootstrap default variables here // Do not edit any of the files in /vendor/bootstrap/scss/! // Color Variables // Bootstrap Color Overrides $white: #fff !default; $gray-100: #f8f9fc !default; $gray-200: #eaecf4 !default; $gray-300: #dddfeb !default; $gray-400: #d1d3e2 !default; $gray-500: #b7b9cc !default; $gray-600: #858796 !default; $gray-700: #6e707e !default; $gray-800: #5a5c69 !default; $gray-900: #3a3b45 !default; $black: #000 !default; $blue: #4e73df !default; $indigo: #6610f2 !default; $purple: #6f42c1 !default; $pink: #e83e8c !default; $red: #e74a3b !default; $orange: #fd7e14 !default; $yellow: #f6c23e !default; $green: #1cc88a !default; $teal: #20c9a6 !default; $cyan: #36b9cc !default; // Custom Colors $brand-google: #ea4335 !default; $brand-facebook: #3b5998 !default; // Set Contrast Threshold $yiq-contrasted-threshold: 195 !default; // Typography $body-color: $gray-600 !default; $font-family-sans-serif: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", 'Noto Color Emoji' !default; $font-weight-light: 300 !default; // $font-weight-base: 400; $headings-font-weight: 400 !default; // Shadows $box-shadow-sm: 0 0.125rem 0.25rem 0 rgba($gray-900, .2) !default; $box-shadow: 0 0.15rem 1.75rem 0 rgba($gray-900, .15) !default; // $box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default; // Borders Radius $border-radius: 0.35rem !default; $border-color: darken($gray-200, 2%) !default; // Spacing Variables // Change below variable if the height of the navbar changes $topbar-base-height: 4.375rem !default; // Change below variable to change the width of the sidenav $sidebar-base-width: 14rem !default; // Change below variable to change the width of the sidenav when collapsed $sidebar-collapsed-width: 6.5rem !default; // Card $card-cap-bg: $gray-100 !default; $card-border-color: $border-color !default; // Adjust column spacing for symmetry $spacer: 1rem !default; $grid-gutter-width: $spacer * 1.5 !default; // Transitions $transition-collapse: height .15s ease !default; // Dropdowns $dropdown-font-size: 0.85rem !default; $dropdown-border-color: $border-color !default; // Images $login-image: 'https://source.unsplash.com/K4mSJ7kc0As/600x800' !default; $register-image: 'https://source.unsplash.com/Mv9hjnEUHR4/600x800' !default; $password-image: 'https://source.unsplash.com/oWTW-jNGl9I/600x800' !default; ================================================ FILE: static/scss/navs/_global.scss ================================================ // Global styles for both custom sidebar and topbar compoments .sidebar, .topbar { .nav-item { // Customize Dropdown Arrows for Navbar &.dropdown { .dropdown-toggle { &::after { width: 1rem; text-align: center; float: right; vertical-align: 0; border: 0; font-weight: 900; content: '\f105'; font-family: 'Font Awesome 5 Free'; } } &.show { .dropdown-toggle::after { content: '\f107'; } } } // Counter for nav links and nav link image sizing .nav-link { position: relative; .badge-counter { position: absolute; transform: scale(0.7); transform-origin: top right; right: .25rem; margin-top: -.25rem; } .img-profile { height: 2rem; width: 2rem; } } } } ================================================ FILE: static/scss/navs/_sidebar.scss ================================================ // Sidebar .sidebar { width: $sidebar-collapsed-width; min-height: 100vh; .nav-item { position: relative; &:last-child { margin-bottom: 1rem; } .nav-link { text-align: center; padding: 0.75rem 1rem; width: $sidebar-collapsed-width; span { font-size: 0.65rem; display: block; } } &.active { .nav-link { font-weight: 700; } } // Accordion .collapse { position: absolute; left: calc(#{$sidebar-collapsed-width} + #{$grid-gutter-width} / 2); z-index: 1; top: 2px; // Grow In Animation @extend .animated--grow-in; .collapse-inner { border-radius: $border-radius; box-shadow: $box-shadow; } } .collapsing { display: none; transition: none; } .collapse, .collapsing { .collapse-inner { padding: .5rem 0; min-width: 10rem; font-size: $dropdown-font-size; margin: 0 0 1rem 0; .collapse-header { margin: 0; white-space: nowrap; padding: .5rem 1.5rem; text-transform: uppercase; font-weight: 800; font-size: 0.65rem; color: $gray-500; } .collapse-item { padding: 0.5rem 1rem; margin: 0 0.5rem; display: block; color: $gray-900; text-decoration: none; border-radius: $border-radius; white-space: nowrap; &:hover { background-color: $gray-200; } &:active { background-color: $gray-300; } &.active { color: $primary; font-weight: 700; } } } } } #sidebarToggle { width: 2.5rem; height: 2.5rem; text-align: center; margin-bottom: 1rem; cursor: pointer; &::after { font-weight: 900; content: '\f104'; font-family: 'Font Awesome 5 Free'; margin-right: 0.1rem; } &:hover { text-decoration: none; } &:focus { outline: none; } } &.toggled { width: 0 !important; overflow: hidden; #sidebarToggle::after { content: '\f105'; font-family: 'Font Awesome 5 Free'; margin-left: 0.25rem; } } .sidebar-brand { height: $topbar-base-height; text-decoration: none; font-size: 1rem; font-weight: 800; padding: 1.5rem 1rem; text-align: center; text-transform: uppercase; letter-spacing: 0.05rem; z-index: 1; .sidebar-brand-icon i { font-size: 2rem; } .sidebar-brand-text { display: none; } } hr.sidebar-divider { margin: 0 1rem 1rem; } .sidebar-heading { text-align: center; padding: 0 1rem; font-weight: 800; font-size: 0.65rem; @extend .text-uppercase; } } @include media-breakpoint-up(md) { .sidebar { width: $sidebar-base-width !important; .nav-item { // Accordion .collapse { position: relative; left: 0; z-index: 1; top: 0; animation: none; .collapse-inner { border-radius: 0; box-shadow: none; } } .collapsing { display: block; transition: $transition-collapse; } .collapse, .collapsing { margin: 0 1rem; } .nav-link { display: block; width: 100%; text-align: left; padding: 1rem; width: $sidebar-base-width; i { font-size: 0.85rem; margin-right: 0.25rem; } span { font-size: 0.85rem; display: inline; } // Accordion Arrow Icon &[data-toggle="collapse"] { &::after { width: 1rem; text-align: center; float: right; vertical-align: 0; border: 0; font-weight: 900; content: '\f107'; font-family: 'Font Awesome 5 Free'; } &.collapsed::after { content: '\f105'; } } } } .sidebar-brand { .sidebar-brand-icon i { font-size: 2rem; } .sidebar-brand-text { display: inline; } } .sidebar-heading { text-align: left; } &.toggled { overflow: visible; width: $sidebar-collapsed-width !important; .nav-item { // Accordion .collapse { position: absolute; left: calc(#{$sidebar-collapsed-width} + #{$grid-gutter-width} / 2); z-index: 1; top: 2px; // Grow In Animation for Toggled State animation-name: growIn; animation-duration: 200ms; animation-timing-function: transform cubic-bezier(.18,1.25,.4,1), opacity cubic-bezier(0,1,.4,1); .collapse-inner { box-shadow: $box-shadow; border-radius: $border-radius; } } .collapsing { display: none; transition: none; } .collapse, .collapsing { margin: 0; } &:last-child { margin-bottom: 1rem; } .nav-link { text-align: center; padding: 0.75rem 1rem; width: $sidebar-collapsed-width; span { font-size: 0.65rem; display: block; } i { margin-right: 0; } &[data-toggle="collapse"]::after { display: none; } } } .sidebar-brand { .sidebar-brand-icon i { font-size: 2rem; } .sidebar-brand-text { display: none; } } .sidebar-heading { text-align: center; } } } } // Sidebar Color Variants // Sidebar Light .sidebar-light { .sidebar-brand { color: $gray-700; } hr.sidebar-divider { border-top: 1px solid $gray-200; } .sidebar-heading { color: $gray-500; } .nav-item { .nav-link { color: $gray-600; i { color: $gray-400; } &:active, &:focus, &:hover { color: $gray-700; i { color: $gray-700; } } // Accordion &[data-toggle="collapse"]::after { color: $gray-500; } } &.active { .nav-link { color: $gray-700; i { color: $gray-700; } } } } // Color the sidebar toggler #sidebarToggle { background-color: $gray-200; &::after { color: $gray-500; } &:hover { background-color: $gray-300; } } } // Sidebar Dark .sidebar-dark { .sidebar-brand { color: $white; } hr.sidebar-divider { border-top: 1px solid fade-out($white, 0.85); } .sidebar-heading { color: fade-out($white, 0.6); } .nav-item { .nav-link { color: fade-out($white, 0.2); i { color: fade-out($white, 0.7); } &:active, &:focus, &:hover { color: $white; i { color: $white; } } // Accordion &[data-toggle="collapse"]::after { color: fade-out($white, 0.5); } } &.active { .nav-link { color: $white; i { color: $white; } } } } // Color the sidebar toggler #sidebarToggle { background-color: fade-out($white, 0.8); &::after { color: fade-out($white, 0.5); } &:hover { background-color: fade-out($white, 0.75); } } &.toggled { #sidebarToggle::after { color: fade-out($white, 0.5); } } } ================================================ FILE: static/scss/navs/_topbar.scss ================================================ // Topbar .topbar { height: $topbar-base-height; #sidebarToggleTop { height: 2.5rem; width: 2.5rem; &:hover { background-color: $gray-200; } &:active { background-color: $gray-300; } } .navbar-search { width: 25rem; input { font-size: 0.85rem; height: auto; } } .topbar-divider { width: 0; border-right: 1px solid $border-color; height: calc(#{$topbar-base-height} - 2rem); margin: auto 1rem; } .nav-item { .nav-link { height: $topbar-base-height; display: flex; align-items: center; padding: 0 0.75rem; &:focus { outline: none; } } &:focus { outline: none; } } .dropdown { position: static; .dropdown-menu { width: calc(100% - #{$grid-gutter-width}); right: $grid-gutter-width / 2; } } .dropdown-list { padding: 0; border: none; overflow: hidden; .dropdown-header { background-color: $primary; border: 1px solid $primary; padding-top: 0.75rem; padding-bottom: 0.75rem; color: $white; } .dropdown-item { white-space: normal; padding-top: 0.5rem; padding-bottom: 0.5rem; border-left: 1px solid $border-color; border-right: 1px solid $border-color; border-bottom: 1px solid $border-color; line-height: 1.3rem; .dropdown-list-image { position: relative; height: 2.5rem; width: 2.5rem; img { height: 2.5rem; width: 2.5rem; } .status-indicator { background-color: $gray-200; height: 0.75rem; width: 0.75rem; border-radius: 100%; position: absolute; bottom: 0; right: 0; border: .125rem solid $white; } } .text-truncate { max-width: 10rem; } &:active { background-color: $gray-200; color: $gray-900; } } } @include media-breakpoint-up(sm) { .dropdown { position: relative; .dropdown-menu { width: auto; right: 0; } } .dropdown-list { width: 20rem !important; .dropdown-item { .text-truncate { max-width: 13.375rem; } } } } } .topbar.navbar-dark { .navbar-nav { .nav-item { .nav-link { color: fade-out($white, 0.2); &:hover { color: $white; } &:active { color: $white; } } } } } .topbar.navbar-light { .navbar-nav { .nav-item { .nav-link { color: $gray-400; &:hover { color: $gray-500; } &:active { color: $gray-600; } } } } } ================================================ FILE: static/scss/sb-admin-2.scss ================================================ // Import Custom SB Admin 2 Variables (Overrides Default Bootstrap Variables) @import "variables.scss"; // Import Bootstrap @import "../vendor/bootstrap/scss/bootstrap.scss"; // Import Custom SB Admin 2 Mixins and Components @import "mixins.scss"; @import "global.scss"; @import "utilities.scss"; // Custom Components @import "dropdowns.scss"; @import "navs.scss"; @import "buttons.scss"; @import "cards.scss"; @import "charts.scss"; @import "login.scss"; @import "error.scss"; @import "footer.scss"; ================================================ FILE: static/scss/utilities/_animation.scss ================================================ // Animation Utilities // Grow In Animation @keyframes growIn { 0% { transform: scale(0.9); opacity: 0; } 100% { transform: scale(1); opacity: 1; } } .animated--grow-in { animation-name: growIn; animation-duration: 200ms; animation-timing-function: transform cubic-bezier(.18,1.25,.4,1), opacity cubic-bezier(0,1,.4,1); } // Fade In Animation @keyframes fadeIn { 0% { opacity: 0; } 100% { opacity: 1; } } .animated--fade-in { animation-name: fadeIn; animation-duration: 200ms; animation-timing-function: opacity cubic-bezier(0,1,.4,1); } ================================================ FILE: static/scss/utilities/_background.scss ================================================ // Background Gradient Utilities @each $color, $value in $theme-colors { .bg-gradient-#{$color} { background-color: $value; background-image: linear-gradient(180deg, $value 10%, darken($value, 15%) 100%); background-size: cover; } } // Grayscale Background Utilities @each $level, $value in $grays { .bg-gray-#{$level} { background-color: $value !important; } } ================================================ FILE: static/scss/utilities/_border.scss ================================================ @each $color, $value in $theme-colors { @each $position in ['left', 'bottom'] { .border-#{$position}-#{$color} { border-#{$position}: .25rem solid $value !important; } } } ================================================ FILE: static/scss/utilities/_display.scss ================================================ // Overflow Hidden .o-hidden { overflow: hidden !important; } ================================================ FILE: static/scss/utilities/_progress.scss ================================================ .progress-sm { height: .5rem; } ================================================ FILE: static/scss/utilities/_rotate.scss ================================================ .rotate-15 { transform: rotate(15deg); } .rotate-n-15 { transform: rotate(-15deg); } ================================================ FILE: static/scss/utilities/_text.scss ================================================ // Grayscale Text Utilities .text-xs { font-size: .7rem; } .text-lg { font-size: 1.2rem; } .text-gray-100 { color: $gray-100 !important; } .text-gray-200 { color: $gray-200 !important; } .text-gray-300 { color: $gray-300 !important; } .text-gray-400 { color: $gray-400 !important; } .text-gray-500 { color: $gray-500 !important; } .text-gray-600 { color: $gray-600 !important; } .text-gray-700 { color: $gray-700 !important; } .text-gray-800 { color: $gray-800 !important; } .text-gray-900 { color: $gray-900 !important; } .icon-circle { height: 2.5rem; width: 2.5rem; border-radius: 100%; display: flex; align-items: center; justify-content: center; } ================================================ FILE: static/vendor/animate/animate.css ================================================ @charset "UTF-8"; /*! * animate.css -http://daneden.me/animate * Version - 3.5.2 * Licensed under the MIT license - http://opensource.org/licenses/MIT * * Copyright (c) 2017 Daniel Eden */ .animated { animation-duration: 1s; animation-fill-mode: both; } .animated.infinite { animation-iteration-count: infinite; } .animated.hinge { animation-duration: 2s; } .animated.flipOutX, .animated.flipOutY, .animated.bounceIn, .animated.bounceOut { animation-duration: .75s; } @keyframes bounce { from, 20%, 53%, 80%, to { animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); transform: translate3d(0,0,0); } 40%, 43% { animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); transform: translate3d(0, -30px, 0); } 70% { animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); transform: translate3d(0, -15px, 0); } 90% { transform: translate3d(0,-4px,0); } } .bounce { animation-name: bounce; transform-origin: center bottom; } @keyframes flash { from, 50%, to { opacity: 1; } 25%, 75% { opacity: 0; } } .flash { animation-name: flash; } /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ @keyframes pulse { from { transform: scale3d(1, 1, 1); } 50% { transform: scale3d(1.05, 1.05, 1.05); } to { transform: scale3d(1, 1, 1); } } .pulse { animation-name: pulse; } @keyframes rubberBand { from { transform: scale3d(1, 1, 1); } 30% { transform: scale3d(1.25, 0.75, 1); } 40% { transform: scale3d(0.75, 1.25, 1); } 50% { transform: scale3d(1.15, 0.85, 1); } 65% { transform: scale3d(.95, 1.05, 1); } 75% { transform: scale3d(1.05, .95, 1); } to { transform: scale3d(1, 1, 1); } } .rubberBand { animation-name: rubberBand; } @keyframes shake { from, to { transform: translate3d(0, 0, 0); } 10%, 30%, 50%, 70%, 90% { transform: translate3d(-10px, 0, 0); } 20%, 40%, 60%, 80% { transform: translate3d(10px, 0, 0); } } .shake { animation-name: shake; } @keyframes headShake { 0% { transform: translateX(0); } 6.5% { transform: translateX(-6px) rotateY(-9deg); } 18.5% { transform: translateX(5px) rotateY(7deg); } 31.5% { transform: translateX(-3px) rotateY(-5deg); } 43.5% { transform: translateX(2px) rotateY(3deg); } 50% { transform: translateX(0); } } .headShake { animation-timing-function: ease-in-out; animation-name: headShake; } @keyframes swing { 20% { transform: rotate3d(0, 0, 1, 15deg); } 40% { transform: rotate3d(0, 0, 1, -10deg); } 60% { transform: rotate3d(0, 0, 1, 5deg); } 80% { transform: rotate3d(0, 0, 1, -5deg); } to { transform: rotate3d(0, 0, 1, 0deg); } } .swing { transform-origin: top center; animation-name: swing; } @keyframes tada { from { transform: scale3d(1, 1, 1); } 10%, 20% { transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); } 30%, 50%, 70%, 90% { transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); } 40%, 60%, 80% { transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); } to { transform: scale3d(1, 1, 1); } } .tada { animation-name: tada; } /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ @keyframes wobble { from { transform: none; } 15% { transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); } 30% { transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); } 45% { transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); } 60% { transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); } 75% { transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); } to { transform: none; } } .wobble { animation-name: wobble; } @keyframes jello { from, 11.1%, to { transform: none; } 22.2% { transform: skewX(-12.5deg) skewY(-12.5deg); } 33.3% { transform: skewX(6.25deg) skewY(6.25deg); } 44.4% { transform: skewX(-3.125deg) skewY(-3.125deg); } 55.5% { transform: skewX(1.5625deg) skewY(1.5625deg); } 66.6% { transform: skewX(-0.78125deg) skewY(-0.78125deg); } 77.7% { transform: skewX(0.390625deg) skewY(0.390625deg); } 88.8% { transform: skewX(-0.1953125deg) skewY(-0.1953125deg); } } .jello { animation-name: jello; transform-origin: center; } @keyframes bounceIn { from, 20%, 40%, 60%, 80%, to { animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); } 0% { opacity: 0; transform: scale3d(.3, .3, .3); } 20% { transform: scale3d(1.1, 1.1, 1.1); } 40% { transform: scale3d(.9, .9, .9); } 60% { opacity: 1; transform: scale3d(1.03, 1.03, 1.03); } 80% { transform: scale3d(.97, .97, .97); } to { opacity: 1; transform: scale3d(1, 1, 1); } } .bounceIn { animation-name: bounceIn; } @keyframes bounceInDown { from, 60%, 75%, 90%, to { animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); } 0% { opacity: 0; transform: translate3d(0, -3000px, 0); } 60% { opacity: 1; transform: translate3d(0, 25px, 0); } 75% { transform: translate3d(0, -10px, 0); } 90% { transform: translate3d(0, 5px, 0); } to { transform: none; } } .bounceInDown { animation-name: bounceInDown; } @keyframes bounceInLeft { from, 60%, 75%, 90%, to { animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); } 0% { opacity: 0; transform: translate3d(-3000px, 0, 0); } 60% { opacity: 1; transform: translate3d(25px, 0, 0); } 75% { transform: translate3d(-10px, 0, 0); } 90% { transform: translate3d(5px, 0, 0); } to { transform: none; } } .bounceInLeft { animation-name: bounceInLeft; } @keyframes bounceInRight { from, 60%, 75%, 90%, to { animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); } from { opacity: 0; transform: translate3d(3000px, 0, 0); } 60% { opacity: 1; transform: translate3d(-25px, 0, 0); } 75% { transform: translate3d(10px, 0, 0); } 90% { transform: translate3d(-5px, 0, 0); } to { transform: none; } } .bounceInRight { animation-name: bounceInRight; } @keyframes bounceInUp { from, 60%, 75%, 90%, to { animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); } from { opacity: 0; transform: translate3d(0, 3000px, 0); } 60% { opacity: 1; transform: translate3d(0, -20px, 0); } 75% { transform: translate3d(0, 10px, 0); } 90% { transform: translate3d(0, -5px, 0); } to { transform: translate3d(0, 0, 0); } } .bounceInUp { animation-name: bounceInUp; } @keyframes bounceOut { 20% { transform: scale3d(.9, .9, .9); } 50%, 55% { opacity: 1; transform: scale3d(1.1, 1.1, 1.1); } to { opacity: 0; transform: scale3d(.3, .3, .3); } } .bounceOut { animation-name: bounceOut; } @keyframes bounceOutDown { 20% { transform: translate3d(0, 10px, 0); } 40%, 45% { opacity: 1; transform: translate3d(0, -20px, 0); } to { opacity: 0; transform: translate3d(0, 2000px, 0); } } .bounceOutDown { animation-name: bounceOutDown; } @keyframes bounceOutLeft { 20% { opacity: 1; transform: translate3d(20px, 0, 0); } to { opacity: 0; transform: translate3d(-2000px, 0, 0); } } .bounceOutLeft { animation-name: bounceOutLeft; } @keyframes bounceOutRight { 20% { opacity: 1; transform: translate3d(-20px, 0, 0); } to { opacity: 0; transform: translate3d(2000px, 0, 0); } } .bounceOutRight { animation-name: bounceOutRight; } @keyframes bounceOutUp { 20% { transform: translate3d(0, -10px, 0); } 40%, 45% { opacity: 1; transform: translate3d(0, 20px, 0); } to { opacity: 0; transform: translate3d(0, -2000px, 0); } } .bounceOutUp { animation-name: bounceOutUp; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .fadeIn { animation-name: fadeIn; } @keyframes fadeInDown { from { opacity: 0; transform: translate3d(0, -100%, 0); } to { opacity: 1; transform: none; } } .fadeInDown { animation-name: fadeInDown; } @keyframes fadeInDownBig { from { opacity: 0; transform: translate3d(0, -2000px, 0); } to { opacity: 1; transform: none; } } .fadeInDownBig { animation-name: fadeInDownBig; } @keyframes fadeInLeft { from { opacity: 0; transform: translate3d(-100%, 0, 0); } to { opacity: 1; transform: none; } } .fadeInLeft { animation-name: fadeInLeft; } @keyframes fadeInLeftBig { from { opacity: 0; transform: translate3d(-2000px, 0, 0); } to { opacity: 1; transform: none; } } .fadeInLeftBig { animation-name: fadeInLeftBig; } @keyframes fadeInRight { from { opacity: 0; transform: translate3d(100%, 0, 0); } to { opacity: 1; transform: none; } } .fadeInRight { animation-name: fadeInRight; } @keyframes fadeInRightBig { from { opacity: 0; transform: translate3d(2000px, 0, 0); } to { opacity: 1; transform: none; } } .fadeInRightBig { animation-name: fadeInRightBig; } @keyframes fadeInUp { from { opacity: 0; transform: translate3d(0, 100%, 0); } to { opacity: 1; transform: none; } } .fadeInUp { animation-name: fadeInUp; } @keyframes fadeInUpBig { from { opacity: 0; transform: translate3d(0, 2000px, 0); } to { opacity: 1; transform: none; } } .fadeInUpBig { animation-name: fadeInUpBig; } @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } } .fadeOut { animation-name: fadeOut; } @keyframes fadeOutDown { from { opacity: 1; } to { opacity: 0; transform: translate3d(0, 100%, 0); } } .fadeOutDown { animation-name: fadeOutDown; } @keyframes fadeOutDownBig { from { opacity: 1; } to { opacity: 0; transform: translate3d(0, 2000px, 0); } } .fadeOutDownBig { animation-name: fadeOutDownBig; } @keyframes fadeOutLeft { from { opacity: 1; } to { opacity: 0; transform: translate3d(-100%, 0, 0); } } .fadeOutLeft { animation-name: fadeOutLeft; } @keyframes fadeOutLeftBig { from { opacity: 1; } to { opacity: 0; transform: translate3d(-2000px, 0, 0); } } .fadeOutLeftBig { animation-name: fadeOutLeftBig; } @keyframes fadeOutRight { from { opacity: 1; } to { opacity: 0; transform: translate3d(100%, 0, 0); } } .fadeOutRight { animation-name: fadeOutRight; } @keyframes fadeOutRightBig { from { opacity: 1; } to { opacity: 0; transform: translate3d(2000px, 0, 0); } } .fadeOutRightBig { animation-name: fadeOutRightBig; } @keyframes fadeOutUp { from { opacity: 1; } to { opacity: 0; transform: translate3d(0, -100%, 0); } } .fadeOutUp { animation-name: fadeOutUp; } @keyframes fadeOutUpBig { from { opacity: 1; } to { opacity: 0; transform: translate3d(0, -2000px, 0); } } .fadeOutUpBig { animation-name: fadeOutUpBig; } @keyframes flip { from { transform: perspective(400px) rotate3d(0, 1, 0, -360deg); animation-timing-function: ease-out; } 40% { transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); animation-timing-function: ease-out; } 50% { transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); animation-timing-function: ease-in; } 80% { transform: perspective(400px) scale3d(.95, .95, .95); animation-timing-function: ease-in; } to { transform: perspective(400px); animation-timing-function: ease-in; } } .animated.flip { -webkit-backface-visibility: visible; backface-visibility: visible; animation-name: flip; } @keyframes flipInX { from { transform: perspective(400px) rotate3d(1, 0, 0, 90deg); animation-timing-function: ease-in; opacity: 0; } 40% { transform: perspective(400px) rotate3d(1, 0, 0, -20deg); animation-timing-function: ease-in; } 60% { transform: perspective(400px) rotate3d(1, 0, 0, 10deg); opacity: 1; } 80% { transform: perspective(400px) rotate3d(1, 0, 0, -5deg); } to { transform: perspective(400px); } } .flipInX { -webkit-backface-visibility: visible !important; backface-visibility: visible !important; animation-name: flipInX; } @keyframes flipInY { from { transform: perspective(400px) rotate3d(0, 1, 0, 90deg); animation-timing-function: ease-in; opacity: 0; } 40% { transform: perspective(400px) rotate3d(0, 1, 0, -20deg); animation-timing-function: ease-in; } 60% { transform: perspective(400px) rotate3d(0, 1, 0, 10deg); opacity: 1; } 80% { transform: perspective(400px) rotate3d(0, 1, 0, -5deg); } to { transform: perspective(400px); } } .flipInY { -webkit-backface-visibility: visible !important; backface-visibility: visible !important; animation-name: flipInY; } @keyframes flipOutX { from { transform: perspective(400px); } 30% { transform: perspective(400px) rotate3d(1, 0, 0, -20deg); opacity: 1; } to { transform: perspective(400px) rotate3d(1, 0, 0, 90deg); opacity: 0; } } .flipOutX { animation-name: flipOutX; -webkit-backface-visibility: visible !important; backface-visibility: visible !important; } @keyframes flipOutY { from { transform: perspective(400px); } 30% { transform: perspective(400px) rotate3d(0, 1, 0, -15deg); opacity: 1; } to { transform: perspective(400px) rotate3d(0, 1, 0, 90deg); opacity: 0; } } .flipOutY { -webkit-backface-visibility: visible !important; backface-visibility: visible !important; animation-name: flipOutY; } @keyframes lightSpeedIn { from { transform: translate3d(100%, 0, 0) skewX(-30deg); opacity: 0; } 60% { transform: skewX(20deg); opacity: 1; } 80% { transform: skewX(-5deg); opacity: 1; } to { transform: none; opacity: 1; } } .lightSpeedIn { animation-name: lightSpeedIn; animation-timing-function: ease-out; } @keyframes lightSpeedOut { from { opacity: 1; } to { transform: translate3d(100%, 0, 0) skewX(30deg); opacity: 0; } } .lightSpeedOut { animation-name: lightSpeedOut; animation-timing-function: ease-in; } @keyframes rotateIn { from { transform-origin: center; transform: rotate3d(0, 0, 1, -200deg); opacity: 0; } to { transform-origin: center; transform: none; opacity: 1; } } .rotateIn { animation-name: rotateIn; } @keyframes rotateInDownLeft { from { transform-origin: left bottom; transform: rotate3d(0, 0, 1, -45deg); opacity: 0; } to { transform-origin: left bottom; transform: none; opacity: 1; } } .rotateInDownLeft { animation-name: rotateInDownLeft; } @keyframes rotateInDownRight { from { transform-origin: right bottom; transform: rotate3d(0, 0, 1, 45deg); opacity: 0; } to { transform-origin: right bottom; transform: none; opacity: 1; } } .rotateInDownRight { animation-name: rotateInDownRight; } @keyframes rotateInUpLeft { from { transform-origin: left bottom; transform: rotate3d(0, 0, 1, 45deg); opacity: 0; } to { transform-origin: left bottom; transform: none; opacity: 1; } } .rotateInUpLeft { animation-name: rotateInUpLeft; } @keyframes rotateInUpRight { from { transform-origin: right bottom; transform: rotate3d(0, 0, 1, -90deg); opacity: 0; } to { transform-origin: right bottom; transform: none; opacity: 1; } } .rotateInUpRight { animation-name: rotateInUpRight; } @keyframes rotateOut { from { transform-origin: center; opacity: 1; } to { transform-origin: center; transform: rotate3d(0, 0, 1, 200deg); opacity: 0; } } .rotateOut { animation-name: rotateOut; } @keyframes rotateOutDownLeft { from { transform-origin: left bottom; opacity: 1; } to { transform-origin: left bottom; transform: rotate3d(0, 0, 1, 45deg); opacity: 0; } } .rotateOutDownLeft { animation-name: rotateOutDownLeft; } @keyframes rotateOutDownRight { from { transform-origin: right bottom; opacity: 1; } to { transform-origin: right bottom; transform: rotate3d(0, 0, 1, -45deg); opacity: 0; } } .rotateOutDownRight { animation-name: rotateOutDownRight; } @keyframes rotateOutUpLeft { from { transform-origin: left bottom; opacity: 1; } to { transform-origin: left bottom; transform: rotate3d(0, 0, 1, -45deg); opacity: 0; } } .rotateOutUpLeft { animation-name: rotateOutUpLeft; } @keyframes rotateOutUpRight { from { transform-origin: right bottom; opacity: 1; } to { transform-origin: right bottom; transform: rotate3d(0, 0, 1, 90deg); opacity: 0; } } .rotateOutUpRight { animation-name: rotateOutUpRight; } @keyframes hinge { 0% { transform-origin: top left; animation-timing-function: ease-in-out; } 20%, 60% { transform: rotate3d(0, 0, 1, 80deg); transform-origin: top left; animation-timing-function: ease-in-out; } 40%, 80% { transform: rotate3d(0, 0, 1, 60deg); transform-origin: top left; animation-timing-function: ease-in-out; opacity: 1; } to { transform: translate3d(0, 700px, 0); opacity: 0; } } .hinge { animation-name: hinge; } @keyframes jackInTheBox { from { opacity: 0; transform: scale(0.1) rotate(30deg); transform-origin: center bottom; } 50% { transform: rotate(-10deg); } 70% { transform: rotate(3deg); } to { opacity: 1; transform: scale(1); } } .jackInTheBox { animation-name: jackInTheBox; } /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ @keyframes rollIn { from { opacity: 0; transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); } to { opacity: 1; transform: none; } } .rollIn { animation-name: rollIn; } /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ @keyframes rollOut { from { opacity: 1; } to { opacity: 0; transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); } } .rollOut { animation-name: rollOut; } @keyframes zoomIn { from { opacity: 0; transform: scale3d(.3, .3, .3); } 50% { opacity: 1; } } .zoomIn { animation-name: zoomIn; } @keyframes zoomInDown { from { opacity: 0; transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); } 60% { opacity: 1; transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); } } .zoomInDown { animation-name: zoomInDown; } @keyframes zoomInLeft { from { opacity: 0; transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); } 60% { opacity: 1; transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); } } .zoomInLeft { animation-name: zoomInLeft; } @keyframes zoomInRight { from { opacity: 0; transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); } 60% { opacity: 1; transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); } } .zoomInRight { animation-name: zoomInRight; } @keyframes zoomInUp { from { opacity: 0; transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); } 60% { opacity: 1; transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); } } .zoomInUp { animation-name: zoomInUp; } @keyframes zoomOut { from { opacity: 1; } 50% { opacity: 0; transform: scale3d(.3, .3, .3); } to { opacity: 0; } } .zoomOut { animation-name: zoomOut; } @keyframes zoomOutDown { 40% { opacity: 1; transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); } to { opacity: 0; transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); transform-origin: center bottom; animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); } } .zoomOutDown { animation-name: zoomOutDown; } @keyframes zoomOutLeft { 40% { opacity: 1; transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); } to { opacity: 0; transform: scale(.1) translate3d(-2000px, 0, 0); transform-origin: left center; } } .zoomOutLeft { animation-name: zoomOutLeft; } @keyframes zoomOutRight { 40% { opacity: 1; transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); } to { opacity: 0; transform: scale(.1) translate3d(2000px, 0, 0); transform-origin: right center; } } .zoomOutRight { animation-name: zoomOutRight; } @keyframes zoomOutUp { 40% { opacity: 1; transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); } to { opacity: 0; transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); transform-origin: center bottom; animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); } } .zoomOutUp { animation-name: zoomOutUp; } @keyframes slideInDown { from { transform: translate3d(0, -100%, 0); visibility: visible; } to { transform: translate3d(0, 0, 0); } } .slideInDown { animation-name: slideInDown; } @keyframes slideInLeft { from { transform: translate3d(-100%, 0, 0); visibility: visible; } to { transform: translate3d(0, 0, 0); } } .slideInLeft { animation-name: slideInLeft; } @keyframes slideInRight { from { transform: translate3d(100%, 0, 0); visibility: visible; } to { transform: translate3d(0, 0, 0); } } .slideInRight { animation-name: slideInRight; } @keyframes slideInUp { from { transform: translate3d(0, 100%, 0); visibility: visible; } to { transform: translate3d(0, 0, 0); } } .slideInUp { animation-name: slideInUp; } @keyframes slideOutDown { from { transform: translate3d(0, 0, 0); } to { visibility: hidden; transform: translate3d(0, 100%, 0); } } .slideOutDown { animation-name: slideOutDown; } @keyframes slideOutLeft { from { transform: translate3d(0, 0, 0); } to { visibility: hidden; transform: translate3d(-100%, 0, 0); } } .slideOutLeft { animation-name: slideOutLeft; } @keyframes slideOutRight { from { transform: translate3d(0, 0, 0); } to { visibility: hidden; transform: translate3d(100%, 0, 0); } } .slideOutRight { animation-name: slideOutRight; } @keyframes slideOutUp { from { transform: translate3d(0, 0, 0); } to { visibility: hidden; transform: translate3d(0, -100%, 0); } } .slideOutUp { animation-name: slideOutUp; } ================================================ FILE: static/vendor/bootstrap/css/bootstrap-grid.css ================================================ @-ms-viewport { width: device-width; } html { box-sizing: border-box; -ms-overflow-style: scrollbar; } *, *::before, *::after { box-sizing: inherit; } .container { margin-right: auto; margin-left: auto; padding-right: 15px; padding-left: 15px; width: 100%; } @media (min-width: 576px) { .container { max-width: 540px; } } @media (min-width: 768px) { .container { max-width: 720px; } } @media (min-width: 992px) { .container { max-width: 960px; } } @media (min-width: 1200px) { .container { max-width: 1140px; } } .container-fluid { width: 100%; margin-right: auto; margin-left: auto; padding-right: 15px; padding-left: 15px; width: 100%; } .row { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-right: -15px; margin-left: -15px; } .no-gutters { margin-right: 0; margin-left: 0; } .no-gutters > .col, .no-gutters > [class*="col-"] { padding-right: 0; padding-left: 0; } .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-auto, .col-sm-1, .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-10, .col-sm-11, .col-sm-12, .col-sm, .col-sm-auto, .col-md-1, .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-10, .col-md-11, .col-md-12, .col-md, .col-md-auto, .col-lg-1, .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-10, .col-lg-11, .col-lg-12, .col-lg, .col-lg-auto, .col-xl-1, .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-10, .col-xl-11, .col-xl-12, .col-xl, .col-xl-auto { position: relative; width: 100%; min-height: 1px; padding-right: 15px; padding-left: 15px; } .col { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: none; } .col-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-1 { -ms-flex-order: 1; order: 1; } .order-2 { -ms-flex-order: 2; order: 2; } .order-3 { -ms-flex-order: 3; order: 3; } .order-4 { -ms-flex-order: 4; order: 4; } .order-5 { -ms-flex-order: 5; order: 5; } .order-6 { -ms-flex-order: 6; order: 6; } .order-7 { -ms-flex-order: 7; order: 7; } .order-8 { -ms-flex-order: 8; order: 8; } .order-9 { -ms-flex-order: 9; order: 9; } .order-10 { -ms-flex-order: 10; order: 10; } .order-11 { -ms-flex-order: 11; order: 11; } .order-12 { -ms-flex-order: 12; order: 12; } @media (min-width: 576px) { .col-sm { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-sm-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: none; } .col-sm-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-sm-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-sm-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-sm-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-sm-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-sm-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-sm-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-sm-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-sm-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-sm-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-sm-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-sm-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-sm-1 { -ms-flex-order: 1; order: 1; } .order-sm-2 { -ms-flex-order: 2; order: 2; } .order-sm-3 { -ms-flex-order: 3; order: 3; } .order-sm-4 { -ms-flex-order: 4; order: 4; } .order-sm-5 { -ms-flex-order: 5; order: 5; } .order-sm-6 { -ms-flex-order: 6; order: 6; } .order-sm-7 { -ms-flex-order: 7; order: 7; } .order-sm-8 { -ms-flex-order: 8; order: 8; } .order-sm-9 { -ms-flex-order: 9; order: 9; } .order-sm-10 { -ms-flex-order: 10; order: 10; } .order-sm-11 { -ms-flex-order: 11; order: 11; } .order-sm-12 { -ms-flex-order: 12; order: 12; } } @media (min-width: 768px) { .col-md { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-md-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: none; } .col-md-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-md-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-md-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-md-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-md-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-md-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-md-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-md-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-md-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-md-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-md-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-md-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-md-1 { -ms-flex-order: 1; order: 1; } .order-md-2 { -ms-flex-order: 2; order: 2; } .order-md-3 { -ms-flex-order: 3; order: 3; } .order-md-4 { -ms-flex-order: 4; order: 4; } .order-md-5 { -ms-flex-order: 5; order: 5; } .order-md-6 { -ms-flex-order: 6; order: 6; } .order-md-7 { -ms-flex-order: 7; order: 7; } .order-md-8 { -ms-flex-order: 8; order: 8; } .order-md-9 { -ms-flex-order: 9; order: 9; } .order-md-10 { -ms-flex-order: 10; order: 10; } .order-md-11 { -ms-flex-order: 11; order: 11; } .order-md-12 { -ms-flex-order: 12; order: 12; } } @media (min-width: 992px) { .col-lg { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-lg-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: none; } .col-lg-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-lg-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-lg-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-lg-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-lg-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-lg-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-lg-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-lg-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-lg-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-lg-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-lg-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-lg-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-lg-1 { -ms-flex-order: 1; order: 1; } .order-lg-2 { -ms-flex-order: 2; order: 2; } .order-lg-3 { -ms-flex-order: 3; order: 3; } .order-lg-4 { -ms-flex-order: 4; order: 4; } .order-lg-5 { -ms-flex-order: 5; order: 5; } .order-lg-6 { -ms-flex-order: 6; order: 6; } .order-lg-7 { -ms-flex-order: 7; order: 7; } .order-lg-8 { -ms-flex-order: 8; order: 8; } .order-lg-9 { -ms-flex-order: 9; order: 9; } .order-lg-10 { -ms-flex-order: 10; order: 10; } .order-lg-11 { -ms-flex-order: 11; order: 11; } .order-lg-12 { -ms-flex-order: 12; order: 12; } } @media (min-width: 1200px) { .col-xl { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-xl-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: none; } .col-xl-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-xl-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-xl-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-xl-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-xl-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-xl-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-xl-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-xl-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-xl-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-xl-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-xl-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-xl-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-xl-1 { -ms-flex-order: 1; order: 1; } .order-xl-2 { -ms-flex-order: 2; order: 2; } .order-xl-3 { -ms-flex-order: 3; order: 3; } .order-xl-4 { -ms-flex-order: 4; order: 4; } .order-xl-5 { -ms-flex-order: 5; order: 5; } .order-xl-6 { -ms-flex-order: 6; order: 6; } .order-xl-7 { -ms-flex-order: 7; order: 7; } .order-xl-8 { -ms-flex-order: 8; order: 8; } .order-xl-9 { -ms-flex-order: 9; order: 9; } .order-xl-10 { -ms-flex-order: 10; order: 10; } .order-xl-11 { -ms-flex-order: 11; order: 11; } .order-xl-12 { -ms-flex-order: 12; order: 12; } } .flex-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .justify-content-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } @media (min-width: 576px) { .flex-sm-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-sm-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-sm-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-sm-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-sm-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-sm-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-sm-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .justify-content-sm-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-sm-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-sm-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-sm-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-sm-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-sm-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-sm-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-sm-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-sm-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-sm-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-sm-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-sm-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-sm-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-sm-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-sm-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-sm-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-sm-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-sm-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-sm-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-sm-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-sm-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-sm-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } @media (min-width: 768px) { .flex-md-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-md-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-md-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-md-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-md-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-md-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-md-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .justify-content-md-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-md-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-md-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-md-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-md-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-md-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-md-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-md-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-md-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-md-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-md-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-md-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-md-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-md-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-md-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-md-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-md-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-md-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-md-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-md-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-md-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-md-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } @media (min-width: 992px) { .flex-lg-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-lg-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-lg-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-lg-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-lg-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-lg-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-lg-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .justify-content-lg-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-lg-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-lg-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-lg-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-lg-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-lg-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-lg-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-lg-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-lg-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-lg-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-lg-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-lg-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-lg-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-lg-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-lg-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-lg-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-lg-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-lg-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-lg-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-lg-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-lg-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-lg-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } @media (min-width: 1200px) { .flex-xl-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-xl-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-xl-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-xl-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-xl-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-xl-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-xl-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .justify-content-xl-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-xl-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-xl-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-xl-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-xl-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-xl-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-xl-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-xl-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-xl-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-xl-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-xl-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-xl-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-xl-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-xl-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-xl-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-xl-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-xl-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-xl-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-xl-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-xl-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-xl-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-xl-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } /*# sourceMappingURL=bootstrap-grid.css.map */ ================================================ FILE: static/vendor/bootstrap/css/bootstrap-reboot.css ================================================ html { box-sizing: border-box; font-family: sans-serif; line-height: 1.15; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; -ms-overflow-style: scrollbar; -webkit-tap-highlight-color: transparent; } *, *::before, *::after { box-sizing: inherit; } @-ms-viewport { width: device-width; } article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; } body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-size: 1rem; font-weight: normal; line-height: 1.5; color: #212529; background-color: #fff; } [tabindex="-1"]:focus { outline: none !important; } hr { box-sizing: content-box; height: 0; overflow: visible; } h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: .5rem; } p { margin-top: 0; margin-bottom: 1rem; } abbr[title], abbr[data-original-title] { text-decoration: underline; -webkit-text-decoration: underline dotted; text-decoration: underline dotted; cursor: help; border-bottom: 0; } address { margin-bottom: 1rem; font-style: normal; line-height: inherit; } ol, ul, dl { margin-top: 0; margin-bottom: 1rem; } ol ol, ul ul, ol ul, ul ol { margin-bottom: 0; } dt { font-weight: bold; } dd { margin-bottom: .5rem; margin-left: 0; } blockquote { margin: 0 0 1rem; } dfn { font-style: italic; } b, strong { font-weight: bolder; } small { font-size: 80%; } sub, sup { position: relative; font-size: 75%; line-height: 0; vertical-align: baseline; } sub { bottom: -.25em; } sup { top: -.5em; } a { color: #007bff; text-decoration: none; background-color: transparent; -webkit-text-decoration-skip: objects; } a:hover { color: #0056b3; text-decoration: underline; } a:not([href]):not([tabindex]) { color: inherit; text-decoration: none; } a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover { color: inherit; text-decoration: none; } a:not([href]):not([tabindex]):focus { outline: 0; } pre, code, kbd, samp { font-family: monospace, monospace; font-size: 1em; } pre { margin-top: 0; margin-bottom: 1rem; overflow: auto; } figure { margin: 0 0 1rem; } img { vertical-align: middle; border-style: none; } svg:not(:root) { overflow: hidden; } a, area, button, [role="button"], input, label, select, summary, textarea { -ms-touch-action: manipulation; touch-action: manipulation; } table { border-collapse: collapse; } caption { padding-top: 0.75rem; padding-bottom: 0.75rem; color: #868e96; text-align: left; caption-side: bottom; } th { text-align: left; } label { display: inline-block; margin-bottom: .5rem; } button:focus { outline: 1px dotted; outline: 5px auto -webkit-focus-ring-color; } input, button, select, optgroup, textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; } button, input { overflow: visible; } button, select { text-transform: none; } button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { padding: 0; border-style: none; } input[type="radio"], input[type="checkbox"] { box-sizing: border-box; padding: 0; } input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"] { -webkit-appearance: listbox; } textarea { overflow: auto; resize: vertical; } fieldset { min-width: 0; padding: 0; margin: 0; border: 0; } legend { display: block; width: 100%; max-width: 100%; padding: 0; margin-bottom: .5rem; font-size: 1.5rem; line-height: inherit; color: inherit; white-space: normal; } progress { vertical-align: baseline; } [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } [type="search"] { outline-offset: -2px; -webkit-appearance: none; } [type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-file-upload-button { font: inherit; -webkit-appearance: button; } output { display: inline-block; } summary { display: list-item; } template { display: none; } [hidden] { display: none !important; } /*# sourceMappingURL=bootstrap-reboot.css.map */ ================================================ FILE: static/vendor/bootstrap/css/bootstrap.css ================================================ /*! * Bootstrap v4.0.0-beta (https://getbootstrap.com) * Copyright 2011-2017 The Bootstrap Authors * Copyright 2011-2017 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ @media print { *, *::before, *::after { text-shadow: none !important; box-shadow: none !important; } a, a:visited { text-decoration: underline; } abbr[title]::after { content: " (" attr(title) ")"; } pre { white-space: pre-wrap !important; } pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } thead { display: table-header-group; } tr, img { page-break-inside: avoid; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } .navbar { display: none; } .badge { border: 1px solid #000; } .table { border-collapse: collapse !important; } .table td, .table th { background-color: #fff !important; } .table-bordered th, .table-bordered td { border: 1px solid #ddd !important; } } html { box-sizing: border-box; font-family: sans-serif; line-height: 1.15; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; -ms-overflow-style: scrollbar; -webkit-tap-highlight-color: transparent; } *, *::before, *::after { box-sizing: inherit; } @-ms-viewport { width: device-width; } article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; } body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-size: 1rem; font-weight: normal; line-height: 1.5; color: #212529; background-color: #fff; } [tabindex="-1"]:focus { outline: none !important; } hr { box-sizing: content-box; height: 0; overflow: visible; } h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: .5rem; } p { margin-top: 0; margin-bottom: 1rem; } abbr[title], abbr[data-original-title] { text-decoration: underline; -webkit-text-decoration: underline dotted; text-decoration: underline dotted; cursor: help; border-bottom: 0; } address { margin-bottom: 1rem; font-style: normal; line-height: inherit; } ol, ul, dl { margin-top: 0; margin-bottom: 1rem; } ol ol, ul ul, ol ul, ul ol { margin-bottom: 0; } dt { font-weight: bold; } dd { margin-bottom: .5rem; margin-left: 0; } blockquote { margin: 0 0 1rem; } dfn { font-style: italic; } b, strong { font-weight: bolder; } small { font-size: 80%; } sub, sup { position: relative; font-size: 75%; line-height: 0; vertical-align: baseline; } sub { bottom: -.25em; } sup { top: -.5em; } a { color: #007bff; text-decoration: none; background-color: transparent; -webkit-text-decoration-skip: objects; } a:hover { color: #0056b3; text-decoration: underline; } a:not([href]):not([tabindex]) { color: inherit; text-decoration: none; } a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover { color: inherit; text-decoration: none; } a:not([href]):not([tabindex]):focus { outline: 0; } pre, code, kbd, samp { font-family: monospace, monospace; font-size: 1em; } pre { margin-top: 0; margin-bottom: 1rem; overflow: auto; } figure { margin: 0 0 1rem; } img { vertical-align: middle; border-style: none; } svg:not(:root) { overflow: hidden; } a, area, button, [role="button"], input, label, select, summary, textarea { -ms-touch-action: manipulation; touch-action: manipulation; } table { border-collapse: collapse; } caption { padding-top: 0.75rem; padding-bottom: 0.75rem; color: #868e96; text-align: left; caption-side: bottom; } th { text-align: left; } label { display: inline-block; margin-bottom: .5rem; } button:focus { outline: 1px dotted; outline: 5px auto -webkit-focus-ring-color; } input, button, select, optgroup, textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; } button, input { overflow: visible; } button, select { text-transform: none; } button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { padding: 0; border-style: none; } input[type="radio"], input[type="checkbox"] { box-sizing: border-box; padding: 0; } input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"] { -webkit-appearance: listbox; } textarea { overflow: auto; resize: vertical; } fieldset { min-width: 0; padding: 0; margin: 0; border: 0; } legend { display: block; width: 100%; max-width: 100%; padding: 0; margin-bottom: .5rem; font-size: 1.5rem; line-height: inherit; color: inherit; white-space: normal; } progress { vertical-align: baseline; } [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } [type="search"] { outline-offset: -2px; -webkit-appearance: none; } [type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-file-upload-button { font: inherit; -webkit-appearance: button; } output { display: inline-block; } summary { display: list-item; } template { display: none; } [hidden] { display: none !important; } h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { margin-bottom: 0.5rem; font-family: inherit; font-weight: 500; line-height: 1.1; color: inherit; } h1, .h1 { font-size: 2.5rem; } h2, .h2 { font-size: 2rem; } h3, .h3 { font-size: 1.75rem; } h4, .h4 { font-size: 1.5rem; } h5, .h5 { font-size: 1.25rem; } h6, .h6 { font-size: 1rem; } .lead { font-size: 1.25rem; font-weight: 300; } .display-1 { font-size: 6rem; font-weight: 300; line-height: 1.1; } .display-2 { font-size: 5.5rem; font-weight: 300; line-height: 1.1; } .display-3 { font-size: 4.5rem; font-weight: 300; line-height: 1.1; } .display-4 { font-size: 3.5rem; font-weight: 300; line-height: 1.1; } hr { margin-top: 1rem; margin-bottom: 1rem; border: 0; border-top: 1px solid rgba(0, 0, 0, 0.1); } small, .small { font-size: 80%; font-weight: normal; } mark, .mark { padding: 0.2em; background-color: #fcf8e3; } .list-unstyled { padding-left: 0; list-style: none; } .list-inline { padding-left: 0; list-style: none; } .list-inline-item { display: inline-block; } .list-inline-item:not(:last-child) { margin-right: 5px; } .initialism { font-size: 90%; text-transform: uppercase; } .blockquote { margin-bottom: 1rem; font-size: 1.25rem; } .blockquote-footer { display: block; font-size: 80%; color: #868e96; } .blockquote-footer::before { content: "\2014 \00A0"; } .img-fluid { max-width: 100%; height: auto; } .img-thumbnail { padding: 0.25rem; background-color: #fff; border: 1px solid #ddd; border-radius: 0.25rem; transition: all 0.2s ease-in-out; max-width: 100%; height: auto; } .figure { display: inline-block; } .figure-img { margin-bottom: 0.5rem; line-height: 1; } .figure-caption { font-size: 90%; color: #868e96; } code, kbd, pre, samp { font-family: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } code { padding: 0.2rem 0.4rem; font-size: 90%; color: #bd4147; background-color: #f8f9fa; border-radius: 0.25rem; } a > code { padding: 0; color: inherit; background-color: inherit; } kbd { padding: 0.2rem 0.4rem; font-size: 90%; color: #fff; background-color: #212529; border-radius: 0.2rem; } kbd kbd { padding: 0; font-size: 100%; font-weight: bold; } pre { display: block; margin-top: 0; margin-bottom: 1rem; font-size: 90%; color: #212529; } pre code { padding: 0; font-size: inherit; color: inherit; background-color: transparent; border-radius: 0; } .pre-scrollable { max-height: 340px; overflow-y: scroll; } .container { margin-right: auto; margin-left: auto; padding-right: 15px; padding-left: 15px; width: 100%; } @media (min-width: 576px) { .container { max-width: 540px; } } @media (min-width: 768px) { .container { max-width: 720px; } } @media (min-width: 992px) { .container { max-width: 960px; } } @media (min-width: 1200px) { .container { max-width: 1140px; } } .container-fluid { width: 100%; margin-right: auto; margin-left: auto; padding-right: 15px; padding-left: 15px; width: 100%; } .row { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-right: -15px; margin-left: -15px; } .no-gutters { margin-right: 0; margin-left: 0; } .no-gutters > .col, .no-gutters > [class*="col-"] { padding-right: 0; padding-left: 0; } .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-auto, .col-sm-1, .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-10, .col-sm-11, .col-sm-12, .col-sm, .col-sm-auto, .col-md-1, .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-10, .col-md-11, .col-md-12, .col-md, .col-md-auto, .col-lg-1, .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-10, .col-lg-11, .col-lg-12, .col-lg, .col-lg-auto, .col-xl-1, .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-10, .col-xl-11, .col-xl-12, .col-xl, .col-xl-auto { position: relative; width: 100%; min-height: 1px; padding-right: 15px; padding-left: 15px; } .col { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: none; } .col-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-1 { -ms-flex-order: 1; order: 1; } .order-2 { -ms-flex-order: 2; order: 2; } .order-3 { -ms-flex-order: 3; order: 3; } .order-4 { -ms-flex-order: 4; order: 4; } .order-5 { -ms-flex-order: 5; order: 5; } .order-6 { -ms-flex-order: 6; order: 6; } .order-7 { -ms-flex-order: 7; order: 7; } .order-8 { -ms-flex-order: 8; order: 8; } .order-9 { -ms-flex-order: 9; order: 9; } .order-10 { -ms-flex-order: 10; order: 10; } .order-11 { -ms-flex-order: 11; order: 11; } .order-12 { -ms-flex-order: 12; order: 12; } @media (min-width: 576px) { .col-sm { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-sm-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: none; } .col-sm-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-sm-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-sm-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-sm-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-sm-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-sm-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-sm-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-sm-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-sm-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-sm-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-sm-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-sm-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-sm-1 { -ms-flex-order: 1; order: 1; } .order-sm-2 { -ms-flex-order: 2; order: 2; } .order-sm-3 { -ms-flex-order: 3; order: 3; } .order-sm-4 { -ms-flex-order: 4; order: 4; } .order-sm-5 { -ms-flex-order: 5; order: 5; } .order-sm-6 { -ms-flex-order: 6; order: 6; } .order-sm-7 { -ms-flex-order: 7; order: 7; } .order-sm-8 { -ms-flex-order: 8; order: 8; } .order-sm-9 { -ms-flex-order: 9; order: 9; } .order-sm-10 { -ms-flex-order: 10; order: 10; } .order-sm-11 { -ms-flex-order: 11; order: 11; } .order-sm-12 { -ms-flex-order: 12; order: 12; } } @media (min-width: 768px) { .col-md { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-md-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: none; } .col-md-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-md-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-md-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-md-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-md-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-md-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-md-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-md-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-md-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-md-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-md-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-md-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-md-1 { -ms-flex-order: 1; order: 1; } .order-md-2 { -ms-flex-order: 2; order: 2; } .order-md-3 { -ms-flex-order: 3; order: 3; } .order-md-4 { -ms-flex-order: 4; order: 4; } .order-md-5 { -ms-flex-order: 5; order: 5; } .order-md-6 { -ms-flex-order: 6; order: 6; } .order-md-7 { -ms-flex-order: 7; order: 7; } .order-md-8 { -ms-flex-order: 8; order: 8; } .order-md-9 { -ms-flex-order: 9; order: 9; } .order-md-10 { -ms-flex-order: 10; order: 10; } .order-md-11 { -ms-flex-order: 11; order: 11; } .order-md-12 { -ms-flex-order: 12; order: 12; } } @media (min-width: 992px) { .col-lg { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-lg-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: none; } .col-lg-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-lg-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-lg-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-lg-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-lg-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-lg-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-lg-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-lg-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-lg-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-lg-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-lg-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-lg-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-lg-1 { -ms-flex-order: 1; order: 1; } .order-lg-2 { -ms-flex-order: 2; order: 2; } .order-lg-3 { -ms-flex-order: 3; order: 3; } .order-lg-4 { -ms-flex-order: 4; order: 4; } .order-lg-5 { -ms-flex-order: 5; order: 5; } .order-lg-6 { -ms-flex-order: 6; order: 6; } .order-lg-7 { -ms-flex-order: 7; order: 7; } .order-lg-8 { -ms-flex-order: 8; order: 8; } .order-lg-9 { -ms-flex-order: 9; order: 9; } .order-lg-10 { -ms-flex-order: 10; order: 10; } .order-lg-11 { -ms-flex-order: 11; order: 11; } .order-lg-12 { -ms-flex-order: 12; order: 12; } } @media (min-width: 1200px) { .col-xl { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } .col-xl-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: none; } .col-xl-1 { -ms-flex: 0 0 8.333333%; flex: 0 0 8.333333%; max-width: 8.333333%; } .col-xl-2 { -ms-flex: 0 0 16.666667%; flex: 0 0 16.666667%; max-width: 16.666667%; } .col-xl-3 { -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; } .col-xl-4 { -ms-flex: 0 0 33.333333%; flex: 0 0 33.333333%; max-width: 33.333333%; } .col-xl-5 { -ms-flex: 0 0 41.666667%; flex: 0 0 41.666667%; max-width: 41.666667%; } .col-xl-6 { -ms-flex: 0 0 50%; flex: 0 0 50%; max-width: 50%; } .col-xl-7 { -ms-flex: 0 0 58.333333%; flex: 0 0 58.333333%; max-width: 58.333333%; } .col-xl-8 { -ms-flex: 0 0 66.666667%; flex: 0 0 66.666667%; max-width: 66.666667%; } .col-xl-9 { -ms-flex: 0 0 75%; flex: 0 0 75%; max-width: 75%; } .col-xl-10 { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; max-width: 83.333333%; } .col-xl-11 { -ms-flex: 0 0 91.666667%; flex: 0 0 91.666667%; max-width: 91.666667%; } .col-xl-12 { -ms-flex: 0 0 100%; flex: 0 0 100%; max-width: 100%; } .order-xl-1 { -ms-flex-order: 1; order: 1; } .order-xl-2 { -ms-flex-order: 2; order: 2; } .order-xl-3 { -ms-flex-order: 3; order: 3; } .order-xl-4 { -ms-flex-order: 4; order: 4; } .order-xl-5 { -ms-flex-order: 5; order: 5; } .order-xl-6 { -ms-flex-order: 6; order: 6; } .order-xl-7 { -ms-flex-order: 7; order: 7; } .order-xl-8 { -ms-flex-order: 8; order: 8; } .order-xl-9 { -ms-flex-order: 9; order: 9; } .order-xl-10 { -ms-flex-order: 10; order: 10; } .order-xl-11 { -ms-flex-order: 11; order: 11; } .order-xl-12 { -ms-flex-order: 12; order: 12; } } .table { width: 100%; max-width: 100%; margin-bottom: 1rem; background-color: transparent; } .table th, .table td { padding: 0.75rem; vertical-align: top; border-top: 1px solid #e9ecef; } .table thead th { vertical-align: bottom; border-bottom: 2px solid #e9ecef; } .table tbody + tbody { border-top: 2px solid #e9ecef; } .table .table { background-color: #fff; } .table-sm th, .table-sm td { padding: 0.3rem; } .table-bordered { border: 1px solid #e9ecef; } .table-bordered th, .table-bordered td { border: 1px solid #e9ecef; } .table-bordered thead th, .table-bordered thead td { border-bottom-width: 2px; } .table-striped tbody tr:nth-of-type(odd) { background-color: rgba(0, 0, 0, 0.05); } .table-hover tbody tr:hover { background-color: rgba(0, 0, 0, 0.075); } .table-primary, .table-primary > th, .table-primary > td { background-color: #b8daff; } .table-hover .table-primary:hover { background-color: #9fcdff; } .table-hover .table-primary:hover > td, .table-hover .table-primary:hover > th { background-color: #9fcdff; } .table-secondary, .table-secondary > th, .table-secondary > td { background-color: #dddfe2; } .table-hover .table-secondary:hover { background-color: #cfd2d6; } .table-hover .table-secondary:hover > td, .table-hover .table-secondary:hover > th { background-color: #cfd2d6; } .table-success, .table-success > th, .table-success > td { background-color: #c3e6cb; } .table-hover .table-success:hover { background-color: #b1dfbb; } .table-hover .table-success:hover > td, .table-hover .table-success:hover > th { background-color: #b1dfbb; } .table-info, .table-info > th, .table-info > td { background-color: #bee5eb; } .table-hover .table-info:hover { background-color: #abdde5; } .table-hover .table-info:hover > td, .table-hover .table-info:hover > th { background-color: #abdde5; } .table-warning, .table-warning > th, .table-warning > td { background-color: #ffeeba; } .table-hover .table-warning:hover { background-color: #ffe8a1; } .table-hover .table-warning:hover > td, .table-hover .table-warning:hover > th { background-color: #ffe8a1; } .table-danger, .table-danger > th, .table-danger > td { background-color: #f5c6cb; } .table-hover .table-danger:hover { background-color: #f1b0b7; } .table-hover .table-danger:hover > td, .table-hover .table-danger:hover > th { background-color: #f1b0b7; } .table-light, .table-light > th, .table-light > td { background-color: #fdfdfe; } .table-hover .table-light:hover { background-color: #ececf6; } .table-hover .table-light:hover > td, .table-hover .table-light:hover > th { background-color: #ececf6; } .table-dark, .table-dark > th, .table-dark > td { background-color: #c6c8ca; } .table-hover .table-dark:hover { background-color: #b9bbbe; } .table-hover .table-dark:hover > td, .table-hover .table-dark:hover > th { background-color: #b9bbbe; } .table-active, .table-active > th, .table-active > td { background-color: rgba(0, 0, 0, 0.075); } .table-hover .table-active:hover { background-color: rgba(0, 0, 0, 0.075); } .table-hover .table-active:hover > td, .table-hover .table-active:hover > th { background-color: rgba(0, 0, 0, 0.075); } .thead-inverse th { color: #fff; background-color: #212529; } .thead-default th { color: #495057; background-color: #e9ecef; } .table-inverse { color: #fff; background-color: #212529; } .table-inverse th, .table-inverse td, .table-inverse thead th { border-color: #32383e; } .table-inverse.table-bordered { border: 0; } .table-inverse.table-striped tbody tr:nth-of-type(odd) { background-color: rgba(255, 255, 255, 0.05); } .table-inverse.table-hover tbody tr:hover { background-color: rgba(255, 255, 255, 0.075); } @media (max-width: 991px) { .table-responsive { display: block; width: 100%; overflow-x: auto; -ms-overflow-style: -ms-autohiding-scrollbar; } .table-responsive.table-bordered { border: 0; } } .form-control { display: block; width: 100%; padding: 0.5rem 0.75rem; font-size: 1rem; line-height: 1.25; color: #495057; background-color: #fff; background-image: none; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0.25rem; transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; } .form-control::-ms-expand { background-color: transparent; border: 0; } .form-control:focus { color: #495057; background-color: #fff; border-color: #80bdff; outline: none; } .form-control::-webkit-input-placeholder { color: #868e96; opacity: 1; } .form-control:-ms-input-placeholder { color: #868e96; opacity: 1; } .form-control::placeholder { color: #868e96; opacity: 1; } .form-control:disabled, .form-control[readonly] { background-color: #e9ecef; opacity: 1; } select.form-control:not([size]):not([multiple]) { height: calc(2.25rem + 2px); } select.form-control:focus::-ms-value { color: #495057; background-color: #fff; } .form-control-file, .form-control-range { display: block; } .col-form-label { padding-top: calc(0.5rem - 1px * 2); padding-bottom: calc(0.5rem - 1px * 2); margin-bottom: 0; } .col-form-label-lg { padding-top: calc(0.5rem - 1px * 2); padding-bottom: calc(0.5rem - 1px * 2); font-size: 1.25rem; } .col-form-label-sm { padding-top: calc(0.25rem - 1px * 2); padding-bottom: calc(0.25rem - 1px * 2); font-size: 0.875rem; } .col-form-legend { padding-top: 0.5rem; padding-bottom: 0.5rem; margin-bottom: 0; font-size: 1rem; } .form-control-plaintext { padding-top: 0.5rem; padding-bottom: 0.5rem; margin-bottom: 0; line-height: 1.25; border: solid transparent; border-width: 1px 0; } .form-control-plaintext.form-control-sm, .input-group-sm > .form-control-plaintext.form-control, .input-group-sm > .form-control-plaintext.input-group-addon, .input-group-sm > .input-group-btn > .form-control-plaintext.btn, .form-control-plaintext.form-control-lg, .input-group-lg > .form-control-plaintext.form-control, .input-group-lg > .form-control-plaintext.input-group-addon, .input-group-lg > .input-group-btn > .form-control-plaintext.btn { padding-right: 0; padding-left: 0; } .form-control-sm, .input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn { padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; border-radius: 0.2rem; } select.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]), .input-group-sm > select.input-group-addon:not([size]):not([multiple]), .input-group-sm > .input-group-btn > select.btn:not([size]):not([multiple]) { height: calc(1.8125rem + 2px); } .form-control-lg, .input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn { padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; border-radius: 0.3rem; } select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]), .input-group-lg > select.input-group-addon:not([size]):not([multiple]), .input-group-lg > .input-group-btn > select.btn:not([size]):not([multiple]) { height: calc(2.3125rem + 2px); } .form-group { margin-bottom: 1rem; } .form-text { display: block; margin-top: 0.25rem; } .form-row { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-right: -5px; margin-left: -5px; } .form-row > .col, .form-row > [class*="col-"] { padding-right: 5px; padding-left: 5px; } .form-check { position: relative; display: block; margin-bottom: 0.5rem; } .form-check.disabled .form-check-label { color: #868e96; } .form-check-label { padding-left: 1.25rem; margin-bottom: 0; } .form-check-input { position: absolute; margin-top: 0.25rem; margin-left: -1.25rem; } .form-check-input:only-child { position: static; } .form-check-inline { display: inline-block; } .form-check-inline .form-check-label { vertical-align: middle; } .form-check-inline + .form-check-inline { margin-left: 0.75rem; } .invalid-feedback { display: none; margin-top: .25rem; font-size: .875rem; color: #dc3545; } .invalid-tooltip { position: absolute; top: 100%; z-index: 5; display: none; width: 250px; padding: .5rem; margin-top: .1rem; font-size: .875rem; line-height: 1; color: #fff; background-color: rgba(220, 53, 69, 0.8); border-radius: .2rem; } .was-validated .form-control:valid, .form-control.is-valid, .was-validated .custom-select:valid, .custom-select.is-valid { border-color: #28a745; } .was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } .was-validated .form-control:valid ~ .invalid-feedback, .was-validated .form-control:valid ~ .invalid-tooltip, .form-control.is-valid ~ .invalid-feedback, .form-control.is-valid ~ .invalid-tooltip, .was-validated .custom-select:valid ~ .invalid-feedback, .was-validated .custom-select:valid ~ .invalid-tooltip, .custom-select.is-valid ~ .invalid-feedback, .custom-select.is-valid ~ .invalid-tooltip { display: block; } .was-validated .form-check-input:valid + .form-check-label, .form-check-input.is-valid + .form-check-label { color: #28a745; } .was-validated .custom-control-input:valid ~ .custom-control-indicator, .custom-control-input.is-valid ~ .custom-control-indicator { background-color: rgba(40, 167, 69, 0.25); } .was-validated .custom-control-input:valid ~ .custom-control-description, .custom-control-input.is-valid ~ .custom-control-description { color: #28a745; } .was-validated .custom-file-input:valid ~ .custom-file-control, .custom-file-input.is-valid ~ .custom-file-control { border-color: #28a745; } .was-validated .custom-file-input:valid ~ .custom-file-control::before, .custom-file-input.is-valid ~ .custom-file-control::before { border-color: inherit; } .was-validated .custom-file-input:valid:focus, .custom-file-input.is-valid:focus { box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); } .was-validated .form-control:invalid, .form-control.is-invalid, .was-validated .custom-select:invalid, .custom-select.is-invalid { border-color: #dc3545; } .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } .was-validated .form-control:invalid ~ .invalid-feedback, .was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, .form-control.is-invalid ~ .invalid-tooltip, .was-validated .custom-select:invalid ~ .invalid-feedback, .was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback, .custom-select.is-invalid ~ .invalid-tooltip { display: block; } .was-validated .form-check-input:invalid + .form-check-label, .form-check-input.is-invalid + .form-check-label { color: #dc3545; } .was-validated .custom-control-input:invalid ~ .custom-control-indicator, .custom-control-input.is-invalid ~ .custom-control-indicator { background-color: rgba(220, 53, 69, 0.25); } .was-validated .custom-control-input:invalid ~ .custom-control-description, .custom-control-input.is-invalid ~ .custom-control-description { color: #dc3545; } .was-validated .custom-file-input:invalid ~ .custom-file-control, .custom-file-input.is-invalid ~ .custom-file-control { border-color: #dc3545; } .was-validated .custom-file-input:invalid ~ .custom-file-control::before, .custom-file-input.is-invalid ~ .custom-file-control::before { border-color: inherit; } .was-validated .custom-file-input:invalid:focus, .custom-file-input.is-invalid:focus { box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); } .form-inline { display: -ms-flexbox; display: flex; -ms-flex-flow: row wrap; flex-flow: row wrap; -ms-flex-align: center; align-items: center; } .form-inline .form-check { width: 100%; } @media (min-width: 576px) { .form-inline label { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; -ms-flex-pack: center; justify-content: center; margin-bottom: 0; } .form-inline .form-group { display: -ms-flexbox; display: flex; -ms-flex: 0 0 auto; flex: 0 0 auto; -ms-flex-flow: row wrap; flex-flow: row wrap; -ms-flex-align: center; align-items: center; margin-bottom: 0; } .form-inline .form-control { display: inline-block; width: auto; vertical-align: middle; } .form-inline .form-control-plaintext { display: inline-block; } .form-inline .input-group { width: auto; } .form-inline .form-control-label { margin-bottom: 0; vertical-align: middle; } .form-inline .form-check { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; -ms-flex-pack: center; justify-content: center; width: auto; margin-top: 0; margin-bottom: 0; } .form-inline .form-check-label { padding-left: 0; } .form-inline .form-check-input { position: relative; margin-top: 0; margin-right: 0.25rem; margin-left: 0; } .form-inline .custom-control { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; -ms-flex-pack: center; justify-content: center; padding-left: 0; } .form-inline .custom-control-indicator { position: static; display: inline-block; margin-right: 0.25rem; vertical-align: text-bottom; } .form-inline .has-feedback .form-control-feedback { top: 0; } } .btn { display: inline-block; font-weight: normal; text-align: center; white-space: nowrap; vertical-align: middle; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border: 1px solid transparent; padding: 0.5rem 0.75rem; font-size: 1rem; line-height: 1.25; border-radius: 0.25rem; transition: all 0.15s ease-in-out; } .btn:focus, .btn:hover { text-decoration: none; } .btn:focus, .btn.focus { outline: 0; box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25); } .btn.disabled, .btn:disabled { opacity: .65; } .btn:active, .btn.active { background-image: none; } a.btn.disabled, fieldset[disabled] a.btn { pointer-events: none; } .btn-primary { color: #fff; background-color: #007bff; border-color: #007bff; } .btn-primary:hover { color: #fff; background-color: #0069d9; border-color: #0062cc; } .btn-primary:focus, .btn-primary.focus { box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.5); } .btn-primary.disabled, .btn-primary:disabled { background-color: #007bff; border-color: #007bff; } .btn-primary:active, .btn-primary.active, .show > .btn-primary.dropdown-toggle { background-color: #0069d9; background-image: none; border-color: #0062cc; } .btn-secondary { color: #fff; background-color: #868e96; border-color: #868e96; } .btn-secondary:hover { color: #fff; background-color: #727b84; border-color: #6c757d; } .btn-secondary:focus, .btn-secondary.focus { box-shadow: 0 0 0 3px rgba(134, 142, 150, 0.5); } .btn-secondary.disabled, .btn-secondary:disabled { background-color: #868e96; border-color: #868e96; } .btn-secondary:active, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle { background-color: #727b84; background-image: none; border-color: #6c757d; } .btn-success { color: #fff; background-color: #28a745; border-color: #28a745; } .btn-success:hover { color: #fff; background-color: #218838; border-color: #1e7e34; } .btn-success:focus, .btn-success.focus { box-shadow: 0 0 0 3px rgba(40, 167, 69, 0.5); } .btn-success.disabled, .btn-success:disabled { background-color: #28a745; border-color: #28a745; } .btn-success:active, .btn-success.active, .show > .btn-success.dropdown-toggle { background-color: #218838; background-image: none; border-color: #1e7e34; } .btn-info { color: #fff; background-color: #17a2b8; border-color: #17a2b8; } .btn-info:hover { color: #fff; background-color: #138496; border-color: #117a8b; } .btn-info:focus, .btn-info.focus { box-shadow: 0 0 0 3px rgba(23, 162, 184, 0.5); } .btn-info.disabled, .btn-info:disabled { background-color: #17a2b8; border-color: #17a2b8; } .btn-info:active, .btn-info.active, .show > .btn-info.dropdown-toggle { background-color: #138496; background-image: none; border-color: #117a8b; } .btn-warning { color: #111; background-color: #ffc107; border-color: #ffc107; } .btn-warning:hover { color: #111; background-color: #e0a800; border-color: #d39e00; } .btn-warning:focus, .btn-warning.focus { box-shadow: 0 0 0 3px rgba(255, 193, 7, 0.5); } .btn-warning.disabled, .btn-warning:disabled { background-color: #ffc107; border-color: #ffc107; } .btn-warning:active, .btn-warning.active, .show > .btn-warning.dropdown-toggle { background-color: #e0a800; background-image: none; border-color: #d39e00; } .btn-danger { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-danger:hover { color: #fff; background-color: #c82333; border-color: #bd2130; } .btn-danger:focus, .btn-danger.focus { box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.5); } .btn-danger.disabled, .btn-danger:disabled { background-color: #dc3545; border-color: #dc3545; } .btn-danger:active, .btn-danger.active, .show > .btn-danger.dropdown-toggle { background-color: #c82333; background-image: none; border-color: #bd2130; } .btn-light { color: #111; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-light:hover { color: #111; background-color: #e2e6ea; border-color: #dae0e5; } .btn-light:focus, .btn-light.focus { box-shadow: 0 0 0 3px rgba(248, 249, 250, 0.5); } .btn-light.disabled, .btn-light:disabled { background-color: #f8f9fa; border-color: #f8f9fa; } .btn-light:active, .btn-light.active, .show > .btn-light.dropdown-toggle { background-color: #e2e6ea; background-image: none; border-color: #dae0e5; } .btn-dark { color: #fff; background-color: #343a40; border-color: #343a40; } .btn-dark:hover { color: #fff; background-color: #23272b; border-color: #1d2124; } .btn-dark:focus, .btn-dark.focus { box-shadow: 0 0 0 3px rgba(52, 58, 64, 0.5); } .btn-dark.disabled, .btn-dark:disabled { background-color: #343a40; border-color: #343a40; } .btn-dark:active, .btn-dark.active, .show > .btn-dark.dropdown-toggle { background-color: #23272b; background-image: none; border-color: #1d2124; } .btn-outline-primary { color: #007bff; background-color: transparent; background-image: none; border-color: #007bff; } .btn-outline-primary:hover { color: #fff; background-color: #007bff; border-color: #007bff; } .btn-outline-primary:focus, .btn-outline-primary.focus { box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.5); } .btn-outline-primary.disabled, .btn-outline-primary:disabled { color: #007bff; background-color: transparent; } .btn-outline-primary:active, .btn-outline-primary.active, .show > .btn-outline-primary.dropdown-toggle { color: #fff; background-color: #007bff; border-color: #007bff; } .btn-outline-secondary { color: #868e96; background-color: transparent; background-image: none; border-color: #868e96; } .btn-outline-secondary:hover { color: #fff; background-color: #868e96; border-color: #868e96; } .btn-outline-secondary:focus, .btn-outline-secondary.focus { box-shadow: 0 0 0 3px rgba(134, 142, 150, 0.5); } .btn-outline-secondary.disabled, .btn-outline-secondary:disabled { color: #868e96; background-color: transparent; } .btn-outline-secondary:active, .btn-outline-secondary.active, .show > .btn-outline-secondary.dropdown-toggle { color: #fff; background-color: #868e96; border-color: #868e96; } .btn-outline-success { color: #28a745; background-color: transparent; background-image: none; border-color: #28a745; } .btn-outline-success:hover { color: #fff; background-color: #28a745; border-color: #28a745; } .btn-outline-success:focus, .btn-outline-success.focus { box-shadow: 0 0 0 3px rgba(40, 167, 69, 0.5); } .btn-outline-success.disabled, .btn-outline-success:disabled { color: #28a745; background-color: transparent; } .btn-outline-success:active, .btn-outline-success.active, .show > .btn-outline-success.dropdown-toggle { color: #fff; background-color: #28a745; border-color: #28a745; } .btn-outline-info { color: #17a2b8; background-color: transparent; background-image: none; border-color: #17a2b8; } .btn-outline-info:hover { color: #fff; background-color: #17a2b8; border-color: #17a2b8; } .btn-outline-info:focus, .btn-outline-info.focus { box-shadow: 0 0 0 3px rgba(23, 162, 184, 0.5); } .btn-outline-info.disabled, .btn-outline-info:disabled { color: #17a2b8; background-color: transparent; } .btn-outline-info:active, .btn-outline-info.active, .show > .btn-outline-info.dropdown-toggle { color: #fff; background-color: #17a2b8; border-color: #17a2b8; } .btn-outline-warning { color: #ffc107; background-color: transparent; background-image: none; border-color: #ffc107; } .btn-outline-warning:hover { color: #fff; background-color: #ffc107; border-color: #ffc107; } .btn-outline-warning:focus, .btn-outline-warning.focus { box-shadow: 0 0 0 3px rgba(255, 193, 7, 0.5); } .btn-outline-warning.disabled, .btn-outline-warning:disabled { color: #ffc107; background-color: transparent; } .btn-outline-warning:active, .btn-outline-warning.active, .show > .btn-outline-warning.dropdown-toggle { color: #fff; background-color: #ffc107; border-color: #ffc107; } .btn-outline-danger { color: #dc3545; background-color: transparent; background-image: none; border-color: #dc3545; } .btn-outline-danger:hover { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-outline-danger:focus, .btn-outline-danger.focus { box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.5); } .btn-outline-danger.disabled, .btn-outline-danger:disabled { color: #dc3545; background-color: transparent; } .btn-outline-danger:active, .btn-outline-danger.active, .show > .btn-outline-danger.dropdown-toggle { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-outline-light { color: #f8f9fa; background-color: transparent; background-image: none; border-color: #f8f9fa; } .btn-outline-light:hover { color: #fff; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-outline-light:focus, .btn-outline-light.focus { box-shadow: 0 0 0 3px rgba(248, 249, 250, 0.5); } .btn-outline-light.disabled, .btn-outline-light:disabled { color: #f8f9fa; background-color: transparent; } .btn-outline-light:active, .btn-outline-light.active, .show > .btn-outline-light.dropdown-toggle { color: #fff; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-outline-dark { color: #343a40; background-color: transparent; background-image: none; border-color: #343a40; } .btn-outline-dark:hover { color: #fff; background-color: #343a40; border-color: #343a40; } .btn-outline-dark:focus, .btn-outline-dark.focus { box-shadow: 0 0 0 3px rgba(52, 58, 64, 0.5); } .btn-outline-dark.disabled, .btn-outline-dark:disabled { color: #343a40; background-color: transparent; } .btn-outline-dark:active, .btn-outline-dark.active, .show > .btn-outline-dark.dropdown-toggle { color: #fff; background-color: #343a40; border-color: #343a40; } .btn-link { font-weight: normal; color: #007bff; border-radius: 0; } .btn-link, .btn-link:active, .btn-link.active, .btn-link:disabled { background-color: transparent; } .btn-link, .btn-link:focus, .btn-link:active { border-color: transparent; box-shadow: none; } .btn-link:hover { border-color: transparent; } .btn-link:focus, .btn-link:hover { color: #0056b3; text-decoration: underline; background-color: transparent; } .btn-link:disabled { color: #868e96; } .btn-link:disabled:focus, .btn-link:disabled:hover { text-decoration: none; } .btn-lg, .btn-group-lg > .btn { padding: 0.5rem 1rem; font-size: 1.25rem; line-height: 1.5; border-radius: 0.3rem; } .btn-sm, .btn-group-sm > .btn { padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; border-radius: 0.2rem; } .btn-block { display: block; width: 100%; } .btn-block + .btn-block { margin-top: 0.5rem; } input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { width: 100%; } .fade { opacity: 0; transition: opacity 0.15s linear; } .fade.show { opacity: 1; } .collapse { display: none; } .collapse.show { display: block; } tr.collapse.show { display: table-row; } tbody.collapse.show { display: table-row-group; } .collapsing { position: relative; height: 0; overflow: hidden; transition: height 0.35s ease; } .dropup, .dropdown { position: relative; } .dropdown-toggle::after { display: inline-block; width: 0; height: 0; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid; border-right: 0.3em solid transparent; border-left: 0.3em solid transparent; } .dropdown-toggle:empty::after { margin-left: 0; } .dropup .dropdown-menu { margin-top: 0; margin-bottom: 0.125rem; } .dropup .dropdown-toggle::after { border-top: 0; border-bottom: 0.3em solid; } .dropdown-menu { position: absolute; top: 100%; left: 0; z-index: 1000; display: none; float: left; min-width: 10rem; padding: 0.5rem 0; margin: 0.125rem 0 0; font-size: 1rem; color: #212529; text-align: left; list-style: none; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0.25rem; } .dropdown-divider { height: 0; margin: 0.5rem 0; overflow: hidden; border-top: 1px solid #e9ecef; } .dropdown-item { display: block; width: 100%; padding: 0.25rem 1.5rem; clear: both; font-weight: normal; color: #212529; text-align: inherit; white-space: nowrap; background: none; border: 0; } .dropdown-item:focus, .dropdown-item:hover { color: #16181b; text-decoration: none; background-color: #f8f9fa; } .dropdown-item.active, .dropdown-item:active { color: #fff; text-decoration: none; background-color: #007bff; } .dropdown-item.disabled, .dropdown-item:disabled { color: #868e96; background-color: transparent; } .show > a { outline: 0; } .dropdown-menu.show { display: block; } .dropdown-header { display: block; padding: 0.5rem 1.5rem; margin-bottom: 0; font-size: 0.875rem; color: #868e96; white-space: nowrap; } .btn-group, .btn-group-vertical { position: relative; display: -ms-inline-flexbox; display: inline-flex; vertical-align: middle; } .btn-group > .btn, .btn-group-vertical > .btn { position: relative; -ms-flex: 0 1 auto; flex: 0 1 auto; margin-bottom: 0; } .btn-group > .btn:hover, .btn-group-vertical > .btn:hover { z-index: 2; } .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:active, .btn-group-vertical > .btn.active { z-index: 2; } .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group, .btn-group-vertical .btn + .btn, .btn-group-vertical .btn + .btn-group, .btn-group-vertical .btn-group + .btn, .btn-group-vertical .btn-group + .btn-group { margin-left: -1px; } .btn-toolbar { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms-flex-pack: start; justify-content: flex-start; } .btn-toolbar .input-group { width: auto; } .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { border-radius: 0; } .btn-group > .btn:first-child { margin-left: 0; } .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } .btn-group > .btn-group { float: left; } .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { border-top-right-radius: 0; border-bottom-right-radius: 0; } .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { border-top-left-radius: 0; border-bottom-left-radius: 0; } .btn + .dropdown-toggle-split { padding-right: 0.5625rem; padding-left: 0.5625rem; } .btn + .dropdown-toggle-split::after { margin-left: 0; } .btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { padding-right: 0.375rem; padding-left: 0.375rem; } .btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { padding-right: 0.75rem; padding-left: 0.75rem; } .btn-group-vertical { display: -ms-inline-flexbox; display: inline-flex; -ms-flex-direction: column; flex-direction: column; -ms-flex-align: start; align-items: flex-start; -ms-flex-pack: center; justify-content: center; } .btn-group-vertical .btn, .btn-group-vertical .btn-group { width: 100%; } .btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group { margin-top: -1px; margin-left: 0; } .btn-group-vertical > .btn:not(:first-child):not(:last-child) { border-radius: 0; } .btn-group-vertical > .btn:first-child:not(:last-child) { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn:last-child:not(:first-child) { border-top-left-radius: 0; border-top-right-radius: 0; } .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { border-top-left-radius: 0; border-top-right-radius: 0; } [data-toggle="buttons"] > .btn input[type="radio"], [data-toggle="buttons"] > .btn input[type="checkbox"], [data-toggle="buttons"] > .btn-group > .btn input[type="radio"], [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { position: absolute; clip: rect(0, 0, 0, 0); pointer-events: none; } .input-group { position: relative; display: -ms-flexbox; display: flex; width: 100%; } .input-group .form-control { position: relative; z-index: 2; -ms-flex: 1 1 auto; flex: 1 1 auto; width: 1%; margin-bottom: 0; } .input-group .form-control:focus, .input-group .form-control:active, .input-group .form-control:hover { z-index: 3; } .input-group-addon, .input-group-btn, .input-group .form-control { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; } .input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) { border-radius: 0; } .input-group-addon, .input-group-btn { white-space: nowrap; vertical-align: middle; } .input-group-addon { padding: 0.5rem 0.75rem; margin-bottom: 0; font-size: 1rem; font-weight: normal; line-height: 1.25; color: #495057; text-align: center; background-color: #e9ecef; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0.25rem; } .input-group-addon.form-control-sm, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .input-group-addon.btn { padding: 0.25rem 0.5rem; font-size: 0.875rem; border-radius: 0.2rem; } .input-group-addon.form-control-lg, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .input-group-addon.btn { padding: 0.5rem 1rem; font-size: 1.25rem; border-radius: 0.3rem; } .input-group-addon input[type="radio"], .input-group-addon input[type="checkbox"] { margin-top: 0; } .input-group .form-control:not(:last-child), .input-group-addon:not(:last-child), .input-group-btn:not(:last-child) > .btn, .input-group-btn:not(:last-child) > .btn-group > .btn, .input-group-btn:not(:last-child) > .dropdown-toggle, .input-group-btn:not(:first-child) > .btn:not(:last-child):not(.dropdown-toggle), .input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group-addon:not(:last-child) { border-right: 0; } .input-group .form-control:not(:first-child), .input-group-addon:not(:first-child), .input-group-btn:not(:first-child) > .btn, .input-group-btn:not(:first-child) > .btn-group > .btn, .input-group-btn:not(:first-child) > .dropdown-toggle, .input-group-btn:not(:last-child) > .btn:not(:first-child), .input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; border-bottom-left-radius: 0; } .form-control + .input-group-addon:not(:first-child) { border-left: 0; } .input-group-btn { position: relative; font-size: 0; white-space: nowrap; } .input-group-btn > .btn { position: relative; } .input-group-btn > .btn + .btn { margin-left: -1px; } .input-group-btn > .btn:focus, .input-group-btn > .btn:active, .input-group-btn > .btn:hover { z-index: 3; } .input-group-btn:not(:last-child) > .btn, .input-group-btn:not(:last-child) > .btn-group { margin-right: -1px; } .input-group-btn:not(:first-child) > .btn, .input-group-btn:not(:first-child) > .btn-group { z-index: 2; margin-left: -1px; } .input-group-btn:not(:first-child) > .btn:focus, .input-group-btn:not(:first-child) > .btn:active, .input-group-btn:not(:first-child) > .btn:hover, .input-group-btn:not(:first-child) > .btn-group:focus, .input-group-btn:not(:first-child) > .btn-group:active, .input-group-btn:not(:first-child) > .btn-group:hover { z-index: 3; } .custom-control { position: relative; display: -ms-inline-flexbox; display: inline-flex; min-height: 1.5rem; padding-left: 1.5rem; margin-right: 1rem; } .custom-control-input { position: absolute; z-index: -1; opacity: 0; } .custom-control-input:checked ~ .custom-control-indicator { color: #fff; background-color: #007bff; } .custom-control-input:focus ~ .custom-control-indicator { box-shadow: 0 0 0 1px #fff, 0 0 0 3px #007bff; } .custom-control-input:active ~ .custom-control-indicator { color: #fff; background-color: #b3d7ff; } .custom-control-input:disabled ~ .custom-control-indicator { background-color: #e9ecef; } .custom-control-input:disabled ~ .custom-control-description { color: #868e96; } .custom-control-indicator { position: absolute; top: 0.25rem; left: 0; display: block; width: 1rem; height: 1rem; pointer-events: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; background-color: #ddd; background-repeat: no-repeat; background-position: center center; background-size: 50% 50%; } .custom-checkbox .custom-control-indicator { border-radius: 0.25rem; } .custom-checkbox .custom-control-input:checked ~ .custom-control-indicator { background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); } .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-indicator { background-color: #007bff; background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E"); } .custom-radio .custom-control-indicator { border-radius: 50%; } .custom-radio .custom-control-input:checked ~ .custom-control-indicator { background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"); } .custom-controls-stacked { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; } .custom-controls-stacked .custom-control { margin-bottom: 0.25rem; } .custom-controls-stacked .custom-control + .custom-control { margin-left: 0; } .custom-select { display: inline-block; max-width: 100%; height: calc(2.25rem + 2px); padding: 0.375rem 1.75rem 0.375rem 0.75rem; line-height: 1.25; color: #495057; vertical-align: middle; background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; background-size: 8px 10px; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0.25rem; -webkit-appearance: none; -moz-appearance: none; appearance: none; } .custom-select:focus { border-color: #80bdff; outline: none; } .custom-select:focus::-ms-value { color: #495057; background-color: #fff; } .custom-select:disabled { color: #868e96; background-color: #e9ecef; } .custom-select::-ms-expand { opacity: 0; } .custom-select-sm { height: calc(1.8125rem + 2px); padding-top: 0.375rem; padding-bottom: 0.375rem; font-size: 75%; } .custom-file { position: relative; display: inline-block; max-width: 100%; height: 2.5rem; margin-bottom: 0; } .custom-file-input { min-width: 14rem; max-width: 100%; height: 2.5rem; margin: 0; opacity: 0; } .custom-file-control { position: absolute; top: 0; right: 0; left: 0; z-index: 5; height: 2.5rem; padding: 0.5rem 1rem; line-height: 1.5; color: #495057; pointer-events: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; background-color: #fff; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0.25rem; } .custom-file-control:lang(en):empty::after { content: "Choose file..."; } .custom-file-control::before { position: absolute; top: -1px; right: -1px; bottom: -1px; z-index: 6; display: block; height: 2.5rem; padding: 0.5rem 1rem; line-height: 1.5; color: #495057; background-color: #e9ecef; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0 0.25rem 0.25rem 0; } .custom-file-control:lang(en)::before { content: "Browse"; } .nav { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; padding-left: 0; margin-bottom: 0; list-style: none; } .nav-link { display: block; padding: 0.5rem 1rem; } .nav-link:focus, .nav-link:hover { text-decoration: none; } .nav-link.disabled { color: #868e96; } .nav-tabs { border-bottom: 1px solid #ddd; } .nav-tabs .nav-item { margin-bottom: -1px; } .nav-tabs .nav-link { border: 1px solid transparent; border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; } .nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover { border-color: #e9ecef #e9ecef #ddd; } .nav-tabs .nav-link.disabled { color: #868e96; background-color: transparent; border-color: transparent; } .nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link { color: #495057; background-color: #fff; border-color: #ddd #ddd #fff; } .nav-tabs .dropdown-menu { margin-top: -1px; border-top-left-radius: 0; border-top-right-radius: 0; } .nav-pills .nav-link { border-radius: 0.25rem; } .nav-pills .nav-link.active, .show > .nav-pills .nav-link { color: #fff; background-color: #007bff; } .nav-fill .nav-item { -ms-flex: 1 1 auto; flex: 1 1 auto; text-align: center; } .nav-justified .nav-item { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; text-align: center; } .tab-content > .tab-pane { display: none; } .tab-content > .active { display: block; } .navbar { position: relative; display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms-flex-align: center; align-items: center; -ms-flex-pack: justify; justify-content: space-between; padding: 0.5rem 1rem; } .navbar > .container, .navbar > .container-fluid { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms-flex-align: center; align-items: center; -ms-flex-pack: justify; justify-content: space-between; } .navbar-brand { display: inline-block; padding-top: 0.3125rem; padding-bottom: 0.3125rem; margin-right: 1rem; font-size: 1.25rem; line-height: inherit; white-space: nowrap; } .navbar-brand:focus, .navbar-brand:hover { text-decoration: none; } .navbar-nav { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; padding-left: 0; margin-bottom: 0; list-style: none; } .navbar-nav .nav-link { padding-right: 0; padding-left: 0; } .navbar-nav .dropdown-menu { position: static; float: none; } .navbar-text { display: inline-block; padding-top: 0.5rem; padding-bottom: 0.5rem; } .navbar-collapse { -ms-flex-preferred-size: 100%; flex-basis: 100%; -ms-flex-align: center; align-items: center; } .navbar-toggler { padding: 0.25rem 0.75rem; font-size: 1.25rem; line-height: 1; background: transparent; border: 1px solid transparent; border-radius: 0.25rem; } .navbar-toggler:focus, .navbar-toggler:hover { text-decoration: none; } .navbar-toggler-icon { display: inline-block; width: 1.5em; height: 1.5em; vertical-align: middle; content: ""; background: no-repeat center center; background-size: 100% 100%; } @media (max-width: 575px) { .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid { padding-right: 0; padding-left: 0; } } @media (min-width: 576px) { .navbar-expand-sm { -ms-flex-direction: row; flex-direction: row; -ms-flex-wrap: nowrap; flex-wrap: nowrap; -ms-flex-pack: start; justify-content: flex-start; } .navbar-expand-sm .navbar-nav { -ms-flex-direction: row; flex-direction: row; } .navbar-expand-sm .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-sm .navbar-nav .dropdown-menu-right { right: 0; left: auto; } .navbar-expand-sm .navbar-nav .nav-link { padding-right: .5rem; padding-left: .5rem; } .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid { -ms-flex-wrap: nowrap; flex-wrap: nowrap; } .navbar-expand-sm .navbar-collapse { display: -ms-flexbox !important; display: flex !important; } .navbar-expand-sm .navbar-toggler { display: none; } } @media (max-width: 767px) { .navbar-expand-md > .container, .navbar-expand-md > .container-fluid { padding-right: 0; padding-left: 0; } } @media (min-width: 768px) { .navbar-expand-md { -ms-flex-direction: row; flex-direction: row; -ms-flex-wrap: nowrap; flex-wrap: nowrap; -ms-flex-pack: start; justify-content: flex-start; } .navbar-expand-md .navbar-nav { -ms-flex-direction: row; flex-direction: row; } .navbar-expand-md .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-md .navbar-nav .dropdown-menu-right { right: 0; left: auto; } .navbar-expand-md .navbar-nav .nav-link { padding-right: .5rem; padding-left: .5rem; } .navbar-expand-md > .container, .navbar-expand-md > .container-fluid { -ms-flex-wrap: nowrap; flex-wrap: nowrap; } .navbar-expand-md .navbar-collapse { display: -ms-flexbox !important; display: flex !important; } .navbar-expand-md .navbar-toggler { display: none; } } @media (max-width: 991px) { .navbar-expand-lg > .container, .navbar-expand-lg > .container-fluid { padding-right: 0; padding-left: 0; } } @media (min-width: 992px) { .navbar-expand-lg { -ms-flex-direction: row; flex-direction: row; -ms-flex-wrap: nowrap; flex-wrap: nowrap; -ms-flex-pack: start; justify-content: flex-start; } .navbar-expand-lg .navbar-nav { -ms-flex-direction: row; flex-direction: row; } .navbar-expand-lg .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-lg .navbar-nav .dropdown-menu-right { right: 0; left: auto; } .navbar-expand-lg .navbar-nav .nav-link { padding-right: .5rem; padding-left: .5rem; } .navbar-expand-lg > .container, .navbar-expand-lg > .container-fluid { -ms-flex-wrap: nowrap; flex-wrap: nowrap; } .navbar-expand-lg .navbar-collapse { display: -ms-flexbox !important; display: flex !important; } .navbar-expand-lg .navbar-toggler { display: none; } } @media (max-width: 1199px) { .navbar-expand-xl > .container, .navbar-expand-xl > .container-fluid { padding-right: 0; padding-left: 0; } } @media (min-width: 1200px) { .navbar-expand-xl { -ms-flex-direction: row; flex-direction: row; -ms-flex-wrap: nowrap; flex-wrap: nowrap; -ms-flex-pack: start; justify-content: flex-start; } .navbar-expand-xl .navbar-nav { -ms-flex-direction: row; flex-direction: row; } .navbar-expand-xl .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-xl .navbar-nav .dropdown-menu-right { right: 0; left: auto; } .navbar-expand-xl .navbar-nav .nav-link { padding-right: .5rem; padding-left: .5rem; } .navbar-expand-xl > .container, .navbar-expand-xl > .container-fluid { -ms-flex-wrap: nowrap; flex-wrap: nowrap; } .navbar-expand-xl .navbar-collapse { display: -ms-flexbox !important; display: flex !important; } .navbar-expand-xl .navbar-toggler { display: none; } } .navbar-expand { -ms-flex-direction: row; flex-direction: row; -ms-flex-wrap: nowrap; flex-wrap: nowrap; -ms-flex-pack: start; justify-content: flex-start; } .navbar-expand > .container, .navbar-expand > .container-fluid { padding-right: 0; padding-left: 0; } .navbar-expand .navbar-nav { -ms-flex-direction: row; flex-direction: row; } .navbar-expand .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand .navbar-nav .dropdown-menu-right { right: 0; left: auto; } .navbar-expand .navbar-nav .nav-link { padding-right: .5rem; padding-left: .5rem; } .navbar-expand > .container, .navbar-expand > .container-fluid { -ms-flex-wrap: nowrap; flex-wrap: nowrap; } .navbar-expand .navbar-collapse { display: -ms-flexbox !important; display: flex !important; } .navbar-expand .navbar-toggler { display: none; } .navbar-light .navbar-brand { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-brand:focus, .navbar-light .navbar-brand:hover { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-nav .nav-link { color: rgba(0, 0, 0, 0.5); } .navbar-light .navbar-nav .nav-link:focus, .navbar-light .navbar-nav .nav-link:hover { color: rgba(0, 0, 0, 0.7); } .navbar-light .navbar-nav .nav-link.disabled { color: rgba(0, 0, 0, 0.3); } .navbar-light .navbar-nav .show > .nav-link, .navbar-light .navbar-nav .active > .nav-link, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .nav-link.active { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-toggler { color: rgba(0, 0, 0, 0.5); border-color: rgba(0, 0, 0, 0.1); } .navbar-light .navbar-toggler-icon { background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); } .navbar-light .navbar-text { color: rgba(0, 0, 0, 0.5); } .navbar-dark .navbar-brand { color: white; } .navbar-dark .navbar-brand:focus, .navbar-dark .navbar-brand:hover { color: white; } .navbar-dark .navbar-nav .nav-link { color: rgba(255, 255, 255, 0.5); } .navbar-dark .navbar-nav .nav-link:focus, .navbar-dark .navbar-nav .nav-link:hover { color: rgba(255, 255, 255, 0.75); } .navbar-dark .navbar-nav .nav-link.disabled { color: rgba(255, 255, 255, 0.25); } .navbar-dark .navbar-nav .show > .nav-link, .navbar-dark .navbar-nav .active > .nav-link, .navbar-dark .navbar-nav .nav-link.show, .navbar-dark .navbar-nav .nav-link.active { color: white; } .navbar-dark .navbar-toggler { color: rgba(255, 255, 255, 0.5); border-color: rgba(255, 255, 255, 0.1); } .navbar-dark .navbar-toggler-icon { background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); } .navbar-dark .navbar-text { color: rgba(255, 255, 255, 0.5); } .card { position: relative; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; min-width: 0; word-wrap: break-word; background-color: #fff; background-clip: border-box; border: 1px solid rgba(0, 0, 0, 0.125); border-radius: 0.25rem; } .card-body { -ms-flex: 1 1 auto; flex: 1 1 auto; padding: 1.25rem; } .card-title { margin-bottom: 0.75rem; } .card-subtitle { margin-top: -0.375rem; margin-bottom: 0; } .card-text:last-child { margin-bottom: 0; } .card-link:hover { text-decoration: none; } .card-link + .card-link { margin-left: 1.25rem; } .card > .list-group:first-child .list-group-item:first-child { border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; } .card > .list-group:last-child .list-group-item:last-child { border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .card-header { padding: 0.75rem 1.25rem; margin-bottom: 0; background-color: rgba(0, 0, 0, 0.03); border-bottom: 1px solid rgba(0, 0, 0, 0.125); } .card-header:first-child { border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; } .card-footer { padding: 0.75rem 1.25rem; background-color: rgba(0, 0, 0, 0.03); border-top: 1px solid rgba(0, 0, 0, 0.125); } .card-footer:last-child { border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); } .card-header-tabs { margin-right: -0.625rem; margin-bottom: -0.75rem; margin-left: -0.625rem; border-bottom: 0; } .card-header-pills { margin-right: -0.625rem; margin-left: -0.625rem; } .card-img-overlay { position: absolute; top: 0; right: 0; bottom: 0; left: 0; padding: 1.25rem; } .card-img { width: 100%; border-radius: calc(0.25rem - 1px); } .card-img-top { width: 100%; border-top-left-radius: calc(0.25rem - 1px); border-top-right-radius: calc(0.25rem - 1px); } .card-img-bottom { width: 100%; border-bottom-right-radius: calc(0.25rem - 1px); border-bottom-left-radius: calc(0.25rem - 1px); } @media (min-width: 576px) { .card-deck { display: -ms-flexbox; display: flex; -ms-flex-flow: row wrap; flex-flow: row wrap; margin-right: -15px; margin-left: -15px; } .card-deck .card { display: -ms-flexbox; display: flex; -ms-flex: 1 0 0%; flex: 1 0 0%; -ms-flex-direction: column; flex-direction: column; margin-right: 15px; margin-left: 15px; } } @media (min-width: 576px) { .card-group { display: -ms-flexbox; display: flex; -ms-flex-flow: row wrap; flex-flow: row wrap; } .card-group .card { -ms-flex: 1 0 0%; flex: 1 0 0%; } .card-group .card + .card { margin-left: 0; border-left: 0; } .card-group .card:first-child { border-top-right-radius: 0; border-bottom-right-radius: 0; } .card-group .card:first-child .card-img-top { border-top-right-radius: 0; } .card-group .card:first-child .card-img-bottom { border-bottom-right-radius: 0; } .card-group .card:last-child { border-top-left-radius: 0; border-bottom-left-radius: 0; } .card-group .card:last-child .card-img-top { border-top-left-radius: 0; } .card-group .card:last-child .card-img-bottom { border-bottom-left-radius: 0; } .card-group .card:not(:first-child):not(:last-child) { border-radius: 0; } .card-group .card:not(:first-child):not(:last-child) .card-img-top, .card-group .card:not(:first-child):not(:last-child) .card-img-bottom { border-radius: 0; } } .card-columns .card { margin-bottom: 0.75rem; } @media (min-width: 576px) { .card-columns { -webkit-column-count: 3; column-count: 3; -webkit-column-gap: 1.25rem; column-gap: 1.25rem; } .card-columns .card { display: inline-block; width: 100%; } } .breadcrumb { padding: 0.75rem 1rem; margin-bottom: 1rem; list-style: none; background-color: #e9ecef; border-radius: 0.25rem; } .breadcrumb::after { display: block; clear: both; content: ""; } .breadcrumb-item { float: left; } .breadcrumb-item + .breadcrumb-item::before { display: inline-block; padding-right: 0.5rem; padding-left: 0.5rem; color: #868e96; content: "/"; } .breadcrumb-item + .breadcrumb-item:hover::before { text-decoration: underline; } .breadcrumb-item + .breadcrumb-item:hover::before { text-decoration: none; } .breadcrumb-item.active { color: #868e96; } .pagination { display: -ms-flexbox; display: flex; padding-left: 0; list-style: none; border-radius: 0.25rem; } .page-item:first-child .page-link { margin-left: 0; border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .page-item:last-child .page-link { border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; } .page-item.active .page-link { z-index: 2; color: #fff; background-color: #007bff; border-color: #007bff; } .page-item.disabled .page-link { color: #868e96; pointer-events: none; background-color: #fff; border-color: #ddd; } .page-link { position: relative; display: block; padding: 0.5rem 0.75rem; margin-left: -1px; line-height: 1.25; color: #007bff; background-color: #fff; border: 1px solid #ddd; } .page-link:focus, .page-link:hover { color: #0056b3; text-decoration: none; background-color: #e9ecef; border-color: #ddd; } .pagination-lg .page-link { padding: 0.75rem 1.5rem; font-size: 1.25rem; line-height: 1.5; } .pagination-lg .page-item:first-child .page-link { border-top-left-radius: 0.3rem; border-bottom-left-radius: 0.3rem; } .pagination-lg .page-item:last-child .page-link { border-top-right-radius: 0.3rem; border-bottom-right-radius: 0.3rem; } .pagination-sm .page-link { padding: 0.25rem 0.5rem; font-size: 0.875rem; line-height: 1.5; } .pagination-sm .page-item:first-child .page-link { border-top-left-radius: 0.2rem; border-bottom-left-radius: 0.2rem; } .pagination-sm .page-item:last-child .page-link { border-top-right-radius: 0.2rem; border-bottom-right-radius: 0.2rem; } .badge { display: inline-block; padding: 0.25em 0.4em; font-size: 75%; font-weight: bold; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: 0.25rem; } .badge:empty { display: none; } .btn .badge { position: relative; top: -1px; } .badge-pill { padding-right: 0.6em; padding-left: 0.6em; border-radius: 10rem; } .badge-primary { color: #fff; background-color: #007bff; } .badge-primary[href]:focus, .badge-primary[href]:hover { color: #fff; text-decoration: none; background-color: #0062cc; } .badge-secondary { color: #fff; background-color: #868e96; } .badge-secondary[href]:focus, .badge-secondary[href]:hover { color: #fff; text-decoration: none; background-color: #6c757d; } .badge-success { color: #fff; background-color: #28a745; } .badge-success[href]:focus, .badge-success[href]:hover { color: #fff; text-decoration: none; background-color: #1e7e34; } .badge-info { color: #fff; background-color: #17a2b8; } .badge-info[href]:focus, .badge-info[href]:hover { color: #fff; text-decoration: none; background-color: #117a8b; } .badge-warning { color: #111; background-color: #ffc107; } .badge-warning[href]:focus, .badge-warning[href]:hover { color: #111; text-decoration: none; background-color: #d39e00; } .badge-danger { color: #fff; background-color: #dc3545; } .badge-danger[href]:focus, .badge-danger[href]:hover { color: #fff; text-decoration: none; background-color: #bd2130; } .badge-light { color: #111; background-color: #f8f9fa; } .badge-light[href]:focus, .badge-light[href]:hover { color: #111; text-decoration: none; background-color: #dae0e5; } .badge-dark { color: #fff; background-color: #343a40; } .badge-dark[href]:focus, .badge-dark[href]:hover { color: #fff; text-decoration: none; background-color: #1d2124; } .jumbotron { padding: 2rem 1rem; margin-bottom: 2rem; background-color: #e9ecef; border-radius: 0.3rem; } @media (min-width: 576px) { .jumbotron { padding: 4rem 2rem; } } .jumbotron-fluid { padding-right: 0; padding-left: 0; border-radius: 0; } .alert { padding: 0.75rem 1.25rem; margin-bottom: 1rem; border: 1px solid transparent; border-radius: 0.25rem; } .alert-heading { color: inherit; } .alert-link { font-weight: bold; } .alert-dismissible .close { position: relative; top: -0.75rem; right: -1.25rem; padding: 0.75rem 1.25rem; color: inherit; } .alert-primary { color: #004085; background-color: #cce5ff; border-color: #b8daff; } .alert-primary hr { border-top-color: #9fcdff; } .alert-primary .alert-link { color: #002752; } .alert-secondary { color: #464a4e; background-color: #e7e8ea; border-color: #dddfe2; } .alert-secondary hr { border-top-color: #cfd2d6; } .alert-secondary .alert-link { color: #2e3133; } .alert-success { color: #155724; background-color: #d4edda; border-color: #c3e6cb; } .alert-success hr { border-top-color: #b1dfbb; } .alert-success .alert-link { color: #0b2e13; } .alert-info { color: #0c5460; background-color: #d1ecf1; border-color: #bee5eb; } .alert-info hr { border-top-color: #abdde5; } .alert-info .alert-link { color: #062c33; } .alert-warning { color: #856404; background-color: #fff3cd; border-color: #ffeeba; } .alert-warning hr { border-top-color: #ffe8a1; } .alert-warning .alert-link { color: #533f03; } .alert-danger { color: #721c24; background-color: #f8d7da; border-color: #f5c6cb; } .alert-danger hr { border-top-color: #f1b0b7; } .alert-danger .alert-link { color: #491217; } .alert-light { color: #818182; background-color: #fefefe; border-color: #fdfdfe; } .alert-light hr { border-top-color: #ececf6; } .alert-light .alert-link { color: #686868; } .alert-dark { color: #1b1e21; background-color: #d6d8d9; border-color: #c6c8ca; } .alert-dark hr { border-top-color: #b9bbbe; } .alert-dark .alert-link { color: #040505; } @-webkit-keyframes progress-bar-stripes { from { background-position: 1rem 0; } to { background-position: 0 0; } } @keyframes progress-bar-stripes { from { background-position: 1rem 0; } to { background-position: 0 0; } } .progress { display: -ms-flexbox; display: flex; overflow: hidden; font-size: 0.75rem; line-height: 1rem; text-align: center; background-color: #e9ecef; border-radius: 0.25rem; } .progress-bar { height: 1rem; line-height: 1rem; color: #fff; background-color: #007bff; transition: width 0.6s ease; } .progress-bar-striped { background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 1rem 1rem; } .progress-bar-animated { -webkit-animation: progress-bar-stripes 1s linear infinite; animation: progress-bar-stripes 1s linear infinite; } .media { display: -ms-flexbox; display: flex; -ms-flex-align: start; align-items: flex-start; } .media-body { -ms-flex: 1; flex: 1; } .list-group { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; padding-left: 0; margin-bottom: 0; } .list-group-item-action { width: 100%; color: #495057; text-align: inherit; } .list-group-item-action:focus, .list-group-item-action:hover { color: #495057; text-decoration: none; background-color: #f8f9fa; } .list-group-item-action:active { color: #212529; background-color: #e9ecef; } .list-group-item { position: relative; display: block; padding: 0.75rem 1.25rem; margin-bottom: -1px; background-color: #fff; border: 1px solid rgba(0, 0, 0, 0.125); } .list-group-item:first-child { border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; } .list-group-item:last-child { margin-bottom: 0; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .list-group-item:focus, .list-group-item:hover { text-decoration: none; } .list-group-item.disabled, .list-group-item:disabled { color: #868e96; background-color: #fff; } .list-group-item.active { z-index: 2; color: #fff; background-color: #007bff; border-color: #007bff; } .list-group-flush .list-group-item { border-right: 0; border-left: 0; border-radius: 0; } .list-group-flush:first-child .list-group-item:first-child { border-top: 0; } .list-group-flush:last-child .list-group-item:last-child { border-bottom: 0; } .list-group-item-primary { color: #004085; background-color: #b8daff; } a.list-group-item-primary, button.list-group-item-primary { color: #004085; } a.list-group-item-primary:focus, a.list-group-item-primary:hover, button.list-group-item-primary:focus, button.list-group-item-primary:hover { color: #004085; background-color: #9fcdff; } a.list-group-item-primary.active, button.list-group-item-primary.active { color: #fff; background-color: #004085; border-color: #004085; } .list-group-item-secondary { color: #464a4e; background-color: #dddfe2; } a.list-group-item-secondary, button.list-group-item-secondary { color: #464a4e; } a.list-group-item-secondary:focus, a.list-group-item-secondary:hover, button.list-group-item-secondary:focus, button.list-group-item-secondary:hover { color: #464a4e; background-color: #cfd2d6; } a.list-group-item-secondary.active, button.list-group-item-secondary.active { color: #fff; background-color: #464a4e; border-color: #464a4e; } .list-group-item-success { color: #155724; background-color: #c3e6cb; } a.list-group-item-success, button.list-group-item-success { color: #155724; } a.list-group-item-success:focus, a.list-group-item-success:hover, button.list-group-item-success:focus, button.list-group-item-success:hover { color: #155724; background-color: #b1dfbb; } a.list-group-item-success.active, button.list-group-item-success.active { color: #fff; background-color: #155724; border-color: #155724; } .list-group-item-info { color: #0c5460; background-color: #bee5eb; } a.list-group-item-info, button.list-group-item-info { color: #0c5460; } a.list-group-item-info:focus, a.list-group-item-info:hover, button.list-group-item-info:focus, button.list-group-item-info:hover { color: #0c5460; background-color: #abdde5; } a.list-group-item-info.active, button.list-group-item-info.active { color: #fff; background-color: #0c5460; border-color: #0c5460; } .list-group-item-warning { color: #856404; background-color: #ffeeba; } a.list-group-item-warning, button.list-group-item-warning { color: #856404; } a.list-group-item-warning:focus, a.list-group-item-warning:hover, button.list-group-item-warning:focus, button.list-group-item-warning:hover { color: #856404; background-color: #ffe8a1; } a.list-group-item-warning.active, button.list-group-item-warning.active { color: #fff; background-color: #856404; border-color: #856404; } .list-group-item-danger { color: #721c24; background-color: #f5c6cb; } a.list-group-item-danger, button.list-group-item-danger { color: #721c24; } a.list-group-item-danger:focus, a.list-group-item-danger:hover, button.list-group-item-danger:focus, button.list-group-item-danger:hover { color: #721c24; background-color: #f1b0b7; } a.list-group-item-danger.active, button.list-group-item-danger.active { color: #fff; background-color: #721c24; border-color: #721c24; } .list-group-item-light { color: #818182; background-color: #fdfdfe; } a.list-group-item-light, button.list-group-item-light { color: #818182; } a.list-group-item-light:focus, a.list-group-item-light:hover, button.list-group-item-light:focus, button.list-group-item-light:hover { color: #818182; background-color: #ececf6; } a.list-group-item-light.active, button.list-group-item-light.active { color: #fff; background-color: #818182; border-color: #818182; } .list-group-item-dark { color: #1b1e21; background-color: #c6c8ca; } a.list-group-item-dark, button.list-group-item-dark { color: #1b1e21; } a.list-group-item-dark:focus, a.list-group-item-dark:hover, button.list-group-item-dark:focus, button.list-group-item-dark:hover { color: #1b1e21; background-color: #b9bbbe; } a.list-group-item-dark.active, button.list-group-item-dark.active { color: #fff; background-color: #1b1e21; border-color: #1b1e21; } .close { float: right; font-size: 1.5rem; font-weight: bold; line-height: 1; color: #000; text-shadow: 0 1px 0 #fff; opacity: .5; } .close:focus, .close:hover { color: #000; text-decoration: none; opacity: .75; } button.close { padding: 0; background: transparent; border: 0; -webkit-appearance: none; } .modal-open { overflow: hidden; } .modal { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1050; display: none; overflow: hidden; outline: 0; } .modal.fade .modal-dialog { transition: -webkit-transform 0.3s ease-out; transition: transform 0.3s ease-out; transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; -webkit-transform: translate(0, -25%); transform: translate(0, -25%); } .modal.show .modal-dialog { -webkit-transform: translate(0, 0); transform: translate(0, 0); } .modal-open .modal { overflow-x: hidden; overflow-y: auto; } .modal-dialog { position: relative; width: auto; margin: 10px; } .modal-content { position: relative; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; outline: 0; } .modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040; background-color: #000; } .modal-backdrop.fade { opacity: 0; } .modal-backdrop.show { opacity: 0.5; } .modal-header { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; -ms-flex-pack: justify; justify-content: space-between; padding: 15px; border-bottom: 1px solid #e9ecef; } .modal-title { margin-bottom: 0; line-height: 1.5; } .modal-body { position: relative; -ms-flex: 1 1 auto; flex: 1 1 auto; padding: 15px; } .modal-footer { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; -ms-flex-pack: end; justify-content: flex-end; padding: 15px; border-top: 1px solid #e9ecef; } .modal-footer > :not(:first-child) { margin-left: .25rem; } .modal-footer > :not(:last-child) { margin-right: .25rem; } .modal-scrollbar-measure { position: absolute; top: -9999px; width: 50px; height: 50px; overflow: scroll; } @media (min-width: 576px) { .modal-dialog { max-width: 500px; margin: 30px auto; } .modal-sm { max-width: 300px; } } @media (min-width: 992px) { .modal-lg { max-width: 800px; } } .tooltip { position: absolute; z-index: 1070; display: block; margin: 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-style: normal; font-weight: normal; line-height: 1.5; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; white-space: normal; line-break: auto; font-size: 0.875rem; word-wrap: break-word; opacity: 0; } .tooltip.show { opacity: 0.9; } .tooltip .arrow { position: absolute; display: block; width: 5px; height: 5px; } .tooltip.bs-tooltip-top, .tooltip.bs-tooltip-auto[x-placement^="top"] { padding: 5px 0; } .tooltip.bs-tooltip-top .arrow, .tooltip.bs-tooltip-auto[x-placement^="top"] .arrow { bottom: 0; } .tooltip.bs-tooltip-top .arrow::before, .tooltip.bs-tooltip-auto[x-placement^="top"] .arrow::before { margin-left: -3px; content: ""; border-width: 5px 5px 0; border-top-color: #000; } .tooltip.bs-tooltip-right, .tooltip.bs-tooltip-auto[x-placement^="right"] { padding: 0 5px; } .tooltip.bs-tooltip-right .arrow, .tooltip.bs-tooltip-auto[x-placement^="right"] .arrow { left: 0; } .tooltip.bs-tooltip-right .arrow::before, .tooltip.bs-tooltip-auto[x-placement^="right"] .arrow::before { margin-top: -3px; content: ""; border-width: 5px 5px 5px 0; border-right-color: #000; } .tooltip.bs-tooltip-bottom, .tooltip.bs-tooltip-auto[x-placement^="bottom"] { padding: 5px 0; } .tooltip.bs-tooltip-bottom .arrow, .tooltip.bs-tooltip-auto[x-placement^="bottom"] .arrow { top: 0; } .tooltip.bs-tooltip-bottom .arrow::before, .tooltip.bs-tooltip-auto[x-placement^="bottom"] .arrow::before { margin-left: -3px; content: ""; border-width: 0 5px 5px; border-bottom-color: #000; } .tooltip.bs-tooltip-left, .tooltip.bs-tooltip-auto[x-placement^="left"] { padding: 0 5px; } .tooltip.bs-tooltip-left .arrow, .tooltip.bs-tooltip-auto[x-placement^="left"] .arrow { right: 0; } .tooltip.bs-tooltip-left .arrow::before, .tooltip.bs-tooltip-auto[x-placement^="left"] .arrow::before { right: 0; margin-top: -3px; content: ""; border-width: 5px 0 5px 5px; border-left-color: #000; } .tooltip .arrow::before { position: absolute; border-color: transparent; border-style: solid; } .tooltip-inner { max-width: 200px; padding: 3px 8px; color: #fff; text-align: center; background-color: #000; border-radius: 0.25rem; } .popover { position: absolute; top: 0; left: 0; z-index: 1060; display: block; max-width: 276px; padding: 1px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-style: normal; font-weight: normal; line-height: 1.5; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; white-space: normal; line-break: auto; font-size: 0.875rem; word-wrap: break-word; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; } .popover .arrow { position: absolute; display: block; width: 10px; height: 5px; } .popover .arrow::before, .popover .arrow::after { position: absolute; display: block; border-color: transparent; border-style: solid; } .popover .arrow::before { content: ""; border-width: 11px; } .popover .arrow::after { content: ""; border-width: 11px; } .popover.bs-popover-top, .popover.bs-popover-auto[x-placement^="top"] { margin-bottom: 10px; } .popover.bs-popover-top .arrow, .popover.bs-popover-auto[x-placement^="top"] .arrow { bottom: 0; } .popover.bs-popover-top .arrow::before, .popover.bs-popover-auto[x-placement^="top"] .arrow::before, .popover.bs-popover-top .arrow::after, .popover.bs-popover-auto[x-placement^="top"] .arrow::after { border-bottom-width: 0; } .popover.bs-popover-top .arrow::before, .popover.bs-popover-auto[x-placement^="top"] .arrow::before { bottom: -11px; margin-left: -6px; border-top-color: rgba(0, 0, 0, 0.25); } .popover.bs-popover-top .arrow::after, .popover.bs-popover-auto[x-placement^="top"] .arrow::after { bottom: -10px; margin-left: -6px; border-top-color: #fff; } .popover.bs-popover-right, .popover.bs-popover-auto[x-placement^="right"] { margin-left: 10px; } .popover.bs-popover-right .arrow, .popover.bs-popover-auto[x-placement^="right"] .arrow { left: 0; } .popover.bs-popover-right .arrow::before, .popover.bs-popover-auto[x-placement^="right"] .arrow::before, .popover.bs-popover-right .arrow::after, .popover.bs-popover-auto[x-placement^="right"] .arrow::after { margin-top: -8px; border-left-width: 0; } .popover.bs-popover-right .arrow::before, .popover.bs-popover-auto[x-placement^="right"] .arrow::before { left: -11px; border-right-color: rgba(0, 0, 0, 0.25); } .popover.bs-popover-right .arrow::after, .popover.bs-popover-auto[x-placement^="right"] .arrow::after { left: -10px; border-right-color: #fff; } .popover.bs-popover-bottom, .popover.bs-popover-auto[x-placement^="bottom"] { margin-top: 10px; } .popover.bs-popover-bottom .arrow, .popover.bs-popover-auto[x-placement^="bottom"] .arrow { top: 0; } .popover.bs-popover-bottom .arrow::before, .popover.bs-popover-auto[x-placement^="bottom"] .arrow::before, .popover.bs-popover-bottom .arrow::after, .popover.bs-popover-auto[x-placement^="bottom"] .arrow::after { margin-left: -7px; border-top-width: 0; } .popover.bs-popover-bottom .arrow::before, .popover.bs-popover-auto[x-placement^="bottom"] .arrow::before { top: -11px; border-bottom-color: rgba(0, 0, 0, 0.25); } .popover.bs-popover-bottom .arrow::after, .popover.bs-popover-auto[x-placement^="bottom"] .arrow::after { top: -10px; border-bottom-color: #fff; } .popover.bs-popover-bottom .popover-header::before, .popover.bs-popover-auto[x-placement^="bottom"] .popover-header::before { position: absolute; top: 0; left: 50%; display: block; width: 20px; margin-left: -10px; content: ""; border-bottom: 1px solid #f7f7f7; } .popover.bs-popover-left, .popover.bs-popover-auto[x-placement^="left"] { margin-right: 10px; } .popover.bs-popover-left .arrow, .popover.bs-popover-auto[x-placement^="left"] .arrow { right: 0; } .popover.bs-popover-left .arrow::before, .popover.bs-popover-auto[x-placement^="left"] .arrow::before, .popover.bs-popover-left .arrow::after, .popover.bs-popover-auto[x-placement^="left"] .arrow::after { margin-top: -8px; border-right-width: 0; } .popover.bs-popover-left .arrow::before, .popover.bs-popover-auto[x-placement^="left"] .arrow::before { right: -11px; border-left-color: rgba(0, 0, 0, 0.25); } .popover.bs-popover-left .arrow::after, .popover.bs-popover-auto[x-placement^="left"] .arrow::after { right: -10px; border-left-color: #fff; } .popover-header { padding: 8px 14px; margin-bottom: 0; font-size: 1rem; color: inherit; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-top-left-radius: calc(0.3rem - 1px); border-top-right-radius: calc(0.3rem - 1px); } .popover-header:empty { display: none; } .popover-body { padding: 9px 14px; color: #212529; } .carousel { position: relative; } .carousel-inner { position: relative; width: 100%; overflow: hidden; } .carousel-item { position: relative; display: none; -ms-flex-align: center; align-items: center; width: 100%; transition: -webkit-transform 0.6s ease; transition: transform 0.6s ease; transition: transform 0.6s ease, -webkit-transform 0.6s ease; -webkit-backface-visibility: hidden; backface-visibility: hidden; -webkit-perspective: 1000px; perspective: 1000px; } .carousel-item.active, .carousel-item-next, .carousel-item-prev { display: block; } .carousel-item-next, .carousel-item-prev { position: absolute; top: 0; } .carousel-item-next.carousel-item-left, .carousel-item-prev.carousel-item-right { -webkit-transform: translateX(0); transform: translateX(0); } @supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { .carousel-item-next.carousel-item-left, .carousel-item-prev.carousel-item-right { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } .carousel-item-next, .active.carousel-item-right { -webkit-transform: translateX(100%); transform: translateX(100%); } @supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { .carousel-item-next, .active.carousel-item-right { -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } } .carousel-item-prev, .active.carousel-item-left { -webkit-transform: translateX(-100%); transform: translateX(-100%); } @supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { .carousel-item-prev, .active.carousel-item-left { -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } } .carousel-control-prev, .carousel-control-next { position: absolute; top: 0; bottom: 0; display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; -ms-flex-pack: center; justify-content: center; width: 15%; color: #fff; text-align: center; opacity: 0.5; } .carousel-control-prev:focus, .carousel-control-prev:hover, .carousel-control-next:focus, .carousel-control-next:hover { color: #fff; text-decoration: none; outline: 0; opacity: .9; } .carousel-control-prev { left: 0; } .carousel-control-next { right: 0; } .carousel-control-prev-icon, .carousel-control-next-icon { display: inline-block; width: 20px; height: 20px; background: transparent no-repeat center center; background-size: 100% 100%; } .carousel-control-prev-icon { background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M4 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); } .carousel-control-next-icon { background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M1.5 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); } .carousel-indicators { position: absolute; right: 0; bottom: 10px; left: 0; z-index: 15; display: -ms-flexbox; display: flex; -ms-flex-pack: center; justify-content: center; padding-left: 0; margin-right: 15%; margin-left: 15%; list-style: none; } .carousel-indicators li { position: relative; -ms-flex: 0 1 auto; flex: 0 1 auto; width: 30px; height: 3px; margin-right: 3px; margin-left: 3px; text-indent: -999px; background-color: rgba(255, 255, 255, 0.5); } .carousel-indicators li::before { position: absolute; top: -10px; left: 0; display: inline-block; width: 100%; height: 10px; content: ""; } .carousel-indicators li::after { position: absolute; bottom: -10px; left: 0; display: inline-block; width: 100%; height: 10px; content: ""; } .carousel-indicators .active { background-color: #fff; } .carousel-caption { position: absolute; right: 15%; bottom: 20px; left: 15%; z-index: 10; padding-top: 20px; padding-bottom: 20px; color: #fff; text-align: center; } .align-baseline { vertical-align: baseline !important; } .align-top { vertical-align: top !important; } .align-middle { vertical-align: middle !important; } .align-bottom { vertical-align: bottom !important; } .align-text-bottom { vertical-align: text-bottom !important; } .align-text-top { vertical-align: text-top !important; } .bg-primary { background-color: #007bff !important; } a.bg-primary:focus, a.bg-primary:hover { background-color: #0062cc !important; } .bg-secondary { background-color: #868e96 !important; } a.bg-secondary:focus, a.bg-secondary:hover { background-color: #6c757d !important; } .bg-success { background-color: #28a745 !important; } a.bg-success:focus, a.bg-success:hover { background-color: #1e7e34 !important; } .bg-info { background-color: #17a2b8 !important; } a.bg-info:focus, a.bg-info:hover { background-color: #117a8b !important; } .bg-warning { background-color: #ffc107 !important; } a.bg-warning:focus, a.bg-warning:hover { background-color: #d39e00 !important; } .bg-danger { background-color: #dc3545 !important; } a.bg-danger:focus, a.bg-danger:hover { background-color: #bd2130 !important; } .bg-light { background-color: #f8f9fa !important; } a.bg-light:focus, a.bg-light:hover { background-color: #dae0e5 !important; } .bg-dark { background-color: #343a40 !important; } a.bg-dark:focus, a.bg-dark:hover { background-color: #1d2124 !important; } .bg-white { background-color: #fff !important; } .bg-transparent { background-color: transparent !important; } .border { border: 1px solid #e9ecef !important; } .border-0 { border: 0 !important; } .border-top-0 { border-top: 0 !important; } .border-right-0 { border-right: 0 !important; } .border-bottom-0 { border-bottom: 0 !important; } .border-left-0 { border-left: 0 !important; } .border-primary { border-color: #007bff !important; } .border-secondary { border-color: #868e96 !important; } .border-success { border-color: #28a745 !important; } .border-info { border-color: #17a2b8 !important; } .border-warning { border-color: #ffc107 !important; } .border-danger { border-color: #dc3545 !important; } .border-light { border-color: #f8f9fa !important; } .border-dark { border-color: #343a40 !important; } .border-white { border-color: #fff !important; } .rounded { border-radius: 0.25rem !important; } .rounded-top { border-top-left-radius: 0.25rem !important; border-top-right-radius: 0.25rem !important; } .rounded-right { border-top-right-radius: 0.25rem !important; border-bottom-right-radius: 0.25rem !important; } .rounded-bottom { border-bottom-right-radius: 0.25rem !important; border-bottom-left-radius: 0.25rem !important; } .rounded-left { border-top-left-radius: 0.25rem !important; border-bottom-left-radius: 0.25rem !important; } .rounded-circle { border-radius: 50%; } .rounded-0 { border-radius: 0; } .clearfix::after { display: block; clear: both; content: ""; } .d-none { display: none !important; } .d-inline { display: inline !important; } .d-inline-block { display: inline-block !important; } .d-block { display: block !important; } .d-table { display: table !important; } .d-table-cell { display: table-cell !important; } .d-flex { display: -ms-flexbox !important; display: flex !important; } .d-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } @media (min-width: 576px) { .d-sm-none { display: none !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-block { display: block !important; } .d-sm-table { display: table !important; } .d-sm-table-cell { display: table-cell !important; } .d-sm-flex { display: -ms-flexbox !important; display: flex !important; } .d-sm-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } } @media (min-width: 768px) { .d-md-none { display: none !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-block { display: block !important; } .d-md-table { display: table !important; } .d-md-table-cell { display: table-cell !important; } .d-md-flex { display: -ms-flexbox !important; display: flex !important; } .d-md-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } } @media (min-width: 992px) { .d-lg-none { display: none !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-block { display: block !important; } .d-lg-table { display: table !important; } .d-lg-table-cell { display: table-cell !important; } .d-lg-flex { display: -ms-flexbox !important; display: flex !important; } .d-lg-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } } @media (min-width: 1200px) { .d-xl-none { display: none !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-block { display: block !important; } .d-xl-table { display: table !important; } .d-xl-table-cell { display: table-cell !important; } .d-xl-flex { display: -ms-flexbox !important; display: flex !important; } .d-xl-inline-flex { display: -ms-inline-flexbox !important; display: inline-flex !important; } } .d-print-block { display: none !important; } @media print { .d-print-block { display: block !important; } } .d-print-inline { display: none !important; } @media print { .d-print-inline { display: inline !important; } } .d-print-inline-block { display: none !important; } @media print { .d-print-inline-block { display: inline-block !important; } } @media print { .d-print-none { display: none !important; } } .embed-responsive { position: relative; display: block; width: 100%; padding: 0; overflow: hidden; } .embed-responsive::before { display: block; content: ""; } .embed-responsive .embed-responsive-item, .embed-responsive iframe, .embed-responsive embed, .embed-responsive object, .embed-responsive video { position: absolute; top: 0; bottom: 0; left: 0; width: 100%; height: 100%; border: 0; } .embed-responsive-21by9::before { padding-top: 42.857143%; } .embed-responsive-16by9::before { padding-top: 56.25%; } .embed-responsive-4by3::before { padding-top: 75%; } .embed-responsive-1by1::before { padding-top: 100%; } .flex-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .justify-content-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } @media (min-width: 576px) { .flex-sm-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-sm-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-sm-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-sm-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-sm-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-sm-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-sm-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .justify-content-sm-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-sm-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-sm-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-sm-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-sm-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-sm-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-sm-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-sm-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-sm-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-sm-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-sm-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-sm-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-sm-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-sm-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-sm-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-sm-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-sm-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-sm-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-sm-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-sm-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-sm-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-sm-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } @media (min-width: 768px) { .flex-md-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-md-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-md-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-md-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-md-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-md-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-md-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .justify-content-md-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-md-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-md-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-md-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-md-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-md-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-md-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-md-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-md-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-md-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-md-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-md-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-md-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-md-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-md-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-md-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-md-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-md-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-md-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-md-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-md-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-md-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } @media (min-width: 992px) { .flex-lg-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-lg-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-lg-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-lg-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-lg-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-lg-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-lg-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .justify-content-lg-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-lg-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-lg-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-lg-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-lg-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-lg-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-lg-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-lg-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-lg-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-lg-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-lg-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-lg-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-lg-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-lg-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-lg-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-lg-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-lg-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-lg-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-lg-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-lg-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-lg-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-lg-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } @media (min-width: 1200px) { .flex-xl-row { -ms-flex-direction: row !important; flex-direction: row !important; } .flex-xl-column { -ms-flex-direction: column !important; flex-direction: column !important; } .flex-xl-row-reverse { -ms-flex-direction: row-reverse !important; flex-direction: row-reverse !important; } .flex-xl-column-reverse { -ms-flex-direction: column-reverse !important; flex-direction: column-reverse !important; } .flex-xl-wrap { -ms-flex-wrap: wrap !important; flex-wrap: wrap !important; } .flex-xl-nowrap { -ms-flex-wrap: nowrap !important; flex-wrap: nowrap !important; } .flex-xl-wrap-reverse { -ms-flex-wrap: wrap-reverse !important; flex-wrap: wrap-reverse !important; } .justify-content-xl-start { -ms-flex-pack: start !important; justify-content: flex-start !important; } .justify-content-xl-end { -ms-flex-pack: end !important; justify-content: flex-end !important; } .justify-content-xl-center { -ms-flex-pack: center !important; justify-content: center !important; } .justify-content-xl-between { -ms-flex-pack: justify !important; justify-content: space-between !important; } .justify-content-xl-around { -ms-flex-pack: distribute !important; justify-content: space-around !important; } .align-items-xl-start { -ms-flex-align: start !important; align-items: flex-start !important; } .align-items-xl-end { -ms-flex-align: end !important; align-items: flex-end !important; } .align-items-xl-center { -ms-flex-align: center !important; align-items: center !important; } .align-items-xl-baseline { -ms-flex-align: baseline !important; align-items: baseline !important; } .align-items-xl-stretch { -ms-flex-align: stretch !important; align-items: stretch !important; } .align-content-xl-start { -ms-flex-line-pack: start !important; align-content: flex-start !important; } .align-content-xl-end { -ms-flex-line-pack: end !important; align-content: flex-end !important; } .align-content-xl-center { -ms-flex-line-pack: center !important; align-content: center !important; } .align-content-xl-between { -ms-flex-line-pack: justify !important; align-content: space-between !important; } .align-content-xl-around { -ms-flex-line-pack: distribute !important; align-content: space-around !important; } .align-content-xl-stretch { -ms-flex-line-pack: stretch !important; align-content: stretch !important; } .align-self-xl-auto { -ms-flex-item-align: auto !important; align-self: auto !important; } .align-self-xl-start { -ms-flex-item-align: start !important; align-self: flex-start !important; } .align-self-xl-end { -ms-flex-item-align: end !important; align-self: flex-end !important; } .align-self-xl-center { -ms-flex-item-align: center !important; align-self: center !important; } .align-self-xl-baseline { -ms-flex-item-align: baseline !important; align-self: baseline !important; } .align-self-xl-stretch { -ms-flex-item-align: stretch !important; align-self: stretch !important; } } .float-left { float: left !important; } .float-right { float: right !important; } .float-none { float: none !important; } @media (min-width: 576px) { .float-sm-left { float: left !important; } .float-sm-right { float: right !important; } .float-sm-none { float: none !important; } } @media (min-width: 768px) { .float-md-left { float: left !important; } .float-md-right { float: right !important; } .float-md-none { float: none !important; } } @media (min-width: 992px) { .float-lg-left { float: left !important; } .float-lg-right { float: right !important; } .float-lg-none { float: none !important; } } @media (min-width: 1200px) { .float-xl-left { float: left !important; } .float-xl-right { float: right !important; } .float-xl-none { float: none !important; } } .fixed-top { position: fixed; top: 0; right: 0; left: 0; z-index: 1030; } .fixed-bottom { position: fixed; right: 0; bottom: 0; left: 0; z-index: 1030; } @supports ((position: -webkit-sticky) or (position: sticky)) { .sticky-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; -webkit-clip-path: inset(50%); clip-path: inset(50%); border: 0; } .sr-only-focusable:active, .sr-only-focusable:focus { position: static; width: auto; height: auto; overflow: visible; clip: auto; white-space: normal; -webkit-clip-path: none; clip-path: none; } .w-25 { width: 25% !important; } .w-50 { width: 50% !important; } .w-75 { width: 75% !important; } .w-100 { width: 100% !important; } .h-25 { height: 25% !important; } .h-50 { height: 50% !important; } .h-75 { height: 75% !important; } .h-100 { height: 100% !important; } .mw-100 { max-width: 100% !important; } .mh-100 { max-height: 100% !important; } .m-0 { margin: 0 !important; } .mt-0 { margin-top: 0 !important; } .mr-0 { margin-right: 0 !important; } .mb-0 { margin-bottom: 0 !important; } .ml-0 { margin-left: 0 !important; } .mx-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .m-1 { margin: 0.25rem !important; } .mt-1 { margin-top: 0.25rem !important; } .mr-1 { margin-right: 0.25rem !important; } .mb-1 { margin-bottom: 0.25rem !important; } .ml-1 { margin-left: 0.25rem !important; } .mx-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .m-2 { margin: 0.5rem !important; } .mt-2 { margin-top: 0.5rem !important; } .mr-2 { margin-right: 0.5rem !important; } .mb-2 { margin-bottom: 0.5rem !important; } .ml-2 { margin-left: 0.5rem !important; } .mx-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .m-3 { margin: 1rem !important; } .mt-3 { margin-top: 1rem !important; } .mr-3 { margin-right: 1rem !important; } .mb-3 { margin-bottom: 1rem !important; } .ml-3 { margin-left: 1rem !important; } .mx-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .m-4 { margin: 1.5rem !important; } .mt-4 { margin-top: 1.5rem !important; } .mr-4 { margin-right: 1.5rem !important; } .mb-4 { margin-bottom: 1.5rem !important; } .ml-4 { margin-left: 1.5rem !important; } .mx-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .m-5 { margin: 3rem !important; } .mt-5 { margin-top: 3rem !important; } .mr-5 { margin-right: 3rem !important; } .mb-5 { margin-bottom: 3rem !important; } .ml-5 { margin-left: 3rem !important; } .mx-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .p-0 { padding: 0 !important; } .pt-0 { padding-top: 0 !important; } .pr-0 { padding-right: 0 !important; } .pb-0 { padding-bottom: 0 !important; } .pl-0 { padding-left: 0 !important; } .px-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-1 { padding: 0.25rem !important; } .pt-1 { padding-top: 0.25rem !important; } .pr-1 { padding-right: 0.25rem !important; } .pb-1 { padding-bottom: 0.25rem !important; } .pl-1 { padding-left: 0.25rem !important; } .px-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-2 { padding: 0.5rem !important; } .pt-2 { padding-top: 0.5rem !important; } .pr-2 { padding-right: 0.5rem !important; } .pb-2 { padding-bottom: 0.5rem !important; } .pl-2 { padding-left: 0.5rem !important; } .px-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-3 { padding: 1rem !important; } .pt-3 { padding-top: 1rem !important; } .pr-3 { padding-right: 1rem !important; } .pb-3 { padding-bottom: 1rem !important; } .pl-3 { padding-left: 1rem !important; } .px-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-4 { padding: 1.5rem !important; } .pt-4 { padding-top: 1.5rem !important; } .pr-4 { padding-right: 1.5rem !important; } .pb-4 { padding-bottom: 1.5rem !important; } .pl-4 { padding-left: 1.5rem !important; } .px-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-5 { padding: 3rem !important; } .pt-5 { padding-top: 3rem !important; } .pr-5 { padding-right: 3rem !important; } .pb-5 { padding-bottom: 3rem !important; } .pl-5 { padding-left: 3rem !important; } .px-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .m-auto { margin: auto !important; } .mt-auto { margin-top: auto !important; } .mr-auto { margin-right: auto !important; } .mb-auto { margin-bottom: auto !important; } .ml-auto { margin-left: auto !important; } .mx-auto { margin-right: auto !important; margin-left: auto !important; } .my-auto { margin-top: auto !important; margin-bottom: auto !important; } @media (min-width: 576px) { .m-sm-0 { margin: 0 !important; } .mt-sm-0 { margin-top: 0 !important; } .mr-sm-0 { margin-right: 0 !important; } .mb-sm-0 { margin-bottom: 0 !important; } .ml-sm-0 { margin-left: 0 !important; } .mx-sm-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-sm-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .m-sm-1 { margin: 0.25rem !important; } .mt-sm-1 { margin-top: 0.25rem !important; } .mr-sm-1 { margin-right: 0.25rem !important; } .mb-sm-1 { margin-bottom: 0.25rem !important; } .ml-sm-1 { margin-left: 0.25rem !important; } .mx-sm-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-sm-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .m-sm-2 { margin: 0.5rem !important; } .mt-sm-2 { margin-top: 0.5rem !important; } .mr-sm-2 { margin-right: 0.5rem !important; } .mb-sm-2 { margin-bottom: 0.5rem !important; } .ml-sm-2 { margin-left: 0.5rem !important; } .mx-sm-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-sm-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .m-sm-3 { margin: 1rem !important; } .mt-sm-3 { margin-top: 1rem !important; } .mr-sm-3 { margin-right: 1rem !important; } .mb-sm-3 { margin-bottom: 1rem !important; } .ml-sm-3 { margin-left: 1rem !important; } .mx-sm-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-sm-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .m-sm-4 { margin: 1.5rem !important; } .mt-sm-4 { margin-top: 1.5rem !important; } .mr-sm-4 { margin-right: 1.5rem !important; } .mb-sm-4 { margin-bottom: 1.5rem !important; } .ml-sm-4 { margin-left: 1.5rem !important; } .mx-sm-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-sm-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .m-sm-5 { margin: 3rem !important; } .mt-sm-5 { margin-top: 3rem !important; } .mr-sm-5 { margin-right: 3rem !important; } .mb-sm-5 { margin-bottom: 3rem !important; } .ml-sm-5 { margin-left: 3rem !important; } .mx-sm-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-sm-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .p-sm-0 { padding: 0 !important; } .pt-sm-0 { padding-top: 0 !important; } .pr-sm-0 { padding-right: 0 !important; } .pb-sm-0 { padding-bottom: 0 !important; } .pl-sm-0 { padding-left: 0 !important; } .px-sm-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-sm-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-sm-1 { padding: 0.25rem !important; } .pt-sm-1 { padding-top: 0.25rem !important; } .pr-sm-1 { padding-right: 0.25rem !important; } .pb-sm-1 { padding-bottom: 0.25rem !important; } .pl-sm-1 { padding-left: 0.25rem !important; } .px-sm-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-sm-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-sm-2 { padding: 0.5rem !important; } .pt-sm-2 { padding-top: 0.5rem !important; } .pr-sm-2 { padding-right: 0.5rem !important; } .pb-sm-2 { padding-bottom: 0.5rem !important; } .pl-sm-2 { padding-left: 0.5rem !important; } .px-sm-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-sm-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-sm-3 { padding: 1rem !important; } .pt-sm-3 { padding-top: 1rem !important; } .pr-sm-3 { padding-right: 1rem !important; } .pb-sm-3 { padding-bottom: 1rem !important; } .pl-sm-3 { padding-left: 1rem !important; } .px-sm-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-sm-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-sm-4 { padding: 1.5rem !important; } .pt-sm-4 { padding-top: 1.5rem !important; } .pr-sm-4 { padding-right: 1.5rem !important; } .pb-sm-4 { padding-bottom: 1.5rem !important; } .pl-sm-4 { padding-left: 1.5rem !important; } .px-sm-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-sm-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-sm-5 { padding: 3rem !important; } .pt-sm-5 { padding-top: 3rem !important; } .pr-sm-5 { padding-right: 3rem !important; } .pb-sm-5 { padding-bottom: 3rem !important; } .pl-sm-5 { padding-left: 3rem !important; } .px-sm-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-sm-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .m-sm-auto { margin: auto !important; } .mt-sm-auto { margin-top: auto !important; } .mr-sm-auto { margin-right: auto !important; } .mb-sm-auto { margin-bottom: auto !important; } .ml-sm-auto { margin-left: auto !important; } .mx-sm-auto { margin-right: auto !important; margin-left: auto !important; } .my-sm-auto { margin-top: auto !important; margin-bottom: auto !important; } } @media (min-width: 768px) { .m-md-0 { margin: 0 !important; } .mt-md-0 { margin-top: 0 !important; } .mr-md-0 { margin-right: 0 !important; } .mb-md-0 { margin-bottom: 0 !important; } .ml-md-0 { margin-left: 0 !important; } .mx-md-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-md-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .m-md-1 { margin: 0.25rem !important; } .mt-md-1 { margin-top: 0.25rem !important; } .mr-md-1 { margin-right: 0.25rem !important; } .mb-md-1 { margin-bottom: 0.25rem !important; } .ml-md-1 { margin-left: 0.25rem !important; } .mx-md-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-md-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .m-md-2 { margin: 0.5rem !important; } .mt-md-2 { margin-top: 0.5rem !important; } .mr-md-2 { margin-right: 0.5rem !important; } .mb-md-2 { margin-bottom: 0.5rem !important; } .ml-md-2 { margin-left: 0.5rem !important; } .mx-md-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-md-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .m-md-3 { margin: 1rem !important; } .mt-md-3 { margin-top: 1rem !important; } .mr-md-3 { margin-right: 1rem !important; } .mb-md-3 { margin-bottom: 1rem !important; } .ml-md-3 { margin-left: 1rem !important; } .mx-md-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-md-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .m-md-4 { margin: 1.5rem !important; } .mt-md-4 { margin-top: 1.5rem !important; } .mr-md-4 { margin-right: 1.5rem !important; } .mb-md-4 { margin-bottom: 1.5rem !important; } .ml-md-4 { margin-left: 1.5rem !important; } .mx-md-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-md-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .m-md-5 { margin: 3rem !important; } .mt-md-5 { margin-top: 3rem !important; } .mr-md-5 { margin-right: 3rem !important; } .mb-md-5 { margin-bottom: 3rem !important; } .ml-md-5 { margin-left: 3rem !important; } .mx-md-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-md-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .p-md-0 { padding: 0 !important; } .pt-md-0 { padding-top: 0 !important; } .pr-md-0 { padding-right: 0 !important; } .pb-md-0 { padding-bottom: 0 !important; } .pl-md-0 { padding-left: 0 !important; } .px-md-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-md-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-md-1 { padding: 0.25rem !important; } .pt-md-1 { padding-top: 0.25rem !important; } .pr-md-1 { padding-right: 0.25rem !important; } .pb-md-1 { padding-bottom: 0.25rem !important; } .pl-md-1 { padding-left: 0.25rem !important; } .px-md-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-md-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-md-2 { padding: 0.5rem !important; } .pt-md-2 { padding-top: 0.5rem !important; } .pr-md-2 { padding-right: 0.5rem !important; } .pb-md-2 { padding-bottom: 0.5rem !important; } .pl-md-2 { padding-left: 0.5rem !important; } .px-md-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-md-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-md-3 { padding: 1rem !important; } .pt-md-3 { padding-top: 1rem !important; } .pr-md-3 { padding-right: 1rem !important; } .pb-md-3 { padding-bottom: 1rem !important; } .pl-md-3 { padding-left: 1rem !important; } .px-md-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-md-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-md-4 { padding: 1.5rem !important; } .pt-md-4 { padding-top: 1.5rem !important; } .pr-md-4 { padding-right: 1.5rem !important; } .pb-md-4 { padding-bottom: 1.5rem !important; } .pl-md-4 { padding-left: 1.5rem !important; } .px-md-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-md-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-md-5 { padding: 3rem !important; } .pt-md-5 { padding-top: 3rem !important; } .pr-md-5 { padding-right: 3rem !important; } .pb-md-5 { padding-bottom: 3rem !important; } .pl-md-5 { padding-left: 3rem !important; } .px-md-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-md-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .m-md-auto { margin: auto !important; } .mt-md-auto { margin-top: auto !important; } .mr-md-auto { margin-right: auto !important; } .mb-md-auto { margin-bottom: auto !important; } .ml-md-auto { margin-left: auto !important; } .mx-md-auto { margin-right: auto !important; margin-left: auto !important; } .my-md-auto { margin-top: auto !important; margin-bottom: auto !important; } } @media (min-width: 992px) { .m-lg-0 { margin: 0 !important; } .mt-lg-0 { margin-top: 0 !important; } .mr-lg-0 { margin-right: 0 !important; } .mb-lg-0 { margin-bottom: 0 !important; } .ml-lg-0 { margin-left: 0 !important; } .mx-lg-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-lg-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .m-lg-1 { margin: 0.25rem !important; } .mt-lg-1 { margin-top: 0.25rem !important; } .mr-lg-1 { margin-right: 0.25rem !important; } .mb-lg-1 { margin-bottom: 0.25rem !important; } .ml-lg-1 { margin-left: 0.25rem !important; } .mx-lg-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-lg-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .m-lg-2 { margin: 0.5rem !important; } .mt-lg-2 { margin-top: 0.5rem !important; } .mr-lg-2 { margin-right: 0.5rem !important; } .mb-lg-2 { margin-bottom: 0.5rem !important; } .ml-lg-2 { margin-left: 0.5rem !important; } .mx-lg-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-lg-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .m-lg-3 { margin: 1rem !important; } .mt-lg-3 { margin-top: 1rem !important; } .mr-lg-3 { margin-right: 1rem !important; } .mb-lg-3 { margin-bottom: 1rem !important; } .ml-lg-3 { margin-left: 1rem !important; } .mx-lg-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-lg-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .m-lg-4 { margin: 1.5rem !important; } .mt-lg-4 { margin-top: 1.5rem !important; } .mr-lg-4 { margin-right: 1.5rem !important; } .mb-lg-4 { margin-bottom: 1.5rem !important; } .ml-lg-4 { margin-left: 1.5rem !important; } .mx-lg-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-lg-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .m-lg-5 { margin: 3rem !important; } .mt-lg-5 { margin-top: 3rem !important; } .mr-lg-5 { margin-right: 3rem !important; } .mb-lg-5 { margin-bottom: 3rem !important; } .ml-lg-5 { margin-left: 3rem !important; } .mx-lg-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-lg-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .p-lg-0 { padding: 0 !important; } .pt-lg-0 { padding-top: 0 !important; } .pr-lg-0 { padding-right: 0 !important; } .pb-lg-0 { padding-bottom: 0 !important; } .pl-lg-0 { padding-left: 0 !important; } .px-lg-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-lg-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-lg-1 { padding: 0.25rem !important; } .pt-lg-1 { padding-top: 0.25rem !important; } .pr-lg-1 { padding-right: 0.25rem !important; } .pb-lg-1 { padding-bottom: 0.25rem !important; } .pl-lg-1 { padding-left: 0.25rem !important; } .px-lg-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-lg-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-lg-2 { padding: 0.5rem !important; } .pt-lg-2 { padding-top: 0.5rem !important; } .pr-lg-2 { padding-right: 0.5rem !important; } .pb-lg-2 { padding-bottom: 0.5rem !important; } .pl-lg-2 { padding-left: 0.5rem !important; } .px-lg-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-lg-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-lg-3 { padding: 1rem !important; } .pt-lg-3 { padding-top: 1rem !important; } .pr-lg-3 { padding-right: 1rem !important; } .pb-lg-3 { padding-bottom: 1rem !important; } .pl-lg-3 { padding-left: 1rem !important; } .px-lg-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-lg-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-lg-4 { padding: 1.5rem !important; } .pt-lg-4 { padding-top: 1.5rem !important; } .pr-lg-4 { padding-right: 1.5rem !important; } .pb-lg-4 { padding-bottom: 1.5rem !important; } .pl-lg-4 { padding-left: 1.5rem !important; } .px-lg-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-lg-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-lg-5 { padding: 3rem !important; } .pt-lg-5 { padding-top: 3rem !important; } .pr-lg-5 { padding-right: 3rem !important; } .pb-lg-5 { padding-bottom: 3rem !important; } .pl-lg-5 { padding-left: 3rem !important; } .px-lg-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-lg-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .m-lg-auto { margin: auto !important; } .mt-lg-auto { margin-top: auto !important; } .mr-lg-auto { margin-right: auto !important; } .mb-lg-auto { margin-bottom: auto !important; } .ml-lg-auto { margin-left: auto !important; } .mx-lg-auto { margin-right: auto !important; margin-left: auto !important; } .my-lg-auto { margin-top: auto !important; margin-bottom: auto !important; } } @media (min-width: 1200px) { .m-xl-0 { margin: 0 !important; } .mt-xl-0 { margin-top: 0 !important; } .mr-xl-0 { margin-right: 0 !important; } .mb-xl-0 { margin-bottom: 0 !important; } .ml-xl-0 { margin-left: 0 !important; } .mx-xl-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-xl-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .m-xl-1 { margin: 0.25rem !important; } .mt-xl-1 { margin-top: 0.25rem !important; } .mr-xl-1 { margin-right: 0.25rem !important; } .mb-xl-1 { margin-bottom: 0.25rem !important; } .ml-xl-1 { margin-left: 0.25rem !important; } .mx-xl-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-xl-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .m-xl-2 { margin: 0.5rem !important; } .mt-xl-2 { margin-top: 0.5rem !important; } .mr-xl-2 { margin-right: 0.5rem !important; } .mb-xl-2 { margin-bottom: 0.5rem !important; } .ml-xl-2 { margin-left: 0.5rem !important; } .mx-xl-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-xl-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .m-xl-3 { margin: 1rem !important; } .mt-xl-3 { margin-top: 1rem !important; } .mr-xl-3 { margin-right: 1rem !important; } .mb-xl-3 { margin-bottom: 1rem !important; } .ml-xl-3 { margin-left: 1rem !important; } .mx-xl-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-xl-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .m-xl-4 { margin: 1.5rem !important; } .mt-xl-4 { margin-top: 1.5rem !important; } .mr-xl-4 { margin-right: 1.5rem !important; } .mb-xl-4 { margin-bottom: 1.5rem !important; } .ml-xl-4 { margin-left: 1.5rem !important; } .mx-xl-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-xl-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .m-xl-5 { margin: 3rem !important; } .mt-xl-5 { margin-top: 3rem !important; } .mr-xl-5 { margin-right: 3rem !important; } .mb-xl-5 { margin-bottom: 3rem !important; } .ml-xl-5 { margin-left: 3rem !important; } .mx-xl-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-xl-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .p-xl-0 { padding: 0 !important; } .pt-xl-0 { padding-top: 0 !important; } .pr-xl-0 { padding-right: 0 !important; } .pb-xl-0 { padding-bottom: 0 !important; } .pl-xl-0 { padding-left: 0 !important; } .px-xl-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-xl-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-xl-1 { padding: 0.25rem !important; } .pt-xl-1 { padding-top: 0.25rem !important; } .pr-xl-1 { padding-right: 0.25rem !important; } .pb-xl-1 { padding-bottom: 0.25rem !important; } .pl-xl-1 { padding-left: 0.25rem !important; } .px-xl-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-xl-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-xl-2 { padding: 0.5rem !important; } .pt-xl-2 { padding-top: 0.5rem !important; } .pr-xl-2 { padding-right: 0.5rem !important; } .pb-xl-2 { padding-bottom: 0.5rem !important; } .pl-xl-2 { padding-left: 0.5rem !important; } .px-xl-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-xl-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-xl-3 { padding: 1rem !important; } .pt-xl-3 { padding-top: 1rem !important; } .pr-xl-3 { padding-right: 1rem !important; } .pb-xl-3 { padding-bottom: 1rem !important; } .pl-xl-3 { padding-left: 1rem !important; } .px-xl-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-xl-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-xl-4 { padding: 1.5rem !important; } .pt-xl-4 { padding-top: 1.5rem !important; } .pr-xl-4 { padding-right: 1.5rem !important; } .pb-xl-4 { padding-bottom: 1.5rem !important; } .pl-xl-4 { padding-left: 1.5rem !important; } .px-xl-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-xl-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-xl-5 { padding: 3rem !important; } .pt-xl-5 { padding-top: 3rem !important; } .pr-xl-5 { padding-right: 3rem !important; } .pb-xl-5 { padding-bottom: 3rem !important; } .pl-xl-5 { padding-left: 3rem !important; } .px-xl-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-xl-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .m-xl-auto { margin: auto !important; } .mt-xl-auto { margin-top: auto !important; } .mr-xl-auto { margin-right: auto !important; } .mb-xl-auto { margin-bottom: auto !important; } .ml-xl-auto { margin-left: auto !important; } .mx-xl-auto { margin-right: auto !important; margin-left: auto !important; } .my-xl-auto { margin-top: auto !important; margin-bottom: auto !important; } } .text-justify { text-align: justify !important; } .text-nowrap { white-space: nowrap !important; } .text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .text-left { text-align: left !important; } .text-right { text-align: right !important; } .text-center { text-align: center !important; } @media (min-width: 576px) { .text-sm-left { text-align: left !important; } .text-sm-right { text-align: right !important; } .text-sm-center { text-align: center !important; } } @media (min-width: 768px) { .text-md-left { text-align: left !important; } .text-md-right { text-align: right !important; } .text-md-center { text-align: center !important; } } @media (min-width: 992px) { .text-lg-left { text-align: left !important; } .text-lg-right { text-align: right !important; } .text-lg-center { text-align: center !important; } } @media (min-width: 1200px) { .text-xl-left { text-align: left !important; } .text-xl-right { text-align: right !important; } .text-xl-center { text-align: center !important; } } .text-lowercase { text-transform: lowercase !important; } .text-uppercase { text-transform: uppercase !important; } .text-capitalize { text-transform: capitalize !important; } .font-weight-normal { font-weight: normal; } .font-weight-bold { font-weight: bold; } .font-italic { font-style: italic; } .text-white { color: #fff !important; } .text-primary { color: #007bff !important; } a.text-primary:focus, a.text-primary:hover { color: #0062cc !important; } .text-secondary { color: #868e96 !important; } a.text-secondary:focus, a.text-secondary:hover { color: #6c757d !important; } .text-success { color: #28a745 !important; } a.text-success:focus, a.text-success:hover { color: #1e7e34 !important; } .text-info { color: #17a2b8 !important; } a.text-info:focus, a.text-info:hover { color: #117a8b !important; } .text-warning { color: #ffc107 !important; } a.text-warning:focus, a.text-warning:hover { color: #d39e00 !important; } .text-danger { color: #dc3545 !important; } a.text-danger:focus, a.text-danger:hover { color: #bd2130 !important; } .text-light { color: #f8f9fa !important; } a.text-light:focus, a.text-light:hover { color: #dae0e5 !important; } .text-dark { color: #343a40 !important; } a.text-dark:focus, a.text-dark:hover { color: #1d2124 !important; } .text-muted { color: #868e96 !important; } .text-hide { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .visible { visibility: visible !important; } .invisible { visibility: hidden !important; } /*# sourceMappingURL=bootstrap.css.map */ ================================================ FILE: static/vendor/bootstrap/js/bootstrap.bundle.js ================================================ /*! * Bootstrap v4.5.0 (https://getbootstrap.com/) * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) : typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) : (global = global || self, factory(global.bootstrap = {}, global.jQuery)); }(this, (function (exports, $) { 'use strict'; $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $; function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } /** * -------------------------------------------------------------------------- * Bootstrap (v4.5.0): util.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ /** * ------------------------------------------------------------------------ * Private TransitionEnd Helpers * ------------------------------------------------------------------------ */ var TRANSITION_END = 'transitionend'; var MAX_UID = 1000000; var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) function toType(obj) { if (obj === null || typeof obj === 'undefined') { return "" + obj; } return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); } function getSpecialTransitionEndEvent() { return { bindType: TRANSITION_END, delegateType: TRANSITION_END, handle: function handle(event) { if ($(event.target).is(this)) { return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params } return undefined; } }; } function transitionEndEmulator(duration) { var _this = this; var called = false; $(this).one(Util.TRANSITION_END, function () { called = true; }); setTimeout(function () { if (!called) { Util.triggerTransitionEnd(_this); } }, duration); return this; } function setTransitionEndSupport() { $.fn.emulateTransitionEnd = transitionEndEmulator; $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); } /** * -------------------------------------------------------------------------- * Public Util Api * -------------------------------------------------------------------------- */ var Util = { TRANSITION_END: 'bsTransitionEnd', getUID: function getUID(prefix) { do { // eslint-disable-next-line no-bitwise prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here } while (document.getElementById(prefix)); return prefix; }, getSelectorFromElement: function getSelectorFromElement(element) { var selector = element.getAttribute('data-target'); if (!selector || selector === '#') { var hrefAttr = element.getAttribute('href'); selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; } try { return document.querySelector(selector) ? selector : null; } catch (err) { return null; } }, getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { if (!element) { return 0; } // Get transition-duration of the element var transitionDuration = $(element).css('transition-duration'); var transitionDelay = $(element).css('transition-delay'); var floatTransitionDuration = parseFloat(transitionDuration); var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found if (!floatTransitionDuration && !floatTransitionDelay) { return 0; } // If multiple durations are defined, take the first transitionDuration = transitionDuration.split(',')[0]; transitionDelay = transitionDelay.split(',')[0]; return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; }, reflow: function reflow(element) { return element.offsetHeight; }, triggerTransitionEnd: function triggerTransitionEnd(element) { $(element).trigger(TRANSITION_END); }, // TODO: Remove in v5 supportsTransitionEnd: function supportsTransitionEnd() { return Boolean(TRANSITION_END); }, isElement: function isElement(obj) { return (obj[0] || obj).nodeType; }, typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { for (var property in configTypes) { if (Object.prototype.hasOwnProperty.call(configTypes, property)) { var expectedTypes = configTypes[property]; var value = config[property]; var valueType = value && Util.isElement(value) ? 'element' : toType(value); if (!new RegExp(expectedTypes).test(valueType)) { throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); } } } }, findShadowRoot: function findShadowRoot(element) { if (!document.documentElement.attachShadow) { return null; } // Can find the shadow root otherwise it'll return the document if (typeof element.getRootNode === 'function') { var root = element.getRootNode(); return root instanceof ShadowRoot ? root : null; } if (element instanceof ShadowRoot) { return element; } // when we don't find a shadow root if (!element.parentNode) { return null; } return Util.findShadowRoot(element.parentNode); }, jQueryDetection: function jQueryDetection() { if (typeof $ === 'undefined') { throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); } var version = $.fn.jquery.split(' ')[0].split('.'); var minMajor = 1; var ltMajor = 2; var minMinor = 9; var minPatch = 1; var maxMajor = 4; if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0'); } } }; Util.jQueryDetection(); setTransitionEndSupport(); /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME = 'alert'; var VERSION = '4.5.0'; var DATA_KEY = 'bs.alert'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; var JQUERY_NO_CONFLICT = $.fn[NAME]; var SELECTOR_DISMISS = '[data-dismiss="alert"]'; var EVENT_CLOSE = "close" + EVENT_KEY; var EVENT_CLOSED = "closed" + EVENT_KEY; var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY; var CLASS_NAME_ALERT = 'alert'; var CLASS_NAME_FADE = 'fade'; var CLASS_NAME_SHOW = 'show'; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ var Alert = /*#__PURE__*/function () { function Alert(element) { this._element = element; } // Getters var _proto = Alert.prototype; // Public _proto.close = function close(element) { var rootElement = this._element; if (element) { rootElement = this._getRootElement(element); } var customEvent = this._triggerCloseEvent(rootElement); if (customEvent.isDefaultPrevented()) { return; } this._removeElement(rootElement); }; _proto.dispose = function dispose() { $.removeData(this._element, DATA_KEY); this._element = null; } // Private ; _proto._getRootElement = function _getRootElement(element) { var selector = Util.getSelectorFromElement(element); var parent = false; if (selector) { parent = document.querySelector(selector); } if (!parent) { parent = $(element).closest("." + CLASS_NAME_ALERT)[0]; } return parent; }; _proto._triggerCloseEvent = function _triggerCloseEvent(element) { var closeEvent = $.Event(EVENT_CLOSE); $(element).trigger(closeEvent); return closeEvent; }; _proto._removeElement = function _removeElement(element) { var _this = this; $(element).removeClass(CLASS_NAME_SHOW); if (!$(element).hasClass(CLASS_NAME_FADE)) { this._destroyElement(element); return; } var transitionDuration = Util.getTransitionDurationFromElement(element); $(element).one(Util.TRANSITION_END, function (event) { return _this._destroyElement(element, event); }).emulateTransitionEnd(transitionDuration); }; _proto._destroyElement = function _destroyElement(element) { $(element).detach().trigger(EVENT_CLOSED).remove(); } // Static ; Alert._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var $element = $(this); var data = $element.data(DATA_KEY); if (!data) { data = new Alert(this); $element.data(DATA_KEY, data); } if (config === 'close') { data[config](this); } }); }; Alert._handleDismiss = function _handleDismiss(alertInstance) { return function (event) { if (event) { event.preventDefault(); } alertInstance.close(this); }; }; _createClass(Alert, null, [{ key: "VERSION", get: function get() { return VERSION; } }]); return Alert; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert())); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME] = Alert._jQueryInterface; $.fn[NAME].Constructor = Alert; $.fn[NAME].noConflict = function () { $.fn[NAME] = JQUERY_NO_CONFLICT; return Alert._jQueryInterface; }; /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$1 = 'button'; var VERSION$1 = '4.5.0'; var DATA_KEY$1 = 'bs.button'; var EVENT_KEY$1 = "." + DATA_KEY$1; var DATA_API_KEY$1 = '.data-api'; var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1]; var CLASS_NAME_ACTIVE = 'active'; var CLASS_NAME_BUTTON = 'btn'; var CLASS_NAME_FOCUS = 'focus'; var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]'; var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]'; var SELECTOR_DATA_TOGGLE = '[data-toggle="button"]'; var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn'; var SELECTOR_INPUT = 'input:not([type="hidden"])'; var SELECTOR_ACTIVE = '.active'; var SELECTOR_BUTTON = '.btn'; var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$1 + DATA_API_KEY$1; var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1); var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$1 + DATA_API_KEY$1; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ var Button = /*#__PURE__*/function () { function Button(element) { this._element = element; } // Getters var _proto = Button.prototype; // Public _proto.toggle = function toggle() { var triggerChangeEvent = true; var addAriaPressed = true; var rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]; if (rootElement) { var input = this._element.querySelector(SELECTOR_INPUT); if (input) { if (input.type === 'radio') { if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) { triggerChangeEvent = false; } else { var activeElement = rootElement.querySelector(SELECTOR_ACTIVE); if (activeElement) { $(activeElement).removeClass(CLASS_NAME_ACTIVE); } } } if (triggerChangeEvent) { // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input if (input.type === 'checkbox' || input.type === 'radio') { input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE); } $(input).trigger('change'); } input.focus(); addAriaPressed = false; } } if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) { if (addAriaPressed) { this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE)); } if (triggerChangeEvent) { $(this._element).toggleClass(CLASS_NAME_ACTIVE); } } }; _proto.dispose = function dispose() { $.removeData(this._element, DATA_KEY$1); this._element = null; } // Static ; Button._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var data = $(this).data(DATA_KEY$1); if (!data) { data = new Button(this); $(this).data(DATA_KEY$1, data); } if (config === 'toggle') { data[config](); } }); }; _createClass(Button, null, [{ key: "VERSION", get: function get() { return VERSION$1; } }]); return Button; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE_CARROT, function (event) { var button = event.target; var initialButton = button; if (!$(button).hasClass(CLASS_NAME_BUTTON)) { button = $(button).closest(SELECTOR_BUTTON)[0]; } if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) { event.preventDefault(); // work around Firefox bug #1540995 } else { var inputBtn = button.querySelector(SELECTOR_INPUT); if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) { event.preventDefault(); // work around Firefox bug #1540995 return; } if (initialButton.tagName === 'LABEL' && inputBtn && inputBtn.type === 'checkbox') { event.preventDefault(); // work around event sent to label and input } Button._jQueryInterface.call($(button), 'toggle'); } }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) { var button = $(event.target).closest(SELECTOR_BUTTON)[0]; $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type)); }); $(window).on(EVENT_LOAD_DATA_API, function () { // ensure correct active class is set to match the controls' actual values/states // find all checkboxes/readio buttons inside data-toggle groups var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS)); for (var i = 0, len = buttons.length; i < len; i++) { var button = buttons[i]; var input = button.querySelector(SELECTOR_INPUT); if (input.checked || input.hasAttribute('checked')) { button.classList.add(CLASS_NAME_ACTIVE); } else { button.classList.remove(CLASS_NAME_ACTIVE); } } // find all button toggles buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE)); for (var _i = 0, _len = buttons.length; _i < _len; _i++) { var _button = buttons[_i]; if (_button.getAttribute('aria-pressed') === 'true') { _button.classList.add(CLASS_NAME_ACTIVE); } else { _button.classList.remove(CLASS_NAME_ACTIVE); } } }); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME$1] = Button._jQueryInterface; $.fn[NAME$1].Constructor = Button; $.fn[NAME$1].noConflict = function () { $.fn[NAME$1] = JQUERY_NO_CONFLICT$1; return Button._jQueryInterface; }; /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$2 = 'carousel'; var VERSION$2 = '4.5.0'; var DATA_KEY$2 = 'bs.carousel'; var EVENT_KEY$2 = "." + DATA_KEY$2; var DATA_API_KEY$2 = '.data-api'; var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2]; var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch var SWIPE_THRESHOLD = 40; var Default = { interval: 5000, keyboard: true, slide: false, pause: 'hover', wrap: true, touch: true }; var DefaultType = { interval: '(number|boolean)', keyboard: 'boolean', slide: '(boolean|string)', pause: '(string|boolean)', wrap: 'boolean', touch: 'boolean' }; var DIRECTION_NEXT = 'next'; var DIRECTION_PREV = 'prev'; var DIRECTION_LEFT = 'left'; var DIRECTION_RIGHT = 'right'; var EVENT_SLIDE = "slide" + EVENT_KEY$2; var EVENT_SLID = "slid" + EVENT_KEY$2; var EVENT_KEYDOWN = "keydown" + EVENT_KEY$2; var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$2; var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$2; var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$2; var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$2; var EVENT_TOUCHEND = "touchend" + EVENT_KEY$2; var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$2; var EVENT_POINTERUP = "pointerup" + EVENT_KEY$2; var EVENT_DRAG_START = "dragstart" + EVENT_KEY$2; var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$2 + DATA_API_KEY$2; var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$2 + DATA_API_KEY$2; var CLASS_NAME_CAROUSEL = 'carousel'; var CLASS_NAME_ACTIVE$1 = 'active'; var CLASS_NAME_SLIDE = 'slide'; var CLASS_NAME_RIGHT = 'carousel-item-right'; var CLASS_NAME_LEFT = 'carousel-item-left'; var CLASS_NAME_NEXT = 'carousel-item-next'; var CLASS_NAME_PREV = 'carousel-item-prev'; var CLASS_NAME_POINTER_EVENT = 'pointer-event'; var SELECTOR_ACTIVE$1 = '.active'; var SELECTOR_ACTIVE_ITEM = '.active.carousel-item'; var SELECTOR_ITEM = '.carousel-item'; var SELECTOR_ITEM_IMG = '.carousel-item img'; var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'; var SELECTOR_INDICATORS = '.carousel-indicators'; var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'; var SELECTOR_DATA_RIDE = '[data-ride="carousel"]'; var PointerType = { TOUCH: 'touch', PEN: 'pen' }; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ var Carousel = /*#__PURE__*/function () { function Carousel(element, config) { this._items = null; this._interval = null; this._activeElement = null; this._isPaused = false; this._isSliding = false; this.touchTimeout = null; this.touchStartX = 0; this.touchDeltaX = 0; this._config = this._getConfig(config); this._element = element; this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS); this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); this._addEventListeners(); } // Getters var _proto = Carousel.prototype; // Public _proto.next = function next() { if (!this._isSliding) { this._slide(DIRECTION_NEXT); } }; _proto.nextWhenVisible = function nextWhenVisible() { // Don't call next when the page isn't visible // or the carousel or its parent isn't visible if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') { this.next(); } }; _proto.prev = function prev() { if (!this._isSliding) { this._slide(DIRECTION_PREV); } }; _proto.pause = function pause(event) { if (!event) { this._isPaused = true; } if (this._element.querySelector(SELECTOR_NEXT_PREV)) { Util.triggerTransitionEnd(this._element); this.cycle(true); } clearInterval(this._interval); this._interval = null; }; _proto.cycle = function cycle(event) { if (!event) { this._isPaused = false; } if (this._interval) { clearInterval(this._interval); this._interval = null; } if (this._config.interval && !this._isPaused) { this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); } }; _proto.to = function to(index) { var _this = this; this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM); var activeIndex = this._getItemIndex(this._activeElement); if (index > this._items.length - 1 || index < 0) { return; } if (this._isSliding) { $(this._element).one(EVENT_SLID, function () { return _this.to(index); }); return; } if (activeIndex === index) { this.pause(); this.cycle(); return; } var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV; this._slide(direction, this._items[index]); }; _proto.dispose = function dispose() { $(this._element).off(EVENT_KEY$2); $.removeData(this._element, DATA_KEY$2); this._items = null; this._config = null; this._element = null; this._interval = null; this._isPaused = null; this._isSliding = null; this._activeElement = null; this._indicatorsElement = null; } // Private ; _proto._getConfig = function _getConfig(config) { config = _objectSpread2(_objectSpread2({}, Default), config); Util.typeCheckConfig(NAME$2, config, DefaultType); return config; }; _proto._handleSwipe = function _handleSwipe() { var absDeltax = Math.abs(this.touchDeltaX); if (absDeltax <= SWIPE_THRESHOLD) { return; } var direction = absDeltax / this.touchDeltaX; this.touchDeltaX = 0; // swipe left if (direction > 0) { this.prev(); } // swipe right if (direction < 0) { this.next(); } }; _proto._addEventListeners = function _addEventListeners() { var _this2 = this; if (this._config.keyboard) { $(this._element).on(EVENT_KEYDOWN, function (event) { return _this2._keydown(event); }); } if (this._config.pause === 'hover') { $(this._element).on(EVENT_MOUSEENTER, function (event) { return _this2.pause(event); }).on(EVENT_MOUSELEAVE, function (event) { return _this2.cycle(event); }); } if (this._config.touch) { this._addTouchEventListeners(); } }; _proto._addTouchEventListeners = function _addTouchEventListeners() { var _this3 = this; if (!this._touchSupported) { return; } var start = function start(event) { if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { _this3.touchStartX = event.originalEvent.clientX; } else if (!_this3._pointerEvent) { _this3.touchStartX = event.originalEvent.touches[0].clientX; } }; var move = function move(event) { // ensure swiping with one touch and not pinching if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { _this3.touchDeltaX = 0; } else { _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX; } }; var end = function end(event) { if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; } _this3._handleSwipe(); if (_this3._config.pause === 'hover') { // If it's a touch-enabled device, mouseenter/leave are fired as // part of the mouse compatibility events on first tap - the carousel // would stop cycling until user tapped out of it; // here, we listen for touchend, explicitly pause the carousel // (as if it's the second time we tap on it, mouseenter compat event // is NOT fired) and after a timeout (to allow for mouse compatibility // events to fire) we explicitly restart cycling _this3.pause(); if (_this3.touchTimeout) { clearTimeout(_this3.touchTimeout); } _this3.touchTimeout = setTimeout(function (event) { return _this3.cycle(event); }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); } }; $(this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) { return e.preventDefault(); }); if (this._pointerEvent) { $(this._element).on(EVENT_POINTERDOWN, function (event) { return start(event); }); $(this._element).on(EVENT_POINTERUP, function (event) { return end(event); }); this._element.classList.add(CLASS_NAME_POINTER_EVENT); } else { $(this._element).on(EVENT_TOUCHSTART, function (event) { return start(event); }); $(this._element).on(EVENT_TOUCHMOVE, function (event) { return move(event); }); $(this._element).on(EVENT_TOUCHEND, function (event) { return end(event); }); } }; _proto._keydown = function _keydown(event) { if (/input|textarea/i.test(event.target.tagName)) { return; } switch (event.which) { case ARROW_LEFT_KEYCODE: event.preventDefault(); this.prev(); break; case ARROW_RIGHT_KEYCODE: event.preventDefault(); this.next(); break; } }; _proto._getItemIndex = function _getItemIndex(element) { this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : []; return this._items.indexOf(element); }; _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { var isNextDirection = direction === DIRECTION_NEXT; var isPrevDirection = direction === DIRECTION_PREV; var activeIndex = this._getItemIndex(activeElement); var lastItemIndex = this._items.length - 1; var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; if (isGoingToWrap && !this._config.wrap) { return activeElement; } var delta = direction === DIRECTION_PREV ? -1 : 1; var itemIndex = (activeIndex + delta) % this._items.length; return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; }; _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { var targetIndex = this._getItemIndex(relatedTarget); var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM)); var slideEvent = $.Event(EVENT_SLIDE, { relatedTarget: relatedTarget, direction: eventDirectionName, from: fromIndex, to: targetIndex }); $(this._element).trigger(slideEvent); return slideEvent; }; _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { if (this._indicatorsElement) { var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1)); $(indicators).removeClass(CLASS_NAME_ACTIVE$1); var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; if (nextIndicator) { $(nextIndicator).addClass(CLASS_NAME_ACTIVE$1); } } }; _proto._slide = function _slide(direction, element) { var _this4 = this; var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM); var activeElementIndex = this._getItemIndex(activeElement); var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); var nextElementIndex = this._getItemIndex(nextElement); var isCycling = Boolean(this._interval); var directionalClassName; var orderClassName; var eventDirectionName; if (direction === DIRECTION_NEXT) { directionalClassName = CLASS_NAME_LEFT; orderClassName = CLASS_NAME_NEXT; eventDirectionName = DIRECTION_LEFT; } else { directionalClassName = CLASS_NAME_RIGHT; orderClassName = CLASS_NAME_PREV; eventDirectionName = DIRECTION_RIGHT; } if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE$1)) { this._isSliding = false; return; } var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); if (slideEvent.isDefaultPrevented()) { return; } if (!activeElement || !nextElement) { // Some weirdness is happening, so we bail return; } this._isSliding = true; if (isCycling) { this.pause(); } this._setActiveIndicatorElement(nextElement); var slidEvent = $.Event(EVENT_SLID, { relatedTarget: nextElement, direction: eventDirectionName, from: activeElementIndex, to: nextElementIndex }); if ($(this._element).hasClass(CLASS_NAME_SLIDE)) { $(nextElement).addClass(orderClassName); Util.reflow(nextElement); $(activeElement).addClass(directionalClassName); $(nextElement).addClass(directionalClassName); var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); if (nextElementInterval) { this._config.defaultInterval = this._config.defaultInterval || this._config.interval; this._config.interval = nextElementInterval; } else { this._config.interval = this._config.defaultInterval || this._config.interval; } var transitionDuration = Util.getTransitionDurationFromElement(activeElement); $(activeElement).one(Util.TRANSITION_END, function () { $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$1); $(activeElement).removeClass(CLASS_NAME_ACTIVE$1 + " " + orderClassName + " " + directionalClassName); _this4._isSliding = false; setTimeout(function () { return $(_this4._element).trigger(slidEvent); }, 0); }).emulateTransitionEnd(transitionDuration); } else { $(activeElement).removeClass(CLASS_NAME_ACTIVE$1); $(nextElement).addClass(CLASS_NAME_ACTIVE$1); this._isSliding = false; $(this._element).trigger(slidEvent); } if (isCycling) { this.cycle(); } } // Static ; Carousel._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var data = $(this).data(DATA_KEY$2); var _config = _objectSpread2(_objectSpread2({}, Default), $(this).data()); if (typeof config === 'object') { _config = _objectSpread2(_objectSpread2({}, _config), config); } var action = typeof config === 'string' ? config : _config.slide; if (!data) { data = new Carousel(this, _config); $(this).data(DATA_KEY$2, data); } if (typeof config === 'number') { data.to(config); } else if (typeof action === 'string') { if (typeof data[action] === 'undefined') { throw new TypeError("No method named \"" + action + "\""); } data[action](); } else if (_config.interval && _config.ride) { data.pause(); data.cycle(); } }); }; Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { var selector = Util.getSelectorFromElement(this); if (!selector) { return; } var target = $(selector)[0]; if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) { return; } var config = _objectSpread2(_objectSpread2({}, $(target).data()), $(this).data()); var slideIndex = this.getAttribute('data-slide-to'); if (slideIndex) { config.interval = false; } Carousel._jQueryInterface.call($(target), config); if (slideIndex) { $(target).data(DATA_KEY$2).to(slideIndex); } event.preventDefault(); }; _createClass(Carousel, null, [{ key: "VERSION", get: function get() { return VERSION$2; } }, { key: "Default", get: function get() { return Default; } }]); return Carousel; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler); $(window).on(EVENT_LOAD_DATA_API$1, function () { var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE)); for (var i = 0, len = carousels.length; i < len; i++) { var $carousel = $(carousels[i]); Carousel._jQueryInterface.call($carousel, $carousel.data()); } }); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME$2] = Carousel._jQueryInterface; $.fn[NAME$2].Constructor = Carousel; $.fn[NAME$2].noConflict = function () { $.fn[NAME$2] = JQUERY_NO_CONFLICT$2; return Carousel._jQueryInterface; }; /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$3 = 'collapse'; var VERSION$3 = '4.5.0'; var DATA_KEY$3 = 'bs.collapse'; var EVENT_KEY$3 = "." + DATA_KEY$3; var DATA_API_KEY$3 = '.data-api'; var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3]; var Default$1 = { toggle: true, parent: '' }; var DefaultType$1 = { toggle: 'boolean', parent: '(string|element)' }; var EVENT_SHOW = "show" + EVENT_KEY$3; var EVENT_SHOWN = "shown" + EVENT_KEY$3; var EVENT_HIDE = "hide" + EVENT_KEY$3; var EVENT_HIDDEN = "hidden" + EVENT_KEY$3; var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$3 + DATA_API_KEY$3; var CLASS_NAME_SHOW$1 = 'show'; var CLASS_NAME_COLLAPSE = 'collapse'; var CLASS_NAME_COLLAPSING = 'collapsing'; var CLASS_NAME_COLLAPSED = 'collapsed'; var DIMENSION_WIDTH = 'width'; var DIMENSION_HEIGHT = 'height'; var SELECTOR_ACTIVES = '.show, .collapsing'; var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="collapse"]'; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ var Collapse = /*#__PURE__*/function () { function Collapse(element, config) { this._isTransitioning = false; this._element = element; this._config = this._getConfig(config); this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$1)); for (var i = 0, len = toggleList.length; i < len; i++) { var elem = toggleList[i]; var selector = Util.getSelectorFromElement(elem); var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { return foundElem === element; }); if (selector !== null && filterElement.length > 0) { this._selector = selector; this._triggerArray.push(elem); } } this._parent = this._config.parent ? this._getParent() : null; if (!this._config.parent) { this._addAriaAndCollapsedClass(this._element, this._triggerArray); } if (this._config.toggle) { this.toggle(); } } // Getters var _proto = Collapse.prototype; // Public _proto.toggle = function toggle() { if ($(this._element).hasClass(CLASS_NAME_SHOW$1)) { this.hide(); } else { this.show(); } }; _proto.show = function show() { var _this = this; if (this._isTransitioning || $(this._element).hasClass(CLASS_NAME_SHOW$1)) { return; } var actives; var activesData; if (this._parent) { actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) { if (typeof _this._config.parent === 'string') { return elem.getAttribute('data-parent') === _this._config.parent; } return elem.classList.contains(CLASS_NAME_COLLAPSE); }); if (actives.length === 0) { actives = null; } } if (actives) { activesData = $(actives).not(this._selector).data(DATA_KEY$3); if (activesData && activesData._isTransitioning) { return; } } var startEvent = $.Event(EVENT_SHOW); $(this._element).trigger(startEvent); if (startEvent.isDefaultPrevented()) { return; } if (actives) { Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide'); if (!activesData) { $(actives).data(DATA_KEY$3, null); } } var dimension = this._getDimension(); $(this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING); this._element.style[dimension] = 0; if (this._triggerArray.length) { $(this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true); } this.setTransitioning(true); var complete = function complete() { $(_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1); _this._element.style[dimension] = ''; _this.setTransitioning(false); $(_this._element).trigger(EVENT_SHOWN); }; var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); var scrollSize = "scroll" + capitalizedDimension; var transitionDuration = Util.getTransitionDurationFromElement(this._element); $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); this._element.style[dimension] = this._element[scrollSize] + "px"; }; _proto.hide = function hide() { var _this2 = this; if (this._isTransitioning || !$(this._element).hasClass(CLASS_NAME_SHOW$1)) { return; } var startEvent = $.Event(EVENT_HIDE); $(this._element).trigger(startEvent); if (startEvent.isDefaultPrevented()) { return; } var dimension = this._getDimension(); this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; Util.reflow(this._element); $(this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1); var triggerArrayLength = this._triggerArray.length; if (triggerArrayLength > 0) { for (var i = 0; i < triggerArrayLength; i++) { var trigger = this._triggerArray[i]; var selector = Util.getSelectorFromElement(trigger); if (selector !== null) { var $elem = $([].slice.call(document.querySelectorAll(selector))); if (!$elem.hasClass(CLASS_NAME_SHOW$1)) { $(trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false); } } } } this.setTransitioning(true); var complete = function complete() { _this2.setTransitioning(false); $(_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN); }; this._element.style[dimension] = ''; var transitionDuration = Util.getTransitionDurationFromElement(this._element); $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); }; _proto.setTransitioning = function setTransitioning(isTransitioning) { this._isTransitioning = isTransitioning; }; _proto.dispose = function dispose() { $.removeData(this._element, DATA_KEY$3); this._config = null; this._parent = null; this._element = null; this._triggerArray = null; this._isTransitioning = null; } // Private ; _proto._getConfig = function _getConfig(config) { config = _objectSpread2(_objectSpread2({}, Default$1), config); config.toggle = Boolean(config.toggle); // Coerce string values Util.typeCheckConfig(NAME$3, config, DefaultType$1); return config; }; _proto._getDimension = function _getDimension() { var hasWidth = $(this._element).hasClass(DIMENSION_WIDTH); return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT; }; _proto._getParent = function _getParent() { var _this3 = this; var parent; if (Util.isElement(this._config.parent)) { parent = this._config.parent; // It's a jQuery object if (typeof this._config.parent.jquery !== 'undefined') { parent = this._config.parent[0]; } } else { parent = document.querySelector(this._config.parent); } var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; var children = [].slice.call(parent.querySelectorAll(selector)); $(children).each(function (i, element) { _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); }); return parent; }; _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { var isOpen = $(element).hasClass(CLASS_NAME_SHOW$1); if (triggerArray.length) { $(triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen); } } // Static ; Collapse._getTargetFromElement = function _getTargetFromElement(element) { var selector = Util.getSelectorFromElement(element); return selector ? document.querySelector(selector) : null; }; Collapse._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var $this = $(this); var data = $this.data(DATA_KEY$3); var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$1), $this.data()), typeof config === 'object' && config ? config : {}); if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) { _config.toggle = false; } if (!data) { data = new Collapse(this, _config); $this.data(DATA_KEY$3, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](); } }); }; _createClass(Collapse, null, [{ key: "VERSION", get: function get() { return VERSION$3; } }, { key: "Default", get: function get() { return Default$1; } }]); return Collapse; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$1, function (event) { // preventDefault only for elements (which change the URL) not inside the collapsible element if (event.currentTarget.tagName === 'A') { event.preventDefault(); } var $trigger = $(this); var selector = Util.getSelectorFromElement(this); var selectors = [].slice.call(document.querySelectorAll(selector)); $(selectors).each(function () { var $target = $(this); var data = $target.data(DATA_KEY$3); var config = data ? 'toggle' : $trigger.data(); Collapse._jQueryInterface.call($target, config); }); }); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME$3] = Collapse._jQueryInterface; $.fn[NAME$3].Constructor = Collapse; $.fn[NAME$3].noConflict = function () { $.fn[NAME$3] = JQUERY_NO_CONFLICT$3; return Collapse._jQueryInterface; }; /**! * @fileOverview Kickass library to create and place poppers near their reference elements. * @version 1.16.0 * @license * Copyright (c) 2016 Federico Zivolo and contributors * * 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. */ var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined'; var timeoutDuration = function () { var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) { return 1; } } return 0; }(); function microtaskDebounce(fn) { var called = false; return function () { if (called) { return; } called = true; window.Promise.resolve().then(function () { called = false; fn(); }); }; } function taskDebounce(fn) { var scheduled = false; return function () { if (!scheduled) { scheduled = true; setTimeout(function () { scheduled = false; fn(); }, timeoutDuration); } }; } var supportsMicroTasks = isBrowser && window.Promise; /** * Create a debounced version of a method, that's asynchronously deferred * but called in the minimum time possible. * * @method * @memberof Popper.Utils * @argument {Function} fn * @returns {Function} */ var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce; /** * Check if the given variable is a function * @method * @memberof Popper.Utils * @argument {Any} functionToCheck - variable to check * @returns {Boolean} answer to: is a function? */ function isFunction(functionToCheck) { var getType = {}; return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; } /** * Get CSS computed property of the given element * @method * @memberof Popper.Utils * @argument {Eement} element * @argument {String} property */ function getStyleComputedProperty(element, property) { if (element.nodeType !== 1) { return []; } // NOTE: 1 DOM access here var window = element.ownerDocument.defaultView; var css = window.getComputedStyle(element, null); return property ? css[property] : css; } /** * Returns the parentNode or the host of the element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} parent */ function getParentNode(element) { if (element.nodeName === 'HTML') { return element; } return element.parentNode || element.host; } /** * Returns the scrolling parent of the given element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} scroll parent */ function getScrollParent(element) { // Return body, `getScroll` will take care to get the correct `scrollTop` from it if (!element) { return document.body; } switch (element.nodeName) { case 'HTML': case 'BODY': return element.ownerDocument.body; case '#document': return element.body; } // Firefox want us to check `-x` and `-y` variations as well var _getStyleComputedProp = getStyleComputedProperty(element), overflow = _getStyleComputedProp.overflow, overflowX = _getStyleComputedProp.overflowX, overflowY = _getStyleComputedProp.overflowY; if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { return element; } return getScrollParent(getParentNode(element)); } /** * Returns the reference node of the reference object, or the reference object itself. * @method * @memberof Popper.Utils * @param {Element|Object} reference - the reference element (the popper will be relative to this) * @returns {Element} parent */ function getReferenceNode(reference) { return reference && reference.referenceNode ? reference.referenceNode : reference; } var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); /** * Determines if the browser is Internet Explorer * @method * @memberof Popper.Utils * @param {Number} version to check * @returns {Boolean} isIE */ function isIE(version) { if (version === 11) { return isIE11; } if (version === 10) { return isIE10; } return isIE11 || isIE10; } /** * Returns the offset parent of the given element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} offset parent */ function getOffsetParent(element) { if (!element) { return document.documentElement; } var noOffsetParent = isIE(10) ? document.body : null; // NOTE: 1 DOM access here var offsetParent = element.offsetParent || null; // Skip hidden elements which don't have an offsetParent while (offsetParent === noOffsetParent && element.nextElementSibling) { offsetParent = (element = element.nextElementSibling).offsetParent; } var nodeName = offsetParent && offsetParent.nodeName; if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { return element ? element.ownerDocument.documentElement : document.documentElement; } // .offsetParent will return the closest TH, TD or TABLE in case // no offsetParent is present, I hate this job... if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { return getOffsetParent(offsetParent); } return offsetParent; } function isOffsetContainer(element) { var nodeName = element.nodeName; if (nodeName === 'BODY') { return false; } return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element; } /** * Finds the root node (document, shadowDOM root) of the given element * @method * @memberof Popper.Utils * @argument {Element} node * @returns {Element} root node */ function getRoot(node) { if (node.parentNode !== null) { return getRoot(node.parentNode); } return node; } /** * Finds the offset parent common to the two provided nodes * @method * @memberof Popper.Utils * @argument {Element} element1 * @argument {Element} element2 * @returns {Element} common offset parent */ function findCommonOffsetParent(element1, element2) { // This check is needed to avoid errors in case one of the elements isn't defined for any reason if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) { return document.documentElement; } // Here we make sure to give as "start" the element that comes first in the DOM var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING; var start = order ? element1 : element2; var end = order ? element2 : element1; // Get common ancestor container var range = document.createRange(); range.setStart(start, 0); range.setEnd(end, 0); var commonAncestorContainer = range.commonAncestorContainer; // Both nodes are inside #document if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) { if (isOffsetContainer(commonAncestorContainer)) { return commonAncestorContainer; } return getOffsetParent(commonAncestorContainer); } // one of the nodes is inside shadowDOM, find which one var element1root = getRoot(element1); if (element1root.host) { return findCommonOffsetParent(element1root.host, element2); } else { return findCommonOffsetParent(element1, getRoot(element2).host); } } /** * Gets the scroll value of the given element in the given side (top and left) * @method * @memberof Popper.Utils * @argument {Element} element * @argument {String} side `top` or `left` * @returns {number} amount of scrolled pixels */ function getScroll(element) { var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top'; var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft'; var nodeName = element.nodeName; if (nodeName === 'BODY' || nodeName === 'HTML') { var html = element.ownerDocument.documentElement; var scrollingElement = element.ownerDocument.scrollingElement || html; return scrollingElement[upperSide]; } return element[upperSide]; } /* * Sum or subtract the element scroll values (left and top) from a given rect object * @method * @memberof Popper.Utils * @param {Object} rect - Rect object you want to change * @param {HTMLElement} element - The element from the function reads the scroll values * @param {Boolean} subtract - set to true if you want to subtract the scroll values * @return {Object} rect - The modifier rect object */ function includeScroll(rect, element) { var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var scrollTop = getScroll(element, 'top'); var scrollLeft = getScroll(element, 'left'); var modifier = subtract ? -1 : 1; rect.top += scrollTop * modifier; rect.bottom += scrollTop * modifier; rect.left += scrollLeft * modifier; rect.right += scrollLeft * modifier; return rect; } /* * Helper to detect borders of a given element * @method * @memberof Popper.Utils * @param {CSSStyleDeclaration} styles * Result of `getStyleComputedProperty` on the given element * @param {String} axis - `x` or `y` * @return {number} borders - The borders size of the given axis */ function getBordersSize(styles, axis) { var sideA = axis === 'x' ? 'Left' : 'Top'; var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10); } function getSize(axis, body, html, computedStyle) { return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0); } function getWindowSizes(document) { var body = document.body; var html = document.documentElement; var computedStyle = isIE(10) && getComputedStyle(html); return { height: getSize('Height', body, html, computedStyle), width: getSize('Width', body, html, computedStyle) }; } var classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; var createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var defineProperty = function (obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** * Given element offsets, generate an output similar to getBoundingClientRect * @method * @memberof Popper.Utils * @argument {Object} offsets * @returns {Object} ClientRect like output */ function getClientRect(offsets) { return _extends({}, offsets, { right: offsets.left + offsets.width, bottom: offsets.top + offsets.height }); } /** * Get bounding client rect of given element * @method * @memberof Popper.Utils * @param {HTMLElement} element * @return {Object} client rect */ function getBoundingClientRect(element) { var rect = {}; // IE10 10 FIX: Please, don't ask, the element isn't // considered in DOM in some circumstances... // This isn't reproducible in IE10 compatibility mode of IE11 try { if (isIE(10)) { rect = element.getBoundingClientRect(); var scrollTop = getScroll(element, 'top'); var scrollLeft = getScroll(element, 'left'); rect.top += scrollTop; rect.left += scrollLeft; rect.bottom += scrollTop; rect.right += scrollLeft; } else { rect = element.getBoundingClientRect(); } } catch (e) {} var result = { left: rect.left, top: rect.top, width: rect.right - rect.left, height: rect.bottom - rect.top }; // subtract scrollbar size from sizes var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {}; var width = sizes.width || element.clientWidth || result.width; var height = sizes.height || element.clientHeight || result.height; var horizScrollbar = element.offsetWidth - width; var vertScrollbar = element.offsetHeight - height; // if an hypothetical scrollbar is detected, we must be sure it's not a `border` // we make this check conditional for performance reasons if (horizScrollbar || vertScrollbar) { var styles = getStyleComputedProperty(element); horizScrollbar -= getBordersSize(styles, 'x'); vertScrollbar -= getBordersSize(styles, 'y'); result.width -= horizScrollbar; result.height -= vertScrollbar; } return getClientRect(result); } function getOffsetRectRelativeToArbitraryNode(children, parent) { var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var isIE10 = isIE(10); var isHTML = parent.nodeName === 'HTML'; var childrenRect = getBoundingClientRect(children); var parentRect = getBoundingClientRect(parent); var scrollParent = getScrollParent(children); var styles = getStyleComputedProperty(parent); var borderTopWidth = parseFloat(styles.borderTopWidth, 10); var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10); // In cases where the parent is fixed, we must ignore negative scroll in offset calc if (fixedPosition && isHTML) { parentRect.top = Math.max(parentRect.top, 0); parentRect.left = Math.max(parentRect.left, 0); } var offsets = getClientRect({ top: childrenRect.top - parentRect.top - borderTopWidth, left: childrenRect.left - parentRect.left - borderLeftWidth, width: childrenRect.width, height: childrenRect.height }); offsets.marginTop = 0; offsets.marginLeft = 0; // Subtract margins of documentElement in case it's being used as parent // we do this only on HTML because it's the only element that behaves // differently when margins are applied to it. The margins are included in // the box of the documentElement, in the other cases not. if (!isIE10 && isHTML) { var marginTop = parseFloat(styles.marginTop, 10); var marginLeft = parseFloat(styles.marginLeft, 10); offsets.top -= borderTopWidth - marginTop; offsets.bottom -= borderTopWidth - marginTop; offsets.left -= borderLeftWidth - marginLeft; offsets.right -= borderLeftWidth - marginLeft; // Attach marginTop and marginLeft because in some circumstances we may need them offsets.marginTop = marginTop; offsets.marginLeft = marginLeft; } if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { offsets = includeScroll(offsets, parent); } return offsets; } function getViewportOffsetRectRelativeToArtbitraryNode(element) { var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var html = element.ownerDocument.documentElement; var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); var width = Math.max(html.clientWidth, window.innerWidth || 0); var height = Math.max(html.clientHeight, window.innerHeight || 0); var scrollTop = !excludeScroll ? getScroll(html) : 0; var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0; var offset = { top: scrollTop - relativeOffset.top + relativeOffset.marginTop, left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft, width: width, height: height }; return getClientRect(offset); } /** * Check if the given element is fixed or is inside a fixed parent * @method * @memberof Popper.Utils * @argument {Element} element * @argument {Element} customContainer * @returns {Boolean} answer to "isFixed?" */ function isFixed(element) { var nodeName = element.nodeName; if (nodeName === 'BODY' || nodeName === 'HTML') { return false; } if (getStyleComputedProperty(element, 'position') === 'fixed') { return true; } var parentNode = getParentNode(element); if (!parentNode) { return false; } return isFixed(parentNode); } /** * Finds the first parent of an element that has a transformed property defined * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} first transformed parent or documentElement */ function getFixedPositionOffsetParent(element) { // This check is needed to avoid errors in case one of the elements isn't defined for any reason if (!element || !element.parentElement || isIE()) { return document.documentElement; } var el = element.parentElement; while (el && getStyleComputedProperty(el, 'transform') === 'none') { el = el.parentElement; } return el || document.documentElement; } /** * Computed the boundaries limits and return them * @method * @memberof Popper.Utils * @param {HTMLElement} popper * @param {HTMLElement} reference * @param {number} padding * @param {HTMLElement} boundariesElement - Element used to define the boundaries * @param {Boolean} fixedPosition - Is in fixed position mode * @returns {Object} Coordinates of the boundaries */ function getBoundaries(popper, reference, padding, boundariesElement) { var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; // NOTE: 1 DOM access here var boundaries = { top: 0, left: 0 }; var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); // Handle viewport case if (boundariesElement === 'viewport') { boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition); } else { // Handle other cases based on DOM element used as boundaries var boundariesNode = void 0; if (boundariesElement === 'scrollParent') { boundariesNode = getScrollParent(getParentNode(reference)); if (boundariesNode.nodeName === 'BODY') { boundariesNode = popper.ownerDocument.documentElement; } } else if (boundariesElement === 'window') { boundariesNode = popper.ownerDocument.documentElement; } else { boundariesNode = boundariesElement; } var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); // In case of HTML, we need a different computation if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { var _getWindowSizes = getWindowSizes(popper.ownerDocument), height = _getWindowSizes.height, width = _getWindowSizes.width; boundaries.top += offsets.top - offsets.marginTop; boundaries.bottom = height + offsets.top; boundaries.left += offsets.left - offsets.marginLeft; boundaries.right = width + offsets.left; } else { // for all the other DOM elements, this one is good boundaries = offsets; } } // Add paddings padding = padding || 0; var isPaddingNumber = typeof padding === 'number'; boundaries.left += isPaddingNumber ? padding : padding.left || 0; boundaries.top += isPaddingNumber ? padding : padding.top || 0; boundaries.right -= isPaddingNumber ? padding : padding.right || 0; boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; return boundaries; } function getArea(_ref) { var width = _ref.width, height = _ref.height; return width * height; } /** * Utility used to transform the `auto` placement to the placement with more * available space. * @method * @memberof Popper.Utils * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) { var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; if (placement.indexOf('auto') === -1) { return placement; } var boundaries = getBoundaries(popper, reference, padding, boundariesElement); var rects = { top: { width: boundaries.width, height: refRect.top - boundaries.top }, right: { width: boundaries.right - refRect.right, height: boundaries.height }, bottom: { width: boundaries.width, height: boundaries.bottom - refRect.bottom }, left: { width: refRect.left - boundaries.left, height: boundaries.height } }; var sortedAreas = Object.keys(rects).map(function (key) { return _extends({ key: key }, rects[key], { area: getArea(rects[key]) }); }).sort(function (a, b) { return b.area - a.area; }); var filteredAreas = sortedAreas.filter(function (_ref2) { var width = _ref2.width, height = _ref2.height; return width >= popper.clientWidth && height >= popper.clientHeight; }); var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key; var variation = placement.split('-')[1]; return computedPlacement + (variation ? '-' + variation : ''); } /** * Get offsets to the reference element * @method * @memberof Popper.Utils * @param {Object} state * @param {Element} popper - the popper element * @param {Element} reference - the reference element (the popper will be relative to this) * @param {Element} fixedPosition - is in fixed position mode * @returns {Object} An object containing the offsets which will be applied to the popper */ function getReferenceOffsets(state, popper, reference) { var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition); } /** * Get the outer sizes of the given element (offset size + margins) * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Object} object containing width and height properties */ function getOuterSizes(element) { var window = element.ownerDocument.defaultView; var styles = window.getComputedStyle(element); var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0); var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0); var result = { width: element.offsetWidth + y, height: element.offsetHeight + x }; return result; } /** * Get the opposite placement of the given one * @method * @memberof Popper.Utils * @argument {String} placement * @returns {String} flipped placement */ function getOppositePlacement(placement) { var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; return placement.replace(/left|right|bottom|top/g, function (matched) { return hash[matched]; }); } /** * Get offsets to the popper * @method * @memberof Popper.Utils * @param {Object} position - CSS position the Popper will get applied * @param {HTMLElement} popper - the popper element * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) * @param {String} placement - one of the valid placement options * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper */ function getPopperOffsets(popper, referenceOffsets, placement) { placement = placement.split('-')[0]; // Get popper node sizes var popperRect = getOuterSizes(popper); // Add position, width and height to our offsets object var popperOffsets = { width: popperRect.width, height: popperRect.height }; // depending by the popper placement we have to compute its offsets slightly differently var isHoriz = ['right', 'left'].indexOf(placement) !== -1; var mainSide = isHoriz ? 'top' : 'left'; var secondarySide = isHoriz ? 'left' : 'top'; var measurement = isHoriz ? 'height' : 'width'; var secondaryMeasurement = !isHoriz ? 'height' : 'width'; popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2; if (placement === secondarySide) { popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement]; } else { popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)]; } return popperOffsets; } /** * Mimics the `find` method of Array * @method * @memberof Popper.Utils * @argument {Array} arr * @argument prop * @argument value * @returns index or -1 */ function find(arr, check) { // use native find if supported if (Array.prototype.find) { return arr.find(check); } // use `filter` to obtain the same behavior of `find` return arr.filter(check)[0]; } /** * Return the index of the matching object * @method * @memberof Popper.Utils * @argument {Array} arr * @argument prop * @argument value * @returns index or -1 */ function findIndex(arr, prop, value) { // use native findIndex if supported if (Array.prototype.findIndex) { return arr.findIndex(function (cur) { return cur[prop] === value; }); } // use `find` + `indexOf` if `findIndex` isn't supported var match = find(arr, function (obj) { return obj[prop] === value; }); return arr.indexOf(match); } /** * Loop trough the list of modifiers and run them in order, * each of them will then edit the data object. * @method * @memberof Popper.Utils * @param {dataObject} data * @param {Array} modifiers * @param {String} ends - Optional modifier name used as stopper * @returns {dataObject} */ function runModifiers(modifiers, data, ends) { var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); modifiersToRun.forEach(function (modifier) { if (modifier['function']) { // eslint-disable-line dot-notation console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); } var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation if (modifier.enabled && isFunction(fn)) { // Add properties to offsets to make them a complete clientRect object // we do this before each modifier to make sure the previous one doesn't // mess with these values data.offsets.popper = getClientRect(data.offsets.popper); data.offsets.reference = getClientRect(data.offsets.reference); data = fn(data, modifier); } }); return data; } /** * Updates the position of the popper, computing the new offsets and applying * the new style.
* Prefer `scheduleUpdate` over `update` because of performance reasons. * @method * @memberof Popper */ function update() { // if popper is destroyed, don't perform any further update if (this.state.isDestroyed) { return; } var data = { instance: this, styles: {}, arrowStyles: {}, attributes: {}, flipped: false, offsets: {} }; // compute reference element offsets data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); // compute auto placement, store placement inside the data object, // modifiers will be able to edit `placement` if needed // and refer to originalPlacement to know the original value data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); // store the computed placement inside `originalPlacement` data.originalPlacement = data.placement; data.positionFixed = this.options.positionFixed; // compute the popper offsets data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; // run the modifiers data = runModifiers(this.modifiers, data); // the first `update` will call `onCreate` callback // the other ones will call `onUpdate` callback if (!this.state.isCreated) { this.state.isCreated = true; this.options.onCreate(data); } else { this.options.onUpdate(data); } } /** * Helper used to know if the given modifier is enabled. * @method * @memberof Popper.Utils * @returns {Boolean} */ function isModifierEnabled(modifiers, modifierName) { return modifiers.some(function (_ref) { var name = _ref.name, enabled = _ref.enabled; return enabled && name === modifierName; }); } /** * Get the prefixed supported property name * @method * @memberof Popper.Utils * @argument {String} property (camelCase) * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) */ function getSupportedPropertyName(property) { var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; var upperProp = property.charAt(0).toUpperCase() + property.slice(1); for (var i = 0; i < prefixes.length; i++) { var prefix = prefixes[i]; var toCheck = prefix ? '' + prefix + upperProp : property; if (typeof document.body.style[toCheck] !== 'undefined') { return toCheck; } } return null; } /** * Destroys the popper. * @method * @memberof Popper */ function destroy() { this.state.isDestroyed = true; // touch DOM only if `applyStyle` modifier is enabled if (isModifierEnabled(this.modifiers, 'applyStyle')) { this.popper.removeAttribute('x-placement'); this.popper.style.position = ''; this.popper.style.top = ''; this.popper.style.left = ''; this.popper.style.right = ''; this.popper.style.bottom = ''; this.popper.style.willChange = ''; this.popper.style[getSupportedPropertyName('transform')] = ''; } this.disableEventListeners(); // remove the popper if user explicitly asked for the deletion on destroy // do not use `remove` because IE11 doesn't support it if (this.options.removeOnDestroy) { this.popper.parentNode.removeChild(this.popper); } return this; } /** * Get the window associated with the element * @argument {Element} element * @returns {Window} */ function getWindow(element) { var ownerDocument = element.ownerDocument; return ownerDocument ? ownerDocument.defaultView : window; } function attachToScrollParents(scrollParent, event, callback, scrollParents) { var isBody = scrollParent.nodeName === 'BODY'; var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent; target.addEventListener(event, callback, { passive: true }); if (!isBody) { attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents); } scrollParents.push(target); } /** * Setup needed event listeners used to update the popper position * @method * @memberof Popper.Utils * @private */ function setupEventListeners(reference, options, state, updateBound) { // Resize event listener on window state.updateBound = updateBound; getWindow(reference).addEventListener('resize', state.updateBound, { passive: true }); // Scroll event listener on scroll parents var scrollElement = getScrollParent(reference); attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents); state.scrollElement = scrollElement; state.eventsEnabled = true; return state; } /** * It will add resize/scroll events and start recalculating * position of the popper element when they are triggered. * @method * @memberof Popper */ function enableEventListeners() { if (!this.state.eventsEnabled) { this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate); } } /** * Remove event listeners used to update the popper position * @method * @memberof Popper.Utils * @private */ function removeEventListeners(reference, state) { // Remove resize event listener on window getWindow(reference).removeEventListener('resize', state.updateBound); // Remove scroll event listener on scroll parents state.scrollParents.forEach(function (target) { target.removeEventListener('scroll', state.updateBound); }); // Reset state state.updateBound = null; state.scrollParents = []; state.scrollElement = null; state.eventsEnabled = false; return state; } /** * It will remove resize/scroll events and won't recalculate popper position * when they are triggered. It also won't trigger `onUpdate` callback anymore, * unless you call `update` method manually. * @method * @memberof Popper */ function disableEventListeners() { if (this.state.eventsEnabled) { cancelAnimationFrame(this.scheduleUpdate); this.state = removeEventListeners(this.reference, this.state); } } /** * Tells if a given input is a number * @method * @memberof Popper.Utils * @param {*} input to check * @return {Boolean} */ function isNumeric(n) { return n !== '' && !isNaN(parseFloat(n)) && isFinite(n); } /** * Set the style to the given popper * @method * @memberof Popper.Utils * @argument {Element} element - Element to apply the style to * @argument {Object} styles * Object with a list of properties and values which will be applied to the element */ function setStyles(element, styles) { Object.keys(styles).forEach(function (prop) { var unit = ''; // add unit if the value is numeric and is one of the following if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) { unit = 'px'; } element.style[prop] = styles[prop] + unit; }); } /** * Set the attributes to the given popper * @method * @memberof Popper.Utils * @argument {Element} element - Element to apply the attributes to * @argument {Object} styles * Object with a list of properties and values which will be applied to the element */ function setAttributes(element, attributes) { Object.keys(attributes).forEach(function (prop) { var value = attributes[prop]; if (value !== false) { element.setAttribute(prop, attributes[prop]); } else { element.removeAttribute(prop); } }); } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} data.styles - List of style properties - values to apply to popper element * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element * @argument {Object} options - Modifiers configuration and options * @returns {Object} The same data object */ function applyStyle(data) { // any property present in `data.styles` will be applied to the popper, // in this way we can make the 3rd party modifiers add custom styles to it // Be aware, modifiers could override the properties defined in the previous // lines of this modifier! setStyles(data.instance.popper, data.styles); // any property present in `data.attributes` will be applied to the popper, // they will be set as HTML attributes of the element setAttributes(data.instance.popper, data.attributes); // if arrowElement is defined and arrowStyles has some properties if (data.arrowElement && Object.keys(data.arrowStyles).length) { setStyles(data.arrowElement, data.arrowStyles); } return data; } /** * Set the x-placement attribute before everything else because it could be used * to add margins to the popper margins needs to be calculated to get the * correct popper offsets. * @method * @memberof Popper.modifiers * @param {HTMLElement} reference - The reference element used to position the popper * @param {HTMLElement} popper - The HTML element used as popper * @param {Object} options - Popper.js options */ function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { // compute reference element offsets var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); // compute auto placement, store placement inside the data object, // modifiers will be able to edit `placement` if needed // and refer to originalPlacement to know the original value var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding); popper.setAttribute('x-placement', placement); // Apply `position` to popper before anything else because // without the position applied we can't guarantee correct computations setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' }); return options; } /** * @function * @memberof Popper.Utils * @argument {Object} data - The data object generated by `update` method * @argument {Boolean} shouldRound - If the offsets should be rounded at all * @returns {Object} The popper's position offsets rounded * * The tale of pixel-perfect positioning. It's still not 100% perfect, but as * good as it can be within reason. * Discussion here: https://github.com/FezVrasta/popper.js/pull/715 * * Low DPI screens cause a popper to be blurry if not using full pixels (Safari * as well on High DPI screens). * * Firefox prefers no rounding for positioning and does not have blurriness on * high DPI screens. * * Only horizontal placement and left/right values need to be considered. */ function getRoundedOffsets(data, shouldRound) { var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var round = Math.round, floor = Math.floor; var noRound = function noRound(v) { return v; }; var referenceWidth = round(reference.width); var popperWidth = round(popper.width); var isVertical = ['left', 'right'].indexOf(data.placement) !== -1; var isVariation = data.placement.indexOf('-') !== -1; var sameWidthParity = referenceWidth % 2 === popperWidth % 2; var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1; var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor; var verticalToInteger = !shouldRound ? noRound : round; return { left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left), top: verticalToInteger(popper.top), bottom: verticalToInteger(popper.bottom), right: horizontalToInteger(popper.right) }; } var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent); /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function computeStyle(data, options) { var x = options.x, y = options.y; var popper = data.offsets.popper; // Remove this legacy support in Popper.js v2 var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) { return modifier.name === 'applyStyle'; }).gpuAcceleration; if (legacyGpuAccelerationOption !== undefined) { console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); } var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration; var offsetParent = getOffsetParent(data.instance.popper); var offsetParentRect = getBoundingClientRect(offsetParent); // Styles var styles = { position: popper.position }; var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox); var sideA = x === 'bottom' ? 'top' : 'bottom'; var sideB = y === 'right' ? 'left' : 'right'; // if gpuAcceleration is set to `true` and transform is supported, // we use `translate3d` to apply the position to the popper we // automatically use the supported prefixed version if needed var prefixedProperty = getSupportedPropertyName('transform'); // now, let's make a step back and look at this code closely (wtf?) // If the content of the popper grows once it's been positioned, it // may happen that the popper gets misplaced because of the new content // overflowing its reference element // To avoid this problem, we provide two options (x and y), which allow // the consumer to define the offset origin. // If we position a popper on top of a reference element, we can set // `x` to `top` to make the popper grow towards its top instead of // its bottom. var left = void 0, top = void 0; if (sideA === 'bottom') { // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar) // and not the bottom of the html element if (offsetParent.nodeName === 'HTML') { top = -offsetParent.clientHeight + offsets.bottom; } else { top = -offsetParentRect.height + offsets.bottom; } } else { top = offsets.top; } if (sideB === 'right') { if (offsetParent.nodeName === 'HTML') { left = -offsetParent.clientWidth + offsets.right; } else { left = -offsetParentRect.width + offsets.right; } } else { left = offsets.left; } if (gpuAcceleration && prefixedProperty) { styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)'; styles[sideA] = 0; styles[sideB] = 0; styles.willChange = 'transform'; } else { // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties var invertTop = sideA === 'bottom' ? -1 : 1; var invertLeft = sideB === 'right' ? -1 : 1; styles[sideA] = top * invertTop; styles[sideB] = left * invertLeft; styles.willChange = sideA + ', ' + sideB; } // Attributes var attributes = { 'x-placement': data.placement }; // Update `data` attributes, styles and arrowStyles data.attributes = _extends({}, attributes, data.attributes); data.styles = _extends({}, styles, data.styles); data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles); return data; } /** * Helper used to know if the given modifier depends from another one.
* It checks if the needed modifier is listed and enabled. * @method * @memberof Popper.Utils * @param {Array} modifiers - list of modifiers * @param {String} requestingName - name of requesting modifier * @param {String} requestedName - name of requested modifier * @returns {Boolean} */ function isModifierRequired(modifiers, requestingName, requestedName) { var requesting = find(modifiers, function (_ref) { var name = _ref.name; return name === requestingName; }); var isRequired = !!requesting && modifiers.some(function (modifier) { return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order; }); if (!isRequired) { var _requesting = '`' + requestingName + '`'; var requested = '`' + requestedName + '`'; console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!'); } return isRequired; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function arrow(data, options) { var _data$offsets$arrow; // arrow depends on keepTogether in order to work if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { return data; } var arrowElement = options.element; // if arrowElement is a string, suppose it's a CSS selector if (typeof arrowElement === 'string') { arrowElement = data.instance.popper.querySelector(arrowElement); // if arrowElement is not found, don't run the modifier if (!arrowElement) { return data; } } else { // if the arrowElement isn't a query selector we must check that the // provided DOM node is child of its popper node if (!data.instance.popper.contains(arrowElement)) { console.warn('WARNING: `arrow.element` must be child of its popper element!'); return data; } } var placement = data.placement.split('-')[0]; var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var isVertical = ['left', 'right'].indexOf(placement) !== -1; var len = isVertical ? 'height' : 'width'; var sideCapitalized = isVertical ? 'Top' : 'Left'; var side = sideCapitalized.toLowerCase(); var altSide = isVertical ? 'left' : 'top'; var opSide = isVertical ? 'bottom' : 'right'; var arrowElementSize = getOuterSizes(arrowElement)[len]; // // extends keepTogether behavior making sure the popper and its // reference have enough pixels in conjunction // // top/left side if (reference[opSide] - arrowElementSize < popper[side]) { data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize); } // bottom/right side if (reference[side] + arrowElementSize > popper[opSide]) { data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide]; } data.offsets.popper = getClientRect(data.offsets.popper); // compute center of the popper var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; // Compute the sideValue using the updated popper offsets // take popper margin in account because we don't have this info available var css = getStyleComputedProperty(data.instance.popper); var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10); var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10); var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; // prevent arrowElement from being placed not contiguously to its popper sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); data.arrowElement = arrowElement; data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow); return data; } /** * Get the opposite placement variation of the given one * @method * @memberof Popper.Utils * @argument {String} placement variation * @returns {String} flipped placement variation */ function getOppositeVariation(variation) { if (variation === 'end') { return 'start'; } else if (variation === 'start') { return 'end'; } return variation; } /** * List of accepted placements to use as values of the `placement` option.
* Valid placements are: * - `auto` * - `top` * - `right` * - `bottom` * - `left` * * Each placement can have a variation from this list: * - `-start` * - `-end` * * Variations are interpreted easily if you think of them as the left to right * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` * is right.
* Vertically (`left` and `right`), `start` is top and `end` is bottom. * * Some valid examples are: * - `top-end` (on top of reference, right aligned) * - `right-start` (on right of reference, top aligned) * - `bottom` (on bottom, centered) * - `auto-end` (on the side with more space available, alignment depends by placement) * * @static * @type {Array} * @enum {String} * @readonly * @method placements * @memberof Popper */ var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; // Get rid of `auto` `auto-start` and `auto-end` var validPlacements = placements.slice(3); /** * Given an initial placement, returns all the subsequent placements * clockwise (or counter-clockwise). * * @method * @memberof Popper.Utils * @argument {String} placement - A valid placement (it accepts variations) * @argument {Boolean} counter - Set to true to walk the placements counterclockwise * @returns {Array} placements including their variations */ function clockwise(placement) { var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var index = validPlacements.indexOf(placement); var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index)); return counter ? arr.reverse() : arr; } var BEHAVIORS = { FLIP: 'flip', CLOCKWISE: 'clockwise', COUNTERCLOCKWISE: 'counterclockwise' }; /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function flip(data, options) { // if `inner` modifier is enabled, we can't use the `flip` modifier if (isModifierEnabled(data.instance.modifiers, 'inner')) { return data; } if (data.flipped && data.placement === data.originalPlacement) { // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides return data; } var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed); var placement = data.placement.split('-')[0]; var placementOpposite = getOppositePlacement(placement); var variation = data.placement.split('-')[1] || ''; var flipOrder = []; switch (options.behavior) { case BEHAVIORS.FLIP: flipOrder = [placement, placementOpposite]; break; case BEHAVIORS.CLOCKWISE: flipOrder = clockwise(placement); break; case BEHAVIORS.COUNTERCLOCKWISE: flipOrder = clockwise(placement, true); break; default: flipOrder = options.behavior; } flipOrder.forEach(function (step, index) { if (placement !== step || flipOrder.length === index + 1) { return data; } placement = data.placement.split('-')[0]; placementOpposite = getOppositePlacement(placement); var popperOffsets = data.offsets.popper; var refOffsets = data.offsets.reference; // using floor because the reference offsets may contain decimals we are not going to consider here var floor = Math.floor; var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom); var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom); var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; // flip the variation if required var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; // flips variation if reference element overflows boundaries var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); // flips variation if popper content overflows boundaries var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop); var flippedVariation = flippedVariationByRef || flippedVariationByContent; if (overlapsRef || overflowsBoundaries || flippedVariation) { // this boolean to detect any flip loop data.flipped = true; if (overlapsRef || overflowsBoundaries) { placement = flipOrder[index + 1]; } if (flippedVariation) { variation = getOppositeVariation(variation); } data.placement = placement + (variation ? '-' + variation : ''); // this object contains `position`, we want to preserve it along with // any additional property we may add in the future data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement)); data = runModifiers(data.instance.modifiers, data, 'flip'); } }); return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function keepTogether(data) { var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var placement = data.placement.split('-')[0]; var floor = Math.floor; var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; var side = isVertical ? 'right' : 'bottom'; var opSide = isVertical ? 'left' : 'top'; var measurement = isVertical ? 'width' : 'height'; if (popper[side] < floor(reference[opSide])) { data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement]; } if (popper[opSide] > floor(reference[side])) { data.offsets.popper[opSide] = floor(reference[side]); } return data; } /** * Converts a string containing value + unit into a px value number * @function * @memberof {modifiers~offset} * @private * @argument {String} str - Value + unit string * @argument {String} measurement - `height` or `width` * @argument {Object} popperOffsets * @argument {Object} referenceOffsets * @returns {Number|String} * Value in pixels, or original string if no values were extracted */ function toValue(str, measurement, popperOffsets, referenceOffsets) { // separate value from unit var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); var value = +split[1]; var unit = split[2]; // If it's not a number it's an operator, I guess if (!value) { return str; } if (unit.indexOf('%') === 0) { var element = void 0; switch (unit) { case '%p': element = popperOffsets; break; case '%': case '%r': default: element = referenceOffsets; } var rect = getClientRect(element); return rect[measurement] / 100 * value; } else if (unit === 'vh' || unit === 'vw') { // if is a vh or vw, we calculate the size based on the viewport var size = void 0; if (unit === 'vh') { size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); } else { size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); } return size / 100 * value; } else { // if is an explicit pixel unit, we get rid of the unit and keep the value // if is an implicit unit, it's px, and we return just the value return value; } } /** * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. * @function * @memberof {modifiers~offset} * @private * @argument {String} offset * @argument {Object} popperOffsets * @argument {Object} referenceOffsets * @argument {String} basePlacement * @returns {Array} a two cells array with x and y offsets in numbers */ function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) { var offsets = [0, 0]; // Use height if placement is left or right and index is 0 otherwise use width // in this way the first offset will use an axis and the second one // will use the other one var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; // Split the offset string to obtain a list of values and operands // The regex addresses values with the plus or minus sign in front (+10, -20, etc) var fragments = offset.split(/(\+|\-)/).map(function (frag) { return frag.trim(); }); // Detect if the offset string contains a pair of values or a single one // they could be separated by comma or space var divider = fragments.indexOf(find(fragments, function (frag) { return frag.search(/,|\s/) !== -1; })); if (fragments[divider] && fragments[divider].indexOf(',') === -1) { console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); } // If divider is found, we divide the list of values and operands to divide // them by ofset X and Y. var splitRegex = /\s*,\s*|\s+/; var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; // Convert the values with units to absolute pixels to allow our computations ops = ops.map(function (op, index) { // Most of the units rely on the orientation of the popper var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width'; var mergeWithPrevious = false; return op // This aggregates any `+` or `-` sign that aren't considered operators // e.g.: 10 + +5 => [10, +, +5] .reduce(function (a, b) { if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { a[a.length - 1] = b; mergeWithPrevious = true; return a; } else if (mergeWithPrevious) { a[a.length - 1] += b; mergeWithPrevious = false; return a; } else { return a.concat(b); } }, []) // Here we convert the string values into number values (in px) .map(function (str) { return toValue(str, measurement, popperOffsets, referenceOffsets); }); }); // Loop trough the offsets arrays and execute the operations ops.forEach(function (op, index) { op.forEach(function (frag, index2) { if (isNumeric(frag)) { offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); } }); }); return offsets; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @argument {Number|String} options.offset=0 * The offset value as described in the modifier description * @returns {Object} The data object, properly modified */ function offset(data, _ref) { var offset = _ref.offset; var placement = data.placement, _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var basePlacement = placement.split('-')[0]; var offsets = void 0; if (isNumeric(+offset)) { offsets = [+offset, 0]; } else { offsets = parseOffset(offset, popper, reference, basePlacement); } if (basePlacement === 'left') { popper.top += offsets[0]; popper.left -= offsets[1]; } else if (basePlacement === 'right') { popper.top += offsets[0]; popper.left += offsets[1]; } else if (basePlacement === 'top') { popper.left += offsets[0]; popper.top -= offsets[1]; } else if (basePlacement === 'bottom') { popper.left += offsets[0]; popper.top += offsets[1]; } data.popper = popper; return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function preventOverflow(data, options) { var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); // If offsetParent is the reference element, we really want to // go one step up and use the next offsetParent as reference to // avoid to make this modifier completely useless and look like broken if (data.instance.reference === boundariesElement) { boundariesElement = getOffsetParent(boundariesElement); } // NOTE: DOM access here // resets the popper's position so that the document size can be calculated excluding // the size of the popper element itself var transformProp = getSupportedPropertyName('transform'); var popperStyles = data.instance.popper.style; // assignment to help minification var top = popperStyles.top, left = popperStyles.left, transform = popperStyles[transformProp]; popperStyles.top = ''; popperStyles.left = ''; popperStyles[transformProp] = ''; var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); // NOTE: DOM access here // restores the original style properties after the offsets have been computed popperStyles.top = top; popperStyles.left = left; popperStyles[transformProp] = transform; options.boundaries = boundaries; var order = options.priority; var popper = data.offsets.popper; var check = { primary: function primary(placement) { var value = popper[placement]; if (popper[placement] < boundaries[placement] && !options.escapeWithReference) { value = Math.max(popper[placement], boundaries[placement]); } return defineProperty({}, placement, value); }, secondary: function secondary(placement) { var mainSide = placement === 'right' ? 'left' : 'top'; var value = popper[mainSide]; if (popper[placement] > boundaries[placement] && !options.escapeWithReference) { value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height)); } return defineProperty({}, mainSide, value); } }; order.forEach(function (placement) { var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; popper = _extends({}, popper, check[side](placement)); }); data.offsets.popper = popper; return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function shift(data) { var placement = data.placement; var basePlacement = placement.split('-')[0]; var shiftvariation = placement.split('-')[1]; // if shift shiftvariation is specified, run the modifier if (shiftvariation) { var _data$offsets = data.offsets, reference = _data$offsets.reference, popper = _data$offsets.popper; var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; var side = isVertical ? 'left' : 'top'; var measurement = isVertical ? 'width' : 'height'; var shiftOffsets = { start: defineProperty({}, side, reference[side]), end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement]) }; data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]); } return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function hide(data) { if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { return data; } var refRect = data.offsets.reference; var bound = find(data.instance.modifiers, function (modifier) { return modifier.name === 'preventOverflow'; }).boundaries; if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) { // Avoid unnecessary DOM access if visibility hasn't changed if (data.hide === true) { return data; } data.hide = true; data.attributes['x-out-of-boundaries'] = ''; } else { // Avoid unnecessary DOM access if visibility hasn't changed if (data.hide === false) { return data; } data.hide = false; data.attributes['x-out-of-boundaries'] = false; } return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function inner(data) { var placement = data.placement; var basePlacement = placement.split('-')[0]; var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); data.placement = getOppositePlacement(placement); data.offsets.popper = getClientRect(popper); return data; } /** * Modifier function, each modifier can have a function of this type assigned * to its `fn` property.
* These functions will be called on each update, this means that you must * make sure they are performant enough to avoid performance bottlenecks. * * @function ModifierFn * @argument {dataObject} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {dataObject} The data object, properly modified */ /** * Modifiers are plugins used to alter the behavior of your poppers.
* Popper.js uses a set of 9 modifiers to provide all the basic functionalities * needed by the library. * * Usually you don't want to override the `order`, `fn` and `onLoad` props. * All the other properties are configurations that could be tweaked. * @namespace modifiers */ var modifiers = { /** * Modifier used to shift the popper on the start or end of its reference * element.
* It will read the variation of the `placement` property.
* It can be one either `-end` or `-start`. * @memberof modifiers * @inner */ shift: { /** @prop {number} order=100 - Index used to define the order of execution */ order: 100, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: shift }, /** * The `offset` modifier can shift your popper on both its axis. * * It accepts the following units: * - `px` or unit-less, interpreted as pixels * - `%` or `%r`, percentage relative to the length of the reference element * - `%p`, percentage relative to the length of the popper element * - `vw`, CSS viewport width unit * - `vh`, CSS viewport height unit * * For length is intended the main axis relative to the placement of the popper.
* This means that if the placement is `top` or `bottom`, the length will be the * `width`. In case of `left` or `right`, it will be the `height`. * * You can provide a single value (as `Number` or `String`), or a pair of values * as `String` divided by a comma or one (or more) white spaces.
* The latter is a deprecated method because it leads to confusion and will be * removed in v2.
* Additionally, it accepts additions and subtractions between different units. * Note that multiplications and divisions aren't supported. * * Valid examples are: * ``` * 10 * '10%' * '10, 10' * '10%, 10' * '10 + 10%' * '10 - 5vh + 3%' * '-10px + 5vh, 5px - 6%' * ``` * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap * > with their reference element, unfortunately, you will have to disable the `flip` modifier. * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373). * * @memberof modifiers * @inner */ offset: { /** @prop {number} order=200 - Index used to define the order of execution */ order: 200, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: offset, /** @prop {Number|String} offset=0 * The offset value as described in the modifier description */ offset: 0 }, /** * Modifier used to prevent the popper from being positioned outside the boundary. * * A scenario exists where the reference itself is not within the boundaries.
* We can say it has "escaped the boundaries" — or just "escaped".
* In this case we need to decide whether the popper should either: * * - detach from the reference and remain "trapped" in the boundaries, or * - if it should ignore the boundary and "escape with its reference" * * When `escapeWithReference` is set to`true` and reference is completely * outside its boundaries, the popper will overflow (or completely leave) * the boundaries in order to remain attached to the edge of the reference. * * @memberof modifiers * @inner */ preventOverflow: { /** @prop {number} order=300 - Index used to define the order of execution */ order: 300, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: preventOverflow, /** * @prop {Array} [priority=['left','right','top','bottom']] * Popper will try to prevent overflow following these priorities by default, * then, it could overflow on the left and on top of the `boundariesElement` */ priority: ['left', 'right', 'top', 'bottom'], /** * @prop {number} padding=5 * Amount of pixel used to define a minimum distance between the boundaries * and the popper. This makes sure the popper always has a little padding * between the edges of its container */ padding: 5, /** * @prop {String|HTMLElement} boundariesElement='scrollParent' * Boundaries used by the modifier. Can be `scrollParent`, `window`, * `viewport` or any DOM element. */ boundariesElement: 'scrollParent' }, /** * Modifier used to make sure the reference and its popper stay near each other * without leaving any gap between the two. Especially useful when the arrow is * enabled and you want to ensure that it points to its reference element. * It cares only about the first axis. You can still have poppers with margin * between the popper and its reference element. * @memberof modifiers * @inner */ keepTogether: { /** @prop {number} order=400 - Index used to define the order of execution */ order: 400, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: keepTogether }, /** * This modifier is used to move the `arrowElement` of the popper to make * sure it is positioned between the reference element and its popper element. * It will read the outer size of the `arrowElement` node to detect how many * pixels of conjunction are needed. * * It has no effect if no `arrowElement` is provided. * @memberof modifiers * @inner */ arrow: { /** @prop {number} order=500 - Index used to define the order of execution */ order: 500, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: arrow, /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ element: '[x-arrow]' }, /** * Modifier used to flip the popper's placement when it starts to overlap its * reference element. * * Requires the `preventOverflow` modifier before it in order to work. * * **NOTE:** this modifier will interrupt the current update cycle and will * restart it if it detects the need to flip the placement. * @memberof modifiers * @inner */ flip: { /** @prop {number} order=600 - Index used to define the order of execution */ order: 600, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: flip, /** * @prop {String|Array} behavior='flip' * The behavior used to change the popper's placement. It can be one of * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid * placements (with optional variations) */ behavior: 'flip', /** * @prop {number} padding=5 * The popper will flip if it hits the edges of the `boundariesElement` */ padding: 5, /** * @prop {String|HTMLElement} boundariesElement='viewport' * The element which will define the boundaries of the popper position. * The popper will never be placed outside of the defined boundaries * (except if `keepTogether` is enabled) */ boundariesElement: 'viewport', /** * @prop {Boolean} flipVariations=false * The popper will switch placement variation between `-start` and `-end` when * the reference element overlaps its boundaries. * * The original placement should have a set variation. */ flipVariations: false, /** * @prop {Boolean} flipVariationsByContent=false * The popper will switch placement variation between `-start` and `-end` when * the popper element overlaps its reference boundaries. * * The original placement should have a set variation. */ flipVariationsByContent: false }, /** * Modifier used to make the popper flow toward the inner of the reference element. * By default, when this modifier is disabled, the popper will be placed outside * the reference element. * @memberof modifiers * @inner */ inner: { /** @prop {number} order=700 - Index used to define the order of execution */ order: 700, /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ enabled: false, /** @prop {ModifierFn} */ fn: inner }, /** * Modifier used to hide the popper when its reference element is outside of the * popper boundaries. It will set a `x-out-of-boundaries` attribute which can * be used to hide with a CSS selector the popper when its reference is * out of boundaries. * * Requires the `preventOverflow` modifier before it in order to work. * @memberof modifiers * @inner */ hide: { /** @prop {number} order=800 - Index used to define the order of execution */ order: 800, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: hide }, /** * Computes the style that will be applied to the popper element to gets * properly positioned. * * Note that this modifier will not touch the DOM, it just prepares the styles * so that `applyStyle` modifier can apply it. This separation is useful * in case you need to replace `applyStyle` with a custom implementation. * * This modifier has `850` as `order` value to maintain backward compatibility * with previous versions of Popper.js. Expect the modifiers ordering method * to change in future major versions of the library. * * @memberof modifiers * @inner */ computeStyle: { /** @prop {number} order=850 - Index used to define the order of execution */ order: 850, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: computeStyle, /** * @prop {Boolean} gpuAcceleration=true * If true, it uses the CSS 3D transformation to position the popper. * Otherwise, it will use the `top` and `left` properties */ gpuAcceleration: true, /** * @prop {string} [x='bottom'] * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. * Change this if your popper should grow in a direction different from `bottom` */ x: 'bottom', /** * @prop {string} [x='left'] * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. * Change this if your popper should grow in a direction different from `right` */ y: 'right' }, /** * Applies the computed styles to the popper element. * * All the DOM manipulations are limited to this modifier. This is useful in case * you want to integrate Popper.js inside a framework or view library and you * want to delegate all the DOM manipulations to it. * * Note that if you disable this modifier, you must make sure the popper element * has its position set to `absolute` before Popper.js can do its work! * * Just disable this modifier and define your own to achieve the desired effect. * * @memberof modifiers * @inner */ applyStyle: { /** @prop {number} order=900 - Index used to define the order of execution */ order: 900, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: applyStyle, /** @prop {Function} */ onLoad: applyStyleOnLoad, /** * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier * @prop {Boolean} gpuAcceleration=true * If true, it uses the CSS 3D transformation to position the popper. * Otherwise, it will use the `top` and `left` properties */ gpuAcceleration: undefined } }; /** * The `dataObject` is an object containing all the information used by Popper.js. * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks. * @name dataObject * @property {Object} data.instance The Popper.js instance * @property {String} data.placement Placement applied to popper * @property {String} data.originalPlacement Placement originally defined on init * @property {Boolean} data.flipped True if popper has been flipped by flip modifier * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`) * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`) * @property {Object} data.boundaries Offsets of the popper boundaries * @property {Object} data.offsets The measurements of popper, reference and arrow elements * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 */ /** * Default options provided to Popper.js constructor.
* These can be overridden using the `options` argument of Popper.js.
* To override an option, simply pass an object with the same * structure of the `options` object, as the 3rd argument. For example: * ``` * new Popper(ref, pop, { * modifiers: { * preventOverflow: { enabled: false } * } * }) * ``` * @type {Object} * @static * @memberof Popper */ var Defaults = { /** * Popper's placement. * @prop {Popper.placements} placement='bottom' */ placement: 'bottom', /** * Set this to true if you want popper to position it self in 'fixed' mode * @prop {Boolean} positionFixed=false */ positionFixed: false, /** * Whether events (resize, scroll) are initially enabled. * @prop {Boolean} eventsEnabled=true */ eventsEnabled: true, /** * Set to true if you want to automatically remove the popper when * you call the `destroy` method. * @prop {Boolean} removeOnDestroy=false */ removeOnDestroy: false, /** * Callback called when the popper is created.
* By default, it is set to no-op.
* Access Popper.js instance with `data.instance`. * @prop {onCreate} */ onCreate: function onCreate() {}, /** * Callback called when the popper is updated. This callback is not called * on the initialization/creation of the popper, but only on subsequent * updates.
* By default, it is set to no-op.
* Access Popper.js instance with `data.instance`. * @prop {onUpdate} */ onUpdate: function onUpdate() {}, /** * List of modifiers used to modify the offsets before they are applied to the popper. * They provide most of the functionalities of Popper.js. * @prop {modifiers} */ modifiers: modifiers }; /** * @callback onCreate * @param {dataObject} data */ /** * @callback onUpdate * @param {dataObject} data */ // Utils // Methods var Popper = function () { /** * Creates a new Popper.js instance. * @class Popper * @param {Element|referenceObject} reference - The reference element used to position the popper * @param {Element} popper - The HTML / XML element used as the popper * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) * @return {Object} instance - The generated Popper.js instance */ function Popper(reference, popper) { var _this = this; var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; classCallCheck(this, Popper); this.scheduleUpdate = function () { return requestAnimationFrame(_this.update); }; // make update() debounced, so that it only runs at most once-per-tick this.update = debounce(this.update.bind(this)); // with {} we create a new object with the options inside it this.options = _extends({}, Popper.Defaults, options); // init state this.state = { isDestroyed: false, isCreated: false, scrollParents: [] }; // get reference and popper elements (allow jQuery wrappers) this.reference = reference && reference.jquery ? reference[0] : reference; this.popper = popper && popper.jquery ? popper[0] : popper; // Deep merge modifiers options this.options.modifiers = {}; Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) { _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {}); }); // Refactoring modifiers' list (Object => Array) this.modifiers = Object.keys(this.options.modifiers).map(function (name) { return _extends({ name: name }, _this.options.modifiers[name]); }) // sort the modifiers by order .sort(function (a, b) { return a.order - b.order; }); // modifiers have the ability to execute arbitrary code when Popper.js get inited // such code is executed in the same order of its modifier // they could add new properties to their options configuration // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`! this.modifiers.forEach(function (modifierOptions) { if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) { modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state); } }); // fire the first update to position the popper in the right place this.update(); var eventsEnabled = this.options.eventsEnabled; if (eventsEnabled) { // setup event listeners, they will take care of update the position in specific situations this.enableEventListeners(); } this.state.eventsEnabled = eventsEnabled; } // We can't use class properties because they don't get listed in the // class prototype and break stuff like Sinon stubs createClass(Popper, [{ key: 'update', value: function update$$1() { return update.call(this); } }, { key: 'destroy', value: function destroy$$1() { return destroy.call(this); } }, { key: 'enableEventListeners', value: function enableEventListeners$$1() { return enableEventListeners.call(this); } }, { key: 'disableEventListeners', value: function disableEventListeners$$1() { return disableEventListeners.call(this); } /** * Schedules an update. It will run on the next UI update available. * @method scheduleUpdate * @memberof Popper */ /** * Collection of utilities useful when writing custom modifiers. * Starting from version 1.7, this method is available only if you * include `popper-utils.js` before `popper.js`. * * **DEPRECATION**: This way to access PopperUtils is deprecated * and will be removed in v2! Use the PopperUtils module directly instead. * Due to the high instability of the methods contained in Utils, we can't * guarantee them to follow semver. Use them at your own risk! * @static * @private * @type {Object} * @deprecated since version 1.8 * @member Utils * @memberof Popper */ }]); return Popper; }(); /** * The `referenceObject` is an object that provides an interface compatible with Popper.js * and lets you use it as replacement of a real DOM node.
* You can use this method to position a popper relatively to a set of coordinates * in case you don't have a DOM node to use as reference. * * ``` * new Popper(referenceObject, popperNode); * ``` * * NB: This feature isn't supported in Internet Explorer 10. * @name referenceObject * @property {Function} data.getBoundingClientRect * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. * @property {number} data.clientWidth * An ES6 getter that will return the width of the virtual reference element. * @property {number} data.clientHeight * An ES6 getter that will return the height of the virtual reference element. */ Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils; Popper.placements = placements; Popper.Defaults = Defaults; /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$4 = 'dropdown'; var VERSION$4 = '4.5.0'; var DATA_KEY$4 = 'bs.dropdown'; var EVENT_KEY$4 = "." + DATA_KEY$4; var DATA_API_KEY$4 = '.data-api'; var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4]; var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); var EVENT_HIDE$1 = "hide" + EVENT_KEY$4; var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$4; var EVENT_SHOW$1 = "show" + EVENT_KEY$4; var EVENT_SHOWN$1 = "shown" + EVENT_KEY$4; var EVENT_CLICK = "click" + EVENT_KEY$4; var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$4 + DATA_API_KEY$4; var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$4 + DATA_API_KEY$4; var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$4 + DATA_API_KEY$4; var CLASS_NAME_DISABLED = 'disabled'; var CLASS_NAME_SHOW$2 = 'show'; var CLASS_NAME_DROPUP = 'dropup'; var CLASS_NAME_DROPRIGHT = 'dropright'; var CLASS_NAME_DROPLEFT = 'dropleft'; var CLASS_NAME_MENURIGHT = 'dropdown-menu-right'; var CLASS_NAME_POSITION_STATIC = 'position-static'; var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]'; var SELECTOR_FORM_CHILD = '.dropdown form'; var SELECTOR_MENU = '.dropdown-menu'; var SELECTOR_NAVBAR_NAV = '.navbar-nav'; var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; var PLACEMENT_TOP = 'top-start'; var PLACEMENT_TOPEND = 'top-end'; var PLACEMENT_BOTTOM = 'bottom-start'; var PLACEMENT_BOTTOMEND = 'bottom-end'; var PLACEMENT_RIGHT = 'right-start'; var PLACEMENT_LEFT = 'left-start'; var Default$2 = { offset: 0, flip: true, boundary: 'scrollParent', reference: 'toggle', display: 'dynamic', popperConfig: null }; var DefaultType$2 = { offset: '(number|string|function)', flip: 'boolean', boundary: '(string|element)', reference: '(string|element)', display: 'string', popperConfig: '(null|object)' }; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ var Dropdown = /*#__PURE__*/function () { function Dropdown(element, config) { this._element = element; this._popper = null; this._config = this._getConfig(config); this._menu = this._getMenuElement(); this._inNavbar = this._detectNavbar(); this._addEventListeners(); } // Getters var _proto = Dropdown.prototype; // Public _proto.toggle = function toggle() { if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) { return; } var isActive = $(this._menu).hasClass(CLASS_NAME_SHOW$2); Dropdown._clearMenus(); if (isActive) { return; } this.show(true); }; _proto.show = function show(usePopper) { if (usePopper === void 0) { usePopper = false; } if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW$2)) { return; } var relatedTarget = { relatedTarget: this._element }; var showEvent = $.Event(EVENT_SHOW$1, relatedTarget); var parent = Dropdown._getParentFromElement(this._element); $(parent).trigger(showEvent); if (showEvent.isDefaultPrevented()) { return; } // Disable totally Popper.js for Dropdown in Navbar if (!this._inNavbar && usePopper) { /** * Check for Popper dependency * Popper - https://popper.js.org */ if (typeof Popper === 'undefined') { throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); } var referenceElement = this._element; if (this._config.reference === 'parent') { referenceElement = parent; } else if (Util.isElement(this._config.reference)) { referenceElement = this._config.reference; // Check if it's jQuery element if (typeof this._config.reference.jquery !== 'undefined') { referenceElement = this._config.reference[0]; } } // If boundary is not `scrollParent`, then set position to `static` // to allow the menu to "escape" the scroll parent's boundaries // https://github.com/twbs/bootstrap/issues/24251 if (this._config.boundary !== 'scrollParent') { $(parent).addClass(CLASS_NAME_POSITION_STATIC); } this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); } // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; // only needed because of broken event delegation on iOS // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html if ('ontouchstart' in document.documentElement && $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) { $(document.body).children().on('mouseover', null, $.noop); } this._element.focus(); this._element.setAttribute('aria-expanded', true); $(this._menu).toggleClass(CLASS_NAME_SHOW$2); $(parent).toggleClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_SHOWN$1, relatedTarget)); }; _proto.hide = function hide() { if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW$2)) { return; } var relatedTarget = { relatedTarget: this._element }; var hideEvent = $.Event(EVENT_HIDE$1, relatedTarget); var parent = Dropdown._getParentFromElement(this._element); $(parent).trigger(hideEvent); if (hideEvent.isDefaultPrevented()) { return; } if (this._popper) { this._popper.destroy(); } $(this._menu).toggleClass(CLASS_NAME_SHOW$2); $(parent).toggleClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_HIDDEN$1, relatedTarget)); }; _proto.dispose = function dispose() { $.removeData(this._element, DATA_KEY$4); $(this._element).off(EVENT_KEY$4); this._element = null; this._menu = null; if (this._popper !== null) { this._popper.destroy(); this._popper = null; } }; _proto.update = function update() { this._inNavbar = this._detectNavbar(); if (this._popper !== null) { this._popper.scheduleUpdate(); } } // Private ; _proto._addEventListeners = function _addEventListeners() { var _this = this; $(this._element).on(EVENT_CLICK, function (event) { event.preventDefault(); event.stopPropagation(); _this.toggle(); }); }; _proto._getConfig = function _getConfig(config) { config = _objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), $(this._element).data()), config); Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType); return config; }; _proto._getMenuElement = function _getMenuElement() { if (!this._menu) { var parent = Dropdown._getParentFromElement(this._element); if (parent) { this._menu = parent.querySelector(SELECTOR_MENU); } } return this._menu; }; _proto._getPlacement = function _getPlacement() { var $parentDropdown = $(this._element.parentNode); var placement = PLACEMENT_BOTTOM; // Handle dropup if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) { placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP; } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) { placement = PLACEMENT_RIGHT; } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) { placement = PLACEMENT_LEFT; } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) { placement = PLACEMENT_BOTTOMEND; } return placement; }; _proto._detectNavbar = function _detectNavbar() { return $(this._element).closest('.navbar').length > 0; }; _proto._getOffset = function _getOffset() { var _this2 = this; var offset = {}; if (typeof this._config.offset === 'function') { offset.fn = function (data) { data.offsets = _objectSpread2(_objectSpread2({}, data.offsets), _this2._config.offset(data.offsets, _this2._element) || {}); return data; }; } else { offset.offset = this._config.offset; } return offset; }; _proto._getPopperConfig = function _getPopperConfig() { var popperConfig = { placement: this._getPlacement(), modifiers: { offset: this._getOffset(), flip: { enabled: this._config.flip }, preventOverflow: { boundariesElement: this._config.boundary } } }; // Disable Popper.js if we have a static display if (this._config.display === 'static') { popperConfig.modifiers.applyStyle = { enabled: false }; } return _objectSpread2(_objectSpread2({}, popperConfig), this._config.popperConfig); } // Static ; Dropdown._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var data = $(this).data(DATA_KEY$4); var _config = typeof config === 'object' ? config : null; if (!data) { data = new Dropdown(this, _config); $(this).data(DATA_KEY$4, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](); } }); }; Dropdown._clearMenus = function _clearMenus(event) { if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { return; } var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2)); for (var i = 0, len = toggles.length; i < len; i++) { var parent = Dropdown._getParentFromElement(toggles[i]); var context = $(toggles[i]).data(DATA_KEY$4); var relatedTarget = { relatedTarget: toggles[i] }; if (event && event.type === 'click') { relatedTarget.clickEvent = event; } if (!context) { continue; } var dropdownMenu = context._menu; if (!$(parent).hasClass(CLASS_NAME_SHOW$2)) { continue; } if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { continue; } var hideEvent = $.Event(EVENT_HIDE$1, relatedTarget); $(parent).trigger(hideEvent); if (hideEvent.isDefaultPrevented()) { continue; } // If this is a touch-enabled device we remove the extra // empty mouseover listeners we added for iOS support if ('ontouchstart' in document.documentElement) { $(document.body).children().off('mouseover', null, $.noop); } toggles[i].setAttribute('aria-expanded', 'false'); if (context._popper) { context._popper.destroy(); } $(dropdownMenu).removeClass(CLASS_NAME_SHOW$2); $(parent).removeClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_HIDDEN$1, relatedTarget)); } }; Dropdown._getParentFromElement = function _getParentFromElement(element) { var parent; var selector = Util.getSelectorFromElement(element); if (selector) { parent = document.querySelector(selector); } return parent || element.parentNode; } // eslint-disable-next-line complexity ; Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { // If not input/textarea: // - And not a key in REGEXP_KEYDOWN => not a dropdown command // If input/textarea: // - If space key => not a dropdown command // - If key is other than escape // - If key is not up or down => not a dropdown command // - If trigger inside the menu => not a dropdown command if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { return; } if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) { return; } var parent = Dropdown._getParentFromElement(this); var isActive = $(parent).hasClass(CLASS_NAME_SHOW$2); if (!isActive && event.which === ESCAPE_KEYCODE) { return; } event.preventDefault(); event.stopPropagation(); if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { if (event.which === ESCAPE_KEYCODE) { $(parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus'); } $(this).trigger('click'); return; } var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) { return $(item).is(':visible'); }); if (items.length === 0) { return; } var index = items.indexOf(event.target); if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up index--; } if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down index++; } if (index < 0) { index = 0; } items[index].focus(); }; _createClass(Dropdown, null, [{ key: "VERSION", get: function get() { return VERSION$4; } }, { key: "Default", get: function get() { return Default$2; } }, { key: "DefaultType", get: function get() { return DefaultType$2; } }]); return Dropdown; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$4 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$2, function (event) { event.preventDefault(); event.stopPropagation(); Dropdown._jQueryInterface.call($(this), 'toggle'); }).on(EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function (e) { e.stopPropagation(); }); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME$4] = Dropdown._jQueryInterface; $.fn[NAME$4].Constructor = Dropdown; $.fn[NAME$4].noConflict = function () { $.fn[NAME$4] = JQUERY_NO_CONFLICT$4; return Dropdown._jQueryInterface; }; /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$5 = 'modal'; var VERSION$5 = '4.5.0'; var DATA_KEY$5 = 'bs.modal'; var EVENT_KEY$5 = "." + DATA_KEY$5; var DATA_API_KEY$5 = '.data-api'; var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5]; var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key var Default$3 = { backdrop: true, keyboard: true, focus: true, show: true }; var DefaultType$3 = { backdrop: '(boolean|string)', keyboard: 'boolean', focus: 'boolean', show: 'boolean' }; var EVENT_HIDE$2 = "hide" + EVENT_KEY$5; var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5; var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5; var EVENT_SHOW$2 = "show" + EVENT_KEY$5; var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5; var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5; var EVENT_RESIZE = "resize" + EVENT_KEY$5; var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY$5; var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5; var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5; var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5; var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$5 + DATA_API_KEY$5; var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'; var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'; var CLASS_NAME_BACKDROP = 'modal-backdrop'; var CLASS_NAME_OPEN = 'modal-open'; var CLASS_NAME_FADE$1 = 'fade'; var CLASS_NAME_SHOW$3 = 'show'; var CLASS_NAME_STATIC = 'modal-static'; var SELECTOR_DIALOG = '.modal-dialog'; var SELECTOR_MODAL_BODY = '.modal-body'; var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="modal"]'; var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]'; var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; var SELECTOR_STICKY_CONTENT = '.sticky-top'; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ var Modal = /*#__PURE__*/function () { function Modal(element, config) { this._config = this._getConfig(config); this._element = element; this._dialog = element.querySelector(SELECTOR_DIALOG); this._backdrop = null; this._isShown = false; this._isBodyOverflowing = false; this._ignoreBackdropClick = false; this._isTransitioning = false; this._scrollbarWidth = 0; } // Getters var _proto = Modal.prototype; // Public _proto.toggle = function toggle(relatedTarget) { return this._isShown ? this.hide() : this.show(relatedTarget); }; _proto.show = function show(relatedTarget) { var _this = this; if (this._isShown || this._isTransitioning) { return; } if ($(this._element).hasClass(CLASS_NAME_FADE$1)) { this._isTransitioning = true; } var showEvent = $.Event(EVENT_SHOW$2, { relatedTarget: relatedTarget }); $(this._element).trigger(showEvent); if (this._isShown || showEvent.isDefaultPrevented()) { return; } this._isShown = true; this._checkScrollbar(); this._setScrollbar(); this._adjustDialog(); this._setEscapeEvent(); this._setResizeEvent(); $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) { return _this.hide(event); }); $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () { $(_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) { if ($(event.target).is(_this._element)) { _this._ignoreBackdropClick = true; } }); }); this._showBackdrop(function () { return _this._showElement(relatedTarget); }); }; _proto.hide = function hide(event) { var _this2 = this; if (event) { event.preventDefault(); } if (!this._isShown || this._isTransitioning) { return; } var hideEvent = $.Event(EVENT_HIDE$2); $(this._element).trigger(hideEvent); if (!this._isShown || hideEvent.isDefaultPrevented()) { return; } this._isShown = false; var transition = $(this._element).hasClass(CLASS_NAME_FADE$1); if (transition) { this._isTransitioning = true; } this._setEscapeEvent(); this._setResizeEvent(); $(document).off(EVENT_FOCUSIN); $(this._element).removeClass(CLASS_NAME_SHOW$3); $(this._element).off(EVENT_CLICK_DISMISS); $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS); if (transition) { var transitionDuration = Util.getTransitionDurationFromElement(this._element); $(this._element).one(Util.TRANSITION_END, function (event) { return _this2._hideModal(event); }).emulateTransitionEnd(transitionDuration); } else { this._hideModal(); } }; _proto.dispose = function dispose() { [window, this._element, this._dialog].forEach(function (htmlElement) { return $(htmlElement).off(EVENT_KEY$5); }); /** * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API` * Do not move `document` in `htmlElements` array * It will remove `EVENT_CLICK_DATA_API` event that should remain */ $(document).off(EVENT_FOCUSIN); $.removeData(this._element, DATA_KEY$5); this._config = null; this._element = null; this._dialog = null; this._backdrop = null; this._isShown = null; this._isBodyOverflowing = null; this._ignoreBackdropClick = null; this._isTransitioning = null; this._scrollbarWidth = null; }; _proto.handleUpdate = function handleUpdate() { this._adjustDialog(); } // Private ; _proto._getConfig = function _getConfig(config) { config = _objectSpread2(_objectSpread2({}, Default$3), config); Util.typeCheckConfig(NAME$5, config, DefaultType$3); return config; }; _proto._triggerBackdropTransition = function _triggerBackdropTransition() { var _this3 = this; if (this._config.backdrop === 'static') { var hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED); $(this._element).trigger(hideEventPrevented); if (hideEventPrevented.defaultPrevented) { return; } this._element.classList.add(CLASS_NAME_STATIC); var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element); $(this._element).one(Util.TRANSITION_END, function () { _this3._element.classList.remove(CLASS_NAME_STATIC); }).emulateTransitionEnd(modalTransitionDuration); this._element.focus(); } else { this.hide(); } }; _proto._showElement = function _showElement(relatedTarget) { var _this4 = this; var transition = $(this._element).hasClass(CLASS_NAME_FADE$1); var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null; if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { // Don't move modal's DOM position document.body.appendChild(this._element); } this._element.style.display = 'block'; this._element.removeAttribute('aria-hidden'); this._element.setAttribute('aria-modal', true); if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) { modalBody.scrollTop = 0; } else { this._element.scrollTop = 0; } if (transition) { Util.reflow(this._element); } $(this._element).addClass(CLASS_NAME_SHOW$3); if (this._config.focus) { this._enforceFocus(); } var shownEvent = $.Event(EVENT_SHOWN$2, { relatedTarget: relatedTarget }); var transitionComplete = function transitionComplete() { if (_this4._config.focus) { _this4._element.focus(); } _this4._isTransitioning = false; $(_this4._element).trigger(shownEvent); }; if (transition) { var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); } else { transitionComplete(); } }; _proto._enforceFocus = function _enforceFocus() { var _this5 = this; $(document).off(EVENT_FOCUSIN) // Guard against infinite focus loop .on(EVENT_FOCUSIN, function (event) { if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) { _this5._element.focus(); } }); }; _proto._setEscapeEvent = function _setEscapeEvent() { var _this6 = this; if (this._isShown) { $(this._element).on(EVENT_KEYDOWN_DISMISS, function (event) { if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) { event.preventDefault(); _this6.hide(); } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) { _this6._triggerBackdropTransition(); } }); } else if (!this._isShown) { $(this._element).off(EVENT_KEYDOWN_DISMISS); } }; _proto._setResizeEvent = function _setResizeEvent() { var _this7 = this; if (this._isShown) { $(window).on(EVENT_RESIZE, function (event) { return _this7.handleUpdate(event); }); } else { $(window).off(EVENT_RESIZE); } }; _proto._hideModal = function _hideModal() { var _this8 = this; this._element.style.display = 'none'; this._element.setAttribute('aria-hidden', true); this._element.removeAttribute('aria-modal'); this._isTransitioning = false; this._showBackdrop(function () { $(document.body).removeClass(CLASS_NAME_OPEN); _this8._resetAdjustments(); _this8._resetScrollbar(); $(_this8._element).trigger(EVENT_HIDDEN$2); }); }; _proto._removeBackdrop = function _removeBackdrop() { if (this._backdrop) { $(this._backdrop).remove(); this._backdrop = null; } }; _proto._showBackdrop = function _showBackdrop(callback) { var _this9 = this; var animate = $(this._element).hasClass(CLASS_NAME_FADE$1) ? CLASS_NAME_FADE$1 : ''; if (this._isShown && this._config.backdrop) { this._backdrop = document.createElement('div'); this._backdrop.className = CLASS_NAME_BACKDROP; if (animate) { this._backdrop.classList.add(animate); } $(this._backdrop).appendTo(document.body); $(this._element).on(EVENT_CLICK_DISMISS, function (event) { if (_this9._ignoreBackdropClick) { _this9._ignoreBackdropClick = false; return; } if (event.target !== event.currentTarget) { return; } _this9._triggerBackdropTransition(); }); if (animate) { Util.reflow(this._backdrop); } $(this._backdrop).addClass(CLASS_NAME_SHOW$3); if (!callback) { return; } if (!animate) { callback(); return; } var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); } else if (!this._isShown && this._backdrop) { $(this._backdrop).removeClass(CLASS_NAME_SHOW$3); var callbackRemove = function callbackRemove() { _this9._removeBackdrop(); if (callback) { callback(); } }; if ($(this._element).hasClass(CLASS_NAME_FADE$1)) { var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); } else { callbackRemove(); } } else if (callback) { callback(); } } // ---------------------------------------------------------------------- // the following methods are used to handle overflowing modals // todo (fat): these should probably be refactored out of modal.js // ---------------------------------------------------------------------- ; _proto._adjustDialog = function _adjustDialog() { var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; if (!this._isBodyOverflowing && isModalOverflowing) { this._element.style.paddingLeft = this._scrollbarWidth + "px"; } if (this._isBodyOverflowing && !isModalOverflowing) { this._element.style.paddingRight = this._scrollbarWidth + "px"; } }; _proto._resetAdjustments = function _resetAdjustments() { this._element.style.paddingLeft = ''; this._element.style.paddingRight = ''; }; _proto._checkScrollbar = function _checkScrollbar() { var rect = document.body.getBoundingClientRect(); this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth; this._scrollbarWidth = this._getScrollbarWidth(); }; _proto._setScrollbar = function _setScrollbar() { var _this10 = this; if (this._isBodyOverflowing) { // Note: DOMNode.style.paddingRight returns the actual value or '' if not set // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)); var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding $(fixedContent).each(function (index, element) { var actualPadding = element.style.paddingRight; var calculatedPadding = $(element).css('padding-right'); $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px"); }); // Adjust sticky content margin $(stickyContent).each(function (index, element) { var actualMargin = element.style.marginRight; var calculatedMargin = $(element).css('margin-right'); $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px"); }); // Adjust body padding var actualPadding = document.body.style.paddingRight; var calculatedPadding = $(document.body).css('padding-right'); $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); } $(document.body).addClass(CLASS_NAME_OPEN); }; _proto._resetScrollbar = function _resetScrollbar() { // Restore fixed content padding var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)); $(fixedContent).each(function (index, element) { var padding = $(element).data('padding-right'); $(element).removeData('padding-right'); element.style.paddingRight = padding ? padding : ''; }); // Restore sticky content var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT)); $(elements).each(function (index, element) { var margin = $(element).data('margin-right'); if (typeof margin !== 'undefined') { $(element).css('margin-right', margin).removeData('margin-right'); } }); // Restore body padding var padding = $(document.body).data('padding-right'); $(document.body).removeData('padding-right'); document.body.style.paddingRight = padding ? padding : ''; }; _proto._getScrollbarWidth = function _getScrollbarWidth() { // thx d.walsh var scrollDiv = document.createElement('div'); scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER; document.body.appendChild(scrollDiv); var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; document.body.removeChild(scrollDiv); return scrollbarWidth; } // Static ; Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { return this.each(function () { var data = $(this).data(DATA_KEY$5); var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$3), $(this).data()), typeof config === 'object' && config ? config : {}); if (!data) { data = new Modal(this, _config); $(this).data(DATA_KEY$5, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](relatedTarget); } else if (_config.show) { data.show(relatedTarget); } }); }; _createClass(Modal, null, [{ key: "VERSION", get: function get() { return VERSION$5; } }, { key: "Default", get: function get() { return Default$3; } }]); return Modal; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE$3, function (event) { var _this11 = this; var target; var selector = Util.getSelectorFromElement(this); if (selector) { target = document.querySelector(selector); } var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2(_objectSpread2({}, $(target).data()), $(this).data()); if (this.tagName === 'A' || this.tagName === 'AREA') { event.preventDefault(); } var $target = $(target).one(EVENT_SHOW$2, function (showEvent) { if (showEvent.isDefaultPrevented()) { // Only register focus restorer if modal will actually get shown return; } $target.one(EVENT_HIDDEN$2, function () { if ($(_this11).is(':visible')) { _this11.focus(); } }); }); Modal._jQueryInterface.call($(target), config, this); }); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME$5] = Modal._jQueryInterface; $.fn[NAME$5].Constructor = Modal; $.fn[NAME$5].noConflict = function () { $.fn[NAME$5] = JQUERY_NO_CONFLICT$5; return Modal._jQueryInterface; }; /** * -------------------------------------------------------------------------- * Bootstrap (v4.5.0): tools/sanitizer.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']; var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; var DefaultWhitelist = { // Global attributes allowed on any supplied element below. '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], a: ['target', 'href', 'title', 'rel'], area: [], b: [], br: [], col: [], code: [], div: [], em: [], hr: [], h1: [], h2: [], h3: [], h4: [], h5: [], h6: [], i: [], img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], li: [], ol: [], p: [], pre: [], s: [], small: [], span: [], sub: [], sup: [], strong: [], u: [], ul: [] }; /** * A pattern that recognizes a commonly useful subset of URLs that are safe. * * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts */ var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi; /** * A pattern that matches safe data URLs. Only matches image, video and audio types. * * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts */ var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; function allowedAttribute(attr, allowedAttributeList) { var attrName = attr.nodeName.toLowerCase(); if (allowedAttributeList.indexOf(attrName) !== -1) { if (uriAttrs.indexOf(attrName) !== -1) { return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)); } return true; } var regExp = allowedAttributeList.filter(function (attrRegex) { return attrRegex instanceof RegExp; }); // Check if a regular expression validates the attribute. for (var i = 0, len = regExp.length; i < len; i++) { if (attrName.match(regExp[i])) { return true; } } return false; } function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { if (unsafeHtml.length === 0) { return unsafeHtml; } if (sanitizeFn && typeof sanitizeFn === 'function') { return sanitizeFn(unsafeHtml); } var domParser = new window.DOMParser(); var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); var whitelistKeys = Object.keys(whiteList); var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); var _loop = function _loop(i, len) { var el = elements[i]; var elName = el.nodeName.toLowerCase(); if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { el.parentNode.removeChild(el); return "continue"; } var attributeList = [].slice.call(el.attributes); var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); attributeList.forEach(function (attr) { if (!allowedAttribute(attr, whitelistedAttributes)) { el.removeAttribute(attr.nodeName); } }); }; for (var i = 0, len = elements.length; i < len; i++) { var _ret = _loop(i); if (_ret === "continue") continue; } return createdDocument.body.innerHTML; } /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$6 = 'tooltip'; var VERSION$6 = '4.5.0'; var DATA_KEY$6 = 'bs.tooltip'; var EVENT_KEY$6 = "." + DATA_KEY$6; var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6]; var CLASS_PREFIX = 'bs-tooltip'; var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; var DefaultType$4 = { animation: 'boolean', template: 'string', title: '(string|element|function)', trigger: 'string', delay: '(number|object)', html: 'boolean', selector: '(string|boolean)', placement: '(string|function)', offset: '(number|string|function)', container: '(string|element|boolean)', fallbackPlacement: '(string|array)', boundary: '(string|element)', sanitize: 'boolean', sanitizeFn: '(null|function)', whiteList: 'object', popperConfig: '(null|object)' }; var AttachmentMap = { AUTO: 'auto', TOP: 'top', RIGHT: 'right', BOTTOM: 'bottom', LEFT: 'left' }; var Default$4 = { animation: true, template: '', trigger: 'hover focus', title: '', delay: 0, html: false, selector: false, placement: 'top', offset: 0, container: false, fallbackPlacement: 'flip', boundary: 'scrollParent', sanitize: true, sanitizeFn: null, whiteList: DefaultWhitelist, popperConfig: null }; var HOVER_STATE_SHOW = 'show'; var HOVER_STATE_OUT = 'out'; var Event = { HIDE: "hide" + EVENT_KEY$6, HIDDEN: "hidden" + EVENT_KEY$6, SHOW: "show" + EVENT_KEY$6, SHOWN: "shown" + EVENT_KEY$6, INSERTED: "inserted" + EVENT_KEY$6, CLICK: "click" + EVENT_KEY$6, FOCUSIN: "focusin" + EVENT_KEY$6, FOCUSOUT: "focusout" + EVENT_KEY$6, MOUSEENTER: "mouseenter" + EVENT_KEY$6, MOUSELEAVE: "mouseleave" + EVENT_KEY$6 }; var CLASS_NAME_FADE$2 = 'fade'; var CLASS_NAME_SHOW$4 = 'show'; var SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; var SELECTOR_ARROW = '.arrow'; var TRIGGER_HOVER = 'hover'; var TRIGGER_FOCUS = 'focus'; var TRIGGER_CLICK = 'click'; var TRIGGER_MANUAL = 'manual'; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ var Tooltip = /*#__PURE__*/function () { function Tooltip(element, config) { if (typeof Popper === 'undefined') { throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); } // private this._isEnabled = true; this._timeout = 0; this._hoverState = ''; this._activeTrigger = {}; this._popper = null; // Protected this.element = element; this.config = this._getConfig(config); this.tip = null; this._setListeners(); } // Getters var _proto = Tooltip.prototype; // Public _proto.enable = function enable() { this._isEnabled = true; }; _proto.disable = function disable() { this._isEnabled = false; }; _proto.toggleEnabled = function toggleEnabled() { this._isEnabled = !this._isEnabled; }; _proto.toggle = function toggle(event) { if (!this._isEnabled) { return; } if (event) { var dataKey = this.constructor.DATA_KEY; var context = $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); $(event.currentTarget).data(dataKey, context); } context._activeTrigger.click = !context._activeTrigger.click; if (context._isWithActiveTrigger()) { context._enter(null, context); } else { context._leave(null, context); } } else { if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW$4)) { this._leave(null, this); return; } this._enter(null, this); } }; _proto.dispose = function dispose() { clearTimeout(this._timeout); $.removeData(this.element, this.constructor.DATA_KEY); $(this.element).off(this.constructor.EVENT_KEY); $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler); if (this.tip) { $(this.tip).remove(); } this._isEnabled = null; this._timeout = null; this._hoverState = null; this._activeTrigger = null; if (this._popper) { this._popper.destroy(); } this._popper = null; this.element = null; this.config = null; this.tip = null; }; _proto.show = function show() { var _this = this; if ($(this.element).css('display') === 'none') { throw new Error('Please use show on visible elements'); } var showEvent = $.Event(this.constructor.Event.SHOW); if (this.isWithContent() && this._isEnabled) { $(this.element).trigger(showEvent); var shadowRoot = Util.findShadowRoot(this.element); var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); if (showEvent.isDefaultPrevented() || !isInTheDom) { return; } var tip = this.getTipElement(); var tipId = Util.getUID(this.constructor.NAME); tip.setAttribute('id', tipId); this.element.setAttribute('aria-describedby', tipId); this.setContent(); if (this.config.animation) { $(tip).addClass(CLASS_NAME_FADE$2); } var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; var attachment = this._getAttachment(placement); this.addAttachmentClass(attachment); var container = this._getContainer(); $(tip).data(this.constructor.DATA_KEY, this); if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { $(tip).appendTo(container); } $(this.element).trigger(this.constructor.Event.INSERTED); this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment)); $(tip).addClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; // only needed because of broken event delegation on iOS // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html if ('ontouchstart' in document.documentElement) { $(document.body).children().on('mouseover', null, $.noop); } var complete = function complete() { if (_this.config.animation) { _this._fixTransition(); } var prevHoverState = _this._hoverState; _this._hoverState = null; $(_this.element).trigger(_this.constructor.Event.SHOWN); if (prevHoverState === HOVER_STATE_OUT) { _this._leave(null, _this); } }; if ($(this.tip).hasClass(CLASS_NAME_FADE$2)) { var transitionDuration = Util.getTransitionDurationFromElement(this.tip); $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); } else { complete(); } } }; _proto.hide = function hide(callback) { var _this2 = this; var tip = this.getTipElement(); var hideEvent = $.Event(this.constructor.Event.HIDE); var complete = function complete() { if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) { tip.parentNode.removeChild(tip); } _this2._cleanTipClass(); _this2.element.removeAttribute('aria-describedby'); $(_this2.element).trigger(_this2.constructor.Event.HIDDEN); if (_this2._popper !== null) { _this2._popper.destroy(); } if (callback) { callback(); } }; $(this.element).trigger(hideEvent); if (hideEvent.isDefaultPrevented()) { return; } $(tip).removeClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we remove the extra // empty mouseover listeners we added for iOS support if ('ontouchstart' in document.documentElement) { $(document.body).children().off('mouseover', null, $.noop); } this._activeTrigger[TRIGGER_CLICK] = false; this._activeTrigger[TRIGGER_FOCUS] = false; this._activeTrigger[TRIGGER_HOVER] = false; if ($(this.tip).hasClass(CLASS_NAME_FADE$2)) { var transitionDuration = Util.getTransitionDurationFromElement(tip); $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); } else { complete(); } this._hoverState = ''; }; _proto.update = function update() { if (this._popper !== null) { this._popper.scheduleUpdate(); } } // Protected ; _proto.isWithContent = function isWithContent() { return Boolean(this.getTitle()); }; _proto.addAttachmentClass = function addAttachmentClass(attachment) { $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); }; _proto.getTipElement = function getTipElement() { this.tip = this.tip || $(this.config.template)[0]; return this.tip; }; _proto.setContent = function setContent() { var tip = this.getTipElement(); this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle()); $(tip).removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$4); }; _proto.setElementContent = function setElementContent($element, content) { if (typeof content === 'object' && (content.nodeType || content.jquery)) { // Content is a DOM node or a jQuery if (this.config.html) { if (!$(content).parent().is($element)) { $element.empty().append(content); } } else { $element.text($(content).text()); } return; } if (this.config.html) { if (this.config.sanitize) { content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn); } $element.html(content); } else { $element.text(content); } }; _proto.getTitle = function getTitle() { var title = this.element.getAttribute('data-original-title'); if (!title) { title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; } return title; } // Private ; _proto._getPopperConfig = function _getPopperConfig(attachment) { var _this3 = this; var defaultBsConfig = { placement: attachment, modifiers: { offset: this._getOffset(), flip: { behavior: this.config.fallbackPlacement }, arrow: { element: SELECTOR_ARROW }, preventOverflow: { boundariesElement: this.config.boundary } }, onCreate: function onCreate(data) { if (data.originalPlacement !== data.placement) { _this3._handlePopperPlacementChange(data); } }, onUpdate: function onUpdate(data) { return _this3._handlePopperPlacementChange(data); } }; return _objectSpread2(_objectSpread2({}, defaultBsConfig), this.config.popperConfig); }; _proto._getOffset = function _getOffset() { var _this4 = this; var offset = {}; if (typeof this.config.offset === 'function') { offset.fn = function (data) { data.offsets = _objectSpread2(_objectSpread2({}, data.offsets), _this4.config.offset(data.offsets, _this4.element) || {}); return data; }; } else { offset.offset = this.config.offset; } return offset; }; _proto._getContainer = function _getContainer() { if (this.config.container === false) { return document.body; } if (Util.isElement(this.config.container)) { return $(this.config.container); } return $(document).find(this.config.container); }; _proto._getAttachment = function _getAttachment(placement) { return AttachmentMap[placement.toUpperCase()]; }; _proto._setListeners = function _setListeners() { var _this5 = this; var triggers = this.config.trigger.split(' '); triggers.forEach(function (trigger) { if (trigger === 'click') { $(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) { return _this5.toggle(event); }); } else if (trigger !== TRIGGER_MANUAL) { var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN; var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT; $(_this5.element).on(eventIn, _this5.config.selector, function (event) { return _this5._enter(event); }).on(eventOut, _this5.config.selector, function (event) { return _this5._leave(event); }); } }); this._hideModalHandler = function () { if (_this5.element) { _this5.hide(); } }; $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler); if (this.config.selector) { this.config = _objectSpread2(_objectSpread2({}, this.config), {}, { trigger: 'manual', selector: '' }); } else { this._fixTitle(); } }; _proto._fixTitle = function _fixTitle() { var titleType = typeof this.element.getAttribute('data-original-title'); if (this.element.getAttribute('title') || titleType !== 'string') { this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); this.element.setAttribute('title', ''); } }; _proto._enter = function _enter(event, context) { var dataKey = this.constructor.DATA_KEY; context = context || $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); $(event.currentTarget).data(dataKey, context); } if (event) { context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; } if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW$4) || context._hoverState === HOVER_STATE_SHOW) { context._hoverState = HOVER_STATE_SHOW; return; } clearTimeout(context._timeout); context._hoverState = HOVER_STATE_SHOW; if (!context.config.delay || !context.config.delay.show) { context.show(); return; } context._timeout = setTimeout(function () { if (context._hoverState === HOVER_STATE_SHOW) { context.show(); } }, context.config.delay.show); }; _proto._leave = function _leave(event, context) { var dataKey = this.constructor.DATA_KEY; context = context || $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); $(event.currentTarget).data(dataKey, context); } if (event) { context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false; } if (context._isWithActiveTrigger()) { return; } clearTimeout(context._timeout); context._hoverState = HOVER_STATE_OUT; if (!context.config.delay || !context.config.delay.hide) { context.hide(); return; } context._timeout = setTimeout(function () { if (context._hoverState === HOVER_STATE_OUT) { context.hide(); } }, context.config.delay.hide); }; _proto._isWithActiveTrigger = function _isWithActiveTrigger() { for (var trigger in this._activeTrigger) { if (this._activeTrigger[trigger]) { return true; } } return false; }; _proto._getConfig = function _getConfig(config) { var dataAttributes = $(this.element).data(); Object.keys(dataAttributes).forEach(function (dataAttr) { if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { delete dataAttributes[dataAttr]; } }); config = _objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), dataAttributes), typeof config === 'object' && config ? config : {}); if (typeof config.delay === 'number') { config.delay = { show: config.delay, hide: config.delay }; } if (typeof config.title === 'number') { config.title = config.title.toString(); } if (typeof config.content === 'number') { config.content = config.content.toString(); } Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); if (config.sanitize) { config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn); } return config; }; _proto._getDelegateConfig = function _getDelegateConfig() { var config = {}; if (this.config) { for (var key in this.config) { if (this.constructor.Default[key] !== this.config[key]) { config[key] = this.config[key]; } } } return config; }; _proto._cleanTipClass = function _cleanTipClass() { var $tip = $(this.getTipElement()); var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); if (tabClass !== null && tabClass.length) { $tip.removeClass(tabClass.join('')); } }; _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { this.tip = popperData.instance.popper; this._cleanTipClass(); this.addAttachmentClass(this._getAttachment(popperData.placement)); }; _proto._fixTransition = function _fixTransition() { var tip = this.getTipElement(); var initConfigAnimation = this.config.animation; if (tip.getAttribute('x-placement') !== null) { return; } $(tip).removeClass(CLASS_NAME_FADE$2); this.config.animation = false; this.hide(); this.show(); this.config.animation = initConfigAnimation; } // Static ; Tooltip._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var data = $(this).data(DATA_KEY$6); var _config = typeof config === 'object' && config; if (!data && /dispose|hide/.test(config)) { return; } if (!data) { data = new Tooltip(this, _config); $(this).data(DATA_KEY$6, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](); } }); }; _createClass(Tooltip, null, [{ key: "VERSION", get: function get() { return VERSION$6; } }, { key: "Default", get: function get() { return Default$4; } }, { key: "NAME", get: function get() { return NAME$6; } }, { key: "DATA_KEY", get: function get() { return DATA_KEY$6; } }, { key: "Event", get: function get() { return Event; } }, { key: "EVENT_KEY", get: function get() { return EVENT_KEY$6; } }, { key: "DefaultType", get: function get() { return DefaultType$4; } }]); return Tooltip; }(); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME$6] = Tooltip._jQueryInterface; $.fn[NAME$6].Constructor = Tooltip; $.fn[NAME$6].noConflict = function () { $.fn[NAME$6] = JQUERY_NO_CONFLICT$6; return Tooltip._jQueryInterface; }; /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$7 = 'popover'; var VERSION$7 = '4.5.0'; var DATA_KEY$7 = 'bs.popover'; var EVENT_KEY$7 = "." + DATA_KEY$7; var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7]; var CLASS_PREFIX$1 = 'bs-popover'; var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g'); var Default$5 = _objectSpread2(_objectSpread2({}, Tooltip.Default), {}, { placement: 'right', trigger: 'click', content: '', template: '' }); var DefaultType$5 = _objectSpread2(_objectSpread2({}, Tooltip.DefaultType), {}, { content: '(string|element|function)' }); var CLASS_NAME_FADE$3 = 'fade'; var CLASS_NAME_SHOW$5 = 'show'; var SELECTOR_TITLE = '.popover-header'; var SELECTOR_CONTENT = '.popover-body'; var Event$1 = { HIDE: "hide" + EVENT_KEY$7, HIDDEN: "hidden" + EVENT_KEY$7, SHOW: "show" + EVENT_KEY$7, SHOWN: "shown" + EVENT_KEY$7, INSERTED: "inserted" + EVENT_KEY$7, CLICK: "click" + EVENT_KEY$7, FOCUSIN: "focusin" + EVENT_KEY$7, FOCUSOUT: "focusout" + EVENT_KEY$7, MOUSEENTER: "mouseenter" + EVENT_KEY$7, MOUSELEAVE: "mouseleave" + EVENT_KEY$7 }; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ var Popover = /*#__PURE__*/function (_Tooltip) { _inheritsLoose(Popover, _Tooltip); function Popover() { return _Tooltip.apply(this, arguments) || this; } var _proto = Popover.prototype; // Overrides _proto.isWithContent = function isWithContent() { return this.getTitle() || this._getContent(); }; _proto.addAttachmentClass = function addAttachmentClass(attachment) { $(this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment); }; _proto.getTipElement = function getTipElement() { this.tip = this.tip || $(this.config.template)[0]; return this.tip; }; _proto.setContent = function setContent() { var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle()); var content = this._getContent(); if (typeof content === 'function') { content = content.call(this.element); } this.setElementContent($tip.find(SELECTOR_CONTENT), content); $tip.removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$5); } // Private ; _proto._getContent = function _getContent() { return this.element.getAttribute('data-content') || this.config.content; }; _proto._cleanTipClass = function _cleanTipClass() { var $tip = $(this.getTipElement()); var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1); if (tabClass !== null && tabClass.length > 0) { $tip.removeClass(tabClass.join('')); } } // Static ; Popover._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var data = $(this).data(DATA_KEY$7); var _config = typeof config === 'object' ? config : null; if (!data && /dispose|hide/.test(config)) { return; } if (!data) { data = new Popover(this, _config); $(this).data(DATA_KEY$7, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](); } }); }; _createClass(Popover, null, [{ key: "VERSION", // Getters get: function get() { return VERSION$7; } }, { key: "Default", get: function get() { return Default$5; } }, { key: "NAME", get: function get() { return NAME$7; } }, { key: "DATA_KEY", get: function get() { return DATA_KEY$7; } }, { key: "Event", get: function get() { return Event$1; } }, { key: "EVENT_KEY", get: function get() { return EVENT_KEY$7; } }, { key: "DefaultType", get: function get() { return DefaultType$5; } }]); return Popover; }(Tooltip); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME$7] = Popover._jQueryInterface; $.fn[NAME$7].Constructor = Popover; $.fn[NAME$7].noConflict = function () { $.fn[NAME$7] = JQUERY_NO_CONFLICT$7; return Popover._jQueryInterface; }; /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME$8 = 'scrollspy'; var VERSION$8 = '4.5.0'; var DATA_KEY$8 = 'bs.scrollspy'; var EVENT_KEY$8 = "." + DATA_KEY$8; var DATA_API_KEY$6 = '.data-api'; var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8]; var Default$6 = { offset: 10, method: 'auto', target: '' }; var DefaultType$6 = { offset: 'number', method: 'string', target: '(string|element)' }; var EVENT_ACTIVATE = "activate" + EVENT_KEY$8; var EVENT_SCROLL = "scroll" + EVENT_KEY$8; var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$8 + DATA_API_KEY$6; var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; var CLASS_NAME_ACTIVE$2 = 'active'; var SELECTOR_DATA_SPY = '[data-spy="scroll"]'; var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; var SELECTOR_NAV_LINKS = '.nav-link'; var SELECTOR_NAV_ITEMS = '.nav-item'; var SELECTOR_LIST_ITEMS = '.list-group-item'; var SELECTOR_DROPDOWN = '.dropdown'; var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'; var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; var METHOD_OFFSET = 'offset'; var METHOD_POSITION = 'position'; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ var ScrollSpy = /*#__PURE__*/function () { function ScrollSpy(element, config) { var _this = this; this._element = element; this._scrollElement = element.tagName === 'BODY' ? window : element; this._config = this._getConfig(config); this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS); this._offsets = []; this._targets = []; this._activeTarget = null; this._scrollHeight = 0; $(this._scrollElement).on(EVENT_SCROLL, function (event) { return _this._process(event); }); this.refresh(); this._process(); } // Getters var _proto = ScrollSpy.prototype; // Public _proto.refresh = function refresh() { var _this2 = this; var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION; var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0; this._offsets = []; this._targets = []; this._scrollHeight = this._getScrollHeight(); var targets = [].slice.call(document.querySelectorAll(this._selector)); targets.map(function (element) { var target; var targetSelector = Util.getSelectorFromElement(element); if (targetSelector) { target = document.querySelector(targetSelector); } if (target) { var targetBCR = target.getBoundingClientRect(); if (targetBCR.width || targetBCR.height) { // TODO (fat): remove sketch reliance on jQuery position/offset return [$(target)[offsetMethod]().top + offsetBase, targetSelector]; } } return null; }).filter(function (item) { return item; }).sort(function (a, b) { return a[0] - b[0]; }).forEach(function (item) { _this2._offsets.push(item[0]); _this2._targets.push(item[1]); }); }; _proto.dispose = function dispose() { $.removeData(this._element, DATA_KEY$8); $(this._scrollElement).off(EVENT_KEY$8); this._element = null; this._scrollElement = null; this._config = null; this._selector = null; this._offsets = null; this._targets = null; this._activeTarget = null; this._scrollHeight = null; } // Private ; _proto._getConfig = function _getConfig(config) { config = _objectSpread2(_objectSpread2({}, Default$6), typeof config === 'object' && config ? config : {}); if (typeof config.target !== 'string' && Util.isElement(config.target)) { var id = $(config.target).attr('id'); if (!id) { id = Util.getUID(NAME$8); $(config.target).attr('id', id); } config.target = "#" + id; } Util.typeCheckConfig(NAME$8, config, DefaultType$6); return config; }; _proto._getScrollTop = function _getScrollTop() { return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; }; _proto._getScrollHeight = function _getScrollHeight() { return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); }; _proto._getOffsetHeight = function _getOffsetHeight() { return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; }; _proto._process = function _process() { var scrollTop = this._getScrollTop() + this._config.offset; var scrollHeight = this._getScrollHeight(); var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); if (this._scrollHeight !== scrollHeight) { this.refresh(); } if (scrollTop >= maxScroll) { var target = this._targets[this._targets.length - 1]; if (this._activeTarget !== target) { this._activate(target); } return; } if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { this._activeTarget = null; this._clear(); return; } for (var i = this._offsets.length; i--;) { var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); if (isActiveTarget) { this._activate(this._targets[i]); } } }; _proto._activate = function _activate(target) { this._activeTarget = target; this._clear(); var queries = this._selector.split(',').map(function (selector) { return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]"; }); var $link = $([].slice.call(document.querySelectorAll(queries.join(',')))); if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) { $link.closest(SELECTOR_DROPDOWN).find(SELECTOR_DROPDOWN_TOGGLE).addClass(CLASS_NAME_ACTIVE$2); $link.addClass(CLASS_NAME_ACTIVE$2); } else { // Set triggered link as active $link.addClass(CLASS_NAME_ACTIVE$2); // Set triggered links parents as active // With both