diff --git a/.appveyor.yml b/.appveyor.yml index eb561e670..1b93e731f 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -1,4 +1,4 @@ -version: 0.9.18.{build} +version: 0.9.19.{build} os: Windows Server 2012 R2 environment: diff --git a/.authors.yml b/.authors.yml index 2cec2b157..89377c186 100644 --- a/.authors.yml +++ b/.authors.yml @@ -63,12 +63,12 @@ - Gilbert.Forsyth@capitalone.com - gforsyth@gwu.edu - gil@forsyth.dev - num_commits: 529 + num_commits: 533 first_commit: 2015-10-19 16:04:32 github: gforsyth - name: Morten Enemark Lund email: melund@gmail.com - num_commits: 493 + num_commits: 495 first_commit: 2015-07-10 07:54:10 github: melund - name: Ned Letcher @@ -150,7 +150,7 @@ email: ben@byk.im aliases: - Burak Yigit Kaya - num_commits: 38 + num_commits: 40 first_commit: 2015-06-18 04:00:34 github: BYK - name: Guillaume Leclerc @@ -217,7 +217,7 @@ github: tbekolay - name: Matthias Bussonnier email: bussonniermatthias@gmail.com - num_commits: 33 + num_commits: 37 first_commit: 2015-11-27 03:58:02 github: Carreau - name: Jonathan Slenders @@ -290,7 +290,7 @@ github: shahinism - name: Jason R. Coombs email: jaraco@jaraco.com - num_commits: 8 + num_commits: 11 first_commit: 2018-04-23 15:25:29 github: jaraco - name: torgny @@ -384,7 +384,7 @@ email: lalochcz@gmail.com aliases: - laloch - num_commits: 74 + num_commits: 101 first_commit: 2018-07-26 13:51:50 github: laloch - name: Nico Lehmann @@ -434,7 +434,7 @@ github: funkyfuture - name: Anthony Scopatz email: scopatz@gmail.com - num_commits: 2600 + num_commits: 2602 first_commit: 2015-01-21 17:04:13 github: scopatz - name: anatoly techtonik @@ -888,7 +888,7 @@ first_commit: 2015-03-17 03:34:36 - name: David Dotson email: dotsdl@gmail.com - num_commits: 19 + num_commits: 20 first_commit: 2018-07-14 12:53:07 github: dotsdl - name: anula @@ -952,7 +952,7 @@ github: selepo - name: Bob Hyman email: bob.hyman@bobssoftwareworks.com - num_commits: 71 + num_commits: 103 first_commit: 2016-06-26 16:48:47 github: bobhy alternate_emails: @@ -1000,7 +1000,7 @@ first_commit: 2019-05-06 14:17:57 - name: con-f-use email: con-f-use@users.noreply.github.com - num_commits: 12 + num_commits: 19 first_commit: 2019-05-15 04:53:37 - name: cclauss email: cclauss@me.com @@ -1018,7 +1018,7 @@ first_commit: 2018-09-16 22:50:24 - name: Gyuri Horak email: dyuri@horak.hu - num_commits: 3 + num_commits: 8 first_commit: 2019-06-18 12:00:16 github: dyuri - name: Ke Zhang @@ -1101,8 +1101,9 @@ email: anki-code@users.noreply.github.com alternate_emails: - anki-code - num_commits: 26 + num_commits: 31 first_commit: 2019-10-15 18:20:58 + github: xxh - name: Sylvain Corlay email: sylvain.corlay@gmail.com num_commits: 1 @@ -1152,5 +1153,39 @@ github: manor - name: Marduk Bolaños email: mardukbp@mac.com - num_commits: 1 + num_commits: 4 first_commit: 2020-04-30 20:26:48 + github: mardukbp +- name: Stefane Fermigier + email: sf@fermigier.com + num_commits: 1 + first_commit: 2020-03-23 06:07:20 +- name: swedneck + email: 40505480+swedneck@users.noreply.github.com + num_commits: 1 + first_commit: 2020-05-31 10:15:42 + github: swedneck +- name: Feng Tian + email: fengttt@gmail.com + num_commits: 1 + first_commit: 2020-05-28 12:13:26 + github: fengttt +- name: cafehaine + email: kilian.guillaume@gmail.com + num_commits: 1 + first_commit: 2020-08-01 15:20:04 + github: cafehaine +- name: paugier + email: pierre.augier@univ-grenoble-alpes.fr + num_commits: 1 + first_commit: 2020-05-13 03:07:31 + github: paugier +- name: Daniel Shimon + email: daniel.shimon22@gmail.com + num_commits: 12 + first_commit: 2020-07-23 08:11:36 +- name: Achim Herwig + email: achim.herwig@wodca.de + num_commits: 5 + first_commit: 2020-06-27 11:13:32 + github: Achimh3011 diff --git a/.github/issue_template.md b/.github/issue_template.md index b98a5d3e1..2fc3194d1 100644 --- a/.github/issue_template.md +++ b/.github/issue_template.md @@ -34,3 +34,6 @@ traceback ## Steps to Reproduce + +## For community +⬇️ **Please click the 👍 reaction instead of leaving a `+1` or 👍 comment** diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml index bb107ca06..a5e8ad7dd 100644 --- a/.github/workflows/black.yml +++ b/.github/workflows/black.yml @@ -12,4 +12,4 @@ jobs: - name: Black Check uses: "lgeiger/black-action@master" with: - args: "--check --exclude=xonsh/ply/ xonsh/ xontrib/" + args: "--check xonsh/ xontrib/" diff --git a/.github/workflows/genbuilds.xsh b/.github/workflows/genbuilds.xsh new file mode 100755 index 000000000..b05bc50a0 --- /dev/null +++ b/.github/workflows/genbuilds.xsh @@ -0,0 +1,23 @@ +#!/usr/bin/env xonsh +"""Generates workflow files for each build matrix element. This is done +so that we can restart indivual workflow elements without having to restart +them all. Rerun this script to regenerate. +""" +from itertools import product + + +OS_NAMES = ["linux", "macos", "windows"] +OS_IMAGES = { + "linux": "ubuntu-latest", + "macos": "macOS-latest", + "windows": "windows-latest", +} +PYTHON_VERSIONS = ["3.6", "3.7", "3.8"] + +template = $(cat pytest.tmpl) +for os_name, python_version in product(OS_NAMES, PYTHON_VERSIONS): + s = template.replace("OS_NAME", os_name) + s = s.replace("OS_IMAGE", OS_IMAGES[os_name]) + s = s.replace("PYTHON_VERSION", python_version) + fname = f"pytest-{os_name}-{python_version}.yml" + ![echo @(s) > @(fname)] diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest-linux-3.6.yml similarity index 79% rename from .github/workflows/pytest.yml rename to .github/workflows/pytest-linux-3.6.yml index 5b28d019f..5b861989f 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest-linux-3.6.yml @@ -1,4 +1,4 @@ -name: pytest +name: pytest linux 3.6 on: [push, pull_request] @@ -7,8 +7,8 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest, macOS-latest] - python-version: [3.6, 3.7, 3.8] + os: [ubuntu-latest] + python-version: [3.6] name: Python ${{ matrix.python-version }} ${{ matrix.os }} steps: - uses: actions/checkout@v2 @@ -23,5 +23,5 @@ jobs: - shell: bash -l {0} run: | python -m pip install . --no-deps - python -m xonsh run-tests.xsh --timeout=15 + python -m xonsh run-tests.xsh --timeout=240 diff --git a/.github/workflows/pytest-linux-3.7.yml b/.github/workflows/pytest-linux-3.7.yml new file mode 100644 index 000000000..d1219234c --- /dev/null +++ b/.github/workflows/pytest-linux-3.7.yml @@ -0,0 +1,27 @@ +name: pytest linux 3.7 + +on: [push, pull_request] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + python-version: [3.7] + name: Python ${{ matrix.python-version }} ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - name: Setup conda + uses: goanpeca/setup-miniconda@v1 + with: + activate-environment: ${{matrix.python-version}}-xonsh-test + environment-file: ci/environment-${{matrix.python-version}}.yml + update-conda: true + python-version: ${{ matrix.python-version }} + condarc-file: ci/condarc.yml + - shell: bash -l {0} + run: | + python -m pip install . --no-deps + python -m xonsh run-tests.xsh --timeout=240 + diff --git a/.github/workflows/pytest-linux-3.8.yml b/.github/workflows/pytest-linux-3.8.yml new file mode 100644 index 000000000..4e17214ae --- /dev/null +++ b/.github/workflows/pytest-linux-3.8.yml @@ -0,0 +1,27 @@ +name: pytest linux 3.8 + +on: [push, pull_request] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + python-version: [3.8] + name: Python ${{ matrix.python-version }} ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - name: Setup conda + uses: goanpeca/setup-miniconda@v1 + with: + activate-environment: ${{matrix.python-version}}-xonsh-test + environment-file: ci/environment-${{matrix.python-version}}.yml + update-conda: true + python-version: ${{ matrix.python-version }} + condarc-file: ci/condarc.yml + - shell: bash -l {0} + run: | + python -m pip install . --no-deps + python -m xonsh run-tests.xsh --timeout=240 + diff --git a/.github/workflows/pytest-macos-3.6.yml b/.github/workflows/pytest-macos-3.6.yml new file mode 100644 index 000000000..05cb91e8b --- /dev/null +++ b/.github/workflows/pytest-macos-3.6.yml @@ -0,0 +1,27 @@ +name: pytest macos 3.6 + +on: [push, pull_request] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macOS-latest] + python-version: [3.6] + name: Python ${{ matrix.python-version }} ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - name: Setup conda + uses: goanpeca/setup-miniconda@v1 + with: + activate-environment: ${{matrix.python-version}}-xonsh-test + environment-file: ci/environment-${{matrix.python-version}}.yml + update-conda: true + python-version: ${{ matrix.python-version }} + condarc-file: ci/condarc.yml + - shell: bash -l {0} + run: | + python -m pip install . --no-deps + python -m xonsh run-tests.xsh --timeout=240 + diff --git a/.github/workflows/pytest-macos-3.7.yml b/.github/workflows/pytest-macos-3.7.yml new file mode 100644 index 000000000..03fc2d7e2 --- /dev/null +++ b/.github/workflows/pytest-macos-3.7.yml @@ -0,0 +1,27 @@ +name: pytest macos 3.7 + +on: [push, pull_request] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macOS-latest] + python-version: [3.7] + name: Python ${{ matrix.python-version }} ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - name: Setup conda + uses: goanpeca/setup-miniconda@v1 + with: + activate-environment: ${{matrix.python-version}}-xonsh-test + environment-file: ci/environment-${{matrix.python-version}}.yml + update-conda: true + python-version: ${{ matrix.python-version }} + condarc-file: ci/condarc.yml + - shell: bash -l {0} + run: | + python -m pip install . --no-deps + python -m xonsh run-tests.xsh --timeout=240 + diff --git a/.github/workflows/pytest-macos-3.8.yml b/.github/workflows/pytest-macos-3.8.yml new file mode 100644 index 000000000..6b6e1e6c5 --- /dev/null +++ b/.github/workflows/pytest-macos-3.8.yml @@ -0,0 +1,27 @@ +name: pytest macos 3.8 + +on: [push, pull_request] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macOS-latest] + python-version: [3.8] + name: Python ${{ matrix.python-version }} ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - name: Setup conda + uses: goanpeca/setup-miniconda@v1 + with: + activate-environment: ${{matrix.python-version}}-xonsh-test + environment-file: ci/environment-${{matrix.python-version}}.yml + update-conda: true + python-version: ${{ matrix.python-version }} + condarc-file: ci/condarc.yml + - shell: bash -l {0} + run: | + python -m pip install . --no-deps + python -m xonsh run-tests.xsh --timeout=240 + diff --git a/.github/workflows/pytest-windows-3.6.yml b/.github/workflows/pytest-windows-3.6.yml new file mode 100644 index 000000000..362ebf073 --- /dev/null +++ b/.github/workflows/pytest-windows-3.6.yml @@ -0,0 +1,27 @@ +name: pytest windows 3.6 + +on: [push, pull_request] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [windows-latest] + python-version: [3.6] + name: Python ${{ matrix.python-version }} ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - name: Setup conda + uses: goanpeca/setup-miniconda@v1 + with: + activate-environment: ${{matrix.python-version}}-xonsh-test + environment-file: ci/environment-${{matrix.python-version}}.yml + update-conda: true + python-version: ${{ matrix.python-version }} + condarc-file: ci/condarc.yml + - shell: bash -l {0} + run: | + python -m pip install . --no-deps + python -m xonsh run-tests.xsh --timeout=240 + diff --git a/.github/workflows/pytest-windows-3.7.yml b/.github/workflows/pytest-windows-3.7.yml new file mode 100644 index 000000000..dedb55e3c --- /dev/null +++ b/.github/workflows/pytest-windows-3.7.yml @@ -0,0 +1,27 @@ +name: pytest windows 3.7 + +on: [push, pull_request] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [windows-latest] + python-version: [3.7] + name: Python ${{ matrix.python-version }} ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - name: Setup conda + uses: goanpeca/setup-miniconda@v1 + with: + activate-environment: ${{matrix.python-version}}-xonsh-test + environment-file: ci/environment-${{matrix.python-version}}.yml + update-conda: true + python-version: ${{ matrix.python-version }} + condarc-file: ci/condarc.yml + - shell: bash -l {0} + run: | + python -m pip install . --no-deps + python -m xonsh run-tests.xsh --timeout=240 + diff --git a/.github/workflows/pytest-windows-3.8.yml b/.github/workflows/pytest-windows-3.8.yml new file mode 100644 index 000000000..8613676cc --- /dev/null +++ b/.github/workflows/pytest-windows-3.8.yml @@ -0,0 +1,27 @@ +name: pytest windows 3.8 + +on: [push, pull_request] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [windows-latest] + python-version: [3.8] + name: Python ${{ matrix.python-version }} ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - name: Setup conda + uses: goanpeca/setup-miniconda@v1 + with: + activate-environment: ${{matrix.python-version}}-xonsh-test + environment-file: ci/environment-${{matrix.python-version}}.yml + update-conda: true + python-version: ${{ matrix.python-version }} + condarc-file: ci/condarc.yml + - shell: bash -l {0} + run: | + python -m pip install . --no-deps + python -m xonsh run-tests.xsh --timeout=240 + diff --git a/.github/workflows/pytest.tmpl b/.github/workflows/pytest.tmpl new file mode 100644 index 000000000..e1608ef36 --- /dev/null +++ b/.github/workflows/pytest.tmpl @@ -0,0 +1,26 @@ +name: pytest OS_NAME PYTHON_VERSION + +on: [push, pull_request] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [OS_IMAGE] + python-version: [PYTHON_VERSION] + name: Python ${{ matrix.python-version }} ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - name: Setup conda + uses: goanpeca/setup-miniconda@v1 + with: + activate-environment: ${{matrix.python-version}}-xonsh-test + environment-file: ci/environment-${{matrix.python-version}}.yml + update-conda: true + python-version: ${{ matrix.python-version }} + condarc-file: ci/condarc.yml + - shell: bash -l {0} + run: | + python -m pip install . --no-deps + python -m xonsh run-tests.xsh --timeout=240 diff --git a/.gitignore b/.gitignore index 8428b92df..3edf8e517 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,7 @@ bin/ /lib/ include/ venv/ +.venv/ # Mac .DS_Store diff --git a/.mailmap b/.mailmap index 7f6bb32bb..a4f164039 100644 --- a/.mailmap +++ b/.mailmap @@ -21,32 +21,33 @@ Jamie Bliss James Bliss Jamie Bliss James Bliss Jamie Bliss James Bliss Hugo Wang -BlahGeek -David Strobach laloch Bob Hyman Bob Hyman +David Strobach laloch +BlahGeek Jean-Benoist Leger Jean-Benoist Leger Jean-Benoist Leger Jean-Benoist Leger christopher Klaus Alexander Seistrup Klaus Alexander Seistrup Leonardo Santagada Burak Yiğit Kaya Burak Yigit Kaya +Matthias Bussonnier Aaron Griffin Rob Brewer Robert W. Brewer virus Sagar Tewari Sagar Tewari -Matthias Bussonnier +anki-code anki-code Konstantin Molchanov Konstantin Molchanov Guillaume Leclerc Guillaume Leclerc Gordon Ball -anki-code anki-code Travis Shirk Joel Gerber vaaaaanquish <6syun9@gmail.com> @vaaaaanquish <6syun9@gmail.com> vaaaaanquish <6syun9@gmail.com> vaaaaanquish <6syun9@gmail.com> vaaaaanquish <6syun9@gmail.com> 6syun9 <6syun9@gmail.com> Bernardas Ališauskas Bernardas -Derek Thomas David Dotson +Derek Thomas +con-f-use VHarisop JohnLunzer jlunz Paul Goelz @@ -58,17 +59,18 @@ Brian Visel Andrew Hundt Jonathan Slenders Justin Moen -con-f-use Caleb Hattingh +Daniel Shimon +Jason R. Coombs Stephan Fitzpatrick Raphael Das Gupta Raphael Das Gupta K.-Michael Aye K.-Michael Aye -Jason R. Coombs halloleo halloleo Will Wykeham Oleh Prypin Brian Skinn Will S +Gyuri Horak Alessio Bogon Alessio Bogon Yohei Tamura Maximilian Köhl @@ -95,6 +97,7 @@ James Elías anula Jay Tuckey Alexander Steffen +Achim Herwig Randy Syring Lucas Inojosa Lucas Inojosa adam j hartz adam j hartz @@ -123,6 +126,7 @@ Fabien Dubosson Kale Kundert Andrés García García Ad115 Sean Farley +Marduk Bolaños Jan Schulz Samuel Dion-Girardeau Michael Droettboom @@ -139,7 +143,6 @@ Danmou Niklas Hambüchen Sébastien Pierre shadow-light <42055707+shadow-light@users.noreply.github.com> -Gyuri Horak Jan Chren Noortheen Raja Samuel Lotz @@ -239,6 +242,10 @@ Sylvain Corlay Marcio Mazza Jerzy Drozdz Manor Askenazi -Marduk Bolaños +Stefane Fermigier +swedneck <40505480+swedneck@users.noreply.github.com> +Feng Tian +cafehaine +paugier goodboy Atsushi Morimoto diff --git a/AUTHORS.rst b/AUTHORS.rst index 86d79079b..bc63bbb7e 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -8,29 +8,30 @@ Authors are sorted by number of commits. * Konstantinos Tsakiltzidis * Jamie Bliss * Hugo Wang -* BlahGeek -* David Strobach * Bob Hyman +* David Strobach +* BlahGeek * Jean-Benoist Leger * christopher * Klaus Alexander Seistrup * Leonardo Santagada * Burak Yiğit Kaya +* Matthias Bussonnier * Aaron Griffin * Rob Brewer * virus * Sagar Tewari -* Matthias Bussonnier +* anki-code * Konstantin Molchanov * Guillaume Leclerc * Gordon Ball -* anki-code * Travis Shirk * Joel Gerber * vaaaaanquish * Bernardas Ališauskas -* Derek Thomas * David Dotson +* Derek Thomas +* con-f-use * VHarisop * JohnLunzer * Paul Goelz @@ -42,17 +43,18 @@ Authors are sorted by number of commits. * Andrew Hundt * Jonathan Slenders * Justin Moen -* con-f-use * Caleb Hattingh +* Daniel Shimon +* Jason R. Coombs * Stephan Fitzpatrick * Raphael Das Gupta * K.-Michael Aye -* Jason R. Coombs * halloleo * Will Wykeham * Oleh Prypin * Brian Skinn * Will S +* Gyuri Horak * Alessio Bogon * Yohei Tamura * Maximilian Köhl @@ -79,6 +81,7 @@ Authors are sorted by number of commits. * anula * Jay Tuckey * Alexander Steffen +* Achim Herwig * Randy Syring * Lucas Inojosa * adam j hartz @@ -107,6 +110,7 @@ Authors are sorted by number of commits. * Kale Kundert * Andrés García García * Sean Farley +* Marduk Bolaños * Jan Schulz * Samuel Dion-Girardeau * Michael Droettboom @@ -123,7 +127,6 @@ Authors are sorted by number of commits. * Niklas Hambüchen * Sébastien Pierre * shadow-light -* Gyuri Horak * Jan Chren * Noortheen Raja * Samuel Lotz @@ -223,6 +226,10 @@ Authors are sorted by number of commits. * Marcio Mazza * Jerzy Drozdz * Manor Askenazi -* Marduk Bolaños +* Stefane Fermigier +* swedneck +* Feng Tian +* cafehaine +* paugier * goodboy * Atsushi Morimoto diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 7d63242fc..4aa7a0e82 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,6 +4,129 @@ Xonsh Change Log .. current developments +v0.9.19 +==================== + +**Added:** + +* ``history`` command now supports ``flush`` action +* Added new items on "Bash to xsh" page +* JsonHistory: added ``history gc --force`` switch to allow user to override above warning. +* JsonHistoryGC: display following warning when garbage collection would delete "too" much data and don't delete anything. + + "Warning: History garbage collection would discard more history ({size_over} {units}) than it would keep ({limit_size}).\n" + "Not removing any history for now. Either increase your limit ($XONSH_HIST_SIZE), or run ``history gc --force``.", + + It is displayed when the amount of history on disk is more than double the limit configured (or defaulted) for $XONSH_HIST_SIZE. +* $LS_COLORS code 'mh' now recognized for (multi) hard-linked files. +* $LS_COLORS code 'ca' now recognized for files with security capabilities (linux only). +* CI step to run flake8 after pytest. +* RichCompletion for completions with different display value, description and prefix_len. +* Allow completer access to multiline document when available via ``xonsh.completers.tools.get_ptk_completer().current_document``. +* ``abbrevs`` word expasion can now be reverted by pressing + the space bar second time immediately after the previous + word got expanded. +* ``ulimit`` command. +* ``pdb`` xontrib, that runs pdb debugger on reception of SIGUSR1 signal. +* xontrib-xpg is a xontrib for running or explaining sql queries for posgresql database. + +**Changed:** + +* Xonsh now launches subprocesses with their ``argv[0]`` argument containing + the command exactly as inserted by the user instead of setting it to the + resolved path of the executable. This is for consistency with bash and other + shells. +* Added ability to register, deregister environment variables; + centralized environment default variables +* Added exit to the "Bash to xsh" article. +* xonsh.main _failback_to_other_shells now tries user's login shell (in $SHELL) before trying system wide shells from /etc/shells. +* The current working directory is now correctly obtained in line 501 of xonsh/parsers/base.py +* Garbage collection avoids deleting history and issues a warning instead if existing history is more than double the comfigured limit. + This protects active users who might have accumulated a lot of history while a bug was preventing garbage collection. The warning + will be displayed each time Xonsh is started until user takes action to reconcile the situation. +* ``tests\test_integrations.py`` no longer runs with XONSH_DEBUG=1 (because new, debug-only progress messages from history were breaking it). +* Updated pytest_plugin for pytest 5.4 API, pip requirements for pytest>= 5.4 +* Major improvements to Jedi xontrib completer: + * Use new Jedi API + * Replace the existing python completer + * Create rich completions with extra info + * Use entire multiline document if available + * Complete xonsh special tokens + * Be aware of _ (last result) + * Only show dunder attrs when prefix ends with '_' +* Many files are starting to be formatted using ``pyupgrade --py36-plus``, in order to automatically update to newer + Python constructs. +* ``xontrib load`` does not stop loading modules on error any more. + +**Deprecated:** + +* ``pytest --flake8`` now exits with error message to use flake8 instead. + Allows single list of lint exceptions to apply in CI and your IDE. + +**Removed:** + +* Removed history replay +* pytest-flake8 package from requirements\*.txt +* Xonsh now relies exclusively on Setuptools for install. +* Compatibility with Python 3.5 has been removed as well as all related code. In + particular xonsh.inspector does not defined ``getouterframes`` anymore, use + ``inspect.getouterframe`` directly. + +**Fixed:** + +* Unhandled exception triggered by unexpected return from callable alias. +* Fix path completer throwing exception sometimes +* Fixed help operator not displaying definition for callables. +* JsonHistory.files(): Now once again enumerates history files from the directory. This has been broken for about 2 years. +* JsonHistory.run_gc(): Don't busy loop while waiting for history garbage collection to complete, sleep a bit instead. + This does much to keep Xonsh ptk_shell responsive when dealing with very large history on disk. +* Fixed JSON history indexing error. +* Fixed syntax error in scripts containing line continuation syntax. +* $LS_COLORS code 'fi' now used for "regular files", as it should have been all along. (was 'rs') + See (#3608)[https://github.com/xonsh/xonsh/issues/3608]. +* pyghooks.color_files now follows implememntation of ls --color closely. Thanks @qwenger! + However, a few documented differences remain due to use in Xonsh. + +* $LS_COLORS['ln'] = 'target' now works. Also fixes #3578. +* Fixed exit code for commands executed via ``-c`` (#3402) +* Logical subprocess operators now work after long arguments (e.g. ``--version``). +* ``pip`` completer no longer erroneously fires for ``pipx`` +* Updated development guide to reference flake8 instead of pylint +* Corrected flake8 config for allowed exceptions. +* various pytest warnings in a "clean" test run. +* The current Mercurial topic is shown. +* Fixed import problems due to modules using deprecated pkg_resources methods by proxying calls to the underlying loader. +* Typo in 'source' alias. +* Crash in 'completer' completer. +* Don't complete unnecessarily in 'base' completer +* Viewing mock objects in the shell +* Fixed formatting error in ``vox rm`` command. + +**Authors:** + +* Anthony Scopatz +* Gil Forsyth +* Morten Enemark Lund +* Bob Hyman +* David Strobach +* Burak Yiğit Kaya +* Matthias Bussonnier +* anki-code +* David Dotson +* con-f-use +* Daniel Shimon +* Jason R. Coombs +* Gyuri Horak +* Achim Herwig +* Marduk Bolaños +* Stefane Fermigier +* swedneck +* Feng Tian +* cafehaine +* paugier + + + v0.9.18 ==================== @@ -34,7 +157,7 @@ v0.9.18 **Fixed:** * Fixed name autosuggestion in path completer (#3519) -* Flake8/black fixes to the whole code tree, in 3 steps. +* Flake8/black fixes to the whole code tree, in 3 steps. Devs should update their IDE to run both during file editing, to avoid a re-accumulation of arbitrary exceptions. * tests/test_builtins.py, fix test case test_convert_macro_arg_eval(kind). @@ -95,7 +218,7 @@ v0.9.16 **Fixed:** * Return Token.Text when filesystem item's type not defined in LS_COLORS; avoid crashing Pygments. -* Fixed bug on Windows if Path elements has trailing spaces. Windows in general and ``os.path.isdir()`` +* Fixed bug on Windows if Path elements has trailing spaces. Windows in general and ``os.path.isdir()`` doesn't care about trailing spaces but ``os.scandir()`` does. **Authors:** @@ -123,7 +246,7 @@ v0.9.15 * ``-l`` switch works like bash, loads environment in non-interactive shell * The xonsh pytest plugin no longer messes up the test order for pytest. Xsh test - are still executed first to avoid a bug were other tests would prevent ``test_*.xsh`` + are still executed first to avoid a bug were other tests would prevent ``test_*.xsh`` files to run correctly. * New repo name for xxh @@ -200,11 +323,11 @@ v0.9.14 **Fixed:** -- `[color] in .gitconfig (#3427) `_ now stripped from {curr\_branch} +- `[color] in .gitconfig (#3427) `_ now stripped from {curr\_branch} - `Before `_ - `After `_ - + * The autovox xontrib now preserves activated environment on cd * setup.cfg -- duplicated flake8 config so interactive use and test runs enforce same rules. (Implementation is arguably a regression.) * Pressing ``Ctrl+Z`` no longer deadlocks the terminal, @@ -254,14 +377,14 @@ v0.9.13 **Removed:** -* Remove built in support for "win unicode console". Full unicode support on windows is now provided by +* Remove built in support for "win unicode console". Full unicode support on windows is now provided by using the new `Windows terminal `__. **Fixed:** * Fixed issue converting ANSI color codes that contained both slow blink and set foreground or set background sequences. -* Fix coreutils ``cat`` behaviour on empty input (e.g. ``cat -``). +* Fix coreutils ``cat`` behaviour on empty input (e.g. ``cat -``). * Fix Ctrl-C event causing Atribute error on Windows. * Fix Added OpenBSD as a platform @@ -349,6 +472,7 @@ v0.9.11 ``aliases['echocat'] = 'echo "hi" and echo "there"'`` will, when run, return .. code-block:: + hi there @@ -1014,7 +1138,7 @@ v0.8.5 2. Add on ``~/.xonshrc`` - .. code:: python + .. code:: xonsh :number-lines: $BASE16_SHELL = $HOME + "/.config/base16-shell/" @@ -1754,18 +1878,19 @@ v0.6.6 .. code-block:: xonshcon - $ $PATH + >>> $PATH EnvPath( ['/usr/bin', '/usr/local/bin', '/bin'] ) - $ $PATH.add('~/.local/bin', front=True); $PATH + >>> $PATH.add('~/.local/bin', front=True); $PATH EnvPath( ['/home/user/.local/bin', '/usr/bin', '/usr/local/bin', '/bin'] ) - $ $PATH.add('/usr/bin', front=True, replace=True); $PATH + >>> $PATH.add('/usr/bin', front=True, replace=True); $PATH EnvPath( ['/usr/bin', '/home/user/.local/bin', '/usr/local/bin', '/bin'] ) + * Added ``pygments-cache`` project in order to reduce startup time. diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index acbe0e57d..78328e649 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -110,25 +110,25 @@ is open to interpretation. recommendations from PEP8 are not required here. * All Python code should be compliant with Python 3.5+. At some unforeseen date in the future, Python 2.7 support *may* be supported. -* Tests should be written with pytest using a procedural style. Do not use +* Tests should be written with `pytest `_ using a procedural style. Do not use unittest directly or write tests in an object-oriented style. * Test generators make more dots and the dots must flow! You can easily check for style issues, including some outright bugs such -as mispelled variable names, using pylint. If you're using Anaconda you'll -need to run "conda install pylint" once. You can easily run pylint on +as mispelled variable names, using `flake8 `_. If you're using Anaconda you'll +need to run "conda install flake8" once. You can easily run flake8 on the edited files in your uncommited git change:: - $ git status -s | awk '/\.py$$/ { print $2 }' | xargs pylint + $ git status -s | awk '/\.py$$/ { print $2 }' | xargs flake8 If you want to lint the entire code base run:: - $ pylint $(find tests xonsh -name \*.py | sort) + $ flake8 -We also use ``black`` for formatting the code base (which includes running in +We also use `black `_ for formatting the code base (which includes running in our tests):: - $ black --check --exclude=xonsh/ply/ xonsh/ xontrib/ + $ black --check xonsh/ xontrib/ To add this as a git pre-commit hook:: diff --git a/README.rst b/README.rst index b54ae3c69..7099d0dec 100644 --- a/README.rst +++ b/README.rst @@ -5,6 +5,10 @@ xonsh :alt: Join the chat at https://gitter.im/xonsh/xonsh :target: https://gitter.im/xonsh/xonsh?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge +.. image:: https://img.shields.io/badge/%23xonsh%3Afeneas.org-Matrix-green + :alt: Matrix room: #xonsh:feneas.org + :target: https://matrix.to/#/#xonsh:feneas.org + .. image:: https://travis-ci.org/xonsh/xonsh.svg?branch=master :target: https://travis-ci.org/xonsh/xonsh diff --git a/ci/environment-3.5.yml b/ci/environment-3.5.yml index 573fe4b85..657315c1a 100644 --- a/ci/environment-3.5.yml +++ b/ci/environment-3.5.yml @@ -14,5 +14,4 @@ dependencies: - coverage - pyflakes - pytest-cov - - pytest-flake8 - codecov diff --git a/ci/environment-3.6.yml b/ci/environment-3.6.yml index 5ecce209e..6930b168c 100644 --- a/ci/environment-3.6.yml +++ b/ci/environment-3.6.yml @@ -15,5 +15,4 @@ dependencies: - coverage - pyflakes - pytest-cov - - pytest-flake8 - codecov diff --git a/ci/environment-3.7.yml b/ci/environment-3.7.yml index 7c03e6ebf..283626b2d 100644 --- a/ci/environment-3.7.yml +++ b/ci/environment-3.7.yml @@ -15,5 +15,4 @@ dependencies: - coverage - pyflakes - pytest-cov - - pytest-flake8 - codecov diff --git a/ci/environment-3.8.yml b/ci/environment-3.8.yml index b6e1b0bfb..695107cf6 100644 --- a/ci/environment-3.8.yml +++ b/ci/environment-3.8.yml @@ -15,5 +15,4 @@ dependencies: - coverage - pyflakes - pytest-cov - - pytest-flake8 - codecov diff --git a/docs/_static/banner-2.jpg b/docs/_static/banner-2.jpg new file mode 100644 index 000000000..bd446899b Binary files /dev/null and b/docs/_static/banner-2.jpg differ diff --git a/docs/_static/banner-background.png b/docs/_static/banner-background.png new file mode 100644 index 000000000..91b7c7ba1 Binary files /dev/null and b/docs/_static/banner-background.png differ diff --git a/docs/_static/blue-bubbles.jpg b/docs/_static/blue-bubbles.jpg new file mode 100644 index 000000000..a8fb08371 Binary files /dev/null and b/docs/_static/blue-bubbles.jpg differ diff --git a/docs/_static/landing/animate-css/animate.css b/docs/_static/landing/animate-css/animate.css new file mode 100644 index 000000000..7148b5765 --- /dev/null +++ b/docs/_static/landing/animate-css/animate.css @@ -0,0 +1,3340 @@ +@charset "UTF-8"; + +/*! + * animate.css -http://daneden.me/animate + * Version - 3.5.1 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2016 Daniel Eden + */ + +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +.animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} + +.animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; +} + +.animated.flipOutX, +.animated.flipOutY, +.animated.bounceIn, +.animated.bounceOut { + -webkit-animation-duration: .75s; + animation-duration: .75s; +} + +@-webkit-keyframes bounce { + from, 20%, 53%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-4px,0); + transform: translate3d(0,-4px,0); + } +} + +@keyframes bounce { + from, 20%, 53%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-4px,0); + transform: translate3d(0,-4px,0); + } +} + +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; + -webkit-transform-origin: center bottom; + transform-origin: center bottom; +} + +@-webkit-keyframes flash { + from, 50%, to { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +@keyframes flash { + from, 50%, to { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +.flash { + -webkit-animation-name: flash; + animation-name: flash; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse; +} + +@-webkit-keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand; +} + +@-webkit-keyframes shake { + from, to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +@keyframes shake { + from, to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +.shake { + -webkit-animation-name: shake; + animation-name: shake; +} + +@-webkit-keyframes headShake { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 6.5% { + -webkit-transform: translateX(-6px) rotateY(-9deg); + transform: translateX(-6px) rotateY(-9deg); + } + + 18.5% { + -webkit-transform: translateX(5px) rotateY(7deg); + transform: translateX(5px) rotateY(7deg); + } + + 31.5% { + -webkit-transform: translateX(-3px) rotateY(-5deg); + transform: translateX(-3px) rotateY(-5deg); + } + + 43.5% { + -webkit-transform: translateX(2px) rotateY(3deg); + transform: translateX(2px) rotateY(3deg); + } + + 50% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes headShake { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 6.5% { + -webkit-transform: translateX(-6px) rotateY(-9deg); + transform: translateX(-6px) rotateY(-9deg); + } + + 18.5% { + -webkit-transform: translateX(5px) rotateY(7deg); + transform: translateX(5px) rotateY(7deg); + } + + 31.5% { + -webkit-transform: translateX(-3px) rotateY(-5deg); + transform: translateX(-3px) rotateY(-5deg); + } + + 43.5% { + -webkit-transform: translateX(2px) rotateY(3deg); + transform: translateX(2px) rotateY(3deg); + } + + 50% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +.headShake { + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + -webkit-animation-name: headShake; + animation-name: headShake; +} + +@-webkit-keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +@keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +.swing { + -webkit-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing; +} + +@-webkit-keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + } + + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + } + + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.tada { + -webkit-animation-name: tada; + animation-name: tada; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes wobble { + from { + -webkit-transform: none; + transform: none; + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@keyframes wobble { + from { + -webkit-transform: none; + transform: none; + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble; +} + +@-webkit-keyframes jello { + from, 11.1%, to { + -webkit-transform: none; + transform: none; + } + + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +@keyframes jello { + from, 11.1%, to { + -webkit-transform: none; + transform: none; + } + + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +.jello { + -webkit-animation-name: jello; + animation-name: jello; + -webkit-transform-origin: center; + transform-origin: center; +} + +@-webkit-keyframes bounceIn { + from, 20%, 40%, 60%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97); + } + + to { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes bounceIn { + from, 20%, 40%, 60%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97); + } + + to { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.bounceIn { + -webkit-animation-name: bounceIn; + animation-name: bounceIn; +} + +@-webkit-keyframes bounceInDown { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInDown { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown; +} + +@-webkit-keyframes bounceInLeft { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInLeft { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft; +} + +@-webkit-keyframes bounceInRight { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInRight { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight; +} + +@-webkit-keyframes bounceInUp { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInUp { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInUp { + -webkit-animation-name: bounceInUp; + animation-name: bounceInUp; +} + +@-webkit-keyframes bounceOut { + 20% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } +} + +@keyframes bounceOut { + 20% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } +} + +.bounceOut { + -webkit-animation-name: bounceOut; + animation-name: bounceOut; +} + +@-webkit-keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +.bounceOutDown { + -webkit-animation-name: bounceOutDown; + animation-name: bounceOutDown; +} + +@-webkit-keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +.bounceOutLeft { + -webkit-animation-name: bounceOutLeft; + animation-name: bounceOutLeft; +} + +@-webkit-keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +.bounceOutRight { + -webkit-animation-name: bounceOutRight; + animation-name: bounceOutRight; +} + +@-webkit-keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +.bounceOutUp { + -webkit-animation-name: bounceOutUp; + animation-name: bounceOutUp; +} + +@-webkit-keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +.fadeIn { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; +} + +@-webkit-keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInDown { + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown; +} + +@-webkit-keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInDownBig { + -webkit-animation-name: fadeInDownBig; + animation-name: fadeInDownBig; +} + +@-webkit-keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + animation-name: fadeInLeft; +} + +@-webkit-keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInLeftBig { + -webkit-animation-name: fadeInLeftBig; + animation-name: fadeInLeftBig; +} + +@-webkit-keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInRight { + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight; +} + +@-webkit-keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInRightBig { + -webkit-animation-name: fadeInRightBig; + animation-name: fadeInRightBig; +} + +@-webkit-keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp; +} + +@-webkit-keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig; +} + +@-webkit-keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +@keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} + +@-webkit-keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + animation-name: fadeOutDown; +} + +@-webkit-keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +.fadeOutDownBig { + -webkit-animation-name: fadeOutDownBig; + animation-name: fadeOutDownBig; +} + +@-webkit-keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + animation-name: fadeOutLeft; +} + +@-webkit-keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +.fadeOutLeftBig { + -webkit-animation-name: fadeOutLeftBig; + animation-name: fadeOutLeftBig; +} + +@-webkit-keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight; +} + +@-webkit-keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +.fadeOutRightBig { + -webkit-animation-name: fadeOutRightBig; + animation-name: fadeOutRightBig; +} + +@-webkit-keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + animation-name: fadeOutUp; +} + +@-webkit-keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +.fadeOutUpBig { + -webkit-animation-name: fadeOutUpBig; + animation-name: fadeOutUpBig; +} + +@-webkit-keyframes flip { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(.95, .95, .95); + transform: perspective(400px) scale3d(.95, .95, .95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +@keyframes flip { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(.95, .95, .95); + transform: perspective(400px) scale3d(.95, .95, .95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip; +} + +@-webkit-keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInX { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInX; + animation-name: flipInX; +} + +@-webkit-keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInY; + animation-name: flipInY; +} + +@-webkit-keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +.flipOutX { + -webkit-animation-name: flipOutX; + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; +} + +@-webkit-keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +.flipOutY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY; +} + +@-webkit-keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + + to { + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + + to { + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.lightSpeedIn { + -webkit-animation-name: lightSpeedIn; + animation-name: lightSpeedIn; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; +} + +@-webkit-keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +@keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +.lightSpeedOut { + -webkit-animation-name: lightSpeedOut; + animation-name: lightSpeedOut; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; +} + +@-webkit-keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateIn { + -webkit-animation-name: rotateIn; + animation-name: rotateIn; +} + +@-webkit-keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInDownLeft { + -webkit-animation-name: rotateInDownLeft; + animation-name: rotateInDownLeft; +} + +@-webkit-keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInDownRight { + -webkit-animation-name: rotateInDownRight; + animation-name: rotateInDownRight; +} + +@-webkit-keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInUpLeft { + -webkit-animation-name: rotateInUpLeft; + animation-name: rotateInUpLeft; +} + +@-webkit-keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInUpRight { + -webkit-animation-name: rotateInUpRight; + animation-name: rotateInUpRight; +} + +@-webkit-keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +@keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +.rotateOut { + -webkit-animation-name: rotateOut; + animation-name: rotateOut; +} + +@-webkit-keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +.rotateOutDownLeft { + -webkit-animation-name: rotateOutDownLeft; + animation-name: rotateOutDownLeft; +} + +@-webkit-keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutDownRight { + -webkit-animation-name: rotateOutDownRight; + animation-name: rotateOutDownRight; +} + +@-webkit-keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutUpLeft { + -webkit-animation-name: rotateOutUpLeft; + animation-name: rotateOutUpLeft; +} + +@-webkit-keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +@keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +.rotateOutUpRight { + -webkit-animation-name: rotateOutUpRight; + animation-name: rotateOutUpRight; +} + +@-webkit-keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +@keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +.hinge { + -webkit-animation-name: hinge; + animation-name: hinge; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.rollIn { + -webkit-animation-name: rollIn; + animation-name: rollIn; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +@keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +.rollOut { + -webkit-animation-name: rollOut; + animation-name: rollOut; +} + +@-webkit-keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 50% { + opacity: 1; + } +} + +@keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 50% { + opacity: 1; + } +} + +.zoomIn { + -webkit-animation-name: zoomIn; + animation-name: zoomIn; +} + +@-webkit-keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInDown { + -webkit-animation-name: zoomInDown; + animation-name: zoomInDown; +} + +@-webkit-keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInLeft { + -webkit-animation-name: zoomInLeft; + animation-name: zoomInLeft; +} + +@-webkit-keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInRight { + -webkit-animation-name: zoomInRight; + animation-name: zoomInRight; +} + +@-webkit-keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInUp { + -webkit-animation-name: zoomInUp; + animation-name: zoomInUp; +} + +@-webkit-keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + to { + opacity: 0; + } +} + +@keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + to { + opacity: 0; + } +} + +.zoomOut { + -webkit-animation-name: zoomOut; + animation-name: zoomOut; +} + +@-webkit-keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomOutDown { + -webkit-animation-name: zoomOutDown; + animation-name: zoomOutDown; +} + +@-webkit-keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +@keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +.zoomOutLeft { + -webkit-animation-name: zoomOutLeft; + animation-name: zoomOutLeft; +} + +@-webkit-keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +@keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +.zoomOutRight { + -webkit-animation-name: zoomOutRight; + animation-name: zoomOutRight; +} + +@-webkit-keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomOutUp { + -webkit-animation-name: zoomOutUp; + animation-name: zoomOutUp; +} + +@-webkit-keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInDown { + -webkit-animation-name: slideInDown; + animation-name: slideInDown; +} + +@-webkit-keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInLeft { + -webkit-animation-name: slideInLeft; + animation-name: slideInLeft; +} + +@-webkit-keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInRight { + -webkit-animation-name: slideInRight; + animation-name: slideInRight; +} + +@-webkit-keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInUp { + -webkit-animation-name: slideInUp; + animation-name: slideInUp; +} + +@-webkit-keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.slideOutDown { + -webkit-animation-name: slideOutDown; + animation-name: slideOutDown; +} + +@-webkit-keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.slideOutLeft { + -webkit-animation-name: slideOutLeft; + animation-name: slideOutLeft; +} + +@-webkit-keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.slideOutRight { + -webkit-animation-name: slideOutRight; + animation-name: slideOutRight; +} + +@-webkit-keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +.slideOutUp { + -webkit-animation-name: slideOutUp; + animation-name: slideOutUp; +} diff --git a/docs/_static/landing/animate-css/wow.min.js b/docs/_static/landing/animate-css/wow.min.js new file mode 100644 index 000000000..0a646f203 --- /dev/null +++ b/docs/_static/landing/animate-css/wow.min.js @@ -0,0 +1,2 @@ +/*! WOW - v1.1.3 - 2016-05-06 +* Copyright (c) 2016 Matthieu Aussaguel;*/(function(){var a,b,c,d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};b=function(){function a(){}return a.prototype.extend=function(a,b){var c,d;for(c in b)d=b[c],null==a[c]&&(a[c]=d);return a},a.prototype.isMobile=function(a){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)},a.prototype.createEvent=function(a,b,c,d){var e;return null==b&&(b=!1),null==c&&(c=!1),null==d&&(d=null),null!=document.createEvent?(e=document.createEvent("CustomEvent"),e.initCustomEvent(a,b,c,d)):null!=document.createEventObject?(e=document.createEventObject(),e.eventType=a):e.eventName=a,e},a.prototype.emitEvent=function(a,b){return null!=a.dispatchEvent?a.dispatchEvent(b):b in(null!=a)?a[b]():"on"+b in(null!=a)?a["on"+b]():void 0},a.prototype.addEvent=function(a,b,c){return null!=a.addEventListener?a.addEventListener(b,c,!1):null!=a.attachEvent?a.attachEvent("on"+b,c):a[b]=c},a.prototype.removeEvent=function(a,b,c){return null!=a.removeEventListener?a.removeEventListener(b,c,!1):null!=a.detachEvent?a.detachEvent("on"+b,c):delete a[b]},a.prototype.innerHeight=function(){return"innerHeight"in window?window.innerHeight:document.documentElement.clientHeight},a}(),c=this.WeakMap||this.MozWeakMap||(c=function(){function a(){this.keys=[],this.values=[]}return a.prototype.get=function(a){var b,c,d,e,f;for(f=this.keys,b=d=0,e=f.length;e>d;b=++d)if(c=f[b],c===a)return this.values[b]},a.prototype.set=function(a,b){var c,d,e,f,g;for(g=this.keys,c=e=0,f=g.length;f>e;c=++e)if(d=g[c],d===a)return void(this.values[c]=b);return this.keys.push(a),this.values.push(b)},a}()),a=this.MutationObserver||this.WebkitMutationObserver||this.MozMutationObserver||(a=function(){function a(){"undefined"!=typeof console&&null!==console&&console.warn("MutationObserver is not supported by your browser."),"undefined"!=typeof console&&null!==console&&console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content.")}return a.notSupported=!0,a.prototype.observe=function(){},a}()),d=this.getComputedStyle||function(a,b){return this.getPropertyValue=function(b){var c;return"float"===b&&(b="styleFloat"),e.test(b)&&b.replace(e,function(a,b){return b.toUpperCase()}),(null!=(c=a.currentStyle)?c[b]:void 0)||null},this},e=/(\-([a-z]){1})/g,this.WOW=function(){function e(a){null==a&&(a={}),this.scrollCallback=f(this.scrollCallback,this),this.scrollHandler=f(this.scrollHandler,this),this.resetAnimation=f(this.resetAnimation,this),this.start=f(this.start,this),this.scrolled=!0,this.config=this.util().extend(a,this.defaults),null!=a.scrollContainer&&(this.config.scrollContainer=document.querySelector(a.scrollContainer)),this.animationNameCache=new c,this.wowEvent=this.util().createEvent(this.config.boxClass)}return e.prototype.defaults={boxClass:"wow",animateClass:"animated",offset:0,mobile:!0,live:!0,callback:null,scrollContainer:null},e.prototype.init=function(){var a;return this.element=window.document.documentElement,"interactive"===(a=document.readyState)||"complete"===a?this.start():this.util().addEvent(document,"DOMContentLoaded",this.start),this.finished=[]},e.prototype.start=function(){var b,c,d,e;if(this.stopped=!1,this.boxes=function(){var a,c,d,e;for(d=this.element.querySelectorAll("."+this.config.boxClass),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.all=function(){var a,c,d,e;for(d=this.boxes,e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.boxes.length)if(this.disabled())this.resetStyle();else for(e=this.boxes,c=0,d=e.length;d>c;c++)b=e[c],this.applyStyle(b,!0);return this.disabled()||(this.util().addEvent(this.config.scrollContainer||window,"scroll",this.scrollHandler),this.util().addEvent(window,"resize",this.scrollHandler),this.interval=setInterval(this.scrollCallback,50)),this.config.live?new a(function(a){return function(b){var c,d,e,f,g;for(g=[],c=0,d=b.length;d>c;c++)f=b[c],g.push(function(){var a,b,c,d;for(c=f.addedNodes||[],d=[],a=0,b=c.length;b>a;a++)e=c[a],d.push(this.doSync(e));return d}.call(a));return g}}(this)).observe(document.body,{childList:!0,subtree:!0}):void 0},e.prototype.stop=function(){return this.stopped=!0,this.util().removeEvent(this.config.scrollContainer||window,"scroll",this.scrollHandler),this.util().removeEvent(window,"resize",this.scrollHandler),null!=this.interval?clearInterval(this.interval):void 0},e.prototype.sync=function(b){return a.notSupported?this.doSync(this.element):void 0},e.prototype.doSync=function(a){var b,c,d,e,f;if(null==a&&(a=this.element),1===a.nodeType){for(a=a.parentNode||a,e=a.querySelectorAll("."+this.config.boxClass),f=[],c=0,d=e.length;d>c;c++)b=e[c],g.call(this.all,b)<0?(this.boxes.push(b),this.all.push(b),this.stopped||this.disabled()?this.resetStyle():this.applyStyle(b,!0),f.push(this.scrolled=!0)):f.push(void 0);return f}},e.prototype.show=function(a){return this.applyStyle(a),a.className=a.className+" "+this.config.animateClass,null!=this.config.callback&&this.config.callback(a),this.util().emitEvent(a,this.wowEvent),this.util().addEvent(a,"animationend",this.resetAnimation),this.util().addEvent(a,"oanimationend",this.resetAnimation),this.util().addEvent(a,"webkitAnimationEnd",this.resetAnimation),this.util().addEvent(a,"MSAnimationEnd",this.resetAnimation),a},e.prototype.applyStyle=function(a,b){var c,d,e;return d=a.getAttribute("data-wow-duration"),c=a.getAttribute("data-wow-delay"),e=a.getAttribute("data-wow-iteration"),this.animate(function(f){return function(){return f.customStyle(a,b,d,c,e)}}(this))},e.prototype.animate=function(){return"requestAnimationFrame"in window?function(a){return window.requestAnimationFrame(a)}:function(a){return a()}}(),e.prototype.resetStyle=function(){var a,b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(a.style.visibility="visible");return e},e.prototype.resetAnimation=function(a){var b;return a.type.toLowerCase().indexOf("animationend")>=0?(b=a.target||a.srcElement,b.className=b.className.replace(this.config.animateClass,"").trim()):void 0},e.prototype.customStyle=function(a,b,c,d,e){return b&&this.cacheAnimationName(a),a.style.visibility=b?"hidden":"visible",c&&this.vendorSet(a.style,{animationDuration:c}),d&&this.vendorSet(a.style,{animationDelay:d}),e&&this.vendorSet(a.style,{animationIterationCount:e}),this.vendorSet(a.style,{animationName:b?"none":this.cachedAnimationName(a)}),a},e.prototype.vendors=["moz","webkit"],e.prototype.vendorSet=function(a,b){var c,d,e,f;d=[];for(c in b)e=b[c],a[""+c]=e,d.push(function(){var b,d,g,h;for(g=this.vendors,h=[],b=0,d=g.length;d>b;b++)f=g[b],h.push(a[""+f+c.charAt(0).toUpperCase()+c.substr(1)]=e);return h}.call(this));return d},e.prototype.vendorCSS=function(a,b){var c,e,f,g,h,i;for(h=d(a),g=h.getPropertyCSSValue(b),f=this.vendors,c=0,e=f.length;e>c;c++)i=f[c],g=g||h.getPropertyCSSValue("-"+i+"-"+b);return g},e.prototype.animationName=function(a){var b;try{b=this.vendorCSS(a,"animation-name").cssText}catch(c){b=d(a).getPropertyValue("animation-name")}return"none"===b?"":b},e.prototype.cacheAnimationName=function(a){return this.animationNameCache.set(a,this.animationName(a))},e.prototype.cachedAnimationName=function(a){return this.animationNameCache.get(a)},e.prototype.scrollHandler=function(){return this.scrolled=!0},e.prototype.scrollCallback=function(){var a;return!this.scrolled||(this.scrolled=!1,this.boxes=function(){var b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],a&&(this.isVisible(a)?this.show(a):e.push(a));return e}.call(this),this.boxes.length||this.config.live)?void 0:this.stop()},e.prototype.offsetTop=function(a){for(var b;void 0===a.offsetTop;)a=a.parentNode;for(b=a.offsetTop;a=a.offsetParent;)b+=a.offsetTop;return b},e.prototype.isVisible=function(a){var b,c,d,e,f;return c=a.getAttribute("data-wow-offset")||this.config.offset,f=this.config.scrollContainer&&this.config.scrollContainer.scrollTop||window.pageYOffset,e=f+Math.min(this.element.clientHeight,this.util().innerHeight())-c,d=this.offsetTop(a),b=d+a.clientHeight,e>=d&&b>=f},e.prototype.util=function(){return null!=this._util?this._util:this._util=new b},e.prototype.disabled=function(){return!this.config.mobile&&this.util().isMobile(navigator.userAgent)},e}()}).call(this); \ No newline at end of file diff --git a/docs/_static/landing/css/bootstrap.css b/docs/_static/landing/css/bootstrap.css new file mode 100644 index 000000000..f7e50b961 --- /dev/null +++ b/docs/_static/landing/css/bootstrap.css @@ -0,0 +1,9314 @@ +/*! + * Bootstrap v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +:root { + --blue: #007bff; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --red: #dc3545; + --orange: #fd7e14; + --yellow: #ffc107; + --green: #28a745; + --teal: #20c997; + --cyan: #17a2b8; + --white: #fff; + --gray: #6c757d; + --gray-dark: #343a40; + --primary: #007bff; + --secondary: #6c757d; + --success: #28a745; + --info: #17a2b8; + --warning: #ffc107; + --danger: #dc3545; + --light: #f8f9fa; + --dark: #343a40; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace +} + +*, +::after, +::before { + box-sizing: border-box +} + +html { + 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 +} + +@-ms-viewport { + width: device-width +} + +article, +aside, +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, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff +} + +[tabindex="-1"]:focus { + outline: 0 !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[data-original-title], +abbr[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 +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1rem +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0 +} + +dt { + font-weight: 700 +} + +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 +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + -ms-overflow-style: scrollbar +} + +figure { + margin: 0 0 1rem +} + +img { + vertical-align: middle; + border-style: none +} + +svg { + overflow: hidden; + vertical-align: middle +} + +table { + border-collapse: collapse +} + +caption { + padding-top: .75rem; + padding-bottom: .75rem; + color: #6c757d; + text-align: left; + caption-side: bottom +} + +th { + text-align: inherit +} + +label { + display: inline-block; + margin-bottom: .5rem +} + +button { + border-radius: 0 +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit +} + +button, +input { + overflow: visible +} + +button, +select { + text-transform: none +} + +[type=reset], +[type=submit], +button, +html [type=button] { + -webkit-appearance: button +} + +[type=button]::-moz-focus-inner, +[type=reset]::-moz-focus-inner, +[type=submit]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none +} + +input[type=checkbox], +input[type=radio] { + box-sizing: border-box; + padding: 0 +} + +input[type=date], +input[type=datetime-local], +input[type=month], +input[type=time] { + -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; + cursor: pointer +} + +template { + display: none +} + +[hidden] { + display: none !important +} + +.h1, +.h2, +.h3, +.h4, +.h5, +.h6, +h1, +h2, +h3, +h4, +h5, +h6 { + margin-bottom: .5rem; + font-family: inherit; + font-weight: 500; + line-height: 1.2; + 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.2 +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.2 +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.2 +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.2 +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, .1) +} + +.small, +small { + font-size: 80%; + font-weight: 400 +} + +.mark, +mark { + padding: .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: .5rem +} + +.initialism { + font-size: 90%; + text-transform: uppercase +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #6c757d +} + +.blockquote-footer::before { + content: "\2014 \00A0" +} + +.img-fluid { + max-width: 100%; + height: auto +} + +.img-thumbnail { + padding: .25rem; + background-color: #fff; + border: 1px solid #dee2e6; + border-radius: .25rem; + max-width: 100%; + height: auto +} + +.figure { + display: inline-block +} + +.figure-img { + margin-bottom: .5rem; + line-height: 1 +} + +.figure-caption { + font-size: 90%; + color: #6c757d +} + +code { + font-size: 87.5%; + color: #e83e8c; + word-break: break-word +} + +a>code { + color: inherit +} + +kbd { + padding: .2rem .4rem; + font-size: 87.5%; + color: #fff; + background-color: #212529; + border-radius: .2rem +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700 +} + +pre { + display: block; + font-size: 87.5%; + color: #212529 +} + +pre code { + font-size: inherit; + color: inherit; + word-break: normal +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll +} + +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + 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 { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto +} + +.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, +.col-1, +.col-10, +.col-11, +.col-12, +.col-2, +.col-3, +.col-4, +.col-5, +.col-6, +.col-7, +.col-8, +.col-9, +.col-auto, +.col-lg, +.col-lg-1, +.col-lg-10, +.col-lg-11, +.col-lg-12, +.col-lg-2, +.col-lg-3, +.col-lg-4, +.col-lg-5, +.col-lg-6, +.col-lg-7, +.col-lg-8, +.col-lg-9, +.col-lg-auto, +.col-md, +.col-md-1, +.col-md-10, +.col-md-11, +.col-md-12, +.col-md-2, +.col-md-3, +.col-md-4, +.col-md-5, +.col-md-6, +.col-md-7, +.col-md-8, +.col-md-9, +.col-md-auto, +.col-sm, +.col-sm-1, +.col-sm-10, +.col-sm-11, +.col-sm-12, +.col-sm-2, +.col-sm-3, +.col-sm-4, +.col-sm-5, +.col-sm-6, +.col-sm-7, +.col-sm-8, +.col-sm-9, +.col-sm-auto, +.col-xl, +.col-xl-1, +.col-xl-10, +.col-xl-11, +.col-xl-12, +.col-xl-2, +.col-xl-3, +.col-xl-4, +.col-xl-5, +.col-xl-6, +.col-xl-7, +.col-xl-8, +.col-xl-9, +.col-xl-auto { + 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-first { + -ms-flex-order: -1; + order: -1 +} + +.order-last { + -ms-flex-order: 13; + order: 13 +} + +.order-0 { + -ms-flex-order: 0; + order: 0 +} + +.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 +} + +.offset-1 { + margin-left: 8.333333% +} + +.offset-2 { + margin-left: 16.666667% +} + +.offset-3 { + margin-left: 25% +} + +.offset-4 { + margin-left: 33.333333% +} + +.offset-5 { + margin-left: 41.666667% +} + +.offset-6 { + margin-left: 50% +} + +.offset-7 { + margin-left: 58.333333% +} + +.offset-8 { + margin-left: 66.666667% +} + +.offset-9 { + margin-left: 75% +} + +.offset-10 { + margin-left: 83.333333% +} + +.offset-11 { + margin-left: 91.666667% +} + +@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-first { + -ms-flex-order: -1; + order: -1 + } + .order-sm-last { + -ms-flex-order: 13; + order: 13 + } + .order-sm-0 { + -ms-flex-order: 0; + order: 0 + } + .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 + } + .offset-sm-0 { + margin-left: 0 + } + .offset-sm-1 { + margin-left: 8.333333% + } + .offset-sm-2 { + margin-left: 16.666667% + } + .offset-sm-3 { + margin-left: 25% + } + .offset-sm-4 { + margin-left: 33.333333% + } + .offset-sm-5 { + margin-left: 41.666667% + } + .offset-sm-6 { + margin-left: 50% + } + .offset-sm-7 { + margin-left: 58.333333% + } + .offset-sm-8 { + margin-left: 66.666667% + } + .offset-sm-9 { + margin-left: 75% + } + .offset-sm-10 { + margin-left: 83.333333% + } + .offset-sm-11 { + margin-left: 91.666667% + } +} + +@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-first { + -ms-flex-order: -1; + order: -1 + } + .order-md-last { + -ms-flex-order: 13; + order: 13 + } + .order-md-0 { + -ms-flex-order: 0; + order: 0 + } + .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 + } + .offset-md-0 { + margin-left: 0 + } + .offset-md-1 { + margin-left: 8.333333% + } + .offset-md-2 { + margin-left: 16.666667% + } + .offset-md-3 { + margin-left: 25% + } + .offset-md-4 { + margin-left: 33.333333% + } + .offset-md-5 { + margin-left: 41.666667% + } + .offset-md-6 { + margin-left: 50% + } + .offset-md-7 { + margin-left: 58.333333% + } + .offset-md-8 { + margin-left: 66.666667% + } + .offset-md-9 { + margin-left: 75% + } + .offset-md-10 { + margin-left: 83.333333% + } + .offset-md-11 { + margin-left: 91.666667% + } +} + +@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-first { + -ms-flex-order: -1; + order: -1 + } + .order-lg-last { + -ms-flex-order: 13; + order: 13 + } + .order-lg-0 { + -ms-flex-order: 0; + order: 0 + } + .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 + } + .offset-lg-0 { + margin-left: 0 + } + .offset-lg-1 { + margin-left: 8.333333% + } + .offset-lg-2 { + margin-left: 16.666667% + } + .offset-lg-3 { + margin-left: 25% + } + .offset-lg-4 { + margin-left: 33.333333% + } + .offset-lg-5 { + margin-left: 41.666667% + } + .offset-lg-6 { + margin-left: 50% + } + .offset-lg-7 { + margin-left: 58.333333% + } + .offset-lg-8 { + margin-left: 66.666667% + } + .offset-lg-9 { + margin-left: 75% + } + .offset-lg-10 { + margin-left: 83.333333% + } + .offset-lg-11 { + margin-left: 91.666667% + } +} + +@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-first { + -ms-flex-order: -1; + order: -1 + } + .order-xl-last { + -ms-flex-order: 13; + order: 13 + } + .order-xl-0 { + -ms-flex-order: 0; + order: 0 + } + .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 + } + .offset-xl-0 { + margin-left: 0 + } + .offset-xl-1 { + margin-left: 8.333333% + } + .offset-xl-2 { + margin-left: 16.666667% + } + .offset-xl-3 { + margin-left: 25% + } + .offset-xl-4 { + margin-left: 33.333333% + } + .offset-xl-5 { + margin-left: 41.666667% + } + .offset-xl-6 { + margin-left: 50% + } + .offset-xl-7 { + margin-left: 58.333333% + } + .offset-xl-8 { + margin-left: 66.666667% + } + .offset-xl-9 { + margin-left: 75% + } + .offset-xl-10 { + margin-left: 83.333333% + } + .offset-xl-11 { + margin-left: 91.666667% + } +} + +.table { + width: 100%; + margin-bottom: 1rem; + background-color: transparent +} + +.table td, +.table th { + padding: .75rem; + vertical-align: top; + border-top: 1px solid #dee2e6 +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #dee2e6 +} + +.table tbody+tbody { + border-top: 2px solid #dee2e6 +} + +.table .table { + background-color: #fff +} + +.table-sm td, +.table-sm th { + padding: .3rem +} + +.table-bordered { + border: 1px solid #dee2e6 +} + +.table-bordered td, +.table-bordered th { + border: 1px solid #dee2e6 +} + +.table-bordered thead td, +.table-bordered thead th { + border-bottom-width: 2px +} + +.table-borderless tbody+tbody, +.table-borderless td, +.table-borderless th, +.table-borderless thead th { + border: 0 +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, .05) +} + +.table-hover tbody tr:hover { + background-color: rgba(0, 0, 0, .075) +} + +.table-primary, +.table-primary>td, +.table-primary>th { + 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>td, +.table-secondary>th { + background-color: #d6d8db +} + +.table-hover .table-secondary:hover { + background-color: #c8cbcf +} + +.table-hover .table-secondary:hover>td, +.table-hover .table-secondary:hover>th { + background-color: #c8cbcf +} + +.table-success, +.table-success>td, +.table-success>th { + 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>td, +.table-info>th { + 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>td, +.table-warning>th { + 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>td, +.table-danger>th { + 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>td, +.table-light>th { + 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>td, +.table-dark>th { + 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>td, +.table-active>th { + background-color: rgba(0, 0, 0, .075) +} + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, .075) +} + +.table-hover .table-active:hover>td, +.table-hover .table-active:hover>th { + background-color: rgba(0, 0, 0, .075) +} + +.table .thead-dark th { + color: #fff; + background-color: #212529; + border-color: #32383e +} + +.table .thead-light th { + color: #495057; + background-color: #e9ecef; + border-color: #dee2e6 +} + +.table-dark { + color: #fff; + background-color: #212529 +} + +.table-dark td, +.table-dark th, +.table-dark thead th { + border-color: #32383e +} + +.table-dark.table-bordered { + border: 0 +} + +.table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, .05) +} + +.table-dark.table-hover tbody tr:hover { + background-color: rgba(255, 255, 255, .075) +} + +@media (max-width:575.98px) { + .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar + } + .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; + -ms-overflow-style: -ms-autohiding-scrollbar + } + .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; + -ms-overflow-style: -ms-autohiding-scrollbar + } + .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; + -ms-overflow-style: -ms-autohiding-scrollbar + } + .table-responsive-xl>.table-bordered { + border: 0 + } +} + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar +} + +.table-responsive>.table-bordered { + border: 0 +} + +.form-control { + display: block; + width: 100%; + height: calc(2.25rem + 2px); + padding: .375rem .75rem; + font-size: 1rem; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: .25rem; + transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out +} + +@media screen and (prefers-reduced-motion:reduce) { + .form-control { + transition: none + } +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0 +} + +.form-control:focus { + color: #495057; + background-color: #fff; + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) +} + +.form-control::-webkit-input-placeholder { + color: #6c757d; + opacity: 1 +} + +.form-control::-moz-placeholder { + color: #6c757d; + opacity: 1 +} + +.form-control:-ms-input-placeholder { + color: #6c757d; + opacity: 1 +} + +.form-control::-ms-input-placeholder { + color: #6c757d; + opacity: 1 +} + +.form-control::placeholder { + color: #6c757d; + opacity: 1 +} + +.form-control:disabled, +.form-control[readonly] { + background-color: #e9ecef; + opacity: 1 +} + +select.form-control:focus::-ms-value { + color: #495057; + background-color: #fff +} + +.form-control-file, +.form-control-range { + display: block; + width: 100% +} + +.col-form-label { + padding-top: calc(.375rem + 1px); + padding-bottom: calc(.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5 +} + +.col-form-label-lg { + padding-top: calc(.5rem + 1px); + padding-bottom: calc(.5rem + 1px); + font-size: 1.25rem; + line-height: 1.5 +} + +.col-form-label-sm { + padding-top: calc(.25rem + 1px); + padding-bottom: calc(.25rem + 1px); + font-size: .875rem; + line-height: 1.5 +} + +.form-control-plaintext { + display: block; + width: 100%; + padding-top: .375rem; + padding-bottom: .375rem; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0 +} + +.form-control-plaintext.form-control-lg, +.form-control-plaintext.form-control-sm { + padding-right: 0; + padding-left: 0 +} + +.form-control-sm { + height: calc(1.8125rem + 2px); + padding: .25rem .5rem; + font-size: .875rem; + line-height: 1.5; + border-radius: .2rem +} + +.form-control-lg { + height: calc(2.875rem + 2px); + padding: .5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: .3rem +} + +select.form-control[multiple], +select.form-control[size] { + height: auto +} + +textarea.form-control { + height: auto +} + +.form-group { + margin-bottom: 1rem +} + +.form-text { + display: block; + margin-top: .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; + padding-left: 1.25rem +} + +.form-check-input { + position: absolute; + margin-top: .3rem; + margin-left: -1.25rem +} + +.form-check-input:disabled~.form-check-label { + color: #6c757d +} + +.form-check-label { + margin-bottom: 0 +} + +.form-check-inline { + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-align: center; + align-items: center; + padding-left: 0; + margin-right: .75rem +} + +.form-check-inline .form-check-input { + position: static; + margin-top: 0; + margin-right: .3125rem; + margin-left: 0 +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: .25rem; + font-size: 80%; + color: #28a745 +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: .25rem .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(40, 167, 69, .9); + border-radius: .25rem +} + +.custom-select.is-valid, +.form-control.is-valid, +.was-validated .custom-select:valid, +.was-validated .form-control:valid { + border-color: #28a745 +} + +.custom-select.is-valid:focus, +.form-control.is-valid:focus, +.was-validated .custom-select:valid:focus, +.was-validated .form-control:valid:focus { + border-color: #28a745; + box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) +} + +.custom-select.is-valid~.valid-feedback, +.custom-select.is-valid~.valid-tooltip, +.form-control.is-valid~.valid-feedback, +.form-control.is-valid~.valid-tooltip, +.was-validated .custom-select:valid~.valid-feedback, +.was-validated .custom-select:valid~.valid-tooltip, +.was-validated .form-control:valid~.valid-feedback, +.was-validated .form-control:valid~.valid-tooltip { + display: block +} + +.form-control-file.is-valid~.valid-feedback, +.form-control-file.is-valid~.valid-tooltip, +.was-validated .form-control-file:valid~.valid-feedback, +.was-validated .form-control-file:valid~.valid-tooltip { + display: block +} + +.form-check-input.is-valid~.form-check-label, +.was-validated .form-check-input:valid~.form-check-label { + color: #28a745 +} + +.form-check-input.is-valid~.valid-feedback, +.form-check-input.is-valid~.valid-tooltip, +.was-validated .form-check-input:valid~.valid-feedback, +.was-validated .form-check-input:valid~.valid-tooltip { + display: block +} + +.custom-control-input.is-valid~.custom-control-label, +.was-validated .custom-control-input:valid~.custom-control-label { + color: #28a745 +} + +.custom-control-input.is-valid~.custom-control-label::before, +.was-validated .custom-control-input:valid~.custom-control-label::before { + background-color: #71dd8a +} + +.custom-control-input.is-valid~.valid-feedback, +.custom-control-input.is-valid~.valid-tooltip, +.was-validated .custom-control-input:valid~.valid-feedback, +.was-validated .custom-control-input:valid~.valid-tooltip { + display: block +} + +.custom-control-input.is-valid:checked~.custom-control-label::before, +.was-validated .custom-control-input:valid:checked~.custom-control-label::before { + background-color: #34ce57 +} + +.custom-control-input.is-valid:focus~.custom-control-label::before, +.was-validated .custom-control-input:valid:focus~.custom-control-label::before { + box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(40, 167, 69, .25) +} + +.custom-file-input.is-valid~.custom-file-label, +.was-validated .custom-file-input:valid~.custom-file-label { + border-color: #28a745 +} + +.custom-file-input.is-valid~.custom-file-label::after, +.was-validated .custom-file-input:valid~.custom-file-label::after { + border-color: inherit +} + +.custom-file-input.is-valid~.valid-feedback, +.custom-file-input.is-valid~.valid-tooltip, +.was-validated .custom-file-input:valid~.valid-feedback, +.was-validated .custom-file-input:valid~.valid-tooltip { + display: block +} + +.custom-file-input.is-valid:focus~.custom-file-label, +.was-validated .custom-file-input:valid:focus~.custom-file-label { + box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: .25rem; + font-size: 80%; + color: #dc3545 +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: .25rem .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(220, 53, 69, .9); + border-radius: .25rem +} + +.custom-select.is-invalid, +.form-control.is-invalid, +.was-validated .custom-select:invalid, +.was-validated .form-control:invalid { + border-color: #dc3545 +} + +.custom-select.is-invalid:focus, +.form-control.is-invalid:focus, +.was-validated .custom-select:invalid:focus, +.was-validated .form-control:invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) +} + +.custom-select.is-invalid~.invalid-feedback, +.custom-select.is-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, +.was-validated .form-control:invalid~.invalid-feedback, +.was-validated .form-control:invalid~.invalid-tooltip { + display: block +} + +.form-control-file.is-invalid~.invalid-feedback, +.form-control-file.is-invalid~.invalid-tooltip, +.was-validated .form-control-file:invalid~.invalid-feedback, +.was-validated .form-control-file:invalid~.invalid-tooltip { + display: block +} + +.form-check-input.is-invalid~.form-check-label, +.was-validated .form-check-input:invalid~.form-check-label { + color: #dc3545 +} + +.form-check-input.is-invalid~.invalid-feedback, +.form-check-input.is-invalid~.invalid-tooltip, +.was-validated .form-check-input:invalid~.invalid-feedback, +.was-validated .form-check-input:invalid~.invalid-tooltip { + display: block +} + +.custom-control-input.is-invalid~.custom-control-label, +.was-validated .custom-control-input:invalid~.custom-control-label { + color: #dc3545 +} + +.custom-control-input.is-invalid~.custom-control-label::before, +.was-validated .custom-control-input:invalid~.custom-control-label::before { + background-color: #efa2a9 +} + +.custom-control-input.is-invalid~.invalid-feedback, +.custom-control-input.is-invalid~.invalid-tooltip, +.was-validated .custom-control-input:invalid~.invalid-feedback, +.was-validated .custom-control-input:invalid~.invalid-tooltip { + display: block +} + +.custom-control-input.is-invalid:checked~.custom-control-label::before, +.was-validated .custom-control-input:invalid:checked~.custom-control-label::before { + background-color: #e4606d +} + +.custom-control-input.is-invalid:focus~.custom-control-label::before, +.was-validated .custom-control-input:invalid:focus~.custom-control-label::before { + box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(220, 53, 69, .25) +} + +.custom-file-input.is-invalid~.custom-file-label, +.was-validated .custom-file-input:invalid~.custom-file-label { + border-color: #dc3545 +} + +.custom-file-input.is-invalid~.custom-file-label::after, +.was-validated .custom-file-input:invalid~.custom-file-label::after { + border-color: inherit +} + +.custom-file-input.is-invalid~.invalid-feedback, +.custom-file-input.is-invalid~.invalid-tooltip, +.was-validated .custom-file-input:invalid~.invalid-feedback, +.was-validated .custom-file-input:invalid~.invalid-tooltip { + display: block +} + +.custom-file-input.is-invalid:focus~.custom-file-label, +.was-validated .custom-file-input:invalid:focus~.custom-file-label { + box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .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 .custom-select, + .form-inline .input-group { + width: auto + } + .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; + padding-left: 0 + } + .form-inline .form-check-input { + position: relative; + margin-top: 0; + margin-right: .25rem; + margin-left: 0 + } + .form-inline .custom-control { + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center + } + .form-inline .custom-control-label { + margin-bottom: 0 + } +} + +.btn { + display: inline-block; + font-weight: 400; + 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: .375rem .75rem; + font-size: 1rem; + line-height: 1.5; + border-radius: .25rem; + transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out +} + +@media screen and (prefers-reduced-motion:reduce) { + .btn { + transition: none + } +} + +.btn:focus, +.btn:hover { + text-decoration: none +} + +.btn.focus, +.btn:focus { + outline: 0; + box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) +} + +.btn.disabled, +.btn:disabled { + opacity: .65 +} + +.btn:not(:disabled):not(.disabled) { + cursor: pointer +} + +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 .2rem rgba(0, 123, 255, .5) +} + +.btn-primary.disabled, +.btn-primary:disabled { + color: #fff; + background-color: #007bff; + border-color: #007bff +} + +.btn-primary:not(:disabled):not(.disabled).active, +.btn-primary:not(:disabled):not(.disabled):active, +.show>.btn-primary.dropdown-toggle { + color: #fff; + background-color: #0062cc; + border-color: #005cbf +} + +.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 .2rem rgba(0, 123, 255, .5) +} + +.btn-secondary { + color: #fff; + background-color: #6c757d; + border-color: #6c757d +} + +.btn-secondary:hover { + color: #fff; + background-color: #5a6268; + border-color: #545b62 +} + +.btn-secondary.focus, +.btn-secondary:focus { + box-shadow: 0 0 0 .2rem rgba(108, 117, 125, .5) +} + +.btn-secondary.disabled, +.btn-secondary:disabled { + color: #fff; + background-color: #6c757d; + border-color: #6c757d +} + +.btn-secondary:not(:disabled):not(.disabled).active, +.btn-secondary:not(:disabled):not(.disabled):active, +.show>.btn-secondary.dropdown-toggle { + color: #fff; + background-color: #545b62; + border-color: #4e555b +} + +.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 .2rem rgba(108, 117, 125, .5) +} + +.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 .2rem rgba(40, 167, 69, .5) +} + +.btn-success.disabled, +.btn-success:disabled { + color: #fff; + background-color: #28a745; + border-color: #28a745 +} + +.btn-success:not(:disabled):not(.disabled).active, +.btn-success:not(:disabled):not(.disabled):active, +.show>.btn-success.dropdown-toggle { + color: #fff; + background-color: #1e7e34; + border-color: #1c7430 +} + +.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 .2rem rgba(40, 167, 69, .5) +} + +.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 .2rem rgba(23, 162, 184, .5) +} + +.btn-info.disabled, +.btn-info:disabled { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8 +} + +.btn-info:not(:disabled):not(.disabled).active, +.btn-info:not(:disabled):not(.disabled):active, +.show>.btn-info.dropdown-toggle { + color: #fff; + background-color: #117a8b; + border-color: #10707f +} + +.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 .2rem rgba(23, 162, 184, .5) +} + +.btn-warning { + color: #212529; + background-color: #ffc107; + border-color: #ffc107 +} + +.btn-warning:hover { + color: #212529; + background-color: #e0a800; + border-color: #d39e00 +} + +.btn-warning.focus, +.btn-warning:focus { + box-shadow: 0 0 0 .2rem rgba(255, 193, 7, .5) +} + +.btn-warning.disabled, +.btn-warning:disabled { + color: #212529; + background-color: #ffc107; + border-color: #ffc107 +} + +.btn-warning:not(:disabled):not(.disabled).active, +.btn-warning:not(:disabled):not(.disabled):active, +.show>.btn-warning.dropdown-toggle { + color: #212529; + background-color: #d39e00; + border-color: #c69500 +} + +.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 .2rem rgba(255, 193, 7, .5) +} + +.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 .2rem rgba(220, 53, 69, .5) +} + +.btn-danger.disabled, +.btn-danger:disabled { + color: #fff; + background-color: #dc3545; + border-color: #dc3545 +} + +.btn-danger:not(:disabled):not(.disabled).active, +.btn-danger:not(:disabled):not(.disabled):active, +.show>.btn-danger.dropdown-toggle { + color: #fff; + background-color: #bd2130; + border-color: #b21f2d +} + +.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 .2rem rgba(220, 53, 69, .5) +} + +.btn-light { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa +} + +.btn-light:hover { + color: #212529; + background-color: #e2e6ea; + border-color: #dae0e5 +} + +.btn-light.focus, +.btn-light:focus { + box-shadow: 0 0 0 .2rem rgba(248, 249, 250, .5) +} + +.btn-light.disabled, +.btn-light:disabled { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa +} + +.btn-light:not(:disabled):not(.disabled).active, +.btn-light:not(:disabled):not(.disabled):active, +.show>.btn-light.dropdown-toggle { + color: #212529; + background-color: #dae0e5; + border-color: #d3d9df +} + +.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 .2rem rgba(248, 249, 250, .5) +} + +.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 .2rem rgba(52, 58, 64, .5) +} + +.btn-dark.disabled, +.btn-dark:disabled { + color: #fff; + background-color: #343a40; + border-color: #343a40 +} + +.btn-dark:not(:disabled):not(.disabled).active, +.btn-dark:not(:disabled):not(.disabled):active, +.show>.btn-dark.dropdown-toggle { + color: #fff; + background-color: #1d2124; + border-color: #171a1d +} + +.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 .2rem rgba(52, 58, 64, .5) +} + +.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 .2rem rgba(0, 123, 255, .5) +} + +.btn-outline-primary.disabled, +.btn-outline-primary:disabled { + color: #007bff; + 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: #007bff; + border-color: #007bff +} + +.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 .2rem rgba(0, 123, 255, .5) +} + +.btn-outline-secondary { + color: #6c757d; + background-color: transparent; + background-image: none; + border-color: #6c757d +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #6c757d; + border-color: #6c757d +} + +.btn-outline-secondary.focus, +.btn-outline-secondary:focus { + box-shadow: 0 0 0 .2rem rgba(108, 117, 125, .5) +} + +.btn-outline-secondary.disabled, +.btn-outline-secondary:disabled { + color: #6c757d; + 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: #6c757d; + border-color: #6c757d +} + +.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 .2rem rgba(108, 117, 125, .5) +} + +.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 .2rem rgba(40, 167, 69, .5) +} + +.btn-outline-success.disabled, +.btn-outline-success:disabled { + color: #28a745; + 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: #28a745; + border-color: #28a745 +} + +.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 .2rem rgba(40, 167, 69, .5) +} + +.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 .2rem rgba(23, 162, 184, .5) +} + +.btn-outline-info.disabled, +.btn-outline-info:disabled { + color: #17a2b8; + 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: #17a2b8; + border-color: #17a2b8 +} + +.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 .2rem rgba(23, 162, 184, .5) +} + +.btn-outline-warning { + color: #ffc107; + background-color: transparent; + background-image: none; + border-color: #ffc107 +} + +.btn-outline-warning:hover { + color: #212529; + background-color: #ffc107; + border-color: #ffc107 +} + +.btn-outline-warning.focus, +.btn-outline-warning:focus { + box-shadow: 0 0 0 .2rem rgba(255, 193, 7, .5) +} + +.btn-outline-warning.disabled, +.btn-outline-warning:disabled { + color: #ffc107; + 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: #212529; + background-color: #ffc107; + border-color: #ffc107 +} + +.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 .2rem rgba(255, 193, 7, .5) +} + +.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 .2rem rgba(220, 53, 69, .5) +} + +.btn-outline-danger.disabled, +.btn-outline-danger:disabled { + color: #dc3545; + 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: #dc3545; + border-color: #dc3545 +} + +.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 .2rem rgba(220, 53, 69, .5) +} + +.btn-outline-light { + color: #f8f9fa; + background-color: transparent; + background-image: none; + border-color: #f8f9fa +} + +.btn-outline-light:hover { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa +} + +.btn-outline-light.focus, +.btn-outline-light:focus { + box-shadow: 0 0 0 .2rem rgba(248, 249, 250, .5) +} + +.btn-outline-light.disabled, +.btn-outline-light:disabled { + color: #f8f9fa; + 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: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa +} + +.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 .2rem rgba(248, 249, 250, .5) +} + +.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 .2rem rgba(52, 58, 64, .5) +} + +.btn-outline-dark.disabled, +.btn-outline-dark:disabled { + color: #343a40; + 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: #343a40; + border-color: #343a40 +} + +.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 .2rem rgba(52, 58, 64, .5) +} + +.btn-link { + font-weight: 400; + color: #007bff; + background-color: transparent +} + +.btn-link:hover { + color: #0056b3; + text-decoration: underline; + background-color: transparent; + border-color: transparent +} + +.btn-link.focus, +.btn-link:focus { + text-decoration: underline; + border-color: transparent; + box-shadow: none +} + +.btn-link.disabled, +.btn-link:disabled { + color: #6c757d; + pointer-events: none +} + +.btn-group-lg>.btn, +.btn-lg { + padding: .5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: .3rem +} + +.btn-group-sm>.btn, +.btn-sm { + padding: .25rem .5rem; + font-size: .875rem; + line-height: 1.5; + border-radius: .2rem +} + +.btn-block { + display: block; + width: 100% +} + +.btn-block+.btn-block { + margin-top: .5rem +} + +input[type=button].btn-block, +input[type=reset].btn-block, +input[type=submit].btn-block { + width: 100% +} + +.fade { + transition: opacity .15s linear +} + +@media screen and (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 .35s ease +} + +@media screen and (prefers-reduced-motion:reduce) { + .collapsing { + transition: none + } +} + +.dropdown, +.dropleft, +.dropright, +.dropup { + position: relative +} + +.dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: .255em; + vertical-align: .255em; + content: ""; + border-top: .3em solid; + border-right: .3em solid transparent; + border-bottom: 0; + border-left: .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: .5rem 0; + margin: .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, .15); + border-radius: .25rem +} + +.dropdown-menu-right { + right: 0; + left: auto +} + +.dropup .dropdown-menu { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: .125rem +} + +.dropup .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: .255em; + vertical-align: .255em; + content: ""; + border-top: 0; + border-right: .3em solid transparent; + border-bottom: .3em solid; + border-left: .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: .125rem +} + +.dropright .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: .255em; + vertical-align: .255em; + content: ""; + border-top: .3em solid transparent; + border-right: 0; + border-bottom: .3em solid transparent; + border-left: .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: .125rem +} + +.dropleft .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: .255em; + vertical-align: .255em; + content: "" +} + +.dropleft .dropdown-toggle::after { + display: none +} + +.dropleft .dropdown-toggle::before { + display: inline-block; + width: 0; + height: 0; + margin-right: .255em; + vertical-align: .255em; + content: ""; + border-top: .3em solid transparent; + border-right: .3em solid; + border-bottom: .3em solid transparent +} + +.dropleft .dropdown-toggle:empty::after { + margin-left: 0 +} + +.dropleft .dropdown-toggle::before { + vertical-align: 0 +} + +.dropdown-menu[x-placement^=bottom], +.dropdown-menu[x-placement^=left], +.dropdown-menu[x-placement^=right], +.dropdown-menu[x-placement^=top] { + right: auto; + bottom: auto +} + +.dropdown-divider { + height: 0; + margin: .5rem 0; + overflow: hidden; + border-top: 1px solid #e9ecef +} + +.dropdown-item { + display: block; + width: 100%; + padding: .25rem 1.5rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + 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: #6c757d; + background-color: transparent +} + +.dropdown-menu.show { + display: block +} + +.dropdown-header { + display: block; + padding: .5rem 1.5rem; + margin-bottom: 0; + font-size: .875rem; + color: #6c757d; + white-space: nowrap +} + +.dropdown-item-text { + display: block; + padding: .25rem 1.5rem; + color: #212529 +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle +} + +.btn-group-vertical>.btn, +.btn-group>.btn { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto +} + +.btn-group-vertical>.btn:hover, +.btn-group>.btn:hover { + z-index: 1 +} + +.btn-group-vertical>.btn.active, +.btn-group-vertical>.btn:active, +.btn-group-vertical>.btn:focus, +.btn-group>.btn.active, +.btn-group>.btn:active, +.btn-group>.btn:focus { + z-index: 1 +} + +.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:first-child { + margin-left: 0 +} + +.btn-group>.btn-group:not(:last-child)>.btn, +.btn-group>.btn:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.btn-group>.btn-group:not(:first-child)>.btn, +.btn-group>.btn:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0 +} + +.dropdown-toggle-split { + padding-right: .5625rem; + padding-left: .5625rem +} + +.dropdown-toggle-split::after, +.dropright .dropdown-toggle-split::after, +.dropup .dropdown-toggle-split::after { + margin-left: 0 +} + +.dropleft .dropdown-toggle-split::before { + margin-right: 0 +} + +.btn-group-sm>.btn+.dropdown-toggle-split, +.btn-sm+.dropdown-toggle-split { + padding-right: .375rem; + padding-left: .375rem +} + +.btn-group-lg>.btn+.dropdown-toggle-split, +.btn-lg+.dropdown-toggle-split { + padding-right: .75rem; + padding-left: .75rem +} + +.btn-group-vertical { + -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-group:not(:last-child)>.btn, +.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical>.btn-group:not(:first-child)>.btn, +.btn-group-vertical>.btn:not(:first-child) { + 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=checkbox], +.btn-group-toggle>.btn input[type=radio], +.btn-group-toggle>.btn-group>.btn input[type=checkbox], +.btn-group-toggle>.btn-group>.btn input[type=radio] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none +} + +.input-group { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: stretch; + align-items: stretch; + width: 100% +} + +.input-group>.custom-file, +.input-group>.custom-select, +.input-group>.form-control { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0 +} + +.input-group>.custom-file+.custom-file, +.input-group>.custom-file+.custom-select, +.input-group>.custom-file+.form-control, +.input-group>.custom-select+.custom-file, +.input-group>.custom-select+.custom-select, +.input-group>.custom-select+.form-control, +.input-group>.form-control+.custom-file, +.input-group>.form-control+.custom-select, +.input-group>.form-control+.form-control { + margin-left: -1px +} + +.input-group>.custom-file .custom-file-input:focus~.custom-file-label, +.input-group>.custom-select:focus, +.input-group>.form-control:focus { + z-index: 3 +} + +.input-group>.custom-file .custom-file-input:focus { + z-index: 4 +} + +.input-group>.custom-select:not(:last-child), +.input-group>.form-control:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.input-group>.custom-select:not(:first-child), +.input-group>.form-control:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0 +} + +.input-group>.custom-file { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + 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-append, +.input-group-prepend { + display: -ms-flexbox; + display: flex +} + +.input-group-append .btn, +.input-group-prepend .btn { + position: relative; + z-index: 2 +} + +.input-group-append .btn+.btn, +.input-group-append .btn+.input-group-text, +.input-group-append .input-group-text+.btn, +.input-group-append .input-group-text+.input-group-text, +.input-group-prepend .btn+.btn, +.input-group-prepend .btn+.input-group-text, +.input-group-prepend .input-group-text+.btn, +.input-group-prepend .input-group-text+.input-group-text { + margin-left: -1px +} + +.input-group-prepend { + margin-right: -1px +} + +.input-group-append { + margin-left: -1px +} + +.input-group-text { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: .375rem .75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: .25rem +} + +.input-group-text input[type=checkbox], +.input-group-text input[type=radio] { + margin-top: 0 +} + +.input-group-lg>.form-control, +.input-group-lg>.input-group-append>.btn, +.input-group-lg>.input-group-append>.input-group-text, +.input-group-lg>.input-group-prepend>.btn, +.input-group-lg>.input-group-prepend>.input-group-text { + height: calc(2.875rem + 2px); + padding: .5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: .3rem +} + +.input-group-sm>.form-control, +.input-group-sm>.input-group-append>.btn, +.input-group-sm>.input-group-append>.input-group-text, +.input-group-sm>.input-group-prepend>.btn, +.input-group-sm>.input-group-prepend>.input-group-text { + height: calc(1.8125rem + 2px); + padding: .25rem .5rem; + font-size: .875rem; + line-height: 1.5; + border-radius: .2rem +} + +.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), +.input-group>.input-group-append:not(:last-child)>.btn, +.input-group>.input-group-append:not(:last-child)>.input-group-text, +.input-group>.input-group-prepend>.btn, +.input-group>.input-group-prepend>.input-group-text { + 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:first-child>.btn:not(:first-child), +.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child), +.input-group>.input-group-prepend:not(:first-child)>.btn, +.input-group>.input-group-prepend:not(:first-child)>.input-group-text { + 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: -ms-inline-flexbox; + display: inline-flex; + margin-right: 1rem +} + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0 +} + +.custom-control-input:checked~.custom-control-label::before { + color: #fff; + background-color: #007bff +} + +.custom-control-input:focus~.custom-control-label::before { + box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) +} + +.custom-control-input:active~.custom-control-label::before { + color: #fff; + background-color: #b3d7ff +} + +.custom-control-input:disabled~.custom-control-label { + color: #6c757d +} + +.custom-control-input:disabled~.custom-control-label::before { + background-color: #e9ecef +} + +.custom-control-label { + position: relative; + margin-bottom: 0 +} + +.custom-control-label::before { + position: absolute; + top: .25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + content: ""; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #dee2e6 +} + +.custom-control-label::after { + position: absolute; + top: .25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + content: ""; + background-repeat: no-repeat; + background-position: center center; + background-size: 50% 50% +} + +.custom-checkbox .custom-control-label::before { + border-radius: .25rem +} + +.custom-checkbox .custom-control-input:checked~.custom-control-label::before { + background-color: #007bff +} + +.custom-checkbox .custom-control-input:checked~.custom-control-label::after { + 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-label::before { + background-color: #007bff +} + +.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after { + 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-checkbox .custom-control-input:disabled:checked~.custom-control-label::before { + background-color: rgba(0, 123, 255, .5) +} + +.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before { + background-color: rgba(0, 123, 255, .5) +} + +.custom-radio .custom-control-label::before { + border-radius: 50% +} + +.custom-radio .custom-control-input:checked~.custom-control-label::before { + background-color: #007bff +} + +.custom-radio .custom-control-input:checked~.custom-control-label::after { + 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-radio .custom-control-input:disabled:checked~.custom-control-label::before { + background-color: rgba(0, 123, 255, .5) +} + +.custom-select { + display: inline-block; + width: 100%; + height: calc(2.25rem + 2px); + padding: .375rem 1.75rem .375rem .75rem; + line-height: 1.5; + 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='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center; + background-size: 8px 10px; + border: 1px solid #ced4da; + border-radius: .25rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none +} + +.custom-select:focus { + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 .2rem rgba(128, 189, 255, .5) +} + +.custom-select:focus::-ms-value { + color: #495057; + background-color: #fff +} + +.custom-select[multiple], +.custom-select[size]:not([size="1"]) { + height: auto; + padding-right: .75rem; + background-image: none +} + +.custom-select:disabled { + color: #6c757d; + background-color: #e9ecef +} + +.custom-select::-ms-expand { + opacity: 0 +} + +.custom-select-sm { + height: calc(1.8125rem + 2px); + padding-top: .375rem; + padding-bottom: .375rem; + font-size: 75% +} + +.custom-select-lg { + height: calc(2.875rem + 2px); + padding-top: .375rem; + padding-bottom: .375rem; + font-size: 125% +} + +.custom-file { + position: relative; + display: inline-block; + width: 100%; + height: calc(2.25rem + 2px); + margin-bottom: 0 +} + +.custom-file-input { + position: relative; + z-index: 2; + width: 100%; + height: calc(2.25rem + 2px); + margin: 0; + opacity: 0 +} + +.custom-file-input:focus~.custom-file-label { + border-color: #80bdff; + box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) +} + +.custom-file-input:focus~.custom-file-label::after { + border-color: #80bdff +} + +.custom-file-input:disabled~.custom-file-label { + background-color: #e9ecef +} + +.custom-file-input:lang(en)~.custom-file-label::after { + content: "Browse" +} + +.custom-file-label { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 1; + height: calc(2.25rem + 2px); + padding: .375rem .75rem; + line-height: 1.5; + color: #495057; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: .25rem +} + +.custom-file-label::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 3; + display: block; + height: 2.25rem; + padding: .375rem .75rem; + line-height: 1.5; + color: #495057; + content: "Browse"; + background-color: #e9ecef; + border-left: 1px solid #ced4da; + border-radius: 0 .25rem .25rem 0 +} + +.custom-range { + width: 100%; + padding-left: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none +} + +.custom-range:focus { + outline: 0 +} + +.custom-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) +} + +.custom-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) +} + +.custom-range:focus::-ms-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25) +} + +.custom-range::-moz-focus-outer { + border: 0 +} + +.custom-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -.25rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; + -webkit-appearance: none; + appearance: none +} + +@media screen and (prefers-reduced-motion:reduce) { + .custom-range::-webkit-slider-thumb { + transition: none + } +} + +.custom-range::-webkit-slider-thumb:active { + background-color: #b3d7ff +} + +.custom-range::-webkit-slider-runnable-track { + width: 100%; + height: .5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem +} + +.custom-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; + -moz-appearance: none; + appearance: none +} + +@media screen and (prefers-reduced-motion:reduce) { + .custom-range::-moz-range-thumb { + transition: none + } +} + +.custom-range::-moz-range-thumb:active { + background-color: #b3d7ff +} + +.custom-range::-moz-range-track { + width: 100%; + height: .5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem +} + +.custom-range::-ms-thumb { + width: 1rem; + height: 1rem; + margin-top: 0; + margin-right: .2rem; + margin-left: .2rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; + appearance: none +} + +@media screen and (prefers-reduced-motion:reduce) { + .custom-range::-ms-thumb { + transition: none + } +} + +.custom-range::-ms-thumb:active { + background-color: #b3d7ff +} + +.custom-range::-ms-track { + width: 100%; + height: .5rem; + color: transparent; + cursor: pointer; + background-color: transparent; + border-color: transparent; + border-width: .5rem +} + +.custom-range::-ms-fill-lower { + background-color: #dee2e6; + border-radius: 1rem +} + +.custom-range::-ms-fill-upper { + margin-right: 15px; + background-color: #dee2e6; + border-radius: 1rem +} + +.custom-control-label::before, +.custom-file-label, +.custom-select { + transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out +} + +@media screen and (prefers-reduced-motion:reduce) { + .custom-control-label::before, + .custom-file-label, + .custom-select { + transition: none + } +} + +.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: .5rem 1rem +} + +.nav-link:focus, +.nav-link:hover { + text-decoration: none +} + +.nav-link.disabled { + color: #6c757d +} + +.nav-tabs { + border-bottom: 1px solid #dee2e6 +} + +.nav-tabs .nav-item { + margin-bottom: -1px +} + +.nav-tabs .nav-link { + border: 1px solid transparent; + border-top-left-radius: .25rem; + border-top-right-radius: .25rem +} + +.nav-tabs .nav-link:focus, +.nav-tabs .nav-link:hover { + border-color: #e9ecef #e9ecef #dee2e6 +} + +.nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent +} + +.nav-tabs .nav-item.show .nav-link, +.nav-tabs .nav-link.active { + color: #495057; + background-color: #fff; + border-color: #dee2e6 #dee2e6 #fff +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0 +} + +.nav-pills .nav-link { + border-radius: .25rem +} + +.nav-pills .nav-link.active, +.nav-pills .show>.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: .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: .3125rem; + padding-bottom: .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: .5rem; + padding-bottom: .5rem +} + +.navbar-collapse { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-align: center; + align-items: center +} + +.navbar-toggler { + padding: .25rem .75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: .25rem +} + +.navbar-toggler:focus, +.navbar-toggler:hover { + text-decoration: none +} + +.navbar-toggler:not(:disabled):not(.disabled) { + cursor: pointer +} + +.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 { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width:576px) { + .navbar-expand-sm { + -ms-flex-flow: row nowrap; + flex-flow: row 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 .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; + -ms-flex-preferred-size: auto; + flex-basis: auto + } + .navbar-expand-sm .navbar-toggler { + display: none + } +} + +@media (max-width:767.98px) { + .navbar-expand-md>.container, + .navbar-expand-md>.container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width:768px) { + .navbar-expand-md { + -ms-flex-flow: row nowrap; + flex-flow: row 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 .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; + -ms-flex-preferred-size: auto; + flex-basis: auto + } + .navbar-expand-md .navbar-toggler { + display: none + } +} + +@media (max-width:991.98px) { + .navbar-expand-lg>.container, + .navbar-expand-lg>.container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width:992px) { + .navbar-expand-lg { + -ms-flex-flow: row nowrap; + flex-flow: row 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 .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; + -ms-flex-preferred-size: auto; + flex-basis: auto + } + .navbar-expand-lg .navbar-toggler { + display: none + } +} + +@media (max-width:1199.98px) { + .navbar-expand-xl>.container, + .navbar-expand-xl>.container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width:1200px) { + .navbar-expand-xl { + -ms-flex-flow: row nowrap; + flex-flow: row 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 .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; + -ms-flex-preferred-size: auto; + flex-basis: auto + } + .navbar-expand-xl .navbar-toggler { + display: none + } +} + +.navbar-expand { + -ms-flex-flow: row nowrap; + flex-flow: row 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 .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; + -ms-flex-preferred-size: auto; + flex-basis: auto +} + +.navbar-expand .navbar-toggler { + display: none +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, .9) +} + +.navbar-light .navbar-brand:focus, +.navbar-light .navbar-brand:hover { + color: rgba(0, 0, 0, .9) +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, .5) +} + +.navbar-light .navbar-nav .nav-link:focus, +.navbar-light .navbar-nav .nav-link:hover { + color: rgba(0, 0, 0, .7) +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, .3) +} + +.navbar-light .navbar-nav .active>.nav-link, +.navbar-light .navbar-nav .nav-link.active, +.navbar-light .navbar-nav .nav-link.show, +.navbar-light .navbar-nav .show>.nav-link { + color: rgba(0, 0, 0, .9) +} + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, .5); + border-color: rgba(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, .5) +} + +.navbar-light .navbar-text a { + color: rgba(0, 0, 0, .9) +} + +.navbar-light .navbar-text a:focus, +.navbar-light .navbar-text a:hover { + color: rgba(0, 0, 0, .9) +} + +.navbar-dark .navbar-brand { + color: #fff +} + +.navbar-dark .navbar-brand:focus, +.navbar-dark .navbar-brand:hover { + color: #fff +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, .5) +} + +.navbar-dark .navbar-nav .nav-link:focus, +.navbar-dark .navbar-nav .nav-link:hover { + color: rgba(255, 255, 255, .75) +} + +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, .25) +} + +.navbar-dark .navbar-nav .active>.nav-link, +.navbar-dark .navbar-nav .nav-link.active, +.navbar-dark .navbar-nav .nav-link.show, +.navbar-dark .navbar-nav .show>.nav-link { + color: #fff +} + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, .5); + border-color: rgba(255, 255, 255, .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, .5) +} + +.navbar-dark .navbar-text a { + color: #fff +} + +.navbar-dark .navbar-text a:focus, +.navbar-dark .navbar-text a:hover { + color: #fff +} + +.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, .125); + border-radius: .25rem +} + +.card>hr { + margin-right: 0; + margin-left: 0 +} + +.card>.list-group:first-child .list-group-item:first-child { + border-top-left-radius: .25rem; + border-top-right-radius: .25rem +} + +.card>.list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: .25rem; + border-bottom-left-radius: .25rem +} + +.card-body { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.25rem +} + +.card-title { + margin-bottom: .75rem +} + +.card-subtitle { + margin-top: -.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: .75rem 1.25rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, .03); + border-bottom: 1px solid rgba(0, 0, 0, .125) +} + +.card-header:first-child { + border-radius: calc(.25rem - 1px) calc(.25rem - 1px) 0 0 +} + +.card-header+.list-group .list-group-item:first-child { + border-top: 0 +} + +.card-footer { + padding: .75rem 1.25rem; + background-color: rgba(0, 0, 0, .03); + border-top: 1px solid rgba(0, 0, 0, .125) +} + +.card-footer:last-child { + border-radius: 0 0 calc(.25rem - 1px) calc(.25rem - 1px) +} + +.card-header-tabs { + margin-right: -.625rem; + margin-bottom: -.75rem; + margin-left: -.625rem; + border-bottom: 0 +} + +.card-header-pills { + margin-right: -.625rem; + margin-left: -.625rem +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem +} + +.card-img { + width: 100%; + border-radius: calc(.25rem - 1px) +} + +.card-img-top { + width: 100%; + border-top-left-radius: calc(.25rem - 1px); + border-top-right-radius: calc(.25rem - 1px) +} + +.card-img-bottom { + width: 100%; + border-bottom-right-radius: calc(.25rem - 1px); + border-bottom-left-radius: calc(.25rem - 1px) +} + +.card-deck { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column +} + +.card-deck .card { + margin-bottom: 15px +} + +@media (min-width:576px) { + .card-deck { + -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-bottom: 0; + margin-left: 15px + } +} + +.card-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column +} + +.card-group>.card { + margin-bottom: 15px +} + +@media (min-width:576px) { + .card-group { + -ms-flex-flow: row wrap; + flex-flow: row wrap + } + .card-group>.card { + -ms-flex: 1 0 0%; + flex: 1 0 0%; + margin-bottom: 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-header, + .card-group>.card:first-child .card-img-top { + border-top-right-radius: 0 + } + .card-group>.card:first-child .card-footer, + .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-header, + .card-group>.card:last-child .card-img-top { + border-top-left-radius: 0 + } + .card-group>.card:last-child .card-footer, + .card-group>.card:last-child .card-img-bottom { + border-bottom-left-radius: 0 + } + .card-group>.card:only-child { + border-radius: .25rem + } + .card-group>.card:only-child .card-header, + .card-group>.card:only-child .card-img-top { + border-top-left-radius: .25rem; + border-top-right-radius: .25rem + } + .card-group>.card:only-child .card-footer, + .card-group>.card:only-child .card-img-bottom { + border-bottom-right-radius: .25rem; + border-bottom-left-radius: .25rem + } + .card-group>.card:not(:first-child):not(:last-child):not(:only-child) { + border-radius: 0 + } + .card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer, + .card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header, + .card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom, + .card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top { + border-radius: 0 + } +} + +.card-columns .card { + margin-bottom: .75rem +} + +@media (min-width:576px) { + .card-columns { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + -moz-column-gap: 1.25rem; + column-gap: 1.25rem; + orphans: 1; + widows: 1 + } + .card-columns .card { + display: inline-block; + width: 100% + } +} + +.accordion .card:not(:first-of-type):not(:last-of-type) { + border-bottom: 0; + border-radius: 0 +} + +.accordion .card:not(:first-of-type) .card-header:first-child { + border-radius: 0 +} + +.accordion .card:first-of-type { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.accordion .card:last-of-type { + border-top-left-radius: 0; + border-top-right-radius: 0 +} + +.breadcrumb { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: .75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #e9ecef; + border-radius: .25rem +} + +.breadcrumb-item+.breadcrumb-item { + padding-left: .5rem +} + +.breadcrumb-item+.breadcrumb-item::before { + display: inline-block; + padding-right: .5rem; + color: #6c757d; + content: "/" +} + +.breadcrumb-item+.breadcrumb-item:hover::before { + text-decoration: underline +} + +.breadcrumb-item+.breadcrumb-item:hover::before { + text-decoration: none +} + +.breadcrumb-item.active { + color: #6c757d +} + +.pagination { + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; + border-radius: .25rem +} + +.page-link { + position: relative; + display: block; + padding: .5rem .75rem; + margin-left: -1px; + line-height: 1.25; + color: #007bff; + background-color: #fff; + border: 1px solid #dee2e6 +} + +.page-link:hover { + z-index: 2; + color: #0056b3; + text-decoration: none; + background-color: #e9ecef; + border-color: #dee2e6 +} + +.page-link:focus { + z-index: 2; + outline: 0; + box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) +} + +.page-link:not(:disabled):not(.disabled) { + cursor: pointer +} + +.page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: .25rem; + border-bottom-left-radius: .25rem +} + +.page-item:last-child .page-link { + border-top-right-radius: .25rem; + border-bottom-right-radius: .25rem +} + +.page-item.active .page-link { + z-index: 1; + color: #fff; + background-color: #007bff; + border-color: #007bff +} + +.page-item.disabled .page-link { + color: #6c757d; + pointer-events: none; + cursor: auto; + background-color: #fff; + border-color: #dee2e6 +} + +.pagination-lg .page-link { + padding: .75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5 +} + +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: .3rem; + border-bottom-left-radius: .3rem +} + +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: .3rem; + border-bottom-right-radius: .3rem +} + +.pagination-sm .page-link { + padding: .25rem .5rem; + font-size: .875rem; + line-height: 1.5 +} + +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: .2rem; + border-bottom-left-radius: .2rem +} + +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: .2rem; + border-bottom-right-radius: .2rem +} + +.badge { + display: inline-block; + padding: .25em .4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25rem +} + +.badge:empty { + display: none +} + +.btn .badge { + position: relative; + top: -1px +} + +.badge-pill { + padding-right: .6em; + padding-left: .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: #6c757d +} + +.badge-secondary[href]:focus, +.badge-secondary[href]:hover { + color: #fff; + text-decoration: none; + background-color: #545b62 +} + +.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: #212529; + background-color: #ffc107 +} + +.badge-warning[href]:focus, +.badge-warning[href]:hover { + color: #212529; + 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: #212529; + background-color: #f8f9fa +} + +.badge-light[href]:focus, +.badge-light[href]:hover { + color: #212529; + 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: .3rem +} + +@media (min-width:576px) { + .jumbotron { + padding: 4rem 2rem + } +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0 +} + +.alert { + position: relative; + padding: .75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: .25rem +} + +.alert-heading { + color: inherit +} + +.alert-link { + font-weight: 700 +} + +.alert-dismissible { + padding-right: 4rem +} + +.alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: .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: #383d41; + background-color: #e2e3e5; + border-color: #d6d8db +} + +.alert-secondary hr { + border-top-color: #c8cbcf +} + +.alert-secondary .alert-link { + color: #202326 +} + +.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; + height: 1rem; + overflow: hidden; + font-size: .75rem; + background-color: #e9ecef; + border-radius: .25rem +} + +.progress-bar { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: center; + justify-content: center; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #007bff; + transition: width .6s ease +} + +@media screen and (prefers-reduced-motion:reduce) { + .progress-bar { + transition: none + } +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .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: .75rem 1.25rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, .125) +} + +.list-group-item:first-child { + border-top-left-radius: .25rem; + border-top-right-radius: .25rem +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: .25rem; + border-bottom-left-radius: .25rem +} + +.list-group-item:focus, +.list-group-item:hover { + z-index: 1; + text-decoration: none +} + +.list-group-item.disabled, +.list-group-item:disabled { + color: #6c757d; + 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 +} + +.list-group-item-primary.list-group-item-action:focus, +.list-group-item-primary.list-group-item-action:hover { + color: #004085; + background-color: #9fcdff +} + +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #004085; + border-color: #004085 +} + +.list-group-item-secondary { + color: #383d41; + background-color: #d6d8db +} + +.list-group-item-secondary.list-group-item-action:focus, +.list-group-item-secondary.list-group-item-action:hover { + color: #383d41; + background-color: #c8cbcf +} + +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #383d41; + border-color: #383d41 +} + +.list-group-item-success { + color: #155724; + background-color: #c3e6cb +} + +.list-group-item-success.list-group-item-action:focus, +.list-group-item-success.list-group-item-action:hover { + color: #155724; + background-color: #b1dfbb +} + +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #155724; + border-color: #155724 +} + +.list-group-item-info { + color: #0c5460; + background-color: #bee5eb +} + +.list-group-item-info.list-group-item-action:focus, +.list-group-item-info.list-group-item-action:hover { + color: #0c5460; + background-color: #abdde5 +} + +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #0c5460; + border-color: #0c5460 +} + +.list-group-item-warning { + color: #856404; + background-color: #ffeeba +} + +.list-group-item-warning.list-group-item-action:focus, +.list-group-item-warning.list-group-item-action:hover { + color: #856404; + background-color: #ffe8a1 +} + +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #856404; + border-color: #856404 +} + +.list-group-item-danger { + color: #721c24; + background-color: #f5c6cb +} + +.list-group-item-danger.list-group-item-action:focus, +.list-group-item-danger.list-group-item-action:hover { + color: #721c24; + background-color: #f1b0b7 +} + +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #721c24; + border-color: #721c24 +} + +.list-group-item-light { + color: #818182; + background-color: #fdfdfe +} + +.list-group-item-light.list-group-item-action:focus, +.list-group-item-light.list-group-item-action:hover { + color: #818182; + background-color: #ececf6 +} + +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #818182; + border-color: #818182 +} + +.list-group-item-dark { + color: #1b1e21; + background-color: #c6c8ca +} + +.list-group-item-dark.list-group-item-action:focus, +.list-group-item-dark.list-group-item-action:hover { + color: #1b1e21; + background-color: #b9bbbe +} + +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #1b1e21; + border-color: #1b1e21 +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5 +} + +.close:not(:disabled):not(.disabled) { + cursor: pointer +} + +.close:not(:disabled):not(.disabled):focus, +.close:not(:disabled):not(.disabled):hover { + color: #000; + text-decoration: none; + opacity: .75 +} + +button.close { + padding: 0; + background-color: transparent; + border: 0; + -webkit-appearance: none +} + +.modal-open { + overflow: hidden +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + outline: 0 +} + +.modal-dialog { + position: relative; + width: auto; + margin: .5rem; + pointer-events: none +} + +.modal.fade .modal-dialog { + transition: -webkit-transform .3s ease-out; + transition: transform .3s ease-out; + transition: transform .3s ease-out, -webkit-transform .3s ease-out; + -webkit-transform: translate(0, -25%); + transform: translate(0, -25%) +} + +@media screen and (prefers-reduced-motion:reduce) { + .modal.fade .modal-dialog { + transition: none + } +} + +.modal.show .modal-dialog { + -webkit-transform: translate(0, 0); + transform: translate(0, 0) +} + +.modal-dialog-centered { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + min-height: calc(100% - (.5rem * 2)) +} + +.modal-dialog-centered::before { + display: block; + height: calc(100vh - (.5rem * 2)); + content: "" +} + +.modal-content { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: .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: .5 +} + +.modal-header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 1rem; + border-bottom: 1px solid #e9ecef; + border-top-left-radius: .3rem; + border-top-right-radius: .3rem +} + +.modal-header .close { + padding: 1rem; + margin: -1rem -1rem -1rem auto +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5 +} + +.modal-body { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1rem +} + +.modal-footer { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 1rem; + 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: 1.75rem auto + } + .modal-dialog-centered { + min-height: calc(100% - (1.75rem * 2)) + } + .modal-dialog-centered::before { + height: calc(100vh - (1.75rem * 2)) + } + .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, "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: .875rem; + word-wrap: break-word; + opacity: 0 +} + +.tooltip.show { + opacity: .9 +} + +.tooltip .arrow { + position: absolute; + display: block; + width: .8rem; + height: .4rem +} + +.tooltip .arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid +} + +.bs-tooltip-auto[x-placement^=top], +.bs-tooltip-top { + padding: .4rem 0 +} + +.bs-tooltip-auto[x-placement^=top] .arrow, +.bs-tooltip-top .arrow { + bottom: 0 +} + +.bs-tooltip-auto[x-placement^=top] .arrow::before, +.bs-tooltip-top .arrow::before { + top: 0; + border-width: .4rem .4rem 0; + border-top-color: #000 +} + +.bs-tooltip-auto[x-placement^=right], +.bs-tooltip-right { + padding: 0 .4rem +} + +.bs-tooltip-auto[x-placement^=right] .arrow, +.bs-tooltip-right .arrow { + left: 0; + width: .4rem; + height: .8rem +} + +.bs-tooltip-auto[x-placement^=right] .arrow::before, +.bs-tooltip-right .arrow::before { + right: 0; + border-width: .4rem .4rem .4rem 0; + border-right-color: #000 +} + +.bs-tooltip-auto[x-placement^=bottom], +.bs-tooltip-bottom { + padding: .4rem 0 +} + +.bs-tooltip-auto[x-placement^=bottom] .arrow, +.bs-tooltip-bottom .arrow { + top: 0 +} + +.bs-tooltip-auto[x-placement^=bottom] .arrow::before, +.bs-tooltip-bottom .arrow::before { + bottom: 0; + border-width: 0 .4rem .4rem; + border-bottom-color: #000 +} + +.bs-tooltip-auto[x-placement^=left], +.bs-tooltip-left { + padding: 0 .4rem +} + +.bs-tooltip-auto[x-placement^=left] .arrow, +.bs-tooltip-left .arrow { + right: 0; + width: .4rem; + height: .8rem +} + +.bs-tooltip-auto[x-placement^=left] .arrow::before, +.bs-tooltip-left .arrow::before { + left: 0; + border-width: .4rem 0 .4rem .4rem; + border-left-color: #000 +} + +.tooltip-inner { + max-width: 200px; + padding: .25rem .5rem; + color: #fff; + text-align: center; + background-color: #000; + border-radius: .25rem +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: -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: .875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: .3rem +} + +.popover .arrow { + position: absolute; + display: block; + width: 1rem; + height: .5rem; + margin: 0 .3rem +} + +.popover .arrow::after, +.popover .arrow::before { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid +} + +.bs-popover-auto[x-placement^=top], +.bs-popover-top { + margin-bottom: .5rem +} + +.bs-popover-auto[x-placement^=top] .arrow, +.bs-popover-top .arrow { + bottom: calc((.5rem + 1px) * -1) +} + +.bs-popover-auto[x-placement^=top] .arrow::after, +.bs-popover-auto[x-placement^=top] .arrow::before, +.bs-popover-top .arrow::after, +.bs-popover-top .arrow::before { + border-width: .5rem .5rem 0 +} + +.bs-popover-auto[x-placement^=top] .arrow::before, +.bs-popover-top .arrow::before { + bottom: 0; + border-top-color: rgba(0, 0, 0, .25) +} + +.bs-popover-auto[x-placement^=top] .arrow::after, +.bs-popover-top .arrow::after { + bottom: 1px; + border-top-color: #fff +} + +.bs-popover-auto[x-placement^=right], +.bs-popover-right { + margin-left: .5rem +} + +.bs-popover-auto[x-placement^=right] .arrow, +.bs-popover-right .arrow { + left: calc((.5rem + 1px) * -1); + width: .5rem; + height: 1rem; + margin: .3rem 0 +} + +.bs-popover-auto[x-placement^=right] .arrow::after, +.bs-popover-auto[x-placement^=right] .arrow::before, +.bs-popover-right .arrow::after, +.bs-popover-right .arrow::before { + border-width: .5rem .5rem .5rem 0 +} + +.bs-popover-auto[x-placement^=right] .arrow::before, +.bs-popover-right .arrow::before { + left: 0; + border-right-color: rgba(0, 0, 0, .25) +} + +.bs-popover-auto[x-placement^=right] .arrow::after, +.bs-popover-right .arrow::after { + left: 1px; + border-right-color: #fff +} + +.bs-popover-auto[x-placement^=bottom], +.bs-popover-bottom { + margin-top: .5rem +} + +.bs-popover-auto[x-placement^=bottom] .arrow, +.bs-popover-bottom .arrow { + top: calc((.5rem + 1px) * -1) +} + +.bs-popover-auto[x-placement^=bottom] .arrow::after, +.bs-popover-auto[x-placement^=bottom] .arrow::before, +.bs-popover-bottom .arrow::after, +.bs-popover-bottom .arrow::before { + border-width: 0 .5rem .5rem .5rem +} + +.bs-popover-auto[x-placement^=bottom] .arrow::before, +.bs-popover-bottom .arrow::before { + top: 0; + border-bottom-color: rgba(0, 0, 0, .25) +} + +.bs-popover-auto[x-placement^=bottom] .arrow::after, +.bs-popover-bottom .arrow::after { + top: 1px; + border-bottom-color: #fff +} + +.bs-popover-auto[x-placement^=bottom] .popover-header::before, +.bs-popover-bottom .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -.5rem; + content: ""; + border-bottom: 1px solid #f7f7f7 +} + +.bs-popover-auto[x-placement^=left], +.bs-popover-left { + margin-right: .5rem +} + +.bs-popover-auto[x-placement^=left] .arrow, +.bs-popover-left .arrow { + right: calc((.5rem + 1px) * -1); + width: .5rem; + height: 1rem; + margin: .3rem 0 +} + +.bs-popover-auto[x-placement^=left] .arrow::after, +.bs-popover-auto[x-placement^=left] .arrow::before, +.bs-popover-left .arrow::after, +.bs-popover-left .arrow::before { + border-width: .5rem 0 .5rem .5rem +} + +.bs-popover-auto[x-placement^=left] .arrow::before, +.bs-popover-left .arrow::before { + right: 0; + border-left-color: rgba(0, 0, 0, .25) +} + +.bs-popover-auto[x-placement^=left] .arrow::after, +.bs-popover-left .arrow::after { + right: 1px; + border-left-color: #fff +} + +.popover-header { + padding: .5rem .75rem; + margin-bottom: 0; + font-size: 1rem; + color: inherit; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-left-radius: calc(.3rem - 1px); + border-top-right-radius: calc(.3rem - 1px) +} + +.popover-header:empty { + display: none +} + +.popover-body { + padding: .5rem .75rem; + 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%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px +} + +.carousel-item-next, +.carousel-item-prev, +.carousel-item.active { + display: block; + transition: -webkit-transform .6s ease; + transition: transform .6s ease; + transition: transform .6s ease, -webkit-transform .6s ease +} + +@media screen and (prefers-reduced-motion:reduce) { + .carousel-item-next, + .carousel-item-prev, + .carousel-item.active { + transition: none + } +} + +.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) + } +} + +.active.carousel-item-right, +.carousel-item-next { + -webkit-transform: translateX(100%); + transform: translateX(100%) +} + +@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)) { + .active.carousel-item-right, + .carousel-item-next { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) + } +} + +.active.carousel-item-left, +.carousel-item-prev { + -webkit-transform: translateX(-100%); + transform: translateX(-100%) +} + +@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)) { + .active.carousel-item-left, + .carousel-item-prev { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) + } +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-duration: .6s; + transition-property: opacity +} + +.carousel-fade .carousel-item-next.carousel-item-left, +.carousel-fade .carousel-item-prev.carousel-item-right, +.carousel-fade .carousel-item.active { + opacity: 1 +} + +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-right { + opacity: 0 +} + +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-prev, +.carousel-fade .carousel-item-next, +.carousel-fade .carousel-item-prev, +.carousel-fade .carousel-item.active { + -webkit-transform: translateX(0); + transform: translateX(0) +} + +@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)) { + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-prev, + .carousel-fade .carousel-item-next, + .carousel-fade .carousel-item-prev, + .carousel-fade .carousel-item.active { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } +} + +.carousel-control-next, +.carousel-control-prev { + 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: .5 +} + +.carousel-control-next:focus, +.carousel-control-next:hover, +.carousel-control-prev:focus, +.carousel-control-prev:hover { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9 +} + +.carousel-control-prev { + left: 0 +} + +.carousel-control-next { + right: 0 +} + +.carousel-control-next-icon, +.carousel-control-prev-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='M5.25 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='M2.75 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; + cursor: pointer; + background-color: rgba(255, 255, 255, .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, +button.bg-primary:focus, +button.bg-primary:hover { + background-color: #0062cc !important +} + +.bg-secondary { + background-color: #6c757d !important +} + +a.bg-secondary:focus, +a.bg-secondary:hover, +button.bg-secondary:focus, +button.bg-secondary:hover { + background-color: #545b62 !important +} + +.bg-success { + background-color: #28a745 !important +} + +a.bg-success:focus, +a.bg-success:hover, +button.bg-success:focus, +button.bg-success:hover { + background-color: #1e7e34 !important +} + +.bg-info { + background-color: #17a2b8 !important +} + +a.bg-info:focus, +a.bg-info:hover, +button.bg-info:focus, +button.bg-info:hover { + background-color: #117a8b !important +} + +.bg-warning { + background-color: #ffc107 !important +} + +a.bg-warning:focus, +a.bg-warning:hover, +button.bg-warning:focus, +button.bg-warning:hover { + background-color: #d39e00 !important +} + +.bg-danger { + background-color: #dc3545 !important +} + +a.bg-danger:focus, +a.bg-danger:hover, +button.bg-danger:focus, +button.bg-danger:hover { + background-color: #bd2130 !important +} + +.bg-light { + background-color: #f8f9fa !important +} + +a.bg-light:focus, +a.bg-light:hover, +button.bg-light:focus, +button.bg-light:hover { + background-color: #dae0e5 !important +} + +.bg-dark { + background-color: #343a40 !important +} + +a.bg-dark:focus, +a.bg-dark:hover, +button.bg-dark:focus, +button.bg-dark:hover { + background-color: #1d2124 !important +} + +.bg-white { + background-color: #fff !important +} + +.bg-transparent { + background-color: transparent !important +} + +.border { + border: 1px solid #dee2e6 !important +} + +.border-top { + border-top: 1px solid #dee2e6 !important +} + +.border-right { + border-right: 1px solid #dee2e6 !important +} + +.border-bottom { + border-bottom: 1px solid #dee2e6 !important +} + +.border-left { + border-left: 1px solid #dee2e6 !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: #6c757d !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: .25rem !important +} + +.rounded-top { + border-top-left-radius: .25rem !important; + border-top-right-radius: .25rem !important +} + +.rounded-right { + border-top-right-radius: .25rem !important; + border-bottom-right-radius: .25rem !important +} + +.rounded-bottom { + border-bottom-right-radius: .25rem !important; + border-bottom-left-radius: .25rem !important +} + +.rounded-left { + border-top-left-radius: .25rem !important; + border-bottom-left-radius: .25rem !important +} + +.rounded-circle { + border-radius: 50% !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: -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-row { + display: table-row !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-row { + display: table-row !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-row { + display: table-row !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-row { + display: table-row !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 + } +} + +@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: -ms-flexbox !important; + display: flex !important + } + .d-print-inline-flex { + display: -ms-inline-flexbox !important; + 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 embed, +.embed-responsive iframe, +.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 +} + +.flex-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important +} + +.flex-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important +} + +.flex-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important +} + +.flex-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important +} + +.flex-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !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 + } + .flex-sm-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important + } + .flex-sm-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important + } + .flex-sm-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important + } + .flex-sm-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important + } + .flex-sm-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !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 + } + .flex-md-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important + } + .flex-md-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important + } + .flex-md-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important + } + .flex-md-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important + } + .flex-md-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !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 + } + .flex-lg-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important + } + .flex-lg-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important + } + .flex-lg-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important + } + .flex-lg-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important + } + .flex-lg-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !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 + } + .flex-xl-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important + } + .flex-xl-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important + } + .flex-xl-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important + } + .flex-xl-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important + } + .flex-xl-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !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 + } +} + +.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; + 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 .125rem .25rem rgba(0, 0, 0, .075) !important +} + +.shadow { + box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15) !important +} + +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(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 +} + +.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: .25rem !important +} + +.mt-1, +.my-1 { + margin-top: .25rem !important +} + +.mr-1, +.mx-1 { + margin-right: .25rem !important +} + +.mb-1, +.my-1 { + margin-bottom: .25rem !important +} + +.ml-1, +.mx-1 { + margin-left: .25rem !important +} + +.m-2 { + margin: .5rem !important +} + +.mt-2, +.my-2 { + margin-top: .5rem !important +} + +.mr-2, +.mx-2 { + margin-right: .5rem !important +} + +.mb-2, +.my-2 { + margin-bottom: .5rem !important +} + +.ml-2, +.mx-2 { + margin-left: .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: .25rem !important +} + +.pt-1, +.py-1 { + padding-top: .25rem !important +} + +.pr-1, +.px-1 { + padding-right: .25rem !important +} + +.pb-1, +.py-1 { + padding-bottom: .25rem !important +} + +.pl-1, +.px-1 { + padding-left: .25rem !important +} + +.p-2 { + padding: .5rem !important +} + +.pt-2, +.py-2 { + padding-top: .5rem !important +} + +.pr-2, +.px-2 { + padding-right: .5rem !important +} + +.pb-2, +.py-2 { + padding-bottom: .5rem !important +} + +.pl-2, +.px-2 { + padding-left: .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-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: .25rem !important + } + .mt-sm-1, + .my-sm-1 { + margin-top: .25rem !important + } + .mr-sm-1, + .mx-sm-1 { + margin-right: .25rem !important + } + .mb-sm-1, + .my-sm-1 { + margin-bottom: .25rem !important + } + .ml-sm-1, + .mx-sm-1 { + margin-left: .25rem !important + } + .m-sm-2 { + margin: .5rem !important + } + .mt-sm-2, + .my-sm-2 { + margin-top: .5rem !important + } + .mr-sm-2, + .mx-sm-2 { + margin-right: .5rem !important + } + .mb-sm-2, + .my-sm-2 { + margin-bottom: .5rem !important + } + .ml-sm-2, + .mx-sm-2 { + margin-left: .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: .25rem !important + } + .pt-sm-1, + .py-sm-1 { + padding-top: .25rem !important + } + .pr-sm-1, + .px-sm-1 { + padding-right: .25rem !important + } + .pb-sm-1, + .py-sm-1 { + padding-bottom: .25rem !important + } + .pl-sm-1, + .px-sm-1 { + padding-left: .25rem !important + } + .p-sm-2 { + padding: .5rem !important + } + .pt-sm-2, + .py-sm-2 { + padding-top: .5rem !important + } + .pr-sm-2, + .px-sm-2 { + padding-right: .5rem !important + } + .pb-sm-2, + .py-sm-2 { + padding-bottom: .5rem !important + } + .pl-sm-2, + .px-sm-2 { + padding-left: .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-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: .25rem !important + } + .mt-md-1, + .my-md-1 { + margin-top: .25rem !important + } + .mr-md-1, + .mx-md-1 { + margin-right: .25rem !important + } + .mb-md-1, + .my-md-1 { + margin-bottom: .25rem !important + } + .ml-md-1, + .mx-md-1 { + margin-left: .25rem !important + } + .m-md-2 { + margin: .5rem !important + } + .mt-md-2, + .my-md-2 { + margin-top: .5rem !important + } + .mr-md-2, + .mx-md-2 { + margin-right: .5rem !important + } + .mb-md-2, + .my-md-2 { + margin-bottom: .5rem !important + } + .ml-md-2, + .mx-md-2 { + margin-left: .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: .25rem !important + } + .pt-md-1, + .py-md-1 { + padding-top: .25rem !important + } + .pr-md-1, + .px-md-1 { + padding-right: .25rem !important + } + .pb-md-1, + .py-md-1 { + padding-bottom: .25rem !important + } + .pl-md-1, + .px-md-1 { + padding-left: .25rem !important + } + .p-md-2 { + padding: .5rem !important + } + .pt-md-2, + .py-md-2 { + padding-top: .5rem !important + } + .pr-md-2, + .px-md-2 { + padding-right: .5rem !important + } + .pb-md-2, + .py-md-2 { + padding-bottom: .5rem !important + } + .pl-md-2, + .px-md-2 { + padding-left: .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-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: .25rem !important + } + .mt-lg-1, + .my-lg-1 { + margin-top: .25rem !important + } + .mr-lg-1, + .mx-lg-1 { + margin-right: .25rem !important + } + .mb-lg-1, + .my-lg-1 { + margin-bottom: .25rem !important + } + .ml-lg-1, + .mx-lg-1 { + margin-left: .25rem !important + } + .m-lg-2 { + margin: .5rem !important + } + .mt-lg-2, + .my-lg-2 { + margin-top: .5rem !important + } + .mr-lg-2, + .mx-lg-2 { + margin-right: .5rem !important + } + .mb-lg-2, + .my-lg-2 { + margin-bottom: .5rem !important + } + .ml-lg-2, + .mx-lg-2 { + margin-left: .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: .25rem !important + } + .pt-lg-1, + .py-lg-1 { + padding-top: .25rem !important + } + .pr-lg-1, + .px-lg-1 { + padding-right: .25rem !important + } + .pb-lg-1, + .py-lg-1 { + padding-bottom: .25rem !important + } + .pl-lg-1, + .px-lg-1 { + padding-left: .25rem !important + } + .p-lg-2 { + padding: .5rem !important + } + .pt-lg-2, + .py-lg-2 { + padding-top: .5rem !important + } + .pr-lg-2, + .px-lg-2 { + padding-right: .5rem !important + } + .pb-lg-2, + .py-lg-2 { + padding-bottom: .5rem !important + } + .pl-lg-2, + .px-lg-2 { + padding-left: .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-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: .25rem !important + } + .mt-xl-1, + .my-xl-1 { + margin-top: .25rem !important + } + .mr-xl-1, + .mx-xl-1 { + margin-right: .25rem !important + } + .mb-xl-1, + .my-xl-1 { + margin-bottom: .25rem !important + } + .ml-xl-1, + .mx-xl-1 { + margin-left: .25rem !important + } + .m-xl-2 { + margin: .5rem !important + } + .mt-xl-2, + .my-xl-2 { + margin-top: .5rem !important + } + .mr-xl-2, + .mx-xl-2 { + margin-right: .5rem !important + } + .mb-xl-2, + .my-xl-2 { + margin-bottom: .5rem !important + } + .ml-xl-2, + .mx-xl-2 { + margin-left: .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: .25rem !important + } + .pt-xl-1, + .py-xl-1 { + padding-top: .25rem !important + } + .pr-xl-1, + .px-xl-1 { + padding-right: .25rem !important + } + .pb-xl-1, + .py-xl-1 { + padding-bottom: .25rem !important + } + .pl-xl-1, + .px-xl-1 { + padding-left: .25rem !important + } + .p-xl-2 { + padding: .5rem !important + } + .pt-xl-2, + .py-xl-2 { + padding-top: .5rem !important + } + .pr-xl-2, + .px-xl-2 { + padding-right: .5rem !important + } + .pb-xl-2, + .py-xl-2 { + padding-bottom: .5rem !important + } + .pl-xl-2, + .px-xl-2 { + padding-left: .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-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 + } +} + +.text-monospace { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace +} + +.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-light { + font-weight: 300 !important +} + +.font-weight-normal { + font-weight: 400 !important +} + +.font-weight-bold { + font-weight: 700 !important +} + +.font-italic { + font-style: italic !important +} + +.text-white { + color: #fff !important +} + +.text-primary { + color: #007bff !important +} + +a.text-primary:focus, +a.text-primary:hover { + color: #0062cc !important +} + +.text-secondary { + color: #6c757d !important +} + +a.text-secondary:focus, +a.text-secondary:hover { + color: #545b62 !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-body { + color: #212529 !important +} + +.text-muted { + color: #6c757d !important +} + +.text-black-50 { + color: rgba(0, 0, 0, .5) !important +} + +.text-white-50 { + color: rgba(255, 255, 255, .5) !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 +} + +@media print { + *, + ::after, + ::before { + 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 + } + blockquote, + pre { + border: 1px solid #adb5bd; + page-break-inside: avoid + } + thead { + display: table-header-group + } + img, + tr { + page-break-inside: avoid + } + h2, + h3, + p { + 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 td, + .table-bordered th { + border: 1px solid #dee2e6 !important + } + .table-dark { + color: inherit + } + .table-dark tbody+tbody, + .table-dark td, + .table-dark th, + .table-dark thead th { + border-color: #dee2e6 + } + .table .thead-dark th { + color: inherit; + border-color: #dee2e6 + } +} + +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/docs/_static/landing/css/font-awesome.min.css b/docs/_static/landing/css/font-awesome.min.css new file mode 100644 index 000000000..d0603cb4b --- /dev/null +++ b/docs/_static/landing/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.5.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.5.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.5.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{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{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper: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-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-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"} diff --git a/docs/_static/landing/css/magnific-popup.css b/docs/_static/landing/css/magnific-popup.css new file mode 100644 index 000000000..8561e181a --- /dev/null +++ b/docs/_static/landing/css/magnific-popup.css @@ -0,0 +1,351 @@ +/* Magnific Popup CSS */ +.mfp-bg { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1042; + overflow: hidden; + position: fixed; + background: #0b0b0b; + opacity: 0.8; } + +.mfp-wrap { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1043; + position: fixed; + outline: none !important; + -webkit-backface-visibility: hidden; } + +.mfp-container { + text-align: center; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + padding: 0 8px; + box-sizing: border-box; } + +.mfp-container:before { + content: ''; + display: inline-block; + height: 100%; + vertical-align: middle; } + +.mfp-align-top .mfp-container:before { + display: none; } + +.mfp-content { + position: relative; + display: inline-block; + vertical-align: middle; + margin: 0 auto; + text-align: left; + z-index: 1045; } + +.mfp-inline-holder .mfp-content, +.mfp-ajax-holder .mfp-content { + width: 100%; + cursor: auto; } + +.mfp-ajax-cur { + cursor: progress; } + +.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close { + cursor: -moz-zoom-out; + cursor: -webkit-zoom-out; + cursor: zoom-out; } + +.mfp-zoom { + cursor: pointer; + cursor: -webkit-zoom-in; + cursor: -moz-zoom-in; + cursor: zoom-in; } + +.mfp-auto-cursor .mfp-content { + cursor: auto; } + +.mfp-close, +.mfp-arrow, +.mfp-preloader, +.mfp-counter { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; } + +.mfp-loading.mfp-figure { + display: none; } + +.mfp-hide { + display: none !important; } + +.mfp-preloader { + color: #CCC; + position: absolute; + top: 50%; + width: auto; + text-align: center; + margin-top: -0.8em; + left: 8px; + right: 8px; + z-index: 1044; } + .mfp-preloader a { + color: #CCC; } + .mfp-preloader a:hover { + color: #FFF; } + +.mfp-s-ready .mfp-preloader { + display: none; } + +.mfp-s-error .mfp-content { + display: none; } + +button.mfp-close, +button.mfp-arrow { + overflow: visible; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + display: block; + outline: none; + padding: 0; + z-index: 1046; + box-shadow: none; + touch-action: manipulation; } + +button::-moz-focus-inner { + padding: 0; + border: 0; } + +.mfp-close { + width: 44px; + height: 44px; + line-height: 44px; + position: absolute; + right: 0; + top: 0; + text-decoration: none; + text-align: center; + opacity: 0.65; + padding: 0 0 18px 10px; + color: #FFF; + font-style: normal; + font-size: 28px; + font-family: Arial, Baskerville, monospace; } + .mfp-close:hover, + .mfp-close:focus { + opacity: 1; } + .mfp-close:active { + top: 1px; } + +.mfp-close-btn-in .mfp-close { + color: #333; } + +.mfp-image-holder .mfp-close, +.mfp-iframe-holder .mfp-close { + color: #FFF; + right: -6px; + text-align: right; + padding-right: 6px; + width: 100%; } + +.mfp-counter { + position: absolute; + top: 0; + right: 0; + color: #CCC; + font-size: 12px; + line-height: 18px; + white-space: nowrap; } + +.mfp-arrow { + position: absolute; + opacity: 0.65; + margin: 0; + top: 50%; + margin-top: -55px; + padding: 0; + width: 90px; + height: 110px; + -webkit-tap-highlight-color: transparent; } + .mfp-arrow:active { + margin-top: -54px; } + .mfp-arrow:hover, + .mfp-arrow:focus { + opacity: 1; } + .mfp-arrow:before, + .mfp-arrow:after { + content: ''; + display: block; + width: 0; + height: 0; + position: absolute; + left: 0; + top: 0; + margin-top: 35px; + margin-left: 35px; + border: medium inset transparent; } + .mfp-arrow:after { + border-top-width: 13px; + border-bottom-width: 13px; + top: 8px; } + .mfp-arrow:before { + border-top-width: 21px; + border-bottom-width: 21px; + opacity: 0.7; } + +.mfp-arrow-left { + left: 0; } + .mfp-arrow-left:after { + border-right: 17px solid #FFF; + margin-left: 31px; } + .mfp-arrow-left:before { + margin-left: 25px; + border-right: 27px solid #3F3F3F; } + +.mfp-arrow-right { + right: 0; } + .mfp-arrow-right:after { + border-left: 17px solid #FFF; + margin-left: 39px; } + .mfp-arrow-right:before { + border-left: 27px solid #3F3F3F; } + +.mfp-iframe-holder { + padding-top: 40px; + padding-bottom: 40px; } + .mfp-iframe-holder .mfp-content { + line-height: 0; + width: 100%; + max-width: 900px; } + .mfp-iframe-holder .mfp-close { + top: -40px; } + +.mfp-iframe-scaler { + width: 100%; + height: 0; + overflow: hidden; + padding-top: 56.25%; } + .mfp-iframe-scaler iframe { + position: absolute; + display: block; + top: 0; + left: 0; + width: 100%; + height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #000; } + +/* Main image in popup */ +img.mfp-img { + width: auto; + max-width: 100%; + height: auto; + display: block; + line-height: 0; + box-sizing: border-box; + padding: 40px 0 40px; + margin: 0 auto; } + +/* The shadow behind the image */ +.mfp-figure { + line-height: 0; } + .mfp-figure:after { + content: ''; + position: absolute; + left: 0; + top: 40px; + bottom: 40px; + display: block; + right: 0; + width: auto; + height: auto; + z-index: -1; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #444; } + .mfp-figure small { + color: #BDBDBD; + display: block; + font-size: 12px; + line-height: 14px; } + .mfp-figure figure { + margin: 0; } + +.mfp-bottom-bar { + margin-top: -36px; + position: absolute; + top: 100%; + left: 0; + width: 100%; + cursor: auto; } + +.mfp-title { + text-align: left; + line-height: 18px; + color: #F3F3F3; + word-wrap: break-word; + padding-right: 36px; } + +.mfp-image-holder .mfp-content { + max-width: 100%; } + +.mfp-gallery .mfp-image-holder .mfp-figure { + cursor: pointer; } + +@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) { + /** + * Remove all paddings around the image on small screen + */ + .mfp-img-mobile .mfp-image-holder { + padding-left: 0; + padding-right: 0; } + .mfp-img-mobile img.mfp-img { + padding: 0; } + .mfp-img-mobile .mfp-figure:after { + top: 0; + bottom: 0; } + .mfp-img-mobile .mfp-figure small { + display: inline; + margin-left: 5px; } + .mfp-img-mobile .mfp-bottom-bar { + background: rgba(0, 0, 0, 0.6); + bottom: 0; + margin: 0; + top: auto; + padding: 3px 5px; + position: fixed; + box-sizing: border-box; } + .mfp-img-mobile .mfp-bottom-bar:empty { + padding: 0; } + .mfp-img-mobile .mfp-counter { + right: 5px; + top: 3px; } + .mfp-img-mobile .mfp-close { + top: 0; + right: 0; + width: 35px; + height: 35px; + line-height: 35px; + background: rgba(0, 0, 0, 0.6); + position: fixed; + text-align: center; + padding: 0; } } + +@media all and (max-width: 900px) { + .mfp-arrow { + -webkit-transform: scale(0.75); + transform: scale(0.75); } + .mfp-arrow-left { + -webkit-transform-origin: 0; + transform-origin: 0; } + .mfp-arrow-right { + -webkit-transform-origin: 100%; + transform-origin: 100%; } + .mfp-container { + padding-left: 6px; + padding-right: 6px; } } diff --git a/docs/_static/landing/css/main.css b/docs/_static/landing/css/main.css new file mode 100644 index 000000000..3a78fdb3d --- /dev/null +++ b/docs/_static/landing/css/main.css @@ -0,0 +1,23 @@ +/* +Errno::ENOENT: No such file or directory @ rb_sysopen - scss/main.scss + +Backtrace: +/Library/Ruby/Gems/2.3.0/gems/sass-3.6.0/lib/sass/plugin/compiler.rb:454:in `read' +/Library/Ruby/Gems/2.3.0/gems/sass-3.6.0/lib/sass/plugin/compiler.rb:454:in `update_stylesheet' +/Library/Ruby/Gems/2.3.0/gems/sass-3.6.0/lib/sass/plugin/compiler.rb:215:in `block in update_stylesheets' +/Library/Ruby/Gems/2.3.0/gems/sass-3.6.0/lib/sass/plugin/compiler.rb:209:in `each' +/Library/Ruby/Gems/2.3.0/gems/sass-3.6.0/lib/sass/plugin/compiler.rb:209:in `update_stylesheets' +/Library/Ruby/Gems/2.3.0/gems/sass-3.6.0/lib/sass/plugin/compiler.rb:294:in `watch' +/Library/Ruby/Gems/2.3.0/gems/sass-3.6.0/lib/sass/plugin.rb:109:in `method_missing' +/Library/Ruby/Gems/2.3.0/gems/sass-3.6.0/lib/sass/exec/sass_scss.rb:358:in `watch_or_update' +/Library/Ruby/Gems/2.3.0/gems/sass-3.6.0/lib/sass/exec/sass_scss.rb:51:in `process_result' +/Library/Ruby/Gems/2.3.0/gems/sass-3.6.0/lib/sass/exec/base.rb:50:in `parse' +/Library/Ruby/Gems/2.3.0/gems/sass-3.6.0/lib/sass/exec/base.rb:18:in `parse!' +/Library/Ruby/Gems/2.3.0/gems/sass-3.6.0/bin/sass:13:in `' +/usr/local/bin/sass:22:in `load' +/usr/local/bin/sass:22:in `
' +*/ +body:before { + white-space: pre; + font-family: monospace; + content: "Errno::ENOENT: No such file or directory @ rb_sysopen - scss/main.scss"; } diff --git a/docs/_static/landing/css/owl.carousel.min.css b/docs/_static/landing/css/owl.carousel.min.css new file mode 100644 index 000000000..a71df11c0 --- /dev/null +++ b/docs/_static/landing/css/owl.carousel.min.css @@ -0,0 +1,6 @@ +/** + * Owl Carousel v2.3.4 + * Copyright 2013-2018 David Deutsch + * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE + */ +.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%} \ No newline at end of file diff --git a/docs/_static/landing/css/style.css b/docs/_static/landing/css/style.css new file mode 100644 index 000000000..a37301864 --- /dev/null +++ b/docs/_static/landing/css/style.css @@ -0,0 +1,3869 @@ +/*---------------------------------------------------- +@File: Default Styles +@Author: SPONDON IT + +This file contains the styling for the actual theme, this +is the file you need to edit to change the look of the +theme. +---------------------------------------------------- */ +/*===================================================================== +@Template Name: HostHub Construction +@Developed By: Naim Lasker +Author E-mail: naimlasker@gmail.com + +=====================================================================*/ +/*----------------------------------------------------*/ +/*font Variables*/ +/*Color Variables*/ +/*=================== fonts ====================*/ +@import url("https://fonts.googleapis.com/css?family=Rajdhani:600,700|Roboto:400,500,500i"); +/*---------------------------------------------------- */ +/*----------------------------------------------------*/ +/* Medium Layout: 1280px */ +/* Tablet Layout: 768px */ +/* Mobile Layout: 320px */ +/* Wide Mobile Layout: 480px */ +/*---------------------------------------------------- */ +/*----------------------------------------------------*/ +body { + line-height: 24px; + font-size: 14px; + font-family: "Roboto", sans-serif; + font-weight: 500; + color: #777777; } + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: "Rajdhani", sans-serif; + font-weight: 600; } + +.list { + list-style: none; + margin: 0px; + padding: 0px; } + +a { + text-decoration: none; + transition: all 0.3s ease-in-out; } + a:hover, a:focus { + text-decoration: none; + outline: none; } + +button:focus { + outline: none; + box-shadow: none; } + +.mt-25 { + margin-top: 25px; } + +.p0 { + padding-left: 0px; + padding-right: 0px; } + +.white_bg { + background: #fff !important; } + +/*---------------------------------------------------- */ +/*----------------------------------------------------*/ +.section_gap { + padding: 120px 0; } + @media (max-width: 767px) { + .section_gap { + padding: 60px 0; } } + +.section_gap_top { + padding-top: 120px; } + @media (max-width: 767px) { + .section_gap_top { + padding-top: 60px; } } + +.section_gap_bottom { + padding-bottom: 120px; } + @media (max-width: 767px) { + .section_gap_bottom { + padding-bottom: 60px; } } + +img { + max-width: 100%; } + +/* Main Title Area css +============================================================================================ */ +.main_title { + text-align: center; + margin-bottom: 80px; } + .main_title h2 { + font-size: 72px; + color: #3fcaff; + opacity: 0.1; + margin: 0; + line-height: 60px; } + .main_title h1 { + color: #222222; + margin-top: -40px; } + .main_title p { + font-size: 14px; + line-height: 24px; + color: #777777; + margin-bottom: 0px; + max-width: 570px; + margin: auto; } + .main_title.white h2 { + color: #fff; } + .main_title.white p { + color: #fff; + opacity: 0.6; } + +/* End Main Title Area css +============================================================================================ */ +/* Start Common Section Area css +============================================================================================ */ +.section_content { + position: relative; + padding: 70px 0px 73px 70px; } + .section_content h6 { + color: #fff; + font-size: 14px; + margin-bottom: 12px; + position: relative; + letter-spacing: 2px; + text-transform: uppercase; } + .section_content h6:after { + content: ""; + position: absolute; + background: -webkit-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: -moz-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: -o-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + color: #3fcaff; + height: 1px; + width: 50px; + bottom: -10px; + left: 0; } + .section_content h1 { + color: #fff; + line-height: 45px; + padding: 30px 0 30px; + margin-bottom: 0; } + .section_content p { + margin-bottom: 0px; + color: #fff; + font-weight: 400; + padding: 0 40px 40px 0; } + +/* End Common Section Area css +============================================================================================ */ +/* Start Gradient Area css +============================================================================================ */ +.gradient-bg, .video-play-button:before, .video-play-button:after, .recent_update_inner .nav.nav-tabs li a.active, .recent_update_inner .nav.nav-tabs li a:hover { + background: -webkit-linear-gradient(90deg, #3fcaff 0%, #a4ffb0 100%); + background: -moz-linear-gradient(90deg, #3fcaff 0%, #a4ffb0 100%); + background: -o-linear-gradient(90deg, #3fcaff 0%, #a4ffb0 100%); + background: linear-gradient(90deg, #3fcaff 0%, #a4ffb0 100%); } + +.gradient-bg2 { + background: -webkit-linear-gradient(90deg, #3fcaff 0%, #a4ffb0 100%); + background: -moz-linear-gradient(90deg, #3fcaff 0%, #a4ffb0 100%); + background: -o-linear-gradient(90deg, #3fcaff 0%, #a4ffb0 100%); + background: linear-gradient(90deg, #3fcaff 0%, #a4ffb0 100%); } + +.gradient-color { + background: -webkit-linear-gradient(90deg, #3fcaff 0%, #a4ffb0 100%); + background: -moz-linear-gradient(90deg, #3fcaff 0%, #a4ffb0 100%); + background: -o-linear-gradient(90deg, #3fcaff 0%, #a4ffb0 100%); + background: linear-gradient(90deg, #3fcaff 0%, #a4ffb0 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; } + +/* End Gradient Area css +============================================================================================ */ +.gradient_btn { + display: inline-block; + color: #fff; + letter-spacing: 1px; + font-family: "Roboto", sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 46px; + outline: none !important; + text-align: center; + cursor: pointer; + text-transform: uppercase; + border: double 2px transparent; + border-radius: 10px; + background-image: linear-gradient(#342b7e, #3b328b), radial-gradient(circle at top left, #3fcaff, #a4ffb0); + background-image: -webkit-linear-gradient(#342b7e, #3b328b), -webkit-radial-gradient(circle at top left, #3fcaff, #a4ffb0); + background-image: -moz-linear-gradient(#342b7e, #3b328b), -moz-radial-gradient(circle at top left, #3fcaff, #a4ffb0); + background-image: -ms-linear-gradient(#342b7e, #3b328b), -ms-radial-gradient(circle at top left, #3fcaff, #a4ffb0); + background-image: -o-linear-gradient(#342b7e, #3b328b), -o-radial-gradient(circle at top left, #3fcaff, #a4ffb0); + background-origin: border-box; + background-clip: content-box, border-box; } + .gradient_btn span { + padding: 0 60px; } + .gradient_btn:hover { + color: #22195e; + box-shadow: 0px 10px 30px rgba(130, 82, 250, 0.2); } + +.primary_btn { + display: inline-block; + background: -webkit-linear-gradient(to right, #3fcaff 0%, #a4ffb0 51%, #3fcaff 100%); + background: -moz-linear-gradient(to right, #3fcaff 0%, #a4ffb0 51%, #3fcaff 100%); + background: -ms-linear-gradient(to right, #3fcaff 0%, #a4ffb0 51%, #3fcaff 100%); + background: -o-linear-gradient(to right, #3fcaff 0%, #a4ffb0 51%, #3fcaff 100%); + background: linear-gradient(to right, #3fcaff 0%, #a4ffb0 51%, #3fcaff 100%); + background-size: 200% auto; + padding: 0px 35px; + color: #222222; + letter-spacing: 1px; + font-family: "Roboto", sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 50px; + border-radius: 5px; + outline: none !important; + box-shadow: 0px 10px 30px rgba(163, 255, 177, 0.2); + text-align: center; + cursor: pointer; + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; + text-transform: uppercase; } + .primary_btn:hover { + background-position: right center; + color: #22195e; } + +.overlay, .single-gallery .content { + position: absolute; + left: 0; + top: 0; + height: 100%; + width: 100%; } + +/* Start Video Play css +============================================================================================ */ +.video-play-button { + position: relative; + box-sizing: content-box; + display: inline-block; + width: 32px; + height: 44px; + border-radius: 50%; + padding: 46px 8px 18px 28px; } + .video-play-button:before, .video-play-button:after { + content: ""; + position: absolute; + left: 50%; + top: 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%); + display: block; + width: 60px; + height: 60px; + border-radius: 50%; } + .video-play-button:before { + z-index: 0; + -webkit-animation: pulse-border 2000ms ease-out infinite; + -moz-animation: pulse-border 2000ms ease-out infinite; + -o-animation: pulse-border 2000ms ease-out infinite; + animation: pulse-border 2000ms ease-out infinite; } + .video-play-button:after { + z-index: 1; + -webkit-transition: all 200ms ease; + -moz-transition: all 200ms ease; + -o-transition: all 200ms ease; + transition: all 200ms ease; } + .video-play-button span { + display: block; + position: relative; + z-index: 3; + width: 0; + height: 0; + border-left: 16px solid #000000; + border-top: 8px solid transparent; + border-bottom: 8px solid transparent; } + .video-play-button:hover:after { + background-color: #0cbcff; } + +@-webkit-keyframes pulse-border { + 0% { + -webkit-transform: translate(-50%, -50%) translateZ(0) scale(1); + -moz-transform: translate(-50%, -50%) translateZ(0) scale(1); + -ms-transform: translate(-50%, -50%) translateZ(0) scale(1); + -o-transform: translate(-50%, -50%) translateZ(0) scale(1); + transform: translate(-50%, -50%) translateZ(0) scale(1); + opacity: 0.7; } + 100% { + -webkit-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + -moz-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + -ms-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + -o-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + transform: translate(-50%, -50%) translateZ(0) scale(1.5); + opacity: 0.1; } } +@-moz-keyframes pulse-border { + 0% { + -webkit-transform: translate(-50%, -50%) translateZ(0) scale(1); + -moz-transform: translate(-50%, -50%) translateZ(0) scale(1); + -ms-transform: translate(-50%, -50%) translateZ(0) scale(1); + -o-transform: translate(-50%, -50%) translateZ(0) scale(1); + transform: translate(-50%, -50%) translateZ(0) scale(1); + opacity: 0.7; } + 100% { + -webkit-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + -moz-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + -ms-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + -o-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + transform: translate(-50%, -50%) translateZ(0) scale(1.5); + opacity: 0.1; } } +@-o-keyframes pulse-border { + 0% { + -webkit-transform: translate(-50%, -50%) translateZ(0) scale(1); + -moz-transform: translate(-50%, -50%) translateZ(0) scale(1); + -ms-transform: translate(-50%, -50%) translateZ(0) scale(1); + -o-transform: translate(-50%, -50%) translateZ(0) scale(1); + transform: translate(-50%, -50%) translateZ(0) scale(1); + opacity: 0.7; } + 100% { + -webkit-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + -moz-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + -ms-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + -o-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + transform: translate(-50%, -50%) translateZ(0) scale(1.5); + opacity: 0.1; } } +@keyframes pulse-border { + 0% { + -webkit-transform: translate(-50%, -50%) translateZ(0) scale(1); + -moz-transform: translate(-50%, -50%) translateZ(0) scale(1); + -ms-transform: translate(-50%, -50%) translateZ(0) scale(1); + -o-transform: translate(-50%, -50%) translateZ(0) scale(1); + transform: translate(-50%, -50%) translateZ(0) scale(1); + opacity: 0.7; } + 100% { + -webkit-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + -moz-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + -ms-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + -o-transform: translate(-50%, -50%) translateZ(0) scale(1.5); + transform: translate(-50%, -50%) translateZ(0) scale(1.5); + opacity: 0.1; } } +/* End Video Play css +============================================================================================ */ +/*---------------------------------------------------- */ +/*----------------------------------------------------*/ +.header_area { + position: absolute; + width: 100%; + top: 0; + left: 0; + z-index: 9999; + background: #2c2172; } + .header_area .navbar-brand { + margin-right: 30px; } + .header_area .menu_nav { + width: 100%; } + .header_area .navbar { + background: transparent; + padding: 0px; + border: 0px; + border-radius: 0px; + width: 100%; } + .header_area .navbar .nav .nav-item { + margin-right: 45px; } + .header_area .navbar .nav .nav-item .nav-link { + font: 500 12px/100px "Roboto", sans-serif; + text-transform: uppercase; + color: #fff; + padding: 0px; + display: inline-block; } + .header_area .navbar .nav .nav-item .nav-link:after { + display: none; } + .header_area .navbar .nav .nav-item:hover .nav-link, .header_area .navbar .nav .nav-item.active .nav-link { + color: #3fcaff; } + .header_area .navbar .nav .nav-item.submenu { + position: relative; } + .header_area .navbar .nav .nav-item.submenu ul { + border: none; + padding: 0px; + border-radius: 0px; + box-shadow: none; + margin: 0px; + background: #fff; } + @media (min-width: 992px) { + .header_area .navbar .nav .nav-item.submenu ul { + position: absolute; + top: 120%; + left: 0px; + min-width: 200px; + text-align: left; + opacity: 0; + transition: all 300ms ease-in; + visibility: hidden; + display: block; + border: none; + padding: 0px; + border-radius: 0px; + box-shadow: 0px 10px 30px 0px rgba(0, 0, 0, 0.4); } } + .header_area .navbar .nav .nav-item.submenu ul:before { + content: ""; + width: 0; + height: 0; + border-style: solid; + border-width: 10px 10px 0 10px; + border-color: #eeeeee transparent transparent transparent; + position: absolute; + right: 24px; + top: 45px; + z-index: 3; + opacity: 0; + transition: all 400ms linear; } + .header_area .navbar .nav .nav-item.submenu ul .nav-item { + display: block; + float: none; + margin-right: 0px; + border-bottom: 1px solid #ededed; + margin-left: 0px; + transition: all 0.4s linear; } + .header_area .navbar .nav .nav-item.submenu ul .nav-item .nav-link { + line-height: 45px; + color: #222222; + padding: 0px 30px; + transition: all 150ms linear; + display: block; + margin-right: 0px; } + .header_area .navbar .nav .nav-item.submenu ul .nav-item:last-child { + border-bottom: none; } + .header_area .navbar .nav .nav-item.submenu ul .nav-item:hover .nav-link { + background-image: -moz-linear-gradient(0deg, #4dabff 0%, #62ddff 100%); + background-image: -webkit-linear-gradient(0deg, #4dabff 0%, #62ddff 100%); + background-image: -ms-linear-gradient(0deg, #4dabff 0%, #62ddff 100%); + color: #fff; } + @media (min-width: 992px) { + .header_area .navbar .nav .nav-item.submenu:hover ul { + visibility: visible; + opacity: 1; + top: 100%; } } + .header_area .navbar .nav .nav-item.submenu:hover ul .nav-item { + margin-top: 0px; } + .header_area .navbar .nav .nav-item:last-child { + margin-right: 0px; } + .header_area.navbar_fixed .main_menu { + position: fixed; + width: 100%; + top: -70px; + left: 0; + right: 0; + background: #2c2172; + transform: translateY(70px); + transition: transform 500ms ease, background 500ms ease; + -webkit-transition: transform 500ms ease, background 500ms ease; + box-shadow: 0px 3px 16px 0px rgba(0, 0, 0, 0.1); } + .header_area.navbar_fixed .main_menu .navbar .nav .nav-item .nav-link { + line-height: 70px; } + @media (min-width: 992px) { + .header_area.white_menu .navbar .navbar-brand img { + display: none; } + .header_area.white_menu .navbar .navbar-brand img + img { + display: inline-block; } } + @media (max-width: 991px) { + .header_area.white_menu .navbar .navbar-brand img { + display: inline-block; } + .header_area.white_menu .navbar .navbar-brand img + img { + display: none; } } + .header_area.white_menu .navbar .nav .nav-item .nav-link { + color: #fff; } + .header_area.white_menu.navbar_fixed .main_menu .navbar .navbar-brand img { + display: inline-block; } + .header_area.white_menu.navbar_fixed .main_menu .navbar .navbar-brand img + img { + display: none; } + .header_area.white_menu.navbar_fixed .main_menu .navbar .nav .nav-item .nav-link { + line-height: 70px; + color: #222222; } + .header_area .navbar-right .primary_btn { + min-width: 135px; + text-transform: uppercase; + border-radius: 50px; + line-height: 40px; } + +/*---------------------------------------------------- */ +/*----------------------------------------------------*/ +/* Home Banner Area css +============================================================================================ */ +.home_banner_area { + z-index: 1; + background: url(../../banner-background.png) no-repeat center center; + background-size: cover; } + .home_banner_area .banner_inner { + width: 100%; } + .home_banner_area .banner_inner .home_left_img { + padding-top: 230px; + padding-bottom: 230px; } + .home_banner_area .banner_inner .col-lg-6 { + vertical-align: middle; + align-self: center; } + .home_banner_area .banner_inner .banner_content { + text-align: left; + color: #fff; + margin-left: 70px; } + .home_banner_area .banner_inner .banner_content h2 { + margin-top: 0px; + font-size: 60px; + font-weight: bold; + line-height: 72px; + margin-bottom: 20px; } + .home_banner_area .banner_inner .banner_content p { + color: #fff; + font-size: 16px; + margin-bottom: 20px; } + .home_banner_area .banner_inner .banner_content .watch_video { + margin: 0 30px; + font-size: 12px; + text-transform: uppercase; } + +.blog_banner { + min-height: 780px; + position: relative; + z-index: 1; + overflow: hidden; + margin-bottom: 0px; } + .blog_banner .banner_inner { + background: #04091e; + position: relative; + overflow: hidden; + width: 100%; + min-height: 780px; + z-index: 1; } + .blog_banner .banner_inner .overlay, .blog_banner .banner_inner .single-gallery .content, .single-gallery .blog_banner .banner_inner .content { + background: url(../../banner-2.jpg) no-repeat scroll center center; + opacity: .5; + height: 125%; + position: absolute; + left: 0px; + top: 0px; + width: 100%; + z-index: -1; } + .blog_banner .banner_inner .blog_b_text { + max-width: 700px; + margin: auto; + color: #fff; + margin-top: 40px; } + .blog_banner .banner_inner .blog_b_text h2 { + font-size: 60px; + font-weight: 500; + font-family: "Roboto", sans-serif; + line-height: 66px; + margin-bottom: 15px; } + .blog_banner .banner_inner .blog_b_text p { + font-size: 16px; + margin-bottom: 35px; } + .blog_banner .banner_inner .blog_b_text .white_bg_btn { + line-height: 42px; + padding: 0px 45px; } + +.banner_box { + max-width: 1620px; + margin: auto; } + +.banner_area { + position: relative; + min-height: 430px; + z-index: 1; + background: url(../../banner-background.png) no-repeat center center; + background-size: cover; } + .banner_area .banner_inner { + position: relative; + overflow: hidden; + width: 100%; + min-height: 430px; + z-index: 1; } + .banner_area .banner_inner .banner_content h2 { + color: #fff; + font-size: 36px; + font-family: "Rajdhani", sans-serif; + margin-bottom: 0px; + text-transform: uppercase; + font-weight: bold; + padding-top: 15px; } + .banner_area .banner_inner .banner_content .page_link { + margin-top: 50px; } + .banner_area .banner_inner .banner_content .page_link a { + font-size: 14px; + color: #fff; + font-family: "Roboto", sans-serif; + margin-right: 32px; + position: relative; } + .banner_area .banner_inner .banner_content .page_link a:before { + content: "\e87a"; + font-family: 'Linearicons-Free'; + font-size: 14px; + position: absolute; + right: -25px; + top: 54%; + transform: translateY(-50%); } + .banner_area .banner_inner .banner_content .page_link a:last-child { + margin-right: 0px; } + .banner_area .banner_inner .banner_content .page_link a:last-child:before { + display: none; } + .banner_area .banner_inner .banner_content .page_link a:hover { + color: #3fcaff; } + +/* End Home Banner Area css +============================================================================================ */ +/* Start Pages Area css +============================================================================================ */ +.about_page .about_us_area { + padding-bottom: 120px; } +.about_page .frequently_area { + padding: 120px 0; } + +.upcoming_games .frequently_area { + padding: 120px 0; } + +/* End Pages Area css +============================================================================================ */ +/*---------------------------------------------------- */ +/*----------------------------------------------------*/ +/* Latest Blog Area css +============================================================================================ */ +/* End Latest Blog Area css +============================================================================================ */ +.blog_btn { + border: 1px solid #fff; + background: #fff; + padding: 0px 32px; + font-size: 13px; + font-weight: 500; + font-family: "Roboto", sans-serif; + color: #222222; + line-height: 34px; + display: inline-block; } + .blog_btn:hover { + background: #3fcaff; + border-color: #3fcaff; + color: #fff; } + +.white_bg_btn { + background: #fff; + display: inline-block; + color: #222222; + line-height: 40px; + padding: 0px 28px; + font-size: 14px; + font-family: "Roboto", sans-serif; + font-weight: 500; + text-transform: uppercase; + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; + border: none; } + .white_bg_btn:hover { + background: #3fcaff; + color: #fff; } + +body.blog_page { + background: #f9f9ff; } + body.blog_page h1, body.blog_page h2, body.blog_page h3, body.blog_page h4, body.blog_page h5, body.blog_page h6 { + font-family: "Roboto", sans-serif; } + body.blog_page p { + font-family: "Roboto", sans-serif; + font-weight: 400; } + +/* Causes Area css +============================================================================================ */ +.causes_slider .owl-dots { + text-align: center; + margin-top: 80px; } + .causes_slider .owl-dots .owl-dot { + height: 14px; + width: 14px; + background: #eeeeee; + display: inline-block; + margin-right: 7px; } + .causes_slider .owl-dots .owl-dot:last-child { + margin-right: 0px; } + .causes_slider .owl-dots .owl-dot.active { + background: #3fcaff; } + +.causes_item { + background: #fff; } + .causes_item .causes_img { + position: relative; } + .causes_item .causes_img .c_parcent { + position: absolute; + bottom: 0px; + width: 100%; + left: 0px; + height: 3px; + background: rgba(255, 255, 255, 0.5); } + .causes_item .causes_img .c_parcent span { + width: 70%; + height: 3px; + background: #3fcaff; + position: absolute; + left: 0px; + bottom: 0px; } + .causes_item .causes_img .c_parcent span:before { + content: "75%"; + position: absolute; + right: -10px; + bottom: 0px; + background: #3fcaff; + color: #fff; + padding: 0px 5px; } + .causes_item .causes_text { + padding: 30px 35px 40px 30px; } + .causes_item .causes_text h4 { + color: #222222; + font-family: "Roboto", sans-serif; + font-size: 18px; + font-weight: 600; + margin-bottom: 15px; + cursor: pointer; } + .causes_item .causes_text h4:hover { + color: #3fcaff; } + .causes_item .causes_text p { + font-size: 14px; + line-height: 24px; + color: #777777; + font-weight: 300; + margin-bottom: 0px; } + .causes_item .causes_bottom a { + width: 50%; + border: 1px solid #3fcaff; + text-align: center; + float: left; + line-height: 50px; + background: #3fcaff; + color: #fff; + font-family: "Roboto", sans-serif; + font-size: 14px; + font-weight: 500; } + .causes_item .causes_bottom a + a { + border-color: #eeeeee; + background: #fff; + font-size: 14px; + color: #222222; } + +/* End Causes Area css +============================================================================================ */ +/*================= latest_blog_area css =============*/ +.single-recent-blog-post { + margin-bottom: 30px; } + .single-recent-blog-post .thumb { + overflow: hidden; } + .single-recent-blog-post .thumb img { + transition: all 0.7s linear; } + .single-recent-blog-post .details { + padding-top: 30px; } + .single-recent-blog-post .details .sec_h4 { + line-height: 24px; + padding: 10px 0px 13px; + transition: all 0.3s linear; } + .single-recent-blog-post .details .sec_h4:hover { + color: #777777; } + .single-recent-blog-post .date { + font-size: 14px; + line-height: 24px; + font-weight: 400; } + .single-recent-blog-post:hover img { + transform: scale(1.23) rotate(10deg); } + +.tags .tag_btn { + font-size: 12px; + font-weight: 500; + line-height: 20px; + border: 1px solid #eeeeee; + display: inline-block; + padding: 1px 18px; + text-align: center; + color: #222222; } + .tags .tag_btn:before { + background: #3fcaff; } + .tags .tag_btn + .tag_btn { + margin-left: 2px; } + +/*========= blog_categorie_area css ===========*/ +.blog_categorie_area { + padding-top: 80px; + padding-bottom: 80px; } + +.categories_post { + position: relative; + text-align: center; + cursor: pointer; } + .categories_post img { + max-width: 100%; } + .categories_post .categories_details { + position: absolute; + top: 20px; + left: 20px; + right: 20px; + bottom: 20px; + background: rgba(34, 34, 34, 0.8); + color: #fff; + transition: all 0.3s linear; + display: flex; + align-items: center; + justify-content: center; } + .categories_post .categories_details h5 { + margin-bottom: 0px; + font-size: 18px; + line-height: 26px; + text-transform: uppercase; + color: #fff; + position: relative; } + .categories_post .categories_details p { + font-weight: 300; + font-size: 14px; + line-height: 26px; + margin-bottom: 0px; } + .categories_post .categories_details .border_line { + margin: 10px 0px; + background: #fff; + width: 100%; + height: 1px; } + .categories_post:hover .categories_details { + background: rgba(63, 202, 255, 0.85); } + +/*============ blog_left_sidebar css ==============*/ +.blog_post { + overflow: hidden; } + +.blog_item { + margin-bottom: 40px; } + +.blog_info { + padding-top: 30px; } + .blog_info .post_tag { + padding-bottom: 20px; } + .blog_info .post_tag a { + font: 300 14px/21px "Roboto", sans-serif; + color: #222222; } + .blog_info .post_tag a:hover { + color: #777777; } + .blog_info .post_tag a.active { + color: #3fcaff; } + .blog_info .blog_meta li a { + font: 300 14px/20px "Roboto", sans-serif; + color: #777777; + vertical-align: middle; + padding-bottom: 12px; + display: inline-block; } + .blog_info .blog_meta li a i { + color: #222222; + font-size: 16px; + font-weight: 600; + padding-left: 15px; + line-height: 20px; + vertical-align: middle; } + .blog_info .blog_meta li a:hover { + color: #3fcaff; } + +.blog_post img { + max-width: 100%; } + +.blog_details { + padding-top: 20px; } + .blog_details h2 { + font-size: 24px; + line-height: 36px; + color: #222222; + font-weight: 500; + transition: all 0.3s linear; } + .blog_details h2:hover { + color: #3fcaff; } + .blog_details p { + margin-bottom: 26px; } + +.view_btn { + font-size: 14px; + line-height: 36px; + display: inline-block; + color: #222222; + font-weight: 500; + padding: 0px 30px; + background: #fff; } + +.blog_right_sidebar { + border: 1px solid #eeeeee; + padding: 30px; } + .blog_right_sidebar .widget_title { + font-size: 18px; + line-height: 25px; + background: #3fcaff; + text-align: center; + color: #fff; + padding: 8px 0px; + margin-bottom: 30px; } + .blog_right_sidebar .search_widget .input-group .form-control { + font-size: 14px; + line-height: 29px; + border: 0px; + width: 100%; + font-weight: 300; + color: #fff; + padding-left: 20px; + border-radius: 45px; + z-index: 0; + background: #3fcaff; } + .blog_right_sidebar .search_widget .input-group .form-control.placeholder { + color: #fff; } + .blog_right_sidebar .search_widget .input-group .form-control:-moz-placeholder { + color: #fff; } + .blog_right_sidebar .search_widget .input-group .form-control::-moz-placeholder { + color: #fff; } + .blog_right_sidebar .search_widget .input-group .form-control::-webkit-input-placeholder { + color: #fff; } + .blog_right_sidebar .search_widget .input-group .form-control:focus { + box-shadow: none; } + .blog_right_sidebar .search_widget .input-group .btn-default { + position: absolute; + right: 20px; + background: transparent; + border: 0px; + box-shadow: none; + font-size: 14px; + color: #fff; + padding: 0px; + top: 50%; + transform: translateY(-50%); + z-index: 1; } + .blog_right_sidebar .author_widget { + text-align: center; } + .blog_right_sidebar .author_widget h4 { + font-size: 18px; + line-height: 20px; + color: #222222; + margin-bottom: 0px; + margin-top: 30px; } + .blog_right_sidebar .author_widget p { + margin-bottom: 0px; } + .blog_right_sidebar .author_widget .social_icon { + padding: 7px 0px 15px; } + .blog_right_sidebar .author_widget .social_icon a { + font-size: 14px; + color: #222222; + transition: all 0.2s linear; } + .blog_right_sidebar .author_widget .social_icon a + a { + margin-left: 20px; } + .blog_right_sidebar .author_widget .social_icon a:hover { + color: #3fcaff; } + .blog_right_sidebar .popular_post_widget .post_item .media-body { + justify-content: center; + align-self: center; + padding-left: 20px; } + .blog_right_sidebar .popular_post_widget .post_item .media-body h3 { + font-size: 14px; + line-height: 20px; + color: #222222; + margin-bottom: 4px; + font-weight: 500; + transition: all 0.3s linear; } + .blog_right_sidebar .popular_post_widget .post_item .media-body h3:hover { + color: #3fcaff; } + .blog_right_sidebar .popular_post_widget .post_item .media-body p { + font-size: 12px; + line-height: 21px; + margin-bottom: 0px; } + .blog_right_sidebar .popular_post_widget .post_item + .post_item { + margin-top: 20px; } + .blog_right_sidebar .post_category_widget .cat-list li { + border-bottom: 2px dotted #eee; + transition: all 0.3s ease 0s; + padding-bottom: 12px; } + .blog_right_sidebar .post_category_widget .cat-list li a { + font-size: 14px; + line-height: 20px; + color: #777; } + .blog_right_sidebar .post_category_widget .cat-list li a p { + margin-bottom: 0px; } + .blog_right_sidebar .post_category_widget .cat-list li + li { + padding-top: 15px; } + .blog_right_sidebar .post_category_widget .cat-list li:hover { + border-color: #3fcaff; } + .blog_right_sidebar .post_category_widget .cat-list li:hover a { + color: #3fcaff; } + .blog_right_sidebar .newsletter_widget { + text-align: center; } + .blog_right_sidebar .newsletter_widget .form-group { + margin-bottom: 8px; } + .blog_right_sidebar .newsletter_widget .input-group-prepend { + margin-right: -1px; } + .blog_right_sidebar .newsletter_widget .input-group-text { + background: #fff; + border-radius: 0px; + vertical-align: top; + font-size: 12px; + line-height: 36px; + padding: 0px 0px 0px 15px; + border: 1px solid #eeeeee; + border-right: 0px; } + .blog_right_sidebar .newsletter_widget .form-control { + font-size: 12px; + line-height: 24px; + color: #cccccc; + border: 1px solid #eeeeee; + border-left: 0px; + border-radius: 0px; } + .blog_right_sidebar .newsletter_widget .form-control.placeholder { + color: #cccccc; } + .blog_right_sidebar .newsletter_widget .form-control:-moz-placeholder { + color: #cccccc; } + .blog_right_sidebar .newsletter_widget .form-control::-moz-placeholder { + color: #cccccc; } + .blog_right_sidebar .newsletter_widget .form-control::-webkit-input-placeholder { + color: #cccccc; } + .blog_right_sidebar .newsletter_widget .form-control:focus { + outline: none; + box-shadow: none; } + .blog_right_sidebar .newsletter_widget .bbtns { + background: #3fcaff; + color: #fff; + font-size: 12px; + line-height: 38px; + display: inline-block; + font-weight: 500; + padding: 0px 24px 0px 24px; + border-radius: 0; } + .blog_right_sidebar .newsletter_widget .text-bottom { + font-size: 12px; } + .blog_right_sidebar .tag_cloud_widget ul li { + display: inline-block; } + .blog_right_sidebar .tag_cloud_widget ul li a { + display: inline-block; + border: 1px solid #eee; + background: #fff; + padding: 0px 13px; + margin-bottom: 8px; + transition: all 0.3s ease 0s; + color: #222222; + font-size: 12px; } + .blog_right_sidebar .tag_cloud_widget ul li a:hover { + background: #3fcaff; + color: #fff; } + .blog_right_sidebar .br { + width: 100%; + height: 1px; + background: #eeeeee; + margin: 30px 0px; } + +.blog-pagination { + padding-top: 25px; + padding-bottom: 95px; } + .blog-pagination .page-link { + border-radius: 0; } + .blog-pagination .page-item { + border: none; } + +.page-link { + background: transparent; + font-weight: 400; } + +.blog-pagination .page-item.active .page-link { + background-color: #3fcaff; + border-color: transparent; + color: #fff; } + +.blog-pagination .page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #8a8a8a; + border: none; } + +.blog-pagination .page-link .lnr { + font-weight: 600; } + +.blog-pagination .page-item:last-child .page-link, +.blog-pagination .page-item:first-child .page-link { + border-radius: 0; } + +.blog-pagination .page-link:hover { + color: #fff; + text-decoration: none; + background-color: #3fcaff; + border-color: #eee; } + +/*============ Start Blog Single Styles =============*/ +.single-post-area .social-links { + padding-top: 10px; } + .single-post-area .social-links li { + display: inline-block; + margin-bottom: 10px; } + .single-post-area .social-links li a { + color: #cccccc; + padding: 7px; + font-size: 14px; + transition: all 0.2s linear; } + .single-post-area .social-links li a:hover { + color: #222222; } +.single-post-area .blog_details { + padding-top: 26px; } + .single-post-area .blog_details p { + margin-bottom: 10px; } +.single-post-area .quotes { + margin-top: 20px; + margin-bottom: 30px; + padding: 24px 35px 24px 30px; + background-color: white; + box-shadow: -20.84px 21.58px 30px 0px rgba(176, 176, 176, 0.1); + font-size: 14px; + line-height: 24px; + color: #777; + font-style: italic; } +.single-post-area .arrow { + position: absolute; } + .single-post-area .arrow .lnr { + font-size: 20px; + font-weight: 600; } +.single-post-area .thumb .overlay-bg { + background: rgba(0, 0, 0, 0.8); } +.single-post-area .navigation-area { + border-top: 1px solid #eee; + padding-top: 30px; + margin-top: 60px; } + .single-post-area .navigation-area p { + margin-bottom: 0px; } + .single-post-area .navigation-area h4 { + font-size: 18px; + line-height: 25px; + color: #222222; } + .single-post-area .navigation-area .nav-left { + text-align: left; } + .single-post-area .navigation-area .nav-left .thumb { + margin-right: 20px; + background: #000; } + .single-post-area .navigation-area .nav-left .thumb img { + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; } + .single-post-area .navigation-area .nav-left .lnr { + margin-left: 20px; + opacity: 0; + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; } + .single-post-area .navigation-area .nav-left:hover .lnr { + opacity: 1; } + .single-post-area .navigation-area .nav-left:hover .thumb img { + opacity: .5; } + @media (max-width: 767px) { + .single-post-area .navigation-area .nav-left { + margin-bottom: 30px; } } + .single-post-area .navigation-area .nav-right { + text-align: right; } + .single-post-area .navigation-area .nav-right .thumb { + margin-left: 20px; + background: #000; } + .single-post-area .navigation-area .nav-right .thumb img { + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; } + .single-post-area .navigation-area .nav-right .lnr { + margin-right: 20px; + opacity: 0; + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; } + .single-post-area .navigation-area .nav-right:hover .lnr { + opacity: 1; } + .single-post-area .navigation-area .nav-right:hover .thumb img { + opacity: .5; } +@media (max-width: 991px) { + .single-post-area .sidebar-widgets { + padding-bottom: 0px; } } + +.comments-area { + background: #fafaff; + border: 1px solid #eee; + padding: 50px 30px; + margin-top: 50px; } + @media (max-width: 414px) { + .comments-area { + padding: 50px 8px; } } + .comments-area h4 { + text-align: center; + margin-bottom: 50px; + color: #222222; + font-size: 18px; } + .comments-area h5 { + font-size: 16px; + margin-bottom: 0px; } + .comments-area a { + color: #222222; } + .comments-area .comment-list { + padding-bottom: 48px; } + .comments-area .comment-list:last-child { + padding-bottom: 0px; } + .comments-area .comment-list.left-padding { + padding-left: 25px; } + @media (max-width: 413px) { + .comments-area .comment-list .single-comment h5 { + font-size: 12px; } + .comments-area .comment-list .single-comment .date { + font-size: 11px; } + .comments-area .comment-list .single-comment .comment { + font-size: 10px; } } + .comments-area .thumb { + margin-right: 20px; } + .comments-area .date { + font-size: 13px; + color: #cccccc; + margin-bottom: 13px; } + .comments-area .comment { + color: #777777; + margin-bottom: 0px; } + .comments-area .btn-reply { + background-color: #fff; + color: #222222; + border: 1px solid #fff; + padding: 2px 18px; + font-size: 12px; + display: block; + font-weight: 600; + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; } + .comments-area .btn-reply:hover { + background-color: #3fcaff; + color: #fff; } + +.comment-form { + background: #fafaff; + text-align: center; + border: 1px solid #eee; + padding: 47px 30px 43px; + margin-top: 50px; + margin-bottom: 40px; } + .comment-form h4 { + text-align: center; + margin-bottom: 50px; + font-size: 18px; + line-height: 22px; + color: #222222; } + .comment-form .name { + padding-left: 0px; } + @media (max-width: 767px) { + .comment-form .name { + padding-right: 0px; + margin-bottom: 1rem; } } + .comment-form .email { + padding-right: 0px; } + @media (max-width: 991px) { + .comment-form .email { + padding-left: 0px; } } + .comment-form .form-control { + padding: 8px 20px; + background: #fff; + border: none; + border-radius: 0px; + width: 100%; + font-size: 14px; + color: #777777; + border: 1px solid transparent; } + .comment-form .form-control:focus { + box-shadow: none; + border: 1px solid #eee; } + .comment-form textarea.form-control { + height: 140px; + resize: none; } + .comment-form ::-webkit-input-placeholder { + /* Chrome/Opera/Safari */ + font-size: 13px; + color: #777; } + .comment-form ::-moz-placeholder { + /* Firefox 19+ */ + font-size: 13px; + color: #777; } + .comment-form :-ms-input-placeholder { + /* IE 10+ */ + font-size: 13px; + color: #777; } + .comment-form :-moz-placeholder { + /* Firefox 18- */ + font-size: 13px; + color: #777; } + .comment-form .primary-btn { + text-transform: unset; + color: #fff; + font-size: 13px; } + +/*============ End Blog Single Styles =============*/ +/*---------------------------------------------------- */ +/*----------------------------------------------------*/ +/* Home Map Area css +============================================================================================ */ +.home_map_area { + position: relative; } + .home_map_area .mapBox2 { + min-height: 600px; } + .home_map_area .home_details { + position: absolute; + right: 0px; + width: 100%; + z-index: 10; + top: 50%; + transform: translateY(-50%); } + .home_map_area .home_details .box_home_details { + background: #fff; + max-width: 457px; + float: right; + width: 100%; + padding-left: 92px; + padding-right: 92px; + padding-top: 112px; + padding-bottom: 112px; + border-radius: 10px; } + .home_map_area .home_details .box_home_details .media { + margin-bottom: 26px; } + .home_map_area .home_details .box_home_details .media:last-child { + margin-bottom: 0px; } + .home_map_area .home_details .box_home_details .media .d-flex { + padding-right: 20px; } + .home_map_area .home_details .box_home_details .media .d-flex i { + font-size: 20px; + background: linear-gradient(to right, #2c28b1 0%, #9b5cf6 70%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; } + .home_map_area .home_details .box_home_details .media .media-body h4 { + font-size: 14px; + color: #222222; + text-transform: uppercase; } + .home_map_area .home_details .box_home_details .media .media-body p { + margin-bottom: 0px; } + +/* End Home Map Form Area css +============================================================================================ */ +/* Reservation Form Area css +============================================================================================ */ +.reservation_form_area .res_form_inner { + max-width: 555px; + margin: auto; + box-shadow: 0px 10px 30px 0px rgba(153, 153, 153, 0.1); + padding: 75px 50px; + position: relative; } + .reservation_form_area .res_form_inner:before { + content: ""; + /* background: url(../img/contact-shap-1.png); */ + position: absolute; + left: -125px; + height: 421px; + width: 98px; + top: 50%; + transform: translateY(-50%); } + .reservation_form_area .res_form_inner:after { + content: ""; + /* background: url(../img/contact-shap-2.png); */ + position: absolute; + right: -125px; + height: 421px; + width: 98px; + top: 50%; + transform: translateY(-50%); } + +.reservation_form .form-group input { + height: 40px; + border-radius: 0px; + border: 1px solid #eeeeee; + outline: none; + box-shadow: none; + padding: 0px 15px; + font-size: 13px; + font-family: "Roboto", sans-serif; + font-weight: 300; + color: #999999; } + .reservation_form .form-group input.placeholder { + font-size: 13px; + font-family: "Roboto", sans-serif; + font-weight: 300; + color: #999999; } + .reservation_form .form-group input:-moz-placeholder { + font-size: 13px; + font-family: "Roboto", sans-serif; + font-weight: 300; + color: #999999; } + .reservation_form .form-group input::-moz-placeholder { + font-size: 13px; + font-family: "Roboto", sans-serif; + font-weight: 300; + color: #999999; } + .reservation_form .form-group input::-webkit-input-placeholder { + font-size: 13px; + font-family: "Roboto", sans-serif; + font-weight: 300; + color: #999999; } +.reservation_form .form-group .res_select { + height: 40px; + border: 1px solid #eeeeee; + border-radius: 0px; + width: 100%; + padding: 0px 15px; + line-height: 36px; } + .reservation_form .form-group .res_select .current { + font-size: 13px; + font-family: "Roboto", sans-serif; + font-weight: 300; + color: #999999; } + .reservation_form .form-group .res_select:after { + content: "\e874"; + font-family: 'Linearicons-Free'; + color: #cccccc; + transform: rotate(0deg); + border: none; + margin-top: -17px; + font-size: 13px; + right: 22px; } +.reservation_form .form-group:last-child { + text-align: center; } + +/* End Reservation Form Area css +============================================================================================ */ +/*============== contact_area css ================*/ +.mapBox { + height: 420px; + margin-bottom: 80px; } + +.contact_info .info_item { + position: relative; + padding-left: 45px; } + .contact_info .info_item i { + position: absolute; + left: 0; + top: 0; + font-size: 20px; + line-height: 24px; + color: #3fcaff; + font-weight: 600; } + .contact_info .info_item h6 { + font-size: 16px; + line-height: 24px; + color: "Roboto", sans-serif; + font-weight: bold; + margin-bottom: 0px; + color: #222222; } + .contact_info .info_item h6 a { + color: #222222; } + .contact_info .info_item p { + font-size: 14px; + line-height: 24px; + padding: 2px 0px; } + +.contact_form .form-group { + margin-bottom: 10px; } + .contact_form .form-group .form-control { + font-size: 13px; + line-height: 26px; + color: #999; + border: 1px solid #eeeeee; + font-family: "Roboto", sans-serif; + border-radius: 0px; + padding-left: 20px; } + .contact_form .form-group .form-control:focus { + box-shadow: none; + outline: none; } + .contact_form .form-group .form-control.placeholder { + color: #999; } + .contact_form .form-group .form-control:-moz-placeholder { + color: #999; } + .contact_form .form-group .form-control::-moz-placeholder { + color: #999; } + .contact_form .form-group .form-control::-webkit-input-placeholder { + color: #999; } + .contact_form .form-group textarea { + resize: none; } + .contact_form .form-group textarea.form-control { + height: 134px; } +.contact_form .primary_btn { + margin-top: 20px; + cursor: pointer; + border-style: none; } +.contact_form button.primary_btn:active { + border-style: none !important; } + +/* Contact Success and error Area css +============================================================================================ */ +.modal-message .modal-dialog { + position: absolute; + top: 36%; + left: 50%; + transform: translateX(-50%) translateY(-50%) !important; + margin: 0px; + max-width: 500px; + width: 100%; } + .modal-message .modal-dialog .modal-content .modal-header { + text-align: center; + display: block; + border-bottom: none; + padding-top: 50px; + padding-bottom: 50px; } + .modal-message .modal-dialog .modal-content .modal-header .close { + position: absolute; + right: -15px; + top: -15px; + padding: 0px; + color: #fff; + opacity: 1; + cursor: pointer; } + .modal-message .modal-dialog .modal-content .modal-header h2 { + display: block; + text-align: center; + color: #3fcaff; + padding-bottom: 10px; + font-family: "Roboto", sans-serif; } + .modal-message .modal-dialog .modal-content .modal-header p { + display: block; } + +/* End Contact Success and error Area css +============================================================================================ */ +/*---------------------------------------------------- */ +/*----------------------------------------------------*/ +/*============== Elements Area css ================*/ +.mb-20 { + margin-bottom: 20px; } + +.mb-30 { + margin-bottom: 30px; } + +.sample-text-area { + padding: 100px 0px; } + .sample-text-area .title_color { + margin-bottom: 30px; } + .sample-text-area p { + line-height: 26px; } + .sample-text-area p b { + font-weight: bold; + color: #3fcaff; } + .sample-text-area p i { + color: #3fcaff; + font-style: italic; } + .sample-text-area p sup { + color: #3fcaff; + font-style: italic; } + .sample-text-area p sub { + color: #3fcaff; + font-style: italic; } + .sample-text-area p del { + color: #3fcaff; } + .sample-text-area p u { + color: #3fcaff; } + +/*============== End Elements Area css ================*/ +/*==============Elements Button Area css ================*/ +.elements_button .title_color { + margin-bottom: 30px; + color: #222222; } + +.title_color { + color: #222222; } + +.button-group-area { + margin-top: 15px; } + .button-group-area:nth-child(odd) { + margin-top: 40px; } + .button-group-area:first-child { + margin-top: 0px; } + .button-group-area .theme_btn { + margin-right: 10px; } + .button-group-area .link { + text-decoration: underline; + color: #222222; + background: transparent; } + .button-group-area .link:hover { + color: #fff; } + .button-group-area .disable { + background: transparent; + color: #007bff; + cursor: not-allowed; } + .button-group-area .disable:before { + display: none; } + +.primary { + background: #52c5fd; } + .primary:before { + background: #2faae6; } + +.success { + background: #4cd3e3; } + .success:before { + background: #2ebccd; } + +.info { + background: #38a4ff; } + .info:before { + background: #298cdf; } + +.warning { + background: #f4e700; } + .warning:before { + background: #e1d608; } + +.danger { + background: #f54940; } + .danger:before { + background: #e13b33; } + +.primary-border { + background: transparent; + border: 1px solid #52c5fd; + color: #52c5fd; } + .primary-border:before { + background: #52c5fd; } + +.success-border { + background: transparent; + border: 1px solid #4cd3e3; + color: #4cd3e3; } + .success-border:before { + background: #4cd3e3; } + +.info-border { + background: transparent; + border: 1px solid #38a4ff; + color: #38a4ff; } + .info-border:before { + background: #38a4ff; } + +.warning-border { + background: #fff; + border: 1px solid #f4e700; + color: #f4e700; } + .warning-border:before { + background: #f4e700; } + +.danger-border { + background: transparent; + border: 1px solid #f54940; + color: #f54940; } + .danger-border:before { + background: #f54940; } + +.link-border { + background: transparent; + border: 1px solid #3fcaff; + color: #3fcaff; } + .link-border:before { + background: #3fcaff; } + +.radius { + border-radius: 3px; } + +.circle { + border-radius: 20px; } + +.arrow span { + padding-left: 5px; } + +.e-large { + line-height: 50px; + padding-top: 0px; + padding-bottom: 0px; } + +.large { + line-height: 45px; + padding-top: 0px; + padding-bottom: 0px; } + +.medium { + line-height: 30px; + padding-top: 0px; + padding-bottom: 0px; } + +.small { + line-height: 25px; + padding-top: 0px; + padding-bottom: 0px; } + +.general { + line-height: 38px; + padding-top: 0px; + padding-bottom: 0px; } + +/*==============End Elements Button Area css ================*/ +/* =================================== */ +/* Elements Page Styles +/* =================================== */ +/*---------- Start Elements Page -------------*/ +.generic-banner { + margin-top: 60px; + text-align: center; } + +.generic-banner .height { + height: 600px; } + +@media (max-width: 767.98px) { + .generic-banner .height { + height: 400px; } } +.generic-banner .generic-banner-content h2 { + line-height: 1.2em; + margin-bottom: 20px; } + +@media (max-width: 991.98px) { + .generic-banner .generic-banner-content h2 br { + display: none; } } +.generic-banner .generic-banner-content p { + text-align: center; + font-size: 16px; } + +@media (max-width: 991.98px) { + .generic-banner .generic-banner-content p br { + display: none; } } +.generic-content h1 { + font-weight: 600; } + +.about-generic-area { + background: #fff; } + +.about-generic-area p { + margin-bottom: 20px; } + +.white-bg { + background: #fff; } + +.section-top-border { + padding: 50px 0; + border-top: 1px dotted #eee; } + +.switch-wrap { + margin-bottom: 10px; } + +.switch-wrap p { + margin: 0; } + +/*---------- End Elements Page -------------*/ +.sample-text-area { + padding: 100px 0 70px 0; } + +.sample-text { + margin-bottom: 0; } + +.text-heading { + margin-bottom: 30px; + font-size: 24px; } + +.typo-list { + margin-bottom: 10px; } + +@media (max-width: 767px) { + .typo-sec { + margin-bottom: 30px; } } +@media (max-width: 767px) { + .element-wrap { + margin-top: 30px; } } +b, sup, sub, u, del { + color: #f8b600; } + +h1 { + font-size: 36px; } + +h2 { + font-size: 30px; } + +h3 { + font-size: 24px; } + +h4 { + font-size: 18px; } + +h5 { + font-size: 16px; } + +h6 { + font-size: 14px; } + +.typography h1, .typography h2, .typography h3, .typography h4, .typography h5, .typography h6 { + color: #777777; } + +.button-area .border-top-generic { + padding: 70px 15px; + border-top: 1px dotted #eee; } + +.button-group-area .genric-btn { + margin-right: 10px; + margin-top: 10px; } + +.button-group-area .genric-btn:last-child { + margin-right: 0; } + +.circle { + border-radius: 20px; } + +.genric-btn { + display: inline-block; + outline: none; + line-height: 40px; + padding: 0 30px; + font-size: .8em; + text-align: center; + text-decoration: none; + font-weight: 500; + cursor: pointer; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; } + +.genric-btn:focus { + outline: none; } + +.genric-btn.e-large { + padding: 0 40px; + line-height: 50px; } + +.genric-btn.large { + line-height: 45px; } + +.genric-btn.medium { + line-height: 30px; } + +.genric-btn.small { + line-height: 25px; } + +.genric-btn.radius { + border-radius: 3px; } + +.genric-btn.circle { + border-radius: 20px; } + +.genric-btn.arrow { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + +.genric-btn.arrow span { + margin-left: 10px; } + +.genric-btn.default { + color: #222222; + background: #f9f9ff; + border: 1px solid transparent; } + +.genric-btn.default:hover { + border: 1px solid #f9f9ff; + background: #fff; } + +.genric-btn.default-border { + border: 1px solid #f9f9ff; + background: #fff; } + +.genric-btn.default-border:hover { + color: #222222; + background: #f9f9ff; + border: 1px solid transparent; } + +.genric-btn.primary { + color: #fff; + background: #f8b600; + border: 1px solid transparent; } + +.genric-btn.primary:hover { + color: #f8b600; + border: 1px solid #f8b600; + background: #fff; } + +.genric-btn.primary-border { + color: #f8b600; + border: 1px solid #f8b600; + background: #fff; } + +.genric-btn.primary-border:hover { + color: #fff; + background: #f8b600; + border: 1px solid transparent; } + +.genric-btn.success { + color: #fff; + background: #4cd3e3; + border: 1px solid transparent; } + +.genric-btn.success:hover { + color: #4cd3e3; + border: 1px solid #4cd3e3; + background: #fff; } + +.genric-btn.success-border { + color: #4cd3e3; + border: 1px solid #4cd3e3; + background: #fff; } + +.genric-btn.success-border:hover { + color: #fff; + background: #4cd3e3; + border: 1px solid transparent; } + +.genric-btn.info { + color: #fff; + background: #38a4ff; + border: 1px solid transparent; } + +.genric-btn.info:hover { + color: #38a4ff; + border: 1px solid #38a4ff; + background: #fff; } + +.genric-btn.info-border { + color: #38a4ff; + border: 1px solid #38a4ff; + background: #fff; } + +.genric-btn.info-border:hover { + color: #fff; + background: #38a4ff; + border: 1px solid transparent; } + +.genric-btn.warning { + color: #fff; + background: #f4e700; + border: 1px solid transparent; } + +.genric-btn.warning:hover { + color: #f4e700; + border: 1px solid #f4e700; + background: #fff; } + +.genric-btn.warning-border { + color: #f4e700; + border: 1px solid #f4e700; + background: #fff; } + +.genric-btn.warning-border:hover { + color: #fff; + background: #f4e700; + border: 1px solid transparent; } + +.genric-btn.danger { + color: #fff; + background: #f44a40; + border: 1px solid transparent; } + +.genric-btn.danger:hover { + color: #f44a40; + border: 1px solid #f44a40; + background: #fff; } + +.genric-btn.danger-border { + color: #f44a40; + border: 1px solid #f44a40; + background: #fff; } + +.genric-btn.danger-border:hover { + color: #fff; + background: #f44a40; + border: 1px solid transparent; } + +.genric-btn.link { + color: #222222; + background: #f9f9ff; + text-decoration: underline; + border: 1px solid transparent; } + +.genric-btn.link:hover { + color: #222222; + border: 1px solid #f9f9ff; + background: #fff; } + +.genric-btn.link-border { + color: #222222; + border: 1px solid #f9f9ff; + background: #fff; + text-decoration: underline; } + +.genric-btn.link-border:hover { + color: #222222; + background: #f9f9ff; + border: 1px solid transparent; } + +.genric-btn.disable { + color: #222222, 0.3; + background: #f9f9ff; + border: 1px solid transparent; + cursor: not-allowed; } + +.generic-blockquote { + padding: 30px 50px 30px 30px; + background: #fff; + border-left: 2px solid #f8b600; } + +@media (max-width: 991px) { + .progress-table-wrap { + overflow-x: scroll; } } +.progress-table { + background: #fff; + padding: 15px 0px 30px 0px; + min-width: 800px; } + +.progress-table .serial { + width: 11.83%; + padding-left: 30px; } + +.progress-table .country { + width: 28.07%; } + +.progress-table .visit { + width: 19.74%; } + +.progress-table .percentage { + width: 40.36%; + padding-right: 50px; } + +.progress-table .table-head { + display: flex; } + +.progress-table .table-head .serial, .progress-table .table-head .country, .progress-table .table-head .visit, .progress-table .table-head .percentage { + color: #222222; + line-height: 40px; + text-transform: uppercase; + font-weight: 500; } + +.progress-table .table-row { + padding: 15px 0; + border-top: 1px solid #edf3fd; + display: flex; } + +.progress-table .table-row .serial, .progress-table .table-row .country, .progress-table .table-row .visit, .progress-table .table-row .percentage { + display: flex; + align-items: center; } + +.progress-table .table-row .country img { + margin-right: 15px; } + +.progress-table .table-row .percentage .progress { + width: 80%; + border-radius: 0px; + background: transparent; } + +.progress-table .table-row .percentage .progress .progress-bar { + height: 5px; + line-height: 5px; } + +.progress-table .table-row .percentage .progress .progress-bar.color-1 { + background-color: #6382e6; } + +.progress-table .table-row .percentage .progress .progress-bar.color-2 { + background-color: #e66686; } + +.progress-table .table-row .percentage .progress .progress-bar.color-3 { + background-color: #f09359; } + +.progress-table .table-row .percentage .progress .progress-bar.color-4 { + background-color: #73fbaf; } + +.progress-table .table-row .percentage .progress .progress-bar.color-5 { + background-color: #73fbaf; } + +.progress-table .table-row .percentage .progress .progress-bar.color-6 { + background-color: #6382e6; } + +.progress-table .table-row .percentage .progress .progress-bar.color-7 { + background-color: #a367e7; } + +.progress-table .table-row .percentage .progress .progress-bar.color-8 { + background-color: #e66686; } + +.single-gallery-image { + margin-top: 30px; + background-repeat: no-repeat !important; + background-position: center center !important; + background-size: cover !important; + height: 200px; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; } + +.single-gallery-image:hover { + opacity: .8; } + +.list-style { + width: 14px; + height: 14px; } + +.unordered-list li { + position: relative; + padding-left: 30px; + line-height: 1.82em !important; } + +.unordered-list li:before { + content: ""; + position: absolute; + width: 14px; + height: 14px; + border: 3px solid #f8b600; + background: #fff; + top: 4px; + left: 0; + border-radius: 50%; } + +.ordered-list { + margin-left: 30px; } + +.ordered-list li { + list-style-type: decimal-leading-zero; + color: #f8b600; + font-weight: 500; + line-height: 1.82em !important; } + +.ordered-list li span { + font-weight: 300; + color: #777777; } + +.ordered-list-alpha li { + margin-left: 30px; + list-style-type: lower-alpha; + color: #f8b600; + font-weight: 500; + line-height: 1.82em !important; } + +.ordered-list-alpha li span { + font-weight: 300; + color: #777777; } + +.ordered-list-roman li { + margin-left: 30px; + list-style-type: lower-roman; + color: #f8b600; + font-weight: 500; + line-height: 1.82em !important; } + +.ordered-list-roman li span { + font-weight: 300; + color: #777777; } + +.single-input { + display: block; + width: 100%; + line-height: 40px; + border: none; + outline: none; + background: #f9f9ff; + padding: 0 20px; } + +.single-input:focus { + outline: none; } + +.input-group-icon { + position: relative; } + +.input-group-icon .icon { + position: absolute; + left: 20px; + top: 0; + line-height: 40px; + z-index: 3; } + +.input-group-icon .icon i { + color: #797979; } + +.input-group-icon .single-input { + padding-left: 45px; } + +.single-textarea { + display: block; + width: 100%; + line-height: 40px; + border: none; + outline: none; + background: #f9f9ff; + padding: 0 20px; + height: 100px; + resize: none; } + +.single-textarea:focus { + outline: none; } + +.single-input-primary { + display: block; + width: 100%; + line-height: 40px; + border: 1px solid transparent; + outline: none; + background: #f9f9ff; + padding: 0 20px; } + +.single-input-primary:focus { + outline: none; + border: 1px solid #f8b600; } + +.single-input-accent { + display: block; + width: 100%; + line-height: 40px; + border: 1px solid transparent; + outline: none; + background: #f9f9ff; + padding: 0 20px; } + +.single-input-accent:focus { + outline: none; + border: 1px solid #eb6b55; } + +.single-input-secondary { + display: block; + width: 100%; + line-height: 40px; + border: 1px solid transparent; + outline: none; + background: #f9f9ff; + padding: 0 20px; } + +.single-input-secondary:focus { + outline: none; + border: 1px solid #f09359; } + +.default-switch { + width: 35px; + height: 17px; + border-radius: 8.5px; + background: #fff; + position: relative; + cursor: pointer; } + +.default-switch input { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + opacity: 0; + cursor: pointer; } + +.default-switch input + label { + position: absolute; + top: 1px; + left: 1px; + width: 15px; + height: 15px; + border-radius: 50%; + background: #f8b600; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; + box-shadow: 0px 4px 5px 0px rgba(0, 0, 0, 0.2); + cursor: pointer; } + +.default-switch input:checked + label { + left: 19px; } + +.single-element-widget { + margin-bottom: 30px; } + +.primary-switch { + width: 35px; + height: 17px; + border-radius: 8.5px; + background: #fff; + position: relative; + cursor: pointer; } + +.primary-switch input { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + opacity: 0; } + +.primary-switch input + label { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; } + +.primary-switch input + label:before { + content: ""; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + background: transparent; + border-radius: 8.5px; + cursor: pointer; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; } + +.primary-switch input + label:after { + content: ""; + position: absolute; + top: 1px; + left: 1px; + width: 15px; + height: 15px; + border-radius: 50%; + background: #fff; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; + box-shadow: 0px 4px 5px 0px rgba(0, 0, 0, 0.2); + cursor: pointer; } + +.primary-switch input:checked + label:after { + left: 19px; } + +.primary-switch input:checked + label:before { + background: #f8b600; } + +.confirm-switch { + width: 35px; + height: 17px; + border-radius: 8.5px; + background: #fff; + position: relative; + cursor: pointer; } + +.confirm-switch input { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + opacity: 0; } + +.confirm-switch input + label { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; } + +.confirm-switch input + label:before { + content: ""; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + background: transparent; + border-radius: 8.5px; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; + cursor: pointer; } + +.confirm-switch input + label:after { + content: ""; + position: absolute; + top: 1px; + left: 1px; + width: 15px; + height: 15px; + border-radius: 50%; + background: #fff; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; + box-shadow: 0px 4px 5px 0px rgba(0, 0, 0, 0.2); + cursor: pointer; } + +.confirm-switch input:checked + label:after { + left: 19px; } + +.confirm-switch input:checked + label:before { + background: #4cd3e3; } + +.primary-checkbox { + width: 16px; + height: 16px; + border-radius: 3px; + background: #fff; + position: relative; + cursor: pointer; } + +.primary-checkbox input { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + opacity: 0; } + +.primary-checkbox input + label { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + border-radius: 3px; + cursor: pointer; + border: 1px solid #f1f1f1; } + +.single-defination h4 { + color: #222222; } + +.primary-checkbox input:checked + label { + /* background: url(../img/elements/primary-check.png) no-repeat center center/cover; */ + border: none; } + +.confirm-checkbox { + width: 16px; + height: 16px; + border-radius: 3px; + background: #fff; + position: relative; + cursor: pointer; } + +.confirm-checkbox input { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + opacity: 0; } + +.confirm-checkbox input + label { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + border-radius: 3px; + cursor: pointer; + border: 1px solid #f1f1f1; } + +.confirm-checkbox input:checked + label { + /* background: url(../img/elements/success-check.png) no-repeat center center/cover; */ + border: none; } + +.disabled-checkbox { + width: 16px; + height: 16px; + border-radius: 3px; + background: #fff; + position: relative; + cursor: pointer; } + +.disabled-checkbox input { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + opacity: 0; } + +.disabled-checkbox input + label { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + border-radius: 3px; + cursor: pointer; + border: 1px solid #f1f1f1; } + +.disabled-checkbox input:disabled { + cursor: not-allowed; + z-index: 3; } + +.disabled-checkbox input:checked + label { + /* background: url(../img/elements/disabled-check.png) no-repeat center center/cover; */ + border: none; } + +.primary-radio { + width: 16px; + height: 16px; + border-radius: 8px; + background: #fff; + position: relative; + cursor: pointer; } + +.primary-radio input { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + opacity: 0; } + +.primary-radio input + label { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + border-radius: 8px; + cursor: pointer; + border: 1px solid #f1f1f1; } + +.primary-radio input:checked + label { + /* background: url(../img/elements/primary-radio.png) no-repeat center center/cover; */ + border: none; } + +.confirm-radio { + width: 16px; + height: 16px; + border-radius: 8px; + background: #fff; + position: relative; + cursor: pointer; } + +.confirm-radio input { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + opacity: 0; } + +.confirm-radio input + label { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + border-radius: 8px; + cursor: pointer; + border: 1px solid #f1f1f1; } + +.confirm-radio input:checked + label { + /* background: url(../img/elements/success-radio.png) no-repeat center center/cover; */ + border: none; } + +.disabled-radio { + width: 16px; + height: 16px; + border-radius: 8px; + background: #fff; + position: relative; + cursor: pointer; } + +.disabled-radio input { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + opacity: 0; } + +.disabled-radio input + label { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + border-radius: 8px; + cursor: pointer; + border: 1px solid #f1f1f1; } + +.disabled-radio input:disabled { + cursor: not-allowed; + z-index: 3; } + +.unordered-list { + list-style: none; + padding: 0px; + margin: 0px; } + +.ordered-list { + list-style: none; + padding: 0px; } + +.disabled-radio input:checked + label { + /* background: url(../img/elements/disabled-radio.png) no-repeat center center/cover; */ + border: none; } + +.default-select { + height: 40px; } + +.default-select .nice-select { + border: none; + border-radius: 0px; + height: 40px; + background: #fff; + padding-left: 20px; + padding-right: 40px; } + +.default-select .nice-select .list { + margin-top: 0; + border: none; + border-radius: 0px; + box-shadow: none; + width: 100%; + padding: 10px 0 10px 0px; } + +.default-select .nice-select .list .option { + font-weight: 300; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + line-height: 28px; + min-height: 28px; + font-size: 12px; + padding-left: 20px; } + +.default-select .nice-select .list .option.selected { + color: #f8b600; + background: transparent; } + +.default-select .nice-select .list .option:hover { + color: #f8b600; + background: transparent; } + +.default-select .current { + margin-right: 50px; + font-weight: 300; } + +.default-select .nice-select::after { + right: 20px; } + +@media (max-width: 991px) { + .left-align-p p { + margin-top: 20px; } } +.form-select { + height: 40px; + width: 100%; } + +.form-select .nice-select { + border: none; + border-radius: 0px; + height: 40px; + background: #f9f9ff !important; + padding-left: 45px; + padding-right: 40px; + width: 100%; } + +.form-select .nice-select .list { + margin-top: 0; + border: none; + border-radius: 0px; + box-shadow: none; + width: 100%; + padding: 10px 0 10px 0px; } + +.mt-10 { + margin-top: 10px; } + +.form-select .nice-select .list .option { + font-weight: 300; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + line-height: 28px; + min-height: 28px; + font-size: 12px; + padding-left: 45px; } + +.form-select .nice-select .list .option.selected { + color: #f8b600; + background: transparent; } + +.form-select .nice-select .list .option:hover { + color: #f8b600; + background: transparent; } + +.form-select .current { + margin-right: 50px; + font-weight: 300; } + +.form-select .nice-select::after { + right: 20px; } + +/*---------------------------------------------------- */ +/*----------------------------------------------------*/ +/* Start About Us Area css +============================================================================================ */ +.about_us_area { + position: relative; } + +.about_content { + position: relative; } + .about_content:before { + content: ""; + position: absolute; + height: 100%; + width: 89%; + top: 0; + left: 0; + background: -webkit-linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); + background: -moz-linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); + background: -ms-linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); + background: -o-linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); + background: linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); } + +/* End About Us Area css +============================================================================================ */ +/* Start Upcoming Games Area css +============================================================================================ */ +.upcoming_games_area { + padding: 120px 0 80px; } + +.new_games_item { + position: relative; + display: inline-block; + margin-bottom: 40px; } + .new_games_item:hover .upcoming_title { + background: -webkit-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: -moz-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: -o-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); } + .new_games_item:hover .upcoming_title a { + color: #22195e; } + .new_games_item .upcoming_title { + position: absolute; + background: rgba(44, 37, 93, 0.8); + top: 50%; + width: 100%; + text-align: center; + transform: translateY(-50%); + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; } + .new_games_item .upcoming_title h3 { + font-size: 18px; + margin: 0; + padding: 20px; + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; } + .new_games_item .upcoming_title h3 a { + color: #fff; } + +/* End Upcoming Games Area css +============================================================================================ */ +/* Start Recent Update Area css +============================================================================================ */ +.recent_update_area { + background: url(../../blue-bubbles.jpg) no-repeat center; } + .recent_update_area.made_white { + background: #fff; } + +.recent_update_inner .nav.nav-tabs { + border: none; + display: flex; + flex-wrap: wrap; + margin-left: -15px; + margin-right: -15px; } + .recent_update_inner .nav.nav-tabs .nav-item { + margin-bottom: 25px !important; } + .recent_update_inner .nav.nav-tabs li { + flex: 0 0 33%; + max-width: 33%; + padding: 0px 15px; } + .recent_update_inner .nav.nav-tabs li a { + position: relative; + padding: 0px; + border: 0px; + border-radius: 0; + text-align: center; + height: 50px; + line-height: 50px; + font-size: 18px; + font-family: "Rajdhani", sans-serif; + font-weight: 600; + color: #fff; } + .recent_update_inner .nav.nav-tabs li a:after { + position: absolute; + left: 0; + top: 0; + bottom: 0; + right: 0; + height: 100%; + width: 100%; + content: ""; + border: 2px solid transparent; + border-image: -webkit-linear-gradient(90deg, #3fcaff, #a4ffb0); + border-image: -moz-linear-gradient(90deg, #3fcaff, #a4ffb0); + border-image: -o-linear-gradient(90deg, #3fcaff, #a4ffb0); + border-image: linear-gradient(90deg, #3fcaff, #a4ffb0); + border-image-slice: 1; } + .recent_update_inner .nav.nav-tabs li a.active, .recent_update_inner .nav.nav-tabs li a:hover { + box-shadow: 0px 10px 30px 0px rgba(0, 0, 0, 0.1); + color: #000000; } +.recent_update_inner .tab-content .tab-pane { + border: none; } + +.recent_update_text .chart_img { + position: relative; + z-index: 999; } + .recent_update_text .chart_img img { + height: 100% !important; + z-index: 999; } + .recent_update_text .chart_img:after { + content: ""; + position: absolute; + height: 100%; + width: 20%; + top: 0; + right: -40px; + background: #3e3590; + z-index: -1; } +.recent_update_text .section_content { + background: -webkit-linear-gradient(to right, #3e3590 0%, #231a60 100%); + background: -moz-linear-gradient(to right, #3e3590 0%, #231a60 100%); + background: -o-linear-gradient(to right, #3e3590 0%, #231a60 100%); + background: linear-gradient(to right, #3e3590 0%, #231a60 100%); } + +/* End Recent Update Area css +============================================================================================ */ +/* Start Gallery Area css +============================================================================================ */ +.gallery_area { + padding: 120px 0 90px; } + +.single-gallery { + position: relative; + margin-bottom: 30px; } + .single-gallery .content { + max-height: 36px; + max-width: 36px; + left: 50%; + top: 20%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); } + .single-gallery .content i { + font-size: 36px; + font-weight: 600; + color: #ffffff; + opacity: 0; + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; } + .single-gallery:hover { + cursor: pointer; } + .single-gallery:hover .overlay, .single-gallery:hover .content { + background: rgba(73, 63, 157, 0.85); } + .single-gallery:hover .content { + background: transparent; + top: 50%; } + .single-gallery:hover .content i { + opacity: 1; } + .single-gallery .overlay, .single-gallery .content { + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; } + +/* End Gallery Area css +============================================================================================ */ +/* Start Testimonial Area css +============================================================================================ */ +.testimonials_area { + position: relative; + /* background: url(../img/testimonial_bg.png) no-repeat center; */ + background-size: cover; } + +.testi_slider { + margin: auto; } + .testi_slider .testi_item { + text-align: center; } + .testi_slider .testi_item img { + width: auto; + margin: auto; } + +@media (max-width: 767px) { + .testi_item { + margin-bottom: 0; } } +.testi_item h4 { + font-size: 18px; + color: #22195e; + margin-top: 20px; + margin-bottom: 10px; } +.testi_item .list { + margin-bottom: 40px; } + .testi_item .list li { + display: inline-block; } + .testi_item .list li a { + color: #ffc000; + font-size: 14px; } +.testi_item p { + max-width: 555px; + margin: auto; + font-size: 18px; + font-family: "Roboto", sans-serif; + font-style: italic; + color: #777777; } + +/* End Testimonial Area css +============================================================================================ */ +/* Start Pricing Plan Area css +============================================================================================ */ +.pricing_area { + position: relative; + padding: 120px 0 80px; } + +.pricing_item { + background: -webkit-linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); + background: -moz-linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); + background: -ms-linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); + background: -o-linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); + background: linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); + text-align: center; + margin-bottom: 40px; } + .pricing_item h3.p_title { + font-size: 18px; + color: #fff; + padding: 35px 30px 25px; + margin: 0; } + .pricing_item h1.p_price { + font-weight: bold; + color: #fff; + margin: 0; + padding: 30px; + background: #342b7e; } + .pricing_item ul { + list-style: none; + padding-left: 0; + margin: 0; + padding: 35px 50px 18px; } + .pricing_item ul li { + color: #ddd; + font-weight: 400; + padding: 14px 0; + border-bottom: 1px dashed rgba(255, 255, 255, 0.2); + font-family: "Roboto", sans-serif; } + .pricing_item ul li:nth-last-child(1) { + border-bottom: transparent; } + .pricing_item .p_btn { + padding-bottom: 50px; } + .pricing_item .p_btn .gradient_btn { + position: relative; } + .pricing_item .p_btn .gradient_btn span { + position: relative; + z-index: 2; } + .pricing_item .p_btn .gradient_btn:after { + content: ""; + position: absolute; + top: 0px; + left: 0px; + right: 0; + bottom: 0; } + .pricing_item.active .p_btn .gradient_btn, .pricing_item:hover .p_btn .gradient_btn { + color: #22195e; + box-shadow: 0px 10px 30px rgba(130, 82, 250, 0.2); + border: 2px solid transparent; } + .pricing_item.active .p_btn .gradient_btn:after, .pricing_item:hover .p_btn .gradient_btn:after { + border-radius: 5px; + background: -webkit-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: -moz-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: -o-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); } + +/* End Pricing Plan Area css +============================================================================================ */ +/* Start Frequently Asked Questions Area css +============================================================================================ */ +.frequently_area { + position: relative; } + .frequently_area .main_title { + margin-bottom: 40px; } + .frequently_area .main_title h1 { + color: #22195e; } + +.frequent_item { + position: relative; } + .frequent_item h3 { + font-size: 18px; + color: #22195e; + padding-top: 40px; + margin: 0; } + .frequent_item p { + font-weight: 400; + padding: 30px 20px 40px 0; + margin: 0; } + .frequent_item p:after { + content: ""; + position: absolute; + width: 150%; + border: 1px dashed rgba(199, 199, 199, 0.5); + left: 0; + bottom: 0; } + .frequent_item.last-child p:after { + display: none !important; } + +.frequent_inner { + position: relative; + overflow: hidden; } + .frequent_inner:after { + content: ""; + position: absolute; + height: 86%; + border: 1px dashed rgba(199, 199, 199, 0.5); + left: 50%; + transform: translateX(-50%); + top: 40px; } + +/* End Frequently Asked Questions Area css +============================================================================================ */ +/* Start Blog Area css +============================================================================================ */ +.blog_area { + padding: 80px 0 120px; } + .blog_area .blog_items { + position: relative; } + .blog_area .blog_items:hover .blog_content { + background: #22195e; } + .blog_area .blog_items:hover .blog_content a.title { + background: -webkit-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: -moz-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: -o-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; } + .blog_area .blog_items:hover img { + -webkit-transform: scale(1.2); + -moz-transform: scale(1.2); + -ms-transform: scale(1.2); + -o-transform: scale(1.2); + transform: scale(1.2); } + .blog_area .blog_items .blog_img_box { + overflow: hidden; } + .blog_area .blog_items .blog_img_box img { + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; + min-width: 100%; } + .blog_area .blog_items .blog_content { + background: #3b328b; + padding: 40px 20px 50px; + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; } + .blog_area .blog_items .blog_content a.title { + font-size: 18px; + font-weight: 600; + color: #fff; + font-family: "Rajdhani", sans-serif; } + .blog_area .blog_items .blog_content p { + color: #ddd; + font-weight: 400; + padding: 20px 0 40px; + margin: 0; + font-family: "Roboto", sans-serif; } + .blog_area .blog_items .blog_content .date a { + font-size: 13px; + margin-right: 30px; + font-family: "Roboto", sans-serif; + font-weight: 400; + color: #ddd; } + .blog_area .blog_items .blog_content .date a i { + margin-right: 10px; + color: #fff; } + +/* End Blog Area css +============================================================================================ */ +/* Start Newsletter Area css +============================================================================================ */ +.newsletter_area { + background: -webkit-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: -moz-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: -o-linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + background: linear-gradient(to right, #3fcaff 0%, #a4ffb0 100%); + padding: 68px 0 60px; } + .newsletter_area .newsletter_inner h1 { + color: #22195e; } + .newsletter_area .newsletter_inner p { + margin: 0; } + .newsletter_area .newsletter_widget { + float: right; + min-width: 100%; + margin-top: 15px; } + .newsletter_area .newsletter_widget input[type="email"] { + padding: 13px 30px; + width: 100%; + border: transparent; + border-radius: 50px; + outline: none; } + .newsletter_area .newsletter_widget .btn.primary_btn { + position: absolute; + right: 4px; + line-height: 40px; + border-radius: 40px; + top: 4px; + color: #22195e; + box-shadow: none; } + +/* End Newsletter Area css +============================================================================================ */ +/*---------------------------------------------------- */ +/*----------------------------------------------------*/ +@media (max-width: 1619px) { + /* Main Menu Area css + ============================================================================================ */ + .header_area .navbar .search { + margin-left: 40px; } + + /* End Main Menu Area css + ============================================================================================ */ } +@media (max-width: 1199px) { + /* Main Menu Area css + ============================================================================================ */ + .header_area .navbar .nav .nav-item { + margin-right: 28px; } + + /* End Main Menu Area css + ============================================================================================ */ + /* Home Banner Area css + ============================================================================================ */ + .home_banner_area .banner_inner { + padding: 100px 0px; } + + /* End Home Banner Area css + ============================================================================================ */ + .header_area .navbar .primary_btn { + margin-left: 40px; } + + .home_banner_area .banner_inner .banner_content h2 br { + display: none; + font-size: 36px; } + + .home_banner_area .banner_inner .banner_content h2 { + font-size: 36px; + line-height: 45px; } } +@media (max-width: 991px) { + /* Main Menu Area css + ============================================================================================ */ + .navbar-toggler { + border: none; + border-radius: 0px; + padding: 0px; + cursor: pointer; + margin-top: 27px; + margin-bottom: 23px; } + + .header_area .navbar { + background: #000; } + + .navbar-toggler[aria-expanded="false"] span:nth-child(2) { + opacity: 1; } + + .navbar-toggler[aria-expanded="true"] span:nth-child(2) { + opacity: 0; } + + .navbar-toggler[aria-expanded="true"] span:first-child { + transform: rotate(-45deg); + position: relative; + top: 7.5px; } + + .navbar-toggler[aria-expanded="true"] span:last-child { + transform: rotate(45deg); + bottom: 6px; + position: relative; } + + .navbar-toggler span { + display: block; + width: 25px; + height: 3px; + background: #fff; + margin: auto; + margin-bottom: 4px; + transition: all 400ms linear; + cursor: pointer; } + + .navbar .container { + padding-left: 15px; + padding-right: 15px; } + + .nav { + padding: 0px 0px; } + + .header_area + section, .header_area + row, .header_area + div { + margin-top: 117px; } + + .header_top .nav { + padding: 0px; } + + .header_area .navbar .nav .nav-item .nav-link { + line-height: 40px; + margin-right: 0px; + display: block; + border-bottom: 1px solid #ededed33; + border-radius: 0px; } + + .header_area .navbar .search { + margin-left: 0px; } + + .header_area .navbar-collapse { + max-height: 340px; + overflow-y: scroll; } + + .header_area .navbar .nav .nav-item.submenu ul .nav-item .nav-link { + padding: 0px 15px; } + + .header_area .navbar .nav .nav-item { + margin-right: 0px; } + + .header_area + section, .header_area + row, .header_area + div { + margin-top: 71px; } + + .header_area.navbar_fixed .main_menu .navbar .nav .nav-item .nav-link { + line-height: 40px; } + + .header_area.white_menu.navbar_fixed .main_menu .navbar .nav .nav-item .nav-link { + line-height: 40px; } + + .header_area.white_menu .navbar .nav .nav-item .nav-link { + color: #222; } + + /* End Main Menu Area css + ============================================================================================ */ + /* Blog page Area css + ============================================================================================ */ + .categories_post img { + width: 100%; } + + .categories_post { + max-width: 360px; + margin: 0 auto; } + + .blog_categorie_area .col-lg-4 { + margin-top: 30px; } + + .blog_area { + padding-bottom: 80px; } + + .single-post-area .blog_right_sidebar { + margin-top: 30px; } + + /* End Blog page Area css + ============================================================================================ */ + /* Contact Page Area css + ============================================================================================ */ + .contact_info { + margin-bottom: 50px; } + + /* End Contact page Area css + ============================================================================================ */ + .home_banner_area .donation_inner { + margin-bottom: -30px; } + + .home_banner_area .dontation_item { + max-width: 350px; + margin: auto; } + + /* Footer Area css + ============================================================================================ */ + .footer_area .col-sm-6 { + margin-bottom: 30px; } + + .footer_area .footer_inner { + margin-bottom: -30px; } + + .news_widget { + padding-left: 0px; } + + /* End End Footer Area css + ============================================================================================ */ + .home_banner_area .banner_inner .home_left_img { + display: none; } + + .header_area .navbar .primary_btn { + display: none; } + + .home_banner_area .banner_inner { + padding: 70px 0px 100px 0px; } + + .left_side_text { + margin-bottom: 50px; } + + .price_item { + max-width: 360px; + margin: 0px auto 30px; } + + .price_inner { + margin-bottom: -30px; } } +@media (max-width: 767px) { + .home_banner_area { + min-height: 500px; } + + .home_banner_area .banner_inner { + min-height: 500px; } + + .home_banner_area .banner_inner .banner_content { + margin-top: 0px; } + + /* Blog Page Area css + ============================================================================================ */ + .blog_banner .banner_inner .blog_b_text h2 { + font-size: 40px; + line-height: 50px; } + + .blog_info.text-right { + text-align: left !important; + margin-bottom: 10px; } + + /* End Blog Page Area css + ============================================================================================ */ + .home_banner_area .banner_inner .banner_content h3 { + font-size: 30px; } + + .home_banner_area .banner_inner .banner_content p br { + display: none; } + + .home_banner_area .banner_inner .banner_content h3 span { + line-height: 45px; + padding-bottom: 0px; + padding-top: 0px; } + + /* Footer Area css + ============================================================================================ */ + .footer-bottom { + text-align: center; } + + .footer-bottom .footer-social { + text-align: center; + margin-top: 15px; } + + /* End End Footer Area css + ============================================================================================ */ + .made_life_inner .nav.nav-tabs li { + flex: 0 0 50%; + max-width: 50%; + margin-bottom: 15px; } + + .made_life_inner .nav.nav-tabs { + margin-bottom: -15px; } + + .made_life_area.made_white .left_side_text { + margin-bottom: 0px; + margin-top: 30px; } } +@media (max-width: 575px) { + .header_area + section, .header_area + row, .header_area + div { + margin-top: 71px; } + + /* Home Banner Area css + ============================================================================================ */ + .home_banner_area .banner_inner .banner_content h2 { + font-size: 28px; + line-height: 38px; } + + .home_banner_area { + min-height: 450px; } + + .home_banner_area .banner_inner { + min-height: 450px; } + + .blog_banner .banner_inner .blog_b_text { + margin-top: 0px; } + + .home_banner_area .banner_inner .banner_content img { + display: none; } + + .home_banner_area .banner_inner .banner_content h5 { + margin-top: 0px; } + + /* End Home Banner Area css + ============================================================================================ */ + .section_gap { + padding-top: 70px; + padding-bottom: 70px; } + + /* Elements Area css + ============================================================================================ */ + .sample-text-area { + padding: 70px 0 70px 0; } + + .generic-blockquote { + padding: 30px 15px 30px 30px; } + + /* End Elements Area css + ============================================================================================ */ + /* Blog Page Area css + ============================================================================================ */ + .blog_details h2 { + font-size: 20px; + line-height: 30px; } + + .blog_banner .banner_inner .blog_b_text h2 { + font-size: 28px; + line-height: 38px; } + + /* End Blog Page Area css + ============================================================================================ */ + /* Footer Area css + ============================================================================================ */ + .footer-area { + padding: 70px 0px; } + + /* End End Footer Area css + ============================================================================================ */ + .pad_top { + padding-top: 70px; } + + .pad_btm { + padding-bottom: 70px; } } +@media (max-width: 480px) { + /* Main Menu Area css + ============================================================================================ */ + .header_area .navbar-collapse { + max-height: 250px; } + + /* End Main Menu Area css + ============================================================================================ */ + /* Home Banner Area css + ============================================================================================ */ + .home_banner_area .banner_inner .banner_content { + padding: 30px 0px; + margin-top: 0px; } + + .home_banner_area .banner_inner .banner_content h3 { + font-size: 24px; } + + /* End Home Banner Area css + ============================================================================================ */ + .banner_area .banner_inner .banner_content h2 { + font-size: 32px; } + + /* Blog Page Area css + ============================================================================================ */ + .comments-area .thumb { + margin-right: 10px; } + + /* End Blog Page Area css + ============================================================================================ */ + .testi_item .media .d-flex { + padding-right: 0px; } + + .testi_item .media .d-flex img { + width: auto; + margin-bottom: 15px; } + + .testi_item .media { + display: block; } } +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .section_content h3 { + font-size: 32px; + line-height: 38px; } + + .blog_area .blog_content .date a { + margin-right: 22px !important; } + + .about_page .about_us_area, .upcoming_games .about_us_area { + padding: 100px 0; } + .about_page .section_gap, .upcoming_games .section_gap { + padding: 100px 0; } + .about_page .frequently_area, .upcoming_games .frequently_area { + padding: 100px 0; } + + .section_content { + padding: 68px 0px 68px 70px; } + .section_content h1 { + line-height: 40px; + padding: 25px 0 25px; + font-size: 30px; } } +@media only screen and (min-width: 768px) and (max-width: 991px) { + .section_gap { + padding: 80px 0; } + + .section_gap_top { + padding-top: 80px; } + + .main_title { + margin-bottom: 50px; } + + .pricing_area { + padding: 80px 0 50px; } + + .gallery_area { + padding: 80px 0 50px; } + + .about_us_area .about_us_image_box { + display: none; } + .about_us_area .about_content:before { + width: 100%; } + + .upcoming_games_area { + padding: 80px 0 40px; } + + .chart_img { + display: none; } + + .testi_item { + margin-bottom: 0px; } + + .frequently_area .main_title h2 { + font-size: 65px; + line-height: .6; } + .frequently_area .frequent_inner:after { + display: none; } + .frequently_area .frequent_item p { + padding: 16px 20px 0px 0; } + .frequently_area .frequent_item p:after { + display: none; } + + .newsletter_area .newsletter_widget .btn.primary_btn { + padding: 0px 12px; + line-height: 36px; + top: 6px; + right: 5px; + font-size: 10px !important; } + + .newsletter_inner h1 { + font-size: 28px; } + + .hidden-md { + display: none; } + + .hidden-sm { + display: none; } + + .footer_area .f_widget ul { + margin-bottom: 15px !important; } + .footer_area .f_widget ul li { + padding-bottom: 15px !important; } + .footer_area .f_widget .f_title { + margin-bottom: 30px !important; } + + .about_page .about_us_area, .upcoming_games .about_us_area { + padding: 80px 0; } + .about_page .section_gap, .upcoming_games .section_gap { + padding: 80px 0; } + .about_page .frequently_area, .upcoming_games .frequently_area { + padding: 80px 0; } } +@media only screen and (min-width: 481px) and (max-width: 767px) { + .section_gap { + padding: 70px 0; } + + .section_gap_top { + padding-top: 70px; } + + .section_content { + padding: 50px 10px 50px 50px; } + .section_content h3 { + line-height: 40px; + font-size: 30px; + padding: 25px 0 25px; } + + .main_title { + margin-bottom: 40px; } + .main_title h2 { + font-size: 60px; } + + .about_us_area .about_us_image_box { + display: none; } + .about_us_area .about_content:before { + width: 100%; } + + .upcoming_games_area { + padding: 50px 0 20px; } + + .chart_img { + display: none; } + + .recent_update_inner .nav.nav-tabs li a { + height: 45px; + line-height: 45px; + font-size: 12px; } + + .gallery_area { + padding: 70px 0 40px; } + + .testi_item { + margin-bottom: 0px; } + .testi_item p { + font-size: 14px; } + .testi_item .list { + margin-bottom: 30px; } + .testi_item h4 { + margin-top: 10px; } + + .pricing_area.section_gap { + padding: 70px 0 40px; } + + .frequently_area .main_title { + margin-bottom: 10px; } + .frequently_area .main_title h2 { + font-size: 60px; + line-height: .6; } + .frequently_area .frequent_inner:after { + display: none; } + .frequently_area .frequent_item p { + padding: 16px 20px 0px 0; } + .frequently_area .frequent_item p:after { + display: none; } + + .newsletter_area { + padding: 60px 0; } + .newsletter_area .newsletter_inner { + text-align: center; + margin-bottom: 20px; } + .newsletter_area .newsletter_inner h1 { + font-size: 28px; } + + .blog_area { + padding: 70px 0; } + .blog_area .blog_items { + margin-bottom: 20px; } + .blog_area .blog_items .blog_content p { + padding: 15px 0 30px; } + .blog_area .blog_items .blog_content .date a { + margin-right: 20px; } + + .footer_area .f_widget ul { + margin-bottom: 30px !important; } + .footer_area .f_widget ul li { + padding-bottom: 10px !important; } + .footer_area .f_widget .f_title { + margin-bottom: 25px !important; } + .footer_area .col-sm-6 { + margin-bottom: 0px; } + .footer_area .single-footer-widget { + text-align: center; } + .footer_area .single-footer-widget .social_widget { + text-align: center !important; + margin-top: 25px; } + + .about_page .about_us_area, .upcoming_games .about_us_area { + padding: 70px 0; } + .about_page .section_gap, .upcoming_games .section_gap { + padding: 70px 0; } + .about_page .frequently_area, .upcoming_games .frequently_area { + padding: 70px 0; } } +@media only screen and (min-width: 320px) and (max-width: 480px) { + .primary_btn { + line-height: 40px; } + + .section_gap { + padding: 60px 0; } + + .section_gap_top { + padding-top: 60px; } + + .section_content { + padding: 35px 10px 35px 35px !important; } + .section_content h1 { + line-height: 30px; + font-size: 20px; + padding: 20px 0 16px; } + .section_content p { + padding-bottom: 30px; } + + .main_title { + margin-bottom: 30px; } + .main_title h2 { + font-size: 40px; } + + .home_banner_area .banner_content { + margin-left: 20px !important; } + + .gallery_area { + padding: 60px 0 40px; } + + .about_us_area .about_us_image_box { + display: none; } + .about_us_area .about_content:before { + width: 100%; } + + .upcoming_games_area { + padding: 40px 0 20px; } + + .chart_img { + display: none; } + + .recent_update_inner .nav.nav-tabs { + -webkit-justify-content: center; + -moz-justify-content: center; + -ms-justify-content: center; + -o-justify-content: center; + justify-content: center; } + .recent_update_inner .nav.nav-tabs li { + flex: 0 0 50%; + max-width: 50%; + padding: 0px 12px; } + .recent_update_inner .nav.nav-tabs li a { + height: 40px; + line-height: 40px; + font-size: 12px; } + + .testi_item { + margin-bottom: 0px; } + .testi_item p { + font-size: 12px; } + .testi_item .list { + margin-bottom: 25px; } + .testi_item h4 { + margin-top: 10px; } + + .frequently_area .main_title { + margin-bottom: 30px; } + .frequently_area .main_title h2 { + font-size: 40px; + line-height: .6; } + .frequently_area .frequent_inner:after { + display: none; } + .frequently_area .frequent_item p { + padding: 16px 0px 25px; } + .frequently_area .frequent_item p:after { + display: none; } + .frequently_area .frequent_item h3 { + padding-top: 10px; + font-size: 16px; } + + .newsletter_area { + padding: 50px 0; } + .newsletter_area .newsletter_inner { + text-align: center; + margin-bottom: 20px; } + .newsletter_area .newsletter_inner h1 { + font-size: 28px; } + .newsletter_area .newsletter_widget .btn.primary_btn { + padding: 0px 12px; + line-height: 36px; + top: 6px; + right: 5px; + font-size: 10px !important; } + + .pricing_area.section_gap { + padding: 40px 0 15px; } + + .blog_area { + padding: 20px 0 40px; } + .blog_area .blog_items { + margin-bottom: 20px; } + .blog_area .blog_items .blog_content p { + padding: 12px 0 20px; } + .blog_area .blog_items .blog_content .date a { + margin-right: 20px; } + + .footer_area .f_widget ul { + margin-bottom: 30px !important; } + .footer_area .f_widget ul li { + padding-bottom: 15px !important; } + .footer_area .f_widget .f_title { + margin-bottom: 30px !important; } + .footer_area .col-sm-6 { + margin-bottom: 0px; } + .footer_area .single-footer-widget { + text-align: center; } + .footer_area .single-footer-widget .social_widget { + text-align: center !important; + margin-top: 20px; } + .footer_area .single-footer-widget .copy_right_text p { + margin-left: 0; } + + .about_page .about_us_area, .upcoming_games .about_us_area { + padding: 60px 0; } + .about_page .section_gap, .upcoming_games .section_gap { + padding: 60px 0; } + .about_page .frequently_area, .upcoming_games .frequently_area { + padding: 60px 0; } } +/*---------------------------------------------------- */ +/*----------------------------------------------------*/ +/* Footer Area css +============================================================================================ */ +.footer_area { + background: -webkit-linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); + background: -moz-linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); + background: -ms-linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); + background: -o-linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); + background: linear-gradient(to right, #231a60 0%, #3c338d 51%, #231a60 100%); } + .footer_area .f_widget .f_title { + margin-bottom: 40px; } + .footer_area .f_widget .f_title h4 { + color: #fff; + font-size: 18px; + font-weight: 600; + margin-bottom: 0px; } + .footer_area .f_widget ul { + list-style: none; + padding-left: 0; + margin-bottom: 50px; } + .footer_area .f_widget ul li { + display: block; + padding-bottom: 20px; + color: rgba(255, 255, 255, 0.5); + cursor: pointer; } + .footer_area .f_widget ul li:hover { + color: #3fcaff; } + +.single-footer-widget { + padding: 30px 0; + border-top: 1px solid rgba(255, 255, 255, 0.1); } + .single-footer-widget .copy_right_text p { + margin: 0; + color: #fff; + margin-left: -15px; } + .single-footer-widget .copy_right_text p a { + color: #3fcaff; } + .single-footer-widget .social_widget { + text-align: right; + position: relative; + margin-right: -15px; } + .single-footer-widget .social_widget a { + color: #fff; + height: 30px; + width: 30px; + line-height: 30px; + background: #4c4588; + margin-left: 6px; + display: inline-block; + text-align: center; } + .single-footer-widget .social_widget a:hover { + background: #3fcaff; } + +/* End Footer Area css +============================================================================================ */ +/*---------------------------------------------------- */ + +/*# sourceMappingURL=style.css.map */ diff --git a/docs/_static/landing/css/style.css.map b/docs/_static/landing/css/style.css.map new file mode 100644 index 000000000..2892826e8 --- /dev/null +++ b/docs/_static/landing/css/style.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "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", +"sources": ["../scss/style.scss","../scss/_variables.scss","../scss/_mixins.scss","../scss/_reset.scss","../scss/_predefine.scss","../scss/_header.scss","../scss/_banner.scss","../scss/_blog.scss","../scss/_contact.scss","../scss/_elements.scss","../scss/_home.scss","../scss/_responsive.scss","../scss/_footer.scss"], +"names": [], +"file": "style.css" +} \ No newline at end of file diff --git a/docs/_static/landing/flaticon/Flaticon.eot b/docs/_static/landing/flaticon/Flaticon.eot new file mode 100644 index 000000000..25c11b9d7 Binary files /dev/null and b/docs/_static/landing/flaticon/Flaticon.eot differ diff --git a/docs/_static/landing/flaticon/Flaticon.svg b/docs/_static/landing/flaticon/Flaticon.svg new file mode 100644 index 000000000..638e17760 --- /dev/null +++ b/docs/_static/landing/flaticon/Flaticon.svg @@ -0,0 +1,124 @@ + + + + + +Created by FontForge 20160405 at Tue Jun 26 17:19:45 2018 + By Apache +Copyright (c) 2018, Apache + + + + + + + + + + + diff --git a/docs/_static/landing/flaticon/Flaticon.ttf b/docs/_static/landing/flaticon/Flaticon.ttf new file mode 100644 index 000000000..4825af3e5 Binary files /dev/null and b/docs/_static/landing/flaticon/Flaticon.ttf differ diff --git a/docs/_static/landing/flaticon/Flaticon.woff b/docs/_static/landing/flaticon/Flaticon.woff new file mode 100644 index 000000000..246c9fa3f Binary files /dev/null and b/docs/_static/landing/flaticon/Flaticon.woff differ diff --git a/docs/_static/landing/flaticon/_flaticon.scss b/docs/_static/landing/flaticon/_flaticon.scss new file mode 100644 index 000000000..66e334e75 --- /dev/null +++ b/docs/_static/landing/flaticon/_flaticon.scss @@ -0,0 +1,45 @@ + /* + Flaticon icon font: Flaticon + Creation date: 26/06/2018 17:19 + */ + + @font-face { + font-family: "Flaticon"; + src: url("./Flaticon.eot"); + src: url("./Flaticon.eot?#iefix") format("embedded-opentype"), + url("./Flaticon.woff") format("woff"), + url("./Flaticon.ttf") format("truetype"), + url("./Flaticon.svg#Flaticon") format("svg"); + font-weight: normal; + font-style: normal; +} + +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: "Flaticon"; + src: url("./Flaticon.svg#Flaticon") format("svg"); + } +} + + .fi:before{ + display: inline-block; + font-family: "Flaticon"; + font-style: normal; + font-weight: normal; + font-variant: normal; + line-height: 1; + text-decoration: inherit; + text-rendering: optimizeLegibility; + text-transform: none; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-smoothing: antialiased; + } + + .flaticon-skyline:before { content: "\f100"; } +.flaticon-sketch:before { content: "\f101"; } +.flaticon-city:before { content: "\f102"; } + + $font-Flaticon-skyline: "\f100"; + $font-Flaticon-sketch: "\f101"; + $font-Flaticon-city: "\f102"; \ No newline at end of file diff --git a/docs/_static/landing/flaticon/flaticon.css b/docs/_static/landing/flaticon/flaticon.css new file mode 100644 index 000000000..f0c19e6dc --- /dev/null +++ b/docs/_static/landing/flaticon/flaticon.css @@ -0,0 +1,34 @@ + /* + Flaticon icon font: Flaticon + Creation date: 26/06/2018 17:19 + */ + +@font-face { + font-family: "Flaticon"; + src: url("./Flaticon.eot"); + src: url("./Flaticon.eot?#iefix") format("embedded-opentype"), + url("./Flaticon.woff") format("woff"), + url("./Flaticon.ttf") format("truetype"), + url("./Flaticon.svg#Flaticon") format("svg"); + font-weight: normal; + font-style: normal; +} + +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: "Flaticon"; + src: url("./Flaticon.svg#Flaticon") format("svg"); + } +} + +[class^="flaticon-"]:before, [class*=" flaticon-"]:before, +[class^="flaticon-"]:after, [class*=" flaticon-"]:after { + font-family: Flaticon; + font-size: 20px; +font-style: normal; +margin-left: 20px; +} + +.flaticon-skyline:before { content: "\f100"; } +.flaticon-sketch:before { content: "\f101"; } +.flaticon-city:before { content: "\f102"; } \ No newline at end of file diff --git a/docs/_static/landing/fonts/FontAwesome.otf b/docs/_static/landing/fonts/FontAwesome.otf new file mode 100644 index 000000000..d4de13e83 Binary files /dev/null and b/docs/_static/landing/fonts/FontAwesome.otf differ diff --git a/docs/_static/landing/fonts/fontawesome-webfont.eot b/docs/_static/landing/fonts/fontawesome-webfont.eot new file mode 100644 index 000000000..c7b00d2ba Binary files /dev/null and b/docs/_static/landing/fonts/fontawesome-webfont.eot differ diff --git a/docs/_static/landing/fonts/fontawesome-webfont.svg b/docs/_static/landing/fonts/fontawesome-webfont.svg new file mode 100644 index 000000000..8b66187fe --- /dev/null +++ b/docs/_static/landing/fonts/fontawesome-webfont.svg @@ -0,0 +1,685 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_static/landing/fonts/fontawesome-webfont.ttf b/docs/_static/landing/fonts/fontawesome-webfont.ttf new file mode 100644 index 000000000..f221e50a2 Binary files /dev/null and b/docs/_static/landing/fonts/fontawesome-webfont.ttf differ diff --git a/docs/_static/landing/fonts/fontawesome-webfont.woff b/docs/_static/landing/fonts/fontawesome-webfont.woff new file mode 100644 index 000000000..6e7483cf6 Binary files /dev/null and b/docs/_static/landing/fonts/fontawesome-webfont.woff differ diff --git a/docs/_static/landing/fonts/fontawesome-webfont.woff2 b/docs/_static/landing/fonts/fontawesome-webfont.woff2 new file mode 100644 index 000000000..7eb74fd12 Binary files /dev/null and b/docs/_static/landing/fonts/fontawesome-webfont.woff2 differ diff --git a/docs/_static/landing/isotope/imagesloaded.pkgd.min.js b/docs/_static/landing/isotope/imagesloaded.pkgd.min.js new file mode 100644 index 000000000..c3e71fadc --- /dev/null +++ b/docs/_static/landing/isotope/imagesloaded.pkgd.min.js @@ -0,0 +1,7 @@ +/*! + * imagesLoaded PACKAGED v4.1.0 + * JavaScript is all like "You images are done yet or what?" + * MIT License + */ + +!function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}(this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||[];return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=0,o=i[n];e=e||[];for(var r=this._onceEvents&&this._onceEvents[t];o;){var s=r&&r[o];s&&(this.off(t,o),delete r[o]),o.apply(this,e),n+=s?0:1,o=i[n]}return this}},t}),function(t,e){"use strict";"function"==typeof define&&define.amd?define(["ev-emitter/ev-emitter"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter")):t.imagesLoaded=e(t,t.EvEmitter)}(window,function(t,e){function i(t,e){for(var i in e)t[i]=e[i];return t}function n(t){var e=[];if(Array.isArray(t))e=t;else if("number"==typeof t.length)for(var i=0;ie;e++){var i=u[e];t[i]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),e}function o(){if(!d){d=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var o=n(e);s.isBoxSizeOuter=r=200==t(o.width),i.removeChild(e)}}function s(e){if(o(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var s=n(e);if("none"==s.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var d=a.isBorderBox="border-box"==s.boxSizing,l=0;h>l;l++){var f=u[l],c=s[f],m=parseFloat(c);a[f]=isNaN(m)?0:m}var p=a.paddingLeft+a.paddingRight,y=a.paddingTop+a.paddingBottom,g=a.marginLeft+a.marginRight,v=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,I=a.borderTopWidth+a.borderBottomWidth,z=d&&r,x=t(s.width);x!==!1&&(a.width=x+(z?0:p+_));var S=t(s.height);return S!==!1&&(a.height=S+(z?0:y+I)),a.innerWidth=a.width-(p+_),a.innerHeight=a.height-(y+I),a.outerWidth=a.width+g,a.outerHeight=a.height+v,a}}var r,a="undefined"==typeof console?e:function(t){console.error(t)},u=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],h=u.length,d=!1;return s}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("desandro-matches-selector/matches-selector",e):"object"==typeof module&&module.exports?module.exports=e():t.matchesSelector=e()}(window,function(){"use strict";var t=function(){var t=Element.prototype;if(t.matches)return"matches";if(t.matchesSelector)return"matchesSelector";for(var e=["webkit","moz","ms","o"],i=0;ir?"round":"floor";s=Math[a](s),this.cols=Math.max(s,1)},i.prototype.getContainerWidth=function(){var t=this._getOption("fitWidth"),i=t?this.element.parentNode:this.element,n=e(i);this.containerWidth=n&&n.innerWidth},i.prototype._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth%this.columnWidth,i=e&&1>e?"round":"ceil",n=Math[i](t.size.outerWidth/this.columnWidth);n=Math.min(n,this.cols);for(var o=this._getColGroup(n),s=Math.min.apply(Math,o),r=o.indexOf(s),a={x:this.columnWidth*r,y:s},u=s+t.size.outerHeight,h=this.cols+1-o.length,d=0;h>d;d++)this.colYs[r+d]=u;return a},i.prototype._getColGroup=function(t){if(2>t)return this.colYs;for(var e=[],i=this.cols+1-t,n=0;i>n;n++){var o=this.colYs.slice(n,n+t);e[n]=Math.max.apply(Math,o)}return e},i.prototype._manageStamp=function(t){var i=e(t),n=this._getElementOffset(t),o=this._getOption("originLeft"),s=o?n.left:n.right,r=s+i.outerWidth,a=Math.floor(s/this.columnWidth);a=Math.max(0,a);var u=Math.floor(r/this.columnWidth);u-=r%this.columnWidth?0:1,u=Math.min(this.cols-1,u);for(var h=this._getOption("originTop"),d=(h?n.top:n.bottom)+i.outerHeight,l=a;u>=l;l++)this.colYs[l]=Math.max(d,this.colYs[l])},i.prototype._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var t={height:this.maxY};return this._getOption("fitWidth")&&(t.width=this._getContainerFitWidth()),t},i.prototype._getContainerFitWidth=function(){for(var t=0,e=this.cols;--e&&0===this.colYs[e];)t++;return(this.cols-t)*this.columnWidth-this.gutter},i.prototype.needsResizeLayout=function(){var t=this.containerWidth;return this.getContainerWidth(),t!=this.containerWidth},i}),function(t,e){"function"==typeof define&&define.amd?define("isotope/js/layout-modes/masonry",["../layout-mode","masonry/masonry"],e):"object"==typeof module&&module.exports?module.exports=e(require("../layout-mode"),require("masonry-layout")):e(t.Isotope.LayoutMode,t.Masonry)}(window,function(t,e){"use strict";var i=t.create("masonry"),n=i.prototype,o={_getElementOffset:!0,layout:!0,_getMeasurement:!0};for(var s in e.prototype)o[s]||(n[s]=e.prototype[s]);var r=n.measureColumns;n.measureColumns=function(){this.items=this.isotope.filteredItems,r.call(this)};var a=n._getOption;return n._getOption=function(t){return"fitWidth"==t?void 0!==this.options.isFitWidth?this.options.isFitWidth:this.options.fitWidth:a.apply(this.isotope,arguments)},i}),function(t,e){"function"==typeof define&&define.amd?define("isotope/js/layout-modes/fit-rows",["../layout-mode"],e):"object"==typeof exports?module.exports=e(require("../layout-mode")):e(t.Isotope.LayoutMode)}(window,function(t){"use strict";var e=t.create("fitRows"),i=e.prototype;return i._resetLayout=function(){this.x=0,this.y=0,this.maxY=0,this._getMeasurement("gutter","outerWidth")},i._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth+this.gutter,i=this.isotope.size.innerWidth+this.gutter;0!==this.x&&e+this.x>i&&(this.x=0,this.y=this.maxY);var n={x:this.x,y:this.y};return this.maxY=Math.max(this.maxY,this.y+t.size.outerHeight),this.x+=e,n},i._getContainerSize=function(){return{height:this.maxY}},e}),function(t,e){"function"==typeof define&&define.amd?define("isotope/js/layout-modes/vertical",["../layout-mode"],e):"object"==typeof module&&module.exports?module.exports=e(require("../layout-mode")):e(t.Isotope.LayoutMode)}(window,function(t){"use strict";var e=t.create("vertical",{horizontalAlignment:0}),i=e.prototype;return i._resetLayout=function(){this.y=0},i._getItemLayoutPosition=function(t){t.getSize();var e=(this.isotope.size.innerWidth-t.size.outerWidth)*this.options.horizontalAlignment,i=this.y;return this.y+=t.size.outerHeight,{x:e,y:i}},i._getContainerSize=function(){return{height:this.y}},e}),function(t,e){"function"==typeof define&&define.amd?define(["outlayer/outlayer","get-size/get-size","desandro-matches-selector/matches-selector","fizzy-ui-utils/utils","isotope/js/item","isotope/js/layout-mode","isotope/js/layout-modes/masonry","isotope/js/layout-modes/fit-rows","isotope/js/layout-modes/vertical"],function(i,n,o,s,r,a){return e(t,i,n,o,s,r,a)}):"object"==typeof module&&module.exports?module.exports=e(t,require("outlayer"),require("get-size"),require("desandro-matches-selector"),require("fizzy-ui-utils"),require("isotope/js/item"),require("isotope/js/layout-mode"),require("isotope/js/layout-modes/masonry"),require("isotope/js/layout-modes/fit-rows"),require("isotope/js/layout-modes/vertical")):t.Isotope=e(t,t.Outlayer,t.getSize,t.matchesSelector,t.fizzyUIUtils,t.Isotope.Item,t.Isotope.LayoutMode)}(window,function(t,e,i,n,o,s,r){function a(t,e){return function(i,n){for(var o=0;oa||a>r){var u=void 0!==e[s]?e[s]:e,h=u?1:-1;return(r>a?1:-1)*h}}return 0}}var u=t.jQuery,h=String.prototype.trim?function(t){return t.trim()}:function(t){return t.replace(/^\s+|\s+$/g,"")},d=e.create("isotope",{layoutMode:"masonry",isJQueryFiltering:!0,sortAscending:!0});d.Item=s,d.LayoutMode=r;var l=d.prototype;l._create=function(){this.itemGUID=0,this._sorters={},this._getSorters(),e.prototype._create.call(this),this.modes={},this.filteredItems=this.items,this.sortHistory=["original-order"];for(var t in r.modes)this._initLayoutMode(t)},l.reloadItems=function(){this.itemGUID=0,e.prototype.reloadItems.call(this)},l._itemize=function(){for(var t=e.prototype._itemize.apply(this,arguments),i=0;ii;i++){var n=t[i];n.updateSortData()}};var f=function(){function t(t){if("string"!=typeof t)return t;var i=h(t).split(" "),n=i[0],o=n.match(/^\[(.+)\]$/),s=o&&o[1],r=e(s,n),a=d.sortDataParsers[i[1]]; +return t=a?function(t){return t&&a(r(t))}:function(t){return t&&r(t)}}function e(t,e){return t?function(e){return e.getAttribute(t)}:function(t){var i=t.querySelector(e);return i&&i.textContent}}return t}();d.sortDataParsers={parseInt:function(t){return parseInt(t,10)},parseFloat:function(t){return parseFloat(t)}},l._sort=function(){var t=this.options.sortBy;if(t){var e=[].concat.apply(t,this.sortHistory),i=a(e,this.options.sortAscending);this.filteredItems.sort(i),t!=this.sortHistory[0]&&this.sortHistory.unshift(t)}},l._mode=function(){var t=this.options.layoutMode,e=this.modes[t];if(!e)throw new Error("No layout mode: "+t);return e.options=this.options[t],e},l._resetLayout=function(){e.prototype._resetLayout.call(this),this._mode()._resetLayout()},l._getItemLayoutPosition=function(t){return this._mode()._getItemLayoutPosition(t)},l._manageStamp=function(t){this._mode()._manageStamp(t)},l._getContainerSize=function(){return this._mode()._getContainerSize()},l.needsResizeLayout=function(){return this._mode().needsResizeLayout()},l.appended=function(t){var e=this.addItems(t);if(e.length){var i=this._filterRevealAdded(e);this.filteredItems=this.filteredItems.concat(i)}},l.prepended=function(t){var e=this._itemize(t);if(e.length){this._resetLayout(),this._manageStamps();var i=this._filterRevealAdded(e);this.layoutItems(this.filteredItems),this.filteredItems=i.concat(this.filteredItems),this.items=e.concat(this.items)}},l._filterRevealAdded=function(t){var e=this._filter(t);return this.hide(e.needHide),this.reveal(e.matches),this.layoutItems(e.matches,!0),e.matches},l.insert=function(t){var e=this.addItems(t);if(e.length){var i,n,o=e.length;for(i=0;o>i;i++)n=e[i],this.element.appendChild(n.element);var s=this._filter(e).matches;for(i=0;o>i;i++)e[i].isLayoutInstant=!0;for(this.arrange(),i=0;o>i;i++)delete e[i].isLayoutInstant;this.reveal(s)}};var c=l.remove;return l.remove=function(t){t=o.makeArray(t);var e=this.getItems(t);c.call(this,t);for(var i=e&&e.length,n=0;i&&i>n;n++){var s=e[n];o.removeFrom(this.filteredItems,s)}},l.shuffle=function(){for(var t=0;tthis._items.length-1||t<0))if(this._isSliding)P(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
',trigger:"hover focus",title:"",delay:0,html:!(Ie={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},we="out",Ne={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:(De="show")+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Oe="fade",ke="show",Pe=".tooltip-inner",je=".arrow",He="hover",Le="focus",Re="click",xe="manual",We=function(){function i(t,e){if("undefined"==typeof h)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=pe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(pe(this.getTipElement()).hasClass(ke))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),pe.removeData(this.element,this.constructor.DATA_KEY),pe(this.element).off(this.constructor.EVENT_KEY),pe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&pe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===pe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=pe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){pe(this.element).trigger(t);var n=pe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Fn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&pe(i).addClass(Oe);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:pe(document).find(this.config.container);pe(i).data(this.constructor.DATA_KEY,this),pe.contains(this.element.ownerDocument.documentElement,this.tip)||pe(i).appendTo(a),pe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new h(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:je},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),pe(i).addClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().on("mouseover",null,pe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,pe(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(pe(this.tip).hasClass(Oe)){var c=Fn.getTransitionDurationFromElement(this.tip);pe(this.tip).one(Fn.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=pe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),pe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(pe(this.element).trigger(i),!i.isDefaultPrevented()){if(pe(n).removeClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().off("mouseover",null,pe.noop),this._activeTrigger[Re]=!1,this._activeTrigger[Le]=!1,this._activeTrigger[He]=!1,pe(this.tip).hasClass(Oe)){var o=Fn.getTransitionDurationFromElement(n);pe(n).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){pe(this.getTipElement()).addClass(Te+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||pe(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(pe(t.querySelectorAll(Pe)),this.getTitle()),pe(t).removeClass(Oe+" "+ke)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?pe(e).parent().is(t)||t.empty().append(e):t.text(pe(e).text()):t[n?"html":"text"](e)},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return Ie[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)pe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xe){var e=t===He?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===He?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;pe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}pe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Le:He]=!0),pe(e.getTipElement()).hasClass(ke)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Le:He]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,pe(this.element).data(),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),Fn.typeCheckConfig(ve,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=pe(this.getTipElement()),e=t.attr("class").match(be);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(pe(t).removeClass(Oe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=pe(this).data(ye),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),pe(this).data(ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ae}},{key:"NAME",get:function(){return ve}},{key:"DATA_KEY",get:function(){return ye}},{key:"Event",get:function(){return Ne}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}(),pe.fn[ve]=We._jQueryInterface,pe.fn[ve].Constructor=We,pe.fn[ve].noConflict=function(){return pe.fn[ve]=Ce,We._jQueryInterface},We),Jn=(qe="popover",Ke="."+(Fe="bs.popover"),Me=(Ue=e).fn[qe],Qe="bs-popover",Be=new RegExp("(^|\\s)"+Qe+"\\S+","g"),Ve=l({},zn.Default,{placement:"right",trigger:"click",content:"",template:''}),Ye=l({},zn.DefaultType,{content:"(string|element|function)"}),ze="fade",Ze=".popover-header",Ge=".popover-body",$e={HIDE:"hide"+Ke,HIDDEN:"hidden"+Ke,SHOW:(Je="show")+Ke,SHOWN:"shown"+Ke,INSERTED:"inserted"+Ke,CLICK:"click"+Ke,FOCUSIN:"focusin"+Ke,FOCUSOUT:"focusout"+Ke,MOUSEENTER:"mouseenter"+Ke,MOUSELEAVE:"mouseleave"+Ke},Xe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Ue(this.getTipElement()).addClass(Qe+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Ue(this.config.template)[0],this.tip},r.setContent=function(){var t=Ue(this.getTipElement());this.setElementContent(t.find(Ze),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ge),e),t.removeClass(ze+" "+Je)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Ue(this.getTipElement()),e=t.attr("class").match(Be);null!==e&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||t(a||v.height())},_setFocus:function(){(b.st.focus?b.content.find(b.st.focus).eq(0):b.wrap).focus()},_onFocusIn:function(c){return c.target===b.wrap[0]||a.contains(b.wrap[0],c.target)?void 0:(b._setFocus(),!1)},_parseMarkup:function(b,c,d){var e;d.data&&(c=a.extend(d.data,c)),y(l,[b,c,d]),a.each(c,function(c,d){if(void 0===d||d===!1)return!0;if(e=c.split("_"),e.length>1){var f=b.find(p+"-"+e[0]);if(f.length>0){var g=e[1];"replaceWith"===g?f[0]!==d[0]&&f.replaceWith(d):"img"===g?f.is("img")?f.attr("src",d):f.replaceWith(a("").attr("src",d).attr("class",f.attr("class"))):f.attr(e[1],d)}}else b.find(p+"-"+c).html(d)})},_getScrollbarSize:function(){if(void 0===b.scrollbarSize){var a=document.createElement("div");a.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(a),b.scrollbarSize=a.offsetWidth-a.clientWidth,document.body.removeChild(a)}return b.scrollbarSize}},a.magnificPopup={instance:null,proto:t.prototype,modules:[],open:function(b,c){return A(),b=b?a.extend(!0,{},b):{},b.isObj=!0,b.index=c||0,this.instance.open(b)},close:function(){return a.magnificPopup.instance&&a.magnificPopup.instance.close()},registerModule:function(b,c){c.options&&(a.magnificPopup.defaults[b]=c.options),a.extend(this.proto,c.proto),this.modules.push(b)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},a.fn.magnificPopup=function(c){A();var d=a(this);if("string"==typeof c)if("open"===c){var e,f=u?d.data("magnificPopup"):d[0].magnificPopup,g=parseInt(arguments[1],10)||0;f.items?e=f.items[g]:(e=d,f.delegate&&(e=e.find(f.delegate)),e=e.eq(g)),b._openClick({mfpEl:e},d,f)}else b.isOpen&&b[c].apply(b,Array.prototype.slice.call(arguments,1));else c=a.extend(!0,{},c),u?d.data("magnificPopup",c):d[0].magnificPopup=c,b.addGroup(d,c);return d};var C,D,E,F="inline",G=function(){E&&(D.after(E.addClass(C)).detach(),E=null)};a.magnificPopup.registerModule(F,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){b.types.push(F),w(h+"."+F,function(){G()})},getInline:function(c,d){if(G(),c.src){var e=b.st.inline,f=a(c.src);if(f.length){var g=f[0].parentNode;g&&g.tagName&&(D||(C=e.hiddenClass,D=x(C),C="mfp-"+C),E=f.after(D).detach().removeClass(C)),b.updateStatus("ready")}else b.updateStatus("error",e.tNotFound),f=a("
");return c.inlineElement=f,f}return b.updateStatus("ready"),b._parseMarkup(d,{},c),d}}});var H,I="ajax",J=function(){H&&a(document.body).removeClass(H)},K=function(){J(),b.req&&b.req.abort()};a.magnificPopup.registerModule(I,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'The content could not be loaded.'},proto:{initAjax:function(){b.types.push(I),H=b.st.ajax.cursor,w(h+"."+I,K),w("BeforeChange."+I,K)},getAjax:function(c){H&&a(document.body).addClass(H),b.updateStatus("loading");var d=a.extend({url:c.src,success:function(d,e,f){var g={data:d,xhr:f};y("ParseAjax",g),b.appendContent(a(g.data),I),c.finished=!0,J(),b._setFocus(),setTimeout(function(){b.wrap.addClass(q)},16),b.updateStatus("ready"),y("AjaxContentAdded")},error:function(){J(),c.finished=c.loadError=!0,b.updateStatus("error",b.st.ajax.tError.replace("%url%",c.src))}},b.st.ajax.settings);return b.req=a.ajax(d),""}}});var L,M=function(c){if(c.data&&void 0!==c.data.title)return c.data.title;var d=b.st.image.titleSrc;if(d){if(a.isFunction(d))return d.call(b,c);if(c.el)return c.el.attr(d)||""}return""};a.magnificPopup.registerModule("image",{options:{markup:'
',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'The image could not be loaded.'},proto:{initImage:function(){var c=b.st.image,d=".image";b.types.push("image"),w(m+d,function(){"image"===b.currItem.type&&c.cursor&&a(document.body).addClass(c.cursor)}),w(h+d,function(){c.cursor&&a(document.body).removeClass(c.cursor),v.off("resize"+p)}),w("Resize"+d,b.resizeImage),b.isLowIE&&w("AfterChange",b.resizeImage)},resizeImage:function(){var a=b.currItem;if(a&&a.img&&b.st.image.verticalFit){var c=0;b.isLowIE&&(c=parseInt(a.img.css("padding-top"),10)+parseInt(a.img.css("padding-bottom"),10)),a.img.css("max-height",b.wH-c)}},_onImageHasSize:function(a){a.img&&(a.hasSize=!0,L&&clearInterval(L),a.isCheckingImgSize=!1,y("ImageHasSize",a),a.imgHidden&&(b.content&&b.content.removeClass("mfp-loading"),a.imgHidden=!1))},findImageSize:function(a){var c=0,d=a.img[0],e=function(f){L&&clearInterval(L),L=setInterval(function(){return d.naturalWidth>0?void b._onImageHasSize(a):(c>200&&clearInterval(L),c++,void(3===c?e(10):40===c?e(50):100===c&&e(500)))},f)};e(1)},getImage:function(c,d){var e=0,f=function(){c&&(c.img[0].complete?(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("ready")),c.hasSize=!0,c.loaded=!0,y("ImageLoadComplete")):(e++,200>e?setTimeout(f,100):g()))},g=function(){c&&(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("error",h.tError.replace("%url%",c.src))),c.hasSize=!0,c.loaded=!0,c.loadError=!0)},h=b.st.image,i=d.find(".mfp-img");if(i.length){var j=document.createElement("img");j.className="mfp-img",c.el&&c.el.find("img").length&&(j.alt=c.el.find("img").attr("alt")),c.img=a(j).on("load.mfploader",f).on("error.mfploader",g),j.src=c.src,i.is("img")&&(c.img=c.img.clone()),j=c.img[0],j.naturalWidth>0?c.hasSize=!0:j.width||(c.hasSize=!1)}return b._parseMarkup(d,{title:M(c),img_replaceWith:c.img},c),b.resizeImage(),c.hasSize?(L&&clearInterval(L),c.loadError?(d.addClass("mfp-loading"),b.updateStatus("error",h.tError.replace("%url%",c.src))):(d.removeClass("mfp-loading"),b.updateStatus("ready")),d):(b.updateStatus("loading"),c.loading=!0,c.hasSize||(c.imgHidden=!0,d.addClass("mfp-loading"),b.findImageSize(c)),d)}}});var N,O=function(){return void 0===N&&(N=void 0!==document.createElement("p").style.MozTransform),N};a.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(a){return a.is("img")?a:a.find("img")}},proto:{initZoom:function(){var a,c=b.st.zoom,d=".zoom";if(c.enabled&&b.supportsTransition){var e,f,g=c.duration,j=function(a){var b=a.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),d="all "+c.duration/1e3+"s "+c.easing,e={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},f="transition";return e["-webkit-"+f]=e["-moz-"+f]=e["-o-"+f]=e[f]=d,b.css(e),b},k=function(){b.content.css("visibility","visible")};w("BuildControls"+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.content.css("visibility","hidden"),a=b._getItemToZoom(),!a)return void k();f=j(a),f.css(b._getOffset()),b.wrap.append(f),e=setTimeout(function(){f.css(b._getOffset(!0)),e=setTimeout(function(){k(),setTimeout(function(){f.remove(),a=f=null,y("ZoomAnimationEnded")},16)},g)},16)}}),w(i+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.st.removalDelay=g,!a){if(a=b._getItemToZoom(),!a)return;f=j(a)}f.css(b._getOffset(!0)),b.wrap.append(f),b.content.css("visibility","hidden"),setTimeout(function(){f.css(b._getOffset())},16)}}),w(h+d,function(){b._allowZoom()&&(k(),f&&f.remove(),a=null)})}},_allowZoom:function(){return"image"===b.currItem.type},_getItemToZoom:function(){return b.currItem.hasSize?b.currItem.img:!1},_getOffset:function(c){var d;d=c?b.currItem.img:b.st.zoom.opener(b.currItem.el||b.currItem);var e=d.offset(),f=parseInt(d.css("padding-top"),10),g=parseInt(d.css("padding-bottom"),10);e.top-=a(window).scrollTop()-f;var h={width:d.width(),height:(u?d.innerHeight():d[0].offsetHeight)-g-f};return O()?h["-moz-transform"]=h.transform="translate("+e.left+"px,"+e.top+"px)":(h.left=e.left,h.top=e.top),h}}});var P="iframe",Q="//about:blank",R=function(a){if(b.currTemplate[P]){var c=b.currTemplate[P].find("iframe");c.length&&(a||(c[0].src=Q),b.isIE8&&c.css("display",a?"block":"none"))}};a.magnificPopup.registerModule(P,{options:{markup:'
',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){b.types.push(P),w("BeforeChange",function(a,b,c){b!==c&&(b===P?R():c===P&&R(!0))}),w(h+"."+P,function(){R()})},getIframe:function(c,d){var e=c.src,f=b.st.iframe;a.each(f.patterns,function(){return e.indexOf(this.index)>-1?(this.id&&(e="string"==typeof this.id?e.substr(e.lastIndexOf(this.id)+this.id.length,e.length):this.id.call(this,e)),e=this.src.replace("%id%",e),!1):void 0});var g={};return f.srcAction&&(g[f.srcAction]=e),b._parseMarkup(d,g,c),b.updateStatus("ready"),d}}});var S=function(a){var c=b.items.length;return a>c-1?a-c:0>a?c+a:a},T=function(a,b,c){return a.replace(/%curr%/gi,b+1).replace(/%total%/gi,c)};a.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var c=b.st.gallery,e=".mfp-gallery";return b.direction=!0,c&&c.enabled?(f+=" mfp-gallery",w(m+e,function(){c.navigateByImgClick&&b.wrap.on("click"+e,".mfp-img",function(){return b.items.length>1?(b.next(),!1):void 0}),d.on("keydown"+e,function(a){37===a.keyCode?b.prev():39===a.keyCode&&b.next()})}),w("UpdateStatus"+e,function(a,c){c.text&&(c.text=T(c.text,b.currItem.index,b.items.length))}),w(l+e,function(a,d,e,f){var g=b.items.length;e.counter=g>1?T(c.tCounter,f.index,g):""}),w("BuildControls"+e,function(){if(b.items.length>1&&c.arrows&&!b.arrowLeft){var d=c.arrowMarkup,e=b.arrowLeft=a(d.replace(/%title%/gi,c.tPrev).replace(/%dir%/gi,"left")).addClass(s),f=b.arrowRight=a(d.replace(/%title%/gi,c.tNext).replace(/%dir%/gi,"right")).addClass(s);e.click(function(){b.prev()}),f.click(function(){b.next()}),b.container.append(e.add(f))}}),w(n+e,function(){b._preloadTimeout&&clearTimeout(b._preloadTimeout),b._preloadTimeout=setTimeout(function(){b.preloadNearbyImages(),b._preloadTimeout=null},16)}),void w(h+e,function(){d.off(e),b.wrap.off("click"+e),b.arrowRight=b.arrowLeft=null})):!1},next:function(){b.direction=!0,b.index=S(b.index+1),b.updateItemHTML()},prev:function(){b.direction=!1,b.index=S(b.index-1),b.updateItemHTML()},goTo:function(a){b.direction=a>=b.index,b.index=a,b.updateItemHTML()},preloadNearbyImages:function(){var a,c=b.st.gallery.preload,d=Math.min(c[0],b.items.length),e=Math.min(c[1],b.items.length);for(a=1;a<=(b.direction?e:d);a++)b._preloadItem(b.index+a);for(a=1;a<=(b.direction?d:e);a++)b._preloadItem(b.index-a)},_preloadItem:function(c){if(c=S(c),!b.items[c].preloaded){var d=b.items[c];d.parsed||(d=b.parseEl(c)),y("LazyLoad",d),"image"===d.type&&(d.img=a('').on("load.mfploader",function(){d.hasSize=!0}).on("error.mfploader",function(){d.hasSize=!0,d.loadError=!0,y("LazyLoadError",d)}).attr("src",d.src)),d.preloaded=!0}}}});var U="retina";a.magnificPopup.registerModule(U,{options:{replaceSrc:function(a){return a.src.replace(/\.\w+$/,function(a){return"@2x"+a})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var a=b.st.retina,c=a.ratio;c=isNaN(c)?c():c,c>1&&(w("ImageHasSize."+U,function(a,b){b.img.css({"max-width":b.img[0].naturalWidth/c,width:"100%"})}),w("ElementParse."+U,function(b,d){d.src=a.replaceSrc(d,c)}))}}}}),A()}); \ No newline at end of file diff --git a/docs/_static/landing/js/popper.js b/docs/_static/landing/js/popper.js new file mode 100644 index 000000000..1fd6e9303 --- /dev/null +++ b/docs/_static/landing/js/popper.js @@ -0,0 +1,5 @@ +/* + Copyright (C) Federico Zivolo 2017 + Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). + */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=window.getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e||-1!==['HTML','BODY','#document'].indexOf(e.nodeName))return window.document.body;var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll)/.test(r+s+p)?e:n(o(e))}function r(e){var o=e&&e.offsetParent,i=o&&o.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(o.nodeName)&&'static'===t(o,'position')?r(o):o:window.document.documentElement}function p(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||r(e.firstElementChild)===e)}function s(e){return null===e.parentNode?e:s(e.parentNode)}function d(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return window.document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=o?e:t,n=o?t:e,a=document.createRange();a.setStart(i,0),a.setEnd(n,0);var l=a.commonAncestorContainer;if(e!==l&&t!==l||i.contains(n))return p(l)?l:r(l);var f=s(e);return f.host?d(f.host,t):d(e,s(t).host)}function a(e){var t=1=o.clientWidth&&i>=o.clientHeight}),l=0i[e]&&!t.escapeWithReference&&(n=V(p[o],i[e]-('right'===e?p.width:p.height))),se({},o,n)}};return n.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';p=de({},p,s[t](e))}),e.offsets.popper=p,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,i=t.reference,n=e.placement.split('-')[0],r=_,p=-1!==['top','bottom'].indexOf(n),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(i[s])&&(e.offsets.popper[d]=r(i[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){if(!F(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var n=e.placement.split('-')[0],r=e.offsets,p=r.popper,s=r.reference,d=-1!==['left','right'].indexOf(n),a=d?'height':'width',l=d?'Top':'Left',f=l.toLowerCase(),m=d?'left':'top',c=d?'bottom':'right',g=O(i)[a];s[c]-gp[c]&&(e.offsets.popper[f]+=s[f]+g-p[c]);var u=s[f]+s[a]/2-g/2,b=t(e.instance.popper,'margin'+l).replace('px',''),y=u-h(e.offsets.popper)[f]-b;return y=X(V(p[a]-g,y),0),e.arrowElement=i,e.offsets.arrow={},e.offsets.arrow[f]=Math.round(y),e.offsets.arrow[m]='',e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=w(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement),i=e.placement.split('-')[0],n=L(i),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case fe.FLIP:p=[i,n];break;case fe.CLOCKWISE:p=K(i);break;case fe.COUNTERCLOCKWISE:p=K(i,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(i!==s||p.length===d+1)return e;i=e.placement.split('-')[0],n=L(i);var a=e.offsets.popper,l=e.offsets.reference,f=_,m='left'===i&&f(a.right)>f(l.left)||'right'===i&&f(a.left)f(l.top)||'bottom'===i&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===i&&c||'right'===i&&h||'top'===i&&g||'bottom'===i&&u,y=-1!==['top','bottom'].indexOf(i),w=!!t.flipVariations&&(y&&'start'===r&&c||y&&'end'===r&&h||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(i=p[d+1]),w&&(r=j(r)),e.placement=i+(r?'-'+r:''),e.offsets.popper=de({},e.offsets.popper,S(e.instance.popper,e.offsets.reference,e.placement)),e=N(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],i=e.offsets,n=i.popper,r=i.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return n[p?'left':'top']=r[o]-(s?n[p?'width':'height']:0),e.placement=L(t),e.offsets.popper=h(n),e}},hide:{order:800,enabled:!0,fn:function(e){if(!F(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=T(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.right0?e.charAt(0).toUpperCase()+e.slice(1):e)}}(),f=a("transform"),l=e("
",{style:"background:#fff"}).css("background-position-x")!==r,c=l?function(e,t,n){e.css({"background-position-x":t,"background-position-y":n})}:function(e,t,n){e.css("background-position",t+" "+n)},h=l?function(e){return[e.css("background-position-x"),e.css("background-position-y")]}:function(e){return e.css("background-position").split(" ")},p=t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||t.msRequestAnimationFrame||function(e){setTimeout(e,1e3/60)};d.prototype={init:function(){this.options.name=i+"_"+Math.floor(Math.random()*1e9),this._defineElements(),this._defineGetters(),this._defineSetters(),this._handleWindowLoadAndResize(),this._detectViewport(),this.refresh({firstLoad:!0}),this.options.scrollProperty==="scroll"?this._handleScrollEvent():this._startAnimationLoop()},_defineElements:function(){this.element===n.body&&(this.element=t),this.$scrollElement=e(this.element),this.$element=this.element===t?e("body"):this.$scrollElement,this.$viewportElement=this.options.viewportElement!==r?e(this.options.viewportElement):this.$scrollElement[0]===t||this.options.scrollProperty==="scroll"?this.$scrollElement:this.$scrollElement.parent()},_defineGetters:function(){var e=this,t=o[e.options.scrollProperty];this._getScrollLeft=function(){return t.getLeft(e.$scrollElement)},this._getScrollTop=function(){return t.getTop(e.$scrollElement)}},_defineSetters:function(){var t=this,n=o[t.options.scrollProperty],r=u[t.options.positionProperty],i=n.setLeft,s=n.setTop;this._setScrollLeft=typeof i=="function"?function(e){i(t.$scrollElement,e)}:e.noop,this._setScrollTop=typeof s=="function"?function(e){s(t.$scrollElement,e)}:e.noop,this._setPosition=r.setPosition||function(e,n,i,s,o){t.options.horizontalScrolling&&r.setLeft(e,n,i),t.options.verticalScrolling&&r.setTop(e,s,o)}},_handleWindowLoadAndResize:function(){var n=this,r=e(t);n.options.responsive&&r.bind("load."+this.name,function(){n.refresh()}),r.bind("resize."+this.name,function(){n._detectViewport(),n.options.responsive&&n.refresh()})},refresh:function(n){var r=this,i=r._getScrollLeft(),s=r._getScrollTop();(!n||!n.firstLoad)&&this._reset(),this._setScrollLeft(0),this._setScrollTop(0),this._setOffsets(),this._findParticles(),this._findBackgrounds(),n&&n.firstLoad&&/WebKit/.test(navigator.userAgent)&&e(t).load(function(){var e=r._getScrollLeft(),t=r._getScrollTop();r._setScrollLeft(e+1),r._setScrollTop(t+1),r._setScrollLeft(e),r._setScrollTop(t)}),this._setScrollLeft(i),this._setScrollTop(s)},_detectViewport:function(){var e=this.$viewportElement.offset(),t=e!==null&&e!==r;this.viewportWidth=this.$viewportElement.width(),this.viewportHeight=this.$viewportElement.height(),this.viewportOffsetTop=t?e.top:0,this.viewportOffsetLeft=t?e.left:0},_findParticles:function(){var t=this,n=this._getScrollLeft(),i=this._getScrollTop();if(this.particles!==r)for(var s=this.particles.length-1;s>=0;s--)this.particles[s].$element.data("stellar-elementIsActive",r);this.particles=[];if(!this.options.parallaxElements)return;this.$element.find("[data-stellar-ratio]").each(function(n){var i=e(this),s,o,u,a,f,l,c,h,p,d=0,v=0,m=0,g=0;if(!i.data("stellar-elementIsActive"))i.data("stellar-elementIsActive",this);else if(i.data("stellar-elementIsActive")!==this)return;t.options.showElement(i),i.data("stellar-startingLeft")?(i.css("left",i.data("stellar-startingLeft")),i.css("top",i.data("stellar-startingTop"))):(i.data("stellar-startingLeft",i.css("left")),i.data("stellar-startingTop",i.css("top"))),u=i.position().left,a=i.position().top,f=i.css("margin-left")==="auto"?0:parseInt(i.css("margin-left"),10),l=i.css("margin-top")==="auto"?0:parseInt(i.css("margin-top"),10),h=i.offset().left-f,p=i.offset().top-l,i.parents().each(function(){var t=e(this);if(t.data("stellar-offset-parent")===!0)return d=m,v=g,c=t,!1;m+=t.position().left,g+=t.position().top}),s=i.data("stellar-horizontal-offset")!==r?i.data("stellar-horizontal-offset"):c!==r&&c.data("stellar-horizontal-offset")!==r?c.data("stellar-horizontal-offset"):t.horizontalOffset,o=i.data("stellar-vertical-offset")!==r?i.data("stellar-vertical-offset"):c!==r&&c.data("stellar-vertical-offset")!==r?c.data("stellar-vertical-offset"):t.verticalOffset,t.particles.push({$element:i,$offsetParent:c,isFixed:i.css("position")==="fixed",horizontalOffset:s,verticalOffset:o,startingPositionLeft:u,startingPositionTop:a,startingOffsetLeft:h,startingOffsetTop:p,parentOffsetLeft:d,parentOffsetTop:v,stellarRatio:i.data("stellar-ratio")!==r?i.data("stellar-ratio"):1,width:i.outerWidth(!0),height:i.outerHeight(!0),isHidden:!1})})},_findBackgrounds:function(){var t=this,n=this._getScrollLeft(),i=this._getScrollTop(),s;this.backgrounds=[];if(!this.options.parallaxBackgrounds)return;s=this.$element.find("[data-stellar-background-ratio]"),this.$element.data("stellar-background-ratio")&&(s=s.add(this.$element)),s.each(function(){var s=e(this),o=h(s),u,a,f,l,p,d,v,m,g,y=0,b=0,w=0,E=0;if(!s.data("stellar-backgroundIsActive"))s.data("stellar-backgroundIsActive",this);else if(s.data("stellar-backgroundIsActive")!==this)return;s.data("stellar-backgroundStartingLeft")?c(s,s.data("stellar-backgroundStartingLeft"),s.data("stellar-backgroundStartingTop")):(s.data("stellar-backgroundStartingLeft",o[0]),s.data("stellar-backgroundStartingTop",o[1])),p=s.css("margin-left")==="auto"?0:parseInt(s.css("margin-left"),10),d=s.css("margin-top")==="auto"?0:parseInt(s.css("margin-top"),10),v=s.offset().left-p-n,m=s.offset().top-d-i,s.parents().each(function(){var t=e(this);if(t.data("stellar-offset-parent")===!0)return y=w,b=E,g=t,!1;w+=t.position().left,E+=t.position().top}),u=s.data("stellar-horizontal-offset")!==r?s.data("stellar-horizontal-offset"):g!==r&&g.data("stellar-horizontal-offset")!==r?g.data("stellar-horizontal-offset"):t.horizontalOffset,a=s.data("stellar-vertical-offset")!==r?s.data("stellar-vertical-offset"):g!==r&&g.data("stellar-vertical-offset")!==r?g.data("stellar-vertical-offset"):t.verticalOffset,t.backgrounds.push({$element:s,$offsetParent:g,isFixed:s.css("background-attachment")==="fixed",horizontalOffset:u,verticalOffset:a,startingValueLeft:o[0],startingValueTop:o[1],startingBackgroundPositionLeft:isNaN(parseInt(o[0],10))?0:parseInt(o[0],10),startingBackgroundPositionTop:isNaN(parseInt(o[1],10))?0:parseInt(o[1],10),startingPositionLeft:s.position().left,startingPositionTop:s.position().top,startingOffsetLeft:v,startingOffsetTop:m,parentOffsetLeft:y,parentOffsetTop:b,stellarRatio:s.data("stellar-background-ratio")===r?1:s.data("stellar-background-ratio")})})},_reset:function(){var e,t,n,r,i;for(i=this.particles.length-1;i>=0;i--)e=this.particles[i],t=e.$element.data("stellar-startingLeft"),n=e.$element.data("stellar-startingTop"),this._setPosition(e.$element,t,t,n,n),this.options.showElement(e.$element),e.$element.data("stellar-startingLeft",null).data("stellar-elementIsActive",null).data("stellar-backgroundIsActive",null);for(i=this.backgrounds.length-1;i>=0;i--)r=this.backgrounds[i],r.$element.data("stellar-backgroundStartingLeft",null).data("stellar-backgroundStartingTop",null),c(r.$element,r.startingValueLeft,r.startingValueTop)},destroy:function(){this._reset(),this.$scrollElement.unbind("resize."+this.name).unbind("scroll."+this.name),this._animationLoop=e.noop,e(t).unbind("load."+this.name).unbind("resize."+this.name)},_setOffsets:function(){var n=this,r=e(t);r.unbind("resize.horizontal-"+this.name).unbind("resize.vertical-"+this.name),typeof this.options.horizontalOffset=="function"?(this.horizontalOffset=this.options.horizontalOffset(),r.bind("resize.horizontal-"+this.name,function(){n.horizontalOffset=n.options.horizontalOffset()})):this.horizontalOffset=this.options.horizontalOffset,typeof this.options.verticalOffset=="function"?(this.verticalOffset=this.options.verticalOffset(),r.bind("resize.vertical-"+this.name,function(){n.verticalOffset=n.options.verticalOffset()})):this.verticalOffset=this.options.verticalOffset},_repositionElements:function(){var e=this._getScrollLeft(),t=this._getScrollTop(),n,r,i,s,o,u,a,f=!0,l=!0,h,p,d,v,m;if(this.currentScrollLeft===e&&this.currentScrollTop===t&&this.currentWidth===this.viewportWidth&&this.currentHeight===this.viewportHeight)return;this.currentScrollLeft=e,this.currentScrollTop=t,this.currentWidth=this.viewportWidth,this.currentHeight=this.viewportHeight;for(m=this.particles.length-1;m>=0;m--)i=this.particles[m],s=i.isFixed?1:0,this.options.horizontalScrolling?(h=(e+i.horizontalOffset+this.viewportOffsetLeft+i.startingPositionLeft-i.startingOffsetLeft+i.parentOffsetLeft)*-(i.stellarRatio+s-1)+i.startingPositionLeft,d=h-i.startingPositionLeft+i.startingOffsetLeft):(h=i.startingPositionLeft,d=i.startingOffsetLeft),this.options.verticalScrolling?(p=(t+i.verticalOffset+this.viewportOffsetTop+i.startingPositionTop-i.startingOffsetTop+i.parentOffsetTop)*-(i.stellarRatio+s-1)+i.startingPositionTop,v=p-i.startingPositionTop+i.startingOffsetTop):(p=i.startingPositionTop,v=i.startingOffsetTop),this.options.hideDistantElements&&(l=!this.options.horizontalScrolling||d+i.width>(i.isFixed?0:e)&&d<(i.isFixed?0:e)+this.viewportWidth+this.viewportOffsetLeft,f=!this.options.verticalScrolling||v+i.height>(i.isFixed?0:t)&&v<(i.isFixed?0:t)+this.viewportHeight+this.viewportOffsetTop),l&&f?(i.isHidden&&(this.options.showElement(i.$element),i.isHidden=!1),this._setPosition(i.$element,h,i.startingPositionLeft,p,i.startingPositionTop)):i.isHidden||(this.options.hideElement(i.$element),i.isHidden=!0);for(m=this.backgrounds.length-1;m>=0;m--)o=this.backgrounds[m],s=o.isFixed?0:1,u=this.options.horizontalScrolling?(e+o.horizontalOffset-this.viewportOffsetLeft-o.startingOffsetLeft+o.parentOffsetLeft-o.startingBackgroundPositionLeft)*(s-o.stellarRatio)+"px":o.startingValueLeft,a=this.options.verticalScrolling?(t+o.verticalOffset-this.viewportOffsetTop-o.startingOffsetTop+o.parentOffsetTop-o.startingBackgroundPositionTop)*(s-o.stellarRatio)+"px":o.startingValueTop,c(o.$element,u,a)},_handleScrollEvent:function(){var e=this,t=!1,n=function(){e._repositionElements(),t=!1},r=function(){t||(p(n),t=!0)};this.$scrollElement.bind("scroll."+this.name,r),r()},_startAnimationLoop:function(){var e=this;this._animationLoop=function(){p(e._animationLoop),e._repositionElements()},this._animationLoop()}},e.fn[i]=function(t){var n=arguments;if(t===r||typeof t=="object")return this.each(function(){e.data(this,"plugin_"+i)||e.data(this,"plugin_"+i,new d(this,t))});if(typeof t=="string"&&t[0]!=="_"&&t!=="init")return this.each(function(){var r=e.data(this,"plugin_"+i);r instanceof d&&typeof r[t]=="function"&&r[t].apply(r,Array.prototype.slice.call(n,1)),t==="destroy"&&e.data(this,"plugin_"+i,null)})},e[i]=function(n){var r=e(t);return r.stellar.apply(r,Array.prototype.slice.call(arguments,0))},e[i].scrollProperty=o,e[i].positionProperty=u,t.Stellar=d})(jQuery,this,document); + + +/**! + * @author odahcam + * @see The boilerplate used here was https://github.com/odahcam/jQueryPlugin-Boilerplate + * @external https://github.com/odahcam/jquery.parallax/ + */ + +/** + * @param {object} $ + * @param {object} window + * @param {object} document + * @param {undefined} undefined + * @return + */ +(function(d,f,g,b){if(!d){console.error("jQuery não encontrado, seu plugin jQuery não irá funcionar.");return false}(function(){var k=0,l=["ms","moz","webkit","o"];for(var j=0;j=m}return !(k>m||n= nav_offset_top) { + $(".header_area").addClass("navbar_fixed"); + } else { + $(".header_area").removeClass("navbar_fixed"); + } + }); + }; + }; + navbarFixed(); + + + /*----------------------------------------------------*/ + /* Parallax Effect js + /*----------------------------------------------------*/ + function parallaxEffect() { + $('.bg-parallax').parallax(); + } + parallaxEffect(); + + + /*----------------------------------------------------*/ + /* Clients Slider + /*----------------------------------------------------*/ + function clients_slider() { + if ($('.clients_slider').length) { + $('.clients_slider').owlCarousel({ + loop: true, + margin: 30, + items: 5, + nav: false, + autoplay: false, + smartSpeed: 1500, + dots: false, + responsiveClass: true, + responsive: { + 0: { + items: 1, + }, + 400: { + items: 2, + }, + 575: { + items: 3, + }, + 768: { + items: 4, + }, + 992: { + items: 5, + } + } + }) + } + } + clients_slider(); + + + /*----------------------------------------------------*/ + /* Magnific Pop up js (Home Video) + /*----------------------------------------------------*/ + $('#play-home-video').magnificPopup({ + type: 'iframe', + mainClass: 'mfp-fade', + removalDelay: 160, + preloader: false, + fixedContentPos: false + }); + + + /*----------------------------------------------------*/ + /* Magnific Pop up js (Image Gallery) + /*----------------------------------------------------*/ + $('.pop-up-image').magnificPopup({ + type: 'image', + gallery: { + enabled: true + } + }); + + /*----------------------------------------------------*/ + /* Isotope Fillter js + /*----------------------------------------------------*/ + function projects_isotope() { + if ($('.projects_area').length) { + // Activate isotope in container + $(".projects_inner").imagesLoaded(function () { + $(".projects_inner").isotope({ + layoutMode: 'fitRows', + animationOptions: { + duration: 750, + easing: 'linear' + } + }); + }); + + // Add isotope click function + $(".filter li").on('click', function () { + $(".filter li").removeClass("active"); + $(this).addClass("active"); + + var selector = $(this).attr("data-filter"); + $(".projects_inner").isotope({ + filter: selector, + animationOptions: { + duration: 450, + easing: "linear", + queue: false, + } + }); + return false; + }); + } + } + projects_isotope(); + + + /*----------------------------------------------------*/ + /* Testimonials Slider + /*----------------------------------------------------*/ + function testimonials_slider() { + if ($('.testi_slider').length) { + $('.testi_slider').owlCarousel({ + loop: true, + items: 1, + nav: false, + autoplay: true, + smartSpeed: 500, + dots: false, + responsiveClass: true, + responsive: { + 0: { + items: 1, + }, + 768: { + items: 1, + }, + } + }) + } + } + testimonials_slider(); + + +})(jQuery) \ No newline at end of file diff --git a/docs/_static/landing/linericon/fonts/Linearicons-Free.eot b/docs/_static/landing/linericon/fonts/Linearicons-Free.eot new file mode 100644 index 000000000..e531c2262 Binary files /dev/null and b/docs/_static/landing/linericon/fonts/Linearicons-Free.eot differ diff --git a/docs/_static/landing/linericon/fonts/Linearicons-Free.svg b/docs/_static/landing/linericon/fonts/Linearicons-Free.svg new file mode 100644 index 000000000..f498bf424 --- /dev/null +++ b/docs/_static/landing/linericon/fonts/Linearicons-Free.svg @@ -0,0 +1,199 @@ + + + + + +{ + "fontFamily": "Linearicons-Free", + "majorVersion": 1, + "minorVersion": 0, + "description": "Designed by Perxis (https://perxis.com).\nFont generated by IcoMoon.", + "copyright": "Copyright © 2015 Perxis.com. All Rights Reserved.", + "designerURL": "https://perxis.com", + "license": "https://linearicons.com/free/license", + "fontURL": "https://linearicons.com", + "licenseURL": "https://linearicons.com/free/license", + "version": "Version 1.0", + "fontId": "Linearicons-Free", + "psName": "Linearicons-Free", + "subFamily": "Regular", + "fullName": "Linearicons-Free" +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_static/landing/linericon/fonts/Linearicons-Free.ttf b/docs/_static/landing/linericon/fonts/Linearicons-Free.ttf new file mode 100644 index 000000000..73d678322 Binary files /dev/null and b/docs/_static/landing/linericon/fonts/Linearicons-Free.ttf differ diff --git a/docs/_static/landing/linericon/fonts/Linearicons-Free.woff b/docs/_static/landing/linericon/fonts/Linearicons-Free.woff new file mode 100644 index 000000000..63b5b751e Binary files /dev/null and b/docs/_static/landing/linericon/fonts/Linearicons-Free.woff differ diff --git a/docs/_static/landing/linericon/fonts/Linearicons-Free.woff2 b/docs/_static/landing/linericon/fonts/Linearicons-Free.woff2 new file mode 100644 index 000000000..d4c5ddafc Binary files /dev/null and b/docs/_static/landing/linericon/fonts/Linearicons-Free.woff2 differ diff --git a/docs/_static/landing/linericon/style.css b/docs/_static/landing/linericon/style.css new file mode 100644 index 000000000..828463541 --- /dev/null +++ b/docs/_static/landing/linericon/style.css @@ -0,0 +1,536 @@ +@font-face { + font-family: 'Linearicons-Free'; + src:url('fonts/Linearicons-Free.eot?w118d'); + src:url('fonts/Linearicons-Free.eot?#iefixw118d') format('embedded-opentype'), + url('fonts/Linearicons-Free.woff2?w118d') format('woff2'), + url('fonts/Linearicons-Free.woff?w118d') format('woff'), + url('fonts/Linearicons-Free.ttf?w118d') format('truetype'), + url('fonts/Linearicons-Free.svg?w118d#Linearicons-Free') format('svg'); + font-weight: normal; + font-style: normal; +} + +.lnr { + font-family: 'Linearicons-Free'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.lnr-home:before { + content: "\e800"; +} +.lnr-apartment:before { + content: "\e801"; +} +.lnr-pencil:before { + content: "\e802"; +} +.lnr-magic-wand:before { + content: "\e803"; +} +.lnr-drop:before { + content: "\e804"; +} +.lnr-lighter:before { + content: "\e805"; +} +.lnr-poop:before { + content: "\e806"; +} +.lnr-sun:before { + content: "\e807"; +} +.lnr-moon:before { + content: "\e808"; +} +.lnr-cloud:before { + content: "\e809"; +} +.lnr-cloud-upload:before { + content: "\e80a"; +} +.lnr-cloud-download:before { + content: "\e80b"; +} +.lnr-cloud-sync:before { + content: "\e80c"; +} +.lnr-cloud-check:before { + content: "\e80d"; +} +.lnr-database:before { + content: "\e80e"; +} +.lnr-lock:before { + content: "\e80f"; +} +.lnr-cog:before { + content: "\e810"; +} +.lnr-trash:before { + content: "\e811"; +} +.lnr-dice:before { + content: "\e812"; +} +.lnr-heart:before { + content: "\e813"; +} +.lnr-star:before { + content: "\e814"; +} +.lnr-star-half:before { + content: "\e815"; +} +.lnr-star-empty:before { + content: "\e816"; +} +.lnr-flag:before { + content: "\e817"; +} +.lnr-envelope:before { + content: "\e818"; +} +.lnr-paperclip:before { + content: "\e819"; +} +.lnr-inbox:before { + content: "\e81a"; +} +.lnr-eye:before { + content: "\e81b"; +} +.lnr-printer:before { + content: "\e81c"; +} +.lnr-file-empty:before { + content: "\e81d"; +} +.lnr-file-add:before { + content: "\e81e"; +} +.lnr-enter:before { + content: "\e81f"; +} +.lnr-exit:before { + content: "\e820"; +} +.lnr-graduation-hat:before { + content: "\e821"; +} +.lnr-license:before { + content: "\e822"; +} +.lnr-music-note:before { + content: "\e823"; +} +.lnr-film-play:before { + content: "\e824"; +} +.lnr-camera-video:before { + content: "\e825"; +} +.lnr-camera:before { + content: "\e826"; +} +.lnr-picture:before { + content: "\e827"; +} +.lnr-book:before { + content: "\e828"; +} +.lnr-bookmark:before { + content: "\e829"; +} +.lnr-user:before { + content: "\e82a"; +} +.lnr-users:before { + content: "\e82b"; +} +.lnr-shirt:before { + content: "\e82c"; +} +.lnr-store:before { + content: "\e82d"; +} +.lnr-cart:before { + content: "\e82e"; +} +.lnr-tag:before { + content: "\e82f"; +} +.lnr-phone-handset:before { + content: "\e830"; +} +.lnr-phone:before { + content: "\e831"; +} +.lnr-pushpin:before { + content: "\e832"; +} +.lnr-map-marker:before { + content: "\e833"; +} +.lnr-map:before { + content: "\e834"; +} +.lnr-location:before { + content: "\e835"; +} +.lnr-calendar-full:before { + content: "\e836"; +} +.lnr-keyboard:before { + content: "\e837"; +} +.lnr-spell-check:before { + content: "\e838"; +} +.lnr-screen:before { + content: "\e839"; +} +.lnr-smartphone:before { + content: "\e83a"; +} +.lnr-tablet:before { + content: "\e83b"; +} +.lnr-laptop:before { + content: "\e83c"; +} +.lnr-laptop-phone:before { + content: "\e83d"; +} +.lnr-power-switch:before { + content: "\e83e"; +} +.lnr-bubble:before { + content: "\e83f"; +} +.lnr-heart-pulse:before { + content: "\e840"; +} +.lnr-construction:before { + content: "\e841"; +} +.lnr-pie-chart:before { + content: "\e842"; +} +.lnr-chart-bars:before { + content: "\e843"; +} +.lnr-gift:before { + content: "\e844"; +} +.lnr-diamond:before { + content: "\e845"; +} +.lnr-linearicons:before { + content: "\e846"; +} +.lnr-dinner:before { + content: "\e847"; +} +.lnr-coffee-cup:before { + content: "\e848"; +} +.lnr-leaf:before { + content: "\e849"; +} +.lnr-paw:before { + content: "\e84a"; +} +.lnr-rocket:before { + content: "\e84b"; +} +.lnr-briefcase:before { + content: "\e84c"; +} +.lnr-bus:before { + content: "\e84d"; +} +.lnr-car:before { + content: "\e84e"; +} +.lnr-train:before { + content: "\e84f"; +} +.lnr-bicycle:before { + content: "\e850"; +} +.lnr-wheelchair:before { + content: "\e851"; +} +.lnr-select:before { + content: "\e852"; +} +.lnr-earth:before { + content: "\e853"; +} +.lnr-smile:before { + content: "\e854"; +} +.lnr-sad:before { + content: "\e855"; +} +.lnr-neutral:before { + content: "\e856"; +} +.lnr-mustache:before { + content: "\e857"; +} +.lnr-alarm:before { + content: "\e858"; +} +.lnr-bullhorn:before { + content: "\e859"; +} +.lnr-volume-high:before { + content: "\e85a"; +} +.lnr-volume-medium:before { + content: "\e85b"; +} +.lnr-volume-low:before { + content: "\e85c"; +} +.lnr-volume:before { + content: "\e85d"; +} +.lnr-mic:before { + content: "\e85e"; +} +.lnr-hourglass:before { + content: "\e85f"; +} +.lnr-undo:before { + content: "\e860"; +} +.lnr-redo:before { + content: "\e861"; +} +.lnr-sync:before { + content: "\e862"; +} +.lnr-history:before { + content: "\e863"; +} +.lnr-clock:before { + content: "\e864"; +} +.lnr-download:before { + content: "\e865"; +} +.lnr-upload:before { + content: "\e866"; +} +.lnr-enter-down:before { + content: "\e867"; +} +.lnr-exit-up:before { + content: "\e868"; +} +.lnr-bug:before { + content: "\e869"; +} +.lnr-code:before { + content: "\e86a"; +} +.lnr-link:before { + content: "\e86b"; +} +.lnr-unlink:before { + content: "\e86c"; +} +.lnr-thumbs-up:before { + content: "\e86d"; +} +.lnr-thumbs-down:before { + content: "\e86e"; +} +.lnr-magnifier:before { + content: "\e86f"; +} +.lnr-cross:before { + content: "\e870"; +} +.lnr-menu:before { + content: "\e871"; +} +.lnr-list:before { + content: "\e872"; +} +.lnr-chevron-up:before { + content: "\e873"; +} +.lnr-chevron-down:before { + content: "\e874"; +} +.lnr-chevron-left:before { + content: "\e875"; +} +.lnr-chevron-right:before { + content: "\e876"; +} +.lnr-arrow-up:before { + content: "\e877"; +} +.lnr-arrow-down:before { + content: "\e878"; +} +.lnr-arrow-left:before { + content: "\e879"; +} +.lnr-arrow-right:before { + content: "\e87a"; +} +.lnr-move:before { + content: "\e87b"; +} +.lnr-warning:before { + content: "\e87c"; +} +.lnr-question-circle:before { + content: "\e87d"; +} +.lnr-menu-circle:before { + content: "\e87e"; +} +.lnr-checkmark-circle:before { + content: "\e87f"; +} +.lnr-cross-circle:before { + content: "\e880"; +} +.lnr-plus-circle:before { + content: "\e881"; +} +.lnr-circle-minus:before { + content: "\e882"; +} +.lnr-arrow-up-circle:before { + content: "\e883"; +} +.lnr-arrow-down-circle:before { + content: "\e884"; +} +.lnr-arrow-left-circle:before { + content: "\e885"; +} +.lnr-arrow-right-circle:before { + content: "\e886"; +} +.lnr-chevron-up-circle:before { + content: "\e887"; +} +.lnr-chevron-down-circle:before { + content: "\e888"; +} +.lnr-chevron-left-circle:before { + content: "\e889"; +} +.lnr-chevron-right-circle:before { + content: "\e88a"; +} +.lnr-crop:before { + content: "\e88b"; +} +.lnr-frame-expand:before { + content: "\e88c"; +} +.lnr-frame-contract:before { + content: "\e88d"; +} +.lnr-layers:before { + content: "\e88e"; +} +.lnr-funnel:before { + content: "\e88f"; +} +.lnr-text-format:before { + content: "\e890"; +} +.lnr-text-format-remove:before { + content: "\e891"; +} +.lnr-text-size:before { + content: "\e892"; +} +.lnr-bold:before { + content: "\e893"; +} +.lnr-italic:before { + content: "\e894"; +} +.lnr-underline:before { + content: "\e895"; +} +.lnr-strikethrough:before { + content: "\e896"; +} +.lnr-highlight:before { + content: "\e897"; +} +.lnr-text-align-left:before { + content: "\e898"; +} +.lnr-text-align-center:before { + content: "\e899"; +} +.lnr-text-align-right:before { + content: "\e89a"; +} +.lnr-text-align-justify:before { + content: "\e89b"; +} +.lnr-line-spacing:before { + content: "\e89c"; +} +.lnr-indent-increase:before { + content: "\e89d"; +} +.lnr-indent-decrease:before { + content: "\e89e"; +} +.lnr-pilcrow:before { + content: "\e89f"; +} +.lnr-direction-ltr:before { + content: "\e8a0"; +} +.lnr-direction-rtl:before { + content: "\e8a1"; +} +.lnr-page-break:before { + content: "\e8a2"; +} +.lnr-sort-alpha-asc:before { + content: "\e8a3"; +} +.lnr-sort-amount-asc:before { + content: "\e8a4"; +} +.lnr-hand:before { + content: "\e8a5"; +} +.lnr-pointer-up:before { + content: "\e8a6"; +} +.lnr-pointer-right:before { + content: "\e8a7"; +} +.lnr-pointer-down:before { + content: "\e8a8"; +} +.lnr-pointer-left:before { + content: "\e8a9"; +} diff --git a/docs/_static/landing/nice-select/css/nice-select.css b/docs/_static/landing/nice-select/css/nice-select.css new file mode 100644 index 000000000..d72a7cbcc --- /dev/null +++ b/docs/_static/landing/nice-select/css/nice-select.css @@ -0,0 +1,138 @@ +.nice-select { + -webkit-tap-highlight-color: transparent; + background-color: #fff; + border-radius: 5px; + border: solid 1px #e8e8e8; + box-sizing: border-box; + clear: both; + cursor: pointer; + display: block; + float: left; + font-family: inherit; + font-size: 14px; + font-weight: normal; + height: 42px; + line-height: 40px; + outline: none; + padding-left: 18px; + padding-right: 30px; + position: relative; + text-align: left !important; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + white-space: nowrap; + width: auto; } + .nice-select:hover { + border-color: #dbdbdb; } + .nice-select:active, .nice-select.open, .nice-select:focus { + border-color: #999; } + .nice-select:after { + border-bottom: 2px solid #999; + border-right: 2px solid #999; + content: ''; + display: block; + height: 5px; + margin-top: -4px; + pointer-events: none; + position: absolute; + right: 12px; + top: 50%; + -webkit-transform-origin: 66% 66%; + -ms-transform-origin: 66% 66%; + transform-origin: 66% 66%; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; + width: 5px; } + .nice-select.open:after { + -webkit-transform: rotate(-135deg); + -ms-transform: rotate(-135deg); + transform: rotate(-135deg); } + .nice-select.open .list { + opacity: 1; + pointer-events: auto; + -webkit-transform: scale(1) translateY(0); + -ms-transform: scale(1) translateY(0); + transform: scale(1) translateY(0); } + .nice-select.disabled { + border-color: #ededed; + color: #999; + pointer-events: none; } + .nice-select.disabled:after { + border-color: #cccccc; } + .nice-select.wide { + width: 100%; } + .nice-select.wide .list { + left: 0 !important; + right: 0 !important; } + .nice-select.right { + float: right; } + .nice-select.right .list { + left: auto; + right: 0; } + .nice-select.small { + font-size: 12px; + height: 36px; + line-height: 34px; } + .nice-select.small:after { + height: 4px; + width: 4px; } + .nice-select.small .option { + line-height: 34px; + min-height: 34px; } + .nice-select .list { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 0 1px rgba(68, 68, 68, 0.11); + box-sizing: border-box; + margin-top: 4px; + opacity: 0; + overflow: hidden; + padding: 0; + pointer-events: none; + position: absolute; + top: 100%; + left: 0; + -webkit-transform-origin: 50% 0; + -ms-transform-origin: 50% 0; + transform-origin: 50% 0; + -webkit-transform: scale(0.75) translateY(-21px); + -ms-transform: scale(0.75) translateY(-21px); + transform: scale(0.75) translateY(-21px); + -webkit-transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out; + transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out; + z-index: 9; } + .nice-select .list:hover .option:not(:hover) { + background-color: transparent !important; } + .nice-select .option { + cursor: pointer; + font-weight: 400; + line-height: 40px; + list-style: none; + min-height: 40px; + outline: none; + padding-left: 18px; + padding-right: 29px; + text-align: left; + -webkit-transition: all 0.2s; + transition: all 0.2s; } + .nice-select .option:hover, .nice-select .option.focus, .nice-select .option.selected.focus { + background-color: #f6f6f6; } + .nice-select .option.selected { + font-weight: bold; } + .nice-select .option.disabled { + background-color: transparent; + color: #999; + cursor: default; } + +.no-csspointerevents .nice-select .list { + display: none; } + +.no-csspointerevents .nice-select.open .list { + display: block; } diff --git a/docs/_static/landing/nice-select/css/style.css b/docs/_static/landing/nice-select/css/style.css new file mode 100644 index 000000000..3dbe4bb32 --- /dev/null +++ b/docs/_static/landing/nice-select/css/style.css @@ -0,0 +1,372 @@ +.nice-select { + -webkit-tap-highlight-color: transparent; + background-color: #fff; + border-radius: 5px; + border: solid 1px #e0e7ee; + box-sizing: border-box; + clear: both; + cursor: pointer; + display: block; + float: left; + font-family: inherit; + font-size: 14px; + font-weight: normal; + height: 42px; + line-height: 40px; + outline: none; + padding-left: 18px; + padding-right: 30px; + position: relative; + text-align: left !important; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + white-space: nowrap; + width: auto; } + .nice-select:hover { + border-color: #d0dae5; } + .nice-select:active, .nice-select.open, .nice-select:focus { + border-color: #88bfff; } + .nice-select:after { + border-bottom: 2px solid #90a1b5; + border-right: 2px solid #90a1b5; + content: ''; + display: block; + height: 5px; + margin-top: -4px; + pointer-events: none; + position: absolute; + right: 12px; + top: 50%; + -webkit-transform-origin: 66% 66%; + -ms-transform-origin: 66% 66%; + transform-origin: 66% 66%; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; + width: 5px; } + .nice-select.open:after { + -webkit-transform: rotate(-135deg); + -ms-transform: rotate(-135deg); + transform: rotate(-135deg); } + .nice-select.open .list { + opacity: 1; + pointer-events: auto; + -webkit-transform: scale(1) translateY(0); + -ms-transform: scale(1) translateY(0); + transform: scale(1) translateY(0); } + .nice-select.disabled { + border-color: #e7ecf2; + color: #90a1b5; + pointer-events: none; } + .nice-select.disabled:after { + border-color: #cdd5de; } + .nice-select.wide { + width: 100%; } + .nice-select.wide .list { + left: 0 !important; + right: 0 !important; } + .nice-select.right { + float: right; } + .nice-select.right .list { + left: auto; + right: 0; } + .nice-select.small { + font-size: 12px; + height: 36px; + line-height: 34px; } + .nice-select.small:after { + height: 4px; + width: 4px; } + .nice-select.small .option { + line-height: 34px; + min-height: 34px; } + .nice-select .list { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 0 1px rgba(68, 88, 112, 0.11); + box-sizing: border-box; + margin-top: 4px; + opacity: 0; + overflow: hidden; + padding: 0; + pointer-events: none; + position: absolute; + top: 100%; + left: 0; + -webkit-transform-origin: 50% 0; + -ms-transform-origin: 50% 0; + transform-origin: 50% 0; + -webkit-transform: scale(0.75) translateY(-21px); + -ms-transform: scale(0.75) translateY(-21px); + transform: scale(0.75) translateY(-21px); + -webkit-transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out; + transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out; + z-index: 9; } + .nice-select .list:hover .option:not(:hover) { + background-color: transparent !important; } + .nice-select .option { + cursor: pointer; + font-weight: 400; + line-height: 40px; + list-style: none; + min-height: 40px; + outline: none; + padding-left: 18px; + padding-right: 29px; + text-align: left; + -webkit-transition: all 0.2s; + transition: all 0.2s; } + .nice-select .option:hover, .nice-select .option.focus, .nice-select .option.selected.focus { + background-color: #f6f7f9; } + .nice-select .option.selected { + font-weight: bold; } + .nice-select .option.disabled { + background-color: transparent; + color: #90a1b5; + cursor: default; } + +.no-csspointerevents .nice-select .list { + display: none; } + +.no-csspointerevents .nice-select.open .list { + display: block; } + +code[class*="language-"], +pre[class*="language-"] { + border-radius: 2px; + color: #445870; + -webkit-hyphens: none; + -ms-hyphens: none; + hyphens: none; + line-height: 1.5; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + text-align: left; + white-space: pre; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + direction: ltr; + font-family: Inconsolata, monospace; + font-size: 13px; + letter-spacing: 0; } + +/* Code blocks */ +pre[class*="language-"] { + padding: 18px 24px; + margin: 0 0 24px; + overflow: auto; } + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f6f7f9; } + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0 2px 1px; } + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #90a1b5; } + +.token.punctuation { + color: #999; } + +.namespace { + opacity: .7; } + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #EC4444; } + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #4ABF60; } + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #a67f59; + background: rgba(255, 255, 255, 0.5); } + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #55a1fb; } + +.token.function { + color: #DD4A68; } + +.token.regex, +.token.important, +.token.variable { + color: #e90; } + +.token.important, +.token.bold { + font-weight: bold; } + +.token.italic { + font-style: italic; } + +.token.entity { + cursor: help; } + +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #445870; + font-family: 'Work Sans', sans-serif; + font-size: 14px; + font-weight: normal; + letter-spacing: -0.25px; + margin: 0; + padding: 0 18px; } + +p { + line-height: 1.6; + margin: 0 0 1.6em; } + +h1 { + font-size: 36px; + font-weight: 300; + letter-spacing: -2px; + margin: 0 0 24px; } + +h2 { + font-size: 22px; + font-weight: 400; + margin: 0 0 12px; + padding-top: 48px; } + +h3 { + font-size: 18px; + font-weight: 400; + margin: 0 0 12px; + padding-top: 12px; } + +ul { + margin: 0; + padding-left: 16px; } + +a:not(.button) { + color: #55a1fb; + outline: none; + text-decoration: none; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + border-bottom: 1px solid transparent; } + a:not(.button):hover, a:not(.button):focus { + border-bottom: 1px solid #88bfff; } + +::-moz-selection { + background: #f3f4f7; } + +::selection { + background: #f3f4f7; } + +.container { + margin: 96px auto 60px; + max-width: 40em; } + +.box { + background-color: #f6f7f9; + border-radius: 2px; + margin-bottom: 30px; + padding: 24px 30px; } + .box:before, .box:after { + content: ""; + display: table; } + .box:after { + clear: both; } + +label { + color: #90a1b5; + font-size: 11px; + margin: 0 2px 4px; + text-transform: uppercase; + float: left; } + label.right { + float: right; } + +.button { + -webkit-tap-highlight-color: transparent; + background-color: #55a1fb; + border-radius: 5px; + border: none; + box-sizing: border-box; + color: #fff; + cursor: pointer; + display: inline-block; + font-weight: 600; + height: 42px; + line-height: 42px; + outline: none; + padding: 0 24px; + text-align: center; + text-decoration: none; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + white-space: nowrap; + width: auto; } + .button:hover, .button:focus { + background-color: #4196fb; } + .button:active, .button.nice-select.open { + background-color: #2d8bfa; } + .button.light { + background-color: #fff; + border: 1px solid #e0e7ee; + color: #55a1fb; + line-height: 40px; + margin-left: 24px; } + .button.light:hover { + border-color: #d0dae5; } + .button.light:active, .button.light.nice-select.open, .button.light:focus { + border-color: #88bfff; } + @media screen and (max-width: 360px) { + .button { + width: 100%; } + .button.light { + margin: 18px 0 0; } } + +.header { + text-align: center; + margin-bottom: 60px; } + @media screen and (min-width: 600px) { + .header { + padding: 0 18px; } } + .header p { + color: #90a1b5; + font-size: 18px; + margin-bottom: 36px; } + +.footer { + text-align: center; } + .footer p { + margin-bottom: 90px; } + +.credit { + color: #90a1b5; + clear: both; + font-size: 12px; + margin-top: 90px; } diff --git a/docs/_static/landing/nice-select/js/jquery.nice-select.js b/docs/_static/landing/nice-select/js/jquery.nice-select.js new file mode 100644 index 000000000..57fe3b269 --- /dev/null +++ b/docs/_static/landing/nice-select/js/jquery.nice-select.js @@ -0,0 +1,190 @@ +/* jQuery Nice Select - v1.1.0 + https://github.com/hernansartorio/jquery-nice-select + Made by Hernán Sartorio */ + +(function($) { + + $.fn.niceSelect = function(method) { + + // Methods + if (typeof method == 'string') { + if (method == 'update') { + this.each(function() { + var $select = $(this); + var $dropdown = $(this).next('.nice-select'); + var open = $dropdown.hasClass('open'); + + if ($dropdown.length) { + $dropdown.remove(); + create_nice_select($select); + + if (open) { + $select.next().trigger('click'); + } + } + }); + } else if (method == 'destroy') { + this.each(function() { + var $select = $(this); + var $dropdown = $(this).next('.nice-select'); + + if ($dropdown.length) { + $dropdown.remove(); + $select.css('display', ''); + } + }); + if ($('.nice-select').length == 0) { + $(document).off('.nice_select'); + } + } else { + console.log('Method "' + method + '" does not exist.') + } + return this; + } + + // Hide native select + this.hide(); + + // Create custom markup + this.each(function() { + var $select = $(this); + + if (!$select.next().hasClass('nice-select')) { + create_nice_select($select); + } + }); + + function create_nice_select($select) { + $select.after($('
') + .addClass('nice-select') + .addClass($select.attr('class') || '') + .addClass($select.attr('disabled') ? 'disabled' : '') + .attr('tabindex', $select.attr('disabled') ? null : '0') + .html('
    ') + ); + + var $dropdown = $select.next(); + var $options = $select.find('option'); + var $selected = $select.find('option:selected'); + + $dropdown.find('.current').html($selected.data('display') || $selected.text()); + + $options.each(function(i) { + var $option = $(this); + var display = $option.data('display'); + + $dropdown.find('ul').append($('
  • ') + .attr('data-value', $option.val()) + .attr('data-display', (display || null)) + .addClass('option' + + ($option.is(':selected') ? ' selected' : '') + + ($option.is(':disabled') ? ' disabled' : '')) + .html($option.text()) + ); + }); + } + + /* Event listeners */ + + // Unbind existing events in case that the plugin has been initialized before + $(document).off('.nice_select'); + + // Open/close + $(document).on('click.nice_select', '.nice-select', function(event) { + var $dropdown = $(this); + + $('.nice-select').not($dropdown).removeClass('open'); + $dropdown.toggleClass('open'); + + if ($dropdown.hasClass('open')) { + $dropdown.find('.option'); + $dropdown.find('.focus').removeClass('focus'); + $dropdown.find('.selected').addClass('focus'); + } else { + $dropdown.focus(); + } + }); + + // Close when clicking outside + $(document).on('click.nice_select', function(event) { + if ($(event.target).closest('.nice-select').length === 0) { + $('.nice-select').removeClass('open').find('.option'); + } + }); + + // Option click + $(document).on('click.nice_select', '.nice-select .option:not(.disabled)', function(event) { + var $option = $(this); + var $dropdown = $option.closest('.nice-select'); + + $dropdown.find('.selected').removeClass('selected'); + $option.addClass('selected'); + + var text = $option.data('display') || $option.text(); + $dropdown.find('.current').text(text); + + $dropdown.prev('select').val($option.data('value')).trigger('change'); + }); + + // Keyboard events + $(document).on('keydown.nice_select', '.nice-select', function(event) { + var $dropdown = $(this); + var $focused_option = $($dropdown.find('.focus') || $dropdown.find('.list .option.selected')); + + // Space or Enter + if (event.keyCode == 32 || event.keyCode == 13) { + if ($dropdown.hasClass('open')) { + $focused_option.trigger('click'); + } else { + $dropdown.trigger('click'); + } + return false; + // Down + } else if (event.keyCode == 40) { + if (!$dropdown.hasClass('open')) { + $dropdown.trigger('click'); + } else { + var $next = $focused_option.nextAll('.option:not(.disabled)').first(); + if ($next.length > 0) { + $dropdown.find('.focus').removeClass('focus'); + $next.addClass('focus'); + } + } + return false; + // Up + } else if (event.keyCode == 38) { + if (!$dropdown.hasClass('open')) { + $dropdown.trigger('click'); + } else { + var $prev = $focused_option.prevAll('.option:not(.disabled)').first(); + if ($prev.length > 0) { + $dropdown.find('.focus').removeClass('focus'); + $prev.addClass('focus'); + } + } + return false; + // Esc + } else if (event.keyCode == 27) { + if ($dropdown.hasClass('open')) { + $dropdown.trigger('click'); + } + // Tab + } else if (event.keyCode == 9) { + if ($dropdown.hasClass('open')) { + return false; + } + } + }); + + // Detect CSS pointer-events support, for IE <= 10. From Modernizr. + var style = document.createElement('a').style; + style.cssText = 'pointer-events:auto'; + if (style.pointerEvents !== 'auto') { + $('html').addClass('no-csspointerevents'); + } + + return this; + + }; + +}(jQuery)); \ No newline at end of file diff --git a/docs/_static/landing/nice-select/js/jquery.nice-select.min.js b/docs/_static/landing/nice-select/js/jquery.nice-select.min.js new file mode 100644 index 000000000..88eb2d6c8 --- /dev/null +++ b/docs/_static/landing/nice-select/js/jquery.nice-select.min.js @@ -0,0 +1,4 @@ +/* jQuery Nice Select - v1.0 + https://github.com/hernansartorio/jquery-nice-select + Made by Hernán Sartorio */ +!function(e){e.fn.niceSelect=function(t){function s(t){t.after(e("
    ").addClass("nice-select").addClass(t.attr("class")||"").addClass(t.attr("disabled")?"disabled":"").attr("tabindex",t.attr("disabled")?null:"0").html('
      '));var s=t.next(),n=t.find("option"),i=t.find("option:selected");s.find(".current").html(i.data("display")||i.text()),n.each(function(t){var n=e(this),i=n.data("display");s.find("ul").append(e("
    • ").attr("data-value",n.val()).attr("data-display",i||null).addClass("option"+(n.is(":selected")?" selected":"")+(n.is(":disabled")?" disabled":"")).html(n.text()))})}if("string"==typeof t)return"update"==t?this.each(function(){var t=e(this),n=e(this).next(".nice-select"),i=n.hasClass("open");n.length&&(n.remove(),s(t),i&&t.next().trigger("click"))}):"destroy"==t?(this.each(function(){var t=e(this),s=e(this).next(".nice-select");s.length&&(s.remove(),t.css("display",""))}),0==e(".nice-select").length&&e(document).off(".nice_select")):console.log('Method "'+t+'" does not exist.'),this;this.hide(),this.each(function(){var t=e(this);t.next().hasClass("nice-select")||s(t)}),e(document).off(".nice_select"),e(document).on("click.nice_select",".nice-select",function(t){var s=e(this);e(".nice-select").not(s).removeClass("open"),s.toggleClass("open"),s.hasClass("open")?(s.find(".option"),s.find(".focus").removeClass("focus"),s.find(".selected").addClass("focus")):s.focus()}),e(document).on("click.nice_select",function(t){0===e(t.target).closest(".nice-select").length&&e(".nice-select").removeClass("open").find(".option")}),e(document).on("click.nice_select",".nice-select .option:not(.disabled)",function(t){var s=e(this),n=s.closest(".nice-select");n.find(".selected").removeClass("selected"),s.addClass("selected");var i=s.data("display")||s.text();n.find(".current").text(i),n.prev("select").val(s.data("value")).trigger("change")}),e(document).on("keydown.nice_select",".nice-select",function(t){var s=e(this),n=e(s.find(".focus")||s.find(".list .option.selected"));if(32==t.keyCode||13==t.keyCode)return s.hasClass("open")?n.trigger("click"):s.trigger("click"),!1;if(40==t.keyCode){if(s.hasClass("open")){var i=n.nextAll(".option:not(.disabled)").first();i.length>0&&(s.find(".focus").removeClass("focus"),i.addClass("focus"))}else s.trigger("click");return!1}if(38==t.keyCode){if(s.hasClass("open")){var l=n.prevAll(".option:not(.disabled)").first();l.length>0&&(s.find(".focus").removeClass("focus"),l.addClass("focus"))}else s.trigger("click");return!1}if(27==t.keyCode)s.hasClass("open")&&s.trigger("click");else if(9==t.keyCode&&s.hasClass("open"))return!1});var n=document.createElement("a").style;return n.cssText="pointer-events:auto","auto"!==n.pointerEvents&&e("html").addClass("no-csspointerevents"),this}}(jQuery); \ No newline at end of file diff --git a/docs/_static/landing/owl-carousel/assets/ajax-loader.gif b/docs/_static/landing/owl-carousel/assets/ajax-loader.gif new file mode 100644 index 000000000..d3962f969 Binary files /dev/null and b/docs/_static/landing/owl-carousel/assets/ajax-loader.gif differ diff --git a/docs/_static/landing/owl-carousel/assets/animated.css b/docs/_static/landing/owl-carousel/assets/animated.css new file mode 100644 index 000000000..5a13ca5c0 --- /dev/null +++ b/docs/_static/landing/owl-carousel/assets/animated.css @@ -0,0 +1,2490 @@ +@charset "UTF-8"; +/*! +Animate.css - http://daneden.me/animate +Licensed under the MIT license + +Copyright (c) 2013 Daniel Eden + +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. +*/ + +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both +} +.animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s +} +@-webkit-keyframes bounce { + 0%, 100%, 20%, 50%, 80% { + -webkit-transform: translateY(0); + transform: translateY(0) + } + 40% { + -webkit-transform: translateY(-30px); + transform: translateY(-30px) + } + 60% { + -webkit-transform: translateY(-15px); + transform: translateY(-15px) + } +} +@keyframes bounce { + 0%, 100%, 20%, 50%, 80% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } + 40% { + -webkit-transform: translateY(-30px); + -ms-transform: translateY(-30px); + transform: translateY(-30px) + } + 60% { + -webkit-transform: translateY(-15px); + -ms-transform: translateY(-15px); + transform: translateY(-15px) + } +} +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce +} +@-webkit-keyframes flash { + 0%, 100%, 50% { + opacity: 1 + } + 25%, + 75% { + opacity: 0 + } +} +@keyframes flash { + 0%, 100%, 50% { + opacity: 1 + } + 25%, + 75% { + opacity: 0 + } +} +.flash { + -webkit-animation-name: flash; + animation-name: flash +} +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + transform: scale(1) + } + 50% { + -webkit-transform: scale(1.1); + transform: scale(1.1) + } + 100% { + -webkit-transform: scale(1); + transform: scale(1) + } +} +@keyframes pulse { + 0% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1) + } + 50% { + -webkit-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1) + } + 100% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1) + } +} +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse +} + +@-webkit-keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.slideOutDown { + -webkit-animation-name: slideOutDown; + animation-name: slideOutDown; +} + +@-webkit-keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 50% { + opacity: 1; + } +} + +@keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 50% { + opacity: 1; + } +} + +.zoomIn { + -webkit-animation-name: zoomIn; + animation-name: zoomIn; +} + +@-webkit-keyframes rubberBand { + 0% { + -webkit-transform: scale(1); + transform: scale(1) + } + 30% { + -webkit-transform: scaleX(1.25) scaleY(0.75); + transform: scaleX(1.25) scaleY(0.75) + } + 40% { + -webkit-transform: scaleX(0.75) scaleY(1.25); + transform: scaleX(0.75) scaleY(1.25) + } + 60% { + -webkit-transform: scaleX(1.15) scaleY(0.85); + transform: scaleX(1.15) scaleY(0.85) + } + 100% { + -webkit-transform: scale(1); + transform: scale(1) + } +} +@keyframes rubberBand { + 0% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1) + } + 30% { + -webkit-transform: scaleX(1.25) scaleY(0.75); + -ms-transform: scaleX(1.25) scaleY(0.75); + transform: scaleX(1.25) scaleY(0.75) + } + 40% { + -webkit-transform: scaleX(0.75) scaleY(1.25); + -ms-transform: scaleX(0.75) scaleY(1.25); + transform: scaleX(0.75) scaleY(1.25) + } + 60% { + -webkit-transform: scaleX(1.15) scaleY(0.85); + -ms-transform: scaleX(1.15) scaleY(0.85); + transform: scaleX(1.15) scaleY(0.85) + } + 100% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1) + } +} +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand +} +@-webkit-keyframes shake { + 0%, 100% { + -webkit-transform: translateX(0); + transform: translateX(0) + } + 10%, + 30%, + 50%, + 70%, + 90% { + -webkit-transform: translateX(-10px); + transform: translateX(-10px) + } + 20%, + 40%, + 60%, + 80% { + -webkit-transform: translateX(10px); + transform: translateX(10px) + } +} +@keyframes shake { + 0%, 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } + 10%, + 30%, + 50%, + 70%, + 90% { + -webkit-transform: translateX(-10px); + -ms-transform: translateX(-10px); + transform: translateX(-10px) + } + 20%, + 40%, + 60%, + 80% { + -webkit-transform: translateX(10px); + -ms-transform: translateX(10px); + transform: translateX(10px) + } +} +.shake { + -webkit-animation-name: shake; + animation-name: shake +} +@-webkit-keyframes swing { + 20% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg) + } + 40% { + -webkit-transform: rotate(-10deg); + transform: rotate(-10deg) + } + 60% { + -webkit-transform: rotate(5deg); + transform: rotate(5deg) + } + 80% { + -webkit-transform: rotate(-5deg); + transform: rotate(-5deg) + } + 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg) + } +} +@keyframes swing { + 20% { + -webkit-transform: rotate(15deg); + -ms-transform: rotate(15deg); + transform: rotate(15deg) + } + 40% { + -webkit-transform: rotate(-10deg); + -ms-transform: rotate(-10deg); + transform: rotate(-10deg) + } + 60% { + -webkit-transform: rotate(5deg); + -ms-transform: rotate(5deg); + transform: rotate(5deg) + } + 80% { + -webkit-transform: rotate(-5deg); + -ms-transform: rotate(-5deg); + transform: rotate(-5deg) + } + 100% { + -webkit-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg) + } +} +.swing { + -webkit-transform-origin: top center; + -ms-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing +} +@-webkit-keyframes tada { + 0% { + -webkit-transform: scale(1); + transform: scale(1) + } + 10%, + 20% { + -webkit-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg) + } + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg) + } + 40%, + 60%, + 80% { + -webkit-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg) + } + 100% { + -webkit-transform: scale(1) rotate(0); + transform: scale(1) rotate(0) + } +} +@keyframes tada { + 0% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1) + } + 10%, + 20% { + -webkit-transform: scale(0.9) rotate(-3deg); + -ms-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg) + } + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg) + } + 40%, + 60%, + 80% { + -webkit-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg) + } + 100% { + -webkit-transform: scale(1) rotate(0); + -ms-transform: scale(1) rotate(0); + transform: scale(1) rotate(0) + } +} +.tada { + -webkit-animation-name: tada; + animation-name: tada +} +@-webkit-keyframes wobble { + 0% { + -webkit-transform: translateX(0%); + transform: translateX(0%) + } + 15% { + -webkit-transform: translateX(-25%) rotate(-5deg); + transform: translateX(-25%) rotate(-5deg) + } + 30% { + -webkit-transform: translateX(20%) rotate(3deg); + transform: translateX(20%) rotate(3deg) + } + 45% { + -webkit-transform: translateX(-15%) rotate(-3deg); + transform: translateX(-15%) rotate(-3deg) + } + 60% { + -webkit-transform: translateX(10%) rotate(2deg); + transform: translateX(10%) rotate(2deg) + } + 75% { + -webkit-transform: translateX(-5%) rotate(-1deg); + transform: translateX(-5%) rotate(-1deg) + } + 100% { + -webkit-transform: translateX(0%); + transform: translateX(0%) + } +} +@keyframes wobble { + 0% { + -webkit-transform: translateX(0%); + -ms-transform: translateX(0%); + transform: translateX(0%) + } + 15% { + -webkit-transform: translateX(-25%) rotate(-5deg); + -ms-transform: translateX(-25%) rotate(-5deg); + transform: translateX(-25%) rotate(-5deg) + } + 30% { + -webkit-transform: translateX(20%) rotate(3deg); + -ms-transform: translateX(20%) rotate(3deg); + transform: translateX(20%) rotate(3deg) + } + 45% { + -webkit-transform: translateX(-15%) rotate(-3deg); + -ms-transform: translateX(-15%) rotate(-3deg); + transform: translateX(-15%) rotate(-3deg) + } + 60% { + -webkit-transform: translateX(10%) rotate(2deg); + -ms-transform: translateX(10%) rotate(2deg); + transform: translateX(10%) rotate(2deg) + } + 75% { + -webkit-transform: translateX(-5%) rotate(-1deg); + -ms-transform: translateX(-5%) rotate(-1deg); + transform: translateX(-5%) rotate(-1deg) + } + 100% { + -webkit-transform: translateX(0%); + -ms-transform: translateX(0%); + transform: translateX(0%) + } +} +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble +} +@-webkit-keyframes bounceIn { + 0% { + opacity: 0; + -webkit-transform: scale(.3); + transform: scale(.3) + } + 50% { + opacity: 1; + -webkit-transform: scale(1.05); + transform: scale(1.05) + } + 70% { + -webkit-transform: scale(.9); + transform: scale(.9) + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1) + } +} +@keyframes bounceIn { + 0% { + opacity: 0; + -webkit-transform: scale(.3); + -ms-transform: scale(.3); + transform: scale(.3) + } + 50% { + opacity: 1; + -webkit-transform: scale(1.05); + -ms-transform: scale(1.05); + transform: scale(1.05) + } + 70% { + -webkit-transform: scale(.9); + -ms-transform: scale(.9); + transform: scale(.9) + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1) + } +} +.bounceIn { + -webkit-animation-name: bounceIn; + animation-name: bounceIn +} +@-webkit-keyframes bounceInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px) + } + 60% { + opacity: 1; + -webkit-transform: translateY(30px); + transform: translateY(30px) + } + 80% { + -webkit-transform: translateY(-10px); + transform: translateY(-10px) + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0) + } +} +@keyframes bounceInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px) + } + 60% { + opacity: 1; + -webkit-transform: translateY(30px); + -ms-transform: translateY(30px); + transform: translateY(30px) + } + 80% { + -webkit-transform: translateY(-10px); + -ms-transform: translateY(-10px); + transform: translateY(-10px) + } + 100% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } +} +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown +} +@-webkit-keyframes bounceInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px) + } + 60% { + opacity: 1; + -webkit-transform: translateX(30px); + transform: translateX(30px) + } + 80% { + -webkit-transform: translateX(-10px); + transform: translateX(-10px) + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0) + } +} +@keyframes bounceInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px) + } + 60% { + opacity: 1; + -webkit-transform: translateX(30px); + -ms-transform: translateX(30px); + transform: translateX(30px) + } + 80% { + -webkit-transform: translateX(-10px); + -ms-transform: translateX(-10px); + transform: translateX(-10px) + } + 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } +} +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft +} +@-webkit-keyframes bounceInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px) + } + 60% { + opacity: 1; + -webkit-transform: translateX(-30px); + transform: translateX(-30px) + } + 80% { + -webkit-transform: translateX(10px); + transform: translateX(10px) + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0) + } +} +@keyframes bounceInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px) + } + 60% { + opacity: 1; + -webkit-transform: translateX(-30px); + -ms-transform: translateX(-30px); + transform: translateX(-30px) + } + 80% { + -webkit-transform: translateX(10px); + -ms-transform: translateX(10px); + transform: translateX(10px) + } + 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } +} +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight +} +@-webkit-keyframes bounceInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px) + } + 60% { + opacity: 1; + -webkit-transform: translateY(-30px); + transform: translateY(-30px) + } + 80% { + -webkit-transform: translateY(10px); + transform: translateY(10px) + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0) + } +} +@keyframes bounceInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px) + } + 60% { + opacity: 1; + -webkit-transform: translateY(-30px); + -ms-transform: translateY(-30px); + transform: translateY(-30px) + } + 80% { + -webkit-transform: translateY(10px); + -ms-transform: translateY(10px); + transform: translateY(10px) + } + 100% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } +} +.bounceInUp { + -webkit-animation-name: bounceInUp; + animation-name: bounceInUp +} +@-webkit-keyframes bounceOut { + 0% { + -webkit-transform: scale(1); + transform: scale(1) + } + 25% { + -webkit-transform: scale(.95); + transform: scale(.95) + } + 50% { + opacity: 1; + -webkit-transform: scale(1.1); + transform: scale(1.1) + } + 100% { + opacity: 0; + -webkit-transform: scale(.3); + transform: scale(.3) + } +} +@keyframes bounceOut { + 0% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1) + } + 25% { + -webkit-transform: scale(.95); + -ms-transform: scale(.95); + transform: scale(.95) + } + 50% { + opacity: 1; + -webkit-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1) + } + 100% { + opacity: 0; + -webkit-transform: scale(.3); + -ms-transform: scale(.3); + transform: scale(.3) + } +} +.bounceOut { + -webkit-animation-name: bounceOut; + animation-name: bounceOut +} +@-webkit-keyframes bounceOutDown { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0) + } + 20% { + opacity: 1; + -webkit-transform: translateY(-20px); + transform: translateY(-20px) + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px) + } +} +@keyframes bounceOutDown { + 0% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } + 20% { + opacity: 1; + -webkit-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px) + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px) + } +} +.bounceOutDown { + -webkit-animation-name: bounceOutDown; + animation-name: bounceOutDown +} +@-webkit-keyframes bounceOutLeft { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0) + } + 20% { + opacity: 1; + -webkit-transform: translateX(20px); + transform: translateX(20px) + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px) + } +} +@keyframes bounceOutLeft { + 0% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } + 20% { + opacity: 1; + -webkit-transform: translateX(20px); + -ms-transform: translateX(20px); + transform: translateX(20px) + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px) + } +} +.bounceOutLeft { + -webkit-animation-name: bounceOutLeft; + animation-name: bounceOutLeft +} +@-webkit-keyframes bounceOutRight { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0) + } + 20% { + opacity: 1; + -webkit-transform: translateX(-20px); + transform: translateX(-20px) + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px) + } +} +@keyframes bounceOutRight { + 0% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } + 20% { + opacity: 1; + -webkit-transform: translateX(-20px); + -ms-transform: translateX(-20px); + transform: translateX(-20px) + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px) + } +} +.bounceOutRight { + -webkit-animation-name: bounceOutRight; + animation-name: bounceOutRight +} +@-webkit-keyframes bounceOutUp { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0) + } + 20% { + opacity: 1; + -webkit-transform: translateY(20px); + transform: translateY(20px) + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px) + } +} +@keyframes bounceOutUp { + 0% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } + 20% { + opacity: 1; + -webkit-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px) + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px) + } +} +.bounceOutUp { + -webkit-animation-name: bounceOutUp; + animation-name: bounceOutUp +} +@-webkit-keyframes fadeIn { + 0% { + opacity: 0 + } + 100% { + opacity: 1 + } +} +@keyframes fadeIn { + 0% { + opacity: 0 + } + 100% { + opacity: 1 + } +} +.fadeIn { + -webkit-animation-name: fadeIn; + animation-name: fadeIn +} +@-webkit-keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-20px); + transform: translateY(-20px) + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0) + } +} +@keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px) + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } +} +.fadeInDown { + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown +} +@-webkit-keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px) + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0) + } +} +@keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px) + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } +} +.fadeInDownBig { + -webkit-animation-name: fadeInDownBig; + animation-name: fadeInDownBig +} +@-webkit-keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-20px); + transform: translateX(-20px) + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0) + } +} +@keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-20px); + -ms-transform: translateX(-20px); + transform: translateX(-20px) + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } +} +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + animation-name: fadeInLeft +} +@-webkit-keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px) + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0) + } +} +@keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px) + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } +} +.fadeInLeftBig { + -webkit-animation-name: fadeInLeftBig; + animation-name: fadeInLeftBig +} +@-webkit-keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(20px); + transform: translateX(20px) + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0) + } +} +@keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(20px); + -ms-transform: translateX(20px); + transform: translateX(20px) + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } +} +.fadeInRight { + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight +} +@-webkit-keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px) + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0) + } +} +@keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px) + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } +} +.fadeInRightBig { + -webkit-animation-name: fadeInRightBig; + animation-name: fadeInRightBig +} +@-webkit-keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(20px); + transform: translateY(20px) + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0) + } +} +@keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px) + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } +} +.fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp +} +@-webkit-keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px) + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0) + } +} +@keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px) + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } +} +.fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig +} +@-webkit-keyframes fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} +@keyframes fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut +} +@-webkit-keyframes fadeOutDown { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0) + } + 100% { + opacity: 0; + -webkit-transform: translateY(20px); + transform: translateY(20px) + } +} +@keyframes fadeOutDown { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } + 100% { + opacity: 0; + -webkit-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px) + } +} +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + animation-name: fadeOutDown +} +@-webkit-keyframes fadeOutDownBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0) + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px) + } +} +@keyframes fadeOutDownBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px) + } +} +.fadeOutDownBig { + -webkit-animation-name: fadeOutDownBig; + animation-name: fadeOutDownBig +} +@-webkit-keyframes fadeOutLeft { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0) + } + 100% { + opacity: 0; + -webkit-transform: translateX(-20px); + transform: translateX(-20px) + } +} +@keyframes fadeOutLeft { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } + 100% { + opacity: 0; + -webkit-transform: translateX(-20px); + -ms-transform: translateX(-20px); + transform: translateX(-20px) + } +} +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + animation-name: fadeOutLeft +} +@-webkit-keyframes fadeOutLeftBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0) + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px) + } +} +@keyframes fadeOutLeftBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px) + } +} +.fadeOutLeftBig { + -webkit-animation-name: fadeOutLeftBig; + animation-name: fadeOutLeftBig +} +@-webkit-keyframes fadeOutRight { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0) + } + 100% { + opacity: 0; + -webkit-transform: translateX(20px); + transform: translateX(20px) + } +} +@keyframes fadeOutRight { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } + 100% { + opacity: 0; + -webkit-transform: translateX(20px); + -ms-transform: translateX(20px); + transform: translateX(20px) + } +} +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight +} +@-webkit-keyframes fadeOutRightBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0) + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px) + } +} +@keyframes fadeOutRightBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px) + } +} +.fadeOutRightBig { + -webkit-animation-name: fadeOutRightBig; + animation-name: fadeOutRightBig +} +@-webkit-keyframes fadeOutUp { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0) + } + 100% { + opacity: 0; + -webkit-transform: translateY(-20px); + transform: translateY(-20px) + } +} +@keyframes fadeOutUp { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } + 100% { + opacity: 0; + -webkit-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px) + } +} +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + animation-name: fadeOutUp +} +@-webkit-keyframes fadeOutUpBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0) + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px) + } +} +@keyframes fadeOutUpBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px) + } +} +.fadeOutUpBig { + -webkit-animation-name: fadeOutUpBig; + animation-name: fadeOutUpBig +} +@-webkit-keyframes flip { + 0% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out + } + 40% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out + } + 50% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in + } + 80% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in + } + 100% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in + } +} +@keyframes flip { + 0% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + -ms-transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out + } + 40% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out + } + 50% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in + } + 80% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in + } + 100% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in + } +} +.animated.flip { + -webkit-backface-visibility: visible; + -ms-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip +} +@-webkit-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + opacity: 0 + } + 40% { + -webkit-transform: perspective(400px) rotateX(-10deg); + transform: perspective(400px) rotateX(-10deg) + } + 70% { + -webkit-transform: perspective(400px) rotateX(10deg); + transform: perspective(400px) rotateX(10deg) + } + 100% { + -webkit-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + opacity: 1 + } +} +@keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + opacity: 0 + } + 40% { + -webkit-transform: perspective(400px) rotateX(-10deg); + -ms-transform: perspective(400px) rotateX(-10deg); + transform: perspective(400px) rotateX(-10deg) + } + 70% { + -webkit-transform: perspective(400px) rotateX(10deg); + -ms-transform: perspective(400px) rotateX(10deg); + transform: perspective(400px) rotateX(10deg) + } + 100% { + -webkit-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + opacity: 1 + } +} +.flipInX { + -webkit-backface-visibility: visible!important; + -ms-backface-visibility: visible!important; + backface-visibility: visible!important; + -webkit-animation-name: flipInX; + animation-name: flipInX +} +@-webkit-keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + opacity: 0 + } + 40% { + -webkit-transform: perspective(400px) rotateY(-10deg); + transform: perspective(400px) rotateY(-10deg) + } + 70% { + -webkit-transform: perspective(400px) rotateY(10deg); + transform: perspective(400px) rotateY(10deg) + } + 100% { + -webkit-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + opacity: 1 + } +} +@keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + opacity: 0 + } + 40% { + -webkit-transform: perspective(400px) rotateY(-10deg); + -ms-transform: perspective(400px) rotateY(-10deg); + transform: perspective(400px) rotateY(-10deg) + } + 70% { + -webkit-transform: perspective(400px) rotateY(10deg); + -ms-transform: perspective(400px) rotateY(10deg); + transform: perspective(400px) rotateY(10deg) + } + 100% { + -webkit-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + opacity: 1 + } +} +.flipInY { + -webkit-backface-visibility: visible!important; + -ms-backface-visibility: visible!important; + backface-visibility: visible!important; + -webkit-animation-name: flipInY; + animation-name: flipInY +} +@-webkit-keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + opacity: 1 + } + 100% { + -webkit-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + opacity: 0 + } +} +@keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + opacity: 1 + } + 100% { + -webkit-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + opacity: 0 + } +} +.flipOutX { + -webkit-animation-name: flipOutX; + animation-name: flipOutX; + -webkit-backface-visibility: visible!important; + -ms-backface-visibility: visible!important; + backface-visibility: visible!important +} +@-webkit-keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + opacity: 1 + } + 100% { + -webkit-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + opacity: 0 + } +} +@keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + opacity: 1 + } + 100% { + -webkit-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + opacity: 0 + } +} +.flipOutY { + -webkit-backface-visibility: visible!important; + -ms-backface-visibility: visible!important; + backface-visibility: visible!important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY +} +@-webkit-keyframes lightSpeedIn { + 0% { + -webkit-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + opacity: 0 + } + 60% { + -webkit-transform: translateX(-20%) skewX(30deg); + transform: translateX(-20%) skewX(30deg); + opacity: 1 + } + 80% { + -webkit-transform: translateX(0%) skewX(-15deg); + transform: translateX(0%) skewX(-15deg); + opacity: 1 + } + 100% { + -webkit-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + opacity: 1 + } +} +@keyframes lightSpeedIn { + 0% { + -webkit-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + opacity: 0 + } + 60% { + -webkit-transform: translateX(-20%) skewX(30deg); + -ms-transform: translateX(-20%) skewX(30deg); + transform: translateX(-20%) skewX(30deg); + opacity: 1 + } + 80% { + -webkit-transform: translateX(0%) skewX(-15deg); + -ms-transform: translateX(0%) skewX(-15deg); + transform: translateX(0%) skewX(-15deg); + opacity: 1 + } + 100% { + -webkit-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + opacity: 1 + } +} +.lightSpeedIn { + -webkit-animation-name: lightSpeedIn; + animation-name: lightSpeedIn; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out +} +@-webkit-keyframes lightSpeedOut { + 0% { + -webkit-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + opacity: 1 + } + 100% { + -webkit-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + opacity: 0 + } +} +@keyframes lightSpeedOut { + 0% { + -webkit-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + opacity: 1 + } + 100% { + -webkit-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + opacity: 0 + } +} +.lightSpeedOut { + -webkit-animation-name: lightSpeedOut; + animation-name: lightSpeedOut; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in +} +@-webkit-keyframes rotateIn { + 0% { + -webkit-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(-200deg); + transform: rotate(-200deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } +} +@keyframes rotateIn { + 0% { + -webkit-transform-origin: center center; + -ms-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(-200deg); + -ms-transform: rotate(-200deg); + transform: rotate(-200deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: center center; + -ms-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } +} +.rotateIn { + -webkit-animation-name: rotateIn; + animation-name: rotateIn +} +@-webkit-keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } +} +@keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } +} +.rotateInDownLeft { + -webkit-animation-name: rotateInDownLeft; + animation-name: rotateInDownLeft +} +@-webkit-keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } +} +@keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } +} +.rotateInDownRight { + -webkit-animation-name: rotateInDownRight; + animation-name: rotateInDownRight +} +@-webkit-keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } +} +@keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } +} +.rotateInUpLeft { + -webkit-animation-name: rotateInUpLeft; + animation-name: rotateInUpLeft +} +@-webkit-keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } +} +@keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } +} +.rotateInUpRight { + -webkit-animation-name: rotateInUpRight; + animation-name: rotateInUpRight +} +@-webkit-keyframes rotateOut { + 0% { + -webkit-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } + 100% { + -webkit-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(200deg); + transform: rotate(200deg); + opacity: 0 + } +} +@keyframes rotateOut { + 0% { + -webkit-transform-origin: center center; + -ms-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } + 100% { + -webkit-transform-origin: center center; + -ms-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(200deg); + -ms-transform: rotate(200deg); + transform: rotate(200deg); + opacity: 0 + } +} +.rotateOut { + -webkit-animation-name: rotateOut; + animation-name: rotateOut +} +@-webkit-keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0 + } +} +@keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0 + } +} +.rotateOutDownLeft { + -webkit-animation-name: rotateOutDownLeft; + animation-name: rotateOutDownLeft +} +@-webkit-keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0 + } +} +@keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0 + } +} +.rotateOutDownRight { + -webkit-animation-name: rotateOutDownRight; + animation-name: rotateOutDownRight +} +@-webkit-keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0 + } +} +@keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0 + } +} +.rotateOutUpLeft { + -webkit-animation-name: rotateOutUpLeft; + animation-name: rotateOutUpLeft +} +@-webkit-keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0 + } +} +@keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1 + } + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0 + } +} +.rotateOutUpRight { + -webkit-animation-name: rotateOutUpRight; + animation-name: rotateOutUpRight +} +@-webkit-keyframes slideInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px) + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0) + } +} +@keyframes slideInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px) + } + 100% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } +} +.slideInDown { + -webkit-animation-name: slideInDown; + animation-name: slideInDown +} +@-webkit-keyframes slideInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px) + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0) + } +} +@keyframes slideInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px) + } + 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } +} +.slideInLeft { + -webkit-animation-name: slideInLeft; + animation-name: slideInLeft +} +@-webkit-keyframes slideInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px) + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0) + } +} +@keyframes slideInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px) + } + 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } +} +.slideInRight { + -webkit-animation-name: slideInRight; + animation-name: slideInRight +} +@-webkit-keyframes slideOutLeft { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0) + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px) + } +} +@keyframes slideOutLeft { + 0% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px) + } +} +.slideOutLeft { + -webkit-animation-name: slideOutLeft; + animation-name: slideOutLeft +} +@-webkit-keyframes slideOutRight { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0) + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px) + } +} +@keyframes slideOutRight { + 0% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px) + } +} +.slideOutRight { + -webkit-animation-name: slideOutRight; + animation-name: slideOutRight +} +@-webkit-keyframes slideOutUp { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0) + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px) + } +} +@keyframes slideOutUp { + 0% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px) + } +} +.slideOutUp { + -webkit-animation-name: slideOutUp; + animation-name: slideOutUp +} +@-webkit-keyframes hinge { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out + } + 20%, + 60% { + -webkit-transform: rotate(80deg); + transform: rotate(80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out + } + 40% { + -webkit-transform: rotate(60deg); + transform: rotate(60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out + } + 80% { + -webkit-transform: rotate(60deg) translateY(0); + transform: rotate(60deg) translateY(0); + opacity: 1; + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out + } + 100% { + -webkit-transform: translateY(700px); + transform: translateY(700px); + opacity: 0 + } +} +@keyframes hinge { + 0% { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out + } + 20%, + 60% { + -webkit-transform: rotate(80deg); + -ms-transform: rotate(80deg); + transform: rotate(80deg); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out + } + 40% { + -webkit-transform: rotate(60deg); + -ms-transform: rotate(60deg); + transform: rotate(60deg); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out + } + 80% { + -webkit-transform: rotate(60deg) translateY(0); + -ms-transform: rotate(60deg) translateY(0); + transform: rotate(60deg) translateY(0); + opacity: 1; + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out + } + 100% { + -webkit-transform: translateY(700px); + -ms-transform: translateY(700px); + transform: translateY(700px); + opacity: 0 + } +} +.hinge { + -webkit-animation-name: hinge; + animation-name: hinge +} +@-webkit-keyframes rollIn { + 0% { + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg) + } + 100% { + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg) + } +} +@keyframes rollIn { + 0% { + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + -ms-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg) + } + 100% { + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg) + } +} +.rollIn { + -webkit-animation-name: rollIn; + animation-name: rollIn +} +@-webkit-keyframes rollOut { + 0% { + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg) + } + 100% { + opacity: 0; + -webkit-transform: translateX(100%) rotate(120deg); + transform: translateX(100%) rotate(120deg) + } +} +@keyframes rollOut { + 0% { + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg) + } + 100% { + opacity: 0; + -webkit-transform: translateX(100%) rotate(120deg); + -ms-transform: translateX(100%) rotate(120deg); + transform: translateX(100%) rotate(120deg) + } +} +.rollOut { + -webkit-animation-name: rollOut; + animation-name: rollOut +} \ No newline at end of file diff --git a/docs/_static/landing/owl-carousel/assets/owl.carousel.css b/docs/_static/landing/owl-carousel/assets/owl.carousel.css new file mode 100644 index 000000000..91973731c --- /dev/null +++ b/docs/_static/landing/owl-carousel/assets/owl.carousel.css @@ -0,0 +1,170 @@ +/** + * Owl Carousel v2.2.1 + * Copyright 2013-2017 David Deutsch + * Licensed under () + */ +/* + * Owl Carousel - Core + */ +.owl-carousel { + display: none; + width: 100%; + -webkit-tap-highlight-color: transparent; + /* position relative and z-index fix webkit rendering fonts issue */ + position: relative; + z-index: 1; } + .owl-carousel .owl-stage { + position: relative; + -ms-touch-action: pan-Y; + -moz-backface-visibility: hidden; + /* fix firefox animation glitch */ } + .owl-carousel .owl-stage:after { + content: "."; + display: block; + clear: both; + visibility: hidden; + line-height: 0; + height: 0; } + .owl-carousel .owl-stage-outer { + position: relative; + overflow: hidden; + /* fix for flashing background */ + -webkit-transform: translate3d(0px, 0px, 0px); } + .owl-carousel .owl-wrapper, + .owl-carousel .owl-item { + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); } + .owl-carousel .owl-item { + position: relative; + min-height: 1px; + float: left; + -webkit-backface-visibility: hidden; + -webkit-tap-highlight-color: transparent; + -webkit-touch-callout: none; } + .owl-carousel .owl-item img { + display: block; + width: 100%; } + .owl-carousel .owl-nav.disabled, + .owl-carousel .owl-dots.disabled { + display: none; } + .owl-carousel .owl-nav .owl-prev, + .owl-carousel .owl-nav .owl-next, + .owl-carousel .owl-dot { + cursor: pointer; + cursor: hand; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .owl-carousel.owl-loaded { + display: block; } + .owl-carousel.owl-loading { + opacity: 0; + display: block; } + .owl-carousel.owl-hidden { + opacity: 0; } + .owl-carousel.owl-refresh .owl-item { + visibility: hidden; } + .owl-carousel.owl-drag .owl-item { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .owl-carousel.owl-grab { + cursor: move; + cursor: grab; } + .owl-carousel.owl-rtl { + direction: rtl; } + .owl-carousel.owl-rtl .owl-item { + float: right; } + +/* No Js */ +.no-js .owl-carousel { + display: block; } + +/* + * Owl Carousel - Animate Plugin + */ +.owl-carousel .animated { + animation-duration: 1000ms; + animation-fill-mode: both; } + +.owl-carousel .owl-animated-in { + z-index: 0; } + +.owl-carousel .owl-animated-out { + z-index: 1; } + +.owl-carousel .fadeOut { + animation-name: fadeOut; } + +@keyframes fadeOut { + 0% { + opacity: 1; } + 100% { + opacity: 0; } } + +/* + * Owl Carousel - Auto Height Plugin + */ +.owl-height { + transition: height 500ms ease-in-out; } + +/* + * Owl Carousel - Lazy Load Plugin + */ +.owl-carousel .owl-item .owl-lazy { + opacity: 0; + transition: opacity 400ms ease; } + +.owl-carousel .owl-item img.owl-lazy { + transform-style: preserve-3d; } + +/* + * Owl Carousel - Video Plugin + */ +.owl-carousel .owl-video-wrapper { + position: relative; + height: 100%; + background: #000; } + +.owl-carousel .owl-video-play-icon { + position: absolute; + height: 80px; + width: 80px; + left: 50%; + top: 50%; + margin-left: -40px; + margin-top: -40px; + background: url("owl.video.play.png") no-repeat; + cursor: pointer; + z-index: 1; + -webkit-backface-visibility: hidden; + transition: transform 100ms ease; } + +.owl-carousel .owl-video-play-icon:hover { + -ms-transform: scale(1.3, 1.3); + transform: scale(1.3, 1.3); } + +.owl-carousel .owl-video-playing .owl-video-tn, +.owl-carousel .owl-video-playing .owl-video-play-icon { + display: none; } + +.owl-carousel .owl-video-tn { + opacity: 0; + height: 100%; + background-position: center center; + background-repeat: no-repeat; + background-size: contain; + transition: opacity 400ms ease; } + +.owl-carousel .owl-video-frame { + position: relative; + z-index: 1; + height: 100%; + width: 100%; } diff --git a/docs/_static/landing/owl-carousel/owl.carousel.min.css b/docs/_static/landing/owl-carousel/owl.carousel.min.css new file mode 100644 index 000000000..1ece042ac --- /dev/null +++ b/docs/_static/landing/owl-carousel/owl.carousel.min.css @@ -0,0 +1,6 @@ +/** + * Owl Carousel v2.2.1 + * Copyright 2013-2017 David Deutsch + * Licensed under () + */ +.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;cursor:hand;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%} \ No newline at end of file diff --git a/docs/_static/landing/owl-carousel/owl.carousel.min.js b/docs/_static/landing/owl-carousel/owl.carousel.min.js new file mode 100644 index 000000000..9b9566f4b --- /dev/null +++ b/docs/_static/landing/owl-carousel/owl.carousel.min.js @@ -0,0 +1,7 @@ +/** + * Owl Carousel v2.2.1 + * Copyright 2013-2017 David Deutsch + * Licensed under () + */ +!function(a,b,c,d){function e(b,c){this.settings=null,this.options=a.extend({},e.Defaults,c),this.$element=a(b),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},a.each(["onResize","onThrottledResize"],a.proxy(function(b,c){this._handlers[c]=a.proxy(this[c],this)},this)),a.each(e.Plugins,a.proxy(function(a,b){this._plugins[a.charAt(0).toLowerCase()+a.slice(1)]=new b(this)},this)),a.each(e.Workers,a.proxy(function(b,c){this._pipe.push({filter:c.filter,run:a.proxy(c.run,this)})},this)),this.setup(),this.initialize()}e.Defaults={items:3,loop:!1,center:!1,rewind:!1,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:b,fallbackEasing:"swing",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"owl-refresh",loadedClass:"owl-loaded",loadingClass:"owl-loading",rtlClass:"owl-rtl",responsiveClass:"owl-responsive",dragClass:"owl-drag",itemClass:"owl-item",stageClass:"owl-stage",stageOuterClass:"owl-stage-outer",grabClass:"owl-grab"},e.Width={Default:"default",Inner:"inner",Outer:"outer"},e.Type={Event:"event",State:"state"},e.Plugins={},e.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(a){a.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(a){var b=this.settings.margin||"",c=!this.settings.autoWidth,d=this.settings.rtl,e={width:"auto","margin-left":d?b:"","margin-right":d?"":b};!c&&this.$stage.children().css(e),a.css=e}},{filter:["width","items","settings"],run:function(a){var b=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,c=null,d=this._items.length,e=!this.settings.autoWidth,f=[];for(a.items={merge:!1,width:b};d--;)c=this._mergers[d],c=this.settings.mergeFit&&Math.min(c,this.settings.items)||c,a.items.merge=c>1||a.items.merge,f[d]=e?b*c:this._items[d].width();this._widths=f}},{filter:["items","settings"],run:function(){var b=[],c=this._items,d=this.settings,e=Math.max(2*d.items,4),f=2*Math.ceil(c.length/2),g=d.loop&&c.length?d.rewind?e:Math.max(e,f):0,h="",i="";for(g/=2;g--;)b.push(this.normalize(b.length/2,!0)),h+=c[b[b.length-1]][0].outerHTML,b.push(this.normalize(c.length-1-(b.length-1)/2,!0)),i=c[b[b.length-1]][0].outerHTML+i;this._clones=b,a(h).addClass("cloned").appendTo(this.$stage),a(i).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var a=this.settings.rtl?1:-1,b=this._clones.length+this._items.length,c=-1,d=0,e=0,f=[];++c",h)||this.op(b,"<",g)&&this.op(b,">",h))&&i.push(c);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+i.join("), :eq(")+")").addClass("active"),this.settings.center&&(this.$stage.children(".center").removeClass("center"),this.$stage.children().eq(this.current()).addClass("center"))}}],e.prototype.initialize=function(){if(this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")){var b,c,e;b=this.$element.find("img"),c=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:d,e=this.$element.children(c).width(),b.length&&e<=0&&this.preloadAutoWidthImages(b)}this.$element.addClass(this.options.loadingClass),this.$stage=a("<"+this.settings.stageElement+' class="'+this.settings.stageClass+'"/>').wrap('
      '),this.$element.append(this.$stage.parent()),this.replace(this.$element.children().not(this.$stage.parent())),this.$element.is(":visible")?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},e.prototype.setup=function(){var b=this.viewport(),c=this.options.responsive,d=-1,e=null;c?(a.each(c,function(a){a<=b&&a>d&&(d=Number(a))}),e=a.extend({},this.options,c[d]),"function"==typeof e.stagePadding&&(e.stagePadding=e.stagePadding()),delete e.responsive,e.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+d))):e=a.extend({},this.options),this.trigger("change",{property:{name:"settings",value:e}}),this._breakpoint=d,this.settings=e,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},e.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},e.prototype.prepare=function(b){var c=this.trigger("prepare",{content:b});return c.data||(c.data=a("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(b)),this.trigger("prepared",{content:c.data}),c.data},e.prototype.update=function(){for(var b=0,c=this._pipe.length,d=a.proxy(function(a){return this[a]},this._invalidated),e={};b0)&&this._pipe[b].run(e),b++;this._invalidated={},!this.is("valid")&&this.enter("valid")},e.prototype.width=function(a){switch(a=a||e.Width.Default){case e.Width.Inner:case e.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},e.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},e.prototype.onThrottledResize=function(){b.clearTimeout(this.resizeTimer),this.resizeTimer=b.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},e.prototype.onResize=function(){return!!this._items.length&&(this._width!==this.$element.width()&&(!!this.$element.is(":visible")&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))))},e.prototype.registerEventHandlers=function(){a.support.transition&&this.$stage.on(a.support.transition.end+".owl.core",a.proxy(this.onTransitionEnd,this)),this.settings.responsive!==!1&&this.on(b,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",function(){return!1})),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",a.proxy(this.onDragEnd,this)))},e.prototype.onDragStart=function(b){var d=null;3!==b.which&&(a.support.transform?(d=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","),d={x:d[16===d.length?12:4],y:d[16===d.length?13:5]}):(d=this.$stage.position(),d={x:this.settings.rtl?d.left+this.$stage.width()-this.width()+this.settings.margin:d.left,y:d.top}),this.is("animating")&&(a.support.transform?this.animate(d.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===b.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=a(b.target),this._drag.stage.start=d,this._drag.stage.current=d,this._drag.pointer=this.pointer(b),a(c).on("mouseup.owl.core touchend.owl.core",a.proxy(this.onDragEnd,this)),a(c).one("mousemove.owl.core touchmove.owl.core",a.proxy(function(b){var d=this.difference(this._drag.pointer,this.pointer(b));a(c).on("mousemove.owl.core touchmove.owl.core",a.proxy(this.onDragMove,this)),Math.abs(d.x)0^this.settings.rtl?"left":"right";a(c).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==d.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(e.x,0!==d.x?f:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=f,(Math.abs(d.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",function(){return!1})),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},e.prototype.closest=function(b,c){var d=-1,e=30,f=this.width(),g=this.coordinates();return this.settings.freeDrag||a.each(g,a.proxy(function(a,h){return"left"===c&&b>h-e&&bh-f-e&&b",g[a+1]||h-f)&&(d="left"===c?a+1:a),d===-1},this)),this.settings.loop||(this.op(b,">",g[this.minimum()])?d=b=this.minimum():this.op(b,"<",g[this.maximum()])&&(d=b=this.maximum())),d},e.prototype.animate=function(b){var c=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),c&&(this.enter("animating"),this.trigger("translate")),a.support.transform3d&&a.support.transition?this.$stage.css({transform:"translate3d("+b+"px,0px,0px)",transition:this.speed()/1e3+"s"}):c?this.$stage.animate({left:b+"px"},this.speed(),this.settings.fallbackEasing,a.proxy(this.onTransitionEnd,this)):this.$stage.css({left:b+"px"})},e.prototype.is=function(a){return this._states.current[a]&&this._states.current[a]>0},e.prototype.current=function(a){if(a===d)return this._current;if(0===this._items.length)return d;if(a=this.normalize(a),this._current!==a){var b=this.trigger("change",{property:{name:"position",value:a}});b.data!==d&&(a=this.normalize(b.data)),this._current=a,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},e.prototype.invalidate=function(b){return"string"===a.type(b)&&(this._invalidated[b]=!0,this.is("valid")&&this.leave("valid")),a.map(this._invalidated,function(a,b){return b})},e.prototype.reset=function(a){a=this.normalize(a),a!==d&&(this._speed=0,this._current=a,this.suppress(["translate","translated"]),this.animate(this.coordinates(a)),this.release(["translate","translated"]))},e.prototype.normalize=function(a,b){var c=this._items.length,e=b?0:this._clones.length;return!this.isNumeric(a)||c<1?a=d:(a<0||a>=c+e)&&(a=((a-e/2)%c+c)%c+e/2),a},e.prototype.relative=function(a){return a-=this._clones.length/2,this.normalize(a,!0)},e.prototype.maximum=function(a){var b,c,d,e=this.settings,f=this._coordinates.length;if(e.loop)f=this._clones.length/2+this._items.length-1;else if(e.autoWidth||e.merge){for(b=this._items.length,c=this._items[--b].width(),d=this.$element.width();b--&&(c+=this._items[b].width()+this.settings.margin,!(c>d)););f=b+1}else f=e.center?this._items.length-1:this._items.length-e.items;return a&&(f-=this._clones.length/2),Math.max(f,0)},e.prototype.minimum=function(a){return a?0:this._clones.length/2},e.prototype.items=function(a){return a===d?this._items.slice():(a=this.normalize(a,!0),this._items[a])},e.prototype.mergers=function(a){return a===d?this._mergers.slice():(a=this.normalize(a,!0),this._mergers[a])},e.prototype.clones=function(b){var c=this._clones.length/2,e=c+this._items.length,f=function(a){return a%2===0?e+a/2:c-(a+1)/2};return b===d?a.map(this._clones,function(a,b){return f(b)}):a.map(this._clones,function(a,c){return a===b?f(c):null})},e.prototype.speed=function(a){return a!==d&&(this._speed=a),this._speed},e.prototype.coordinates=function(b){var c,e=1,f=b-1;return b===d?a.map(this._coordinates,a.proxy(function(a,b){return this.coordinates(b)},this)):(this.settings.center?(this.settings.rtl&&(e=-1,f=b+1),c=this._coordinates[b],c+=(this.width()-c+(this._coordinates[f]||0))/2*e):c=this._coordinates[f]||0,c=Math.ceil(c))},e.prototype.duration=function(a,b,c){return 0===c?0:Math.min(Math.max(Math.abs(b-a),1),6)*Math.abs(c||this.settings.smartSpeed)},e.prototype.to=function(a,b){var c=this.current(),d=null,e=a-this.relative(c),f=(e>0)-(e<0),g=this._items.length,h=this.minimum(),i=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(e)>g/2&&(e+=f*-1*g),a=c+e,d=((a-h)%g+g)%g+h,d!==a&&d-e<=i&&d-e>0&&(c=d-e,a=d,this.reset(c))):this.settings.rewind?(i+=1,a=(a%i+i)%i):a=Math.max(h,Math.min(i,a)),this.speed(this.duration(c,a,b)),this.current(a),this.$element.is(":visible")&&this.update()},e.prototype.next=function(a){a=a||!1,this.to(this.relative(this.current())+1,a)},e.prototype.prev=function(a){a=a||!1,this.to(this.relative(this.current())-1,a)},e.prototype.onTransitionEnd=function(a){if(a!==d&&(a.stopPropagation(),(a.target||a.srcElement||a.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},e.prototype.viewport=function(){var d;return this.options.responsiveBaseElement!==b?d=a(this.options.responsiveBaseElement).width():b.innerWidth?d=b.innerWidth:c.documentElement&&c.documentElement.clientWidth?d=c.documentElement.clientWidth:console.warn("Can not detect viewport width."),d},e.prototype.replace=function(b){this.$stage.empty(),this._items=[],b&&(b=b instanceof jQuery?b:a(b)),this.settings.nestedItemSelector&&(b=b.find("."+this.settings.nestedItemSelector)),b.filter(function(){return 1===this.nodeType}).each(a.proxy(function(a,b){b=this.prepare(b),this.$stage.append(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)},this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},e.prototype.add=function(b,c){var e=this.relative(this._current);c=c===d?this._items.length:this.normalize(c,!0),b=b instanceof jQuery?b:a(b),this.trigger("add",{content:b,position:c}),b=this.prepare(b),0===this._items.length||c===this._items.length?(0===this._items.length&&this.$stage.append(b),0!==this._items.length&&this._items[c-1].after(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[c].before(b),this._items.splice(c,0,b),this._mergers.splice(c,0,1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[e]&&this.reset(this._items[e].index()),this.invalidate("items"),this.trigger("added",{content:b,position:c})},e.prototype.remove=function(a){a=this.normalize(a,!0),a!==d&&(this.trigger("remove",{content:this._items[a],position:a}),this._items[a].remove(),this._items.splice(a,1),this._mergers.splice(a,1),this.invalidate("items"),this.trigger("removed",{content:null,position:a}))},e.prototype.preloadAutoWidthImages=function(b){b.each(a.proxy(function(b,c){this.enter("pre-loading"),c=a(c),a(new Image).one("load",a.proxy(function(a){c.attr("src",a.target.src),c.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()},this)).attr("src",c.attr("src")||c.attr("data-src")||c.attr("data-src-retina"))},this))},e.prototype.destroy=function(){this.$element.off(".owl.core"),this.$stage.off(".owl.core"),a(c).off(".owl.core"),this.settings.responsive!==!1&&(b.clearTimeout(this.resizeTimer),this.off(b,"resize",this._handlers.onThrottledResize));for(var d in this._plugins)this._plugins[d].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},e.prototype.op=function(a,b,c){var d=this.settings.rtl;switch(b){case"<":return d?a>c:a":return d?ac;case">=":return d?a<=c:a>=c;case"<=":return d?a>=c:a<=c}},e.prototype.on=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d):a.attachEvent&&a.attachEvent("on"+b,c)},e.prototype.off=function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d):a.detachEvent&&a.detachEvent("on"+b,c)},e.prototype.trigger=function(b,c,d,f,g){var h={item:{count:this._items.length,index:this.current()}},i=a.camelCase(a.grep(["on",b,d],function(a){return a}).join("-").toLowerCase()),j=a.Event([b,"owl",d||"carousel"].join(".").toLowerCase(),a.extend({relatedTarget:this},h,c));return this._supress[b]||(a.each(this._plugins,function(a,b){b.onTrigger&&b.onTrigger(j)}),this.register({type:e.Type.Event,name:b}),this.$element.trigger(j),this.settings&&"function"==typeof this.settings[i]&&this.settings[i].call(this,j)),j},e.prototype.enter=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]===d&&(this._states.current[b]=0),this._states.current[b]++},this))},e.prototype.leave=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]--},this))},e.prototype.register=function(b){if(b.type===e.Type.Event){if(a.event.special[b.name]||(a.event.special[b.name]={}),!a.event.special[b.name].owl){var c=a.event.special[b.name]._default;a.event.special[b.name]._default=function(a){return!c||!c.apply||a.namespace&&a.namespace.indexOf("owl")!==-1?a.namespace&&a.namespace.indexOf("owl")>-1:c.apply(this,arguments)},a.event.special[b.name].owl=!0}}else b.type===e.Type.State&&(this._states.tags[b.name]?this._states.tags[b.name]=this._states.tags[b.name].concat(b.tags):this._states.tags[b.name]=b.tags,this._states.tags[b.name]=a.grep(this._states.tags[b.name],a.proxy(function(c,d){return a.inArray(c,this._states.tags[b.name])===d},this)))},e.prototype.suppress=function(b){a.each(b,a.proxy(function(a,b){this._supress[b]=!0},this))},e.prototype.release=function(b){a.each(b,a.proxy(function(a,b){delete this._supress[b]},this))},e.prototype.pointer=function(a){var c={x:null,y:null};return a=a.originalEvent||a||b.event,a=a.touches&&a.touches.length?a.touches[0]:a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:a,a.pageX?(c.x=a.pageX,c.y=a.pageY):(c.x=a.clientX,c.y=a.clientY),c},e.prototype.isNumeric=function(a){return!isNaN(parseFloat(a))},e.prototype.difference=function(a,b){return{x:a.x-b.x,y:a.y-b.y}},a.fn.owlCarousel=function(b){var c=Array.prototype.slice.call(arguments,1);return this.each(function(){var d=a(this),f=d.data("owl.carousel");f||(f=new e(this,"object"==typeof b&&b),d.data("owl.carousel",f),a.each(["next","prev","to","destroy","refresh","replace","add","remove"],function(b,c){f.register({type:e.Type.Event,name:c}),f.$element.on(c+".owl.carousel.core",a.proxy(function(a){a.namespace&&a.relatedTarget!==this&&(this.suppress([c]),f[c].apply(this,[].slice.call(arguments,1)),this.release([c]))},f))})),"string"==typeof b&&"_"!==b.charAt(0)&&f[b].apply(f,c)})},a.fn.owlCarousel.Constructor=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoRefresh&&this.watch()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoRefresh:!0,autoRefreshInterval:500},e.prototype.watch=function(){this._interval||(this._visible=this._core.$element.is(":visible"),this._interval=b.setInterval(a.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},e.prototype.refresh=function(){this._core.$element.is(":visible")!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},e.prototype.destroy=function(){var a,c;b.clearInterval(this._interval);for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoRefresh=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":a.proxy(function(b){if(b.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(b.property&&"position"==b.property.name||"initialized"==b.type))for(var c=this._core.settings,e=c.center&&Math.ceil(c.items/2)||c.items,f=c.center&&e*-1||0,g=(b.property&&b.property.value!==d?b.property.value:this._core.current())+f,h=this._core.clones().length,i=a.proxy(function(a,b){this.load(b)},this);f++-1||(e.each(a.proxy(function(c,d){var e,f=a(d),g=b.devicePixelRatio>1&&f.attr("data-src-retina")||f.attr("data-src");this._core.trigger("load",{element:f,url:g},"lazy"),f.is("img")?f.one("load.owl.lazy",a.proxy(function(){f.css("opacity",1),this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("src",g):(e=new Image,e.onload=a.proxy(function(){f.css({"background-image":'url("'+g+'")',opacity:"1"}),this._core.trigger("loaded",{element:f,url:g},"lazy")},this),e.src=g)},this)),this._loaded.push(d.get(0)))},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this._core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Lazy=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&this.update()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&"position"==a.property.name&&this.update()},this),"loaded.owl.lazy":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&a.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoHeight:!1,autoHeightClass:"owl-height"},e.prototype.update=function(){var b=this._core._current,c=b+this._core.settings.items,d=this._core.$stage.children().toArray().slice(b,c),e=[],f=0;a.each(d,function(b,c){e.push(a(c).height())}),f=Math.max.apply(null,e),this._core.$stage.parent().height(f).addClass(this._core.settings.autoHeightClass)},e.prototype.destroy=function(){var a,b;for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoHeight=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})},this),"resize.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.video&&this.isInFullScreen()&&a.preventDefault()},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .owl-video-frame").remove()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"===a.property.name&&this._playing&&this.stop()},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find(".owl-video");c.length&&(c.css("display","none"),this.fetch(c,a(b.content)))}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".owl-video-play-icon",a.proxy(function(a){this.play(a)},this))};e.Defaults={video:!1,videoHeight:!1,videoWidth:!1},e.prototype.fetch=function(a,b){var c=function(){return a.attr("data-vimeo-id")?"vimeo":a.attr("data-vzaar-id")?"vzaar":"youtube"}(),d=a.attr("data-vimeo-id")||a.attr("data-youtube-id")||a.attr("data-vzaar-id"),e=a.attr("data-width")||this._core.settings.videoWidth,f=a.attr("data-height")||this._core.settings.videoHeight,g=a.attr("href");if(!g)throw new Error("Missing video URL.");if(d=g.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),d[3].indexOf("youtu")>-1)c="youtube";else if(d[3].indexOf("vimeo")>-1)c="vimeo";else{if(!(d[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");c="vzaar"}d=d[6],this._videos[g]={type:c,id:d,width:e,height:f},b.attr("data-video",g),this.thumbnail(a,this._videos[g])},e.prototype.thumbnail=function(b,c){var d,e,f,g=c.width&&c.height?'style="width:'+c.width+"px;height:"+c.height+'px;"':"",h=b.find("img"),i="src",j="",k=this._core.settings,l=function(a){e='
      ',d=k.lazyLoad?'
      ':'
      ',b.after(d),b.after(e)};if(b.wrap('
      "),this._core.settings.lazyLoad&&(i="data-src",j="owl-lazy"),h.length)return l(h.attr(i)),h.remove(),!1;"youtube"===c.type?(f="//img.youtube.com/vi/"+c.id+"/hqdefault.jpg",l(f)):"vimeo"===c.type?a.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a[0].thumbnail_large,l(f)}}):"vzaar"===c.type&&a.ajax({type:"GET",url:"//vzaar.com/api/videos/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a.framegrab_url,l(f)}})},e.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".owl-video-frame").remove(),this._playing.removeClass("owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},e.prototype.play=function(b){var c,d=a(b.target),e=d.closest("."+this._core.settings.itemClass),f=this._videos[e.attr("data-video")],g=f.width||"100%",h=f.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),e=this._core.items(this._core.relative(e.index())),this._core.reset(e.index()),"youtube"===f.type?c='':"vimeo"===f.type?c='':"vzaar"===f.type&&(c=''),a('
      '+c+"
      ").insertAfter(e.find(".owl-video")),this._playing=e.addClass("owl-video-playing"))},e.prototype.isInFullScreen=function(){var b=c.fullscreenElement||c.mozFullScreenElement||c.webkitFullscreenElement;return b&&a(b).parent().hasClass("owl-video-frame")},e.prototype.destroy=function(){var a,b;this._core.$element.off("click.owl.video");for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Video=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this.core=b,this.core.options=a.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=d,this.next=d,this.handlers={"change.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&(this.previous=this.core.current(),this.next=a.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":a.proxy(function(a){a.namespace&&(this.swapping="translated"==a.type)},this),"translate.owl.carousel":a.proxy(function(a){a.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)},this.core.$element.on(this.handlers)};e.Defaults={animateOut:!1,animateIn:!1},e.prototype.swap=function(){if(1===this.core.settings.items&&a.support.animation&&a.support.transition){this.core.speed(0);var b,c=a.proxy(this.clear,this),d=this.core.$stage.children().eq(this.previous),e=this.core.$stage.children().eq(this.next),f=this.core.settings.animateIn,g=this.core.settings.animateOut;this.core.current()!==this.previous&&(g&&(b=this.core.coordinates(this.previous)-this.core.coordinates(this.next),d.one(a.support.animation.end,c).css({left:b+"px"}).addClass("animated owl-animated-out").addClass(g)),f&&e.one(a.support.animation.end,c).addClass("animated owl-animated-in").addClass(f))}},e.prototype.clear=function(b){a(b.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this.core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)}, +a.fn.owlCarousel.Constructor.Plugins.Animate=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._timeout=null,this._paused=!1,this._handlers={"changed.owl.carousel":a.proxy(function(a){a.namespace&&"settings"===a.property.name?this._core.settings.autoplay?this.play():this.stop():a.namespace&&"position"===a.property.name&&this._core.settings.autoplay&&this._setAutoPlayInterval()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":a.proxy(function(a,b,c){a.namespace&&this.play(b,c)},this),"stop.owl.autoplay":a.proxy(function(a){a.namespace&&this.stop()},this),"mouseover.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=a.extend({},e.Defaults,this._core.options)};e.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},e.prototype.play=function(a,b){this._paused=!1,this._core.is("rotating")||(this._core.enter("rotating"),this._setAutoPlayInterval())},e.prototype._getNextTimeout=function(d,e){return this._timeout&&b.clearTimeout(this._timeout),b.setTimeout(a.proxy(function(){this._paused||this._core.is("busy")||this._core.is("interacting")||c.hidden||this._core.next(e||this._core.settings.autoplaySpeed)},this),d||this._core.settings.autoplayTimeout)},e.prototype._setAutoPlayInterval=function(){this._timeout=this._getNextTimeout()},e.prototype.stop=function(){this._core.is("rotating")&&(b.clearTimeout(this._timeout),this._core.leave("rotating"))},e.prototype.pause=function(){this._core.is("rotating")&&(this._paused=!0)},e.prototype.destroy=function(){var a,b;this.stop();for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.autoplay=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(b){this._core=b,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":a.proxy(function(b){b.namespace&&this._core.settings.dotsData&&this._templates.push('
      '+a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"
      ")},this),"added.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,0,this._templates.pop())},this),"remove.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,1)},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&this.draw()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};e.Defaults={nav:!1,navText:["prev","next"],navSpeed:!1,navElement:"div",navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},e.prototype.initialize=function(){var b,c=this._core.settings;this._controls.$relative=(c.navContainer?a(c.navContainer):a("
      ").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=a("<"+c.navElement+">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click",a.proxy(function(a){this.prev(c.navSpeed)},this)),this._controls.$next=a("<"+c.navElement+">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click",a.proxy(function(a){this.next(c.navSpeed)},this)),c.dotsData||(this._templates=[a("
      ").addClass(c.dotClass).append(a("")).prop("outerHTML")]),this._controls.$absolute=(c.dotsContainer?a(c.dotsContainer):a("
      ").addClass(c.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","div",a.proxy(function(b){var d=a(b.target).parent().is(this._controls.$absolute)?a(b.target).index():a(b.target).parent().index();b.preventDefault(),this.to(d,c.dotsSpeed)},this));for(b in this._overrides)this._core[b]=a.proxy(this[b],this)},e.prototype.destroy=function(){var a,b,c,d;for(a in this._handlers)this.$element.off(a,this._handlers[a]);for(b in this._controls)this._controls[b].remove();for(d in this.overides)this._core[d]=this._overrides[d];for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},e.prototype.update=function(){var a,b,c,d=this._core.clones().length/2,e=d+this._core.items().length,f=this._core.maximum(!0),g=this._core.settings,h=g.center||g.autoWidth||g.dotsData?1:g.dotsEach||g.items;if("page"!==g.slideBy&&(g.slideBy=Math.min(g.slideBy,g.items)),g.dots||"page"==g.slideBy)for(this._pages=[],a=d,b=0,c=0;a=h||0===b){if(this._pages.push({start:Math.min(f,a-d),end:a-d+h-1}),Math.min(f,a-d)===f)break;b=0,++c}b+=this._core.mergers(this._core.relative(a))}},e.prototype.draw=function(){var b,c=this._core.settings,d=this._core.items().length<=c.items,e=this._core.relative(this._core.current()),f=c.loop||c.rewind;this._controls.$relative.toggleClass("disabled",!c.nav||d),c.nav&&(this._controls.$previous.toggleClass("disabled",!f&&e<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!f&&e>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!c.dots||d),c.dots&&(b=this._pages.length-this._controls.$absolute.children().length,c.dotsData&&0!==b?this._controls.$absolute.html(this._templates.join("")):b>0?this._controls.$absolute.append(new Array(b+1).join(this._templates[0])):b<0&&this._controls.$absolute.children().slice(b).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(a.inArray(this.current(),this._pages)).addClass("active"))},e.prototype.onTrigger=function(b){var c=this._core.settings;b.page={index:a.inArray(this.current(),this._pages),count:this._pages.length,size:c&&(c.center||c.autoWidth||c.dotsData?1:c.dotsEach||c.items)}},e.prototype.current=function(){var b=this._core.relative(this._core.current());return a.grep(this._pages,a.proxy(function(a,c){return a.start<=b&&a.end>=b},this)).pop()},e.prototype.getPosition=function(b){var c,d,e=this._core.settings;return"page"==e.slideBy?(c=a.inArray(this.current(),this._pages),d=this._pages.length,b?++c:--c,c=this._pages[(c%d+d)%d].start):(c=this._core.relative(this._core.current()),d=this._core.items().length,b?c+=e.slideBy:c-=e.slideBy),c},e.prototype.next=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!0),b)},e.prototype.prev=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!1),b)},e.prototype.to=function(b,c,d){var e;!d&&this._pages.length?(e=this._pages.length,a.proxy(this._overrides.to,this._core)(this._pages[(b%e+e)%e].start,c)):a.proxy(this._overrides.to,this._core)(b,c)},a.fn.owlCarousel.Constructor.Plugins.Navigation=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(c){this._core=c,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":a.proxy(function(c){c.namespace&&"URLHash"===this._core.settings.startPosition&&a(b).trigger("hashchange.owl.navigation")},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!c)return;this._hashes[c]=b.content}},this),"changed.owl.carousel":a.proxy(function(c){if(c.namespace&&"position"===c.property.name){var d=this._core.items(this._core.relative(this._core.current())),e=a.map(this._hashes,function(a,b){return a===d?b:null}).join();if(!e||b.location.hash.slice(1)===e)return;b.location.hash=e}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers),a(b).on("hashchange.owl.navigation",a.proxy(function(a){var c=b.location.hash.substring(1),e=this._core.$stage.children(),f=this._hashes[c]&&e.index(this._hashes[c]);f!==d&&f!==this._core.current()&&this._core.to(this._core.relative(f),!1,!0)},this))};e.Defaults={URLhashListener:!1},e.prototype.destroy=function(){var c,d;a(b).off("hashchange.owl.navigation");for(c in this._handlers)this._core.$element.off(c,this._handlers[c]);for(d in Object.getOwnPropertyNames(this))"function"!=typeof this[d]&&(this[d]=null)},a.fn.owlCarousel.Constructor.Plugins.Hash=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){function e(b,c){var e=!1,f=b.charAt(0).toUpperCase()+b.slice(1);return a.each((b+" "+h.join(f+" ")+f).split(" "),function(a,b){if(g[b]!==d)return e=!c||b,!1}),e}function f(a){return e(a,!0)}var g=a("").get(0).style,h="Webkit Moz O ms".split(" "),i={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}},j={csstransforms:function(){return!!e("transform")},csstransforms3d:function(){return!!e("perspective")},csstransitions:function(){return!!e("transition")},cssanimations:function(){return!!e("animation")}};j.csstransitions()&&(a.support.transition=new String(f("transition")),a.support.transition.end=i.transition.end[a.support.transition]),j.cssanimations()&&(a.support.animation=new String(f("animation")),a.support.animation.end=i.animation.end[a.support.animation]),j.csstransforms()&&(a.support.transform=new String(f("transform")),a.support.transform3d=j.csstransforms3d())}(window.Zepto||window.jQuery,window,document); \ No newline at end of file diff --git a/docs/_static/listunison.png b/docs/_static/listunison.png new file mode 100644 index 000000000..2850ffe38 Binary files /dev/null and b/docs/_static/listunison.png differ diff --git a/docs/_static/xonsh-docker-example.jpg b/docs/_static/xonsh-docker-example.jpg new file mode 100644 index 000000000..e51184624 Binary files /dev/null and b/docs/_static/xonsh-docker-example.jpg differ diff --git a/docs/_templates_overwrite/index.html b/docs/_templates_overwrite/index.html new file mode 100644 index 000000000..dc65104ba --- /dev/null +++ b/docs/_templates_overwrite/index.html @@ -0,0 +1,568 @@ + + + + + + + + + The Xonsh Shell + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +
      + + + + +
      +
      +
      +
      +
      +
      About
      +

      Xonsh is a Modern
      Approach to the Terminal

      +

      Xonsh is Python with added shell syntax thrown in. + This makes it an ideal, intuitve way to interact with your + computer. You probably already know Python, and so xonsh allows + you to run command line applications with out needing to learn + a new, arcane syntax when ever you want to use a for-statement. +

      +

      Xonsh is open source software under the BSD-2-Clause license.

      + Learn More +
      +
      +
      +
      + +
      +
      +
      +
      +
      + + + + + + + + + +
      +
      +
      + +
      +
      +
      +
      +
      + +
      +
      +
      +
      +
      Features
      +

      Xonsh has Depth

      +

      Xonsh is a super-charged shell that enables you to work + quickly and effectively! Some of the features that help set + xonsh apart are: +

      +
        +
      • Import any Python package or module!
      • +
      • Environment variables are just Python objects!
      • +
      • Rich history interface!
      • +
      • A 3rd-party extension system (xontribs)!
      • +
      • Powerful event system let's you extend default behavior!
      • +
      • Seamlesslu mix Python & Subprocess operations!
      • +
      • Loads of customization options, including keybindings!
      • +
      + Documentation +
      +
      +
      +
      +
      +
      +
      +
      + +
      +
      +
      +
      +
      Community
      +

      A Shell for All

      +

      + We believe that the terminal should be accessible to all! + In addition to being a more approachable language than other + shells, xonsh also strives to be a welcoming and accepting + community of developers & users. Please drop us a line at: +

      + +
      +
      + + Gitter +
      +
      +
      +
      +
      +
      +
      +
      + +
      +
      +
      +
      +
      Install
      +

      Get Xonsh Now

      +

      + Xonsh can be installed with most package managers, including: +

      +
        +
      • Pip (pip install xonsh)
      • +
      • Conda (conda install -c conda-forge xonsh)
      • +
      • Apt (apt install xonsh)
      • +
      • Brew (brew install xonsh)
      • +
      • and more!
      • +
      +

      + Xonsh can also be customized to meet your needs! +

      + More Information +
      +
      +
      +
      +
      +
      +
      +
      + + + +
      +
      + +
      +
      + + +
      +
      +
      +
      +
      +
      + + +
      +
      +
      +
      +
      +

      Frequently Asked Questions

      +

      Frequently Asked Questions

      +
      +
      +
      +
      +
      +
      +

      Why xonsh?

      +

      + Xonsh is solves the problem that other shells don’t “fit your brain.” + A shell that doesn’t fit your brain can only be a liability. +

      +
      +
      +
      +
      +
      +
      +

      Why not some other fancy shell?

      +

      + While many other alternative shells have an amazing + suite of features as well as much improved syntax of + traditional options, none of them are quite as beautiful + as Python. In xonsh, you get the best of all possible worlds. +

      +
      +
      +
      +
      +

      Why not IPython?

      +

      + Two reasons. The first is that typing "!" before every + subprocess command is extremely tedious. The second is that tab + completion of subprocess commands after an "!" does not work. + These are deal breakers for day-to-day use. +

      +
      +
      +
      +
      +

      How does this work?!

      +

      + We use PLY to tokenize and parse xonsh code. From our + parser, we construct an abstract syntax tree (AST) only + using nodes found in the Python ast standard library module. + This allows us to compile and execute the AST using the normal + Python tools. +

      +
      +
      +
      +
      +

      Isn't context-sensitive parsing gross?

      +

      + Yes. But the point of xonsh is that even though it uses + context-sensitive parsing it is ultimately a lot less gross + than other shell languages, such as Bash. +

      +
      +
      +
      +
      +

      Is xonsh open source?

      +

      + Yes! Xonsh is freely usable and accessible under the + BSD-2-Clause license. +

      +
      +
      +
      +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/aliases.rst b/docs/aliases.rst index 79accdeab..da6b541ab 100644 --- a/docs/aliases.rst +++ b/docs/aliases.rst @@ -92,14 +92,6 @@ for more information all the history command and all of its sub-commands. .. command-help:: xonsh.history.main.history_main -``replay`` -===================== -Replays a xonsh history file. See `the replay section of the history tutorial -`_ for more information about this command. - -.. command-help:: xonsh.replay.replay_main - - ``timeit`` =============== Runs timing study on arguments. Similar to IPython's ``%timeit`` magic. diff --git a/docs/api/index.rst b/docs/api/index.rst index 50d7a7dd0..1caec967e 100644 --- a/docs/api/index.rst +++ b/docs/api/index.rst @@ -49,7 +49,6 @@ For those of you who want the gritty details. ptk_shell/completer ptk_shell/key_bindings pretty - replay diff_history xoreutils/index diff --git a/docs/api/replay.rst b/docs/api/replay.rst deleted file mode 100644 index 6537fe795..000000000 --- a/docs/api/replay.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. _xonsh_replay: - -****************************************************** -Replay History (``xonsh.replay``) -****************************************************** - -.. automodule:: xonsh.replay - :members: - :undoc-members: - :inherited-members: diff --git a/docs/bash_to_xsh.rst b/docs/bash_to_xsh.rst index 99072e745..347e560df 100644 --- a/docs/bash_to_xsh.rst +++ b/docs/bash_to_xsh.rst @@ -19,7 +19,7 @@ line is ``#!/usr/bin/env xonsh``. - Look up an environment variable by name. * - ``export NAME=Peter`` - ``$NAME = 'Peter'`` - - Setting an environment variable. + - Setting an environment variable. See also :ref:`$UPDATE_OS_ENVIRON `. * - ``unset NAME`` - ``del $NAME`` - Unsetting/deleting an environment variable. @@ -68,6 +68,12 @@ line is ``#!/usr/bin/env xonsh``. * - ``$@`` - ``$ARGS`` - List of all command line argument and parameter strings. + * - ``shopt -s dotglob`` + - ``$DOTGLOB = True`` + - Globbing files with “*” or “**” will also match dotfiles, or those ‘hidden’ files whose names begin with a literal ‘.’. Such files are filtered out by default like in bash. + * - Display completions as list + - ``$COMPLETIONS_DISPLAY = 'readline'`` + - Display completions will emulate the behavior of readline. * - ``exit`` - ``sys.exit()`` - Exiting from the current script. diff --git a/docs/conf.py b/docs/conf.py index 1c92d108f..a9ad3e429 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -16,7 +16,7 @@ import importlib os.environ["XONSH_DEBUG"] = "1" from xonsh import __version__ as XONSH_VERSION -from xonsh.environ import DEFAULT_DOCS, Env +from xonsh.environ import DEFAULT_VARS, Env from xonsh.xontribs import xontrib_metadata from xonsh import main from xonsh.commands_cache import CommandsCache @@ -39,12 +39,6 @@ else: sys.path.insert(0, os.path.dirname(__file__)) -def setup(sphinx): - from xonsh.pyghooks import XonshConsoleLexer - - sphinx.add_lexer("xonshcon", XonshConsoleLexer()) - - # -- General configuration ----------------------------------------------------- # Documentation is being built on readthedocs, this will be true. @@ -75,7 +69,7 @@ source_suffix = ".rst" # source_encoding = 'utf-8' # The master toctree document. -master_doc = "sidebar" +master_doc = "contents" # General information about the project. project = u"xonsh" @@ -208,7 +202,7 @@ html_style = "numpy_friendly.css" # Additional templates that should be rendered to pages, maps page names to # template names. -# html_additional_pages = {} +html_additional_pages = {'index': 'index.html'} # If false, no module index is generated. # html_use_modindex = True @@ -283,12 +277,13 @@ runthis_server = "https://runthis.xonsh.org:80" def make_envvars(): env = Env() - vars = sorted(DEFAULT_DOCS.keys()) + vars = sorted(DEFAULT_VARS.keys(), key=lambda x: getattr(x, "pattern", x)) s = ".. list-table::\n" " :header-rows: 0\n\n" table = [] ncol = 3 row = " {0} - :ref:`${1} <{2}>`" - for i, var in enumerate(vars): + for i, varname in enumerate(vars): + var = getattr(varname, "pattern", varname) star = "*" if i % ncol == 0 else " " table.append(row.format(star, var, var.lower())) table.extend([" -"] * ((ncol - len(vars) % ncol) % ncol)) @@ -304,18 +299,19 @@ def make_envvars(): "**store_as_str:** {store_as_str}\n\n" "-------\n\n" ) - for var in vars: + for varname in vars: + var = getattr(varname, "pattern", varname) title = "$" + var under = "." * len(title) - vd = env.get_docs(var) + vd = env.get_docs(varname) s += sec.format( low=var.lower(), title=title, under=under, - docstr=vd.docstr, - configurable=vd.configurable, - default=vd.default, - store_as_str=vd.store_as_str, + docstr=vd.doc, + configurable=vd.doc_configurable, + default=vd.doc_default, + store_as_str=vd.doc_store_as_str, ) s = s[:-9] fname = os.path.join(os.path.dirname(__file__), "envvarsbody") @@ -442,4 +438,7 @@ builtins.__xonsh__.commands_cache = CommandsCache() def setup(app): - app.add_stylesheet("custom.css") + from xonsh.pyghooks import XonshConsoleLexer + + app.add_lexer("xonshcon", XonshConsoleLexer) + app.add_css_file("custom.css") diff --git a/docs/index.rst b/docs/contents.rst similarity index 100% rename from docs/index.rst rename to docs/contents.rst diff --git a/docs/customization.rst b/docs/customization.rst index 0f7fe75b3..89107d232 100644 --- a/docs/customization.rst +++ b/docs/customization.rst @@ -66,7 +66,7 @@ available in ``sys.path``. If you want to be able to import a module that resides in the current directory, ensure that there is an empty string as the first element of your ``sys.path`` -.. code-block:: xonshcon +.. code-block:: console $ import sys $ sys.path.insert(0, '') @@ -173,7 +173,7 @@ then choose ``Open Terminal Here`` and click on ``Edit currently selected action If you are unable to use utf-8 (ie. non-ascii) characters in xonsh. For example if you get the following output -.. code-block:: xonshcon +.. code-block:: console $ echo "ßðđ" xonsh: For full traceback set: $XONSH_SHOW_TRACEBACK = True @@ -245,9 +245,9 @@ Make sure you install xonsh with readline support and in your ``.xonshrc`` file define .. code-block:: xonsh - + $SHELL_TYPE = 'readline' - + Also, in Emacs set ``explicit-shell-file-name`` to your xonsh executable. **Option B: Ansi-term buffer** diff --git a/docs/sidebar.rst b/docs/sidebar.rst deleted file mode 100644 index a15a7fb23..000000000 --- a/docs/sidebar.rst +++ /dev/null @@ -1,8 +0,0 @@ -:orphan: - -.. title:: Documentation Index - -.. toctree:: - :maxdepth: 3 - - the xonsh shell diff --git a/docs/tutorial.rst b/docs/tutorial.rst index 84f816246..b18af1bd0 100644 --- a/docs/tutorial.rst +++ b/docs/tutorial.rst @@ -1268,12 +1268,11 @@ may have one of the following signatures: """ import xonsh.proc if spec.captured in xonsh.proc.STDOUT_CAPTURE_KINDS: - end = '' + print("I'm being captured!") + elif not spec.last_in_pipeline: + print("Going through a pipe!") else: - end = '\n' - # Now we'll get a newline if the user is at the terminal, and no - # newline if we are captured - print('Hi Mom!', end=end) + print("Hello terminal!") return 0 def mycmd6(args, stdin=None, stdout=None, stderr=None, spec=None, stack=None): diff --git a/docs/tutorial_hist.rst b/docs/tutorial_hist.rst index f2c463a14..add815d0c 100644 --- a/docs/tutorial_hist.rst +++ b/docs/tutorial_hist.rst @@ -58,18 +58,8 @@ So the reasons for having rich history are debugging and reproducibility. Xonsh guess-work out of the past. There is even the ability to store all of stdout, though this is turned off by default. If history was just a static file, it would be more like a server log than a traditional -history file. However, xonsh also has the ability to ``replay`` a history file. +history file. -Replaying history allows previous sessions to act as scripts in a new or the same environment. -Replaying will create a new, separate history session and file. The two histories - even though -they contain the same inputs - are then able to be diff'ed. Diff'ing can be done through -xonsh custom history diff'ing tool, which can help pinpoint differences stemming from the -environment as well as the input/output. This cycle of do-replay-diff is more meaningful than -a traditional, "What did I/it/the Universe just do?!" approach. - -Of course, nothing has ever stopped anyone from pulling Unix tools like ``env``, ``script``, -``diff``, and others together to deliver the same kind of capability. However, in practice, -no one does this. With xonsh, rich and useful history come batteries included. ``history`` command ==================== @@ -192,79 +182,6 @@ series of lines. However, it can also return a JSON formatted string. "filename": "/home/scopatz/.local/share/xonsh/xonsh-ace97177-f8dd-4a8d-8a91-a98ffd0b3d17.json", "length": 7, "buffersize": 100, "bufferlength": 7} -``replay`` action -================== -The ``replay`` action allows for history files to be rerun, as scripts or in an existing xonsh -session. - -First, the original ``'replay'`` environment is loaded and will be merged with the current ``'native'`` -environment. How the environments are merged or not merged can be set at replay time. The default is for -the current native environment to take precedence. Next, each input in the environment is executed in order. -Lastly, the information of the replayed history file is printed. - -Let's walk through an example. To begin with, open up xonsh and run some simple commands, as follows. -Call this the ``orig`` session. - -**orig history** - -.. code-block:: xonshcon - - >>> mkdir -p temp/ - >>> cd temp - >>> import random - >>> touch @(random.randint(0, 18)) - >>> ls - 2 - >>> history file - /home/scopatz/.local/share/xonsh/xonsh-4bc4ecd6-3eba-4f3a-b396-a229ba2b4810.json - >>> exit - -We can now replay this by passing the filename into the replay command or the replay action -of the history command. This action has a few different options, but one of them is that -we can select a different target output file with the ``-o`` or ``--target`` option. -For example, in a new session, we could run: - -**new history** - -.. code-block:: xonshcon - - >>> history replay -o ~/new.json ~/.local/share/xonsh/xonsh-4bc4ecd6-3eba-4f3a-b396-a229ba2b4810.json - 2 10 - /home/scopatz/new.json - - ---------------------------------------------------------------- - Just replayed history, new history the has following information - ---------------------------------------------------------------- - sessionid: 35712b6f-4b15-4ef9-8ce3-b4c781601bc2 - filename: /home/scopatz/new.json - length: 7 - buffersize: 100 - bufferlength: 0 - -As you can see, a new history was created and another random file was added to the file system. -If we want instead to replay history in its own session, we can always use the ``-c`` option on -xonsh itself to execute the replay command. - -**next history** - -.. code-block:: xonshcon - - >>> xonsh -c "replay -o ~/next.json ~/new.json" - 2 7 10 - /home/scopatz/next.json - - ---------------------------------------------------------------- - Just replayed history, new history has the following information - ---------------------------------------------------------------- - sessionid: 70d7186e-3eb9-4b1c-8f82-45bb8a1b7967 - filename: /home/scopatz/next.json - length: 7 - buffersize: 100 - bufferlength: 0 - - -Currently history does not handle alias storage and reloading, but such a feature may be coming in -the future. ``diff`` action =============== @@ -277,7 +194,7 @@ is to be meaningful. However, they don't need to be exactly the same. The diff action has one major option, ``-v`` or ``--verbose``. This basically says whether the diff should go into as much detail as possible or only pick out the relevant pieces. Diffing -the new and next examples from the replay action, we see the diff looks like: +the new and next examples, we see the diff looks like: .. code-block:: xonshcon @@ -322,7 +239,7 @@ As can be seen, the diff has three sections. 1. **The header** describes the meta-information about the histories, such as their file names, sessionids, and time stamps. 2. **The environment** section describes the differences in the environment - when the histories were started or replayed. + when the histories were started. 3. **The commands** list this differences in the command themselves. For the commands, the input sequences are diff'd first, prior to the outputs @@ -443,8 +360,7 @@ of hocus pocus before you get to anything real. Xonsh has implemented a generic indexing system (sizes, offsets, etc)for JSON files that lives inside of the file that it indexes. This is known as ``LazyJSON`` because it allows us to -only read in the parts of a file that we need. For example, for replaying we only need to -grab the input fields and so that helps us on I/O. For garbage collecting based on the number +only read in the parts of a file that we need. For garbage collecting based on the number of commands, we can get this information from the index and don't need to read in any of the original data. @@ -474,8 +390,8 @@ Sqlite History Backend Xonsh has a second built-in history backend powered by sqlite (other than the JSON version mentioned all above in this tutorial). It shares the same functionality as the JSON version in most ways, except it currently doesn't -support ``history diff`` and ``history replay`` actions and does not store -the output of commands, as the json-backend does. E.g. +support the ``history diff`` action and does not store the output of commands, +as the json-backend does. E.g. `__xonsh__.history[-1].out` will always be `None`. The Sqlite history backend can provide a speed advantage in loading history diff --git a/docs/tutorial_subproc_strings.rst b/docs/tutorial_subproc_strings.rst index 7e9a08b7a..6821a22eb 100644 --- a/docs/tutorial_subproc_strings.rst +++ b/docs/tutorial_subproc_strings.rst @@ -32,7 +32,7 @@ to try this in xonsh, you'd see: **xonsh** -.. code-block:: xonshcon +.. code-block:: bash $ echo Actually\ Three\ Arguments Actually\ Three\ Arguments @@ -43,7 +43,7 @@ pass in a single argument: **xonsh** or **bash** -.. code-block:: xonshcon +.. code-block:: bash $ echo "A Single Argument" A Single Argument @@ -71,7 +71,7 @@ For example, **xonsh** -.. code-block:: xonshcon +.. code-block:: bash $ echo! A Single Argument A Single Argument @@ -97,7 +97,7 @@ when leading and trailing quotes are not matched. **xonsh** -.. code-block:: xonshcon +.. code-block:: bash $ echo foo"bar"baz foo"bar"baz @@ -110,7 +110,7 @@ You can think of these being equivalent to, **xonsh** -.. code-block:: xonshcon +.. code-block:: bash $ echo 'foo"bar"baz' foo"bar"baz diff --git a/docs/xonshrc.rst b/docs/xonshrc.rst index fac9ed27b..d361db347 100644 --- a/docs/xonshrc.rst +++ b/docs/xonshrc.rst @@ -4,7 +4,7 @@ Xonsh allows you to have run control files to customize your shell behavior. Th The system-wide ``xonshrc`` file controls options that are applied to all users of Xonsh on a given system. You can create this file in ``/etc/xonshrc`` for Linux and OSX and in ``%ALLUSERSPROFILE%\xonsh\xonshrc`` on Windows. -Xonsh also allows you to have a run control file in your home directory called ``~/.xonshrc``. The options set in the local ``xonshrc`` only apply to the current user and will override any conflicting settings set in the system-wide control file. +Xonsh also allows you to have a run control file in your home directory. It can either be directly in the home directory at ``~/.xonshrc`` or for XDG compliance at ``~/.config/rc.xsh``. The options set in the local ``xonshrc`` only apply to the current user and will override any conflicting settings set in the system-wide control file. These files are written in the xonsh language, of course. They are executed exactly once at startup. The following is a real-world example of such a file. @@ -47,3 +47,62 @@ The colors of the ``ls`` command may be hard to read in a dark terminal. If so, .. code-block:: xonshcon >>> $LS_COLORS='rs=0:di=01;36:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:' + +Make JSON data directly pastable +-------------------------------- +With the following snippet, xonsh will understand JSON data such as ``{ "name": "Tyler", "active": false, "age": null }``. Note that, though practical, this is rather hacky and might break other functionality. Use at your own risk. + +.. code-block:: xonshcon + + >>> import builtins + >>> builtins.true = True + >>> builtins.false = False + >>> builtins.null = None + +Display different date information every 10th time +--------------------------------------------------- +For a compact shell prompts, some people prefer a very condensed time format. But when you have a lengthy shell session you might want the date to show up in your logs every now and then... + +.. code-block:: xonshcon + + >>> import time + >>> def get_shelldate(): + >>> get_shelldate.fulldate %= 10 + >>> get_shelldate.fulldate += 1 + >>> if get_shelldate.fulldate == 1: + >>> return time.strftime('%d%m%Y') + >>> return time.strftime('%H:%M') + >>> get_shelldate.fulldate = 0 + >>> + >>> $PROMPT_FIELDS['shelldate'] = get_shelldate + +Use the Nix Package manager with Xonsh +-------------------------------------- +To users of the `Nix Package Manager `_ these few lines might be life-savers: + +.. code-block:: xonshcon + + >>> import os.path + >>> if os.path.exists(f"{$HOME}/.nix-profile") and not __xonsh__.env.get("NIX_PATH"): + >>> $NIX_REMOTE="daemon" + >>> $NIX_USER_PROFILE_DIR="/nix/var/nix/profiles/per-user/" + $USER + >>> $NIX_PROFILES="/nix/var/nix/profiles/default " + $HOME + "/.nix-profile" + >>> $NIX_SSL_CERT_FILE="/etc/ssl/certs/ca-certificates.crt" + >>> $NIX_PATH="nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixpkgs:/nix/var/nix/profiles/per-user/root/channels" + >>> $PATH += [f"{$HOME}/.nix-profile/bin", "/nix/var/nix/profiles/default/bin"] + +Btw. a hacky solution to install xontribs that do not yet ship with ``nixpkgs`` is: + +.. code-block:: xonshcon + + >>> for p in map(lambda s: str(s.resolve()), p"~/.local/lib/".glob("python*/site-packages")): + >>> if p not in sys.path: + >>> sys.path.append(p) + >>> + >>> $PYTHONPATH = "$USER/.local/lib/python3.7/site-packages" + >>> + >>> python -m ensurepip --user + >>> xonsh + >>> python -m pip install --user -U pip xontrib-z xonsh-direnv + +Just run the last three lines, do not put them in your `xonshrc`! diff --git a/news/add-history-flush.rst b/news/add-history-flush.rst deleted file mode 100644 index 1735c083f..000000000 --- a/news/add-history-flush.rst +++ /dev/null @@ -1,23 +0,0 @@ -**Added:** - -* ``history`` command now supports ``flush`` action - -**Changed:** - -* - -**Deprecated:** - -* - -**Removed:** - -* - -**Fixed:** - -* - -**Security:** - -* diff --git a/news/fix-unary-position.rst b/news/fix-unary-position.rst deleted file mode 100644 index 61e9a9a16..000000000 --- a/news/fix-unary-position.rst +++ /dev/null @@ -1,23 +0,0 @@ -**Added:** - -* - -**Changed:** - -* - -**Deprecated:** - -* - -**Removed:** - -* - -**Fixed:** - -* Logical subprocess operators now work after long arguments (e.g. ``--version``). - -**Security:** - -* diff --git a/news/exit.rst b/news/landing.rst similarity index 78% rename from news/exit.rst rename to news/landing.rst index f82b5acdd..77df7bb8b 100644 --- a/news/exit.rst +++ b/news/landing.rst @@ -1,10 +1,10 @@ **Added:** -* +* New landing page for https://xon.sh **Changed:** -* Added exit to the "Bash to xsh" article. +* **Deprecated:** diff --git a/news/fix_pip_completer.rst b/news/test_suite.rst similarity index 66% rename from news/fix_pip_completer.rst rename to news/test_suite.rst index 7d38bbb9c..5abd5ce6d 100644 --- a/news/fix_pip_completer.rst +++ b/news/test_suite.rst @@ -16,7 +16,7 @@ **Fixed:** -* ``pip`` completer no longer erroneously fires for ``pipx`` +* The xonsh test suite has been cleaned up. So no more failing test. Hopefully. **Security:** diff --git a/pyproject.toml b/pyproject.toml index 6e531307c..63c3275ed 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,6 @@ +[build-system] +requires = ["setuptools", "wheel"] + [tool.black] # better to keep default line-length than to match flake8 exclude = ''' @@ -25,6 +28,7 @@ exclude = ''' | \.github | \.vscode | \.pytest_cache + | ply )/ ) ''' diff --git a/requirements/tests-35.txt b/requirements/tests-35.txt index ce506ef14..fc05125c2 100644 --- a/requirements/tests-35.txt +++ b/requirements/tests-35.txt @@ -1,7 +1,6 @@ py -pytest +pytest>=5.4 flake8 -pytest-flake8 pytest-cov pytest-timeout prompt-toolkit>=2.0 diff --git a/requirements/tests.txt b/requirements/tests.txt index c5e1ce977..4075dbca6 100644 --- a/requirements/tests.txt +++ b/requirements/tests.txt @@ -1,7 +1,6 @@ py -pytest +pytest>=5.4 flake8 -pytest-flake8 pytest-cov pytest-timeout prompt-toolkit>=2.0 diff --git a/run-tests.xsh b/run-tests.xsh index 6d3702336..0b00188bd 100755 --- a/run-tests.xsh +++ b/run-tests.xsh @@ -26,3 +26,7 @@ for fname in run_separately: ![pytest @(replace_args(0)) @(ignores)] for index, fname in enumerate(run_separately): ![pytest @(replace_args(index+1)) @(fname)] + +echo "---------- Running flake8 ----------" +python -m flake8 + diff --git a/setup.cfg b/setup.cfg index b805430c3..7a2ea6a21 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,106 +1,71 @@ -[tool:pytest] -flake8-max-line-length = 180 -flake8-ignore = - *.py E122 - *.py E203 # E203 whitespace before ':' - *.py E402 - *.py W503 # line break before binary operators is a good thing - *.py E731 # it's OK to assign lambda to variable - xonsh/pygments_cache.py ALL - # flake8 gives incorrect unused import errors, F401 - xonsh/ast.py F401 - xonsh/platform.py F401 - xonsh/built_ins.py F821 E721 - xonsh/commands_cache.py F841 - xonsh/history.py F821 - xonsh/jupyter_kernel.py E203 - xonsh/pyghooks.py F821 - xonsh/style_tools.py F821 - xonsh/readline_shell.py F401 - xonsh/timings.py F401 - xonsh/tokenize.py F821 F841 - xonsh/tools.py E731 - xonsh/xonfig.py E731 - xonsh/proc.py E261 E265 - xonsh/ptk/key_bindings.py F841 - xonsh/ptk/shell.py E731 - xontrib/vox.py F821 - __amalgam__.py ALL - # we don't care about sphinx autogenerated files - docs/*.py ALL - # we don't care about ply files? - ply/*.py ALL - # these run VERY slowly and give tons of errors - parser*_table.py ALL - # oh come on - setup.py ALL - - # remove these later - *.py E741 # ambiguous variable name - xonsh/color_tools.py E305 - xonsh/inspectors.py E722 - xonsh/lexer.py E741 - xonsh/platform.py E305 - xonsh/style_tools.py E305 - xonsh/tools.py E305 - xonsh/winutils.py E305 - xonsh/completers/_aliases.py E305 - xonsh/completers/python.py E722 - xonsh/parsers/context_check.py E305 - xonsh/xoreutils/*.py E722 E305 - +# Use of pytest --flake8 is deprecated in favor of flake8 direct. +# Thus the developer's IDE can use the same lint config as CI. +# pytest-flake8 --ignore is an incompatible superset of flake8 --ignore, --per-file-ignores and --exclude +# and we don't want to maintain the same list in 2 formats. [flake8] max-line-length = 180 -# ignore ALL hangs on parser_table.py, need exclude= -# flake8 uses os.fnmatch -- different globbing syntax. -exclude = - __amalgam__.py - # we don't care about sphinx autogenerated files - docs/*.py - # we don't care about ply files? - */ply/*.py - # these run VERY slowly and give tons of errors - parser*_table.py - # oh come on - setup.py -ignore = - E122 - , E203 # E203 whitespace before ':' - , E402 - , W503 # line break before binary operators is a good thing - , E741 # ambiguous variable name - , E731 # it's OK to assign lambda to variable. - -per-file-ignores = - xonsh/pygments_cache.py: ALL - # flake8 gives incorrect unused import errors, F401 - xonsh/ast.py: F401 - xonsh/platform.py: F401 - xonsh/built_ins.py: F821, E721 - xonsh/commands_cache.py: F841 - xonsh/history.py: F821 - xonsh/jupyter_kernel.py: E203 - xonsh/pyghooks.py: F821 - xonsh/style_tools.py: F821 - xonsh/readline_shell.py: F401 - xonsh/timings.py: F401 - xonsh/tokenize.py: F821, F841 - xonsh/tools.py: E731 - xonsh/xonfig.py: E731 - xonsh/proc.py: E261, E265 - xonsh/ptk/key_bindings.py: F841 - xonsh/ptk/shell.py: E731 - xontrib/vox.py: F821 - +exclude = + __amalgam__.py, + tests/, + docs/, + */ply/, + parser*_table.py, + build/, + dist/, + setup.py, + .vscode/, + feedstock, + rever, + # remove later + pygments_cache.py +# lint nits that are acceptable in Xonsh project: +ignore = + E122, + # E203 whitespace before ':' + E203, + E402, + # line break before binary operators is a good thing + W503, + # accept lambda assigned to a variable + E731, # remove these later - xonsh/color_tools.py: E305 - xonsh/inspectors.py: E722 - xonsh/lexer.py: E741 - xonsh/platform.py: E305 - xonsh/style_tools.py: E305 - xonsh/tools.py: E305 - xonsh/winutils.py: E305 - xonsh/completers/_aliases.py: E305 - xonsh/completers/python.py: E722 - xonsh/parsers/context_check.py: E305 - xonsh/xoreutils/*.py: E722, E305 + # E741 - ambiguous variable name + E741, +# also acceptable in Xonsh project: reference to global names defined at runtime by black magic +builtins = + __xonsh__, + events, + aliases, + XonshError, +per-file-ignores = + # flake8 gives incorrect unused import errors, F401 + tests/tools.py:E128, + xonsh/ast.py:F401, + xonsh/built_ins.py:F821 E721, + xonsh/built_ins.py:E721, + xonsh/commands_cache.py:F841, + xonsh/history.py:F821, + xonsh/jupyter_kernel.py:E203, + xonsh/platform.py:F401 E305, + xonsh/proc.py:E261 E265, + xonsh/ptk/key_bindings.py:F841, + xonsh/ptk/shell.py:E731, + xonsh/pyghooks.py:F821, + xonsh/readline_shell.py:F401, + xonsh/style_tools.py:F821 E305, + xonsh/timings.py:F401, + xonsh/tokenize.py:F821 F841, + xonsh/tools.py:E731 E305, + xonsh/xonfig.py:E731, + xontrib/vox.py:F821, + # remove these later + xonsh/color_tools.py:E305 + xonsh/completers/_aliases.py:E305, + xonsh/completers/python.py:E722, + xonsh/inspectors.py:E722 + xonsh/lexer.py:E741, + xonsh/parsers/context_check.py:E305, + xonsh/style_tools.py:E305, + xonsh/tools.py:E305, + xonsh/winutils.py:E305, + xonsh/xoreutils/*.py:E722 E305, diff --git a/setup.py b/setup.py index e482b7516..1af3f2ebb 100755 --- a/setup.py +++ b/setup.py @@ -3,7 +3,6 @@ """The xonsh installer.""" # Note: Do not embed any non-ASCII characters in this file until pip has been # fixed. See https://github.com/xonsh/xonsh/issues/487. -from __future__ import print_function, unicode_literals import os import sys import json @@ -14,21 +13,11 @@ try: except ImportError: pass -try: - from setuptools import setup - from setuptools.command.sdist import sdist - from setuptools.command.install import install - from setuptools.command.develop import develop - from setuptools.command.install_scripts import install_scripts - - HAVE_SETUPTOOLS = True -except ImportError: - from distutils.core import setup - from distutils.command.sdist import sdist as sdist - from distutils.command.install import install as install - from distutils.command.install_scripts import install_scripts - - HAVE_SETUPTOOLS = False +from setuptools import setup +from setuptools.command.sdist import sdist +from setuptools.command.install import install +from setuptools.command.develop import develop +from setuptools.command.install_scripts import install_scripts try: from jupyter_client.kernelspec import KernelSpecManager @@ -301,26 +290,24 @@ else: } -if HAVE_SETUPTOOLS: +class xdevelop(develop): + """Xonsh specialization of setuptools develop class.""" - class xdevelop(develop): - """Xonsh specialization of setuptools develop class.""" + def run(self): + clean_tables() + build_tables() + dirty = dirty_version() + develop.run(self) + if dirty: + restore_version() - def run(self): - clean_tables() - build_tables() - dirty = dirty_version() - develop.run(self) - if dirty: - restore_version() - - def install_script(self, dist, script_name, script_text, dev_path=None): - if script_name == "xon.sh": - # change default python3 to the concrete python binary used to install/develop inside xon.sh script - script_text = script_text.replace( - " python3 ", ' "{}" '.format(sys.executable) - ) - super().install_script(dist, script_name, script_text, dev_path) + def install_script(self, dist, script_name, script_text, dev_path=None): + if script_name == "xon.sh": + # change default python3 to the concrete python binary used to install/develop inside xon.sh script + script_text = script_text.replace( + " python3 ", ' "{}" '.format(sys.executable) + ) + super().install_script(dist, script_name, script_text, dev_path) def main(): @@ -388,34 +375,33 @@ def main(): cmdclass=cmdclass, scripts=scripts, ) - if HAVE_SETUPTOOLS: - # WARNING!!! Do not use setuptools 'console_scripts' - # It validates the dependencies (of which we have none) every time the - # 'xonsh' command is run. This validation adds ~0.2 sec. to the startup - # time of xonsh - for every single xonsh run. This prevents us from - # reaching the goal of a startup time of < 0.1 sec. So never ever write - # the following: - # - # 'console_scripts': ['xonsh = xonsh.main:main'], - # - # END WARNING - skw["entry_points"] = { - "pygments.lexers": [ - "xonsh = xonsh.pyghooks:XonshLexer", - "xonshcon = xonsh.pyghooks:XonshConsoleLexer", - ], - "pytest11": ["xonsh = xonsh.pytest_plugin"], - } - skw["cmdclass"]["develop"] = xdevelop - skw["extras_require"] = { - "ptk": ["prompt-toolkit>=2.0"], - "pygments": ["pygments>=2.2"], - "mac": ["gnureadline"], - "linux": ["distro"], - "proctitle": ["setproctitle"], - "zipapp": ['importlib_resources; python_version < "3.7"'], - } - skw["python_requires"] = ">=3.5" + # WARNING!!! Do not use setuptools 'console_scripts' + # It validates the dependencies (of which we have none) every time the + # 'xonsh' command is run. This validation adds ~0.2 sec. to the startup + # time of xonsh - for every single xonsh run. This prevents us from + # reaching the goal of a startup time of < 0.1 sec. So never ever write + # the following: + # + # 'console_scripts': ['xonsh = xonsh.main:main'], + # + # END WARNING + skw["entry_points"] = { + "pygments.lexers": [ + "xonsh = xonsh.pyghooks:XonshLexer", + "xonshcon = xonsh.pyghooks:XonshConsoleLexer", + ], + "pytest11": ["xonsh = xonsh.pytest_plugin"], + } + skw["cmdclass"]["develop"] = xdevelop + skw["extras_require"] = { + "ptk": ["prompt-toolkit>=2.0"], + "pygments": ["pygments>=2.2"], + "mac": ["gnureadline"], + "linux": ["distro"], + "proctitle": ["setproctitle"], + "zipapp": ['importlib_resources; python_version < "3.7"'], + } + skw["python_requires"] = ">=3.6" setup(**skw) diff --git a/tests/bin/checkargv0.xsh b/tests/bin/checkargv0.xsh new file mode 100755 index 000000000..8f2413159 --- /dev/null +++ b/tests/bin/checkargv0.xsh @@ -0,0 +1,25 @@ +#!/usr/bin/env xonsh +res = True +script = """import os +path = "/proc/{}/cmdline".format(os.getpid()) +with open(path, "r") as f: + lines = f.read().split("\x00") + print(lines[0])""" + +def check(python): + argv0 = $(@(python) -c @(script)).rstrip() + + if argv0 == python: + return True + + print("Unexpected argv[0]: {} != {}".format(argv0, python)) + return False + + +python = "python" +res &= check(python) + +python = $(which -s python) +res &= check(python) +if res: + print("OK") diff --git a/tests/conftest.py b/tests/conftest.py index 772544a99..4c1c854c8 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -156,3 +156,9 @@ def xonsh_builtins(monkeypatch, xonsh_events): if hasattr(builtins, attr): delattr(builtins, attr) tasks.clear() # must to this to enable resetting all_jobs + + +def pytest_configure(config): + """Abort test run if --flake8 requested, since it would hang on parser_test.py""" + if config.getoption('--flake8', ''): + pytest.exit("pytest-flake8 no longer supported, use flake8 instead.") diff --git a/tests/test_environ.py b/tests/test_environ.py index f60c368cd..eabbcc296 100644 --- a/tests/test_environ.py +++ b/tests/test_environ.py @@ -11,10 +11,8 @@ import pytest from xonsh.commands_cache import CommandsCache from xonsh.environ import ( Env, - Ensurer, locate_binary, - DEFAULT_ENSURERS, - DEFAULT_VALUES, + DEFAULT_VARS, default_env, make_args_env, LsColors, @@ -67,7 +65,7 @@ def test_env_detype_mutable_access_clear(path1, path2): def test_env_detype_no_dict(): env = Env(YO={"hey": 42}) - env.set_ensurer("YO", Ensurer(always_true, None, None)) + env.register("YO", validate=always_true, convert=None, detype=None) det = env.detype() assert "YO" not in det @@ -171,6 +169,7 @@ def test_event_on_envvar_change(xonsh_builtins): xonsh_builtins.__xonsh__.env = env share = [] # register + @xonsh_builtins.events.on_envvar_change def handler(name, oldvalue, newvalue, **kwargs): share.extend((name, oldvalue, newvalue)) @@ -186,6 +185,7 @@ def test_event_on_envvar_new(xonsh_builtins): xonsh_builtins.__xonsh__.env = env share = [] # register + @xonsh_builtins.events.on_envvar_new def handler(name, value, **kwargs): share.extend((name, value)) @@ -201,6 +201,7 @@ def test_event_on_envvar_change_from_none_value(xonsh_builtins): xonsh_builtins.__xonsh__.env = env share = [] # register + @xonsh_builtins.events.on_envvar_change def handler(name, oldvalue, newvalue, **kwargs): share.extend((name, oldvalue, newvalue)) @@ -217,6 +218,7 @@ def test_event_on_envvar_change_no_fire_when_value_is_same(val, xonsh_builtins): xonsh_builtins.__xonsh__.env = env share = [] # register + @xonsh_builtins.events.on_envvar_change def handler(name, oldvalue, newvalue, **kwargs): share.extend((name, oldvalue, newvalue)) @@ -232,6 +234,7 @@ def test_events_on_envvar_called_in_right_order(xonsh_builtins): xonsh_builtins.__xonsh__.env = env share = [] # register + @xonsh_builtins.events.on_envvar_new def handler(name, value, **kwargs): share[:] = ["new"] @@ -251,13 +254,6 @@ def test_events_on_envvar_called_in_right_order(xonsh_builtins): assert share == ["change"] -def test_int_bool_envvars_have_ensurers(): - bool_ints = [type(envvar) in [bool, int] for envvar in DEFAULT_VALUES.values()] - key_mask = set(itertools.compress(DEFAULT_VALUES.keys(), bool_ints)) - ensurer_keys = set(DEFAULT_ENSURERS.keys()) - assert len(key_mask.intersection(ensurer_keys)) == len(key_mask) - - def test_no_lines_columns(): os.environ["LINES"] = "spam" os.environ["COLUMNS"] = "eggs" @@ -293,7 +289,7 @@ def test_delitem(): def test_delitem_default(): env = Env() a_key, a_value = next( - (k, v) for (k, v) in env._defaults.items() if isinstance(v, str) + (k, v.default) for (k, v) in env._vars.items() if isinstance(v.default, str) ) del env[a_key] assert env[a_key] == a_value @@ -301,23 +297,25 @@ def test_delitem_default(): assert env[a_key] == a_value -def test_lscolors_target(): +def test_lscolors_target(xonsh_builtins): lsc = LsColors.fromstring("ln=target") - assert lsc["ln"] == ("TARGET",) + assert lsc["ln"] == ("NO_COLOR",) + assert lsc.is_target("ln") assert lsc.detype() == "ln=target" + assert not (lsc.is_target("mi")) @pytest.mark.parametrize( "key_in,old_in,new_in,test", [ - ("rs", ("NO_COLOR",), ("BLUE",), "existing key, change value"), - ("rs", ("NO_COLOR",), ("NO_COLOR",), "existing key, no change in value"), + ("fi", ("NO_COLOR",), ("BLUE",), "existing key, change value"), + ("fi", ("NO_COLOR",), ("NO_COLOR",), "existing key, no change in value"), ("tw", None, ("NO_COLOR",), "create new key"), ("pi", ("BACKGROUND_BLACK", "YELLOW"), None, "delete existing key"), ], ) def test_lscolors_events(key_in, old_in, new_in, test, xonsh_builtins): - lsc = LsColors.fromstring("rs=0:di=01;34:pi=40;33") + lsc = LsColors.fromstring("fi=0:di=01;34:pi=40;33") # corresponding colors: [('NO_COLOR',), ('BOLD_CYAN',), ('BOLD_CYAN',), ('BACKGROUND_BLACK', 'YELLOW')] event_fired = False @@ -341,3 +339,119 @@ def test_lscolors_events(key_in, old_in, new_in, test, xonsh_builtins): assert not event_fired, "No event if value doesn't change" else: assert event_fired + + +def test_register_custom_var_generic(): + """Test that a registered envvar without any type is treated + permissively. + + """ + env = Env() + + assert "MY_SPECIAL_VAR" not in env + env.register("MY_SPECIAL_VAR") + assert "MY_SPECIAL_VAR" in env + + env["MY_SPECIAL_VAR"] = 32 + assert env["MY_SPECIAL_VAR"] == 32 + + env["MY_SPECIAL_VAR"] = True + assert env["MY_SPECIAL_VAR"] == True + + +def test_register_custom_var_int(): + env = Env() + env.register("MY_SPECIAL_VAR", type='int') + + env["MY_SPECIAL_VAR"] = "32" + assert env["MY_SPECIAL_VAR"] == 32 + + with pytest.raises(ValueError): + env["MY_SPECIAL_VAR"] = "wakka" + + +def test_register_custom_var_float(): + env = Env() + env.register("MY_SPECIAL_VAR", type='float') + + env["MY_SPECIAL_VAR"] = "27" + assert env["MY_SPECIAL_VAR"] == 27.0 + + with pytest.raises(ValueError): + env["MY_SPECIAL_VAR"] = "wakka" + + +@pytest.mark.parametrize("val,converted", + [ + (True, True), + (32, True), + (0, False), + (27.0, True), + (None, False), + ("lol", True), + ("false", False), + ("no", False), + ]) +def test_register_custom_var_bool(val, converted): + env = Env() + env.register("MY_SPECIAL_VAR", type='bool') + + env["MY_SPECIAL_VAR"] = val + assert env["MY_SPECIAL_VAR"] == converted + + +@pytest.mark.parametrize("val,converted", + [ + (32, "32"), + (0, "0"), + (27.0, "27.0"), + (None, "None"), + ("lol", "lol"), + ("false", "false"), + ("no", "no"), + ]) +def test_register_custom_var_str(val, converted): + env = Env() + env.register("MY_SPECIAL_VAR", type='str') + + env["MY_SPECIAL_VAR"] = val + assert env["MY_SPECIAL_VAR"] == converted + + +def test_register_custom_var_path(): + env = Env() + env.register("MY_SPECIAL_VAR", type='path') + + paths = ["/home/wakka", "/home/wakka/bin"] + env["MY_SPECIAL_VAR"] = paths + + assert hasattr(env['MY_SPECIAL_VAR'], 'paths') + assert env["MY_SPECIAL_VAR"].paths == paths + + with pytest.raises(TypeError): + env["MY_SPECIAL_VAR"] = 32 + + +def test_deregister_custom_var(): + env = Env() + + env.register("MY_SPECIAL_VAR", type='path') + env.deregister("MY_SPECIAL_VAR") + assert "MY_SPECIAL_VAR" not in env + + env.register("MY_SPECIAL_VAR", type='path') + paths = ["/home/wakka", "/home/wakka/bin"] + env["MY_SPECIAL_VAR"] = paths + env.deregister("MY_SPECIAL_VAR") + + # deregistering a variable that has a value set doesn't + # remove it from env; + # the existing variable also maintains its type validation, conversion + assert "MY_SPECIAL_VAR" in env + with pytest.raises(TypeError): + env["MY_SPECIAL_VAR"] = 32 + + # removing, then re-adding the variable without registering + # gives it only default permissive validation, conversion + del env["MY_SPECIAL_VAR"] + env["MY_SPECIAL_VAR"] = 32 diff --git a/tests/test_history.py b/tests/test_history.py index 70bf84000..eaeab9ab9 100644 --- a/tests/test_history.py +++ b/tests/test_history.py @@ -8,7 +8,14 @@ import pytest from xonsh.lazyjson import LazyJSON from xonsh.history.dummy import DummyHistory -from xonsh.history.json import JsonHistory +from xonsh.history.json import ( + JsonHistory, + _xhj_gc_commands_to_rmfiles, + _xhj_gc_files_to_rmfiles, + _xhj_gc_seconds_to_rmfiles, + _xhj_gc_bytes_to_rmfiles, +) + from xonsh.history.main import history_main, _xh_parse_args, construct_history @@ -308,3 +315,171 @@ def test_construct_history_class(xonsh_builtins): def test_construct_history_instance(xonsh_builtins): xonsh_builtins.__xonsh__.env["XONSH_HISTORY_BACKEND"] = DummyHistory() assert isinstance(construct_history(), DummyHistory) + + +import time +import calendar + + +HF_FIRST_DAY = calendar.timegm(time.struct_time((2018, 5, 13, 0, 0, 0, 0, 0, 0))) + + +def history_files_list(gen_count) -> (float, int, str, int): + """Generate a list of history file tuples""" + # generate test list: + # 2 files every day in range + # morning file has 100 commands, evening 50 + # first file size 10000, 2nd 2500 + # first file time 0900, 2nd 2300 + # for sanity in reproducable test results, all date arithmetic ignores astronomy. + # time zone is UTC, all days have 24 h and 0 sec, no leap year or leap sec. + + retval = [] + for i in range(int((gen_count + 1) / 2)): + retval.append( + ( + # first day in sec + #days * 24hr + #hr * 60min + # sec * 60sec + sec= sec to date. + HF_FIRST_DAY + (((((i * 24) + 9) * 60) + 0) * 60) + 0, # mod dt, + 100, + f".argle/xonsh-{2*i:05n}.json", + 10000, + ) + ) + retval.append( + ( + # first day in sec + #days * 24hr + #hr * 60min + # sec * 60sec + sec= sec to date. + HF_FIRST_DAY + (((((i * 24) + 23) * 60) + 0) * 60) + 0, # mod dt, + 50, + f".argle/xonsh-{2*i+1:05n}.json", + 2500, + ) + ) + return retval + + +# generate 100 files, 50 days. +HISTORY_FILES_LIST = history_files_list(100) + +# TS of newest history file +SEC_FROM_LATEST = time.time() - (HISTORY_FILES_LIST[-1][0]) +SEC_FROM_OLDEST = time.time() - (HISTORY_FILES_LIST[0][0]) +SEC_PER_DAY = 24 * 60 * 60 +SEC_PER_HR = 60 * 60 + + +@pytest.mark.parametrize( + "fn, hsize, in_files, exp_size, exp_files", + [ + # xhj_gc_commands_to_rmfiles + ( + _xhj_gc_commands_to_rmfiles, + 1001 * (100 + 50), # Limit > history, no trimming. + HISTORY_FILES_LIST, + 0, # nothing trimmed + [], # + ), + ( + _xhj_gc_commands_to_rmfiles, + 20 * (100 + 50), # keep 20 full days (40 files) + HISTORY_FILES_LIST, + 30 * (100 + 50), + HISTORY_FILES_LIST[: 2 * (30)], # trim 30 full days + ), + ( + _xhj_gc_commands_to_rmfiles, + 20 * (100 + 50) + 100, # keep 20 full newest and evening before (41 files) + HISTORY_FILES_LIST, + 30 * (100 + 50) - 50, # trim 30 full oldest, keep newest evening (59 files) + HISTORY_FILES_LIST[: 2 * 30 - 1], + ), + # xhj_gc_files_to_rmfiles + ( + _xhj_gc_files_to_rmfiles, + 1001, # Limit > history, no trimming. + HISTORY_FILES_LIST, + 0, # nothing trimmed + [], # + ), + ( + _xhj_gc_files_to_rmfiles, + 40, # keep 20 full days (40 files) + HISTORY_FILES_LIST, + 60, + HISTORY_FILES_LIST[:60], # trim 30 full days + ), + ( + _xhj_gc_files_to_rmfiles, + 41, # keep 20 full newest and evening before (41 files) + HISTORY_FILES_LIST, + 59, # trim 30 full oldest, keep newest evening (59 files) + HISTORY_FILES_LIST[: 2 * 30 - 1], + ), + # xhj_gc_bytes_to_rmfiles + ( + _xhj_gc_bytes_to_rmfiles, + 1001 * (10000 + 2500), # Limit > history, no trimming. + HISTORY_FILES_LIST, + 0, # nothing trimmed + [], # + ), + ( + _xhj_gc_bytes_to_rmfiles, + 20 * (10000 + 2500), # keep 20 full days (40 files) + HISTORY_FILES_LIST, + 30 * (10000 + 2500), + HISTORY_FILES_LIST[: 2 * (30)], # trim 30 full days + ), + ( + _xhj_gc_bytes_to_rmfiles, + 20 * (10000 + 2500) + + 10000, # keep 20 full newest and evening before (41 files) + HISTORY_FILES_LIST, + 30 * (10000 + 2500) + - 2500, # trim 30 full oldest, keep newest evening (59 files) + HISTORY_FILES_LIST[: 2 * 30 - 1], + ), + # xhj_gc_seconds_to_rmfiles + # amount of history removed by age is strange. + # it's always the age of the *oldest* file, no matter how many would be removed. + ( + _xhj_gc_seconds_to_rmfiles, + SEC_FROM_LATEST + 1001 * SEC_PER_DAY, # Limit > history, no trimming. + HISTORY_FILES_LIST, + 0, # nothing trimmed + [], # + ), + ( + _xhj_gc_seconds_to_rmfiles, + SEC_FROM_LATEST + 20 * SEC_PER_DAY, # keep 20 full days (40 files) + HISTORY_FILES_LIST, + SEC_FROM_OLDEST, + HISTORY_FILES_LIST[: 2 * (30)], # trim 30 full days + ), + ( + _xhj_gc_seconds_to_rmfiles, + SEC_FROM_LATEST + + 20 * SEC_PER_DAY + + 1 * SEC_PER_HR, # keep 20 full newest and evening before (41 files) + HISTORY_FILES_LIST, + SEC_FROM_OLDEST, + HISTORY_FILES_LIST[: 2 * 30 - 1], + ), + ], +) +def test__xhj_gc_xx_to_rmfiles( + fn, hsize, in_files, exp_size, exp_files, xonsh_builtins +): + + act_size, act_files = fn(hsize, in_files) + + assert act_files == exp_files + + # comparing age is approximate, because xhj_gc_seconds_to_rmfiles computes 'now' on each call. + # For test runs, accept anything in the same hour, test cases not that close. + # We find multi-minute variations in CI environments. + # This should cover some amount of think time sitting at a breakpoint, too. + if fn == _xhj_gc_seconds_to_rmfiles: + minute_diff = int(abs(act_size - exp_size) / 60) + assert minute_diff <= 60 + else: + assert act_size == exp_size diff --git a/tests/test_inspectors.py b/tests/test_inspectors.py deleted file mode 100644 index 78cde0fd6..000000000 --- a/tests/test_inspectors.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -"""Testing inspectors""" -import inspect -from xonsh.inspectors import getouterframes - - -def test_getouterframes(): - """Just test that this works.""" - curr = inspect.currentframe() - getouterframes(curr, context=0) diff --git a/tests/test_integrations.py b/tests/test_integrations.py index 0f3677f9a..fcf3a9663 100644 --- a/tests/test_integrations.py +++ b/tests/test_integrations.py @@ -10,7 +10,9 @@ import xonsh from xonsh.lib.os import indir from tools import ( + skip_if_on_msys, skip_if_on_windows, + skip_if_on_darwin, ON_WINDOWS, ON_DARWIN, ON_TRAVIS, @@ -52,32 +54,40 @@ skip_if_no_sleep = pytest.mark.skipif( ) -def run_xonsh(cmd, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.STDOUT): +def run_xonsh(cmd, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.STDOUT, single_command=False): env = dict(os.environ) env["PATH"] = PATH - env["XONSH_DEBUG"] = "1" + env["XONSH_DEBUG"] = "0" # was "1" env["XONSH_SHOW_TRACEBACK"] = "1" env["RAISE_SUBPROC_ERROR"] = "0" env["PROMPT"] = "" xonsh = "xonsh.bat" if ON_WINDOWS else "xon.sh" xonsh = shutil.which(xonsh, path=PATH) + if single_command: + args = [xonsh, "--no-rc", "-c", cmd] + input = None + else: + args = [xonsh, "--no-rc"] + input = cmd + proc = sp.Popen( - [xonsh, "--no-rc"], + args, env=env, stdin=stdin, stdout=stdout, stderr=stderr, universal_newlines=True, ) + try: - out, err = proc.communicate(input=cmd, timeout=10) + out, err = proc.communicate(input=input, timeout=10) except sp.TimeoutExpired: proc.kill() raise return out, err, proc.returncode -def check_run_xonsh(cmd, fmt, exp): +def check_run_xonsh(cmd, fmt, exp, exp_rtn=0): """The ``fmt`` parameter is a function that formats the output of cmd, can be None. """ @@ -87,7 +97,7 @@ def check_run_xonsh(cmd, fmt, exp): if callable(exp): exp = exp() assert out == exp, err - assert rtn == 0, err + assert rtn == exp_rtn, err # @@ -289,10 +299,11 @@ def _echo(args): print(' '.join(args)) aliases['echo'] = _echo -echo --option1 \ +echo --option1 \\ --option2 -""", - "--option1 --option2\n", +echo missing \\ +EOL""", + "--option1 --option2\nmissing EOL\n", 0, ), # @@ -596,7 +607,7 @@ def test_redirect_out_to_file(cmd, exp, tmpdir): @skip_if_no_xonsh @skip_if_no_sleep @skip_if_on_windows -@pytest.mark.xfail(strict=False) # TODO: fixme (super flaky on OSX) +@pytest.mark.xfail(strict=False) # TODO: fixme (super flaky on OSX) def test_xonsh_no_close_fds(): # see issue https://github.com/xonsh/xonsh/issues/2984 makefile = ( @@ -618,7 +629,8 @@ def test_xonsh_no_close_fds(): @pytest.mark.parametrize( - "cmd, fmt, exp", [("ls | wc", lambda x: x > "", True),], # noqa E231 (black removes space) + "cmd, fmt, exp", + [("ls | wc", lambda x: x > "", True),], # noqa E231 (black removes space) ) def test_pipe_between_subprocs(cmd, fmt, exp): "verify pipe between subprocesses doesn't throw an exception" @@ -655,3 +667,26 @@ aliases['echo'] = _echo ) out, _, _ = run_xonsh(script) assert out == exp + + +# issue 3402 +@skip_if_on_windows +@pytest.mark.parametrize( + "cmd, exp_rtn", + [ + ("sys.exit(0)", 0), + ("sys.exit(100)", 100), + ("sh -c 'exit 0'", 0), + ("sh -c 'exit 1'", 1), + ], +) +def test_single_command_return_code(cmd, exp_rtn): + _, _, rtn = run_xonsh(cmd, single_command=True) + assert rtn == exp_rtn + + +@skip_if_on_msys +@skip_if_on_windows +@skip_if_on_darwin +def test_argv0(): + check_run_xonsh("checkargv0.xsh", None, "OK\n") diff --git a/tests/test_lib/test_os.xsh b/tests/test_lib/test_os.xsh index d2d117008..1e79ff435 100644 --- a/tests/test_lib/test_os.xsh +++ b/tests/test_lib/test_os.xsh @@ -24,6 +24,8 @@ def test_indir(): def test_rmtree(): + if ON_WINDOWS: + pytest.skip("On Windows") with tempfile.TemporaryDirectory() as tmpdir: with indir(tmpdir): mkdir rmtree_test diff --git a/tests/test_lib/tools.py b/tests/test_lib/tools.py deleted file mode 120000 index 6c4a1855f..000000000 --- a/tests/test_lib/tools.py +++ /dev/null @@ -1 +0,0 @@ -../tools.py \ No newline at end of file diff --git a/tests/test_main.py b/tests/test_main.py index bceaab3ae..0f5d5d5b7 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -132,7 +132,36 @@ def test_premain_timings_arg(shell): @skip_if_on_windows -def test_xonsh_failback(shell, monkeypatch, monkeypatch_stderr): +@pytest.mark.parametrize( + ("env_shell", "rc_shells", "exp_shell"), + [ + ("", [], ""), + ("/argle/bash", [], "/argle/bash"), + ("/bin/xonsh", [], ""), + ( + "/argle/bash", + ["/argle/xonsh", "/argle/dash", "/argle/sh", "/argle/bargle"], + "/argle/bash", + ), + ( + "", + ["/argle/xonsh", "/argle/dash", "/argle/sh", "/argle/bargle"], + "/argle/dash", + ), + ("", ["/argle/xonsh", "/argle/screen", "/argle/sh"], "/argle/sh"), + ("", ["/argle/xonsh", "/argle/screen"], ""), + ], +) +@skip_if_on_windows +def test_xonsh_failback( + env_shell, + rc_shells, + exp_shell, + shell, + xonsh_builtins, + monkeypatch, + monkeypatch_stderr, +): failback_checker = [] def mocked_main(*args): @@ -146,16 +175,27 @@ def test_xonsh_failback(shell, monkeypatch, monkeypatch_stderr): monkeypatch.setattr(os, "execlp", mocked_execlp) monkeypatch.setattr(os.path, "exists", lambda x: True) - monkeypatch.setattr(sys, "argv", ["xonsh", "-i"]) + monkeypatch.setattr(sys, "argv", ["/bin/xonsh", "-i"]) # has to look like real path @contextmanager def mocked_open(*args): - yield ["/usr/bin/xonsh", "/usr/bin/screen", "bash", "/bin/xshell"] + yield rc_shells monkeypatch.setattr(builtins, "open", mocked_open) - xonsh.main.main() - assert failback_checker == ["/bin/xshell", "/bin/xshell"] + monkeypatch.setenv("SHELL", env_shell) + + try: + xonsh.main.main() # if main doesn't raise, it did try to invoke a shell + assert failback_checker[0] == exp_shell + assert failback_checker[1] == failback_checker[0] + except Exception as e: + if len(e.args) and "A fake failure" in str( + e.args[0] + ): # if it did raise expected exception + assert len(failback_checker) == 0 # then it didn't invoke a shell + else: + raise e # it raised something other than the test exception, def test_xonsh_failback_single(shell, monkeypatch, monkeypatch_stderr): diff --git a/tests/test_parser.py b/tests/test_parser.py index 079b14b2e..ca4d95e90 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -11,11 +11,7 @@ from xonsh.ast import AST, With, Pass, Str, Call from xonsh.parser import Parser from xonsh.parsers.base import eval_fstr_fields -from tools import VER_FULL, skip_if_lt_py36, nodes_equal - -# a lot of col_offset data changed from Py v3.5.0 -> v3.5.1 -INC_ATTRS = (3, 5, 1) <= VER_FULL - +from tools import nodes_equal @pytest.fixture(autouse=True) def xonsh_builtins_autouse(xonsh_builtins): @@ -77,7 +73,6 @@ def test_int_literal(): check_ast("42") -@skip_if_lt_py36 def test_int_literal_underscore(): check_ast("4_2") @@ -86,7 +81,6 @@ def test_float_literal(): check_ast("42.0") -@skip_if_lt_py36 def test_float_literal_underscore(): check_ast("4_2.4_2") @@ -117,13 +111,11 @@ def test_raw_literal(): check_ast('R"hell\\o"') -@skip_if_lt_py36 def test_f_literal(): check_ast('f"wakka{yo}yakka{42}"', run=False) check_ast('F"{yo}"', run=False) -@skip_if_lt_py36 def test_f_env_var(): check_xonsh_ast({}, 'f"{$HOME}"', run=False) check_xonsh_ast({}, "f'{$XONSH_DEBUG}'", run=False) @@ -315,7 +307,7 @@ def test_in(): def test_is(): - check_ast("42 is 65") + check_ast("int is float") # avoid PY3.8 SyntaxWarning "is" with a literal def test_not_in(): @@ -323,7 +315,7 @@ def test_not_in(): def test_is_not(): - check_ast("42 is not 65") + check_ast("float is not int") def test_lt_lt(): @@ -1338,7 +1330,6 @@ def test_equals_attr(): check_stmts("class X(object):\n pass\nx = X()\nx.a = 65") -@skip_if_lt_py36 def test_equals_annotation(): check_stmts("x : int = 42") diff --git a/tests/test_ptk_completer.py b/tests/test_ptk_completer.py new file mode 100644 index 000000000..ad44688c4 --- /dev/null +++ b/tests/test_ptk_completer.py @@ -0,0 +1,41 @@ +import pytest +from unittest.mock import MagicMock +from prompt_toolkit.completion import Completion as PTKCompletion + +from xonsh.aliases import Aliases +from xonsh.completers.tools import RichCompletion +from xonsh.ptk_shell.completer import PromptToolkitCompleter + + +@pytest.mark.parametrize('completion, lprefix, ptk_completion', [ + (RichCompletion('x', 0, 'x()', 'func'), 0, None), + (RichCompletion('x', 1, 'xx', 'instance'), 0, None), + (RichCompletion('x', description='wow'), 5, + PTKCompletion(RichCompletion('x'), -5, 'x', 'wow')), + (RichCompletion('x'), 5, PTKCompletion(RichCompletion('x'), -5, 'x')), + ('x', 5, PTKCompletion('x', -5, 'x')), +]) +def test_rich_completion(completion, lprefix, ptk_completion, monkeypatch, xonsh_builtins): + xonsh_completer_mock = MagicMock() + xonsh_completer_mock.complete.return_value = {completion}, lprefix + + ptk_completer = PromptToolkitCompleter(xonsh_completer_mock, None, None) + ptk_completer.reserve_space = lambda: None + ptk_completer.suggestion_completion = lambda _, __: None + + document_mock = MagicMock() + document_mock.text = '' + document_mock.current_line = '' + document_mock.cursor_position_col = 0 + + monkeypatch.setattr('builtins.aliases', Aliases()) + + completions = list( + ptk_completer.get_completions(document_mock, MagicMock())) + if isinstance(completion, RichCompletion) and not ptk_completion: + assert completions == [ + PTKCompletion(completion, -completion.prefix_len, + completion.display, + completion.description)] + else: + assert completions == [ptk_completion] diff --git a/tests/test_pyghooks.py b/tests/test_pyghooks.py index 23fd5aa38..add6d39ca 100644 --- a/tests/test_pyghooks.py +++ b/tests/test_pyghooks.py @@ -2,8 +2,10 @@ import pytest import os import stat +import pathlib from tempfile import TemporaryDirectory +from xonsh.platform import ON_WINDOWS from xonsh.pyghooks import ( XonshStyle, @@ -15,7 +17,6 @@ from xonsh.pyghooks import ( ) from xonsh.environ import LsColors -from tools import skip_if_on_windows @pytest.fixture @@ -25,11 +26,10 @@ def xonsh_builtins_LS_COLORS(xonsh_builtins): lsc = LsColors(LsColors.default_settings) xonsh_builtins.__xonsh__.env["LS_COLORS"] = lsc xonsh_builtins.__xonsh__.shell.shell_type = "prompt_toolkit" - # styler = XonshStyle() # default style - # xonsh_builtins.__xonsh__.shell.shell.styler = styler - # can't really instantiate XonshStyle separate from a shell?? + xonsh_builtins.__xonsh__.shell.shell.styler = XonshStyle() # default style yield xonsh_builtins + xonsh_builtins.__xonsh__.env = e @@ -157,29 +157,62 @@ def test_XonshStyle_init_file_color_tokens(xonsh_builtins_LS_COLORS): ) -_cf = { - "rs": "regular", - "di": "simple_dir", - "ln": "simple_link", - "mh": None, - "pi": "pipe", - "so": None, - "do": None, - # bug ci failures: 'bd': '/dev/sda', - # bug ci failures:'cd': '/dev/tty', - "or": "orphan_link", - "mi": None, - "su": "set_uid", - "sg": "set_gid", - "ca": None, - "tw": "sticky_ow_dir", - "ow": "other_writable_dir", - "st": "sticky_dir", - "ex": "executable", - "*.emf": "foo.emf", - "*.zip": "foo.zip", - "*.ogg": "foo.ogg", -} +# parameterized tests for file colorization +# note 'ca' is checked by standalone test. +# requires privilege to create a file with capabilities + +if ON_WINDOWS: + # file coloring support is very limited on Windows, only test the cases we can easily make work + # If you care about file colors, use Windows Subsystem for Linux, or another OS. + + _cf = { + "fi": "regular", + "di": "simple_dir", + "ln": "sym_link", + "pi": None, + "so": None, + "do": None, + # bug ci failures: 'bd': '/dev/sda', + # bug ci failures:'cd': '/dev/tty', + "or": "orphan", + "mi": None, # never used + "su": None, + "sg": None, + "ca": None, # Separate special case test, + "tw": None, + "ow": None, + "st": None, + "ex": None, # executable is a filetype test on Windows. + "*.emf": "foo.emf", + "*.zip": "foo.zip", + "*.ogg": "foo.ogg", + "mh": "hard_link", + } +else: + # full-fledged, VT100 based infrastructure + _cf = { + "fi": "regular", + "di": "simple_dir", + "ln": "sym_link", + "pi": "pipe", + "so": None, + "do": None, + # bug ci failures: 'bd': '/dev/sda', + # bug ci failures:'cd': '/dev/tty', + "or": "orphan", + "mi": None, # never used + "su": "set_uid", + "sg": "set_gid", + "ca": None, # Separate special case test, + "tw": "sticky_ow_dir", + "ow": "other_writable_dir", + "st": "sticky_dir", + "ex": "executable", + "*.emf": "foo.emf", + "*.zip": "foo.zip", + "*.ogg": "foo.ogg", + "mh": "hard_link", + } @pytest.fixture(scope="module") @@ -203,18 +236,19 @@ def colorizable_files(): os.mkdir(file_path) else: open(file_path, "a").close() - if k in ("di", "rg"): + if k in ("di", "fi"): pass elif k == "ex": - os.chmod(file_path, stat.S_IXUSR) - elif k == "ln": + os.chmod(file_path, stat.S_IRWXU) # tmpdir on windows need u+w + elif k == "ln": # cook ln test case. + os.chmod(file_path, stat.S_IRWXU) # link to *executable* file os.rename(file_path, file_path + "_target") os.symlink(file_path + "_target", file_path) elif k == "or": os.rename(file_path, file_path + "_target") os.symlink(file_path + "_target", file_path) os.remove(file_path + "_target") - elif k == "pi": + elif k == "pi": # not on Windows os.remove(file_path) os.mkfifo(file_path) elif k == "su": @@ -232,24 +266,74 @@ def colorizable_files(): ) elif k == "ow": os.chmod(file_path, stat.S_IWOTH | stat.S_IRUSR | stat.S_IWUSR) + elif k == "mh": + os.rename(file_path, file_path + "_target") + os.link(file_path + "_target", file_path) else: pass # cauterize those elseless ifs! + os.symlink(file_path, file_path + "_symlink") + yield tempdir pass # tempdir get cleaned up here. @pytest.mark.parametrize( - "key,file_path", [(key, file_path) for key, file_path in _cf.items() if file_path] + "key,file_path", [(key, file_path) for key, file_path in _cf.items() if file_path], ) -@skip_if_on_windows def test_colorize_file(key, file_path, colorizable_files, xonsh_builtins_LS_COLORS): - xonsh_builtins_LS_COLORS.__xonsh__.shell.shell.styler = ( - XonshStyle() - ) # default style + """test proper file codes with symlinks colored normally""" ffp = colorizable_files + "/" + file_path - mode = (os.lstat(ffp)).st_mode - color_token, color_key = color_file(ffp, mode) + stat_result = os.lstat(ffp) + color_token, color_key = color_file(ffp, stat_result) assert color_key == key, "File classified as expected kind" assert color_token == file_color_tokens[key], "Color token is as expected" + + +@pytest.mark.parametrize( + "key,file_path", [(key, file_path) for key, file_path in _cf.items() if file_path], +) +def test_colorize_file_symlink( + key, file_path, colorizable_files, xonsh_builtins_LS_COLORS +): + """test proper file codes with symlinks colored target.""" + xonsh_builtins_LS_COLORS.__xonsh__.env["LS_COLORS"]["ln"] = "target" + ffp = colorizable_files + "/" + file_path + "_symlink" + stat_result = os.lstat(ffp) + assert stat.S_ISLNK(stat_result.st_mode) + + _, color_key = color_file(ffp, stat_result) + + try: + tar_stat_result = os.stat(ffp) # stat the target of the link + tar_ffp = str(pathlib.Path(ffp).resolve()) + _, tar_color_key = color_file(tar_ffp, tar_stat_result) + if tar_color_key.startswith("*"): + tar_color_key = ( + "fi" # all the *.* zoo, link is colored 'fi', not target type. + ) + except FileNotFoundError: # orphan symlinks always colored 'or' + tar_color_key = "or" # Fake if for missing file + + assert color_key == tar_color_key, "File classified as expected kind, via symlink" + + +import xonsh.lazyimps + + +def test_colorize_file_ca(xonsh_builtins_LS_COLORS, monkeypatch): + def mock_os_listxattr(*args, **kwards): + return ["security.capability"] + + monkeypatch.setattr(xonsh.pyghooks, "os_listxattr", mock_os_listxattr) + + with TemporaryDirectory() as tmpdir: + file_path = tmpdir + "/cap_file" + open(file_path, "a").close() + os.chmod( + file_path, stat.S_IRWXU + ) # ca overrides ex, leave file deletable on Windows + color_token, color_key = color_file(file_path, os.lstat(file_path)) + + assert color_key == "ca" diff --git a/tests/test_readline_shell.py b/tests/test_readline_shell.py new file mode 100644 index 000000000..bc9a0162d --- /dev/null +++ b/tests/test_readline_shell.py @@ -0,0 +1,23 @@ +import pytest + +from xonsh.completers.tools import RichCompletion +from xonsh.readline_shell import _render_completions + + +@pytest.mark.parametrize( + 'prefix, completion, prefix_len, readline_completion', [ + ('', 'a', 0, 'a'), + ('a', 'b', 0, 'ab'), + ('a', 'b', 1, 'b'), + ('adc', 'bc', 2, 'abc'), + ('', RichCompletion('x', 0), 0, 'x'), + ('', RichCompletion('x', 0, 'aaa', 'aaa'), 0, 'x'), + ('a', RichCompletion('b', 1), 0, 'b'), + ('a', RichCompletion('b', 0), 1, 'ab'), + ('a', RichCompletion('b'), 0, 'ab'), + ('a', RichCompletion('b'), 1, 'b'), + ]) +def test_render_completions(prefix, completion, prefix_len, + readline_completion): + assert _render_completions({completion}, prefix, prefix_len) == [ + readline_completion] diff --git a/tests/test_replay.py b/tests/test_replay.py deleted file mode 100644 index 6c0051ef6..000000000 --- a/tests/test_replay.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- coding: utf-8 -*- -"""Tests the xonsh replay functionality.""" -import os -import builtins - -import pytest - -from xonsh.shell import Shell -from xonsh.execer import Execer -from xonsh.replay import Replayer - -from tools import skip_if_on_darwin - - -HISTDIR = os.path.join(os.path.dirname(__file__), "histories") - - -@pytest.fixture(scope="module", autouse=True) -def ctx(): - """Create a global Shell instance to use in all the test.""" - ctx = {"PATH": []} - execer = Execer(xonsh_ctx=ctx) - builtins.__xonsh__.shell = Shell(execer=execer, ctx=ctx, shell_type="none") - yield - builtins.__xonsh__.shell = None - - -@skip_if_on_darwin -def test_echo(): - histfile = os.path.join(HISTDIR, "echo.json") - hist = Replayer(histfile).replay() - assert len(hist) == 2 - - -@skip_if_on_darwin -def test_reecho(): - histfile = os.path.join(HISTDIR, "echo.json") - hist = Replayer(histfile).replay() - assert len(hist) == 2 - - -@skip_if_on_darwin -def test_simple_python(): - histfile = os.path.join(HISTDIR, "simple-python.json") - hist = Replayer(histfile).replay() - assert len(hist) == 4 - assert hist.inps[0].strip() == "print('The Turtles')" diff --git a/tests/test_tools.py b/tests/test_tools.py index 5433f63f2..495021b18 100644 --- a/tests/test_tools.py +++ b/tests/test_tools.py @@ -511,7 +511,7 @@ mom""" @pytest.mark.parametrize("src, idx, exp_line, exp_n", LOGICAL_LINE_CASES) -def test_get_logical_line(src, idx, exp_line, exp_n): +def test_get_logical_line(src, idx, exp_line, exp_n, xonsh_builtins): lines = src.splitlines() line, n, start = get_logical_line(lines, idx) assert exp_line == line @@ -519,7 +519,7 @@ def test_get_logical_line(src, idx, exp_line, exp_n): @pytest.mark.parametrize("src, idx, exp_line, exp_n", LOGICAL_LINE_CASES) -def test_replace_logical_line(src, idx, exp_line, exp_n): +def test_replace_logical_line(src, idx, exp_line, exp_n, xonsh_builtins): lines = src.splitlines() logical = exp_line while idx > 0 and lines[idx - 1].endswith("\\"): diff --git a/tests/test_vox.py b/tests/test_vox.py index 6505ad7ab..77d6dd70f 100644 --- a/tests/test_vox.py +++ b/tests/test_vox.py @@ -7,7 +7,7 @@ import pytest import sys from xontrib.voxapi import Vox -from tools import skip_if_on_conda, skip_if_on_msys, skip_if_lt_py36 +from tools import skip_if_on_conda, skip_if_on_msys from xonsh.platform import ON_WINDOWS @@ -231,7 +231,6 @@ def test_reserved_names(xonsh_builtins, tmpdir): @skip_if_on_msys @skip_if_on_conda -@skip_if_lt_py36 def test_autovox(xonsh_builtins, tmpdir): """ Tests that autovox works diff --git a/tests/tools.py b/tests/tools.py index 3cc199587..9ee7aec31 100644 --- a/tests/tools.py +++ b/tests/tools.py @@ -17,8 +17,6 @@ from xonsh.environ import Env from xonsh.base_shell import BaseShell -VER_3_5 = (3, 5) -VER_3_6 = (3, 6) VER_MAJOR_MINOR = sys.version_info[:2] VER_FULL = sys.version_info[:3] ON_DARWIN = platform.system() == "Darwin" @@ -34,10 +32,6 @@ print("os.environ['TF_BUILD']", repr(os.environ.get("TF_BUILD", ""))) TEST_DIR = os.path.dirname(__file__) # pytest skip decorators -skip_if_lt_py36 = pytest.mark.skipif( - VER_MAJOR_MINOR < VER_3_6, reason="Py3.6+ only test" -) - skip_if_on_conda = pytest.mark.skipif( ON_CONDA, reason="Conda and virtualenv _really_ hate each other" ) diff --git a/tests/xontribs/test_jedi.py b/tests/xontribs/test_jedi.py new file mode 100644 index 000000000..bd7805004 --- /dev/null +++ b/tests/xontribs/test_jedi.py @@ -0,0 +1,197 @@ +"""Tests for the Jedi completer xontrib""" +import sys +import pytest +import builtins +import importlib +from unittest.mock import MagicMock, call + +from xonsh.xontribs import find_xontrib +from xonsh.completers.tools import RichCompletion + + +@pytest.fixture +def jedi_mock(monkeypatch): + jedi_mock = MagicMock() + jedi_mock.__version__ = '0.16.0' + jedi_mock.Interpreter().complete.return_value = [] + jedi_mock.reset_mock() + monkeypatch.setitem(sys.modules, 'jedi', jedi_mock) + yield jedi_mock + + +@pytest.fixture +def completer_mock(monkeypatch): + completer_mock = MagicMock() + + # so that args will be passed + def comp(args): + completer_mock(args) + + monkeypatch.setitem(builtins.aliases, 'completer', comp) + yield completer_mock + + +@pytest.fixture +def jedi_xontrib(monkeypatch, source_path, jedi_mock, completer_mock): + monkeypatch.syspath_prepend(source_path) + spec = find_xontrib('jedi') + yield importlib.import_module(spec.name) + del sys.modules[spec.name] + + +def test_completer_added(jedi_xontrib, completer_mock): + assert completer_mock.call_args_list == [call(['remove', 'python_mode']), + call(['add', 'jedi_python', + 'complete_jedi', ' int', + ('instance', 'instance int')), + RichCompletion('x', display='xx', description='instance int') + ), + ( + # from jedi when code is 'xx=3\nx' + ('statement', 'xx', 'x', None, ('instance', 'instance int')), + RichCompletion('x', display='xx', description='instance int') + ), + ( + # from jedi when code is 'x.' and x=3 + ('function', 'from_bytes', 'from_bytes', + 'from_bytes(bytes, byteorder, *, signed=False)', + ('function', 'def __get__')), + RichCompletion('from_bytes', display='from_bytes()', + description= + 'from_bytes(bytes, byteorder, *, signed=False)') + ), + ( + # from jedi when code is 'x=3\nx.' + ('function', 'imag', 'imag', None, ('instance', 'instance int')), + RichCompletion('imag', display='imag', description='instance int') + ), + ( + # from '(3).from_bytes(byt' + ('param', 'bytes=', 'es=', None, ('instance', 'instance Sequence')), + RichCompletion('es=', display='bytes=', + description='instance Sequence') + ), + ( + # from 'x.from_bytes(byt' when x=3 + ('param', 'bytes=', 'es=', None, None), + RichCompletion('es=', display='bytes=', description='param') + ), + ( + # from 'import colle' + ('module', 'collections', 'ctions', None, + ('module', 'module collections')), + RichCompletion('ctions', display='collections', + description='module collections') + ), + ( + # from 'NameErr' + ('class', 'NameError', 'or', 'NameError(*args: object)', + ('class', 'class NameError')), + RichCompletion('or', display='NameError', + description='NameError(*args: object)') + ), + ( + # from 'a["' when a={'name':None} + ('string', '"name"', 'name"', None, None), + RichCompletion('name"', display='"name"', description='string') + ), + ( + # from 'open("/etc/pass' + ('path', 'passwd"', 'wd"', None, None), + RichCompletion('wd"', display='passwd"', description='path') + ), + ( + # from 'cla' + ('keyword', 'class', 'ss', None, None), + RichCompletion('ss', display='class', description='keyword') + ), +]) +def test_rich_completions(jedi_xontrib, jedi_mock, completion, rich_completion): + comp_type, comp_name, comp_complete, sig, inf = completion + comp_mock = MagicMock() + comp_mock.type = comp_type + comp_mock.name = comp_name + comp_mock.complete = comp_complete + if sig: + sig_mock = MagicMock() + sig_mock.to_string.return_value = sig + comp_mock.get_signatures.return_value = [sig_mock] + else: + comp_mock.get_signatures.return_value = [] + if inf: + inf_type, inf_desc = inf + inf_mock = MagicMock() + inf_mock.type = inf_type + inf_mock.description = inf_desc + comp_mock.infer.return_value = [inf_mock] + else: + comp_mock.infer.return_value = [] + + jedi_xontrib.XONSH_SPECIAL_TOKENS = [] + jedi_mock.Interpreter().complete.return_value = [comp_mock] + completions = jedi_xontrib.complete_jedi('', '', 0, 0, {}) + assert len(completions) == 1 + ret_completion, = completions + assert isinstance(ret_completion, RichCompletion) + assert ret_completion == rich_completion + assert ret_completion.display == rich_completion.display + assert ret_completion.description == rich_completion.description + + +def test_special_tokens(jedi_xontrib): + assert jedi_xontrib.complete_jedi('', '', 0, 0, + {}) == jedi_xontrib.XONSH_SPECIAL_TOKENS + assert jedi_xontrib.complete_jedi('@', '@', 0, 1, {}) == {'@', '@(', '@$('} + assert jedi_xontrib.complete_jedi('$', '$', 0, 1, {}) == {'$[', '${', '$('} diff --git a/xonsh-in-docker.py b/xonsh-in-docker.py index 5a5016a94..779a188ff 100755 --- a/xonsh-in-docker.py +++ b/xonsh-in-docker.py @@ -9,7 +9,7 @@ program_description = """Build and run Xonsh in a fresh, controlled parser = argparse.ArgumentParser(description=program_description) parser.add_argument("env", nargs="*", default=[], metavar="ENV=value") -parser.add_argument("--python", "-p", default="3.5", metavar="python_version") +parser.add_argument("--python", "-p", default="3.6", metavar="python_version") parser.add_argument("--pypy", default=None, metavar="pypy_version") parser.add_argument("--ptk", "-t", default="2.0.4", metavar="ptk_version") parser.add_argument("--keep", action="store_true") diff --git a/xonsh/__init__.py b/xonsh/__init__.py index 2835682fc..5e208a56b 100644 --- a/xonsh/__init__.py +++ b/xonsh/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.9.18" +__version__ = "0.9.19" # amalgamate exclude jupyter_kernel parser_table parser_test_table pyghooks @@ -80,16 +80,14 @@ else: _sys.modules["xonsh.environ"] = __amalgam__ tracer = __amalgam__ _sys.modules["xonsh.tracer"] = __amalgam__ - readline_shell = __amalgam__ - _sys.modules["xonsh.readline_shell"] = __amalgam__ - replay = __amalgam__ - _sys.modules["xonsh.replay"] = __amalgam__ aliases = __amalgam__ _sys.modules["xonsh.aliases"] = __amalgam__ - dumb_shell = __amalgam__ - _sys.modules["xonsh.dumb_shell"] = __amalgam__ + readline_shell = __amalgam__ + _sys.modules["xonsh.readline_shell"] = __amalgam__ built_ins = __amalgam__ _sys.modules["xonsh.built_ins"] = __amalgam__ + dumb_shell = __amalgam__ + _sys.modules["xonsh.dumb_shell"] = __amalgam__ execer = __amalgam__ _sys.modules["xonsh.execer"] = __amalgam__ imphooks = __amalgam__ diff --git a/xonsh/aliases.py b/xonsh/aliases.py index 74d726d32..661f0a9ce 100644 --- a/xonsh/aliases.py +++ b/xonsh/aliases.py @@ -21,6 +21,7 @@ from xonsh.platform import ( ON_NETBSD, ON_OPENBSD, ON_DRAGONFLY, + ON_POSIX, ) from xonsh.tools import ( XonshError, @@ -33,7 +34,6 @@ from xonsh.tools import ( unthreadable, print_color, ) -from xonsh.replay import replay_main from xonsh.timings import timeit_alias from xonsh.xontribs import xontribs_main from xonsh.ast import isexpression @@ -43,6 +43,9 @@ import xonsh.history.main as xhm import xonsh.xoreutils.which as xxw from xonsh.xoreutils.umask import umask +if ON_POSIX: + from xonsh.xoreutils.ulimit import ulimit + @lazyobject def SUB_EXEC_ALIAS_RE(): @@ -556,7 +559,7 @@ def source_alias(args, stdin=None): print("source: {}: No such file".format(fname), file=sys.stderr) if i == 0: raise RuntimeError( - "must source at least one file, " + fname + "does not exist." + "must source at least one file, " + fname + " does not exist." ) break _, fext = os.path.splitext(fpath) @@ -777,7 +780,6 @@ def make_default_aliases(): "source-cmd": source_cmd, "source-foreign": source_foreign, "history": xhm.history_main, - "replay": replay_main, "trace": trace, "timeit": timeit_alias, "umask": umask, @@ -791,6 +793,8 @@ def make_default_aliases(): "xpip": detect_xpip_alias(), "xonsh-reset": xonsh_reset, } + if ON_POSIX: + default_aliases["ulimit"] = ulimit if ON_WINDOWS: # Borrow builtin commands from cmd.exe. windows_cmd_aliases = { diff --git a/xonsh/ast.py b/xonsh/ast.py index 021e77429..a653ab962 100644 --- a/xonsh/ast.py +++ b/xonsh/ast.py @@ -109,21 +109,18 @@ import textwrap import itertools from xonsh.tools import subproc_toks, find_next_break, get_logical_line -from xonsh.platform import PYTHON_VERSION_INFO -if PYTHON_VERSION_INFO >= (3, 5, 0): - # pylint: disable=unused-import - # pylint: disable=no-name-in-module - from ast import MatMult, AsyncFunctionDef, AsyncWith, AsyncFor, Await -else: - MatMult = AsyncFunctionDef = AsyncWith = AsyncFor = Await = None +from ast import ( + MatMult, + AsyncFunctionDef, + AsyncWith, + AsyncFor, + Await, + JoinedStr, + FormattedValue, + AnnAssign, +) -if PYTHON_VERSION_INFO >= (3, 6, 0): - # pylint: disable=unused-import - # pylint: disable=no-name-in-module - from ast import JoinedStr, FormattedValue, AnnAssign -else: - JoinedStr = FormattedValue = AnnAssign = None STATEMENTS = ( FunctionDef, @@ -147,9 +144,8 @@ STATEMENTS = ( Pass, Break, Continue, + AnnAssign, ) -if PYTHON_VERSION_INFO >= (3, 6, 0): - STATEMENTS += (AnnAssign,) def leftmostname(node): diff --git a/xonsh/built_ins.py b/xonsh/built_ins.py index 5af22ee22..6cd7e585b 100644 --- a/xonsh/built_ins.py +++ b/xonsh/built_ins.py @@ -206,8 +206,9 @@ def _un_shebang(x): def get_script_subproc_command(fname, args): """Given the name of a script outside the path, returns a list representing - an appropriate subprocess command to execute the script. Raises - PermissionError if the script is not executable. + an appropriate subprocess command to execute the script or None if + the argument is not readable or not a script. Raises PermissionError + if the script is not executable. """ # make sure file is executable if not os.access(fname, os.X_OK): @@ -217,10 +218,10 @@ def get_script_subproc_command(fname, args): # execute permissions but not read/write permissions. This enables # things with the SUID set to be run. Needs to come before _is_binary() # is called, because that function tries to read the file. - return [fname] + args + return None elif _is_binary(fname): # if the file is a binary, we should call it directly - return [fname] + args + return None if ON_WINDOWS: # Windows can execute various filetypes directly # as given in PATHEXT @@ -730,7 +731,9 @@ class SubprocSpec: if self.binary_loc is None: return try: - self.cmd = get_script_subproc_command(self.binary_loc, self.cmd[1:]) + scriptcmd = get_script_subproc_command(self.binary_loc, self.cmd[1:]) + if scriptcmd is not None: + self.cmd = scriptcmd except PermissionError: e = "xonsh: subprocess mode: permission denied: {0}" raise XonshError(e.format(self.cmd[0])) diff --git a/xonsh/completers/base.py b/xonsh/completers/base.py index 446d7b60a..b017db1af 100644 --- a/xonsh/completers/base.py +++ b/xonsh/completers/base.py @@ -11,6 +11,10 @@ def complete_base(prefix, line, start, end, ctx): and paths. If we are completing the first argument, complete based on valid commands and python names. """ + if line.strip() and prefix != line: + # don't do unnecessary completions + return set() + # get and unpack python completions python_comps = complete_python(prefix, line, start, end, ctx) if isinstance(python_comps, cabc.Sequence): diff --git a/xonsh/completers/completer.py b/xonsh/completers/completer.py index 553c7d603..a011d3674 100644 --- a/xonsh/completers/completer.py +++ b/xonsh/completers/completer.py @@ -8,7 +8,14 @@ def complete_completer(prefix, line, start, end, ctx): args = line.split(" ") if len(args) == 0 or args[0] != "completer": return None + + if end < len(line) and line[end] != " ": + # completing in a middle of a word + # (e.g. "completer something") + return None + curix = args.index(prefix) + compnames = set(builtins.__xonsh__.completers.keys()) if curix == 1: possible = {"list", "help", "add", "remove"} diff --git a/xonsh/completers/path.py b/xonsh/completers/path.py index 9a52a4d85..133dea5db 100644 --- a/xonsh/completers/path.py +++ b/xonsh/completers/path.py @@ -298,11 +298,12 @@ def complete_path(prefix, line, start, end, ctx, cdpath=True, filtfunc=None): # e.g., ~/u/ro completes to ~/lou/carcolh # see above functions for details. p = _splitpath(os.path.expanduser(prefix)) - if len(p) != 0: + p_len = len(p) + if p_len != 0: relative_char = ["", ".", ".."] if p[0] in relative_char: i = 0 - while p[i] in relative_char: + while i < p_len and p[i] in relative_char: i += 1 basedir = p[:i] p = p[i:] diff --git a/xonsh/completers/tools.py b/xonsh/completers/tools.py index 6b77b0563..809081b4c 100644 --- a/xonsh/completers/tools.py +++ b/xonsh/completers/tools.py @@ -31,3 +31,56 @@ def justify(s, max_length, left_pad=0): """ txt = textwrap.wrap(s, width=max_length, subsequent_indent=" " * left_pad) return "\n".join(txt) + + +class RichCompletion(str): + """A rich completion that completers can return instead of a string + + Parameters + ---------- + value : str + The completion's actual value. + prefix_len : int + Length of the prefix to be replaced in the completion. + If None, the default prefix len will be used. + display : str + Text to display in completion option list. + If None, ``value`` will be used. + description : str + Extra text to display when the completion is selected. + """ + + def __new__(cls, value, prefix_len=None, display=None, description=""): + completion = super().__new__(cls, value) + + completion.prefix_len = prefix_len + completion.display = display or value + completion.description = description + + return completion + + def __repr__(self): + return "RichCompletion({}, prefix_len={}, display={}, description={})".format( + repr(str(self)), + self.prefix_len, + repr(self.display), + repr(self.description), + ) + + +def get_ptk_completer(): + """Get the current PromptToolkitCompleter + + This is usefull for completers that want to use + PromptToolkitCompleter.current_document (the current multiline document). + + Call this function lazily since in '.xonshrc' the shell doesn't exist. + + Returns + ------- + The PromptToolkitCompleter if running with ptk, else returns None + """ + if __xonsh__.shell is None or __xonsh__.shell.shell_type != "prompt_toolkit": + return None + + return __xonsh__.shell.shell.pt_completer diff --git a/xonsh/environ.py b/xonsh/environ.py index 792698ecb..5b9e07956 100644 --- a/xonsh/environ.py +++ b/xonsh/environ.py @@ -198,8 +198,8 @@ def to_debug(x): class LsColors(cabc.MutableMapping): """Helps convert to/from $LS_COLORS format, respecting the xonsh color style. - This accepts the same inputs as dict(). The link ``target`` is represented - by the special ``"TARGET"`` color. + This accepts the same inputs as dict(). The special value ``target`` is + replaced by no color, but sets a flag for cognizant application (see is_target()). """ default_settings = { @@ -321,6 +321,7 @@ class LsColors(cabc.MutableMapping): "di": ("BOLD_BLUE",), "do": ("BOLD_PURPLE",), "ex": ("BOLD_GREEN",), + "fi": ("NO_COLOR",), "ln": ("BOLD_CYAN",), "mh": ("NO_COLOR",), "mi": ("NO_COLOR",), @@ -335,10 +336,20 @@ class LsColors(cabc.MutableMapping): "tw": ("BLACK", "BACKGROUND_GREEN"), } - def __init__(self, *args, **kwargs): - self._d = dict(*args, **kwargs) + target_value = "target" # special value to set for ln=target + target_color = ("NO_COLOR",) # repres in color space + + def __init__(self, ini_dict: dict = None): self._style = self._style_name = None self._detyped = None + self._d = dict() + self._targets = set() + if ini_dict: + for key, value in ini_dict.items(): + if value == LsColors.target_value: + self._targets.add(key) + value = LsColors.target_color + self._d[key] = value def __getitem__(self, key): return self._d[key] @@ -346,13 +357,20 @@ class LsColors(cabc.MutableMapping): def __setitem__(self, key, value): self._detyped = None old_value = self._d.get(key, None) + self._targets.discard(key) + if value == LsColors.target_value: + value = LsColors.target_color + self._targets.add(key) self._d[key] = value - if old_value != value: + if ( + old_value != value + ): # bug won't fire if new value is 'target' and old value happened to be no color. events.on_lscolors_change.fire(key=key, oldvalue=old_value, newvalue=value) def __delitem__(self, key): self._detyped = None old_value = self._d.get(key, None) + self._targets.discard(key) del self._d[key] events.on_lscolors_change.fire(key=key, oldvalue=old_value, newvalue=None) @@ -366,9 +384,7 @@ class LsColors(cabc.MutableMapping): return str(self._d) def __repr__(self): - return "{0}.{1}(...)".format( - self.__class__.__module__, self.__class__.__name__, self._d - ) + return "{0}.{1}(...)".format(self.__class__.__module__, self.__class__.__name__) def _repr_pretty_(self, p, cycle): name = "{0}.{1}".format(self.__class__.__module__, self.__class__.__name__) @@ -379,6 +395,10 @@ class LsColors(cabc.MutableMapping): p.break_() p.pretty(dict(self)) + def is_target(self, key) -> bool: + "Return True if key is 'target'" + return key in self._targets + def detype(self): """De-types the instance, allowing it to be exported to the environment.""" style = self.style @@ -389,8 +409,8 @@ class LsColors(cabc.MutableMapping): + "=" + ";".join( [ - "target" - if v == "TARGET" + LsColors.target_value + if key in self._targets else ansi_color_name_to_escape_code(v, cmap=style) for v in val ] @@ -407,7 +427,7 @@ class LsColors(cabc.MutableMapping): env_style_name = env.get("XONSH_COLOR_STYLE", "default") if self._style_name is None or self._style_name != env_style_name: self._style_name = env_style_name - self._style = self._dtyped = None + self._style = self._detyped = None return self._style_name @property @@ -424,28 +444,26 @@ class LsColors(cabc.MutableMapping): """Creates a new instance of the LsColors class from a colon-separated string of dircolor-valid keys to ANSI color escape sequences. """ - obj = cls() + ini_dict = dict() # string inputs always use default codes, so translating into # xonsh names should be done from defaults reversed_default = ansi_reverse_style(style="default") - data = {} for item in s.split(":"): key, eq, esc = item.partition("=") if not eq: # not a valid item pass - elif esc == "target": - data[key] = ("TARGET",) + elif esc == LsColors.target_value: # really only for 'ln' + ini_dict[key] = esc else: try: - data[key] = ansi_color_escape_code_to_name( + ini_dict[key] = ansi_color_escape_code_to_name( esc, "default", reversed_style=reversed_default ) except Exception as e: print("xonsh:warning:" + str(e), file=sys.stderr) - data[key] = ("NO_COLOR",) - obj._d = data - return obj + ini_dict[key] = ("NO_COLOR",) + return cls(ini_dict) @classmethod def fromdircolors(cls, filename=None): @@ -505,131 +523,17 @@ def ensure_ls_colors_in_env(spec=None, **kwargs): # -# Ensurerers +# Ensurers # -Ensurer = collections.namedtuple("Ensurer", ["validate", "convert", "detype"]) -Ensurer.__doc__ = """Named tuples whose elements are functions that -represent environment variable validation, conversion, detyping. -""" - - -@lazyobject -def DEFAULT_ENSURERS(): - return { - "AUTO_CD": (is_bool, to_bool, bool_to_str), - "AUTO_PUSHD": (is_bool, to_bool, bool_to_str), - "AUTO_SUGGEST": (is_bool, to_bool, bool_to_str), - "AUTO_SUGGEST_IN_COMPLETIONS": (is_bool, to_bool, bool_to_str), - "BASH_COMPLETIONS": (is_env_path, str_to_env_path, env_path_to_str), - "CASE_SENSITIVE_COMPLETIONS": (is_bool, to_bool, bool_to_str), - re.compile(r"\w*DIRS$"): (is_env_path, str_to_env_path, env_path_to_str), - "COLOR_INPUT": (is_bool, to_bool, bool_to_str), - "COLOR_RESULTS": (is_bool, to_bool, bool_to_str), - "COMPLETIONS_BRACKETS": (is_bool, to_bool, bool_to_str), - "COMPLETIONS_CONFIRM": (is_bool, to_bool, bool_to_str), - "COMPLETIONS_DISPLAY": ( - is_completions_display_value, - to_completions_display_value, - str, - ), - "COMPLETIONS_MENU_ROWS": (is_int, int, str), - "COMPLETION_QUERY_LIMIT": (is_int, int, str), - "COMPLETION_IN_THREAD": (is_bool, to_bool, bool_to_str), - "DIRSTACK_SIZE": (is_int, int, str), - "DOTGLOB": (is_bool, to_bool, bool_to_str), - "DYNAMIC_CWD_WIDTH": ( - is_dynamic_cwd_width, - to_dynamic_cwd_tuple, - dynamic_cwd_tuple_to_str, - ), - "DYNAMIC_CWD_ELISION_CHAR": (is_string, ensure_string, ensure_string), - "EXPAND_ENV_VARS": (is_bool, to_bool, bool_to_str), - "FORCE_POSIX_PATHS": (is_bool, to_bool, bool_to_str), - "FOREIGN_ALIASES_SUPPRESS_SKIP_MESSAGE": (is_bool, to_bool, bool_to_str), - "FOREIGN_ALIASES_OVERRIDE": (is_bool, to_bool, bool_to_str), - "FUZZY_PATH_COMPLETION": (is_bool, to_bool, bool_to_str), - "GLOB_SORTED": (is_bool, to_bool, bool_to_str), - "HISTCONTROL": (is_string_set, csv_to_set, set_to_csv), - "IGNOREEOF": (is_bool, to_bool, bool_to_str), - "INTENSIFY_COLORS_ON_WIN": ( - always_false, - intensify_colors_on_win_setter, - bool_to_str, - ), - "LANG": (is_string, ensure_string, ensure_string), - "LC_COLLATE": (always_false, locale_convert("LC_COLLATE"), ensure_string), - "LC_CTYPE": (always_false, locale_convert("LC_CTYPE"), ensure_string), - "LC_MESSAGES": (always_false, locale_convert("LC_MESSAGES"), ensure_string), - "LC_MONETARY": (always_false, locale_convert("LC_MONETARY"), ensure_string), - "LC_NUMERIC": (always_false, locale_convert("LC_NUMERIC"), ensure_string), - "LC_TIME": (always_false, locale_convert("LC_TIME"), ensure_string), - "LS_COLORS": (is_lscolors, LsColors.convert, detype), - "LOADED_RC_FILES": (is_bool_seq, csv_to_bool_seq, bool_seq_to_csv), - "MOUSE_SUPPORT": (is_bool, to_bool, bool_to_str), - "MULTILINE_PROMPT": (is_string_or_callable, ensure_string, ensure_string), - re.compile(r"\w*PATH$"): (is_env_path, str_to_env_path, env_path_to_str), - "PATHEXT": ( - is_nonstring_seq_of_strings, - pathsep_to_upper_seq, - seq_to_upper_pathsep, - ), - "PRETTY_PRINT_RESULTS": (is_bool, to_bool, bool_to_str), - "PROMPT": (is_string_or_callable, ensure_string, ensure_string), - "PROMPT_FIELDS": (always_true, None, None), - "PROMPT_REFRESH_INTERVAL": (is_float, float, str), - "PROMPT_TOOLKIT_COLOR_DEPTH": ( - always_false, - ptk2_color_depth_setter, - ensure_string, - ), - "PUSHD_MINUS": (is_bool, to_bool, bool_to_str), - "PUSHD_SILENT": (is_bool, to_bool, bool_to_str), - "PTK_STYLE_OVERRIDES": (is_str_str_dict, to_str_str_dict, dict_to_str), - "RAISE_SUBPROC_ERROR": (is_bool, to_bool, bool_to_str), - "RIGHT_PROMPT": (is_string_or_callable, ensure_string, ensure_string), - "BOTTOM_TOOLBAR": (is_string_or_callable, ensure_string, ensure_string), - "SUBSEQUENCE_PATH_COMPLETION": (is_bool, to_bool, bool_to_str), - "SUGGEST_COMMANDS": (is_bool, to_bool, bool_to_str), - "SUGGEST_MAX_NUM": (is_int, int, str), - "SUGGEST_THRESHOLD": (is_int, int, str), - "SUPPRESS_BRANCH_TIMEOUT_MESSAGE": (is_bool, to_bool, bool_to_str), - "THREAD_SUBPROCS": (is_bool, to_bool, bool_to_str), - "UPDATE_COMPLETIONS_ON_KEYPRESS": (is_bool, to_bool, bool_to_str), - "UPDATE_OS_ENVIRON": (is_bool, to_bool, bool_to_str), - "UPDATE_PROMPT_ON_KEYPRESS": (is_bool, to_bool, bool_to_str), - "VC_BRANCH_TIMEOUT": (is_float, float, str), - "VC_HG_SHOW_BRANCH": (is_bool, to_bool, bool_to_str), - "VI_MODE": (is_bool, to_bool, bool_to_str), - "VIRTUAL_ENV": (is_string, ensure_string, ensure_string), - "XONSHRC": (is_env_path, str_to_env_path, env_path_to_str), - "XONSH_APPEND_NEWLINE": (is_bool, to_bool, bool_to_str), - "XONSH_AUTOPAIR": (is_bool, to_bool, bool_to_str), - "XONSH_CACHE_SCRIPTS": (is_bool, to_bool, bool_to_str), - "XONSH_CACHE_EVERYTHING": (is_bool, to_bool, bool_to_str), - "XONSH_COLOR_STYLE": (is_string, ensure_string, ensure_string), - "XONSH_DEBUG": (always_false, to_debug, bool_or_int_to_str), - "XONSH_ENCODING": (is_string, ensure_string, ensure_string), - "XONSH_ENCODING_ERRORS": (is_string, ensure_string, ensure_string), - "XONSH_HISTORY_BACKEND": (is_history_backend, to_itself, ensure_string), - "XONSH_HISTORY_FILE": (is_string, ensure_string, ensure_string), - "XONSH_HISTORY_MATCH_ANYWHERE": (is_bool, to_bool, bool_to_str), - "XONSH_HISTORY_SIZE": ( - is_history_tuple, - to_history_tuple, - history_tuple_to_str, - ), - "XONSH_LOGIN": (is_bool, to_bool, bool_to_str), - "XONSH_PROC_FREQUENCY": (is_float, float, str), - "XONSH_SHOW_TRACEBACK": (is_bool, to_bool, bool_to_str), - "XONSH_STDERR_PREFIX": (is_string, ensure_string, ensure_string), - "XONSH_STDERR_POSTFIX": (is_string, ensure_string, ensure_string), - "XONSH_STORE_STDOUT": (is_bool, to_bool, bool_to_str), - "XONSH_STORE_STDIN": (is_bool, to_bool, bool_to_str), - "XONSH_TRACE_SUBPROC": (is_bool, to_bool, bool_to_str), - "XONSH_TRACEBACK_LOGFILE": (is_logfile_opt, to_logfile_opt, logfile_opt_to_str), - "XONSH_DATETIME_FORMAT": (is_string, ensure_string, ensure_string), - } +# we use this as a registry of common ensurers; valuable for user interface +ENSURERS = { + "bool": (is_bool, to_bool, bool_to_str), + "str": (is_string, ensure_string, ensure_string), + "path": (is_env_path, str_to_env_path, env_path_to_str), + "float": (is_float, float, str), + "int": (is_int, int, str), +} # @@ -715,161 +619,110 @@ def default_lscolors(env): return lsc -# Default values should generally be immutable, that way if a user wants -# to set them they have to do a copy and write them to the environment. -# try to keep this sorted. -@lazyobject -def DEFAULT_VALUES(): - dv = { - "AUTO_CD": False, - "AUTO_PUSHD": False, - "AUTO_SUGGEST": True, - "AUTO_SUGGEST_IN_COMPLETIONS": False, - "BASH_COMPLETIONS": BASH_COMPLETIONS_DEFAULT, - "CASE_SENSITIVE_COMPLETIONS": ON_LINUX, - "CDPATH": (), - "COLOR_INPUT": True, - "COLOR_RESULTS": True, - "COMPLETIONS_BRACKETS": True, - "COMPLETIONS_CONFIRM": False, - "COMPLETIONS_DISPLAY": "multi", - "COMPLETIONS_MENU_ROWS": 5, - "COMPLETION_QUERY_LIMIT": 100, - "COMPLETION_IN_THREAD": False, - "DIRSTACK_SIZE": 20, - "DOTGLOB": False, - "DYNAMIC_CWD_WIDTH": (float("inf"), "c"), - "DYNAMIC_CWD_ELISION_CHAR": "", - "EXPAND_ENV_VARS": True, - "FORCE_POSIX_PATHS": False, - "FOREIGN_ALIASES_SUPPRESS_SKIP_MESSAGE": False, - "FOREIGN_ALIASES_OVERRIDE": False, - "PROMPT_FIELDS": dict(prompt.PROMPT_FIELDS), - "FUZZY_PATH_COMPLETION": True, - "GLOB_SORTED": True, - "HISTCONTROL": set(), - "IGNOREEOF": False, - "INDENT": " ", - "INTENSIFY_COLORS_ON_WIN": True, - "LANG": "C.UTF-8", - "LC_CTYPE": locale.setlocale(locale.LC_CTYPE), - "LC_COLLATE": locale.setlocale(locale.LC_COLLATE), - "LC_TIME": locale.setlocale(locale.LC_TIME), - "LC_MONETARY": locale.setlocale(locale.LC_MONETARY), - "LC_NUMERIC": locale.setlocale(locale.LC_NUMERIC), - "LS_COLORS": default_lscolors, - "LOADED_RC_FILES": (), - "MOUSE_SUPPORT": False, - "MULTILINE_PROMPT": ".", - "PATH": PATH_DEFAULT, - "PATHEXT": [".COM", ".EXE", ".BAT", ".CMD"] if ON_WINDOWS else [], - "PRETTY_PRINT_RESULTS": True, - "PROMPT": prompt.default_prompt(), - "PROMPT_REFRESH_INTERVAL": 0, - "PROMPT_TOOLKIT_COLOR_DEPTH": "", - "PTK_STYLE_OVERRIDES": dict(PTK2_STYLE), - "PUSHD_MINUS": False, - "PUSHD_SILENT": False, - "RAISE_SUBPROC_ERROR": False, - "RIGHT_PROMPT": "", - "BOTTOM_TOOLBAR": "", - "SHELL_TYPE": "best", - "SUBSEQUENCE_PATH_COMPLETION": True, - "SUPPRESS_BRANCH_TIMEOUT_MESSAGE": False, - "SUGGEST_COMMANDS": True, - "SUGGEST_MAX_NUM": 5, - "SUGGEST_THRESHOLD": 3, - "THREAD_SUBPROCS": True, - "TITLE": DEFAULT_TITLE, - "UPDATE_COMPLETIONS_ON_KEYPRESS": False, - "UPDATE_OS_ENVIRON": False, - "UPDATE_PROMPT_ON_KEYPRESS": False, - "VC_BRANCH_TIMEOUT": 0.2 if ON_WINDOWS else 0.1, - "VC_HG_SHOW_BRANCH": True, - "VI_MODE": False, - "XDG_CONFIG_HOME": os.path.expanduser(os.path.join("~", ".config")), - "XDG_DATA_HOME": os.path.expanduser(os.path.join("~", ".local", "share")), - "XONSHRC": default_xonshrc, - "XONSH_APPEND_NEWLINE": xonsh_append_newline, - "XONSH_AUTOPAIR": False, - "XONSH_CACHE_SCRIPTS": True, - "XONSH_CACHE_EVERYTHING": False, - "XONSH_COLOR_STYLE": "default", - "XONSH_CONFIG_DIR": xonsh_config_dir, - "XONSH_DATA_DIR": xonsh_data_dir, - "XONSH_DEBUG": 0, - "XONSH_ENCODING": DEFAULT_ENCODING, - "XONSH_ENCODING_ERRORS": "surrogateescape", - "XONSH_HISTORY_BACKEND": "json", - "XONSH_HISTORY_FILE": os.path.expanduser("~/.xonsh_history.json"), - "XONSH_HISTORY_MATCH_ANYWHERE": False, - "XONSH_HISTORY_SIZE": (8128, "commands"), - "XONSH_LOGIN": False, - "XONSH_PROC_FREQUENCY": 1e-4, - "XONSH_TRACE_SUBPROC": False, - "XONSH_SHOW_TRACEBACK": False, - "XONSH_STDERR_PREFIX": "", - "XONSH_STDERR_POSTFIX": "", - "XONSH_STORE_STDIN": False, - "XONSH_STORE_STDOUT": False, - "XONSH_TRACEBACK_LOGFILE": None, - "XONSH_DATETIME_FORMAT": "%Y-%m-%d %H:%M", - } - if hasattr(locale, "LC_MESSAGES"): - dv["LC_MESSAGES"] = locale.setlocale(locale.LC_MESSAGES) - return dv - - -VarDocs = collections.namedtuple( - "VarDocs", ["docstr", "configurable", "default", "store_as_str"] +Var = collections.namedtuple( + "Var", + [ + "validate", + "convert", + "detype", + "default", + "doc", + "doc_configurable", + "doc_default", + "doc_store_as_str", + ], ) -VarDocs.__doc__ = """Named tuple for environment variable documentation +Var.__doc__ = """Named tuples whose elements represent environment variable +validation, conversion, detyping; default values; and documentation. Parameters ---------- -docstr : str +validate : func + Validator function returning a bool; checks that the variable is of the + expected type. +convert : func + Function to convert variable from a string representation to its type. +detype : func + Function to convert variable from its type to a string representation. +default + Default value for variable. +doc : str The environment variable docstring. -configurable : bool, optional +doc_configurable : bool, optional Flag for whether the environment variable is configurable or not. -default : str, optional +doc_default : str, optional Custom docstring for the default value for complex defaults. Is this is DefaultNotGiven, then the default will be looked up from DEFAULT_VALUES and converted to a str. -store_as_str : bool, optional +doc_store_as_str : bool, optional Flag for whether the environment variable should be stored as a string. This is used when persisting a variable that is not JSON serializable to the config file. For example, sets, frozensets, and potentially other non-trivial data types. default, False. """ + # iterates from back -VarDocs.__new__.__defaults__ = (True, DefaultNotGiven, False) +Var.__new__.__defaults__ = ( + always_true, + None, + ensure_string, + None, + "", + True, + DefaultNotGiven, + False, +) # Please keep the following in alphabetic order - scopatz @lazyobject -def DEFAULT_DOCS(): - return { - "ANSICON": VarDocs( - "This is used on Windows to set the title, " "if available.", - configurable=False, +def DEFAULT_VARS(): + dv = { + "ANSICON": Var( + is_string, + ensure_string, + ensure_string, + "", + "This is used on Windows to set the title, if available.", + doc_configurable=False, ), - "AUTO_CD": VarDocs( + "AUTO_CD": Var( + is_bool, + to_bool, + bool_to_str, + False, "Flag to enable changing to a directory by entering the dirname or " - "full path only (without the cd command)." + "full path only (without the cd command).", ), - "AUTO_PUSHD": VarDocs( - "Flag for automatically pushing directories onto the directory stack." + "AUTO_PUSHD": Var( + is_bool, + to_bool, + bool_to_str, + False, + "Flag for automatically pushing directories onto the directory stack.", ), - "AUTO_SUGGEST": VarDocs( + "AUTO_SUGGEST": Var( + is_bool, + to_bool, + bool_to_str, + True, "Enable automatic command suggestions based on history, like in the fish " "shell.\n\nPressing the right arrow key inserts the currently " - "displayed suggestion. Only usable with ``$SHELL_TYPE=prompt_toolkit.``" + "displayed suggestion. Only usable with ``$SHELL_TYPE=prompt_toolkit.``", ), - "AUTO_SUGGEST_IN_COMPLETIONS": VarDocs( + "AUTO_SUGGEST_IN_COMPLETIONS": Var( + is_bool, + to_bool, + bool_to_str, + False, "Places the auto-suggest result as the first option in the completions. " - "This enables you to tab complete the auto-suggestion." + "This enables you to tab complete the auto-suggestion.", ), - "BASH_COMPLETIONS": VarDocs( + "BASH_COMPLETIONS": Var( + is_env_path, + str_to_env_path, + env_path_to_str, + BASH_COMPLETIONS_DEFAULT, "This is a list (or tuple) of strings that specifies where the " "``bash_completion`` script may be found. " "The first valid path will be used. For better performance, " @@ -880,7 +733,7 @@ def DEFAULT_DOCS(): "The default values are platform " "dependent, but sane. To specify an alternate list, do so in the run " "control file.", - default=( + doc_default=( "Normally this is:\n\n" " ``('/usr/share/bash-completion/bash_completion', )``\n\n" "But, on Mac it is:\n\n" @@ -889,22 +742,59 @@ def DEFAULT_DOCS(): "Other OS-specific defaults may be added in the future." ), ), - "CASE_SENSITIVE_COMPLETIONS": VarDocs( + "CASE_SENSITIVE_COMPLETIONS": Var( + is_bool, + to_bool, + bool_to_str, + ON_LINUX, "Sets whether completions should be case sensitive or case " "insensitive.", - default="True on Linux, False otherwise.", + doc_default="True on Linux, False otherwise.", ), - "CDPATH": VarDocs( + "CDPATH": Var( + is_env_path, + str_to_env_path, + env_path_to_str, + (), "A list of paths to be used as roots for a cd, breaking compatibility " - "with Bash, xonsh always prefer an existing relative path." + "with Bash, xonsh always prefer an existing relative path.", ), - "COLOR_INPUT": VarDocs("Flag for syntax highlighting interactive input."), - "COLOR_RESULTS": VarDocs("Flag for syntax highlighting return values."), - "COMPLETIONS_BRACKETS": VarDocs( + "COLOR_INPUT": Var( + is_bool, + to_bool, + bool_to_str, + True, + "Flag for syntax highlighting interactive input.", + ), + "COLOR_RESULTS": Var( + is_bool, + to_bool, + bool_to_str, + True, + "Flag for syntax highlighting return values.", + ), + "COMPLETIONS_BRACKETS": Var( + is_bool, + to_bool, + bool_to_str, + True, "Flag to enable/disable inclusion of square brackets and parentheses " "in Python attribute completions.", - default="True", + doc_default="True", ), - "COMPLETIONS_DISPLAY": VarDocs( + "COMPLETIONS_CONFIRM": Var( + is_bool, + to_bool, + bool_to_str, + False, + "While tab-completions menu is displayed, press to confirm " + "completion instead of running command. This only affects the " + "prompt-toolkit shell.", + ), + "COMPLETIONS_DISPLAY": Var( + is_completions_display_value, + to_completions_display_value, + str, + "multi", "Configure if and how Python completions are displayed by the " "``prompt_toolkit`` shell.\n\nThis option does not affect Bash " "completions, auto-suggestions, etc.\n\nChanging it at runtime will " @@ -921,85 +811,127 @@ def DEFAULT_DOCS(): "These option values are not case- or type-sensitive, so e.g. " "writing ``$COMPLETIONS_DISPLAY = None`` " "and ``$COMPLETIONS_DISPLAY = 'none'`` are equivalent. Only usable with " - "``$SHELL_TYPE=prompt_toolkit``" + "``$SHELL_TYPE=prompt_toolkit``", ), - "COMPLETIONS_CONFIRM": VarDocs( - "While tab-completions menu is displayed, press to confirm " - "completion instead of running command. This only affects the " - "prompt-toolkit shell." - ), - "COMPLETIONS_MENU_ROWS": VarDocs( + "COMPLETIONS_MENU_ROWS": Var( + is_int, + int, + str, + 5, "Number of rows to reserve for tab-completions menu if " "``$COMPLETIONS_DISPLAY`` is ``single`` or ``multi``. This only affects the " - "prompt-toolkit shell." + "prompt-toolkit shell.", ), - "COMPLETION_QUERY_LIMIT": VarDocs( + "COMPLETION_QUERY_LIMIT": Var( + is_int, + int, + str, + 100, "The number of completions to display before the user is asked " - "for confirmation." + "for confirmation.", ), - "COMPLETION_IN_THREAD": VarDocs( + "COMPLETION_IN_THREAD": Var( + is_bool, + to_bool, + bool_to_str, + False, "When generating the completions takes time, " "it’s better to do this in a background thread. " - "When this is True, background threads is used for completion." + "When this is True, background threads is used for completion.", ), - "DIRSTACK_SIZE": VarDocs("Maximum size of the directory stack."), - "DOTGLOB": VarDocs( + "DIRSTACK_SIZE": Var( + is_int, int, str, 20, "Maximum size of the directory stack." + ), + "DOTGLOB": Var( + is_bool, + to_bool, + bool_to_str, + False, 'Globbing files with "*" or "**" will also match ' "dotfiles, or those 'hidden' files whose names " "begin with a literal '.'. Such files are filtered " - "out by default." + "out by default.", ), - "DYNAMIC_CWD_WIDTH": VarDocs( + "DYNAMIC_CWD_WIDTH": Var( + is_dynamic_cwd_width, + to_dynamic_cwd_tuple, + dynamic_cwd_tuple_to_str, + (float("inf"), "c"), "Maximum length in number of characters " "or as a percentage for the ``cwd`` prompt variable. For example, " '"20" is a twenty character width and "10%" is ten percent of the ' - "number of columns available." + "number of columns available.", ), - "DYNAMIC_CWD_ELISION_CHAR": VarDocs( + "DYNAMIC_CWD_ELISION_CHAR": Var( + is_string, + ensure_string, + ensure_string, + "", "The string used to show a shortened directory in a shortened cwd, " - "e.g. ``'…'``." + "e.g. ``'…'``.", ), - "EXPAND_ENV_VARS": VarDocs( + "EXPAND_ENV_VARS": Var( + is_bool, + to_bool, + bool_to_str, + True, "Toggles whether environment variables are expanded inside of strings " - "in subprocess mode." + "in subprocess mode.", ), - "FORCE_POSIX_PATHS": VarDocs( + "FORCE_POSIX_PATHS": Var( + is_bool, + to_bool, + bool_to_str, + False, "Forces forward slashes (``/``) on Windows systems when using auto " "completion if set to anything truthy.", - configurable=ON_WINDOWS, + doc_configurable=ON_WINDOWS, ), - "FOREIGN_ALIASES_SUPPRESS_SKIP_MESSAGE": VarDocs( + "FOREIGN_ALIASES_SUPPRESS_SKIP_MESSAGE": Var( + is_bool, + to_bool, + bool_to_str, + False, "Whether or not foreign aliases should suppress the message " "that informs the user when a foreign alias has been skipped " "because it already exists in xonsh.", - configurable=True, + doc_configurable=True, ), - "FOREIGN_ALIASES_OVERRIDE": VarDocs( + "FOREIGN_ALIASES_OVERRIDE": Var( + is_bool, + to_bool, + bool_to_str, + False, "Whether or not foreign aliases should override xonsh aliases " "with the same name. Note that setting of this must happen in the " "environment that xonsh was started from. " "It cannot be set in the ``.xonshrc`` as loading of foreign aliases happens before" "``.xonshrc`` is parsed", - configurable=True, + doc_configurable=True, ), - "PROMPT_FIELDS": VarDocs( - "Dictionary containing variables to be used when formatting $PROMPT " - "and $TITLE. See 'Customizing the Prompt' " - "http://xon.sh/tutorial.html#customizing-the-prompt", - configurable=False, - default="``xonsh.prompt.PROMPT_FIELDS``", - ), - "FUZZY_PATH_COMPLETION": VarDocs( + "FUZZY_PATH_COMPLETION": Var( + is_bool, + to_bool, + bool_to_str, + True, "Toggles 'fuzzy' matching of paths for tab completion, which is only " "used as a fallback if no other completions succeed but can be used " "as a way to adjust for typographical errors. If ``True``, then, e.g.," - " ``xonhs`` will match ``xonsh``." + " ``xonhs`` will match ``xonsh``.", ), - "GLOB_SORTED": VarDocs( + "GLOB_SORTED": Var( + is_bool, + to_bool, + bool_to_str, + True, "Toggles whether globbing results are manually sorted. If ``False``, " - "the results are returned in arbitrary order." + "the results are returned in arbitrary order.", ), - "HISTCONTROL": VarDocs( + "HISTCONTROL": Var( + is_string_set, + csv_to_set, + set_to_csv, + set(), "A set of strings (comma-separated list in string form) of options " "that determine what commands are saved to the history list. By " "default all commands are saved. The option ``ignoredups`` will not " @@ -1008,22 +940,78 @@ def DEFAULT_DOCS(): "exit status) to not be added to the history list. The option " "``erasedups`` will remove all previous commands that matches and updates the frequency. " "Note: ``erasedups`` is supported only in sqlite backend).", - store_as_str=True, + doc_store_as_str=True, ), - "IGNOREEOF": VarDocs("Prevents Ctrl-D from exiting the shell."), - "INDENT": VarDocs("Indentation string for multiline input"), - "INTENSIFY_COLORS_ON_WIN": VarDocs( + "IGNOREEOF": Var( + is_bool, + to_bool, + bool_to_str, + False, + "Prevents Ctrl-D from exiting the shell.", + ), + "INDENT": Var( + is_string, + ensure_string, + ensure_string, + " ", + "Indentation string for multiline input", + ), + "INTENSIFY_COLORS_ON_WIN": Var( + always_false, + intensify_colors_on_win_setter, + bool_to_str, + True, "Enhance style colors for readability " "when using the default terminal (``cmd.exe``) on Windows. Blue colors, " "which are hard to read, are replaced with cyan. Other colors are " "generally replaced by their bright counter parts.", - configurable=ON_WINDOWS, + doc_configurable=ON_WINDOWS, ), - "LANG": VarDocs("Fallback locale setting for systems where it matters"), - "LS_COLORS": VarDocs( + "LANG": Var( + is_string, + ensure_string, + ensure_string, + "C.UTF-8", + "Fallback locale setting for systems where it matters", + ), + "LC_COLLATE": Var( + always_false, + locale_convert("LC_COLLATE"), + ensure_string, + locale.setlocale(locale.LC_COLLATE), + ), + "LC_CTYPE": Var( + always_false, + locale_convert("LC_CTYPE"), + ensure_string, + locale.setlocale(locale.LC_CTYPE), + ), + "LC_MONETARY": Var( + always_false, + locale_convert("LC_MONETARY"), + ensure_string, + locale.setlocale(locale.LC_MONETARY), + ), + "LC_NUMERIC": Var( + always_false, + locale_convert("LC_NUMERIC"), + ensure_string, + locale.setlocale(locale.LC_NUMERIC), + ), + "LC_TIME": Var( + always_false, + locale_convert("LC_TIME"), + ensure_string, + locale.setlocale(locale.LC_TIME), + ), + "LS_COLORS": Var( + is_lscolors, + LsColors.convert, + detype, + default_lscolors, "Color settings for ``ls`` command line utility and, " "with ``$SHELL_TYPE='prompt_toolkit'``, file arguments in subprocess mode.", - default="``*.7z=1;0;31:*.Z=1;0;31:*.aac=0;36:*.ace=1;0;31:" + doc_default="``*.7z=1;0;31:*.Z=1;0;31:*.aac=0;36:*.ace=1;0;31:" "*.alz=1;0;31:*.arc=1;0;31:*.arj=1;0;31:*.asf=1;0;35:*.au=0;36:" "*.avi=1;0;35:*.bmp=1;0;35:*.bz=1;0;31:*.bz2=1;0;31:*.cab=1;0;31:" "*.cgm=1;0;35:*.cpio=1;0;31:*.deb=1;0;31:*.dl=1;0;35:*.dwm=1;0;31:" @@ -1050,31 +1038,51 @@ def DEFAULT_DOCS(): "or=40;0;31:ow=0;34;42:pi=40;0;33:rs=0:sg=0;30;43:so=1;0;35:" "st=0;37;44:su=0;37;41:tw=0;30;42``", ), - "LOADED_RC_FILES": VarDocs( + "LOADED_RC_FILES": Var( + is_bool_seq, + csv_to_bool_seq, + bool_seq_to_csv, + (), "Whether or not any of the xonsh run control files were loaded at " "startup. This is a sequence of bools in Python that is converted " "to a CSV list in string form, ie ``[True, False]`` becomes " "``'True,False'``.", - configurable=False, + doc_configurable=False, ), - "MOUSE_SUPPORT": VarDocs( + "MOUSE_SUPPORT": Var( + is_bool, + to_bool, + bool_to_str, + False, "Enable mouse support in the ``prompt_toolkit`` shell. This allows " "clicking for positioning the cursor or selecting a completion. In " "some terminals however, this disables the ability to scroll back " "through the history of the terminal. Only usable with " - "``$SHELL_TYPE=prompt_toolkit``" + "``$SHELL_TYPE=prompt_toolkit``", ), - "MULTILINE_PROMPT": VarDocs( + "MULTILINE_PROMPT": Var( + is_string_or_callable, + ensure_string, + ensure_string, + ".", "Prompt text for 2nd+ lines of input, may be str or function which " - "returns a str." + "returns a str.", ), - "OLDPWD": VarDocs( + "OLDPWD": Var( + is_string, + ensure_string, + ensure_string, + ".", "Used to represent a previous present working directory.", - configurable=False, + doc_configurable=False, ), - "PATH": VarDocs( + "PATH": Var( + is_env_path, + str_to_env_path, + env_path_to_str, + PATH_DEFAULT, "List of strings representing where to look for executables.", - default="On Windows: it is ``Path`` value of register's " + doc_default="On Windows: it is ``Path`` value of register's " "``HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment``. " "On Mac OSX: ``('/usr/local/bin', '/usr/bin', '/bin', '/usr/sbin', '/sbin')`` " "On Linux & on Cygwin & on MSYS, when detected that the distro " @@ -1085,59 +1093,122 @@ def DEFAULT_DOCS(): "``('~/bin', '/usr/local/sbin', '/usr/local/bin', '/usr/sbin'," "'/usr/bin', '/sbin', '/bin', '/usr/games', '/usr/local/games')``", ), - "PATHEXT": VarDocs( + re.compile(r"\w*PATH$"): Var(is_env_path, str_to_env_path, env_path_to_str), + "PATHEXT": Var( + is_nonstring_seq_of_strings, + pathsep_to_upper_seq, + seq_to_upper_pathsep, + [".COM", ".EXE", ".BAT", ".CMD"] if ON_WINDOWS else [], "Sequence of extension strings (eg, ``.EXE``) for " "filtering valid executables by. Each element must be " - "uppercase." + "uppercase.", ), - "PRETTY_PRINT_RESULTS": VarDocs('Flag for "pretty printing" return values.'), - "PROMPT": VarDocs( + "PRETTY_PRINT_RESULTS": Var( + is_bool, + to_bool, + bool_to_str, + True, + 'Flag for "pretty printing" return values.', + ), + "PROMPT": Var( + is_string_or_callable, + ensure_string, + ensure_string, + prompt.default_prompt(), "The prompt text. May contain keyword arguments which are " "auto-formatted, see 'Customizing the Prompt' at " "http://xon.sh/tutorial.html#customizing-the-prompt. " "This value is never inherited from parent processes.", - default="``xonsh.environ.DEFAULT_PROMPT``", + doc_default="``xonsh.environ.DEFAULT_PROMPT``", ), - "PROMPT_REFRESH_INTERVAL": VarDocs( + "PROMPT_FIELDS": Var( + always_true, + None, + None, + prompt.PROMPT_FIELDS, + "Dictionary containing variables to be used when formatting $PROMPT " + "and $TITLE. See 'Customizing the Prompt' " + "http://xon.sh/tutorial.html#customizing-the-prompt", + doc_configurable=False, + doc_default="``xonsh.prompt.PROMPT_FIELDS``", + ), + "PROMPT_REFRESH_INTERVAL": Var( + is_float, + float, + str, + 0, "Interval (in seconds) to evaluate and update ``$PROMPT``, ``$RIGHT_PROMPT`` " "and ``$BOTTOM_TOOLBAR``. The default is zero (no update). " "NOTE: ``$UPDATE_PROMPT_ON_KEYPRESS`` must be set to ``True`` for this " - "variable to take effect." + "variable to take effect.", ), - "PROMPT_TOOLKIT_COLOR_DEPTH": VarDocs( + "PROMPT_TOOLKIT_COLOR_DEPTH": Var( + always_false, + ptk2_color_depth_setter, + ensure_string, + "", "The color depth used by prompt toolkit 2. Possible values are: " "``DEPTH_1_BIT``, ``DEPTH_4_BIT``, ``DEPTH_8_BIT``, ``DEPTH_24_BIT`` " - "colors. Default is an empty string which means that prompt toolkit decide." + "colors. Default is an empty string which means that prompt toolkit decide.", ), - "PTK_STYLE_OVERRIDES": VarDocs( - "A dictionary containing custom prompt_toolkit style definitions." + "PTK_STYLE_OVERRIDES": Var( + is_str_str_dict, + to_str_str_dict, + dict_to_str, + dict(PTK2_STYLE), + "A dictionary containing custom prompt_toolkit style definitions.", ), - "PUSHD_MINUS": VarDocs( - "Flag for directory pushing functionality. False is the normal " "behavior." + "PUSHD_MINUS": Var( + is_bool, + to_bool, + bool_to_str, + False, + "Flag for directory pushing functionality. False is the normal " + "behavior.", ), - "PUSHD_SILENT": VarDocs( - "Whether or not to suppress directory stack manipulation output." + "PUSHD_SILENT": Var( + is_bool, + to_bool, + bool_to_str, + False, + "Whether or not to suppress directory stack manipulation output.", ), - "RAISE_SUBPROC_ERROR": VarDocs( + "RAISE_SUBPROC_ERROR": Var( + is_bool, + to_bool, + bool_to_str, + False, "Whether or not to raise an error if a subprocess (captured or " "uncaptured) returns a non-zero exit status, which indicates failure. " "This is most useful in xonsh scripts or modules where failures " "should cause an end to execution. This is less useful at a terminal. " - "The error that is raised is a ``subprocess.CalledProcessError``." + "The error that is raised is a ``subprocess.CalledProcessError``.", ), - "RIGHT_PROMPT": VarDocs( + "RIGHT_PROMPT": Var( + is_string_or_callable, + ensure_string, + ensure_string, + "", "Template string for right-aligned text " "at the prompt. This may be parametrized in the same way as " "the ``$PROMPT`` variable. Currently, this is only available in the " - "prompt-toolkit shell." + "prompt-toolkit shell.", ), - "BOTTOM_TOOLBAR": VarDocs( + "BOTTOM_TOOLBAR": Var( + is_string_or_callable, + ensure_string, + ensure_string, + "", "Template string for the bottom toolbar. " "This may be parametrized in the same way as " "the ``$PROMPT`` variable. Currently, this is only available in the " - "prompt-toolkit shell." + "prompt-toolkit shell.", ), - "SHELL_TYPE": VarDocs( + "SHELL_TYPE": Var( + is_string, + ensure_string, + ensure_string, + "best", "Which shell is used. Currently two base shell types are supported:\n\n" " - ``readline`` that is backed by Python's readline module\n" " - ``prompt_toolkit`` that uses external library of the same name\n" @@ -1148,31 +1219,55 @@ def DEFAULT_DOCS(): "`prompt_toolkit `_" " library installed. To specify which shell should be used, do so in " "the run control file.", - default="``best``", + doc_default="``best``", ), - "SUBSEQUENCE_PATH_COMPLETION": VarDocs( + "SUBSEQUENCE_PATH_COMPLETION": Var( + is_bool, + to_bool, + bool_to_str, + True, "Toggles subsequence matching of paths for tab completion. " - "If ``True``, then, e.g., ``~/u/ro`` can match ``~/lou/carcolh``." + "If ``True``, then, e.g., ``~/u/ro`` can match ``~/lou/carcolh``.", ), - "SUGGEST_COMMANDS": VarDocs( + "SUGGEST_COMMANDS": Var( + is_bool, + to_bool, + bool_to_str, + True, "When a user types an invalid command, xonsh will try to offer " - "suggestions of similar valid commands if this is True." + "suggestions of similar valid commands if this is True.", ), - "SUGGEST_MAX_NUM": VarDocs( + "SUGGEST_MAX_NUM": Var( + is_int, + int, + str, + 5, "xonsh will show at most this many suggestions in response to an " "invalid command. If negative, there is no limit to how many " - "suggestions are shown." + "suggestions are shown.", ), - "SUGGEST_THRESHOLD": VarDocs( + "SUGGEST_THRESHOLD": Var( + is_int, + int, + str, + 3, "An error threshold. If the Levenshtein distance between the entered " "command and a valid command is less than this value, the valid " 'command will be offered as a suggestion. Also used for "fuzzy" ' - "tab completion of paths." + "tab completion of paths.", ), - "SUPPRESS_BRANCH_TIMEOUT_MESSAGE": VarDocs( - "Whether or not to suppress branch timeout warning messages." + "SUPPRESS_BRANCH_TIMEOUT_MESSAGE": Var( + is_bool, + to_bool, + bool_to_str, + False, + "Whether or not to suppress branch timeout warning messages.", ), - "TERM": VarDocs( + "TERM": Var( + is_string, + ensure_string, + ensure_string, + "", "TERM is sometimes set by the terminal emulator. This is used (when " "valid) to determine whether or not to set the title. Users shouldn't " "need to set this themselves. Note that this variable should be set as " @@ -1186,9 +1281,13 @@ def DEFAULT_DOCS(): "* Lastly, in xonshrc with ``$TERM``\n\n" "Ideally, your terminal emulator will set this correctly but that does " "not always happen.", - configurable=False, + doc_configurable=False, ), - "THREAD_SUBPROCS": VarDocs( + "THREAD_SUBPROCS": Var( + is_bool, + to_bool, + bool_to_str, + True, "Whether or not to try to run subrocess mode in a Python thread, " "when applicable. There are various trade-offs, which normally " "affects only interactive sessions.\n\nWhen True:\n\n" @@ -1206,116 +1305,213 @@ def DEFAULT_DOCS(): "* Stopping the thread with ``Ctrl+Z`` yields to job control.\n" "* Threadable commands are run with ``Popen`` and threadable \n" " alias are run with ``ProcProxy``.\n\n" - "The desired effect is often up to the command, user, or use case." + "The desired effect is often up to the command, user, or use case.", ), - "TITLE": VarDocs( + "TITLE": Var( + is_string, + ensure_string, + ensure_string, + DEFAULT_TITLE, "The title text for the window in which xonsh is running. Formatted " "in the same manner as ``$PROMPT``, see 'Customizing the Prompt' " "http://xon.sh/tutorial.html#customizing-the-prompt.", - default="``xonsh.environ.DEFAULT_TITLE``", + doc_default="``xonsh.environ.DEFAULT_TITLE``", ), - "UPDATE_COMPLETIONS_ON_KEYPRESS": VarDocs( + "UPDATE_COMPLETIONS_ON_KEYPRESS": Var( + is_bool, + to_bool, + bool_to_str, + False, "Completions display is evaluated and presented whenever a key is " "pressed. This avoids the need to press TAB, except to cycle through " - "the possibilities. This currently only affects the prompt-toolkit shell." + "the possibilities. This currently only affects the prompt-toolkit shell.", ), - "UPDATE_OS_ENVIRON": VarDocs( + "UPDATE_OS_ENVIRON": Var( + is_bool, + to_bool, + bool_to_str, + False, "If True ``os_environ`` will always be updated " "when the xonsh environment changes. The environment can be reset to " - "the default value by calling ``__xonsh__.env.undo_replace_env()``" + "the default value by calling ``__xonsh__.env.undo_replace_env()``", ), - "UPDATE_PROMPT_ON_KEYPRESS": VarDocs( + "UPDATE_PROMPT_ON_KEYPRESS": Var( + is_bool, + to_bool, + bool_to_str, + False, "Disables caching the prompt between commands, " "so that it would be reevaluated on each keypress. " - "Disabled by default because of the incurred performance penalty." + "Disabled by default because of the incurred performance penalty.", ), - "VC_BRANCH_TIMEOUT": VarDocs( + "VC_BRANCH_TIMEOUT": Var( + is_float, + float, + str, + 0.2 if ON_WINDOWS else 0.1, "The timeout (in seconds) for version control " "branch computations. This is a timeout per subprocess call, so the " - "total time to compute will be larger than this in many cases." + "total time to compute will be larger than this in many cases.", ), - "VC_HG_SHOW_BRANCH": VarDocs( - "Whether or not to show the Mercurial branch in the prompt." + "VC_HG_SHOW_BRANCH": Var( + is_bool, + to_bool, + bool_to_str, + True, + "Whether or not to show the Mercurial branch in the prompt.", ), - "VI_MODE": VarDocs( - "Flag to enable ``vi_mode`` in the ``prompt_toolkit`` shell." + "VI_MODE": Var( + is_bool, + to_bool, + bool_to_str, + False, + "Flag to enable ``vi_mode`` in the ``prompt_toolkit`` shell.", ), - "VIRTUAL_ENV": VarDocs( - "Path to the currently active Python environment.", configurable=False + "VIRTUAL_ENV": Var( + is_string, + ensure_string, + ensure_string, + "", + "Path to the currently active Python environment.", + doc_configurable=False, ), - "XDG_CONFIG_HOME": VarDocs( + "XDG_CONFIG_HOME": Var( + is_string, + ensure_string, + ensure_string, + os.path.expanduser(os.path.join("~", ".config")), "Open desktop standard configuration home dir. This is the same " "default as used in the standard.", - configurable=False, - default="``~/.config``", + doc_configurable=False, + doc_default="``~/.config``", ), - "XDG_DATA_HOME": VarDocs( + "XDG_DATA_HOME": Var( + is_string, + ensure_string, + ensure_string, + os.path.expanduser(os.path.join("~", ".local", "share")), "Open desktop standard data home dir. This is the same default as " "used in the standard.", - default="``~/.local/share``", + doc_default="``~/.local/share``", ), - "XONSHRC": VarDocs( + "XONSHRC": Var( + is_env_path, + str_to_env_path, + env_path_to_str, + default_xonshrc, "A list of the locations of run control files, if they exist. User " "defined run control file will supersede values set in system-wide " "control file if there is a naming collision.", - default=( + doc_default=( "On Linux & Mac OSX: ``['/etc/xonshrc', '~/.config/xonsh/rc.xsh', '~/.xonshrc']``\n" "\nOn Windows: " "``['%ALLUSERSPROFILE%\\\\xonsh\\\\xonshrc', '~/.config/xonsh/rc.xsh', '~/.xonshrc']``" ), ), - "XONSH_APPEND_NEWLINE": VarDocs( + "XONSH_APPEND_NEWLINE": Var( + is_bool, + to_bool, + bool_to_str, + xonsh_append_newline, "Append new line when a partial line is preserved in output.", - default="``$XONSH_INTERACTIVE``", + doc_default="``$XONSH_INTERACTIVE``", ), - "XONSH_AUTOPAIR": VarDocs( + "XONSH_AUTOPAIR": Var( + is_bool, + to_bool, + bool_to_str, + False, "Whether Xonsh will auto-insert matching parentheses, brackets, and " - "quotes. Only available under the prompt-toolkit shell." + "quotes. Only available under the prompt-toolkit shell.", ), - "XONSH_CACHE_SCRIPTS": VarDocs( + "XONSH_CACHE_SCRIPTS": Var( + is_bool, + to_bool, + bool_to_str, + True, "Controls whether the code for scripts run from xonsh will be cached" - " (``True``) or re-compiled each time (``False``)." + " (``True``) or re-compiled each time (``False``).", ), - "XONSH_CACHE_EVERYTHING": VarDocs( + "XONSH_CACHE_EVERYTHING": Var( + is_bool, + to_bool, + bool_to_str, + False, "Controls whether all code (including code entered at the interactive" - " prompt) will be cached." + " prompt) will be cached.", ), - "XONSH_COLOR_STYLE": VarDocs( + "XONSH_COLOR_STYLE": Var( + is_string, + ensure_string, + ensure_string, + "default", "Sets the color style for xonsh colors. This is a style name, not " - "a color map. Run ``xonfig styles`` to see the available styles." + "a color map. Run ``xonfig styles`` to see the available styles.", ), - "XONSH_CONFIG_DIR": VarDocs( + "XONSH_CONFIG_DIR": Var( + is_string, + ensure_string, + ensure_string, + xonsh_config_dir, "This is the location where xonsh configuration information is stored.", - configurable=False, - default="``$XDG_CONFIG_HOME/xonsh``", + doc_configurable=False, + doc_default="``$XDG_CONFIG_HOME/xonsh``", ), - "XONSH_DEBUG": VarDocs( + "XONSH_DATETIME_FORMAT": Var( + is_string, + ensure_string, + ensure_string, + "%Y-%m-%d %H:%M", + "The format that is used for ``datetime.strptime()`` in various places, " + "i.e the history timestamp option.", + ), + "XONSH_DEBUG": Var( + always_false, + to_debug, + bool_or_int_to_str, + 0, "Sets the xonsh debugging level. This may be an integer or a boolean. " "Setting this variable prior to stating xonsh to ``1`` or ``True`` " "will suppress amalgamated imports. Setting it to ``2`` will get some " "basic information like input transformation, command replacement. " "With ``3`` or a higher number will make more debugging information " "presented, like PLY parsing messages.", - configurable=False, + doc_configurable=False, ), - "XONSH_DATA_DIR": VarDocs( + "XONSH_DATA_DIR": Var( + is_string, + ensure_string, + ensure_string, + xonsh_data_dir, "This is the location where xonsh data files are stored, such as " "history.", - default="``$XDG_DATA_HOME/xonsh``", + doc_default="``$XDG_DATA_HOME/xonsh``", ), - "XONSH_ENCODING": VarDocs( + "XONSH_ENCODING": Var( + is_string, + ensure_string, + ensure_string, + DEFAULT_ENCODING, "This is the encoding that xonsh should use for subprocess operations.", - default="``sys.getdefaultencoding()``", + doc_default="``sys.getdefaultencoding()``", ), - "XONSH_ENCODING_ERRORS": VarDocs( + "XONSH_ENCODING_ERRORS": Var( + is_string, + ensure_string, + ensure_string, + "surrogateescape", "The flag for how to handle encoding errors should they happen. " "Any string flag that has been previously registered with Python " "is allowed. See the 'Python codecs documentation' " "(https://docs.python.org/3/library/codecs.html#error-handlers) " "for more information and available options.", - default="``surrogateescape``", + doc_default="``surrogateescape``", ), - "XONSH_GITSTATUS_*": VarDocs( + "XONSH_GITSTATUS_*": Var( + is_string, + ensure_string, + ensure_string, + "", "Symbols for gitstatus prompt. Default values are: \n\n" "* ``XONSH_GITSTATUS_HASH``: ``:``\n" "* ``XONSH_GITSTATUS_BRANCH``: ``{CYAN}``\n" @@ -1327,25 +1523,41 @@ def DEFAULT_DOCS(): "* ``XONSH_GITSTATUS_STASHED``: ``⚑``\n" "* ``XONSH_GITSTATUS_CLEAN``: ``{BOLD_GREEN}✓``\n" "* ``XONSH_GITSTATUS_AHEAD``: ``↑·``\n" - "* ``XONSH_GITSTATUS_BEHIND``: ``↓·``\n" + "* ``XONSH_GITSTATUS_BEHIND``: ``↓·``\n", ), - "XONSH_HISTORY_BACKEND": VarDocs( + "XONSH_HISTORY_BACKEND": Var( + is_history_backend, + to_itself, + ensure_string, + "json", "Set which history backend to use. Options are: 'json', " "'sqlite', and 'dummy'. The default is 'json'. " "``XONSH_HISTORY_BACKEND`` also accepts a class type that inherits " - "from ``xonsh.history.base.History``, or its instance." + "from ``xonsh.history.base.History``, or its instance.", ), - "XONSH_HISTORY_FILE": VarDocs( + "XONSH_HISTORY_FILE": Var( + is_string, + ensure_string, + ensure_string, + os.path.expanduser("~/.xonsh_history.json"), "Location of history file (deprecated).", - configurable=False, - default="``~/.xonsh_history``", + doc_configurable=False, + doc_default="``~/.xonsh_history``", ), - "XONSH_HISTORY_MATCH_ANYWHERE": VarDocs( + "XONSH_HISTORY_MATCH_ANYWHERE": Var( + is_bool, + to_bool, + bool_to_str, + False, "When searching history from a partial string (by pressing up arrow), " "match command history anywhere in a given line (not just the start)", - default="False", + doc_default="False", ), - "XONSH_HISTORY_SIZE": VarDocs( + "XONSH_HISTORY_SIZE": Var( + is_history_tuple, + to_history_tuple, + history_tuple_to_str, + (8128, "commands"), "Value and units tuple that sets the size of history after garbage " "collection. Canonical units are:\n\n" "- ``commands`` for the number of past commands executed,\n" @@ -1353,69 +1565,119 @@ def DEFAULT_DOCS(): "- ``s`` for the number of seconds in the past that are allowed, and\n" "- ``b`` for the number of bytes that history may consume.\n\n" "Common abbreviations, such as '6 months' or '1 GB' are also allowed.", - default="``(8128, 'commands')`` or ``'8128 commands'``", + doc_default="``(8128, 'commands')`` or ``'8128 commands'``", ), - "XONSH_INTERACTIVE": VarDocs( + "XONSH_INTERACTIVE": Var( + is_bool, + to_bool, + bool_to_str, + True, "``True`` if xonsh is running interactively, and ``False`` otherwise.", - configurable=False, + doc_configurable=False, ), - "XONSH_LOGIN": VarDocs( + "XONSH_LOGIN": Var( + is_bool, + to_bool, + bool_to_str, + False, "``True`` if xonsh is running as a login shell, and ``False`` otherwise.", - configurable=False, + doc_configurable=False, ), - "XONSH_PROC_FREQUENCY": VarDocs( + "XONSH_PROC_FREQUENCY": Var( + is_float, + float, + str, + 1e-4, "The process frequency is the time that " "xonsh process threads sleep for while running command pipelines. " - "The value has units of seconds [s]." + "The value has units of seconds [s].", ), - "XONSH_TRACE_SUBPROC": VarDocs( - "Set to ``True`` to show arguments list of every executed subprocess command." - ), - "XONSH_SHOW_TRACEBACK": VarDocs( + "XONSH_SHOW_TRACEBACK": Var( + is_bool, + to_bool, + bool_to_str, + False, "Controls if a traceback is shown if exceptions occur in the shell. " "Set to ``True`` to always show traceback or ``False`` to always hide. " "If undefined then the traceback is hidden but a notice is shown on how " - "to enable the full traceback." + "to enable the full traceback.", ), - "XONSH_SOURCE": VarDocs( + "XONSH_SOURCE": Var( + is_string, + ensure_string, + ensure_string, + "", "When running a xonsh script, this variable contains the absolute path " "to the currently executing script's file.", - configurable=False, + doc_configurable=False, ), - "XONSH_STDERR_PREFIX": VarDocs( + "XONSH_STDERR_PREFIX": Var( + is_string, + ensure_string, + ensure_string, + "", "A format string, using the same keys and colors as ``$PROMPT``, that " "is prepended whenever stderr is displayed. This may be used in " "conjunction with ``$XONSH_STDERR_POSTFIX`` to close out the block." "For example, to have stderr appear on a red background, the " - 'prefix & postfix pair would be "{BACKGROUND_RED}" & "{NO_COLOR}".' + 'prefix & postfix pair would be "{BACKGROUND_RED}" & "{NO_COLOR}".', ), - "XONSH_STDERR_POSTFIX": VarDocs( + "XONSH_STDERR_POSTFIX": Var( + is_string, + ensure_string, + ensure_string, + "", "A format string, using the same keys and colors as ``$PROMPT``, that " "is appended whenever stderr is displayed. This may be used in " "conjunction with ``$XONSH_STDERR_PREFIX`` to start the block." "For example, to have stderr appear on a red background, the " - 'prefix & postfix pair would be "{BACKGROUND_RED}" & "{NO_COLOR}".' + 'prefix & postfix pair would be "{BACKGROUND_RED}" & "{NO_COLOR}".', ), - "XONSH_STORE_STDIN": VarDocs( + "XONSH_STORE_STDIN": Var( + is_bool, + to_bool, + bool_to_str, + False, "Whether or not to store the stdin that is supplied to the " - "``!()`` and ``![]`` operators." + "``!()`` and ``![]`` operators.", ), - "XONSH_STORE_STDOUT": VarDocs( + "XONSH_STORE_STDOUT": Var( + is_bool, + to_bool, + bool_to_str, + False, "Whether or not to store the ``stdout`` and ``stderr`` streams in the " - "history files." + "history files.", ), - "XONSH_TRACEBACK_LOGFILE": VarDocs( + "XONSH_TRACE_SUBPROC": Var( + is_bool, + to_bool, + bool_to_str, + False, + "Set to ``True`` to show arguments list of every executed subprocess command.", + ), + "XONSH_TRACEBACK_LOGFILE": Var( + is_logfile_opt, + to_logfile_opt, + logfile_opt_to_str, + None, "Specifies a file to store the traceback log to, regardless of whether " "``XONSH_SHOW_TRACEBACK`` has been set. Its value must be a writable file " "or None / the empty string if traceback logging is not desired. " - "Logging to a file is not enabled by default." - ), - "XONSH_DATETIME_FORMAT": VarDocs( - "The format that is used for ``datetime.strptime()`` in various places, " - "i.e the history timestamp option." + "Logging to a file is not enabled by default.", ), } + if hasattr(locale, "LC_MESSAGES"): + dv["LC_MESSAGES"] = Var( + always_false, + locale_convert("LC_MESSAGES"), + ensure_string, + locale.setlocale(locale.LC_MESSAGES), + ) + + return dv + # # actual environment @@ -1444,9 +1706,8 @@ class Env(cabc.MutableMapping): # sentinel value for non existing envvars self._no_value = object() self._orig_env = None - self._ensurers = {k: Ensurer(*v) for k, v in DEFAULT_ENSURERS.items()} - self._defaults = DEFAULT_VALUES - self._docs = DEFAULT_DOCS + self._vars = {k: v for k, v in DEFAULT_VARS.items()} + if len(args) == 0 and len(kwargs) == 0: args = (os_environ,) for key, val in dict(*args, **kwargs).items(): @@ -1468,11 +1729,11 @@ class Env(cabc.MutableMapping): for key, val in self._d.items(): if not isinstance(key, str): key = str(key) - ensurer = self.get_ensurer(key) - if ensurer.detype is None: + detyper = self.get_detyper(key) + if detyper is None: # cannot be detyped continue - deval = ensurer.detype(val) + deval = detyper(val) if deval is None: # cannot be detyped continue @@ -1498,53 +1759,110 @@ class Env(cabc.MutableMapping): os_environ.update(self._orig_env) self._orig_env = None - def _get_default_ensurer(self, default=None): + def _get_default_validator(self, default=None): if default is not None: return default else: - default = Ensurer(always_true, None, ensure_string) + default = always_true return default - def get_ensurer(self, key, default=None): - """Gets an ensurer for the given key.""" - if key in self._ensurers: - return self._ensurers[key] - for k, ensurer in self._ensurers.items(): + def _get_default_converter(self, default=None): + if default is not None: + return default + else: + default = None + return default + + def _get_default_detyper(self, default=None): + if default is not None: + return default + else: + default = ensure_string + return default + + def get_validator(self, key, default=None): + """Gets a validator for the given key.""" + if key in self._vars: + return self._vars[key].validate + + # necessary for keys that match regexes, such as `*PATH`s + for k, var in self._vars.items(): if isinstance(k, str): continue if k.match(key) is not None: + validator = var.validate + self._vars[key] = var break else: - ensurer = self._get_default_ensurer(default=default) - self._ensurers[key] = ensurer - return ensurer + validator = self._get_default_validator(default=default) - def set_ensurer(self, key, value): - """Sets an ensurer.""" - self._detyped = None - self._ensurers[key] = value + return validator - def get_docs(self, key, default=VarDocs("")): - """Gets the documentation for the environment variable.""" - vd = self._docs.get(key, None) - if vd is None: + def get_converter(self, key, default=None): + """Gets a converter for the given key.""" + if key in self._vars: + return self._vars[key].convert + + # necessary for keys that match regexes, such as `*PATH`s + for k, var in self._vars.items(): + if isinstance(k, str): + continue + if k.match(key) is not None: + converter = var.convert + self._vars[key] = var + break + else: + converter = self._get_default_converter(default=default) + + return converter + + def get_detyper(self, key, default=None): + """Gets a detyper for the given key.""" + if key in self._vars: + return self._vars[key].detype + + # necessary for keys that match regexes, such as `*PATH`s + for k, var in self._vars.items(): + if isinstance(k, str): + continue + if k.match(key) is not None: + detyper = var.detype + self._vars[key] = var + break + else: + detyper = self._get_default_detyper(default=default) + + return detyper + + def get_default(self, key, default=None): + """Gets default for the given key.""" + if key in self._vars: + return self._vars[key].default + else: return default - if vd.default is DefaultNotGiven: - dval = pprint.pformat(self._defaults.get(key, "")) - vd = vd._replace(default=dval) - self._docs[key] = vd + + def get_docs(self, key, default=None): + """Gets the documentation for the environment variable.""" + vd = self._vars.get(key, None) + if vd is None: + if default is None: + default = Var() + return default + if vd.doc_default is DefaultNotGiven: + dval = pprint.pformat(self._vars.get(key, "").default) + vd = vd._replace(doc_default=dval) return vd def help(self, key): """Get information about a specific environment variable.""" vardocs = self.get_docs(key) width = min(79, os.get_terminal_size()[0]) - docstr = "\n".join(textwrap.wrap(vardocs.docstr, width=width)) + docstr = "\n".join(textwrap.wrap(vardocs.doc, width=width)) template = HELP_TEMPLATE.format( envvar=key, docstr=docstr, - default=vardocs.default, - configurable=vardocs.configurable, + default=vardocs.doc_default, + configurable=vardocs.doc_configurable, ) print_color(template) @@ -1596,8 +1914,8 @@ class Env(cabc.MutableMapping): return self elif key in self._d: val = self._d[key] - elif key in self._defaults: - val = self._defaults[key] + elif key in self._vars: + val = self.get_default(key) if is_callable_default(val): val = val(self) else: @@ -1610,9 +1928,11 @@ class Env(cabc.MutableMapping): return val def __setitem__(self, key, val): - ensurer = self.get_ensurer(key) - if not ensurer.validate(val): - val = ensurer.convert(val) + validator = self.get_validator(key) + converter = self.get_converter(key) + detyper = self.get_detyper(key) + if not validator(val): + val = converter(val) # existing envvars can have any value including None old_value = self._d[key] if key in self._d else self._no_value self._d[key] = val @@ -1620,10 +1940,10 @@ class Env(cabc.MutableMapping): if self.get("UPDATE_OS_ENVIRON"): if self._orig_env is None: self.replace_env() - elif ensurer.detype is None: + elif detyper is None: pass else: - deval = ensurer.detype(val) + deval = detyper(val) if deval is not None: os_environ[key] = deval if old_value is self._no_value: @@ -1637,7 +1957,7 @@ class Env(cabc.MutableMapping): self._detyped = None if self.get("UPDATE_OS_ENVIRON") and key in os_environ: del os_environ[key] - elif key not in self._defaults: + elif key not in self._vars: e = "Unknown environment variable: ${}" raise KeyError(e.format(key)) @@ -1651,10 +1971,10 @@ class Env(cabc.MutableMapping): return default def __iter__(self): - yield from (set(self._d) | set(self._defaults)) + yield from (set(self._d) | set(self._vars)) def __contains__(self, item): - return item in self._d or item in self._defaults + return item in self._d or item in self._vars def __len__(self): return len(self._d) @@ -1663,9 +1983,7 @@ class Env(cabc.MutableMapping): return str(self._d) def __repr__(self): - return "{0}.{1}(...)".format( - self.__class__.__module__, self.__class__.__name__, self._d - ) + return "{0}.{1}(...)".format(self.__class__.__module__, self.__class__.__name__) def _repr_pretty_(self, p, cycle): name = "{0}.{1}".format(self.__class__.__module__, self.__class__.__name__) @@ -1676,6 +1994,87 @@ class Env(cabc.MutableMapping): p.break_() p.pretty(dict(self)) + def register( + self, + name, + type=None, + default=None, + doc="", + validate=always_true, + convert=None, + detype=ensure_string, + doc_configurable=True, + doc_default=DefaultNotGiven, + doc_store_as_str=False, + ): + """Register an enviornment variable with optional type handling, + default value, doc. + + Parameters + ---------- + name : str + Environment variable name to register. Typically all caps. + type : str, optional, {'bool', 'str', 'path', 'int', 'float'} + Variable type. If not one of the available presets, use `validate`, + `convert`, and `detype` to specify type behavior. + default : optional + Default value for variable. ``ValueError`` raised if type does not match + that specified by `type` (or `validate`). + doc : str, optional + Docstring for variable. + validate : func, optional + Function to validate type. + convert : func, optional + Function to convert variable from a string representation to its type. + detype : func, optional + Function to convert variable from its type to a string representation. + doc_configurable : bool, optional + Flag for whether the environment variable is configurable or not. + doc_default : str, optional + Custom docstring for the default value for complex defaults. + If this is ``DefaultNotGiven``, then the default will be looked up + from ``DEFAULT_VALUES`` and converted to a ``str``. + doc_store_as_str : bool, optional + Flag for whether the environment variable should be stored as a + string. This is used when persisting a variable that is not JSON + serializable to the config file. For example, sets, frozensets, and + potentially other non-trivial data types. default, False. + + """ + + if (type is not None) and (type in ("bool", "str", "path", "int", "float")): + validate, convert, detype = ENSURERS[type] + + if default is not None: + if validate(default): + pass + else: + raise ValueError( + "Default value does not match type specified by validate" + ) + + self._vars[name] = Var( + validate, + convert, + detype, + default, + doc, + doc_configurable, + doc_default, + doc_store_as_str, + ) + + def deregister(self, name): + """Deregister an enviornment variable and all its type handling, + default value, doc. + + Parameters + ---------- + name : str + Environment variable name to deregister. Typically all caps. + """ + self._vars.pop(name) + def _yield_executables(directory, name): if ON_WINDOWS: @@ -1698,8 +2097,8 @@ def locate_binary(name): BASE_ENV = LazyObject( lambda: { - "BASH_COMPLETIONS": list(DEFAULT_VALUES["BASH_COMPLETIONS"]), - "PROMPT_FIELDS": dict(DEFAULT_VALUES["PROMPT_FIELDS"]), + "BASH_COMPLETIONS": list(DEFAULT_VARS["BASH_COMPLETIONS"].default), + "PROMPT_FIELDS": dict(DEFAULT_VARS["PROMPT_FIELDS"].default), "XONSH_VERSION": XONSH_VERSION, }, globals(), diff --git a/xonsh/execer.py b/xonsh/execer.py index b4daef78c..e9f07565a 100644 --- a/xonsh/execer.py +++ b/xonsh/execer.py @@ -242,6 +242,8 @@ class Execer(object): last_error_line = e.loc.lineno idx = last_error_line - 1 lines = input.splitlines() + if input.endswith("\n"): + lines.append("") line, nlogical, idx = get_logical_line(lines, idx) if nlogical > 1 and not logical_input: _, sbpline = self._parse_ctx_free( @@ -254,8 +256,6 @@ class Execer(object): last_error_col += 3 input = "\n".join(lines) continue - if input.endswith("\n"): - lines.append("") if len(line.strip()) == 0: # whitespace only lines are not valid syntax in Python's # interactive mode='single', who knew?! Just ignore them. diff --git a/xonsh/history/base.py b/xonsh/history/base.py index adf24bcef..e8816f3d1 100644 --- a/xonsh/history/base.py +++ b/xonsh/history/base.py @@ -69,6 +69,8 @@ class History: self.outs = None self.last_cmd_rtn = None self.last_cmd_out = None + self.hist_size = None + self.hist_units = None def __len__(self): """Return the number of items in current session.""" diff --git a/xonsh/history/json.py b/xonsh/history/json.py index af48bc52e..2dd6f3e49 100644 --- a/xonsh/history/json.py +++ b/xonsh/history/json.py @@ -15,53 +15,72 @@ import xonsh.lazyjson as xlj import xonsh.xoreutils.uptime as uptime -def _xhj_gc_commands_to_rmfiles(hsize, files): - """Return the history files to remove to get under the command limit.""" - rmfiles = [] +def _xhj_gc_commands_to_rmfiles(hsize, files) -> ([], int): + """Return number of units and list of history files to remove to get under the limit, + + Parameters: + ----------- + hsize (int): units of history, # of commands in this case. + files ((mod_ts, num_commands, path)[], fsize): history files, sorted oldest first. + + Returns: + -------- + hsize_removed (int): units of history to be removed + rm_files ((mod_ts, num_commands, path, fsize)[]): list of files to remove. + """ n = 0 ncmds = 0 - for ts, fcmds, f in files[::-1]: - if fcmds == 0: - # we need to make sure that 'empty' history files don't hang around - rmfiles.append((ts, fcmds, f)) + for _, fcmds, f, _ in reversed(files): + # `files` comes in with empty files included (now), don't need special handling to gc them here. + if ncmds + fcmds > hsize: break ncmds += fcmds n += 1 - rmfiles += files[:-n] - return rmfiles + + cmds_removed = 0 + files_removed = files[:-n] + for _, fcmds, f, _ in files_removed: + cmds_removed += fcmds + + return cmds_removed, files_removed def _xhj_gc_files_to_rmfiles(hsize, files): - """Return the history files to remove to get under the file limit.""" + """Return the number and list of history files to remove to get under the file limit.""" rmfiles = files[:-hsize] if len(files) > hsize else [] - return rmfiles + return len(rmfiles), rmfiles def _xhj_gc_seconds_to_rmfiles(hsize, files): - """Return the history files to remove to get under the age limit.""" - rmfiles = [] + """Return age removed (the age of the *oldest* file) and list of history files to remove to get under the age limit.""" now = time.time() - for ts, _, f in files: + oldest_ts = files[0][0] + n = 0 + + for ts, _, f, _ in files: if (now - ts) < hsize: break - rmfiles.append((None, None, f)) - return rmfiles + n += 1 + + return (now - oldest_ts) if n > 0 else 0, files[:n] def _xhj_gc_bytes_to_rmfiles(hsize, files): """Return the history files to remove to get under the byte limit.""" - rmfiles = [] n = 0 nbytes = 0 - for _, _, f in files[::-1]: - fsize = os.stat(f).st_size + for _, _, f, fsize in reversed(files): if nbytes + fsize > hsize: break nbytes += fsize n += 1 - rmfiles = files[:-n] - return rmfiles + bytes_removed = 0 + files_removed = files[:-n] + for _, _, f, fsize in files_removed: + bytes_removed += fsize + + return bytes_removed, files_removed def _xhj_get_history_files(sort=True, newest_first=False): @@ -88,7 +107,7 @@ def _xhj_get_history_files(sort=True, newest_first=False): class JsonHistoryGC(threading.Thread): """Shell history garbage collection.""" - def __init__(self, wait_for_shell=True, size=None, *args, **kwargs): + def __init__(self, wait_for_shell=True, size=None, force=False, *args, **kwargs): """Thread responsible for garbage collecting old history. May wait for shell (and for xonshrc to have been loaded) to start work. @@ -97,6 +116,7 @@ class JsonHistoryGC(threading.Thread): self.daemon = True self.size = size self.wait_for_shell = wait_for_shell + self.force_gc = force self.gc_units_to_rmfiles = { "commands": _xhj_gc_commands_to_rmfiles, "files": _xhj_gc_files_to_rmfiles, @@ -109,6 +129,7 @@ class JsonHistoryGC(threading.Thread): while self.wait_for_shell: time.sleep(0.01) env = builtins.__xonsh__.env # pylint: disable=no-member + xonsh_debug = env.get("XONSH_DEBUG", 0) if self.size is None: hsize, units = env.get("XONSH_HISTORY_SIZE") else: @@ -118,31 +139,53 @@ class JsonHistoryGC(threading.Thread): if rmfiles_fn is None: raise ValueError("Units type {0!r} not understood".format(units)) - for _, _, f in rmfiles_fn(hsize, files): - try: - os.remove(f) - except OSError: - pass + size_over, rm_files = rmfiles_fn(hsize, files) + hist = getattr(builtins.__xonsh__, "history", None) + if hist is not None: # remember last gc pass history size + hist.hist_size = size_over + hsize + hist.hist_units = units + + if self.force_gc or size_over < hsize: + i = 0 + for _, _, f, _ in rm_files: + try: + os.remove(f) + if xonsh_debug: + print( + f"... Deleted {i:7d} of {len(rm_files):7d} history files.\r", + end="", + ) + pass + except OSError: + pass + i += 1 + else: + print( + f"Warning: History garbage collection would discard more history ({size_over} {units}) than it would keep ({hsize}).\n" + "Not removing any history for now. Either increase your limit ($XONSH_HIST_SIZE), or run `history gc --force`." + ) def files(self, only_unlocked=False): """Find and return the history files. Optionally locked files may be excluded. This is sorted by the last closed time. Returns a list of - (timestamp, number of cmds, file name) tuples. + (file_size, timestamp, number of cmds, file name) tuples. """ - # pylint: disable=no-member - env = getattr(builtins, "__xonsh__.env", None) + env = getattr(getattr(builtins, "__xonsh__", None), "env", None) if env is None: return [] + + xonsh_debug = env.get("XONSH_DEBUG", 0) boot = uptime.boottime() fs = _xhj_get_history_files(sort=False) files = [] for f in fs: try: - if os.path.getsize(f) == 0: + cur_file_size = os.path.getsize(f) + if cur_file_size == 0: # collect empty files (for gc) - files.append((time.time(), 0, f)) + files.append((os.path.getmtime(f), 0, f, cur_file_size)) continue lj = xlj.LazyJSON(f, reopen=False) if lj["locked"] and lj["ts"][0] < boot: @@ -156,19 +199,32 @@ class JsonHistoryGC(threading.Thread): lj = xlj.LazyJSON(f, reopen=False) if only_unlocked and lj["locked"]: continue - # info: closing timestamp, number of commands, filename - files.append((lj["ts"][1] or lj["ts"][0], len(lj.sizes["cmds"]) - 1, f)) + # info: file size, closing timestamp, number of commands, filename + files.append( + ( + lj["ts"][1] or lj["ts"][0], + len(lj.sizes["cmds"]) - 1, + f, + cur_file_size, + ), + ) lj.close() + if xonsh_debug: + print(f"... Enumerated {len(files):7d} history files.\r", end="") except (IOError, OSError, ValueError): continue - files.sort() + files.sort() # this sorts by elements of the tuple, + # the first of which just happens to be file mod time. + # so sort by oldest first. return files class JsonHistoryFlusher(threading.Thread): """Flush shell history to disk periodically.""" - def __init__(self, filename, buffer, queue, cond, at_exit=False, *args, **kwargs): + def __init__( + self, filename, buffer, queue, cond, at_exit=False, skip=None, *args, **kwargs + ): """Thread for flushing history.""" super(JsonHistoryFlusher, self).__init__(*args, **kwargs) self.filename = filename @@ -177,6 +233,7 @@ class JsonHistoryFlusher(threading.Thread): queue.append(self) self.cond = cond self.at_exit = at_exit + self.skip = skip if at_exit: self.dump() queue.popleft() @@ -201,9 +258,13 @@ class JsonHistoryFlusher(threading.Thread): for cmd in self.buffer: if "ignoredups" in opts and cmd["inp"] == last_inp: # Skipping dup cmd + if self.skip is not None: + self.skip(1) continue if "ignoreerr" in opts and cmd["rtn"] != 0: # Skipping failed cmd + if self.skip is not None: + self.skip(1) continue cmds.append(cmd) last_inp = cmd["inp"] @@ -279,7 +340,7 @@ class JsonCommandField(cabc.Sequence): class JsonHistory(History): """Xonsh history backend implemented with JSON files. - JsonHistory implements two extra actions: ``diff``, and ``replay``. + JsonHistory implements an extra action: ``diff`` """ def __init__(self, filename=None, sessionid=None, buffersize=100, gc=True, **meta): @@ -317,6 +378,7 @@ class JsonHistory(History): self._queue = collections.deque() self._cond = threading.Condition() self._len = 0 + self._skipped = 0 self.last_cmd_out = None self.last_cmd_rtn = None meta["cmds"] = [] @@ -331,7 +393,7 @@ class JsonHistory(History): self.rtns = JsonCommandField("rtn", self) def __len__(self): - return self._len + return self._len - self._skipped def append(self, cmd): """Appends command to history. Will periodically flush the history to file. @@ -373,10 +435,19 @@ class JsonHistory(History): """ if len(self.buffer) == 0: return + + def skip(num): + self._skipped += num + hf = JsonHistoryFlusher( - self.filename, tuple(self.buffer), self._queue, self._cond, at_exit=at_exit + self.filename, + tuple(self.buffer), + self._queue, + self._cond, + at_exit=at_exit, + skip=skip, ) - self.buffer.clear() + self.buffer = [] return hf def items(self, newest_first=False): @@ -427,10 +498,11 @@ class JsonHistory(History): data["bufferlength"] = len(self.buffer) envs = builtins.__xonsh__.env data["gc options"] = envs.get("XONSH_HISTORY_SIZE") + data["gc_last_size"] = f"{(self.hist_size, self.hist_units)}" return data - def run_gc(self, size=None, blocking=True): - self.gc = JsonHistoryGC(wait_for_shell=False, size=size) + def run_gc(self, size=None, blocking=True, force=False): + self.gc = JsonHistoryGC(wait_for_shell=False, size=size, force=force) if blocking: - while self.gc.is_alive(): - continue + while self.gc.is_alive(): # while waiting for gc. + time.sleep(0.1) # don't monopolize the thread (or Python GIL?) diff --git a/xonsh/history/main.py b/xonsh/history/main.py index 145b6be15..e572822e0 100644 --- a/xonsh/history/main.py +++ b/xonsh/history/main.py @@ -323,6 +323,13 @@ def _xh_create_parser(): 'units; e.g. "--size 8128 commands"' ), ) + gcp.add_argument( + "--force", + dest="force_gc", + default=False, + action="store_true", + help="perform garbage collection even if history much bigger than configured limit", + ) bgcp = gcp.add_mutually_exclusive_group() bgcp.add_argument( "--blocking", @@ -344,12 +351,6 @@ def _xh_create_parser(): diff = subp.add_parser("diff", help="diff two xonsh history files") xdh.dh_create_parser(p=diff) - import xonsh.replay as xrp - - replay = subp.add_parser("replay", help="replay a xonsh history file") - xrp.replay_create_parser(p=replay) - _XH_MAIN_ACTIONS.add("replay") - # 'flush' subcommand subp.add_parser("flush", help="flush the current history to disk") @@ -408,15 +409,10 @@ def history_main( return print(str(hist.filename), file=stdout) elif ns.action == "gc": - hist.run_gc(size=ns.size, blocking=ns.blocking) + hist.run_gc(size=ns.size, blocking=ns.blocking, force=ns.force_gc) elif ns.action == "diff": if isinstance(hist, JsonHistory): xdh.dh_main_action(ns) - elif ns.action == "replay": - if isinstance(hist, JsonHistory): - import xonsh.replay as xrp - - xrp.replay_main_action(hist, ns, stdout=stdout, stderr=stderr) elif ns.action == "flush": hf = hist.flush() if isinstance(hf, threading.Thread): diff --git a/xonsh/imphooks.py b/xonsh/imphooks.py index 0b258ca6e..95f53122a 100644 --- a/xonsh/imphooks.py +++ b/xonsh/imphooks.py @@ -3,20 +3,20 @@ This module registers the hooks it defines when it is imported. """ +import builtins +import contextlib +import importlib import os import re import sys import types -import builtins -import contextlib -import importlib -from importlib.machinery import ModuleSpec from importlib.abc import MetaPathFinder, SourceLoader, Loader +from importlib.machinery import ModuleSpec from xonsh.events import events from xonsh.execer import Execer -from xonsh.platform import ON_WINDOWS, scandir from xonsh.lazyasd import lazyobject +from xonsh.platform import ON_WINDOWS, scandir @lazyobject @@ -270,6 +270,26 @@ class XonshImportEventHook(MetaPathFinder): return spec +_XIEVL_WRAPPED_ATTRIBUTES = frozenset( + [ + "load_module", + "module_repr", + "get_data", + "get_resource_filename", + "get_resource_stream", + "get_resource_string", + "has_resource", + "has_metadata", + "get_metadata", + "get_metadata_lines", + "resource_isdir", + "metadata_isdir", + "resource_listdir", + "metadata_listdir", + ] +) + + class XonshImportEventLoader(Loader): """A class that dispatches loader calls to another loader and fires relevant xonsh events. @@ -295,13 +315,10 @@ class XonshImportEventLoader(Loader): events.on_import_post_exec_module.fire(module=module) return rtn - def load_module(self, fullname): - """Legacy module loading, provided for backwards compatibility.""" - return self.loader.load_module(fullname) - - def module_repr(self, module): - """Legacy module repr, provided for backwards compatibility.""" - return self.loader.module_repr(module) + def __getattr__(self, name): + if name in _XIEVL_WRAPPED_ATTRIBUTES: + return getattr(self.loader, name) + return object.__getattribute__(self, name) def install_import_hooks(): diff --git a/xonsh/inspectors.py b/xonsh/inspectors.py index a2151dbd3..766cddcef 100644 --- a/xonsh/inspectors.py +++ b/xonsh/inspectors.py @@ -15,13 +15,12 @@ import types import inspect import itertools import linecache -import collections from xonsh.lazyasd import LazyObject from xonsh.tokenize import detect_encoding from xonsh.openpy import read_py_file from xonsh.tools import cast_unicode, safe_hasattr, indent, print_color, format_color -from xonsh.platform import HAS_PYGMENTS, PYTHON_VERSION_INFO +from xonsh.platform import HAS_PYGMENTS from xonsh.lazyimps import pygments, pyghooks from xonsh.style_tools import partial_color_tokenize @@ -328,21 +327,6 @@ def find_source_lines(obj): return lineno -if PYTHON_VERSION_INFO < (3, 5, 0): - FrameInfo = collections.namedtuple( - "FrameInfo", - ["frame", "filename", "lineno", "function", "code_context", "index"], - ) - - def getouterframes(frame, context=1): - """Wrapper for getouterframes so that it acts like the Python v3.5 version.""" - return [FrameInfo(*f) for f in inspect.getouterframes(frame, context=context)] - - -else: - getouterframes = inspect.getouterframes - - class Inspector(object): """Inspects objects.""" @@ -356,7 +340,7 @@ class Inspector(object): exception is suppressed. """ try: - hdef = oname + inspect.signature(*getargspec(obj)) + hdef = oname + str(inspect.signature(obj)) return cast_unicode(hdef) except: # pylint:disable=bare-except return None diff --git a/xonsh/lazyimps.py b/xonsh/lazyimps.py index 1a7d53e30..04c1287c4 100644 --- a/xonsh/lazyimps.py +++ b/xonsh/lazyimps.py @@ -1,4 +1,5 @@ """Lazy imports that may apply across the xonsh package.""" +import os import importlib from xonsh.platform import ON_WINDOWS, ON_DARWIN @@ -88,3 +89,11 @@ def terminal256(): @lazyobject def html(): return importlib.import_module("pygments.formatters.html") + + +@lazyobject +def os_listxattr(): + def dummy_listxattr(*args, **kwargs): + return [] + + return getattr(os, "listxattr", dummy_listxattr) diff --git a/xonsh/lexer.py b/xonsh/lexer.py index 2ebc4908c..4ebcf1f7a 100644 --- a/xonsh/lexer.py +++ b/xonsh/lexer.py @@ -106,7 +106,7 @@ def token_map(): tm[NEWLINE] = "NEWLINE" tm[INDENT] = "INDENT" tm[DEDENT] = "DEDENT" - if (3, 5, 0) <= PYTHON_VERSION_INFO < (3, 7, 0): + if PYTHON_VERSION_INFO < (3, 7, 0): from xonsh.tokenize import ASYNC, AWAIT tm[ASYNC] = "ASYNC" diff --git a/xonsh/lib/itertools.py b/xonsh/lib/itertools.py index 18d895b1a..d75ce00ff 100644 --- a/xonsh/lib/itertools.py +++ b/xonsh/lib/itertools.py @@ -3,16 +3,19 @@ def as_iterable(iterable_or_scalar): Parameters ---------- iterable_or_scalar : anything + Returns ------- l : iterable If `obj` was None, return the empty tuple. If `obj` was not iterable returns a 1-tuple containing `obj`. Otherwise return `obj` + Notes ----- Although string types are iterable in Python, we are treating them as not iterable in this method. Thus, as_iterable(string) returns (string, ) + Examples --------- >>> as_iterable(1) diff --git a/xonsh/main.py b/xonsh/main.py index 0cf446ed4..ce3ac3b3c 100644 --- a/xonsh/main.py +++ b/xonsh/main.py @@ -251,9 +251,11 @@ def _pprint_displayhook(value): builtins._ = value return env = builtins.__xonsh__.env + printed_val = None if env.get("PRETTY_PRINT_RESULTS"): printed_val = pretty(value) - else: + if not isinstance(printed_val, str): + # pretty may fail (i.e for unittest.mock.Mock) printed_val = repr(value) if HAS_PYGMENTS and env.get("COLOR_RESULTS"): tokens = list(pygments.lex(printed_val, lexer=pyghooks.XonshLexer())) @@ -369,26 +371,43 @@ def _failback_to_other_shells(args, err): # as an interactive one for safe. if hasattr(args, "mode") and args.mode != XonshMode.interactive: raise err + foreign_shell = None - shells_file = "/etc/shells" - if not os.path.exists(shells_file): - # right now, it will always break here on Windows - raise err - excluded_list = ["xonsh", "screen"] - with open(shells_file) as f: - for line in f: - line = line.strip() - if not line or line.startswith("#"): - continue - if "/" not in line: - continue - _, shell = line.rsplit("/", 1) - if shell in excluded_list: - continue - if not os.path.exists(line): - continue - foreign_shell = line - break + + # look first in users login shell $SHELL. + # use real os.environ, in case Xonsh hasn't initialized yet + # but don't fail back to same shell that just failed. + + try: + env_shell = os.getenv("SHELL") + if env_shell and os.path.exists(env_shell) and env_shell != sys.argv[0]: + foreign_shell = env_shell + except Exception: + pass + + # otherwise, find acceptable shell from (unix) list of installed shells. + + if not foreign_shell: + excluded_list = ["xonsh", "screen"] + shells_file = "/etc/shells" + if not os.path.exists(shells_file): + # right now, it will always break here on Windows + raise err + with open(shells_file) as f: + for line in f: + line = line.strip() + if not line or line.startswith("#"): + continue + if "/" not in line: + continue + _, shell = line.rsplit("/", 1) + if shell in excluded_list: + continue + if not os.path.exists(line): + continue + foreign_shell = line + break + if foreign_shell: traceback.print_exc() print("Xonsh encountered an issue during launch", file=sys.stderr) @@ -402,7 +421,7 @@ def main(argv=None): args = None try: args = premain(argv) - return main_xonsh(args) + sys.exit(main_xonsh(args)) except Exception as err: _failback_to_other_shells(args, err) @@ -420,6 +439,8 @@ def main_xonsh(args): events.on_post_init.fire() env = builtins.__xonsh__.env shell = builtins.__xonsh__.shell + history = builtins.__xonsh__.history + exit_code = 0 try: if args.mode == XonshMode.interactive: # enter the shell @@ -437,6 +458,8 @@ def main_xonsh(args): elif args.mode == XonshMode.single_command: # run a single command and exit run_code_with_cache(args.command.lstrip(), shell.execer, mode="single") + if history is not None and history.last_cmd_rtn is not None: + exit_code = history.last_cmd_rtn elif args.mode == XonshMode.script_from_file: # run a script contained in a file path = os.path.abspath(os.path.expanduser(args.file)) @@ -450,8 +473,7 @@ def main_xonsh(args): ) else: print("xonsh: {0}: No such file or directory.".format(args.file)) - events.on_exit.fire() - sys.exit(1) + exit_code = 1 elif args.mode == XonshMode.script_from_stdin: # run a script given on stdin code = sys.stdin.read() @@ -461,6 +483,7 @@ def main_xonsh(args): finally: events.on_exit.fire() postmain(args) + return exit_code def postmain(args=None): diff --git a/xonsh/parser.py b/xonsh/parser.py index 9354e0fe5..749dda027 100644 --- a/xonsh/parser.py +++ b/xonsh/parser.py @@ -8,8 +8,6 @@ from xonsh.platform import PYTHON_VERSION_INFO def Parser(): if PYTHON_VERSION_INFO > (3, 8): from xonsh.parsers.v38 import Parser as p - elif PYTHON_VERSION_INFO > (3, 6): + else: from xonsh.parsers.v36 import Parser as p - elif PYTHON_VERSION_INFO > (3, 5): - from xonsh.parsers.v35 import Parser as p return p diff --git a/xonsh/parsers/base.py b/xonsh/parsers/base.py index 9739222a0..902b8f37f 100644 --- a/xonsh/parsers/base.py +++ b/xonsh/parsers/base.py @@ -498,7 +498,7 @@ class BaseParser(object): if not yacc_debug: yacc_kwargs["errorlog"] = yacc.NullLogger() if outputdir is None: - outputdir = os.path.dirname(os.path.dirname(__file__)) + outputdir = os.path.dirname(os.path.realpath(__file__)) yacc_kwargs["outputdir"] = outputdir if yacc_debug: # create parser on main thread @@ -966,9 +966,12 @@ class BaseParser(object): def p_tfpdef(self, p): """tfpdef : name_tok colon_test_opt""" p1 = p[1] - kwargs = {"arg": p1.value, "annotation": p[2]} - if PYTHON_VERSION_INFO >= (3, 5, 1): - kwargs.update({"lineno": p1.lineno, "col_offset": p1.lexpos}) + kwargs = { + "arg": p1.value, + "annotation": p[2], + "lineno": p1.lineno, + "col_offset": p1.lexpos, + } p[0] = ast.arg(**kwargs) def p_comma_tfpdef_empty(self, p): @@ -1108,9 +1111,12 @@ class BaseParser(object): def p_vfpdef(self, p): """vfpdef : name_tok""" p1 = p[1] - kwargs = {"arg": p1.value, "annotation": None} - if PYTHON_VERSION_INFO >= (3, 5, 1): - kwargs.update({"lineno": p1.lineno, "col_offset": p1.lexpos}) + kwargs = { + "arg": p1.value, + "annotation": None, + "lineno": p1.lineno, + "col_offset": p1.lexpos, + } p[0] = ast.arg(**kwargs) def p_comma_vfpdef_empty(self, p): diff --git a/xonsh/parsers/v35.py b/xonsh/parsers/v35.py deleted file mode 100644 index 6faf0f2d8..000000000 --- a/xonsh/parsers/v35.py +++ /dev/null @@ -1,148 +0,0 @@ -# -*- coding: utf-8 -*- -"""Implements the xonsh parser for Python v3.5.""" -import xonsh.ast as ast -from xonsh.parsers.base import BaseParser - - -class Parser(BaseParser): - """A Python v3.5 compliant parser for the xonsh language.""" - - def __init__( - self, - lexer_optimize=True, - lexer_table="xonsh.lexer_table", - yacc_optimize=True, - yacc_table="xonsh.parser_table", - yacc_debug=False, - outputdir=None, - ): - """Parameters - ---------- - lexer_optimize : bool, optional - Set to false when unstable and true when lexer is stable. - lexer_table : str, optional - Lexer module used when optimized. - yacc_optimize : bool, optional - Set to false when unstable and true when parser is stable. - yacc_table : str, optional - Parser module used when optimized. - yacc_debug : debug, optional - Dumps extra debug info. - outputdir : str or None, optional - The directory to place generated tables within. - """ - # Rule creation and modification *must* take place before super() - tok_rules = ["await", "async"] - for rule in tok_rules: - self._tok_rule(rule) - super().__init__( - lexer_optimize=lexer_optimize, - lexer_table=lexer_table, - yacc_optimize=yacc_optimize, - yacc_table=yacc_table, - yacc_debug=yacc_debug, - outputdir=outputdir, - ) - - def p_classdef_or_funcdef(self, p): - """classdef_or_funcdef : classdef - | funcdef - | async_funcdef - """ - p[0] = p[1] - - def p_async_funcdef(self, p): - """async_funcdef : async_tok funcdef""" - p1, f = p[1], p[2][0] - p[0] = [ast.AsyncFunctionDef(**f.__dict__)] - p[0][0]._async_tok = p1 - - def p_async_compound_stmt(self, p): - """compound_stmt : async_stmt""" - p[0] = p[1] - - def p_async_for_stmt(self, p): - """async_for_stmt : ASYNC for_stmt""" - f = p[2][0] - p[0] = [ast.AsyncFor(**f.__dict__)] - - def p_async_with_stmt(self, p): - """async_with_stmt : ASYNC with_stmt""" - w = p[2][0] - p[0] = [ast.AsyncWith(**w.__dict__)] - - def p_atom_expr_await(self, p): - """atom_expr : await_tok atom trailer_list_opt""" - p0 = self.apply_trailers(p[2], p[3]) - p1 = p[1] - p0 = ast.Await(value=p0, ctx=ast.Load(), lineno=p1.lineno, col_offset=p1.lexpos) - p[0] = p0 - - def p_async_stmt(self, p): - """async_stmt : async_funcdef - | async_with_stmt - | async_for_stmt - """ - p[0] = p[1] - - def p_item_test(self, p): - """item : test COLON test""" - p[0] = [p[1], p[3]] - - def p_item_pow(self, p): - """item : POW expr""" - p[0] = [None, p[2]] - - def _set_arg(self, args, arg, ensure_kw=False): - if isinstance(arg, ast.keyword): - args["keywords"].append(arg) - elif ensure_kw: - args["keywords"].append(ast.keyword(arg=None, value=arg)) - else: - args["args"].append(arg) - - def p_arglist_single(self, p): - """arglist : argument comma_opt""" - p0 = {"args": [], "keywords": []} - self._set_arg(p0, p[1]) - p[0] = p0 - - def p_arglist_many(self, p): - """arglist : argument comma_argument_list comma_opt - """ - p0 = {"args": [], "keywords": []} - self._set_arg(p0, p[1]) - for arg in p[2]: - self._set_arg(p0, arg) - p[0] = p0 - - # Argument rules - # "test '=' test" is really "keyword '=' test", but we have no such token. - # These need to be in a single rule to avoid grammar that is ambiguous - # to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, - # we explicitly match '*' here, too, to give it proper precedence. - # Illegal combinations and orderings are blocked in ast.c: - # multiple (test comp_for) arguments are blocked; keyword unpackings - # that precede iterable unpackings are blocked; etc. - def p_argument_test_or_star(self, p): - """argument : test_or_star_expr""" - p[0] = p[1] - - def p_argument_kwargs(self, p): - """argument : POW test""" - p[0] = ast.keyword(arg=None, value=p[2]) - - def p_argument_args(self, p): - """argument : TIMES test""" - p[0] = ast.Starred(value=p[2]) - - def p_argument(self, p): - """argument : test comp_for""" - p1 = p[1] - p[0] = ast.GeneratorExp( - elt=p1, generators=p[2]["comps"], lineno=p1.lineno, col_offset=p1.col_offset - ) - - def p_argument_eq(self, p): - """argument : test EQUALS test""" - p[0] = ast.keyword(arg=p[1].id, value=p[3]) diff --git a/xonsh/parsers/v36.py b/xonsh/parsers/v36.py index 6a6dc6f6a..53729040d 100644 --- a/xonsh/parsers/v36.py +++ b/xonsh/parsers/v36.py @@ -1,13 +1,152 @@ # -*- coding: utf-8 -*- """Implements the xonsh parser for Python v3.6.""" import xonsh.ast as ast -from xonsh.parsers.v35 import Parser as ThreeFiveParser -from xonsh.parsers.base import store_ctx, ensure_has_elts, lopen_loc +from xonsh.parsers.base import store_ctx, ensure_has_elts, lopen_loc, BaseParser -class Parser(ThreeFiveParser): +class Parser(BaseParser): """A Python v3.6 compliant parser for the xonsh language.""" + def __init__( + self, + lexer_optimize=True, + lexer_table="xonsh.lexer_table", + yacc_optimize=True, + yacc_table="xonsh.parser_table", + yacc_debug=False, + outputdir=None, + ): + """Parameters + ---------- + lexer_optimize : bool, optional + Set to false when unstable and true when lexer is stable. + lexer_table : str, optional + Lexer module used when optimized. + yacc_optimize : bool, optional + Set to false when unstable and true when parser is stable. + yacc_table : str, optional + Parser module used when optimized. + yacc_debug : debug, optional + Dumps extra debug info. + outputdir : str or None, optional + The directory to place generated tables within. + """ + # Rule creation and modification *must* take place before super() + tok_rules = ["await", "async"] + for rule in tok_rules: + self._tok_rule(rule) + super().__init__( + lexer_optimize=lexer_optimize, + lexer_table=lexer_table, + yacc_optimize=yacc_optimize, + yacc_table=yacc_table, + yacc_debug=yacc_debug, + outputdir=outputdir, + ) + + def p_classdef_or_funcdef(self, p): + """classdef_or_funcdef : classdef + | funcdef + | async_funcdef + """ + p[0] = p[1] + + def p_async_funcdef(self, p): + """async_funcdef : async_tok funcdef""" + p1, f = p[1], p[2][0] + p[0] = [ast.AsyncFunctionDef(**f.__dict__)] + p[0][0]._async_tok = p1 + + def p_async_compound_stmt(self, p): + """compound_stmt : async_stmt""" + p[0] = p[1] + + def p_async_for_stmt(self, p): + """async_for_stmt : ASYNC for_stmt""" + f = p[2][0] + p[0] = [ast.AsyncFor(**f.__dict__)] + + def p_async_with_stmt(self, p): + """async_with_stmt : ASYNC with_stmt""" + w = p[2][0] + p[0] = [ast.AsyncWith(**w.__dict__)] + + def p_atom_expr_await(self, p): + """atom_expr : await_tok atom trailer_list_opt""" + p0 = self.apply_trailers(p[2], p[3]) + p1 = p[1] + p0 = ast.Await(value=p0, ctx=ast.Load(), lineno=p1.lineno, col_offset=p1.lexpos) + p[0] = p0 + + def p_async_stmt(self, p): + """async_stmt : async_funcdef + | async_with_stmt + | async_for_stmt + """ + p[0] = p[1] + + def p_item_test(self, p): + """item : test COLON test""" + p[0] = [p[1], p[3]] + + def p_item_pow(self, p): + """item : POW expr""" + p[0] = [None, p[2]] + + def _set_arg(self, args, arg, ensure_kw=False): + if isinstance(arg, ast.keyword): + args["keywords"].append(arg) + elif ensure_kw: + args["keywords"].append(ast.keyword(arg=None, value=arg)) + else: + args["args"].append(arg) + + def p_arglist_single(self, p): + """arglist : argument comma_opt""" + p0 = {"args": [], "keywords": []} + self._set_arg(p0, p[1]) + p[0] = p0 + + def p_arglist_many(self, p): + """arglist : argument comma_argument_list comma_opt + """ + p0 = {"args": [], "keywords": []} + self._set_arg(p0, p[1]) + for arg in p[2]: + self._set_arg(p0, arg) + p[0] = p0 + + # Argument rules + # "test '=' test" is really "keyword '=' test", but we have no such token. + # These need to be in a single rule to avoid grammar that is ambiguous + # to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, + # we explicitly match '*' here, too, to give it proper precedence. + # Illegal combinations and orderings are blocked in ast.c: + # multiple (test comp_for) arguments are blocked; keyword unpackings + # that precede iterable unpackings are blocked; etc. + def p_argument_test_or_star(self, p): + """argument : test_or_star_expr""" + p[0] = p[1] + + def p_argument_kwargs(self, p): + """argument : POW test""" + p[0] = ast.keyword(arg=None, value=p[2]) + + def p_argument_args(self, p): + """argument : TIMES test""" + p[0] = ast.Starred(value=p[2]) + + def p_argument(self, p): + """argument : test comp_for""" + p1 = p[1] + p[0] = ast.GeneratorExp( + elt=p1, generators=p[2]["comps"], lineno=p1.lineno, col_offset=p1.col_offset + ) + + def p_argument_eq(self, p): + """argument : test EQUALS test""" + p[0] = ast.keyword(arg=p[1].id, value=p[3]) + def p_comp_for(self, p): """comp_for : FOR exprlist IN or_test comp_iter_opt""" targs, it, p5 = p[2], p[4], p[5] diff --git a/xonsh/platform.py b/xonsh/platform.py index 4f04b8741..fd3924302 100644 --- a/xonsh/platform.py +++ b/xonsh/platform.py @@ -3,6 +3,7 @@ compatibility layers to make use of the 'best' implementation available on a platform. """ import os +from os import scandir import sys import ctypes import signal @@ -305,42 +306,6 @@ DEFAULT_ENCODING = sys.getdefaultencoding() """ Default string encoding. """ -if PYTHON_VERSION_INFO < (3, 5, 0): - - class DirEntry: - def __init__(self, directory, name): - self.__path__ = pathlib.Path(directory) / name - self.name = name - self.path = str(self.__path__) - self.is_symlink = self.__path__.is_symlink - - def inode(self): - return os.stat(self.path, follow_symlinks=False).st_ino - - def is_dir(self, *, follow_symlinks=True): - if follow_symlinks: - return self.__path__.is_dir() - else: - return not self.__path__.is_symlink() and self.__path__.is_dir() - - def is_file(self, *, follow_symlinks=True): - if follow_symlinks: - return self.__path__.is_file() - else: - return not self.__path__.is_symlink() and self.__path__.is_file() - - def stat(self, *, follow_symlinks=True): - return os.stat(self.path, follow_symlinks=follow_symlinks) - - def scandir(path): - """ Compatibility layer for `os.scandir` from Python 3.5+. """ - return (DirEntry(path, x) for x in os.listdir(path)) - - -else: - scandir = os.scandir - - # # Linux distro # diff --git a/xonsh/proc.py b/xonsh/proc.py index 210e40b0f..0b39e500e 100644 --- a/xonsh/proc.py +++ b/xonsh/proc.py @@ -1203,12 +1203,12 @@ def parse_proxy_return(r, stdout, stderr): elif isinstance(r, cabc.Sequence): rlen = len(r) if rlen > 0 and r[0] is not None: - stdout.write(r[0]) + stdout.write(str(r[0])) stdout.flush() if rlen > 1 and r[1] is not None: - stderr.write(r[1]) + stderr.write(str(r[1])) stderr.flush() - if rlen > 2 and r[2] is not None: + if rlen > 2 and isinstance(r[2], int): cmd_result = r[2] elif r is not None: # for the random object... diff --git a/xonsh/prompt/vc.py b/xonsh/prompt/vc.py index 91f9613ad..f4bcbd127 100644 --- a/xonsh/prompt/vc.py +++ b/xonsh/prompt/vc.py @@ -9,6 +9,7 @@ import builtins import threading import subprocess import re +import pathlib import xonsh.tools as xt from xonsh.lazyasd import LazyObject @@ -96,32 +97,34 @@ def get_hg_branch(root=None): t.start() t.join(timeout=timeout) try: - root = q.get_nowait() + root = pathlib.Path(q.get_nowait()) except queue.Empty: return None if env.get("VC_HG_SHOW_BRANCH"): # get branch name - branch_path = os.path.sep.join([root, ".hg", "branch"]) - if os.path.exists(branch_path): + branch_path = root / ".hg" / "branch" + if branch_path.exists(): with open(branch_path, "r") as branch_file: - branch = branch_file.read() + branch = branch_file.read().strip() else: branch = "default" else: branch = "" - # add bookmark, if we can - bookmark_path = os.path.sep.join([root, ".hg", "bookmarks.current"]) - if os.path.exists(bookmark_path): - with open(bookmark_path, "r") as bookmark_file: - active_bookmark = bookmark_file.read() - if env.get("VC_HG_SHOW_BRANCH") is True: - branch = "{0}, {1}".format( - *(b.strip(os.linesep) for b in (branch, active_bookmark)) - ) - else: - branch = active_bookmark.strip(os.linesep) - else: - branch = branch.strip(os.linesep) + # add activated bookmark and topic + for filename in ["bookmarks.current", "topic"]: + feature_branch_path = root / ".hg" / filename + if feature_branch_path.exists(): + with open(feature_branch_path) as file: + feature_branch = file.read().strip() + if feature_branch: + if branch: + if filename == "topic": + branch = f"{branch}/{feature_branch}" + else: + branch = f"{branch}, {feature_branch}" + else: + branch = feature_branch + return branch diff --git a/xonsh/ptk_shell/completer.py b/xonsh/ptk_shell/completer.py index 2aa764100..33f9d0abc 100644 --- a/xonsh/ptk_shell/completer.py +++ b/xonsh/ptk_shell/completer.py @@ -7,6 +7,8 @@ from prompt_toolkit.completion import Completer, Completion from prompt_toolkit.auto_suggest import AutoSuggestFromHistory from prompt_toolkit.application.current import get_app +from xonsh.completers.tools import RichCompletion + class PromptToolkitCompleter(Completer): """Simple prompt_toolkit Completer object. @@ -22,6 +24,7 @@ class PromptToolkitCompleter(Completer): self.ctx = ctx self.shell = shell self.hist_suggester = AutoSuggestFromHistory() + self.current_document = None def get_completions(self, document, complete_event): """Returns a generator for list of completions.""" @@ -40,10 +43,17 @@ class PromptToolkitCompleter(Completer): begidx = line[:endidx].rfind(" ") + 1 if line[:endidx].rfind(" ") >= 0 else 0 prefix = line[begidx:endidx] expand_offset = len(line_ex) - len(line) + + # enable completers to access entire document + self.current_document = document + # get normal completions completions, l = self.completer.complete( prefix, line_ex, begidx + expand_offset, endidx + expand_offset, self.ctx ) + + self.current_document = None + # completions from auto suggest sug_comp = None if env.get("AUTO_SUGGEST") and env.get("AUTO_SUGGEST_IN_COMPLETIONS"): @@ -75,8 +85,16 @@ class PromptToolkitCompleter(Completer): pre = len(c_prefix) for comp in completions: # do not display quote - disp = comp[pre:].strip("'\"") - yield Completion(comp, -l, display=disp) + if isinstance(comp, RichCompletion): + yield Completion( + comp, + -comp.prefix_len if comp.prefix_len is not None else -l, + display=comp.display, + display_meta=comp.description or None, + ) + else: + disp = comp[pre:].strip("'\"") + yield Completion(comp, -l, display=disp) def suggestion_completion(self, document, line): """Provides a completion based on the current auto-suggestion.""" diff --git a/xonsh/pyghooks.py b/xonsh/pyghooks.py index 7fd81a354..36a035ecb 100644 --- a/xonsh/pyghooks.py +++ b/xonsh/pyghooks.py @@ -8,6 +8,7 @@ import stat from collections import ChainMap from collections.abc import MutableMapping from keyword import iskeyword +from xonsh.lazyimps import os_listxattr from pygments.lexer import inherit, bygroups, include from pygments.lexers.agile import Python3Lexer @@ -1356,71 +1357,98 @@ def on_lscolors_change(key, oldvalue, newvalue, **kwargs): events.on_lscolors_change(on_lscolors_change) -def color_file(file_path: str, mode: int) -> (Color, str): - """Determine color to use for file as ls -c would, given stat() results and its name. +def color_file(file_path: str, path_stat: os.stat_result) -> (Color, str): + """Determine color to use for file *approximately* as ls --color would, + given lstat() results and its path. Parameters ---------- - file_path : string + file_path: relative path of file (as user typed it). - mode : int - stat() results for file_path. + path_stat: + lstat() results for file_path. Returns ------- - color token, color_key + color token, color_key Notes ----- + * implementation follows one authority: + https://github.com/coreutils/coreutils/blob/master/src/ls.c#L4879 + * except: - * doesn't handle CA (capability) - * doesn't handle LS TARGET mapping - + 1. does not return 'mi'. That's the color ls uses to show the (missing) *target* of a symlink + (in ls -l, not ls). + 2. in dircolors, setting type code to '0 or '00' bypasses that test and proceeds to others. + In our implementation, setting code to '00' paints the file with no color. + This is arguably a bug. """ lsc = builtins.__xonsh__.env["LS_COLORS"] - color_key = "rs" + color_key = "fi" - if stat.S_ISLNK(mode): # must test link before S_ISREG (esp execute) - color_key = "ln" + # if symlink, get info on (final) target + if stat.S_ISLNK(path_stat.st_mode): try: - os.stat(file_path) - except FileNotFoundError: - color_key = "or" - elif stat.S_ISREG(mode): - if stat.S_IMODE(mode) & (stat.S_IXUSR + stat.S_IXGRP + stat.S_IXOTH): - color_key = "ex" - elif ( - mode & stat.S_ISUID - ): # too many tests before we get to the common case -- restructure? + tar_path_stat = os.stat(file_path) # and work with its properties + if lsc.is_target("ln"): # if ln=target + path_stat = tar_path_stat + except FileNotFoundError: # bug always color broken link 'or' + color_key = "or" # early exit + ret_color_token = file_color_tokens.get(color_key, Text) + return ret_color_token, color_key + + mode = path_stat.st_mode + + if stat.S_ISREG(mode): + if mode & stat.S_ISUID: color_key = "su" elif mode & stat.S_ISGID: color_key = "sg" else: - match = color_file_extension_RE.match(file_path) - if match: - ext = "*" + match.group(1) # look for *. coloring - if ext in lsc: - color_key = ext - else: - color_key = "rs" + cap = os_listxattr(file_path, follow_symlinks=False) + if cap and "security.capability" in cap: # protect None return on some OS? + color_key = "ca" + elif stat.S_IMODE(mode) & (stat.S_IXUSR + stat.S_IXGRP + stat.S_IXOTH): + color_key = "ex" + elif path_stat.st_nlink > 1: + color_key = "mh" else: - color_key = "rs" - elif stat.S_ISDIR(mode): # ls -c doesn't colorize sticky or ow if not dirs... - color_key = ("di", "ow", "st", "tw")[ - (mode & stat.S_ISVTX == stat.S_ISVTX) * 2 - + (mode & stat.S_IWOTH == stat.S_IWOTH) - ] - elif stat.S_ISCHR(mode): - color_key = "cd" - elif stat.S_ISBLK(mode): - color_key = "bd" + color_key = "fi" + elif stat.S_ISDIR(mode): # ls --color doesn't colorize sticky or ow if not dirs... + color_key = "di" + if not (ON_WINDOWS): # on Windows, these do not mean what you think they mean. + if (mode & stat.S_ISVTX) and (mode & stat.S_IWOTH): + color_key = "tw" + elif mode & stat.S_IWOTH: + color_key = "ow" + elif mode & stat.S_ISVTX: + color_key = "st" + elif stat.S_ISLNK(mode): + color_key = "ln" elif stat.S_ISFIFO(mode): color_key = "pi" elif stat.S_ISSOCK(mode): color_key = "so" + elif stat.S_ISBLK(mode): + color_key = "bd" + elif stat.S_ISCHR(mode): + color_key = "cd" elif stat.S_ISDOOR(mode): - color_key = "do" # bug missing mapping for FMT based PORT and WHITEOUT ?? + color_key = "do" + else: + color_key = "or" # any other type --> orphan + + # if still normal file -- try color by file extension. + # note: symlink to *. will be colored 'fi' unless the symlink itself + # ends with .. `ls` does the same. Bug-for-bug compatibility! + if color_key == "fi": + match = color_file_extension_RE.match(file_path) + if match: + ext = "*" + match.group(1) # look for *. coloring + if ext in lsc: + color_key = ext ret_color_token = file_color_tokens.get(color_key, Text) @@ -1464,8 +1492,8 @@ def subproc_arg_callback(_, match): yieldVal = Text try: path = os.path.expanduser(text) - mode = (os.lstat(path)).st_mode # lstat() will raise FNF if not a real file - yieldVal, _ = color_file(path, mode) + path_stat = os.lstat(path) # lstat() will raise FNF if not a real file + yieldVal, _ = color_file(path, path_stat) except (FileNotFoundError, OSError): pass diff --git a/xonsh/pytest_plugin.py b/xonsh/pytest_plugin.py index b1d8a592d..8f4836ff8 100644 --- a/xonsh/pytest_plugin.py +++ b/xonsh/pytest_plugin.py @@ -41,7 +41,7 @@ def _limited_traceback(excinfo): def pytest_collect_file(parent, path): if path.ext.lower() == ".xsh" and path.basename.startswith("test_"): - return XshFile(path, parent) + return XshFile.from_parent(parent, fspath=path) class XshFile(pytest.File): @@ -53,8 +53,8 @@ class XshFile(pytest.File): for test_name in tests: obj = getattr(mod, test_name) if hasattr(obj, "__call__"): - yield XshFunction( - name=test_name, parent=self, test_func=obj, test_module=mod + yield XshFunction.from_parent( + self, name=test_name, test_func=obj, test_module=mod ) diff --git a/xonsh/readline_shell.py b/xonsh/readline_shell.py index 43d7cabb8..5ac5b2da5 100644 --- a/xonsh/readline_shell.py +++ b/xonsh/readline_shell.py @@ -21,6 +21,7 @@ import threading import subprocess import collections +import xonsh.completers.tools as xct from xonsh.lazyasd import LazyObject, lazyobject from xonsh.base_shell import BaseShell from xonsh.ansi_colors import ( @@ -281,6 +282,27 @@ def _insert_text_func(s, readline): return inserter +def _render_completions(completions, prefix, prefix_len): + """Render the completions according to the required prefix_len. + + Readline will replace the current prefix with the chosen rendered completion. + """ + chopped = prefix[:-prefix_len] if prefix_len else prefix + + rendered_completions = [] + for comp in completions: + if isinstance(comp, xct.RichCompletion) and comp.prefix_len is not None: + if comp.prefix_len: + comp = prefix[: -comp.prefix_len] + comp + else: + comp = prefix + comp + elif chopped: + comp = chopped + comp + rendered_completions.append(comp) + + return rendered_completions + + DEDENT_TOKENS = LazyObject( lambda: frozenset(["raise", "return", "pass", "break", "continue"]), globals(), @@ -412,11 +434,8 @@ class ReadlineShell(BaseShell, cmd.Cmd): completions, l = self.completer.complete( prefix, line, begidx, endidx, ctx=self.ctx ) - chopped = prefix[:-l] - if chopped: - rtn_completions = [chopped + i for i in completions] - else: - rtn_completions = completions + rtn_completions = _render_completions(completions, prefix, l) + rtn = [] prefix_begs_quote = prefix.startswith("'") or prefix.startswith('"') prefix_ends_quote = prefix.endswith("'") or prefix.endswith('"') diff --git a/xonsh/replay.py b/xonsh/replay.py deleted file mode 100644 index 526a866d6..000000000 --- a/xonsh/replay.py +++ /dev/null @@ -1,145 +0,0 @@ -# -*- coding: utf-8 -*- -"""Tools to replay xonsh history files.""" -import json -import time -import builtins -import collections.abc as cabc - -from xonsh.tools import swap -from xonsh.lazyjson import LazyJSON -from xonsh.environ import Env -import xonsh.history.main as xhm - - -DEFAULT_MERGE_ENVS = ("replay", "native") - - -class Replayer(object): - """Replays a xonsh history file.""" - - def __init__(self, f, reopen=True): - """ - Parameters - ---------- - f : file handle or str - Path to xonsh history file. - reopen : bool, optional - Whether new file handle should be opened for each load, passed directly into - LazyJSON class. - """ - self._lj = LazyJSON(f, reopen=reopen) - - def __del__(self): - self._lj.close() - - def replay(self, merge_envs=DEFAULT_MERGE_ENVS, target=None): - """Replays the history specified, returns the history object where the code - was executed. - - Parameters - ---------- - merge_env : tuple of str or Mappings, optional - Describes how to merge the environments, in order of increasing precedence. - Available strings are 'replay' and 'native'. The 'replay' env comes from the - history file that we are replaying. The 'native' env comes from what this - instance of xonsh was started up with. Instead of a string, a dict or other - mapping may be passed in as well. Defaults to ('replay', 'native'). - target : str, optional - Path to new history file. - """ - shell = builtins.__xonsh__.shell - re_env = self._lj["env"].load() - new_env = self._merge_envs(merge_envs, re_env) - new_hist = xhm.construct_history( - env=new_env.detype(), - locked=True, - ts=[time.time(), None], - gc=False, - filename=target, - ) - with swap(builtins.__xonsh__, "env", new_env), swap( - builtins.__xonsh__, "history", new_hist - ): - for cmd in self._lj["cmds"]: - inp = cmd["inp"] - shell.default(inp) - if builtins.__xonsh__.exit: # prevent premature exit - builtins.__xonsh__.exit = False - new_hist.flush(at_exit=True) - return new_hist - - def _merge_envs(self, merge_envs, re_env): - new_env = {} - for e in merge_envs: - if e == "replay": - new_env.update(re_env) - elif e == "native": - new_env.update(builtins.__xonsh__.env) - elif isinstance(e, cabc.Mapping): - new_env.update(e) - else: - raise TypeError("Type of env not understood: {0!r}".format(e)) - new_env = Env(**new_env) - return new_env - - -_REPLAY_PARSER = None - - -def replay_create_parser(p=None): - global _REPLAY_PARSER - p_was_none = p is None - if _REPLAY_PARSER is not None and p_was_none: - return _REPLAY_PARSER - if p_was_none: - from argparse import ArgumentParser - - p = ArgumentParser("replay", description="replays a xonsh history file") - p.add_argument( - "--merge-envs", - dest="merge_envs", - default=DEFAULT_MERGE_ENVS, - nargs="+", - help="Describes how to merge the environments, in order of " - "increasing precedence. Available strings are 'replay' and " - "'native'. The 'replay' env comes from the history file that we " - "are replaying. The 'native' env comes from what this instance " - "of xonsh was started up with. One or more of these options may " - "be passed in. Defaults to '--merge-envs replay native'.", - ) - p.add_argument( - "--json", - dest="json", - default=False, - action="store_true", - help="print history info in JSON format", - ) - p.add_argument( - "-o", "--target", dest="target", default=None, help="path to new history file" - ) - p.add_argument("path", help="path to replay history file") - if p_was_none: - _REPLAY_PARSER = p - return p - - -def replay_main_action(h, ns, stdout=None, stderr=None): - replayer = Replayer(ns.path) - hist = replayer.replay(merge_envs=ns.merge_envs, target=ns.target) - print("----------------------------------------------------------------") - print("Just replayed history, new history has the following information") - print("----------------------------------------------------------------") - data = hist.info() - if ns.json: - s = json.dumps(data) - print(s, file=stdout) - else: - lines = ["{0}: {1}".format(k, v) for k, v in data.items()] - print("\n".join(lines), file=stdout) - - -def replay_main(args, stdin=None): - """Acts as main function for replaying a xonsh history file.""" - parser = replay_create_parser() - ns = parser.parse_args(args) - replay_main_action(ns) diff --git a/xonsh/tokenize.py b/xonsh/tokenize.py index dc25c6b9c..b6d3dfcef 100644 --- a/xonsh/tokenize.py +++ b/xonsh/tokenize.py @@ -7,9 +7,6 @@ version 2), which provides tokenization help for Python programs. It is modified to properly tokenize xonsh code, including backtick regex path and several xonsh-specific operators. -A few pieces of this file are specific to the version of Python being used. -To find these pieces, search the PY35. - Original file credits: __author__ = 'Ka-Ping Yee ' __credits__ = ('GvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, ' @@ -113,7 +110,7 @@ __all__ = token.__all__ + [ "DOLLARNAME", "IOREDIRECT", ] -HAS_ASYNC = (3, 5, 0) <= PYTHON_VERSION_INFO < (3, 7, 0) +HAS_ASYNC = PYTHON_VERSION_INFO < (3, 7, 0) if HAS_ASYNC: ASYNC = token.ASYNC AWAIT = token.AWAIT @@ -121,10 +118,8 @@ if HAS_ASYNC: else: ADDSPACE_TOKS = (NAME, NUMBER) del token # must clean up token -PY35 = (3, 5, 0) <= PYTHON_VERSION_INFO + AUGASSIGN_OPS = r"[+\-*/%&@|^=<>]=?" -if not PY35: - AUGASSIGN_OPS = AUGASSIGN_OPS.replace("@", "") COMMENT = N_TOKENS diff --git a/xonsh/tools.py b/xonsh/tools.py index 0715f4bc3..1974d0702 100644 --- a/xonsh/tools.py +++ b/xonsh/tools.py @@ -48,7 +48,6 @@ from xonsh.platform import ( DEFAULT_ENCODING, ON_LINUX, ON_WINDOWS, - PYTHON_VERSION_INFO, expanduser, os_environ, pygments_version_info, @@ -775,15 +774,6 @@ def _yield_accessible_unix_file_names(path): def _executables_in_posix(path): if not os.path.exists(path): return - elif PYTHON_VERSION_INFO < (3, 5, 0): - for fname in os.listdir(path): - fpath = os.path.join(path, fname) - if ( - os.path.exists(fpath) - and os.access(fpath, os.X_OK) - and (not os.path.isdir(fpath)) - ): - yield fname else: yield from _yield_accessible_unix_file_names(path) @@ -792,32 +782,24 @@ def _executables_in_windows(path): if not os.path.isdir(path): return extensions = builtins.__xonsh__.env["PATHEXT"] - if PYTHON_VERSION_INFO < (3, 5, 0): - for fname in os.listdir(path): - fpath = os.path.join(path, fname) - if os.path.exists(fpath) and not os.path.isdir(fpath): - base_name, ext = os.path.splitext(fname) - if ext.upper() in extensions: - yield fname - else: - try: - for x in scandir(path): - try: - is_file = x.is_file() - except OSError: - continue - if is_file: - fname = x.name - else: - continue - base_name, ext = os.path.splitext(fname) - if ext.upper() in extensions: - yield fname - except FileNotFoundError: - # On Windows, there's no guarantee for the directory to really - # exist even if isdir returns True. This may happen for instance - # if the path contains trailing spaces. - return + try: + for x in scandir(path): + try: + is_file = x.is_file() + except OSError: + continue + if is_file: + fname = x.name + else: + continue + base_name, ext = os.path.splitext(fname) + if ext.upper() in extensions: + yield fname + except FileNotFoundError: + # On Windows, there's no guarantee for the directory to really + # exist even if isdir returns True. This may happen for instance + # if the path contains trailing spaces. + return def executables_in(path): @@ -1208,10 +1190,7 @@ def to_logfile_opt(x): the filepath if it is a writable file or None if the filepath is not valid, informing the user on stderr about the invalid choice. """ - superclass = pathlib.PurePath - if PYTHON_VERSION_INFO >= (3, 6, 0): - superclass = os.PathLike - if isinstance(x, superclass): + if isinstance(x, os.PathLike): x = str(x) if is_logfile_opt(x): return x @@ -2146,9 +2125,9 @@ def expandvars(path): for match in POSIX_ENVVAR_REGEX.finditer(path): name = match.group("envvar") if name in env: - ensurer = env.get_ensurer(name) + detyper = env.get_detyper(name) val = env[name] - value = str(val) if ensurer.detype is None else ensurer.detype(val) + value = str(val) if detyper is None else detyper(val) value = str(val) if value is None else value path = POSIX_ENVVAR_REGEX.sub(value, path, count=1) return path @@ -2258,37 +2237,21 @@ def _iglobpath(s, ignore_case=False, sort_result=None, include_dotfiles=None): include_dotfiles = builtins.__xonsh__.env.get("DOTGLOB") if ignore_case: s = expand_case_matching(s) - if sys.version_info > (3, 5): - if "**" in s and "**/*" not in s: - s = s.replace("**", "**/*") - if include_dotfiles: - dotted_s, dotmodified = _dotglobstr(s) - # `recursive` is only a 3.5+ kwarg. - if sort_result: - paths = glob.glob(s, recursive=True) - if include_dotfiles and dotmodified: - paths.extend(glob.iglob(dotted_s, recursive=True)) - paths.sort() - paths = iter(paths) - else: - paths = glob.iglob(s, recursive=True) - if include_dotfiles and dotmodified: - paths = itertools.chain(glob.iglob(dotted_s, recursive=True), paths) - return paths, s + if "**" in s and "**/*" not in s: + s = s.replace("**", "**/*") + if include_dotfiles: + dotted_s, dotmodified = _dotglobstr(s) + if sort_result: + paths = glob.glob(s, recursive=True) + if include_dotfiles and dotmodified: + paths.extend(glob.iglob(dotted_s, recursive=True)) + paths.sort() + paths = iter(paths) else: - if include_dotfiles: - dotted_s, dotmodified = _dotglobstr(s) - if sort_result: - paths = glob.glob(s) - if include_dotfiles and dotmodified: - paths.extend(glob.iglob(dotted_s)) - paths.sort() - paths = iter(paths) - else: - paths = glob.iglob(s) - if include_dotfiles and dotmodified: - paths = itertools.chain(glob.iglob(dotted_s), paths) - return paths, s + paths = glob.iglob(s, recursive=True) + if include_dotfiles and dotmodified: + paths = itertools.chain(glob.iglob(dotted_s, recursive=True), paths) + return paths, s def iglobpath(s, ignore_case=False, sort_result=None, include_dotfiles=None): diff --git a/xonsh/tracer.py b/xonsh/tracer.py index cae4692c9..e20b55cbb 100644 --- a/xonsh/tracer.py +++ b/xonsh/tracer.py @@ -7,11 +7,12 @@ import argparse import linecache import importlib import functools +from inspect import getouterframes from xonsh.lazyasd import LazyObject from xonsh.platform import HAS_PYGMENTS from xonsh.tools import DefaultNotGiven, print_color, normabspath, to_bool -from xonsh.inspectors import find_file, getouterframes +from xonsh.inspectors import find_file from xonsh.lazyimps import pygments, pyghooks from xonsh.proc import STDOUT_CAPTURE_KINDS import xonsh.prompt.cwd as prompt diff --git a/xonsh/xonfig.py b/xonsh/xonfig.py index a9495e72b..a8dca8a41 100644 --- a/xonsh/xonfig.py +++ b/xonsh/xonfig.py @@ -184,8 +184,8 @@ def _dump_xonfig_foreign_shell(path, value): def _dump_xonfig_env(path, value): name = os.path.basename(path.rstrip("/")) - ensurer = builtins.__xonsh__.env.get_ensurer(name) - dval = str(value) if ensurer.detype is None else ensurer.detype(value) + detyper = builtins.__xonsh__.env.get_detyper(name) + dval = str(value) if detyper is None else detyper(value) dval = str(value) if dval is None else dval return "${name} = {val!r}".format(name=name, val=dval) @@ -314,11 +314,11 @@ def make_envvar(name): docstr=_wrap_paragraphs(vd.docstr, width=69), ) mnode = wiz.Message(message=msg) - ens = env.get_ensurer(name) + converter = env.get_converter(name) path = "/env/" + name pnode = wiz.StoreNonEmpty( ENVVAR_PROMPT, - converter=ens.convert, + converter=converter, show_conversion=True, path=path, retry=True, diff --git a/xonsh/xontribs.json b/xonsh/xontribs.json index fe574f0b1..322d33eb7 100644 --- a/xonsh/xontribs.json +++ b/xonsh/xontribs.json @@ -131,7 +131,7 @@ }, {"name": "fzf-widgets", "package": "xontrib-fzf-widgets", - "url": "https://github.com/shahinism/xontrib-fzf-widgets", + "url": "https://github.com/laloch/xontrib-fzf-widgets", "description": ["Adds some fzf widgets to your xonsh shell."] }, {"name": "histcpy", @@ -145,7 +145,7 @@ {"name": "jedi", "package": "xonsh", "url": "http://xon.sh", - "description": ["Jedi tab completion hooks for xonsh."] + "description": ["Use Jedi as xonsh's python completer."] }, {"name": "kitty", "package": "xontrib-kitty", @@ -164,6 +164,11 @@ "description": ["Get identifiers, names, paths, URLs and words from the previous command output ", "and use them for the next command."] }, + {"name": "pdb", + "package": "xonsh", + "url": "http://xon.sh", + "description": ["Simple built-in debugger. Runs pdb on reception of SIGUSR1 signal."] + }, {"name": "powerline", "package": "xontrib-powerline", "url": "https://github.com/santagada/xontrib-powerline", @@ -239,6 +244,11 @@ "bit of the startup time when running your favorite, minimal ", "text editor."] }, + {"name": "xpg", + "package": "xontrib-xpg", + "url": "https://github.com/fengttt/xsh/py", + "description": ["Run/plot/explain sql query for PostgreSQL."] + }, {"name": "z", "package": "xontrib-z", "url": "https://github.com/astronouth7303/xontrib-z", @@ -327,7 +337,7 @@ }, "xontrib-fzf-widgets": { "license": "GPLv3", - "url": "https://github.com/shahinism/xontrib-fzf-widgets", + "url": "https://github.com/laloch/xontrib-fzf-widgets", "install": { "pip": "xpip install xontrib-fzf-widgets" } @@ -403,6 +413,13 @@ "pip": "xpip install xontrib-thefuck" } }, + "xontrib-xpg": { + "license": "Apache", + "url": "https://github.com/fengttt/xsh/py", + "install": { + "pip": "xpip install xontrib-xpg" + } + }, "xontrib-z": { "license": "GPLv3", "url": "https://github.com/astronouth7303/xontrib-z", diff --git a/xonsh/xontribs.py b/xonsh/xontribs.py index e63a002bd..eb4ba4345 100644 --- a/xonsh/xontribs.py +++ b/xonsh/xontribs.py @@ -8,7 +8,14 @@ import functools import importlib import importlib.util -from xonsh.tools import print_color, unthreadable +from enum import IntEnum +from xonsh.tools import print_color, print_exception, unthreadable + + +class ExitCode(IntEnum): + OK = 0 + NOT_FOUND = 1 + INIT_FAILED = 2 def find_xontrib(name): @@ -59,10 +66,10 @@ def update_context(name, ctx=None): """ if ctx is None: ctx = builtins.__xonsh__.ctx - if not hasattr(update_context, "bad_imports"): - update_context.bad_imports = [] modctx = xontrib_context(name) if modctx is None: + if not hasattr(update_context, "bad_imports"): + update_context.bad_imports = [] update_context.bad_imports.append(name) return ctx return ctx.update(modctx) @@ -109,18 +116,25 @@ def xontrib_metadata(): def xontribs_load(names, verbose=False): """Load xontribs from a list of names""" ctx = builtins.__xonsh__.ctx + res = ExitCode.OK for name in names: if verbose: print("loading xontrib {0!r}".format(name)) - update_context(name, ctx=ctx) - if update_context.bad_imports: + try: + update_context(name, ctx=ctx) + except Exception: + res = ExitCode.INIT_FAILED + print_exception("Failed to load xontrib {}.".format(name)) + if hasattr(update_context, "bad_imports"): + res = ExitCode.NOT_FOUND prompt_xontrib_install(update_context.bad_imports) del update_context.bad_imports + return res def _load(ns): """load xontribs""" - xontribs_load(ns.names, verbose=ns.verbose) + return xontribs_load(ns.names, verbose=ns.verbose) def _list(ns): diff --git a/xonsh/xoreutils/_which.py b/xonsh/xoreutils/_which.py index 159135f33..583b0aaf1 100644 --- a/xonsh/xoreutils/_which.py +++ b/xonsh/xoreutils/_which.py @@ -314,7 +314,7 @@ def main(argv): ["help", "all", "version", "verbose", "quiet", "path=", "exts="], ) except getopt.GetoptErrsor as msg: - sys.stderr.write("which: error: %s. Your invocation was: %s\n" % (msg, argv)) + sys.stderr.write(f"which: error: {msg}. Your invocation was: {argv}\n") sys.stderr.write("Try 'which --help'.\n") return 1 for opt, optarg in optlist: @@ -352,7 +352,7 @@ def main(argv): arg, path=altpath, verbose=verbose, exts=exts ): if verbose: - print("%s (%s)" % (absName, fromWhere)) + print(f"{absName} ({fromWhere})") else: print(absName) nmatches += 1 diff --git a/xonsh/xoreutils/cat.py b/xonsh/xoreutils/cat.py index af45554a8..742b6293b 100644 --- a/xonsh/xoreutils/cat.py +++ b/xonsh/xoreutils/cat.py @@ -47,10 +47,10 @@ def _cat_single_file(opts, fname, stdin, out, err, line_count=1): if fname == "-": f = stdin or sys.stdin elif os.path.isdir(fname): - print("cat: {}: Is a directory.".format(fname), file=err) + print(f"cat: {fname}: Is a directory.", file=err) return True, line_count elif not os.path.exists(fname): - print("cat: No such file or directory: {}".format(fname), file=err) + print(f"cat: No such file or directory: {fname}", file=err) return True, line_count else: file_size = os.stat(fname).st_size diff --git a/xonsh/xoreutils/tee.py b/xonsh/xoreutils/tee.py index b9541c4fb..d7fc748bd 100644 --- a/xonsh/xoreutils/tee.py +++ b/xonsh/xoreutils/tee.py @@ -27,7 +27,7 @@ def tee(args, stdin, stdout, stderr): try: files.append(open(i, mode)) except: - print("tee: failed to open {}".format(i), file=stderr) + print(f"tee: failed to open {i}", file=stderr) errors = True files.append(stdout) diff --git a/xonsh/xoreutils/tty.py b/xonsh/xoreutils/tty.py index 0640029cd..4453eea0c 100644 --- a/xonsh/xoreutils/tty.py +++ b/xonsh/xoreutils/tty.py @@ -16,7 +16,7 @@ def tty(args, stdin, stdout, stderr): if len(args) > 0: if not silent: for i in args: - print("tty: Invalid option: {}".format(i), file=stderr) + print(f"tty: Invalid option: {i}", file=stderr) print("Try 'tty --help' for more information", file=stderr) return 2 try: diff --git a/xonsh/xoreutils/ulimit.py b/xonsh/xoreutils/ulimit.py new file mode 100644 index 000000000..ef801879d --- /dev/null +++ b/xonsh/xoreutils/ulimit.py @@ -0,0 +1,323 @@ +"""An ulimit implementation for xonsh.""" +import resource +from xonsh.tools import print_exception + +# all the resource types we know +_UL_RES = { + # short option + "c": ( + # resource id or None if unsupported + getattr(resource, "RLIMIT_CORE", None), + # long option text + "--core-size", + # help + "the maximum size of core files created.\n By setting this limit to zero, core dumps can be disabled.", + # short description used in multiline output + "core file size", + # resource units + "blocks", + ), + "d": ( + getattr(resource, "RLIMIT_DATA", None), + "--data-size", + "the maximum size of a process' data segment", + "data seg size", + "kbytes", + ), + "e": ( + getattr(resource, "RLIMIT_NICE", None), + "--nice", + "the maximum scheduling priority (`nice')", + "scheduling priority", + "", + ), + "f": ( + getattr(resource, "RLIMIT_FSIZE", None), + "--file-size", + "the maximum size of files created by the shell and its children", + "file size", + "blocks", + ), + "i": ( + getattr(resource, "RLIMIT_SIGPENDING", None), + "--signals-pending", + "the maximum number of pending signals", + "pending signals", + "", + ), + "l": ( + getattr(resource, "RLIMIT_MEMLOCK", None), + "--lock-size", + "the maximum size a process may lock into memory", + "max locked memory", + "kbytes", + ), + "m": ( + getattr(resource, "RLIMIT_RSS", None), + "--resident-set-size", + "the maximum resident set size.", + "max RSS memory", + "kbytes", + ), + "n": ( + getattr(resource, "RLIMIT_NOFILE", None), + "--file-descriptor-count", + "the maximum number of open file descriptors", + "open files", + "", + ), + "q": ( + getattr(resource, "RLIMIT_MSGQUEUE", None), + "--queue-size", + "the number of bytes that can be allocated for POSIX message queues", + "POSIX message queues", + "bytes", + ), + "r": ( + getattr(resource, "RLIMIT_RTPRIO", None), + "--rt-prio", + "the maximum real-time scheduling priority", + "real-time priority", + "", + ), + "s": ( + getattr(resource, "RLIMIT_STACK", None), + "--stack-size", + "the maximum stack size", + "stack size", + "kbytes", + ), + "t": ( + getattr(resource, "RLIMIT_CPU", None), + "--cpu-time", + "the maximum amount of CPU time in seconds", + "CPU time", + "seconds", + ), + "u": ( + getattr(resource, "RLIMIT_NPROC", None), + "--process-count", + "the maximum number of processes available to a single user", + "max user processes", + "", + ), + "v": ( + getattr(resource, "RLIMIT_AS", None), + "--virtual-memory-size", + "the maximum amount of virtual memory available to the shell", + "virtual memory", + "kbytes", + ), +} + +_UL_SOFT = 1 +_UL_HARD = 2 +_UL_BOTH = _UL_SOFT | _UL_HARD + + +def _ul_set(res, soft=None, hard=None, **kwargs): + """Set resource limit""" + if soft == "unlimited": + soft = resource.RLIM_INFINITY + if hard == "unlimited": + hard = resource.RLIM_INFINITY + if soft is None or hard is None or isinstance(soft, str) or isinstance(hard, str): + current_soft, current_hard = resource.getrlimit(res) + if soft in (None, "soft"): + soft = current_soft + elif soft == "hard": + soft = current_hard + if hard in (None, "hard"): + hard = current_hard + elif hard == "soft": + hard = current_soft + + resource.setrlimit(res, (soft, hard)) + + +def _ul_show(res, res_type, desc, unit, opt, long=False, **kwargs): + """Print out resource limit""" + limit = resource.getrlimit(res)[1 if res_type == _UL_HARD else 0] + str_limit = "unlimited" if limit == resource.RLIM_INFINITY else str(limit) + # format line to mimic bash + if long: + pre = "{:21} {:>14} ".format( + desc, "({}{})".format((unit + ", -") if unit else "-", opt) + ) + else: + pre = "" + print(f"{pre}{str_limit}", file=kwargs["stdout"]) + + +def _ul_add_action(actions, opt, res_type, stderr): + """Create new and append it to the actions list""" + r = _UL_RES[opt] + if r[0] is None: + _ul_unsupported_opt(opt, stderr) + return False + # we always assume the 'show' action to be requested and eventually change it later + actions.append( + [ + _ul_show, + { + "res": r[0], + "res_type": res_type, + "desc": r[3], + "unit": r[4], + "opt": opt, + }, + ] + ) + return True + + +def _ul_add_all_actions(actions, res_type, stderr): + """Add all supported resources; handles (-a, --all)""" + for k in _UL_RES: + if _UL_RES[k][0] is None: + continue + _ul_add_action(actions, k, res_type, stderr) + + +def _ul_unknown_opt(arg, stderr): + """Print an invalid option message to stderr""" + print(f"ulimit: Invalid option: {arg}", file=stderr, flush=True) + print("Try 'ulimit --help' for more information", file=stderr, flush=True) + + +def _ul_unsupported_opt(opt, stderr): + """Print an unsupported option message to stderr""" + print(f"ulimit: Unsupported option: -{opt}", file=stderr, flush=True) + print("Try 'ulimit --help' for more information", file=stderr, flush=True) + + +def _ul_parse_args(args, stderr): + """Parse arguments and return a list of actions to be performed""" + if len(args) == 1 and args[0] in ("-h", "--help"): + return (True, []) + + long_opts = {} + for k in _UL_RES: + long_opts[_UL_RES[k][1]] = k + + actions = [] + # mimic bash and default to 'hard' limits + res_type = _UL_HARD + for arg in args: + if arg in long_opts: + opt = long_opts[arg] + if not _ul_add_action(actions, opt, res_type, stderr): + return (False, []) + elif arg == "--all": + _ul_add_all_actions(actions, res_type, stderr) + elif arg == "--soft": + res_type = _UL_SOFT + elif arg == "--hard": + res_type = _UL_HARD + elif arg[0] == "-": + for opt in arg[1:]: + if opt == "a": + _ul_add_all_actions(actions, res_type, stderr) + elif opt in _UL_RES: + if not _ul_add_action(actions, opt, res_type, stderr): + return (False, []) + elif opt == "S": + res_type = _UL_SOFT + elif opt == "H": + res_type = _UL_HARD + else: + _ul_unknown_opt(arg, stderr) + return (False, []) + # this is a request to change limit selected by the previous argument; change the last action to _ul_set + elif arg.isnumeric() or (arg in ("unlimited", "hard", "soft")): + if arg.isnumeric(): + limit = int(arg) + else: + limit = arg + # mimic bash and default to '-f' if no resource was specified + if not actions: + if not _ul_add_action(actions, "f", res_type, stderr): + return (False, []) + a = actions[-1] + a[0] = _ul_set + a[1]["soft"] = limit if (_UL_SOFT & res_type) else None + a[1]["hard"] = limit if (_UL_HARD & res_type) else None + else: + _ul_unknown_opt(arg, stderr) + return (False, []) + else: + # mimic bash and default to '-f' if no resource was specified + if not actions: + if not _ul_add_action(actions, "f", res_type, stderr): + return (False, []) + + return (True, actions) + + +def _ul_show_usage(file): + """Print out our help""" + print("Usage: ulimit [-h] [-SH] [-a] [-", end="", file=file) + print("".join([k for k in _UL_RES]), end="", file=file) + print("] [LIMIT]\n", file=file) + print( + """Set or get shell resource limits. + +Provides control over the resources available to the shell and processes it +creates, on systems that allow such control. + +Options:""", + file=file, + ) + print("-h, --help\n show this help message and exit", file=file) + print( + "-S, --soft\n use the 'soft' resource limit for the following arguments", + file=file, + ) + print( + "-H, --hard\n use the 'hard' resource limit for the following arguments (default)", + file=file, + ) + print("-a, --all\n show all current limits", file=file) + + for k in _UL_RES: + r = _UL_RES[k] + opts = "-{}, {}".format(k, r[1]) + if r[0] is None: + opts += " (unsupported)" + print("{}\n {}".format(opts, r[2]), file=file) + + print( + """ +Not all options are available on all platforms. + +If LIMIT is given, it is the new value of the specified resource; the special +LIMIT values `soft', `hard', and `unlimited' stand for the current soft limit, +the current hard limit, and no limit, respectively. Otherwise, the current +value of the specified resource is printed. If no option is given, then -f is +assumed. +""", + file=file, + ) + + +def ulimit(args, stdin, stdout, stderr): + """An ulimit implementation""" + rc, actions = _ul_parse_args(args, stderr) + + # could not parse arguments; message already printed to stderr + if not rc: + return 1 + # args OK, but nothing to do; print help + elif not actions: + _ul_show_usage(stdout) + return 0 + + # if there's more than one resource to be printed, use the long format + long = len([a for a in actions if a[0] == _ul_show]) > 1 + try: + for fn, args in actions: + fn(stdout=stdout, long=long, **args) + return 0 + except: + print_exception() + return 2 diff --git a/xonsh/xoreutils/umask.py b/xonsh/xoreutils/umask.py index 93bd274e3..c28e8e4f2 100644 --- a/xonsh/xoreutils/umask.py +++ b/xonsh/xoreutils/umask.py @@ -68,7 +68,8 @@ def get_symbolic_rep_single(digit): def get_symbolic_rep(number): digits = get_oct_digits(number) return ",".join( - "%s=%s" % (class_, get_symbolic_rep_single(digits[class_])) for class_ in "ugo" + "{}={}".format(class_, get_symbolic_rep_single(digits[class_])) + for class_ in "ugo" ) diff --git a/xonsh/xoreutils/uptime.py b/xonsh/xoreutils/uptime.py index 669d07383..a97f6a28c 100644 --- a/xonsh/xoreutils/uptime.py +++ b/xonsh/xoreutils/uptime.py @@ -47,10 +47,10 @@ def _uptime_linux(): """Returns uptime in seconds or None, on Linux.""" # With procfs try: - with open("/proc/uptime", "r") as f: + with open("/proc/uptime") as f: up = float(f.readline().split()[0]) return up - except (IOError, ValueError): + except (OSError, ValueError): pass buf = ctypes.create_string_buffer(128) # 64 suffices on 32-bit, whatever. if xp.LIBC.sysinfo(buf) < 0: @@ -65,12 +65,12 @@ def _boottime_linux(): """A way to figure out the boot time directly on Linux.""" global _BOOTTIME try: - with open("/proc/stat", "r") as f: + with open("/proc/stat") as f: for line in f: if line.startswith("btime"): _BOOTTIME = float(line.split()[1]) return _BOOTTIME - except (IOError, IndexError): + except (OSError, IndexError): return None @@ -121,10 +121,10 @@ def _uptime_bsd(): def _uptime_minix(): """Returns uptime in seconds or None, on MINIX.""" try: - with open("/proc/uptime", "r") as f: + with open("/proc/uptime") as f: up = float(f.read()) return up - except (IOError, ValueError): + except (OSError, ValueError): return None @@ -139,10 +139,10 @@ def _uptime_plan9(): # senting nanoseconds since start of epoch, clock ticks, and # clock frequency. # -- cons(3) - with open("/dev/time", "r") as f: + with open("/dev/time") as f: s, ns, ct, cf = f.read().split() return float(ct) / float(cf) - except (IOError, ValueError): + except (OSError, ValueError): return None diff --git a/xonsh/xoreutils/which.py b/xonsh/xoreutils/which.py index 6dbf89f83..2ef8b2976 100644 --- a/xonsh/xoreutils/which.py +++ b/xonsh/xoreutils/which.py @@ -34,7 +34,7 @@ def _which_create_parser(): "-V", "--version", action="version", - version="{}".format(_which.__version__), + version=f"{_which.__version__}", help="Display the version of the python which module " "used by xonsh", ) parser.add_argument( @@ -90,7 +90,7 @@ def print_path(abs_name, from_where, stdout, verbose=False, captured=False): if builtins.__xonsh__.env.get("FORCE_POSIX_PATHS", False): abs_name.replace(os.sep, os.altsep) if verbose: - print("{} ({})".format(abs_name, from_where), file=stdout) + print(f"{abs_name} ({from_where})", file=stdout) else: end = "" if captured else "\n" print(abs_name, end=end, file=stdout) diff --git a/xontrib/abbrevs.py b/xontrib/abbrevs.py index fa1d575df..22f6be0ed 100644 --- a/xontrib/abbrevs.py +++ b/xontrib/abbrevs.py @@ -16,8 +16,12 @@ builtins.__xonsh__.abbrevs = dict() proxy = DynamicAccessProxy("abbrevs", "__xonsh__.abbrevs") setattr(builtins, "abbrevs", proxy) +last_expanded = None + def expand_abbrev(buffer): + global last_expanded + last_expanded = None abbrevs = getattr(builtins, "abbrevs", None) if abbrevs is None: return @@ -30,6 +34,26 @@ def expand_abbrev(buffer): return buffer.delete_before_cursor(count=len(word)) buffer.insert_text(abbrevs[word]) + last_expanded = word + + +def revert_abbrev(buffer): + global last_expanded + if last_expanded is None: + return False + abbrevs = getattr(builtins, "abbrevs", None) + if abbrevs is None: + return False + if last_expanded not in abbrevs.keys(): + return False + document = buffer.document + expansion = abbrevs[last_expanded] + " " + if not document.text_before_cursor.endswith(expansion): + return False + buffer.delete_before_cursor(count=len(expansion)) + buffer.insert_text(last_expanded) + last_expanded = None + return True @events.on_ptk_create @@ -44,7 +68,8 @@ def custom_keybindings(bindings, **kw): @handler(" ", filter=IsMultiline() & insert_mode) def handle_space(event): buffer = event.app.current_buffer - expand_abbrev(buffer) + if not revert_abbrev(buffer): + expand_abbrev(buffer) buffer.insert_text(" ") @handler( diff --git a/xontrib/jedi.xsh b/xontrib/jedi.xsh index a5f6e1371..53ca13512 100644 --- a/xontrib/jedi.xsh +++ b/xontrib/jedi.xsh @@ -1,51 +1,144 @@ -"""Jedi-based completer for Python-mode.""" -import builtins -import importlib +"""Use Jedi as xonsh's python completer.""" +import itertools +import xonsh from xonsh.lazyasd import lazyobject, lazybool - +from xonsh.completers.tools import ( + get_filter_function, + get_ptk_completer, + RichCompletion, +) __all__ = () - -@lazybool -def HAS_JEDI(): - """``True`` if `jedi` is available, else ``False``.""" - spec = importlib.util.find_spec('jedi') - return (spec is not None) +# an error will be printed in xontribs +# if jedi isn't installed +import jedi @lazyobject -def jedi(): - if HAS_JEDI: - import jedi as m +def PTK_COMPLETER(): + return get_ptk_completer() + + +@lazybool +def JEDI_NEW_API(): + if hasattr(jedi, "__version__"): + return tuple(map(int, jedi.__version__.split("."))) >= (0, 16, 0) else: - m = None - return m + return False + + +@lazyobject +def XONSH_SPECIAL_TOKENS(): + return { + "?", + "??", + "$(", + "${", + "$[", + "![", + "!(", + "@(", + "@$(", + "@", + } def complete_jedi(prefix, line, start, end, ctx): - """Jedi-based completer for Python-mode.""" - if not HAS_JEDI: - return set() - src = builtins.__xonsh__.shell.shell.accumulated_inputs + line - script = jedi.api.Interpreter(src, [ctx], column=end) + """Completes python code using Jedi and xonsh operators""" + + # if this is the first word and it's a known command, don't complete. + # taken from xonsh/completers/python.py + if line.lstrip() != "": + first = line.split(maxsplit=1)[0] + if prefix == first and first in __xonsh__.commands_cache and first not in ctx: + return set() + + filter_func = get_filter_function() + jedi.settings.case_insensitive_completion = not __xonsh__.env.get( + "CASE_SENSITIVE_COMPLETIONS" + ) + + if PTK_COMPLETER: # 'is not None' won't work with lazyobject + document = PTK_COMPLETER.current_document + source = document.text + row = document.cursor_position_row + 1 + column = document.cursor_position_col + else: + source = line + row = 1 + column = end + + extra_ctx = {"__xonsh__": __xonsh__} + try: + extra_ctx['_'] = _ + except NameError: + pass + + if JEDI_NEW_API: + script = jedi.Interpreter(source, [ctx, extra_ctx]) + else: + script = jedi.Interpreter(source, [ctx, extra_ctx], line=row, + column=column) + script_comp = set() try: - script_comp = script.completions() + if JEDI_NEW_API: + script_comp = script.complete(row, column) + else: + script_comp = script.completions() except Exception: pass - if builtins.__xonsh__.env.get('CASE_SENSITIVE_COMPLETIONS'): - rtn = {x.name_with_symbols for x in script_comp - if x.name_with_symbols.startswith(prefix)} - else: - rtn = {x.name_with_symbols for x in script_comp} - return rtn + # make sure _* names are completed only when + # the user writes the first underscore + complete_underscores = prefix.endswith("_") + + return set( + itertools.chain( + ( + create_completion(comp) + for comp in script_comp + if complete_underscores or + not comp.name.startswith('_') or + not comp.complete.startswith("_") + ), + (t for t in XONSH_SPECIAL_TOKENS if filter_func(t, prefix)), + ) + ) -# register the completer -builtins.__xonsh__.ctx['complete_jedi'] = complete_jedi -completer add jedi complete_jedi end +def create_completion(comp): + """Create a RichCompletion from a Jedi Completion object""" + comp_type = None + description = None + + if comp.type != "instance": + sigs = comp.get_signatures() + if sigs: + comp_type = comp.type + description = sigs[0].to_string() + if comp_type is None: + # jedi doesn't know exactly what this is + inf = comp.infer() + if inf: + comp_type = inf[0].type + description = inf[0].description + + display = comp.name + ("()" if comp_type == "function" else "") + description = description or comp.type + + return RichCompletion( + comp.complete, display=display, description=description, prefix_len=0 + ) + + +# monkey-patch the original python completer in 'base'. +xonsh.completers.base.complete_python = complete_jedi + +# Jedi ignores leading '@(' and friends completer remove python_mode -del builtins.__xonsh__.ctx['complete_jedi'] + +completer add jedi_python complete_jedi '